diff --git a/feeds/luci.index b/feeds/luci.index new file mode 120000 index 0000000..9367096 --- /dev/null +++ b/feeds/luci.index @@ -0,0 +1 @@ +luci.tmp/.packageinfo \ No newline at end of file diff --git a/feeds/luci.targetindex b/feeds/luci.targetindex new file mode 120000 index 0000000..4dfbe44 --- /dev/null +++ b/feeds/luci.targetindex @@ -0,0 +1 @@ +luci.tmp/.targetinfo \ No newline at end of file diff --git a/feeds/luci.tmp/.host.mk b/feeds/luci.tmp/.host.mk new file mode 100644 index 0000000..b4f695f --- /dev/null +++ b/feeds/luci.tmp/.host.mk @@ -0,0 +1,4 @@ +HOST_OS:=Linux +HOST_ARCH:=x86_64 +GNU_HOST_NAME:=x86_64-redhat-linux +FIND_L=find -L $(1) diff --git a/feeds/luci.tmp/.packageinfo b/feeds/luci.tmp/.packageinfo new file mode 100644 index 0000000..beec1e5 --- /dev/null +++ b/feeds/luci.tmp/.packageinfo @@ -0,0 +1,21120 @@ +Source-Makefile: feeds/luci/applications/luci-app-adblock/Makefile +Package: luci-app-adblock +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +adblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI support for Adblock +Maintainer: +Source: +Type: ipkg +Description: LuCI support for Adblock + +@@ + +Package: luci-i18n-adblock-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-adblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-adblock - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-adblock - 普通话 (Chinese) + +@@ + +Package: luci-i18n-adblock-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-adblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-adblock - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-adblock - Svenska (Swedish) + +@@ + +Package: luci-i18n-adblock-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-adblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-adblock - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-adblock - 日本語 (Japanese) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-ahcp/Makefile +Package: luci-app-ahcp +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ahcpd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for AHCPd +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for AHCPd + +@@ + +Package: luci-i18n-ahcp-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-ahcp-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Magyar (Hungarian) + +@@ + +Package: luci-i18n-ahcp-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Português (Portuguese) + +@@ + +Package: luci-i18n-ahcp-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Norsk (Norwegian) + +@@ + +Package: luci-i18n-ahcp-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - English + +@@ + +Package: luci-i18n-ahcp-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Polski (Polish) + +@@ + +Package: luci-i18n-ahcp-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-ahcp-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Русский (Russian) + +@@ + +Package: luci-i18n-ahcp-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-ahcp-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-ahcp-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Română (Romanian) + +@@ + +Package: luci-i18n-ahcp-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-ahcp-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - 普通话 (Chinese) + +@@ + +Package: luci-i18n-ahcp-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Deutsch (German) + +@@ + +Package: luci-i18n-ahcp-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-ahcp-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Türkçe (Turkish) + +@@ + +Package: luci-i18n-ahcp-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Svenska (Swedish) + +@@ + +Package: luci-i18n-ahcp-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - 日本語 (Japanese) + +@@ + +Package: luci-i18n-ahcp-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-ahcp-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Català (Catalan) + +@@ + +Package: luci-i18n-ahcp-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Español (Spanish) + +@@ + +Package: luci-i18n-ahcp-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-ahcp-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Čeština (Czech) + +@@ + +Package: luci-i18n-ahcp-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Français (French) + +@@ + +Package: luci-i18n-ahcp-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-aria2/Makefile +Package: luci-app-aria2 +Submenu: 3. Applications +Version: 1.0.1-2 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +aria2 +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Aria2 +Maintainer: Hsing-Wang Liao +Source: +License: Apache-2.0 +Type: ipkg +Description: LuCI Support for Aria2 +Hsing-Wang Liao +@@ +Config: +# shown in make menuconfig +help + LuCI Support for Aria2 + . + Version: 1.0.1-2 + Hsing-Wang Liao +@@ + +Package: luci-i18n-aria2-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: 1.0.1-2 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-aria2 +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-aria2 - zh-cn translation +Maintainer: Hsing-Wang Liao +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-aria2 - 普通话 (Chinese) +Hsing-Wang Liao +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-asterisk/Makefile +Package: luci-app-asterisk +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Asterisk +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Asterisk + +@@ + +Package: luci-i18n-asterisk-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-asterisk-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Magyar (Hungarian) + +@@ + +Package: luci-i18n-asterisk-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Português (Portuguese) + +@@ + +Package: luci-i18n-asterisk-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Norsk (Norwegian) + +@@ + +Package: luci-i18n-asterisk-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - English + +@@ + +Package: luci-i18n-asterisk-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Polski (Polish) + +@@ + +Package: luci-i18n-asterisk-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-asterisk-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Русский (Russian) + +@@ + +Package: luci-i18n-asterisk-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-asterisk-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-asterisk-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Română (Romanian) + +@@ + +Package: luci-i18n-asterisk-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-asterisk-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - 普通话 (Chinese) + +@@ + +Package: luci-i18n-asterisk-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Deutsch (German) + +@@ + +Package: luci-i18n-asterisk-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-asterisk-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Türkçe (Turkish) + +@@ + +Package: luci-i18n-asterisk-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Svenska (Swedish) + +@@ + +Package: luci-i18n-asterisk-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - 日本語 (Japanese) + +@@ + +Package: luci-i18n-asterisk-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-asterisk-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Català (Catalan) + +@@ + +Package: luci-i18n-asterisk-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Español (Spanish) + +@@ + +Package: luci-i18n-asterisk-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-asterisk-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Čeština (Czech) + +@@ + +Package: luci-i18n-asterisk-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Français (French) + +@@ + +Package: luci-i18n-asterisk-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-commands/Makefile +Package: luci-app-commands +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Shell Command Module +Maintainer: +Source: +Type: ipkg +Description: LuCI Shell Command Module + +@@ + +Package: luci-i18n-commands-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-commands-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Magyar (Hungarian) + +@@ + +Package: luci-i18n-commands-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Português (Portuguese) + +@@ + +Package: luci-i18n-commands-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Norsk (Norwegian) + +@@ + +Package: luci-i18n-commands-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - English + +@@ + +Package: luci-i18n-commands-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Polski (Polish) + +@@ + +Package: luci-i18n-commands-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-commands-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Русский (Russian) + +@@ + +Package: luci-i18n-commands-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-commands-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-commands-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Română (Romanian) + +@@ + +Package: luci-i18n-commands-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-commands-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - 普通话 (Chinese) + +@@ + +Package: luci-i18n-commands-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Deutsch (German) + +@@ + +Package: luci-i18n-commands-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-commands-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Türkçe (Turkish) + +@@ + +Package: luci-i18n-commands-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Svenska (Swedish) + +@@ + +Package: luci-i18n-commands-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - 日本語 (Japanese) + +@@ + +Package: luci-i18n-commands-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-commands-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Català (Catalan) + +@@ + +Package: luci-i18n-commands-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Español (Spanish) + +@@ + +Package: luci-i18n-commands-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-commands-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Čeština (Czech) + +@@ + +Package: luci-i18n-commands-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Français (French) + +@@ + +Package: luci-i18n-commands-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-coovachilli/Makefile +Package: luci-app-coovachilli +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Coova Chilli +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Coova Chilli + +@@ + +Package: luci-i18n-coovachilli-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-coovachilli-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Magyar (Hungarian) + +@@ + +Package: luci-i18n-coovachilli-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Português (Portuguese) + +@@ + +Package: luci-i18n-coovachilli-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Norsk (Norwegian) + +@@ + +Package: luci-i18n-coovachilli-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - English + +@@ + +Package: luci-i18n-coovachilli-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Polski (Polish) + +@@ + +Package: luci-i18n-coovachilli-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-coovachilli-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Русский (Russian) + +@@ + +Package: luci-i18n-coovachilli-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-coovachilli-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-coovachilli-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Română (Romanian) + +@@ + +Package: luci-i18n-coovachilli-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-coovachilli-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - 普通话 (Chinese) + +@@ + +Package: luci-i18n-coovachilli-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Deutsch (German) + +@@ + +Package: luci-i18n-coovachilli-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-coovachilli-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Türkçe (Turkish) + +@@ + +Package: luci-i18n-coovachilli-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Svenska (Swedish) + +@@ + +Package: luci-i18n-coovachilli-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - 日本語 (Japanese) + +@@ + +Package: luci-i18n-coovachilli-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-coovachilli-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Català (Catalan) + +@@ + +Package: luci-i18n-coovachilli-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Español (Spanish) + +@@ + +Package: luci-i18n-coovachilli-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-coovachilli-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Čeština (Czech) + +@@ + +Package: luci-i18n-coovachilli-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Français (French) + +@@ + +Package: luci-i18n-coovachilli-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-ddns/Makefile +Package: luci-app-ddns +Submenu: 3. Applications +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-mod-admin-full +ddns-scripts +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Dynamic DNS Client (ddns-scripts) +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Description: LuCI Support for Dynamic DNS Client (ddns-scripts) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - hu translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Magyar (Hungarian) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - pt translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Português (Portuguese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-no +Default: LUCI_LANG_no||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - no translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Norsk (Norwegian) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - pl translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Polski (Polish) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - uk translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - украї́нська (Ukrainian) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - ru translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Русский (Russian) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - vi translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Tiếng Việt (Vietnamese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-he +Default: LUCI_LANG_he||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - he translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - עִבְרִית (Hebrew) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - ro translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Română (Romanian) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - zh-cn translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - 普通话 (Chinese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-de +Default: LUCI_LANG_de||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - de translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Deutsch (German) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - zh-tw translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - 臺灣華語 (Taiwanese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - tr translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Türkçe (Turkish) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - ja translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - 日本語 (Japanese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-el +Default: LUCI_LANG_el||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - el translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Ελληνικά (Greek) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - ca translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Català (Catalan) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-es +Default: LUCI_LANG_es||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - es translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Español (Spanish) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - pt-br translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Português do Brasil (Brazialian Portuguese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - cs translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Čeština (Czech) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - fr translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Français (French) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-it +Default: LUCI_LANG_it||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - it translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Italiano (Italian) +Christian Schoenebeck +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-diag-core/Makefile +Package: luci-app-diag-core +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Diagnostics Tools (Core) +Maintainer: +Source: +Type: ipkg +Description: LuCI Diagnostics Tools (Core) + +@@ + +Package: luci-i18n-diag-core-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-diag-core-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Magyar (Hungarian) + +@@ + +Package: luci-i18n-diag-core-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Português (Portuguese) + +@@ + +Package: luci-i18n-diag-core-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Norsk (Norwegian) + +@@ + +Package: luci-i18n-diag-core-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - English + +@@ + +Package: luci-i18n-diag-core-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Polski (Polish) + +@@ + +Package: luci-i18n-diag-core-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-diag-core-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Русский (Russian) + +@@ + +Package: luci-i18n-diag-core-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-diag-core-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-diag-core-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Română (Romanian) + +@@ + +Package: luci-i18n-diag-core-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-diag-core-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - 普通话 (Chinese) + +@@ + +Package: luci-i18n-diag-core-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Deutsch (German) + +@@ + +Package: luci-i18n-diag-core-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-diag-core-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Türkçe (Turkish) + +@@ + +Package: luci-i18n-diag-core-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Svenska (Swedish) + +@@ + +Package: luci-i18n-diag-core-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - 日本語 (Japanese) + +@@ + +Package: luci-i18n-diag-core-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-diag-core-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Català (Catalan) + +@@ + +Package: luci-i18n-diag-core-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Español (Spanish) + +@@ + +Package: luci-i18n-diag-core-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-diag-core-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Čeština (Czech) + +@@ + +Package: luci-i18n-diag-core-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Français (French) + +@@ + +Package: luci-i18n-diag-core-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-diag-devinfo/Makefile +Package: luci-app-diag-devinfo +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-diag-core +smap +netdiscover +mac-to-devinfo +httping +smap-to-devinfo +netdiscover-to-devinfo @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Diagnostics Tools (Device Info) +Maintainer: +Source: +Type: ipkg +Description: LuCI Diagnostics Tools (Device Info) + +@@ + +Package: luci-i18n-diag-devinfo-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-diag-devinfo-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Magyar (Hungarian) + +@@ + +Package: luci-i18n-diag-devinfo-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Português (Portuguese) + +@@ + +Package: luci-i18n-diag-devinfo-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Norsk (Norwegian) + +@@ + +Package: luci-i18n-diag-devinfo-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - English + +@@ + +Package: luci-i18n-diag-devinfo-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Polski (Polish) + +@@ + +Package: luci-i18n-diag-devinfo-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-diag-devinfo-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Русский (Russian) + +@@ + +Package: luci-i18n-diag-devinfo-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-diag-devinfo-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-diag-devinfo-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Română (Romanian) + +@@ + +Package: luci-i18n-diag-devinfo-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-diag-devinfo-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - 普通话 (Chinese) + +@@ + +Package: luci-i18n-diag-devinfo-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Deutsch (German) + +@@ + +Package: luci-i18n-diag-devinfo-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-diag-devinfo-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Türkçe (Turkish) + +@@ + +Package: luci-i18n-diag-devinfo-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Svenska (Swedish) + +@@ + +Package: luci-i18n-diag-devinfo-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - 日本語 (Japanese) + +@@ + +Package: luci-i18n-diag-devinfo-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-diag-devinfo-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Català (Catalan) + +@@ + +Package: luci-i18n-diag-devinfo-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Español (Spanish) + +@@ + +Package: luci-i18n-diag-devinfo-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-diag-devinfo-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Čeština (Czech) + +@@ + +Package: luci-i18n-diag-devinfo-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Français (French) + +@@ + +Package: luci-i18n-diag-devinfo-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-dump1090/Makefile +Package: luci-app-dump1090 +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +dump1090 +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for dump1090 +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for dump1090 + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-dynapoint/Makefile +Package: luci-app-dynapoint +Submenu: 3. Applications +Version: 1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +dynapoint +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for DynaPoint +Maintainer: Tobias Ilte +Source: +License: GPL-3.0+ +Type: ipkg +Description: LuCI Support for DynaPoint +Tobias Ilte +@@ + +Package: luci-i18n-dynapoint-de +Default: LUCI_LANG_de||(ALL&&m) +Version: 1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-dynapoint +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-dynapoint - de translation +Maintainer: Tobias Ilte +Source: +License: GPL-3.0+ +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-dynapoint - Deutsch (German) +Tobias Ilte +@@ + +Package: luci-i18n-dynapoint-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: 1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-dynapoint +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-dynapoint - ja translation +Maintainer: Tobias Ilte +Source: +License: GPL-3.0+ +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-dynapoint - 日本語 (Japanese) +Tobias Ilte +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-firewall/Makefile +Package: luci-app-firewall +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Firewall and Portforwarding application +Maintainer: +Source: +Type: ipkg +Description: Firewall and Portforwarding application + +@@ + +Package: luci-i18n-firewall-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-firewall-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Magyar (Hungarian) + +@@ + +Package: luci-i18n-firewall-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Português (Portuguese) + +@@ + +Package: luci-i18n-firewall-ko +Default: LUCI_LANG_ko||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ko translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - 한국어 (Korean) + +@@ + +Package: luci-i18n-firewall-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - English + +@@ + +Package: luci-i18n-firewall-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Polski (Polish) + +@@ + +Package: luci-i18n-firewall-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-firewall-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Русский (Russian) + +@@ + +Package: luci-i18n-firewall-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-firewall-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-firewall-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Norsk (Norwegian) + +@@ + +Package: luci-i18n-firewall-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-firewall-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - 普通话 (Chinese) + +@@ + +Package: luci-i18n-firewall-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Română (Romanian) + +@@ + +Package: luci-i18n-firewall-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Deutsch (German) + +@@ + +Package: luci-i18n-firewall-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-firewall-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Türkçe (Turkish) + +@@ + +Package: luci-i18n-firewall-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Svenska (Swedish) + +@@ + +Package: luci-i18n-firewall-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - 日本語 (Japanese) + +@@ + +Package: luci-i18n-firewall-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-firewall-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Català (Catalan) + +@@ + +Package: luci-i18n-firewall-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Español (Spanish) + +@@ + +Package: luci-i18n-firewall-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-firewall-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Čeština (Czech) + +@@ + +Package: luci-i18n-firewall-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Français (French) + +@@ + +Package: luci-i18n-firewall-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-freifunk-diagnostics/Makefile +Package: luci-app-freifunk-diagnostics +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Tools for network diagnosis like traceroute and ping +Maintainer: +Source: +Type: ipkg +Description: Tools for network diagnosis like traceroute and ping + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-freifunk-policyrouting/Makefile +Package: luci-app-freifunk-policyrouting +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Policy routing for mesh traffic +Maintainer: +Source: +Type: ipkg +Description: Policy routing for mesh traffic + +@@ + +Package: luci-i18n-freifunk-policyrouting-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-freifunk-policyrouting-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Magyar (Hungarian) + +@@ + +Package: luci-i18n-freifunk-policyrouting-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Português (Portuguese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Norsk (Norwegian) + +@@ + +Package: luci-i18n-freifunk-policyrouting-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - English + +@@ + +Package: luci-i18n-freifunk-policyrouting-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Polski (Polish) + +@@ + +Package: luci-i18n-freifunk-policyrouting-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-freifunk-policyrouting-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Русский (Russian) + +@@ + +Package: luci-i18n-freifunk-policyrouting-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-freifunk-policyrouting-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Română (Romanian) + +@@ + +Package: luci-i18n-freifunk-policyrouting-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-freifunk-policyrouting-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - 普通话 (Chinese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Deutsch (German) + +@@ + +Package: luci-i18n-freifunk-policyrouting-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Türkçe (Turkish) + +@@ + +Package: luci-i18n-freifunk-policyrouting-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Svenska (Swedish) + +@@ + +Package: luci-i18n-freifunk-policyrouting-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - 日本語 (Japanese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-freifunk-policyrouting-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Català (Catalan) + +@@ + +Package: luci-i18n-freifunk-policyrouting-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Español (Spanish) + +@@ + +Package: luci-i18n-freifunk-policyrouting-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Čeština (Czech) + +@@ + +Package: luci-i18n-freifunk-policyrouting-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Français (French) + +@@ + +Package: luci-i18n-freifunk-policyrouting-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-freifunk-widgets/Makefile +Package: luci-app-freifunk-widgets +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Widgets for the Freifunk index page +Maintainer: +Source: +Type: ipkg +Description: Widgets for the Freifunk index page + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-fwknopd/Makefile +Package: luci-app-fwknopd +Submenu: 3. Applications +Version: 1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +fwknopd +qrencode +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Fwknopd config - web config for the firewall knock daemon +Maintainer: Jonathan Bennett +Source: +License: GPLv2 +Type: ipkg +Description: Fwknopd config - web config for the firewall knock daemon +Jonathan Bennett +@@ + +Package: luci-i18n-fwknopd-en +Default: LUCI_LANG_en||(ALL&&m) +Version: 1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-fwknopd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-fwknopd - en translation +Maintainer: Jonathan Bennett +Source: +License: GPLv2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-fwknopd - English +Jonathan Bennett +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-hd-idle/Makefile +Package: luci-app-hd-idle +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Hard Disk Idle Spin-Down module +Maintainer: +Source: +Type: ipkg +Description: Hard Disk Idle Spin-Down module + +@@ + +Package: luci-i18n-hd-idle-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-hd-idle-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Magyar (Hungarian) + +@@ + +Package: luci-i18n-hd-idle-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Português (Portuguese) + +@@ + +Package: luci-i18n-hd-idle-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Norsk (Norwegian) + +@@ + +Package: luci-i18n-hd-idle-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - English + +@@ + +Package: luci-i18n-hd-idle-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Polski (Polish) + +@@ + +Package: luci-i18n-hd-idle-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-hd-idle-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Русский (Russian) + +@@ + +Package: luci-i18n-hd-idle-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-hd-idle-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-hd-idle-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Română (Romanian) + +@@ + +Package: luci-i18n-hd-idle-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-hd-idle-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - 普通话 (Chinese) + +@@ + +Package: luci-i18n-hd-idle-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Deutsch (German) + +@@ + +Package: luci-i18n-hd-idle-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-hd-idle-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Türkçe (Turkish) + +@@ + +Package: luci-i18n-hd-idle-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Svenska (Swedish) + +@@ + +Package: luci-i18n-hd-idle-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - 日本語 (Japanese) + +@@ + +Package: luci-i18n-hd-idle-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-hd-idle-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Català (Catalan) + +@@ + +Package: luci-i18n-hd-idle-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Español (Spanish) + +@@ + +Package: luci-i18n-hd-idle-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-hd-idle-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Čeština (Czech) + +@@ + +Package: luci-i18n-hd-idle-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Français (French) + +@@ + +Package: luci-i18n-hd-idle-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-ltqtapi/Makefile +Package: luci-app-ltqtapi +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Lantiq Devices +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Lantiq Devices + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-meshwizard/Makefile +Package: luci-app-meshwizard +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Shellscript based wizard to setup mesh networks +Maintainer: +Source: +Type: ipkg +Description: Shellscript based wizard to setup mesh networks + +@@ + +Package: luci-i18n-meshwizard-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-meshwizard-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Magyar (Hungarian) + +@@ + +Package: luci-i18n-meshwizard-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Português (Portuguese) + +@@ + +Package: luci-i18n-meshwizard-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Norsk (Norwegian) + +@@ + +Package: luci-i18n-meshwizard-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - English + +@@ + +Package: luci-i18n-meshwizard-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Polski (Polish) + +@@ + +Package: luci-i18n-meshwizard-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-meshwizard-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Русский (Russian) + +@@ + +Package: luci-i18n-meshwizard-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-meshwizard-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-meshwizard-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Română (Romanian) + +@@ + +Package: luci-i18n-meshwizard-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-meshwizard-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - 普通话 (Chinese) + +@@ + +Package: luci-i18n-meshwizard-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Deutsch (German) + +@@ + +Package: luci-i18n-meshwizard-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-meshwizard-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Türkçe (Turkish) + +@@ + +Package: luci-i18n-meshwizard-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Svenska (Swedish) + +@@ + +Package: luci-i18n-meshwizard-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - 日本語 (Japanese) + +@@ + +Package: luci-i18n-meshwizard-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-meshwizard-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Català (Catalan) + +@@ + +Package: luci-i18n-meshwizard-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Español (Spanish) + +@@ + +Package: luci-i18n-meshwizard-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-meshwizard-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Čeština (Czech) + +@@ + +Package: luci-i18n-meshwizard-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Français (French) + +@@ + +Package: luci-i18n-meshwizard-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-minidlna/Makefile +Package: luci-app-minidlna +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for miniDLNA +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for miniDLNA + +@@ + +Package: luci-i18n-minidlna-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-minidlna-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Magyar (Hungarian) + +@@ + +Package: luci-i18n-minidlna-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Português (Portuguese) + +@@ + +Package: luci-i18n-minidlna-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Norsk (Norwegian) + +@@ + +Package: luci-i18n-minidlna-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - English + +@@ + +Package: luci-i18n-minidlna-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Polski (Polish) + +@@ + +Package: luci-i18n-minidlna-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-minidlna-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Русский (Russian) + +@@ + +Package: luci-i18n-minidlna-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-minidlna-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-minidlna-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Română (Romanian) + +@@ + +Package: luci-i18n-minidlna-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-minidlna-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - 普通话 (Chinese) + +@@ + +Package: luci-i18n-minidlna-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Deutsch (German) + +@@ + +Package: luci-i18n-minidlna-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-minidlna-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Türkçe (Turkish) + +@@ + +Package: luci-i18n-minidlna-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Svenska (Swedish) + +@@ + +Package: luci-i18n-minidlna-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - 日本語 (Japanese) + +@@ + +Package: luci-i18n-minidlna-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-minidlna-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Català (Catalan) + +@@ + +Package: luci-i18n-minidlna-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Español (Spanish) + +@@ + +Package: luci-i18n-minidlna-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-minidlna-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Čeština (Czech) + +@@ + +Package: luci-i18n-minidlna-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Français (French) + +@@ + +Package: luci-i18n-minidlna-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-mjpg-streamer/Makefile +Package: luci-app-mjpg-streamer +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +mjpg-streamer +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: MJPG-Streamer service configuration module +Maintainer: +Source: +Type: ipkg +Description: MJPG-Streamer service configuration module + +@@ + +Package: luci-i18n-mjpg-streamer-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mjpg-streamer +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mjpg-streamer - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mjpg-streamer - 普通话 (Chinese) + +@@ + +Package: luci-i18n-mjpg-streamer-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mjpg-streamer +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mjpg-streamer - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mjpg-streamer - 日本語 (Japanese) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-mmc-over-gpio/Makefile +Package: luci-app-mmc-over-gpio +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +kmod-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: MMC-over-GPIO configuration module +Maintainer: +Source: +Type: ipkg +Description: MMC-over-GPIO configuration module + +@@ + +Package: luci-i18n-mmc-over-gpio-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-mmc-over-gpio-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Magyar (Hungarian) + +@@ + +Package: luci-i18n-mmc-over-gpio-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Português (Portuguese) + +@@ + +Package: luci-i18n-mmc-over-gpio-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Norsk (Norwegian) + +@@ + +Package: luci-i18n-mmc-over-gpio-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - English + +@@ + +Package: luci-i18n-mmc-over-gpio-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Polski (Polish) + +@@ + +Package: luci-i18n-mmc-over-gpio-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-mmc-over-gpio-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Русский (Russian) + +@@ + +Package: luci-i18n-mmc-over-gpio-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-mmc-over-gpio-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-mmc-over-gpio-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Română (Romanian) + +@@ + +Package: luci-i18n-mmc-over-gpio-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-mmc-over-gpio-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - 普通话 (Chinese) + +@@ + +Package: luci-i18n-mmc-over-gpio-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Deutsch (German) + +@@ + +Package: luci-i18n-mmc-over-gpio-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-mmc-over-gpio-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Türkçe (Turkish) + +@@ + +Package: luci-i18n-mmc-over-gpio-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Svenska (Swedish) + +@@ + +Package: luci-i18n-mmc-over-gpio-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - 日本語 (Japanese) + +@@ + +Package: luci-i18n-mmc-over-gpio-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-mmc-over-gpio-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Català (Catalan) + +@@ + +Package: luci-i18n-mmc-over-gpio-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Español (Spanish) + +@@ + +Package: luci-i18n-mmc-over-gpio-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-mmc-over-gpio-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Čeština (Czech) + +@@ + +Package: luci-i18n-mmc-over-gpio-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Français (French) + +@@ + +Package: luci-i18n-mmc-over-gpio-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-multiwan/Makefile +Package: luci-app-multiwan +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +multiwan @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for the OpenWrt MultiWAN agent (obsoleted by mwan3) +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for the OpenWrt MultiWAN agent (obsoleted by mwan3) + +@@ + +Package: luci-i18n-multiwan-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-multiwan-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Magyar (Hungarian) + +@@ + +Package: luci-i18n-multiwan-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Português (Portuguese) + +@@ + +Package: luci-i18n-multiwan-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Norsk (Norwegian) + +@@ + +Package: luci-i18n-multiwan-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - English + +@@ + +Package: luci-i18n-multiwan-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Polski (Polish) + +@@ + +Package: luci-i18n-multiwan-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-multiwan-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Русский (Russian) + +@@ + +Package: luci-i18n-multiwan-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-multiwan-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-multiwan-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Română (Romanian) + +@@ + +Package: luci-i18n-multiwan-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-multiwan-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - 普通话 (Chinese) + +@@ + +Package: luci-i18n-multiwan-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Deutsch (German) + +@@ + +Package: luci-i18n-multiwan-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-multiwan-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Türkçe (Turkish) + +@@ + +Package: luci-i18n-multiwan-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Svenska (Swedish) + +@@ + +Package: luci-i18n-multiwan-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - 日本語 (Japanese) + +@@ + +Package: luci-i18n-multiwan-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-multiwan-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Català (Catalan) + +@@ + +Package: luci-i18n-multiwan-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Español (Spanish) + +@@ + +Package: luci-i18n-multiwan-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-multiwan-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Čeština (Czech) + +@@ + +Package: luci-i18n-multiwan-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Français (French) + +@@ + +Package: luci-i18n-multiwan-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-ntpc/Makefile +Package: luci-app-ntpc +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ntpclient +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: NTP time synchronisation configuration module +Maintainer: +Source: +Type: ipkg +Description: NTP time synchronisation configuration module + +@@ + +Package: luci-i18n-ntpc-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-ntpc-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Magyar (Hungarian) + +@@ + +Package: luci-i18n-ntpc-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Português (Portuguese) + +@@ + +Package: luci-i18n-ntpc-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Norsk (Norwegian) + +@@ + +Package: luci-i18n-ntpc-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - English + +@@ + +Package: luci-i18n-ntpc-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Polski (Polish) + +@@ + +Package: luci-i18n-ntpc-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-ntpc-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Русский (Russian) + +@@ + +Package: luci-i18n-ntpc-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-ntpc-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-ntpc-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Română (Romanian) + +@@ + +Package: luci-i18n-ntpc-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-ntpc-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - 普通话 (Chinese) + +@@ + +Package: luci-i18n-ntpc-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Deutsch (German) + +@@ + +Package: luci-i18n-ntpc-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-ntpc-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Türkçe (Turkish) + +@@ + +Package: luci-i18n-ntpc-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Svenska (Swedish) + +@@ + +Package: luci-i18n-ntpc-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - 日本語 (Japanese) + +@@ + +Package: luci-i18n-ntpc-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-ntpc-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Català (Catalan) + +@@ + +Package: luci-i18n-ntpc-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Español (Spanish) + +@@ + +Package: luci-i18n-ntpc-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-ntpc-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Čeština (Czech) + +@@ + +Package: luci-i18n-ntpc-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Français (French) + +@@ + +Package: luci-i18n-ntpc-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-ocserv/Makefile +Package: luci-app-ocserv +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ocserv +certtool +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for OpenConnect VPN +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for OpenConnect VPN + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-olsr/Makefile +Package: luci-app-olsr +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +olsrd +olsrd-mod-jsoninfo +luci-lib-luaneightbl +luci-lib-json +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: OLSR configuration and status module +Maintainer: +Source: +Type: ipkg +Description: OLSR configuration and status module + +@@ + +Package: luci-i18n-olsr-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-olsr-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Magyar (Hungarian) + +@@ + +Package: luci-i18n-olsr-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Português (Portuguese) + +@@ + +Package: luci-i18n-olsr-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Norsk (Norwegian) + +@@ + +Package: luci-i18n-olsr-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - English + +@@ + +Package: luci-i18n-olsr-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Polski (Polish) + +@@ + +Package: luci-i18n-olsr-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-olsr-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Русский (Russian) + +@@ + +Package: luci-i18n-olsr-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-olsr-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-olsr-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Română (Romanian) + +@@ + +Package: luci-i18n-olsr-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-olsr-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - 普通话 (Chinese) + +@@ + +Package: luci-i18n-olsr-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Deutsch (German) + +@@ + +Package: luci-i18n-olsr-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-olsr-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Türkçe (Turkish) + +@@ + +Package: luci-i18n-olsr-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Svenska (Swedish) + +@@ + +Package: luci-i18n-olsr-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - 日本語 (Japanese) + +@@ + +Package: luci-i18n-olsr-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-olsr-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Català (Catalan) + +@@ + +Package: luci-i18n-olsr-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Español (Spanish) + +@@ + +Package: luci-i18n-olsr-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-olsr-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Čeština (Czech) + +@@ + +Package: luci-i18n-olsr-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Français (French) + +@@ + +Package: luci-i18n-olsr-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-olsr-services/Makefile +Package: luci-app-olsr-services +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-olsr +olsrd +olsrd-mod-nameservice +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Show services announced with the nameservice plugin +Maintainer: +Source: +Type: ipkg +Description: Show services announced with the nameservice plugin + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-olsr-viz/Makefile +Package: luci-app-olsr-viz +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-olsr +olsrd +olsrd-mod-txtinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: OLSR Visualisation +Maintainer: +Source: +Type: ipkg +Description: OLSR Visualisation + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-openvpn/Makefile +Package: luci-app-openvpn +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for OpenVPN +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for OpenVPN + +@@ + +Package: luci-i18n-openvpn-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-openvpn-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Magyar (Hungarian) + +@@ + +Package: luci-i18n-openvpn-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Português (Portuguese) + +@@ + +Package: luci-i18n-openvpn-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Norsk (Norwegian) + +@@ + +Package: luci-i18n-openvpn-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - English + +@@ + +Package: luci-i18n-openvpn-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Polski (Polish) + +@@ + +Package: luci-i18n-openvpn-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-openvpn-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Русский (Russian) + +@@ + +Package: luci-i18n-openvpn-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-openvpn-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-openvpn-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Română (Romanian) + +@@ + +Package: luci-i18n-openvpn-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-openvpn-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - 普通话 (Chinese) + +@@ + +Package: luci-i18n-openvpn-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Deutsch (German) + +@@ + +Package: luci-i18n-openvpn-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-openvpn-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Türkçe (Turkish) + +@@ + +Package: luci-i18n-openvpn-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Svenska (Swedish) + +@@ + +Package: luci-i18n-openvpn-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - 日本語 (Japanese) + +@@ + +Package: luci-i18n-openvpn-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-openvpn-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Català (Catalan) + +@@ + +Package: luci-i18n-openvpn-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Español (Spanish) + +@@ + +Package: luci-i18n-openvpn-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-openvpn-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Čeština (Czech) + +@@ + +Package: luci-i18n-openvpn-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Français (French) + +@@ + +Package: luci-i18n-openvpn-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-p2pblock/Makefile +Package: luci-app-p2pblock +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-firewall +freifunk-p2pblock @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for the Freifunk P2P-Block addon +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for the Freifunk P2P-Block addon + +@@ + +Package: luci-i18n-p2pblock-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-p2pblock-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Magyar (Hungarian) + +@@ + +Package: luci-i18n-p2pblock-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Português (Portuguese) + +@@ + +Package: luci-i18n-p2pblock-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Norsk (Norwegian) + +@@ + +Package: luci-i18n-p2pblock-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - English + +@@ + +Package: luci-i18n-p2pblock-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Polski (Polish) + +@@ + +Package: luci-i18n-p2pblock-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-p2pblock-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Русский (Russian) + +@@ + +Package: luci-i18n-p2pblock-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-p2pblock-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-p2pblock-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Română (Romanian) + +@@ + +Package: luci-i18n-p2pblock-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-p2pblock-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - 普通话 (Chinese) + +@@ + +Package: luci-i18n-p2pblock-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Deutsch (German) + +@@ + +Package: luci-i18n-p2pblock-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-p2pblock-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Türkçe (Turkish) + +@@ + +Package: luci-i18n-p2pblock-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Svenska (Swedish) + +@@ + +Package: luci-i18n-p2pblock-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - 日本語 (Japanese) + +@@ + +Package: luci-i18n-p2pblock-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-p2pblock-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Català (Catalan) + +@@ + +Package: luci-i18n-p2pblock-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Español (Spanish) + +@@ + +Package: luci-i18n-p2pblock-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-p2pblock-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Čeština (Czech) + +@@ + +Package: luci-i18n-p2pblock-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Français (French) + +@@ + +Package: luci-i18n-p2pblock-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-p910nd/Makefile +Package: luci-app-p910nd +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: p910nd - Printer server module +Maintainer: +Source: +Type: ipkg +Description: p910nd - Printer server module + +@@ + +Package: luci-i18n-p910nd-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-p910nd-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Magyar (Hungarian) + +@@ + +Package: luci-i18n-p910nd-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Português (Portuguese) + +@@ + +Package: luci-i18n-p910nd-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Norsk (Norwegian) + +@@ + +Package: luci-i18n-p910nd-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - English + +@@ + +Package: luci-i18n-p910nd-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Polski (Polish) + +@@ + +Package: luci-i18n-p910nd-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-p910nd-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Русский (Russian) + +@@ + +Package: luci-i18n-p910nd-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-p910nd-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-p910nd-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Română (Romanian) + +@@ + +Package: luci-i18n-p910nd-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-p910nd-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - 普通话 (Chinese) + +@@ + +Package: luci-i18n-p910nd-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Deutsch (German) + +@@ + +Package: luci-i18n-p910nd-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-p910nd-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Türkçe (Turkish) + +@@ + +Package: luci-i18n-p910nd-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Svenska (Swedish) + +@@ + +Package: luci-i18n-p910nd-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - 日本語 (Japanese) + +@@ + +Package: luci-i18n-p910nd-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-p910nd-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Català (Catalan) + +@@ + +Package: luci-i18n-p910nd-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Español (Spanish) + +@@ + +Package: luci-i18n-p910nd-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-p910nd-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Čeština (Czech) + +@@ + +Package: luci-i18n-p910nd-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Français (French) + +@@ + +Package: luci-i18n-p910nd-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-pbx/Makefile +Package: luci-app-pbx +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @BROKEN +asterisk18 +asterisk18-app-authenticate +asterisk18-app-disa +asterisk18-app-setcallerid +asterisk18-app-system +asterisk18-chan-gtalk +asterisk18-codec-a-mu +asterisk18-codec-alaw +asterisk18-func-cut +asterisk18-res-clioriginate +asterisk18-func-channel +asterisk18-chan-local +asterisk18-app-record +asterisk18-app-senddtmf +asterisk18-res-crypto +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI PBX Administration +Maintainer: +Source: +Type: ipkg +Description: LuCI PBX Administration + +@@ + +Package: luci-i18n-pbx-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-pbx-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Magyar (Hungarian) + +@@ + +Package: luci-i18n-pbx-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Português (Portuguese) + +@@ + +Package: luci-i18n-pbx-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Norsk (Norwegian) + +@@ + +Package: luci-i18n-pbx-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - English + +@@ + +Package: luci-i18n-pbx-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Polski (Polish) + +@@ + +Package: luci-i18n-pbx-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-pbx-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Русский (Russian) + +@@ + +Package: luci-i18n-pbx-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-pbx-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-pbx-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Română (Romanian) + +@@ + +Package: luci-i18n-pbx-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-pbx-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - 普通话 (Chinese) + +@@ + +Package: luci-i18n-pbx-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Deutsch (German) + +@@ + +Package: luci-i18n-pbx-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-pbx-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Türkçe (Turkish) + +@@ + +Package: luci-i18n-pbx-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Svenska (Swedish) + +@@ + +Package: luci-i18n-pbx-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - 日本語 (Japanese) + +@@ + +Package: luci-i18n-pbx-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-pbx-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Català (Catalan) + +@@ + +Package: luci-i18n-pbx-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Español (Spanish) + +@@ + +Package: luci-i18n-pbx-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-pbx-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Čeština (Czech) + +@@ + +Package: luci-i18n-pbx-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Français (French) + +@@ + +Package: luci-i18n-pbx-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-pbx-voicemail/Makefile +Package: luci-app-pbx-voicemail +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-pbx +asterisk18 +msmtp +coreutils-base64 @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI PBX Administration Voicemail Support +Maintainer: +Source: +Type: ipkg +Description: LuCI PBX Administration Voicemail Support + +@@ + +Package: luci-i18n-pbx-voicemail-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-pbx-voicemail-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Magyar (Hungarian) + +@@ + +Package: luci-i18n-pbx-voicemail-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Português (Portuguese) + +@@ + +Package: luci-i18n-pbx-voicemail-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Norsk (Norwegian) + +@@ + +Package: luci-i18n-pbx-voicemail-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - English + +@@ + +Package: luci-i18n-pbx-voicemail-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Polski (Polish) + +@@ + +Package: luci-i18n-pbx-voicemail-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-pbx-voicemail-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Русский (Russian) + +@@ + +Package: luci-i18n-pbx-voicemail-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-pbx-voicemail-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-pbx-voicemail-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Română (Romanian) + +@@ + +Package: luci-i18n-pbx-voicemail-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-pbx-voicemail-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - 普通话 (Chinese) + +@@ + +Package: luci-i18n-pbx-voicemail-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Deutsch (German) + +@@ + +Package: luci-i18n-pbx-voicemail-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-pbx-voicemail-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Türkçe (Turkish) + +@@ + +Package: luci-i18n-pbx-voicemail-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Svenska (Swedish) + +@@ + +Package: luci-i18n-pbx-voicemail-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - 日本語 (Japanese) + +@@ + +Package: luci-i18n-pbx-voicemail-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-pbx-voicemail-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Català (Catalan) + +@@ + +Package: luci-i18n-pbx-voicemail-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Español (Spanish) + +@@ + +Package: luci-i18n-pbx-voicemail-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-pbx-voicemail-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Čeština (Czech) + +@@ + +Package: luci-i18n-pbx-voicemail-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Français (French) + +@@ + +Package: luci-i18n-pbx-voicemail-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-polipo/Makefile +Package: luci-app-polipo +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for the Polipo Proxy +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for the Polipo Proxy + +@@ + +Package: luci-i18n-polipo-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-polipo-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Magyar (Hungarian) + +@@ + +Package: luci-i18n-polipo-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Português (Portuguese) + +@@ + +Package: luci-i18n-polipo-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Norsk (Norwegian) + +@@ + +Package: luci-i18n-polipo-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - English + +@@ + +Package: luci-i18n-polipo-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Polski (Polish) + +@@ + +Package: luci-i18n-polipo-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-polipo-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Русский (Russian) + +@@ + +Package: luci-i18n-polipo-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-polipo-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-polipo-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Română (Romanian) + +@@ + +Package: luci-i18n-polipo-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-polipo-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - 普通话 (Chinese) + +@@ + +Package: luci-i18n-polipo-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Deutsch (German) + +@@ + +Package: luci-i18n-polipo-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-polipo-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Türkçe (Turkish) + +@@ + +Package: luci-i18n-polipo-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Svenska (Swedish) + +@@ + +Package: luci-i18n-polipo-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - 日本語 (Japanese) + +@@ + +Package: luci-i18n-polipo-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-polipo-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Català (Catalan) + +@@ + +Package: luci-i18n-polipo-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Español (Spanish) + +@@ + +Package: luci-i18n-polipo-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-polipo-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Čeština (Czech) + +@@ + +Package: luci-i18n-polipo-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Français (French) + +@@ + +Package: luci-i18n-polipo-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-privoxy/Makefile +Package: luci-app-privoxy +Submenu: 3. Applications +Version: 1.0.6-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-mod-admin-full +privoxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Privoxy WEB proxy +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Description: LuCI Support for Privoxy WEB proxy +Christian Schoenebeck +@@ +Config: +# shown in make menuconfig +help + LuCI Support for Privoxy WEB proxy + . + Version: 1.0.6-1 + Christian Schoenebeck +@@ + +Package: luci-i18n-privoxy-de +Default: LUCI_LANG_de||(ALL&&m) +Version: 1.0.6-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-privoxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-privoxy - de translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-privoxy - Deutsch (German) +Christian Schoenebeck +@@ + +Package: luci-i18n-privoxy-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: 1.0.6-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-privoxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-privoxy - zh-cn translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-privoxy - 普通话 (Chinese) +Christian Schoenebeck +@@ + +Package: luci-i18n-privoxy-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: 1.0.6-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-privoxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-privoxy - sv translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-privoxy - Svenska (Swedish) +Christian Schoenebeck +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-qos/Makefile +Package: luci-app-qos +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +qos-scripts +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Quality of Service configuration module +Maintainer: +Source: +Type: ipkg +Description: Quality of Service configuration module + +@@ + +Package: luci-i18n-qos-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-qos-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Magyar (Hungarian) + +@@ + +Package: luci-i18n-qos-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Português (Portuguese) + +@@ + +Package: luci-i18n-qos-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Norsk (Norwegian) + +@@ + +Package: luci-i18n-qos-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - English + +@@ + +Package: luci-i18n-qos-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Polski (Polish) + +@@ + +Package: luci-i18n-qos-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-qos-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Русский (Russian) + +@@ + +Package: luci-i18n-qos-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-qos-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-qos-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Română (Romanian) + +@@ + +Package: luci-i18n-qos-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-qos-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - 普通话 (Chinese) + +@@ + +Package: luci-i18n-qos-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Deutsch (German) + +@@ + +Package: luci-i18n-qos-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-qos-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Türkçe (Turkish) + +@@ + +Package: luci-i18n-qos-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Svenska (Swedish) + +@@ + +Package: luci-i18n-qos-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - 日本語 (Japanese) + +@@ + +Package: luci-i18n-qos-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-qos-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Català (Catalan) + +@@ + +Package: luci-i18n-qos-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Español (Spanish) + +@@ + +Package: luci-i18n-qos-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-qos-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Čeština (Czech) + +@@ + +Package: luci-i18n-qos-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Français (French) + +@@ + +Package: luci-i18n-qos-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-radicale/Makefile +Package: luci-app-radicale +Submenu: 3. Applications +Version: 1.1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-mod-admin-full +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Radicale CardDAV/CalDAV +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Description: LuCI Support for Radicale CardDAV/CalDAV +Christian Schoenebeck +@@ +Config: +# shown in make menuconfig +help + LuCI Support for Radicale CardDAV/CalDAV + . + !!! Package "radicale-py2" or "radicale-py3" needs to be !!! + !!! installed sepearatly. There is no buildin dependency set !!! + . + Version: 1.1.0-1 + Christian Schoenebeck +@@ + +Package: luci-i18n-radicale-de +Default: LUCI_LANG_de||(ALL&&m) +Version: 1.1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radicale +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radicale - de translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radicale - Deutsch (German) +Christian Schoenebeck +@@ + +Package: luci-i18n-radicale-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: 1.1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radicale +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radicale - sv translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radicale - Svenska (Swedish) +Christian Schoenebeck +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-radvd/Makefile +Package: luci-app-radvd +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +radvd @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Radvd +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Radvd + +@@ + +Package: luci-i18n-radvd-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-radvd-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Magyar (Hungarian) + +@@ + +Package: luci-i18n-radvd-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Português (Portuguese) + +@@ + +Package: luci-i18n-radvd-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Norsk (Norwegian) + +@@ + +Package: luci-i18n-radvd-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - English + +@@ + +Package: luci-i18n-radvd-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Polski (Polish) + +@@ + +Package: luci-i18n-radvd-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-radvd-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Русский (Russian) + +@@ + +Package: luci-i18n-radvd-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-radvd-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-radvd-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Română (Romanian) + +@@ + +Package: luci-i18n-radvd-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-radvd-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - 普通话 (Chinese) + +@@ + +Package: luci-i18n-radvd-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Deutsch (German) + +@@ + +Package: luci-i18n-radvd-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-radvd-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Türkçe (Turkish) + +@@ + +Package: luci-i18n-radvd-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Svenska (Swedish) + +@@ + +Package: luci-i18n-radvd-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - 日本語 (Japanese) + +@@ + +Package: luci-i18n-radvd-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-radvd-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Català (Catalan) + +@@ + +Package: luci-i18n-radvd-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Español (Spanish) + +@@ + +Package: luci-i18n-radvd-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-radvd-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Čeština (Czech) + +@@ + +Package: luci-i18n-radvd-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Français (French) + +@@ + +Package: luci-i18n-radvd-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-rp-pppoe-server/Makefile +Package: luci-app-rp-pppoe-server +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +rp-pppoe-server +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Roaring Penguing PPPoE Server +Maintainer: +Source: +Type: ipkg +Description: Roaring Penguing PPPoE Server + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-samba/Makefile +Package: luci-app-samba +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +samba36-server +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Network Shares - Samba SMB/CIFS module +Maintainer: +Source: +Type: ipkg +Description: Network Shares - Samba SMB/CIFS module + +@@ + +Package: luci-i18n-samba-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-samba-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Magyar (Hungarian) + +@@ + +Package: luci-i18n-samba-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Português (Portuguese) + +@@ + +Package: luci-i18n-samba-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Norsk (Norwegian) + +@@ + +Package: luci-i18n-samba-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - English + +@@ + +Package: luci-i18n-samba-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Polski (Polish) + +@@ + +Package: luci-i18n-samba-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-samba-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Русский (Russian) + +@@ + +Package: luci-i18n-samba-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-samba-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-samba-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Română (Romanian) + +@@ + +Package: luci-i18n-samba-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-samba-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - 普通话 (Chinese) + +@@ + +Package: luci-i18n-samba-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Deutsch (German) + +@@ + +Package: luci-i18n-samba-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-samba-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Türkçe (Turkish) + +@@ + +Package: luci-i18n-samba-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Svenska (Swedish) + +@@ + +Package: luci-i18n-samba-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - 日本語 (Japanese) + +@@ + +Package: luci-i18n-samba-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-samba-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Català (Catalan) + +@@ + +Package: luci-i18n-samba-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Español (Spanish) + +@@ + +Package: luci-i18n-samba-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-samba-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Čeština (Czech) + +@@ + +Package: luci-i18n-samba-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Français (French) + +@@ + +Package: luci-i18n-samba-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-shadowsocks-libev/Makefile +Package: luci-app-shadowsocks-libev +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Shadowsocks-libev +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Shadowsocks-libev + +@@ + +Package: luci-i18n-shadowsocks-libev-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-shadowsocks-libev +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-shadowsocks-libev - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-shadowsocks-libev - 普通话 (Chinese) + +@@ + +Package: luci-i18n-shadowsocks-libev-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-shadowsocks-libev +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-shadowsocks-libev - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-shadowsocks-libev - Svenska (Swedish) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-shairplay/Makefile +Package: luci-app-shairplay +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +shairplay +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Shairplay +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Shairplay + +@@ + +Package: luci-i18n-shairplay-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-shairplay +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-shairplay - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-shairplay - 日本語 (Japanese) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-shairport/Makefile +Package: luci-app-shairport +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +shairport +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Shairport +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Shairport + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-siitwizard/Makefile +Package: luci-app-siitwizard +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +kmod-siit +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: SIIT IPv4-over-IPv6 configuration wizard +Maintainer: +Source: +Type: ipkg +Description: SIIT IPv4-over-IPv6 configuration wizard + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-splash/Makefile +Package: luci-app-splash +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-lib-nixio +tc +kmod-sched +iptables-mod-nat-extra +iptables-mod-ipopt +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Freifunk DHCP-Splash application +Maintainer: +Source: +Type: ipkg +Description: Freifunk DHCP-Splash application + +@@ + +Package: luci-i18n-splash-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-splash-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Magyar (Hungarian) + +@@ + +Package: luci-i18n-splash-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Português (Portuguese) + +@@ + +Package: luci-i18n-splash-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Norsk (Norwegian) + +@@ + +Package: luci-i18n-splash-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - English + +@@ + +Package: luci-i18n-splash-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Polski (Polish) + +@@ + +Package: luci-i18n-splash-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-splash-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Русский (Russian) + +@@ + +Package: luci-i18n-splash-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-splash-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-splash-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Română (Romanian) + +@@ + +Package: luci-i18n-splash-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-splash-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - 普通话 (Chinese) + +@@ + +Package: luci-i18n-splash-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Deutsch (German) + +@@ + +Package: luci-i18n-splash-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-splash-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Türkçe (Turkish) + +@@ + +Package: luci-i18n-splash-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Svenska (Swedish) + +@@ + +Package: luci-i18n-splash-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - 日本語 (Japanese) + +@@ + +Package: luci-i18n-splash-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-splash-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Català (Catalan) + +@@ + +Package: luci-i18n-splash-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Español (Spanish) + +@@ + +Package: luci-i18n-splash-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-splash-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Čeština (Czech) + +@@ + +Package: luci-i18n-splash-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Français (French) + +@@ + +Package: luci-i18n-splash-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-statistics/Makefile +Package: luci-app-statistics +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +collectd +rrdtool1 +collectd-mod-rrdtool +collectd-mod-iwinfo +collectd-mod-cpu +collectd-mod-memory +collectd-mod-interface +collectd-mod-load +collectd-mod-network +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Statistics Application +Maintainer: +Source: +Type: ipkg +Description: LuCI Statistics Application + +@@ + +Package: luci-i18n-statistics-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-statistics-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Magyar (Hungarian) + +@@ + +Package: luci-i18n-statistics-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Português (Portuguese) + +@@ + +Package: luci-i18n-statistics-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Norsk (Norwegian) + +@@ + +Package: luci-i18n-statistics-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - English + +@@ + +Package: luci-i18n-statistics-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Polski (Polish) + +@@ + +Package: luci-i18n-statistics-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-statistics-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Русский (Russian) + +@@ + +Package: luci-i18n-statistics-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-statistics-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-statistics-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Română (Romanian) + +@@ + +Package: luci-i18n-statistics-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-statistics-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - 普通话 (Chinese) + +@@ + +Package: luci-i18n-statistics-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Deutsch (German) + +@@ + +Package: luci-i18n-statistics-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-statistics-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Türkçe (Turkish) + +@@ + +Package: luci-i18n-statistics-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Svenska (Swedish) + +@@ + +Package: luci-i18n-statistics-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - 日本語 (Japanese) + +@@ + +Package: luci-i18n-statistics-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-statistics-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Català (Catalan) + +@@ + +Package: luci-i18n-statistics-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Español (Spanish) + +@@ + +Package: luci-i18n-statistics-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-statistics-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Čeština (Czech) + +@@ + +Package: luci-i18n-statistics-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Français (French) + +@@ + +Package: luci-i18n-statistics-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-tinyproxy/Makefile +Package: luci-app-tinyproxy +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Tinyproxy - HTTP(S)-Proxy configuration +Maintainer: +Source: +Type: ipkg +Description: Tinyproxy - HTTP(S)-Proxy configuration + +@@ + +Package: luci-i18n-tinyproxy-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-tinyproxy-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Magyar (Hungarian) + +@@ + +Package: luci-i18n-tinyproxy-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Português (Portuguese) + +@@ + +Package: luci-i18n-tinyproxy-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Norsk (Norwegian) + +@@ + +Package: luci-i18n-tinyproxy-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - English + +@@ + +Package: luci-i18n-tinyproxy-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Polski (Polish) + +@@ + +Package: luci-i18n-tinyproxy-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-tinyproxy-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Русский (Russian) + +@@ + +Package: luci-i18n-tinyproxy-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-tinyproxy-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-tinyproxy-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Română (Romanian) + +@@ + +Package: luci-i18n-tinyproxy-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-tinyproxy-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - 普通话 (Chinese) + +@@ + +Package: luci-i18n-tinyproxy-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Deutsch (German) + +@@ + +Package: luci-i18n-tinyproxy-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-tinyproxy-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Türkçe (Turkish) + +@@ + +Package: luci-i18n-tinyproxy-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Svenska (Swedish) + +@@ + +Package: luci-i18n-tinyproxy-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - 日本語 (Japanese) + +@@ + +Package: luci-i18n-tinyproxy-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-tinyproxy-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Català (Catalan) + +@@ + +Package: luci-i18n-tinyproxy-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Español (Spanish) + +@@ + +Package: luci-i18n-tinyproxy-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-tinyproxy-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Čeština (Czech) + +@@ + +Package: luci-i18n-tinyproxy-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Français (French) + +@@ + +Package: luci-i18n-tinyproxy-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-transmission/Makefile +Package: luci-app-transmission +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Transmission +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Transmission + +@@ + +Package: luci-i18n-transmission-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-transmission-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Magyar (Hungarian) + +@@ + +Package: luci-i18n-transmission-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Português (Portuguese) + +@@ + +Package: luci-i18n-transmission-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Norsk (Norwegian) + +@@ + +Package: luci-i18n-transmission-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - English + +@@ + +Package: luci-i18n-transmission-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Polski (Polish) + +@@ + +Package: luci-i18n-transmission-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-transmission-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Русский (Russian) + +@@ + +Package: luci-i18n-transmission-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-transmission-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-transmission-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Română (Romanian) + +@@ + +Package: luci-i18n-transmission-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-transmission-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - 普通话 (Chinese) + +@@ + +Package: luci-i18n-transmission-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Deutsch (German) + +@@ + +Package: luci-i18n-transmission-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-transmission-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Türkçe (Turkish) + +@@ + +Package: luci-i18n-transmission-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Svenska (Swedish) + +@@ + +Package: luci-i18n-transmission-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - 日本語 (Japanese) + +@@ + +Package: luci-i18n-transmission-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-transmission-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Català (Catalan) + +@@ + +Package: luci-i18n-transmission-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Español (Spanish) + +@@ + +Package: luci-i18n-transmission-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-transmission-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Čeština (Czech) + +@@ + +Package: luci-i18n-transmission-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Français (French) + +@@ + +Package: luci-i18n-transmission-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-travelmate/Makefile +Package: luci-app-travelmate +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +travelmate +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI support for Travelmate +Maintainer: +Source: +Type: ipkg +Description: LuCI support for Travelmate + +@@ + +Package: luci-i18n-travelmate-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-travelmate +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-travelmate - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-travelmate - 日本語 (Japanese) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-udpxy/Makefile +Package: luci-app-udpxy +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +udpxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for udpxy +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for udpxy + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-uhttpd/Makefile +Package: luci-app-uhttpd +Submenu: 3. Applications +Version: 1.0.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +uhttpd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: uHTTPd Webserver Configuration +Maintainer: Daniel Dickinson +Source: +License: Apache-2.0 +Type: ipkg +Description: uHTTPd Webserver Configuration +Daniel Dickinson +@@ + +Package: luci-i18n-uhttpd-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: 1.0.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-uhttpd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-uhttpd - ja translation +Maintainer: Daniel Dickinson +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-uhttpd - 日本語 (Japanese) +Daniel Dickinson +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-unbound/Makefile +Package: luci-app-unbound +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +unbound +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Unbound Recursive DNS Resolver Configuration +Maintainer: +Source: +Type: ipkg +Description: Unbound Recursive DNS Resolver Configuration + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-upnp/Makefile +Package: luci-app-upnp +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +miniupnpd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Universal Plug & Play configuration module +Maintainer: +Source: +Type: ipkg +Description: Universal Plug & Play configuration module + +@@ + +Package: luci-i18n-upnp-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-upnp-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Magyar (Hungarian) + +@@ + +Package: luci-i18n-upnp-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Português (Portuguese) + +@@ + +Package: luci-i18n-upnp-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Norsk (Norwegian) + +@@ + +Package: luci-i18n-upnp-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - English + +@@ + +Package: luci-i18n-upnp-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Polski (Polish) + +@@ + +Package: luci-i18n-upnp-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-upnp-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Русский (Russian) + +@@ + +Package: luci-i18n-upnp-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-upnp-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-upnp-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Română (Romanian) + +@@ + +Package: luci-i18n-upnp-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-upnp-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - 普通话 (Chinese) + +@@ + +Package: luci-i18n-upnp-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Deutsch (German) + +@@ + +Package: luci-i18n-upnp-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-upnp-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Türkçe (Turkish) + +@@ + +Package: luci-i18n-upnp-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Svenska (Swedish) + +@@ + +Package: luci-i18n-upnp-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - 日本語 (Japanese) + +@@ + +Package: luci-i18n-upnp-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-upnp-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Català (Catalan) + +@@ + +Package: luci-i18n-upnp-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Español (Spanish) + +@@ + +Package: luci-i18n-upnp-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-upnp-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Čeština (Czech) + +@@ + +Package: luci-i18n-upnp-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Français (French) + +@@ + +Package: luci-i18n-upnp-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-ushare/Makefile +Package: luci-app-ushare +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ushare @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: uShare - UPnP A/V & DLNA Media Server +Maintainer: +Source: +Type: ipkg +Description: uShare - UPnP A/V & DLNA Media Server + +@@ + +Package: luci-i18n-ushare-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-ushare-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Magyar (Hungarian) + +@@ + +Package: luci-i18n-ushare-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Português (Portuguese) + +@@ + +Package: luci-i18n-ushare-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Norsk (Norwegian) + +@@ + +Package: luci-i18n-ushare-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - English + +@@ + +Package: luci-i18n-ushare-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Polski (Polish) + +@@ + +Package: luci-i18n-ushare-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-ushare-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Русский (Russian) + +@@ + +Package: luci-i18n-ushare-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-ushare-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-ushare-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Română (Romanian) + +@@ + +Package: luci-i18n-ushare-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-ushare-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - 普通话 (Chinese) + +@@ + +Package: luci-i18n-ushare-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Deutsch (German) + +@@ + +Package: luci-i18n-ushare-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-ushare-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Türkçe (Turkish) + +@@ + +Package: luci-i18n-ushare-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Svenska (Swedish) + +@@ + +Package: luci-i18n-ushare-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - 日本語 (Japanese) + +@@ + +Package: luci-i18n-ushare-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-ushare-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Català (Catalan) + +@@ + +Package: luci-i18n-ushare-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Español (Spanish) + +@@ + +Package: luci-i18n-ushare-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-ushare-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Čeština (Czech) + +@@ + +Package: luci-i18n-ushare-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Français (French) + +@@ + +Package: luci-i18n-ushare-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-vnstat/Makefile +Package: luci-app-vnstat +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +vnstat +vnstati +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for VnStat +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for VnStat + +@@ + +Package: luci-i18n-vnstat-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-vnstat-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Magyar (Hungarian) + +@@ + +Package: luci-i18n-vnstat-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Português (Portuguese) + +@@ + +Package: luci-i18n-vnstat-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Norsk (Norwegian) + +@@ + +Package: luci-i18n-vnstat-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - English + +@@ + +Package: luci-i18n-vnstat-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Polski (Polish) + +@@ + +Package: luci-i18n-vnstat-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-vnstat-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Русский (Russian) + +@@ + +Package: luci-i18n-vnstat-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-vnstat-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-vnstat-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Română (Romanian) + +@@ + +Package: luci-i18n-vnstat-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-vnstat-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - 普通话 (Chinese) + +@@ + +Package: luci-i18n-vnstat-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Deutsch (German) + +@@ + +Package: luci-i18n-vnstat-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-vnstat-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Türkçe (Turkish) + +@@ + +Package: luci-i18n-vnstat-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Svenska (Swedish) + +@@ + +Package: luci-i18n-vnstat-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - 日本語 (Japanese) + +@@ + +Package: luci-i18n-vnstat-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-vnstat-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Català (Catalan) + +@@ + +Package: luci-i18n-vnstat-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Español (Spanish) + +@@ + +Package: luci-i18n-vnstat-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-vnstat-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Čeština (Czech) + +@@ + +Package: luci-i18n-vnstat-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Français (French) + +@@ + +Package: luci-i18n-vnstat-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-voice-core/Makefile +Package: luci-app-voice-core +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Voice Software (Core) +Maintainer: +Source: +Type: ipkg +Description: LuCI Voice Software (Core) + +@@ + +Package: luci-i18n-voice-core-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-voice-core-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Magyar (Hungarian) + +@@ + +Package: luci-i18n-voice-core-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Português (Portuguese) + +@@ + +Package: luci-i18n-voice-core-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Norsk (Norwegian) + +@@ + +Package: luci-i18n-voice-core-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - English + +@@ + +Package: luci-i18n-voice-core-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Polski (Polish) + +@@ + +Package: luci-i18n-voice-core-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-voice-core-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Русский (Russian) + +@@ + +Package: luci-i18n-voice-core-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-voice-core-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-voice-core-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Română (Romanian) + +@@ + +Package: luci-i18n-voice-core-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-voice-core-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - 普通话 (Chinese) + +@@ + +Package: luci-i18n-voice-core-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Deutsch (German) + +@@ + +Package: luci-i18n-voice-core-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-voice-core-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Türkçe (Turkish) + +@@ + +Package: luci-i18n-voice-core-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Svenska (Swedish) + +@@ + +Package: luci-i18n-voice-core-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - 日本語 (Japanese) + +@@ + +Package: luci-i18n-voice-core-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-voice-core-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Català (Catalan) + +@@ + +Package: luci-i18n-voice-core-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Español (Spanish) + +@@ + +Package: luci-i18n-voice-core-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-voice-core-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Čeština (Czech) + +@@ + +Package: luci-i18n-voice-core-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Français (French) + +@@ + +Package: luci-i18n-voice-core-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-voice-diag/Makefile +Package: luci-app-voice-diag +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-diag-devinfo @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Voice Software (Diagnostics) +Maintainer: +Source: +Type: ipkg +Description: LuCI Voice Software (Diagnostics) + +@@ + +Package: luci-i18n-voice-diag-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-voice-diag-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Magyar (Hungarian) + +@@ + +Package: luci-i18n-voice-diag-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Português (Portuguese) + +@@ + +Package: luci-i18n-voice-diag-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Norsk (Norwegian) + +@@ + +Package: luci-i18n-voice-diag-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - English + +@@ + +Package: luci-i18n-voice-diag-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Polski (Polish) + +@@ + +Package: luci-i18n-voice-diag-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-voice-diag-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Русский (Russian) + +@@ + +Package: luci-i18n-voice-diag-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-voice-diag-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-voice-diag-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Română (Romanian) + +@@ + +Package: luci-i18n-voice-diag-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-voice-diag-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - 普通话 (Chinese) + +@@ + +Package: luci-i18n-voice-diag-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Deutsch (German) + +@@ + +Package: luci-i18n-voice-diag-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-voice-diag-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Türkçe (Turkish) + +@@ + +Package: luci-i18n-voice-diag-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Svenska (Swedish) + +@@ + +Package: luci-i18n-voice-diag-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - 日本語 (Japanese) + +@@ + +Package: luci-i18n-voice-diag-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-voice-diag-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Català (Catalan) + +@@ + +Package: luci-i18n-voice-diag-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Español (Spanish) + +@@ + +Package: luci-i18n-voice-diag-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-voice-diag-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Čeština (Czech) + +@@ + +Package: luci-i18n-voice-diag-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Français (French) + +@@ + +Package: luci-i18n-voice-diag-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-watchcat/Makefile +Package: luci-app-watchcat +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Watchcat +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Watchcat + +@@ + +Package: luci-i18n-watchcat-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-watchcat-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Magyar (Hungarian) + +@@ + +Package: luci-i18n-watchcat-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Português (Portuguese) + +@@ + +Package: luci-i18n-watchcat-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Norsk (Norwegian) + +@@ + +Package: luci-i18n-watchcat-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - English + +@@ + +Package: luci-i18n-watchcat-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Polski (Polish) + +@@ + +Package: luci-i18n-watchcat-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-watchcat-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Русский (Russian) + +@@ + +Package: luci-i18n-watchcat-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-watchcat-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-watchcat-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Română (Romanian) + +@@ + +Package: luci-i18n-watchcat-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-watchcat-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - 普通话 (Chinese) + +@@ + +Package: luci-i18n-watchcat-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Deutsch (German) + +@@ + +Package: luci-i18n-watchcat-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-watchcat-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Türkçe (Turkish) + +@@ + +Package: luci-i18n-watchcat-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Svenska (Swedish) + +@@ + +Package: luci-i18n-watchcat-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - 日本語 (Japanese) + +@@ + +Package: luci-i18n-watchcat-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-watchcat-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Català (Catalan) + +@@ + +Package: luci-i18n-watchcat-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Español (Spanish) + +@@ + +Package: luci-i18n-watchcat-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-watchcat-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Čeština (Czech) + +@@ + +Package: luci-i18n-watchcat-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Français (French) + +@@ + +Package: luci-i18n-watchcat-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-wifischedule/Makefile +Package: luci-app-wifischedule +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +wifischedule +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Turns WiFi on and off according to a schedule +Maintainer: +Source: +Type: ipkg +Description: Turns WiFi on and off according to a schedule + +@@ + +Package: luci-i18n-wifischedule-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wifischedule +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wifischedule - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wifischedule - 普通话 (Chinese) + +@@ + +Package: luci-i18n-wifischedule-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wifischedule +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wifischedule - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wifischedule - 日本語 (Japanese) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-wol/Makefile +Package: luci-app-wol +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +etherwake +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Wake-on-LAN +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Wake-on-LAN + +@@ + +Package: luci-i18n-wol-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-wol-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Magyar (Hungarian) + +@@ + +Package: luci-i18n-wol-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Português (Portuguese) + +@@ + +Package: luci-i18n-wol-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Norsk (Norwegian) + +@@ + +Package: luci-i18n-wol-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - English + +@@ + +Package: luci-i18n-wol-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Polski (Polish) + +@@ + +Package: luci-i18n-wol-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-wol-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Русский (Russian) + +@@ + +Package: luci-i18n-wol-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-wol-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-wol-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Română (Romanian) + +@@ + +Package: luci-i18n-wol-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-wol-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - 普通话 (Chinese) + +@@ + +Package: luci-i18n-wol-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Deutsch (German) + +@@ + +Package: luci-i18n-wol-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-wol-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Türkçe (Turkish) + +@@ + +Package: luci-i18n-wol-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Svenska (Swedish) + +@@ + +Package: luci-i18n-wol-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - 日本語 (Japanese) + +@@ + +Package: luci-i18n-wol-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-wol-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Català (Catalan) + +@@ + +Package: luci-i18n-wol-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Español (Spanish) + +@@ + +Package: luci-i18n-wol-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-wol-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Čeština (Czech) + +@@ + +Package: luci-i18n-wol-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Français (French) + +@@ + +Package: luci-i18n-wol-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/applications/luci-app-wshaper/Makefile +Package: luci-app-wshaper +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for wshaper +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for wshaper + +@@ + +Package: luci-i18n-wshaper-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-wshaper-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Magyar (Hungarian) + +@@ + +Package: luci-i18n-wshaper-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Português (Portuguese) + +@@ + +Package: luci-i18n-wshaper-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Norsk (Norwegian) + +@@ + +Package: luci-i18n-wshaper-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - English + +@@ + +Package: luci-i18n-wshaper-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Polski (Polish) + +@@ + +Package: luci-i18n-wshaper-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-wshaper-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Русский (Russian) + +@@ + +Package: luci-i18n-wshaper-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-wshaper-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-wshaper-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Română (Romanian) + +@@ + +Package: luci-i18n-wshaper-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-wshaper-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - 普通话 (Chinese) + +@@ + +Package: luci-i18n-wshaper-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Deutsch (German) + +@@ + +Package: luci-i18n-wshaper-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-wshaper-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Türkçe (Turkish) + +@@ + +Package: luci-i18n-wshaper-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Svenska (Swedish) + +@@ + +Package: luci-i18n-wshaper-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - 日本語 (Japanese) + +@@ + +Package: luci-i18n-wshaper-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-wshaper-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Català (Catalan) + +@@ + +Package: luci-i18n-wshaper-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Español (Spanish) + +@@ + +Package: luci-i18n-wshaper-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-wshaper-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Čeština (Czech) + +@@ + +Package: luci-i18n-wshaper-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Français (French) + +@@ + +Package: luci-i18n-wshaper-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/collections/luci/Makefile +Package: luci +Submenu: 1. Collections +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +uhttpd +uhttpd-mod-ubus +luci-mod-admin-full +luci-theme-bootstrap +luci-app-firewall +luci-proto-ppp +libiwinfo-lua +IPV6:luci-proto-ipv6 +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Standard OpenWrt set including full admin with ppp support and the default Bootstrap theme +Maintainer: +Source: +Type: ipkg +Description: Standard OpenWrt set including full admin with ppp support and the default Bootstrap theme + +@@ + + +Source-Makefile: feeds/luci/collections/luci-light/Makefile +Package: luci-light +Submenu: 1. Collections +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +uhttpd +luci-mod-admin-mini +luci-theme-openwrt @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Minimum package set using only admin mini and the standard theme +Maintainer: +Source: +Type: ipkg +Description: Minimum package set using only admin mini and the standard theme + +@@ + + +Source-Makefile: feeds/luci/collections/luci-ssl/Makefile +Package: luci-ssl +Submenu: 1. Collections +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci +libustream-mbedtls +px5g +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI with HTTPS support (mbedTLS as SSL backend) +Maintainer: +Source: +Type: ipkg +Description: LuCI with HTTPS support (mbedTLS as SSL backend) + +@@ + + +Source-Makefile: feeds/luci/collections/luci-ssl-openssl/Makefile +Package: luci-ssl-openssl +Submenu: 1. Collections +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci +libustream-openssl +px5g +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI with HTTPS support (OpenSSL as SSL backend) +Maintainer: +Source: +Type: ipkg +Description: LuCI with OpenSSL as the SSL backend (libustream-openssl). Note: px5g still requires libmbedtls (in LEDE) or libpolarssl (in Openwrt). In LEDE it is also possible to replace px5g with openssl-util as uhttpd can also generate keys with openssl commandline tools if px5g is not installed. + +@@ + + +Source-Makefile: feeds/luci/contrib/package/community-profiles/Makefile +Package: community-profiles +Submenu: 9. Freifunk +Version: 2 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread freifunk-common +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Community profiles +Maintainer: +Source: +Type: ipkg +Description: These community profiles set defaults for various free network/freifunk communities and are used by wizards like ffwizard and meshwizard. + +@@ + + +Source-Makefile: feeds/luci/contrib/package/freifunk-common/Makefile +Package: freifunk-common +Submenu: 9. Freifunk +Version: 2 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk common files +Maintainer: +Source: +Type: ipkg +Description: Common files and scripts that are needed to run free wireless mesh networks. + +@@ + + +Source-Makefile: feeds/luci/contrib/package/freifunk-firewall/Makefile +Package: freifunk-firewall +Submenu: 9. Freifunk +Version: 3 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +firewall +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk Firewall Addon +Maintainer: +Source: +Type: ipkg +Description: Various firewall extensions for Freifunk. Includes NAT fixes and advanced settings. + +@@ + + +Source-Makefile: feeds/luci/contrib/package/freifunk-gwcheck/Makefile +Package: freifunk-gwcheck +Submenu: 9. Freifunk +Version: 4 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread firewall +ip +iptables-mod-ipopt +olsrd-mod-dyn-gw-plain +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk gateway check script +Maintainer: +Source: +Type: ipkg +Description: This script periodically checks if internet is available via your own gateway. If it detects that it is broken, then the defaultroute is removed from the main table and temporarilly placed in table gw-check until your internet works again. Config file is /etc/config/freifunk-gwcheck. + +@@ + + +Source-Makefile: feeds/luci/contrib/package/freifunk-mapupdate/Makefile +Package: freifunk-mapupdate +Submenu: 9. Freifunk +Version: 1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +olsrd-mod-nameservice +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Update script for freifunkmap +Maintainer: +Source: +Type: ipkg +Description: This script updates the freifunkmap (also known as the global map, see http://map.berlin.freifunk.net) every hour. Config file is /etc/config/freifunk-mapupdate. + +@@ + + +Source-Makefile: feeds/luci/contrib/package/freifunk-p2pblock/Makefile +Package: freifunk-p2pblock +Submenu: 9. Freifunk +Version: 3 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +iptables-mod-filter +iptables-mod-ipp2p +l7-protocols +iptables-mod-conntrack-extra @BROKEN +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk p2pblock Addon +Maintainer: +Source: +Type: ipkg +Description: Simple Addon for Freifunk which use iptables layer7-, ipp2p- and recent-modules + to block p2p/filesharing traffic + +@@ + + +Source-Makefile: feeds/luci/contrib/package/freifunk-policyrouting/Makefile +Package: freifunk-policyrouting +Submenu: 9. Freifunk +Version: 6 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ip +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk policy routing addon +Maintainer: +Source: +Type: ipkg +Description: Allows you to send your own traffic via your own default gateway while sending traffic received from the mesh to a gateway in the mesh. + +@@ + + +Source-Makefile: feeds/luci/contrib/package/freifunk-watchdog/Makefile +Package: freifunk-watchdog +Submenu: 9. Freifunk +Version: 8 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread libuci +Conflicts: +Menu-Depends: +Provides: +Build-Depends: uci +Section: luci +Category: LuCI +Title: Freifunk Ad-Hoc watchdog daemon +Maintainer: +Source: +Type: ipkg +Description: A watchdog daemon that monitors wireless interfaces to ensure the correct bssid and channel. + The process will initiate a wireless restart as soon as it detects a bssid or channel mismatch. + +@@ + + +Source-Makefile: feeds/luci/contrib/package/meshwizard/Makefile +Package: meshwizard +Submenu: 9. Freifunk +Version: 0.3.2 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +firewall +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Shell script based wizard for Mesh networks +Maintainer: +Source: +Type: ipkg +Description: A shellscript based wizard to simplify the setup of a typical mesh node (e.g. for Freifunk.net) + +@@ + + +Source-Makefile: feeds/luci/contrib/package/remote-update/Makefile +Package: remote-update +Submenu: 9. Freifunk +Version: 4 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @TARGET_atheros||@TARGET_ar71xx||@TARGET_brcm_2_4 +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk remote update utility. +Maintainer: +Source: +Type: ipkg +Description: The freifunk remote-update utility uses sysupgrade to reflash the currently + running firmware while keeping most of the existing configuratio. + +@@ + + +Source-Makefile: feeds/luci/libs/luci-lib-httpclient/Makefile +Package: luci-lib-httpclient +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-base +luci-lib-nixio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: HTTP(S) client library +Maintainer: +Source: +Type: ipkg +Description: HTTP(S) client library + +@@ + + +Source-Makefile: feeds/luci/libs/luci-lib-ip/Makefile +Package: luci-lib-ip +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +liblua +libnl-tiny +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Lua library for IP calculation and routing information +Maintainer: +Source: +Type: ipkg +Description: Lua library for IP calculation and routing information + +@@ + + +Source-Makefile: feeds/luci/libs/luci-lib-json/Makefile +Package: luci-lib-json +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI JSON library +Maintainer: +Source: +Type: ipkg +Description: LuCI JSON library + +@@ + + +Source-Makefile: feeds/luci/libs/luci-lib-jsonc/Makefile +Package: luci-lib-jsonc +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +liblua +libjson-c +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Lua binding for JSON-C +Maintainer: +Source: +Type: ipkg +Description: Lua binding for JSON-C + +@@ + + +Source-Makefile: feeds/luci/libs/luci-lib-luaneightbl/Makefile +Package: luci-lib-luaneightbl +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +liblua +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: neightbl - Lua lib for IPv6 neighbors +Maintainer: +Source: +Type: ipkg +Description: neightbl - Lua lib for IPv6 neighbors + +@@ + + +Source-Makefile: feeds/luci/libs/luci-lib-nixio/Makefile +Package: luci-lib-nixio +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +PACKAGE_luci-lib-nixio_openssl:libopenssl +PACKAGE_luci-lib-nixio_cyassl:libcyassl +liblua +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: NIXIO POSIX library +Maintainer: +Source: +Type: ipkg +Description: NIXIO POSIX library + +@@ + + +Source-Makefile: feeds/luci/libs/luci-lib-px5g/Makefile +Package: luci-lib-px5g +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +liblua +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: RSA/X.509 Key Generator (required for LuCId SSL support) +Maintainer: +Source: +Type: ipkg +Description: RSA/X.509 Key Generator (required for LuCId SSL support) + +@@ + + +Source-Makefile: feeds/luci/libs/luci-lib-rpcc/Makefile +Package: luci-lib-rpcc +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for AHCPd +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for AHCPd + +@@ + + +Source-Makefile: feeds/luci/modules/luci-base/Makefile +Package: luci-base +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +lua +libuci-lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +luci-lib-jsonc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: LuCI core libraries +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Description: LuCI core libraries + +@@ +Config: + config LUCI_SRCDIET + bool "Minify Lua sources" + default n + + menu "Translations" + + config LUCI_LANG_uk + tristate "Ukrainian (uk)" + + config LUCI_LANG_hu + tristate "Hungarian (hu)" + + config LUCI_LANG_pt + tristate "Portuguese (pt)" + + config LUCI_LANG_ko + tristate "Korean (ko)" + + config LUCI_LANG_en + tristate "English (en)" + + config LUCI_LANG_pl + tristate "Polish (pl)" + + config LUCI_LANG_sk + tristate "Slovak (sk)" + + config LUCI_LANG_ru + tristate "Russian (ru)" + + config LUCI_LANG_vi + tristate "Vietnamese (vi)" + + config LUCI_LANG_he + tristate "Hebrew (he)" + + config LUCI_LANG_no + tristate "Norwegian (no)" + + config LUCI_LANG_ms + tristate "Malay (ms)" + + config LUCI_LANG_zh-cn + tristate "Chinese (zh-cn)" + + config LUCI_LANG_ro + tristate "Romanian (ro)" + + config LUCI_LANG_de + tristate "German (de)" + + config LUCI_LANG_zh-tw + tristate "Taiwanese (zh-tw)" + + config LUCI_LANG_tr + tristate "Turkish (tr)" + + config LUCI_LANG_sv + tristate "Swedish (sv)" + + config LUCI_LANG_ja + tristate "Japanese (ja)" + + config LUCI_LANG_el + tristate "Greek (el)" + + config LUCI_LANG_ca + tristate "Catalan (ca)" + + config LUCI_LANG_es + tristate "Spanish (es)" + + config LUCI_LANG_pt-br + tristate "Brazialian Portuguese (pt-br)" + + config LUCI_LANG_cs + tristate "Czech (cs)" + + config LUCI_LANG_fr + tristate "French (fr)" + + config LUCI_LANG_it + tristate "Italian (it)" + + endmenu +@@ + +Package: luci-i18n-base-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - uk translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-base-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - hu translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Magyar (Hungarian) + +@@ + +Package: luci-i18n-base-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - pt translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Português (Portuguese) + +@@ + +Package: luci-i18n-base-ko +Default: LUCI_LANG_ko||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ko translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - 한국어 (Korean) + +@@ + +Package: luci-i18n-base-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - en translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - English + +@@ + +Package: luci-i18n-base-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - pl translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Polski (Polish) + +@@ + +Package: luci-i18n-base-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - sk translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-base-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ru translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Русский (Russian) + +@@ + +Package: luci-i18n-base-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - vi translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-base-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - he translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-base-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - no translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Norsk (Norwegian) + +@@ + +Package: luci-i18n-base-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ms translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-base-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - zh-cn translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - 普通话 (Chinese) + +@@ + +Package: luci-i18n-base-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ro translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Română (Romanian) + +@@ + +Package: luci-i18n-base-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - de translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Deutsch (German) + +@@ + +Package: luci-i18n-base-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - zh-tw translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-base-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - tr translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Türkçe (Turkish) + +@@ + +Package: luci-i18n-base-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - sv translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Svenska (Swedish) + +@@ + +Package: luci-i18n-base-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ja translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - 日本語 (Japanese) + +@@ + +Package: luci-i18n-base-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - el translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-base-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ca translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Català (Catalan) + +@@ + +Package: luci-i18n-base-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - es translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Español (Spanish) + +@@ + +Package: luci-i18n-base-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - pt-br translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-base-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - cs translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Čeština (Czech) + +@@ + +Package: luci-i18n-base-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - fr translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Français (French) + +@@ + +Package: luci-i18n-base-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - it translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/modules/luci-mod-admin-full/Makefile +Package: luci-mod-admin-full +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: iwinfo lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Administration - full-featured for full control +Maintainer: +Source: +Type: ipkg +Description: LuCI Administration - full-featured for full control + +@@ + + +Source-Makefile: feeds/luci/modules/luci-mod-admin-mini/Makefile +Package: luci-mod-admin-mini +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-base @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Essentials - stripped down and user-friendly +Maintainer: +Source: +Type: ipkg +Description: LuCI Essentials - stripped down and user-friendly + +@@ + + +Source-Makefile: feeds/luci/modules/luci-mod-failsafe/Makefile +Package: luci-mod-failsafe +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Fail-Safe - Fail-Safe sysupgrade module +Maintainer: +Source: +Type: ipkg +Description: LuCI Fail-Safe - Fail-Safe sysupgrade module + +@@ + + +Source-Makefile: feeds/luci/modules/luci-mod-freifunk/Makefile +Package: luci-mod-freifunk +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-mod-admin-full +luci-lib-json +freifunk-firewall +freifunk-common +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Freifunk module +Maintainer: +Source: +Type: ipkg +Description: LuCI Freifunk module + +@@ + +Package: luci-i18n-freifunk-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-freifunk-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Magyar (Hungarian) + +@@ + +Package: luci-i18n-freifunk-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Português (Portuguese) + +@@ + +Package: luci-i18n-freifunk-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Norsk (Norwegian) + +@@ + +Package: luci-i18n-freifunk-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - English + +@@ + +Package: luci-i18n-freifunk-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Polski (Polish) + +@@ + +Package: luci-i18n-freifunk-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-freifunk-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Русский (Russian) + +@@ + +Package: luci-i18n-freifunk-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-freifunk-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-freifunk-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Română (Romanian) + +@@ + +Package: luci-i18n-freifunk-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-freifunk-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - 普通话 (Chinese) + +@@ + +Package: luci-i18n-freifunk-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Deutsch (German) + +@@ + +Package: luci-i18n-freifunk-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-freifunk-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Türkçe (Turkish) + +@@ + +Package: luci-i18n-freifunk-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Svenska (Swedish) + +@@ + +Package: luci-i18n-freifunk-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - 日本語 (Japanese) + +@@ + +Package: luci-i18n-freifunk-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-freifunk-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Català (Catalan) + +@@ + +Package: luci-i18n-freifunk-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Español (Spanish) + +@@ + +Package: luci-i18n-freifunk-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-freifunk-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Čeština (Czech) + +@@ + +Package: luci-i18n-freifunk-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Français (French) + +@@ + +Package: luci-i18n-freifunk-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Italiano (Italian) + +@@ + + +Source-Makefile: feeds/luci/modules/luci-mod-freifunk-community/Makefile +Package: luci-mod-freifunk-community +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +iptables-mod-nat-extra +iptables-mod-ipopt +luci-app-splash +olsrd +olsrd-mod-dyn-gw-plain +olsrd-mod-jsoninfo +olsrd-mod-nameservice +olsrd-mod-watchdog +kmod-tun +ip +freifunk-watchdog +luci-app-olsr +luci-app-olsr-services +freifunk-gwcheck +freifunk-mapupdate +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Freifunk Community Meta-Package +Maintainer: +Source: +Type: ipkg +Description: Freifunk Community Meta-Package + +@@ + + +Source-Makefile: feeds/luci/modules/luci-mod-rpc/Makefile +Package: luci-mod-rpc +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-lib-json +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI RPC - JSON-RPC API +Maintainer: +Source: +Type: ipkg +Description: LuCI RPC - JSON-RPC API + +@@ + + +Source-Makefile: feeds/luci/protocols/luci-proto-3g/Makefile +Package: luci-proto-3g +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +comgt +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for 3G +Maintainer: +Source: +Type: ipkg +Description: Support for 3G + +@@ + + +Source-Makefile: feeds/luci/protocols/luci-proto-ipip/Makefile +Package: luci-proto-ipip +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ipip +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for IPIP tunnels (IPv4-in-IPv4 RFC2003) +Maintainer: Roger Pueyo Centelles +Source: +Type: ipkg +Description: Support for IPIP tunnels (IPv4-in-IPv4 RFC2003) +Roger Pueyo Centelles +@@ + + +Source-Makefile: feeds/luci/protocols/luci-proto-ipv6/Makefile +Package: luci-proto-ipv6 +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for DHCPv6/6in4/6to4/6rd/DS-Lite/aiccu +Maintainer: +Source: +Type: ipkg +Description: Support for DHCPv6/6in4/6to4/6rd/DS-Lite/aiccu + +@@ + + +Source-Makefile: feeds/luci/protocols/luci-proto-openconnect/Makefile +Package: luci-proto-openconnect +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +openconnect +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for OpenConnect VPN +Maintainer: +Source: +Type: ipkg +Description: Support for OpenConnect VPN + +@@ + + +Source-Makefile: feeds/luci/protocols/luci-proto-ppp/Makefile +Package: luci-proto-ppp +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for PPP/PPPoE/PPPoA/PPtP +Maintainer: +Source: +Type: ipkg +Description: Support for PPP/PPPoE/PPPoA/PPtP + +@@ + + +Source-Makefile: feeds/luci/protocols/luci-proto-qmi/Makefile +Package: luci-proto-qmi +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +uqmi +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for QMI +Maintainer: +Source: +Type: ipkg +Description: Support for QMI + +@@ + + +Source-Makefile: feeds/luci/protocols/luci-proto-relay/Makefile +Package: luci-proto-relay +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +relayd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for relayd pseudo bridges +Maintainer: +Source: +Type: ipkg +Description: Support for relayd pseudo bridges + +@@ + + +Source-Makefile: feeds/luci/protocols/luci-proto-vpnc/Makefile +Package: luci-proto-vpnc +Submenu: 5. Protocols +Version: 1.0.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +vpnc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for VPNC VPN +Maintainer: Daniel Dickinson +Source: +License: Apache-2.0 +Type: ipkg +Description: Support for VPNC VPN +Daniel Dickinson +@@ + + +Source-Makefile: feeds/luci/protocols/luci-proto-wireguard/Makefile +Package: luci-proto-wireguard +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +kmod-wireguard +wireguard-tools +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for WireGuard VPN +Maintainer: Dan Luedtke +Source: +Type: ipkg +Description: Support for WireGuard VPN +Dan Luedtke +@@ + + +Source-Makefile: feeds/luci/themes/luci-theme-bootstrap/Makefile +Package: luci-theme-bootstrap +Submenu: 4. Themes +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Bootstrap Theme (default) +Maintainer: +Source: +Type: ipkg +Description: Bootstrap Theme (default) + +@@ + + +Source-Makefile: feeds/luci/themes/luci-theme-freifunk-generic/Makefile +Package: luci-theme-freifunk-generic +Submenu: 4. Themes +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Freifunk Generic Theme +Maintainer: +Source: +Type: ipkg +Description: Freifunk Generic Theme + +@@ + + +Source-Makefile: feeds/luci/themes/luci-theme-material/Makefile +Package: luci-theme-material +Submenu: 4. Themes +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Material Theme +Maintainer: +Source: +Type: ipkg +Description: Material Theme + +@@ + + +Source-Makefile: feeds/luci/themes/luci-theme-openwrt/Makefile +Package: luci-theme-openwrt +Submenu: 4. Themes +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI OpenWrt.org theme +Maintainer: +Source: +Type: ipkg +Description: LuCI OpenWrt.org theme + +@@ + + diff --git a/feeds/luci.tmp/.targetinfo b/feeds/luci.tmp/.targetinfo new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci.tmp/info/.files-packageinfo-45594 b/feeds/luci.tmp/info/.files-packageinfo-45594 new file mode 100644 index 0000000..68663ac --- /dev/null +++ b/feeds/luci.tmp/info/.files-packageinfo-45594 @@ -0,0 +1,103 @@ +applications/luci-app-adblock +applications/luci-app-ahcp +applications/luci-app-aria2 +applications/luci-app-asterisk +applications/luci-app-commands +applications/luci-app-coovachilli +applications/luci-app-ddns +applications/luci-app-diag-core +applications/luci-app-diag-devinfo +applications/luci-app-dump1090 +applications/luci-app-dynapoint +applications/luci-app-firewall +applications/luci-app-freifunk-diagnostics +applications/luci-app-freifunk-policyrouting +applications/luci-app-freifunk-widgets +applications/luci-app-fwknopd +applications/luci-app-hd-idle +applications/luci-app-ltqtapi +applications/luci-app-meshwizard +applications/luci-app-minidlna +applications/luci-app-mjpg-streamer +applications/luci-app-mmc-over-gpio +applications/luci-app-multiwan +applications/luci-app-ntpc +applications/luci-app-ocserv +applications/luci-app-olsr +applications/luci-app-olsr-services +applications/luci-app-olsr-viz +applications/luci-app-openvpn +applications/luci-app-p2pblock +applications/luci-app-p910nd +applications/luci-app-pbx +applications/luci-app-pbx-voicemail +applications/luci-app-polipo +applications/luci-app-privoxy +applications/luci-app-qos +applications/luci-app-radicale +applications/luci-app-radvd +applications/luci-app-rp-pppoe-server +applications/luci-app-samba +applications/luci-app-shadowsocks-libev +applications/luci-app-shairplay +applications/luci-app-shairport +applications/luci-app-siitwizard +applications/luci-app-splash +applications/luci-app-statistics +applications/luci-app-tinyproxy +applications/luci-app-transmission +applications/luci-app-travelmate +applications/luci-app-udpxy +applications/luci-app-uhttpd +applications/luci-app-unbound +applications/luci-app-upnp +applications/luci-app-ushare +applications/luci-app-vnstat +applications/luci-app-voice-core +applications/luci-app-voice-diag +applications/luci-app-watchcat +applications/luci-app-wifischedule +applications/luci-app-wol +applications/luci-app-wshaper +collections/luci +collections/luci-light +collections/luci-ssl +collections/luci-ssl-openssl +contrib/package/community-profiles +contrib/package/freifunk-common +contrib/package/freifunk-firewall +contrib/package/freifunk-gwcheck +contrib/package/freifunk-mapupdate +contrib/package/freifunk-p2pblock +contrib/package/freifunk-policyrouting +contrib/package/freifunk-watchdog +contrib/package/meshwizard +contrib/package/remote-update +libs/luci-lib-httpclient +libs/luci-lib-ip +libs/luci-lib-json +libs/luci-lib-jsonc +libs/luci-lib-luaneightbl +libs/luci-lib-nixio +libs/luci-lib-px5g +libs/luci-lib-rpcc +modules/luci-base +modules/luci-mod-admin-full +modules/luci-mod-admin-mini +modules/luci-mod-failsafe +modules/luci-mod-freifunk +modules/luci-mod-freifunk-community +modules/luci-mod-rpc +protocols/luci-proto-3g +protocols/luci-proto-ipip +protocols/luci-proto-ipv6 +protocols/luci-proto-openconnect +protocols/luci-proto-ppp +protocols/luci-proto-qmi +protocols/luci-proto-relay +protocols/luci-proto-vpnc +protocols/luci-proto-wireguard +themes/luci-theme-bootstrap +themes/luci-theme-freifunk-generic +themes/luci-theme-material +themes/luci-theme-openwrt diff --git a/feeds/luci.tmp/info/.files-packageinfo.mk b/feeds/luci.tmp/info/.files-packageinfo.mk new file mode 100644 index 0000000..1441edb --- /dev/null +++ b/feeds/luci.tmp/info/.files-packageinfo.mk @@ -0,0 +1,103 @@ +$(eval $(call PackageDir,applications_luci-app-adblock,applications/luci-app-adblock,)) +$(eval $(call PackageDir,applications_luci-app-ahcp,applications/luci-app-ahcp,)) +$(eval $(call PackageDir,applications_luci-app-aria2,applications/luci-app-aria2,)) +$(eval $(call PackageDir,applications_luci-app-asterisk,applications/luci-app-asterisk,)) +$(eval $(call PackageDir,applications_luci-app-commands,applications/luci-app-commands,)) +$(eval $(call PackageDir,applications_luci-app-coovachilli,applications/luci-app-coovachilli,)) +$(eval $(call PackageDir,applications_luci-app-ddns,applications/luci-app-ddns,)) +$(eval $(call PackageDir,applications_luci-app-diag-core,applications/luci-app-diag-core,)) +$(eval $(call PackageDir,applications_luci-app-diag-devinfo,applications/luci-app-diag-devinfo,)) +$(eval $(call PackageDir,applications_luci-app-dump1090,applications/luci-app-dump1090,)) +$(eval $(call PackageDir,applications_luci-app-dynapoint,applications/luci-app-dynapoint,)) +$(eval $(call PackageDir,applications_luci-app-firewall,applications/luci-app-firewall,)) +$(eval $(call PackageDir,applications_luci-app-freifunk-diagnostics,applications/luci-app-freifunk-diagnostics,)) +$(eval $(call PackageDir,applications_luci-app-freifunk-policyrouting,applications/luci-app-freifunk-policyrouting,)) +$(eval $(call PackageDir,applications_luci-app-freifunk-widgets,applications/luci-app-freifunk-widgets,)) +$(eval $(call PackageDir,applications_luci-app-fwknopd,applications/luci-app-fwknopd,)) +$(eval $(call PackageDir,applications_luci-app-hd-idle,applications/luci-app-hd-idle,)) +$(eval $(call PackageDir,applications_luci-app-ltqtapi,applications/luci-app-ltqtapi,)) +$(eval $(call PackageDir,applications_luci-app-meshwizard,applications/luci-app-meshwizard,)) +$(eval $(call PackageDir,applications_luci-app-minidlna,applications/luci-app-minidlna,)) +$(eval $(call PackageDir,applications_luci-app-mjpg-streamer,applications/luci-app-mjpg-streamer,)) +$(eval $(call PackageDir,applications_luci-app-mmc-over-gpio,applications/luci-app-mmc-over-gpio,)) +$(eval $(call PackageDir,applications_luci-app-multiwan,applications/luci-app-multiwan,)) +$(eval $(call PackageDir,applications_luci-app-ntpc,applications/luci-app-ntpc,)) +$(eval $(call PackageDir,applications_luci-app-ocserv,applications/luci-app-ocserv,)) +$(eval $(call PackageDir,applications_luci-app-olsr,applications/luci-app-olsr,)) +$(eval $(call PackageDir,applications_luci-app-olsr-services,applications/luci-app-olsr-services,)) +$(eval $(call PackageDir,applications_luci-app-olsr-viz,applications/luci-app-olsr-viz,)) +$(eval $(call PackageDir,applications_luci-app-openvpn,applications/luci-app-openvpn,)) +$(eval $(call PackageDir,applications_luci-app-p2pblock,applications/luci-app-p2pblock,)) +$(eval $(call PackageDir,applications_luci-app-p910nd,applications/luci-app-p910nd,)) +$(eval $(call PackageDir,applications_luci-app-pbx,applications/luci-app-pbx,)) +$(eval $(call PackageDir,applications_luci-app-pbx-voicemail,applications/luci-app-pbx-voicemail,)) +$(eval $(call PackageDir,applications_luci-app-polipo,applications/luci-app-polipo,)) +$(eval $(call PackageDir,applications_luci-app-privoxy,applications/luci-app-privoxy,)) +$(eval $(call PackageDir,applications_luci-app-qos,applications/luci-app-qos,)) +$(eval $(call PackageDir,applications_luci-app-radicale,applications/luci-app-radicale,)) +$(eval $(call PackageDir,applications_luci-app-radvd,applications/luci-app-radvd,)) +$(eval $(call PackageDir,applications_luci-app-rp-pppoe-server,applications/luci-app-rp-pppoe-server,)) +$(eval $(call PackageDir,applications_luci-app-samba,applications/luci-app-samba,)) +$(eval $(call PackageDir,applications_luci-app-shadowsocks-libev,applications/luci-app-shadowsocks-libev,)) +$(eval $(call PackageDir,applications_luci-app-shairplay,applications/luci-app-shairplay,)) +$(eval $(call PackageDir,applications_luci-app-shairport,applications/luci-app-shairport,)) +$(eval $(call PackageDir,applications_luci-app-siitwizard,applications/luci-app-siitwizard,)) +$(eval $(call PackageDir,applications_luci-app-splash,applications/luci-app-splash,)) +$(eval $(call PackageDir,applications_luci-app-statistics,applications/luci-app-statistics,)) +$(eval $(call PackageDir,applications_luci-app-tinyproxy,applications/luci-app-tinyproxy,)) +$(eval $(call PackageDir,applications_luci-app-transmission,applications/luci-app-transmission,)) +$(eval $(call PackageDir,applications_luci-app-travelmate,applications/luci-app-travelmate,)) +$(eval $(call PackageDir,applications_luci-app-udpxy,applications/luci-app-udpxy,)) +$(eval $(call PackageDir,applications_luci-app-uhttpd,applications/luci-app-uhttpd,)) +$(eval $(call PackageDir,applications_luci-app-unbound,applications/luci-app-unbound,)) +$(eval $(call PackageDir,applications_luci-app-upnp,applications/luci-app-upnp,)) +$(eval $(call PackageDir,applications_luci-app-ushare,applications/luci-app-ushare,)) +$(eval $(call PackageDir,applications_luci-app-vnstat,applications/luci-app-vnstat,)) +$(eval $(call PackageDir,applications_luci-app-voice-core,applications/luci-app-voice-core,)) +$(eval $(call PackageDir,applications_luci-app-voice-diag,applications/luci-app-voice-diag,)) +$(eval $(call PackageDir,applications_luci-app-watchcat,applications/luci-app-watchcat,)) +$(eval $(call PackageDir,applications_luci-app-wifischedule,applications/luci-app-wifischedule,)) +$(eval $(call PackageDir,applications_luci-app-wol,applications/luci-app-wol,)) +$(eval $(call PackageDir,applications_luci-app-wshaper,applications/luci-app-wshaper,)) +$(eval $(call PackageDir,collections_luci,collections/luci,)) +$(eval $(call PackageDir,collections_luci-light,collections/luci-light,)) +$(eval $(call PackageDir,collections_luci-ssl,collections/luci-ssl,)) +$(eval $(call PackageDir,collections_luci-ssl-openssl,collections/luci-ssl-openssl,)) +$(eval $(call PackageDir,contrib_package_community-profiles,contrib/package/community-profiles,)) +$(eval $(call PackageDir,contrib_package_freifunk-common,contrib/package/freifunk-common,)) +$(eval $(call PackageDir,contrib_package_freifunk-firewall,contrib/package/freifunk-firewall,)) +$(eval $(call PackageDir,contrib_package_freifunk-gwcheck,contrib/package/freifunk-gwcheck,)) +$(eval $(call PackageDir,contrib_package_freifunk-mapupdate,contrib/package/freifunk-mapupdate,)) +$(eval $(call PackageDir,contrib_package_freifunk-p2pblock,contrib/package/freifunk-p2pblock,)) +$(eval $(call PackageDir,contrib_package_freifunk-policyrouting,contrib/package/freifunk-policyrouting,)) +$(eval $(call PackageDir,contrib_package_freifunk-watchdog,contrib/package/freifunk-watchdog,)) +$(eval $(call PackageDir,contrib_package_meshwizard,contrib/package/meshwizard,)) +$(eval $(call PackageDir,contrib_package_remote-update,contrib/package/remote-update,)) +$(eval $(call PackageDir,libs_luci-lib-httpclient,libs/luci-lib-httpclient,)) +$(eval $(call PackageDir,libs_luci-lib-ip,libs/luci-lib-ip,)) +$(eval $(call PackageDir,libs_luci-lib-json,libs/luci-lib-json,)) +$(eval $(call PackageDir,libs_luci-lib-jsonc,libs/luci-lib-jsonc,)) +$(eval $(call PackageDir,libs_luci-lib-luaneightbl,libs/luci-lib-luaneightbl,)) +$(eval $(call PackageDir,libs_luci-lib-nixio,libs/luci-lib-nixio,)) +$(eval $(call PackageDir,libs_luci-lib-px5g,libs/luci-lib-px5g,)) +$(eval $(call PackageDir,libs_luci-lib-rpcc,libs/luci-lib-rpcc,)) +$(eval $(call PackageDir,modules_luci-base,modules/luci-base,)) +$(eval $(call PackageDir,modules_luci-mod-admin-full,modules/luci-mod-admin-full,)) +$(eval $(call PackageDir,modules_luci-mod-admin-mini,modules/luci-mod-admin-mini,)) +$(eval $(call PackageDir,modules_luci-mod-failsafe,modules/luci-mod-failsafe,)) +$(eval $(call PackageDir,modules_luci-mod-freifunk,modules/luci-mod-freifunk,)) +$(eval $(call PackageDir,modules_luci-mod-freifunk-community,modules/luci-mod-freifunk-community,)) +$(eval $(call PackageDir,modules_luci-mod-rpc,modules/luci-mod-rpc,)) +$(eval $(call PackageDir,protocols_luci-proto-3g,protocols/luci-proto-3g,)) +$(eval $(call PackageDir,protocols_luci-proto-ipip,protocols/luci-proto-ipip,)) +$(eval $(call PackageDir,protocols_luci-proto-ipv6,protocols/luci-proto-ipv6,)) +$(eval $(call PackageDir,protocols_luci-proto-openconnect,protocols/luci-proto-openconnect,)) +$(eval $(call PackageDir,protocols_luci-proto-ppp,protocols/luci-proto-ppp,)) +$(eval $(call PackageDir,protocols_luci-proto-qmi,protocols/luci-proto-qmi,)) +$(eval $(call PackageDir,protocols_luci-proto-relay,protocols/luci-proto-relay,)) +$(eval $(call PackageDir,protocols_luci-proto-vpnc,protocols/luci-proto-vpnc,)) +$(eval $(call PackageDir,protocols_luci-proto-wireguard,protocols/luci-proto-wireguard,)) +$(eval $(call PackageDir,themes_luci-theme-bootstrap,themes/luci-theme-bootstrap,)) +$(eval $(call PackageDir,themes_luci-theme-freifunk-generic,themes/luci-theme-freifunk-generic,)) +$(eval $(call PackageDir,themes_luci-theme-material,themes/luci-theme-material,)) +$(eval $(call PackageDir,themes_luci-theme-openwrt,themes/luci-theme-openwrt,)) diff --git a/feeds/luci.tmp/info/.files-packageinfo.stamp b/feeds/luci.tmp/info/.files-packageinfo.stamp new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci.tmp/info/.files-packageinfo.stamp.18fba22b328dc9a5c59f5263c932cfb7 b/feeds/luci.tmp/info/.files-packageinfo.stamp.18fba22b328dc9a5c59f5263c932cfb7 new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci.tmp/info/.files-targetinfo-45594 b/feeds/luci.tmp/info/.files-targetinfo-45594 new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci.tmp/info/.files-targetinfo.mk b/feeds/luci.tmp/info/.files-targetinfo.mk new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci.tmp/info/.files-targetinfo.stamp b/feeds/luci.tmp/info/.files-targetinfo.stamp new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci.tmp/info/.files-targetinfo.stamp.d41d8cd98f00b204e9800998ecf8427e b/feeds/luci.tmp/info/.files-targetinfo.stamp.d41d8cd98f00b204e9800998ecf8427e new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci.tmp/info/.overrides-packageinfo-45594 b/feeds/luci.tmp/info/.overrides-packageinfo-45594 new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci.tmp/info/.overrides-targetinfo-45594 b/feeds/luci.tmp/info/.overrides-targetinfo-45594 new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-adblock b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-adblock new file mode 100644 index 0000000..89290aa --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-adblock @@ -0,0 +1,77 @@ +Source-Makefile: feeds/luci/applications/luci-app-adblock/Makefile +Package: luci-app-adblock +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +adblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI support for Adblock +Maintainer: +Source: +Type: ipkg +Description: LuCI support for Adblock + +@@ + +Package: luci-i18n-adblock-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-adblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-adblock - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-adblock - 普通话 (Chinese) + +@@ + +Package: luci-i18n-adblock-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-adblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-adblock - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-adblock - Svenska (Swedish) + +@@ + +Package: luci-i18n-adblock-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-adblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-adblock - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-adblock - 日本語 (Japanese) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ahcp b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ahcp new file mode 100644 index 0000000..20c4cf6 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ahcp @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-ahcp/Makefile +Package: luci-app-ahcp +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ahcpd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for AHCPd +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for AHCPd + +@@ + +Package: luci-i18n-ahcp-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-ahcp-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Magyar (Hungarian) + +@@ + +Package: luci-i18n-ahcp-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Português (Portuguese) + +@@ + +Package: luci-i18n-ahcp-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Norsk (Norwegian) + +@@ + +Package: luci-i18n-ahcp-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - English + +@@ + +Package: luci-i18n-ahcp-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Polski (Polish) + +@@ + +Package: luci-i18n-ahcp-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-ahcp-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Русский (Russian) + +@@ + +Package: luci-i18n-ahcp-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-ahcp-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-ahcp-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Română (Romanian) + +@@ + +Package: luci-i18n-ahcp-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-ahcp-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - 普通话 (Chinese) + +@@ + +Package: luci-i18n-ahcp-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Deutsch (German) + +@@ + +Package: luci-i18n-ahcp-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-ahcp-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Türkçe (Turkish) + +@@ + +Package: luci-i18n-ahcp-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Svenska (Swedish) + +@@ + +Package: luci-i18n-ahcp-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - 日本語 (Japanese) + +@@ + +Package: luci-i18n-ahcp-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-ahcp-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Català (Catalan) + +@@ + +Package: luci-i18n-ahcp-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Español (Spanish) + +@@ + +Package: luci-i18n-ahcp-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-ahcp-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Čeština (Czech) + +@@ + +Package: luci-i18n-ahcp-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Français (French) + +@@ + +Package: luci-i18n-ahcp-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ahcp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ahcp - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ahcp - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-aria2 b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-aria2 new file mode 100644 index 0000000..5262ddf --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-aria2 @@ -0,0 +1,49 @@ +Source-Makefile: feeds/luci/applications/luci-app-aria2/Makefile +Package: luci-app-aria2 +Submenu: 3. Applications +Version: 1.0.1-2 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +aria2 +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Aria2 +Maintainer: Hsing-Wang Liao +Source: +License: Apache-2.0 +Type: ipkg +Description: LuCI Support for Aria2 +Hsing-Wang Liao +@@ +Config: +# shown in make menuconfig +help + LuCI Support for Aria2 + . + Version: 1.0.1-2 + Hsing-Wang Liao +@@ + +Package: luci-i18n-aria2-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: 1.0.1-2 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-aria2 +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-aria2 - zh-cn translation +Maintainer: Hsing-Wang Liao +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-aria2 - 普通话 (Chinese) +Hsing-Wang Liao +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-asterisk b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-asterisk new file mode 100644 index 0000000..ecca77e --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-asterisk @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-asterisk/Makefile +Package: luci-app-asterisk +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Asterisk +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Asterisk + +@@ + +Package: luci-i18n-asterisk-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-asterisk-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Magyar (Hungarian) + +@@ + +Package: luci-i18n-asterisk-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Português (Portuguese) + +@@ + +Package: luci-i18n-asterisk-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Norsk (Norwegian) + +@@ + +Package: luci-i18n-asterisk-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - English + +@@ + +Package: luci-i18n-asterisk-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Polski (Polish) + +@@ + +Package: luci-i18n-asterisk-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-asterisk-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Русский (Russian) + +@@ + +Package: luci-i18n-asterisk-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-asterisk-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-asterisk-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Română (Romanian) + +@@ + +Package: luci-i18n-asterisk-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-asterisk-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - 普通话 (Chinese) + +@@ + +Package: luci-i18n-asterisk-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Deutsch (German) + +@@ + +Package: luci-i18n-asterisk-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-asterisk-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Türkçe (Turkish) + +@@ + +Package: luci-i18n-asterisk-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Svenska (Swedish) + +@@ + +Package: luci-i18n-asterisk-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - 日本語 (Japanese) + +@@ + +Package: luci-i18n-asterisk-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-asterisk-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Català (Catalan) + +@@ + +Package: luci-i18n-asterisk-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Español (Spanish) + +@@ + +Package: luci-i18n-asterisk-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-asterisk-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Čeština (Czech) + +@@ + +Package: luci-i18n-asterisk-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Français (French) + +@@ + +Package: luci-i18n-asterisk-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-asterisk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-asterisk - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-asterisk - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-commands b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-commands new file mode 100644 index 0000000..8ee9e5a --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-commands @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-commands/Makefile +Package: luci-app-commands +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Shell Command Module +Maintainer: +Source: +Type: ipkg +Description: LuCI Shell Command Module + +@@ + +Package: luci-i18n-commands-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-commands-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Magyar (Hungarian) + +@@ + +Package: luci-i18n-commands-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Português (Portuguese) + +@@ + +Package: luci-i18n-commands-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Norsk (Norwegian) + +@@ + +Package: luci-i18n-commands-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - English + +@@ + +Package: luci-i18n-commands-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Polski (Polish) + +@@ + +Package: luci-i18n-commands-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-commands-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Русский (Russian) + +@@ + +Package: luci-i18n-commands-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-commands-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-commands-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Română (Romanian) + +@@ + +Package: luci-i18n-commands-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-commands-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - 普通话 (Chinese) + +@@ + +Package: luci-i18n-commands-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Deutsch (German) + +@@ + +Package: luci-i18n-commands-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-commands-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Türkçe (Turkish) + +@@ + +Package: luci-i18n-commands-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Svenska (Swedish) + +@@ + +Package: luci-i18n-commands-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - 日本語 (Japanese) + +@@ + +Package: luci-i18n-commands-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-commands-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Català (Catalan) + +@@ + +Package: luci-i18n-commands-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Español (Spanish) + +@@ + +Package: luci-i18n-commands-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-commands-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Čeština (Czech) + +@@ + +Package: luci-i18n-commands-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Français (French) + +@@ + +Package: luci-i18n-commands-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-commands +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-commands - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-commands - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-coovachilli b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-coovachilli new file mode 100644 index 0000000..98da981 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-coovachilli @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-coovachilli/Makefile +Package: luci-app-coovachilli +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Coova Chilli +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Coova Chilli + +@@ + +Package: luci-i18n-coovachilli-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-coovachilli-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Magyar (Hungarian) + +@@ + +Package: luci-i18n-coovachilli-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Português (Portuguese) + +@@ + +Package: luci-i18n-coovachilli-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Norsk (Norwegian) + +@@ + +Package: luci-i18n-coovachilli-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - English + +@@ + +Package: luci-i18n-coovachilli-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Polski (Polish) + +@@ + +Package: luci-i18n-coovachilli-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-coovachilli-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Русский (Russian) + +@@ + +Package: luci-i18n-coovachilli-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-coovachilli-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-coovachilli-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Română (Romanian) + +@@ + +Package: luci-i18n-coovachilli-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-coovachilli-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - 普通话 (Chinese) + +@@ + +Package: luci-i18n-coovachilli-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Deutsch (German) + +@@ + +Package: luci-i18n-coovachilli-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-coovachilli-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Türkçe (Turkish) + +@@ + +Package: luci-i18n-coovachilli-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Svenska (Swedish) + +@@ + +Package: luci-i18n-coovachilli-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - 日本語 (Japanese) + +@@ + +Package: luci-i18n-coovachilli-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-coovachilli-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Català (Catalan) + +@@ + +Package: luci-i18n-coovachilli-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Español (Spanish) + +@@ + +Package: luci-i18n-coovachilli-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-coovachilli-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Čeština (Czech) + +@@ + +Package: luci-i18n-coovachilli-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Français (French) + +@@ + +Package: luci-i18n-coovachilli-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-coovachilli +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-coovachilli - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-coovachilli - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ddns b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ddns new file mode 100644 index 0000000..e9dc298 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ddns @@ -0,0 +1,441 @@ +Source-Makefile: feeds/luci/applications/luci-app-ddns/Makefile +Package: luci-app-ddns +Submenu: 3. Applications +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-mod-admin-full +ddns-scripts +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Dynamic DNS Client (ddns-scripts) +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Description: LuCI Support for Dynamic DNS Client (ddns-scripts) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - hu translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Magyar (Hungarian) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - pt translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Português (Portuguese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-no +Default: LUCI_LANG_no||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - no translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Norsk (Norwegian) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - pl translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Polski (Polish) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - uk translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - украї́нська (Ukrainian) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - ru translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Русский (Russian) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - vi translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Tiếng Việt (Vietnamese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-he +Default: LUCI_LANG_he||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - he translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - עִבְרִית (Hebrew) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - ro translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Română (Romanian) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - zh-cn translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - 普通话 (Chinese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-de +Default: LUCI_LANG_de||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - de translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Deutsch (German) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - zh-tw translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - 臺灣華語 (Taiwanese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - tr translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Türkçe (Turkish) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - ja translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - 日本語 (Japanese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-el +Default: LUCI_LANG_el||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - el translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Ελληνικά (Greek) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - ca translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Català (Catalan) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-es +Default: LUCI_LANG_es||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - es translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Español (Spanish) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - pt-br translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Português do Brasil (Brazialian Portuguese) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - cs translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Čeština (Czech) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - fr translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Français (French) +Christian Schoenebeck +@@ + +Package: luci-i18n-ddns-it +Default: LUCI_LANG_it||(ALL&&m) +Version: 2.4.8-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ddns +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ddns - it translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ddns - Italiano (Italian) +Christian Schoenebeck +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-diag-core b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-diag-core new file mode 100644 index 0000000..8a80ce7 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-diag-core @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-diag-core/Makefile +Package: luci-app-diag-core +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Diagnostics Tools (Core) +Maintainer: +Source: +Type: ipkg +Description: LuCI Diagnostics Tools (Core) + +@@ + +Package: luci-i18n-diag-core-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-diag-core-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Magyar (Hungarian) + +@@ + +Package: luci-i18n-diag-core-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Português (Portuguese) + +@@ + +Package: luci-i18n-diag-core-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Norsk (Norwegian) + +@@ + +Package: luci-i18n-diag-core-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - English + +@@ + +Package: luci-i18n-diag-core-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Polski (Polish) + +@@ + +Package: luci-i18n-diag-core-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-diag-core-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Русский (Russian) + +@@ + +Package: luci-i18n-diag-core-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-diag-core-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-diag-core-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Română (Romanian) + +@@ + +Package: luci-i18n-diag-core-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-diag-core-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - 普通话 (Chinese) + +@@ + +Package: luci-i18n-diag-core-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Deutsch (German) + +@@ + +Package: luci-i18n-diag-core-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-diag-core-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Türkçe (Turkish) + +@@ + +Package: luci-i18n-diag-core-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Svenska (Swedish) + +@@ + +Package: luci-i18n-diag-core-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - 日本語 (Japanese) + +@@ + +Package: luci-i18n-diag-core-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-diag-core-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Català (Catalan) + +@@ + +Package: luci-i18n-diag-core-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Español (Spanish) + +@@ + +Package: luci-i18n-diag-core-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-diag-core-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Čeština (Czech) + +@@ + +Package: luci-i18n-diag-core-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Français (French) + +@@ + +Package: luci-i18n-diag-core-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-core - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-core - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-diag-devinfo b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-diag-devinfo new file mode 100644 index 0000000..11669b2 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-diag-devinfo @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-diag-devinfo/Makefile +Package: luci-app-diag-devinfo +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-diag-core +smap +netdiscover +mac-to-devinfo +httping +smap-to-devinfo +netdiscover-to-devinfo @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Diagnostics Tools (Device Info) +Maintainer: +Source: +Type: ipkg +Description: LuCI Diagnostics Tools (Device Info) + +@@ + +Package: luci-i18n-diag-devinfo-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-diag-devinfo-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Magyar (Hungarian) + +@@ + +Package: luci-i18n-diag-devinfo-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Português (Portuguese) + +@@ + +Package: luci-i18n-diag-devinfo-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Norsk (Norwegian) + +@@ + +Package: luci-i18n-diag-devinfo-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - English + +@@ + +Package: luci-i18n-diag-devinfo-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Polski (Polish) + +@@ + +Package: luci-i18n-diag-devinfo-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-diag-devinfo-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Русский (Russian) + +@@ + +Package: luci-i18n-diag-devinfo-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-diag-devinfo-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-diag-devinfo-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Română (Romanian) + +@@ + +Package: luci-i18n-diag-devinfo-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-diag-devinfo-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - 普通话 (Chinese) + +@@ + +Package: luci-i18n-diag-devinfo-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Deutsch (German) + +@@ + +Package: luci-i18n-diag-devinfo-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-diag-devinfo-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Türkçe (Turkish) + +@@ + +Package: luci-i18n-diag-devinfo-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Svenska (Swedish) + +@@ + +Package: luci-i18n-diag-devinfo-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - 日本語 (Japanese) + +@@ + +Package: luci-i18n-diag-devinfo-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-diag-devinfo-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Català (Catalan) + +@@ + +Package: luci-i18n-diag-devinfo-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Español (Spanish) + +@@ + +Package: luci-i18n-diag-devinfo-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-diag-devinfo-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Čeština (Czech) + +@@ + +Package: luci-i18n-diag-devinfo-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Français (French) + +@@ + +Package: luci-i18n-diag-devinfo-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-diag-devinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-diag-devinfo - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-diag-devinfo - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-dump1090 b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-dump1090 new file mode 100644 index 0000000..0cc6e68 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-dump1090 @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-dump1090/Makefile +Package: luci-app-dump1090 +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +dump1090 +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for dump1090 +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for dump1090 + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-dynapoint b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-dynapoint new file mode 100644 index 0000000..46b7f87 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-dynapoint @@ -0,0 +1,61 @@ +Source-Makefile: feeds/luci/applications/luci-app-dynapoint/Makefile +Package: luci-app-dynapoint +Submenu: 3. Applications +Version: 1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +dynapoint +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for DynaPoint +Maintainer: Tobias Ilte +Source: +License: GPL-3.0+ +Type: ipkg +Description: LuCI Support for DynaPoint +Tobias Ilte +@@ + +Package: luci-i18n-dynapoint-de +Default: LUCI_LANG_de||(ALL&&m) +Version: 1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-dynapoint +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-dynapoint - de translation +Maintainer: Tobias Ilte +Source: +License: GPL-3.0+ +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-dynapoint - Deutsch (German) +Tobias Ilte +@@ + +Package: luci-i18n-dynapoint-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: 1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-dynapoint +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-dynapoint - ja translation +Maintainer: Tobias Ilte +Source: +License: GPL-3.0+ +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-dynapoint - 日本語 (Japanese) +Tobias Ilte +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-firewall b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-firewall new file mode 100644 index 0000000..b3bdb7a --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-firewall @@ -0,0 +1,514 @@ +Source-Makefile: feeds/luci/applications/luci-app-firewall/Makefile +Package: luci-app-firewall +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Firewall and Portforwarding application +Maintainer: +Source: +Type: ipkg +Description: Firewall and Portforwarding application + +@@ + +Package: luci-i18n-firewall-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-firewall-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Magyar (Hungarian) + +@@ + +Package: luci-i18n-firewall-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Português (Portuguese) + +@@ + +Package: luci-i18n-firewall-ko +Default: LUCI_LANG_ko||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ko translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - 한국어 (Korean) + +@@ + +Package: luci-i18n-firewall-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - English + +@@ + +Package: luci-i18n-firewall-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Polski (Polish) + +@@ + +Package: luci-i18n-firewall-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-firewall-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Русский (Russian) + +@@ + +Package: luci-i18n-firewall-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-firewall-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-firewall-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Norsk (Norwegian) + +@@ + +Package: luci-i18n-firewall-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-firewall-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - 普通话 (Chinese) + +@@ + +Package: luci-i18n-firewall-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Română (Romanian) + +@@ + +Package: luci-i18n-firewall-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Deutsch (German) + +@@ + +Package: luci-i18n-firewall-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-firewall-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Türkçe (Turkish) + +@@ + +Package: luci-i18n-firewall-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Svenska (Swedish) + +@@ + +Package: luci-i18n-firewall-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - 日本語 (Japanese) + +@@ + +Package: luci-i18n-firewall-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-firewall-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Català (Catalan) + +@@ + +Package: luci-i18n-firewall-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Español (Spanish) + +@@ + +Package: luci-i18n-firewall-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-firewall-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Čeština (Czech) + +@@ + +Package: luci-i18n-firewall-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Français (French) + +@@ + +Package: luci-i18n-firewall-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-firewall +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-firewall - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-firewall - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-freifunk-diagnostics b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-freifunk-diagnostics new file mode 100644 index 0000000..0eb3a62 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-freifunk-diagnostics @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-freifunk-diagnostics/Makefile +Package: luci-app-freifunk-diagnostics +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Tools for network diagnosis like traceroute and ping +Maintainer: +Source: +Type: ipkg +Description: Tools for network diagnosis like traceroute and ping + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-freifunk-policyrouting b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-freifunk-policyrouting new file mode 100644 index 0000000..aa29dc5 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-freifunk-policyrouting @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-freifunk-policyrouting/Makefile +Package: luci-app-freifunk-policyrouting +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Policy routing for mesh traffic +Maintainer: +Source: +Type: ipkg +Description: Policy routing for mesh traffic + +@@ + +Package: luci-i18n-freifunk-policyrouting-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-freifunk-policyrouting-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Magyar (Hungarian) + +@@ + +Package: luci-i18n-freifunk-policyrouting-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Português (Portuguese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Norsk (Norwegian) + +@@ + +Package: luci-i18n-freifunk-policyrouting-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - English + +@@ + +Package: luci-i18n-freifunk-policyrouting-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Polski (Polish) + +@@ + +Package: luci-i18n-freifunk-policyrouting-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-freifunk-policyrouting-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Русский (Russian) + +@@ + +Package: luci-i18n-freifunk-policyrouting-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-freifunk-policyrouting-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Română (Romanian) + +@@ + +Package: luci-i18n-freifunk-policyrouting-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-freifunk-policyrouting-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - 普通话 (Chinese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Deutsch (German) + +@@ + +Package: luci-i18n-freifunk-policyrouting-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Türkçe (Turkish) + +@@ + +Package: luci-i18n-freifunk-policyrouting-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Svenska (Swedish) + +@@ + +Package: luci-i18n-freifunk-policyrouting-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - 日本語 (Japanese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-freifunk-policyrouting-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Català (Catalan) + +@@ + +Package: luci-i18n-freifunk-policyrouting-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Español (Spanish) + +@@ + +Package: luci-i18n-freifunk-policyrouting-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-freifunk-policyrouting-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Čeština (Czech) + +@@ + +Package: luci-i18n-freifunk-policyrouting-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Français (French) + +@@ + +Package: luci-i18n-freifunk-policyrouting-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-freifunk-policyrouting +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-freifunk-policyrouting - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-freifunk-policyrouting - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-freifunk-widgets b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-freifunk-widgets new file mode 100644 index 0000000..be5b06c --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-freifunk-widgets @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-freifunk-widgets/Makefile +Package: luci-app-freifunk-widgets +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Widgets for the Freifunk index page +Maintainer: +Source: +Type: ipkg +Description: Widgets for the Freifunk index page + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-fwknopd b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-fwknopd new file mode 100644 index 0000000..e3baa24 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-fwknopd @@ -0,0 +1,41 @@ +Source-Makefile: feeds/luci/applications/luci-app-fwknopd/Makefile +Package: luci-app-fwknopd +Submenu: 3. Applications +Version: 1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +fwknopd +qrencode +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Fwknopd config - web config for the firewall knock daemon +Maintainer: Jonathan Bennett +Source: +License: GPLv2 +Type: ipkg +Description: Fwknopd config - web config for the firewall knock daemon +Jonathan Bennett +@@ + +Package: luci-i18n-fwknopd-en +Default: LUCI_LANG_en||(ALL&&m) +Version: 1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-fwknopd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-fwknopd - en translation +Maintainer: Jonathan Bennett +Source: +License: GPLv2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-fwknopd - English +Jonathan Bennett +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-hd-idle b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-hd-idle new file mode 100644 index 0000000..a23f5f9 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-hd-idle @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-hd-idle/Makefile +Package: luci-app-hd-idle +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Hard Disk Idle Spin-Down module +Maintainer: +Source: +Type: ipkg +Description: Hard Disk Idle Spin-Down module + +@@ + +Package: luci-i18n-hd-idle-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-hd-idle-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Magyar (Hungarian) + +@@ + +Package: luci-i18n-hd-idle-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Português (Portuguese) + +@@ + +Package: luci-i18n-hd-idle-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Norsk (Norwegian) + +@@ + +Package: luci-i18n-hd-idle-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - English + +@@ + +Package: luci-i18n-hd-idle-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Polski (Polish) + +@@ + +Package: luci-i18n-hd-idle-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-hd-idle-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Русский (Russian) + +@@ + +Package: luci-i18n-hd-idle-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-hd-idle-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-hd-idle-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Română (Romanian) + +@@ + +Package: luci-i18n-hd-idle-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-hd-idle-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - 普通话 (Chinese) + +@@ + +Package: luci-i18n-hd-idle-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Deutsch (German) + +@@ + +Package: luci-i18n-hd-idle-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-hd-idle-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Türkçe (Turkish) + +@@ + +Package: luci-i18n-hd-idle-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Svenska (Swedish) + +@@ + +Package: luci-i18n-hd-idle-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - 日本語 (Japanese) + +@@ + +Package: luci-i18n-hd-idle-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-hd-idle-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Català (Catalan) + +@@ + +Package: luci-i18n-hd-idle-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Español (Spanish) + +@@ + +Package: luci-i18n-hd-idle-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-hd-idle-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Čeština (Czech) + +@@ + +Package: luci-i18n-hd-idle-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Français (French) + +@@ + +Package: luci-i18n-hd-idle-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-hd-idle +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-hd-idle - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-hd-idle - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ltqtapi b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ltqtapi new file mode 100644 index 0000000..95dac6c --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ltqtapi @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-ltqtapi/Makefile +Package: luci-app-ltqtapi +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Lantiq Devices +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Lantiq Devices + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-meshwizard b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-meshwizard new file mode 100644 index 0000000..860943e --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-meshwizard @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-meshwizard/Makefile +Package: luci-app-meshwizard +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Shellscript based wizard to setup mesh networks +Maintainer: +Source: +Type: ipkg +Description: Shellscript based wizard to setup mesh networks + +@@ + +Package: luci-i18n-meshwizard-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-meshwizard-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Magyar (Hungarian) + +@@ + +Package: luci-i18n-meshwizard-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Português (Portuguese) + +@@ + +Package: luci-i18n-meshwizard-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Norsk (Norwegian) + +@@ + +Package: luci-i18n-meshwizard-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - English + +@@ + +Package: luci-i18n-meshwizard-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Polski (Polish) + +@@ + +Package: luci-i18n-meshwizard-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-meshwizard-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Русский (Russian) + +@@ + +Package: luci-i18n-meshwizard-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-meshwizard-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-meshwizard-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Română (Romanian) + +@@ + +Package: luci-i18n-meshwizard-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-meshwizard-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - 普通话 (Chinese) + +@@ + +Package: luci-i18n-meshwizard-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Deutsch (German) + +@@ + +Package: luci-i18n-meshwizard-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-meshwizard-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Türkçe (Turkish) + +@@ + +Package: luci-i18n-meshwizard-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Svenska (Swedish) + +@@ + +Package: luci-i18n-meshwizard-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - 日本語 (Japanese) + +@@ + +Package: luci-i18n-meshwizard-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-meshwizard-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Català (Catalan) + +@@ + +Package: luci-i18n-meshwizard-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Español (Spanish) + +@@ + +Package: luci-i18n-meshwizard-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-meshwizard-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Čeština (Czech) + +@@ + +Package: luci-i18n-meshwizard-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Français (French) + +@@ + +Package: luci-i18n-meshwizard-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-meshwizard +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-meshwizard - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-meshwizard - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-minidlna b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-minidlna new file mode 100644 index 0000000..2d6e5fc --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-minidlna @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-minidlna/Makefile +Package: luci-app-minidlna +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for miniDLNA +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for miniDLNA + +@@ + +Package: luci-i18n-minidlna-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-minidlna-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Magyar (Hungarian) + +@@ + +Package: luci-i18n-minidlna-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Português (Portuguese) + +@@ + +Package: luci-i18n-minidlna-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Norsk (Norwegian) + +@@ + +Package: luci-i18n-minidlna-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - English + +@@ + +Package: luci-i18n-minidlna-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Polski (Polish) + +@@ + +Package: luci-i18n-minidlna-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-minidlna-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Русский (Russian) + +@@ + +Package: luci-i18n-minidlna-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-minidlna-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-minidlna-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Română (Romanian) + +@@ + +Package: luci-i18n-minidlna-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-minidlna-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - 普通话 (Chinese) + +@@ + +Package: luci-i18n-minidlna-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Deutsch (German) + +@@ + +Package: luci-i18n-minidlna-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-minidlna-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Türkçe (Turkish) + +@@ + +Package: luci-i18n-minidlna-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Svenska (Swedish) + +@@ + +Package: luci-i18n-minidlna-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - 日本語 (Japanese) + +@@ + +Package: luci-i18n-minidlna-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-minidlna-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Català (Catalan) + +@@ + +Package: luci-i18n-minidlna-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Español (Spanish) + +@@ + +Package: luci-i18n-minidlna-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-minidlna-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Čeština (Czech) + +@@ + +Package: luci-i18n-minidlna-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Français (French) + +@@ + +Package: luci-i18n-minidlna-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-minidlna +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-minidlna - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-minidlna - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-mjpg-streamer b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-mjpg-streamer new file mode 100644 index 0000000..542a3d7 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-mjpg-streamer @@ -0,0 +1,58 @@ +Source-Makefile: feeds/luci/applications/luci-app-mjpg-streamer/Makefile +Package: luci-app-mjpg-streamer +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +mjpg-streamer +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: MJPG-Streamer service configuration module +Maintainer: +Source: +Type: ipkg +Description: MJPG-Streamer service configuration module + +@@ + +Package: luci-i18n-mjpg-streamer-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mjpg-streamer +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mjpg-streamer - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mjpg-streamer - 普通话 (Chinese) + +@@ + +Package: luci-i18n-mjpg-streamer-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mjpg-streamer +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mjpg-streamer - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mjpg-streamer - 日本語 (Japanese) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-mmc-over-gpio b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-mmc-over-gpio new file mode 100644 index 0000000..992ff67 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-mmc-over-gpio @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-mmc-over-gpio/Makefile +Package: luci-app-mmc-over-gpio +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +kmod-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: MMC-over-GPIO configuration module +Maintainer: +Source: +Type: ipkg +Description: MMC-over-GPIO configuration module + +@@ + +Package: luci-i18n-mmc-over-gpio-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-mmc-over-gpio-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Magyar (Hungarian) + +@@ + +Package: luci-i18n-mmc-over-gpio-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Português (Portuguese) + +@@ + +Package: luci-i18n-mmc-over-gpio-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Norsk (Norwegian) + +@@ + +Package: luci-i18n-mmc-over-gpio-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - English + +@@ + +Package: luci-i18n-mmc-over-gpio-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Polski (Polish) + +@@ + +Package: luci-i18n-mmc-over-gpio-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-mmc-over-gpio-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Русский (Russian) + +@@ + +Package: luci-i18n-mmc-over-gpio-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-mmc-over-gpio-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-mmc-over-gpio-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Română (Romanian) + +@@ + +Package: luci-i18n-mmc-over-gpio-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-mmc-over-gpio-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - 普通话 (Chinese) + +@@ + +Package: luci-i18n-mmc-over-gpio-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Deutsch (German) + +@@ + +Package: luci-i18n-mmc-over-gpio-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-mmc-over-gpio-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Türkçe (Turkish) + +@@ + +Package: luci-i18n-mmc-over-gpio-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Svenska (Swedish) + +@@ + +Package: luci-i18n-mmc-over-gpio-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - 日本語 (Japanese) + +@@ + +Package: luci-i18n-mmc-over-gpio-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-mmc-over-gpio-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Català (Catalan) + +@@ + +Package: luci-i18n-mmc-over-gpio-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Español (Spanish) + +@@ + +Package: luci-i18n-mmc-over-gpio-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-mmc-over-gpio-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Čeština (Czech) + +@@ + +Package: luci-i18n-mmc-over-gpio-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Français (French) + +@@ + +Package: luci-i18n-mmc-over-gpio-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-mmc-over-gpio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-mmc-over-gpio - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-mmc-over-gpio - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-multiwan b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-multiwan new file mode 100644 index 0000000..f46358b --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-multiwan @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-multiwan/Makefile +Package: luci-app-multiwan +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +multiwan @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for the OpenWrt MultiWAN agent (obsoleted by mwan3) +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for the OpenWrt MultiWAN agent (obsoleted by mwan3) + +@@ + +Package: luci-i18n-multiwan-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-multiwan-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Magyar (Hungarian) + +@@ + +Package: luci-i18n-multiwan-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Português (Portuguese) + +@@ + +Package: luci-i18n-multiwan-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Norsk (Norwegian) + +@@ + +Package: luci-i18n-multiwan-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - English + +@@ + +Package: luci-i18n-multiwan-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Polski (Polish) + +@@ + +Package: luci-i18n-multiwan-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-multiwan-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Русский (Russian) + +@@ + +Package: luci-i18n-multiwan-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-multiwan-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-multiwan-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Română (Romanian) + +@@ + +Package: luci-i18n-multiwan-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-multiwan-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - 普通话 (Chinese) + +@@ + +Package: luci-i18n-multiwan-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Deutsch (German) + +@@ + +Package: luci-i18n-multiwan-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-multiwan-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Türkçe (Turkish) + +@@ + +Package: luci-i18n-multiwan-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Svenska (Swedish) + +@@ + +Package: luci-i18n-multiwan-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - 日本語 (Japanese) + +@@ + +Package: luci-i18n-multiwan-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-multiwan-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Català (Catalan) + +@@ + +Package: luci-i18n-multiwan-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Español (Spanish) + +@@ + +Package: luci-i18n-multiwan-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-multiwan-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Čeština (Czech) + +@@ + +Package: luci-i18n-multiwan-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Français (French) + +@@ + +Package: luci-i18n-multiwan-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-multiwan +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-multiwan - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-multiwan - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ntpc b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ntpc new file mode 100644 index 0000000..087c96f --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ntpc @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-ntpc/Makefile +Package: luci-app-ntpc +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ntpclient +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: NTP time synchronisation configuration module +Maintainer: +Source: +Type: ipkg +Description: NTP time synchronisation configuration module + +@@ + +Package: luci-i18n-ntpc-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-ntpc-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Magyar (Hungarian) + +@@ + +Package: luci-i18n-ntpc-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Português (Portuguese) + +@@ + +Package: luci-i18n-ntpc-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Norsk (Norwegian) + +@@ + +Package: luci-i18n-ntpc-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - English + +@@ + +Package: luci-i18n-ntpc-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Polski (Polish) + +@@ + +Package: luci-i18n-ntpc-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-ntpc-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Русский (Russian) + +@@ + +Package: luci-i18n-ntpc-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-ntpc-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-ntpc-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Română (Romanian) + +@@ + +Package: luci-i18n-ntpc-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-ntpc-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - 普通话 (Chinese) + +@@ + +Package: luci-i18n-ntpc-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Deutsch (German) + +@@ + +Package: luci-i18n-ntpc-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-ntpc-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Türkçe (Turkish) + +@@ + +Package: luci-i18n-ntpc-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Svenska (Swedish) + +@@ + +Package: luci-i18n-ntpc-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - 日本語 (Japanese) + +@@ + +Package: luci-i18n-ntpc-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-ntpc-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Català (Catalan) + +@@ + +Package: luci-i18n-ntpc-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Español (Spanish) + +@@ + +Package: luci-i18n-ntpc-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-ntpc-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Čeština (Czech) + +@@ + +Package: luci-i18n-ntpc-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Français (French) + +@@ + +Package: luci-i18n-ntpc-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ntpc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ntpc - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ntpc - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ocserv b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ocserv new file mode 100644 index 0000000..71d4d33 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ocserv @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-ocserv/Makefile +Package: luci-app-ocserv +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ocserv +certtool +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for OpenConnect VPN +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for OpenConnect VPN + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-olsr b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-olsr new file mode 100644 index 0000000..ba7aed5 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-olsr @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-olsr/Makefile +Package: luci-app-olsr +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +olsrd +olsrd-mod-jsoninfo +luci-lib-luaneightbl +luci-lib-json +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: OLSR configuration and status module +Maintainer: +Source: +Type: ipkg +Description: OLSR configuration and status module + +@@ + +Package: luci-i18n-olsr-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-olsr-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Magyar (Hungarian) + +@@ + +Package: luci-i18n-olsr-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Português (Portuguese) + +@@ + +Package: luci-i18n-olsr-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Norsk (Norwegian) + +@@ + +Package: luci-i18n-olsr-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - English + +@@ + +Package: luci-i18n-olsr-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Polski (Polish) + +@@ + +Package: luci-i18n-olsr-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-olsr-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Русский (Russian) + +@@ + +Package: luci-i18n-olsr-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-olsr-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-olsr-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Română (Romanian) + +@@ + +Package: luci-i18n-olsr-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-olsr-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - 普通话 (Chinese) + +@@ + +Package: luci-i18n-olsr-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Deutsch (German) + +@@ + +Package: luci-i18n-olsr-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-olsr-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Türkçe (Turkish) + +@@ + +Package: luci-i18n-olsr-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Svenska (Swedish) + +@@ + +Package: luci-i18n-olsr-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - 日本語 (Japanese) + +@@ + +Package: luci-i18n-olsr-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-olsr-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Català (Catalan) + +@@ + +Package: luci-i18n-olsr-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Español (Spanish) + +@@ + +Package: luci-i18n-olsr-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-olsr-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Čeština (Czech) + +@@ + +Package: luci-i18n-olsr-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Français (French) + +@@ + +Package: luci-i18n-olsr-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-olsr +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-olsr - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-olsr - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-olsr-services b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-olsr-services new file mode 100644 index 0000000..054c0c9 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-olsr-services @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-olsr-services/Makefile +Package: luci-app-olsr-services +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-olsr +olsrd +olsrd-mod-nameservice +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Show services announced with the nameservice plugin +Maintainer: +Source: +Type: ipkg +Description: Show services announced with the nameservice plugin + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-olsr-viz b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-olsr-viz new file mode 100644 index 0000000..f903996 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-olsr-viz @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-olsr-viz/Makefile +Package: luci-app-olsr-viz +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-olsr +olsrd +olsrd-mod-txtinfo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: OLSR Visualisation +Maintainer: +Source: +Type: ipkg +Description: OLSR Visualisation + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-openvpn b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-openvpn new file mode 100644 index 0000000..aeedb10 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-openvpn @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-openvpn/Makefile +Package: luci-app-openvpn +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for OpenVPN +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for OpenVPN + +@@ + +Package: luci-i18n-openvpn-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-openvpn-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Magyar (Hungarian) + +@@ + +Package: luci-i18n-openvpn-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Português (Portuguese) + +@@ + +Package: luci-i18n-openvpn-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Norsk (Norwegian) + +@@ + +Package: luci-i18n-openvpn-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - English + +@@ + +Package: luci-i18n-openvpn-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Polski (Polish) + +@@ + +Package: luci-i18n-openvpn-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-openvpn-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Русский (Russian) + +@@ + +Package: luci-i18n-openvpn-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-openvpn-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-openvpn-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Română (Romanian) + +@@ + +Package: luci-i18n-openvpn-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-openvpn-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - 普通话 (Chinese) + +@@ + +Package: luci-i18n-openvpn-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Deutsch (German) + +@@ + +Package: luci-i18n-openvpn-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-openvpn-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Türkçe (Turkish) + +@@ + +Package: luci-i18n-openvpn-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Svenska (Swedish) + +@@ + +Package: luci-i18n-openvpn-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - 日本語 (Japanese) + +@@ + +Package: luci-i18n-openvpn-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-openvpn-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Català (Catalan) + +@@ + +Package: luci-i18n-openvpn-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Español (Spanish) + +@@ + +Package: luci-i18n-openvpn-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-openvpn-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Čeština (Czech) + +@@ + +Package: luci-i18n-openvpn-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Français (French) + +@@ + +Package: luci-i18n-openvpn-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-openvpn +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-openvpn - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-openvpn - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-p2pblock b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-p2pblock new file mode 100644 index 0000000..f5704c2 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-p2pblock @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-p2pblock/Makefile +Package: luci-app-p2pblock +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-firewall +freifunk-p2pblock @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for the Freifunk P2P-Block addon +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for the Freifunk P2P-Block addon + +@@ + +Package: luci-i18n-p2pblock-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-p2pblock-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Magyar (Hungarian) + +@@ + +Package: luci-i18n-p2pblock-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Português (Portuguese) + +@@ + +Package: luci-i18n-p2pblock-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Norsk (Norwegian) + +@@ + +Package: luci-i18n-p2pblock-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - English + +@@ + +Package: luci-i18n-p2pblock-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Polski (Polish) + +@@ + +Package: luci-i18n-p2pblock-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-p2pblock-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Русский (Russian) + +@@ + +Package: luci-i18n-p2pblock-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-p2pblock-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-p2pblock-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Română (Romanian) + +@@ + +Package: luci-i18n-p2pblock-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-p2pblock-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - 普通话 (Chinese) + +@@ + +Package: luci-i18n-p2pblock-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Deutsch (German) + +@@ + +Package: luci-i18n-p2pblock-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-p2pblock-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Türkçe (Turkish) + +@@ + +Package: luci-i18n-p2pblock-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Svenska (Swedish) + +@@ + +Package: luci-i18n-p2pblock-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - 日本語 (Japanese) + +@@ + +Package: luci-i18n-p2pblock-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-p2pblock-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Català (Catalan) + +@@ + +Package: luci-i18n-p2pblock-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Español (Spanish) + +@@ + +Package: luci-i18n-p2pblock-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-p2pblock-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Čeština (Czech) + +@@ + +Package: luci-i18n-p2pblock-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Français (French) + +@@ + +Package: luci-i18n-p2pblock-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p2pblock +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p2pblock - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p2pblock - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-p910nd b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-p910nd new file mode 100644 index 0000000..b71cfac --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-p910nd @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-p910nd/Makefile +Package: luci-app-p910nd +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: p910nd - Printer server module +Maintainer: +Source: +Type: ipkg +Description: p910nd - Printer server module + +@@ + +Package: luci-i18n-p910nd-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-p910nd-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Magyar (Hungarian) + +@@ + +Package: luci-i18n-p910nd-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Português (Portuguese) + +@@ + +Package: luci-i18n-p910nd-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Norsk (Norwegian) + +@@ + +Package: luci-i18n-p910nd-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - English + +@@ + +Package: luci-i18n-p910nd-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Polski (Polish) + +@@ + +Package: luci-i18n-p910nd-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-p910nd-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Русский (Russian) + +@@ + +Package: luci-i18n-p910nd-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-p910nd-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-p910nd-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Română (Romanian) + +@@ + +Package: luci-i18n-p910nd-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-p910nd-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - 普通话 (Chinese) + +@@ + +Package: luci-i18n-p910nd-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Deutsch (German) + +@@ + +Package: luci-i18n-p910nd-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-p910nd-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Türkçe (Turkish) + +@@ + +Package: luci-i18n-p910nd-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Svenska (Swedish) + +@@ + +Package: luci-i18n-p910nd-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - 日本語 (Japanese) + +@@ + +Package: luci-i18n-p910nd-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-p910nd-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Català (Catalan) + +@@ + +Package: luci-i18n-p910nd-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Español (Spanish) + +@@ + +Package: luci-i18n-p910nd-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-p910nd-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Čeština (Czech) + +@@ + +Package: luci-i18n-p910nd-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Français (French) + +@@ + +Package: luci-i18n-p910nd-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-p910nd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-p910nd - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-p910nd - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-pbx b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-pbx new file mode 100644 index 0000000..4d2ab76 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-pbx @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-pbx/Makefile +Package: luci-app-pbx +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @BROKEN +asterisk18 +asterisk18-app-authenticate +asterisk18-app-disa +asterisk18-app-setcallerid +asterisk18-app-system +asterisk18-chan-gtalk +asterisk18-codec-a-mu +asterisk18-codec-alaw +asterisk18-func-cut +asterisk18-res-clioriginate +asterisk18-func-channel +asterisk18-chan-local +asterisk18-app-record +asterisk18-app-senddtmf +asterisk18-res-crypto +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI PBX Administration +Maintainer: +Source: +Type: ipkg +Description: LuCI PBX Administration + +@@ + +Package: luci-i18n-pbx-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-pbx-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Magyar (Hungarian) + +@@ + +Package: luci-i18n-pbx-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Português (Portuguese) + +@@ + +Package: luci-i18n-pbx-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Norsk (Norwegian) + +@@ + +Package: luci-i18n-pbx-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - English + +@@ + +Package: luci-i18n-pbx-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Polski (Polish) + +@@ + +Package: luci-i18n-pbx-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-pbx-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Русский (Russian) + +@@ + +Package: luci-i18n-pbx-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-pbx-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-pbx-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Română (Romanian) + +@@ + +Package: luci-i18n-pbx-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-pbx-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - 普通话 (Chinese) + +@@ + +Package: luci-i18n-pbx-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Deutsch (German) + +@@ + +Package: luci-i18n-pbx-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-pbx-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Türkçe (Turkish) + +@@ + +Package: luci-i18n-pbx-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Svenska (Swedish) + +@@ + +Package: luci-i18n-pbx-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - 日本語 (Japanese) + +@@ + +Package: luci-i18n-pbx-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-pbx-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Català (Catalan) + +@@ + +Package: luci-i18n-pbx-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Español (Spanish) + +@@ + +Package: luci-i18n-pbx-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-pbx-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Čeština (Czech) + +@@ + +Package: luci-i18n-pbx-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Français (French) + +@@ + +Package: luci-i18n-pbx-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-pbx-voicemail b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-pbx-voicemail new file mode 100644 index 0000000..9df56eb --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-pbx-voicemail @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-pbx-voicemail/Makefile +Package: luci-app-pbx-voicemail +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-pbx +asterisk18 +msmtp +coreutils-base64 @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI PBX Administration Voicemail Support +Maintainer: +Source: +Type: ipkg +Description: LuCI PBX Administration Voicemail Support + +@@ + +Package: luci-i18n-pbx-voicemail-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-pbx-voicemail-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Magyar (Hungarian) + +@@ + +Package: luci-i18n-pbx-voicemail-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Português (Portuguese) + +@@ + +Package: luci-i18n-pbx-voicemail-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Norsk (Norwegian) + +@@ + +Package: luci-i18n-pbx-voicemail-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - English + +@@ + +Package: luci-i18n-pbx-voicemail-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Polski (Polish) + +@@ + +Package: luci-i18n-pbx-voicemail-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-pbx-voicemail-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Русский (Russian) + +@@ + +Package: luci-i18n-pbx-voicemail-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-pbx-voicemail-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-pbx-voicemail-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Română (Romanian) + +@@ + +Package: luci-i18n-pbx-voicemail-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-pbx-voicemail-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - 普通话 (Chinese) + +@@ + +Package: luci-i18n-pbx-voicemail-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Deutsch (German) + +@@ + +Package: luci-i18n-pbx-voicemail-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-pbx-voicemail-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Türkçe (Turkish) + +@@ + +Package: luci-i18n-pbx-voicemail-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Svenska (Swedish) + +@@ + +Package: luci-i18n-pbx-voicemail-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - 日本語 (Japanese) + +@@ + +Package: luci-i18n-pbx-voicemail-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-pbx-voicemail-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Català (Catalan) + +@@ + +Package: luci-i18n-pbx-voicemail-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Español (Spanish) + +@@ + +Package: luci-i18n-pbx-voicemail-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-pbx-voicemail-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Čeština (Czech) + +@@ + +Package: luci-i18n-pbx-voicemail-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Français (French) + +@@ + +Package: luci-i18n-pbx-voicemail-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-pbx-voicemail +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-pbx-voicemail - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-pbx-voicemail - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-polipo b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-polipo new file mode 100644 index 0000000..f863031 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-polipo @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-polipo/Makefile +Package: luci-app-polipo +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for the Polipo Proxy +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for the Polipo Proxy + +@@ + +Package: luci-i18n-polipo-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-polipo-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Magyar (Hungarian) + +@@ + +Package: luci-i18n-polipo-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Português (Portuguese) + +@@ + +Package: luci-i18n-polipo-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Norsk (Norwegian) + +@@ + +Package: luci-i18n-polipo-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - English + +@@ + +Package: luci-i18n-polipo-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Polski (Polish) + +@@ + +Package: luci-i18n-polipo-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-polipo-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Русский (Russian) + +@@ + +Package: luci-i18n-polipo-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-polipo-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-polipo-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Română (Romanian) + +@@ + +Package: luci-i18n-polipo-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-polipo-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - 普通话 (Chinese) + +@@ + +Package: luci-i18n-polipo-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Deutsch (German) + +@@ + +Package: luci-i18n-polipo-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-polipo-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Türkçe (Turkish) + +@@ + +Package: luci-i18n-polipo-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Svenska (Swedish) + +@@ + +Package: luci-i18n-polipo-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - 日本語 (Japanese) + +@@ + +Package: luci-i18n-polipo-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-polipo-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Català (Catalan) + +@@ + +Package: luci-i18n-polipo-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Español (Spanish) + +@@ + +Package: luci-i18n-polipo-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-polipo-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Čeština (Czech) + +@@ + +Package: luci-i18n-polipo-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Français (French) + +@@ + +Package: luci-i18n-polipo-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-polipo +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-polipo - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-polipo - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-privoxy b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-privoxy new file mode 100644 index 0000000..0fb7ac3 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-privoxy @@ -0,0 +1,89 @@ +Source-Makefile: feeds/luci/applications/luci-app-privoxy/Makefile +Package: luci-app-privoxy +Submenu: 3. Applications +Version: 1.0.6-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-mod-admin-full +privoxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Privoxy WEB proxy +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Description: LuCI Support for Privoxy WEB proxy +Christian Schoenebeck +@@ +Config: +# shown in make menuconfig +help + LuCI Support for Privoxy WEB proxy + . + Version: 1.0.6-1 + Christian Schoenebeck +@@ + +Package: luci-i18n-privoxy-de +Default: LUCI_LANG_de||(ALL&&m) +Version: 1.0.6-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-privoxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-privoxy - de translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-privoxy - Deutsch (German) +Christian Schoenebeck +@@ + +Package: luci-i18n-privoxy-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: 1.0.6-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-privoxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-privoxy - zh-cn translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-privoxy - 普通话 (Chinese) +Christian Schoenebeck +@@ + +Package: luci-i18n-privoxy-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: 1.0.6-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-privoxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-privoxy - sv translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-privoxy - Svenska (Swedish) +Christian Schoenebeck +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-qos b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-qos new file mode 100644 index 0000000..a02a000 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-qos @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-qos/Makefile +Package: luci-app-qos +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +qos-scripts +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Quality of Service configuration module +Maintainer: +Source: +Type: ipkg +Description: Quality of Service configuration module + +@@ + +Package: luci-i18n-qos-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-qos-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Magyar (Hungarian) + +@@ + +Package: luci-i18n-qos-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Português (Portuguese) + +@@ + +Package: luci-i18n-qos-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Norsk (Norwegian) + +@@ + +Package: luci-i18n-qos-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - English + +@@ + +Package: luci-i18n-qos-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Polski (Polish) + +@@ + +Package: luci-i18n-qos-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-qos-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Русский (Russian) + +@@ + +Package: luci-i18n-qos-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-qos-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-qos-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Română (Romanian) + +@@ + +Package: luci-i18n-qos-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-qos-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - 普通话 (Chinese) + +@@ + +Package: luci-i18n-qos-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Deutsch (German) + +@@ + +Package: luci-i18n-qos-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-qos-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Türkçe (Turkish) + +@@ + +Package: luci-i18n-qos-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Svenska (Swedish) + +@@ + +Package: luci-i18n-qos-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - 日本語 (Japanese) + +@@ + +Package: luci-i18n-qos-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-qos-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Català (Catalan) + +@@ + +Package: luci-i18n-qos-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Español (Spanish) + +@@ + +Package: luci-i18n-qos-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-qos-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Čeština (Czech) + +@@ + +Package: luci-i18n-qos-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Français (French) + +@@ + +Package: luci-i18n-qos-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-qos +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-qos - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-qos - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-radicale b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-radicale new file mode 100644 index 0000000..766f585 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-radicale @@ -0,0 +1,72 @@ +Source-Makefile: feeds/luci/applications/luci-app-radicale/Makefile +Package: luci-app-radicale +Submenu: 3. Applications +Version: 1.1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-mod-admin-full +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Radicale CardDAV/CalDAV +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Description: LuCI Support for Radicale CardDAV/CalDAV +Christian Schoenebeck +@@ +Config: +# shown in make menuconfig +help + LuCI Support for Radicale CardDAV/CalDAV + . + !!! Package "radicale-py2" or "radicale-py3" needs to be !!! + !!! installed sepearatly. There is no buildin dependency set !!! + . + Version: 1.1.0-1 + Christian Schoenebeck +@@ + +Package: luci-i18n-radicale-de +Default: LUCI_LANG_de||(ALL&&m) +Version: 1.1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radicale +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radicale - de translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radicale - Deutsch (German) +Christian Schoenebeck +@@ + +Package: luci-i18n-radicale-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: 1.1.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radicale +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radicale - sv translation +Maintainer: Christian Schoenebeck +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radicale - Svenska (Swedish) +Christian Schoenebeck +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-radvd b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-radvd new file mode 100644 index 0000000..ca172f1 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-radvd @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-radvd/Makefile +Package: luci-app-radvd +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +radvd @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Radvd +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Radvd + +@@ + +Package: luci-i18n-radvd-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-radvd-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Magyar (Hungarian) + +@@ + +Package: luci-i18n-radvd-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Português (Portuguese) + +@@ + +Package: luci-i18n-radvd-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Norsk (Norwegian) + +@@ + +Package: luci-i18n-radvd-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - English + +@@ + +Package: luci-i18n-radvd-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Polski (Polish) + +@@ + +Package: luci-i18n-radvd-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-radvd-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Русский (Russian) + +@@ + +Package: luci-i18n-radvd-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-radvd-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-radvd-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Română (Romanian) + +@@ + +Package: luci-i18n-radvd-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-radvd-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - 普通话 (Chinese) + +@@ + +Package: luci-i18n-radvd-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Deutsch (German) + +@@ + +Package: luci-i18n-radvd-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-radvd-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Türkçe (Turkish) + +@@ + +Package: luci-i18n-radvd-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Svenska (Swedish) + +@@ + +Package: luci-i18n-radvd-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - 日本語 (Japanese) + +@@ + +Package: luci-i18n-radvd-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-radvd-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Català (Catalan) + +@@ + +Package: luci-i18n-radvd-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Español (Spanish) + +@@ + +Package: luci-i18n-radvd-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-radvd-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Čeština (Czech) + +@@ + +Package: luci-i18n-radvd-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Français (French) + +@@ + +Package: luci-i18n-radvd-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-radvd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-radvd - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-radvd - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-rp-pppoe-server b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-rp-pppoe-server new file mode 100644 index 0000000..e28cde8 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-rp-pppoe-server @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-rp-pppoe-server/Makefile +Package: luci-app-rp-pppoe-server +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +rp-pppoe-server +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Roaring Penguing PPPoE Server +Maintainer: +Source: +Type: ipkg +Description: Roaring Penguing PPPoE Server + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-samba b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-samba new file mode 100644 index 0000000..e38a859 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-samba @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-samba/Makefile +Package: luci-app-samba +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +samba36-server +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Network Shares - Samba SMB/CIFS module +Maintainer: +Source: +Type: ipkg +Description: Network Shares - Samba SMB/CIFS module + +@@ + +Package: luci-i18n-samba-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-samba-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Magyar (Hungarian) + +@@ + +Package: luci-i18n-samba-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Português (Portuguese) + +@@ + +Package: luci-i18n-samba-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Norsk (Norwegian) + +@@ + +Package: luci-i18n-samba-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - English + +@@ + +Package: luci-i18n-samba-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Polski (Polish) + +@@ + +Package: luci-i18n-samba-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-samba-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Русский (Russian) + +@@ + +Package: luci-i18n-samba-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-samba-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-samba-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Română (Romanian) + +@@ + +Package: luci-i18n-samba-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-samba-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - 普通话 (Chinese) + +@@ + +Package: luci-i18n-samba-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Deutsch (German) + +@@ + +Package: luci-i18n-samba-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-samba-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Türkçe (Turkish) + +@@ + +Package: luci-i18n-samba-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Svenska (Swedish) + +@@ + +Package: luci-i18n-samba-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - 日本語 (Japanese) + +@@ + +Package: luci-i18n-samba-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-samba-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Català (Catalan) + +@@ + +Package: luci-i18n-samba-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Español (Spanish) + +@@ + +Package: luci-i18n-samba-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-samba-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Čeština (Czech) + +@@ + +Package: luci-i18n-samba-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Français (French) + +@@ + +Package: luci-i18n-samba-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-samba +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-samba - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-samba - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-shadowsocks-libev b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-shadowsocks-libev new file mode 100644 index 0000000..3c952aa --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-shadowsocks-libev @@ -0,0 +1,58 @@ +Source-Makefile: feeds/luci/applications/luci-app-shadowsocks-libev/Makefile +Package: luci-app-shadowsocks-libev +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Shadowsocks-libev +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Shadowsocks-libev + +@@ + +Package: luci-i18n-shadowsocks-libev-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-shadowsocks-libev +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-shadowsocks-libev - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-shadowsocks-libev - 普通话 (Chinese) + +@@ + +Package: luci-i18n-shadowsocks-libev-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-shadowsocks-libev +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-shadowsocks-libev - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-shadowsocks-libev - Svenska (Swedish) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-shairplay b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-shairplay new file mode 100644 index 0000000..5a120b5 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-shairplay @@ -0,0 +1,39 @@ +Source-Makefile: feeds/luci/applications/luci-app-shairplay/Makefile +Package: luci-app-shairplay +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +shairplay +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Shairplay +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Shairplay + +@@ + +Package: luci-i18n-shairplay-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-shairplay +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-shairplay - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-shairplay - 日本語 (Japanese) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-shairport b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-shairport new file mode 100644 index 0000000..95e205d --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-shairport @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-shairport/Makefile +Package: luci-app-shairport +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +shairport +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Shairport +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Shairport + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-siitwizard b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-siitwizard new file mode 100644 index 0000000..7fdc696 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-siitwizard @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-siitwizard/Makefile +Package: luci-app-siitwizard +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +kmod-siit +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: SIIT IPv4-over-IPv6 configuration wizard +Maintainer: +Source: +Type: ipkg +Description: SIIT IPv4-over-IPv6 configuration wizard + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-splash b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-splash new file mode 100644 index 0000000..172daef --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-splash @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-splash/Makefile +Package: luci-app-splash +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-lib-nixio +tc +kmod-sched +iptables-mod-nat-extra +iptables-mod-ipopt +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Freifunk DHCP-Splash application +Maintainer: +Source: +Type: ipkg +Description: Freifunk DHCP-Splash application + +@@ + +Package: luci-i18n-splash-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-splash-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Magyar (Hungarian) + +@@ + +Package: luci-i18n-splash-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Português (Portuguese) + +@@ + +Package: luci-i18n-splash-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Norsk (Norwegian) + +@@ + +Package: luci-i18n-splash-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - English + +@@ + +Package: luci-i18n-splash-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Polski (Polish) + +@@ + +Package: luci-i18n-splash-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-splash-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Русский (Russian) + +@@ + +Package: luci-i18n-splash-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-splash-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-splash-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Română (Romanian) + +@@ + +Package: luci-i18n-splash-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-splash-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - 普通话 (Chinese) + +@@ + +Package: luci-i18n-splash-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Deutsch (German) + +@@ + +Package: luci-i18n-splash-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-splash-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Türkçe (Turkish) + +@@ + +Package: luci-i18n-splash-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Svenska (Swedish) + +@@ + +Package: luci-i18n-splash-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - 日本語 (Japanese) + +@@ + +Package: luci-i18n-splash-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-splash-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Català (Catalan) + +@@ + +Package: luci-i18n-splash-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Español (Spanish) + +@@ + +Package: luci-i18n-splash-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-splash-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Čeština (Czech) + +@@ + +Package: luci-i18n-splash-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Français (French) + +@@ + +Package: luci-i18n-splash-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-splash +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-splash - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-splash - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-statistics b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-statistics new file mode 100644 index 0000000..fafa671 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-statistics @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-statistics/Makefile +Package: luci-app-statistics +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +collectd +rrdtool1 +collectd-mod-rrdtool +collectd-mod-iwinfo +collectd-mod-cpu +collectd-mod-memory +collectd-mod-interface +collectd-mod-load +collectd-mod-network +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Statistics Application +Maintainer: +Source: +Type: ipkg +Description: LuCI Statistics Application + +@@ + +Package: luci-i18n-statistics-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-statistics-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Magyar (Hungarian) + +@@ + +Package: luci-i18n-statistics-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Português (Portuguese) + +@@ + +Package: luci-i18n-statistics-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Norsk (Norwegian) + +@@ + +Package: luci-i18n-statistics-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - English + +@@ + +Package: luci-i18n-statistics-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Polski (Polish) + +@@ + +Package: luci-i18n-statistics-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-statistics-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Русский (Russian) + +@@ + +Package: luci-i18n-statistics-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-statistics-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-statistics-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Română (Romanian) + +@@ + +Package: luci-i18n-statistics-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-statistics-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - 普通话 (Chinese) + +@@ + +Package: luci-i18n-statistics-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Deutsch (German) + +@@ + +Package: luci-i18n-statistics-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-statistics-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Türkçe (Turkish) + +@@ + +Package: luci-i18n-statistics-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Svenska (Swedish) + +@@ + +Package: luci-i18n-statistics-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - 日本語 (Japanese) + +@@ + +Package: luci-i18n-statistics-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-statistics-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Català (Catalan) + +@@ + +Package: luci-i18n-statistics-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Español (Spanish) + +@@ + +Package: luci-i18n-statistics-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-statistics-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Čeština (Czech) + +@@ + +Package: luci-i18n-statistics-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Français (French) + +@@ + +Package: luci-i18n-statistics-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-statistics +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-statistics - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-statistics - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-tinyproxy b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-tinyproxy new file mode 100644 index 0000000..a16af64 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-tinyproxy @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-tinyproxy/Makefile +Package: luci-app-tinyproxy +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Tinyproxy - HTTP(S)-Proxy configuration +Maintainer: +Source: +Type: ipkg +Description: Tinyproxy - HTTP(S)-Proxy configuration + +@@ + +Package: luci-i18n-tinyproxy-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-tinyproxy-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Magyar (Hungarian) + +@@ + +Package: luci-i18n-tinyproxy-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Português (Portuguese) + +@@ + +Package: luci-i18n-tinyproxy-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Norsk (Norwegian) + +@@ + +Package: luci-i18n-tinyproxy-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - English + +@@ + +Package: luci-i18n-tinyproxy-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Polski (Polish) + +@@ + +Package: luci-i18n-tinyproxy-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-tinyproxy-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Русский (Russian) + +@@ + +Package: luci-i18n-tinyproxy-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-tinyproxy-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-tinyproxy-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Română (Romanian) + +@@ + +Package: luci-i18n-tinyproxy-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-tinyproxy-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - 普通话 (Chinese) + +@@ + +Package: luci-i18n-tinyproxy-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Deutsch (German) + +@@ + +Package: luci-i18n-tinyproxy-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-tinyproxy-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Türkçe (Turkish) + +@@ + +Package: luci-i18n-tinyproxy-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Svenska (Swedish) + +@@ + +Package: luci-i18n-tinyproxy-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - 日本語 (Japanese) + +@@ + +Package: luci-i18n-tinyproxy-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-tinyproxy-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Català (Catalan) + +@@ + +Package: luci-i18n-tinyproxy-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Español (Spanish) + +@@ + +Package: luci-i18n-tinyproxy-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-tinyproxy-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Čeština (Czech) + +@@ + +Package: luci-i18n-tinyproxy-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Français (French) + +@@ + +Package: luci-i18n-tinyproxy-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-tinyproxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-tinyproxy - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-tinyproxy - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-transmission b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-transmission new file mode 100644 index 0000000..967de75 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-transmission @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-transmission/Makefile +Package: luci-app-transmission +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Transmission +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Transmission + +@@ + +Package: luci-i18n-transmission-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-transmission-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Magyar (Hungarian) + +@@ + +Package: luci-i18n-transmission-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Português (Portuguese) + +@@ + +Package: luci-i18n-transmission-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Norsk (Norwegian) + +@@ + +Package: luci-i18n-transmission-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - English + +@@ + +Package: luci-i18n-transmission-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Polski (Polish) + +@@ + +Package: luci-i18n-transmission-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-transmission-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Русский (Russian) + +@@ + +Package: luci-i18n-transmission-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-transmission-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-transmission-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Română (Romanian) + +@@ + +Package: luci-i18n-transmission-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-transmission-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - 普通话 (Chinese) + +@@ + +Package: luci-i18n-transmission-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Deutsch (German) + +@@ + +Package: luci-i18n-transmission-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-transmission-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Türkçe (Turkish) + +@@ + +Package: luci-i18n-transmission-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Svenska (Swedish) + +@@ + +Package: luci-i18n-transmission-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - 日本語 (Japanese) + +@@ + +Package: luci-i18n-transmission-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-transmission-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Català (Catalan) + +@@ + +Package: luci-i18n-transmission-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Español (Spanish) + +@@ + +Package: luci-i18n-transmission-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-transmission-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Čeština (Czech) + +@@ + +Package: luci-i18n-transmission-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Français (French) + +@@ + +Package: luci-i18n-transmission-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-transmission +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-transmission - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-transmission - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-travelmate b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-travelmate new file mode 100644 index 0000000..4ad6567 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-travelmate @@ -0,0 +1,39 @@ +Source-Makefile: feeds/luci/applications/luci-app-travelmate/Makefile +Package: luci-app-travelmate +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +travelmate +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI support for Travelmate +Maintainer: +Source: +Type: ipkg +Description: LuCI support for Travelmate + +@@ + +Package: luci-i18n-travelmate-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-travelmate +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-travelmate - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-travelmate - 日本語 (Japanese) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-udpxy b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-udpxy new file mode 100644 index 0000000..47818e6 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-udpxy @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-udpxy/Makefile +Package: luci-app-udpxy +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +udpxy +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for udpxy +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for udpxy + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-uhttpd b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-uhttpd new file mode 100644 index 0000000..5787769 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-uhttpd @@ -0,0 +1,41 @@ +Source-Makefile: feeds/luci/applications/luci-app-uhttpd/Makefile +Package: luci-app-uhttpd +Submenu: 3. Applications +Version: 1.0.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +uhttpd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: uHTTPd Webserver Configuration +Maintainer: Daniel Dickinson +Source: +License: Apache-2.0 +Type: ipkg +Description: uHTTPd Webserver Configuration +Daniel Dickinson +@@ + +Package: luci-i18n-uhttpd-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: 1.0.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-uhttpd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-uhttpd - ja translation +Maintainer: Daniel Dickinson +Source: +License: Apache-2.0 +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-uhttpd - 日本語 (Japanese) +Daniel Dickinson +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-unbound b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-unbound new file mode 100644 index 0000000..6fb89cf --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-unbound @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/applications/luci-app-unbound/Makefile +Package: luci-app-unbound +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +unbound +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Unbound Recursive DNS Resolver Configuration +Maintainer: +Source: +Type: ipkg +Description: Unbound Recursive DNS Resolver Configuration + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-upnp b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-upnp new file mode 100644 index 0000000..ff0dea2 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-upnp @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-upnp/Makefile +Package: luci-app-upnp +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +miniupnpd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Universal Plug & Play configuration module +Maintainer: +Source: +Type: ipkg +Description: Universal Plug & Play configuration module + +@@ + +Package: luci-i18n-upnp-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-upnp-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Magyar (Hungarian) + +@@ + +Package: luci-i18n-upnp-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Português (Portuguese) + +@@ + +Package: luci-i18n-upnp-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Norsk (Norwegian) + +@@ + +Package: luci-i18n-upnp-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - English + +@@ + +Package: luci-i18n-upnp-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Polski (Polish) + +@@ + +Package: luci-i18n-upnp-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-upnp-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Русский (Russian) + +@@ + +Package: luci-i18n-upnp-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-upnp-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-upnp-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Română (Romanian) + +@@ + +Package: luci-i18n-upnp-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-upnp-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - 普通话 (Chinese) + +@@ + +Package: luci-i18n-upnp-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Deutsch (German) + +@@ + +Package: luci-i18n-upnp-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-upnp-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Türkçe (Turkish) + +@@ + +Package: luci-i18n-upnp-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Svenska (Swedish) + +@@ + +Package: luci-i18n-upnp-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - 日本語 (Japanese) + +@@ + +Package: luci-i18n-upnp-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-upnp-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Català (Catalan) + +@@ + +Package: luci-i18n-upnp-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Español (Spanish) + +@@ + +Package: luci-i18n-upnp-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-upnp-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Čeština (Czech) + +@@ + +Package: luci-i18n-upnp-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Français (French) + +@@ + +Package: luci-i18n-upnp-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-upnp +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-upnp - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-upnp - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ushare b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ushare new file mode 100644 index 0000000..5152457 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-ushare @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-ushare/Makefile +Package: luci-app-ushare +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ushare @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: uShare - UPnP A/V & DLNA Media Server +Maintainer: +Source: +Type: ipkg +Description: uShare - UPnP A/V & DLNA Media Server + +@@ + +Package: luci-i18n-ushare-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-ushare-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Magyar (Hungarian) + +@@ + +Package: luci-i18n-ushare-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Português (Portuguese) + +@@ + +Package: luci-i18n-ushare-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Norsk (Norwegian) + +@@ + +Package: luci-i18n-ushare-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - English + +@@ + +Package: luci-i18n-ushare-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Polski (Polish) + +@@ + +Package: luci-i18n-ushare-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-ushare-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Русский (Russian) + +@@ + +Package: luci-i18n-ushare-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-ushare-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-ushare-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Română (Romanian) + +@@ + +Package: luci-i18n-ushare-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-ushare-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - 普通话 (Chinese) + +@@ + +Package: luci-i18n-ushare-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Deutsch (German) + +@@ + +Package: luci-i18n-ushare-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-ushare-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Türkçe (Turkish) + +@@ + +Package: luci-i18n-ushare-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Svenska (Swedish) + +@@ + +Package: luci-i18n-ushare-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - 日本語 (Japanese) + +@@ + +Package: luci-i18n-ushare-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-ushare-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Català (Catalan) + +@@ + +Package: luci-i18n-ushare-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Español (Spanish) + +@@ + +Package: luci-i18n-ushare-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-ushare-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Čeština (Czech) + +@@ + +Package: luci-i18n-ushare-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Français (French) + +@@ + +Package: luci-i18n-ushare-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-ushare +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-ushare - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-ushare - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-vnstat b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-vnstat new file mode 100644 index 0000000..abd2fba --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-vnstat @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-vnstat/Makefile +Package: luci-app-vnstat +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +vnstat +vnstati +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for VnStat +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for VnStat + +@@ + +Package: luci-i18n-vnstat-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-vnstat-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Magyar (Hungarian) + +@@ + +Package: luci-i18n-vnstat-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Português (Portuguese) + +@@ + +Package: luci-i18n-vnstat-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Norsk (Norwegian) + +@@ + +Package: luci-i18n-vnstat-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - English + +@@ + +Package: luci-i18n-vnstat-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Polski (Polish) + +@@ + +Package: luci-i18n-vnstat-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-vnstat-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Русский (Russian) + +@@ + +Package: luci-i18n-vnstat-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-vnstat-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-vnstat-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Română (Romanian) + +@@ + +Package: luci-i18n-vnstat-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-vnstat-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - 普通话 (Chinese) + +@@ + +Package: luci-i18n-vnstat-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Deutsch (German) + +@@ + +Package: luci-i18n-vnstat-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-vnstat-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Türkçe (Turkish) + +@@ + +Package: luci-i18n-vnstat-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Svenska (Swedish) + +@@ + +Package: luci-i18n-vnstat-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - 日本語 (Japanese) + +@@ + +Package: luci-i18n-vnstat-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-vnstat-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Català (Catalan) + +@@ + +Package: luci-i18n-vnstat-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Español (Spanish) + +@@ + +Package: luci-i18n-vnstat-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-vnstat-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Čeština (Czech) + +@@ + +Package: luci-i18n-vnstat-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Français (French) + +@@ + +Package: luci-i18n-vnstat-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-vnstat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-vnstat - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-vnstat - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-voice-core b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-voice-core new file mode 100644 index 0000000..dc0c7a8 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-voice-core @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-voice-core/Makefile +Package: luci-app-voice-core +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Voice Software (Core) +Maintainer: +Source: +Type: ipkg +Description: LuCI Voice Software (Core) + +@@ + +Package: luci-i18n-voice-core-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-voice-core-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Magyar (Hungarian) + +@@ + +Package: luci-i18n-voice-core-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Português (Portuguese) + +@@ + +Package: luci-i18n-voice-core-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Norsk (Norwegian) + +@@ + +Package: luci-i18n-voice-core-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - English + +@@ + +Package: luci-i18n-voice-core-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Polski (Polish) + +@@ + +Package: luci-i18n-voice-core-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-voice-core-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Русский (Russian) + +@@ + +Package: luci-i18n-voice-core-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-voice-core-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-voice-core-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Română (Romanian) + +@@ + +Package: luci-i18n-voice-core-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-voice-core-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - 普通话 (Chinese) + +@@ + +Package: luci-i18n-voice-core-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Deutsch (German) + +@@ + +Package: luci-i18n-voice-core-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-voice-core-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Türkçe (Turkish) + +@@ + +Package: luci-i18n-voice-core-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Svenska (Swedish) + +@@ + +Package: luci-i18n-voice-core-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - 日本語 (Japanese) + +@@ + +Package: luci-i18n-voice-core-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-voice-core-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Català (Catalan) + +@@ + +Package: luci-i18n-voice-core-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Español (Spanish) + +@@ + +Package: luci-i18n-voice-core-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-voice-core-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Čeština (Czech) + +@@ + +Package: luci-i18n-voice-core-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Français (French) + +@@ + +Package: luci-i18n-voice-core-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-core +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-core - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-core - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-voice-diag b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-voice-diag new file mode 100644 index 0000000..01bd9a8 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-voice-diag @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-voice-diag/Makefile +Package: luci-app-voice-diag +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-app-diag-devinfo @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Voice Software (Diagnostics) +Maintainer: +Source: +Type: ipkg +Description: LuCI Voice Software (Diagnostics) + +@@ + +Package: luci-i18n-voice-diag-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-voice-diag-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Magyar (Hungarian) + +@@ + +Package: luci-i18n-voice-diag-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Português (Portuguese) + +@@ + +Package: luci-i18n-voice-diag-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Norsk (Norwegian) + +@@ + +Package: luci-i18n-voice-diag-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - English + +@@ + +Package: luci-i18n-voice-diag-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Polski (Polish) + +@@ + +Package: luci-i18n-voice-diag-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-voice-diag-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Русский (Russian) + +@@ + +Package: luci-i18n-voice-diag-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-voice-diag-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-voice-diag-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Română (Romanian) + +@@ + +Package: luci-i18n-voice-diag-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-voice-diag-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - 普通话 (Chinese) + +@@ + +Package: luci-i18n-voice-diag-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Deutsch (German) + +@@ + +Package: luci-i18n-voice-diag-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-voice-diag-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Türkçe (Turkish) + +@@ + +Package: luci-i18n-voice-diag-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Svenska (Swedish) + +@@ + +Package: luci-i18n-voice-diag-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - 日本語 (Japanese) + +@@ + +Package: luci-i18n-voice-diag-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-voice-diag-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Català (Catalan) + +@@ + +Package: luci-i18n-voice-diag-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Español (Spanish) + +@@ + +Package: luci-i18n-voice-diag-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-voice-diag-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Čeština (Czech) + +@@ + +Package: luci-i18n-voice-diag-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Français (French) + +@@ + +Package: luci-i18n-voice-diag-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-voice-diag +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-voice-diag - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-voice-diag - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-watchcat b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-watchcat new file mode 100644 index 0000000..b660f9a --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-watchcat @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-watchcat/Makefile +Package: luci-app-watchcat +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Watchcat +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Watchcat + +@@ + +Package: luci-i18n-watchcat-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-watchcat-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Magyar (Hungarian) + +@@ + +Package: luci-i18n-watchcat-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Português (Portuguese) + +@@ + +Package: luci-i18n-watchcat-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Norsk (Norwegian) + +@@ + +Package: luci-i18n-watchcat-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - English + +@@ + +Package: luci-i18n-watchcat-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Polski (Polish) + +@@ + +Package: luci-i18n-watchcat-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-watchcat-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Русский (Russian) + +@@ + +Package: luci-i18n-watchcat-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-watchcat-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-watchcat-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Română (Romanian) + +@@ + +Package: luci-i18n-watchcat-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-watchcat-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - 普通话 (Chinese) + +@@ + +Package: luci-i18n-watchcat-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Deutsch (German) + +@@ + +Package: luci-i18n-watchcat-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-watchcat-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Türkçe (Turkish) + +@@ + +Package: luci-i18n-watchcat-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Svenska (Swedish) + +@@ + +Package: luci-i18n-watchcat-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - 日本語 (Japanese) + +@@ + +Package: luci-i18n-watchcat-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-watchcat-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Català (Catalan) + +@@ + +Package: luci-i18n-watchcat-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Español (Spanish) + +@@ + +Package: luci-i18n-watchcat-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-watchcat-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Čeština (Czech) + +@@ + +Package: luci-i18n-watchcat-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Français (French) + +@@ + +Package: luci-i18n-watchcat-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-watchcat +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-watchcat - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-watchcat - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-wifischedule b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-wifischedule new file mode 100644 index 0000000..27c3dca --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-wifischedule @@ -0,0 +1,58 @@ +Source-Makefile: feeds/luci/applications/luci-app-wifischedule/Makefile +Package: luci-app-wifischedule +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +wifischedule +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Turns WiFi on and off according to a schedule +Maintainer: +Source: +Type: ipkg +Description: Turns WiFi on and off according to a schedule + +@@ + +Package: luci-i18n-wifischedule-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wifischedule +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wifischedule - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wifischedule - 普通话 (Chinese) + +@@ + +Package: luci-i18n-wifischedule-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wifischedule +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wifischedule - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wifischedule - 日本語 (Japanese) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-wol b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-wol new file mode 100644 index 0000000..c715153 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-wol @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-wol/Makefile +Package: luci-app-wol +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +etherwake +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for Wake-on-LAN +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for Wake-on-LAN + +@@ + +Package: luci-i18n-wol-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-wol-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Magyar (Hungarian) + +@@ + +Package: luci-i18n-wol-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Português (Portuguese) + +@@ + +Package: luci-i18n-wol-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Norsk (Norwegian) + +@@ + +Package: luci-i18n-wol-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - English + +@@ + +Package: luci-i18n-wol-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Polski (Polish) + +@@ + +Package: luci-i18n-wol-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-wol-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Русский (Russian) + +@@ + +Package: luci-i18n-wol-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-wol-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-wol-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Română (Romanian) + +@@ + +Package: luci-i18n-wol-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-wol-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - 普通话 (Chinese) + +@@ + +Package: luci-i18n-wol-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Deutsch (German) + +@@ + +Package: luci-i18n-wol-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-wol-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Türkçe (Turkish) + +@@ + +Package: luci-i18n-wol-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Svenska (Swedish) + +@@ + +Package: luci-i18n-wol-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - 日本語 (Japanese) + +@@ + +Package: luci-i18n-wol-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-wol-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Català (Catalan) + +@@ + +Package: luci-i18n-wol-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Español (Spanish) + +@@ + +Package: luci-i18n-wol-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-wol-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Čeština (Czech) + +@@ + +Package: luci-i18n-wol-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Français (French) + +@@ + +Package: luci-i18n-wol-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wol +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wol - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wol - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-applications_luci-app-wshaper b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-wshaper new file mode 100644 index 0000000..4f00c86 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-applications_luci-app-wshaper @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/applications/luci-app-wshaper/Makefile +Package: luci-app-wshaper +Submenu: 3. Applications +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for wshaper +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for wshaper + +@@ + +Package: luci-i18n-wshaper-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-wshaper-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Magyar (Hungarian) + +@@ + +Package: luci-i18n-wshaper-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Português (Portuguese) + +@@ + +Package: luci-i18n-wshaper-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Norsk (Norwegian) + +@@ + +Package: luci-i18n-wshaper-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - English + +@@ + +Package: luci-i18n-wshaper-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Polski (Polish) + +@@ + +Package: luci-i18n-wshaper-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-wshaper-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Русский (Russian) + +@@ + +Package: luci-i18n-wshaper-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-wshaper-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-wshaper-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Română (Romanian) + +@@ + +Package: luci-i18n-wshaper-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-wshaper-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - 普通话 (Chinese) + +@@ + +Package: luci-i18n-wshaper-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Deutsch (German) + +@@ + +Package: luci-i18n-wshaper-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-wshaper-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Türkçe (Turkish) + +@@ + +Package: luci-i18n-wshaper-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Svenska (Swedish) + +@@ + +Package: luci-i18n-wshaper-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - 日本語 (Japanese) + +@@ + +Package: luci-i18n-wshaper-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-wshaper-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Català (Catalan) + +@@ + +Package: luci-i18n-wshaper-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Español (Spanish) + +@@ + +Package: luci-i18n-wshaper-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-wshaper-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Čeština (Czech) + +@@ + +Package: luci-i18n-wshaper-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Français (French) + +@@ + +Package: luci-i18n-wshaper-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-app-wshaper +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-app-wshaper - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-app-wshaper - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-collections_luci b/feeds/luci.tmp/info/.packageinfo-collections_luci new file mode 100644 index 0000000..946a134 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-collections_luci @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/collections/luci/Makefile +Package: luci +Submenu: 1. Collections +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +uhttpd +uhttpd-mod-ubus +luci-mod-admin-full +luci-theme-bootstrap +luci-app-firewall +luci-proto-ppp +libiwinfo-lua +IPV6:luci-proto-ipv6 +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Standard OpenWrt set including full admin with ppp support and the default Bootstrap theme +Maintainer: +Source: +Type: ipkg +Description: Standard OpenWrt set including full admin with ppp support and the default Bootstrap theme + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-collections_luci-light b/feeds/luci.tmp/info/.packageinfo-collections_luci-light new file mode 100644 index 0000000..f5e50e4 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-collections_luci-light @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/collections/luci-light/Makefile +Package: luci-light +Submenu: 1. Collections +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +uhttpd +luci-mod-admin-mini +luci-theme-openwrt @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Minimum package set using only admin mini and the standard theme +Maintainer: +Source: +Type: ipkg +Description: Minimum package set using only admin mini and the standard theme + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-collections_luci-ssl b/feeds/luci.tmp/info/.packageinfo-collections_luci-ssl new file mode 100644 index 0000000..c180681 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-collections_luci-ssl @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/collections/luci-ssl/Makefile +Package: luci-ssl +Submenu: 1. Collections +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci +libustream-mbedtls +px5g +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI with HTTPS support (mbedTLS as SSL backend) +Maintainer: +Source: +Type: ipkg +Description: LuCI with HTTPS support (mbedTLS as SSL backend) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-collections_luci-ssl-openssl b/feeds/luci.tmp/info/.packageinfo-collections_luci-ssl-openssl new file mode 100644 index 0000000..47ecf5b --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-collections_luci-ssl-openssl @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/collections/luci-ssl-openssl/Makefile +Package: luci-ssl-openssl +Submenu: 1. Collections +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci +libustream-openssl +px5g +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI with HTTPS support (OpenSSL as SSL backend) +Maintainer: +Source: +Type: ipkg +Description: LuCI with OpenSSL as the SSL backend (libustream-openssl). Note: px5g still requires libmbedtls (in LEDE) or libpolarssl (in Openwrt). In LEDE it is also possible to replace px5g with openssl-util as uhttpd can also generate keys with openssl commandline tools if px5g is not installed. + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-contrib_package_community-profiles b/feeds/luci.tmp/info/.packageinfo-contrib_package_community-profiles new file mode 100644 index 0000000..a684661 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-contrib_package_community-profiles @@ -0,0 +1,19 @@ +Source-Makefile: feeds/luci/contrib/package/community-profiles/Makefile +Package: community-profiles +Submenu: 9. Freifunk +Version: 2 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread freifunk-common +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Community profiles +Maintainer: +Source: +Type: ipkg +Description: These community profiles set defaults for various free network/freifunk communities and are used by wizards like ffwizard and meshwizard. + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-common b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-common new file mode 100644 index 0000000..ed7eb6c --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-common @@ -0,0 +1,19 @@ +Source-Makefile: feeds/luci/contrib/package/freifunk-common/Makefile +Package: freifunk-common +Submenu: 9. Freifunk +Version: 2 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk common files +Maintainer: +Source: +Type: ipkg +Description: Common files and scripts that are needed to run free wireless mesh networks. + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-firewall b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-firewall new file mode 100644 index 0000000..d03fb67 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-firewall @@ -0,0 +1,19 @@ +Source-Makefile: feeds/luci/contrib/package/freifunk-firewall/Makefile +Package: freifunk-firewall +Submenu: 9. Freifunk +Version: 3 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +firewall +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk Firewall Addon +Maintainer: +Source: +Type: ipkg +Description: Various firewall extensions for Freifunk. Includes NAT fixes and advanced settings. + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-gwcheck b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-gwcheck new file mode 100644 index 0000000..74b5f7f --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-gwcheck @@ -0,0 +1,19 @@ +Source-Makefile: feeds/luci/contrib/package/freifunk-gwcheck/Makefile +Package: freifunk-gwcheck +Submenu: 9. Freifunk +Version: 4 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread firewall +ip +iptables-mod-ipopt +olsrd-mod-dyn-gw-plain +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk gateway check script +Maintainer: +Source: +Type: ipkg +Description: This script periodically checks if internet is available via your own gateway. If it detects that it is broken, then the defaultroute is removed from the main table and temporarilly placed in table gw-check until your internet works again. Config file is /etc/config/freifunk-gwcheck. + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-mapupdate b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-mapupdate new file mode 100644 index 0000000..80a7127 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-mapupdate @@ -0,0 +1,19 @@ +Source-Makefile: feeds/luci/contrib/package/freifunk-mapupdate/Makefile +Package: freifunk-mapupdate +Submenu: 9. Freifunk +Version: 1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +olsrd-mod-nameservice +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Update script for freifunkmap +Maintainer: +Source: +Type: ipkg +Description: This script updates the freifunkmap (also known as the global map, see http://map.berlin.freifunk.net) every hour. Config file is /etc/config/freifunk-mapupdate. + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-p2pblock b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-p2pblock new file mode 100644 index 0000000..527d129 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-p2pblock @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/contrib/package/freifunk-p2pblock/Makefile +Package: freifunk-p2pblock +Submenu: 9. Freifunk +Version: 3 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +iptables-mod-filter +iptables-mod-ipp2p +l7-protocols +iptables-mod-conntrack-extra @BROKEN +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk p2pblock Addon +Maintainer: +Source: +Type: ipkg +Description: Simple Addon for Freifunk which use iptables layer7-, ipp2p- and recent-modules + to block p2p/filesharing traffic + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-policyrouting b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-policyrouting new file mode 100644 index 0000000..7ef2d7d --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-policyrouting @@ -0,0 +1,19 @@ +Source-Makefile: feeds/luci/contrib/package/freifunk-policyrouting/Makefile +Package: freifunk-policyrouting +Submenu: 9. Freifunk +Version: 6 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ip +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk policy routing addon +Maintainer: +Source: +Type: ipkg +Description: Allows you to send your own traffic via your own default gateway while sending traffic received from the mesh to a gateway in the mesh. + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-watchdog b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-watchdog new file mode 100644 index 0000000..8c552d6 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-contrib_package_freifunk-watchdog @@ -0,0 +1,21 @@ +Source-Makefile: feeds/luci/contrib/package/freifunk-watchdog/Makefile +Package: freifunk-watchdog +Submenu: 9. Freifunk +Version: 8 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread libuci +Conflicts: +Menu-Depends: +Provides: +Build-Depends: uci +Section: luci +Category: LuCI +Title: Freifunk Ad-Hoc watchdog daemon +Maintainer: +Source: +Type: ipkg +Description: A watchdog daemon that monitors wireless interfaces to ensure the correct bssid and channel. + The process will initiate a wireless restart as soon as it detects a bssid or channel mismatch. + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-contrib_package_meshwizard b/feeds/luci.tmp/info/.packageinfo-contrib_package_meshwizard new file mode 100644 index 0000000..0844228 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-contrib_package_meshwizard @@ -0,0 +1,19 @@ +Source-Makefile: feeds/luci/contrib/package/meshwizard/Makefile +Package: meshwizard +Submenu: 9. Freifunk +Version: 0.3.2 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +firewall +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Shell script based wizard for Mesh networks +Maintainer: +Source: +Type: ipkg +Description: A shellscript based wizard to simplify the setup of a typical mesh node (e.g. for Freifunk.net) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-contrib_package_remote-update b/feeds/luci.tmp/info/.packageinfo-contrib_package_remote-update new file mode 100644 index 0000000..baf643d --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-contrib_package_remote-update @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/contrib/package/remote-update/Makefile +Package: remote-update +Submenu: 9. Freifunk +Version: 4 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @TARGET_atheros||@TARGET_ar71xx||@TARGET_brcm_2_4 +Conflicts: +Menu-Depends: +Provides: +Section: luci +Category: LuCI +Title: Freifunk remote update utility. +Maintainer: +Source: +Type: ipkg +Description: The freifunk remote-update utility uses sysupgrade to reflash the currently + running firmware while keeping most of the existing configuratio. + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-httpclient b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-httpclient new file mode 100644 index 0000000..281ab53 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-httpclient @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/libs/luci-lib-httpclient/Makefile +Package: luci-lib-httpclient +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-base +luci-lib-nixio +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: HTTP(S) client library +Maintainer: +Source: +Type: ipkg +Description: HTTP(S) client library + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-ip b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-ip new file mode 100644 index 0000000..5bc4d04 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-ip @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/libs/luci-lib-ip/Makefile +Package: luci-lib-ip +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +liblua +libnl-tiny +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Lua library for IP calculation and routing information +Maintainer: +Source: +Type: ipkg +Description: Lua library for IP calculation and routing information + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-json b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-json new file mode 100644 index 0000000..2f4e63f --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-json @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/libs/luci-lib-json/Makefile +Package: luci-lib-json +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI JSON library +Maintainer: +Source: +Type: ipkg +Description: LuCI JSON library + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-jsonc b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-jsonc new file mode 100644 index 0000000..3414503 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-jsonc @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/libs/luci-lib-jsonc/Makefile +Package: luci-lib-jsonc +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +liblua +libjson-c +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Lua binding for JSON-C +Maintainer: +Source: +Type: ipkg +Description: Lua binding for JSON-C + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-luaneightbl b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-luaneightbl new file mode 100644 index 0000000..87bf0cd --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-luaneightbl @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/libs/luci-lib-luaneightbl/Makefile +Package: luci-lib-luaneightbl +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +liblua +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: neightbl - Lua lib for IPv6 neighbors +Maintainer: +Source: +Type: ipkg +Description: neightbl - Lua lib for IPv6 neighbors + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-nixio b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-nixio new file mode 100644 index 0000000..f8e15db --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-nixio @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/libs/luci-lib-nixio/Makefile +Package: luci-lib-nixio +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +PACKAGE_luci-lib-nixio_openssl:libopenssl +PACKAGE_luci-lib-nixio_cyassl:libcyassl +liblua +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: NIXIO POSIX library +Maintainer: +Source: +Type: ipkg +Description: NIXIO POSIX library + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-px5g b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-px5g new file mode 100644 index 0000000..5455429 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-px5g @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/libs/luci-lib-px5g/Makefile +Package: luci-lib-px5g +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +liblua +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: RSA/X.509 Key Generator (required for LuCId SSL support) +Maintainer: +Source: +Type: ipkg +Description: RSA/X.509 Key Generator (required for LuCId SSL support) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-rpcc b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-rpcc new file mode 100644 index 0000000..41e0471 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-libs_luci-lib-rpcc @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/libs/luci-lib-rpcc/Makefile +Package: luci-lib-rpcc +Submenu: 6. Libraries +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Support for AHCPd +Maintainer: +Source: +Type: ipkg +Description: LuCI Support for AHCPd + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-modules_luci-base b/feeds/luci.tmp/info/.packageinfo-modules_luci-base new file mode 100644 index 0000000..83a7cf3 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-modules_luci-base @@ -0,0 +1,628 @@ +Source-Makefile: feeds/luci/modules/luci-base/Makefile +Package: luci-base +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +lua +libuci-lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +luci-lib-jsonc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: LuCI core libraries +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Description: LuCI core libraries + +@@ +Config: + config LUCI_SRCDIET + bool "Minify Lua sources" + default n + + menu "Translations" + + config LUCI_LANG_uk + tristate "Ukrainian (uk)" + + config LUCI_LANG_hu + tristate "Hungarian (hu)" + + config LUCI_LANG_pt + tristate "Portuguese (pt)" + + config LUCI_LANG_ko + tristate "Korean (ko)" + + config LUCI_LANG_en + tristate "English (en)" + + config LUCI_LANG_pl + tristate "Polish (pl)" + + config LUCI_LANG_sk + tristate "Slovak (sk)" + + config LUCI_LANG_ru + tristate "Russian (ru)" + + config LUCI_LANG_vi + tristate "Vietnamese (vi)" + + config LUCI_LANG_he + tristate "Hebrew (he)" + + config LUCI_LANG_no + tristate "Norwegian (no)" + + config LUCI_LANG_ms + tristate "Malay (ms)" + + config LUCI_LANG_zh-cn + tristate "Chinese (zh-cn)" + + config LUCI_LANG_ro + tristate "Romanian (ro)" + + config LUCI_LANG_de + tristate "German (de)" + + config LUCI_LANG_zh-tw + tristate "Taiwanese (zh-tw)" + + config LUCI_LANG_tr + tristate "Turkish (tr)" + + config LUCI_LANG_sv + tristate "Swedish (sv)" + + config LUCI_LANG_ja + tristate "Japanese (ja)" + + config LUCI_LANG_el + tristate "Greek (el)" + + config LUCI_LANG_ca + tristate "Catalan (ca)" + + config LUCI_LANG_es + tristate "Spanish (es)" + + config LUCI_LANG_pt-br + tristate "Brazialian Portuguese (pt-br)" + + config LUCI_LANG_cs + tristate "Czech (cs)" + + config LUCI_LANG_fr + tristate "French (fr)" + + config LUCI_LANG_it + tristate "Italian (it)" + + endmenu +@@ + +Package: luci-i18n-base-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - uk translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-base-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - hu translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Magyar (Hungarian) + +@@ + +Package: luci-i18n-base-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - pt translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Português (Portuguese) + +@@ + +Package: luci-i18n-base-ko +Default: LUCI_LANG_ko||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ko translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - 한국어 (Korean) + +@@ + +Package: luci-i18n-base-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - en translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - English + +@@ + +Package: luci-i18n-base-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - pl translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Polski (Polish) + +@@ + +Package: luci-i18n-base-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - sk translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-base-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ru translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Русский (Russian) + +@@ + +Package: luci-i18n-base-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - vi translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-base-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - he translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-base-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - no translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Norsk (Norwegian) + +@@ + +Package: luci-i18n-base-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ms translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-base-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - zh-cn translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - 普通话 (Chinese) + +@@ + +Package: luci-i18n-base-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ro translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Română (Romanian) + +@@ + +Package: luci-i18n-base-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - de translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Deutsch (German) + +@@ + +Package: luci-i18n-base-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - zh-tw translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-base-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - tr translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Türkçe (Turkish) + +@@ + +Package: luci-i18n-base-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - sv translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Svenska (Swedish) + +@@ + +Package: luci-i18n-base-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ja translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - 日本語 (Japanese) + +@@ + +Package: luci-i18n-base-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - el translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-base-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - ca translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Català (Catalan) + +@@ + +Package: luci-i18n-base-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - es translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Español (Spanish) + +@@ + +Package: luci-i18n-base-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - pt-br translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-base-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - cs translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Čeština (Czech) + +@@ + +Package: luci-i18n-base-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - fr translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Français (French) + +@@ + +Package: luci-i18n-base-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Build-Types: host +Section: luci +Category: LuCI +Title: luci-base - it translation +Maintainer: +Source: LuaSrcDiet-0.12.1.tar.bz2 +Type: ipkg +Hidden: 1 +Description: Translation for luci-base - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-admin-full b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-admin-full new file mode 100644 index 0000000..7936f0a --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-admin-full @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/modules/luci-mod-admin-full/Makefile +Package: luci-mod-admin-full +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: iwinfo lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Administration - full-featured for full control +Maintainer: +Source: +Type: ipkg +Description: LuCI Administration - full-featured for full control + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-admin-mini b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-admin-mini new file mode 100644 index 0000000..a74520a --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-admin-mini @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/modules/luci-mod-admin-mini/Makefile +Package: luci-mod-admin-mini +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-base @BROKEN +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Essentials - stripped down and user-friendly +Maintainer: +Source: +Type: ipkg +Description: LuCI Essentials - stripped down and user-friendly + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-failsafe b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-failsafe new file mode 100644 index 0000000..2a16549 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-failsafe @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/modules/luci-mod-failsafe/Makefile +Package: luci-mod-failsafe +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-base +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Fail-Safe - Fail-Safe sysupgrade module +Maintainer: +Source: +Type: ipkg +Description: LuCI Fail-Safe - Fail-Safe sysupgrade module + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-freifunk b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-freifunk new file mode 100644 index 0000000..161f939 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-freifunk @@ -0,0 +1,495 @@ +Source-Makefile: feeds/luci/modules/luci-mod-freifunk/Makefile +Package: luci-mod-freifunk +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-mod-admin-full +luci-lib-json +freifunk-firewall +freifunk-common +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI Freifunk module +Maintainer: +Source: +Type: ipkg +Description: LuCI Freifunk module + +@@ + +Package: luci-i18n-freifunk-uk +Default: LUCI_LANG_uk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - uk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - украї́нська (Ukrainian) + +@@ + +Package: luci-i18n-freifunk-hu +Default: LUCI_LANG_hu||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - hu translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Magyar (Hungarian) + +@@ + +Package: luci-i18n-freifunk-pt +Default: LUCI_LANG_pt||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - pt translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Português (Portuguese) + +@@ + +Package: luci-i18n-freifunk-no +Default: LUCI_LANG_no||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - no translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Norsk (Norwegian) + +@@ + +Package: luci-i18n-freifunk-en +Default: LUCI_LANG_en||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - en translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - English + +@@ + +Package: luci-i18n-freifunk-pl +Default: LUCI_LANG_pl||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - pl translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Polski (Polish) + +@@ + +Package: luci-i18n-freifunk-sk +Default: LUCI_LANG_sk||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - sk translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Slovenčina (Slovak) + +@@ + +Package: luci-i18n-freifunk-ru +Default: LUCI_LANG_ru||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - ru translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Русский (Russian) + +@@ + +Package: luci-i18n-freifunk-vi +Default: LUCI_LANG_vi||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - vi translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Tiếng Việt (Vietnamese) + +@@ + +Package: luci-i18n-freifunk-he +Default: LUCI_LANG_he||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - he translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - עִבְרִית (Hebrew) + +@@ + +Package: luci-i18n-freifunk-ro +Default: LUCI_LANG_ro||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - ro translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Română (Romanian) + +@@ + +Package: luci-i18n-freifunk-ms +Default: LUCI_LANG_ms||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - ms translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Bahasa Melayu (Malay) + +@@ + +Package: luci-i18n-freifunk-zh-cn +Default: LUCI_LANG_zh-cn||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - zh-cn translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - 普通话 (Chinese) + +@@ + +Package: luci-i18n-freifunk-de +Default: LUCI_LANG_de||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - de translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Deutsch (German) + +@@ + +Package: luci-i18n-freifunk-zh-tw +Default: LUCI_LANG_zh-tw||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - zh-tw translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - 臺灣華語 (Taiwanese) + +@@ + +Package: luci-i18n-freifunk-tr +Default: LUCI_LANG_tr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - tr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Türkçe (Turkish) + +@@ + +Package: luci-i18n-freifunk-sv +Default: LUCI_LANG_sv||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - sv translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Svenska (Swedish) + +@@ + +Package: luci-i18n-freifunk-ja +Default: LUCI_LANG_ja||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - ja translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - 日本語 (Japanese) + +@@ + +Package: luci-i18n-freifunk-el +Default: LUCI_LANG_el||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - el translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Ελληνικά (Greek) + +@@ + +Package: luci-i18n-freifunk-ca +Default: LUCI_LANG_ca||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - ca translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Català (Catalan) + +@@ + +Package: luci-i18n-freifunk-es +Default: LUCI_LANG_es||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - es translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Español (Spanish) + +@@ + +Package: luci-i18n-freifunk-pt-br +Default: LUCI_LANG_pt-br||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - pt-br translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Português do Brasil (Brazialian Portuguese) + +@@ + +Package: luci-i18n-freifunk-cs +Default: LUCI_LANG_cs||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - cs translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Čeština (Czech) + +@@ + +Package: luci-i18n-freifunk-fr +Default: LUCI_LANG_fr||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - fr translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Français (French) + +@@ + +Package: luci-i18n-freifunk-it +Default: LUCI_LANG_it||(ALL&&m) +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread luci-mod-freifunk +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: luci-mod-freifunk - it translation +Maintainer: +Source: +Type: ipkg +Hidden: 1 +Description: Translation for luci-mod-freifunk - Italiano (Italian) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-freifunk-community b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-freifunk-community new file mode 100644 index 0000000..5aaf26b --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-freifunk-community @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/modules/luci-mod-freifunk-community/Makefile +Package: luci-mod-freifunk-community +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +iptables-mod-nat-extra +iptables-mod-ipopt +luci-app-splash +olsrd +olsrd-mod-dyn-gw-plain +olsrd-mod-jsoninfo +olsrd-mod-nameservice +olsrd-mod-watchdog +kmod-tun +ip +freifunk-watchdog +luci-app-olsr +luci-app-olsr-services +freifunk-gwcheck +freifunk-mapupdate +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Freifunk Community Meta-Package +Maintainer: +Source: +Type: ipkg +Description: Freifunk Community Meta-Package + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-rpc b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-rpc new file mode 100644 index 0000000..dc7370a --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-modules_luci-mod-rpc @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/modules/luci-mod-rpc/Makefile +Package: luci-mod-rpc +Submenu: 2. Modules +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +luci-lib-json +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI RPC - JSON-RPC API +Maintainer: +Source: +Type: ipkg +Description: LuCI RPC - JSON-RPC API + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-3g b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-3g new file mode 100644 index 0000000..30d7536 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-3g @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/protocols/luci-proto-3g/Makefile +Package: luci-proto-3g +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +comgt +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for 3G +Maintainer: +Source: +Type: ipkg +Description: Support for 3G + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-ipip b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-ipip new file mode 100644 index 0000000..d15f7fd --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-ipip @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/protocols/luci-proto-ipip/Makefile +Package: luci-proto-ipip +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +ipip +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for IPIP tunnels (IPv4-in-IPv4 RFC2003) +Maintainer: Roger Pueyo Centelles +Source: +Type: ipkg +Description: Support for IPIP tunnels (IPv4-in-IPv4 RFC2003) +Roger Pueyo Centelles +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-ipv6 b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-ipv6 new file mode 100644 index 0000000..9f10c17 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-ipv6 @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/protocols/luci-proto-ipv6/Makefile +Package: luci-proto-ipv6 +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for DHCPv6/6in4/6to4/6rd/DS-Lite/aiccu +Maintainer: +Source: +Type: ipkg +Description: Support for DHCPv6/6in4/6to4/6rd/DS-Lite/aiccu + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-openconnect b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-openconnect new file mode 100644 index 0000000..75c97e8 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-openconnect @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/protocols/luci-proto-openconnect/Makefile +Package: luci-proto-openconnect +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +openconnect +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for OpenConnect VPN +Maintainer: +Source: +Type: ipkg +Description: Support for OpenConnect VPN + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-ppp b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-ppp new file mode 100644 index 0000000..94e2e6f --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-ppp @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/protocols/luci-proto-ppp/Makefile +Package: luci-proto-ppp +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for PPP/PPPoE/PPPoA/PPtP +Maintainer: +Source: +Type: ipkg +Description: Support for PPP/PPPoE/PPPoA/PPtP + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-qmi b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-qmi new file mode 100644 index 0000000..137b89e --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-qmi @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/protocols/luci-proto-qmi/Makefile +Package: luci-proto-qmi +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +uqmi +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for QMI +Maintainer: +Source: +Type: ipkg +Description: Support for QMI + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-relay b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-relay new file mode 100644 index 0000000..6a0e8b5 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-relay @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/protocols/luci-proto-relay/Makefile +Package: luci-proto-relay +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +relayd +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for relayd pseudo bridges +Maintainer: +Source: +Type: ipkg +Description: Support for relayd pseudo bridges + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-vpnc b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-vpnc new file mode 100644 index 0000000..94e1932 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-vpnc @@ -0,0 +1,21 @@ +Source-Makefile: feeds/luci/protocols/luci-proto-vpnc/Makefile +Package: luci-proto-vpnc +Submenu: 5. Protocols +Version: 1.0.0-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +vpnc +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for VPNC VPN +Maintainer: Daniel Dickinson +Source: +License: Apache-2.0 +Type: ipkg +Description: Support for VPNC VPN +Daniel Dickinson +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-wireguard b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-wireguard new file mode 100644 index 0000000..bb7750e --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-protocols_luci-proto-wireguard @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/protocols/luci-proto-wireguard/Makefile +Package: luci-proto-wireguard +Submenu: 5. Protocols +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +kmod-wireguard +wireguard-tools +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Support for WireGuard VPN +Maintainer: Dan Luedtke +Source: +Type: ipkg +Description: Support for WireGuard VPN +Dan Luedtke +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-bootstrap b/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-bootstrap new file mode 100644 index 0000000..7414fb8 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-bootstrap @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/themes/luci-theme-bootstrap/Makefile +Package: luci-theme-bootstrap +Submenu: 4. Themes +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Bootstrap Theme (default) +Maintainer: +Source: +Type: ipkg +Description: Bootstrap Theme (default) + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-freifunk-generic b/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-freifunk-generic new file mode 100644 index 0000000..dc15a17 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-freifunk-generic @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/themes/luci-theme-freifunk-generic/Makefile +Package: luci-theme-freifunk-generic +Submenu: 4. Themes +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Freifunk Generic Theme +Maintainer: +Source: +Type: ipkg +Description: Freifunk Generic Theme + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-material b/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-material new file mode 100644 index 0000000..75ef01f --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-material @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/themes/luci-theme-material/Makefile +Package: luci-theme-material +Submenu: 4. Themes +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: Material Theme +Maintainer: +Source: +Type: ipkg +Description: Material Theme + +@@ + + diff --git a/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-openwrt b/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-openwrt new file mode 100644 index 0000000..232b5b2 --- /dev/null +++ b/feeds/luci.tmp/info/.packageinfo-themes_luci-theme-openwrt @@ -0,0 +1,20 @@ +Source-Makefile: feeds/luci/themes/luci-theme-openwrt/Makefile +Package: luci-theme-openwrt +Submenu: 4. Themes +Version: x-1 +Depends: +libc +SSP_SUPPORT:libssp +USE_GLIBC:librt +USE_GLIBC:libpthread +Conflicts: +Menu-Depends: +Provides: +Build-Depends: lua/host luci-base/host +Section: luci +Category: LuCI +Title: LuCI OpenWrt.org theme +Maintainer: +Source: +Type: ipkg +Description: LuCI OpenWrt.org theme + +@@ + + diff --git a/feeds/luci.tmp/location b/feeds/luci.tmp/location new file mode 100644 index 0000000..5ae23b5 --- /dev/null +++ b/feeds/luci.tmp/location @@ -0,0 +1 @@ +https://github.com/openwrt/luci.git diff --git a/feeds/luci/.buildpath b/feeds/luci/.buildpath new file mode 100644 index 0000000..81fa646 --- /dev/null +++ b/feeds/luci/.buildpath @@ -0,0 +1,5 @@ + + + + + diff --git a/feeds/luci/.cproject b/feeds/luci/.cproject new file mode 100644 index 0000000..e1a4774 --- /dev/null +++ b/feeds/luci/.cproject @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/feeds/luci/.gitignore b/feeds/luci/.gitignore new file mode 100644 index 0000000..07494e9 --- /dev/null +++ b/feeds/luci/.gitignore @@ -0,0 +1,8 @@ +dist/ +/host +*.o +*.so +*.swp +*.po~ +/docs +modules/luci-base/src/po2lmo diff --git a/feeds/luci/.project b/feeds/luci/.project new file mode 100644 index 0000000..11b398b --- /dev/null +++ b/feeds/luci/.project @@ -0,0 +1,78 @@ + + + luci + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.autoBuildTarget + all + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.cleanBuildTarget + clean + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.fullBuildTarget + all + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.cnature + org.eclipse.dltk.lua.core.nature + + diff --git a/feeds/luci/CONTRIBUTING.md b/feeds/luci/CONTRIBUTING.md new file mode 100644 index 0000000..e4edf0c --- /dev/null +++ b/feeds/luci/CONTRIBUTING.md @@ -0,0 +1,62 @@ +# Contributing Guidelines + +## Patches and Pull requests: + +If you want to contribute a change to LuCI, please either send a patch using git send-email +or open a "pull request" against the openwrt/luci repository. + +Regardless of whether you send a patch or open a pull request, please try to follow these rules: + +* Have a useful subject prefixed with the component name + (E.g.: "luci-mod-admin-full: fix wifi channel selection on multiple STA networks") +* Shortly explain the changes made and - if applicable - the reasoning behind them +* Commit message of each commit should include a Signed-off-by line + (See ) + +In case you like to send patches by mail, please use the [LuCI mailinglist](https://lists.subsignal.org/mailman/listinfo/luci) +or the [OpenWrt Development List](https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel). + +If you send via the OpenWrt list, include a "[luci]" tag in your subject line. +For general information on patch submission, follow the [OpenWrt patch submission guideline](https://dev.openwrt.org/wiki/SubmittingPatches). + +## Advice on pull requests: + +Pull requests are the easiest way to contribute changes to git repos at Github. They are the preferred contribution method, as they offer a nice way for commenting and amending the proposed changes. + +* You need a local "fork" of the Github repo. +* Use a "feature branch" for your changes. That separates the changes in the pull request from your other changes and makes it easy to edit/amend commits in the pull request. Workflow using "feature_x" as the example: + - Update your local git fork to the tip (of the master, usually) + - Create the feature branch with `git checkout -b feature_x` + - Edit changes and commit them locally + - Push them to your Github fork by `git push -u origin feature_x`. That creates the "feature_x" branch at your Github fork and sets it as the remote of this branch + - When you now visit Github, you should see a proposal to create a pull request + +* If you later need to add new commits to the pull request, you can simply commit the changes to the local branch and then use `git push` to automatically update the pull request. + +* If you need to change something in the existing pull request (e.g. to add a missing signed-off-by line to the commit message), you can use `git push -f` to overwrite the original commits. That is easy and safe when using a feature branch. Example workflow: + - Checkout the feature branch by `git checkout feature_x` + - Edit changes and commit them locally. If you are just updating the commit message in the last commit, you can use `git commit --amend` to do that + - If you added several new commits or made other changes that require cleaning up, you can use `git rebase -i HEAD~X` (X = number of commits to edit) to possibly squash some commits + - Push the changed commits to Github with `git push -f` to overwrite the original commits in the "feature_x" branch with the new ones. The pull request gets automatically updated + +## If you have commit access: + +* Do NOT use git push --force. +* Use Pull Requests if you are unsure and to suggest changes to other developers. + +## Gaining commit access: + +* Commit access will be granted to responsible contributors who have made + useful pull requests and / or feedback or patches to this repository or + OpenWrt in general. Please include your request for commit access in your + next pull request or ticket. + +## Release Branches: + +* Branches named "for-XX.YY" or "luci-X.Y" (e.g. "for-15.05") are release branches. +* These branches are built with the respective OpenWrt release and are created + during the release stabilisation phase. +* Please ONLY cherry-pick or commit security and bug-fixes to these branches. +* Do NOT add new packages and do NOT do major upgrades of packages here. +* If you are unsure if your change is suitable, please use a pull request. + diff --git a/feeds/luci/LICENSE b/feeds/luci/LICENSE new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/feeds/luci/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/feeds/luci/NOTICE b/feeds/luci/NOTICE new file mode 100644 index 0000000..47e1969 --- /dev/null +++ b/feeds/luci/NOTICE @@ -0,0 +1,9 @@ +LuCI - Lua Configuration Interface +Copyright 2008 Steven Barth +Copyright 2008 Jo-Philipp Wich +Licensed under the Apache License, Version 2.0. + +Contains code from: +coxpcall - Copyright 2005 - Kepler Project (www.keplerproject.org) +ltn12/luasocket - Copyright 2004-2007 Diego Nehab +axTLS - Copyright 2008 Cameron Rich diff --git a/feeds/luci/README.md b/feeds/luci/README.md new file mode 100644 index 0000000..48863a4 --- /dev/null +++ b/feeds/luci/README.md @@ -0,0 +1,34 @@ +# OpenWrt luci feed + +## Description + +This is the OpenWrt "luci"-feed containing LuCI - OpenWrt Configuration Interface. + +## Usage + +This feed is enabled by default. Your feeds.conf.default (or feeds.conf) should contain a line like: +``` +src-git luci https://github.com/openwrt/luci.git +``` + +To install all its package definitions, run: +``` +./scripts/feeds update luci +./scripts/feeds install -a -p luci +``` + +## API Reference + +You can browse the generated API documentation [directly on Github](http://htmlpreview.github.io/?http://raw.githubusercontent.com/openwrt/luci/master/documentation/api/index.html). + +## Development + +Documentation for developing and extending LuCI can be found [in the Wiki](https://github.com/openwrt/luci/wiki) + +## License + +See [LICENSE](LICENSE) file. + +## Package Guidelines + +See [CONTRIBUTING.md](CONTRIBUTING.md) file. diff --git a/feeds/luci/THANKYOU b/feeds/luci/THANKYOU new file mode 100644 index 0000000..f0519bd --- /dev/null +++ b/feeds/luci/THANKYOU @@ -0,0 +1,26 @@ +I'd like to thank the following people for contributing to this software: + +* Anton Popov + - for rewriting the openwrt.org theme + +* Florian Fainelli (OpenWrt) + - for the french translation + +* Alina Friedrichsen + - for the reworked translation system, help on standards compliance and accessibility + +* Yanira + - several applications and bugreports + + +Also a big thank you goes to: + +* Mono (Freifunk Halle) + - for donating a Linksys WRT54GL for development purposes + +* tetzlav (Freifunk Leipzig) + - for donating several boards for testing and his feedback + +* Mickey (Freifunk Hannover) + - for his feedback and fixes for the OpenWrt builds + diff --git a/feeds/luci/applications/luci-app-adblock/Makefile b/feeds/luci/applications/luci-app-adblock/Makefile new file mode 100644 index 0000000..8efe2d6 --- /dev/null +++ b/feeds/luci/applications/luci-app-adblock/Makefile @@ -0,0 +1,14 @@ +# Copyright (C) 2016 Openwrt.org +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for Adblock +LUCI_DEPENDS:=+adblock +LUCI_PKGARCH:=all + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-adblock/luasrc/controller/adblock.lua b/feeds/luci/applications/luci-app-adblock/luasrc/controller/adblock.lua new file mode 100644 index 0000000..d8b4718 --- /dev/null +++ b/feeds/luci/applications/luci-app-adblock/luasrc/controller/adblock.lua @@ -0,0 +1,12 @@ +-- Copyright 2016 Openwrt.org +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.adblock", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/adblock") then + return + end + + entry({"admin", "services", "adblock"}, cbi("adblock"), _("Adblock"), 40) +end diff --git a/feeds/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua b/feeds/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua new file mode 100644 index 0000000..d80cb48 --- /dev/null +++ b/feeds/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua @@ -0,0 +1,63 @@ +-- Copyright 2016 Hannu Nyman +-- Licensed to the public under the Apache License 2.0. + +m = Map("adblock", translate("Adblock"), + translate("Configuration of the adblock package to block ad/abuse domains by using DNS.")) + +-- General options + +s = m:section(NamedSection, "global", "adblock", translate("Global options")) + +o1 = s:option(Flag, "adb_enabled", translate("Enable adblock")) +o1.rmempty = false +o1.default = 0 + +o3 = s:option(Value, "adb_whitelist", translate("Whitelist file"), + translate("File with whitelisted hosts/domains that are allowed despite being on a blocklist.")) +o3.rmempty = false +o3.datatype = "file" + +-- Blocklist options + +bl = m:section(TypedSection, "source", translate("Blocklist sources"), + translate("Available blocklist sources (") + .. [[]] + .. translate("see list details") + .. [[]] + .. translate("). Note that list URLs and Shallalist category selections are not configurable via Luci.")) +bl.template = "cbi/tblsection" + +name = bl:option(Flag, "enabled", translate("Enabled")) +name.rmempty = false + +des = bl:option(DummyValue, "adb_src_desc", translate("Description")) + +-- Additional options + +s2 = m:section(NamedSection, "backup", "service", translate("Backup options")) + +o4 = s2:option(Flag, "enabled", translate("Enable blocklist backup")) +o4.rmempty = false +o4.default = 0 + +o5 = s2:option(Value, "adb_dir", translate("Backup directory")) +o5.rmempty = false +o5.datatype = "directory" + +-- Extra options + +e = m:section(NamedSection, "global", "adblock", translate("Extra options"), + translate("Options for further tweaking in case the defaults are not suitable for you.")) + +a = e:option(Flag, "adb_debug", translate("Enable verbose debug logging")) +a.default = a.disabled +a.rmempty = false + +a = e:option(Value, "adb_iface", translate("Restrict reload trigger to certain interface(s)"), + translate("Space separated list of wan interfaces that trigger reload action. " .. + "To disable reload trigger set it to 'false'. Default: empty")) +a.datatype = "network" +a.rmempty = true + +return m + diff --git a/feeds/luci/applications/luci-app-adblock/po/ja/adblock.po b/feeds/luci/applications/luci-app-adblock/po/ja/adblock.po new file mode 100644 index 0000000..a3c982f --- /dev/null +++ b/feeds/luci/applications/luci-app-adblock/po/ja/adblock.po @@ -0,0 +1,139 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: INAGAKI Hiroshi \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Language: ja\n" + +msgid "" +"). Note that list URLs and Shallalist category selections are not " +"configurable via Luci." +msgstr "" +")。これらのリストのURLおよびshallaリストのカテゴリー選択は、Luciによって設定" +"できないことに注意します。" + +msgid "Adblock" +msgstr "Adblock" + +msgid "Available blocklist sources (" +msgstr "利用可能なブロックリスト提供元です(" + +msgid "Backup directory" +msgstr "バックアップ ディレクトリ" + +msgid "Backup options" +msgstr "バックアップ オプション" + +msgid "Blocklist sources" +msgstr "ブロックリスト提供元" + +msgid "" +"Configuration of the adblock package to block ad/abuse domains by using DNS." +msgstr "" +"広告/不正ドメインをDNSを利用してブロックする、adblock パッケージの設定です。" + +msgid "Description" +msgstr "説明" + +msgid "Enable adblock" +msgstr "adblockの有効化" + +msgid "Enable blocklist backup" +msgstr "ブロックリスト バックアップの有効化" + +msgid "Enable verbose debug logging" +msgstr "詳細なデバッグ ログの有効化" + +msgid "Enabled" +msgstr "有効" + +msgid "Extra options" +msgstr "拡張設定" + +msgid "" +"File with whitelisted hosts/domains that are allowed despite being on a " +"blocklist." +msgstr "" +"ファイルのホワイトリスト ホスト/ドメインは、ブロックリストに登録されていても" +"許可されます。" + +msgid "Global options" +msgstr "一般設定" + +msgid "" +"Options for further tweaking in case the defaults are not suitable for you." +msgstr "デフォルト設定が適切でない場合、追加で設定するためのオプションです。" + +msgid "Restrict reload trigger to certain interface(s)" +msgstr "リロードトリガを特定のインターフェースに限定する" + +msgid "" +"Space separated list of wan interfaces that trigger reload action. To " +"disable reload trigger set it to 'false'. Default: empty" +msgstr "" +"リロード実行のトリガとなる、スペースで区切られたWANインターフェースのリストで" +"す。リロードトリガを無効にするには、 false を設定します。デフォルト:(空)" + +msgid "Whitelist file" +msgstr "ホワイトリスト ファイル" + +msgid "see list details" +msgstr "リストの詳細を見る" + +#~ msgid "Count" +#~ msgstr "カウント" + +#~ msgid "Do not write status info to flash" +#~ msgstr "ステータス情報をフラッシュに書き込まない" + +#~ msgid "Last update of the blocklists" +#~ msgstr "ブロックリストの最終更新日時" + +#~ msgid "List date/state" +#~ msgstr "リスト日時/状態" + +#~ msgid "Name of the logical lan interface" +#~ msgstr "論理LANインターフェース名" + +#~ msgid "Percentage of blocked packets (before last update, IPv4/IPv6)" +#~ msgstr "ブロック済みパケットの割合(最終更新以前、IPv4/IPv6)" + +#~ msgid "Port of the adblock uhttpd instance" +#~ msgstr "adblock uhttpdインスタンスのポート" + +#~ msgid "Port of the adblock uhttpd instance for https links" +#~ msgstr "httpsリンク用adblock uhttpdインスタンスのポート" + +#~ msgid "Redirect all DNS queries to the local resolver" +#~ msgstr "全てのDNSクエリをローカルリゾルバにリダイレクト" + +#~ msgid "" +#~ "Skip writing update status information to the config file. Status fields " +#~ "on this page will not be updated." +#~ msgstr "" +#~ "更新ステータス情報をコンフィグファイルに書き込まず、スキップします。この" +#~ "ページのステータス画面は更新されなくなります。" + +#~ msgid "Statistics" +#~ msgstr "ステータス" + +#~ msgid "Timeout for blocklist fetch (seconds)" +#~ msgstr "ブロックリスト取得の制限時間(秒)" + +#~ msgid "Total count of blocked domains" +#~ msgstr "ブロック済みドメインの合計" + +#~ msgid "" +#~ "When adblock is active, all DNS queries are redirected to the local " +#~ "resolver in this server by default. You can disable that to allow queries " +#~ "to external DNS servers." +#~ msgstr "" +#~ "adblockがアクティブである時、全てのDNSクエリは既定でこのサーバー上のリゾル" +#~ "バにリダイレクトされます。外部DNSサーバーへのクエリを許可する場合、この設" +#~ "定を無効にすることもできます。" diff --git a/feeds/luci/applications/luci-app-adblock/po/sv/adblock.po b/feeds/luci/applications/luci-app-adblock/po/sv/adblock.po new file mode 100644 index 0000000..22a30e9 --- /dev/null +++ b/feeds/luci/applications/luci-app-adblock/po/sv/adblock.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" + +msgid "" +"). Note that list URLs and Shallalist category selections are not " +"configurable via Luci." +msgstr "" + +msgid "Adblock" +msgstr "Blockering av annonser" + +msgid "Available blocklist sources (" +msgstr "Tillgängliga källor för blockeringslistor (" + +msgid "Backup directory" +msgstr "Säkerhetskopiera mapp" + +msgid "Backup options" +msgstr "Alternativ för säkerhetskopiering" + +msgid "Blocklist sources" +msgstr "Källor för blockeringslistor" + +msgid "" +"Configuration of the adblock package to block ad/abuse domains by using DNS." +msgstr "" +"Konfiguration av paket adblock för att blockera annons/otillåtna domäner " +"genom att användning DNS." + +msgid "Description" +msgstr "Beskrivning" + +msgid "Enable adblock" +msgstr "Aktivera abblock" + +msgid "Enable blocklist backup" +msgstr "Aktivera säkerhetskopiering av blockeringslistan" + +msgid "Enable verbose debug logging" +msgstr "" + +msgid "Enabled" +msgstr "Aktiverad" + +msgid "Extra options" +msgstr "Extra alternativ" + +msgid "" +"File with whitelisted hosts/domains that are allowed despite being on a " +"blocklist." +msgstr "" + +msgid "Global options" +msgstr "Globala alternativ" + +msgid "" +"Options for further tweaking in case the defaults are not suitable for you." +msgstr "" + +msgid "Restrict reload trigger to certain interface(s)" +msgstr "" + +msgid "" +"Space separated list of wan interfaces that trigger reload action. To " +"disable reload trigger set it to 'false'. Default: empty" +msgstr "" + +msgid "Whitelist file" +msgstr "Vitlista fil" + +msgid "see list details" +msgstr "se listans detaljer" + +#~ msgid "Count" +#~ msgstr "Räkna" + +#~ msgid "Do not write status info to flash" +#~ msgstr "Skriv inte status info till flash" + +#~ msgid "Redirect all DNS queries to the local resolver" +#~ msgstr "Dirigera om alla DNS-förfrågning till den lokala resolvern" diff --git a/feeds/luci/applications/luci-app-adblock/po/templates/adblock.pot b/feeds/luci/applications/luci-app-adblock/po/templates/adblock.pot new file mode 100644 index 0000000..6b2dbd1 --- /dev/null +++ b/feeds/luci/applications/luci-app-adblock/po/templates/adblock.pot @@ -0,0 +1,70 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "" +"). Note that list URLs and Shallalist category selections are not " +"configurable via Luci." +msgstr "" + +msgid "Adblock" +msgstr "" + +msgid "Available blocklist sources (" +msgstr "" + +msgid "Backup directory" +msgstr "" + +msgid "Backup options" +msgstr "" + +msgid "Blocklist sources" +msgstr "" + +msgid "" +"Configuration of the adblock package to block ad/abuse domains by using DNS." +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Enable adblock" +msgstr "" + +msgid "Enable blocklist backup" +msgstr "" + +msgid "Enable verbose debug logging" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Extra options" +msgstr "" + +msgid "" +"File with whitelisted hosts/domains that are allowed despite being on a " +"blocklist." +msgstr "" + +msgid "Global options" +msgstr "" + +msgid "" +"Options for further tweaking in case the defaults are not suitable for you." +msgstr "" + +msgid "Restrict reload trigger to certain interface(s)" +msgstr "" + +msgid "" +"Space separated list of wan interfaces that trigger reload action. To " +"disable reload trigger set it to 'false'. Default: empty" +msgstr "" + +msgid "Whitelist file" +msgstr "" + +msgid "see list details" +msgstr "" diff --git a/feeds/luci/applications/luci-app-adblock/po/zh-cn/adblock.po b/feeds/luci/applications/luci-app-adblock/po/zh-cn/adblock.po new file mode 100644 index 0000000..2878d8a --- /dev/null +++ b/feeds/luci/applications/luci-app-adblock/po/zh-cn/adblock.po @@ -0,0 +1,116 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: kuoruan@gmail.com\n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.5\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "" +"). Note that list URLs and Shallalist category selections are not " +"configurable via Luci." +msgstr ")。需要注意的是列表URL和列表类别选项无法通过Luci设置。" + +msgid "Adblock" +msgstr "Adblock" + +msgid "Available blocklist sources (" +msgstr "可用拦截列表来源(" + +msgid "Backup directory" +msgstr "备份目录" + +msgid "Backup options" +msgstr "备份选项" + +msgid "Blocklist sources" +msgstr "拦截列表来源" + +msgid "" +"Configuration of the adblock package to block ad/abuse domains by using DNS." +msgstr "Adblock 配置工具,通过 DNS 来拦截广告和阻止域名。" + +msgid "Description" +msgstr "描述" + +msgid "Enable adblock" +msgstr "启用Adblock" + +msgid "Enable blocklist backup" +msgstr "启用拦截规则备份" + +msgid "Enable verbose debug logging" +msgstr "" + +msgid "Enabled" +msgstr "启用" + +msgid "Extra options" +msgstr "额外选项" + +msgid "" +"File with whitelisted hosts/domains that are allowed despite being on a " +"blocklist." +msgstr "允许的主机/域名列表" + +msgid "Global options" +msgstr "全局选项" + +msgid "" +"Options for further tweaking in case the defaults are not suitable for you." +msgstr "在默认设置并不适合你时的额外选项。" + +msgid "Restrict reload trigger to certain interface(s)" +msgstr "" + +msgid "" +"Space separated list of wan interfaces that trigger reload action. To " +"disable reload trigger set it to 'false'. Default: empty" +msgstr "" + +msgid "Whitelist file" +msgstr "白名单文件" + +msgid "see list details" +msgstr "查看列表详情" + +#~ msgid "Count" +#~ msgstr "数量" + +#~ msgid "IPv4 blackhole ip address" +#~ msgstr "IPv4禁止列表" + +#~ msgid "IPv6 blackhole ip address" +#~ msgstr "IPv6禁止列表" + +#~ msgid "List date/state" +#~ msgstr "列表日期/状态" + +#~ msgid "Name of the logical lan interface" +#~ msgstr "LAN接口名称" + +#~ msgid "Port of the adblock uhttpd instance" +#~ msgstr "Adblock uhttpd端口" + +#~ msgid "Redirect all DNS queries to the local resolver" +#~ msgstr "将所有DNS查询都重定向到本地解析器" + +#~ msgid "Timeout for blocklist fetch (seconds)" +#~ msgstr "列表查询超时时间(秒)" + +#~ msgid "Total count of blocked domains" +#~ msgstr "阻止域名总数" + +#~ msgid "" +#~ "When adblock is active, all DNS queries are redirected to the local " +#~ "resolver in this server by default. You can disable that to allow queries " +#~ "to external DNS servers." +#~ msgstr "" +#~ "当Adblock处于活动状态时,默认情况下会将所有的DNS查询重定向到此服务器的本地" +#~ "解析器。您可以禁用以允许查询外部DNS服务器。" diff --git a/feeds/luci/applications/luci-app-adblock/root/etc/uci-defaults/40_luci-adblock b/feeds/luci/applications/luci-app-adblock/root/etc/uci-defaults/40_luci-adblock new file mode 100755 index 0000000..1f7fb1c --- /dev/null +++ b/feeds/luci/applications/luci-app-adblock/root/etc/uci-defaults/40_luci-adblock @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@adblock[-1] + add ucitrack adblock + set ucitrack.@adblock[-1].init=adblock + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-ahcp/Makefile b/feeds/luci/applications/luci-app-ahcp/Makefile new file mode 100644 index 0000000..bb4d415 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for AHCPd +LUCI_DEPENDS:=+ahcpd + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-ahcp/luasrc/controller/ahcp.lua b/feeds/luci/applications/luci-app-ahcp/luasrc/controller/ahcp.lua new file mode 100644 index 0000000..e97da55 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/luasrc/controller/ahcp.lua @@ -0,0 +1,49 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.ahcp", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/ahcpd") then + return + end + + entry({"admin", "network", "ahcpd"}, cbi("ahcp"), _("AHCP Server"), 90) + entry({"admin", "network", "ahcpd", "status"}, call("ahcp_status")) +end + +function ahcp_status() + local nfs = require "nixio.fs" + local uci = require "luci.model.uci".cursor() + local lsd = uci:get_first("ahcpd", "ahcpd", "lease_dir") or "/var/lib/leases" + local idf = uci:get_first("ahcpd", "ahcpd", "id_file") or "/var/lib/ahcpd-unique-id" + + local rv = { + uid = "00:00:00:00:00:00:00:00", + leases = { } + } + + idf = nfs.readfile(idf) + if idf and #idf == 8 then + rv.uid = "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X" %{ idf:byte(1, 8) } + end + + local itr = nfs.dir(lsd) + if itr then + local addr + for addr in itr do + if addr:match("^%d+%.%d+%.%d+%.%d+$") then + local s = nfs.stat(lsd .. "/" .. addr) + rv.leases[#rv.leases+1] = { + addr = addr, + age = s and (os.time() - s.mtime) or 0 + } + end + end + end + + table.sort(rv.leases, function(a, b) return a.age < b.age end) + + luci.http.prepare_content("application/json") + luci.http.write_json(rv) +end diff --git a/feeds/luci/applications/luci-app-ahcp/luasrc/model/cbi/ahcp.lua b/feeds/luci/applications/luci-app-ahcp/luasrc/model/cbi/ahcp.lua new file mode 100644 index 0000000..30897eb --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/luasrc/model/cbi/ahcp.lua @@ -0,0 +1,110 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("ahcpd", translate("AHCP Server"), translate("AHCP is an autoconfiguration protocol " .. + "for IPv6 and dual-stack IPv6/IPv4 networks designed to be used in place of router " .. + "discovery or DHCP on networks where it is difficult or impossible to configure a " .. + "server within every link-layer broadcast domain, for example mobile ad-hoc networks.")) + + +m:section(SimpleSection).template = "ahcp_status" + +s = m:section(TypedSection, "ahcpd") +s:tab("general", translate("General Setup")) +s:tab("advanced", translate("Advanced Settings")) +s.addremove = false +s.anonymous = true + + +mode = s:taboption("general", ListValue, "mode", translate("Operation mode")) +mode:value("server", translate("Server")) +mode:value("forwarder", translate("Forwarder")) + +net = s:taboption("general", Value, "interface", translate("Served interfaces")) +net.template = "cbi/network_netlist" +net.widget = "checkbox" +net.nocreate = true + +function net.cfgvalue(self, section) + return m.uci:get("ahcpd", section, "interface") +end + +pfx = s:taboption("general", DynamicList, "prefix", translate("Announced prefixes"), + translate("Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation")) +pfx.optional = true +pfx.datatype = "ipaddr" +pfx:depends("mode", "server") + +nss = s:taboption("general", DynamicList, "name_server", translate("Announced DNS servers"), + translate("Specifies the announced IPv4 and IPv6 name servers")) +nss.optional = true +nss.datatype = "ipaddr" +nss:depends("mode", "server") + +ntp = s:taboption("general", DynamicList, "ntp_server", translate("Announced NTP servers"), + translate("Specifies the announced IPv4 and IPv6 NTP servers")) +ntp.optional = true +ntp.datatype = "ipaddr" +ntp:depends("mode", "server") + +mca = s:taboption("general", Value, "multicast_address", translate("Multicast address")) +mca.optional = true +mca.placeholder = "ff02::cca6:c0f9:e182:5359" +mca.datatype = "ip6addr" + +port = s:taboption("general", Value, "port", translate("Port")) +port.optional = true +port.placeholder = 5359 +port.datatype = "port" + +fam = s:taboption("general", ListValue, "_family", translate("Protocol family")) +fam:value("", translate("IPv4 and IPv6")) +fam:value("ipv4", translate("IPv4 only")) +fam:value("ipv6", translate("IPv6 only")) + +function fam.cfgvalue(self, section) + local v4 = m.uci:get_bool("ahcpd", section, "ipv4_only") + local v6 = m.uci:get_bool("ahcpd", section, "ipv6_only") + if v4 then + return "ipv4" + elseif v6 then + return "ipv6" + end + return "" +end + +function fam.write(self, section, value) + if value == "ipv4" then + m.uci:set("ahcpd", section, "ipv4_only", "true") + m.uci:delete("ahcpd", section, "ipv6_only") + elseif value == "ipv6" then + m.uci:set("ahcpd", section, "ipv6_only", "true") + m.uci:delete("ahcpd", section, "ipv4_only") + end +end + +function fam.remove(self, section) + m.uci:delete("ahcpd", section, "ipv4_only") + m.uci:delete("ahcpd", section, "ipv6_only") +end + +ltime = s:taboption("general", Value, "lease_time", translate("Lease validity time")) +ltime.optional = true +ltime.placeholder = 3666 +ltime.datatype = "uinteger" + + +ld = s:taboption("advanced", Value, "lease_dir", translate("Lease directory")) +ld.datatype = "directory" +ld.placeholder = "/var/lib/leases" + +id = s:taboption("advanced", Value, "id_file", translate("Unique ID file")) +--id.datatype = "file" +id.placeholder = "/var/lib/ahcpd-unique-id" + +log = s:taboption("advanced", Value, "log_file", translate("Log file")) +--log.datatype = "file" +log.placeholder = "/var/log/ahcpd.log" + + +return m diff --git a/feeds/luci/applications/luci-app-ahcp/luasrc/view/admin_status/index/ahcp.htm b/feeds/luci/applications/luci-app-ahcp/luasrc/view/admin_status/index/ahcp.htm new file mode 100644 index 0000000..ef4cfca --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/luasrc/view/admin_status/index/ahcp.htm @@ -0,0 +1 @@ +<%+ahcp_status%> diff --git a/feeds/luci/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm b/feeds/luci/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm new file mode 100644 index 0000000..9468289 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm @@ -0,0 +1,53 @@ + + +
+ <%:Active AHCP Leases%> +

+ + + + + + + + +
<%:Address%><%:Age%>

<%:Collecting data...%>
+
diff --git a/feeds/luci/applications/luci-app-ahcp/po/ca/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/ca/ahcp.po new file mode 100644 index 0000000..89108fd --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/ca/ahcp.po @@ -0,0 +1,117 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-02 21:34+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "Servidor AHCP" + +# Minor misspelling corrections +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP és un protocol de configuració automàtica per IPv6 i xarxes de pila " +"dual IPv6/IPv4 dissenyat per fer servir en lloc del descobriment de rutes o " +"DHCP en xarxes on es difícil o impossible configurar un servidor dins de " +"tots els dominis de difusió a la capa d'enllaç, per exemple xarxes mòbils ad-" +"hoc." + +# apòstrof+acrònims http://ca.wikipedia.org/wiki/Ap%C3%B2strof#Observacions +msgid "Active AHCP Leases" +msgstr "Leases actius d'AHCP" + +msgid "Address" +msgstr "Adreça" + +msgid "Advanced Settings" +msgstr "Configuració avançada" + +msgid "Age" +msgstr "Edat" + +msgid "Announced DNS servers" +msgstr "Servidors DNS anunciats" + +msgid "Announced NTP servers" +msgstr "Servidors NTP anunciats" + +msgid "Announced prefixes" +msgstr "Prefixos anunciats" + +msgid "Collecting data..." +msgstr "Recopilant informació..." + +msgid "Forwarder" +msgstr "Retransmissor" + +msgid "General Setup" +msgstr "Configuració general" + +msgid "IPv4 and IPv6" +msgstr "IPv4 i IPv6" + +msgid "IPv4 only" +msgstr "Només IPv4" + +msgid "IPv6 only" +msgstr "Només IPv6" + +msgid "Lease directory" +msgstr "Directori d'arrendament" + +msgid "Lease validity time" +msgstr "Duració d'arrendament" + +msgid "Log file" +msgstr "Fitxer de registre" + +msgid "Multicast address" +msgstr "Adreça de difusió selectiva" + +msgid "Operation mode" +msgstr "Mode d'operació" + +msgid "Port" +msgstr "Port" + +msgid "Protocol family" +msgstr "Família de protocol" + +msgid "Served interfaces" +msgstr "Interfícies servides" + +msgid "Server" +msgstr "Servidor" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Especifica els servidors NTP IPv4 i IPv6 anunciats" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Especifica els servidors de noms IPv4 i IPv6 anunciats" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "Especifica els prefixos de xarxa IPv4 i IPv6 anunciats en notació CIDR" + +msgid "The AHCP Service is not running." +msgstr "El servidor AHCP no està funcionant." + +msgid "The AHCP Service is running with ID %s." +msgstr "El servei AHCP està funcionant amb el ID %s." + +msgid "There are no active leases." +msgstr "No hi ha arrendaments actius." + +msgid "Unique ID file" +msgstr "Fitxer ID únic" diff --git a/feeds/luci/applications/luci-app-ahcp/po/cs/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/cs/ahcp.po new file mode 100644 index 0000000..0a9e0af --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/cs/ahcp.po @@ -0,0 +1,114 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-04-23 23:01+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "AHCP Server" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP je autokonfigurační protokol pro IPv6 a dual-stack IPv6/IPv4 sítě, " +"vytvořený pro použití vedle funkcí router discovery (Vyhledávání směrovačů " +"pomocí ICMP zpráv) a DHCP na sítích kde je obtížné či nemožné nakonfigurovat " +"server v každé vrstvě broadcast domény, například mobilní ad-hoc sítě." + +msgid "Active AHCP Leases" +msgstr "Aktivní AHCP zapůjčení" + +msgid "Address" +msgstr "Adresa" + +msgid "Advanced Settings" +msgstr "Pokročilé nastavení" + +msgid "Age" +msgstr "Stáří" + +msgid "Announced DNS servers" +msgstr "Oznámené DNS servery" + +msgid "Announced NTP servers" +msgstr "Oznámené NTP servery" + +msgid "Announced prefixes" +msgstr "Oznámené předčíslí" + +msgid "Collecting data..." +msgstr "Probíhá shromažďování dat..." + +msgid "Forwarder" +msgstr "Přesměrování" + +msgid "General Setup" +msgstr "Obecné nastavení" + +msgid "IPv4 and IPv6" +msgstr "IPv4 a IPv6" + +msgid "IPv4 only" +msgstr "pouze IPv4" + +msgid "IPv6 only" +msgstr "Pouze IPv6" + +msgid "Lease directory" +msgstr "Zapůjčené adresáře" + +msgid "Lease validity time" +msgstr "Doba platnosti zapujčení" + +msgid "Log file" +msgstr "Soubor protokolu" + +msgid "Multicast address" +msgstr "Vícesměrové adresy" + +msgid "Operation mode" +msgstr "Pracovní režim" + +msgid "Port" +msgstr "Port" + +msgid "Protocol family" +msgstr "Rodina protokolů" + +msgid "Served interfaces" +msgstr "Obsluhované rozhraní" + +msgid "Server" +msgstr "Servr" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Specifikuje ohlášené IPv4 a IPv6 NTP servery" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Specifikuje ohlášené IPv4 a IPv6 názvové servery" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "Specifikuje ohlášené IPv4 a IPv6 sítě předpony v CIDR notaci" + +msgid "The AHCP Service is not running." +msgstr "Služba AHCP neběží" + +msgid "The AHCP Service is running with ID %s." +msgstr "Služba AHCP je spuštěna s ID %s." + +msgid "There are no active leases." +msgstr "Neexistují žádná aktivní pronajmutí." + +msgid "Unique ID file" +msgstr "Jedinečný ID soubor" diff --git a/feeds/luci/applications/luci-app-ahcp/po/de/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/de/ahcp.po new file mode 100644 index 0000000..6df34d8 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/de/ahcp.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-30 18:21+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "AHCP Server" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP ist ein Autokonfigurationsprotokoll für IPv6- und IPv4/IPv6 Dualstack-" +"Netzwerke. Es ist darauf ausgelegt anstelle von Router Advertisements und " +"DHCP-Servern in Ad-Hoc Netzwerken eingesetzt zu werden." + +msgid "Active AHCP Leases" +msgstr "Aktive AHCP-Leases" + +msgid "Address" +msgstr "Adresse" + +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +msgid "Age" +msgstr "Alter" + +msgid "Announced DNS servers" +msgstr "Angekündigte DNS-Server" + +msgid "Announced NTP servers" +msgstr "Angekündigte NTP-Server" + +msgid "Announced prefixes" +msgstr "Angekündigte Prefixe" + +msgid "Collecting data..." +msgstr "Sammle Daten..." + +msgid "Forwarder" +msgstr "Forwarder" + +msgid "General Setup" +msgstr "Allgemeine Einstellungen" + +msgid "IPv4 and IPv6" +msgstr "IPv4 und IPv6" + +msgid "IPv4 only" +msgstr "nur IPv4" + +msgid "IPv6 only" +msgstr "nur IPv6" + +msgid "Lease directory" +msgstr "Lease-Verzeichnis" + +msgid "Lease validity time" +msgstr "Lease-Gültigkeitsdauer" + +msgid "Log file" +msgstr "Protokolldatei" + +msgid "Multicast address" +msgstr "Mutlicast-Adresse" + +msgid "Operation mode" +msgstr "Betriebsmodus" + +msgid "Port" +msgstr "Port" + +msgid "Protocol family" +msgstr "Protokollfamilie" + +msgid "Served interfaces" +msgstr "Verwendete Schnittstellen" + +msgid "Server" +msgstr "Server" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Konfiguriert die bekannt gegebenen IPv4- und IPv6-NTP-Server" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Konfiguriert die bekannt gegebenen IPv4- und IPv6-DNS-Server" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" +"Konfiguriert die bekannt gegebenen IPv4- und IPv6-Netzwerkprefixe. Angabe in " +"CIDR-Notation." + +msgid "The AHCP Service is not running." +msgstr "Der AHCP-Dienst läuft nicht." + +msgid "The AHCP Service is running with ID %s." +msgstr "Der AHCP-Dienst läuft mit ID %s." + +msgid "There are no active leases." +msgstr "Es gibt keine aktiven Leases." + +msgid "Unique ID file" +msgstr "UID-Datei" diff --git a/feeds/luci/applications/luci-app-ahcp/po/el/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/el/ahcp.po new file mode 100644 index 0000000..0d7d6bd --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/el/ahcp.po @@ -0,0 +1,114 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-18 16:25+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: none\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "AHCP Server" +msgstr "Εξυπηρετητής AHCP" + +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" + +msgid "Active AHCP Leases" +msgstr "Ενεργά AHCP Leases" + +msgid "Address" +msgstr "Διεύθυνση" + +msgid "Advanced Settings" +msgstr "" + +msgid "Age" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Announced NTP servers" +msgstr "" + +msgid "Announced prefixes" +msgstr "" + +msgid "Collecting data..." +msgstr "Συλλέγονται δεδομένα..." + +msgid "Forwarder" +msgstr "Προωθητής" + +msgid "General Setup" +msgstr "Γενικές ρυθμίσεις" + +msgid "IPv4 and IPv6" +msgstr "IPv4 και IPv6" + +msgid "IPv4 only" +msgstr "μόνο IPv4" + +msgid "IPv6 only" +msgstr "μόνο IPv6" + +#, fuzzy +msgid "Lease directory" +msgstr "Κατάλογος leases" + +msgid "Lease validity time" +msgstr "Χρόνος εγκυρότητας lease" + +msgid "Log file" +msgstr "Αρχείο καταγραφής" + +msgid "Multicast address" +msgstr "Διεύθυνση multicast" + +msgid "Operation mode" +msgstr "" + +msgid "Port" +msgstr "Θύρα" + +msgid "Protocol family" +msgstr "Οικογένεια πρωτοκόλλου" + +msgid "Served interfaces" +msgstr "Εξυπηρετούμενες διεπαφές" + +msgid "Server" +msgstr "Εξυπηρετητής" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Καθορίζει τους εξυπηρετητές NTP σε IPv4 και IPv6 που ανακοινώνονται" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Καθορίζει τους εξυπηρετητές DNS σε IPv4 και IPv6 που ανακοινώνονται" + +#, fuzzy +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" +"Καθορίζει τα προθέματα διευθύνσεων IPv4 και IPv6 που ανακοινώνονται, σε " +"μορφή CIDR" + +msgid "The AHCP Service is not running." +msgstr "" + +msgid "The AHCP Service is running with ID %s." +msgstr "" + +#, fuzzy +msgid "There are no active leases." +msgstr "Δεν υπάρχουν ενεργά leases" + +msgid "Unique ID file" +msgstr "Αρχείο μοναδικού αναγνωριστικού" diff --git a/feeds/luci/applications/luci-app-ahcp/po/en/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/en/ahcp.po new file mode 100644 index 0000000..4ad2ab27 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/en/ahcp.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-15 11:31+0200\n" +"Last-Translator: madanadam \n" +"Language-Team: none\n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "AHCP Server" +msgstr "AHCP Server" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery and DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." + +msgid "Active AHCP Leases" +msgstr "Active AHCP Leases" + +msgid "Address" +msgstr "Address" + +msgid "Advanced Settings" +msgstr "Advanced Settings" + +msgid "Age" +msgstr "Age" + +msgid "Announced DNS servers" +msgstr "Announced DNS servers" + +msgid "Announced NTP servers" +msgstr "Announced NTP servers" + +msgid "Announced prefixes" +msgstr "Announced prefixes" + +msgid "Collecting data..." +msgstr "Collecting data..." + +msgid "Forwarder" +msgstr "Forwarder" + +msgid "General Setup" +msgstr "General Setup" + +msgid "IPv4 and IPv6" +msgstr "IPv4 and IPv6" + +msgid "IPv4 only" +msgstr "IPv4 only" + +msgid "IPv6 only" +msgstr "IPv6 only" + +msgid "Lease directory" +msgstr "Lease directory" + +msgid "Lease validity time" +msgstr "Lease validity time" + +msgid "Log file" +msgstr "Log file" + +msgid "Multicast address" +msgstr "Multicast address" + +msgid "Operation mode" +msgstr "Operation mode" + +msgid "Port" +msgstr "Port" + +msgid "Protocol family" +msgstr "Protocol family" + +msgid "Served interfaces" +msgstr "Served interfaces" + +msgid "Server" +msgstr "Server" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Specifies the announced IPv4 and IPv6 NTP servers" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Specifies the announced IPv4 and IPv6 name servers" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" +"Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" + +msgid "The AHCP Service is not running." +msgstr "The AHCP Service is not running." + +msgid "The AHCP Service is running with ID %s." +msgstr "The AHCP Service is running with ID %s." + +msgid "There are no active leases." +msgstr "There are no active leases." + +msgid "Unique ID file" +msgstr "Unique ID file" diff --git a/feeds/luci/applications/luci-app-ahcp/po/es/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/es/ahcp.po new file mode 100644 index 0000000..512606a --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/es/ahcp.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-09-14 19:30+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "Servidor AHCP" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP es un protocolo de autoconfiguración para redes con IPv6 o duales IPv6/" +"IPv4 diseñado para ser usado en lugar de router discovery o DHCP en redes en " +"las que es difícil o imposible configurar un servidor en cada capa de enlace " +"del dominio de propagación como las redes móviles ad-hoc." + +# "Lease" en el sentido usado en DHCP no tiene una traducción clara en español y se puede usar la misma palabra en que en inglés. +msgid "Active AHCP Leases" +msgstr "Cesiones activas AHCP" + +msgid "Address" +msgstr "Dirección" + +msgid "Advanced Settings" +msgstr "Configuración avanzada" + +msgid "Age" +msgstr "Vida" + +msgid "Announced DNS servers" +msgstr "Servidores DNS declarados" + +msgid "Announced NTP servers" +msgstr "Servidores NTP declarados" + +msgid "Announced prefixes" +msgstr "Prefijos declarados" + +msgid "Collecting data..." +msgstr "Obteniendo datos..." + +msgid "Forwarder" +msgstr "Transmisor" + +msgid "General Setup" +msgstr "Configuración general" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 only" +msgstr "Sólo IPv4" + +msgid "IPv6 only" +msgstr "Sólo IPv6" + +msgid "Lease directory" +msgstr "Directorio de cesiones" + +msgid "Lease validity time" +msgstr "Tiempo de validez de la cesión" + +msgid "Log file" +msgstr "Fichero de registro" + +msgid "Multicast address" +msgstr "Dirección multicast" + +msgid "Operation mode" +msgstr "Modo de funcionamiento" + +msgid "Port" +msgstr "Puerto" + +msgid "Protocol family" +msgstr "Familia de protocolos" + +msgid "Served interfaces" +msgstr "Interfaces configurados" + +msgid "Server" +msgstr "Servidor" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Especifica los servidores NTP IPv4 e IPv6 declarados" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Especifica los servidores de nombres IPv4 e IPv6 declarados" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "Especifica los prefijos de red IPv4 e IPv6 declarados en notación CIDR" + +msgid "The AHCP Service is not running." +msgstr "El Servicio AHCP no está funcionando." + +msgid "The AHCP Service is running with ID %s." +msgstr "El Servicio AHCP está funcionando con el ID %s." + +msgid "There are no active leases." +msgstr "No hay cesiones activas." + +msgid "Unique ID file" +msgstr "ID único de fichero" diff --git a/feeds/luci/applications/luci-app-ahcp/po/fr/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/fr/ahcp.po new file mode 100644 index 0000000..1163518 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/fr/ahcp.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-11-06 13:06+0200\n" +"Last-Translator: hogsim \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "Serveur AHCP" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP est un protocole d'auto-configuration pour les réseaux IPv6 et double-" +"pile IPv6/IPv4, destiné à remplacer la recherche de routeur et le service " +"DHCP sur des réseaux où il est difficile, voire impossible de configurer un " +"tel serveur pour tous les domaines de diffusion au niveau lien, par exemple " +"pour des réseaux ad-hoc mobiles." + +msgid "Active AHCP Leases" +msgstr "Baux AHCP actifs" + +msgid "Address" +msgstr "Adresse" + +msgid "Advanced Settings" +msgstr "Paramètres avancés" + +msgid "Age" +msgstr "Age" + +msgid "Announced DNS servers" +msgstr "Serveurs DNS publiés" + +msgid "Announced NTP servers" +msgstr "Serveurs NTP publiés" + +msgid "Announced prefixes" +msgstr "Préfixes publiés" + +msgid "Collecting data..." +msgstr "Récupération des données…" + +msgid "Forwarder" +msgstr "Transmetteur" + +msgid "General Setup" +msgstr "Paramètres principaux" + +msgid "IPv4 and IPv6" +msgstr "IPv4 et IPv6" + +msgid "IPv4 only" +msgstr "IPv4 seulement" + +msgid "IPv6 only" +msgstr "IPv6 seulement" + +msgid "Lease directory" +msgstr "Répertoire d'un bail" + +msgid "Lease validity time" +msgstr "Date de validité d'un bail" + +msgid "Log file" +msgstr "Fichier journal" + +msgid "Multicast address" +msgstr "Adresse multidiffusion" + +msgid "Operation mode" +msgstr "Mode de fonctionnement" + +msgid "Port" +msgstr "Port" + +msgid "Protocol family" +msgstr "Famille de protocole" + +msgid "Served interfaces" +msgstr "Interfaces gérés" + +msgid "Server" +msgstr "Serveur" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Décrit les serveurs NTP IPv4 et IPv6 publiés" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Décrit les serveurs de noms IPv4 et IPv6 publiés" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "Décrit les préfixes réseaux IPv4 et IPv6 publiés en notation CIDR" + +msgid "The AHCP Service is not running." +msgstr "Le service AHCP n'est pas en fonctionnement." + +msgid "The AHCP Service is running with ID %s." +msgstr "Le service AHCP est en fonctionnement avec l'ID s." + +msgid "There are no active leases." +msgstr "Il n'y a aucun bail actif." + +msgid "Unique ID file" +msgstr "Fichier de l'ID unique" diff --git a/feeds/luci/applications/luci-app-ahcp/po/he/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/he/ahcp.po new file mode 100644 index 0000000..1c45cc8 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/he/ahcp.po @@ -0,0 +1,118 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-10 03:44+0200\n" +"Last-Translator: Snoof \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "שרת AHCP" + +# מי שמבין את המונחים הטכניים שיעבור על זה ויתקן. +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP הוא פרוטוקול להגדרה אוטומטית של רשתות IPV6 ו- dual-stack IPv6/IPv4, אשר " +"עוצב לשימוש כתחליף לגילוי נתבים ול- DHCP ברשתות שבהן קשה או בלתי אפשרי " +"להגדיר שרת בתוך כל שם מתחם לשידור שכבת קישור, לדוגמה רשתות אד-הוק ניידות." + +#, fuzzy +msgid "Active AHCP Leases" +msgstr "החכרות AHCP קיימות" + +msgid "Address" +msgstr "כתובת" + +msgid "Advanced Settings" +msgstr "הגדרות מתקדמות" + +msgid "Age" +msgstr "גיל" + +msgid "Announced DNS servers" +msgstr "שרתי DNS מוכרזים" + +msgid "Announced NTP servers" +msgstr "שרתי NTP מוכרזים" + +msgid "Announced prefixes" +msgstr "קידומות מוכרזות" + +msgid "Collecting data..." +msgstr "אוסף נתונים..." + +msgid "Forwarder" +msgstr "" + +msgid "General Setup" +msgstr "התקנה כללית" + +msgid "IPv4 and IPv6" +msgstr "IPv4 ו- IPv6" + +msgid "IPv4 only" +msgstr "IPv4 בלבד" + +msgid "IPv6 only" +msgstr "IPv6 בלבד" + +#, fuzzy +msgid "Lease directory" +msgstr "ספריית החכרות" + +# תו +msgid "Lease validity time" +msgstr "תוקף ההקצאה" + +msgid "Log file" +msgstr "קובץ רישום" + +msgid "Multicast address" +msgstr "כתובת Multicast" + +# אפשר גם מצב פעולה +msgid "Operation mode" +msgstr "מצב הפעלה" + +msgid "Port" +msgstr "פורט" + +msgid "Protocol family" +msgstr "משפחת פרוטוקולים" + +msgid "Served interfaces" +msgstr "סיגמנטים מופעלים" + +msgid "Server" +msgstr "שרת" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "שרתי NTP ברשתות IPV4 IPV6" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "שרתי DNS ברשתות IPV4 IPV6" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "קידומת שרתים (CIDR)" + +msgid "The AHCP Service is not running." +msgstr "" + +msgid "The AHCP Service is running with ID %s." +msgstr "" + +msgid "There are no active leases." +msgstr "אין הקצאות פעילות." + +msgid "Unique ID file" +msgstr "קובץ מזהה יחודי" diff --git a/feeds/luci/applications/luci-app-ahcp/po/hu/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/hu/ahcp.po new file mode 100644 index 0000000..a0a91be --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/hu/ahcp.po @@ -0,0 +1,116 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-31 15:46+0200\n" +"Last-Translator: juhosg \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "AHCP Server" +msgstr "AHCP kiszolgáló" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"Az AHCP egy olyan automatikus konfigurációs protokoll IPv6 és kettős IPv6/" +"IPv4 hálózatokhoz, mely a DHCP és a router dicovery protokoll helyett " +"használható olyan hálózatokok ahol nehéz vagy lehetetlen beállítani külön " +"kiszolgálót minden kapcsolati réteg tartományon belül, mint például a mobil " +"eseti hálózatok." + +msgid "Active AHCP Leases" +msgstr "Aktív AHCP bérletek" + +msgid "Address" +msgstr "Cím" + +msgid "Advanced Settings" +msgstr "Haladó beállítások" + +msgid "Age" +msgstr "Kor" + +msgid "Announced DNS servers" +msgstr "Bejelentett névkiszolgálók" + +msgid "Announced NTP servers" +msgstr "Bejelentett NTP kiszolgálók" + +msgid "Announced prefixes" +msgstr "Bejelentett előtagok" + +msgid "Collecting data..." +msgstr "Adatok összegyűjtése..." + +msgid "Forwarder" +msgstr "Továbbító" + +msgid "General Setup" +msgstr "Általános beállítások" + +msgid "IPv4 and IPv6" +msgstr "IPv4 és IPv6" + +msgid "IPv4 only" +msgstr "csak IPv4" + +msgid "IPv6 only" +msgstr "csak IPv6" + +msgid "Lease directory" +msgstr "Bérlet könytár" + +msgid "Lease validity time" +msgstr "Bérlet érvényességi ideje" + +msgid "Log file" +msgstr "Napló fájl" + +msgid "Multicast address" +msgstr "Multicast cím" + +msgid "Operation mode" +msgstr "Működési mód" + +msgid "Port" +msgstr "Port" + +msgid "Protocol family" +msgstr "Protokoll család" + +msgid "Served interfaces" +msgstr "Kiszolgált interfészek" + +msgid "Server" +msgstr "Kiszolgáló" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "A bejelentett IPv4 és IPv6 NTP kiszolgálók részletezése" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "A bejelentett IPv4 és IPv6 névkiszolgálók részletezése" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" +"A bejelentett IPv4 és IPv6 hálózati előtagok részletezése CIDR jelölésben" + +msgid "The AHCP Service is not running." +msgstr "Az AHCP szolgáltatás nem fut" + +msgid "The AHCP Service is running with ID %s." +msgstr "Az AHCP szolgáltatás fut, azonosítója:%s." + +msgid "There are no active leases." +msgstr "Nincsenek aktív bérletek." + +msgid "Unique ID file" +msgstr "Egyedi azonosító fájl" diff --git a/feeds/luci/applications/luci-app-ahcp/po/it/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/it/ahcp.po new file mode 100644 index 0000000..56d9516 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/it/ahcp.po @@ -0,0 +1,114 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-02-03 12:53+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "Server AHCP" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP è un protocollo di configurazione automatica per reti IPv6 e dual-stack " +"IPv6/IPv4 progettato per essere usato al posto del router discovery e DHCP " +"su reti dove è difficile o impossibile configurare un server all'interno di " +"ogni dominio di broadcast, per esempio reti ad-hoc mobili." + +msgid "Active AHCP Leases" +msgstr "Lease AHCP Attivi" + +msgid "Address" +msgstr "Indirizzo" + +msgid "Advanced Settings" +msgstr "Impostazioni Avanzate" + +msgid "Age" +msgstr "Età" + +msgid "Announced DNS servers" +msgstr "Server DNS indicati" + +msgid "Announced NTP servers" +msgstr "Server NTP indicati" + +msgid "Announced prefixes" +msgstr "Prefissi indicati" + +msgid "Collecting data..." +msgstr "Raccolta dei dati..." + +msgid "Forwarder" +msgstr "Mittente" + +msgid "General Setup" +msgstr "Setup Generale" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 only" +msgstr "Solo IPv4" + +msgid "IPv6 only" +msgstr "Solo IPv6" + +msgid "Lease directory" +msgstr "Directory di Lease" + +msgid "Lease validity time" +msgstr "Tempo di validità del Lease" + +msgid "Log file" +msgstr "File di log" + +msgid "Multicast address" +msgstr "Indirizzo Multicast" + +msgid "Operation mode" +msgstr "Modalità di funzionamento" + +msgid "Port" +msgstr "Porta" + +msgid "Protocol family" +msgstr "Protocollo famiglia" + +msgid "Served interfaces" +msgstr "Interfacce servite" + +msgid "Server" +msgstr "Server" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Specifica i server NTP IPv4 e IPv6 annunciati" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Specifica il server dei nomi IPv4 e IPv6" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "Specifica i prefissi delle reti IPv4 e IPv6 in notazione CIDR" + +msgid "The AHCP Service is not running." +msgstr "Il servizio AHCP non è in esecuzione." + +msgid "The AHCP Service is running with ID %s." +msgstr "Il servizio AHCP è in esecuzione con ID %s." + +msgid "There are no active leases." +msgstr "Non ci sono leases attivi." + +msgid "Unique ID file" +msgstr "File degli Unique ID" diff --git a/feeds/luci/applications/luci-app-ahcp/po/ja/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/ja/ahcp.po new file mode 100644 index 0000000..dd78ccd --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/ja/ahcp.po @@ -0,0 +1,117 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-19 07:54+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "AHCP Server" +msgstr "AHCPサーバー" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCPはIPv6及びIPv6/IPv4デュアルスタックを使用するネットワークにおいて、ルー" +"ターディスカバリの代わりとして使用するためにデザインされた自動設定プロトコル" +"です。また、AHCPはモバイル・アドホックネットワークのような、リンク層のドメイ" +"ンブロードキャスト毎に設定を行うことが困難なネットワークでのDHCP機能としても" +"使用することができます。" + +msgid "Active AHCP Leases" +msgstr "有効なAHCPリース" + +msgid "Address" +msgstr "アドレス" + +msgid "Advanced Settings" +msgstr "詳細設定" + +msgid "Age" +msgstr "Age" + +msgid "Announced DNS servers" +msgstr "通知するDNSサーバー" + +msgid "Announced NTP servers" +msgstr "通知するNTPサーバー" + +msgid "Announced prefixes" +msgstr "通知するプレフィクス" + +msgid "Collecting data..." +msgstr "データ収集中です..." + +msgid "Forwarder" +msgstr "転送" + +msgid "General Setup" +msgstr "一般設定" + +msgid "IPv4 and IPv6" +msgstr "IPv4及びIPv6" + +msgid "IPv4 only" +msgstr "IPv4のみ" + +msgid "IPv6 only" +msgstr "IPv6のみ" + +msgid "Lease directory" +msgstr "リースファイル・ディレクトリ" + +msgid "Lease validity time" +msgstr "リース有効時間" + +msgid "Log file" +msgstr "ログファイル" + +msgid "Multicast address" +msgstr "マルチキャストアドレス" + +msgid "Operation mode" +msgstr "動作モード" + +msgid "Port" +msgstr "ポート" + +msgid "Protocol family" +msgstr "プロトコルファミリ" + +msgid "Served interfaces" +msgstr "対象インターフェース" + +msgid "Server" +msgstr "サーバー" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "通知するNTPサーバーのIPv4及びIPv6アドレスを設定します" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "通知するDNSサーバーのIPv4及びIPv6アドレスを設定します" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" +"通知するIPv4及びIPv6アドレスのネットワーク・プレフィクスをCIDR形式で設定しま" +"す" + +msgid "The AHCP Service is not running." +msgstr "AHCP サービスは稼働していません。" + +msgid "The AHCP Service is running with ID %s." +msgstr "AHCP サービスは稼働中です。(ID %s)" + +msgid "There are no active leases." +msgstr "有効なリースはありません。" + +msgid "Unique ID file" +msgstr "ユニークIDファイル" diff --git a/feeds/luci/applications/luci-app-ahcp/po/ms/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/ms/ahcp.po new file mode 100644 index 0000000..0b6963b --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/ms/ahcp.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "AHCP Server" +msgstr "" + +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" + +msgid "Active AHCP Leases" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Age" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Announced NTP servers" +msgstr "" + +msgid "Announced prefixes" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Forwarder" +msgstr "" + +msgid "General Setup" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Lease directory" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Multicast address" +msgstr "" + +msgid "Operation mode" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol family" +msgstr "" + +msgid "Served interfaces" +msgstr "" + +msgid "Server" +msgstr "" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" + +msgid "The AHCP Service is not running." +msgstr "" + +msgid "The AHCP Service is running with ID %s." +msgstr "" + +msgid "There are no active leases." +msgstr "" + +msgid "Unique ID file" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ahcp/po/no/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/no/ahcp.po new file mode 100644 index 0000000..4c3bc03 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/no/ahcp.po @@ -0,0 +1,117 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-06-14 20:11+0200\n" +"Last-Translator: protx \n" +"Language-Team: none\n" +"Language: no\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "AHCP Server" +msgstr "AHCP Server" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP er en autokonfigurasjon protokoll for IPv6, og dual-stack IPv6/IPv4 " +"nettverk. Det er laget for bruk der DHCP og Ruter oppdagelse er problematisk " +"eller umulig å bruke for hvert link-lags broadcast domene, f.eks. mobile ad-" +"hoc nettverk." + +msgid "Active AHCP Leases" +msgstr "Aktive AHCP Leier" + +msgid "Address" +msgstr "Adresse" + +msgid "Advanced Settings" +msgstr "Avanserte Innstillinger" + +msgid "Age" +msgstr "Alder" + +msgid "Announced DNS servers" +msgstr "Annonserte DNS servere" + +msgid "Announced NTP servers" +msgstr "Annonserte NTP servere" + +msgid "Announced prefixes" +msgstr "Annonserte prefikser" + +msgid "Collecting data..." +msgstr "Henter data..." + +#, fuzzy +msgid "Forwarder" +msgstr "Sender" + +msgid "General Setup" +msgstr "Generelt Oppsett" + +msgid "IPv4 and IPv6" +msgstr "IPv4 og IPv6" + +msgid "IPv4 only" +msgstr "Kun IPv4" + +msgid "IPv6 only" +msgstr "Kun IPv6" + +#, fuzzy +msgid "Lease directory" +msgstr "Leie katalog" + +msgid "Lease validity time" +msgstr "Gyldig leietid" + +msgid "Log file" +msgstr "Logg fil" + +msgid "Multicast address" +msgstr "Multicast adresse" + +msgid "Operation mode" +msgstr "Driftsmodus" + +msgid "Port" +msgstr "Port" + +msgid "Protocol family" +msgstr "Protokoll familie" + +#, fuzzy +msgid "Served interfaces" +msgstr "Utdelte grensesnitt" + +msgid "Server" +msgstr "Server" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Angir annonserte IPv4 og IPv6 NTP-servere" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Angir annonserte IPv4 og IPv6 navnetjenere" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "Angir annonserte IPv4 og IPv6 nettverk prefikser i CIDR-notasjon" + +msgid "The AHCP Service is not running." +msgstr "" + +msgid "The AHCP Service is running with ID %s." +msgstr "" + +msgid "There are no active leases." +msgstr "Det er ingen aktive leieavtaler." + +msgid "Unique ID file" +msgstr "Unik ID fil" diff --git a/feeds/luci/applications/luci-app-ahcp/po/pl/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/pl/ahcp.po new file mode 100644 index 0000000..5095224 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/pl/ahcp.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-14 16:40+0200\n" +"Last-Translator: Tomecki \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "AHCP Server" +msgstr "Serwer AHCP" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP to protokół automatycznej konfiguracji sieci IPv6 i IPv6/IPv4 " +"przeznaczone do stosowania zamiast DHCP w sieciach, w których jest trudne " +"lub wręcz niemożliwe, aby skonfigurować serwer w każdej warstwie łącza " +"domeny rozgłoszeniowej, na przykład w mobilnych sieciach ad-hoc." + +msgid "Active AHCP Leases" +msgstr "Aktywne dzierżawy AHCP" + +msgid "Address" +msgstr "Adres" + +msgid "Advanced Settings" +msgstr "Ustawienia zaawansowane" + +msgid "Age" +msgstr "Wiek" + +msgid "Announced DNS servers" +msgstr "Rozgłaszane serwery DNS" + +msgid "Announced NTP servers" +msgstr "Rozgłaszane serwery NTP" + +msgid "Announced prefixes" +msgstr "Rozgłaszane prefiksy" + +msgid "Collecting data..." +msgstr "Zbieranie informacji..." + +msgid "Forwarder" +msgstr "Przekierowanie" + +msgid "General Setup" +msgstr "Ustawienia podstawowe" + +msgid "IPv4 and IPv6" +msgstr "IPv4 oraz IPv6" + +msgid "IPv4 only" +msgstr "Tylko IPv4" + +msgid "IPv6 only" +msgstr "Tylko IPv6" + +msgid "Lease directory" +msgstr "Katalog dzierżaw" + +msgid "Lease validity time" +msgstr "Czas dzierżawy" + +msgid "Log file" +msgstr "Plik dziennika" + +msgid "Multicast address" +msgstr "Adres Multicast" + +msgid "Operation mode" +msgstr "Tryb pracy" + +msgid "Port" +msgstr "Port" + +msgid "Protocol family" +msgstr "Rodzina protokołów" + +msgid "Served interfaces" +msgstr "Udostępniane interfejsy" + +msgid "Server" +msgstr "Serwer" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Określa rozgłaszane adresy IPv4/6 serwerów NTP" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Określa rozgłaszane adresy IPv4/6 serwerów nazw" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "Określa rozgłaszane prefiksy sieciowe w notacji CIDR" + +msgid "The AHCP Service is not running." +msgstr "Usługa AHCP nie jest uruchomiona." + +msgid "The AHCP Service is running with ID %s." +msgstr "Usługa AHCP jest uruchomiona z ID %s." + +msgid "There are no active leases." +msgstr "Nie ma aktywnych dzierżaw." + +msgid "Unique ID file" +msgstr "Unikalny plik ID" diff --git a/feeds/luci/applications/luci-app-ahcp/po/pt-br/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/pt-br/ahcp.po new file mode 100644 index 0000000..55ec29c --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/pt-br/ahcp.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-03-29 23:07+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "Servidor AHCP" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP é um protocolo de autoconfiguração para redes IPv6 ou IPv6/IPv4 " +"projetado para ser usado no lugar da \"descoberta de roteador\" ou DHCP em " +"redes onde é difícil ou impossível configurar um servidor em cada camada de " +"enlace de domínio de broadcast, como exemplo as redes móvel ad-hoc." + +msgid "Active AHCP Leases" +msgstr "Alocações AHCP Ativas" + +msgid "Address" +msgstr "Endereço" + +msgid "Advanced Settings" +msgstr "Configurações Avançadas" + +msgid "Age" +msgstr "Tempo de vida" + +msgid "Announced DNS servers" +msgstr "Servidores DNS anunciados" + +msgid "Announced NTP servers" +msgstr "Servidores NTP anunciados" + +msgid "Announced prefixes" +msgstr "Prefixos anunciados" + +msgid "Collecting data..." +msgstr "Coletando dados..." + +msgid "Forwarder" +msgstr "Forwarder" + +msgid "General Setup" +msgstr "Configurações Gerais" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 only" +msgstr "Apenas IPv4" + +msgid "IPv6 only" +msgstr "Apenas IPv6" + +msgid "Lease directory" +msgstr "Diretório de atribuições" + +msgid "Lease validity time" +msgstr "Tempo de validade da atribuição" + +msgid "Log file" +msgstr "Arquivo de registro" + +msgid "Multicast address" +msgstr "Endereço multicast" + +msgid "Operation mode" +msgstr "Modo de operação" + +msgid "Port" +msgstr "Porta" + +msgid "Protocol family" +msgstr "Família de protocolos" + +msgid "Served interfaces" +msgstr "Interfaces configuradas" + +msgid "Server" +msgstr "Servidor" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Especifica os servidores NTP IPv4 e IPv6 anunciados" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Especifica os servidores de nomes IPv4 e IPv6 anunciados" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" +"Especifica os prefixos de rede IPv4 e IPv6, em notação CIDR, anunciados" + +msgid "The AHCP Service is not running." +msgstr "O serviço AHCP está parado" + +msgid "The AHCP Service is running with ID %s." +msgstr "O serviço AHCP esta executando com o ID %s." + +msgid "There are no active leases." +msgstr "Não existe alocações ativas." + +msgid "Unique ID file" +msgstr "Arquivo de identificador único" diff --git a/feeds/luci/applications/luci-app-ahcp/po/pt/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/pt/ahcp.po new file mode 100644 index 0000000..f96fc45 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/pt/ahcp.po @@ -0,0 +1,116 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-06-02 21:12+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "Servidor AHCP" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"O AHCP é um protocolo de auto-configuração para redes IPv6 e IPv6/IPv4 dual-" +"stack foi desenhado para ser usado no lugar do router discovery e DHCP nas " +"redes onde é difícil ou impossível configurar o servidor dentro de cada " +"camada de ligação no dominio de broadcast, por exemplo, redes ad-hoc móveis." + +msgid "Active AHCP Leases" +msgstr "Concessões AHCP Ativas" + +msgid "Address" +msgstr "Endereço" + +msgid "Advanced Settings" +msgstr "Definições Avançadas" + +msgid "Age" +msgstr "Idade" + +msgid "Announced DNS servers" +msgstr "Servidores DNS anunciados" + +msgid "Announced NTP servers" +msgstr "Servidores NTP anunciados" + +msgid "Announced prefixes" +msgstr "Prefixos anunciados" + +msgid "Collecting data..." +msgstr "A obter dados..." + +msgid "Forwarder" +msgstr "Encaminhador" + +msgid "General Setup" +msgstr "Configuração Geral" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 only" +msgstr "Só IPv4" + +msgid "IPv6 only" +msgstr "Só IPv6" + +msgid "Lease directory" +msgstr "Directório de concessões" + +msgid "Lease validity time" +msgstr "Prazo de validade das concessões" + +msgid "Log file" +msgstr "Ficheiro log" + +msgid "Multicast address" +msgstr "Endereço de multicast" + +msgid "Operation mode" +msgstr "Modo de operação" + +msgid "Port" +msgstr "Porta" + +msgid "Protocol family" +msgstr "Família do protocolo" + +msgid "Served interfaces" +msgstr "Interfaces servidas" + +msgid "Server" +msgstr "Servidor" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Especifica os servidores NTP anunciados em IPv4 e IPv6" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Especifica os servidores de nomes anunciados em IPv4 e IPv6" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" +"Especifica os prefixos de rede na notação CIDR a serem anunciados em IPv4 e " +"IPv6" + +msgid "The AHCP Service is not running." +msgstr "O serviço AHCP não está a correr." + +msgid "The AHCP Service is running with ID %s." +msgstr "O serviço AHCP está a correr com o ID %s" + +msgid "There are no active leases." +msgstr "Não existem concessões activas." + +msgid "Unique ID file" +msgstr "Ficheiro de ID único" diff --git a/feeds/luci/applications/luci-app-ahcp/po/ro/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/ro/ahcp.po new file mode 100644 index 0000000..2882b31 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/ro/ahcp.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-28 19:14+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "Server AHCP" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP este un protocol de autoconfigurare pentru IPv6 si IPv4 menit sa " +"inlocuie \"router discovery\" si DHCP in retele unde este dificil de " +"configurat un server pentru fiecare domeniu de broadcast pe fiecare " +"legatura, de exemplu pentru retele mobile ad-hoc." + +msgid "Active AHCP Leases" +msgstr "Conexiuni active AHCP" + +msgid "Address" +msgstr "Adresă" + +msgid "Advanced Settings" +msgstr "Setări avansate" + +msgid "Age" +msgstr "Vârstă" + +msgid "Announced DNS servers" +msgstr "Servere DNS anuntate" + +msgid "Announced NTP servers" +msgstr "Servere NTP anuntate" + +msgid "Announced prefixes" +msgstr "Prefixe anuntate" + +msgid "Collecting data..." +msgstr "Colectare date.." + +msgid "Forwarder" +msgstr "Forwarder" + +msgid "General Setup" +msgstr "Configurare generala" + +msgid "IPv4 and IPv6" +msgstr "IPv4 si IPv6" + +msgid "IPv4 only" +msgstr "Doar IPv4 " + +msgid "IPv6 only" +msgstr "Doar IPv6 " + +msgid "Lease directory" +msgstr "Director de conexiuni" + +msgid "Lease validity time" +msgstr "Timpul pentru conexiuni valide" + +msgid "Log file" +msgstr "Fisier log" + +msgid "Multicast address" +msgstr "Adresa multicast" + +msgid "Operation mode" +msgstr "Modul de operare" + +msgid "Port" +msgstr "Port" + +msgid "Protocol family" +msgstr "Familia de protocol" + +msgid "Served interfaces" +msgstr "Interfetele servite" + +msgid "Server" +msgstr "Server" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Specifica serverele de NTP IPv4 si IPv6 anuntate" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Specifica serverele de DNS IPv4 si IPv6 anuntate" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "Specifica prefixele IPv4 si IPv6 anuntate in format CIDR" + +msgid "The AHCP Service is not running." +msgstr "Serviciul AHCP nu ruleaza" + +msgid "The AHCP Service is running with ID %s." +msgstr "Serviciul AHCP nu ruleaza cu ID %s." + +msgid "There are no active leases." +msgstr "Nu exista conexiuni active." + +msgid "Unique ID file" +msgstr "ID de fisier unic" diff --git a/feeds/luci/applications/luci-app-ahcp/po/ru/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/ru/ahcp.po new file mode 100644 index 0000000..f08cb70 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/ru/ahcp.po @@ -0,0 +1,120 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: ahcp\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2013-09-05 15:29+0200\n" +"Last-Translator: datasheet \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +# Ad-Hoc Configuration Protocol - протокол автоматической конфигурации IPv6 и сетей IPv6/IPv4 двойного стека +msgid "AHCP Server" +msgstr "AHCP-сервер" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP - это протокол автоматической конфигурации сетей IPv6 и IPv6/IPv4, " +"разработанный для использования вместо DHCP и протоколов обнаружения " +"маршрутизаторов в сетях, где сложно или невозможно настроить сервер внутри " +"каждой широковещательной зоны канального уровня, например, в мобильных ad-" +"hoc сетях." + +msgid "Active AHCP Leases" +msgstr "Активные арендованные AHCP-адреса" + +msgid "Address" +msgstr "Адрес" + +msgid "Advanced Settings" +msgstr "Дополнительные настройки" + +msgid "Age" +msgstr "Возраст" + +msgid "Announced DNS servers" +msgstr "Анонсируемые DNS-серверы" + +msgid "Announced NTP servers" +msgstr "Анонсируемые NTP-серверы" + +msgid "Announced prefixes" +msgstr "Анонсируемые префиксы" + +msgid "Collecting data..." +msgstr "Сбор данных..." + +#, fuzzy +msgid "Forwarder" +msgstr "Перенаправление запросов" + +msgid "General Setup" +msgstr "Общие настройки" + +msgid "IPv4 and IPv6" +msgstr "IPv4 и IPv6" + +msgid "IPv4 only" +msgstr "Только IPv4" + +msgid "IPv6 only" +msgstr "Только IPv6" + +msgid "Lease directory" +msgstr "Директория арендованных адресов" + +msgid "Lease validity time" +msgstr "Срок действия аренды" + +msgid "Log file" +msgstr "Файл журнала" + +msgid "Multicast address" +msgstr "Групповой адрес" + +msgid "Operation mode" +msgstr "Режим работы" + +msgid "Port" +msgstr "Порт" + +msgid "Protocol family" +msgstr "Протокол" + +msgid "Served interfaces" +msgstr "Используемые интерфейсы" + +msgid "Server" +msgstr "Сервер" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Определяет IPv4 и IPv6 NTP-серверы" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Определяет IPv4 и IPv6 DNS-серверы" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "Определяет IPv4- и IPv6-префиксы сети в нотации CIDR" + +msgid "The AHCP Service is not running." +msgstr "Служба AHCP не запущена." + +msgid "The AHCP Service is running with ID %s." +msgstr "Служба AHCP запущена с ID %s." + +msgid "There are no active leases." +msgstr "Нет активных арендованных адресов." + +msgid "Unique ID file" +msgstr "Файл уникального идентификатора" diff --git a/feeds/luci/applications/luci-app-ahcp/po/sk/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/sk/ahcp.po new file mode 100644 index 0000000..b618490 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/sk/ahcp.po @@ -0,0 +1,106 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "AHCP Server" +msgstr "" + +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" + +msgid "Active AHCP Leases" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Age" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Announced NTP servers" +msgstr "" + +msgid "Announced prefixes" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Forwarder" +msgstr "" + +msgid "General Setup" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Lease directory" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Multicast address" +msgstr "" + +msgid "Operation mode" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol family" +msgstr "" + +msgid "Served interfaces" +msgstr "" + +msgid "Server" +msgstr "" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" + +msgid "The AHCP Service is not running." +msgstr "" + +msgid "The AHCP Service is running with ID %s." +msgstr "" + +msgid "There are no active leases." +msgstr "" + +msgid "Unique ID file" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ahcp/po/sv/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/sv/ahcp.po new file mode 100644 index 0000000..a7c7a38 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/sv/ahcp.po @@ -0,0 +1,109 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-04-27 22:52+0200\n" +"Last-Translator: Umeaboy \n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "AHCP-server" + +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" + +msgid "Active AHCP Leases" +msgstr "Aktiva AHCP-hyror" + +msgid "Address" +msgstr "Adress" + +msgid "Advanced Settings" +msgstr "Avancerade inställningar" + +msgid "Age" +msgstr "Ålder" + +msgid "Announced DNS servers" +msgstr "Aviserade DNS-servrar" + +msgid "Announced NTP servers" +msgstr "Aviserade NTP-servrar" + +msgid "Announced prefixes" +msgstr "Aviserade prefix" + +msgid "Collecting data..." +msgstr "Samlar in data..." + +msgid "Forwarder" +msgstr "Vidarebefordrare" + +msgid "General Setup" +msgstr "Allmän inställning" + +msgid "IPv4 and IPv6" +msgstr "IPv4 och IPv6" + +msgid "IPv4 only" +msgstr "Endast IPv4" + +msgid "IPv6 only" +msgstr "Endast IPv6" + +msgid "Lease directory" +msgstr "Hyr mappen" + +msgid "Lease validity time" +msgstr "Giltighetstid för hyran" + +msgid "Log file" +msgstr "Logg-fil" + +msgid "Multicast address" +msgstr "Multicast-adress" + +msgid "Operation mode" +msgstr "Driftsläge" + +msgid "Port" +msgstr "Port" + +msgid "Protocol family" +msgstr "Protokoll-familj" + +msgid "Served interfaces" +msgstr "Betjänade gränssnitt" + +msgid "Server" +msgstr "Server" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Specificerar de aviserade IPv4 och IPv6 NTP-servrarna" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Specificerar de aviserade IPv4 och IPv6 namn-servrarna" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "Specificerar de aviserade IPv4 och IPv6 nätverksprefixen i CIDR-noteringen" + +msgid "The AHCP Service is not running." +msgstr "AHCP-tjänsten körs inte." + +msgid "The AHCP Service is running with ID %s." +msgstr "AHCP-tjänsten körs med ID %s." + +msgid "There are no active leases." +msgstr "Det finns inga aktiva hyror." + +msgid "Unique ID file" +msgstr "Unik ID-fil" diff --git a/feeds/luci/applications/luci-app-ahcp/po/templates/ahcp.pot b/feeds/luci/applications/luci-app-ahcp/po/templates/ahcp.pot new file mode 100644 index 0000000..ea6bb42 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/templates/ahcp.pot @@ -0,0 +1,99 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "AHCP Server" +msgstr "" + +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" + +msgid "Active AHCP Leases" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Age" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Announced NTP servers" +msgstr "" + +msgid "Announced prefixes" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Forwarder" +msgstr "" + +msgid "General Setup" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Lease directory" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Multicast address" +msgstr "" + +msgid "Operation mode" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol family" +msgstr "" + +msgid "Served interfaces" +msgstr "" + +msgid "Server" +msgstr "" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" + +msgid "The AHCP Service is not running." +msgstr "" + +msgid "The AHCP Service is running with ID %s." +msgstr "" + +msgid "There are no active leases." +msgstr "" + +msgid "Unique ID file" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ahcp/po/tr/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/tr/ahcp.po new file mode 100644 index 0000000..ca33071 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/tr/ahcp.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-11-25 14:51+0200\n" +"Last-Translator: qbilay \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "AHCP Sunucusu" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP bir IPv6 ve IPv4/IPv6 çift ağ için otomatik yapılandırma protokolüdür. " +"Yönlendirici Bildirimleri ve DHCP sunucuları geçici olarak yerine dağıtılmış " +"ağlar için tasarlanmıştır." + +msgid "Active AHCP Leases" +msgstr "Aktif ACHP Kiralamaları" + +msgid "Address" +msgstr "Adres" + +msgid "Advanced Settings" +msgstr "Gelişmiş Ayarlar" + +msgid "Age" +msgstr "Yaş" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Announced NTP servers" +msgstr "" + +msgid "Announced prefixes" +msgstr "" + +msgid "Collecting data..." +msgstr "Veriler toplanıyor..." + +msgid "Forwarder" +msgstr "" + +msgid "General Setup" +msgstr "Genel Ayarlar" + +msgid "IPv4 and IPv6" +msgstr "IPv4 ve IPv6" + +msgid "IPv4 only" +msgstr "Sadece IPv4" + +msgid "IPv6 only" +msgstr "Sadece IPv6" + +msgid "Lease directory" +msgstr "Kiralama Dizini" + +msgid "Lease validity time" +msgstr "Kiralama Geçerlilik Süresi" + +msgid "Log file" +msgstr "Kayıt Dosyası" + +msgid "Multicast address" +msgstr "" + +msgid "Operation mode" +msgstr "Çalışma Modu" + +msgid "Port" +msgstr "Port" + +msgid "Protocol family" +msgstr "Protokol Ailesi" + +msgid "Served interfaces" +msgstr "Sunucu Arayüzleri" + +msgid "Server" +msgstr "Sunucu" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" + +msgid "The AHCP Service is not running." +msgstr " AHCP Hizmeti Çalışmıyor" + +msgid "The AHCP Service is running with ID %s." +msgstr " AHCP Hizmeti ID %ile çalışıyor" + +msgid "There are no active leases." +msgstr "Aktif Kiralama Yok" + +msgid "Unique ID file" +msgstr "Benzersiz ID Dosyası" diff --git a/feeds/luci/applications/luci-app-ahcp/po/uk/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/uk/ahcp.po new file mode 100644 index 0000000..7649019 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/uk/ahcp.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-28 21:17+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "Сервер AHCP" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP є протоколом автоматичної конфігурації мереж IPv6 та IPv6/IPv4, що " +"разраблений для використання замість DHCP. Наприклад, він використовується у " +"стільникових ad-hoc мережах." + +msgid "Active AHCP Leases" +msgstr "Активні оренди AHCP" + +msgid "Address" +msgstr "Адреса" + +msgid "Advanced Settings" +msgstr "Додаткові параметри" + +msgid "Age" +msgstr "Вік" + +msgid "Announced DNS servers" +msgstr "Оголошені DNS-сервери" + +msgid "Announced NTP servers" +msgstr "Оголошені NTP-сервери" + +msgid "Announced prefixes" +msgstr "Оголошені префікси" + +msgid "Collecting data..." +msgstr "Збирання даних..." + +msgid "Forwarder" +msgstr "Спрямовувач" + +msgid "General Setup" +msgstr "Загальні параметри" + +msgid "IPv4 and IPv6" +msgstr "IPv4 та IPv6" + +msgid "IPv4 only" +msgstr "Тільки IPv4" + +msgid "IPv6 only" +msgstr "Тільки IPv6" + +msgid "Lease directory" +msgstr "Каталог оренд" + +msgid "Lease validity time" +msgstr "Термін дії оренди" + +msgid "Log file" +msgstr "Файл журналу" + +msgid "Multicast address" +msgstr "Групова адреса" + +msgid "Operation mode" +msgstr "Режим роботи" + +msgid "Port" +msgstr "Порт" + +msgid "Protocol family" +msgstr "Протокол" + +msgid "Served interfaces" +msgstr "Інтерфейси, які обслуговуються" + +msgid "Server" +msgstr "Сервер" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Дозволяє вказати оголошувані IPv4 та IPv6 NTP-сервери" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Дозволяє вказати оголошувані IPv4 та IPv6 DNS-сервери" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "" +"Дозволяє вказати оголошувані IPv4 та IPv6 префікси мережі в нотації CIDR" + +msgid "The AHCP Service is not running." +msgstr "Сервіс AHCP не запущено" + +msgid "The AHCP Service is running with ID %s." +msgstr "Сервіс AHCP запущено з ID %s." + +msgid "There are no active leases." +msgstr "Активних оренд немає." + +msgid "Unique ID file" +msgstr "Файл унікальних ідентифікаторів" diff --git a/feeds/luci/applications/luci-app-ahcp/po/vi/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/vi/ahcp.po new file mode 100644 index 0000000..1041add --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/vi/ahcp.po @@ -0,0 +1,114 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-12-05 04:46+0200\n" +"Last-Translator: Thành \n" +"Language-Team: none\n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "AHCP Server" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP là một giao thức tự động cấu hình cho IPv6 và mạng IPv6/IPv4 dual-stack " +"thiết kế để được sử dụng trong địa điểm phát hiện router và DHCP trên mạng, " +"nơi rất khó hoặc không thể cấu hình một máy chủ trong tất cả các lĩnh vực " +"phát sóng liên kết lớp, ví dụ như mạng Ad-hoc." + +msgid "Active AHCP Leases" +msgstr "Kích hoạt thuê AHCP" + +msgid "Address" +msgstr "Địa chỉ" + +msgid "Advanced Settings" +msgstr "Thiết lập nâng cao" + +msgid "Age" +msgstr "Thời gian thuê" + +msgid "Announced DNS servers" +msgstr "Quảng bá máy chủ DNS" + +msgid "Announced NTP servers" +msgstr "Quảng bá máy chủ NTP" + +msgid "Announced prefixes" +msgstr "Quảng bá tiền tố" + +msgid "Collecting data..." +msgstr "Đang kết xuất dữ liệu..." + +msgid "Forwarder" +msgstr "Chuyển tiếp" + +msgid "General Setup" +msgstr "Thiết lập chung" + +msgid "IPv4 and IPv6" +msgstr "IPv4 và IPv6" + +msgid "IPv4 only" +msgstr "Chỉ IPv4" + +msgid "IPv6 only" +msgstr "Chỉ IPv6" + +msgid "Lease directory" +msgstr "Thư mục cho thuê" + +msgid "Lease validity time" +msgstr "Thời gian cho thuê" + +msgid "Log file" +msgstr "Tệp nhật ký" + +msgid "Multicast address" +msgstr "Đa địa chỉ" + +msgid "Operation mode" +msgstr "Chế độ hoạt động" + +msgid "Port" +msgstr "Cổng" + +msgid "Protocol family" +msgstr "Giao thức" + +msgid "Served interfaces" +msgstr "Giao diện phục vụ" + +msgid "Server" +msgstr "Máy chủ" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "Quy định cụ thể máy chủ IPv4, IPv6 và NTP" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "Quy định cụ thể tên máy chủ IPv4, IPv6 và NTP" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "Định rõ công bố IPv4 và IPv6 mạng tiền tố trong ký hiệu CIDR" + +msgid "The AHCP Service is not running." +msgstr "Dịch vụ AHCP khộng hoạt động." + +msgid "The AHCP Service is running with ID %s." +msgstr "Dịch vụ AHCP đang hoạt động với ID %s." + +msgid "There are no active leases." +msgstr "Hiện không có người thuê" + +msgid "Unique ID file" +msgstr "Tệp Unique ID" diff --git a/feeds/luci/applications/luci-app-ahcp/po/zh-cn/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/zh-cn/ahcp.po new file mode 100644 index 0000000..295bbe7 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/zh-cn/ahcp.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-09 03:31+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "AHCP 服务器" + +#, fuzzy +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" +"AHCP是一个自动配置IPv6和IPv6/IPv4双栈网络的协议,用于在网络上进行路由探测和地" +"址分配。因为在某些网络上为每个链路层广播域均配置服务器是非常困难的,例如移动" +"ad-hoc网络。" + +msgid "Active AHCP Leases" +msgstr "活动的AHCP租约" + +msgid "Address" +msgstr "地址" + +msgid "Advanced Settings" +msgstr "高级设置" + +msgid "Age" +msgstr "有效期" + +msgid "Announced DNS servers" +msgstr "公布DNS服务器" + +msgid "Announced NTP servers" +msgstr "公布NTP服务器" + +msgid "Announced prefixes" +msgstr "公布地址前缀" + +msgid "Collecting data..." +msgstr "数据收集中..." + +msgid "Forwarder" +msgstr "转发器" + +msgid "General Setup" +msgstr "通用设置" + +msgid "IPv4 and IPv6" +msgstr "IPv4和IPv6" + +msgid "IPv4 only" +msgstr "仅IPv4" + +msgid "IPv6 only" +msgstr "仅IPv6" + +msgid "Lease directory" +msgstr "租赁目录" + +msgid "Lease validity time" +msgstr "租约有效期" + +msgid "Log file" +msgstr "日志文件" + +msgid "Multicast address" +msgstr "多播地址" + +msgid "Operation mode" +msgstr "工作模式" + +msgid "Port" +msgstr "端口" + +msgid "Protocol family" +msgstr "协议簇" + +msgid "Served interfaces" +msgstr "服务接口" + +msgid "Server" +msgstr "服务器" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "指定IPv4与IPv6 时间服务器" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "指定IPv4与IPv6 域名服务器" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "指定IPv4与IPv6网络地址前缀(CIDR表示法)" + +msgid "The AHCP Service is not running." +msgstr "AHCP服务没有运行。" + +msgid "The AHCP Service is running with ID %s." +msgstr "AHCP服务程序进程ID %s" + +msgid "There are no active leases." +msgstr "没有活跃租约。" + +msgid "Unique ID file" +msgstr "UID文件" diff --git a/feeds/luci/applications/luci-app-ahcp/po/zh-tw/ahcp.po b/feeds/luci/applications/luci-app-ahcp/po/zh-tw/ahcp.po new file mode 100644 index 0000000..dc7f6c5 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/po/zh-tw/ahcp.po @@ -0,0 +1,109 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-10 12:30+0200\n" +"Last-Translator: mp607 \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "AHCP Server" +msgstr "AHCP伺服器" + +msgid "" +"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 " +"networks designed to be used in place of router discovery or DHCP on " +"networks where it is difficult or impossible to configure a server within " +"every link-layer broadcast domain, for example mobile ad-hoc networks." +msgstr "" + +msgid "Active AHCP Leases" +msgstr "" + +msgid "Address" +msgstr "位置" + +msgid "Advanced Settings" +msgstr "進階設定" + +msgid "Age" +msgstr "" + +msgid "Announced DNS servers" +msgstr "匿名的DNS伺服器" + +msgid "Announced NTP servers" +msgstr "匿名的NTP伺服器" + +msgid "Announced prefixes" +msgstr "匿名的前綴" + +msgid "Collecting data..." +msgstr "收集資料" + +msgid "Forwarder" +msgstr "" + +msgid "General Setup" +msgstr "一般設定" + +msgid "IPv4 and IPv6" +msgstr "IPv4 和 IPv6" + +msgid "IPv4 only" +msgstr "只有IPv4" + +msgid "IPv6 only" +msgstr "只有IPv6" + +msgid "Lease directory" +msgstr "租用目錄" + +msgid "Lease validity time" +msgstr "租用有效時間" + +msgid "Log file" +msgstr "記錄檔" + +msgid "Multicast address" +msgstr "多點廣播位置" + +msgid "Operation mode" +msgstr "操作模式" + +msgid "Port" +msgstr "通訊埠" + +msgid "Protocol family" +msgstr "協定群組" + +msgid "Served interfaces" +msgstr "提供服務的界面" + +msgid "Server" +msgstr "伺服器" + +msgid "Specifies the announced IPv4 and IPv6 NTP servers" +msgstr "特別的匿名IPv4 與 IPv6 NTP 伺服器" + +msgid "Specifies the announced IPv4 and IPv6 name servers" +msgstr "特別的匿名IPv4 與 IPv6 名稱伺服器" + +msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation" +msgstr "特別的匿名IPv4 與 IPv6 網路CIDR前綴" + +msgid "The AHCP Service is not running." +msgstr "AHCP服務沒有運作" + +msgid "The AHCP Service is running with ID %s." +msgstr "AHCP服務運作中 ID為 %s" + +msgid "There are no active leases." +msgstr "沒有使用中的租用" + +msgid "Unique ID file" +msgstr "獨立的ID檔案" diff --git a/feeds/luci/applications/luci-app-ahcp/root/etc/uci-defaults/40_luci-ahcp b/feeds/luci/applications/luci-app-ahcp/root/etc/uci-defaults/40_luci-ahcp new file mode 100755 index 0000000..f2b2487 --- /dev/null +++ b/feeds/luci/applications/luci-app-ahcp/root/etc/uci-defaults/40_luci-ahcp @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@ahcpd[-1] + add ucitrack ahcpd + set ucitrack.@ahcpd[-1].init=ahcpd + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-aria2/Makefile b/feeds/luci/applications/luci-app-aria2/Makefile new file mode 100644 index 0000000..f5b006c --- /dev/null +++ b/feeds/luci/applications/luci-app-aria2/Makefile @@ -0,0 +1,39 @@ +# +# Copyright (C) 2016 Openwrt.org +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-aria2 + +# Version == major.minor.patch +# increase "minor" on new functionality and "patch" on patches/optimization +PKG_VERSION:=1.0.1 + +# Release == build +# increase on changes of translation files +PKG_RELEASE:=2 + +PKG_LICENSE:=Apache-2.0 +PKG_MAINTAINER:=Hsing-Wang Liao + +# LuCI specific settings +LUCI_TITLE:=LuCI Support for Aria2 +LUCI_DEPENDS:=+aria2 +LUCI_PKGARCH:=all + +define Package/$(PKG_NAME)/config +# shown in make menuconfig +help + $(LUCI_TITLE) + . + Version: $(PKG_VERSION)-$(PKG_RELEASE) + $(PKG_MAINTAINER) +endef + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/feeds/luci/applications/luci-app-aria2/luasrc/controller/aria2.lua b/feeds/luci/applications/luci-app-aria2/luasrc/controller/aria2.lua new file mode 100644 index 0000000..1728930 --- /dev/null +++ b/feeds/luci/applications/luci-app-aria2/luasrc/controller/aria2.lua @@ -0,0 +1,42 @@ +--[[ +LuCI - Lua Configuration Interface - aria2 support + +Copyright 2014-2015 nanpuyue +Modified by kuoruan + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 +]]-- + +module("luci.controller.aria2", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/aria2") then + return + end + + local page = entry({"admin", "services", "aria2"}, cbi("aria2"), _("Aria2 Settings")) + page.dependent = true + + entry({"admin", "services", "aria2", "status"}, call("status")).leaf = true + +end + +function status() + local sys = require "luci.sys" + local ipkg = require "luci.model.ipkg" + local http = require "luci.http" + local uci = require "luci.model.uci".cursor() + + local status = { + running = (sys.call("pidof aria2c > /dev/null") == 0), + yaaw = ipkg.installed("yaaw"), + webui = ipkg.installed("webui-aria2") + } + + http.prepare_content("application/json") + http.write_json(status) +end diff --git a/feeds/luci/applications/luci-app-aria2/luasrc/model/cbi/aria2.lua b/feeds/luci/applications/luci-app-aria2/luasrc/model/cbi/aria2.lua new file mode 100644 index 0000000..3b61f95 --- /dev/null +++ b/feeds/luci/applications/luci-app-aria2/luasrc/model/cbi/aria2.lua @@ -0,0 +1,211 @@ +--[[ +LuCI - Lua Configuration Interface - Aria2 support + +Copyright 2014-2016 nanpuyue +Modified by maz-1 +Modified by kuoruan + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 +]]-- + +local sys = require "luci.sys" +local util = require "luci.util" +local uci = require "luci.model.uci".cursor() + +local cfgbtn = "" +local sessionbtn = "" +local aria2rpctxt = "" +local use_websocket = "" + +function ipkg_ver(pkg) + local version = nil + local control = io.open("/usr/lib/opkg/info/%s.control" % pkg, "r") + if control then + local ln + repeat + ln = control:read("*l") + if ln and ln:match("^Version: ") then + version = ln:gsub("^Version: ", ""):gsub("-%d", "") + break + end + until not ln + control:close() + end + return version +end + +function ipkg_ver_lined(pkg) + return ipkg_ver(pkg):gsub("%.", "-") +end + +m = Map("aria2", translate("Aria2"), translate("Aria2 is a multi-protocol & multi-source download utility, here you can configure the settings.")) + +m:section(SimpleSection).template = "aria2/overview_status" + +s = m:section(TypedSection, "aria2", translate("Aria2 Settings")) +s.addremove = false +s.anonymous = true + +s:tab("general", translate("General Settings")) +s:tab("file", translate("Files and Locations")) +s:tab("task", translate("Task Settings")) +s:tab("bittorrent", translate("BitTorrent Settings")) + +o = s:taboption("general", Flag, "enabled", translate("Enabled")) +o.rmempty = false + +user = s:taboption("general", ListValue, "user", translate("Run daemon as user")) +local p_user +for _, p_user in util.vspairs(util.split(sys.exec("cat /etc/passwd | cut -f 1 -d :"))) do + user:value(p_user) +end + +o = s:taboption("general", Value, "rpc_listen_port", translate("RPC port")) +o.datatype = "port" +o.placeholder = "6800" + +rpc_auth_method = s:taboption("general", ListValue, "rpc_auth_method", translate("RPC authentication method")) +rpc_auth_method:value("none", translate("No Authentication")) +rpc_auth_method:value("user_pass", translate("Username & Password")) +rpc_auth_method:value("token", translate("Token")) + +o = s:taboption("general", Value, "rpc_user", translate("RPC username")) +o:depends("rpc_auth_method", "user_pass") +o.rmempty = false + +o = s:taboption("general", Value, "rpc_passwd", translate("RPC password")) +o:depends("rpc_auth_method", "user_pass") +o.password = true +o.rmempty = true + +o = s:taboption("general", Value, "rpc_secret", translate("RPC Token"), "
" .. cfgbtn) +o:depends("rpc_auth_method", "token") +o.rmempty = true + +o = s:taboption("file", Value, "config_dir", translate("Config file directory")) +o.placeholder = "/var/etc/aria2" + +o = s:taboption("file", Flag, "enable_log", translate("Enable log"), translate("Log file is in the config file dir.")) +o.enabled = "true" +o.disabled = "false" + +o = s:taboption("file", ListValue, "log_level", translate("Log level")) +o:depends("enable_log", "true") +o:value("debug", translate("Debug")) +o:value("info", translate("Info")) +o:value("notice", translate("Notice")) +o:value("warn", translate("Warn")) +o:value("error", translate("Error")) + +o = s:taboption("file", Value, "dir", translate("Default download directory")) +o.rmempty = false + +o = s:taboption("file", Value, "disk_cache", translate("Disk cache"), translate("in bytes, You can append K or M.")) +o.rmempty = true + +o = s:taboption("file", ListValue, "file_allocation", translate("Preallocation"), translate("\"Falloc\" is not available in all cases.")) +o:value("none", translate("Off")) +o:value("prealloc", translate("Prealloc")) +o:value("trunc", translate("Trunc")) +o:value("falloc", translate("Falloc")) + +overall_speed_limit = s:taboption("task", Flag, "overall_speed_limit", translate("Overall speed limit enabled")) +overall_speed_limit.rmempty = true + +o = s:taboption("task", Value, "max_overall_download_limit", translate("Overall download limit"), translate("in bytes/sec, You can append K or M.")) +o:depends("overall_speed_limit", "1") + +o = s:taboption("task", Value, "max_overall_upload_limit", translate("Overall upload limit"), translate("in bytes/sec, You can append K or M.")) +o:depends("overall_speed_limit", "1") + +task_speed_limit = s:taboption("task", Flag, "task_speed_limit", translate("Per task speed limit enabled")) +task_speed_limit.rmempty = true + +o = s:taboption("task", Value, "max_download_limit", translate("Per task download limit"), translate("in bytes/sec, You can append K or M.")) +o:depends("task_speed_limit", "1") + +o = s:taboption("task", Value, "max_upload_limit", translate("Per task upload limit"), translate("in bytes/sec, You can append K or M.")) +o:depends("task_speed_limit", "1") + +o = s:taboption("task", Value, "max_concurrent_downloads", translate("Max concurrent downloads")) +o.placeholder = "5" + +o = s:taboption("task", Value, "max_connection_per_server", translate("Max connection per server"), "1-16") +o.datetype = "range(1, 16)" +o.placeholder = "1" + +o = s:taboption("task", Value, "min_split_size", translate("Min split size"), "1M-1024M") +o.placeholder = "20M" + +o = s:taboption("task", Value, "split", translate("Max number of split")) +o.placeholder = "5" + +o = s:taboption("task", Value, "save_session_interval", translate("Autosave session interval"), translate("Sec")) +o.default = "30" + +o = s:taboption("task", Value, "user_agent", translate("User agent value")) +o.placeholder = "aria2/" .. ipkg_ver("aria2") + +o = s:taboption("bittorrent", Flag, "enable_dht", translate("DHT enabled")) +o.enabled = "true" +o.disabled = "false" + +o = s:taboption("bittorrent", Flag, "bt_enable_lpd", translate("LPD enabled")) +o.enabled = "true" +o.disabled = "false" + +o = s:taboption("bittorrent", Flag, "follow_torrent", translate("Follow torrent")) +o.enabled = "true" +o.disabled = "false" + +o = s:taboption("bittorrent", Value, "listen_port", translate("BitTorrent listen port")) +o.placeholder = "6881-6999" + +o = s:taboption("bittorrent", Value, "bt_max_peers", translate("Max number of peers per torrent")) +o.placeholder = "55" + +bt_tracker_enable = s:taboption("bittorrent", Flag, "bt_tracker_enable", translate("Additional Bt tracker enabled")) +bt_tracker = s:taboption("bittorrent", DynamicList, "bt_tracker", translate("List of additional Bt tracker")) +bt_tracker:depends("bt_tracker_enable", "1") +bt_tracker.rmempty = true + +function bt_tracker.cfgvalue(self, section) + local rv = {} + local val = Value.cfgvalue(self, section) + if type(val) == "table" then + val = table.concat(val, ",") + elseif not val then + val = "" + end + for v in val:gmatch("[^,%s]+") do + rv[#rv+1] = v + end + return rv +end + +function bt_tracker.write(self, section, value) + local rv = {} + for v in util.imatch(value) do + rv[#rv+1] = v + end + Value.write(self, section, table.concat(rv, ",")) +end + +o = s:taboption("bittorrent", Value, "peer_id_prefix", translate("Prefix of peer ID")) +o.placeholder = "A2-" .. ipkg_ver_lined("aria2") .. "-" + +s = m:section(TypedSection, "aria2", translate("Extra Settings")) +s.addremove = false +s.anonymous = true + +o = s:option(DynamicList, "extra_settings", translate("List of extra settings")) +o.placeholder = "option=value" +o.rmempty = true + +m:section(SimpleSection, nil, sessionbtn .. use_websocket .. aria2rpctxt) + +return m diff --git a/feeds/luci/applications/luci-app-aria2/luasrc/view/aria2/overview_status.htm b/feeds/luci/applications/luci-app-aria2/luasrc/view/aria2/overview_status.htm new file mode 100644 index 0000000..b14cca2 --- /dev/null +++ b/feeds/luci/applications/luci-app-aria2/luasrc/view/aria2/overview_status.htm @@ -0,0 +1,77 @@ + + +
+ <%:Aria2 Status%> +

+ <%:Collecting data...%> +

+
diff --git a/feeds/luci/applications/luci-app-aria2/po/templates/aria2.pot b/feeds/luci/applications/luci-app-aria2/po/templates/aria2.pot new file mode 100644 index 0000000..357c0ae --- /dev/null +++ b/feeds/luci/applications/luci-app-aria2/po/templates/aria2.pot @@ -0,0 +1,208 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "\"Falloc\" is not available in all cases." +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Additional Bt tracker enabled" +msgstr "" + +msgid "Aria2" +msgstr "" + +msgid "Aria2 Settings" +msgstr "" + +msgid "Aria2 Status" +msgstr "" + +msgid "" +"Aria2 is a multi-protocol & multi-source download utility, here you can " +"configure the settings." +msgstr "" + +msgid "Autosave session interval" +msgstr "" + +msgid "BitTorrent Settings" +msgstr "" + +msgid "BitTorrent listen port" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Default download directory" +msgstr "" + +msgid "Disk cache" +msgstr "" + +msgid "Enable log" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Extra Settings" +msgstr "" + +msgid "Falloc" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Follow torrent" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Generate Randomly" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "List of additional Bt tracker" +msgstr "" + +msgid "List of extra settings" +msgstr "" + +msgid "Log file is in the config file dir." +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Max concurrent downloads" +msgstr "" + +msgid "Max connection per server" +msgstr "" + +msgid "Max number of peers per torrent" +msgstr "" + +msgid "Max number of split" +msgstr "" + +msgid "Min split size" +msgstr "" + +msgid "No Authentication" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open WebUI-Aria2" +msgstr "" + +msgid "Open YAAW" +msgstr "" + +msgid "Overall download limit" +msgstr "" + +msgid "Overall speed limit enabled" +msgstr "" + +msgid "Overall upload limit" +msgstr "" + +msgid "Per task download limit" +msgstr "" + +msgid "Per task speed limit enabled" +msgstr "" + +msgid "Per task upload limit" +msgstr "" + +msgid "Prealloc" +msgstr "" + +msgid "Preallocation" +msgstr "" + +msgid "Prefix of peer ID" +msgstr "" + +msgid "RPC Token" +msgstr "" + +msgid "RPC authentication method" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Sec" +msgstr "" + +msgid "Task Settings" +msgstr "" + +msgid "The Aria2 service is not running." +msgstr "" + +msgid "The Aria2 service is running." +msgstr "" + +msgid "Token" +msgstr "" + +msgid "Trunc" +msgstr "" + +msgid "Use WebSocket" +msgstr "" + +msgid "User agent value" +msgstr "" + +msgid "Username & Password" +msgstr "" + +msgid "View Json-RPC URL" +msgstr "" + +msgid "Warn" +msgstr "" + +msgid "in bytes, You can append K or M." +msgstr "" + +msgid "in bytes/sec, You can append K or M." +msgstr "" diff --git a/feeds/luci/applications/luci-app-aria2/po/zh-cn/aria2.po b/feeds/luci/applications/luci-app-aria2/po/zh-cn/aria2.po new file mode 100644 index 0000000..823699d --- /dev/null +++ b/feeds/luci/applications/luci-app-aria2/po/zh-cn/aria2.po @@ -0,0 +1,200 @@ +msgid "Aria2" +msgstr "" + +msgid "Aria2 is a multi-protocol & multi-source download utility, here you can configure the settings." +msgstr "Aria2 是一个支持多协议多线程的下载器, 你可以在这里对其进行配置" + +msgid "Aria2 Status" +msgstr "Aria2 状态" + +msgid "Open YAAW" +msgstr "打开YAAW" + +msgid "Open WebUI-Aria2" +msgstr "打开WebUI-Aria2" + +msgid "The Aria2 service is running." +msgstr "Aria2 正在运行" + +msgid "The Aria2 service is not running." +msgstr "Aria2 未运行" + +msgid "Aria2 Settings" +msgstr "Aria2 配置" + +msgid "General settings" +msgstr "一般设置" + +msgid "Files and Locations" +msgstr "文件和目录" + +msgid "Enabled" +msgstr "启用" + +msgid "Task Settings" +msgstr "任务设置" + +msgid "BitTorrent Settings" +msgstr "BT设置" + +msgid "Run daemon as user" +msgstr "以此用户权限运行" + +msgid "RPC port" +msgstr "RPC端口" + +msgid "RPC authentication method" +msgstr "RPC认证方式" + +msgid "No Authentication" +msgstr "无认证" + +msgid "Username & Password" +msgstr "用户名与密码" + +msgid "Token" +msgstr "令牌" + +msgid "RPC username" +msgstr "RPC用户名" + +msgid "RPC password" +msgstr "RPC密码" + +msgid "RPC Token" +msgstr "RPC令牌" + +msgid "Generate Randomly" +msgstr "随机生成" + +msgid "Enable log" +msgstr "启用日志" + +msgid "Log file is in the config file dir." +msgstr "日志文件在配置文件目录下" + +msgid "Log level" +msgstr "日志记录等级" + +msgid "Debug" +msgstr "调试" + +msgid "Info" +msgstr "信息" + +msgid "Notice" +msgstr "注意" + +msgid "Warn" +msgstr "警告" + +msgid "Error" +msgstr "错误" + +msgid "Config file directory" +msgstr "配置文件目录" + +msgid "Default download directory" +msgstr "默认下载目录" + +msgid "Disk cache" +msgstr "磁盘缓存" + +msgid "in bytes, You can append K or M." +msgstr "单位 B, 你可以在数字后跟上 K 或 M" + +msgid "Preallocation" +msgstr "磁盘预分配" + +msgid "Off" +msgstr "关闭" + +msgid "Prealloc" +msgstr "" + +msgid "Trunc" +msgstr "" + +msgid "Falloc" +msgstr "" + +msgid "\"Falloc\" is not available in all cases." +msgstr "\"Falloc\" 并不是在所有情况下都可用" + +msgid "Overall speed limit enabled" +msgstr "启用全局限速" + +msgid "Overall download limit" +msgstr "全局下载限速" + +msgid "in bytes/sec, You can append K or M." +msgstr "单位 B/s, 你可以在数字后跟上 K 或 M" + +msgid "Overall upload limit" +msgstr "全局上传限速" + +msgid "Per task speed limit enabled" +msgstr "启用单任务限速" + +msgid "Per task download limit" +msgstr "单任务下载限速" + +msgid "Per task upload limit" +msgstr "单任务上传限速" + +msgid "Max concurrent downloads" +msgstr "最大同时下载任务数" + +msgid "Max connection per server" +msgstr "单服务器最大连接数" + +msgid "Min split size" +msgstr "最小文件分片大小" + +msgid "Max number of split" +msgstr "单文件最大线程数" + +msgid "Autosave session interval" +msgstr "定时保存会话间隔" + +msgid "Sec" +msgstr "秒" + +msgid "User agent value" +msgstr "用户代理(UA)" + +msgid "DHT enabled" +msgstr "启用DHT" + +msgid "LPD enabled" +msgstr "启用LPD" + +msgid "Follow torrent" +msgstr "自动添加下载的种子" + +msgid "BitTorrent listen port" +msgstr "BT监听端口" + +msgid "Max number of peers per torrent" +msgstr "单个种子最大连接数" + +msgid "Additional Bt tracker enabled" +msgstr "添加额外的Tracker" + +msgid "List of additional Bt tracker" +msgstr "附加Tracker列表" + +msgid "Prefix of peer ID" +msgstr "Peer ID前缀" + +msgid "Extra Settings" +msgstr "附加选项" + +msgid "List of extra settings" +msgstr "附加选项列表" + +msgid "View Json-RPC URL" +msgstr "查看 Json-RPC URL" + +msgid "Use WebSocket" +msgstr "使用WebSocket" diff --git a/feeds/luci/applications/luci-app-aria2/root/etc/uci-defaults/40_luci-aria2 b/feeds/luci/applications/luci-app-aria2/root/etc/uci-defaults/40_luci-aria2 new file mode 100755 index 0000000..3a9ba5b --- /dev/null +++ b/feeds/luci/applications/luci-app-aria2/root/etc/uci-defaults/40_luci-aria2 @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@aria2[-1] + add ucitrack aria2 + set ucitrack.@aria2[-1].init=aria2 + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-asterisk/Makefile b/feeds/luci/applications/luci-app-asterisk/Makefile new file mode 100644 index 0000000..3434e16 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/Makefile @@ -0,0 +1,13 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for Asterisk + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/asterisk.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/asterisk.lua new file mode 100644 index 0000000..ceb738d --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/asterisk.lua @@ -0,0 +1,746 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.asterisk", package.seeall) +require("luci.asterisk.cc_idd") + +local _io = require("io") +local uci = require("luci.model.uci").cursor() +local sys = require("luci.sys") +local util = require("luci.util") + +AST_BIN = "/usr/sbin/asterisk" +AST_FLAGS = "-r -x" + + +--- LuCI Asterisk - Resync uci context +function uci_resync() + uci = luci.model.uci.cursor() +end + +--- LuCI Asterisk io interface +-- Handles low level io. +-- @type module +io = luci.util.class() + +--- Execute command and return output +-- @param command String containing the command to execute +-- @return String containing the command output +function io.exec(command) + local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" ) + assert(fh, "Failed to invoke asterisk") + + local buffer = fh:read("*a") + fh:close() + return buffer +end + +--- Execute command and invoke given callback for each readed line +-- @param command String containing the command to execute +-- @param callback Function to call back for each line +-- @return Always true +function io.execl(command, callback) + local ln + local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" ) + assert(fh, "Failed to invoke asterisk") + + repeat + ln = fh:read("*l") + callback(ln) + until not ln + + fh:close() + return true +end + +--- Execute command and return an iterator that returns one line per invokation +-- @param command String containing the command to execute +-- @return Iterator function +function io.execi(command) + local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" ) + assert(fh, "Failed to invoke asterisk") + + return function() + local ln = fh:read("*l") + if not ln then fh:close() end + return ln + end +end + + +--- LuCI Asterisk - core status +core = luci.util.class() + +--- Retrive version string. +-- @return String containing the reported asterisk version +function core.version(self) + local version = io.exec("core show version") + return version:gsub(" *\n", "") +end + + +--- LuCI Asterisk - SIP information. +-- @type module +sip = luci.util.class() + +--- Get a list of known SIP peers +-- @return Table containing each SIP peer +function sip.peers(self) + local head = false + local peers = { } + + for line in io.execi("sip show peers") do + if not head then + head = true + elseif not line:match(" sip peers ") then + local online, delay, id, uid + local name, host, dyn, nat, acl, port, status = + line:match("(.-) +(.-) +([D ]) ([N ]) (.) (%d+) +(.+)") + + if host == '(Unspecified)' then host = nil end + if port == '0' then port = nil else port = tonumber(port) end + + dyn = ( dyn == 'D' and true or false ) + nat = ( nat == 'N' and true or false ) + acl = ( acl ~= ' ' and true or false ) + + online, delay = status:match("(OK) %((%d+) ms%)") + + if online == 'OK' then + online = true + delay = tonumber(delay) + elseif status ~= 'Unmonitored' then + online = false + delay = 0 + else + online = nil + delay = 0 + end + + id, uid = name:match("(.+)/(.+)") + + if not ( id and uid ) then + id = name .. "..." + uid = nil + end + + peers[#peers+1] = { + online = online, + delay = delay, + name = id, + user = uid, + dynamic = dyn, + nat = nat, + acl = acl, + host = host, + port = port + } + end + end + + return peers +end + +--- Get informations of given SIP peer +-- @param peer String containing the name of the SIP peer +function sip.peer(peer) + local info = { } + local keys = { } + + for line in io.execi("sip show peer " .. peer) do + if #line > 0 then + local key, val = line:match("(.-) *: +(.*)") + if key and val then + + key = key:gsub("^ +",""):gsub(" +$", "") + val = val:gsub("^ +",""):gsub(" +$", "") + + if key == "* Name" then + key = "Name" + elseif key == "Addr->IP" then + info.address, info.port = val:match("(.+) Port (.+)") + info.port = tonumber(info.port) + elseif key == "Status" then + info.online, info.delay = val:match("(OK) %((%d+) ms%)") + if info.online == 'OK' then + info.online = true + info.delay = tonumber(info.delay) + elseif status ~= 'Unmonitored' then + info.online = false + info.delay = 0 + else + info.online = nil + info.delay = 0 + end + end + + if val == 'Yes' or val == 'yes' or val == '' then + val = true + elseif val == 'No' or val == 'no' then + val = false + elseif val == '' or val == '(none)' then + val = nil + end + + keys[#keys+1] = key + info[key] = val + end + end + end + + return info, keys +end + + +--- LuCI Asterisk - Internal helpers +-- @type module +tools = luci.util.class() + +--- Convert given value to a list of tokens. Split by white space. +-- @param val String or table value +-- @return Table containing tokens +function tools.parse_list(v) + local tokens = { } + + v = type(v) == "table" and v or { v } + for _, v in ipairs(v) do + if type(v) == "string" then + for v in v:gmatch("(%S+)") do + tokens[#tokens+1] = v + end + end + end + + return tokens +end + +--- Convert given list to a collection of hyperlinks +-- @param list Table of tokens +-- @param url String pattern or callback function to construct urls (optional) +-- @param sep String containing the seperator (optional, default is ", ") +-- @return String containing the html fragment +function tools.hyperlinks(list, url, sep) + local html + + local function mkurl(p, t) + if type(p) == "string" then + return p:format(t) + elseif type(p) == "function" then + return p(t) + else + return '#' + end + end + + list = list or { } + url = url or "%s" + sep = sep or ", " + + for _, token in ipairs(list) do + html = ( html and html .. sep or '' ) .. + '%s' %{ mkurl(url, token), token } + end + + return html or '' +end + + +--- LuCI Asterisk - International Direct Dialing Prefixes +-- @type module +idd = luci.util.class() + +--- Lookup the country name for the given IDD code. +-- @param country String containing IDD code +-- @return String containing the country name +function idd.country(c) + for _, v in ipairs(cc_idd.CC_IDD) do + if type(v[3]) == "table" then + for _, v2 in ipairs(v[3]) do + if v2 == tostring(c) then + return v[1] + end + end + elseif v[3] == tostring(c) then + return v[1] + end + end +end + +--- Lookup the country code for the given IDD code. +-- @param country String containing IDD code +-- @return Table containing the country code(s) +function idd.cc(c) + for _, v in ipairs(cc_idd.CC_IDD) do + if type(v[3]) == "table" then + for _, v2 in ipairs(v[3]) do + if v2 == tostring(c) then + return type(v[2]) == "table" + and v[2] or { v[2] } + end + end + elseif v[3] == tostring(c) then + return type(v[2]) == "table" + and v[2] or { v[2] } + end + end +end + +--- Lookup the IDD code(s) for the given country. +-- @param idd String containing the country name +-- @return Table containing the IDD code(s) +function idd.idd(c) + for _, v in ipairs(cc_idd.CC_IDD) do + if v[1]:lower():match(c:lower()) then + return type(v[3]) == "table" + and v[3] or { v[3] } + end + end +end + +--- Populate given CBI field with IDD codes. +-- @param field CBI option object +-- @return (nothing) +function idd.cbifill(o) + for i, v in ipairs(cc_idd.CC_IDD) do + o:value("_%i" % i, util.pcdata(v[1])) + end + + o.formvalue = function(...) + local val = luci.cbi.Value.formvalue(...) + if val:sub(1,1) == "_" then + val = tonumber((val:gsub("^_", ""))) + if val then + return type(cc_idd.CC_IDD[val][3]) == "table" + and cc_idd.CC_IDD[val][3] or { cc_idd.CC_IDD[val][3] } + end + end + return val + end + + o.cfgvalue = function(...) + local val = luci.cbi.Value.cfgvalue(...) + if val then + val = tools.parse_list(val) + for i, v in ipairs(cc_idd.CC_IDD) do + if type(v[3]) == "table" then + if v[3][1] == val[1] then + return "_%i" % i + end + else + if v[3] == val[1] then + return "_%i" % i + end + end + end + end + return val + end +end + + +--- LuCI Asterisk - Country Code Prefixes +-- @type module +cc = luci.util.class() + +--- Lookup the country name for the given CC code. +-- @param country String containing CC code +-- @return String containing the country name +function cc.country(c) + for _, v in ipairs(cc_idd.CC_IDD) do + if type(v[2]) == "table" then + for _, v2 in ipairs(v[2]) do + if v2 == tostring(c) then + return v[1] + end + end + elseif v[2] == tostring(c) then + return v[1] + end + end +end + +--- Lookup the international dialing code for the given CC code. +-- @param cc String containing CC code +-- @return String containing IDD code +function cc.idd(c) + for _, v in ipairs(cc_idd.CC_IDD) do + if type(v[2]) == "table" then + for _, v2 in ipairs(v[2]) do + if v2 == tostring(c) then + return type(v[3]) == "table" + and v[3] or { v[3] } + end + end + elseif v[2] == tostring(c) then + return type(v[3]) == "table" + and v[3] or { v[3] } + end + end +end + +--- Lookup the CC code(s) for the given country. +-- @param country String containing the country name +-- @return Table containing the CC code(s) +function cc.cc(c) + for _, v in ipairs(cc_idd.CC_IDD) do + if v[1]:lower():match(c:lower()) then + return type(v[2]) == "table" + and v[2] or { v[2] } + end + end +end + +--- Populate given CBI field with CC codes. +-- @param field CBI option object +-- @return (nothing) +function cc.cbifill(o) + for i, v in ipairs(cc_idd.CC_IDD) do + o:value("_%i" % i, util.pcdata(v[1])) + end + + o.formvalue = function(...) + local val = luci.cbi.Value.formvalue(...) + if val:sub(1,1) == "_" then + val = tonumber((val:gsub("^_", ""))) + if val then + return type(cc_idd.CC_IDD[val][2]) == "table" + and cc_idd.CC_IDD[val][2] or { cc_idd.CC_IDD[val][2] } + end + end + return val + end + + o.cfgvalue = function(...) + local val = luci.cbi.Value.cfgvalue(...) + if val then + val = tools.parse_list(val) + for i, v in ipairs(cc_idd.CC_IDD) do + if type(v[2]) == "table" then + if v[2][1] == val[1] then + return "_%i" % i + end + else + if v[2] == val[1] then + return "_%i" % i + end + end + end + end + return val + end +end + + +--- LuCI Asterisk - Dialzone +-- @type module +dialzone = luci.util.class() + +--- Parse a dialzone section +-- @param zone Table containing the zone info +-- @return Table with parsed information +function dialzone.parse(z) + if z['.name'] then + return { + trunks = tools.parse_list(z.uses), + name = z['.name'], + description = z.description or z['.name'], + addprefix = z.addprefix, + matches = tools.parse_list(z.match), + intlmatches = tools.parse_list(z.international), + countrycode = z.countrycode, + localzone = z.localzone, + localprefix = z.localprefix + } + end +end + +--- Get a list of known dial zones +-- @return Associative table of zones and table of zone names +function dialzone.zones() + local zones = { } + local znames = { } + uci:foreach("asterisk", "dialzone", + function(z) + zones[z['.name']] = dialzone.parse(z) + znames[#znames+1] = z['.name'] + end) + return zones, znames +end + +--- Get a specific dial zone +-- @param name Name of the dial zone +-- @return Table containing zone information +function dialzone.zone(n) + local zone + uci:foreach("asterisk", "dialzone", + function(z) + if z['.name'] == n then + zone = dialzone.parse(z) + end + end) + return zone +end + +--- Find uci section hash for given zone number +-- @param idx Zone number +-- @return String containing the uci hash pointing to the section +function dialzone.ucisection(i) + local hash + local index = 1 + i = tonumber(i) + uci:foreach("asterisk", "dialzone", + function(z) + if not hash and index == i then + hash = z['.name'] + end + index = index + 1 + end) + return hash +end + + +--- LuCI Asterisk - Voicemailbox +-- @type module +voicemail = luci.util.class() + +--- Parse a voicemail section +-- @param zone Table containing the mailbox info +-- @return Table with parsed information +function voicemail.parse(z) + if z.number and #z.number > 0 then + local v = { + id = '%s@%s' %{ z.number, z.context or 'default' }, + number = z.number, + context = z.context or 'default', + name = z.name or z['.name'] or 'OpenWrt', + zone = z.zone or 'homeloc', + password = z.password or '0000', + email = z.email or '', + page = z.page or '', + dialplans = { } + } + + uci:foreach("asterisk", "dialplanvoice", + function(s) + if s.dialplan and #s.dialplan > 0 and + s.voicebox == v.number + then + v.dialplans[#v.dialplans+1] = s.dialplan + end + end) + + return v + end +end + +--- Get a list of known voicemail boxes +-- @return Associative table of boxes and table of box numbers +function voicemail.boxes() + local vboxes = { } + local vnames = { } + uci:foreach("asterisk", "voicemail", + function(z) + local v = voicemail.parse(z) + if v then + local n = '%s@%s' %{ v.number, v.context } + vboxes[n] = v + vnames[#vnames+1] = n + end + end) + return vboxes, vnames +end + +--- Get a specific voicemailbox +-- @param number Number of the voicemailbox +-- @return Table containing mailbox information +function voicemail.box(n) + local box + n = n:gsub("@.+$","") + uci:foreach("asterisk", "voicemail", + function(z) + if z.number == tostring(n) then + box = voicemail.parse(z) + end + end) + return box +end + +--- Find all voicemailboxes within the given dialplan +-- @param plan Dialplan name or table +-- @return Associative table containing extensions mapped to mailbox info +function voicemail.in_dialplan(p) + local plan = type(p) == "string" and p or p.name + local boxes = { } + uci:foreach("asterisk", "dialplanvoice", + function(s) + if s.extension and #s.extension > 0 and s.dialplan == plan then + local box = voicemail.box(s.voicebox) + if box then + boxes[s.extension] = box + end + end + end) + return boxes +end + +--- Remove voicemailbox and associated extensions from config +-- @param box Voicemailbox number or table +-- @param ctx UCI context to use (optional) +-- @return Boolean indicating success +function voicemail.remove(v, ctx) + ctx = ctx or uci + local box = type(v) == "string" and v or v.number + local ok1 = ctx:delete_all("asterisk", "voicemail", {number=box}) + local ok2 = ctx:delete_all("asterisk", "dialplanvoice", {voicebox=box}) + return ( ok1 or ok2 ) and true or false +end + + +--- LuCI Asterisk - MeetMe Conferences +-- @type module +meetme = luci.util.class() + +--- Parse a meetme section +-- @param room Table containing the room info +-- @return Table with parsed information +function meetme.parse(r) + if r.room and #r.room > 0 then + local v = { + room = r.room, + pin = r.pin or '', + adminpin = r.adminpin or '', + description = r._description or '', + dialplans = { } + } + + uci:foreach("asterisk", "dialplanmeetme", + function(s) + if s.dialplan and #s.dialplan > 0 and s.room == v.room then + v.dialplans[#v.dialplans+1] = s.dialplan + end + end) + + return v + end +end + +--- Get a list of known meetme rooms +-- @return Associative table of rooms and table of room numbers +function meetme.rooms() + local mrooms = { } + local mnames = { } + uci:foreach("asterisk", "meetme", + function(r) + local v = meetme.parse(r) + if v then + mrooms[v.room] = v + mnames[#mnames+1] = v.room + end + end) + return mrooms, mnames +end + +--- Get a specific meetme room +-- @param number Number of the room +-- @return Table containing room information +function meetme.room(n) + local room + uci:foreach("asterisk", "meetme", + function(r) + if r.room == tostring(n) then + room = meetme.parse(r) + end + end) + return room +end + +--- Find all meetme rooms within the given dialplan +-- @param plan Dialplan name or table +-- @return Associative table containing extensions mapped to room info +function meetme.in_dialplan(p) + local plan = type(p) == "string" and p or p.name + local rooms = { } + uci:foreach("asterisk", "dialplanmeetme", + function(s) + if s.extension and #s.extension > 0 and s.dialplan == plan then + local room = meetme.room(s.room) + if room then + rooms[s.extension] = room + end + end + end) + return rooms +end + +--- Remove meetme room and associated extensions from config +-- @param room Voicemailbox number or table +-- @param ctx UCI context to use (optional) +-- @return Boolean indicating success +function meetme.remove(v, ctx) + ctx = ctx or uci + local room = type(v) == "string" and v or v.number + local ok1 = ctx:delete_all("asterisk", "meetme", {room=room}) + local ok2 = ctx:delete_all("asterisk", "dialplanmeetme", {room=room}) + return ( ok1 or ok2 ) and true or false +end + + +--- LuCI Asterisk - Dialplan +-- @type module +dialplan = luci.util.class() + +--- Parse a dialplan section +-- @param plan Table containing the plan info +-- @return Table with parsed information +function dialplan.parse(z) + if z['.name'] then + local plan = { + zones = { }, + name = z['.name'], + description = z.description or z['.name'] + } + + -- dialzones + for _, name in ipairs(tools.parse_list(z.include)) do + local zone = dialzone.zone(name) + if zone then + plan.zones[#plan.zones+1] = zone + end + end + + -- voicemailboxes + plan.voicemailboxes = voicemail.in_dialplan(plan) + + -- meetme conferences + plan.meetmerooms = meetme.in_dialplan(plan) + + return plan + end +end + +--- Get a list of known dial plans +-- @return Associative table of plans and table of plan names +function dialplan.plans() + local plans = { } + local pnames = { } + uci:foreach("asterisk", "dialplan", + function(p) + plans[p['.name']] = dialplan.parse(p) + pnames[#pnames+1] = p['.name'] + end) + return plans, pnames +end + +--- Get a specific dial plan +-- @param name Name of the dial plan +-- @return Table containing plan information +function dialplan.plan(n) + local plan + uci:foreach("asterisk", "dialplan", + function(p) + if p['.name'] == n then + plan = dialplan.parse(p) + end + end) + return plan +end diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/asterisk/cc_idd.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/asterisk/cc_idd.lua new file mode 100644 index 0000000..6ed8dfd --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/asterisk/cc_idd.lua @@ -0,0 +1,245 @@ +-- Licensed to the public under the Apache License 2.0. + +module "luci.asterisk.cc_idd" + +CC_IDD = { +-- Country, CC, IDD + { "Afghanistan", "93", "00" }, + { "Albania", "355", "00" }, + { "Algeria", "213", "00" }, + { "American Samoa", "684", "00" }, + { "Andorra", "376", "00" }, + { "Angola", "244", "00" }, + { "Anguilla", "264", "011" }, + { "Antarctica", "672", "" }, + { "Antigua", "268", "011" }, + { "Argentina", "54", "00" }, + { "Armenia", "374", "00" }, + { "Aruba", "297", "00" }, + { "Ascension Island", "247", "00" }, + { "Australia", "61", "0011" }, + { "Austria", "43", "00" }, + { "Azberbaijan", "994", "00" }, + { "Bahamas", "242", "011" }, + { "Bahrain", "973", "00" }, + { "Bangladesh", "880", "00" }, + { "Barbados", "246", "011" }, + { "Barbuda", "268", "011" }, + { "Belarus", "375", "810" }, + { "Belgium", "32", "00" }, + { "Belize", "501", "00" }, + { "Benin", "229", "00" }, + { "Bermuda", "441", "011" }, + { "Bhutan", "975", "00" }, + { "Bolivia", "591", "00" }, + { "Bosnia", "387", "00" }, + { "Botswana", "267", "00" }, + { "Brazil", "55", "00" }, + { "British Virgin Islands", "284", "011" }, + { "Brunei", "673", "00" }, + { "Bulgaria", "359", "00" }, + { "Burkina Faso", "226", "00" }, + { "Burma (Myanmar)", "95", "00" }, + { "Burundi", "257", "00" }, + { "Cambodia", "855", "001" }, + { "Cameroon", "237", "00" }, + { "Canada", "1", "011" }, + { "Cape Verde Islands", "238", "0" }, + { "Cayman Islands", "345", "011" }, + { "Central African Rep.", "236", "00" }, + { "Chad", "235", "15" }, + { "Chile", "56", "00" }, + { "China", "86", "00" }, + { "Christmas Island", "61", "0011" }, + { "Cocos Islands", "61", "0011" }, + { "Colombia", "57", "00" }, + { "Comoros", "269", "00" }, + { "Congo", "242", "00" }, + { "Congo, Dem. Rep. of", "243", "00" }, + { "Cook Islands", "682", "00" }, + { "Costa Rica", "506", "00" }, + { "Croatia", "385", "00" }, + { "Cuba", "53", "119" }, + { "Cyprus", "357", "00" }, + { "Czech Republic", "420", "00" }, + { "Denmark", "45", "00" }, + { "Diego Garcia", "246", "00" }, + { "Djibouti", "253", "00" }, + { "Dominica", "767", "011" }, + { "Dominican Rep.", "809", "011" }, + { "Ecuador", "593", "00" }, + { "Egypt", "20", "00" }, + { "El Salvador", "503", "00" }, + { "Equatorial Guinea", "240", "00" }, + { "Eritrea", "291", "00" }, + { "Estonia", "372", "00" }, + { "Ethiopia", "251", "00" }, + { "Faeroe Islands", "298", "00" }, + { "Falkland Islands", "500", "00" }, + { "Fiji Islands", "679", "00" }, + { "Finland", "358", "00" }, + { "France", "33", "00" }, + { "French Antilles", "596", "00" }, + { "French Guiana", "594", "00" }, + { "French Polynesia", "689", "00" }, + { "Gabon", "241", "00" }, + { "Gambia", "220", "00" }, + { "Georgia", "995", "810" }, + { "Germany", "49", "00" }, + { "Ghana", "233", "00" }, + { "Gibraltar", "350", "00" }, + { "Greece", "30", "00" }, + { "Greenland", "299", "00" }, + { "Grenada", "473", "011" }, + { "Guadeloupe", "590", "00" }, + { "Guam", "671", "011" }, + { "Guantanamo Bay", "5399", "00" }, + { "Guatemala", "502", "00" }, + { "Guinea", "224", "00" }, + { "Guinea Bissau", "245", "00" }, + { "Guyana", "592", "001" }, + { "Haiti", "509", "00" }, + { "Honduras", "504", "00" }, + { "Hong Kong", "852", "001" }, + { "Hungary", "36", "00" }, + { "Iceland", "354", "00" }, + { "India", "91", "00" }, + { "Indonesia", "62", { "001", "008" } }, + { "Iran", "98", "00" }, + { "Iraq", "964", "00" }, + { "Ireland", "353", "00" }, + { "Israel", "972", "00" }, + { "Italy", "39", "00" }, + { "Ivory Coast", "225", "00" }, + { "Jamaica", "876", "011" }, + { "Japan", "81", "001" }, + { "Jordan", "962", "00" }, + { "Kazakhstan", "7", "810" }, + { "Kenya", "254", "000" }, + { "Kiribati", "686", "00" }, + { "Korea, North", "850", "00" }, + { "Korea, South", "82", "001" }, + { "Kuwait", "965", "00" }, + { "Kyrgyzstan", "996", "00" }, + { "Laos", "856", "00" }, + { "Latvia", "371", "00" }, + { "Lebanon", "961", "00" }, + { "Lesotho", "266", "00" }, + { "Liberia", "231", "00" }, + { "Libya", "218", "00" }, + { "Liechtenstein", "423", "00" }, + { "Lithuania", "370", "00" }, + { "Luxembourg", "352", "00" }, + { "Macau", "853", "00" }, + { "Macedonia", "389", "00" }, + { "Madagascar", "261", "00" }, + { "Malawi", "265", "00" }, + { "Malaysia", "60", "00" }, + { "Maldives", "960", "00" }, + { "Mali", "223", "00" }, + { "Malta", "356", "00" }, + { "Mariana Islands", "670", "011" }, + { "Marshall Islands", "692", "011" }, + { "Martinique", "596", "00" }, + { "Mauritania", "222", "00" }, + { "Mauritius", "230", "00" }, + { "Mayotte Islands", "269", "00" }, + { "Mexico", "52", "00" }, + { "Micronesia", "691", "011" }, + { "Midway Island", "808", "011" }, + { "Moldova", "373", "00" }, + { "Monaco", "377", "00" }, + { "Mongolia", "976", "001" }, + { "Montserrat", "664", "011" }, + { "Morocco", "212", "00" }, + { "Mozambique", "258", "00" }, + { "Myanmar (Burma)", "95", "00" }, + { "Namibia", "264", "00" }, + { "Nauru", "674", "00" }, + { "Nepal", "977", "00" }, + { "Netherlands", "31", "00" }, + { "Netherlands Antilles", "599", "00" }, + { "Nevis", "869", "011" }, + { "New Caledonia", "687", "00" }, + { "New Zealand", "64", "00" }, + { "Nicaragua", "505", "00" }, + { "Niger", "227", "00" }, + { "Nigeria", "234", "009" }, + { "Niue", "683", "00" }, + { "Norfolk Island", "672", "00" }, + { "Norway", "47", "00" }, + { "Oman", "968", "00" }, + { "Pakistan", "92", "00" }, + { "Palau", "680", "011" }, + { "Palestine", "970", "00" }, + { "Panama", "507", "00" }, + { "Papua New Guinea", "675", "05" }, + { "Paraguay", "595", "002" }, + { "Peru", "51", "00" }, + { "Philippines", "63", "00" }, + { "Poland", "48", "00" }, + { "Portugal", "351", "00" }, + { "Puerto Rico", { "787", "939" }, "011" }, + { "Qatar", "974", "00" }, + { "Reunion Island", "262", "00" }, + { "Romania", "40", "00" }, + { "Russia", "7", "810" }, + { "Rwanda", "250", "00" }, + { "St. Helena", "290", "00" }, + { "St. Kitts", "869", "011" }, + { "St. Lucia", "758", "011" }, + { "St. Perre & Miquelon", "508", "00" }, + { "St. Vincent", "784", "011" }, + { "San Marino", "378", "00" }, + { "Sao Tome & Principe", "239", "00" }, + { "Saudi Arabia", "966", "00" }, + { "Senegal", "221", "00" }, + { "Serbia", "381", "99" }, + { "Seychelles", "248", "00" }, + { "Sierra Leone", "232", "00" }, + { "Singapore", "65", "001" }, + { "Slovakia", "421", "00" }, + { "Slovenia", "386", "00" }, + { "Solomon Islands", "677", "00" }, + { "Somalia", "252", "00" }, + { "South Africa", "27", "09" }, + { "Spain", "34", "00" }, + { "Sri Lanka", "94", "00" }, + { "Sudan", "249", "00" }, + { "Suriname", "597", "00" }, + { "Swaziland", "268", "00" }, + { "Sweden", "46", "00" }, + { "Switzerland", "41", "00" }, + { "Syria", "963", "00" }, + { "Taiwan", "886", "002" }, + { "Tajikistan", "992", "810" }, + { "Tanzania", "255", "00" }, + { "Thailand", "66", "001" }, + { "Togo", "228", "00" }, + { "Tonga", "676", "00" }, + { "Trinidad & Tobago", "868", "011" }, + { "Tunisia", "216", "00" }, + { "Turkey", "90", "00" }, + { "Turkmenistan", "993", "810" }, + { "Turks & Caicos", "649", "011" }, + { "Tuvalu", "688", "00" }, + { "Uganda", "256", "000" }, + { "Ukraine", "380", "810" }, + { "United Arab Emirates", "971", "00" }, + { "United Kingdom", "44", "00" }, + { "Uruguay", "598", "00" }, + { "USA", "1", "011" }, + { "US Virgin Islands", "340", "011" }, + { "Uzbekistan", "998", "810" }, + { "Vanuatu", "678", "00" }, + { "Vatican City", "39", "00" }, + { "Venezuela", "58", "00" }, + { "Vietnam", "84", "00" }, + { "Wake Island", "808", "00" }, + { "Wallis & Futuna", "681", "19" }, + { "Western Samoa", "685", "00" }, + { "Yemen", "967", "00" }, + { "Yugoslavia", "381", "99" }, + { "Zambia", "260", "00" }, + { "Zimbabwe", "263", "00" } +} diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/controller/asterisk.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/controller/asterisk.lua new file mode 100644 index 0000000..4923584 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/controller/asterisk.lua @@ -0,0 +1,194 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.asterisk", package.seeall) + +function index() + + entry({"admin", "services", "asterisk"}, cbi("asterisk"), "Asterisk", 80) + + entry({"admin", "services", "asterisk", "voice"}, cbi("asterisk-voice"), "Voice Functions", 1) + entry({"admin", "services", "asterisk", "meetme"}, cbi("asterisk-meetme"), "Meetme Conferences", 2) + + entry({"admin", "services", "asterisk", "iax-conns"}, cbi("asterisk-iax-connections"), "IAX Connections", 3) + entry({"admin", "services", "asterisk", "sip-conns"}, cbi("asterisk-sip-connections"), "SIP Connections", 4) + + entry({"admin", "services", "asterisk", "dialplans"}, cbi("asterisk-dialplans"), "Dial Plans", 5) + + entry({"admin", "services", "asterisk", "mod"}, cbi("asterisk-mod-app"), "Modules", 4) + entry({"admin", "services", "asterisk", "mod", "app"}, cbi("asterisk-mod-app"), "Applications", 1) + entry({"admin", "services", "asterisk", "mod", "cdr"}, cbi("asterisk-mod-cdr"), "Call Detail Records", 2) + entry({"admin", "services", "asterisk", "mod", "chan"}, cbi("asterisk-mod-chan"), "Channels", 3) + entry({"admin", "services", "asterisk", "mod", "codec"}, cbi("asterisk-mod-codec"), "Codecs", 4) + entry({"admin", "services", "asterisk", "mod", "format"}, cbi("asterisk-mod-format"), "Format", 5) + entry({"admin", "services", "asterisk", "mod", "func"}, cbi("asterisk-mod-func"), "Functions", 6) + entry({"admin", "services", "asterisk", "mod", "pbx"}, cbi("asterisk-mod-pbx"), "PBX", 7) + entry({"admin", "services", "asterisk", "mod", "res"}, cbi("asterisk-mod-res"), "Resources", 8) + entry({"admin", "services", "asterisk", "mod", "res", "feature"}, + cbi("asterisk-mod-res-feature"), "Feature Module Configuration", 9 ) + + + entry({"admin", "asterisk"}, cbi("asterisk/main"), "Asterisk", 99).i18n = "asterisk" + + entry({"admin", "asterisk", "phones"}, cbi("asterisk/phones"), "Phones", 1) + entry({"admin", "asterisk", "phones", "sip"}, cbi("asterisk/phone_sip"), nil, 1).leaf = true + --entry({"admin", "asterisk", "phones", "exten"}, cbi("asterisk/phone_exten"), "Extensions", 2).leaf = true + + entry({"admin", "asterisk", "trunks"}, cbi("asterisk/trunks"), "Trunks", 2) + entry({"admin", "asterisk", "trunks", "sip"}, cbi("asterisk/trunk_sip"), nil, 1).leaf = true + + entry({"admin", "asterisk", "voicemail"}, cbi("asterisk/voicemail"), "Voicemail", 3) + entry({"admin", "asterisk", "voicemail", "mailboxes"}, cbi("asterisk/voicemail"), "Mailboxes", 1) + entry({"admin", "asterisk", "voicemail", "settings"}, cbi("asterisk/voicemail_settings"), "Settings", 2) + + entry({"admin", "asterisk", "meetme"}, cbi("asterisk/meetme"), "MeetMe", 4) + entry({"admin", "asterisk", "meetme", "rooms"}, cbi("asterisk/meetme"), "Rooms", 1) + entry({"admin", "asterisk", "meetme", "settings"}, cbi("asterisk/meetme_settings"), "Settings", 2) + + entry({"admin", "asterisk", "dialplans"}, call("handle_dialplan"), "Call Routing", 5) + entry({"admin", "asterisk", "dialplans", "out"}, cbi("asterisk/dialplan_out"), nil, 1).leaf = true + entry({"admin", "asterisk", "dialplans", "zones"}, call("handle_dialzones"), "Dial Zones", 2).leaf = true + +end + + +function handle_dialplan() + local uci = luci.model.uci.cursor() + local ast = require "luci.asterisk" + local err = false + + for k, v in pairs(luci.http.formvaluetable("delzone")) do + local plan = ast.dialplan.plan(k) + if #v > 0 and plan then + local newinc = { } + + for _, z in ipairs(plan.zones) do + if z.name ~= v then + newinc[#newinc+1] = z.name + end + end + + uci:delete("asterisk", plan.name, "include") + + if #newinc > 0 then + uci:set("asterisk", plan.name, "include", newinc) + end + end + end + + for k, v in pairs(luci.http.formvaluetable("addzone")) do + local plan = ast.dialplan.plan(k) + local zone = ast.dialzone.zone(v) + if #v > 0 and plan and zone then + local newinc = { zone.name } + + for _, z in ipairs(plan.zones) do + newinc[#newinc+1] = z.name + end + + uci:delete("asterisk", plan.name, "include") + + if #newinc > 0 then + uci:set("asterisk", plan.name, "include", newinc) + end + end + end + + for k, v in pairs(luci.http.formvaluetable("delvbox")) do + local plan = ast.dialplan.plan(k) + if #v > 0 and plan then + uci:delete_all("asterisk", "dialplanvoice", + { extension=v, dialplan=plan.name }) + end + end + + for k, v in pairs(luci.http.formvaluetable("addvbox")) do + local plan = ast.dialplan.plan(k) + local vbox = ast.voicemail.box(v) + if plan and vbox then + local vext = luci.http.formvalue("addvboxext.%s" % plan.name) + vext = ( vext and #vext > 0 ) and vext or vbox.number + uci:section("asterisk", "dialplanvoice", nil, { + dialplan = plan.name, + extension = vext, + voicebox = vbox.number, + voicecontext = vbox.context + }) + end + end + + for k, v in pairs(luci.http.formvaluetable("delmeetme")) do + local plan = ast.dialplan.plan(k) + if #v > 0 and plan then + uci:delete_all("asterisk", "dialplanmeetme", + { extension=v, dialplan=plan.name }) + end + end + + for k, v in pairs(luci.http.formvaluetable("addmeetme")) do + local plan = ast.dialplan.plan(k) + local meetme = ast.meetme.room(v) + if plan and meetme then + local mext = luci.http.formvalue("addmeetmeext.%s" % plan.name) + mext = ( mext and #mext > 0 ) and mext or meetme.room + uci:section("asterisk", "dialplanmeetme", nil, { + dialplan = plan.name, + extension = mext, + room = meetme.room + }) + end + end + + local aname = luci.http.formvalue("addplan") + if aname and #aname > 0 then + if aname:match("^[a-zA-Z0-9_]+$") then + uci:section("asterisk", "dialplan", aname, { }) + else + err = true + end + end + + local dname = luci.http.formvalue("delplan") + if dname and #dname > 0 then + if uci:get("asterisk", dname) == "dialplan" then + uci:delete("asterisk", dname) + uci:delete_all("asterisk", "dialplanvoice", { dialplan=dname }) + uci:delete_all("asterisk", "dialplanmeetme", { dialplan=dname }) + end + end + + uci:save("asterisk") + ast.uci_resync() + + luci.template.render("asterisk/dialplans", { create_error = err }) +end + +function handle_dialzones() + local ast = require "luci.asterisk" + local uci = luci.model.uci.cursor() + local err = false + + if luci.http.formvalue("newzone") then + local name = luci.http.formvalue("newzone_name") + if name and name:match("^[a-zA-Z0-9_]+$") then + uci:section("asterisk", "dialzone", name, { + uses = ast.tools.parse_list(luci.http.formvalue("newzone_uses") or {}), + match = ast.tools.parse_list(luci.http.formvalue("newzone_match") or {}) + }) + uci:save("asterisk") + else + err = true + end + end + + if luci.http.formvalue("delzone") then + local name = luci.http.formvalue("delzone") + if uci:get("asterisk", name) == "dialzone" then + uci:delete("asterisk", name) + uci:save("asterisk") + end + end + + luci.template.render("asterisk/dialzones", { create_error = err }) +end diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua new file mode 100644 index 0000000..d4daa68 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-dialplans.lua @@ -0,0 +1,91 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +dialplan = cbimap:section(TypedSection, "dialplan", "Section dialplan", "") +dialplan.addremove = true +dialplan.dynamic = true + +include = dialplan:option(MultiValue, "include", "Include zones and plans", "") +cbimap.uci:foreach( "asterisk", "dialplan", function(s) include:value(s['.name']) end ) +cbimap.uci:foreach( "asterisk", "dialzone", function(s) include:value(s['.name']) end ) + +dialplanexten = cbimap:section(TypedSection, "dialplanexten", "Dialplan Extension", "") +dialplanexten.anonymous = true +dialplanexten.addremove = true +dialplanexten.dynamic = true + + +dialplangeneral = cbimap:section(TypedSection, "dialplangeneral", "Dialplan General Options", "") +dialplangeneral.anonymous = true +dialplangeneral.addremove = true + +allowtransfer = dialplangeneral:option(Flag, "allowtransfer", "Allow transfer", "") +allowtransfer.rmempty = true + +canreinvite = dialplangeneral:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "") +canreinvite:value("yes", "Yes") +canreinvite:value("nonat", "Yes when not behind NAT") +canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection") +canreinvite:value("no", "No") +canreinvite.rmempty = true + +clearglobalvars = dialplangeneral:option(Flag, "clearglobalvars", "Clear global vars", "") +clearglobalvars.rmempty = true + + +dialplangoto = cbimap:section(TypedSection, "dialplangoto", "Dialplan Goto", "") +dialplangoto.anonymous = true +dialplangoto.addremove = true +dialplangoto.dynamic = true + + +dialplanmeetme = cbimap:section(TypedSection, "dialplanmeetme", "Dialplan Conference", "") +dialplanmeetme.anonymous = true +dialplanmeetme.addremove = true +dialplanmeetme.dynamic = true + + +dialplansaytime = cbimap:section(TypedSection, "dialplansaytime", "Dialplan Time", "") +dialplansaytime.anonymous = true +dialplansaytime.addremove = true +dialplansaytime.dynamic = true + + +dialplanvoice = cbimap:section(TypedSection, "dialplanvoice", "Dialplan Voicemail", "") +dialplanvoice.anonymous = true +dialplanvoice.addremove = true +dialplanvoice.dynamic = true + + +dialzone = cbimap:section(TypedSection, "dialzone", "Dial Zones for Dialplan", "") +dialzone.addremove = true +dialzone.template = "cbi/tblsection" + +addprefix = dialzone:option(Value, "addprefix", "Prefix to add matching dialplans", "") +addprefix.rmempty = true + +--international = dialzone:option(DynamicList, "international", "Match International prefix", "") +international = dialzone:option(Value, "international", "Match International prefix", "") +international.rmempty = true + +localprefix = dialzone:option(Value, "localprefix", "Prefix (0) to add/remove to/from intl. numbers", "") +localprefix.rmempty = true + +localzone = dialzone:option(Value, "localzone", "Dialzone for intl. numbers matched as local", "") +localzone.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" ) +cbimap.uci:foreach( "asterisk", "dialplan", function(s) localzone:value(s['.name']) end ) +cbimap.uci:foreach( "asterisk", "dialzone", function(s) localzone:value(s['.name']) end ) + +match = dialzone:option(Value, "match", "Match plan", "") +match.rmempty = true + +uses = dialzone:option(ListValue, "uses", "Connection to use", "") +uses.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "sip-conns" ) +cbimap.uci:foreach( "asterisk", "sip", function(s) uses:value('SIP/'..s['.name']) end ) +cbimap.uci:foreach( "asterisk", "iax", function(s) uses:value('IAX/'..s['.name']) end ) + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua new file mode 100644 index 0000000..d0eaf34 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-iax-connections.lua @@ -0,0 +1,49 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +iax = cbimap:section(TypedSection, "iax", "IAX Connection", "") +iax.addremove = true + +alwaysinternational = iax:option(Flag, "alwaysinternational", "Always Dial International", "") +alwaysinternational.optional = true + +context = iax:option(ListValue, "context", "Context to use", "") +context.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" ) +cbimap.uci:foreach( "asterisk", "dialplan", function(s) context:value(s['.name']) end ) +cbimap.uci:foreach( "asterisk", "dialzone", function(s) context:value(s['.name']) end ) + +countrycode = iax:option(Value, "countrycode", "Country Code for connection", "") +countrycode.optional = true + +extension = iax:option(Value, "extension", "Add as Extension", "") +extension.optional = true + +host = iax:option(Value, "host", "Host name (or blank)", "") +host.optional = true + +internationalprefix = iax:option(Value, "internationalprefix", "International Dial Prefix", "") +internationalprefix.optional = true + +prefix = iax:option(Value, "prefix", "Dial Prefix (for external line)", "") +prefix.optional = true + +secret = iax:option(Value, "secret", "Secret", "") +secret.optional = true + +timeout = iax:option(Value, "timeout", "Dial Timeout (sec)", "") +timeout.optional = true + +type = iax:option(ListValue, "type", "Option type", "") +type:value("friend", "Friend (outbound/inbound)") +type:value("user", "User (inbound - authenticate by \"from\")") +type:value("peer", "Peer (outbound - match by host)") +type.optional = true + +username = iax:option(Value, "username", "User name", "") +username.optional = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua new file mode 100644 index 0000000..dd79e46 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-meetme.lua @@ -0,0 +1,22 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +meetmegeneral = cbimap:section(TypedSection, "meetmegeneral", "Meetme Conference General Options", "") + +audiobuffers = meetmegeneral:option(Value, "audiobuffers", "Number of 20ms audio buffers to be used", "") + + +meetme = cbimap:section(TypedSection, "meetme", "Meetme Conference", "") +meetme.addremove = true + +adminpin = meetme:option(Value, "adminpin", "Admin PIN", "") +adminpin.password = true + +pin = meetme:option(Value, "pin", "Meeting PIN", "") +pin.password = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-app.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-app.lua new file mode 100644 index 0000000..72685b0 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-app.lua @@ -0,0 +1,391 @@ +cbimap = Map("asterisk", "asterisk", "") + +module = cbimap:section(TypedSection, "module", "Modules", "") +module.anonymous = true + +app_alarmreceiver = module:option(ListValue, "app_alarmreceiver", "Alarm Receiver Application", "") +app_alarmreceiver:value("yes", "Load") +app_alarmreceiver:value("no", "Do Not Load") +app_alarmreceiver:value("auto", "Load as Required") +app_alarmreceiver.rmempty = true + +app_authenticate = module:option(ListValue, "app_authenticate", "Authentication Application", "") +app_authenticate:value("yes", "Load") +app_authenticate:value("no", "Do Not Load") +app_authenticate:value("auto", "Load as Required") +app_authenticate.rmempty = true + +app_cdr = module:option(ListValue, "app_cdr", "Make sure asterisk doesn't save CDR", "") +app_cdr:value("yes", "Load") +app_cdr:value("no", "Do Not Load") +app_cdr:value("auto", "Load as Required") +app_cdr.rmempty = true + +app_chanisavail = module:option(ListValue, "app_chanisavail", "Check if channel is available", "") +app_chanisavail:value("yes", "Load") +app_chanisavail:value("no", "Do Not Load") +app_chanisavail:value("auto", "Load as Required") +app_chanisavail.rmempty = true + +app_chanspy = module:option(ListValue, "app_chanspy", "Listen in on any channel", "") +app_chanspy:value("yes", "Load") +app_chanspy:value("no", "Do Not Load") +app_chanspy:value("auto", "Load as Required") +app_chanspy.rmempty = true + +app_controlplayback = module:option(ListValue, "app_controlplayback", "Control Playback Application", "") +app_controlplayback:value("yes", "Load") +app_controlplayback:value("no", "Do Not Load") +app_controlplayback:value("auto", "Load as Required") +app_controlplayback.rmempty = true + +app_cut = module:option(ListValue, "app_cut", "Cuts up variables", "") +app_cut:value("yes", "Load") +app_cut:value("no", "Do Not Load") +app_cut:value("auto", "Load as Required") +app_cut.rmempty = true + +app_db = module:option(ListValue, "app_db", "Database access functions", "") +app_db:value("yes", "Load") +app_db:value("no", "Do Not Load") +app_db:value("auto", "Load as Required") +app_db.rmempty = true + +app_dial = module:option(ListValue, "app_dial", "Dialing Application", "") +app_dial:value("yes", "Load") +app_dial:value("no", "Do Not Load") +app_dial:value("auto", "Load as Required") +app_dial.rmempty = true + +app_dictate = module:option(ListValue, "app_dictate", "Virtual Dictation Machine Application", "") +app_dictate:value("yes", "Load") +app_dictate:value("no", "Do Not Load") +app_dictate:value("auto", "Load as Required") +app_dictate.rmempty = true + +app_directed_pickup = module:option(ListValue, "app_directed_pickup", "Directed Call Pickup Support", "") +app_directed_pickup:value("yes", "Load") +app_directed_pickup:value("no", "Do Not Load") +app_directed_pickup:value("auto", "Load as Required") +app_directed_pickup.rmempty = true + +app_directory = module:option(ListValue, "app_directory", "Extension Directory", "") +app_directory:value("yes", "Load") +app_directory:value("no", "Do Not Load") +app_directory:value("auto", "Load as Required") +app_directory.rmempty = true + +app_disa = module:option(ListValue, "app_disa", "DISA (Direct Inward System Access) Application", "") +app_disa:value("yes", "Load") +app_disa:value("no", "Do Not Load") +app_disa:value("auto", "Load as Required") +app_disa.rmempty = true + +app_dumpchan = module:option(ListValue, "app_dumpchan", "Dump channel variables Application", "") +app_dumpchan:value("yes", "Load") +app_dumpchan:value("no", "Do Not Load") +app_dumpchan:value("auto", "Load as Required") +app_dumpchan.rmempty = true + +app_echo = module:option(ListValue, "app_echo", "Simple Echo Application", "") +app_echo:value("yes", "Load") +app_echo:value("no", "Do Not Load") +app_echo:value("auto", "Load as Required") +app_echo.rmempty = true + +app_enumlookup = module:option(ListValue, "app_enumlookup", "ENUM Lookup", "") +app_enumlookup:value("yes", "Load") +app_enumlookup:value("no", "Do Not Load") +app_enumlookup:value("auto", "Load as Required") +app_enumlookup.rmempty = true + +app_eval = module:option(ListValue, "app_eval", "Reevaluates strings", "") +app_eval:value("yes", "Load") +app_eval:value("no", "Do Not Load") +app_eval:value("auto", "Load as Required") +app_eval.rmempty = true + +app_exec = module:option(ListValue, "app_exec", "Executes applications", "") +app_exec:value("yes", "Load") +app_exec:value("no", "Do Not Load") +app_exec:value("auto", "Load as Required") +app_exec.rmempty = true + +app_externalivr = module:option(ListValue, "app_externalivr", "External IVR application interface", "") +app_externalivr:value("yes", "Load") +app_externalivr:value("no", "Do Not Load") +app_externalivr:value("auto", "Load as Required") +app_externalivr.rmempty = true + +app_forkcdr = module:option(ListValue, "app_forkcdr", "Fork The CDR into 2 separate entities", "") +app_forkcdr:value("yes", "Load") +app_forkcdr:value("no", "Do Not Load") +app_forkcdr:value("auto", "Load as Required") +app_forkcdr.rmempty = true + +app_getcpeid = module:option(ListValue, "app_getcpeid", "Get ADSI CPE ID", "") +app_getcpeid:value("yes", "Load") +app_getcpeid:value("no", "Do Not Load") +app_getcpeid:value("auto", "Load as Required") +app_getcpeid.rmempty = true + +app_groupcount = module:option(ListValue, "app_groupcount", "Group Management Routines", "") +app_groupcount:value("yes", "Load") +app_groupcount:value("no", "Do Not Load") +app_groupcount:value("auto", "Load as Required") +app_groupcount.rmempty = true + +app_ices = module:option(ListValue, "app_ices", "Encode and Stream via icecast and ices", "") +app_ices:value("yes", "Load") +app_ices:value("no", "Do Not Load") +app_ices:value("auto", "Load as Required") +app_ices.rmempty = true + +app_image = module:option(ListValue, "app_image", "Image Transmission Application", "") +app_image:value("yes", "Load") +app_image:value("no", "Do Not Load") +app_image:value("auto", "Load as Required") +app_image.rmempty = true + +app_lookupblacklist = module:option(ListValue, "app_lookupblacklist", "Look up Caller*ID name/number from black", "") +app_lookupblacklist:value("yes", "Load") +app_lookupblacklist:value("no", "Do Not Load") +app_lookupblacklist:value("auto", "Load as Required") +app_lookupblacklist.rmempty = true + +app_lookupcidname = module:option(ListValue, "app_lookupcidname", "Look up CallerID Name from local databas", "") +app_lookupcidname:value("yes", "Load") +app_lookupcidname:value("no", "Do Not Load") +app_lookupcidname:value("auto", "Load as Required") +app_lookupcidname.rmempty = true + +app_macro = module:option(ListValue, "app_macro", "Extension Macros", "") +app_macro:value("yes", "Load") +app_macro:value("no", "Do Not Load") +app_macro:value("auto", "Load as Required") +app_macro.rmempty = true + +app_math = module:option(ListValue, "app_math", "A simple math Application", "") +app_math:value("yes", "Load") +app_math:value("no", "Do Not Load") +app_math:value("auto", "Load as Required") +app_math.rmempty = true + +app_md5 = module:option(ListValue, "app_md5", "MD5 checksum Application", "") +app_md5:value("yes", "Load") +app_md5:value("no", "Do Not Load") +app_md5:value("auto", "Load as Required") +app_md5.rmempty = true + +app_milliwatt = module:option(ListValue, "app_milliwatt", "Digital Milliwatt (mu-law) Test Application", "") +app_milliwatt:value("yes", "Load") +app_milliwatt:value("no", "Do Not Load") +app_milliwatt:value("auto", "Load as Required") +app_milliwatt.rmempty = true + +app_mixmonitor = module:option(ListValue, "app_mixmonitor", "Record a call and mix the audio during the recording", "") +app_mixmonitor:value("yes", "Load") +app_mixmonitor:value("no", "Do Not Load") +app_mixmonitor:value("auto", "Load as Required") +app_mixmonitor.rmempty = true + +app_parkandannounce = module:option(ListValue, "app_parkandannounce", "Call Parking and Announce Application", "") +app_parkandannounce:value("yes", "Load") +app_parkandannounce:value("no", "Do Not Load") +app_parkandannounce:value("auto", "Load as Required") +app_parkandannounce.rmempty = true + +app_playback = module:option(ListValue, "app_playback", "Trivial Playback Application", "") +app_playback:value("yes", "Load") +app_playback:value("no", "Do Not Load") +app_playback:value("auto", "Load as Required") +app_playback.rmempty = true + +app_privacy = module:option(ListValue, "app_privacy", "Require phone number to be entered", "") +app_privacy:value("yes", "Load") +app_privacy:value("no", "Do Not Load") +app_privacy:value("auto", "Load as Required") +app_privacy.rmempty = true + +app_queue = module:option(ListValue, "app_queue", "True Call Queueing", "") +app_queue:value("yes", "Load") +app_queue:value("no", "Do Not Load") +app_queue:value("auto", "Load as Required") +app_queue.rmempty = true + +app_random = module:option(ListValue, "app_random", "Random goto", "") +app_random:value("yes", "Load") +app_random:value("no", "Do Not Load") +app_random:value("auto", "Load as Required") +app_random.rmempty = true + +app_read = module:option(ListValue, "app_read", "Read Variable Application", "") +app_read:value("yes", "Load") +app_read:value("no", "Do Not Load") +app_read:value("auto", "Load as Required") +app_read.rmempty = true + +app_readfile = module:option(ListValue, "app_readfile", "Read in a file", "") +app_readfile:value("yes", "Load") +app_readfile:value("no", "Do Not Load") +app_readfile:value("auto", "Load as Required") +app_readfile.rmempty = true + +app_realtime = module:option(ListValue, "app_realtime", "Realtime Data Lookup/Rewrite", "") +app_realtime:value("yes", "Load") +app_realtime:value("no", "Do Not Load") +app_realtime:value("auto", "Load as Required") +app_realtime.rmempty = true + +app_record = module:option(ListValue, "app_record", "Trivial Record Application", "") +app_record:value("yes", "Load") +app_record:value("no", "Do Not Load") +app_record:value("auto", "Load as Required") +app_record.rmempty = true + +app_sayunixtime = module:option(ListValue, "app_sayunixtime", "Say time", "") +app_sayunixtime:value("yes", "Load") +app_sayunixtime:value("no", "Do Not Load") +app_sayunixtime:value("auto", "Load as Required") +app_sayunixtime.rmempty = true + +app_senddtmf = module:option(ListValue, "app_senddtmf", "Send DTMF digits Application", "") +app_senddtmf:value("yes", "Load") +app_senddtmf:value("no", "Do Not Load") +app_senddtmf:value("auto", "Load as Required") +app_senddtmf.rmempty = true + +app_sendtext = module:option(ListValue, "app_sendtext", "Send Text Applications", "") +app_sendtext:value("yes", "Load") +app_sendtext:value("no", "Do Not Load") +app_sendtext:value("auto", "Load as Required") +app_sendtext.rmempty = true + +app_setcallerid = module:option(ListValue, "app_setcallerid", "Set CallerID Application", "") +app_setcallerid:value("yes", "Load") +app_setcallerid:value("no", "Do Not Load") +app_setcallerid:value("auto", "Load as Required") +app_setcallerid.rmempty = true + +app_setcdruserfield = module:option(ListValue, "app_setcdruserfield", "CDR user field apps", "") +app_setcdruserfield:value("yes", "Load") +app_setcdruserfield:value("no", "Do Not Load") +app_setcdruserfield:value("auto", "Load as Required") +app_setcdruserfield.rmempty = true + +app_setcidname = module:option(ListValue, "app_setcidname", "load => .so ; Set CallerID Name", "") +app_setcidname:value("yes", "Load") +app_setcidname:value("no", "Do Not Load") +app_setcidname:value("auto", "Load as Required") +app_setcidname.rmempty = true + +app_setcidnum = module:option(ListValue, "app_setcidnum", "load => .so ; Set CallerID Number", "") +app_setcidnum:value("yes", "Load") +app_setcidnum:value("no", "Do Not Load") +app_setcidnum:value("auto", "Load as Required") +app_setcidnum.rmempty = true + +app_setrdnis = module:option(ListValue, "app_setrdnis", "Set RDNIS Number", "") +app_setrdnis:value("yes", "Load") +app_setrdnis:value("no", "Do Not Load") +app_setrdnis:value("auto", "Load as Required") +app_setrdnis.rmempty = true + +app_settransfercapability = module:option(ListValue, "app_settransfercapability", "Set ISDN Transfer Capability", "") +app_settransfercapability:value("yes", "Load") +app_settransfercapability:value("no", "Do Not Load") +app_settransfercapability:value("auto", "Load as Required") +app_settransfercapability.rmempty = true + +app_sms = module:option(ListValue, "app_sms", "SMS/PSTN handler", "") +app_sms:value("yes", "Load") +app_sms:value("no", "Do Not Load") +app_sms:value("auto", "Load as Required") +app_sms.rmempty = true + +app_softhangup = module:option(ListValue, "app_softhangup", "Hangs up the requested channel", "") +app_softhangup:value("yes", "Load") +app_softhangup:value("no", "Do Not Load") +app_softhangup:value("auto", "Load as Required") +app_softhangup.rmempty = true + +app_stack = module:option(ListValue, "app_stack", "Stack Routines", "") +app_stack:value("yes", "Load") +app_stack:value("no", "Do Not Load") +app_stack:value("auto", "Load as Required") +app_stack.rmempty = true + +app_system = module:option(ListValue, "app_system", "Generic System() application", "") +app_system:value("yes", "Load") +app_system:value("no", "Do Not Load") +app_system:value("auto", "Load as Required") +app_system.rmempty = true + +app_talkdetect = module:option(ListValue, "app_talkdetect", "Playback with Talk Detection", "") +app_talkdetect:value("yes", "Load") +app_talkdetect:value("no", "Do Not Load") +app_talkdetect:value("auto", "Load as Required") +app_talkdetect.rmempty = true + +app_test = module:option(ListValue, "app_test", "Interface Test Application", "") +app_test:value("yes", "Load") +app_test:value("no", "Do Not Load") +app_test:value("auto", "Load as Required") +app_test.rmempty = true + +app_transfer = module:option(ListValue, "app_transfer", "Transfer", "") +app_transfer:value("yes", "Load") +app_transfer:value("no", "Do Not Load") +app_transfer:value("auto", "Load as Required") +app_transfer.rmempty = true + +app_txtcidname = module:option(ListValue, "app_txtcidname", "TXTCIDName", "") +app_txtcidname:value("yes", "Load") +app_txtcidname:value("no", "Do Not Load") +app_txtcidname:value("auto", "Load as Required") +app_txtcidname.rmempty = true + +app_url = module:option(ListValue, "app_url", "Send URL Applications", "") +app_url:value("yes", "Load") +app_url:value("no", "Do Not Load") +app_url:value("auto", "Load as Required") +app_url.rmempty = true + +app_userevent = module:option(ListValue, "app_userevent", "Custom User Event Application", "") +app_userevent:value("yes", "Load") +app_userevent:value("no", "Do Not Load") +app_userevent:value("auto", "Load as Required") +app_userevent.rmempty = true + +app_verbose = module:option(ListValue, "app_verbose", "Send verbose output", "") +app_verbose:value("yes", "Load") +app_verbose:value("no", "Do Not Load") +app_verbose:value("auto", "Load as Required") +app_verbose.rmempty = true + +app_voicemail = module:option(ListValue, "app_voicemail", "Voicemail", "") +app_voicemail:value("yes", "Load") +app_voicemail:value("no", "Do Not Load") +app_voicemail:value("auto", "Load as Required") +app_voicemail.rmempty = true + +app_waitforring = module:option(ListValue, "app_waitforring", "Waits until first ring after time", "") +app_waitforring:value("yes", "Load") +app_waitforring:value("no", "Do Not Load") +app_waitforring:value("auto", "Load as Required") +app_waitforring.rmempty = true + +app_waitforsilence = module:option(ListValue, "app_waitforsilence", "Wait For Silence Application", "") +app_waitforsilence:value("yes", "Load") +app_waitforsilence:value("no", "Do Not Load") +app_waitforsilence:value("auto", "Load as Required") +app_waitforsilence.rmempty = true + +app_while = module:option(ListValue, "app_while", "While Loops and Conditional Execution", "") +app_while:value("yes", "Load") +app_while:value("no", "Do Not Load") +app_while:value("auto", "Load as Required") +app_while.rmempty = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua new file mode 100644 index 0000000..13dcba5 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-cdr.lua @@ -0,0 +1,47 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +module = cbimap:section(TypedSection, "module", "Modules", "") +module.anonymous = true + +cdr_csv = module:option(ListValue, "cdr_csv", "Comma Separated Values CDR Backend", "") +cdr_csv:value("yes", "Load") +cdr_csv:value("no", "Do Not Load") +cdr_csv:value("auto", "Load as Required") +cdr_csv.rmempty = true + +cdr_custom = module:option(ListValue, "cdr_custom", "Customizable Comma Separated Values CDR Backend", "") +cdr_custom:value("yes", "Load") +cdr_custom:value("no", "Do Not Load") +cdr_custom:value("auto", "Load as Required") +cdr_custom.rmempty = true + +cdr_manager = module:option(ListValue, "cdr_manager", "Asterisk Call Manager CDR Backend", "") +cdr_manager:value("yes", "Load") +cdr_manager:value("no", "Do Not Load") +cdr_manager:value("auto", "Load as Required") +cdr_manager.rmempty = true + +cdr_mysql = module:option(ListValue, "cdr_mysql", "MySQL CDR Backend", "") +cdr_mysql:value("yes", "Load") +cdr_mysql:value("no", "Do Not Load") +cdr_mysql:value("auto", "Load as Required") +cdr_mysql.rmempty = true + +cdr_pgsql = module:option(ListValue, "cdr_pgsql", "PostgreSQL CDR Backend", "") +cdr_pgsql:value("yes", "Load") +cdr_pgsql:value("no", "Do Not Load") +cdr_pgsql:value("auto", "Load as Required") +cdr_pgsql.rmempty = true + +cdr_sqlite = module:option(ListValue, "cdr_sqlite", "SQLite CDR Backend", "") +cdr_sqlite:value("yes", "Load") +cdr_sqlite:value("no", "Do Not Load") +cdr_sqlite:value("auto", "Load as Required") +cdr_sqlite.rmempty = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua new file mode 100644 index 0000000..425569d --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-chan.lua @@ -0,0 +1,45 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + + +module = cbimap:section(TypedSection, "module", "Modules", "") +module.anonymous = true + +chan_agent = module:option(ListValue, "chan_agent", "Agent Proxy Channel", "") +chan_agent:value("yes", "Load") +chan_agent:value("no", "Do Not Load") +chan_agent:value("auto", "Load as Required") +chan_agent.rmempty = true + +chan_alsa = module:option(ListValue, "chan_alsa", "Channel driver for GTalk", "") +chan_alsa:value("yes", "Load") +chan_alsa:value("no", "Do Not Load") +chan_alsa:value("auto", "Load as Required") +chan_alsa.rmempty = true + +chan_gtalk = module:option(ListValue, "chan_gtalk", "Channel driver for GTalk", "") +chan_gtalk:value("yes", "Load") +chan_gtalk:value("no", "Do Not Load") +chan_gtalk:value("auto", "Load as Required") +chan_gtalk.rmempty = true + +chan_iax2 = module:option(Flag, "chan_iax2", "Option chan_iax2", "") +chan_iax2.rmempty = true + +chan_local = module:option(ListValue, "chan_local", "Local Proxy Channel", "") +chan_local:value("yes", "Load") +chan_local:value("no", "Do Not Load") +chan_local:value("auto", "Load as Required") +chan_local.rmempty = true + +chan_sip = module:option(ListValue, "chan_sip", "Session Initiation Protocol (SIP)", "") +chan_sip:value("yes", "Load") +chan_sip:value("no", "Do Not Load") +chan_sip:value("auto", "Load as Required") +chan_sip.rmempty = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua new file mode 100644 index 0000000..0893c0e --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-codec.lua @@ -0,0 +1,53 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +module = cbimap:section(TypedSection, "module", "Modules", "") +module.anonymous = true + +codec_a_mu = module:option(ListValue, "codec_a_mu", "A-law and Mulaw direct Coder/Decoder", "") +codec_a_mu:value("yes", "Load") +codec_a_mu:value("no", "Do Not Load") +codec_a_mu:value("auto", "Load as Required") +codec_a_mu.rmempty = true + +codec_adpcm = module:option(ListValue, "codec_adpcm", "Adaptive Differential PCM Coder/Decoder", "") +codec_adpcm:value("yes", "Load") +codec_adpcm:value("no", "Do Not Load") +codec_adpcm:value("auto", "Load as Required") +codec_adpcm.rmempty = true + +codec_alaw = module:option(ListValue, "codec_alaw", "A-law Coder/Decoder", "") +codec_alaw:value("yes", "Load") +codec_alaw:value("no", "Do Not Load") +codec_alaw:value("auto", "Load as Required") +codec_alaw.rmempty = true + +codec_g726 = module:option(ListValue, "codec_g726", "ITU G.726-32kbps G726 Transcoder", "") +codec_g726:value("yes", "Load") +codec_g726:value("no", "Do Not Load") +codec_g726:value("auto", "Load as Required") +codec_g726.rmempty = true + +codec_gsm = module:option(ListValue, "codec_gsm", "GSM/PCM16 (signed linear) Codec Translation", "") +codec_gsm:value("yes", "Load") +codec_gsm:value("no", "Do Not Load") +codec_gsm:value("auto", "Load as Required") +codec_gsm.rmempty = true + +codec_speex = module:option(ListValue, "codec_speex", "Speex/PCM16 (signed linear) Codec Translator", "") +codec_speex:value("yes", "Load") +codec_speex:value("no", "Do Not Load") +codec_speex:value("auto", "Load as Required") +codec_speex.rmempty = true + +codec_ulaw = module:option(ListValue, "codec_ulaw", "Mu-law Coder/Decoder", "") +codec_ulaw:value("yes", "Load") +codec_ulaw:value("no", "Do Not Load") +codec_ulaw:value("auto", "Load as Required") +codec_ulaw.rmempty = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua new file mode 100644 index 0000000..9b59d94 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-format.lua @@ -0,0 +1,89 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +module = cbimap:section(TypedSection, "module", "Modules", "") +module.anonymous = true + +format_au = module:option(ListValue, "format_au", "Sun Microsystems AU format (signed linear)", "") +format_au:value("yes", "Load") +format_au:value("no", "Do Not Load") +format_au:value("auto", "Load as Required") +format_au.rmempty = true + +format_g723 = module:option(ListValue, "format_g723", "G.723.1 Simple Timestamp File Format", "") +format_g723:value("yes", "Load") +format_g723:value("no", "Do Not Load") +format_g723:value("auto", "Load as Required") +format_g723.rmempty = true + +format_g726 = module:option(ListValue, "format_g726", "Raw G.726 (16/24/32/40kbps) data", "") +format_g726:value("yes", "Load") +format_g726:value("no", "Do Not Load") +format_g726:value("auto", "Load as Required") +format_g726.rmempty = true + +format_g729 = module:option(ListValue, "format_g729", "Raw G729 data", "") +format_g729:value("yes", "Load") +format_g729:value("no", "Do Not Load") +format_g729:value("auto", "Load as Required") +format_g729.rmempty = true + +format_gsm = module:option(ListValue, "format_gsm", "Raw GSM data", "") +format_gsm:value("yes", "Load") +format_gsm:value("no", "Do Not Load") +format_gsm:value("auto", "Load as Required") +format_gsm.rmempty = true + +format_h263 = module:option(ListValue, "format_h263", "Raw h263 data", "") +format_h263:value("yes", "Load") +format_h263:value("no", "Do Not Load") +format_h263:value("auto", "Load as Required") +format_h263.rmempty = true + +format_jpeg = module:option(ListValue, "format_jpeg", "JPEG (Joint Picture Experts Group) Image", "") +format_jpeg:value("yes", "Load") +format_jpeg:value("no", "Do Not Load") +format_jpeg:value("auto", "Load as Required") +format_jpeg.rmempty = true + +format_pcm = module:option(ListValue, "format_pcm", "Raw uLaw 8khz Audio support (PCM)", "") +format_pcm:value("yes", "Load") +format_pcm:value("no", "Do Not Load") +format_pcm:value("auto", "Load as Required") +format_pcm.rmempty = true + +format_pcm_alaw = module:option(ListValue, "format_pcm_alaw", "load => .so ; Raw aLaw 8khz PCM Audio support", "") +format_pcm_alaw:value("yes", "Load") +format_pcm_alaw:value("no", "Do Not Load") +format_pcm_alaw:value("auto", "Load as Required") +format_pcm_alaw.rmempty = true + +format_sln = module:option(ListValue, "format_sln", "Raw Signed Linear Audio support (SLN)", "") +format_sln:value("yes", "Load") +format_sln:value("no", "Do Not Load") +format_sln:value("auto", "Load as Required") +format_sln.rmempty = true + +format_vox = module:option(ListValue, "format_vox", "Dialogic VOX (ADPCM) File Format", "") +format_vox:value("yes", "Load") +format_vox:value("no", "Do Not Load") +format_vox:value("auto", "Load as Required") +format_vox.rmempty = true + +format_wav = module:option(ListValue, "format_wav", "Microsoft WAV format (8000hz Signed Line", "") +format_wav:value("yes", "Load") +format_wav:value("no", "Do Not Load") +format_wav:value("auto", "Load as Required") +format_wav.rmempty = true + +format_wav_gsm = module:option(ListValue, "format_wav_gsm", "Microsoft WAV format (Proprietary GSM)", "") +format_wav_gsm:value("yes", "Load") +format_wav_gsm:value("no", "Do Not Load") +format_wav_gsm:value("auto", "Load as Required") +format_wav_gsm.rmempty = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua new file mode 100644 index 0000000..04eb974 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-func.lua @@ -0,0 +1,29 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +module = cbimap:section(TypedSection, "module", "Modules", "") +module.anonymous = true + +func_callerid = module:option(ListValue, "func_callerid", "Caller ID related dialplan functions", "") +func_callerid:value("yes", "Load") +func_callerid:value("no", "Do Not Load") +func_callerid:value("auto", "Load as Required") +func_callerid.rmempty = true + +func_enum = module:option(ListValue, "func_enum", "ENUM Functions", "") +func_enum:value("yes", "Load") +func_enum:value("no", "Do Not Load") +func_enum:value("auto", "Load as Required") +func_enum.rmempty = true + +func_uri = module:option(ListValue, "func_uri", "URI encoding / decoding functions", "") +func_uri:value("yes", "Load") +func_uri:value("no", "Do Not Load") +func_uri:value("auto", "Load as Required") +func_uri.rmempty = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua new file mode 100644 index 0000000..cca4f34 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-pbx.lua @@ -0,0 +1,53 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +module = cbimap:section(TypedSection, "module", "Modules", "") +module.anonymous = true + +pbx_ael = module:option(ListValue, "pbx_ael", "Asterisk Extension Language Compiler", "") +pbx_ael:value("yes", "Load") +pbx_ael:value("no", "Do Not Load") +pbx_ael:value("auto", "Load as Required") +pbx_ael.rmempty = true + +pbx_config = module:option(ListValue, "pbx_config", "Text Extension Configuration", "") +pbx_config:value("yes", "Load") +pbx_config:value("no", "Do Not Load") +pbx_config:value("auto", "Load as Required") +pbx_config.rmempty = true + +pbx_functions = module:option(ListValue, "pbx_functions", "load => .so ; Builtin dialplan functions", "") +pbx_functions:value("yes", "Load") +pbx_functions:value("no", "Do Not Load") +pbx_functions:value("auto", "Load as Required") +pbx_functions.rmempty = true + +pbx_loopback = module:option(ListValue, "pbx_loopback", "Loopback Switch", "") +pbx_loopback:value("yes", "Load") +pbx_loopback:value("no", "Do Not Load") +pbx_loopback:value("auto", "Load as Required") +pbx_loopback.rmempty = true + +pbx_realtime = module:option(ListValue, "pbx_realtime", "Realtime Switch", "") +pbx_realtime:value("yes", "Load") +pbx_realtime:value("no", "Do Not Load") +pbx_realtime:value("auto", "Load as Required") +pbx_realtime.rmempty = true + +pbx_spool = module:option(ListValue, "pbx_spool", "Outgoing Spool Support", "") +pbx_spool:value("yes", "Load") +pbx_spool:value("no", "Do Not Load") +pbx_spool:value("auto", "Load as Required") +pbx_spool.rmempty = true + +pbx_wilcalu = module:option(ListValue, "pbx_wilcalu", "Wil Cal U (Auto Dialer)", "") +pbx_wilcalu:value("yes", "Load") +pbx_wilcalu:value("no", "Do Not Load") +pbx_wilcalu:value("auto", "Load as Required") +pbx_wilcalu.rmempty = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua new file mode 100644 index 0000000..7c81876 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res-feature.lua @@ -0,0 +1,100 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +featuremap = cbimap:section(TypedSection, "featuremap", "Feature Key maps", "") +featuremap.anonymous = true +featuremap.addremove = true + +atxfer = featuremap:option(Value, "atxfer", "Attended transfer key", "") +atxfer.rmempty = true + +blindxfer = featuremap:option(Value, "blindxfer", "Blind transfer key", "") +blindxfer.rmempty = true + +disconnect = featuremap:option(Value, "disconnect", "Key to Disconnect call", "") +disconnect.rmempty = true + +parkcall = featuremap:option(Value, "parkcall", "Key to Park call", "") +parkcall.rmempty = true + + +featurepark = cbimap:section(TypedSection, "featurepark", "Parking Feature", "") +featurepark.anonymous = true + +parkenabled = featurepark:option(Flag, "parkenabled", "Enable Parking", "") + +adsipark = featurepark:option(Flag, "adsipark", "ADSI Park", "") +adsipark.rmempty = true +adsipark:depends({ parkenabled = "1" }) + +atxfernoanswertimeout = featurepark:option(Value, "atxfernoanswertimeout", "Attended transfer timeout (sec)", "") +atxfernoanswertimeout.rmempty = true +atxfernoanswertimeout:depends({ parkenabled = "1" }) + +automon = featurepark:option(Value, "automon", "One touch record key", "") +automon.rmempty = true +automon:depends({ parkenabled = "1" }) + +context = featurepark:option(Value, "context", "Name of call context for parking", "") +context.rmempty = true +context:depends({ parkenabled = "1" }) + +courtesytone = featurepark:option(Value, "courtesytone", "Sound file to play to parked caller", "") +courtesytone.rmempty = true +courtesytone:depends({ parkenabled = "1" }) + +featuredigittimeout = featurepark:option(Value, "featuredigittimeout", "Max time (ms) between digits for feature activation", "") +featuredigittimeout.rmempty = true +featuredigittimeout:depends({ parkenabled = "1" }) + +findslot = featurepark:option(ListValue, "findslot", "Method to Find Parking slot", "") +findslot:value("first", "First available slot") +findslot:value("next", "Next free parking space") +findslot.rmempty = true +findslot:depends({ parkenabled = "1" }) + +parkedmusicclass = featurepark:option(ListValue, "parkedmusicclass", "Music on Hold class for the parked channel", "") +parkedmusicclass.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk" ) +parkedmusicclass:depends({ parkenabled = "1" }) +cbimap.uci:foreach( "asterisk", "moh", function(s) parkedmusicclass:value(s['.name']) end ) + +parkedplay = featurepark:option(ListValue, "parkedplay", "Play courtesy tone to", "") +parkedplay:value("caller", "Caller") +parkedplay:value("parked", "Parked user") +parkedplay:value("both", "Both") +parkedplay.rmempty = true +parkedplay:depends({ parkenabled = "1" }) + +parkext = featurepark:option(Value, "parkext", "Extension to dial to park", "") +parkext.rmempty = true +parkext:depends({ parkenabled = "1" }) + +parkingtime = featurepark:option(Value, "parkingtime", "Parking time (secs)", "") +parkingtime.rmempty = true +parkingtime:depends({ parkenabled = "1" }) + +parkpos = featurepark:option(Value, "parkpos", "Range of extensions for call parking", "") +parkpos.rmempty = true +parkpos:depends({ parkenabled = "1" }) + +pickupexten = featurepark:option(Value, "pickupexten", "Pickup extension", "") +pickupexten.rmempty = true +pickupexten:depends({ parkenabled = "1" }) + +transferdigittimeout = featurepark:option(Value, "transferdigittimeout", "Seconds to wait between digits when transferring", "") +transferdigittimeout.rmempty = true +transferdigittimeout:depends({ parkenabled = "1" }) + +xferfailsound = featurepark:option(Value, "xferfailsound", "sound when attended transfer is complete", "") +xferfailsound.rmempty = true +xferfailsound:depends({ parkenabled = "1" }) + +xfersound = featurepark:option(Value, "xfersound", "Sound when attended transfer fails", "") +xfersound.rmempty = true +xfersound:depends({ parkenabled = "1" }) + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua new file mode 100644 index 0000000..4bef199 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-mod-res.lua @@ -0,0 +1,77 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +module = cbimap:section(TypedSection, "module", "Modules", "") +module.anonymous = true + +res_config_mysql = module:option(ListValue, "res_config_mysql", "MySQL Config Resource", "") +res_config_mysql:value("yes", "Load") +res_config_mysql:value("no", "Do Not Load") +res_config_mysql:value("auto", "Load as Required") +res_config_mysql.rmempty = true + +res_config_odbc = module:option(ListValue, "res_config_odbc", "ODBC Config Resource", "") +res_config_odbc:value("yes", "Load") +res_config_odbc:value("no", "Do Not Load") +res_config_odbc:value("auto", "Load as Required") +res_config_odbc.rmempty = true + +res_config_pgsql = module:option(ListValue, "res_config_pgsql", "PGSQL Module", "") +res_config_pgsql:value("yes", "Load") +res_config_pgsql:value("no", "Do Not Load") +res_config_pgsql:value("auto", "Load as Required") +res_config_pgsql.rmempty = true + +res_crypto = module:option(ListValue, "res_crypto", "Cryptographic Digital Signatures", "") +res_crypto:value("yes", "Load") +res_crypto:value("no", "Do Not Load") +res_crypto:value("auto", "Load as Required") +res_crypto.rmempty = true + +res_features = module:option(ListValue, "res_features", "Call Parking Resource", "") +res_features:value("yes", "Load") +res_features:value("no", "Do Not Load") +res_features:value("auto", "Load as Required") +res_features.rmempty = true + +res_indications = module:option(ListValue, "res_indications", "Indications Configuration", "") +res_indications:value("yes", "Load") +res_indications:value("no", "Do Not Load") +res_indications:value("auto", "Load as Required") +res_indications.rmempty = true + +res_monitor = module:option(ListValue, "res_monitor", "Call Monitoring Resource", "") +res_monitor:value("yes", "Load") +res_monitor:value("no", "Do Not Load") +res_monitor:value("auto", "Load as Required") +res_monitor.rmempty = true + +res_musiconhold = module:option(ListValue, "res_musiconhold", "Music On Hold Resource", "") +res_musiconhold:value("yes", "Load") +res_musiconhold:value("no", "Do Not Load") +res_musiconhold:value("auto", "Load as Required") +res_musiconhold.rmempty = true + +res_odbc = module:option(ListValue, "res_odbc", "ODBC Resource", "") +res_odbc:value("yes", "Load") +res_odbc:value("no", "Do Not Load") +res_odbc:value("auto", "Load as Required") +res_odbc.rmempty = true + +res_smdi = module:option(ListValue, "res_smdi", "SMDI Module", "") +res_smdi:value("yes", "Load") +res_smdi:value("no", "Do Not Load") +res_smdi:value("auto", "Load as Required") +res_smdi.rmempty = true + +res_snmp = module:option(ListValue, "res_snmp", "SNMP Module", "") +res_snmp:value("yes", "Load") +res_snmp:value("no", "Do Not Load") +res_snmp:value("auto", "Load as Required") +res_snmp.rmempty = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua new file mode 100644 index 0000000..a095ec3 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-sip-connections.lua @@ -0,0 +1,98 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +sip = cbimap:section(TypedSection, "sip", "SIP Connection", "") +sip.addremove = true + +alwaysinternational = sip:option(Flag, "alwaysinternational", "Always Dial International", "") +alwaysinternational.optional = true + +canreinvite = sip:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "") +canreinvite:value("yes", "Yes") +canreinvite:value("nonat", "Yes when not behind NAT") +canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection") +canreinvite:value("no", "No") +canreinvite.optional = true + +context = sip:option(ListValue, "context", "Context to use", "") +context.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" ) +cbimap.uci:foreach( "asterisk", "dialplan", function(s) context:value(s['.name']) end ) +cbimap.uci:foreach( "asterisk", "dialzone", function(s) context:value(s['.name']) end ) + +countrycode = sip:option(Value, "countrycode", "Country Code for connection", "") +countrycode.optional = true + +dtmfmode = sip:option(ListValue, "dtmfmode", "DTMF mode", "") +dtmfmode:value("info", "Use RFC2833 or INFO for the BudgeTone") +dtmfmode:value("rfc2833", "Use RFC2833 for the BudgeTone") +dtmfmode:value("inband", "Use Inband (only with ulaw/alaw)") +dtmfmode.optional = true + +extension = sip:option(Value, "extension", "Add as Extension", "") +extension.optional = true + +fromdomain = sip:option(Value, "fromdomain", "Primary domain identity for From: headers", "") +fromdomain.optional = true + +fromuser = sip:option(Value, "fromuser", "From user (required by many SIP providers)", "") +fromuser.optional = true + +host = sip:option(Value, "host", "Host name (or blank)", "") +host.optional = true + +incoming = sip:option(DynamicList, "incoming", "Ring on incoming dialplan contexts", "") +incoming.optional = true + +insecure = sip:option(ListValue, "insecure", "Allow Insecure for", "") +insecure:value("port", "Allow mismatched port number") +insecure:value("invite", "Do not require auth of incoming INVITE") +insecure:value("port,invite", "Allow mismatched port and Do not require auth of incoming INVITE") +insecure.optional = true + +internationalprefix = sip:option(Value, "internationalprefix", "International Dial Prefix", "") +internationalprefix.optional = true + +mailbox = sip:option(Value, "mailbox", "Mailbox for MWI", "") +mailbox.optional = true + +nat = sip:option(Flag, "nat", "NAT between phone and Asterisk", "") +nat.optional = true + +pedantic = sip:option(Flag, "pedantic", "Check tags in headers", "") +pedantic.optional = true + +port = sip:option(Value, "port", "SIP Port", "") +port.optional = true + +prefix = sip:option(Value, "prefix", "Dial Prefix (for external line)", "") +prefix.optional = true + +qualify = sip:option(Value, "qualify", "Reply Timeout (ms) for down connection", "") +qualify.optional = true + +register = sip:option(Flag, "register", "Register connection", "") +register.optional = true + +secret = sip:option(Value, "secret", "Secret", "") +secret.optional = true + +selfmailbox = sip:option(Flag, "selfmailbox", "Dial own extension for mailbox", "") +selfmailbox.optional = true + +timeout = sip:option(Value, "timeout", "Dial Timeout (sec)", "") +timeout.optional = true + +type = sip:option(ListValue, "type", "Client Type", "") +type:value("friend", "Friend (outbound/inbound)") +type:value("user", "User (inbound - authenticate by \"from\")") +type:value("peer", "Peer (outbound - match by host)") +type.optional = true + +username = sip:option(Value, "username", "Username", "") +username.optional = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua new file mode 100644 index 0000000..7341dfb --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk-voice.lua @@ -0,0 +1,41 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +voicegeneral = cbimap:section(TypedSection, "voicegeneral", "Voicemail general options", "") + +serveremail = voicegeneral:option(Value, "serveremail", "From Email address of server", "") + + +voicemail = cbimap:section(TypedSection, "voicemail", "Voice Mail boxes", "") +voicemail.addremove = true + +attach = voicemail:option(Flag, "attach", "Email contains attachment", "") +attach.rmempty = true + +email = voicemail:option(Value, "email", "Email", "") +email.rmempty = true + +name = voicemail:option(Value, "name", "Display Name", "") +name.rmempty = true + +password = voicemail:option(Value, "password", "Password", "") +password.rmempty = true + +zone = voicemail:option(ListValue, "zone", "Voice Zone", "") +cbimap.uci:foreach( "asterisk", "voicezone", function(s) zone:value(s['.name']) end ) + + +voicezone = cbimap:section(TypedSection, "voicezone", "Voice Zone settings", "") +voicezone.addremove = true + +message = voicezone:option(Value, "message", "Message Format", "") +message.rmempty = true + +zone = voicezone:option(Value, "zone", "Time Zone", "") +zone.rmempty = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua new file mode 100644 index 0000000..026aab4 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk.lua @@ -0,0 +1,151 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "asterisk", "") + +asterisk = cbimap:section(TypedSection, "asterisk", "Asterisk General Options", "") +asterisk.anonymous = true + +agidir = asterisk:option(Value, "agidir", "AGI directory", "") +agidir.rmempty = true + +cache_record_files = asterisk:option(Flag, "cache_record_files", "Cache recorded sound files during recording", "") +cache_record_files.rmempty = true + +debug = asterisk:option(Value, "debug", "Debug Level", "") +debug.rmempty = true + +dontwarn = asterisk:option(Flag, "dontwarn", "Disable some warnings", "") +dontwarn.rmempty = true + +dumpcore = asterisk:option(Flag, "dumpcore", "Dump core on crash", "") +dumpcore.rmempty = true + +highpriority = asterisk:option(Flag, "highpriority", "High Priority", "") +highpriority.rmempty = true + +initcrypto = asterisk:option(Flag, "initcrypto", "Initialise Crypto", "") +initcrypto.rmempty = true + +internal_timing = asterisk:option(Flag, "internal_timing", "Use Internal Timing", "") +internal_timing.rmempty = true + +logdir = asterisk:option(Value, "logdir", "Log directory", "") +logdir.rmempty = true + +maxcalls = asterisk:option(Value, "maxcalls", "Maximum number of calls allowed", "") +maxcalls.rmempty = true + +maxload = asterisk:option(Value, "maxload", "Maximum load to stop accepting new calls", "") +maxload.rmempty = true + +nocolor = asterisk:option(Flag, "nocolor", "Disable console colors", "") +nocolor.rmempty = true + +record_cache_dir = asterisk:option(Value, "record_cache_dir", "Sound files Cache directory", "") +record_cache_dir.rmempty = true +record_cache_dir:depends({ ["cache_record_files"] = "true" }) + +rungroup = asterisk:option(Flag, "rungroup", "The Group to run as", "") +rungroup.rmempty = true + +runuser = asterisk:option(Flag, "runuser", "The User to run as", "") +runuser.rmempty = true + +spooldir = asterisk:option(Value, "spooldir", "Voicemail Spool directory", "") +spooldir.rmempty = true + +systemname = asterisk:option(Value, "systemname", "Prefix UniquID with system name", "") +systemname.rmempty = true + +transcode_via_sln = asterisk:option(Flag, "transcode_via_sln", "Build transcode paths via SLINEAR, not directly", "") +transcode_via_sln.rmempty = true + +transmit_silence_during_record = asterisk:option(Flag, "transmit_silence_during_record", "Transmit SLINEAR silence while recording a channel", "") +transmit_silence_during_record.rmempty = true + +verbose = asterisk:option(Value, "verbose", "Verbose Level", "") +verbose.rmempty = true + +zone = asterisk:option(Value, "zone", "Time Zone", "") +zone.rmempty = true + + +hardwarereboot = cbimap:section(TypedSection, "hardwarereboot", "Reload Hardware Config", "") + +method = hardwarereboot:option(ListValue, "method", "Reboot Method", "") +method:value("web", "Web URL (wget)") +method:value("system", "program to run") +method.rmempty = true + +param = hardwarereboot:option(Value, "param", "Parameter", "") +param.rmempty = true + + +iaxgeneral = cbimap:section(TypedSection, "iaxgeneral", "IAX General Options", "") +iaxgeneral.anonymous = true +iaxgeneral.addremove = true + +allow = iaxgeneral:option(MultiValue, "allow", "Allow Codecs", "") +allow:value("alaw", "alaw") +allow:value("gsm", "gsm") +allow:value("g726", "g726") +allow.rmempty = true + +canreinvite = iaxgeneral:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "") +canreinvite:value("yes", "Yes") +canreinvite:value("nonat", "Yes when not behind NAT") +canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection") +canreinvite:value("no", "No") +canreinvite.rmempty = true + +static = iaxgeneral:option(Flag, "static", "Static", "") +static.rmempty = true + +writeprotect = iaxgeneral:option(Flag, "writeprotect", "Write Protect", "") +writeprotect.rmempty = true + + +sipgeneral = cbimap:section(TypedSection, "sipgeneral", "Section sipgeneral", "") +sipgeneral.anonymous = true +sipgeneral.addremove = true + +allow = sipgeneral:option(MultiValue, "allow", "Allow codecs", "") +allow:value("ulaw", "ulaw") +allow:value("alaw", "alaw") +allow:value("gsm", "gsm") +allow:value("g726", "g726") +allow.rmempty = true + +port = sipgeneral:option(Value, "port", "SIP Port", "") +port.rmempty = true + +realm = sipgeneral:option(Value, "realm", "SIP realm", "") +realm.rmempty = true + + +moh = cbimap:section(TypedSection, "moh", "Music On Hold", "") + +application = moh:option(Value, "application", "Application", "") +application.rmempty = true +application:depends({ ["asterisk.moh.mode"] = "custom" }) + +directory = moh:option(Value, "directory", "Directory of Music", "") +directory.rmempty = true + +mode = moh:option(ListValue, "mode", "Option mode", "") +mode:value("system", "program to run") +mode:value("files", "Read files from directory") +mode:value("quietmp3", "Quite MP3") +mode:value("mp3", "Loud MP3") +mode:value("mp3nb", "unbuffered MP3") +mode:value("quietmp3nb", "Quiet Unbuffered MP3") +mode:value("custom", "Run a custom application") +mode.rmempty = true + +random = moh:option(Flag, "random", "Random Play", "") +random.rmempty = true + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua new file mode 100644 index 0000000..b4c81bb --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplan_out.lua @@ -0,0 +1,125 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +local function find_outgoing_contexts(uci) + local c = { } + local h = { } + +-- uci:foreach("asterisk", "dialplan", +-- function(s) +-- if not h[s['.name']] then +-- c[#c+1] = { s['.name'], "Dialplan: %s" % s['.name'] } +-- h[s['.name']] = true +-- end +-- end) + + uci:foreach("asterisk", "dialzone", + function(s) + if not h[s['.name']] then + c[#c+1] = { s['.name'], "Dialzone: %s" % s['.name'] } + h[s['.name']] = true + end + end) + + return c +end + +local function find_incoming_contexts(uci) + local c = { } + local h = { } + + uci:foreach("asterisk", "sip", + function(s) + if s.context and not h[s.context] and + uci:get_bool("asterisk", s['.name'], "provider") + then + c[#c+1] = { s.context, "Incoming: %s" % s['.name'] or s.context } + h[s.context] = true + end + end) + + return c +end + +local function find_trunks(uci) + local t = { } + + uci:foreach("asterisk", "sip", + function(s) + if uci:get_bool("asterisk", s['.name'], "provider") then + t[#t+1] = { + "SIP/%s" % s['.name'], + "SIP: %s" % s['.name'] + } + end + end) + + uci:foreach("asterisk", "iax", + function(s) + t[#t+1] = { + "IAX/%s" % s['.name'], + "IAX: %s" % s.extension or s['.name'] + } + end) + + return t +end + +--[[ + +dialzone {name} - Outgoing zone. + uses - Outgoing line to use: TYPE/Name + match (list) - Number to match + countrycode - The effective country code of this dialzone + international (list) - International prefix to match + localzone - dialzone for local numbers + addprefix - Prexix required to dial out. + localprefix - Prefix for a local call + +]] + + +-- +-- SIP dialzone configuration +-- +if arg[1] then + cbimap = Map("asterisk", "Edit Dialplan Entry") + + entry = cbimap:section(NamedSection, arg[1]) + + back = entry:option(DummyValue, "_overview", "Back to dialplan overview") + back.value = "" + back.titleref = luci.dispatcher.build_url("admin", "asterisk", "dialplans") + + desc = entry:option(Value, "description", "Description") + function desc.cfgvalue(self, s, ...) + return Value.cfgvalue(self, s, ...) or s + end + + match = entry:option(DynamicList, "match", "Number matches") + + intl = entry:option(DynamicList, "international", "Intl. prefix matches (optional)") + + trunk = entry:option(MultiValue, "uses", "Used trunk") + for _, v in ipairs(find_trunks(cbimap.uci)) do + trunk:value(unpack(v)) + end + + aprefix = entry:option(Value, "addprefix", "Add prefix to dial out (optional)") + --ast.idd.cbifill(aprefix) + + ccode = entry:option(Value, "countrycode", "Effective countrycode (optional)") + ast.cc.cbifill(ccode) + + lzone = entry:option(ListValue, "localzone", "Dialzone for local numbers") + lzone:value("", "no special treatment of local numbers") + for _, v in ipairs(find_outgoing_contexts(cbimap.uci)) do + lzone:value(unpack(v)) + end + + lprefix = entry:option(Value, "localprefix", "Prefix for local calls (optional)") + + return cbimap +end diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua new file mode 100644 index 0000000..4ffeca4 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialplans.lua @@ -0,0 +1,103 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +cbimap = Map("asterisk", "Registered Trunks") +cbimap.pageaction = false + +local sip_peers = { } +cbimap.uci:foreach("asterisk", "sip", + function(s) + if s.type == "peer" then + s.name = s['.name'] + s.info = ast.sip.peer(s.name) + sip_peers[s.name] = s + end + end) + + +sip_table = cbimap:section(TypedSection, "sip", "SIP Trunks") +sip_table.template = "cbi/tblsection" +sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "trunks", "sip", "%s") +sip_table.addremove = true +sip_table.sectionhead = "Extension" + +function sip_table.filter(self, s) + return s and ( + cbimap.uci:get("asterisk", s, "type") == nil or + cbimap.uci:get_bool("asterisk", s, "provider") + ) +end + +function sip_table.create(self, section) + if TypedSection.create(self, section) then + created = section + else + self.invalid_cts = true + end +end + +function sip_table.parse(self, ...) + TypedSection.parse(self, ...) + if created then + cbimap.uci:tset("asterisk", created, { + type = "friend", + qualify = "yes", + provider = "yes" + }) + + cbimap.uci:save("asterisk") + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "trunks", "sip", created + )) + end +end + + +user = sip_table:option(DummyValue, "username", "Username") + +host = sip_table:option(DummyValue, "host", "Hostname") +function host.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.address then + return "%s:%i" %{ sip_peers[s].info.address, sip_peers[s].info.port } + else + return "n/a" + end +end + +context = sip_table:option(DummyValue, "context", "Dialplan") +context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan") +function context.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "(default)" +end + +online = sip_table:option(DummyValue, "online", "Registered") +function online.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online == nil then + return "n/a" + else + return sip_peers[s] and sip_peers[s].info.online + and "yes" or "no (%s)" %{ + sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown" + } + end +end + +delay = sip_table:option(DummyValue, "delay", "Delay") +function delay.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online then + return "%i ms" % sip_peers[s].info.delay + else + return "n/a" + end +end + +info = sip_table:option(Button, "_info", "Info") +function info.write(self, s) + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "trunks", "sip", s, "info" + )) +end + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua new file mode 100644 index 0000000..5585c06 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/dialzones.lua @@ -0,0 +1,123 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") +local uci = require("luci.model.uci").cursor() + +--[[ + Dialzone overview table +]] + +if not arg[1] then + zonemap = Map("asterisk", "Dial Zones", [[ + Dial zones hold patterns of dialed numbers to match. + Each zone has one or more trunks assigned. If the first trunk is + congested, Asterisk will try to use the next available connection. + If all trunks fail, then the following zones in the parent dialplan + are tried. + ]]) + + local zones, znames = ast.dialzone.zones() + + zonetbl = zonemap:section(Table, zones, "Zone Overview") + zonetbl.sectionhead = "Zone" + zonetbl.addremove = true + zonetbl.anonymous = false + zonetbl.extedit = luci.dispatcher.build_url( + "admin", "asterisk", "dialplans", "zones", "%s" + ) + + function zonetbl.cfgsections(self) + return znames + end + + function zonetbl.parse(self) + for k, v in pairs(self.map:formvaluetable( + luci.cbi.REMOVE_PREFIX .. self.config + ) or {}) do + if k:sub(-2) == ".x" then k = k:sub(1, #k - 2) end + uci:delete("asterisk", k) + uci:save("asterisk") + self.data[k] = nil + for i = 1,#znames do + if znames[i] == k then + table.remove(znames, i) + break + end + end + end + + Table.parse(self) + end + + zonetbl:option(DummyValue, "description", "Description") + zonetbl:option(DummyValue, "addprefix") + + match = zonetbl:option(DummyValue, "matches") + function match.cfgvalue(self, s) + return table.concat(zones[s].matches, ", ") + end + + trunks = zonetbl:option(DummyValue, "trunk") + trunks.template = "asterisk/cbi/cell" + function trunks.cfgvalue(self, s) + return ast.tools.hyperlinks(zones[s].trunks) + end + + return zonemap + +--[[ + Zone edit form +]] + +else + zoneedit = Map("asterisk", "Edit Dialzone") + + entry = zoneedit:section(NamedSection, arg[1]) + entry.title = "Zone %q" % arg[1]; + + back = entry:option(DummyValue, "_overview", "Back to dialzone overview") + back.value = "" + back.titleref = luci.dispatcher.build_url( + "admin", "asterisk", "dialplans", "zones" + ) + + desc = entry:option(Value, "description", "Description") + function desc.cfgvalue(self, s, ...) + return Value.cfgvalue(self, s, ...) or s + end + + trunks = entry:option(MultiValue, "uses", "Used trunks") + trunks.widget = "checkbox" + uci:foreach("asterisk", "sip", + function(s) + if s.provider == "yes" then + trunks:value( + "SIP/%s" % s['.name'], + "SIP/%s (%s)" %{ s['.name'], s.host or 'n/a' } + ) + end + end) + + + match = entry:option(DynamicList, "match", "Number matches") + + intl = entry:option(DynamicList, "international", "Intl. prefix matches (optional)") + + aprefix = entry:option(Value, "addprefix", "Add prefix to dial out (optional)") + ccode = entry:option(Value, "countrycode", "Effective countrycode (optional)") + + lzone = entry:option(ListValue, "localzone", "Dialzone for local numbers") + lzone:value("", "no special treatment of local numbers") + for _, z in ipairs(ast.dialzone.zones()) do + lzone:value(z.name, "%q (%s)" %{ z.name, z.description }) + end + --for _, v in ipairs(find_outgoing_contexts(zoneedit.uci)) do + -- lzone:value(unpack(v)) + --end + + lprefix = entry:option(Value, "localprefix", "Prefix for local calls (optional)") + + return zoneedit + +end diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua new file mode 100644 index 0000000..e409d70 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme.lua @@ -0,0 +1,38 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require "luci.asterisk" + +cbimap = Map("asterisk", "MeetMe - Rooms") + +meetme = cbimap:section(TypedSection, "meetme", "MeetMe Rooms") +meetme.addremove = true +meetme.anonymous = true +meetme.template = "cbi/tblsection" +meetme:option(Value, "_description", "Description", "Short room description") + +room = meetme:option(Value, "room", "Room Number", "Unique room identifier") + +function room.write(self, s, val) + if val and #val > 0 then + local old = self:cfgvalue(s) + self.map.uci:foreach("asterisk", "dialplanmeetme", + function(v) + if v.room == old then + self.map:set(v['.name'], "room", val) + end + end) + Value.write(self, s, val) + end +end + + +meetme:option(Value, "pin", "PIN", "PIN required to access") +meetme:option(Value, "adminpin", "Admin PIN", "PIN required for administration") + +function meetme.remove(self, s) + return ast.meetme.remove(self.map:get(s, "room"), self.map.uci) +end + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua new file mode 100644 index 0000000..9e5aed7 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/meetme_settings.lua @@ -0,0 +1,17 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +cbimap = Map("asterisk", "MeetMe - Common Settings", + "Common settings for MeetMe phone conferences.") + +meetme = cbimap:section(TypedSection, "meetmegeneral", "General MeetMe Options") +meetme.addremove = false +meetme.anonymous = true + +audiobuffers = meetme:option(ListValue, "audiobuffers", + "Number of 20ms audio buffers to use for conferences") + +for i = 2, 32 do audiobuffers:value(i) end + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua new file mode 100644 index 0000000..01dfc16 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phone_sip.lua @@ -0,0 +1,145 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +local function find_outgoing_contexts(uci) + local c = { } + local h = { } + + uci:foreach("asterisk", "dialplan", + function(s) + if not h[s['.name']] then + c[#c+1] = { s['.name'], "Dialplan: %s" % s['.name'] } + h[s['.name']] = true + end + end) + + return c +end + +local function find_incoming_contexts(uci) + local c = { } + local h = { } + + uci:foreach("asterisk", "sip", + function(s) + if s.context and not h[s.context] and + uci:get_bool("asterisk", s['.name'], "provider") + then + c[#c+1] = { s.context, "Incoming: %s" % s['.name'] or s.context } + h[s.context] = true + end + end) + + return c +end + + +-- +-- SIP phone info +-- +if arg[2] == "info" then + form = SimpleForm("asterisk", "SIP Phone Information") + form.reset = false + form.submit = "Back to overview" + + local info, keys = ast.sip.peer(arg[1]) + local data = { } + + for _, key in ipairs(keys) do + data[#data+1] = { + key = key, + val = type(info[key]) == "boolean" + and ( info[key] and "yes" or "no" ) + or ( info[key] == nil or #info[key] == 0 ) + and "(none)" + or tostring(info[key]) + } + end + + itbl = form:section(Table, data, "SIP Phone %q" % arg[1]) + itbl:option(DummyValue, "key", "Key") + itbl:option(DummyValue, "val", "Value") + + function itbl.parse(...) + luci.http.redirect( + luci.dispatcher.build_url("admin", "asterisk", "phones") + ) + end + + return form + +-- +-- SIP phone configuration +-- +elseif arg[1] then + cbimap = Map("asterisk", "Edit SIP Client") + + peer = cbimap:section(NamedSection, arg[1]) + peer.hidden = { + type = "friend", + qualify = "yes", + host = "dynamic", + nat = "no", + canreinvite = "no" + } + + back = peer:option(DummyValue, "_overview", "Back to phone overview") + back.value = "" + back.titleref = luci.dispatcher.build_url("admin", "asterisk", "phones") + + active = peer:option(Flag, "disable", "Account enabled") + active.enabled = "yes" + active.disabled = "no" + function active.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "yes" + end + + exten = peer:option(Value, "extension", "Extension Number") + cbimap.uci:foreach("asterisk", "dialplanexten", + function(s) + exten:value( + s.extension, + "%s (via %s/%s)" %{ s.extension, s.type:upper(), s.target } + ) + end) + + display = peer:option(Value, "callerid", "Display Name") + + username = peer:option(Value, "username", "Authorization ID") + password = peer:option(Value, "secret", "Authorization Password") + password.password = true + + regtimeout = peer:option(Value, "registertimeout", "Registration Time Value") + function regtimeout.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "60" + end + + sipport = peer:option(Value, "port", "SIP Port") + function sipport.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "5060" + end + + linekey = peer:option(ListValue, "_linekey", "Linekey Mode (broken)") + linekey:value("", "Off") + linekey:value("trunk", "Trunk Appearance") + linekey:value("call", "Call Appearance") + + dialplan = peer:option(ListValue, "context", "Assign Dialplan") + dialplan.titleref = luci.dispatcher.build_url("admin", "asterisk", "dialplans") + for _, v in ipairs(find_outgoing_contexts(cbimap.uci)) do + dialplan:value(unpack(v)) + end + + incoming = peer:option(StaticList, "incoming", "Receive incoming calls from") + for _, v in ipairs(find_incoming_contexts(cbimap.uci)) do + incoming:value(unpack(v)) + end + + --function incoming.cfgvalue(...) + --error(table.concat(MultiValue.cfgvalue(...),".")) + --end + + return cbimap +end diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua new file mode 100644 index 0000000..a6c44f9 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/phones.lua @@ -0,0 +1,104 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +cbimap = Map("asterisk", "Registered Phones") +cbimap.pageaction = false + +local sip_peers = { } +cbimap.uci:foreach("asterisk", "sip", + function(s) + if s.type ~= "peer" then + s.name = s['.name'] + s.info = ast.sip.peer(s.name) + sip_peers[s.name] = s + end + end) + + +sip_table = cbimap:section(TypedSection, "sip", "SIP Phones") +sip_table.template = "cbi/tblsection" +sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "phones", "sip", "%s") +sip_table.addremove = true + +function sip_table.filter(self, s) + return s and not cbimap.uci:get_bool("asterisk", s, "provider") +end + +function sip_table.create(self, section) + if TypedSection.create(self, section) then + created = section + cbimap.uci:tset("asterisk", section, { + type = "friend", + qualify = "yes", + provider = "no", + host = "dynamic", + nat = "no", + canreinvite = "no", + extension = section:match("^%d+$") and section or "", + username = section:match("^%d+$") and section or "" + }) + else + self.invalid_cts = true + end +end + +function sip_table.parse(self, ...) + TypedSection.parse(self, ...) + if created then + cbimap.uci:save("asterisk") + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "phones", "sip", created + )) + end +end + + +user = sip_table:option(DummyValue, "username", "Username") +function user.cfgvalue(self, s) + return sip_peers[s] and sip_peers[s].callerid or + AbstractValue.cfgvalue(self, s) +end + +host = sip_table:option(DummyValue, "host", "Hostname") +function host.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.address then + return "%s:%i" %{ sip_peers[s].info.address, sip_peers[s].info.port } + else + return "n/a" + end +end + +context = sip_table:option(DummyValue, "context", "Dialplan") +context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan") + +online = sip_table:option(DummyValue, "online", "Registered") +function online.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online == nil then + return "n/a" + else + return sip_peers[s] and sip_peers[s].info.online + and "yes" or "no (%s)" % { + sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown" + } + end +end + +delay = sip_table:option(DummyValue, "delay", "Delay") +function delay.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online then + return "%i ms" % sip_peers[s].info.delay + else + return "n/a" + end +end + +info = sip_table:option(Button, "_info", "Info") +function info.write(self, s) + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "phones", "sip", s, "info" + )) +end + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua new file mode 100644 index 0000000..eedc1c2 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunk_sip.lua @@ -0,0 +1,86 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +-- +-- SIP trunk info +-- +if arg[2] == "info" then + form = SimpleForm("asterisk", "SIP Trunk Information") + form.reset = false + form.submit = "Back to overview" + + local info, keys = ast.sip.peer(arg[1]) + local data = { } + + for _, key in ipairs(keys) do + data[#data+1] = { + key = key, + val = type(info[key]) == "boolean" + and ( info[key] and "yes" or "no" ) + or ( info[key] == nil or #info[key] == 0 ) + and "(none)" + or tostring(info[key]) + } + end + + itbl = form:section(Table, data, "SIP Trunk %q" % arg[1]) + itbl:option(DummyValue, "key", "Key") + itbl:option(DummyValue, "val", "Value") + + function itbl.parse(...) + luci.http.redirect( + luci.dispatcher.build_url("admin", "asterisk", "trunks") + ) + end + + return form + +-- +-- SIP trunk config +-- +elseif arg[1] then + cbimap = Map("asterisk", "Edit SIP Trunk") + + peer = cbimap:section(NamedSection, arg[1]) + peer.hidden = { + type = "peer", + qualify = "yes", + } + + back = peer:option(DummyValue, "_overview", "Back to trunk overview") + back.value = "" + back.titleref = luci.dispatcher.build_url("admin", "asterisk", "trunks") + + sipdomain = peer:option(Value, "host", "SIP Domain") + sipport = peer:option(Value, "port", "SIP Port") + function sipport.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "5060" + end + + username = peer:option(Value, "username", "Authorization ID") + password = peer:option(Value, "secret", "Authorization Password") + password.password = true + + outboundproxy = peer:option(Value, "outboundproxy", "Outbound Proxy") + outboundport = peer:option(Value, "outboundproxyport", "Outbound Proxy Port") + + register = peer:option(Flag, "register", "Register with peer") + register.enabled = "yes" + register.disabled = "no" + + regext = peer:option(Value, "registerextension", "Extension to register (optional)") + regext:depends({register="1"}) + + didval = peer:option(ListValue, "_did", "Number of assigned DID numbers") + didval:value("", "(none)") + for i=1,24 do didval:value(i) end + + dialplan = peer:option(ListValue, "context", "Dialplan Context") + dialplan:value(arg[1] .. "_inbound", "(default)") + cbimap.uci:foreach("asterisk", "dialplan", + function(s) dialplan:value(s['.name']) end) + + return cbimap +end diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua new file mode 100644 index 0000000..44c8ca8 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/trunks.lua @@ -0,0 +1,94 @@ +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require("luci.asterisk") + +cbimap = Map("asterisk", "Trunks") +cbimap.pageaction = false + +local sip_peers = { } +cbimap.uci:foreach("asterisk", "sip", + function(s) + if s.type == "peer" then + s.name = s['.name'] + s.info = ast.sip.peer(s.name) + sip_peers[s.name] = s + end + end) + + +sip_table = cbimap:section(TypedSection, "sip", "SIP Trunks") +sip_table.template = "cbi/tblsection" +sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "trunks", "sip", "%s") +sip_table.addremove = true +sip_table.sectionhead = "Extension" + +function sip_table.filter(self, s) + return s and ( + cbimap.uci:get("asterisk", s, "type") == nil or + cbimap.uci:get_bool("asterisk", s, "provider") + ) +end + +function sip_table.create(self, section) + if TypedSection.create(self, section) then + created = section + else + self.invalid_cts = true + end +end + +function sip_table.parse(self, ...) + TypedSection.parse(self, ...) + if created then + cbimap.uci:tset("asterisk", created, { + type = "friend", + qualify = "yes", + provider = "yes" + }) + + cbimap.uci:save("asterisk") + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "trunks", "sip", created + )) + end +end + + +user = sip_table:option(DummyValue, "username", "Username") + +context = sip_table:option(DummyValue, "context", "Dialplan") +context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan") +function context.cfgvalue(...) + return AbstractValue.cfgvalue(...) or "(default)" +end + +online = sip_table:option(DummyValue, "online", "Registered") +function online.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online == nil then + return "n/a" + else + return sip_peers[s] and sip_peers[s].info.online + and "yes" or "no (%s)" %{ + sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown" + } + end +end + +delay = sip_table:option(DummyValue, "delay", "Delay") +function delay.cfgvalue(self, s) + if sip_peers[s] and sip_peers[s].info.online then + return "%i ms" % sip_peers[s].info.delay + else + return "n/a" + end +end + +info = sip_table:option(Button, "_info", "Info") +function info.write(self, s) + luci.http.redirect(luci.dispatcher.build_url( + "admin", "asterisk", "trunks", "sip", s, "info" + )) +end + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua new file mode 100644 index 0000000..51143e6 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail.lua @@ -0,0 +1,48 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ast = require "luci.asterisk" + +cbimap = Map("asterisk", "Voicemail - Mailboxes") + +voicemail = cbimap:section(TypedSection, "voicemail", "Voicemail Boxes") +voicemail.addremove = true +voicemail.anonymous = true +voicemail.template = "cbi/tblsection" + +context = voicemail:option(ListValue, "context", "Context") +context:value("default") + +number = voicemail:option(Value, "number", + "Mailbox Number", "Unique mailbox identifier") + +function number.write(self, s, val) + if val and #val > 0 then + local old = self:cfgvalue(s) + self.map.uci:foreach("asterisk", "dialplanvoice", + function(v) + if v.voicebox == old then + self.map:set(v['.name'], "voicebox", val) + end + end) + Value.write(self, s, val) + end +end + + +voicemail:option(Value, "name", "Ownername", "Human readable display name") +voicemail:option(Value, "password", "Password", "Access protection") +voicemail:option(Value, "email", "eMail", "Where to send voice messages") +voicemail:option(Value, "page", "Pager", "Pager number") + +zone = voicemail:option(ListValue, "zone", "Timezone", "Used time format") +zone.titleref = luci.dispatcher.build_url("admin/asterisk/voicemail/settings") +cbimap.uci:foreach("asterisk", "voicezone", + function(s) zone:value(s['.name']) end) + +function voicemail.remove(self, s) + return ast.voicemail.remove(self.map:get(s, "number"), self.map.uci) +end + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua new file mode 100644 index 0000000..ef52a32 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/model/cbi/asterisk/voicemail_settings.lua @@ -0,0 +1,51 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require "luci.sys.zoneinfo" + + +cbimap = Map("asterisk", "Voicemail - Common Settings") + +voicegeneral = cbimap:section(TypedSection, "voicegeneral", + "General Voicemail Options", "Common settings for all mailboxes are " .. + "defined here. Most of them are optional. The storage format should " .. + "never be changed once set.") + +voicegeneral.anonymous = true +voicegeneral.addremove = false + +format = voicegeneral:option(MultiValue, "Used storage formats") +format.widget = "checkbox" +format:value("wav49") +format:value("gsm") +format:value("wav") + +voicegeneral:option(Flag, "sendvoicemail", "Enable sending of emails") +voicegeneral:option(Flag, "attach", "Attach voice messages to emails") +voicegeneral:option(Value, "serveremail", "Used email sender address") +voicegeneral:option(Value, "emaildateformat", "Date format used in emails").optional = true +voicegeneral:option(Value, "maxlogins", "Max. failed login attempts").optional = true +voicegeneral:option(Value, "maxmsg", "Max. allowed messages per mailbox").optional = true +voicegeneral:option(Value, "minmessage", "Min. number of seconds for voicemail").optional = true +voicegeneral:option(Value, "maxmessage", "Max. number of seconds for voicemail").optional = true +voicegeneral:option(Value, "maxsilence", "Seconds of silence until stop recording").optional = true +voicegeneral:option(Value, "maxgreet", "Max. number of seconds for greetings").optional = true +voicegeneral:option(Value, "skipms", "Milliseconds to skip for rew./ff.").optional = true +voicegeneral:option(Value, "silencethreshold", "Threshold to detect silence").optional = true + + +voicezone = cbimap:section(TypedSection, "voicezone", "Time Zones", + "Time zones define how dates and times are expressen when used in " .. + "an voice mails. Refer to the asterisk manual for placeholder values.") + +voicezone.addremove = true +voicezone.sectionhead = "Name" +voicezone.template = "cbi/tblsection" + +tz = voicezone:option(ListValue, "zone", "Location") +for _, z in ipairs(luci.sys.zoneinfo.TZ) do tz:value(z[1]) end + +voicezone:option(Value, "message", "Date Format") + + +return cbimap diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm b/feeds/luci/applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm new file mode 100644 index 0000000..3afb26b --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/view/asterisk/cbi/cell.htm @@ -0,0 +1,13 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+cbi/valueheader%> +<% if self.href then %><% end -%> + <%=self:cfgvalue(section)%> +<%- if self.href then %><%end%> +  + +<%+cbi/valuefooter%> diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm b/feeds/luci/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm new file mode 100644 index 0000000..9f644ba --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm @@ -0,0 +1,245 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +<% + local uci = luci.model.uci.cursor_state() + local ast = require "luci.asterisk" + + function digit_pattern(s,t) + return "%s" + %{ t and " title='" .. t .. "'" or "", s } + end + + function rowstyle(i) + return "cbi-rowstyle-%i" %{ + ( i % 2 ) == 0 and 2 or 1 + } + end + + function format_matches(z) + local html = { } + + if type(z) ~= "table" then + z = { matches = { z } } + end + + if z.localprefix then + for _, m in ipairs(z.matches) do + html[#html+1] = + digit_pattern(z.localprefix, "local prefix") .. " " .. + digit_pattern(m) + end + end + + if z.intlmatches and #z.intlmatches > 0 then + for _, i in ipairs(z.intlmatches) do + for _, m in ipairs(z.matches) do + html[#html+1] = "%s %s" %{ + digit_pattern("(%s)" % i, "intl. prefix"), + digit_pattern(m) + } + end + end + else + for _, m in ipairs(z.matches) do + html[#html+1] = digit_pattern(m) + end + end + + return table.concat(html, "; ") + end +%> + + +
+
+ + + +
+ +
+

Outgoing Call Routing

+
+ Here you can manage your dial plans which are used to route outgoing calls from your local extensions.

+ Related tasks:
+ Manage dialzones | + Manage voicemail boxes | + Manage meetme rooms +
+ +
+ +
+ + <% for i, plan in pairs(ast.dialplan.plans()) do %> +
+ + + + + + + + <% local zones_used = { }; local row = 0 %> + <% for i, zone in ipairs(plan.zones) do zones_used[zone.name] = true %> + + + + + <% row = row + 1; end %> + + + + <% local boxes_used = { } %> + <% for ext, box in luci.util.kspairs(plan.voicemailboxes) do boxes_used[box.id] = true %> + + + + + <% row = row + 1; end %> + + + + <% local rooms_used = { } %> + <% for ext, room in luci.util.kspairs(plan.meetmerooms) do rooms_used[room.room] = true %> + + + + + <% row = row + 1; end %> + + + + + + +
+ Dialplan <%=plan.name%> + + + Remove this dialplan + +
+ └ Dialzone <%=zone.name%> (<%=zone.description%>) +

+ Lines: + <%=ast.tools.hyperlinks( + zone.trunks, function(v) + return luci.dispatcher.build_url("admin", "asterisk", "trunks", "%s") % v:lower() + end + )%>
+ Matches: + <%=format_matches(zone)%> +

+
+ + Edit dialzone + + + Remove from this dialplan + +
+ └ Voicemailbox <%=box.id%> (<%=box.name%>) +

+ Owner: <%=box.name%> | + eMail: <%=#box.email > 0 and box.email or 'n/a'%> | + Pager: <%=#box.page > 0 and box.page or 'n/a'%>
+ Matches: <%=format_matches(ext)%> +

+
+ + Manage mailboxes ... + + + Remove from this dialplan + +
+ └ MeetMe Room <%=room.room%> + <% if room.description and #room.description > 0 then %> (<%=room.description%>)<% end %> +

+ Matches: <%=format_matches(ext)%> +

+
+ + Manage conferences ... + + + Remove from this dialplan + +
+
+ + Add Dialzone:
+ +

+ + Add Voicemailbox:
+ + as extension + +

+ + Add MeetMe Conference:
+ + as extension + +

+ + +
+ +
+
+
+ <% end %> + +
+
+

Create a new dialplan

+ The name is required and must be unique. It may only contain the characters A-Z, a-z, 0-9 and _ .
+ + <%- if create_error then %> +
Invalid name given!
+ <% end -%> + +
+ + +
+
+ +
+
+
+
+<%+footer%> diff --git a/feeds/luci/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm b/feeds/luci/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm new file mode 100644 index 0000000..ffdbbcf --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm @@ -0,0 +1,165 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +<% + local uci = luci.model.uci.cursor_state() + local ast = require("luci.asterisk") + + function digit_pattern(s) + return "%s" % s + end + + function rowstyle(i) + return "cbi-rowstyle-%i" %{ + ( i % 2 ) == 0 and 2 or 1 + } + end + + local function find_trunks() + local t = { } + + uci:foreach("asterisk", "sip", + function(s) + if uci:get_bool("asterisk", s['.name'], "provider") then + t[#t+1] = { + "SIP/%s" % s['.name'], + "SIP: %s" % s['.name'] + } + end + end) + + uci:foreach("asterisk", "iax", + function(s) + t[#t+1] = { + "IAX/%s" % s['.name'], + "IAX: %s" % s.extension or s['.name'] + } + end) + + return t + end + +%> + + +
+
+ + + +
+ +
+

Dial Zone Management

+
+ " class="cbi-title-ref">Back to dialplan overview

+ Here you can manage your dial zones. The zones are used to route outgoing calls to the destination. + Each zone groups multiple trunks and number matches to represent a logical destination. Zones can + also be used to enforce certain dial restrictions on selected extensions. +
+ + +
+
+ + + + + + + + + + + + + + + <% for i, rule in pairs(ast.dialzone.zones()) do %> + + + + + + + + + <% end %> +
+

Dialzone Overview

+
NamePrepend- MatchTrunkDescription
+ <%=rule.name%> + + <% for _ in ipairs(rule.matches) do %> + <%=rule.addprefix and digit_pattern(rule.addprefix)%> 
+ <% end %> +
+ <% for _, m in ipairs(rule.matches) do %> + <%=rule.localprefix and "%s " % digit_pattern(rule.localprefix)%> + <%=digit_pattern(m)%>
+ <% end %> +
+ <%=ast.tools.hyperlinks( + rule.trunks, function(v) + return luci.dispatcher.build_url("admin", "asterisk", "trunks", "%s") % v:lower() + end + )%> + + <%=rule.description or rule.name%> + + + Edit entry + + + Delete entry + +
+
+
+
+ +
+
+

Create a new dialzone

+ The name is required and must be unique. It may only contain the characters A-Z, a-z, 0-9 and _ .
+ You can specifiy multiple number matches by separating them with spaces.
+ + <%- if create_error then %> +
Invalid name given!
+ <% end -%> + + + + + + +
+
+ +

+ +
+ +
+
+ +
+
+ + +
+
+
+
+
+
+<%+footer%> diff --git a/feeds/luci/applications/luci-app-asterisk/po/ca/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/ca/asterisk.po new file mode 100644 index 0000000..aa53443 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/ca/asterisk.po @@ -0,0 +1,680 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2009-05-31 19:18+0200\n" +"Last-Translator: Eduard Duran \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Opcions Generals d'Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Directori AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Desa en memòria cau els sons gravats durant la gravació" + +#~ msgid "Debug Level" +#~ msgstr "Nivell de depuració" + +#~ msgid "Disable some warnings" +#~ msgstr "Desactiva algunes alertes" + +#~ msgid "Dump core on crash" +#~ msgstr "Bolca el nucli en cas de fallada" + +#~ msgid "High Priority" +#~ msgstr "Alta Prioritat" + +#~ msgid "Initialise Crypto" +#~ msgstr "Inicialitza Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Utilitza l'hora interna" + +#~ msgid "Log directory" +#~ msgstr "Directori de registres" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Número màxim de trucades permeses" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Càrrega màxima per deixar d'acceptar trucades noves" + +#~ msgid "Disable console colors" +#~ msgstr "Desactiva els colors de consola" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Directori de memòria cau dels fitxers de so" + +#~ msgid "The Group to run as" +#~ msgstr "Executa amb els permisos del Grup" + +#~ msgid "The User to run as" +#~ msgstr "Executa amb els permisos de l'Usuari" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Directori de bústia de correu" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefixa l'UniquID amb el nom del sistema" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Munta les rutes de transcodificació via SLINEAR, no directament" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmet silenci SLINEAR mentre s'enregistri un canal" + +#~ msgid "Verbose Level" +#~ msgstr "Nivell de detall" + +#~ msgid "Section dialplan" +#~ msgstr "Secció Dialplan" + +#~ msgid "include" +#~ msgstr "inclou" + +#~ msgid "Dialplan Extension" +#~ msgstr "Connector Dialplan" + +#~ msgid "Dialplan General Options" +#~ msgstr "Opcions generals de Dialplan" + +#~ msgid "Allow transfer" +#~ msgstr "Permet la transferència" + +#~ msgid "Clear global vars" +#~ msgstr "Buida les variables globals" + +#~ msgid "Dialplan Goto" +#~ msgstr "Dialplan Goto" + +#~ msgid "Dialplan Conference" +#~ msgstr "Conferència Dialplan" + +#~ msgid "Dialplan Time" +#~ msgstr "Dialplan Time" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Bústia de correu Dialplan" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Zones de marcatge per Dialplan" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Prefix per afegir als Dialplan que coincideixin" + +#~ msgid "Match International prefix" +#~ msgstr "Coincideix amb el prefix Internacional" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Prefix (0) per afegir/esborrar a/des de números internacionals" + +#~ msgid "localzone" +#~ msgstr "zona local" + +#~ msgid "Match plan" +#~ msgstr "Pla coincident" + +#~ msgid "Connection to use" +#~ msgstr "Connexió a fer servir" + +#~ msgid "Feature Key maps" +#~ msgstr "Mapa de Funcions Principals" + +#~ msgid "Attended transfer key" +#~ msgstr "Tecla de transferència assistida" + +#~ msgid "Blind transfer key" +#~ msgstr "Tecla de transferència cega" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Tecla per desconnectar trucada" + +#~ msgid "Key to Park call" +#~ msgstr "Tecla per trucada en espera" + +#~ msgid "Parking Feature" +#~ msgstr "Funció de trucada en espera" + +#~ msgid "ADSI Park" +#~ msgstr "Trucada en espera ADSI" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Temps d'espera de transferència assistida (seg)" + +#~ msgid "One touch record key" +#~ msgstr "Tecla de registre d'un toc" + +#~ msgid "Name of call context for parking" +#~ msgstr "Nom del context de la trucada en espera" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Fitxer de so per reproduir a la trucada en espera" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Temps màxim (en ms) entre dígits per l'activació de funció" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Mètode per trobar una ranura de trucada en espera" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Reprodueix to de cortesia a" + +#~ msgid "Enable Parking" +#~ msgstr "Activa les trucades en espera" + +#~ msgid "Extension to dial to park" +#~ msgstr "Extensió per marcar per deixar en espera una trucada" + +#~ msgid "Parking time (secs)" +#~ msgstr "Temps de trucada en espera (secs)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Rang d'extensions per trucada en espera" + +#~ msgid "Pickup extension" +#~ msgstr "Connector de recol·lecció" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Segons a esperar entre dígits quan es transfereix" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "so quan es completa la transferència assistida" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "so quan falla la transferència assitida" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Recarrega la configuració de maquinari" + +#~ msgid "Reboot Method" +#~ msgstr "Mètode de Reinici" + +#~ msgid "Parameter" +#~ msgstr "Paràmetre" + +#~ msgid "Option type" +#~ msgstr "Tipus d'opció" + +#~ msgid "User name" +#~ msgstr "Nom d'usuari" + +#~ msgid "IAX General Options" +#~ msgstr "Opcions generals IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Permet Codecs" + +#~ msgid "Static" +#~ msgstr "Estàtic" + +#~ msgid "Write Protect" +#~ msgstr "Protecció d'escriptura" + +#~ msgid "Meetme Conference" +#~ msgstr "Conferència Meetme" + +#~ msgid "Admin PIN" +#~ msgstr "PIN d'administrador" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN de reunió" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Opcions generals de conferència Meetme" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Número de memòries intermitges d'àudio de 20 ms a utilitzar" + +#~ msgid "Modules" +#~ msgstr "Mòduls" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Aplicació de recepció d'alarma" + +#~ msgid "Authentication Application" +#~ msgstr "Aplicació d'autenticació" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Assegura't que asterisk no desa CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Comprova que el canal estigui disponible" + +#~ msgid "Listen in on any channel" +#~ msgstr "Escolta a qualsevol canal" + +#~ msgid "Control Playback Application" +#~ msgstr "Aplicació de control de reproducció" + +#~ msgid "Cuts up variables" +#~ msgstr "Talla les variables" + +#~ msgid "Database access functions" +#~ msgstr "Funcions d'accés a base de dades" + +#~ msgid "Dialing Application" +#~ msgstr "Aplicació de marcatge" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Aplicació de màquina de dictat virtual" + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Suport de recollida de trucades adreçades" + +#~ msgid "Extension Directory" +#~ msgstr "Directori de connectors" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "Aplicació DISA (Direct Inward System Access)" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Bolca les variables de canal de l'aplicació" + +#~ msgid "Simple Echo Application" +#~ msgstr "Aplicació d'eco simple" + +#~ msgid "ENUM Lookup" +#~ msgstr "Consulta ENUM" + +#~ msgid "Reevaluates strings" +#~ msgstr "Reavalua cadenes" + +#~ msgid "Executes applications" +#~ msgstr "Executa aplicacions" + +#~ msgid "External IVR application interface" +#~ msgstr "Interfície d'aplicació IVR externa" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Bifurca el CDR en 2 entitats separades" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Obtingues la ADSI CPE ID" + +#~ msgid "Group Management Routines" +#~ msgstr "Rutines de gestió de grup" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Codifica i emet via icecast i ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Aplicació de transmissió d'imatge" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Cerca la ID/nom/número de qui truca de negre" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Cerca la ID/nom/número de qui truca de la base de dades local" + +#~ msgid "Extension Macros" +#~ msgstr "Macros de connectors" + +#~ msgid "A simple math Application" +#~ msgstr "Una aplicació de matemàtiques simple" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Aplicació de suma de verificació MD5" + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Aplicació de prova de milliwat digital (mu-law)" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Registra una trucada i mescla l'àudio durant la gravació" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Aplicació d'anunci de trucades i trucada en espera" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Aplicació de reproducció trivial" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Requereix que s'entri un número de telèfon" + +#~ msgid "True Call Queueing" +#~ msgstr "Encuament de trucades real" + +#~ msgid "Random goto" +#~ msgstr "Goto aleatori" + +#~ msgid "Read Variable Application" +#~ msgstr "Aplicació de lectura de variables" + +#~ msgid "Read in a file" +#~ msgstr "Llegeix en un fitxer" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Cerca/reescriptura de dades en temps real" + +#~ msgid "Trivial Record Application" +#~ msgstr "Aplicació d'enregistrament trivial" + +#~ msgid "Say time" +#~ msgstr "Digues l'hora" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Envia aplicació de dígits DTMF" + +#~ msgid "Send Text Applications" +#~ msgstr "Envia aplicacions de text" + +#~ msgid "Set CallerID Application" +#~ msgstr "Estableix l'aplicació CallerID" + +#~ msgid "CDR user field apps" +#~ msgstr "Aplicacions de camp d'usuari CDR" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "load => .so ; Estableix el nom CallerID" + +#~ msgid "load => .so ; Set CallerID Number" +#~ msgstr "load => .so ; Estableix el número CallerID" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Estableix el número RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Estableix la capacitat de transferència XDSI" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "Gestor SMS/PSTN" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Penja el canal sol·licitat" + +#~ msgid "Stack Routines" +#~ msgstr "Rutines de pila" + +#~ msgid "Generic System() application" +#~ msgstr "Aplicació genèrica de System()" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Playback amb Detecció de Parla" + +#~ msgid "Interface Test Application" +#~ msgstr "Aplicació de proves d'interfície" + +#~ msgid "Transfer" +#~ msgstr "Transfereix" + +#~ msgid "TXTCIDName" +#~ msgstr "TXTCIDName" + +#~ msgid "Send URL Applications" +#~ msgstr "Envia aplicacions d'URL" + +#~ msgid "Custom User Event Application" +#~ msgstr "Aplicació d'esdeveniments personalitzats d'usuari" + +#~ msgid "Send verbose output" +#~ msgstr "Envia sortida detallada" + +#~ msgid "Voicemail" +#~ msgstr "Bústia de veu" + +#~ msgid "Waits until first ring after time" +#~ msgstr "Espera fins el primer to després del temps" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Espera l'aplicació de silenci" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "Execució de bucles while i condicionals" + +#~ msgid "Comma Separated Values CDR Backend" +#~ msgstr "Valors de Backend CDR separats per comes" + +#~ msgid "Customizable Comma Separated Values CDR Backend" +#~ msgstr "Valors de Backend CDR personalitzats separats per comes" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Backend CDR del gestor de trucades Asterisk" + +#~ msgid "MySQL CDR Backend" +#~ msgstr "Backend CDR MySQL" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "Backend CDR PostgreSQL" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "Backend CDR SQLite" + +#~ msgid "Agent Proxy Channel" +#~ msgstr "Canal de l'Agent Proxy" + +#~ msgid "Option chan_iax2" +#~ msgstr "Opció chan_iax2" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Canal de proxy local" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Protocol d'inicialització de sessió (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Codificador/Decodificador PCM adaptatiu diferencial" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "Codificador/Decodificador de llei A" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "Codificador/Decodificador directe de llei A i Mu" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "Transcodificador ITU G.726-32kbps G726" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "Còdec de traducció GSM/PCM16 (lineal amb signe)" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Còdec de traducció Speex/PCM16 (lineal amb signe)" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Codificador/Decodificador llei Mu" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Format AU de Sun Microsystems (lineal amb signe)" + +#~ msgid "G.723.1 Simple Timestamp File Format" +#~ msgstr "Format de fitxer de marca de temps simple G.723.1" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Dades Raw G.726 (16/24/32/40kbps)" + +#~ msgid "Raw G729 data" +#~ msgstr "Dades Raw G729" + +#~ msgid "Raw GSM data" +#~ msgstr "Dades Raw GSM" + +#~ msgid "Raw h263 data" +#~ msgstr "Dades Raw h263" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "Imatge JPEG (Joint Picture Experts Group)" + +#~ msgid "Raw uLaw 8khz Audio support (PCM)" +#~ msgstr "Suport d'àudio Raw llei-u 8khz (PCM)" + +#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support" +#~ msgstr "load => .so ; suport d'àudio Raw llei-a 8khz PCM" + +#~ msgid "Raw Signed Linear Audio support (SLN)" +#~ msgstr "Suport d'àudio Raw amb signe lineal (SLN)" + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Format de fitxer Dialogic VOX (ADPCM)" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Format Microsoft WAV (8000hz amb signe lineal)" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Format Microsoft WAV (GSM propietari)" + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "Functions de dialplan relacionades amb la ID de qui truca" + +#~ msgid "ENUM Functions" +#~ msgstr "Funcions ENUM" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "Funcions de codificació / decodificació d'URI" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Compilador del llenguatge de connectors d'Asterisk" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Configuració del connector de text" + +#~ msgid "load => .so ; Builtin dialplan functions" +#~ msgstr "load => .s ; Funcions integrades dialplan" + +#~ msgid "Loopback Switch" +#~ msgstr "Switch loopback" + +#~ msgid "Realtime Switch" +#~ msgstr "Switch en temps real" + +#~ msgid "Outgoing Spool Support" +#~ msgstr "Suport de gestió de cues sortint" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Wil Cal U (Auto Marcatge)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "Configuració del recurs MySQL" + +#~ msgid "ODBC Config Resource" +#~ msgstr "Configuració del recurs ODBC" + +#~ msgid "PGSQL Module" +#~ msgstr "Mòdul PGSQL" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Signatures digitals criptogràfiques" + +#~ msgid "Call Parking Resource" +#~ msgstr "Recurs de trucada en espera" + +#~ msgid "Indications Configuration" +#~ msgstr "Configuració d'indicacions" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Recurs de monitoreig de trucades" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Recurs de música en espera" + +#~ msgid "ODBC Resource" +#~ msgstr "Recurs ODBC" + +#~ msgid "SMDI Module" +#~ msgstr "Mòdul SMDI" + +#~ msgid "SNMP Module" +#~ msgstr "Mòdul SNMP" + +#~ msgid "Music On Hold" +#~ msgstr "Música en espera" + +#~ msgid "Application" +#~ msgstr "Aplicació" + +#~ msgid "Directory of Music" +#~ msgstr "Directori de música" + +#~ msgid "Option mode" +#~ msgstr "Mode d'opció" + +#~ msgid "Random Play" +#~ msgstr "Reproducció aleatòria" + +#~ msgid "DTMF mode" +#~ msgstr "Mode DTMF" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Domini d'identitat primari per les capçaleres From:" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "Usuari d'inici (requerit per diversos proveïdors SIP)" + +#~ msgid "Ring on incoming dialplan contexts" +#~ msgstr "Truca en contextos d'entrades dialplan" + +#~ msgid "Allow Insecure for" +#~ msgstr "Permet insegur per" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Bústia de veu per MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT entre el telèfon i l'Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Comprova etiquetes a les capçaleres" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Temps d'esperi per contestar (ms) per caigudes de connexió" + +#~ msgid "Register connection" +#~ msgstr "Registra connexió" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "Truca el propi connector per la bústia de veu" + +#~ msgid "Client Type" +#~ msgstr "Tipus de client" + +#~ msgid "Username" +#~ msgstr "Nom d'usuari" + +#~ msgid "Section sipgeneral" +#~ msgstr "Secció sipgeneral" + +#~ msgid "Allow codecs" +#~ msgstr "Permet còdecs" + +#~ msgid "SIP realm" +#~ msgstr "Reialme SIP" + +#~ msgid "Voicemail general options" +#~ msgstr "Opcions generals de bústia de veu" + +#~ msgid "From Email address of server" +#~ msgstr "Adreça de correu electrònic d'origen del servidor" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Bústies de la bústia de veu" + +#~ msgid "Email contains attachment" +#~ msgstr "El correu electrònic conté fitxers adjunts" + +#~ msgid "Email" +#~ msgstr "Correu electrònic" + +#~ msgid "Display Name" +#~ msgstr "Nom a mostrar" + +#~ msgid "Password" +#~ msgstr "Contrasenya" + +#~ msgid "zone" +#~ msgstr "zona" + +#~ msgid "Voice Zone settings" +#~ msgstr "Configuració de zona de veu" + +#~ msgid "Message Format" +#~ msgstr "Format de missatge" diff --git a/feeds/luci/applications/luci-app-asterisk/po/cs/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/cs/asterisk.po new file mode 100644 index 0000000..7341d57 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/cs/asterisk.po @@ -0,0 +1,11 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" diff --git a/feeds/luci/applications/luci-app-asterisk/po/de/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/de/asterisk.po new file mode 100644 index 0000000..f289849 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/de/asterisk.po @@ -0,0 +1,131 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2012-02-23 16:29+0200\n" +"Last-Translator: Martin \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Asterisk Grundeinstellungen" + +#~ msgid "AGI directory" +#~ msgstr "AGI - Verzeichnis" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Audiodateien während der Aufnahme zwischenspeichern" + +#~ msgid "Debug Level" +#~ msgstr "Debug Stufe" + +#~ msgid "Disable some warnings" +#~ msgstr "Schalte einige Warnungen aus" + +#~ msgid "Dump core on crash" +#~ msgstr "Speicherabbild bei Absturz erstellen" + +#~ msgid "High Priority" +#~ msgstr "Hohe Priorität" + +#~ msgid "Initialise Crypto" +#~ msgstr "Verschlüsselung initialisieren" + +#~ msgid "Use Internal Timing" +#~ msgstr "Interne Zeitreferenz benutzen" + +#~ msgid "Log directory" +#~ msgstr "Log - Verzeichnis" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Maximale Anruferanzahl" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Maximale CPU Auslastung um eingehende Anrufe anzunehmen" + +#~ msgid "Disable console colors" +#~ msgstr "Farbige Ausgabe auf der Konsole deaktivieren" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Verzeichnis zum Zwischenspeichern von Audiodateien" + +#~ msgid "The Group to run as" +#~ msgstr "zu benutzende Gruppenkennung" + +#~ msgid "The User to run as" +#~ msgstr "zu benutzende Benutzerkennung" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Sprachnachrichten Puffer" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Systemnamen als Präfix von UniquID benutzen" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Transcode Pfade durch SLINEAR bauen, indirekt" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Übertrage Stille (SLINEAR) während der Aufnahme eines Kanals" + +#~ msgid "Verbose Level" +#~ msgstr "Detailgrad" + +#~ msgid "Allow transfer" +#~ msgstr "Übertragung erlauben" + +#~ msgid "Clear global vars" +#~ msgstr "globale Variablen Zurücksetzen" + +#~ msgid "localzone" +#~ msgstr "Zeitzone" + +#~ msgid "Connection to use" +#~ msgstr "zu verwendende Verbindung" + +#~ msgid "One touch record key" +#~ msgstr "Sofortaufnahmetaste" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Hardwarekonfiguration neuladen" + +#~ msgid "Reboot Method" +#~ msgstr "Neustartmethode" + +#~ msgid "Parameter" +#~ msgstr "Parameter" + +#~ msgid "User name" +#~ msgstr "Benutzername" + +#~ msgid "IAX General Options" +#~ msgstr "IAX Allgemeine Einstellungen" + +#~ msgid "Allow Codecs" +#~ msgstr "Codecs erlauben" + +#~ msgid "Admin PIN" +#~ msgstr "Admin PIN" + +#~ msgid "Modules" +#~ msgstr "Module" + +#~ msgid "Check if channel is available" +#~ msgstr "Prüfen, ob der Kanal verfügbar ist" + +#~ msgid "Control Playback Application" +#~ msgstr "Anwendung zur Wiedergabesteuerung" + +#~ msgid "Executes applications" +#~ msgstr "startet Anwendungen" + +#~ msgid "A simple math Application" +#~ msgstr "Einfache Mathe-Anwendung" + +#~ msgid "MD5 checksum Application" +#~ msgstr "MD5-Prüfsummen Anwendung" diff --git a/feeds/luci/applications/luci-app-asterisk/po/el/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/el/asterisk.po new file mode 100644 index 0000000..7a0fee7 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/el/asterisk.po @@ -0,0 +1,71 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-03-19 14:55+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Γενικές επιλογές του Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Φάκελος AGI" + +#~ msgid "Debug Level" +#~ msgstr "Επίπεδο αποσφαλμάτωσης" + +#~ msgid "Disable some warnings" +#~ msgstr "Απενεργοποίηση ορισμένων μηνυμάτων" + +#~ msgid "High Priority" +#~ msgstr "Υψηλή Προτεραιότητα" + +#~ msgid "Initialise Crypto" +#~ msgstr "Αρχικοποίηση Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Χρήση εσωτερικού χρονόμετρου" + +#~ msgid "Log directory" +#~ msgstr "Φάκελος καταγραφής" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Μέγιστος επιτρεπόμενος αριθμός κλήσεων" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Μέγιστος φόρτος για παύση εισερχόμενων κλήσεων" + +#~ msgid "Disable console colors" +#~ msgstr "Απενεργοποίηση χρωμάτων κονσόλας" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Κρυφός φάκελος αρχείων ήχου" + +#~ msgid "include" +#~ msgstr "περιλαμβάνω" + +#~ msgid "Clear global vars" +#~ msgstr "Καθαρισμός γενικών μεταβλητών" + +#~ msgid "Connection to use" +#~ msgstr "Χρήση σύνδεσης" + +#~ msgid "Reboot Method" +#~ msgstr "Μέθοδος Επανεκκίνησης" + +#~ msgid "Parameter" +#~ msgstr "Παράμετρος" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "Εικόνα JPEG (Joint Picture Experts Group)" + +#~ msgid "Application" +#~ msgstr "Εφαρμογή" diff --git a/feeds/luci/applications/luci-app-asterisk/po/en/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/en/asterisk.po new file mode 100644 index 0000000..fc09508 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/en/asterisk.po @@ -0,0 +1,680 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:35+0200\n" +"PO-Revision-Date: 2011-06-03 10:45+0200\n" +"Last-Translator: Ladislav \n" +"Language-Team: LANGUAGE \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Asterisk General Options" + +#~ msgid "AGI directory" +#~ msgstr "AGI directory" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Cache recorded sound files during recording" + +#~ msgid "Debug Level" +#~ msgstr "Debug Level" + +#~ msgid "Disable some warnings" +#~ msgstr "Disable some warnings" + +#~ msgid "Dump core on crash" +#~ msgstr "Dump core on crash" + +#~ msgid "High Priority" +#~ msgstr "High Priority" + +#~ msgid "Initialise Crypto" +#~ msgstr "Initialise Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Use Internal Timing" + +#~ msgid "Log directory" +#~ msgstr "Log directory" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Maximum number of calls allowed" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Maximum load to stop accepting new calls" + +#~ msgid "Disable console colors" +#~ msgstr "Disable console colors" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Sound files Cache directory" + +#~ msgid "The Group to run as" +#~ msgstr "The Group to run as" + +#~ msgid "The User to run as" +#~ msgstr "The User to run as" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Voicemail Spool directory" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefix UniquID with system name" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Build transcode paths via SLINEAR, not directly" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmit SLINEAR silence while recording a channel" + +#~ msgid "Verbose Level" +#~ msgstr "Verbose Level" + +#~ msgid "Section dialplan" +#~ msgstr "Section dialplan" + +#~ msgid "include" +#~ msgstr "include" + +#~ msgid "Dialplan Extension" +#~ msgstr "Dialplan Extension" + +#~ msgid "Dialplan General Options" +#~ msgstr "Dialplan General Options" + +#~ msgid "Allow transfer" +#~ msgstr "Allow transfer" + +#~ msgid "Clear global vars" +#~ msgstr "Clear global vars" + +#~ msgid "Dialplan Goto" +#~ msgstr "Dialplan Goto" + +#~ msgid "Dialplan Conference" +#~ msgstr "Dialplan Conference" + +#~ msgid "Dialplan Time" +#~ msgstr "Dialplan Time" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Dialplan Voicemail" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Dial Zones for Dialplan" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Prefix to add matching dialplans" + +#~ msgid "Match International prefix" +#~ msgstr "Match International prefix" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Prefix (0) to add/remove to/from international numbers" + +#~ msgid "localzone" +#~ msgstr "localzone" + +#~ msgid "Match plan" +#~ msgstr "Match plan" + +#~ msgid "Connection to use" +#~ msgstr "Connection to use" + +#~ msgid "Feature Key maps" +#~ msgstr "Feature Key maps" + +#~ msgid "Attended transfer key" +#~ msgstr "Attended transfer key" + +#~ msgid "Blind transfer key" +#~ msgstr "Blind transfer key" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Key to Disconnect call" + +#~ msgid "Key to Park call" +#~ msgstr "Key to Park call" + +#~ msgid "Parking Feature" +#~ msgstr "Parking Feature" + +#~ msgid "ADSI Park" +#~ msgstr "ADSI Park" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Attended transfer timeout (sec)" + +#~ msgid "One touch record key" +#~ msgstr "One touch record key" + +#~ msgid "Name of call context for parking" +#~ msgstr "Name of call context for parking" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Sound file to play to parked caller" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Max time (ms) between digits for feature activation" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Method to Find Parking slot" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Play courtesy tone to" + +#~ msgid "Enable Parking" +#~ msgstr "Enable Parking" + +#~ msgid "Extension to dial to park" +#~ msgstr "Extension to dial to park" + +#~ msgid "Parking time (secs)" +#~ msgstr "Parking time (secs)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Range of extensions for call parking" + +#~ msgid "Pickup extension" +#~ msgstr "Pickup extension" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Seconds to wait between digits when transferring" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "sound when attended transfer is complete" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "Sound when attended transfer fails" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Reload Hardware Config" + +#~ msgid "Reboot Method" +#~ msgstr "Reboot Method" + +#~ msgid "Parameter" +#~ msgstr "Parameter" + +#~ msgid "Option type" +#~ msgstr "Option type" + +#~ msgid "User name" +#~ msgstr "User name" + +#~ msgid "IAX General Options" +#~ msgstr "IAX General Options" + +#~ msgid "Allow Codecs" +#~ msgstr "Allow Codecs" + +#~ msgid "Static" +#~ msgstr "Static" + +#~ msgid "Write Protect" +#~ msgstr "Write Protect" + +#~ msgid "Meetme Conference" +#~ msgstr "Meetme Conference" + +#~ msgid "Admin PIN" +#~ msgstr "Admin PIN" + +#~ msgid "Meeting PIN" +#~ msgstr "Meeting PIN" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Meetme Conference General Options" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Number of 20ms audio buffers to be used" + +#~ msgid "Modules" +#~ msgstr "Modules" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Alarm Receiver Application" + +#~ msgid "Authentication Application" +#~ msgstr "Authentication Application" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Make sure asterisk doesn't save CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Check if channel is available" + +#~ msgid "Listen in on any channel" +#~ msgstr "Listen in on any channel" + +#~ msgid "Control Playback Application" +#~ msgstr "Control Playback Application" + +#~ msgid "Cuts up variables" +#~ msgstr "Cuts up variables" + +#~ msgid "Database access functions" +#~ msgstr "Database access functions" + +#~ msgid "Dialing Application" +#~ msgstr "Dialing Application" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Virtual Dictation Machine Application" + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Directed Call Pickup Support" + +#~ msgid "Extension Directory" +#~ msgstr "Extension Directory" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "DISA (Direct Inward System Access) Application" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Dump channel variables Application" + +#~ msgid "Simple Echo Application" +#~ msgstr "Simple Echo Application" + +#~ msgid "ENUM Lookup" +#~ msgstr "ENUM Lookup" + +#~ msgid "Reevaluates strings" +#~ msgstr "Reevaluates strings" + +#~ msgid "Executes applications" +#~ msgstr "Executes applications" + +#~ msgid "External IVR application interface" +#~ msgstr "External IVR application interface" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Fork The CDR into 2 separate entities" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Get ADSI CPE ID" + +#~ msgid "Group Management Routines" +#~ msgstr "Group Management Routines" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Encode and Stream via icecast and ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Image Transmission Application" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Look up Caller*ID name/number from black" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Look up CallerID Name from local databas" + +#~ msgid "Extension Macros" +#~ msgstr "Extension Macros" + +#~ msgid "A simple math Application" +#~ msgstr "A simple math Application" + +#~ msgid "MD5 checksum Application" +#~ msgstr "MD5 checksum Application" + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Digital Milliwatt (mu-law) Test Application" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Record a call and mix the audio during the recording" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Call Parking and Announce Application" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Trivial Playback Application" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Require phone number to be entered" + +#~ msgid "True Call Queueing" +#~ msgstr "True Call Queueing" + +#~ msgid "Random goto" +#~ msgstr "Random goto" + +#~ msgid "Read Variable Application" +#~ msgstr "Read Variable Application" + +#~ msgid "Read in a file" +#~ msgstr "Read in a file" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Realtime Data Lookup/Rewrite" + +#~ msgid "Trivial Record Application" +#~ msgstr "Trivial Record Application" + +#~ msgid "Say time" +#~ msgstr "Say time" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Send DTMF digits Application" + +#~ msgid "Send Text Applications" +#~ msgstr "Send Text Applications" + +#~ msgid "Set CallerID Application" +#~ msgstr "Set CallerID Application" + +#~ msgid "CDR user field apps" +#~ msgstr "CDR user field apps" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "load => .so ; Set CallerID Name" + +#~ msgid "load => .so ; Set CallerID Number" +#~ msgstr "load => .so ; Set CallerID Number" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Set RDNIS Number" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Set ISDN Transfer Capability" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "SMS/PSTN handler" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Hangs up the requested channel" + +#~ msgid "Stack Routines" +#~ msgstr "Stack Routines" + +#~ msgid "Generic System() application" +#~ msgstr "Generic System() application" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Playback with Talk Detection" + +#~ msgid "Interface Test Application" +#~ msgstr "Interface Test Application" + +#~ msgid "Transfer" +#~ msgstr "Transfer" + +#~ msgid "TXTCIDName" +#~ msgstr "TXTCIDName" + +#~ msgid "Send URL Applications" +#~ msgstr "Send URL Applications" + +#~ msgid "Custom User Event Application" +#~ msgstr "Custom User Event Application" + +#~ msgid "Send verbose output" +#~ msgstr "Send verbose output" + +#~ msgid "Voicemail" +#~ msgstr "Voicemail" + +#~ msgid "Waits until first ring after time" +#~ msgstr "Waits until first ring after time" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Wait For Silence Application" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "While Loops and Conditional Execution" + +#~ msgid "Comma Separated Values CDR Backend" +#~ msgstr "Comma Separated Values CDR Backend" + +#~ msgid "Customizable Comma Separated Values CDR Backend" +#~ msgstr "Customizable Comma Separated Values CDR Backend" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Asterisk Call Manager CDR Backend" + +#~ msgid "MySQL CDR Backend" +#~ msgstr "MySQL CDR Backend" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "PostgreSQL CDR Backend" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "SQLite CDR Backend" + +#~ msgid "Agent Proxy Channel" +#~ msgstr "Agent Proxy Channel" + +#~ msgid "Option chan_iax2" +#~ msgstr "Option chan_iax2" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Local Proxy Channel" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Session Initiation Protocol (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Adaptive Differential PCM Coder/Decoder" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "A-law Coder/Decoder" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "A-law and Mulaw direct Coder/Decoder" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "ITU G.726-32kbps G726 Transcoder" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "GSM/PCM16 (signed linear) Codec Translation" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Speex/PCM16 (signed linear) Codec Translator" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Mu-law Coder/Decoder" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Sun Microsystems AU format (signed linear)" + +#~ msgid "G.723.1 Simple Timestamp File Format" +#~ msgstr "G.723.1 Simple Timestamp File Format" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Raw G.726 (16/24/32/40kbps) data" + +#~ msgid "Raw G729 data" +#~ msgstr "Raw G729 data" + +#~ msgid "Raw GSM data" +#~ msgstr "Raw GSM data" + +#~ msgid "Raw h263 data" +#~ msgstr "Raw h263 data" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "JPEG (Joint Picture Experts Group) Image" + +#~ msgid "Raw uLaw 8khz Audio support (PCM)" +#~ msgstr "Raw uLaw 8khz Audio support (PCM)" + +#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support" +#~ msgstr "load => .so ; Raw aLaw 8khz PCM Audio support" + +#~ msgid "Raw Signed Linear Audio support (SLN)" +#~ msgstr "Raw Signed Linear Audio support (SLN)" + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Dialogic VOX (ADPCM) File Format" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Microsoft WAV format (8000hz Signed Line" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Microsoft WAV format (Proprietary GSM)" + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "Caller ID related dialplan functions" + +#~ msgid "ENUM Functions" +#~ msgstr "ENUM Functions" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "URI encoding / decoding functions" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Asterisk Extension Language Compiler" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Text Extension Configuration" + +#~ msgid "load => .so ; Builtin dialplan functions" +#~ msgstr "load => .so ; Builtin dialplan functions" + +#~ msgid "Loopback Switch" +#~ msgstr "Loopback Switch" + +#~ msgid "Realtime Switch" +#~ msgstr "Realtime Switch" + +#~ msgid "Outgoing Spool Support" +#~ msgstr "Outgoing Spool Support" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Wil Cal U (Auto Dialer)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "MySQL Config Resource" + +#~ msgid "ODBC Config Resource" +#~ msgstr "ODBC Config Resource" + +#~ msgid "PGSQL Module" +#~ msgstr "PGSQL Module" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Cryptographic Digital Signatures" + +#~ msgid "Call Parking Resource" +#~ msgstr "Call Parking Resource" + +#~ msgid "Indications Configuration" +#~ msgstr "Indications Configuration" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Call Monitoring Resource" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Music On Hold Resource" + +#~ msgid "ODBC Resource" +#~ msgstr "ODBC Resource" + +#~ msgid "SMDI Module" +#~ msgstr "SMDI Module" + +#~ msgid "SNMP Module" +#~ msgstr "SNMP Module" + +#~ msgid "Music On Hold" +#~ msgstr "Music On Hold" + +#~ msgid "Application" +#~ msgstr "Application" + +#~ msgid "Directory of Music" +#~ msgstr "Directory of Music" + +#~ msgid "Option mode" +#~ msgstr "Option mode" + +#~ msgid "Random Play" +#~ msgstr "Random Play" + +#~ msgid "DTMF mode" +#~ msgstr "DTMF mode" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Primary domain identity for From: headers" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "From user (required by many SIP providers)" + +#~ msgid "Ring on incoming dialplan contexts" +#~ msgstr "Ring on incoming dialplan contexts" + +#~ msgid "Allow Insecure for" +#~ msgstr "Allow Insecure for" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Mailbox for MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT between phone and Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Check tags in headers" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Reply Timeout (ms) for down connection" + +#~ msgid "Register connection" +#~ msgstr "Register connection" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "Dial own extension for mailbox" + +#~ msgid "Client Type" +#~ msgstr "Client Type" + +#~ msgid "Username" +#~ msgstr "Username" + +#~ msgid "Section sipgeneral" +#~ msgstr "Section sipgeneral" + +#~ msgid "Allow codecs" +#~ msgstr "Allow codecs" + +#~ msgid "SIP realm" +#~ msgstr "SIP realm" + +#~ msgid "Voicemail general options" +#~ msgstr "Voicemail general options" + +#~ msgid "From Email address of server" +#~ msgstr "From Email address of server" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Voice Mail boxes" + +#~ msgid "Email contains attachment" +#~ msgstr "Email contains attachment" + +#~ msgid "Email" +#~ msgstr "Email" + +#~ msgid "Display Name" +#~ msgstr "Display Name" + +#~ msgid "Password" +#~ msgstr "Password" + +#~ msgid "zone" +#~ msgstr "zone" + +#~ msgid "Voice Zone settings" +#~ msgstr "Voice Zone settings" + +#~ msgid "Message Format" +#~ msgstr "Message Format" diff --git a/feeds/luci/applications/luci-app-asterisk/po/es/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/es/asterisk.po new file mode 100644 index 0000000..f42ddb4 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/es/asterisk.po @@ -0,0 +1,355 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-04-16 00:52+0200\n" +"Last-Translator: Jose \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Opciones Generales de Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Directorio AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Almacena los ficheros de sonido mientras se graba" + +#~ msgid "Debug Level" +#~ msgstr "Nivel de Depuración" + +#~ msgid "Disable some warnings" +#~ msgstr "Desactivar algunos avisos" + +#~ msgid "Dump core on crash" +#~ msgstr "Volcar núcleo en caso de fallo" + +#~ msgid "High Priority" +#~ msgstr "Prioridad Alta" + +#~ msgid "Initialise Crypto" +#~ msgstr "Inicializar Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Usar temporización interna" + +#~ msgid "Log directory" +#~ msgstr "Directorio de registro" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Número máximo de llamadas permitidas" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Carga máxima para dejar de admitir nuevas llamadas" + +#~ msgid "Disable console colors" +#~ msgstr "Desactivar colores en la consola" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Directorio de caché de archivos de sonido" + +#~ msgid "The Group to run as" +#~ msgstr "Grupo en el que ejecutarse" + +#~ msgid "The User to run as" +#~ msgstr "Usuario como el que se ejecutará" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Directorio de la cola de mensajes de voz" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefijo UniquID con el nombre del sistema" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "" +#~ "Construir las rutas de transcodificación usando SLINEAR, no directamente" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmitir silencio SLINEAR mientras graba un canal" + +#~ msgid "Verbose Level" +#~ msgstr "Nivel de detalle" + +#~ msgid "Section dialplan" +#~ msgstr "Sección Dialplan" + +#~ msgid "include" +#~ msgstr "incluir" + +#~ msgid "Dialplan Extension" +#~ msgstr "Extensión Dialplan" + +#~ msgid "Dialplan General Options" +#~ msgstr "Opciones generales de Dialplan" + +#~ msgid "Allow transfer" +#~ msgstr "Permitir transferencia" + +#~ msgid "Clear global vars" +#~ msgstr "Limpiar las variables globales" + +#~ msgid "Dialplan Goto" +#~ msgstr "Dialplan Goto" + +#~ msgid "Dialplan Conference" +#~ msgstr "Conferencia Dialplan" + +#~ msgid "Dialplan Time" +#~ msgstr "Dialplan Time" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Buzón de voz de Dialplan" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Zonas de marcado para Dialplan" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Prefijo para añadir coincidencias de plan de marcado" + +#~ msgid "Match International prefix" +#~ msgstr "Coincidir con el prefijo internacional" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Prefijo (0) para añadir/eliminar a/de números internacionales" + +#~ msgid "localzone" +#~ msgstr "zona local" + +#~ msgid "Match plan" +#~ msgstr "Coincidir con el plan" + +#~ msgid "Connection to use" +#~ msgstr "Conexión que se utilizará" + +#~ msgid "Feature Key maps" +#~ msgstr "Mapa de Funciones Clave" + +#~ msgid "Attended transfer key" +#~ msgstr "Tecla de transferencia asistida" + +#~ msgid "Blind transfer key" +#~ msgstr "Tecla de transferencia ciega" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Tecla para desconectar la llamada" + +#~ msgid "Key to Park call" +#~ msgstr "Tecla para retener la llamada" + +#~ msgid "Parking Feature" +#~ msgstr "Función de llamada en espera" + +#~ msgid "ADSI Park" +#~ msgstr "Llamada en espera ADSI" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Tiempo de espera de transferencia asistida (seg)" + +#~ msgid "One touch record key" +#~ msgstr "Tecla de grabacion con una sola tecla" + +#~ msgid "Name of call context for parking" +#~ msgstr "Nombre del contexto de la llamada en espera" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Archivo de sonido para reproducir en la llamada en espera" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Tiempo máximo (en ms) entre digitos para la activación de funciones" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Método para encontrar una ranura de llamada en espera" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Reproducir tono de cortesía en" + +#~ msgid "Enable Parking" +#~ msgstr "Activar llamadas en espera" + +#~ msgid "Extension to dial to park" +#~ msgstr "Extensión a marcar para dejar en espera una llamada" + +#~ msgid "Parking time (secs)" +#~ msgstr "Tiempo de llamada en espera (segs)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Rango de extensiones para llamadas en espera" + +#~ msgid "Pickup extension" +#~ msgstr "Extensión de Pickup" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Segundos de espera entre digitos mientras se transfiere" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "sonido cuando se completa la transferencia asistida" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "sonido para cuando falla la transferencia asistida" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Recargar la configuración del Hardware" + +#~ msgid "Reboot Method" +#~ msgstr "Método de reinicio" + +#~ msgid "Parameter" +#~ msgstr "Parámetro" + +#~ msgid "Option type" +#~ msgstr "Tipo de opción" + +#~ msgid "User name" +#~ msgstr "Nombre de Usuario" + +#~ msgid "IAX General Options" +#~ msgstr "Opciones Generales de IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Permitir Codecs" + +#~ msgid "Static" +#~ msgstr "Estático" + +#~ msgid "Write Protect" +#~ msgstr "Protección contra escritura" + +#~ msgid "Meetme Conference" +#~ msgstr "Conferencia Meetme (entre dos)" + +#~ msgid "Admin PIN" +#~ msgstr "PIN de Administrador" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN de Reunión (Meeting)" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Opciones generales de conferencia Meetme (entre dos)" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Número de memorias intermedias de audio de 20 ms a utilizar" + +#~ msgid "Modules" +#~ msgstr "Módulos" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Aplicación de Recepción de Alarma" + +#~ msgid "Authentication Application" +#~ msgstr "Aplicación de autenticación" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Asegúrate que asterisk no graba CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Comprueba que el canal esté disponible" + +#~ msgid "Listen in on any channel" +#~ msgstr "Escuchar en cualquier canal" + +#~ msgid "Control Playback Application" +#~ msgstr "Aplicación para el control de reproducción" + +#~ msgid "Cuts up variables" +#~ msgstr "Variables de corte" + +#~ msgid "Database access functions" +#~ msgstr "Funciones de acceso a la Base de Datos" + +#~ msgid "Dialing Application" +#~ msgstr "Aplicación de marcado telefónico" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Aplicación de máquina de Dictado Virtual" + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Apoyo a la captura de llamadas dirigidas" + +#~ msgid "Extension Directory" +#~ msgstr "Directorio de Extensiones" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "Aplicación DISA (Acceso directo entrante al sistema)" + +#~ msgid "Simple Echo Application" +#~ msgstr "Aplicación de Eco Simple" + +#~ msgid "ENUM Lookup" +#~ msgstr "Consulta ENUM" + +#~ msgid "Reevaluates strings" +#~ msgstr "Reevaluar secuencia de caracteres" + +#~ msgid "Executes applications" +#~ msgstr "Ejecuta aplicaciones" + +#~ msgid "External IVR application interface" +#~ msgstr "Interfaz de aplicación IVR externa" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Bifurcar el CDR en 2 entidades separadas" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Obtener el ADSI CPE ID" + +#~ msgid "Group Management Routines" +#~ msgstr "Rutinas de Administración de grupo" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Codifica y emite a través de icecast e ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Aplicación de transmisión de imagen" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Buscar la identidad del llamante nombre/número en la lista negra" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "" +#~ "Buscar el nombre de identidad del llamante en las bases de datos locales" + +#~ msgid "Extension Macros" +#~ msgstr "Macros de Extensión" + +#~ msgid "A simple math Application" +#~ msgstr "Una simple aplicación matemática" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Aplicación de suma de verificación MD5" + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Aplicación de testeo de Milivatios Digitales (mu-law)" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Grabar una llamada y mezclar el sonido durante la grabación" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Aplicación de Anuncio y Llamada en Espera" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Aplicación de reproducción trivial" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Requiere que se introduzca un número de teléfono" + +#~ msgid "True Call Queueing" +#~ msgstr "Lista de espera real de llamadas" + +#~ msgid "Random goto" +#~ msgstr "Goto (ir a) Aleatorio" + +#~ msgid "Read Variable Application" +#~ msgstr "Aplicación de lectura de variables" + +#~ msgid "Read in a file" +#~ msgstr "Leer en un archivo" diff --git a/feeds/luci/applications/luci-app-asterisk/po/fr/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/fr/asterisk.po new file mode 100644 index 0000000..63d085a --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/fr/asterisk.po @@ -0,0 +1,569 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2011-11-23 22:34+0200\n" +"Last-Translator: fredb \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Paramètres généraux d'Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Répertoire AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Mes les sons enregistrés en cache pendant l'enregistrement" + +#~ msgid "Debug Level" +#~ msgstr "Niveau de déboguage" + +#~ msgid "Disable some warnings" +#~ msgstr "Désactiver certaines alertes" + +#~ msgid "Dump core on crash" +#~ msgstr "Créer une image-core en cas de crash" + +#~ msgid "High Priority" +#~ msgstr "Priorité haute" + +#~ msgid "Initialise Crypto" +#~ msgstr "Initialise le chiffrage" + +#~ msgid "Use Internal Timing" +#~ msgstr "Utiliser un délai interne" + +#~ msgid "Log directory" +#~ msgstr "Répertoire des journaux" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Nombre maximum d'appels autorisés" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Charge maximum jusqu'à laquelle on accepte de nouveaux appels" + +#~ msgid "Disable console colors" +#~ msgstr "Désactiver les couleurs de la console" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Répertoire de cache des ficihers-sons" + +#~ msgid "The Group to run as" +#~ msgstr "Exécuté avec ce groupe" + +#~ msgid "The User to run as" +#~ msgstr "Exécuté avec cet utilisateur" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Répertoire de stockage du répondeur" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Préfixer le « UniquID » avec le nom du système" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Construire des chemins de traduction via SLINEAR, pas directement" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmettre le silence SLINEAR lors de l'enregistrement d'un canal" + +#~ msgid "Verbose Level" +#~ msgstr "Niveau de verbosité" + +#~ msgid "Section dialplan" +#~ msgstr "Section du plan de numérotation" + +#~ msgid "include" +#~ msgstr "Inclure" + +#~ msgid "Dialplan Extension" +#~ msgstr "Extension du plan de numérotation" + +#~ msgid "Dialplan General Options" +#~ msgstr "Paramètres généraux du plan de numérotation" + +#~ msgid "Allow transfer" +#~ msgstr "Permettre le transfert" + +#~ msgid "Clear global vars" +#~ msgstr "Effacer les variables globales" + +#~ msgid "Dialplan Conference" +#~ msgstr "Règles d'aiguillage pour la conférence" + +#~ msgid "Dialplan Time" +#~ msgstr "Règles d'aiguillage liées au temps" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Règles d'aiguillage de la messagerie vocale" + +#~ msgid "Match International prefix" +#~ msgstr "Préfixe correspondant à l'international" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Préfixe (0) à ajouter à/retirer d'un numéro international" + +#~ msgid "localzone" +#~ msgstr "zone locale" + +#~ msgid "Match plan" +#~ msgstr "Règle de correspondance" + +#~ msgid "Connection to use" +#~ msgstr "Connexion à utiliser" + +#~ msgid "Blind transfer key" +#~ msgstr "Touche de transfert en aveugle" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Touche pour déconnecter un appel" + +#~ msgid "Key to Park call" +#~ msgstr "Touche pour parquer un appel" + +#~ msgid "Parking Feature" +#~ msgstr "Capacité de mise en parking" + +#~ msgid "ADSI Park" +#~ msgstr "Parking ADSI" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Délai max d'un transfert programmé (secondes)" + +#~ msgid "Name of call context for parking" +#~ msgstr "Nom du contexte d'appel pour une mise en parking" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Fichier-son à jouer aux appelants mis en parking" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "" +#~ "Durée max (en ms) entre les chiffres pour l'activation d'une commande" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Méthode pour trouver une place de parking" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Jouer une tonalité de courtoisie à" + +#~ msgid "Enable Parking" +#~ msgstr "Activer la mise en parking" + +#~ msgid "Parking time (secs)" +#~ msgstr "Durée de mise en parking (secondes)" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Attente en secondes entre les chiffres Lors d'un transfert" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "Son joué quand un transfert programmé est effectué" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "Son joué quand nu transfert programmé rate" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Relit la configuration matérielle" + +#~ msgid "Reboot Method" +#~ msgstr "Méthode de redémarrage" + +#~ msgid "Parameter" +#~ msgstr "Paramètre" + +#~ msgid "Option type" +#~ msgstr "Type d'option" + +#~ msgid "User name" +#~ msgstr "Nom d'utilisateur" + +#~ msgid "IAX General Options" +#~ msgstr "Paramètres généraux du protocole IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Codecs autorisés" + +#~ msgid "Static" +#~ msgstr "Statique" + +#~ msgid "Write Protect" +#~ msgstr "Protection contre l'écriture" + +#~ msgid "Meetme Conference" +#~ msgstr "Conférence « Meetme »" + +#~ msgid "Admin PIN" +#~ msgstr "ID d'administrateur" + +#~ msgid "Meeting PIN" +#~ msgstr "Code de conférence" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Options générales de conférence « Meetme »" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Nombre de buffers audio de 20 ms à utiliser" + +#~ msgid "Modules" +#~ msgstr "Modules" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Application de réception d'alarme" + +#~ msgid "Authentication Application" +#~ msgstr "Application d'authentification" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "S'assure qu'Asterisk ne sauve pas le CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Vérifie que le canal est libre" + +#~ msgid "Listen in on any channel" +#~ msgstr "Écoute sur n'importe quel canal" + +#~ msgid "Database access functions" +#~ msgstr "Fonctions d'accès aux bases de données" + +#~ msgid "Dialing Application" +#~ msgstr "Application de numérotation" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Application de dictaphone virtuel" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Application de copie des variables d'un canal" + +#~ msgid "Simple Echo Application" +#~ msgstr "Application de simple écho" + +#~ msgid "ENUM Lookup" +#~ msgstr "Résolution d'un ENUM" + +#~ msgid "Reevaluates strings" +#~ msgstr "Ré-évaluer les chaînes" + +#~ msgid "Executes applications" +#~ msgstr "Lance les applications" + +#~ msgid "External IVR application interface" +#~ msgstr "Interface d'application SVI externe" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Dupliquer le CDR en deux entités séparées" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Obtenir le « ADSI CPE ID »" + +#~ msgid "Group Management Routines" +#~ msgstr "Fonctions de gestion des groupes" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Coder et diffuser via icecast et ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Application d'envoi d'image" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Rechercher le nom de l'appelant dans la base locale" + +#~ msgid "Extension Macros" +#~ msgstr "Macros d'extension" + +#~ msgid "A simple math Application" +#~ msgstr "Une simple application mathématique" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Application de signature MD5" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Enregistre un appelle et mixe le son pendant l'enregistrement" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Application de mise en parking d'appel et annonce" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Application de simple écoute" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Nécessite d'entrer un numéro de téléphone" + +#~ msgid "True Call Queueing" +#~ msgstr "Véritable sérialisation des appels" + +#~ msgid "Read Variable Application" +#~ msgstr "Application de lecture d'une variable" + +#~ msgid "Read in a file" +#~ msgstr "Lire dans un fichier" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Recherche/ré-écriture de données en temps-réel" + +#~ msgid "Trivial Record Application" +#~ msgstr "Application de simple enregistrement" + +#~ msgid "Say time" +#~ msgstr "Dis l'heure" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Application d'envoi de chiffres en DTMF" + +#~ msgid "Send Text Applications" +#~ msgstr "Applications d'envoi de texte" + +#~ msgid "Set CallerID Application" +#~ msgstr "Application de positionnement de l'identifiant de l'appelant" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "" +#~ "charger => .so ; Positionner le nom dans l'identifiant de l'appelant" + +#~ msgid "load => .so ; Set CallerID Number" +#~ msgstr "" +#~ "charger => .so ; Positionner le numéro dans l'identifiant de l'appelant" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Positionner le numéro RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Activer la possibilité de transfert RNIS" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "Gestionnaire SMS/RTC" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Raccroche le canal demandé" + +#~ msgid "Stack Routines" +#~ msgstr "Empile les routines" + +#~ msgid "Generic System() application" +#~ msgstr "Application générique System()" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Jouer un son avec la détection de parole" + +#~ msgid "Interface Test Application" +#~ msgstr "Application de test d'interface" + +#~ msgid "Transfer" +#~ msgstr "Transfert" + +#~ msgid "Send URL Applications" +#~ msgstr "Applications d'envois d'URL" + +#~ msgid "Send verbose output" +#~ msgstr "Envoyer une sortie détaillée" + +#~ msgid "Voicemail" +#~ msgstr "Répondeur" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Application d'attente de silence" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Session Initiation Protocol (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Codec PCM différentiel adaptatif (ADPCM)" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "Codec loi-A" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "Codec loi-A et loi-Mu directs" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "Transcodeur G726 (ITU G.726 32 kbit/s)" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "Codec de traduction GSM/PCM16 (linéaire signé)" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Codec de traduction Speex/PCM16 (linéaire signé)" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Codec loi-Mu" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Format Sun Microsystems AU (linéaire signé)" + +#~ msgid "G.723.1 Simple Timestamp File Format" +#~ msgstr "Format de fichier G.723.1 à horodatage simple" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Données brutes G.726 (16/24/32/40 kbit/s)" + +#~ msgid "Raw G729 data" +#~ msgstr "Données brutes G729" + +#~ msgid "Raw GSM data" +#~ msgstr "Données brutes GSM" + +#~ msgid "Raw h263 data" +#~ msgstr "Données brutes h263" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "Image JPEG (Joint Picture Experts Group)" + +#~ msgid "Raw uLaw 8khz Audio support (PCM)" +#~ msgstr "Gestion de l'audio en loi-µ 8 kHz brute (PCM)" + +#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support" +#~ msgstr "Charger => .so ; Gestion de l'audio en loi-A brute PCM 8 kHz" + +#~ msgid "Raw Signed Linear Audio support (SLN)" +#~ msgstr "Gestion de l'audio en linéaire signé brut (SLN)" + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Format de fichier Dialogic VOX (ADPCM)" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Format Microsoft WAV (8 kHz linéaire signé)" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Format Microsoft WAV (GSM propriétaire)" + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "Fonctions d'aiguillage des appels liées à l'identifiant d'appel" + +#~ msgid "ENUM Functions" +#~ msgstr "Fonctions ENUM" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "Fonctions de codage/décodage des URI" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Compilateur du langage d'extension d'Asterisk" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Configuration de l'extension Texte" + +#~ msgid "load => .so ; Builtin dialplan functions" +#~ msgstr "charger => .so ; fonctions natives d'aiguillages des appels" + +#~ msgid "Outgoing Spool Support" +#~ msgstr "Gestion d'un spool sortant" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Wil Cal U (composeur automatique)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "Ressource de configuration de MySQL" + +#~ msgid "ODBC Config Resource" +#~ msgstr "Ressource de configuration d'ODBC" + +#~ msgid "PGSQL Module" +#~ msgstr "Module PGSQL" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Signatures de chiffrage numérique" + +#~ msgid "Call Parking Resource" +#~ msgstr "Ressource de mise en parking des appels" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Ressource de supervision des appels" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Ressource de mise en attente musicale" + +#~ msgid "ODBC Resource" +#~ msgstr "Ressource ODBC" + +#~ msgid "SMDI Module" +#~ msgstr "Module SMDI" + +#~ msgid "SNMP Module" +#~ msgstr "Module SNMP" + +#~ msgid "Music On Hold" +#~ msgstr "Mise en attente musicale" + +#~ msgid "Application" +#~ msgstr "Application" + +#~ msgid "Directory of Music" +#~ msgstr "Répertoire sonore" + +#~ msgid "Random Play" +#~ msgstr "morceau choisi aléatoirement" + +#~ msgid "DTMF mode" +#~ msgstr "Mode DTMF" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Identité du domaine primaire pour les entêtes « From: »" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "Utilisateur « From » (requis par de nombreux fournisseurs SIP)" + +#~ msgid "Allow Insecure for" +#~ msgstr "Autoriser le mode non sécurisé pour" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Boîte aux lettres pour MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT entre le téléphone et Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Vérifier les « tags » dans les entêtes" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Délai de réponse (en ms) indiquant une connexion tombée" + +#~ msgid "Register connection" +#~ msgstr "Connexion au registre" + +#~ msgid "Client Type" +#~ msgstr "Type de client" + +#~ msgid "Username" +#~ msgstr "Nom d'utilisateur" + +#~ msgid "Section sipgeneral" +#~ msgstr "Section générale SIP" + +#~ msgid "Allow codecs" +#~ msgstr "Codecs autorisés" + +#~ msgid "SIP realm" +#~ msgstr "Domaine SIP" + +#~ msgid "Voicemail general options" +#~ msgstr "Options générales de la messagerie vocale" + +#~ msgid "From Email address of server" +#~ msgstr "Adresse de courrier électronique source du serveur" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Boîtes de messagerie vocale" + +#~ msgid "Email contains attachment" +#~ msgstr "Courriel contenant une pièce-jointe" + +#~ msgid "Email" +#~ msgstr "Courriel" + +#~ msgid "Display Name" +#~ msgstr "Nom affiché" + +#~ msgid "Password" +#~ msgstr "Mot de passe" + +#~ msgid "zone" +#~ msgstr "zone" + +#~ msgid "Voice Zone settings" +#~ msgstr "Paramètres de la zone Voix" + +#~ msgid "Message Format" +#~ msgstr "Format de message" diff --git a/feeds/luci/applications/luci-app-asterisk/po/he/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/he/asterisk.po new file mode 100644 index 0000000..25ed5bb --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/he/asterisk.po @@ -0,0 +1,194 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-07-14 12:48+0200\n" +"Last-Translator: zstorch \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "הגדרות כלליות של Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "תיקית AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "שמור את קבצי הקול במהלך ההקלטה" + +#~ msgid "Debug Level" +#~ msgstr "רמת מצב ניפוי שגיאות" + +#~ msgid "Disable some warnings" +#~ msgstr "בטל חלק מהאזהרות" + +#~ msgid "Dump core on crash" +#~ msgstr "תעד את מצב הליבה בעת נפילת המערכת" + +#~ msgid "High Priority" +#~ msgstr "עדיפות גבוהה" + +#~ msgid "Initialise Crypto" +#~ msgstr "מפעיל את Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "השתמש בשעון הפנימי" + +#~ msgid "Log directory" +#~ msgstr "תיקית התיעוד" + +# צריך לבדוק אם מדובר על שיחות "בו זמנית" אם כן חשוב לציין אם לא הנל טעות חמורה +#, fuzzy +#~ msgid "Maximum number of calls allowed" +#~ msgstr "מקסימום שיחות בו זמנית" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "מקסימות שיחות שבו המערכת תדחה שיחות נוספות" + +#~ msgid "Disable console colors" +#~ msgstr "בטל צבעים במסוף" + +#~ msgid "Sound files Cache directory" +#~ msgstr "תיקית קבצי הקול" + +#~ msgid "The Group to run as" +#~ msgstr "הפעל עם הרשאות קבוצת" + +#~ msgid "The User to run as" +#~ msgstr "הפעל עם הרשאות משתמש" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "תיקית התא קולי" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "הוסף לUniquID את שם המערכת" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "המר תבניות קול ישירות עם SLINEAR" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "שדר שקט של SLINEAR במהלך הקלטה" + +#~ msgid "Verbose Level" +#~ msgstr "רמת דו\"ח המערכת" + +#~ msgid "Time Zone" +#~ msgstr "אזור זמן" + +#~ msgid "Section dialplan" +#~ msgstr "מחלקה בתוכנית השיחות" + +#~ msgid "include" +#~ msgstr "כולל" + +#~ msgid "Dialplan Extension" +#~ msgstr "שלוחה בתוכנית השיחות" + +#~ msgid "Dialplan General Options" +#~ msgstr "הגדרות כללית של תוכנית השיחות" + +#~ msgid "Allow transfer" +#~ msgstr "אפשר העברה" + +#~ msgid "Clear global vars" +#~ msgstr "נקה משתנים כללים" + +#~ msgid "Dialplan Goto" +#~ msgstr "\"לך אל\" בתוכנית השיחות" + +#~ msgid "Dialplan Conference" +#~ msgstr "שיחת ועידה בתוכנית השיחות" + +#~ msgid "Dialplan Time" +#~ msgstr "זמן בתוכנית השיחות" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "תא קולי בתוכנית השיחות" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "אזורי חיוג עבור תוכנית השיחות" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "קידומת להוספה עבור תוכניות שיחה דומות" + +#~ msgid "Match International prefix" +#~ msgstr "השווה קידומת בין לאומית" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "קידומת (0) להוספה או הסרה במספר בין לאומי" + +#~ msgid "localzone" +#~ msgstr "מיקום" + +#~ msgid "Match plan" +#~ msgstr "תוכנית מתאימה" + +#~ msgid "Connection to use" +#~ msgstr "השתמש בחיבור מסוג" + +#~ msgid "Feature Key maps" +#~ msgstr "מיפוי מקשים יעודיים" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "נתב (NAT) בין מכשיר הטלפון לAsterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "בדוק את התגיות בהקדמה" + +#, fuzzy +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "החזר את פרק זמן (timeout) במילישניות עבור חבורים סגורים" + +#~ msgid "Register connection" +#~ msgstr "חיבור רשום (מנוי)" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "חיוג סיפרה בודדת עבור תא דואר" + +#~ msgid "Client Type" +#~ msgstr "סוג הלקוח" + +#~ msgid "Username" +#~ msgstr "שם משתמש" + +#~ msgid "Allow codecs" +#~ msgstr "מקודדים מאושרים" + +#~ msgid "SIP realm" +#~ msgstr "מתחם SIP" + +#~ msgid "Voicemail general options" +#~ msgstr "הגדרות כלליות עבור התא קולי" + +#~ msgid "From Email address of server" +#~ msgstr "שדה דואר אלקטרוני מאת (של השרת)" + +#~ msgid "Voice Mail boxes" +#~ msgstr "תאים קוליים" + +#~ msgid "Email contains attachment" +#~ msgstr "מצורף תוכן ההודעה" + +#~ msgid "Email" +#~ msgstr "דואר אלקטרוני" + +#~ msgid "Display Name" +#~ msgstr "שם תצוגה" + +#~ msgid "Password" +#~ msgstr "סיסמה" + +#~ msgid "zone" +#~ msgstr "אזור" + +#~ msgid "Voice Zone settings" +#~ msgstr "הגדרות אזוריות עבור הקול" + +#~ msgid "Message Format" +#~ msgstr "תבנית ההודעה" diff --git a/feeds/luci/applications/luci-app-asterisk/po/hu/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/hu/asterisk.po new file mode 100644 index 0000000..c6a5d81 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/hu/asterisk.po @@ -0,0 +1,134 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-18 23:18+0200\n" +"Last-Translator: Anonymous Pootle User\n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Általános Asterisk beállítások" + +#~ msgid "AGI directory" +#~ msgstr "AGI könyvtár" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "A felvett hang fájlok gyorsítótárazása a felvétel alatt" + +#~ msgid "Debug Level" +#~ msgstr "Nyomkövetési szint" + +#~ msgid "Disable some warnings" +#~ msgstr "Néhány figyelmeztetés letilása" + +#~ msgid "Dump core on crash" +#~ msgstr "Memóriatartalom kiírása összeomláskor" + +#~ msgid "High Priority" +#~ msgstr "Magas prioritás" + +#~ msgid "Initialise Crypto" +#~ msgstr "Titkosítás inicializálása" + +#~ msgid "Use Internal Timing" +#~ msgstr "Belső időzítés használata" + +#~ msgid "Log directory" +#~ msgstr "Napló könyvtár" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "A hivások megengedett maximális száma" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "A CPU maximális terhelése új hívások fogadásához" + +#~ msgid "Disable console colors" +#~ msgstr "Konzol színek letiltása" + +#~ msgid "Sound files Cache directory" +#~ msgstr "A gyorsítótárazott hang fájlok könyvtára" + +#~ msgid "The Group to run as" +#~ msgstr "Csoport futtatása mint" + +#~ msgid "The User to run as" +#~ msgstr "Felhasználó futtatása mint" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Hangposta puffer könyvtár" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Rendszer név használata UniquID előtagként" + +#~ msgid "Verbose Level" +#~ msgstr "Részletes szint" + +#~ msgid "Time Zone" +#~ msgstr "Időzóna" + +#~ msgid "include" +#~ msgstr "tartalmaz" + +#~ msgid "Allow transfer" +#~ msgstr "Átvitel engedélyezése" + +#~ msgid "Clear global vars" +#~ msgstr "Globális változók törlése" + +#~ msgid "Enable Parking" +#~ msgstr "Várakoztatás engedélyezése" + +#~ msgid "Parking time (secs)" +#~ msgstr "Várakoztatási idő (másodperc)" + +#~ msgid "Reboot Method" +#~ msgstr "Újraindítás módja" + +#~ msgid "Parameter" +#~ msgstr "Paraméter" + +#~ msgid "IAX General Options" +#~ msgstr "Általános IAX beállítások" + +#~ msgid "Static" +#~ msgstr "Statikus" + +#~ msgid "Write Protect" +#~ msgstr "Írásvédelem" + +#~ msgid "Modules" +#~ msgstr "Modulok" + +#~ msgid "DTMF mode" +#~ msgstr "DTMF mód" + +#~ msgid "Client Type" +#~ msgstr "Ügyfél típusa" + +#~ msgid "Username" +#~ msgstr "Felhasználónév" + +#~ msgid "Email" +#~ msgstr "E-mail" + +#~ msgid "Display Name" +#~ msgstr "Megjelenítendő név" + +#~ msgid "Password" +#~ msgstr "Jelszó" + +#~ msgid "zone" +#~ msgstr "zóna" + +#~ msgid "Voice Zone settings" +#~ msgstr "Hang zóna beállítások" + +#~ msgid "Message Format" +#~ msgstr "Üzenet formátuma" diff --git a/feeds/luci/applications/luci-app-asterisk/po/it/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/it/asterisk.po new file mode 100644 index 0000000..f2aa51e --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/it/asterisk.po @@ -0,0 +1,162 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-04-19 23:40+0200\n" +"Last-Translator: claudyus \n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Asterisk Opzioni Generali" + +#~ msgid "AGI directory" +#~ msgstr "AGI directory" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Cache dei file audio registrati durante la registrazione" + +#~ msgid "Debug Level" +#~ msgstr "Livello di debug" + +#~ msgid "Disable some warnings" +#~ msgstr "Disattivare alcuni avvis" + +#~ msgid "Dump core on crash" +#~ msgstr "Effettua il core dump al crash" + +#~ msgid "High Priority" +#~ msgstr "Alta Priorità" + +#~ msgid "Use Internal Timing" +#~ msgstr "Usa temporizzazione interna" + +#~ msgid "Log directory" +#~ msgstr "Accedi alla directory" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Numero massimo di chiamate consentite" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Smettere di accettare carico massimo di nuove chiamate" + +#~ msgid "Disable console colors" +#~ msgstr "Disabilitare la console dei colori" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Cache directori files suoni" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefisso UniquID con il nome di sistema" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Costruire percorsi di transcodifica via SLINEAR, non direttamente" + +#~ msgid "Verbose Level" +#~ msgstr "Livello verbose" + +#~ msgid "Section dialplan" +#~ msgstr "Sezione dialplan" + +#~ msgid "include" +#~ msgstr "include" + +#~ msgid "Dialplan Extension" +#~ msgstr "Estensione Dialplan" + +#~ msgid "Dialplan General Options" +#~ msgstr "Opzioni generali Dialplan" + +#~ msgid "Allow transfer" +#~ msgstr "Permettere il trasferimento" + +#~ msgid "Clear global vars" +#~ msgstr "Cancella le variabili globali" + +#~ msgid "Dialplan Conference" +#~ msgstr "Conferenza Dialplan" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Aggiungere il prefisso corrispondente per Dialplans" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "" +#~ "Prefisso (0) per aggiungere / rimuovere a / da numeri internazionali" + +#~ msgid "localzone" +#~ msgstr "localzone" + +#~ msgid "Connection to use" +#~ msgstr "Connessione da utilizzare" + +#~ msgid "Feature Key maps" +#~ msgstr "Caratteristica chiave delle mappe" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Chiave per disconnettere una chiamata" + +#~ msgid "Key to Park call" +#~ msgstr "Chiave di riserva per chiamata" + +#~ msgid "Parking Feature" +#~ msgstr "Riserva futura" + +#~ msgid "ADSI Park" +#~ msgstr "Riserva ADSI" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Ascolta il tono di cortesia per" + +#~ msgid "Enable Parking" +#~ msgstr "Abilita la sosta" + +#~ msgid "Parking time (secs)" +#~ msgstr "Ora di sosta (in secondi)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Gamma di estensioni per la sosta di chiamata" + +#~ msgid "Pickup extension" +#~ msgstr "Estensione Pickup" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Secondi di attesa tra le cifre per il trasferimento" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "Suono quando il trasferimento non ha partecipato" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Ricarica Hardware Config" + +#~ msgid "Reboot Method" +#~ msgstr "Metodo per riavviare" + +#~ msgid "Parameter" +#~ msgstr "Parametro" + +#~ msgid "Option type" +#~ msgstr "Tipo di opzione" + +#~ msgid "User name" +#~ msgstr "Usare il nome" + +#~ msgid "IAX General Options" +#~ msgstr "Opzione generale per IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Lasciare il codec" + +#~ msgid "Static" +#~ msgstr "Statico" + +#~ msgid "Write Protect" +#~ msgstr "Protezione da scrittura" + +#~ msgid "Message Format" +#~ msgstr "Formato messaggio" diff --git a/feeds/luci/applications/luci-app-asterisk/po/ja/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/ja/asterisk.po new file mode 100644 index 0000000..98bd10b --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/ja/asterisk.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-01-08 13:20+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Asterisk の全般オプション" + +#~ msgid "AGI directory" +#~ msgstr "AGI ディレクトリ" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "録音されたサウンドを録音中にキャッシュ" + +#~ msgid "Debug Level" +#~ msgstr "デバッグレベル" + +#~ msgid "Disable some warnings" +#~ msgstr "いくつかの警告を無効にする" + +#~ msgid "Dump core on crash" +#~ msgstr "クラッシュ時にコアダンプを出力する" + +#~ msgid "High Priority" +#~ msgstr "高優先度" + +#~ msgid "Log directory" +#~ msgstr "ログ ディレクトリ" + +#~ msgid "Allow transfer" +#~ msgstr "転送を許可" + +#~ msgid "Clear global vars" +#~ msgstr "グローバル変数を消去" diff --git a/feeds/luci/applications/luci-app-asterisk/po/ms/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/ms/asterisk.po new file mode 100644 index 0000000..d4b6baa --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/ms/asterisk.po @@ -0,0 +1,611 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-05-03 12:40+1000\n" +"PO-Revision-Date: 2010-05-05 23:32+1000\n" +"Last-Translator: Wai Chet Teow \n" +"Language-Team: LANGUAGE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Pilihan Umum Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "AGI Direktori" + +#, fuzzy +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Cache dicatat semasa rakaman fail bunyi" + +#, fuzzy +#~ msgid "Debug Level" +#~ msgstr "Tingkatan debug" + +#~ msgid "Disable some warnings" +#~ msgstr "Mematikan beberapa amaran" + +#, fuzzy +#~ msgid "Dump core on crash" +#~ msgstr "Dump teras dalam kemalangan" + +#~ msgid "High Priority" +#~ msgstr "Keutamaan Tinggi" + +#~ msgid "Initialise Crypto" +#~ msgstr "Menginisialisasinya Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Gunakan Intern pemilihan waktu" + +#, fuzzy +#~ msgid "Log directory" +#~ msgstr "Direktori log" + +#, fuzzy +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Jumlah maksimum panggilan dibenarkan" + +#, fuzzy +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "beban maksimum untuk berhenti menerima panggilan baru" + +#, fuzzy +#~ msgid "Disable console colors" +#~ msgstr "Matikan warna konsol" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Sound fail Direktori Cache" + +#, fuzzy +#~ msgid "The Group to run as" +#~ msgstr "Kumpulan untuk menjalankan sebagai" + +#, fuzzy +#~ msgid "The User to run as" +#~ msgstr "Pengguna untuk menjalankan sebagai" + +#, fuzzy +#~ msgid "Voicemail Spool directory" +#~ msgstr "Surat suara spool Direktori" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Awalan UniquID dengan nama sistem" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Membangun transcode jalan melalui SLINEAR, tidak secara langsung" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmit SLINEAR keheningan ketika sedang merakam saluran" + +#, fuzzy +#~ msgid "Verbose Level" +#~ msgstr "Tingkat verbose" + +#~ msgid "Section dialplan" +#~ msgstr "Bahagian dial rencana" + +#~ msgid "include" +#~ msgstr "memasukkan" + +#~ msgid "Dialplan Extension" +#~ msgstr "Ekstensi dial rencana" + +#~ msgid "Dialplan General Options" +#~ msgstr "Pilihan Umum Dialplan" + +#~ msgid "Allow transfer" +#~ msgstr "Membolehkan pemindahan" + +#~ msgid "Clear global vars" +#~ msgstr "Hapus variable global" + +#~ msgid "Dialplan Goto" +#~ msgstr "Buka dial rencana" + +#~ msgid "Dialplan Conference" +#~ msgstr "Persidangan dial rencana" + +#~ msgid "Dialplan Time" +#~ msgstr "Masa dial rencana" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Surat suara dial rencana" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Dial Zon untuk dial rencana" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Prefix untuk menambah pencocokan dial rencana" + +#~ msgid "Match International prefix" +#~ msgstr "Awalan Antarabangsa Match" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Awalan (0) untuk menambah / memadam ke / dari nombor antarabangsa" + +#~ msgid "localzone" +#~ msgstr "zon tempatan" + +#~ msgid "Match plan" +#~ msgstr "Rencana sesuai" + +#~ msgid "Connection to use" +#~ msgstr "Sambungan yang digunakan" + +#~ msgid "Feature Key maps" +#~ msgstr "Ciri-ciri kunci peta" + +#~ msgid "Attended transfer key" +#~ msgstr "Mengikuti memindahkan kunci" + +#~ msgid "Blind transfer key" +#~ msgstr "kunci pemindahkan buta" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Kunci untuk Putus panggilan" + +#~ msgid "Key to Park call" +#~ msgstr "Kunci untuk Park panggilan" + +#~ msgid "Parking Feature" +#~ msgstr "Parkir Ciri-ciri" + +#~ msgid "ADSI Park" +#~ msgstr "ADSI Park" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Mengikuti pemindahan timeout (saat)" + +#~ msgid "One touch record key" +#~ msgstr "Satu nota sentuh butang" + +#~ msgid "Name of call context for parking" +#~ msgstr "Nama konteks panggilan untuk parkir" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Fail bunyi untuk memainkan ke pemanggil parkir" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Maksimum masa (milidetik) antara nombor untuk pengaktifan ciri" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Kaedah untuk Menemukan slot Parkir" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkir muzik kelas" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Nada kebaikan yang dimainkan untuk" + +#~ msgid "Enable Parking" +#~ msgstr "Aktifkan Parkir" + +#~ msgid "Extension to dial to park" +#~ msgstr "Extension untuk dial ke taman" + +#~ msgid "Parking time (secs)" +#~ msgstr "Parkir waktu (saat)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Rentang sambungan untuk parkir panggilan" + +#~ msgid "Pickup extension" +#~ msgstr "Angkat sambungan" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Detik untuk menunggu antara nombor ketika memindahkan" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "suara saat menghadiri pemindahan selesai" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "Suara saat menghadiri gagal transfer" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Beban kembali menatarajah peranti keras" + +#~ msgid "Reboot Method" +#~ msgstr "Kaedah Reboot" + +#~ msgid "Parameter" +#~ msgstr "Parameter" + +#~ msgid "Option type" +#~ msgstr "Pilihan jenis" + +#~ msgid "User name" +#~ msgstr "Nama pemakai" + +#~ msgid "IAX General Options" +#~ msgstr "Pilihan Umum IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Izinkan Codec" + +#~ msgid "Static" +#~ msgstr "Statik" + +#~ msgid "Write Protect" +#~ msgstr "Dilindungi Menulis" + +#~ msgid "Meetme Conference" +#~ msgstr "Persidangan Meetme" + +#~ msgid "Admin PIN" +#~ msgstr "PIN Admin" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN Pertemuan" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Pilihan Umum Persidangan Meetme" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Jumlah buffer audio yang akan digunakan dalam 20 mili detik" + +#~ msgid "Modules" +#~ msgstr "Modul" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Penggera Aplikasi Penerima" + +#~ msgid "Authentication Application" +#~ msgstr "Pengesahan Aplikasi" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Membuat asterisk yakin tidak menyimpan CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Periksa sama ada saluran sedia" + +#~ msgid "Listen in on any channel" +#~ msgstr "Mendengar pada setiap saluran" + +#~ msgid "Control Playback Application" +#~ msgstr "Kawalan Main Aplikasi" + +#~ msgid "Cuts up variables" +#~ msgstr "Memotong pembolehubah" + +#~ msgid "Database access functions" +#~ msgstr "fungsi untuk mengakses dasar data" + +#~ msgid "Dialing Application" +#~ msgstr "Aplikasi Panggilan" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Aplikasi Dikte Virtual Machine" + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Sokongan Pengarah Angkatan Pangillan" + +#~ msgid "Extension Directory" +#~ msgstr "Extension Direktori" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "Aplikasi DISA (Direct Inward System Access)" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Aplikasi membuang variable saluran" + +#~ msgid "Simple Echo Application" +#~ msgstr "Echo Aplikasi Mudah" + +#~ msgid "ENUM Lookup" +#~ msgstr "Pencarian ENUM" + +#~ msgid "Reevaluates strings" +#~ msgstr "Menilai semula string" + +#~ msgid "Executes applications" +#~ msgstr "Menjalankan aplikasi" + +#~ msgid "External IVR application interface" +#~ msgstr "IVR aplikasi antara muka luaran" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "CDR garpu menjadi 2 entiti yang berasingan" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Dapatkan ADSI CPE ID" + +#~ msgid "Group Management Routines" +#~ msgstr "Pengurusan Kumpulan Rutinitas" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Menyandi dan Stream melalui icecast dan es" + +#~ msgid "Image Transmission Application" +#~ msgstr "Aplikasi Transmisi Gambar" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Mencari nama / nombor Pemangil dari hitam" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Mencari Nama Pemangil dari database tempatan" + +#~ msgid "Extension Macros" +#~ msgstr "Makro Extension" + +#~ msgid "A simple math Application" +#~ msgstr "Sebuah Aplikasi matematik senang" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Aplikasi MD5 checksum" + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Milliwatt digital (mu-law) Aplikasi Uji" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Merakam panggilan dan campuran audio semasa rakaman" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Panggilan Parkir dan Aplikasi Pengumuman" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Aplikasi Pemain Trivial" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Nombor telefon diperlukan untuk dimasuk" + +#~ msgid "True Call Queueing" +#~ msgstr "Panggilan antrian benar" + +#~ msgid "Random goto" +#~ msgstr "Pergi ke random" + +#~ msgid "Read Variable Application" +#~ msgstr "Aplikasi Baca Variabel" + +#~ msgid "Read in a file" +#~ msgstr "Baca dalam fail" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Masa benar mencari / menulis kembali data " + +#~ msgid "Trivial Record Application" +#~ msgstr "Aplikasi Trivial Rakam" + +#~ msgid "Say time" +#~ msgstr "Katakan masa" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Aplikasi Hantar DTMF angka" + +#~ msgid "Send Text Applications" +#~ msgstr "Aplikasi Kirim Mesej" + +#~ msgid "Set CallerID Application" +#~ msgstr "Aplikasi menetapkan CallerID" + +#~ msgid "CDR user field apps" +#~ msgstr "Aplikasi CDR bidang pengguna" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "beban => .so ; Menetapkan Nama CallerID" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Menetapkan Nombor RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Menetapkan Kemampuan Transfer ISDN" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "Penangan SMS/PSTN" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Menutup saluran yang diminta" + +#~ msgid "Stack Routines" +#~ msgstr "Rutinitas Stack" + +#~ msgid "Generic System() application" +#~ msgstr "Aplikasi Generic Sistem()" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Putar dengan Pengesanan Bicara" + +#~ msgid "Interface Test Application" +#~ msgstr "Aplikasi Antarmuka Test" + +#~ msgid "Transfer" +#~ msgstr "Transfer" + +#~ msgid "TXTCIDName" +#~ msgstr "Nama TXTCID" + +#~ msgid "Send URL Applications" +#~ msgstr "Aplikasi Kirim URL" + +#~ msgid "Custom User Event Application" +#~ msgstr "Aplikasi Acara Pengguna Tersuai" + +#~ msgid "Send verbose output" +#~ msgstr "Kirim keluaran verbose" + +#~ msgid "Voicemail" +#~ msgstr "Voicemail" + +#~ msgid "Waits until first ring after time" +#~ msgstr "Menunggu waktu sampai setelah deringan pertama" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Aplikasi Tunggu Untuk Tenang" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "Sementara Loops dan Pelaksanaan bersyarat" + +#~ msgid "Comma Separated Values CDR Backend" +#~ msgstr "Hujung belakang nilai-nilai dipisahkan koma CDR" + +#~ msgid "Customizable Comma Separated Values CDR Backend" +#~ msgstr "Nilai-nilai dipisahkan koma CDR hujung belakang yang disesuaikan" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Hujung belakang asterisk panggilan pengurus CDR " + +#~ msgid "MySQL CDR Backend" +#~ msgstr "Hujung belakang MySQL CDR" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "Hujung belakang PostgreSQL CDR" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "Hujung belakang SQLite CDR" + +#~ msgid "Agent Proxy Channel" +#~ msgstr "Agen Proksi Saluran" + +#~ msgid "Option chan_iax2" +#~ msgstr "Pilihan chan_iax2" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Saluran Proksi Tempatan" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Session Initiation Protocol (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Adaptif Pengkamiran PCM Coder/Decoder" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "GSM/PCM16 (ditandatangani linier) Codec Terjemahan" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Speex/PCM16 (ditandatangani linier) Codec Terjemahan" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Sun Microsystems AU format (ditandatangani linier)" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Asterisk Sambungan Bahasa Compiler" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Teks Sambungan Tatarajah" + +#~ msgid "Loopback Switch" +#~ msgstr "Loop Beralih Kembali" + +#~ msgid "MySQL Config Resource" +#~ msgstr "MySQL menatarajah sumber daya" + +#~ msgid "ODBC Config Resource" +#~ msgstr "ODBC tatarajah sumber daya" + +#~ msgid "PGSQL Module" +#~ msgstr "Modul PGSQL" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "tanda tangan digital kriptografi" + +#~ msgid "Call Parking Resource" +#~ msgstr "Panggilan Parkir Sumber Daya" + +#~ msgid "Indications Configuration" +#~ msgstr "Penunjuk Konfigurasi" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "panggilan pemantauan sumber daya" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Muzik Pada Sumber Daya Tahan" + +#~ msgid "ODBC Resource" +#~ msgstr "Sumber ODBC" + +#~ msgid "SMDI Module" +#~ msgstr "Modul SMDI" + +#~ msgid "SNMP Module" +#~ msgstr "Modul SNMP" + +#~ msgid "Music On Hold" +#~ msgstr "Muzik Di Tahan" + +#~ msgid "Application" +#~ msgstr "Aplikasi" + +#~ msgid "Directory of Music" +#~ msgstr "Direktori Muzik" + +#~ msgid "Option mode" +#~ msgstr "Pilihan mod" + +#~ msgid "Random Play" +#~ msgstr "Bermain Rawak" + +#~ msgid "DTMF mode" +#~ msgstr "Mode DTMF" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Domain utama identiti untuk Dari: header" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "Dari pengguna (diperlukan oleh banyak pembekal SIP)" + +#~ msgid "Ring on incoming dialplan contexts" +#~ msgstr "Dering pada konteks rancangan panggilan masuk" + +#~ msgid "Allow Insecure for" +#~ msgstr "Biarkan tidak selamat untuk" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Peti mel untuk MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT antara telefon dan asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Menyemak tag di header" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Balas Masa tamat (ms) untuk sambungan ke bawah" + +#~ msgid "Register connection" +#~ msgstr "Register sambungan" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "Dial perpanjangan sendiri untuk peti mel" + +#~ msgid "Client Type" +#~ msgstr "Pelanggan Jenis" + +#~ msgid "Section sipgeneral" +#~ msgstr "Bahagian sipgeneral" + +#~ msgid "Allow codecs" +#~ msgstr "Membenarkan codec" + +#~ msgid "SIP realm" +#~ msgstr "Dunia SIP" + +#~ msgid "Voicemail general options" +#~ msgstr "Pilihan umum Voicemail" + +#~ msgid "From Email address of server" +#~ msgstr "Dari alamat email server" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Kotak mail suara" + +#~ msgid "Email contains attachment" +#~ msgstr "Email mengandungi lampiran" + +#~ msgid "Display Name" +#~ msgstr "Nama Paparan" + +#~ msgid "Password" +#~ msgstr "Kata laluan" + +#~ msgid "zone" +#~ msgstr "daerah" + +#~ msgid "Voice Zone settings" +#~ msgstr "Tetapan Zon Suara" + +#~ msgid "Message Format" +#~ msgstr "Format Mesej" diff --git a/feeds/luci/applications/luci-app-asterisk/po/no/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/no/asterisk.po new file mode 100644 index 0000000..70c448d --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/no/asterisk.po @@ -0,0 +1,12 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" diff --git a/feeds/luci/applications/luci-app-asterisk/po/pl/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/pl/asterisk.po new file mode 100644 index 0000000..f092853 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/pl/asterisk.po @@ -0,0 +1,75 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-18 01:39+0200\n" +"Last-Translator: Michał \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Ustawienia Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Katalog AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Buforuj nagrane pliki podczas nagrywania" + +#~ msgid "Debug Level" +#~ msgstr "Poziom debugowania" + +#~ msgid "Disable some warnings" +#~ msgstr "Wyłącz niektóre ostrzeżenia" + +#~ msgid "Dump core on crash" +#~ msgstr "Wykonaj zrzut pamięci podczas awarii" + +#~ msgid "High Priority" +#~ msgstr "Wysoki Priorytet" + +#~ msgid "Initialise Crypto" +#~ msgstr "Uruchom Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Użyj wbudowanego próbkowania" + +#~ msgid "Log directory" +#~ msgstr "Katalog logów" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Max. dozwolona ilość połączeń" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Max. obciążenie powodujące odrzucanie nowych połączeń" + +#~ msgid "Disable console colors" +#~ msgstr "Wyłącz kolory konsoli" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Katalog tymczasowy dla plików dźwiękowych" + +#~ msgid "The Group to run as" +#~ msgstr "Grupa dla uruchamiania" + +#~ msgid "The User to run as" +#~ msgstr "Użytkownik dla uruchamiania" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Katalog bufora poczty głosowej" + +#~ msgid "Time Zone" +#~ msgstr "Strefa Czasowa" + +#~ msgid "localzone" +#~ msgstr "localzone" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" diff --git a/feeds/luci/applications/luci-app-asterisk/po/pt-br/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/pt-br/asterisk.po new file mode 100644 index 0000000..00a0bb6 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/pt-br/asterisk.po @@ -0,0 +1,691 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2011-10-18 22:20+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Opções Gerais do Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Diretório do AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Guardar em cache os arquivos de som durante a gravação" + +#~ msgid "Debug Level" +#~ msgstr "Nível de detalhamento" + +#~ msgid "Disable some warnings" +#~ msgstr "Desativar alguns avisos" + +#~ msgid "Dump core on crash" +#~ msgstr "Guardar o core quando o programa estourar" + +#~ msgid "High Priority" +#~ msgstr "Alta Prioridade" + +#~ msgid "Initialise Crypto" +#~ msgstr "Inicializar Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Usar Temporização Interna" + +#~ msgid "Log directory" +#~ msgstr "Diretório de registos" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Número máximo de chamadas permitidas" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Carga máxima para deixar de aceitar novas chamadas" + +#~ msgid "Disable console colors" +#~ msgstr "Desativar cores no console" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Diretório de cache para arquivos de som" + +#~ msgid "The Group to run as" +#~ msgstr "O grupo sob o qual o asterisk será executado" + +#~ msgid "The User to run as" +#~ msgstr "O usuário sob o qual o asterisk será executado" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Directorio da spool de voicemail" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefixar o nome de sistema à UniquID" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "" +#~ "Construir os caminhos de transcode atraves de SLINEAR e não directamente" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmitir silencio SLINEAR durante a gravação de um canal" + +#~ msgid "Verbose Level" +#~ msgstr "Nível de Detalhamento" + +#~ msgid "Time Zone" +#~ msgstr "Fuso Horário" + +#~ msgid "Section dialplan" +#~ msgstr "Seção do Plano de Marcação" + +#~ msgid "include" +#~ msgstr "incluir" + +#~ msgid "Dialplan Extension" +#~ msgstr "Extensão do Plano de Discagem" + +#~ msgid "Dialplan General Options" +#~ msgstr "Opções Gerais do Plano de Discagem" + +#~ msgid "Allow transfer" +#~ msgstr "Permitir transferência" + +#~ msgid "Reinvite/redirect media connections" +#~ msgstr "Reconvidar/redirecionar conexões multimídia" + +#~ msgid "Clear global vars" +#~ msgstr "Limpar variáveis globais" + +#~ msgid "Dialplan Goto" +#~ msgstr "Encaminhamento do Plano de Discagem" + +#~ msgid "Dialplan Conference" +#~ msgstr "Conferência do Plano de Discagem" + +#~ msgid "Dialplan Time" +#~ msgstr "Tempo do Plano de Discagem" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Correio de voz do Plano de Discagem" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Zonas do Plano de Discagem" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Prefixo para adicionar aos planos de discagem correspondentes" + +#~ msgid "Match International prefix" +#~ msgstr "Coincidir com o prefixo internacional" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Prefixo (0) para adicionar/remover para/de números internacionais" + +#~ msgid "localzone" +#~ msgstr "zona local" + +#~ msgid "Match plan" +#~ msgstr "Plano de combinação" + +#~ msgid "Connection to use" +#~ msgstr "Conexão usada" + +#~ msgid "Feature Key maps" +#~ msgstr "Mapeamentos de Tecla de Função" + +#~ msgid "Attended transfer key" +#~ msgstr "Tecla de transferência assistida" + +#~ msgid "Blind transfer key" +#~ msgstr "Tecla de transferência cega" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Tecla para Desligar a chamada" + +#~ msgid "Key to Park call" +#~ msgstr "Tecla para Estacionar a chamada" + +#~ msgid "Parking Feature" +#~ msgstr "Recurso de Estacionamento" + +#~ msgid "ADSI Park" +#~ msgstr "Estacionamento ADSI" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Tempo limite (seg) da transferência assistida" + +#~ msgid "One touch record key" +#~ msgstr "Tecla de gravação em um toque" + +#~ msgid "Name of call context for parking" +#~ msgstr "Nome do contexto de chamada para o estacionamento" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Arquivo de som para tocar para o chamador estacionado" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Tempo máximo (ms) entre os dígitos para ativação de recursos" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Método para Encontrar uma Vaga de Estacionamento" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Toque o tom de cortesia para" + +#~ msgid "Enable Parking" +#~ msgstr "Habilitar Estacionamento" + +#~ msgid "Extension to dial to park" +#~ msgstr "Extensão para discar para estacionar" + +#~ msgid "Parking time (secs)" +#~ msgstr "Tempo de estacionamento (seg)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "faixa de extensões para o estacionamento de chamada" + +#~ msgid "Pickup extension" +#~ msgstr "Extensão de captura" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Segundos para esperar entre os dígitos quando transferindo" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "emitir som quando a transferência assistida estiver completa" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "Emitir som quando a transferência assistida falhar" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Recarregar a Configuração de Hardware" + +#~ msgid "Reboot Method" +#~ msgstr "Método de Reinicialização" + +#~ msgid "Parameter" +#~ msgstr "Parâmetro" + +#~ msgid "Option type" +#~ msgstr "Tipo de Opção" + +#~ msgid "User name" +#~ msgstr "Nome do usuário" + +#~ msgid "IAX General Options" +#~ msgstr "Opções Gerais do Plano de Discagem" + +#~ msgid "Allow Codecs" +#~ msgstr "Permitir Codificadores (codecs)" + +#~ msgid "Static" +#~ msgstr "Estático" + +#~ msgid "Write Protect" +#~ msgstr "Proteção à Escrita" + +#~ msgid "Meetme Conference" +#~ msgstr "Conferência Encontre-me" + +#~ msgid "Admin PIN" +#~ msgstr "PIN do Administrador" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN da Conferência" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Opções Gerais da Conferência Encontre-me" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Número de buffers de 20ms que serão usados" + +#~ msgid "Modules" +#~ msgstr "Módulos" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Aplicativo de Recepção de Alarmes" + +#~ msgid "Authentication Application" +#~ msgstr "Aplicativo de Autenticação" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Garanta que o asterisk não salva o CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Verifique se o canal está disponível" + +#~ msgid "Listen in on any channel" +#~ msgstr "Escute em qualquer canal" + +#~ msgid "Control Playback Application" +#~ msgstr "Controlar o Aplicativo de Reprodução" + +#~ msgid "Cuts up variables" +#~ msgstr "Variáveis de Cortes" + +#~ msgid "Database access functions" +#~ msgstr "Funções de acesso ao banco de dados" + +#~ msgid "Dialing Application" +#~ msgstr "Aplicativo de Discagem" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Aplicativo de Máquina de Ditado Virtual" + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Suporte a Captura de Chamadas Direcionadas" + +#~ msgid "Extension Directory" +#~ msgstr "Diretório de Extensão" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "Aplicativo DISA (Acesso Direto ao Sistema Interior)" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Descarregar Aplicativo de variáveis do canal" + +#~ msgid "Simple Echo Application" +#~ msgstr "Aplicativo de Eco Simples" + +#~ msgid "ENUM Lookup" +#~ msgstr "Pesquisa ENUM" + +#~ msgid "Reevaluates strings" +#~ msgstr "Reavaliar sequências de caracteres" + +#~ msgid "Executes applications" +#~ msgstr "Executa aplicativos" + +#~ msgid "External IVR application interface" +#~ msgstr "Interface de aplicativo IVR externo" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Bifurcar o CDR em duas entidades separadas" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Pegar o ID do CPE ADSI" + +#~ msgid "Group Management Routines" +#~ msgstr "Rotinas de Gerenciamento e Grupo" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Codificar e Transmitir através do icecast e ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Aplicativo de Transmissão de Imagem" + +# what is this black? Seems to be truncated! +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Buscar o Identificador de chamadas/nome/número do preto" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Buscar o Identificador de chamadas/nome/número do banco de dados" + +#~ msgid "Extension Macros" +#~ msgstr "Macros de extensão" + +#~ msgid "A simple math Application" +#~ msgstr "Um Aplicativo simples de matemática" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Aplicativo de soma de verificação MD5" + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Aplicativo de Teste de Miliwatt (mu-law) Digital" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Gravar uma ligação e mixar o áudio durante a gravação" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Aplicativo de Anúncio e Estacionamento de Chamada" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Aplicativo de Reprodução Trivial" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Requer que seja informado um número de telefone" + +#~ msgid "True Call Queueing" +#~ msgstr "Enfileiramento Real da Chamada" + +#~ msgid "Random goto" +#~ msgstr "Vá para aleatório" + +#~ msgid "Read Variable Application" +#~ msgstr "Aplicativo de Leitura de Variável" + +#~ msgid "Read in a file" +#~ msgstr "Ler em um arquivo" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Escrita/Consulta de Dados em Tempo Real" + +#~ msgid "Trivial Record Application" +#~ msgstr "Aplicativo de Gravação Trivial" + +#~ msgid "Say time" +#~ msgstr "Dizer a hora" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Aplicativo para Enviar dígitos DTMF" + +#~ msgid "Send Text Applications" +#~ msgstr "Aplicativos para Enviar Texto" + +#~ msgid "Set CallerID Application" +#~ msgstr "Aplicativo de Definir a Identificação da Chamada" + +# I guess there is something wrong with English here +#~ msgid "CDR user field apps" +#~ msgstr "Aplicativos do campo do usuário no CDR" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "Carregar => .so ; Definir o Nome na Identificação da Chamada" + +#~ msgid "load => .so ; Set CallerID Number" +#~ msgstr "Carregar => .so ; Definir o Número na Identificação da Chamada" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Definir o Número do RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Definir Capacidade de Transferência ISDN" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "Tratador do SMS/PSTN" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Termina a ligação no canal requisitado" + +#~ msgid "Stack Routines" +#~ msgstr "Rotinas de Empilhamento" + +#~ msgid "Generic System() application" +#~ msgstr "Aplicativo de Sistema Genérico" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Reprodução com Detecção de Conversa" + +#~ msgid "Interface Test Application" +#~ msgstr "Aplicativo de Teste de Interface" + +#~ msgid "Transfer" +#~ msgstr "Transferir" + +#~ msgid "TXTCIDName" +#~ msgstr "TXTCIDName" + +#~ msgid "Send URL Applications" +#~ msgstr "Aplicativo para Enviar URL" + +#~ msgid "Custom User Event Application" +#~ msgstr "Aplicativo para Eventos do Usuário Personalizados" + +#~ msgid "Send verbose output" +#~ msgstr "Enviar saída detalhada" + +#~ msgid "Voicemail" +#~ msgstr "Correio de Voz" + +#~ msgid "Waits until first ring after time" +#~ msgstr "Espere até o primeiro toque após tempo" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Aplicativo para Esperar Por Silêncio" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "Laços de Repetição e Execução Condicional" + +#~ msgid "Comma Separated Values CDR Backend" +#~ msgstr "Serviço de CDR em Valores Separados por Vírgula" + +#~ msgid "Customizable Comma Separated Values CDR Backend" +#~ msgstr "Serviço de CDR em Valores Separados por Vírgula Personalizável" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Serviço de CDR de Gerenciamento de Chamadas Asterisk" + +#~ msgid "MySQL CDR Backend" +#~ msgstr "Serviço de CDR em MySQL" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "Serviço de CDR em PostgreSQL" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "Serviço de CDR em SQLite" + +#~ msgid "Agent Proxy Channel" +#~ msgstr "Canal de Proxy do Agente" + +#~ msgid "Option chan_iax2" +#~ msgstr "Opção chan_iax2" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Canal de Proxy Local" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Protocolo de Iniciação de Sessão (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Codificador/Decodificador PCM Diferencial Adaptativo" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "Codificador/Decodificador A-law" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "Codificador/Decodificador direto A-law e Mulaw" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "Transcodificador G726 ITU G.726-32kbps" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "Tradutor de codificação GSM/PCM16 (linear com sinal)" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Tradutor de codificação Speex/PCM16 (linear com sinal)" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Codificador/Decodificador Mu-law" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Formato AU Sun Microsystems (linear com sinal)" + +#~ msgid "G.723.1 Simple Timestamp File Format" +#~ msgstr "Formato de Arquivo de Selo Temporal Simples G.723.1" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Dado G.726 bruto (16/24/32/40kbps)" + +#~ msgid "Raw G729 data" +#~ msgstr "Dado G729 bruto" + +#~ msgid "Raw GSM data" +#~ msgstr "Dado GSM bruto" + +#~ msgid "Raw h263 data" +#~ msgstr "Dado h263 bruto" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "Imagem JPEG ((Joint Picture Experts Group)" + +#~ msgid "Raw uLaw 8khz Audio support (PCM)" +#~ msgstr "Suporte a uLaw 8khz Áudio bruto (PCM)" + +#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support" +#~ msgstr "carregar => .so ; Suporte a uLaw 8khz Áudio PCM bruto" + +#~ msgid "Raw Signed Linear Audio support (SLN)" +#~ msgstr "Suporte a Áudio Linear com Sinal (SLN)" + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Formato de Arquivo Dialogic VOX (ADPCM)" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Formato WAV da Microsoft (8000hz Linear com Sinal)" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Formato WAV da Microsoft (GSM Proprietário) " + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "" +#~ "Funções do plano de discagem relacionadas ao identificador da chamada" + +#~ msgid "ENUM Functions" +#~ msgstr "Funções ENUM" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "Funções de codificação / decodificação de URI" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Compilador da Linguagem de Extensão do Asterisk" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Configuração da Extensão de Texto" + +#~ msgid "load => .so ; Builtin dialplan functions" +#~ msgstr "carregar => .so ; Funções de plano de discagem embutidas" + +#~ msgid "Loopback Switch" +#~ msgstr "Interruptor loopback" + +#~ msgid "Realtime Switch" +#~ msgstr "Interruptor de Tempo Real" + +#~ msgid "Outgoing Spool Support" +#~ msgstr "Suporte a bufferização da Saída" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Wil Cal U (Discador Automático)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "Recurso de Configuração do Mysql" + +#~ msgid "ODBC Config Resource" +#~ msgstr "Recurso de Configuração do ODBC" + +#~ msgid "PGSQL Module" +#~ msgstr "Módulo do PGSQL" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Assinaturas Digitais Criptográficas" + +#~ msgid "Call Parking Resource" +#~ msgstr "Recurso de Estacionamento de Chamadas" + +#~ msgid "Indications Configuration" +#~ msgstr "Configuração dos Indicadores" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Recurso de Monitoramento de Chamada" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Recurso da Música de Espera" + +#~ msgid "ODBC Resource" +#~ msgstr "Recurso do ODBC" + +#~ msgid "SMDI Module" +#~ msgstr "Módulo SMDI" + +#~ msgid "SNMP Module" +#~ msgstr "Módulo SNMP" + +#~ msgid "Music On Hold" +#~ msgstr "Música de Espera" + +#~ msgid "Application" +#~ msgstr "Aplicativo" + +#~ msgid "Directory of Music" +#~ msgstr "Diretório de Música" + +#~ msgid "Option mode" +#~ msgstr "Modo da opção" + +#~ msgid "Random Play" +#~ msgstr "Toque Aleatoriamente" + +#~ msgid "DTMF mode" +#~ msgstr "Modo DTMF" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Identidade do primeiro domínio para cabeçalhos De:" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "Do usuário (necessário para muitos provedores de SIP)" + +# I didn't undestand this one +#~ msgid "Ring on incoming dialplan contexts" +#~ msgstr "Tocar no contextos de plano de discagem recebidas" + +#~ msgid "Allow Insecure for" +#~ msgstr "Permitir Inseguro para" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Caixa de Correio para MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT entre o telefone e o Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Verifique as etiquetas nos cabeçalhos" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Tempo Limite da Resposta (ms) para conexões desconectadas" + +#~ msgid "Register connection" +#~ msgstr "Registro da conexão" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "Discar extensão própria para a caixa de correio" + +#~ msgid "Client Type" +#~ msgstr "Tipo de Cliente" + +#~ msgid "Username" +#~ msgstr "Usuário" + +#~ msgid "Section sipgeneral" +#~ msgstr "Opções Gerais do SIP" + +#~ msgid "Allow codecs" +#~ msgstr "Permitir codificações" + +#~ msgid "SIP realm" +#~ msgstr "Domínio do SIP (realm)" + +#~ msgid "Voicemail general options" +#~ msgstr "Opções gerais do correio de voz" + +#~ msgid "From Email address of server" +#~ msgstr "Endereço do email de origem do servidor" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Caixas de Correio de Voz" + +#~ msgid "Email contains attachment" +#~ msgstr "O email contém anexos" + +#~ msgid "Email" +#~ msgstr "Email" + +#~ msgid "Display Name" +#~ msgstr "Nome para exibição" + +#~ msgid "Password" +#~ msgstr "Senha" + +#~ msgid "zone" +#~ msgstr "zona" + +#~ msgid "Voice Zone settings" +#~ msgstr "Configuração de Zona da Voz" + +#~ msgid "Message Format" +#~ msgstr "Formato da Mensagem" diff --git a/feeds/luci/applications/luci-app-asterisk/po/pt/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/pt/asterisk.po new file mode 100644 index 0000000..d1b9836 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/pt/asterisk.po @@ -0,0 +1,150 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2009-05-20 11:54+0200\n" +"Last-Translator: Jose Monteiro \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Opções Gerais do Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Directorio AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Guardar em cache os ficheiros de som durante a gravação" + +#~ msgid "Debug Level" +#~ msgstr "Nível de debug" + +#~ msgid "Disable some warnings" +#~ msgstr "Desactivar alguns avisos" + +#~ msgid "Dump core on crash" +#~ msgstr "Guardar o core quando houver crash" + +#~ msgid "High Priority" +#~ msgstr "Alta Prioridade" + +#~ msgid "Initialise Crypto" +#~ msgstr "Inicializar Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Usar temporizações internas" + +#~ msgid "Log directory" +#~ msgstr "Directorio de registos" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Maximo de chamadas permitidas" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Maximo de carga para deixar de aceitar novas chamadas" + +#~ msgid "Disable console colors" +#~ msgstr "Desactivar cores na consola" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Directorio de cache para ficheiros de som" + +#~ msgid "The Group to run as" +#~ msgstr "O grupo sob o qual o asterisk será executado" + +#~ msgid "The User to run as" +#~ msgstr "O utilizador sob o qual o asterisk será executado" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Directorio da spool de voicemail" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Prefixar o nome de sistema à UniquID" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "" +#~ "Construir os caminhos de transcode atraves de SLINEAR e não directamente" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Transmitir silencio SLINEAR durante a gravação de um canal" + +#~ msgid "Verbose Level" +#~ msgstr "Nivel de verbosidade" + +#~ msgid "Time Zone" +#~ msgstr "Fuso Horário" + +#~ msgid "Section dialplan" +#~ msgstr "Secção do Plano de Marcação" + +#~ msgid "include" +#~ msgstr "incluir" + +#~ msgid "Dialplan Extension" +#~ msgstr "Extensão do Plano de Marcação" + +#~ msgid "Dialplan General Options" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#~ msgid "Allow transfer" +#~ msgstr "Permitir transferência" + +#~ msgid "Reinvite/redirect media connections" +#~ msgstr "Redirigir/Repetir ligações multimedia" + +#~ msgid "Clear global vars" +#~ msgstr "Limpar variaveis globais" + +#~ msgid "Dialplan Goto" +#~ msgstr "Encaminhamento do Plano de Marcação" + +#~ msgid "Dialplan Conference" +#~ msgstr "Conferencia do Plano de Marcação" + +#, fuzzy +#~ msgid "Dialplan Time" +#~ msgstr "Conferencia do Plano de Marcação" + +#, fuzzy +#~ msgid "Dialplan Voicemail" +#~ msgstr "Encaminhamento do Plano de Marcação" + +#, fuzzy +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Secção do Plano de Marcação" + +#, fuzzy +#~ msgid "Connection to use" +#~ msgstr "Secção do Plano de Marcação" + +#, fuzzy +#~ msgid "IAX General Options" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "Allow Codecs" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "Section sipgeneral" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "Allow codecs" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "SIP realm" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "Voicemail general options" +#~ msgstr "Opções Gerais do Plano de Marcação" + +#, fuzzy +#~ msgid "Voice Zone settings" +#~ msgstr "Secção do Plano de Marcação" diff --git a/feeds/luci/applications/luci-app-asterisk/po/ro/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/ro/asterisk.po new file mode 100644 index 0000000..e271370 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/ro/asterisk.po @@ -0,0 +1,54 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-07 00:35+0200\n" +"Last-Translator: Daniel \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Optiunile generale Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Director AGI" + +#~ msgid "Disable some warnings" +#~ msgstr "Dezactiveaza cateva avertizari" + +#~ msgid "High Priority" +#~ msgstr "Prioritate inalta" + +#~ msgid "Log directory" +#~ msgstr "Director de loguri" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Incarcarea maxima de cand se refuza apeluri noi" + +#~ msgid "Disable console colors" +#~ msgstr "Dezactiveaza culorile in consola" + +#~ msgid "The Group to run as" +#~ msgstr "Ruleaza sub grupul" + +#~ msgid "The User to run as" +#~ msgstr "Ruleaza sub utilizatorul" + +#~ msgid "Time Zone" +#~ msgstr "Fusul orar" + +#~ msgid "Allow transfer" +#~ msgstr "Permite transferul" + +#~ msgid "Clear global vars" +#~ msgstr "Goleste variabilele globale" + +#~ msgid "Connection to use" +#~ msgstr "Conexiunea pentru folosire" diff --git a/feeds/luci/applications/luci-app-asterisk/po/ru/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/ru/asterisk.po new file mode 100644 index 0000000..d27ba33 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/ru/asterisk.po @@ -0,0 +1,515 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-04-02 15:02+0200\n" +"Last-Translator: Kamal \n" +"Language-Team: LANGUAGE \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Общие настройки Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "Каталог AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Кэшировать звуковые файлы во время записи" + +#~ msgid "Debug Level" +#~ msgstr "Уровень отладки" + +#~ msgid "Disable some warnings" +#~ msgstr "Отключить некоторые предупреждения" + +#~ msgid "Dump core on crash" +#~ msgstr "Сохранять дамп ядра при фатальной ошибке" + +#~ msgid "High Priority" +#~ msgstr "Высокий приоритет" + +#~ msgid "Initialise Crypto" +#~ msgstr "Включить шифрование" + +#~ msgid "Use Internal Timing" +#~ msgstr "Использовать внутренние тайминги" + +#~ msgid "Log directory" +#~ msgstr "Каталог файлов журнала" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Максимальное разрешённое количество вызовов" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Максимальная нагрузка для запрета приёма новых вызовов" + +#~ msgid "Disable console colors" +#~ msgstr "Выключить цвета консоли" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Каталог кэша звуковых файлов" + +#~ msgid "The Group to run as" +#~ msgstr "Группа, от имени которой запускать" + +#~ msgid "The User to run as" +#~ msgstr "Пользователь, от имени которого запускать" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Добавлять имя системы к уникальному идентификатору (UID)" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Передавать тишину в формате SLINEAR при записи канала" + +#~ msgid "Section dialplan" +#~ msgstr "Раздел правил набора" + +#~ msgid "include" +#~ msgstr "включить" + +#~ msgid "Dialplan Extension" +#~ msgstr "Раcширение правила набора" + +#~ msgid "Dialplan General Options" +#~ msgstr "Общие настройки правил набора" + +#~ msgid "Allow transfer" +#~ msgstr "Разрешить перевод" + +#~ msgid "Clear global vars" +#~ msgstr "Очистить глобальные переменные" + +#~ msgid "Dialplan Conference" +#~ msgstr "Правила набора для конференции" + +#~ msgid "Dialplan Time" +#~ msgstr "Время правил набора" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Правила набора для голосовой почты" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Зоны для правил набора" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Префикс (0) для добавления/удаления к/из международных номеров" + +#~ msgid "localzone" +#~ msgstr "местная зона" + +#~ msgid "Connection to use" +#~ msgstr "Использовать соединение" + +#~ msgid "Feature Key maps" +#~ msgstr "Назначения функцилнальных клавиш" + +#~ msgid "Key to Disconnect call" +#~ msgstr "Клавиша для разрыва соединения" + +#~ msgid "Key to Park call" +#~ msgstr "Клавиша для \"парковки\" вызова " + +#~ msgid "Parking Feature" +#~ msgstr "Функция \"Парковка\"" + +#~ msgid "One touch record key" +#~ msgstr "Клавиша записи в одно касание" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Аудио файл, проигрываемый \"припаркованному\"" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Максимальное время (мс) между нажатиями для активации функции" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Метод поиска слота для парковки" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Играть тон вежливости для" + +#~ msgid "Enable Parking" +#~ msgstr "Разрешить \"Парковку\"" + +#~ msgid "Extension to dial to park" +#~ msgstr "Расширение набора для \"парковки\"" + +#~ msgid "Parking time (secs)" +#~ msgstr "Время \"Парковки\" (секунды)" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Диапазон расширений для \"парковки\" вызова" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Перезагрузить конфигурацию оборудования" + +#~ msgid "Reboot Method" +#~ msgstr "Метод перезагрузки" + +#~ msgid "Parameter" +#~ msgstr "Параметр" + +#~ msgid "Option type" +#~ msgstr "Тип параметра" + +#~ msgid "User name" +#~ msgstr "Имя пользователя" + +#~ msgid "IAX General Options" +#~ msgstr "Общие параметры IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Разрешить кодеки" + +#~ msgid "Static" +#~ msgstr "Статический" + +#~ msgid "Write Protect" +#~ msgstr "Защита от записи" + +#~ msgid "Meetme Conference" +#~ msgstr "Конференция Meetme" + +#~ msgid "Admin PIN" +#~ msgstr "PIN администратора" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN совещания" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Общие параметры конференции Meetme" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Количество используемых 20 мс буферов" + +#~ msgid "Modules" +#~ msgstr "Модули" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Приложение сбора сигналов тревоги" + +#~ msgid "Authentication Application" +#~ msgstr "Приложение аутентификации" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Убедитесь что Asterisk не сохраняет CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Проверить канал на доступность" + +#~ msgid "Listen in on any channel" +#~ msgstr "Слашать на любом канале" + +#~ msgid "Database access functions" +#~ msgstr "Функции доступа базы данных" + +#~ msgid "Dialing Application" +#~ msgstr "Приложение набора" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "" +#~ "Приложение доступа к добавочной линии путем прямого установления " +#~ "входящего соединения (DISA)" + +#~ msgid "Dump channel variables Application" +#~ msgstr "Приложение сбора переменных канала" + +#~ msgid "Simple Echo Application" +#~ msgstr "Приложение эха" + +#~ msgid "Executes applications" +#~ msgstr "Выполняет приложение" + +#~ msgid "External IVR application interface" +#~ msgstr "Интерфейс внешнего IVR приложения" + +#~ msgid "Group Management Routines" +#~ msgstr "Операции управления группой" + +#~ msgid "Image Transmission Application" +#~ msgstr "Приложение передачи изображений" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Искать имя CallerID в \"черном\" списке" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Искать имя CallerID в локальной базе" + +#~ msgid "Extension Macros" +#~ msgstr "Макрос расширения" + +#~ msgid "A simple math Application" +#~ msgstr "Простое математическое приложение" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Приложение MD5" + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Записать вызов и микшировать аудио во время записи" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Приложение для воспроизведения" + +#~ msgid "Require phone number to be entered" +#~ msgstr "Требовать номер телефона, который необходимо ввести" + +#~ msgid "True Call Queueing" +#~ msgstr "Постановка вызовов на ожидание" + +#~ msgid "Read Variable Application" +#~ msgstr "Приложение чтения переменных" + +#~ msgid "Read in a file" +#~ msgstr "Читать в файл" + +#~ msgid "Trivial Record Application" +#~ msgstr "Приложения для записи" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Приложение отправки DTMF" + +#~ msgid "Send Text Applications" +#~ msgstr "Приложения отправки текста" + +#~ msgid "Set CallerID Application" +#~ msgstr "Приложение установки CallerID" + +#~ msgid "Set RDNIS Number" +#~ msgstr "Установить номер RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Установить возможности передачи ISDN " + +#~ msgid "SMS/PSTN handler" +#~ msgstr "Обработчик SMS/PSTN" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Отсоединяет запрошенный канал" + +#~ msgid "Stack Routines" +#~ msgstr "Функции стека" + +#~ msgid "Generic System() application" +#~ msgstr "Приложение System()" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Воспроизведение с обнаружением разговора" + +#~ msgid "Interface Test Application" +#~ msgstr "Приложение для тестирования интерфейса" + +#~ msgid "Transfer" +#~ msgstr "Пересылка" + +#~ msgid "TXTCIDName" +#~ msgstr "Имя TXTCID" + +#~ msgid "Send URL Applications" +#~ msgstr "Приложения отсылки URL" + +#~ msgid "Custom User Event Application" +#~ msgstr "Приложение пользовательских событий" + +#~ msgid "Send verbose output" +#~ msgstr "Отправлять подробный вывод" + +#~ msgid "Voicemail" +#~ msgstr "Голосовая почта" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "Циклы while и условное выполнение" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Бэкенд CDR менеджера вызовов Asterisk" + +#~ msgid "MySQL CDR Backend" +#~ msgstr "Бэкенд MySQL CDR" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "Бэкенд PostgreSQL CDR" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "Бэкенд SQLite CDR" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Локальный прокси-канал" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Session Initiation Protocol - протокол установления сеанса (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Адаптивный дифференциальный PCM кодер/декодер" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "A-law кодер/декодер" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "A-law и Mu-law прямой кодер/декодер" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "ITU G.726-32кбит/с G726 транскодер" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "Транслятор кодека GSM/PCM16 (знаковый линейный)" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Транслятор кодека Speex/PCM16 (знаковый линейный)" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Mu-law кодер/декодер" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Формат Sun Microsystems AU (знаковый линейный)" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Необработанные данные G.726 (16/24/32/40кбит/с)" + +#~ msgid "Raw G729 data" +#~ msgstr "Необработанные данные G729" + +#~ msgid "Raw GSM data" +#~ msgstr "Необработанные данные GSM" + +#~ msgid "Raw h263 data" +#~ msgstr "Необработанные данные h263" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "Изображение JPEG (Joint Picture Experts Group) " + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Формат Dialogic VOX (ADPCM)" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Формат Microsoft WAV (800Гц, линейный знаковый)" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Формат Microsoft WAV (проприетарный GSM)" + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "Функции правил набора Caller ID" + +#~ msgid "ENUM Functions" +#~ msgstr "Функции ENUM" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "Функции кодирования/декодирования URI" + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Компилятор языка расширений Asterisk" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Настройка текстового расширения" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Позвоню тебе (Wil Cal U, автодозвонщик)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "Ресурс конфигурации MySQL" + +#~ msgid "ODBC Config Resource" +#~ msgstr "Ресурс конфигурации ODBC" + +#~ msgid "PGSQL Module" +#~ msgstr "PGSQL модуль" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Цифровые подписи" + +#~ msgid "Call Parking Resource" +#~ msgstr "Ресурс \"парковки\"" + +#~ msgid "Indications Configuration" +#~ msgstr "Конфигурация индикаций" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Ресурс мониторинга вызова" + +#~ msgid "ODBC Resource" +#~ msgstr "Ресурс ODBC" + +#~ msgid "SMDI Module" +#~ msgstr "Модуль SMDI" + +#~ msgid "SNMP Module" +#~ msgstr "Модуль SNMP" + +#~ msgid "Music On Hold" +#~ msgstr "Музыка при ожидании" + +#~ msgid "Application" +#~ msgstr "Приложение" + +#~ msgid "Directory of Music" +#~ msgstr "Директория музыки" + +#~ msgid "Random Play" +#~ msgstr "Воспроизведение в случайном порядке" + +#~ msgid "DTMF mode" +#~ msgstr "DTMF режим" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "From user (от пользователя, требуется многими SIP-провайдерами)" + +#~ msgid "Allow Insecure for" +#~ msgstr "Разрешить небезопасные для" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Почтовый ящик для MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT между телефоном и Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Проверять метки в заголовках" + +#~ msgid "Register connection" +#~ msgstr "Зарегистрировать соединение" + +#~ msgid "Client Type" +#~ msgstr "Тип клиента" + +#~ msgid "Username" +#~ msgstr "Имя пользователя" + +#~ msgid "Section sipgeneral" +#~ msgstr "Общие SIP" + +#~ msgid "SIP realm" +#~ msgstr "SIP realm" + +#~ msgid "Voicemail general options" +#~ msgstr "Общие настройки голосовой почты" + +#~ msgid "From Email address of server" +#~ msgstr "От адреса эл. почты сервера" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Ящики голосовой почты" + +#~ msgid "Email contains attachment" +#~ msgstr "Письмо содержит вложение" + +#~ msgid "Email" +#~ msgstr "Эл. почта" + +#~ msgid "Display Name" +#~ msgstr "Отображаемое имя" + +#~ msgid "Password" +#~ msgstr "Пароль" + +#~ msgid "zone" +#~ msgstr "зона" + +#~ msgid "Voice Zone settings" +#~ msgstr "Настройки голосовой зоны" + +#~ msgid "Message Format" +#~ msgstr "Формат сообщения" diff --git a/feeds/luci/applications/luci-app-asterisk/po/sk/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/sk/asterisk.po new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci/applications/luci-app-asterisk/po/sv/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/sv/asterisk.po new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci/applications/luci-app-asterisk/po/templates/asterisk.pot b/feeds/luci/applications/luci-app-asterisk/po/templates/asterisk.pot new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci/applications/luci-app-asterisk/po/tr/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/tr/asterisk.po new file mode 100644 index 0000000..c8b4e58 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/tr/asterisk.po @@ -0,0 +1,12 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" diff --git a/feeds/luci/applications/luci-app-asterisk/po/uk/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/uk/asterisk.po new file mode 100644 index 0000000..d6dd63e --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/uk/asterisk.po @@ -0,0 +1,79 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-21 14:22+0200\n" +"Last-Translator: Anonymous Pootle User\n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Головні налаштування Asterisk" + +#~ msgid "AGI directory" +#~ msgstr "AGI тека " + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Кешувати файли записів поки йде запис" + +#~ msgid "Debug Level" +#~ msgstr "Рівень налагоджування" + +#~ msgid "Disable some warnings" +#~ msgstr "Вимкнути деякі попередження" + +#~ msgid "Dump core on crash" +#~ msgstr "Зберегти дамп ядра в разі фатальної помилки" + +#~ msgid "High Priority" +#~ msgstr "Високий пріоритет" + +#~ msgid "Initialise Crypto" +#~ msgstr "Ініціалізувати шифрування" + +#~ msgid "Use Internal Timing" +#~ msgstr "Використовувати внутрішні таймінги" + +#~ msgid "Log directory" +#~ msgstr "Тека з журналом" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Максимальна кількість дозволених дзвінків" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Максимальне навантаження, при якому зупиняти прийом дзвінків" + +#~ msgid "Disable console colors" +#~ msgstr "Вимкнути кольори в консолі" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Тека з кешованими звуковими файлами" + +#~ msgid "The Group to run as" +#~ msgstr "Запустити з правами Групи" + +#~ msgid "The User to run as" +#~ msgstr "Запустити з правами Користувача" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Тека з голосовою поштою" + +#, fuzzy +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Префікс Uniquid з назвою системи " + +#~ msgid "Time Zone" +#~ msgstr "Часовий пояс" + +#~ msgid "Allow transfer" +#~ msgstr "Дозволити переадресацію" + +#~ msgid "Clear global vars" +#~ msgstr "Видалити глобальні змінні" diff --git a/feeds/luci/applications/luci-app-asterisk/po/vi/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/vi/asterisk.po new file mode 100644 index 0000000..133f864 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/vi/asterisk.po @@ -0,0 +1,680 @@ +# asterisk.pot +# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:58+0200\n" +"PO-Revision-Date: 2009-08-16 08:36+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Asterisk những tùy chọn căn bản" + +#~ msgid "AGI directory" +#~ msgstr "Thư mục AGI" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "Cache ghi lại tập tin âm thanh trong suốt qua trình recording" + +#~ msgid "Debug Level" +#~ msgstr "Debug Level" + +#~ msgid "Disable some warnings" +#~ msgstr "Vô hiệu hóa một số cảnh báo" + +#~ msgid "Dump core on crash" +#~ msgstr "Dump core on crash" + +#~ msgid "High Priority" +#~ msgstr "High Priority" + +#~ msgid "Initialise Crypto" +#~ msgstr "Initialise Crypto" + +#~ msgid "Use Internal Timing" +#~ msgstr "Sử dụng thời gian nội bộ" + +#~ msgid "Log directory" +#~ msgstr "Thư mục log" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "Số lượng cuộc gọi tối đa cho phép" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "Mức độ tải tối đa để ngừng thu nhận cuộc gọi mới" + +#~ msgid "Disable console colors" +#~ msgstr "Vô hiệu hóa bản điều khiển màu sắc" + +#~ msgid "Sound files Cache directory" +#~ msgstr "Thư mục sound files cache" + +#~ msgid "The Group to run as" +#~ msgstr "Nhóm vận hành như" + +#~ msgid "The User to run as" +#~ msgstr "Người sử dụng vận hành như" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "Thư mục Voicemail Spool " + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "Tiền tố UniquID với tên hệ thống" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "Xây dựng đừng dẫn transcode via SLINEAR, không trực tiếp" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "Truyền SLINEAR silence trong khi recording một channel" + +#~ msgid "Verbose Level" +#~ msgstr "Verbose Level" + +#~ msgid "Section dialplan" +#~ msgstr "Section dialplan" + +#~ msgid "include" +#~ msgstr "bao gồm" + +#~ msgid "Dialplan Extension" +#~ msgstr "Dialplan Extension" + +#~ msgid "Dialplan General Options" +#~ msgstr "Dialplan tùy chọn tổng quát" + +#~ msgid "Allow transfer" +#~ msgstr "Cho phép chuyển đổi" + +#~ msgid "Clear global vars" +#~ msgstr "Xóa global vars" + +#~ msgid "Dialplan Goto" +#~ msgstr "Dialplan Goto" + +#~ msgid "Dialplan Conference" +#~ msgstr "Dialplan Conference" + +#~ msgid "Dialplan Time" +#~ msgstr "Dialplan Time" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "Dialplan Voicemail" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "Dial Zones cho Dialplan" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "Tiền tố để thêm vào matching dialplans" + +#~ msgid "Match International prefix" +#~ msgstr "Match tiền tố quốc tê" + +#~ msgid "Prefix (0) to add/remove to/from international numbers" +#~ msgstr "Tiền tố để thêm vào/ bỏ ra/ từ số gọi quốc tế" + +#~ msgid "localzone" +#~ msgstr "vùng địa phương" + +#~ msgid "Match plan" +#~ msgstr "Match plan" + +#~ msgid "Connection to use" +#~ msgstr "Kết nối sử dụng" + +#~ msgid "Feature Key maps" +#~ msgstr "Bản đồ phím tính năng" + +#~ msgid "Attended transfer key" +#~ msgstr "Attended transfer key" + +#~ msgid "Blind transfer key" +#~ msgstr "phím chuyển đổi ẩn" + +#~ msgid "Key to Disconnect call" +#~ msgstr "phím để vô hiệu hóa cuộc gọi" + +#~ msgid "Key to Park call" +#~ msgstr "phím để định vị cuộc gọi" + +#~ msgid "Parking Feature" +#~ msgstr "Tính năng định vị" + +#~ msgid "ADSI Park" +#~ msgstr "định vị ADSI" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "Attended transfer timeout (sec)" + +#~ msgid "One touch record key" +#~ msgstr "Phím thu chạm một lần" + +#~ msgid "Name of call context for parking" +#~ msgstr "Tên của call context cho parking" + +#~ msgid "Sound file to play to parked caller" +#~ msgstr "Tập tin âm thanh để play to parked caller" + +#~ msgid "Max time (ms) between digits for feature activation" +#~ msgstr "Thời gian tối đa (ms) giữa các digits cho feature activation" + +#~ msgid "Method to Find Parking slot" +#~ msgstr "Phương pháp tìm điểm định vị" + +#~ msgid "parkedmusicclass" +#~ msgstr "parkedmusicclass" + +#~ msgid "Play courtesy tone to" +#~ msgstr "Play courtesy tone để" + +#~ msgid "Enable Parking" +#~ msgstr "cho phép định vị" + +#~ msgid "Extension to dial to park" +#~ msgstr "nhanh số để gọi để định vị" + +#~ msgid "Parking time (secs)" +#~ msgstr "Thời gian định vị" + +#~ msgid "Range of extensions for call parking" +#~ msgstr "Vùng của đuôi mở rộng cho call parking" + +#~ msgid "Pickup extension" +#~ msgstr "Pickup extension" + +#~ msgid "Seconds to wait between digits when transferring" +#~ msgstr "Thời gian chờ giữa những chữ số khi chuyển đổi" + +#~ msgid "sound when attended transfer is complete" +#~ msgstr "âm thanh khi chuyển đổi hoàn tất" + +#~ msgid "Sound when attended transfer fails" +#~ msgstr "âm thanh khi chuyển đổi không thành công" + +#~ msgid "Reload Hardware Config" +#~ msgstr "Tải lại cấu hình phần cứng" + +#~ msgid "Reboot Method" +#~ msgstr "phương pháp khởi động lại" + +#~ msgid "Parameter" +#~ msgstr "Tham số" + +#~ msgid "Option type" +#~ msgstr "Lựa chọn" + +#~ msgid "User name" +#~ msgstr "Tên người dùng" + +#~ msgid "IAX General Options" +#~ msgstr "Những lựa chọn tổng quát IAX" + +#~ msgid "Allow Codecs" +#~ msgstr "Cho phép Codecs" + +#~ msgid "Static" +#~ msgstr "Tĩnh" + +#~ msgid "Write Protect" +#~ msgstr "Viết bảo vệ" + +#~ msgid "Meetme Conference" +#~ msgstr "Gặp mặt thảo luận" + +#~ msgid "Admin PIN" +#~ msgstr "PIN quản trị" + +#~ msgid "Meeting PIN" +#~ msgstr "PIN cuộc gặp" + +#~ msgid "Meetme Conference General Options" +#~ msgstr "Lựu chọn chung về thảo luận trực tiếp" + +#~ msgid "Number of 20ms audio buffers to be used" +#~ msgstr "Số của 20ms audio buffers để được dùng" + +#~ msgid "Modules" +#~ msgstr "Modules" + +#~ msgid "Alarm Receiver Application" +#~ msgstr "Ứng dụng nhận báo thức" + +#~ msgid "Authentication Application" +#~ msgstr "Ứng dụng xác thực" + +#~ msgid "Make sure asterisk doesn't save CDR" +#~ msgstr "Bảo đảm asterisk không lưu CDR" + +#~ msgid "Check if channel is available" +#~ msgstr "Kiểm tra xem nếu kênh đã có sẵn" + +#~ msgid "Listen in on any channel" +#~ msgstr "Nghe trên bất kỳ kênh nào" + +#~ msgid "Control Playback Application" +#~ msgstr "Điều khiển ứng dụng phát lại" + +#~ msgid "Cuts up variables" +#~ msgstr "Cuts up variables" + +#~ msgid "Database access functions" +#~ msgstr "Chức năng truy cập cơ sở dữ liệu" + +#~ msgid "Dialing Application" +#~ msgstr "Ứng dụng quay số" + +#~ msgid "Virtual Dictation Machine Application" +#~ msgstr "Ứng dụng virtual Dictation Machine " + +#~ msgid "Directed Call Pickup Support" +#~ msgstr "Directed hỗ trợ call pickup" + +#~ msgid "Extension Directory" +#~ msgstr "Danh bạ nhánh số" + +#~ msgid "DISA (Direct Inward System Access) Application" +#~ msgstr "Ứng dụng DISA (Direct Inward System Access) " + +#~ msgid "Dump channel variables Application" +#~ msgstr "Dump channel variables Application" + +#~ msgid "Simple Echo Application" +#~ msgstr "Ứng dụng Echo đơn giản" + +#~ msgid "ENUM Lookup" +#~ msgstr "ENUM tra cứu" + +#~ msgid "Reevaluates strings" +#~ msgstr "Đánh giá lại strings" + +#~ msgid "Executes applications" +#~ msgstr "thực thi ứng dụng" + +#~ msgid "External IVR application interface" +#~ msgstr "Ứng dụng giao diện bên ngoài IVR" + +#~ msgid "Fork The CDR into 2 separate entities" +#~ msgstr "Fork The CDR into 2 nhân riêng biệt" + +#~ msgid "Get ADSI CPE ID" +#~ msgstr "Lấy ADSI CPE ID" + +#~ msgid "Group Management Routines" +#~ msgstr "Group Management Routines" + +#~ msgid "Encode and Stream via icecast and ices" +#~ msgstr "Encode và Stream via icecast và ices" + +#~ msgid "Image Transmission Application" +#~ msgstr "Ứng dụng truyền hình ảnh" + +#~ msgid "Look up Caller*ID name/number from black" +#~ msgstr "Tra cứu tên/số của người gọi" + +#~ msgid "Look up CallerID Name from local databas" +#~ msgstr "Tra cứu tên người gọi từ cơ sở dữ liệu địa phương" + +#~ msgid "Extension Macros" +#~ msgstr "Nhánh số Macro" + +#~ msgid "A simple math Application" +#~ msgstr "Ứng dụng tính toán đơn giản" + +#~ msgid "MD5 checksum Application" +#~ msgstr "Ứng dụng MD5 checksum " + +#~ msgid "Digital Milliwatt (mu-law) Test Application" +#~ msgstr "Ứng dụng kiểm tra Digital Milliwatt (mu-law) " + +#~ msgid "Record a call and mix the audio during the recording" +#~ msgstr "Thu âm cuộc gọi và phối âm trong khi thu" + +#~ msgid "Call Parking and Announce Application" +#~ msgstr "Định vị cuộc gọi và ứng dụng thông báo" + +#~ msgid "Trivial Playback Application" +#~ msgstr "Ứng dụng trivial Playback " + +#~ msgid "Require phone number to be entered" +#~ msgstr "Yêu cầu nhập số điện thoại" + +#~ msgid "True Call Queueing" +#~ msgstr "True Call Queueing" + +#~ msgid "Random goto" +#~ msgstr "Random goto" + +#~ msgid "Read Variable Application" +#~ msgstr "Ứng dụng đọc variable " + +#~ msgid "Read in a file" +#~ msgstr "Đọc trong một tập tin" + +#~ msgid "Realtime Data Lookup/Rewrite" +#~ msgstr "Tra cứu dữ liệu đúng lúc/ Viết lại" + +#~ msgid "Trivial Record Application" +#~ msgstr "Ứng dụng trivial record" + +#~ msgid "Say time" +#~ msgstr "Nói thời gian" + +#~ msgid "Send DTMF digits Application" +#~ msgstr "Ứng dụng gửi những chữ số DTMF" + +#~ msgid "Send Text Applications" +#~ msgstr "Gửi ứng dụng tin nhắn" + +#~ msgid "Set CallerID Application" +#~ msgstr "Ứng dụng cài đặt định dạng cuộc gọi" + +#~ msgid "CDR user field apps" +#~ msgstr "CDR user field apps" + +#~ msgid "load => .so ; Set CallerID Name" +#~ msgstr "load =&gt; .so ; Đặt tên CallerID " + +#~ msgid "load => .so ; Set CallerID Number" +#~ msgstr "load =&gt; .so ; Đặt số CallerID " + +#~ msgid "Set RDNIS Number" +#~ msgstr "Cài đặt số RDNIS" + +#~ msgid "Set ISDN Transfer Capability" +#~ msgstr "Cài đặt công suất truyền tải ISDN" + +#~ msgid "SMS/PSTN handler" +#~ msgstr "SMS/PSTN handler" + +#~ msgid "Hangs up the requested channel" +#~ msgstr "Bãi bỏ kênh yêu cầu" + +#~ msgid "Stack Routines" +#~ msgstr "Ngăn xếp Routines" + +#~ msgid "Generic System() application" +#~ msgstr "Ứng dụng Genetic System" + +#~ msgid "Playback with Talk Detection" +#~ msgstr "Playback với bộ phát hiện tiếng nói" + +#~ msgid "Interface Test Application" +#~ msgstr "Ứng dụng kiểm tra giao diện" + +#~ msgid "Transfer" +#~ msgstr "truyền tải" + +#~ msgid "TXTCIDName" +#~ msgstr "TXTCIDName" + +#~ msgid "Send URL Applications" +#~ msgstr "Gửi những ứng dụng URL" + +#~ msgid "Custom User Event Application" +#~ msgstr "Ứng dụng Custom User Event " + +#~ msgid "Send verbose output" +#~ msgstr "Gửi verbose output" + +#~ msgid "Voicemail" +#~ msgstr "Thư thoại" + +#~ msgid "Waits until first ring after time" +#~ msgstr "Đợi tới tiếng ring đầu tiên sau khi" + +#~ msgid "Wait For Silence Application" +#~ msgstr "Đợi ứng dụng im lặng" + +#~ msgid "While Loops and Conditional Execution" +#~ msgstr "Trong khi Loops và Conditional Execution" + +#~ msgid "Comma Separated Values CDR Backend" +#~ msgstr "Comma Separated Values CDR Backend" + +#~ msgid "Customizable Comma Separated Values CDR Backend" +#~ msgstr "Tùy chỉnh Comma Separated Values CDR Backend" + +#~ msgid "Asterisk Call Manager CDR Backend" +#~ msgstr "Asterisk Call Manager CDR Backend" + +#~ msgid "MySQL CDR Backend" +#~ msgstr "MySQL CDR Backend" + +#~ msgid "PostgreSQL CDR Backend" +#~ msgstr "PostgreSQL CDR Backend" + +#~ msgid "SQLite CDR Backend" +#~ msgstr "SQLite CDR Backend" + +#~ msgid "Agent Proxy Channel" +#~ msgstr "Agent Proxy Channel" + +#~ msgid "Option chan_iax2" +#~ msgstr "Tùy chọn chan_iax2" + +#~ msgid "Local Proxy Channel" +#~ msgstr "Local Proxy Channel" + +#~ msgid "Session Initiation Protocol (SIP)" +#~ msgstr "Session Initiation Protocol (SIP)" + +#~ msgid "Adaptive Differential PCM Coder/Decoder" +#~ msgstr "Adaptive Differential PCM Coder/Decoder" + +#~ msgid "A-law Coder/Decoder" +#~ msgstr "A-law Coder/Decoder" + +#~ msgid "A-law and Mulaw direct Coder/Decoder" +#~ msgstr "A-law and Mulaw direct Coder/Decoder" + +#~ msgid "ITU G.726-32kbps G726 Transcoder" +#~ msgstr "ITU G.726-32kbps G726 Transcoder" + +#~ msgid "GSM/PCM16 (signed linear) Codec Translation" +#~ msgstr "GSM/PCM16 (signed linear) Codec Translation" + +#~ msgid "Speex/PCM16 (signed linear) Codec Translator" +#~ msgstr "Speex/PCM16 (signed linear) Codec Translator" + +#~ msgid "Mu-law Coder/Decoder" +#~ msgstr "Mu-law Coder/Decoder" + +#~ msgid "Sun Microsystems AU format (signed linear)" +#~ msgstr "Sun Microsystems AU format (signed linear)" + +#~ msgid "G.723.1 Simple Timestamp File Format" +#~ msgstr "G.723.1 Simple Timestamp File Format" + +#~ msgid "Raw G.726 (16/24/32/40kbps) data" +#~ msgstr "Raw G.726 (16/24/32/40kbps) data" + +#~ msgid "Raw G729 data" +#~ msgstr "Raw G729 data" + +#~ msgid "Raw GSM data" +#~ msgstr "Raw GSM data" + +#~ msgid "Raw h263 data" +#~ msgstr "Raw h263 data" + +#~ msgid "JPEG (Joint Picture Experts Group) Image" +#~ msgstr "JPEG (Joint Picture Experts Group) Image" + +#~ msgid "Raw uLaw 8khz Audio support (PCM)" +#~ msgstr "Raw uLaw 8khz Audio support (PCM)" + +#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support" +#~ msgstr "load =&gt; .so ; Raw aLaw 8khz PCM Audio support" + +#~ msgid "Raw Signed Linear Audio support (SLN)" +#~ msgstr "Raw Signed Linear Audio support (SLN)" + +#~ msgid "Dialogic VOX (ADPCM) File Format" +#~ msgstr "Dialogic VOX (ADPCM) File Format" + +#~ msgid "Microsoft WAV format (8000hz Signed Line" +#~ msgstr "Microsoft WAV format (8000hz Signed Line" + +#~ msgid "Microsoft WAV format (Proprietary GSM)" +#~ msgstr "Microsoft WAV format (Proprietary GSM)" + +#~ msgid "Caller ID related dialplan functions" +#~ msgstr "Caller ID liên quan đến chức năng dialplan " + +#~ msgid "ENUM Functions" +#~ msgstr "chức năng ENUM" + +#~ msgid "URI encoding / decoding functions" +#~ msgstr "Chức năng URI encoding / decoding " + +#~ msgid "Asterisk Extension Language Compiler" +#~ msgstr "Asterisk Extension Language Compiler" + +#~ msgid "Text Extension Configuration" +#~ msgstr "Cấu hình Text Extension " + +#~ msgid "load => .so ; Builtin dialplan functions" +#~ msgstr "load =&gt; .so ; chức năng Builtin dialplan " + +#~ msgid "Loopback Switch" +#~ msgstr "Loopback Switch" + +#~ msgid "Realtime Switch" +#~ msgstr "Realtime Switch" + +#~ msgid "Outgoing Spool Support" +#~ msgstr "Hỗ trợ outgoing spool" + +#~ msgid "Wil Cal U (Auto Dialer)" +#~ msgstr "Wil Cal U (Auto Dialer)" + +#~ msgid "MySQL Config Resource" +#~ msgstr "MySQL Config Resource" + +#~ msgid "ODBC Config Resource" +#~ msgstr "ODBC Config Resource" + +#~ msgid "PGSQL Module" +#~ msgstr "PGSQL Module" + +#~ msgid "Cryptographic Digital Signatures" +#~ msgstr "Cryptographic Digital Signatures" + +#~ msgid "Call Parking Resource" +#~ msgstr "Call Parking Resource" + +#~ msgid "Indications Configuration" +#~ msgstr "Cấu hình indications" + +#~ msgid "Call Monitoring Resource" +#~ msgstr "Call Monitoring Resource" + +#~ msgid "Music On Hold Resource" +#~ msgstr "Music On Hold Resource" + +#~ msgid "ODBC Resource" +#~ msgstr "ODBC Resource" + +#~ msgid "SMDI Module" +#~ msgstr "SMDI Module" + +#~ msgid "SNMP Module" +#~ msgstr "SNMP Module" + +#~ msgid "Music On Hold" +#~ msgstr "Music On Hold" + +#~ msgid "Application" +#~ msgstr "Ứng dụng" + +#~ msgid "Directory of Music" +#~ msgstr "Thư mục music" + +#~ msgid "Option mode" +#~ msgstr "Chế độ tùy chọn" + +#~ msgid "Random Play" +#~ msgstr "Random Play" + +#~ msgid "DTMF mode" +#~ msgstr "chế độ DTMF" + +#~ msgid "Primary domain identity for From: headers" +#~ msgstr "Nhận dạng primary domain cho From: headers" + +#~ msgid "From user (required by many SIP providers)" +#~ msgstr "Từ user (yêu cầu bởi nhiều nhà cung cấp SIP)" + +#~ msgid "Ring on incoming dialplan contexts" +#~ msgstr "Ring on incoming dialplan contexts" + +#~ msgid "Allow Insecure for" +#~ msgstr "Cho phép không an toàn cho" + +#~ msgid "Mailbox for MWI" +#~ msgstr "Hộp thư cho MWI" + +#~ msgid "NAT between phone and Asterisk" +#~ msgstr "NAT giữa điện thoại và Asterisk" + +#~ msgid "Check tags in headers" +#~ msgstr "Kiểm tra tags trong headers" + +#~ msgid "Reply Timeout (ms) for down connection" +#~ msgstr "Trả lời Timeout (ms) cho down kết nối" + +#~ msgid "Register connection" +#~ msgstr "Đăng ký kết nối" + +#~ msgid "Dial own extension for mailbox" +#~ msgstr "Gọi nhánh số cho hộp thư" + +#~ msgid "Client Type" +#~ msgstr "Loại Client" + +#~ msgid "Username" +#~ msgstr "Username" + +#~ msgid "Section sipgeneral" +#~ msgstr "Section sipgeneral" + +#~ msgid "Allow codecs" +#~ msgstr "Cho phép Codecs" + +#~ msgid "SIP realm" +#~ msgstr "SIP realm" + +#~ msgid "Voicemail general options" +#~ msgstr "Thư thoại tùy chọn tổng quát" + +#~ msgid "From Email address of server" +#~ msgstr "Từ địa chỉ email của server" + +#~ msgid "Voice Mail boxes" +#~ msgstr "Hộp thư thoại" + +#~ msgid "Email contains attachment" +#~ msgstr "Email bao gồm attachment" + +#~ msgid "Email" +#~ msgstr "Email" + +#~ msgid "Display Name" +#~ msgstr "Tên display" + +#~ msgid "Password" +#~ msgstr "Mật khẩu" + +#~ msgid "zone" +#~ msgstr "zone" + +#~ msgid "Voice Zone settings" +#~ msgstr "Cài đặt voice zone" + +#~ msgid "Message Format" +#~ msgstr "Message Format" diff --git a/feeds/luci/applications/luci-app-asterisk/po/zh-cn/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/zh-cn/asterisk.po new file mode 100644 index 0000000..9ef2f1f --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/zh-cn/asterisk.po @@ -0,0 +1,171 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-04-02 19:34+0200\n" +"Last-Translator: Anonymous Pootle User\n" +"Language-Team: LANGUAGE \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +#~ msgid "Asterisk General Options" +#~ msgstr "Asterisk 基本选项" + +# test +#~ msgid "AGI directory" +#~ msgstr "AGI 目录" + +#~ msgid "Cache recorded sound files during recording" +#~ msgstr "录音时缓存录音文件" + +#~ msgid "Debug Level" +#~ msgstr "调试级别" + +#~ msgid "Disable some warnings" +#~ msgstr "屏蔽部分警告" + +#~ msgid "Dump core on crash" +#~ msgstr "系统崩溃时记录错误信息" + +#~ msgid "High Priority" +#~ msgstr "高优先级" + +#~ msgid "Initialise Crypto" +#~ msgstr "初始化加密" + +#~ msgid "Use Internal Timing" +#~ msgstr "使用内部计时器" + +#~ msgid "Log directory" +#~ msgstr "日志目录" + +#~ msgid "Maximum number of calls allowed" +#~ msgstr "最大允许呼叫数" + +#~ msgid "Maximum load to stop accepting new calls" +#~ msgstr "允许接受新呼叫的最大负载" + +#~ msgid "Disable console colors" +#~ msgstr "禁用控制台色彩" + +#~ msgid "Sound files Cache directory" +#~ msgstr "音效文件缓存目录" + +#~ msgid "The Group to run as" +#~ msgstr "以此“组”权限运行" + +#~ msgid "The User to run as" +#~ msgstr "以此“用户”身份运行" + +#~ msgid "Voicemail Spool directory" +#~ msgstr "语音邮件缓存目录" + +#~ msgid "Prefix UniquID with system name" +#~ msgstr "UniquID前加系统名做前缀" + +#~ msgid "Build transcode paths via SLINEAR, not directly" +#~ msgstr "由SLINEAR间接建立转码路径" + +#~ msgid "Transmit SLINEAR silence while recording a channel" +#~ msgstr "对频道录音时传送SLINEAR静默" + +#~ msgid "Verbose Level" +#~ msgstr "详细级别" + +#~ msgid "Time Zone" +#~ msgstr "时区" + +#~ msgid "Section dialplan" +#~ msgstr "段内拨号计划" + +#~ msgid "include" +#~ msgstr "包含" + +#~ msgid "Dialplan Extension" +#~ msgstr "拨号计划 扩展" + +#~ msgid "Dialplan General Options" +#~ msgstr "拨号计划 基本参数" + +#~ msgid "Allow transfer" +#~ msgstr "允许 呼叫转移" + +#~ msgid "Clear global vars" +#~ msgstr "清除全局变量" + +#~ msgid "Dialplan Goto" +#~ msgstr "拨号计划至" + +#~ msgid "Dialplan Conference" +#~ msgstr "会议拨号计划" + +#~ msgid "Dialplan Time" +#~ msgstr "时间拨号计划" + +#~ msgid "Dialplan Voicemail" +#~ msgstr "语音信箱拨号计划" + +#~ msgid "Dial Zones for Dialplan" +#~ msgstr "适用拨号计划的拨号区域" + +#~ msgid "Prefix to add matching dialplans" +#~ msgstr "用于匹配拨号计划的前缀" + +#~ msgid "Match International prefix" +#~ msgstr "匹配的国际前缀" + +#~ msgid "localzone" +#~ msgstr "本地区域" + +#~ msgid "Match plan" +#~ msgstr "匹配计划" + +#~ msgid "Connection to use" +#~ msgstr "使用连接" + +#~ msgid "Feature Key maps" +#~ msgstr "特殊键映射" + +#~ msgid "Attended transfer key" +#~ msgstr "加入传输键" + +#~ msgid "Blind transfer key" +#~ msgstr "屏蔽传输键" + +#~ msgid "Key to Disconnect call" +#~ msgstr "结束呼叫键" + +#~ msgid "Key to Park call" +#~ msgstr "呼叫驻留键" + +#~ msgid "Parking Feature" +#~ msgstr "驻留特性" + +#~ msgid "ADSI Park" +#~ msgstr "ADSI驻留" + +#~ msgid "Attended transfer timeout (sec)" +#~ msgstr "加入传输超时(秒)" + +#~ msgid "One touch record key" +#~ msgstr "一键录制" + +#~ msgid "Email" +#~ msgstr "Email" + +#~ msgid "Display Name" +#~ msgstr "显示名字" + +#~ msgid "Password" +#~ msgstr "密码" + +#~ msgid "zone" +#~ msgstr "区" + +#~ msgid "Message Format" +#~ msgstr "消息格式" diff --git a/feeds/luci/applications/luci-app-asterisk/po/zh-tw/asterisk.po b/feeds/luci/applications/luci-app-asterisk/po/zh-tw/asterisk.po new file mode 100644 index 0000000..c7eef9d --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/po/zh-tw/asterisk.po @@ -0,0 +1,13 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-08-06 23:52+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.9.0\n" diff --git a/feeds/luci/applications/luci-app-asterisk/root/etc/config/asterisk b/feeds/luci/applications/luci-app-asterisk/root/etc/config/asterisk new file mode 100644 index 0000000..2484097 --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/root/etc/config/asterisk @@ -0,0 +1,231 @@ +config 'asterisk' + option 'verbose' 3 + option 'debug' 3 + option 'zone' 'Australia/Perth' + +config 'hardware' 'reboot' + option 'method' 'web' + option 'param' 'http://ata.lan/admin/reboot' + +config 'feature' 'park' + option 'parkenabled' 'yes' + option 'parkext' '700' + option 'parkpos' '701-720' + option 'context' 'parkedcalls' + option 'parkingtime' '45' + option 'courtesytone' 'beep' + option 'parkedplay' 'caller' + option 'adsipark' 'yes' + option 'findslot' 'first' + option 'parkedmusicclass' 'default' + option 'transferdigittimeout' '3' + option 'xfersound' 'beep' + option 'xferfailsound' 'beeperr' + option 'pickupexten' '"*8"' + option 'featuredigittimeout' '500' + option 'atxfernoanswertimeout' '15' + +config 'feature' 'map' + option 'blindxfer' '#1' + option 'disconnect' '*0' + option 'automon' '*1' + option 'atxfer' '#2' + option 'parkcall' '#30' + +config 'sipgeneral' + option 'realm' 'sip.mydomain.net' + option 'allow' 'alaw' + option 'extension' '102' + +config 'module' + option 'res_config_mysql' 'no' + option 'res_crypto' 'auto' + option 'chan_iax2' 'yes' + +config 'sip' 'PAP2T' + option 'type' 'friend' + option 'extension' '101' + option 'username' 'PAP2T' + option 'secret' 'mypass' + option 'port' '5061' + option 'host' '' + option 'dtmfmode' 'rfc2833' + option 'insecure' 'very' + option 'context' 'internal' + option 'mailbox' '1001@default' + option 'nat' 'no' + option 'canreinvite' 'nonat' + option 'selfmailbox' 'yes' + option 'incoming' 'provider_inbound' + +config 'sip' 'PAP2T2' + option 'type' 'friend' + option 'extension' '101' + option 'username' 'PAP2T2' + option 'secret' 'mysecret' + option 'port' '5060' + option 'host' '' + option 'dtmfmode' 'rfc2833' + option 'insecure' 'very' + option 'context' 'internal' + option 'mailbox' '1001@default' + option 'nat' 'no' + option 'canreinvite' 'nonat' + option 'selfmailbox' 'yes' + option 'incoming' 'provider_inbound' + +config 'sip' 'providerphone' + option 'provider' 'yes' + option 'type' 'friend' + option 'timeout' '55' + option 'internationalprefix' '0011' + option 'alwaysinternational' 'no' + option 'countrycode' '63' + option 'register' 'yes' + option 'host' '200.200.200.200' + option 'username' '0899999999' + option 'fromuser' '0899999999' + option 'secret' 'mysecret' + option 'fromdomain' 'providerphone.provider.net.au' + option 'context' 'provider_inbound' + option 'canreinvite' 'no' + option 'nat' 'yes' + option 'qualify' 'yes' + option 'insecure' 'very' + option 'pedantic' 'no' + option 'qualify' '1000' + +config 'iaxgeneral' + option 'static' 'yes' + option 'writeprotect' 'no' + option 'canreinvite' 'no' + option 'allow' 'ulaw,gsm' + +config 'iax' 'nell' + option 'type' 'friend' + option 'extension' '108' + option 'host' '' + option 'username' 'nell' + option 'secret' 'mypass' + option 'context' 'internal' + +config 'iax' 'iax_vista' + option 'extension' '106' + option 'type' 'friend' + option 'host' '' + option 'username' 'vista' + option 'secret' 'mysecret' + option 'context' 'internal' + +config 'iax' 'sam' + option 'type' 'friend' + option 'extension' '103' + option 'host' '' + option 'username' 'sam' + option 'secret' 'mysecret' + option 'context' 'internal' + +config 'voicegeneral' + option 'serveremail' 'voice@sip.mydomain.net' + +config 'voicemail' + option 'number' '1001' + option 'context' 'default' + option 'password' '0000' + option 'name' 'Family' + option 'email' 'us@mydomain.net' + option 'zone' 'wa' + option 'attach' 'no' + +config 'voicezone' 'wa' + option 'zone' 'Australia/Perth' + option 'message' 'Q IMp' + +config 'voicezone' 'military' + option 'zone' 'Zulu' + option 'message' '"vm-received" q "digits/at" H N "hours" "phonetic/z_p"' + +config 'incominggeneral' + option 'allowtransfer' 'no' + option 'timeout' '20' + option 'answerfirst' 'no' + option 'mailbox' '1001@default' + +config 'dialplangeneral' + option 'static' 'yes' + option 'writeprotect' 'no' + option 'canreinvite' 'no' + option 'clearglobalvars' 'no' + option 'allowtransfer' 'no' + +config 'dialplan' 'internal' + option 'include' 'localcall interstate smartnumber emergency extensions' + +config 'dialplanvoice' + option 'dialplan' 'internal' + option 'extension' '1001' + option 'voicecontext' 'default' + option 'voicebox' '1001' + +config 'dialplansaytime' + option 'dialplan' 'internal' + option 'extension' '108' + +config 'dialplanmeetme' + option 'dialplan' 'internal' + option 'extension' '109' + option 'room' '101' + +config 'dialplanmeetme' + option 'dialplan' 'internal' + option 'extension' '1009' + option 'room' '' + +config 'dialplan' 'localinternational' + option 'include' 'mobile interstate' + +config 'dialzone' 'interstate' + option 'uses' 'SIP/providerphone' + option 'match' '0[235-8]NXXXXXXX' + option 'localprefix' '0' + +config 'dialzone' 'mobile' + option 'uses' 'SIP/providerphone' + option 'match' '04XXXXXXXX' + option 'localprefix' '0' + +config 'dialzone' 'smartnumber' + option 'uses' 'SIP/providerphone' + option 'match' '1[835]00.' + option 'match' '13ZXXX' + +config 'dialzone' 'emergency' + option 'uses' 'SIP/providerphone' + option 'match' '000' + option 'match' '112' + +config 'dialzone' 'localcall' + option 'uses' 'SIP/providerphone' + option 'match' 'NXXXXXXX' + option 'addprefix' '08' + option 'localprefix' '0' + +config 'dialzone' 'international' + option 'uses' 'SIP/providerphone' + option 'international' '0011,+' + option 'localzone' 'localinternational' + option 'localprefix' '0' + option 'addprefix' '' + +config 'meetmegeneral' + option 'audiobuffers' '32' + +config 'meetme' + option 'room' '101' + option 'pin' '' + option 'adminpin' '' + +config 'moh' 'default' + option 'mode' 'files' + option 'directory' '/opt/moh' + option 'random' 'no' diff --git a/feeds/luci/applications/luci-app-asterisk/root/etc/uci-defaults/40_luci-asterisk b/feeds/luci/applications/luci-app-asterisk/root/etc/uci-defaults/40_luci-asterisk new file mode 100755 index 0000000..e45819f --- /dev/null +++ b/feeds/luci/applications/luci-app-asterisk/root/etc/uci-defaults/40_luci-asterisk @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@asterisk[-1] + add ucitrack asterisk + set ucitrack.@asterisk[-1].init=asterisk + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-commands/Makefile b/feeds/luci/applications/luci-app-commands/Makefile new file mode 100644 index 0000000..dc5d0ca --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Shell Command Module +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-commands/luasrc/controller/commands.lua b/feeds/luci/applications/luci-app-commands/luasrc/controller/commands.lua new file mode 100644 index 0000000..16528d1 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/luasrc/controller/commands.lua @@ -0,0 +1,227 @@ +-- Copyright 2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.commands", package.seeall) + +function index() + entry({"admin", "system", "commands"}, firstchild(), _("Custom Commands"), 80) + entry({"admin", "system", "commands", "dashboard"}, template("commands"), _("Dashboard"), 1) + entry({"admin", "system", "commands", "config"}, cbi("commands"), _("Configure"), 2) + entry({"admin", "system", "commands", "run"}, call("action_run"), nil, 3).leaf = true + entry({"admin", "system", "commands", "download"}, call("action_download"), nil, 3).leaf = true + + entry({"command"}, call("action_public"), nil, 1).leaf = true +end + +--- Decode a given string into arguments following shell quoting rules +--- [[abc \def "foo\"bar" abc'def']] -> [[abc def]] [[foo"bar]] [[abcdef]] +local function parse_args(str) + local args = { } + + local function isspace(c) + if c == 9 or c == 10 or c == 11 or c == 12 or c == 13 or c == 32 then + return c + end + end + + local function isquote(c) + if c == 34 or c == 39 or c == 96 then + return c + end + end + + local function isescape(c) + if c == 92 then + return c + end + end + + local function ismeta(c) + if c == 36 or c == 92 or c == 96 then + return c + end + end + + --- Convert given table of byte values into a Lua string and append it to + --- the "args" table. Segment byte value sequence into chunks of 256 values + --- to not trip over the parameter limit for string.char() + local function putstr(bytes) + local chunks = { } + local csz = 256 + local upk = unpack + local chr = string.char + local min = math.min + local len = #bytes + local off + + for off = 1, len, csz do + chunks[#chunks+1] = chr(upk(bytes, off, min(off + csz - 1, len))) + end + + args[#args+1] = table.concat(chunks) + end + + --- Scan substring defined by the indexes [s, e] of the string "str", + --- perform unquoting and de-escaping on the fly and store the result in + --- a table of byte values which is passed to putstr() + local function unquote(s, e) + local off, esc, quote + local res = { } + + for off = s, e do + local byte = str:byte(off) + local q = isquote(byte) + local e = isescape(byte) + local m = ismeta(byte) + + if e then + esc = true + elseif esc then + if m then res[#res+1] = 92 end + res[#res+1] = byte + esc = false + elseif q and quote and q == quote then + quote = nil + elseif q and not quote then + quote = q + else + if m then res[#res+1] = 92 end + res[#res+1] = byte + end + end + + putstr(res) + end + + --- Find substring boundaries in "str". Ignore escaped or quoted + --- whitespace, pass found start- and end-index for each substring + --- to unquote() + local off, esc, start, quote + for off = 1, #str + 1 do + local byte = str:byte(off) + local q = isquote(byte) + local s = isspace(byte) or (off > #str) + local e = isescape(byte) + + if esc then + esc = false + elseif e then + esc = true + elseif q and quote and q == quote then + quote = nil + elseif q and not quote then + start = start or off + quote = q + elseif s and not quote then + if start then + unquote(start, off - 1) + start = nil + end + else + start = start or off + end + end + + --- If the "quote" is still set we encountered an unfinished string + if quote then + unquote(start, #str) + end + + return args +end + +local function parse_cmdline(cmdid, args) + local uci = require "luci.model.uci".cursor() + if uci:get("luci", cmdid) == "command" then + local cmd = uci:get_all("luci", cmdid) + local argv = parse_args(cmd.command) + local i, v + + if cmd.param == "1" and args then + for i, v in ipairs(parse_args(luci.http.urldecode(args))) do + argv[#argv+1] = v + end + end + + for i, v in ipairs(argv) do + if v:match("[^%w%.%-i/]") then + argv[i] = '"%s"' % v:gsub('"', '\\"') + end + end + + return argv + end +end + +function action_run(...) + local fs = require "nixio.fs" + local argv = parse_cmdline(...) + if argv then + local outfile = os.tmpname() + local errfile = os.tmpname() + + local rv = os.execute(table.concat(argv, " ") .. " >%s 2>%s" %{ outfile, errfile }) + local stdout = fs.readfile(outfile, 1024 * 512) or "" + local stderr = fs.readfile(errfile, 1024 * 512) or "" + + fs.unlink(outfile) + fs.unlink(errfile) + + local binary = not not (stdout:match("[%z\1-\8\14-\31]")) + + luci.http.prepare_content("application/json") + luci.http.write_json({ + command = table.concat(argv, " "), + stdout = not binary and stdout, + stderr = stderr, + exitcode = rv, + binary = binary + }) + else + luci.http.status(404, "No such command") + end +end + +function action_download(...) + local fs = require "nixio.fs" + local argv = parse_cmdline(...) + if argv then + local fd = io.popen(table.concat(argv, " ") .. " 2>/dev/null") + if fd then + local chunk = fd:read(4096) or "" + local name + if chunk:match("[%z\1-\8\14-\31]") then + luci.http.header("Content-Disposition", "attachment; filename=%s" + % fs.basename(argv[1]):gsub("%W+", ".") .. ".bin") + luci.http.prepare_content("application/octet-stream") + else + luci.http.header("Content-Disposition", "attachment; filename=%s" + % fs.basename(argv[1]):gsub("%W+", ".") .. ".txt") + luci.http.prepare_content("text/plain") + end + + while chunk do + luci.http.write(chunk) + chunk = fd:read(4096) + end + + fd:close() + else + luci.http.status(500, "Failed to execute command") + end + else + luci.http.status(404, "No such command") + end +end + +function action_public(cmdid, args) + local uci = require "luci.model.uci".cursor() + if cmdid and + uci:get("luci", cmdid) == "command" and + uci:get("luci", cmdid, "public") == "1" + then + action_download(cmdid, args) + else + luci.http.status(403, "Access to command denied") + end +end diff --git a/feeds/luci/applications/luci-app-commands/luasrc/model/cbi/commands.lua b/feeds/luci/applications/luci-app-commands/luasrc/model/cbi/commands.lua new file mode 100644 index 0000000..7794f15 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/luasrc/model/cbi/commands.lua @@ -0,0 +1,27 @@ +-- Copyright 2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local m, s + +m = Map("luci", translate("Custom Commands"), + translate("This page allows you to configure custom shell commands which can be easily invoked from the web interface.")) + +s = m:section(TypedSection, "command", "") +s.template = "cbi/tblsection" +s.anonymous = true +s.addremove = true + + +s:option(Value, "name", translate("Description"), + translate("A short textual description of the configured command")) + +s:option(Value, "command", translate("Command"), + translate("Command line to execute")) + +s:option(Flag, "param", translate("Custom arguments"), + translate("Allow the user to provide additional command line arguments")) + +s:option(Flag, "public", translate("Public access"), + translate("Allow executing the command and downloading its output without prior authentication")) + +return m diff --git a/feeds/luci/applications/luci-app-commands/luasrc/view/commands.htm b/feeds/luci/applications/luci-app-commands/luasrc/view/commands.htm new file mode 100644 index 0000000..73b9e6a --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/luasrc/view/commands.htm @@ -0,0 +1,169 @@ +<%# + Copyright 2012 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% css = [[ + +.commandbox { + height: 12em; + width: 30%; + float: left; + height: 12em; + margin: 5px; + position: relative; +} + +.commandbox h3 { + font-size: 1.5em !important; + line-height: 2em !important; + margin: 0 !important; +} + +.commandbox input[type="text"] { + width: 50% !important; +} + +.commandbox div { + position: absolute; + left: 0; + bottom: 1.5em; +} + +]] -%> + +<%+header%> + + + + +<% + local uci = require "luci.model.uci".cursor() + local commands = { } + + uci:foreach("luci", "command", function(s) commands[#commands+1] = s end) +%> + +
"> +
+

<%:Custom Commands%>

+ +
+ <% local _, command; for _, command in ipairs(commands) do %> +
+

<%=pcdata(command.name)%>

+

<%:Command:%> <%=pcdata(command.command)%>

+ <% if command.param == "1" then %> +

<%:Arguments:%>

+ <% end %> +
+ + + <% if command.public == "1" then %> + + <% end %> +
+
+ <% end %> + +

+ +
+
+ + +
+ +<%+footer%> diff --git a/feeds/luci/applications/luci-app-commands/po/ca/commands.po b/feeds/luci/applications/luci-app-commands/po/ca/commands.po new file mode 100644 index 0000000..9dc23b2 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/ca/commands.po @@ -0,0 +1,98 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-06 10:41+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "Una breva descripció textual de l'ordre configurat" + +msgid "Access command with" +msgstr "Accedeix l'ordre amb" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Permet la execució de l'ordre i la baixada de la seva sortida sense " +"autenticació prèvia" + +msgid "Allow the user to provide additional command line arguments" +msgstr "Permet que l'usuari proveïa paràmetres de línia de consola addicionals" + +msgid "Arguments:" +msgstr "Paràmetres:" + +msgid "Binary data not displayed, download instead." +msgstr "Els dades binaris no es mostren, descarregueu-los." + +msgid "Code:" +msgstr "Codi:" + +msgid "Collecting data..." +msgstr "Recollint dades..." + +msgid "Command" +msgstr "Ordre" + +msgid "Command failed" +msgstr "L'ordre ha fallat" + +msgid "Command line to execute" +msgstr "Línia d'ordre per executar" + +msgid "Command successful" +msgstr "L'ordre ha tingut èxit" + +msgid "Command:" +msgstr "Ordre;" + +msgid "Configure" +msgstr "Configura" + +msgid "Custom Commands" +msgstr "Ordres personalitzats" + +msgid "Custom arguments" +msgstr "Paràmetres personalitzats" + +msgid "Dashboard" +msgstr "Panell" + +msgid "Description" +msgstr "Descripció" + +msgid "Download" +msgstr "Baixa" + +msgid "Failed to execute command!" +msgstr "L'execució de l'ordre ha fallat!" + +msgid "Link" +msgstr "Enllaç" + +msgid "Loading" +msgstr "Carregant" + +msgid "Public access" +msgstr "Accés públic" + +msgid "Run" +msgstr "Executa" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Aquesta pàgina us permet configurar ordres de consola personalitzats que es " +"poden invocar fàcilment de la interfície web." + +msgid "Waiting for command to complete..." +msgstr "Esperant que l'ordre acabi..." diff --git a/feeds/luci/applications/luci-app-commands/po/cs/commands.po b/feeds/luci/applications/luci-app-commands/po/cs/commands.po new file mode 100644 index 0000000..64949bd --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/cs/commands.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-08-04 19:01+0200\n" +"Last-Translator: KubaCZ \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "Krátky popis nastaveného příkazu" + +msgid "Access command with" +msgstr "" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "Povolit vykonání příkazu a stažení výstupu bez předchozí autentizace." + +msgid "Allow the user to provide additional command line arguments" +msgstr "Povolit uživateli poskytnout dodatečné argumenty příkazového řádku" + +msgid "Arguments:" +msgstr "Argumenty:" + +msgid "Binary data not displayed, download instead." +msgstr "Binární data nezobrazena, stáhněte si je." + +msgid "Code:" +msgstr "Kód:" + +msgid "Collecting data..." +msgstr "Sbírání dat..." + +msgid "Command" +msgstr "Příkaz" + +msgid "Command failed" +msgstr "Příkaz selhal" + +msgid "Command line to execute" +msgstr "Příkazový řádek k vykonání" + +msgid "Command successful" +msgstr "Příkaz úspěšný." + +msgid "Command:" +msgstr "Příkaz:" + +msgid "Configure" +msgstr "Konfigurovat" + +msgid "Custom Commands" +msgstr "Vlastní příkazy" + +msgid "Custom arguments" +msgstr "Vlastní parametry" + +msgid "Dashboard" +msgstr "Řídicí panel" + +msgid "Description" +msgstr "Popis" + +msgid "Download" +msgstr "Stáhnout" + +msgid "Failed to execute command!" +msgstr "Chyba při zpracování příkazu!" + +msgid "Link" +msgstr "Odkaz" + +msgid "Loading" +msgstr "Nahrávám" + +msgid "Public access" +msgstr "Veřejný přístup" + +msgid "Run" +msgstr "Spustit" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Tato stránka umožňuje nastavit vlastní příkazy shellu, které lze snadno " +"vyvolat z webového rozhraní." + +msgid "Waiting for command to complete..." +msgstr "Čekejte na dokončení příkazu..." diff --git a/feeds/luci/applications/luci-app-commands/po/de/commands.po b/feeds/luci/applications/luci-app-commands/po/de/commands.po new file mode 100644 index 0000000..2b7c631 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/de/commands.po @@ -0,0 +1,98 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-11-21 18:45+0200\n" +"Last-Translator: Jo-Philipp \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "Kurze Beschreibung des abgespeicherten Kommandos" + +msgid "Access command with" +msgstr "Kommando aufrufen mit" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Ausführen des Kommandos und Herunterladen der Ausgabe ohne vorherige " +"Authentifizierung ermöglichen" + +msgid "Allow the user to provide additional command line arguments" +msgstr "Erlaube dem Nutzer zusätzliche Kommandozeilenargumente zu übergeben" + +msgid "Arguments:" +msgstr "Argumente:" + +msgid "Binary data not displayed, download instead." +msgstr "Binärdaten ausgeblendet, laden Sie die Ausgaben stattdessen herunter" + +msgid "Code:" +msgstr "Rückgabewert:" + +msgid "Collecting data..." +msgstr "Sammle Daten..." + +msgid "Command" +msgstr "Kommando" + +msgid "Command failed" +msgstr "Kommando fehlgeschlagen" + +msgid "Command line to execute" +msgstr "Auszuführende Kommandozeile" + +msgid "Command successful" +msgstr "Kommando erfolgreich" + +msgid "Command:" +msgstr "Kommando:" + +msgid "Configure" +msgstr "Konfigurieren" + +msgid "Custom Commands" +msgstr "Benutzerdefinierte Kommandos" + +msgid "Custom arguments" +msgstr "Benutzerdefinierte Argumente" + +msgid "Dashboard" +msgstr "Übersicht" + +msgid "Description" +msgstr "Beschreibung" + +msgid "Download" +msgstr "Herunterladen" + +msgid "Failed to execute command!" +msgstr "Kommando konnte nicht ausgeführt werden!" + +msgid "Link" +msgstr "Link" + +msgid "Loading" +msgstr "Lade" + +msgid "Public access" +msgstr "Öffentlicher Zugriff" + +msgid "Run" +msgstr "Ausführen" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Diese Seite ermöglicht die Konfiguration eigener Shell-Kommandos um diese " +"einfach über das Webinterface ausführen zu können." + +msgid "Waiting for command to complete..." +msgstr "Warte auf die Ausführung des Kommandos..." diff --git a/feeds/luci/applications/luci-app-commands/po/el/commands.po b/feeds/luci/applications/luci-app-commands/po/el/commands.po new file mode 100644 index 0000000..0e9e65d --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/el/commands.po @@ -0,0 +1,91 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "A short textual description of the configured command" +msgstr "" + +msgid "Access command with" +msgstr "" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" + +msgid "Arguments:" +msgstr "" + +msgid "Binary data not displayed, download instead." +msgstr "" + +msgid "Code:" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Command failed" +msgstr "" + +msgid "Command line to execute" +msgstr "" + +msgid "Command successful" +msgstr "" + +msgid "Command:" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Custom Commands" +msgstr "" + +msgid "Custom arguments" +msgstr "" + +msgid "Dashboard" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Failed to execute command!" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Public access" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" diff --git a/feeds/luci/applications/luci-app-commands/po/en/commands.po b/feeds/luci/applications/luci-app-commands/po/en/commands.po new file mode 100644 index 0000000..754a229 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/en/commands.po @@ -0,0 +1,95 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "A short textual description of the configured command" +msgstr "A short textual description of the configured command" + +msgid "Access command with" +msgstr "Access command with" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Allow executing the command and downloading its output without prior " +"authentication" + +msgid "Allow the user to provide additional command line arguments" +msgstr "Allow the user to provide additional command line arguments" + +msgid "Arguments:" +msgstr "Arguments:" + +msgid "Binary data not displayed, download instead." +msgstr "Binary data not displayed, download instead." + +msgid "Code:" +msgstr "Code:" + +msgid "Collecting data..." +msgstr "Collecting data..." + +msgid "Command" +msgstr "Command" + +msgid "Command failed" +msgstr "Command failed" + +msgid "Command line to execute" +msgstr "Command line to execute" + +msgid "Command successful" +msgstr "Command successful" + +msgid "Command:" +msgstr "Command:" + +msgid "Configure" +msgstr "Configure" + +msgid "Custom Commands" +msgstr "Custom Commands" + +msgid "Custom arguments" +msgstr "Custom arguments" + +msgid "Dashboard" +msgstr "Dashboard" + +msgid "Description" +msgstr "Description" + +msgid "Download" +msgstr "Download" + +msgid "Failed to execute command!" +msgstr "Failed to execute command!" + +msgid "Link" +msgstr "Link" + +msgid "Loading" +msgstr "Loading" + +msgid "Public access" +msgstr "Public access" + +msgid "Run" +msgstr "Run" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." + +msgid "Waiting for command to complete..." +msgstr "Waiting for command to complete..." diff --git a/feeds/luci/applications/luci-app-commands/po/es/commands.po b/feeds/luci/applications/luci-app-commands/po/es/commands.po new file mode 100644 index 0000000..8052452 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/es/commands.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-11-24 10:16+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "Descripción breve del comando a configurar" + +msgid "Access command with" +msgstr "Acceder al comando con" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Permitir ejecutar el comando y descargar su salida sin más autentificación" + +msgid "Allow the user to provide additional command line arguments" +msgstr "Permitir al usuario añadir parámetros de línea de comandos" + +msgid "Arguments:" +msgstr "Parámetros:" + +msgid "Binary data not displayed, download instead." +msgstr "No se pueden mostrar datos binarios, descárguelos." + +msgid "Code:" +msgstr "Código:" + +msgid "Collecting data..." +msgstr "Recuperando datos..." + +msgid "Command" +msgstr "Comando" + +msgid "Command failed" +msgstr "Falló" + +msgid "Command line to execute" +msgstr "Comando a ejecutar" + +msgid "Command successful" +msgstr "OK" + +msgid "Command:" +msgstr "Comando:" + +msgid "Configure" +msgstr "Configurar" + +msgid "Custom Commands" +msgstr "Comandos propios" + +msgid "Custom arguments" +msgstr "Parámetros propios" + +msgid "Dashboard" +msgstr "Panel" + +msgid "Description" +msgstr "Descripción" + +msgid "Download" +msgstr "Descarga" + +msgid "Failed to execute command!" +msgstr "¡Error al ejecutar el comando!" + +msgid "Link" +msgstr "Enlace" + +msgid "Loading" +msgstr "Cargando" + +msgid "Public access" +msgstr "Acceso público" + +msgid "Run" +msgstr "Ejecutar" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Aquí puede configurar sus propios comandos shell para lanzarlos fácilmente " +"desde el interfaz web." + +msgid "Waiting for command to complete..." +msgstr "Esperando a que termine el comando..." diff --git a/feeds/luci/applications/luci-app-commands/po/fr/commands.po b/feeds/luci/applications/luci-app-commands/po/fr/commands.po new file mode 100644 index 0000000..fac1aff --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/fr/commands.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-12-12 13:36+0200\n" +"Last-Translator: maximeguillaud \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "Une courte description de la commande configurée" + +msgid "Access command with" +msgstr "Accéder à la commande par" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Autoriser l'exécution de la commande et le téléchargement de son résultat " +"sans authentification préalable" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" +"Autoriser l'utilisateur à fournir des arguments de ligne de commande " +"supplémentaires" + +msgid "Arguments:" +msgstr "Arguments :" + +msgid "Binary data not displayed, download instead." +msgstr "Données binaires non affichables, elle peuvent être téléchargées." + +msgid "Code:" +msgstr "Code : " + +msgid "Collecting data..." +msgstr "Récupération des données ..." + +msgid "Command" +msgstr "Commande" + +msgid "Command failed" +msgstr "Echec de la commande" + +msgid "Command line to execute" +msgstr "Ligne de commande à exécuter" + +msgid "Command successful" +msgstr "Commande réussie" + +msgid "Command:" +msgstr "Commande :" + +msgid "Configure" +msgstr "Configurer" + +msgid "Custom Commands" +msgstr "Commandes personnalisées" + +msgid "Custom arguments" +msgstr "Arguments personnalisés" + +msgid "Dashboard" +msgstr "Tableau de bord" + +msgid "Description" +msgstr "Description" + +msgid "Download" +msgstr "Télécharger" + +msgid "Failed to execute command!" +msgstr "Echec de l'exécution de la commande ! " + +msgid "Link" +msgstr "Lien" + +msgid "Loading" +msgstr "Chargement" + +msgid "Public access" +msgstr "Accès public" + +msgid "Run" +msgstr "Exécuter" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Cette page vous permet de configurer des commandes shell personnalisées, " +"pouvant être invoquées facilement depuis l'interface web." + +msgid "Waiting for command to complete..." +msgstr "En attente de la commande pour finir..." diff --git a/feeds/luci/applications/luci-app-commands/po/he/commands.po b/feeds/luci/applications/luci-app-commands/po/he/commands.po new file mode 100644 index 0000000..0e9e65d --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/he/commands.po @@ -0,0 +1,91 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "A short textual description of the configured command" +msgstr "" + +msgid "Access command with" +msgstr "" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" + +msgid "Arguments:" +msgstr "" + +msgid "Binary data not displayed, download instead." +msgstr "" + +msgid "Code:" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Command failed" +msgstr "" + +msgid "Command line to execute" +msgstr "" + +msgid "Command successful" +msgstr "" + +msgid "Command:" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Custom Commands" +msgstr "" + +msgid "Custom arguments" +msgstr "" + +msgid "Dashboard" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Failed to execute command!" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Public access" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" diff --git a/feeds/luci/applications/luci-app-commands/po/hu/commands.po b/feeds/luci/applications/luci-app-commands/po/hu/commands.po new file mode 100644 index 0000000..5cd0ec7 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/hu/commands.po @@ -0,0 +1,98 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-24 18:47+0200\n" +"Last-Translator: Gábor \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "A beállított parancs rövid szöveges leírása" + +msgid "Access command with" +msgstr "Parancs hozzáférése" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Engedélyezi a parancs végrehajtását és kimenetének letöltését előzetes " +"hitelesítés nélkül" + +msgid "Allow the user to provide additional command line arguments" +msgstr "A felhasználó által további parancsori argumentumok adhatók meg" + +msgid "Arguments:" +msgstr "Argumentumok:" + +msgid "Binary data not displayed, download instead." +msgstr "Bináris adat nem jelenik meg, töltse le helyette." + +msgid "Code:" +msgstr "Kód:" + +msgid "Collecting data..." +msgstr "Adatgyűjtés..." + +msgid "Command" +msgstr "Paracs" + +msgid "Command failed" +msgstr "Parancs végrehajtás sikertelen" + +msgid "Command line to execute" +msgstr "Futtatandó parancssor" + +msgid "Command successful" +msgstr "Parancs végrehajtás sikeres" + +msgid "Command:" +msgstr "Parancs:" + +msgid "Configure" +msgstr "Beállítás" + +msgid "Custom Commands" +msgstr "Egyedi parancsok" + +msgid "Custom arguments" +msgstr "Egyedi argumentumok" + +msgid "Dashboard" +msgstr "Vezérlőpult" + +msgid "Description" +msgstr "Leírás" + +msgid "Download" +msgstr "Letöltés" + +msgid "Failed to execute command!" +msgstr "Parancs végrehajtása sikertelen!" + +msgid "Link" +msgstr "Link" + +msgid "Loading" +msgstr "Betöltés" + +msgid "Public access" +msgstr "Nyilvános hozzáférés" + +msgid "Run" +msgstr "Futtatás" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Ezen az oldalon egyéni shell parancsokat állíthat be, amelyeket könnyen " +"felhasználhat a webes felületen." + +msgid "Waiting for command to complete..." +msgstr "Várakozás a parancs befejezésére..." diff --git a/feeds/luci/applications/luci-app-commands/po/it/commands.po b/feeds/luci/applications/luci-app-commands/po/it/commands.po new file mode 100644 index 0000000..c14b910 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/it/commands.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-02-03 13:52+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "Una breve descrizione testuale del comando configurato" + +msgid "Access command with" +msgstr "Accesso comando con" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Consentire l'esecuzione del comando e il download del suo output senza " +"previa autenticazione" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" +"Consente all'utente di fornire ulteriori argomenti della riga di comando" + +msgid "Arguments:" +msgstr "Argomenti:" + +msgid "Binary data not displayed, download instead." +msgstr "I dati binari non vengono visualizzati, ma possono essere scaricati." + +msgid "Code:" +msgstr "Codice:" + +msgid "Collecting data..." +msgstr "Raccolta dei dati..." + +msgid "Command" +msgstr "Comando" + +msgid "Command failed" +msgstr "Comando fallito" + +msgid "Command line to execute" +msgstr "Riga di comando da eseguire" + +msgid "Command successful" +msgstr "Comando riuscito" + +msgid "Command:" +msgstr "Comando:" + +msgid "Configure" +msgstr "Configura" + +msgid "Custom Commands" +msgstr "Comandi Personalizzati" + +msgid "Custom arguments" +msgstr "Argomenti Personalizzati" + +msgid "Dashboard" +msgstr "Dashboard" + +msgid "Description" +msgstr "Descrizione" + +msgid "Download" +msgstr "Download" + +msgid "Failed to execute command!" +msgstr "Impossibile eseguire il comando!" + +msgid "Link" +msgstr "Collegamento" + +msgid "Loading" +msgstr "Caricamento" + +msgid "Public access" +msgstr "Accesso Pubblico" + +msgid "Run" +msgstr "Esegui" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Questa pagina consente di configurare i comandi della shell personalizzate " +"che possono essere facilmente richiamati dall'interfaccia web." + +msgid "Waiting for command to complete..." +msgstr "In attesa del comando da completare..." diff --git a/feeds/luci/applications/luci-app-commands/po/ja/commands.po b/feeds/luci/applications/luci-app-commands/po/ja/commands.po new file mode 100644 index 0000000..99b5a45 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/ja/commands.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"PO-Revision-Date: 2016-12-21 11:59+0900\n" +"Last-Translator: INAGAKI Hiroshi \n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.11\n" +"POT-Creation-Date: \n" + +msgid "A short textual description of the configured command" +msgstr "設定したコマンドの簡単な説明文を記載します" + +msgid "Access command with" +msgstr "コマンドへのアクセス" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "事前認証無しでのコマンドの実行と、結果出力のダウンロードを許可します。" + +msgid "Allow the user to provide additional command line arguments" +msgstr "コマンドラインに対する引数の追記を許可するか設定します" + +msgid "Arguments:" +msgstr "引数:" + +msgid "Binary data not displayed, download instead." +msgstr "バイナリデータは表示されずにダウンロードされます。" + +msgid "Code:" +msgstr "コード:" + +msgid "Collecting data..." +msgstr "データ収集中です..." + +msgid "Command" +msgstr "コマンド" + +msgid "Command failed" +msgstr "コマンド失敗" + +msgid "Command line to execute" +msgstr "実行するコマンドラインを記載します" + +msgid "Command successful" +msgstr "コマンド成功" + +msgid "Command:" +msgstr "コマンド:" + +msgid "Configure" +msgstr "設定" + +msgid "Custom Commands" +msgstr "カスタムコマンド" + +msgid "Custom arguments" +msgstr "カスタム引数" + +msgid "Dashboard" +msgstr "ダッシュボード" + +msgid "Description" +msgstr "説明" + +msgid "Download" +msgstr "ダウンロード" + +msgid "Failed to execute command!" +msgstr "コマンドの実行に失敗しました!" + +msgid "Link" +msgstr "リンク" + +msgid "Loading" +msgstr "読み込み中" + +msgid "Public access" +msgstr "パブリック・アクセス" + +msgid "Run" +msgstr "実行" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"このページでは、ウェブインターフェースから簡単にシェル・コマンドを実行するこ" +"とができます。" + +msgid "Waiting for command to complete..." +msgstr "コマンド実行中です..." diff --git a/feeds/luci/applications/luci-app-commands/po/ms/commands.po b/feeds/luci/applications/luci-app-commands/po/ms/commands.po new file mode 100644 index 0000000..6fbb983 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/ms/commands.po @@ -0,0 +1,90 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "A short textual description of the configured command" +msgstr "" + +msgid "Access command with" +msgstr "" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" + +msgid "Arguments:" +msgstr "" + +msgid "Binary data not displayed, download instead." +msgstr "" + +msgid "Code:" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Command failed" +msgstr "" + +msgid "Command line to execute" +msgstr "" + +msgid "Command successful" +msgstr "" + +msgid "Command:" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Custom Commands" +msgstr "" + +msgid "Custom arguments" +msgstr "" + +msgid "Dashboard" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Failed to execute command!" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Public access" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" diff --git a/feeds/luci/applications/luci-app-commands/po/no/commands.po b/feeds/luci/applications/luci-app-commands/po/no/commands.po new file mode 100644 index 0000000..29b76e5 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/no/commands.po @@ -0,0 +1,98 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-03-25 23:38+0200\n" +"Last-Translator: protx \n" +"Language-Team: none\n" +"Language: no\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "En kort tekstlig beskrivelse av den konfigurerte kommandoen" + +msgid "Access command with" +msgstr "Åpne kommandoen med" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Tillat å utføre kommandoen og laste ned resultatet uten forutgående " +"godkjenning" + +msgid "Allow the user to provide additional command line arguments" +msgstr "Tillat brukeren å gi ytterligere kommandolinjeargumenter" + +msgid "Arguments:" +msgstr "Argumenter:" + +msgid "Binary data not displayed, download instead." +msgstr "Binære data vises ikke, last ned i stedet." + +msgid "Code:" +msgstr "Kode:" + +msgid "Collecting data..." +msgstr "Henter data..." + +msgid "Command" +msgstr "Kommando" + +msgid "Command failed" +msgstr "Kommando feilet" + +msgid "Command line to execute" +msgstr "Kommandolinje å utføre" + +msgid "Command successful" +msgstr "Kommando vellykket" + +msgid "Command:" +msgstr "Kommando:" + +msgid "Configure" +msgstr "Konfigurer" + +msgid "Custom Commands" +msgstr "Egendefinerte Kommandoer" + +msgid "Custom arguments" +msgstr "Egendefinerte argumenter" + +msgid "Dashboard" +msgstr "Dashboard" + +msgid "Description" +msgstr "Beskrivelse" + +msgid "Download" +msgstr "Nedlasting" + +msgid "Failed to execute command!" +msgstr "Kunne ikke utføre kommandoen!" + +msgid "Link" +msgstr "Link" + +msgid "Loading" +msgstr "Laster" + +msgid "Public access" +msgstr "Tilgjengelig for alle" + +msgid "Run" +msgstr "Kjør" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Denne siden lar deg konfigurere egendefinerte shell-kommandoer som lett kan " +"startes fra webgrensesnittet." + +msgid "Waiting for command to complete..." +msgstr "Venter på at kommandoen fullføres..." diff --git a/feeds/luci/applications/luci-app-commands/po/pl/commands.po b/feeds/luci/applications/luci-app-commands/po/pl/commands.po new file mode 100644 index 0000000..6f660ba --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/pl/commands.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-02-25 18:03+0200\n" +"Last-Translator: TheTranslator2238 \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "Krótki opis konfigurowanej komendy" + +msgid "Access command with" +msgstr "Dostęp do komendy przez" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Zezwól na uruchomienie komendy i pobranie wyjścia bez uprzedniego " +"uwierzytelnienia" + +msgid "Allow the user to provide additional command line arguments" +msgstr "Pozwól użytkownikowi dodać argumenty wiersza poleceń" + +msgid "Arguments:" +msgstr "Argumenty:" + +msgid "Binary data not displayed, download instead." +msgstr "Nie wyświetlono danych binarnych, możesz je pobrać." + +msgid "Code:" +msgstr "Kod:" + +msgid "Collecting data..." +msgstr "Zbieram dane:" + +msgid "Command" +msgstr "Komenda" + +msgid "Command failed" +msgstr "Zła komenda" + +msgid "Command line to execute" +msgstr "Linia Komendy do wykonania" + +msgid "Command successful" +msgstr "Komenda Wykonana" + +msgid "Command:" +msgstr "Komenda:" + +msgid "Configure" +msgstr "Konfiguracja" + +msgid "Custom Commands" +msgstr "Własne komendy" + +msgid "Custom arguments" +msgstr "Własne argumenty" + +msgid "Dashboard" +msgstr "Tablica" + +msgid "Description" +msgstr "Opis" + +msgid "Download" +msgstr "Download" + +msgid "Failed to execute command!" +msgstr "Nie można wykonać komendy!" + +msgid "Link" +msgstr "Łącze" + +msgid "Loading" +msgstr "Ładowanie" + +msgid "Public access" +msgstr "Publiczny dostęp" + +msgid "Run" +msgstr "Uruchom" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Ta strona pozwala ci skonfigurować niestandardową komendę którą można łatwo " +"użyć z Web Interfejsa" + +msgid "Waiting for command to complete..." +msgstr "Czekanie na wykonanie komendy..." diff --git a/feeds/luci/applications/luci-app-commands/po/pt-br/commands.po b/feeds/luci/applications/luci-app-commands/po/pt-br/commands.po new file mode 100644 index 0000000..83c7bd5 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/pt-br/commands.po @@ -0,0 +1,98 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-03-15 22:02+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "Uma pequena descrição textual do comando configurado" + +msgid "Access command with" +msgstr "Acessar o comando com" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Permitir a execução do comando e descarregar o resultado sem autenticação " +"prévia" + +msgid "Allow the user to provide additional command line arguments" +msgstr "Permitir ao usuário inserir argumentos de linha de comando adicionais" + +msgid "Arguments:" +msgstr "Argumentos:" + +msgid "Binary data not displayed, download instead." +msgstr "Dados binários não mostrados, mas podem ser baixados." + +msgid "Code:" +msgstr "Código:" + +msgid "Collecting data..." +msgstr "Adquirindo dados..." + +msgid "Command" +msgstr "Comando" + +msgid "Command failed" +msgstr "O comando falhou" + +msgid "Command line to execute" +msgstr "Linha de comandos a executar" + +msgid "Command successful" +msgstr "Comando executado com sucesso" + +msgid "Command:" +msgstr "Comando:" + +msgid "Configure" +msgstr "Configurar" + +msgid "Custom Commands" +msgstr "Comandos Personalizados" + +msgid "Custom arguments" +msgstr "Argumentos personalizados" + +msgid "Dashboard" +msgstr "Painel de Controle" + +msgid "Description" +msgstr "Descrição" + +msgid "Download" +msgstr "Baixar" + +msgid "Failed to execute command!" +msgstr "Falha ao executar comando!" + +msgid "Link" +msgstr "Endereço" + +msgid "Loading" +msgstr "Carregando" + +msgid "Public access" +msgstr "Acesso público" + +msgid "Run" +msgstr "Executar" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Esta página permite a configuração de comandos personalizados que podem ser " +"facilmente executados através da interface web." + +msgid "Waiting for command to complete..." +msgstr "Aguardando a conclusão do comando..." diff --git a/feeds/luci/applications/luci-app-commands/po/pt/commands.po b/feeds/luci/applications/luci-app-commands/po/pt/commands.po new file mode 100644 index 0000000..a46b7d2 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/pt/commands.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-06-02 19:17+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "Uma pequena descrição textual do comando configurado" + +msgid "Access command with" +msgstr "Aceder ao comando com" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Permitir a execução do comando e descarregar o resultado sem autenticação " +"prévia" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" +"Permitir que o utilizador forneça argumentos adicionais na linha de comandos" + +msgid "Arguments:" +msgstr "Argumentos:" + +msgid "Binary data not displayed, download instead." +msgstr "Dados binários não mostrados, mas pode descarregar." + +msgid "Code:" +msgstr "Código:" + +msgid "Collecting data..." +msgstr "A obter dados..." + +msgid "Command" +msgstr "Comando" + +msgid "Command failed" +msgstr "O comando falhou" + +msgid "Command line to execute" +msgstr "Linha de comandos a executar" + +msgid "Command successful" +msgstr "Comando executado com sucesso" + +msgid "Command:" +msgstr "Comando:" + +msgid "Configure" +msgstr "Configurar" + +msgid "Custom Commands" +msgstr "Comandos Personalizados" + +msgid "Custom arguments" +msgstr "Argumentos personalizados" + +msgid "Dashboard" +msgstr "Painel de Controlo" + +msgid "Description" +msgstr "Descrição" + +msgid "Download" +msgstr "Descarregar" + +msgid "Failed to execute command!" +msgstr "Falha ao executar comando!" + +msgid "Link" +msgstr "Link" + +msgid "Loading" +msgstr "A carregar" + +msgid "Public access" +msgstr "Acesso público" + +msgid "Run" +msgstr "Executar" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Esta página permite-lhe configurar uma linha de comandos personalizada que " +"pode facilmente ser executada a partir da interface web." + +msgid "Waiting for command to complete..." +msgstr "A aguardar que o comando termine..." diff --git a/feeds/luci/applications/luci-app-commands/po/ro/commands.po b/feeds/luci/applications/luci-app-commands/po/ro/commands.po new file mode 100644 index 0000000..05c4574 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/ro/commands.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-28 18:45+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "O scurta descriere textuala a comenzii configurate" + +msgid "Access command with" +msgstr "Acces la comanda cu" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Permite executarea comenzii si descarcarea rezultatului fara o autentificare " +"anterioara" + +msgid "Allow the user to provide additional command line arguments" +msgstr "Permite utilizatorului sa adauge parametrii in linia de comanda" + +msgid "Arguments:" +msgstr "Parametrii:" + +msgid "Binary data not displayed, download instead." +msgstr "Datele binare nu sunt afisate, descarcale in schimb" + +msgid "Code:" +msgstr "Cod:" + +msgid "Collecting data..." +msgstr "Colectare date..." + +msgid "Command" +msgstr "Comandă" + +msgid "Command failed" +msgstr "Comandă eşuată" + +msgid "Command line to execute" +msgstr "Linie de comanda pentru a executa" + +msgid "Command successful" +msgstr "Comanda reusita" + +msgid "Command:" +msgstr "Comanda:" + +msgid "Configure" +msgstr "Configureaza" + +msgid "Custom Commands" +msgstr "Comenzi particulare" + +msgid "Custom arguments" +msgstr "Argumenta particulare" + +msgid "Dashboard" +msgstr "Dashboard" + +msgid "Description" +msgstr "Descriere" + +msgid "Download" +msgstr "Descarca" + +msgid "Failed to execute command!" +msgstr "S-a esuat executarea comenzii!!" + +msgid "Link" +msgstr "Link" + +msgid "Loading" +msgstr "Se incarca" + +msgid "Public access" +msgstr "Access public" + +msgid "Run" +msgstr "Ruleaza" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Aceasta pagina permite configurarea de comenzi personale ce pot fi usor " +"apelate din interfata grafica" + +msgid "Waiting for command to complete..." +msgstr "Astept finalizarea comenzii..." diff --git a/feeds/luci/applications/luci-app-commands/po/ru/commands.po b/feeds/luci/applications/luci-app-commands/po/ru/commands.po new file mode 100644 index 0000000..6197231 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/ru/commands.po @@ -0,0 +1,102 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-15 16:48+0200\n" +"Last-Translator: datasheet \n" +"Language-Team: none\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "Короткое текстовое описание команды" + +msgid "Access command with" +msgstr "Доступ к команде через" + +#, fuzzy +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" +"Разрешить выполнение команды и загрузку ее вывода без предварительной " +"аутентификации" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" +"Разрешить пользователям использовать дополнительные аргументы командной " +"строки" + +msgid "Arguments:" +msgstr "Аргументы:" + +msgid "Binary data not displayed, download instead." +msgstr "Двоичные данные не отображаются, вместо этого - выгружаются" + +msgid "Code:" +msgstr "Код:" + +msgid "Collecting data..." +msgstr "Сбор данных..." + +msgid "Command" +msgstr "Команда" + +msgid "Command failed" +msgstr "Команда не выполнена" + +msgid "Command line to execute" +msgstr "Командная строка для выполнения" + +msgid "Command successful" +msgstr "Команда выполнена" + +msgid "Command:" +msgstr "Команда:" + +msgid "Configure" +msgstr "Настроить" + +msgid "Custom Commands" +msgstr "Пользовательские команды" + +msgid "Custom arguments" +msgstr "Пользовательские аргументы" + +msgid "Dashboard" +msgstr "Информационная панель" + +msgid "Description" +msgstr "Описание" + +msgid "Download" +msgstr "Скачать" + +msgid "Failed to execute command!" +msgstr "Ошибка выполнения команды!" + +msgid "Link" +msgstr "Ссылка" + +msgid "Loading" +msgstr "Загрузка" + +msgid "Public access" +msgstr "Публичный доступ" + +msgid "Run" +msgstr "Запуск" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Эта страница предоставляет возможность настраивать пользовательские " +"консольные команды, которые могут быть легко вызваны из веб-интерфейса" + +msgid "Waiting for command to complete..." +msgstr "Ожидание завершения команды..." diff --git a/feeds/luci/applications/luci-app-commands/po/sk/commands.po b/feeds/luci/applications/luci-app-commands/po/sk/commands.po new file mode 100644 index 0000000..4133dfb --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/sk/commands.po @@ -0,0 +1,91 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "A short textual description of the configured command" +msgstr "" + +msgid "Access command with" +msgstr "" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" + +msgid "Arguments:" +msgstr "" + +msgid "Binary data not displayed, download instead." +msgstr "" + +msgid "Code:" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Command failed" +msgstr "" + +msgid "Command line to execute" +msgstr "" + +msgid "Command successful" +msgstr "" + +msgid "Command:" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Custom Commands" +msgstr "" + +msgid "Custom arguments" +msgstr "" + +msgid "Dashboard" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Failed to execute command!" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Public access" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" diff --git a/feeds/luci/applications/luci-app-commands/po/sv/commands.po b/feeds/luci/applications/luci-app-commands/po/sv/commands.po new file mode 100644 index 0000000..9fbe0af --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/sv/commands.po @@ -0,0 +1,92 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "A short textual description of the configured command" +msgstr "" + +msgid "Access command with" +msgstr "" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" + +msgid "Arguments:" +msgstr "" + +msgid "Binary data not displayed, download instead." +msgstr "" + +msgid "Code:" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Command failed" +msgstr "" + +msgid "Command line to execute" +msgstr "" + +msgid "Command successful" +msgstr "" + +msgid "Command:" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Custom Commands" +msgstr "" + +msgid "Custom arguments" +msgstr "" + +msgid "Dashboard" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Failed to execute command!" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Public access" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" diff --git a/feeds/luci/applications/luci-app-commands/po/templates/commands.pot b/feeds/luci/applications/luci-app-commands/po/templates/commands.pot new file mode 100644 index 0000000..5d2ffae --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/templates/commands.pot @@ -0,0 +1,84 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "A short textual description of the configured command" +msgstr "" + +msgid "Access command with" +msgstr "" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" + +msgid "Arguments:" +msgstr "" + +msgid "Binary data not displayed, download instead." +msgstr "" + +msgid "Code:" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Command failed" +msgstr "" + +msgid "Command line to execute" +msgstr "" + +msgid "Command successful" +msgstr "" + +msgid "Command:" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Custom Commands" +msgstr "" + +msgid "Custom arguments" +msgstr "" + +msgid "Dashboard" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Failed to execute command!" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Public access" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" diff --git a/feeds/luci/applications/luci-app-commands/po/tr/commands.po b/feeds/luci/applications/luci-app-commands/po/tr/commands.po new file mode 100644 index 0000000..4132274 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/tr/commands.po @@ -0,0 +1,91 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "A short textual description of the configured command" +msgstr "" + +msgid "Access command with" +msgstr "" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" + +msgid "Arguments:" +msgstr "" + +msgid "Binary data not displayed, download instead." +msgstr "" + +msgid "Code:" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Command failed" +msgstr "" + +msgid "Command line to execute" +msgstr "" + +msgid "Command successful" +msgstr "" + +msgid "Command:" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Custom Commands" +msgstr "" + +msgid "Custom arguments" +msgstr "" + +msgid "Dashboard" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Failed to execute command!" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Public access" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" diff --git a/feeds/luci/applications/luci-app-commands/po/uk/commands.po b/feeds/luci/applications/luci-app-commands/po/uk/commands.po new file mode 100644 index 0000000..74a19f3 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/uk/commands.po @@ -0,0 +1,103 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-14 12:14+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +#, fuzzy +msgid "A short textual description of the configured command" +msgstr "Короткий опис команд налаштування" + +msgid "Access command with" +msgstr "" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" + +#, fuzzy +msgid "Arguments:" +msgstr "Аргументи:" + +msgid "Binary data not displayed, download instead." +msgstr "" + +msgid "Code:" +msgstr "Код:" + +msgid "Collecting data..." +msgstr "Збирання даних..." + +msgid "Command" +msgstr "" + +msgid "Command failed" +msgstr "Команда не виконана" + +msgid "Command line to execute" +msgstr "" + +msgid "Command successful" +msgstr "" + +msgid "Command:" +msgstr "" + +msgid "Configure" +msgstr "Конфігурація" + +msgid "Custom Commands" +msgstr "" + +msgid "Custom arguments" +msgstr "" + +#, fuzzy +msgid "Dashboard" +msgstr "Панель керування" + +msgid "Description" +msgstr "Опис" + +msgid "Download" +msgstr "Завантажити" + +#, fuzzy +msgid "Failed to execute command!" +msgstr "Помилка під час запуску команди!" + +msgid "Link" +msgstr "" + +msgid "Loading" +msgstr "Триває завантаження" + +msgid "Public access" +msgstr "Відкритий доступ" + +msgid "Run" +msgstr "Запустити" + +#, fuzzy +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" +"Ця сторінка дозволяє налаштувати користувацькі команди оболонки, яка може " +"бути легко запущена з веб-інтерфейсу." + +#, fuzzy +msgid "Waiting for command to complete..." +msgstr "Очікування завершення команди..." diff --git a/feeds/luci/applications/luci-app-commands/po/vi/commands.po b/feeds/luci/applications/luci-app-commands/po/vi/commands.po new file mode 100644 index 0000000..4132274 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/vi/commands.po @@ -0,0 +1,91 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "A short textual description of the configured command" +msgstr "" + +msgid "Access command with" +msgstr "" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "" + +msgid "Allow the user to provide additional command line arguments" +msgstr "" + +msgid "Arguments:" +msgstr "" + +msgid "Binary data not displayed, download instead." +msgstr "" + +msgid "Code:" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Command failed" +msgstr "" + +msgid "Command line to execute" +msgstr "" + +msgid "Command successful" +msgstr "" + +msgid "Command:" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Custom Commands" +msgstr "" + +msgid "Custom arguments" +msgstr "" + +msgid "Dashboard" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Failed to execute command!" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Public access" +msgstr "" + +msgid "Run" +msgstr "" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" diff --git a/feeds/luci/applications/luci-app-commands/po/zh-cn/commands.po b/feeds/luci/applications/luci-app-commands/po/zh-cn/commands.po new file mode 100644 index 0000000..8b2b032 --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/zh-cn/commands.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-08 15:47+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "简短描述命令用途" + +msgid "Access command with" +msgstr "访问命令" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "允许在不认证的前提下执行命令,并获取其输出。" + +msgid "Allow the user to provide additional command line arguments" +msgstr "允许用户提供额外的命令行参数" + +msgid "Arguments:" +msgstr "参数:" + +msgid "Binary data not displayed, download instead." +msgstr "不显示二进制数据,使用下载方式替代。" + +msgid "Code:" +msgstr "代码:" + +msgid "Collecting data..." +msgstr "收集数据:" + +msgid "Command" +msgstr "命令" + +msgid "Command failed" +msgstr "执行命令失败" + +msgid "Command line to execute" +msgstr "执行命令行" + +msgid "Command successful" +msgstr "执行命令成功" + +msgid "Command:" +msgstr "命令:" + +msgid "Configure" +msgstr "配置" + +msgid "Custom Commands" +msgstr "自定义命令" + +msgid "Custom arguments" +msgstr "自定义参数" + +msgid "Dashboard" +msgstr "看板" + +msgid "Description" +msgstr "描述" + +msgid "Download" +msgstr "下载" + +msgid "Failed to execute command!" +msgstr "执行命令失败!" + +msgid "Link" +msgstr "连接" + +msgid "Loading" +msgstr "加载中" + +msgid "Public access" +msgstr "公共访问" + +msgid "Run" +msgstr "运行" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "此页面允许您配置自定义Shell命令,并可以从Web界面调用shell命令。" + +msgid "Waiting for command to complete..." +msgstr "等待命令执行完成... ..." diff --git a/feeds/luci/applications/luci-app-commands/po/zh-tw/commands.po b/feeds/luci/applications/luci-app-commands/po/zh-tw/commands.po new file mode 100644 index 0000000..4377ead --- /dev/null +++ b/feeds/luci/applications/luci-app-commands/po/zh-tw/commands.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-18 19:59+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "A short textual description of the configured command" +msgstr "以短文描述設定指令" + +msgid "Access command with" +msgstr "存取指令" + +msgid "" +"Allow executing the command and downloading its output without prior " +"authentication" +msgstr "允許執行這指令及下載它的輸出無須事先驗證" + +msgid "Allow the user to provide additional command line arguments" +msgstr "允許用戶提供額外的指令行參數" + +msgid "Arguments:" +msgstr "參數:" + +msgid "Binary data not displayed, download instead." +msgstr "二進進資料未顯示, 以下載替代." + +msgid "Code:" +msgstr "碼:" + +msgid "Collecting data..." +msgstr "收集資料中..." + +msgid "Command" +msgstr "指令" + +msgid "Command failed" +msgstr "命令失敗" + +msgid "Command line to execute" +msgstr "要執行的指令行" + +msgid "Command successful" +msgstr "命令成功" + +msgid "Command:" +msgstr "命令:" + +msgid "Configure" +msgstr "設定" + +msgid "Custom Commands" +msgstr "自訂指令集" + +msgid "Custom arguments" +msgstr "自訂參數集" + +msgid "Dashboard" +msgstr "儀表板" + +msgid "Description" +msgstr "描述" + +msgid "Download" +msgstr "下載" + +msgid "Failed to execute command!" +msgstr "執行指令失敗!" + +msgid "Link" +msgstr "連結" + +msgid "Loading" +msgstr "掛載" + +msgid "Public access" +msgstr "公用存取" + +msgid "Run" +msgstr "執行" + +msgid "" +"This page allows you to configure custom shell commands which can be easily " +"invoked from the web interface." +msgstr "只要可以從web介輕易調用, 這頁面允許你自定shell指令." + +msgid "Waiting for command to complete..." +msgstr "等待完整命令中..." diff --git a/feeds/luci/applications/luci-app-coovachilli/Makefile b/feeds/luci/applications/luci-app-coovachilli/Makefile new file mode 100644 index 0000000..6120991 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for Coova Chilli +LUCI_DEPENDS:=@BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-coovachilli/luasrc/controller/coovachilli.lua b/feeds/luci/applications/luci-app-coovachilli/luasrc/controller/coovachilli.lua new file mode 100644 index 0000000..f962b9b --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/luasrc/controller/coovachilli.lua @@ -0,0 +1,15 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.coovachilli", package.seeall) + +function index() + local cc + + cc = entry( { "admin", "services", "coovachilli" }, cbi("coovachilli"), _("CoovaChilli"), 90) + cc.subindex = true + + entry( { "admin", "services", "coovachilli", "network" }, cbi("coovachilli_network"), _("Network Configuration"), 10) + entry( { "admin", "services", "coovachilli", "radius" }, cbi("coovachilli_radius"), _("RADIUS configuration"), 20) + entry( { "admin", "services", "coovachilli", "auth" }, cbi("coovachilli_auth"), _("UAM and MAC Authentication"), 30) +end diff --git a/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli.lua b/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli.lua new file mode 100644 index 0000000..7a2056c --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli.lua @@ -0,0 +1,19 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("coovachilli") + +-- general +s = m:section(TypedSection, "general") +s.anonymous = true + +s:option( Flag, "debug" ) +s:option( Value, "interval" ) +s:option( Value, "pidfile" ).optional = true +s:option( Value, "statedir" ).optional = true +s:option( Value, "cmdsock" ).optional = true +s:option( Value, "logfacility" ).optional = true + + +return m diff --git a/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli_auth.lua b/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli_auth.lua new file mode 100644 index 0000000..4123532 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli_auth.lua @@ -0,0 +1,64 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("coovachilli") + +-- uam config +s1 = m:section(TypedSection, "uam") +s1.anonymous = true + +s1:option( Value, "uamserver" ) +s1:option( Value, "uamsecret" ).password = true + +s1:option( Flag, "uamanydns" ) +s1:option( Flag, "nouamsuccess" ) +s1:option( Flag, "nouamwispr" ) +s1:option( Flag, "chillixml" ) +s1:option( Flag, "uamanyip" ).optional = true +s1:option( Flag, "dnsparanoia" ).optional = true +s1:option( Flag, "usestatusfile" ).optional = true + +s1:option( Value, "uamhomepage" ).optional = true +s1:option( Value, "uamlisten" ).optional = true +s1:option( Value, "uamport" ).optional = true +s1:option( Value, "uamiport" ).optional = true +s1:option( DynamicList, "uamdomain" ).optional = true +s1:option( Value, "uamlogoutip" ).optional = true +s1:option( DynamicList, "uamallowed" ).optional = true +s1:option( Value, "uamui" ).optional = true + +s1:option( Value, "wisprlogin" ).optional = true + +s1:option( Value, "defsessiontimeout" ).optional = true +s1:option( Value, "defidletimeout" ).optional = true +s1:option( Value, "definteriminterval" ).optional = true + +s1:option( Value, "ssid" ).optional = true +s1:option( Value, "vlan" ).optional = true +s1:option( Value, "nasip" ).optional = true +s1:option( Value, "nasmac" ).optional = true +s1:option( Value, "wwwdir" ).optional = true +s1:option( Value, "wwwbin" ).optional = true + +s1:option( Value, "localusers" ).optional = true +s1:option( Value, "postauthproxy" ).optional = true +s1:option( Value, "postauthproxyport" ).optional = true +s1:option( Value, "locationname" ).optional = true + + +-- mac authentication +s2 = m:section(TypedSection, "macauth") +s2.anonymous = true + +s2:option( Flag, "macauth" ) +s2:option( Flag, "macallowlocal" ) +s2:option( DynamicList, "macallowed" ) + +pw = s2:option( Value, "macpasswd" ) +pw.optional = true +pw.password = true + +s2:option( Value, "macsuffix" ).optional = true + +return m diff --git a/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli_network.lua b/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli_network.lua new file mode 100644 index 0000000..025bc17 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli_network.lua @@ -0,0 +1,56 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local sys = require"luci.sys" +local ip = require "luci.ip" + +m = Map("coovachilli") + +-- tun +s1 = m:section(TypedSection, "tun") +s1.anonymous = true + +s1:option( Flag, "usetap" ) +s1:option( Value, "tundev" ).optional = true +s1:option( Value, "txqlen" ).optional = true + +net = s1:option( Value, "net" ) +for _, route in ipairs(ip.routes({ family = 4, type = 1 })) do + if route.dest:prefix() > 0 and route.dest:prefix() < 32 then + net:value( route.dest:string() ) + end +end + +s1:option( Value, "dynip" ).optional = true +s1:option( Value, "statip" ).optional = true + +s1:option( Value, "dns1" ).optional = true +s1:option( Value, "dns2" ).optional = true +s1:option( Value, "domain" ).optional = true + +s1:option( Value, "ipup" ).optional = true +s1:option( Value, "ipdown" ).optional = true + +s1:option( Value, "conup" ).optional = true +s1:option( Value, "condown" ).optional = true + + +-- dhcp config +s2 = m:section(TypedSection, "dhcp") +s2.anonymous = true + +dif = s2:option( Value, "dhcpif" ) +for _, nif in ipairs(sys.net.devices()) do + if nif ~= "lo" then dif:value(nif) end +end + +s2:option( Value, "dhcpmac" ).optional = true +s2:option( Value, "lease" ).optional = true +s2:option( Value, "dhcpstart" ).optional = true +s2:option( Value, "dhcpend" ).optional = true + +s2:option( Flag, "eapolenable" ) + + +return m diff --git a/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli_radius.lua b/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli_radius.lua new file mode 100644 index 0000000..e2cbe49 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/luasrc/model/cbi/coovachilli_radius.lua @@ -0,0 +1,55 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("coovachilli") + +-- radius server +s1 = m:section(TypedSection, "radius") +s1.anonymous = true + +s1:option( Value, "radiusserver1" ) +s1:option( Value, "radiusserver2" ) +s1:option( Value, "radiussecret" ).password = true + +s1:option( Value, "radiuslisten" ).optional = true +s1:option( Value, "radiusauthport" ).optional = true +s1:option( Value, "radiusacctport" ).optional = true + +s1:option( Value, "radiusnasid" ).optional = true +s1:option( Value, "radiusnasip" ).optional = true + +s1:option( Value, "radiuscalled" ).optional = true +s1:option( Value, "radiuslocationid" ).optional = true +s1:option( Value, "radiuslocationname" ).optional = true + +s1:option( Value, "radiusnasporttype" ).optional = true + +s1:option( Flag, "radiusoriginalurl" ) + +s1:option( Value, "adminuser" ).optional = true +rs = s1:option( Value, "adminpassword" ) +rs.optional = true +rs.password = true + +s1:option( Flag, "swapoctets" ) +s1:option( Flag, "openidauth" ) +s1:option( Flag, "wpaguests" ) +s1:option( Flag, "acctupdate" ) + +s1:option( Value, "coaport" ).optional = true +s1:option( Flag, "coanoipcheck" ) + + +-- radius proxy +s2 = m:section(TypedSection, "proxy") +s2.anonymous = true + +s2:option( Value, "proxylisten" ).optional = true +s2:option( Value, "proxyport" ).optional = true +s2:option( Value, "proxyclient" ).optional = true +ps = s2:option( Value, "proxysecret" ) +ps.optional = true +ps.password = true + +return m diff --git a/feeds/luci/applications/luci-app-coovachilli/po/ca/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/ca/coovachilli.po new file mode 100644 index 0000000..4970a12 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/ca/coovachilli.po @@ -0,0 +1,655 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-06-01 22:48+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Configuració de xarxa" + +msgid "RADIUS configuration" +msgstr "Configuració RADIUS" + +msgid "UAM and MAC Authentication" +msgstr "Autenticació UAM i MAC" + +#~ msgid "General configuration" +#~ msgstr "Configuració general" + +#~ msgid "General CoovaChilli settings" +#~ msgstr "Configuració CoovaChilli general" + +#~ msgid "Command socket" +#~ msgstr "Socket de comanda" + +#~ msgid "UNIX socket used for communication with chilli_query" +#~ msgstr "SocketUNIX usat per comunicació amb chilli_query" + +#~ msgid "Config refresh interval" +#~ msgstr "Configuració d'interval de refresc" + +#~ msgid "" +#~ "Re-read configuration file and do DNS lookups every interval seconds. " +#~ "This has the same effect as sending the HUP signal. If interval is 0 " +#~ "(zero) this feature is disabled. " +#~ msgstr "" +#~ "Re-llegeix el fitxer de configuració i les consultes DNS cada interval " +#~ "segons. Això té el mateix efecte que enviar el senyal HUP. Si l'interval " +#~ "és 0 (zero) es deshabilita la funció." + +#~ msgid "Pid file" +#~ msgstr "Fitxer PID" + +#~ msgid "Filename to put the process id" +#~ msgstr "Nom de fitxer on posar la ID de procés" + +#~ msgid "State directory" +#~ msgstr "Directori d'estat" + +#~ msgid "Directory of non-volatile data" +#~ msgstr "Directori de dades no volàtils" + +#~ msgid "TUN/TAP configuration" +#~ msgstr "Configuració TUN/TAP" + +#~ msgid "Network/Tun configuration" +#~ msgstr "Configuració de xarxa/tun" + +#~ msgid "Network down script" +#~ msgstr "Script de baixada de xarxa" + +#~ msgid "" +#~ "Script executed after a session has moved from authorized state to " +#~ "unauthorized" +#~ msgstr "" +#~ "Script executat quan es mou una sessió des de l'estat autoritzat a no " +#~ "autoritzat" + +#~ msgid "Network up script" +#~ msgstr "Script de pujada de xarxa" + +#~ msgid "Script executed after the tun network interface has been brought up" +#~ msgstr "Script executat després que la interfície de xarxa tun s'hagi alçat" + +#~ msgid "Primary DNS Server" +#~ msgstr "Servidor DNS primari" + +#~ msgid "Secondary DNS Server" +#~ msgstr "Servidor DNS secundari" + +#~ msgid "Domain name" +#~ msgstr "Nom de domini" + +#~ msgid "" +#~ "Is used to inform the client about the domain name to use for DNS lookups" +#~ msgstr "" +#~ "S'utilitza per informar el client sobre el no mde domini a utilitzar per " +#~ "les consultes DNS" + +#~ msgid "Dynamic IP address pool" +#~ msgstr "Bateria d'adreces IP dinàmiques" + +#~ msgid "Specifies a pool of dynamic IP addresses" +#~ msgstr "Especifica una bateria d'adreces IP dinàmiques" + +#~ msgid "IP down script" +#~ msgstr "Scripts de baixada IP" + +#~ msgid "Script executed after the tun network interface has been taken down" +#~ msgstr "" +#~ "Script executat després que s'hagi abaixat la interfície de xarxa tun" + +#~ msgid "IP up script" +#~ msgstr "Script de pujada IP" + +#~ msgid "" +#~ "Script executed after the TUN/TAP network interface has been brought up" +#~ msgstr "" +#~ "Script executat després que s'hagi apujat la interfície de xarxa TUN/TAP" + +#~ msgid "Uplink subnet" +#~ msgstr "Subxarxa de pujada" + +#~ msgid "Network address of the uplink interface (CIDR notation)" +#~ msgstr "Adreça de xarxa de la interfície d'enllaç de pujada (notació CIDR)" + +#~ msgid "Static IP address pool" +#~ msgstr "Bateria d'adreces IP estàtiques" + +#~ msgid "Specifies a pool of static IP addresses" +#~ msgstr "Especifica una bateria d'adreces IP estàtiques" + +#~ msgid "TUN/TAP device" +#~ msgstr "Dispositiu TUN/TAP" + +#~ msgid "The specific device to use for the TUN/TAP interface" +#~ msgstr "El dispositiu específic utilitzar per la interfície TUN/TAP" + +#~ msgid "TX queue length" +#~ msgstr "Llargària de la cua TX" + +#~ msgid "The TX queue length to set on the TUN/TAP interface" +#~ msgstr "La llargària de la cua TX per establir la interfície TUN/TAP" + +#~ msgid "Use TAP device" +#~ msgstr "Utilitza dispositiu TAP" + +#~ msgid "Use the TAP interface instead of TUN" +#~ msgstr "Utilitza la interfície TAP en comptes de TUN" + +#~ msgid "DHCP configuration" +#~ msgstr "Configuració DHCP" + +#~ msgid "Set DHCP options for connecting clients" +#~ msgstr "Estebleix les opcions DHCP pels clients connectats" + +#~ msgid "DHCP end number" +#~ msgstr "Número final de DHCP" + +#~ msgid "Where to stop assigning IP addresses (default 254)" +#~ msgstr "Quan deixar d'assignar adreces IP (per defecte 254)" + +#~ msgid "DHCP interface" +#~ msgstr "Interfície DHCP" + +#~ msgid "Ethernet interface to listen to for the downlink interface" +#~ msgstr "" +#~ "Interfície Ethernet per escoltar les connexions a la interfície de baixada" + +#~ msgid "Listen MAC address" +#~ msgstr "Escolta adreça MAC" + +#~ msgid "" +#~ "MAC address to listen to. If not specified the MAC address of the " +#~ "interface will be used" +#~ msgstr "" +#~ "Adreça MAC per escoltar. Si no s'especifica, s'utilitzarà l'adreça MAC de " +#~ "la interfície." + +#~ msgid "DHCP start number" +#~ msgstr "Número d'inici de DHCP" + +#~ msgid "Where to start assigning IP addresses (default 10)" +#~ msgstr "Quan començar a assignar adreces IP (per defecte 10)" + +#~ msgid "Enable IEEE 802.1x" +#~ msgstr "Activa IEEE 802.1x" + +#~ msgid "Enable IEEE 802.1x authentication and listen for EAP requests" +#~ msgstr "Activa l'autenticació IEEE 802.1x i escolta peticions EAP" + +#~ msgid "Leasetime" +#~ msgstr "Temps de Lease" + +#~ msgid "Use a DHCP lease of seconds (default 600)" +#~ msgstr "Utilitza un lease de segons (per defecte 600)" + +#~ msgid "Allow session update through RADIUS" +#~ msgstr "Permet l'actualització de sessió a través de RADIUS" + +#~ msgid "" +#~ "Allow updating of session parameters with RADIUS attributes sent in " +#~ "Accounting-Response" +#~ msgstr "" +#~ "Permet l'actualització dels paràmetres de sessió amb atributs RADIUS " +#~ "enviats per Accounting-Response" + +#~ msgid "Admin password" +#~ msgstr "Contrasenya d'administració" + +#~ msgid "" +#~ "Password to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "" +#~ "Contrasenya per utilitzar per autenticació d'usuari administrador per " +#~ "agafar configurcions Chilli i establir una sessió \"system\" de dispositiu" + +#~ msgid "Admin user" +#~ msgstr "Usuari administrador" + +#~ msgid "" +#~ "User-name to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "" +#~ "Nom d'usuari per utilitzar per autenticació d'usuari administrador per " +#~ "agafar configurcions Chilli i establir una sessió \"system\" de dispositiu" + +#~ msgid "Do not check disconnection requests" +#~ msgstr "No comprovis les peticions de desconnexió" + +#~ msgid "Do not check the source IP address of radius disconnect requests" +#~ msgstr "" +#~ "No comprovis l'origen de l'adreça IP de les peticions de desconnexió " +#~ "RADIUS" + +#~ msgid "RADIUS disconnect port" +#~ msgstr "Port de desconnexió RADIUS" + +#~ msgid "UDP port to listen to for accepting radius disconnect requests" +#~ msgstr "Port UDP per acceptar peticions de desconnexió RADIUS" + +#~ msgid "NAS IP" +#~ msgstr "NAS IP" + +#~ msgid "Value to use in RADIUS NAS-IP-Address attribute" +#~ msgstr "Valor per utilitzar a l'atribut RADIUS adreça NAS-IP" + +#~ msgid "NAS MAC" +#~ msgstr "NAS MAC" + +#~ msgid "MAC address value to use in RADIUS Called-Station-ID attribute" +#~ msgstr "" +#~ "Valor d'adreça MAC per utilitzar a l'atribiut RADIUS Called-Station-ID" + +#~ msgid "Allow OpenID authentication" +#~ msgstr "Permet autenticació OpenID" + +#~ msgid "" +#~ "Allows OpenID authentication by sending ChilliSpot-Config=allow-" +#~ "openidauth in RADIUS Access-Requests" +#~ msgstr "" +#~ "Permet autenticació OpenID enviant ChilliSpot-Config=allow-openidauth als " +#~ "Access-Requests de RADIUS" + +#~ msgid "RADIUS accounting port" +#~ msgstr "Port d'accounting RADIUS" + +#~ msgid "" +#~ "The UDP port number to use for radius accounting requests (default 1813)" +#~ msgstr "" +#~ "Port UDP a utilitzar per les peticions d'accounting RADIUS (per defecte " +#~ "1813)" + +#~ msgid "RADIUS authentication port" +#~ msgstr "Port d'autenticació RADIUS" + +#~ msgid "" +#~ "The UDP port number to use for radius authentication requests (default " +#~ "1812)" +#~ msgstr "" +#~ "Port UDP a utilitzar per les peticions d'autenticació RADIUS (per defecte " +#~ "1812)" + +#~ msgid "Option radiuscalled" +#~ msgstr "Opció radiuscalled" + +#~ msgid "RADIUS listen address" +#~ msgstr "Adreça per rebre connexions RADIUS" + +#~ msgid "Local interface IP address to use for the radius interface" +#~ msgstr "Adreça IP d'interfície local per utilitzar per la interfície RADIUS" + +#~ msgid "RADIUS location ID" +#~ msgstr "ID de localització RADIUS" + +#~ msgid "WISPr Location ID" +#~ msgstr "ID de localització WISPr" + +#~ msgid "RADIUS location name" +#~ msgstr "Nom de localització RADIUS" + +#~ msgid "WISPr Location Name" +#~ msgstr "Nom de localització WISPr" + +#~ msgid "NAS ID" +#~ msgstr "NAS ID" + +#~ msgid "Network access server identifier" +#~ msgstr "Identificació de servidor d'accés de xarxa" + +#~ msgid "Option radiusnasip" +#~ msgstr "Opció radiusnasip" + +#~ msgid "NAS port type" +#~ msgstr "Tipus de port NAS" + +#~ msgid "" +#~ "Value of NAS-Port-Type attribute. Defaults to 19 (Wireless-IEEE-802.11)" +#~ msgstr "" +#~ "Valor de l'atribut NAS-Port-Type. Per defecte 19 (Wireless-IEEE-802.11)" + +#~ msgid "Send RADIUS VSA" +#~ msgstr "Envia RADIUS VSA" + +#~ msgid "Send the ChilliSpot-OriginalURL RADIUS VSA in Access-Request" +#~ msgstr "Envia el RADIUS VSA ChilliSpot-OriginalURl al Access-Request" + +#~ msgid "RADIUS secret" +#~ msgstr "Secret RADIUS" + +#~ msgid "Radius shared secret for both servers" +#~ msgstr "Secret compartit RADIUS pels dos servidors" + +#~ msgid "RADIUS server 1" +#~ msgstr "Servidor RADIUS 1" + +#~ msgid "The IP address of radius server 1" +#~ msgstr "L'adreça IP del servidor RADIUS 1" + +#~ msgid "RADIUS server 2" +#~ msgstr "Servidor RADIUS 2" + +#~ msgid "The IP address of radius server 2" +#~ msgstr "L'adreça IP del servidor RADIUS 2" + +#~ msgid "Swap octets" +#~ msgstr "Intercanvia octets" + +#~ msgid "" +#~ "Swap the meaning of \"input octets\" and \"output octets\" as it related " +#~ "to RADIUS attribtues" +#~ msgstr "" +#~ "Intercanvia el significat dels \"octets d'entrada\" i els \"octets de " +#~ "sortida\" com es relacionen els atributs RADIUS" + +#~ msgid "Allow WPA guests" +#~ msgstr "Permet convidats WPA" + +#~ msgid "" +#~ "Allows WPA Guest authentication by sending ChilliSpot-Config=allow-wpa-" +#~ "guests in RADIUS Access-Requests" +#~ msgstr "" +#~ "Permet l'autenticació de convidats WPA enviant un ChilliSpot-Config=allow-" +#~ "wpa-guests als Access-Requests de RADIUS" + +#~ msgid "Proxy client" +#~ msgstr "Client proxy" + +#~ msgid "" +#~ "IP address from which radius requests are accepted. If omitted the server " +#~ "will not accept radius requests" +#~ msgstr "" +#~ "Adreça IP des de la qual s'accepten les peticions RADIUS. Si s'omet, el " +#~ "servidor no acceptarà peticions RADIUS" + +#~ msgid "Proxy listen address" +#~ msgstr "Adreça que rep connexions del proxy" + +#~ msgid "Local interface IP address to use for accepting radius requests" +#~ msgstr "" +#~ "L'adreça IP de la interfície local a utilitzar per acceptar peticions " +#~ "RADIUS" + +#~ msgid "Proxy port" +#~ msgstr "Port proxy" + +#~ msgid "UDP Port to listen to for accepting radius requests" +#~ msgstr "Port UDP a rebre connexions per acceptar peticions RADIUS" + +#~ msgid "Proxy secret" +#~ msgstr "Secret de proxy" + +#~ msgid "Radius shared secret for clients" +#~ msgstr "Secret compartit de RADIUS pels clients" + +#~ msgid "UAM configuration" +#~ msgstr "Configuració UAM" + +#~ msgid "Unified Configuration Method settings" +#~ msgstr "Preferències de Mètode de Configuració Unificat" + +#~ msgid "Use Chilli XML" +#~ msgstr "Utilitza XML Chilli" + +#~ msgid "Return the so-called Chilli XML along with WISPr XML" +#~ msgstr "Retorna l'XML Chilli juntament amb l'XML WISPr" + +#~ msgid "Default idle timeout" +#~ msgstr "Temps d'espera d'inactivitat màxim per defecte" + +#~ msgid "Default idle timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Temps d'espera d'inactivitat màxim per defecte excepte si s'estableix pel " +#~ "RADIUS (per defecte 0)" + +#~ msgid "Default interim interval" +#~ msgstr "Interval provisional predeterminat" + +#~ msgid "" +#~ "Default interim-interval for RADIUS accounting unless otherwise set by " +#~ "RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Interval provisional predeterminat per accounting RADIUS excepte si " +#~ "s'estableix pel RADIUS (per defecte 0)" + +#~ msgid "Default session timeout" +#~ msgstr "Temps d'espera màxim de sessió per defecte" + +#~ msgid "" +#~ "Default session timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Temps d'espera màxim de sessió per defecte excepte si s'estableix pel " +#~ "RADIUS (per defecte 0)" + +#~ msgid "Inspect DNS traffic" +#~ msgstr "Inspeccions tràfic DNS" + +#~ msgid "" +#~ "Inspect DNS packets and drop responses with any non- A, CNAME, SOA, or MX " +#~ "records to prevent dns tunnels (experimental)" +#~ msgstr "" +#~ "Inspecciona paquets DNS i descarta ls respostes per qualsevol registre " +#~ "que no sigui A, CNAME, SOA o MX per prevenir túnels DNS (experimental)" + +#~ msgid "Local users file" +#~ msgstr "Fitxers d'usuaris local" + +#~ msgid "" +#~ "A colon separated file containing usernames and passwords of locally " +#~ "authenticated users" +#~ msgstr "" +#~ "Un fitxer contenint usuaris i contrasenyes separats per punts d'usuaris " +#~ "autenticats localment" + +#~ msgid "Location name" +#~ msgstr "Nom de localització" + +#~ msgid "Human readable location name used in JSON interface" +#~ msgstr "Nom de localització llegible utilitzat en l'interfície JSON" + +#~ msgid "Do not redirect to UAM server" +#~ msgstr "No readrecis al servidor UAM" + +#~ msgid "" +#~ "Do not return to UAM server on login success, just redirect to original " +#~ "URL" +#~ msgstr "" +#~ "No retornis al servidor UAM amb quan s'iniciï la sessió amb èxit, " +#~ "readreça només a la URL original" + +#~ msgid "Do not do WISPr" +#~ msgstr "No facis WISPr" + +#~ msgid "Do not do any WISPr XML, assume the back-end is doing this instead" +#~ msgstr "No facis cap XML WISPr, assumeix que el back-end ho està fent" + +#~ msgid "Post auth proxy" +#~ msgstr "Proxy post autenticació" + +#~ msgid "" +#~ "Used with postauthproxyport to define a post authentication HTTP proxy " +#~ "server" +#~ msgstr "" +#~ "Utilitzat amb postauthproxyport per definir una autenticació HTTP " +#~ "posterior de proxy server" + +#~ msgid "Post auth proxy port" +#~ msgstr "Port proxy post autenticació" + +#~ msgid "" +#~ "Used with postauthproxy to define a post authentication HTTP proxy server" +#~ msgstr "" +#~ "Utilitzat amb postauthproxy per definir un servidor proxy HTTP " +#~ "d'autenticació posterior" + +#~ msgid "Allowed resources" +#~ msgstr "Recursos permesos" + +#~ msgid "List of resources the client can access without first authenticating" +#~ msgstr "" +#~ "Llista dels recursos que el client pot accedir sense autenticar-se primer" + +#~ msgid "Allow any DNS server" +#~ msgstr "Permet qualsevol servidor DNS" + +#~ msgid "Allow any DNS server for unauthenticated clients" +#~ msgstr "Permet qualsevol servidor DNS per clients no autenticats" + +#~ msgid "Allow any IP address" +#~ msgstr "Permet qualsevol adreça IP" + +#~ msgid "" +#~ "Allow clients to use any IP settings they wish by spoofing ARP " +#~ "(experimental)" +#~ msgstr "" +#~ "Permet que els clients utilitzin qualsevol configuració IP que vulguin " +#~ "fent ARP spoofind (experimental)" + +#~ msgid "Allowed domains" +#~ msgstr "Dominis permesos" + +#~ msgid "" +#~ "Defines a list of domain names to automatically add to the walled garden" +#~ msgstr "" +#~ "Defineix una llista de noms de domini per afegir automàticament al jardí " +#~ "tancat" + +#~ msgid "UAM homepage" +#~ msgstr "Pàgina d'inici UAM" + +#~ msgid "URL of homepage to redirect unauthenticated users to" +#~ msgstr "URL de la pàgina d'inici per readreçar usuari no autenticats" + +#~ msgid "UAM static content port" +#~ msgstr "Port de contingut estàtic UAM" + +#~ msgid "TCP port to bind to for only serving embedded content" +#~ msgstr "Port TCP on escoltar per servir només contingut empotrat" + +#~ msgid "UAM listening address" +#~ msgstr "Adreça per on escoltar UAM" + +#~ msgid "IP address to listen to for authentication of clients" +#~ msgstr "Adreça IP on escoltar pels l'autenticació dels clients" + +#~ msgid "UAM logout IP" +#~ msgstr "IP de final de sessió UAM" + +#~ msgid "" +#~ "Use this IP address to instantly logout a client accessing it (defaults " +#~ "to 1.1.1.1)" +#~ msgstr "" +#~ "Utilitza aquesta adreça IP per finalitzar la sessió d'un que hi accedeix " +#~ "instantàniament (per defecte 1.1.1.1)" + +#~ msgid "UAM listening port" +#~ msgstr "Port on escoltar UAM" + +#~ msgid "TCP port to bind to for authenticating clients (default 3990)" +#~ msgstr "" +#~ "Port TCP per on escoltar l'autenticació de clients (per defecte 3990)" + +#~ msgid "UAM secret" +#~ msgstr "Secret UAM" + +#~ msgid "Shared secret between uamserver and chilli" +#~ msgstr "Secret compartit entre el uamserver i el chilli" + +#~ msgid "UAM server" +#~ msgstr "Servidor UAM" + +#~ msgid "URL of web server to use for authenticating clients" +#~ msgstr "URL del servidor URL a utilitzar per clients autenticats" + +#~ msgid "UAM user interface" +#~ msgstr "Interfície d'usuari UAM" + +#~ msgid "" +#~ "An init.d style program to handle local content on the uamuiport web " +#~ "server" +#~ msgstr "" +#~ "Un programa de l'stil init.d per gestionar el contingut local al servidor " +#~ "web uamuiport" + +#~ msgid "Use status file" +#~ msgstr "Utilitza fitxer d'estat" + +#~ msgid "" +#~ "Write the status of clients in a non-volatile state file (experimental)" +#~ msgstr "" +#~ "Escriu l'estat dels clients en un fitxer d'estat no volàtil (experimental)" + +#~ msgid "WISPr login url" +#~ msgstr "URL d'inici de sessió WISPr" + +#~ msgid "Specific URL to be given in WISPr XML LoginURL" +#~ msgstr "URL específica a donar a la URL d'inici de sessió de l'XML WISPr" + +#~ msgid "CGI program" +#~ msgstr "Programa CGI" + +#~ msgid "" +#~ "Executable to run as a CGI type program (like haserl) for URLs with " +#~ "extension .chi" +#~ msgstr "" +#~ "Executable per executar com un programa de tipus CGI (com el haserl) per " +#~ "URLs amb extensió .chi" + +#~ msgid "Web content directory" +#~ msgstr "Directori de contingut web" + +#~ msgid "Directory where embedded local web content is placed" +#~ msgstr "Directori on se situa el contingut web local empotrat" + +#~ msgid "MAC configuration" +#~ msgstr "Configuració MAC" + +#~ msgid "Configure MAC authentication" +#~ msgstr "Configura l'autenticació MAC" + +#~ msgid "Allowed MAC addresses" +#~ msgstr "Adreces MAC permeses" + +#~ msgid "List of MAC addresses for which MAC authentication will be performed" +#~ msgstr "Llista d'adreces MAC per les que es realitzarà autenticació MAC" + +#~ msgid "Authenticate locally allowed MACs" +#~ msgstr "Autentica localment les MACs permeses" + +#~ msgid "Authenticate allowed MAC addresses without the use of RADIUS" +#~ msgstr "Autentica les adreces MAC permeses sense l'ús del RADIUS" + +#~ msgid "Enable MAC authentification" +#~ msgstr "Activa l'autenticació MAC" + +#~ msgid "Try to authenticate all users based on their mac address alone" +#~ msgstr "" +#~ "Intenta autenticar tots els usuaris basats només en la seva adreça MAC" + +#~ msgid "Password" +#~ msgstr "Contrasenya" + +#~ msgid "Password used when performing MAC authentication" +#~ msgstr "Contrasenya utilitzada quan es realitza autenticació MAC" + +#~ msgid "Suffix" +#~ msgstr "Sufix" + +#~ msgid "coovachilli_macauth_macsuffix_desc" +#~ msgstr "" +#~ "Sufix per afegir a l'adreça MAC per formar el nm d'usuari, que s'enviarà " +#~ "al servidor RADIUS" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/cs/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/cs/coovachilli.po new file mode 100644 index 0000000..bc7ef7a --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/cs/coovachilli.po @@ -0,0 +1,348 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-30 10:33+0200\n" +"Last-Translator: Astran \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Nastavení sítě" + +msgid "RADIUS configuration" +msgstr "Nastavení RADIUS" + +msgid "UAM and MAC Authentication" +msgstr "UAM a MAC ověřování" + +#~ msgid "General configuration" +#~ msgstr "Obecná konfigurace" + +#~ msgid "General CoovaChilli settings" +#~ msgstr "Obecné nastavení CoovaChilli" + +#~ msgid "Command socket" +#~ msgstr "Příkazový socket" + +#~ msgid "UNIX socket used for communication with chilli_query" +#~ msgstr "UNIX socket, používaný pro komunikaci s chilli_query" + +#~ msgid "Config refresh interval" +#~ msgstr "Interval obnovení konfigurace" + +#~ msgid "Pid file" +#~ msgstr "PID soubor" + +#~ msgid "TUN/TAP configuration" +#~ msgstr "Nastavení TUN/TAP" + +#~ msgid "Network/Tun configuration" +#~ msgstr "Nastavení sítě/Tun" + +#~ msgid "Network down script" +#~ msgstr "Network down skript" + +#~ msgid "Network up script" +#~ msgstr "Network up skript" + +#~ msgid "Script executed after the tun network interface has been brought up" +#~ msgstr "Skript, spuštěný po nahození síťového rozhraní TUN" + +#~ msgid "Primary DNS Server" +#~ msgstr "Primární DNS server" + +#~ msgid "Secondary DNS Server" +#~ msgstr "Sekundární DNS server" + +#~ msgid "Domain name" +#~ msgstr "Doménové jméno" + +#~ msgid "Dynamic IP address pool" +#~ msgstr "Pool dynamických IP adres" + +#~ msgid "Specifies a pool of dynamic IP addresses" +#~ msgstr "Urči rozsah, z něhož se budou přidělovat dynamické IP adresy" + +#~ msgid "IP down script" +#~ msgstr "IP down skript" + +#~ msgid "IP up script" +#~ msgstr "IP up skript" + +#~ msgid "Network address of the uplink interface (CIDR notation)" +#~ msgstr "Síťová adresa uplink rozhraní (CIDR notace)" + +#~ msgid "Static IP address pool" +#~ msgstr "Pool statických IP adres" + +#~ msgid "Specifies a pool of static IP addresses" +#~ msgstr "Určuje rozsah, z něhož se budou přidělovat statické IP adresy" + +#~ msgid "TX queue length" +#~ msgstr "Délka odchozí fronty" + +#~ msgid "The TX queue length to set on the TUN/TAP interface" +#~ msgstr "Délka odchozí fronty na zařízení TUN/TAP" + +#~ msgid "Use TAP device" +#~ msgstr "Použít zařízení TAP" + +#~ msgid "Use the TAP interface instead of TUN" +#~ msgstr "Použít TAP rozhraní namísto TUN" + +#~ msgid "DHCP configuration" +#~ msgstr "Nastavení DHCP" + +#~ msgid "Set DHCP options for connecting clients" +#~ msgstr "Nastavit možnosti DHCP pro příchozí klienty" + +#~ msgid "DHCP end number" +#~ msgstr "DHCP koncové číslo" + +#~ msgid "Where to stop assigning IP addresses (default 254)" +#~ msgstr "Kde přestat přidělovat IP adresy (standardně 254)" + +#~ msgid "DHCP interface" +#~ msgstr "DHCP rozhraní" + +#~ msgid "Where to start assigning IP addresses (default 10)" +#~ msgstr "Odkud začít přidělovat IP adresy" + +#~ msgid "Enable IEEE 802.1x" +#~ msgstr "Povolit IEEE 802.1x" + +#~ msgid "Enable IEEE 802.1x authentication and listen for EAP requests" +#~ msgstr "Povolit IEEE 802.1x autentizaci a naslouchat požadavkům EAP" + +#~ msgid "Admin password" +#~ msgstr "Administrátorské heslo" + +#~ msgid "Admin user" +#~ msgstr "Administrátorský uživatel" + +#~ msgid "Do not check disconnection requests" +#~ msgstr "Neověřovat požadavky na odpojení" + +#~ msgid "Do not check the source IP address of radius disconnect requests" +#~ msgstr "" +#~ "Neověřovat zdrojovou IP adresu požadavku na odpojení protokolu RADIUS" + +#~ msgid "NAS IP" +#~ msgstr "NAS IP" + +#~ msgid "NAS MAC" +#~ msgstr "NAS MAC" + +#~ msgid "Allow OpenID authentication" +#~ msgstr "Povolit autentizaci pomocí OpenID" + +#~ msgid "RADIUS server 1" +#~ msgstr "RADIUS server 1" + +#~ msgid "The IP address of radius server 1" +#~ msgstr "IP adresa prvního radius serveru" + +#~ msgid "RADIUS server 2" +#~ msgstr "RADIUS server 2" + +#~ msgid "The IP address of radius server 2" +#~ msgstr "IP adresa druhého radius serveru" + +#~ msgid "" +#~ "Swap the meaning of \"input octets\" and \"output octets\" as it related " +#~ "to RADIUS attribtues" +#~ msgstr "" +#~ "Prohodit významy spojení \"vstupní oktety\" a \"výstupní oktety\", " +#~ "vztahující se k atributům protokolu RADIUS" + +#~ msgid "Allow WPA guests" +#~ msgstr "Povolit WPA hosty" + +#~ msgid "Proxy client" +#~ msgstr "Proxy klient" + +#~ msgid "" +#~ "IP address from which radius requests are accepted. If omitted the server " +#~ "will not accept radius requests" +#~ msgstr "" +#~ "IP adresa, ze které budou přijímány požadavky radius. Pokud necháte " +#~ "prázdné, server nebude přijímat požadavky protokolu RADIUS." + +#~ msgid "Proxy listen address" +#~ msgstr "Naslouchající adresa Proxy" + +#~ msgid "Local interface IP address to use for accepting radius requests" +#~ msgstr "" +#~ "IP adresa místního rozhraní, určená pro naslouchání požadavkům protokolu " +#~ "RADIUS" + +#~ msgid "Proxy port" +#~ msgstr "Port Proxy" + +#~ msgid "UDP Port to listen to for accepting radius requests" +#~ msgstr "UDP port, určený pro naslouchání požadavkům protokolu RADIUS" + +#~ msgid "UAM configuration" +#~ msgstr "Konfigurace UAM" + +#~ msgid "Unified Configuration Method settings" +#~ msgstr "Nastavení 'Unified Configuration Method'" + +#~ msgid "Use Chilli XML" +#~ msgstr "Použít Chilli XML" + +#~ msgid "Default idle timeout" +#~ msgstr "Výchozí časový limit nečinnosti" + +#~ msgid "Default idle timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Výchozí časový limit nečinnosti, pokud nebyl nastaven pomocí RADIUS " +#~ "(standardně 0)" + +#~ msgid "Default session timeout" +#~ msgstr "Výchozí časový limit sezení" + +#~ msgid "" +#~ "Default session timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Výchozí časový limit sezení, pokud není RADIUS nastaven jinak (standardně " +#~ "0)" + +#~ msgid "Inspect DNS traffic" +#~ msgstr "Kontrolovat DNS provoz" + +#~ msgid "Local users file" +#~ msgstr "Soubor s místními uživateli" + +#~ msgid "" +#~ "A colon separated file containing usernames and passwords of locally " +#~ "authenticated users" +#~ msgstr "" +#~ "Soubor, obsahující uživatelská jména a hesla místně ověřovaných " +#~ "uživatelů. Jednotlivé položky jsou odděleny dvojtečkou." + +#~ msgid "Location name" +#~ msgstr "Název umístění" + +#~ msgid "Human readable location name used in JSON interface" +#~ msgstr "Čitelný název umístění, používán v rozhraní JSON" + +#~ msgid "Do not redirect to UAM server" +#~ msgstr "Nepřesměrovávat na UAM server" + +#~ msgid "" +#~ "Do not return to UAM server on login success, just redirect to original " +#~ "URL" +#~ msgstr "" +#~ "Při úspěšném přihlášení nevracet na UAM server, pouze přesměrovat na " +#~ "původní URL" + +#~ msgid "Do not do WISPr" +#~ msgstr "Neprovádět WISPr" + +#~ msgid "Allowed resources" +#~ msgstr "Povolené zdroje" + +#~ msgid "List of resources the client can access without first authenticating" +#~ msgstr "Seznam zdrojů, jež může klient využívat bez nutnosti autentizace" + +#~ msgid "Allow any DNS server" +#~ msgstr "Povolit libovolný DNS server" + +#~ msgid "Allow any DNS server for unauthenticated clients" +#~ msgstr "Povolí libovolný DNS server neověřeným klientům" + +#~ msgid "Allow any IP address" +#~ msgstr "Povolit libovolnou IP adresu" + +#~ msgid "Allowed domains" +#~ msgstr "Povolené domény" + +#~ msgid "UAM homepage" +#~ msgstr "Domovská stránka UAM" + +#~ msgid "URL of homepage to redirect unauthenticated users to" +#~ msgstr "" +#~ "URL domovské stránky, na kterou budou přesměrováni neověření uživatelé" + +#~ msgid "IP address to listen to for authentication of clients" +#~ msgstr "IP adresa, na které naslouchat za účelem ověřování klientů" + +#~ msgid "UAM logout IP" +#~ msgstr "Odhlašovací IP UAM" + +#~ msgid "" +#~ "Use this IP address to instantly logout a client accessing it (defaults " +#~ "to 1.1.1.1)" +#~ msgstr "" +#~ "Adresa, sloužící k okamžitému odhlášení klienta, pokud na ní přistoupí " +#~ "(standardně 1.1.1.1)" + +#~ msgid "UAM listening port" +#~ msgstr "Naslouchající port UAM" + +#~ msgid "UAM server" +#~ msgstr "UAM server" + +#~ msgid "URL of web server to use for authenticating clients" +#~ msgstr "URL web serveru, sloužícího k ověřování klientů" + +#~ msgid "UAM user interface" +#~ msgstr "Uživatelské rozhraní UAM" + +#~ msgid "Use status file" +#~ msgstr "Použít stavový soubor" + +#~ msgid "" +#~ "Write the status of clients in a non-volatile state file (experimental)" +#~ msgstr "" +#~ "Zapisovat stavy klientů do stálého stavového souboru (experimentální)" + +#~ msgid "WISPr login url" +#~ msgstr "Přihlašovací URL WISPr" + +#~ msgid "CGI program" +#~ msgstr "CGI program" + +#~ msgid "Web content directory" +#~ msgstr "Adresář s webovým obsahem" + +#~ msgid "Directory where embedded local web content is placed" +#~ msgstr "Adresář, ve kterém je umístěn místní webový obsah." + +#~ msgid "MAC configuration" +#~ msgstr "Nastavení MAC" + +#~ msgid "Configure MAC authentication" +#~ msgstr "Nastavit ověřování pomocí MAC" + +#~ msgid "Allowed MAC addresses" +#~ msgstr "Povolené MAC adresy" + +#~ msgid "List of MAC addresses for which MAC authentication will be performed" +#~ msgstr "Seznam MAC adres, pro které bude prováděno ověřování pomocí MAC" + +#~ msgid "Authenticate locally allowed MACs" +#~ msgstr "Ověřit lokálně povolené MAC" + +#~ msgid "Authenticate allowed MAC addresses without the use of RADIUS" +#~ msgstr "Ověří povolené MAC adresy bez použití protokolu RADIUS" + +#~ msgid "Enable MAC authentification" +#~ msgstr "Povolit ověřování pomocí MAC" + +#~ msgid "Password" +#~ msgstr "Heslo" + +#~ msgid "Suffix" +#~ msgstr "Přípona" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/de/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/de/coovachilli.po new file mode 100644 index 0000000..79955d7 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/de/coovachilli.po @@ -0,0 +1,658 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2012-07-17 15:05+0200\n" +"Last-Translator: Martin \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Netzwerk-Konfiguration" + +msgid "RADIUS configuration" +msgstr "RADIUS Konfiguration" + +msgid "UAM and MAC Authentication" +msgstr "UAM- und MAC-Authentifizierung" + +#~ msgid "General configuration" +#~ msgstr "Allgemeine Einstellungen" + +#~ msgid "General CoovaChilli settings" +#~ msgstr "Allgemeine Einstellungen zu CoovaChilli" + +#, fuzzy +#~ msgid "Command socket" +#~ msgstr "Eingabeschnittstelle" + +#~ msgid "UNIX socket used for communication with chilli_query" +#~ msgstr "" +#~ "UNIX socket der fuer die Kommunikation mit chilli_query benutzt wird" + +#, fuzzy +#~ msgid "Config refresh interval" +#~ msgstr "Zeit zwischen neuladen der Konfiguration" + +#, fuzzy +#~ msgid "" +#~ "Re-read configuration file and do DNS lookups every interval seconds. " +#~ "This has the same effect as sending the HUP signal. If interval is 0 " +#~ "(zero) this feature is disabled. " +#~ msgstr "Zeit zwischen neuladen der Konfiguration" + +#~ msgid "Pid file" +#~ msgstr "Pid-Datei" + +#~ msgid "Filename to put the process id" +#~ msgstr "" +#~ "Name der Datei, in der die Pid gespeichert wird" + +#, fuzzy +#~ msgid "State directory" +#~ msgstr "Statisches Verzeichniss" + +#~ msgid "Directory of non-volatile data" +#~ msgstr "Verzeichniss für statische Daten" + +#, fuzzy +#~ msgid "TUN/TAP configuration" +#~ msgstr "TUN/TAP Konfiguration" + +#, fuzzy +#~ msgid "Network/Tun configuration" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Network down script" +#~ msgstr "" +#~ "Script, das nach einer Umwandlung von einer autorisierten zu einer " +#~ "unautorisierten Sitzung ausgeführt wird" + +#~ msgid "" +#~ "Script executed after a session has moved from authorized state to " +#~ "unauthorized" +#~ msgstr "" +#~ "Skript, das nach einer Umwandlung von einer autorisierten zu einer " +#~ "unautorisierten Sitzung ausgeführt wird" + +#~ msgid "Network up script" +#~ msgstr "Netzwerk Up Skript" + +#, fuzzy +#~ msgid "Script executed after the tun network interface has been brought up" +#~ msgstr "Script, dass nach erfolgreicher tun - Verbindung ausgeführt wird" + +#~ msgid "Primary DNS Server" +#~ msgstr "Primärer DNS-Server" + +#~ msgid "Secondary DNS Server" +#~ msgstr "Sekundärer DNS-Server" + +#, fuzzy +#~ msgid "Domain name" +#~ msgstr "Domain Name" + +#~ msgid "" +#~ "Is used to inform the client about the domain name to use for DNS lookups" +#~ msgstr "" +#~ "Wird benutzt um Clients ueber den zu benutzenden Domain Namen fuer DNS " +#~ "Anfragen zu informieren" + +#~ msgid "Dynamic IP address pool" +#~ msgstr "Dynamischer IP-Adressen Pool" + +#~ msgid "Specifies a pool of dynamic IP addresses" +#~ msgstr "Legt einen Bereich von dynamischen IP-Adressen fest" + +#~ msgid "IP down script" +#~ msgstr "IP down Skript" + +#, fuzzy +#~ msgid "Script executed after the tun network interface has been taken down" +#~ msgstr "" +#~ "Script, das nach einer Umwandlung von einer autorisierten zu einer " +#~ "unautorisierten Sitzung ausgeführt wird" + +#, fuzzy +#~ msgid "IP up script" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "" +#~ "Script executed after the TUN/TAP network interface has been brought up" +#~ msgstr "Script, dass nach erfolgreicher tun - Verbindung ausgeführt wird" + +#, fuzzy +#~ msgid "Uplink subnet" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Network address of the uplink interface (CIDR notation)" +#~ msgstr "" +#~ "Zur Auflösung der Host-Namen benötigter DNS Server, die an den client " +#~ "übertragen wird" + +#, fuzzy +#~ msgid "Static IP address pool" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "Specifies a pool of static IP addresses" +#~ msgstr "Script, dass nach erfolgreicher tun - Verbindung ausgeführt wird" + +#, fuzzy +#~ msgid "TUN/TAP device" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "The specific device to use for the TUN/TAP interface" +#~ msgstr "" +#~ "Script, das nach einer Umwandlung von einer autorisierten zu einer " +#~ "unautorisierten Sitzung ausgeführt wird" + +#, fuzzy +#~ msgid "TX queue length" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "The TX queue length to set on the TUN/TAP interface" +#~ msgstr "" +#~ "Script, das nach einer Umwandlung von einer autorisierten zu einer " +#~ "unautorisierten Sitzung ausgeführt wird" + +#, fuzzy +#~ msgid "Use TAP device" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Use the TAP interface instead of TUN" +#~ msgstr "Script, dass nach erfolgreicher tun - Verbindung ausgeführt wird" + +#, fuzzy +#~ msgid "DHCP configuration" +#~ msgstr "TUN/TAP Konfiguration" + +#, fuzzy +#~ msgid "Set DHCP options for connecting clients" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "DHCP end number" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Where to stop assigning IP addresses (default 254)" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "DHCP interface" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Ethernet interface to listen to for the downlink interface" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Listen MAC address" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "" +#~ "MAC address to listen to. If not specified the MAC address of the " +#~ "interface will be used" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "DHCP start number" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Where to start assigning IP addresses (default 10)" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Enable IEEE 802.1x" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Enable IEEE 802.1x authentication and listen for EAP requests" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Leasetime" +#~ msgstr "Vorhaltezeit" + +#~ msgid "Use a DHCP lease of seconds (default 600)" +#~ msgstr "Benutze eine DHCP-Vorhaltezeit in Sekunden (voreingestelllt 600)" + +#~ msgid "Allow session update through RADIUS" +#~ msgstr "Erlaube Sitzungsupdates durch RADIUS" + +#, fuzzy +#~ msgid "" +#~ "Allow updating of session parameters with RADIUS attributes sent in " +#~ "Accounting-Response" +#~ msgstr "" +#~ "Erlaubt das Aktuallisieren der Sitzungsparameter mit RADIUS-attributen, " +#~ "die im der Konten-Antwort enthalten sind" + +#~ msgid "Admin password" +#~ msgstr "Administratorkennwort" + +#, fuzzy +#~ msgid "" +#~ "Password to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "" +#~ "Kennwort zur Administratoren-Authentifizierung um die chilli- " +#~ "konfigurationen aufzunehmen und eine Systemsitzung fürs Gerät zu erstellen" + +#, fuzzy +#~ msgid "Admin user" +#~ msgstr "Adminstratorenkennung" + +#, fuzzy +#~ msgid "" +#~ "User-name to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "Benutzername des für Administration berechtigten Benutzers. " + +#, fuzzy +#~ msgid "Do not check disconnection requests" +#~ msgstr "Ignoriere die Verbindungstrennungsanfragen" + +#, fuzzy +#~ msgid "Do not check the source IP address of radius disconnect requests" +#~ msgstr "Prüft nicht die Quell-IP einer RADIUS Verbindungstrennungsanfrage." + +#, fuzzy +#~ msgid "RADIUS disconnect port" +#~ msgstr "Port für die Verbindungstrennung" + +#, fuzzy +#~ msgid "UDP port to listen to for accepting radius disconnect requests" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "NAS IP" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Value to use in RADIUS NAS-IP-Address attribute" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "NAS MAC" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "MAC address value to use in RADIUS Called-Station-ID attribute" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Allow OpenID authentication" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "" +#~ "Allows OpenID authentication by sending ChilliSpot-Config=allow-" +#~ "openidauth in RADIUS Access-Requests" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "RADIUS accounting port" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "" +#~ "The UDP port number to use for radius accounting requests (default 1813)" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "RADIUS authentication port" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "" +#~ "The UDP port number to use for radius authentication requests (default " +#~ "1812)" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Option radiuscalled" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "RADIUS listen address" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Local interface IP address to use for the radius interface" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "RADIUS location ID" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "WISPr Location ID" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "RADIUS location name" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "WISPr Location Name" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "NAS ID" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Network access server identifier" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Option radiusnasip" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "NAS port type" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "" +#~ "Value of NAS-Port-Type attribute. Defaults to 19 (Wireless-IEEE-802.11)" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Send RADIUS VSA" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Send the ChilliSpot-OriginalURL RADIUS VSA in Access-Request" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "RADIUS secret" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Radius shared secret for both servers" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "RADIUS server 1" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "The IP address of radius server 1" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "RADIUS server 2" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "The IP address of radius server 2" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Swap octets" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "" +#~ "Swap the meaning of \"input octets\" and \"output octets\" as it related " +#~ "to RADIUS attribtues" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Allow WPA guests" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "" +#~ "Allows WPA Guest authentication by sending ChilliSpot-Config=allow-wpa-" +#~ "guests in RADIUS Access-Requests" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "UAM configuration" +#~ msgstr "TUN/TAP Konfiguration" + +#, fuzzy +#~ msgid "Unified Configuration Method settings" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Inspect DNS traffic" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "" +#~ "Inspect DNS packets and drop responses with any non- A, CNAME, SOA, or MX " +#~ "records to prevent dns tunnels (experimental)" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Local users file" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "" +#~ "A colon separated file containing usernames and passwords of locally " +#~ "authenticated users" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Human readable location name used in JSON interface" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Do not redirect to UAM server" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "" +#~ "Do not return to UAM server on login success, just redirect to original " +#~ "URL" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Do not do WISPr" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "Do not do any WISPr XML, assume the back-end is doing this instead" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Allowed resources" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "List of resources the client can access without first authenticating" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Allow any DNS server" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "Allow any DNS server for unauthenticated clients" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "Allow any IP address" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "" +#~ "Allow clients to use any IP settings they wish by spoofing ARP " +#~ "(experimental)" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Allowed domains" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "" +#~ "Defines a list of domain names to automatically add to the walled garden" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "UAM homepage" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "URL of homepage to redirect unauthenticated users to" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "UAM static content port" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "TCP port to bind to for only serving embedded content" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "UAM listening address" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "IP address to listen to for authentication of clients" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "UAM logout IP" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "" +#~ "Use this IP address to instantly logout a client accessing it (defaults " +#~ "to 1.1.1.1)" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "UAM listening port" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "TCP port to bind to for authenticating clients (default 3990)" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "UAM secret" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "Shared secret between uamserver and chilli" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "UAM server" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "URL of web server to use for authenticating clients" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "UAM user interface" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "" +#~ "An init.d style program to handle local content on the uamuiport web " +#~ "server" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "WISPr login url" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Specific URL to be given in WISPr XML LoginURL" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "CGI program" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "" +#~ "Executable to run as a CGI type program (like haserl) for URLs with " +#~ "extension .chi" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Web content directory" +#~ msgstr "Domain Name" + +#, fuzzy +#~ msgid "Directory where embedded local web content is placed" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "MAC configuration" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Configure MAC authentication" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Allowed MAC addresses" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "List of MAC addresses for which MAC authentication will be performed" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Authenticate locally allowed MACs" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Authenticate allowed MAC addresses without the use of RADIUS" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Enable MAC authentification" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Try to authenticate all users based on their mac address alone" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Password" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Password used when performing MAC authentication" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "Suffix" +#~ msgstr "Netzwerk/TUN Konfiguration" + +#, fuzzy +#~ msgid "coovachilli_macauth_macsuffix_desc" +#~ msgstr "Netzwerk/TUN Konfiguration" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/el/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/el/coovachilli.po new file mode 100644 index 0000000..90d693d --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/el/coovachilli.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-03-19 15:27+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "" + +msgid "RADIUS configuration" +msgstr "" + +msgid "UAM and MAC Authentication" +msgstr "" + +#~ msgid "General configuration" +#~ msgstr "Γενική παραμετροποίηση" + +#~ msgid "DHCP configuration" +#~ msgstr "Παραμετροποίηση DHCP" + +#~ msgid "DHCP interface" +#~ msgstr "Διεπαφή DHCP" + +#~ msgid "Enable IEEE 802.1x" +#~ msgstr "Ενεργοποίηση IEEE 802.1x" + +#~ msgid "Admin password" +#~ msgstr "Κωδικός πρόσβασης διαχειριστή" + +#~ msgid "Location name" +#~ msgstr "Όνομα τοποθεσίας" + +#~ msgid "CGI program" +#~ msgstr "Πρόγραμμα CGI" + +#~ msgid "Password" +#~ msgstr "Κωδικός πρόσβασης" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/en/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/en/coovachilli.po new file mode 100644 index 0000000..6d7c747 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/en/coovachilli.po @@ -0,0 +1,639 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-03-18 05:30+0200\n" +"Last-Translator: Anonymous Pootle User\n" +"Language-Team: LANGUAGE \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "" + +msgid "RADIUS configuration" +msgstr "" + +msgid "UAM and MAC Authentication" +msgstr "" + +#, fuzzy +#~ msgid "General configuration" +#~ msgstr "General configuration" + +#~ msgid "General CoovaChilli settings" +#~ msgstr "General CoovaChilli settings" + +#~ msgid "Command socket" +#~ msgstr "Command socket" + +#~ msgid "UNIX socket used for communication with chilli_query" +#~ msgstr "UNIX socket used for communication with chilli_query" + +#~ msgid "Config refresh interval" +#~ msgstr "Config refresh interval" + +#~ msgid "" +#~ "Re-read configuration file and do DNS lookups every interval seconds. " +#~ "This has the same effect as sending the HUP signal. If interval is 0 " +#~ "(zero) this feature is disabled. " +#~ msgstr "" +#~ "Re-read configuration file and do DNS lookups every interval seconds. " +#~ "This has the same effect as sending the HUP signal. If interval is 0 " +#~ "(zero) this feature is disabled. " + +#~ msgid "Pid file" +#~ msgstr "Pid file" + +#~ msgid "Filename to put the process id" +#~ msgstr "Filename to put the process id" + +#~ msgid "State directory" +#~ msgstr "State directory" + +#~ msgid "Directory of non-volatile data" +#~ msgstr "Directory of non-volatile data" + +#~ msgid "TUN/TAP configuration" +#~ msgstr "TUN/TAP configuration" + +#~ msgid "Network/Tun configuration" +#~ msgstr "Network/Tun configuration" + +#~ msgid "Network down script" +#~ msgstr "Network down script" + +#~ msgid "" +#~ "Script executed after a session has moved from authorized state to " +#~ "unauthorized" +#~ msgstr "" +#~ "Script executed after a session has moved from authorized state to " +#~ "unauthorized" + +#~ msgid "Network up script" +#~ msgstr "Network up script" + +#~ msgid "Script executed after the tun network interface has been brought up" +#~ msgstr "Script executed after the tun network interface has been brought up" + +#~ msgid "Primary DNS Server" +#~ msgstr "Primary DNS Server" + +#~ msgid "Secondary DNS Server" +#~ msgstr "Secondary DNS Server" + +#~ msgid "Domain name" +#~ msgstr "Domain name" + +#~ msgid "" +#~ "Is used to inform the client about the domain name to use for DNS lookups" +#~ msgstr "" +#~ "Is used to inform the client about the domain name to use for DNS lookups" + +#~ msgid "Dynamic IP address pool" +#~ msgstr "Dynamic IP address pool" + +#~ msgid "Specifies a pool of dynamic IP addresses" +#~ msgstr "Specifies a pool of dynamic IP addresses" + +#~ msgid "IP down script" +#~ msgstr "IP down script" + +#~ msgid "Script executed after the tun network interface has been taken down" +#~ msgstr "Script executed after the tun network interface has been taken down" + +#~ msgid "IP up script" +#~ msgstr "IP up script" + +#~ msgid "" +#~ "Script executed after the TUN/TAP network interface has been brought up" +#~ msgstr "" +#~ "Script executed after the TUN/TAP network interface has been brought up" + +#~ msgid "Uplink subnet" +#~ msgstr "Uplink subnet" + +#~ msgid "Network address of the uplink interface (CIDR notation)" +#~ msgstr "Network address of the uplink interface (CIDR notation)" + +#~ msgid "Static IP address pool" +#~ msgstr "Static IP address pool" + +#~ msgid "Specifies a pool of static IP addresses" +#~ msgstr "Specifies a pool of static IP addresses" + +#~ msgid "TUN/TAP device" +#~ msgstr "TUN/TAP device" + +#~ msgid "The specific device to use for the TUN/TAP interface" +#~ msgstr "The specific device to use for the TUN/TAP interface" + +#~ msgid "TX queue length" +#~ msgstr "TX queue length" + +#~ msgid "The TX queue length to set on the TUN/TAP interface" +#~ msgstr "The TX queue length to set on the TUN/TAP interface" + +#~ msgid "Use TAP device" +#~ msgstr "Use TAP device" + +#~ msgid "Use the TAP interface instead of TUN" +#~ msgstr "Use the TAP interface instead of TUN" + +#~ msgid "DHCP configuration" +#~ msgstr "DHCP configuration" + +#~ msgid "Set DHCP options for connecting clients" +#~ msgstr "Set DHCP options for connecting clients" + +#~ msgid "DHCP end number" +#~ msgstr "DHCP end number" + +#~ msgid "Where to stop assigning IP addresses (default 254)" +#~ msgstr "Where to stop assigning IP addresses (default 254)" + +#~ msgid "DHCP interface" +#~ msgstr "DHCP interface" + +#~ msgid "Ethernet interface to listen to for the downlink interface" +#~ msgstr "Ethernet interface to listen to for the downlink interface" + +#~ msgid "Listen MAC address" +#~ msgstr "Listen MAC address" + +#~ msgid "" +#~ "MAC address to listen to. If not specified the MAC address of the " +#~ "interface will be used" +#~ msgstr "" +#~ "MAC address to listen to. If not specified the MAC address of the " +#~ "interface will be used" + +#~ msgid "DHCP start number" +#~ msgstr "DHCP start number" + +#~ msgid "Where to start assigning IP addresses (default 10)" +#~ msgstr "Where to start assigning IP addresses (default 10)" + +#~ msgid "Enable IEEE 802.1x" +#~ msgstr "Enable IEEE 802.1x" + +#~ msgid "Enable IEEE 802.1x authentication and listen for EAP requests" +#~ msgstr "Enable IEEE 802.1x authentication and listen for EAP requests" + +#~ msgid "Leasetime" +#~ msgstr "Leasetime" + +#~ msgid "Use a DHCP lease of seconds (default 600)" +#~ msgstr "Use a DHCP lease of seconds (default 600)" + +#~ msgid "Allow session update through RADIUS" +#~ msgstr "Allow session update through RADIUS" + +#~ msgid "" +#~ "Allow updating of session parameters with RADIUS attributes sent in " +#~ "Accounting-Response" +#~ msgstr "" +#~ "Allow updating of session parameters with RADIUS attributes sent in " +#~ "Accounting-Response" + +#~ msgid "Admin password" +#~ msgstr "Admin password" + +#~ msgid "" +#~ "Password to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "" +#~ "Password to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" + +#~ msgid "Admin user" +#~ msgstr "Admin user" + +#~ msgid "" +#~ "User-name to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "" +#~ "User-name to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" + +#~ msgid "Do not check disconnection requests" +#~ msgstr "Do not check disconnection requests" + +#~ msgid "Do not check the source IP address of radius disconnect requests" +#~ msgstr "Do not check the source IP address of radius disconnect requests" + +#~ msgid "RADIUS disconnect port" +#~ msgstr "RADIUS disconnect port" + +#~ msgid "UDP port to listen to for accepting radius disconnect requests" +#~ msgstr "UDP port to listen to for accepting radius disconnect requests" + +#~ msgid "NAS IP" +#~ msgstr "NAS IP" + +#~ msgid "Value to use in RADIUS NAS-IP-Address attribute" +#~ msgstr "Value to use in RADIUS NAS-IP-Address attribute" + +#~ msgid "NAS MAC" +#~ msgstr "NAS MAC" + +#~ msgid "MAC address value to use in RADIUS Called-Station-ID attribute" +#~ msgstr "MAC address value to use in RADIUS Called-Station-ID attribute" + +#~ msgid "Allow OpenID authentication" +#~ msgstr "Allow OpenID authentication" + +#~ msgid "" +#~ "Allows OpenID authentication by sending ChilliSpot-Config=allow-" +#~ "openidauth in RADIUS Access-Requests" +#~ msgstr "" +#~ "Allows OpenID authentication by sending ChilliSpot-Config=allow-" +#~ "openidauth in RADIUS Access-Requests" + +#~ msgid "RADIUS accounting port" +#~ msgstr "RADIUS accounting port" + +#~ msgid "" +#~ "The UDP port number to use for radius accounting requests (default 1813)" +#~ msgstr "" +#~ "The UDP port number to use for radius accounting requests (default 1813)" + +#~ msgid "RADIUS authentication port" +#~ msgstr "RADIUS authentication port" + +#~ msgid "" +#~ "The UDP port number to use for radius authentication requests (default " +#~ "1812)" +#~ msgstr "" +#~ "The UDP port number to use for radius authentication requests (default " +#~ "1812)" + +#~ msgid "Option radiuscalled" +#~ msgstr "Option radiuscalled" + +#~ msgid "RADIUS listen address" +#~ msgstr "RADIUS listen address" + +#~ msgid "Local interface IP address to use for the radius interface" +#~ msgstr "Local interface IP address to use for the radius interface" + +#~ msgid "RADIUS location ID" +#~ msgstr "RADIUS location ID" + +#~ msgid "WISPr Location ID" +#~ msgstr "WISPr Location ID" + +#~ msgid "RADIUS location name" +#~ msgstr "RADIUS location name" + +#~ msgid "WISPr Location Name" +#~ msgstr "WISPr Location Name" + +#~ msgid "NAS ID" +#~ msgstr "NAS ID" + +#~ msgid "Network access server identifier" +#~ msgstr "Network access server identifier" + +#~ msgid "Option radiusnasip" +#~ msgstr "Option radiusnasip" + +#~ msgid "NAS port type" +#~ msgstr "NAS port type" + +#~ msgid "" +#~ "Value of NAS-Port-Type attribute. Defaults to 19 (Wireless-IEEE-802.11)" +#~ msgstr "" +#~ "Value of NAS-Port-Type attribute. Defaults to 19 (Wireless-IEEE-802.11)" + +#~ msgid "Send RADIUS VSA" +#~ msgstr "Send RADIUS VSA" + +#~ msgid "Send the ChilliSpot-OriginalURL RADIUS VSA in Access-Request" +#~ msgstr "Send the ChilliSpot-OriginalURL RADIUS VSA in Access-Request" + +#~ msgid "RADIUS secret" +#~ msgstr "RADIUS secret" + +#~ msgid "Radius shared secret for both servers" +#~ msgstr "Radius shared secret for both servers" + +#~ msgid "RADIUS server 1" +#~ msgstr "RADIUS server 1" + +#~ msgid "The IP address of radius server 1" +#~ msgstr "The IP address of radius server 1" + +#~ msgid "RADIUS server 2" +#~ msgstr "RADIUS server 2" + +#~ msgid "The IP address of radius server 2" +#~ msgstr "The IP address of radius server 2" + +#~ msgid "Swap octets" +#~ msgstr "Swap octets" + +#~ msgid "" +#~ "Swap the meaning of \"input octets\" and \"output octets\" as it related " +#~ "to RADIUS attribtues" +#~ msgstr "" +#~ "Swap the meaning of \"input octets\" and \"output octets\" as it related " +#~ "to RADIUS attribtues" + +#~ msgid "Allow WPA guests" +#~ msgstr "Allow WPA guests" + +#~ msgid "" +#~ "Allows WPA Guest authentication by sending ChilliSpot-Config=allow-wpa-" +#~ "guests in RADIUS Access-Requests" +#~ msgstr "" +#~ "Allows WPA Guest authentication by sending ChilliSpot-Config=allow-wpa-" +#~ "guests in RADIUS Access-Requests" + +#~ msgid "Proxy client" +#~ msgstr "Proxy client" + +#~ msgid "" +#~ "IP address from which radius requests are accepted. If omitted the server " +#~ "will not accept radius requests" +#~ msgstr "" +#~ "IP address from which radius requests are accepted. If omitted the server " +#~ "will not accept radius requests" + +#~ msgid "Proxy listen address" +#~ msgstr "Proxy listen address" + +#~ msgid "Local interface IP address to use for accepting radius requests" +#~ msgstr "Local interface IP address to use for accepting radius requests" + +#~ msgid "Proxy port" +#~ msgstr "Proxy port" + +#~ msgid "UDP Port to listen to for accepting radius requests" +#~ msgstr "UDP Port to listen to for accepting radius requests" + +#~ msgid "Proxy secret" +#~ msgstr "Proxy secret" + +#~ msgid "Radius shared secret for clients" +#~ msgstr "Radius shared secret for clients" + +#~ msgid "UAM configuration" +#~ msgstr "UAM configuration" + +#~ msgid "Unified Configuration Method settings" +#~ msgstr "Unified Configuration Method settings" + +#~ msgid "Use Chilli XML" +#~ msgstr "Use Chilli XML" + +#~ msgid "Return the so-called Chilli XML along with WISPr XML" +#~ msgstr "Return the so-called Chilli XML along with WISPr XML" + +#~ msgid "Default idle timeout" +#~ msgstr "Default idle timeout" + +#~ msgid "Default idle timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "Default idle timeout unless otherwise set by RADIUS (defaults to 0)" + +#~ msgid "Default interim interval" +#~ msgstr "Default interim interval" + +#~ msgid "" +#~ "Default interim-interval for RADIUS accounting unless otherwise set by " +#~ "RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Default interim-interval for RADIUS accounting unless otherwise set by " +#~ "RADIUS (defaults to 0)" + +#~ msgid "Default session timeout" +#~ msgstr "Default session timeout" + +#~ msgid "" +#~ "Default session timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Default session timeout unless otherwise set by RADIUS (defaults to 0)" + +#~ msgid "Inspect DNS traffic" +#~ msgstr "Inspect DNS traffic" + +#~ msgid "" +#~ "Inspect DNS packets and drop responses with any non- A, CNAME, SOA, or MX " +#~ "records to prevent dns tunnels (experimental)" +#~ msgstr "" +#~ "Inspect DNS packets and drop responses with any non- A, CNAME, SOA, or MX " +#~ "records to prevent dns tunnels (experimental)" + +#~ msgid "Local users file" +#~ msgstr "Local users file" + +#~ msgid "" +#~ "A colon separated file containing usernames and passwords of locally " +#~ "authenticated users" +#~ msgstr "" +#~ "A colon separated file containing usernames and passwords of locally " +#~ "authenticated users" + +#~ msgid "Location name" +#~ msgstr "Location name" + +#~ msgid "Human readable location name used in JSON interface" +#~ msgstr "Human readable location name used in JSON interface" + +#~ msgid "Do not redirect to UAM server" +#~ msgstr "Do not redirect to UAM server" + +#~ msgid "" +#~ "Do not return to UAM server on login success, just redirect to original " +#~ "URL" +#~ msgstr "" +#~ "Do not return to UAM server on login success, just redirect to original " +#~ "URL" + +#~ msgid "Do not do WISPr" +#~ msgstr "Do not do WISPr" + +#~ msgid "Do not do any WISPr XML, assume the back-end is doing this instead" +#~ msgstr "Do not do any WISPr XML, assume the back-end is doing this instead" + +#~ msgid "Post auth proxy" +#~ msgstr "Post auth proxy" + +#~ msgid "" +#~ "Used with postauthproxyport to define a post authentication HTTP proxy " +#~ "server" +#~ msgstr "" +#~ "Used with postauthproxyport to define a post authentication HTTP proxy " +#~ "server" + +#~ msgid "Post auth proxy port" +#~ msgstr "Post auth proxy port" + +#~ msgid "" +#~ "Used with postauthproxy to define a post authentication HTTP proxy server" +#~ msgstr "" +#~ "Used with postauthproxy to define a post authentication HTTP proxy server" + +#~ msgid "Allowed resources" +#~ msgstr "Allowed resources" + +#~ msgid "List of resources the client can access without first authenticating" +#~ msgstr "" +#~ "List of resources the client can access without first authenticating" + +#~ msgid "Allow any DNS server" +#~ msgstr "Allow any DNS server" + +#~ msgid "Allow any DNS server for unauthenticated clients" +#~ msgstr "Allow any DNS server for unauthenticated clients" + +#~ msgid "Allow any IP address" +#~ msgstr "Allow any IP address" + +#~ msgid "" +#~ "Allow clients to use any IP settings they wish by spoofing ARP " +#~ "(experimental)" +#~ msgstr "" +#~ "Allow clients to use any IP settings they wish by spoofing ARP " +#~ "(experimental)" + +#~ msgid "Allowed domains" +#~ msgstr "Allowed domains" + +#~ msgid "" +#~ "Defines a list of domain names to automatically add to the walled garden" +#~ msgstr "" +#~ "Defines a list of domain names to automatically add to the walled garden" + +#~ msgid "UAM homepage" +#~ msgstr "UAM homepage" + +#~ msgid "URL of homepage to redirect unauthenticated users to" +#~ msgstr "URL of homepage to redirect unauthenticated users to" + +#~ msgid "UAM static content port" +#~ msgstr "UAM static content port" + +#~ msgid "TCP port to bind to for only serving embedded content" +#~ msgstr "TCP port to bind to for only serving embedded content" + +#~ msgid "UAM listening address" +#~ msgstr "UAM listening address" + +#~ msgid "IP address to listen to for authentication of clients" +#~ msgstr "IP address to listen to for authentication of clients" + +#~ msgid "UAM logout IP" +#~ msgstr "UAM logout IP" + +#~ msgid "" +#~ "Use this IP address to instantly logout a client accessing it (defaults " +#~ "to 1.1.1.1)" +#~ msgstr "" +#~ "Use this IP address to instantly logout a client accessing it (defaults " +#~ "to 1.1.1.1)" + +#~ msgid "UAM listening port" +#~ msgstr "UAM listening port" + +#~ msgid "TCP port to bind to for authenticating clients (default 3990)" +#~ msgstr "TCP port to bind to for authenticating clients (default 3990)" + +#~ msgid "UAM secret" +#~ msgstr "UAM secret" + +#~ msgid "Shared secret between uamserver and chilli" +#~ msgstr "Shared secret between uamserver and chilli" + +#~ msgid "UAM server" +#~ msgstr "UAM server" + +#~ msgid "URL of web server to use for authenticating clients" +#~ msgstr "URL of web server to use for authenticating clients" + +#~ msgid "UAM user interface" +#~ msgstr "UAM user interface" + +#~ msgid "" +#~ "An init.d style program to handle local content on the uamuiport web " +#~ "server" +#~ msgstr "" +#~ "An init.d style program to handle local content on the uamuiport web " +#~ "server" + +#~ msgid "Use status file" +#~ msgstr "Use status file" + +#~ msgid "" +#~ "Write the status of clients in a non-volatile state file (experimental)" +#~ msgstr "" +#~ "Write the status of clients in a non-volatile state file (experimental)" + +#~ msgid "WISPr login url" +#~ msgstr "WISPr login url" + +#~ msgid "Specific URL to be given in WISPr XML LoginURL" +#~ msgstr "Specific URL to be given in WISPr XML LoginURL" + +#~ msgid "CGI program" +#~ msgstr "CGI program" + +#~ msgid "" +#~ "Executable to run as a CGI type program (like haserl) for URLs with " +#~ "extension .chi" +#~ msgstr "" +#~ "Executable to run as a CGI type program (like haserl) for URLs with " +#~ "extension .chi" + +#~ msgid "Web content directory" +#~ msgstr "Web content directory" + +#~ msgid "Directory where embedded local web content is placed" +#~ msgstr "Directory where embedded local web content is placed" + +#~ msgid "MAC configuration" +#~ msgstr "MAC configuration" + +#~ msgid "Configure MAC authentication" +#~ msgstr "Configure MAC authentication" + +#~ msgid "Allowed MAC addresses" +#~ msgstr "Allowed MAC addresses" + +#~ msgid "List of MAC addresses for which MAC authentication will be performed" +#~ msgstr "" +#~ "List of MAC addresses for which MAC authentication will be performed" + +#~ msgid "Authenticate locally allowed MACs" +#~ msgstr "Authenticate locally allowed MACs" + +#~ msgid "Authenticate allowed MAC addresses without the use of RADIUS" +#~ msgstr "Authenticate allowed MAC addresses without the use of RADIUS" + +#~ msgid "Enable MAC authentification" +#~ msgstr "Enable MAC authentification" + +#~ msgid "Try to authenticate all users based on their mac address alone" +#~ msgstr "Try to authenticate all users based on their mac address alone" + +#~ msgid "Password" +#~ msgstr "Password" + +#~ msgid "Password used when performing MAC authentication" +#~ msgstr "Password used when performing MAC authentication" + +#~ msgid "Suffix" +#~ msgstr "Suffix" + +#~ msgid "coovachilli_macauth_macsuffix_desc" +#~ msgstr "" +#~ "Suffix to add to the MAC address in order to form the User-Name, which is " +#~ "sent to the radius server" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/es/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/es/coovachilli.po new file mode 100644 index 0000000..886da59 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/es/coovachilli.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-07-28 23:18+0200\n" +"Last-Translator: Daniel \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Configuración de Red" + +msgid "RADIUS configuration" +msgstr "Configuración RADIUS" + +msgid "UAM and MAC Authentication" +msgstr "Autenticación UAM y MAC" + +#~ msgid "General configuration" +#~ msgstr "Configuración General" + +#~ msgid "General CoovaChilli settings" +#~ msgstr "Configuración General de CoovaChilli" + +#~ msgid "Command socket" +#~ msgstr "Socket de Comando" + +#~ msgid "UNIX socket used for communication with chilli_query" +#~ msgstr "SocketUNIX utilizado para comunicación con chilli_query" + +#~ msgid "Config refresh interval" +#~ msgstr "Configuración del intervalo de refresco " + +#~ msgid "" +#~ "Re-read configuration file and do DNS lookups every interval seconds. " +#~ "This has the same effect as sending the HUP signal. If interval is 0 " +#~ "(zero) this feature is disabled. " +#~ msgstr "" +#~ "Vuelve a leer el fichero de configuracion y las consultas DNS cada " +#~ "intervalo de segundos. Eso tiene el mismo efecto que enviar la señal HUP. " +#~ "Si el intervalo es 0 (cero) se inhabilita la función." + +#~ msgid "Pid file" +#~ msgstr "Fichero Pid" + +#~ msgid "Filename to put the process id" +#~ msgstr "Nombre de archivo donde poner el ID del proceso" + +#~ msgid "State directory" +#~ msgstr "Directorio de estado" + +#~ msgid "Directory of non-volatile data" +#~ msgstr "Directorio de datos no volátiles" + +#~ msgid "TUN/TAP configuration" +#~ msgstr "Configuración TUN / TAP" + +#~ msgid "Network/Tun configuration" +#~ msgstr "Configuración de Red / Tun" + +#~ msgid "" +#~ "Script executed after a session has moved from authorized state to " +#~ "unauthorized" +#~ msgstr "" +#~ "Script ejecutado cuando el estado de una sesión es alterado de autorizado " +#~ "a no autorizado" + +#~ msgid "Network up script" +#~ msgstr "Script de subida de red" + +#~ msgid "Script executed after the tun network interface has been brought up" +#~ msgstr "" +#~ "Script ejecutado después de que la interfaz de red tun haya sido " +#~ "levantado." + +#~ msgid "Primary DNS Server" +#~ msgstr "Servidor DNS primario" + +#~ msgid "Secondary DNS Server" +#~ msgstr "Servidor DNS secundario" + +#~ msgid "Domain name" +#~ msgstr "Nombre de dominio" + +#~ msgid "" +#~ "Is used to inform the client about the domain name to use for DNS lookups" +#~ msgstr "" +#~ "Se utiliza para informar al cliente sobre el nombre de dominio a utilizar " +#~ "para las consultas DNS" + +#~ msgid "Dynamic IP address pool" +#~ msgstr "Conjunto de direcciones IP Dinámicas" + +#~ msgid "Specifies a pool of dynamic IP addresses" +#~ msgstr "Especifica un conjunto de direcciones IP Dinámicas" + +#~ msgid "IP down script" +#~ msgstr "Scripts de bajada IP" + +#~ msgid "Script executed after the tun network interface has been taken down" +#~ msgstr "Script ejecutado después de que la red de interfaz tun sea bajado" + +#~ msgid "IP up script" +#~ msgstr "Script de subida IP" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/fr/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/fr/coovachilli.po new file mode 100644 index 0000000..b95bb44 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/fr/coovachilli.po @@ -0,0 +1,26 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-11-06 13:16+0200\n" +"Last-Translator: hogsim \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Configuration Réseau" + +msgid "RADIUS configuration" +msgstr "Configuration RADIUS" + +msgid "UAM and MAC Authentication" +msgstr "Authentification UAM et MAC" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/he/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/he/coovachilli.po new file mode 100644 index 0000000..04efb54 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/he/coovachilli.po @@ -0,0 +1,26 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-10 03:37+0200\n" +"Last-Translator: Snoof \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "" + +msgid "Network Configuration" +msgstr "תצורת רשת" + +msgid "RADIUS configuration" +msgstr "" + +msgid "UAM and MAC Authentication" +msgstr "אימות UAM ן- MAC" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/hu/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/hu/coovachilli.po new file mode 100644 index 0000000..5ac8278 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/hu/coovachilli.po @@ -0,0 +1,26 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-07-05 16:44+0200\n" +"Last-Translator: Gyula \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Hálózati konfiguráció" + +msgid "RADIUS configuration" +msgstr "RADIUS konfiguráció" + +msgid "UAM and MAC Authentication" +msgstr "UAM és MAC azonosítás" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/it/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/it/coovachilli.po new file mode 100644 index 0000000..dbf5b96 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/it/coovachilli.po @@ -0,0 +1,75 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2013-02-03 13:43+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Configurazione della Rete" + +msgid "RADIUS configuration" +msgstr "Configurazione RAGGIO" + +msgid "UAM and MAC Authentication" +msgstr "Autenticazione UAM e MAC" + +#~ msgid "General configuration" +#~ msgstr "Configurazione generale" + +#~ msgid "General CoovaChilli settings" +#~ msgstr "Impostazioni generali di CoovaChilli" + +#~ msgid "Command socket" +#~ msgstr "Socket di comando" + +#~ msgid "UNIX socket used for communication with chilli_query" +#~ msgstr "Socket UNIX usato per la comunicazione con chilli_query" + +#~ msgid "Config refresh interval" +#~ msgstr "Intervallo di aggiornamento configurazione" + +#~ msgid "" +#~ "Re-read configuration file and do DNS lookups every interval seconds. " +#~ "This has the same effect as sending the HUP signal. If interval is 0 " +#~ "(zero) this feature is disabled. " +#~ msgstr "" +#~ "Rilegge il file di configurazione ed esegue una ricerca DNS ogni " +#~ "intervallo in secondi. Questo ha lo stesso risultato dell'invio del " +#~ "segnale HUP. Se l'intervallo è 0 (zero) questa funzionalità è " +#~ "disabilitata." + +#~ msgid "Pid file" +#~ msgstr "File Pid" + +#~ msgid "TUN/TAP configuration" +#~ msgstr "Configurazione TUN/TAP" + +#~ msgid "Network/Tun configuration" +#~ msgstr "Configurazione Rete/TUN" + +#~ msgid "Primary DNS Server" +#~ msgstr "Server DNS Primario" + +#~ msgid "Secondary DNS Server" +#~ msgstr "Server DNS Secondario" + +#~ msgid "Domain name" +#~ msgstr "Nome di dominio" + +#~ msgid "Specifies a pool of dynamic IP addresses" +#~ msgstr "Specifica un pool di indirizzi IP dinamici" + +#~ msgid "Network address of the uplink interface (CIDR notation)" +#~ msgstr "Indirizzo di rete dell'interfaccia di uplink (CIDR notazione)" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/ja/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/ja/coovachilli.po new file mode 100644 index 0000000..9415712 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/ja/coovachilli.po @@ -0,0 +1,25 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "CoovaChilli" +msgstr "" + +msgid "Network Configuration" +msgstr "" + +msgid "RADIUS configuration" +msgstr "" + +msgid "UAM and MAC Authentication" +msgstr "" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/ms/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/ms/coovachilli.po new file mode 100644 index 0000000..d910ef2 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/ms/coovachilli.po @@ -0,0 +1,22 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "CoovaChilli" +msgstr "" + +msgid "Network Configuration" +msgstr "" + +msgid "RADIUS configuration" +msgstr "" + +msgid "UAM and MAC Authentication" +msgstr "" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/no/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/no/coovachilli.po new file mode 100644 index 0000000..f37afdd --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/no/coovachilli.po @@ -0,0 +1,26 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-04-05 08:41+0200\n" +"Last-Translator: protx \n" +"Language-Team: none\n" +"Language: no\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Nettverk Konfigurasjon" + +msgid "RADIUS configuration" +msgstr "RADIUS Konfigurasjon" + +msgid "UAM and MAC Authentication" +msgstr "UAM og MAC Autentisering" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/pl/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/pl/coovachilli.po new file mode 100644 index 0000000..7dc2ef8 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/pl/coovachilli.po @@ -0,0 +1,27 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-25 06:22+0200\n" +"Last-Translator: obsy \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Konfiguracja sieci" + +msgid "RADIUS configuration" +msgstr "Konfiguracja RADIUS`a" + +msgid "UAM and MAC Authentication" +msgstr "Uwierzytelnianie UAM oraz MAC" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/pt-br/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/pt-br/coovachilli.po new file mode 100644 index 0000000..46ed358 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/pt-br/coovachilli.po @@ -0,0 +1,657 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2011-10-18 20:37+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Configuração de rede" + +msgid "RADIUS configuration" +msgstr "Configuração de RADIUS" + +msgid "UAM and MAC Authentication" +msgstr "Autenticação UAM e MAC" + +#~ msgid "General configuration" +#~ msgstr "Configuração Geral" + +#~ msgid "General CoovaChilli settings" +#~ msgstr "Definições gerais do CoovaChilli" + +#~ msgid "Command socket" +#~ msgstr "Soquete de comando" + +#~ msgid "UNIX socket used for communication with chilli_query" +#~ msgstr "Soquete UNIX para comunicação com chilli_query" + +#~ msgid "Config refresh interval" +#~ msgstr "Intervalo de atualização da configuração" + +#~ msgid "" +#~ "Re-read configuration file and do DNS lookups every interval seconds. " +#~ "This has the same effect as sending the HUP signal. If interval is 0 " +#~ "(zero) this feature is disabled. " +#~ msgstr "" +#~ "Reler o arquivo de configuração e faça a busca DNS a cada intervalo de " +#~ "segundos. Isto tem o mesmo efeito que o envio do sinal HUP. Se o " +#~ "intervalo for 0, (zero) esta funcionalidade será desativada." + +#~ msgid "Pid file" +#~ msgstr "Arquivo de PID" + +#~ msgid "Filename to put the process id" +#~ msgstr "Nome do arquivo onde será armazenado o PID" + +#~ msgid "State directory" +#~ msgstr "Diretório de estado" + +#~ msgid "Directory of non-volatile data" +#~ msgstr "Diretório para dados não-voláteis" + +#~ msgid "TUN/TAP configuration" +#~ msgstr "Configuração TUN/TAP" + +#~ msgid "Network/Tun configuration" +#~ msgstr "Configuração de Rede/Tun" + +#~ msgid "Network down script" +#~ msgstr "Script de descida de rede" + +#~ msgid "" +#~ "Script executed after a session has moved from authorized state to " +#~ "unauthorized" +#~ msgstr "" +#~ "Script executado após o estado de uma sessão ser alterado de autorizado " +#~ "para não-autorizado" + +#~ msgid "Network up script" +#~ msgstr "Script de subida da rede" + +#~ msgid "Script executed after the tun network interface has been brought up" +#~ msgstr "Script executado após a interface tun de rede ter sido levantada" + +#~ msgid "Primary DNS Server" +#~ msgstr "Servidor DNS primário" + +#~ msgid "Secondary DNS Server" +#~ msgstr "Servidor DNS secundário" + +#~ msgid "Domain name" +#~ msgstr "Domínio" + +#~ msgid "" +#~ "Is used to inform the client about the domain name to use for DNS lookups" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o domínio a ser utilizado para " +#~ "consultas DNS" + +#~ msgid "Dynamic IP address pool" +#~ msgstr "Conjunto de endereços IP dinâmicos" + +#~ msgid "Specifies a pool of dynamic IP addresses" +#~ msgstr "Especifica um conjunto de endereços IP dinâmicos" + +#~ msgid "IP down script" +#~ msgstr "Script de descida da rede IP" + +#~ msgid "Script executed after the tun network interface has been taken down" +#~ msgstr "Script executado após a rede da interface tun seja baixada" + +#~ msgid "IP up script" +#~ msgstr "Script de subida da rede IP" + +#~ msgid "" +#~ "Script executed after the TUN/TAP network interface has been brought up" +#~ msgstr "Script executado após a rede da interface TUN/TAP seja levantadas" + +#~ msgid "Uplink subnet" +#~ msgstr "Subrede do enlace superior (uplink)" + +#~ msgid "Network address of the uplink interface (CIDR notation)" +#~ msgstr "Endereço de rede da interface do enlace superior (notação CIDR)" + +#~ msgid "Static IP address pool" +#~ msgstr "Conjunto de endereços IP estáticos" + +#~ msgid "Specifies a pool of static IP addresses" +#~ msgstr "Especifica um conjunto de endereços IP estáticos" + +#~ msgid "TUN/TAP device" +#~ msgstr "Dispositivo TUN/TAP" + +#~ msgid "The specific device to use for the TUN/TAP interface" +#~ msgstr "O dispositivo especificado para ser usado pela interface TUN/TAP" + +#~ msgid "TX queue length" +#~ msgstr "Tamanho da fila de envio (TX)" + +#~ msgid "The TX queue length to set on the TUN/TAP interface" +#~ msgstr "O tamanho da fila de envio (TX) para ser usado na interface TUN/TAP" + +#~ msgid "Use TAP device" +#~ msgstr "Use dispositivo TAP" + +#~ msgid "Use the TAP interface instead of TUN" +#~ msgstr "Use o dispositivo TAP ao invés de TUN" + +#~ msgid "DHCP configuration" +#~ msgstr "Configuração do DHCP" + +#~ msgid "Set DHCP options for connecting clients" +#~ msgstr "Ajusta as opções do DHCP para clientes a se conectarem" + +#~ msgid "DHCP end number" +#~ msgstr "Número final do DHCP" + +#~ msgid "Where to stop assigning IP addresses (default 254)" +#~ msgstr "Onde terminar a atribuição de endereços IP (padrão 254)" + +#~ msgid "DHCP interface" +#~ msgstr "Interface DHCP" + +#~ msgid "Ethernet interface to listen to for the downlink interface" +#~ msgstr "Interface Ethernet para escutar por conexões dos clientes" + +#~ msgid "Listen MAC address" +#~ msgstr "Endereço MAC de escuta" + +#~ msgid "" +#~ "MAC address to listen to. If not specified the MAC address of the " +#~ "interface will be used" +#~ msgstr "" +#~ "Endereço MAC de escuta. Se não especificado, o endereço MAC da interface " +#~ "será usado" + +#~ msgid "DHCP start number" +#~ msgstr "Número inicial do DHCP" + +#~ msgid "Where to start assigning IP addresses (default 10)" +#~ msgstr "A partir de onde iniciará a atribuição de endereços IP (padrão 10)" + +#~ msgid "Enable IEEE 802.1x" +#~ msgstr "Habilite IEEE 802.1x" + +#~ msgid "Enable IEEE 802.1x authentication and listen for EAP requests" +#~ msgstr "Habilite autenticação IEEE 802.1x e escute por requisições EAP" + +#~ msgid "Leasetime" +#~ msgstr "Tempo de atribuição" + +#~ msgid "Use a DHCP lease of seconds (default 600)" +#~ msgstr "Use o tempo de atribuição do DHCP, em segundos (padrão 600)" + +#~ msgid "Allow session update through RADIUS" +#~ msgstr "Permite a atualização da sessão através do RADIUS" + +#~ msgid "" +#~ "Allow updating of session parameters with RADIUS attributes sent in " +#~ "Accounting-Response" +#~ msgstr "" +#~ "Permite a atualização dos parâmetros da sessão com atributos RADIUS " +#~ "enviados na Contabilidade-Resposta" + +#~ msgid "Admin password" +#~ msgstr "Senha do Administrador" + +#~ msgid "" +#~ "Password to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "" +#~ "Senha para a autenticação do usuário administrador para pegar as " +#~ "configurações do chili e estabelecer uma sessão de dispositivo \"sistema\"" + +#~ msgid "Admin user" +#~ msgstr "Usuário administrador" + +#~ msgid "" +#~ "User-name to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "" +#~ "Nome do usuário para a autenticação do usuário administrador para pegar " +#~ "as configurações do chili e estabelecer uma sessão de dispositivo " +#~ "\"sistema\"" + +#~ msgid "Do not check disconnection requests" +#~ msgstr "Não verifique as requisições de desconexão" + +#~ msgid "Do not check the source IP address of radius disconnect requests" +#~ msgstr "" +#~ "Não verifique o endereço IP de origem das requisições de desconexão do " +#~ "radius" + +#~ msgid "RADIUS disconnect port" +#~ msgstr "Porta de desconexão do RADIUS" + +#~ msgid "UDP port to listen to for accepting radius disconnect requests" +#~ msgstr "" +#~ "Porta UDP de escuta para aceitar requisições de desconexão do radius" + +#~ msgid "NAS IP" +#~ msgstr "IP do NAS" + +#~ msgid "Value to use in RADIUS NAS-IP-Address attribute" +#~ msgstr "Valor para usar no atributo NAS-IP-Address do RADIUS" + +#~ msgid "NAS MAC" +#~ msgstr "MAC do NAS" + +#~ msgid "MAC address value to use in RADIUS Called-Station-ID attribute" +#~ msgstr "Endereço MAC para usar no atributo Called-Station-ID do RADIUS" + +#~ msgid "Allow OpenID authentication" +#~ msgstr "Permitir autenticação OpenID" + +#~ msgid "" +#~ "Allows OpenID authentication by sending ChilliSpot-Config=allow-" +#~ "openidauth in RADIUS Access-Requests" +#~ msgstr "" +#~ "Permitir autenticação OpenID enviando ChilliSpot-Config=allow-openidauth " +#~ "na Resquisição de Acesso do Radius" + +#~ msgid "RADIUS accounting port" +#~ msgstr "Porta de contabilidade do RADIUS" + +#~ msgid "" +#~ "The UDP port number to use for radius accounting requests (default 1813)" +#~ msgstr "" +#~ "O número da porta UDP para ser usada pela requisição de contabilização do " +#~ "radius (padrão 1813)" + +#~ msgid "RADIUS authentication port" +#~ msgstr "Porta de autenticação do RADIUS" + +#~ msgid "" +#~ "The UDP port number to use for radius authentication requests (default " +#~ "1812)" +#~ msgstr "" +#~ "O número da porta UDP para ser usada pela requisição de autenticação do " +#~ "radius (padrão 1812)" + +#~ msgid "Option radiuscalled" +#~ msgstr "Opção radiuscalled" + +#~ msgid "RADIUS listen address" +#~ msgstr "Endereço de escuta do RADIUS" + +#~ msgid "Local interface IP address to use for the radius interface" +#~ msgstr "Endereço IP da interface local para a interface radius" + +#~ msgid "RADIUS location ID" +#~ msgstr "ID da localização do RADIUS" + +#~ msgid "WISPr Location ID" +#~ msgstr "ID da Localização WISPr" + +#~ msgid "RADIUS location name" +#~ msgstr "Nome da localização do RADIUS" + +#~ msgid "WISPr Location Name" +#~ msgstr "Nome da localização WISPr" + +#~ msgid "NAS ID" +#~ msgstr "ID do NAS" + +#~ msgid "Network access server identifier" +#~ msgstr "Identificador do servidor de acesso à rede" + +#~ msgid "Option radiusnasip" +#~ msgstr "Opção radiusnasip" + +#~ msgid "NAS port type" +#~ msgstr "Tipo de porta NAS" + +#~ msgid "" +#~ "Value of NAS-Port-Type attribute. Defaults to 19 (Wireless-IEEE-802.11)" +#~ msgstr "" +#~ "Valor do atributo do NAS-Port-Type. O padrão é 19 (IEEE-802.11-Sem fio)" + +#~ msgid "Send RADIUS VSA" +#~ msgstr "Enviar VSA do RADIUS" + +#~ msgid "Send the ChilliSpot-OriginalURL RADIUS VSA in Access-Request" +#~ msgstr "" +#~ "Enviar o ChilliSpot-OriginalURL do VSA do RADIUS na Requisição de Acesso" + +#~ msgid "RADIUS secret" +#~ msgstr "Segredo do RADIUS" + +#~ msgid "Radius shared secret for both servers" +#~ msgstr "Segredo compartilhado entre ambos os servidores Radius" + +#~ msgid "RADIUS server 1" +#~ msgstr "Servidor 1 do RADIUS" + +#~ msgid "The IP address of radius server 1" +#~ msgstr "Endereço IP do servidor 1 do radius" + +#~ msgid "RADIUS server 2" +#~ msgstr "Servidor 2 do RADIUS" + +#~ msgid "The IP address of radius server 2" +#~ msgstr "Endereço IP do servidor 2 do radius" + +#~ msgid "Swap octets" +#~ msgstr "Troque octetos" + +#~ msgid "" +#~ "Swap the meaning of \"input octets\" and \"output octets\" as it related " +#~ "to RADIUS attribtues" +#~ msgstr "" +#~ "Troca o significado de \"octetos de entrada\" e \"octetos de saída\" como " +#~ "está relatado nos atributos RADIUS" + +#~ msgid "Allow WPA guests" +#~ msgstr "Permite convidados WPA" + +#~ msgid "" +#~ "Allows WPA Guest authentication by sending ChilliSpot-Config=allow-wpa-" +#~ "guests in RADIUS Access-Requests" +#~ msgstr "" +#~ "Permite a autenticação de convidados WPA enviando ChilliSpot-Config=allow-" +#~ "wpa-guests na Requisição de Acesso do RADIUS" + +#~ msgid "Proxy client" +#~ msgstr "Cliente proxy" + +#~ msgid "" +#~ "IP address from which radius requests are accepted. If omitted the server " +#~ "will not accept radius requests" +#~ msgstr "" +#~ "Endereço IP do qual as requisições radius serão aceitas. Se omitido, o " +#~ "servidor não vai aceitar requisições radius" + +#~ msgid "Proxy listen address" +#~ msgstr "Endereço de escuta do proxy" + +#~ msgid "Local interface IP address to use for accepting radius requests" +#~ msgstr "" +#~ "Endereço IP da interface local usado para aceitar as requisições radius" + +#~ msgid "Proxy port" +#~ msgstr "Porta do Proxy" + +#~ msgid "UDP Port to listen to for accepting radius requests" +#~ msgstr "Porta UDP para aceitar requisições radius" + +#~ msgid "Proxy secret" +#~ msgstr "Segredo do Proxy" + +#~ msgid "Radius shared secret for clients" +#~ msgstr "Segredo compartilhado do Radius para clientes" + +#~ msgid "UAM configuration" +#~ msgstr "Configuração UAM" + +#~ msgid "Unified Configuration Method settings" +#~ msgstr "Configurações do Método de Configuração Unificado" + +#~ msgid "Use Chilli XML" +#~ msgstr "Use XML do Chilli" + +#~ msgid "Return the so-called Chilli XML along with WISPr XML" +#~ msgstr "Retorna o famoso XML do Chili juntamente com o XML do WISPr" + +#~ msgid "Default idle timeout" +#~ msgstr "Estouro de tempo de ociosidade padrão" + +#~ msgid "Default idle timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Estouro de tempo de ociosidade padrão, a não ser que seja definido pelo " +#~ "RADIUS (padrão é 0)" + +#~ msgid "Default interim interval" +#~ msgstr "Intervalo padrão como interino" + +#~ msgid "" +#~ "Default interim-interval for RADIUS accounting unless otherwise set by " +#~ "RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Intervalo padrão como interino para a contabilidade do RADIUS, a não ser " +#~ "que seja definido pelo RADIUS (padrão é 0)" + +#~ msgid "Default session timeout" +#~ msgstr "Estouro de tempo padrão da sessão" + +#~ msgid "" +#~ "Default session timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Estouro de tempo padrão da sessão, a não ser que seja definido pelo " +#~ "RADIUS (padrão é 0)" + +#~ msgid "Inspect DNS traffic" +#~ msgstr "Inspeciona tráfego DNS" + +#~ msgid "" +#~ "Inspect DNS packets and drop responses with any non- A, CNAME, SOA, or MX " +#~ "records to prevent dns tunnels (experimental)" +#~ msgstr "" +#~ "Inspeciona os pacotes DNS e descarta respostas para qualquer registro que " +#~ "não seja A, CNAME, SOA ou MX. Isto evita túneis pelo DNS (experimental)" + +#~ msgid "Local users file" +#~ msgstr "Arquivo de usuários locais" + +#~ msgid "" +#~ "A colon separated file containing usernames and passwords of locally " +#~ "authenticated users" +#~ msgstr "" +#~ "Um arquivo separado por dois pontos (:) contendo o nome de usuário e " +#~ "senhas para usuários autenticados localmente" + +#~ msgid "Location name" +#~ msgstr "Nome da localização" + +#~ msgid "Human readable location name used in JSON interface" +#~ msgstr "Nome da localização legível usado na interface JSON" + +#~ msgid "Do not redirect to UAM server" +#~ msgstr "Não redirecionar para servidor UAM" + +#~ msgid "" +#~ "Do not return to UAM server on login success, just redirect to original " +#~ "URL" +#~ msgstr "" +#~ "Não redirecione para o servidor UAM quando o login for bem sucedido. " +#~ "Somente redirecione para a URL original" + +#~ msgid "Do not do WISPr" +#~ msgstr "Não faça WISPr" + +#~ msgid "Do not do any WISPr XML, assume the back-end is doing this instead" +#~ msgstr "" +#~ "Não faça qualquer XML do WISPr. Ao invés disto, assuma que o servidor " +#~ "está fazendo isto" + +#~ msgid "Post auth proxy" +#~ msgstr "Proxy após a autenticação" + +#~ msgid "" +#~ "Used with postauthproxyport to define a post authentication HTTP proxy " +#~ "server" +#~ msgstr "" +#~ "Usado em conjunto com postauthproxyport para definir um servidor PROXY " +#~ "HTTP após a autenticação" + +#~ msgid "Post auth proxy port" +#~ msgstr "Porta do proxy após a autenticação" + +#~ msgid "" +#~ "Used with postauthproxy to define a post authentication HTTP proxy server" +#~ msgstr "" +#~ "Usado em conjunto com postauthproxyport para definir um servidor PROXY " +#~ "HTTP após a autenticação" + +#~ msgid "Allowed resources" +#~ msgstr "Recursos permitidos" + +#~ msgid "List of resources the client can access without first authenticating" +#~ msgstr "" +#~ "Lista de recursos que o cliente pode acessar sem antes se autenticar" + +#~ msgid "Allow any DNS server" +#~ msgstr "Permitir qualquer Servidor DNS" + +#~ msgid "Allow any DNS server for unauthenticated clients" +#~ msgstr "Permitir qualquer servidor DNS para clientes não autenticados" + +#~ msgid "Allow any IP address" +#~ msgstr "Permitir qualquer endereço IP" + +#~ msgid "" +#~ "Allow clients to use any IP settings they wish by spoofing ARP " +#~ "(experimental)" +#~ msgstr "" +#~ "Permitir que clientes usem qualquer configuração de IP desejada usando a " +#~ "técnica de falsificação de APR (experimental)" + +#~ msgid "Allowed domains" +#~ msgstr "Domínios permitidos" + +#~ msgid "" +#~ "Defines a list of domain names to automatically add to the walled garden" +#~ msgstr "" +#~ "Define uma lista de domínios automaticamente adicionados para acesso da " +#~ "zona controlada" + +#~ msgid "UAM homepage" +#~ msgstr "Página do UAM" + +#~ msgid "URL of homepage to redirect unauthenticated users to" +#~ msgstr "URL da página para onde redirecionar os usuários não autenticados" + +#~ msgid "UAM static content port" +#~ msgstr "Porta de conteúdo estático do UAM" + +#~ msgid "TCP port to bind to for only serving embedded content" +#~ msgstr "Porta TCP para somente servidor conteúdo embutido" + +#~ msgid "UAM listening address" +#~ msgstr "Endereço de escuta do UAM" + +#~ msgid "IP address to listen to for authentication of clients" +#~ msgstr "Endereço IP para escutar pela autenticação dos clientes" + +#~ msgid "UAM logout IP" +#~ msgstr "IP de desautenticação do UAM" + +#~ msgid "" +#~ "Use this IP address to instantly logout a client accessing it (defaults " +#~ "to 1.1.1.1)" +#~ msgstr "" +#~ "Use este endereço IP para instantaneamente desautenticar um cliente que a " +#~ "acessar (padrão é 1.1.1.1)" + +#~ msgid "UAM listening port" +#~ msgstr "Porta de escuta do UAM" + +#~ msgid "TCP port to bind to for authenticating clients (default 3990)" +#~ msgstr "Porta de escuta do UAM para autenticar clientes (padrão é 3990)" + +#~ msgid "UAM secret" +#~ msgstr "Segredo do UAM" + +#~ msgid "Shared secret between uamserver and chilli" +#~ msgstr "Segredo compatilhado entre o servidor UAM e o chilli" + +#~ msgid "UAM server" +#~ msgstr "Servidor UAM" + +#~ msgid "URL of web server to use for authenticating clients" +#~ msgstr "URL do servidor web usado para autenticar os clientes" + +#~ msgid "UAM user interface" +#~ msgstr "Interface do usuário do UAM" + +#~ msgid "" +#~ "An init.d style program to handle local content on the uamuiport web " +#~ "server" +#~ msgstr "" +#~ "Um programa estilo init.d para tratar o conteúdo local no servidor web " +#~ "uamuiport" + +#~ msgid "Use status file" +#~ msgstr "Usar o arquivo de estado" + +#~ msgid "" +#~ "Write the status of clients in a non-volatile state file (experimental)" +#~ msgstr "" +#~ "Escreva o estado dos clientes em um arquivo de estado não volátil " +#~ "(experimental)" + +#~ msgid "WISPr login url" +#~ msgstr "URL de login do WISPr" + +#~ msgid "Specific URL to be given in WISPr XML LoginURL" +#~ msgstr "Especifica a URL para ser dada no LoginURL do XML do WISPr" + +#~ msgid "CGI program" +#~ msgstr "Programa CGI" + +#~ msgid "" +#~ "Executable to run as a CGI type program (like haserl) for URLs with " +#~ "extension .chi" +#~ msgstr "" +#~ "Executável para rodar como um programa do tipo CGI (como o haserl) para " +#~ "URLs com a extensão .chi" + +#~ msgid "Web content directory" +#~ msgstr "Diretório de conteúdo Web" + +#~ msgid "Directory where embedded local web content is placed" +#~ msgstr "Diretório onde o conteúdo web local embutido fica localizado" + +#~ msgid "MAC configuration" +#~ msgstr "Configuração do MAC" + +#~ msgid "Configure MAC authentication" +#~ msgstr "Configurar a autenticação MAC" + +#~ msgid "Allowed MAC addresses" +#~ msgstr "Endereços MAC permitidos" + +#~ msgid "List of MAC addresses for which MAC authentication will be performed" +#~ msgstr "" +#~ "Lista dos endereços MAC permitidos para os quais a autenticação MAC será " +#~ "realizada" + +#~ msgid "Authenticate locally allowed MACs" +#~ msgstr "Autenticar MACs autorizados localmente" + +#~ msgid "Authenticate allowed MAC addresses without the use of RADIUS" +#~ msgstr "Autenticar os endereços MAC autorizados sem usar o RADIUS" + +#~ msgid "Enable MAC authentification" +#~ msgstr "Habilita a autenticação MAC" + +#~ msgid "Try to authenticate all users based on their mac address alone" +#~ msgstr "" +#~ "Tente autenticar todos os usuários baseados somente no seu endereço MAC" + +#~ msgid "Password" +#~ msgstr "Senha" + +#~ msgid "Password used when performing MAC authentication" +#~ msgstr "Senha usada para realizar a autenticação MAC" + +#~ msgid "Suffix" +#~ msgstr "Sufixo" + +#~ msgid "" +#~ "Suffix to add to the MAC address in order to form the User-Name, which is " +#~ "sent to the radius server" +#~ msgstr "" +#~ "Sufixo para adicionar ao endereço MAC que forma o nome do usuário, o qual " +#~ "é enviado ao servidor radius" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/pt/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/pt/coovachilli.po new file mode 100644 index 0000000..c2cccc3 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/pt/coovachilli.po @@ -0,0 +1,372 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-05-01 00:43+0200\n" +"Last-Translator: pedromrgoncalves \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Configuração da Rede" + +msgid "RADIUS configuration" +msgstr "Configuração RADIUS" + +msgid "UAM and MAC Authentication" +msgstr "Autenticação UAM e MAC" + +#~ msgid "General configuration" +#~ msgstr "Configuração Geral" + +#~ msgid "General CoovaChilli settings" +#~ msgstr "Definições gerais do CoovaChilli" + +#~ msgid "Command socket" +#~ msgstr "Socket de comando" + +#~ msgid "UNIX socket used for communication with chilli_query" +#~ msgstr "Socket UNIX para comunicação com chilli_query" + +#~ msgid "Config refresh interval" +#~ msgstr "Intervalo de refrescamento da configuração" + +#~ msgid "" +#~ "Re-read configuration file and do DNS lookups every interval seconds. " +#~ "This has the same effect as sending the HUP signal. If interval is 0 " +#~ "(zero) this feature is disabled. " +#~ msgstr "" +#~ "Reler o ficheiro de configuração e executar verificações DNS n segundos " +#~ "de intervalo. Tem o mesmo efeito que o envio do sinal HUP. Se o intervalo " +#~ "for 0 (zero) esta funcionalidade será desactivada." + +#~ msgid "Pid file" +#~ msgstr "Ficheiro PID" + +#~ msgid "Filename to put the process id" +#~ msgstr "Nome do ficheiro onde será guardado o PID" + +#~ msgid "State directory" +#~ msgstr "Directorio de estado" + +#~ msgid "Directory of non-volatile data" +#~ msgstr "Directorio para dados não-volateis" + +#~ msgid "TUN/TAP configuration" +#~ msgstr "Configuração tun/tap" + +#~ msgid "Network/Tun configuration" +#~ msgstr "Configuração de rede/tun" + +#~ msgid "Network down script" +#~ msgstr "Script de rede/tun em baixo" + +#~ msgid "" +#~ "Script executed after a session has moved from authorized state to " +#~ "unauthorized" +#~ msgstr "" +#~ "Script executado após o estado de uma sessão ser alterado de autorizado " +#~ "para não-autorizado " + +#~ msgid "Network up script" +#~ msgstr "Script de rede/tun em cima" + +#~ msgid "Script executed after the tun network interface has been brought up" +#~ msgstr "Script executado apos o interface tun de rede ter sido levantado" + +#~ msgid "Primary DNS Server" +#~ msgstr "Servidor primário de DNS" + +#~ msgid "Secondary DNS Server" +#~ msgstr "Servidor secundário de DNS" + +#~ msgid "Domain name" +#~ msgstr "Domínio" + +#~ msgid "" +#~ "Is used to inform the client about the domain name to use for DNS lookups" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "Dynamic IP address pool" +#~ msgstr "Servidor primário de DNS" + +#, fuzzy +#~ msgid "Specifies a pool of dynamic IP addresses" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o endereço de servidor DNS a usar " +#~ "para a resolução de nomes" + +#, fuzzy +#~ msgid "IP down script" +#~ msgstr "Script de rede/tun em baixo" + +#, fuzzy +#~ msgid "Script executed after the tun network interface has been taken down" +#~ msgstr "" +#~ "Script executado após o estado de uma sessão ser alterado de autorizado " +#~ "para não-autorizado " + +#, fuzzy +#~ msgid "IP up script" +#~ msgstr "Script de rede/tun em cima" + +#, fuzzy +#~ msgid "" +#~ "Script executed after the TUN/TAP network interface has been brought up" +#~ msgstr "Script executado apos o interface tun de rede ter sido levantado" + +#, fuzzy +#~ msgid "Uplink subnet" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "Network address of the uplink interface (CIDR notation)" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o endereço de servidor DNS a usar " +#~ "para a resolução de nomes" + +#, fuzzy +#~ msgid "Static IP address pool" +#~ msgstr "Script de rede/tun em cima" + +#, fuzzy +#~ msgid "Specifies a pool of static IP addresses" +#~ msgstr "Script executado apos o interface tun de rede ter sido levantado" + +#, fuzzy +#~ msgid "TUN/TAP device" +#~ msgstr "Script de rede/tun em baixo" + +#, fuzzy +#~ msgid "The specific device to use for the TUN/TAP interface" +#~ msgstr "" +#~ "Script executado após o estado de uma sessão ser alterado de autorizado " +#~ "para não-autorizado " + +#, fuzzy +#~ msgid "TX queue length" +#~ msgstr "Domínio" + +#, fuzzy +#~ msgid "The TX queue length to set on the TUN/TAP interface" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "Use TAP device" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "Use the TAP interface instead of TUN" +#~ msgstr "Script executado apos o interface tun de rede ter sido levantado" + +#, fuzzy +#~ msgid "DHCP configuration" +#~ msgstr "Configuração tun/tap" + +#, fuzzy +#~ msgid "Set DHCP options for connecting clients" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "DHCP end number" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "DHCP interface" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "Ethernet interface to listen to for the downlink interface" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "Listen MAC address" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "Leasetime" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "Use a DHCP lease of seconds (default 600)" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "Admin user" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "NAS IP" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "Value to use in RADIUS NAS-IP-Address attribute" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "NAS MAC" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "MAC address value to use in RADIUS Called-Station-ID attribute" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "Allow WPA guests" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "UAM configuration" +#~ msgstr "Configuração tun/tap" + +#, fuzzy +#~ msgid "Unified Configuration Method settings" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "List of resources the client can access without first authenticating" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "Allow any DNS server" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "Allow any DNS server for unauthenticated clients" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "Allow any IP address" +#~ msgstr "Domínio" + +#, fuzzy +#~ msgid "" +#~ "Allow clients to use any IP settings they wish by spoofing ARP " +#~ "(experimental)" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "Allowed domains" +#~ msgstr "Domínio" + +#, fuzzy +#~ msgid "" +#~ "Defines a list of domain names to automatically add to the walled garden" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "UAM homepage" +#~ msgstr "Domínio" + +#, fuzzy +#~ msgid "URL of homepage to redirect unauthenticated users to" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "UAM static content port" +#~ msgstr "Domínio" + +#, fuzzy +#~ msgid "TCP port to bind to for only serving embedded content" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "UAM listening address" +#~ msgstr "Domínio" + +#, fuzzy +#~ msgid "IP address to listen to for authentication of clients" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "UAM logout IP" +#~ msgstr "Domínio" + +#, fuzzy +#~ msgid "" +#~ "Use this IP address to instantly logout a client accessing it (defaults " +#~ "to 1.1.1.1)" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "UAM listening port" +#~ msgstr "Domínio" + +#, fuzzy +#~ msgid "TCP port to bind to for authenticating clients (default 3990)" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "UAM secret" +#~ msgstr "Domínio" + +#, fuzzy +#~ msgid "Shared secret between uamserver and chilli" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "UAM server" +#~ msgstr "Domínio" + +#, fuzzy +#~ msgid "URL of web server to use for authenticating clients" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "UAM user interface" +#~ msgstr "Domínio" + +#, fuzzy +#~ msgid "" +#~ "An init.d style program to handle local content on the uamuiport web " +#~ "server" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "" +#~ "Executable to run as a CGI type program (like haserl) for URLs with " +#~ "extension .chi" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "Directory where embedded local web content is placed" +#~ msgstr "" +#~ "Usado para informar o cliente sobre o dominio a utilizar para pedidos DNS" + +#, fuzzy +#~ msgid "MAC configuration" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "Configure MAC authentication" +#~ msgstr "Configuração de rede/tun" + +#, fuzzy +#~ msgid "Try to authenticate all users based on their mac address alone" +#~ msgstr "Configuração de rede/tun" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/ro/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/ro/coovachilli.po new file mode 100644 index 0000000..8f458bb --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/ro/coovachilli.po @@ -0,0 +1,27 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-28 19:15+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Configurare reţea" + +msgid "RADIUS configuration" +msgstr "Configurare RADIUS" + +msgid "UAM and MAC Authentication" +msgstr "Autentificare UAM şi MAC" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/ru/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/ru/coovachilli.po new file mode 100644 index 0000000..3420e24 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/ru/coovachilli.po @@ -0,0 +1,560 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: coovachilli\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-08-15 11:29+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Конфигурация сети" + +msgid "RADIUS configuration" +msgstr "Конфигурация RADIUS" + +msgid "UAM and MAC Authentication" +msgstr "Аутентификация с помощью UAM и MAC" + +#~ msgid "General configuration" +#~ msgstr "Общие настройки" + +#~ msgid "General CoovaChilli settings" +#~ msgstr "Общие настройки CoovaChilli" + +#~ msgid "Command socket" +#~ msgstr "Сокет команд" + +#~ msgid "UNIX socket used for communication with chilli_query" +#~ msgstr "UNIX сокет для связи с chilli_query" + +#~ msgid "Config refresh interval" +#~ msgstr "Интервал обновления конфигурации" + +#~ msgid "" +#~ "Re-read configuration file and do DNS lookups every interval seconds. " +#~ "This has the same effect as sending the HUP signal. If interval is 0 " +#~ "(zero) this feature is disabled. " +#~ msgstr "" +#~ "Считывание файла конфигурации и запуск DNS поиска раз в указанный " +#~ "интервал. Достигается тот же эффект что и при отсылке HUP сигнала. " +#~ "Значение интервала выражено в секундах. В случае указания нулевого " +#~ "значения интервала, данная функция становится неактивной." + +#~ msgid "Pid file" +#~ msgstr "Pid файл" + +#~ msgid "Filename to put the process id" +#~ msgstr "Имя файла, который будет содержать идентификатор процесса (PID)" + +#~ msgid "State directory" +#~ msgstr "Директория состояния" + +#~ msgid "TUN/TAP configuration" +#~ msgstr "TUN/TAP конфигурация" + +#~ msgid "Network down script" +#~ msgstr "Скрипт выключения сети" + +#~ msgid "Network up script" +#~ msgstr "Скрипт включения сети" + +#~ msgid "Primary DNS Server" +#~ msgstr "Первичный DNS сервер" + +#~ msgid "Secondary DNS Server" +#~ msgstr "Вторичный DNS сервер" + +#~ msgid "Domain name" +#~ msgstr "Доменное имя" + +#~ msgid "" +#~ "Is used to inform the client about the domain name to use for DNS lookups" +#~ msgstr "Используется, чтобы сообщить клиенту имя домена при DNS поисках" + +#~ msgid "Dynamic IP address pool" +#~ msgstr "Диапазон динамических IP адресов" + +#~ msgid "Specifies a pool of dynamic IP addresses" +#~ msgstr "Определяет диапазон динамических IP адресов" + +#~ msgid "IP down script" +#~ msgstr "Скрипт сброса IP-адреса" + +#~ msgid "IP up script" +#~ msgstr "Скрипт установки IP-адреса" + +#~ msgid "" +#~ "Script executed after the TUN/TAP network interface has been brought up" +#~ msgstr "Скрипт, выполняемый после включения сетевого интерфейса TUN/TAP" + +#~ msgid "Uplink subnet" +#~ msgstr "Подсеть uplink'а" + +#~ msgid "Network address of the uplink interface (CIDR notation)" +#~ msgstr "Сетевой адрес uplink-интерфейса (в нотации CIDR)" + +#~ msgid "Static IP address pool" +#~ msgstr "Диапазон статических IP адресов" + +#~ msgid "Specifies a pool of static IP addresses" +#~ msgstr "Определяет диапазон статических IP адресов" + +#~ msgid "TUN/TAP device" +#~ msgstr "TUN/TAP устройство" + +#~ msgid "The specific device to use for the TUN/TAP interface" +#~ msgstr "Устройство для TUN/TAP интерфейса" + +#~ msgid "TX queue length" +#~ msgstr "Длина очереди TX" + +#~ msgid "The TX queue length to set on the TUN/TAP interface" +#~ msgstr "Длина TX очереди TUN/TAP интерфейса" + +#~ msgid "Use TAP device" +#~ msgstr "Использовать устройство TAP" + +#~ msgid "Use the TAP interface instead of TUN" +#~ msgstr "Использовать интерфейс TAP вместо TUN" + +#~ msgid "DHCP configuration" +#~ msgstr "Настройки DHCP" + +#~ msgid "Set DHCP options for connecting clients" +#~ msgstr "Установите параметры DHCP для подключения клиентов" + +#~ msgid "DHCP end number" +#~ msgstr "Конечное значение DHCP" + +#~ msgid "DHCP interface" +#~ msgstr "DHCP интерфейс" + +#~ msgid "Ethernet interface to listen to for the downlink interface" +#~ msgstr "Ethernet интерфейс для прослушивания downlink-интерфеса" + +#~ msgid "Listen MAC address" +#~ msgstr "Прослушиваемые MAC адреса" + +#~ msgid "DHCP start number" +#~ msgstr "Начальное значение DHCP" + +#~ msgid "Where to start assigning IP addresses (default 10)" +#~ msgstr "Начать присвоения IP-адресов с (по умолчанию 10)" + +#~ msgid "Enable IEEE 802.1x" +#~ msgstr "Включить IEEE 802.1x" + +#~ msgid "Enable IEEE 802.1x authentication and listen for EAP requests" +#~ msgstr "Включить IEEE 802.1x аутентификацию и обработку запросов EAP" + +#~ msgid "Leasetime" +#~ msgstr "Время аренды" + +#~ msgid "Use a DHCP lease of seconds (default 600)" +#~ msgstr "Использовать DHCP аренду заданное время (секунды, 600 по умолчанию)" + +#~ msgid "Allow session update through RADIUS" +#~ msgstr "Разрешить обновление сессии через RADIUS" + +#~ msgid "" +#~ "Allow updating of session parameters with RADIUS attributes sent in " +#~ "Accounting-Response" +#~ msgstr "" +#~ "Разрешить обновление параметров сессии используя RADIUS атрибуты " +#~ "посланные через Accounting-Response" + +#~ msgid "Admin password" +#~ msgstr "Пароль администратора" + +#~ msgid "" +#~ "Password to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "" +#~ "Пароль администратора для аутентификации пользователя и применения " +#~ "настроек chilli с созданием \"системной\" сессии устройства" + +#~ msgid "Admin user" +#~ msgstr "Администратор" + +#~ msgid "" +#~ "User-name to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "" +#~ "Имя администратора для аутентификации пользователя и применения настроек " +#~ "chilli с созданием \"системной\" сессии устройства" + +#~ msgid "Do not check disconnection requests" +#~ msgstr "Не проверять запросы на разъединение" + +#~ msgid "Do not check the source IP address of radius disconnect requests" +#~ msgstr "Не проверять IP-адрес запросов разъединения radius" + +#~ msgid "RADIUS disconnect port" +#~ msgstr "Порт разъединения RADIUS" + +#~ msgid "UDP port to listen to for accepting radius disconnect requests" +#~ msgstr "UDP порт для запросов разъединения RADIUS" + +#~ msgid "NAS IP" +#~ msgstr "IP-адрес NAS" + +#~ msgid "Value to use in RADIUS NAS-IP-Address attribute" +#~ msgstr "Значение RADIUS NAS-IP-Address атрибута" + +#~ msgid "NAS MAC" +#~ msgstr "MAC адрес NAS" + +#~ msgid "MAC address value to use in RADIUS Called-Station-ID attribute" +#~ msgstr "Значение MAC адреса RADIUS Called-Station-ID атрибута" + +#~ msgid "Allow OpenID authentication" +#~ msgstr "Разрешить OpenID аутентификацию" + +#~ msgid "" +#~ "Allows OpenID authentication by sending ChilliSpot-Config=allow-" +#~ "openidauth in RADIUS Access-Requests" +#~ msgstr "" +#~ "Разрешает аутентификацию OpenID, посылая ChilliSpot-Config=allow-" +#~ "openidauth в запросах доступа RADIUS." + +#~ msgid "RADIUS accounting port" +#~ msgstr "Порт RADIUS Accounting" + +#~ msgid "" +#~ "The UDP port number to use for radius accounting requests (default 1813)" +#~ msgstr "Порт UDP для запросов RADIUS Accounting (1813 по умолчанию)" + +#~ msgid "RADIUS authentication port" +#~ msgstr "Порт аутентификации RADIUS" + +#~ msgid "" +#~ "The UDP port number to use for radius authentication requests (default " +#~ "1812)" +#~ msgstr "UDP порт для запросов аутентификации radius (1812 по умолчанию)" + +#~ msgid "RADIUS listen address" +#~ msgstr "Слушающий адрес RADIUS" + +#~ msgid "Local interface IP address to use for the radius interface" +#~ msgstr "IP адрес локального интерфейса для интерфейса radius" + +#~ msgid "RADIUS location ID" +#~ msgstr "Идентификатор расположения RADIUS" + +#~ msgid "WISPr Location ID" +#~ msgstr "Идентификатор расположения WISPr" + +#~ msgid "RADIUS location name" +#~ msgstr "Имя расположения RADIUS" + +#~ msgid "WISPr Location Name" +#~ msgstr "Имя расположения WISPr" + +#~ msgid "NAS ID" +#~ msgstr "Идентификатор NAS" + +#~ msgid "Network access server identifier" +#~ msgstr "Идентификатор сервера доступа к сети (NAS)" + +#~ msgid "Option radiusnasip" +#~ msgstr "Опция radiusnasip" + +#~ msgid "NAS port type" +#~ msgstr "Тип порта NAS" + +#~ msgid "" +#~ "Value of NAS-Port-Type attribute. Defaults to 19 (Wireless-IEEE-802.11)" +#~ msgstr "Значение аттрибута NAS-Port-Type. По умолчанию 19 (IEEE-802.11)" + +#~ msgid "Send RADIUS VSA" +#~ msgstr "Отсылать RADIUS VSA" + +#~ msgid "Send the ChilliSpot-OriginalURL RADIUS VSA in Access-Request" +#~ msgstr "Отсылать ChilliSpot-OriginalURL RADIUS VSA в запросах доступа" + +#~ msgid "RADIUS secret" +#~ msgstr "Секрет RADIUS" + +#~ msgid "Radius shared secret for both servers" +#~ msgstr "Общий секрет RADIUS для обоих серверов" + +#~ msgid "RADIUS server 1" +#~ msgstr "RADIUS сервер 1" + +#~ msgid "The IP address of radius server 1" +#~ msgstr "IP адрес RADIUS сервера 1" + +#~ msgid "RADIUS server 2" +#~ msgstr "RADIUS сервер 2" + +#~ msgid "The IP address of radius server 2" +#~ msgstr "IP адрес RADIUS сервера 2" + +#~ msgid "Swap octets" +#~ msgstr "Переставлять октеты" + +#~ msgid "" +#~ "Swap the meaning of \"input octets\" and \"output octets\" as it related " +#~ "to RADIUS attribtues" +#~ msgstr "Менять местами значения \"входной октет\" и \"выходной октет\"" + +#~ msgid "Allow WPA guests" +#~ msgstr "Разрешить гостевой WPA вход" + +#~ msgid "" +#~ "Allows WPA Guest authentication by sending ChilliSpot-Config=allow-wpa-" +#~ "guests in RADIUS Access-Requests" +#~ msgstr "" +#~ "Разрешает гстевую WPA аутентификацию, отсылая ChilliSpot-Config=allow-wpa-" +#~ "guests в запросах доступа RADIUS" + +#~ msgid "Proxy client" +#~ msgstr "Клиент прокси" + +#~ msgid "" +#~ "IP address from which radius requests are accepted. If omitted the server " +#~ "will not accept radius requests" +#~ msgstr "" +#~ "IP адрес с которого запросы radius принимаются. Если не указан, то сервер " +#~ "не будет принимать запросы radius" + +#~ msgid "Local interface IP address to use for accepting radius requests" +#~ msgstr "IP адрес локального интерфейса для приема запросов radius" + +#~ msgid "Proxy port" +#~ msgstr "Порт прокси" + +#~ msgid "UDP Port to listen to for accepting radius requests" +#~ msgstr "Порт UDP для запросов RADIUS" + +#~ msgid "Proxy secret" +#~ msgstr "Секрет прокси" + +#~ msgid "Radius shared secret for clients" +#~ msgstr "Общий RADIUS секрет для клиентов" + +#~ msgid "UAM configuration" +#~ msgstr "Конфигурация UAM" + +#~ msgid "Unified Configuration Method settings" +#~ msgstr "Настройки UAM" + +#~ msgid "Use Chilli XML" +#~ msgstr "Использовать Chilli XML" + +#~ msgid "Return the so-called Chilli XML along with WISPr XML" +#~ msgstr "Возвращать так называемый Chilli XML вместе с WISPr XML" + +#~ msgid "Default idle timeout" +#~ msgstr "Таймаут ожидания по умолчанию" + +#~ msgid "Default idle timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Таймаут ожидания по умолчанию если не установлен RADIUS'ом (0 по " +#~ "умолчанию)" + +#~ msgid "Default session timeout" +#~ msgstr "Таймаут сессии (значение по умолчанию)" + +#~ msgid "" +#~ "Default session timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Таймаут сессии по умолчанию если не установлено RADIUS'ом (0 по умолчанию)" + +#~ msgid "Inspect DNS traffic" +#~ msgstr "Инспектировать траффик DNS" + +#~ msgid "" +#~ "Inspect DNS packets and drop responses with any non- A, CNAME, SOA, or MX " +#~ "records to prevent dns tunnels (experimental)" +#~ msgstr "" +#~ "Проверять DNS пакеты и отбрасывать ответы без A, CNAME, SOA, или MX " +#~ "записей для предотвращения DNS туннелей (экспериментальная ф-ция)." + +#~ msgid "Local users file" +#~ msgstr "Локальный файл пользователей" + +#~ msgid "" +#~ "A colon separated file containing usernames and passwords of locally " +#~ "authenticated users" +#~ msgstr "" +#~ "Файл, содержащий логины и пароли локально авторизованных пользователей " +#~ "(записи разделены двоеточием)" + +#~ msgid "Location name" +#~ msgstr "Имя расположения" + +#~ msgid "Human readable location name used in JSON interface" +#~ msgstr "Имя расположения, используемой в интерфейсе JSON" + +#~ msgid "Do not redirect to UAM server" +#~ msgstr "Не перенаправлять на сервер UAM" + +#~ msgid "" +#~ "Do not return to UAM server on login success, just redirect to original " +#~ "URL" +#~ msgstr "" +#~ "Не возвращаться на UAM сервер при удачном входе, перенаправить на " +#~ "исходный URL" + +#~ msgid "Do not do WISPr" +#~ msgstr "Не выполнять WISPr" + +#~ msgid "Do not do any WISPr XML, assume the back-end is doing this instead" +#~ msgstr "Не выполнять WISPr XML, предполагая выполнение в бэкенд'е" + +#~ msgid "Post auth proxy" +#~ msgstr "Прокси пост-аутентификации" + +#~ msgid "" +#~ "Used with postauthproxyport to define a post authentication HTTP proxy " +#~ "server" +#~ msgstr "" +#~ "Используется с портом прокси пост-аутентификации для определения HTTP " +#~ "прокси-сервера аутентификации" + +#~ msgid "Post auth proxy port" +#~ msgstr "Порт прокси пост-аутентификации" + +#~ msgid "" +#~ "Used with postauthproxy to define a post authentication HTTP proxy server" +#~ msgstr "" +#~ "Ипользуется с прокси пост-аутентификации для определения HTTP прокси-" +#~ "сервера пост-аутентификации" + +#~ msgid "Allowed resources" +#~ msgstr "Разрешенные ресурсы" + +#~ msgid "List of resources the client can access without first authenticating" +#~ msgstr "" +#~ "Список ресурсов к которым клиент может получить доступ без " +#~ "предварительной аутентификации" + +#~ msgid "Allow any DNS server" +#~ msgstr "Разрешить любой DNS сервер" + +#~ msgid "Allow any DNS server for unauthenticated clients" +#~ msgstr "Разрешить любой DNS сервер для клиентов не прошедших аутентификацию" + +#~ msgid "Allow any IP address" +#~ msgstr "Разрешить любой IP-адрес" + +#~ msgid "" +#~ "Allow clients to use any IP settings they wish by spoofing ARP " +#~ "(experimental)" +#~ msgstr "" +#~ "Разрешить клиентам использовать любые настройки IP за счет \"спуфинга\" " +#~ "ARP (экспериментальная ф-ция)" + +#~ msgid "Allowed domains" +#~ msgstr "Разрешенные домены" + +#~ msgid "UAM homepage" +#~ msgstr "Домашняя страница UAM" + +#~ msgid "URL of homepage to redirect unauthenticated users to" +#~ msgstr "" +#~ "URL домашней страницы для перенаправления пользователей не прошедших " +#~ "аутентификацию" + +#~ msgid "UAM static content port" +#~ msgstr "Порт UAM статического контента" + +#~ msgid "UAM listening address" +#~ msgstr "Слашающий адрес UAM" + +#~ msgid "IP address to listen to for authentication of clients" +#~ msgstr "IP адрес для приема аутентификации клиентов" + +#~ msgid "UAM logout IP" +#~ msgstr "IP-адрес выхода UAM" + +#~ msgid "UAM listening port" +#~ msgstr "Слушающий порт UAM" + +#~ msgid "UAM secret" +#~ msgstr "Секрет UAM" + +#~ msgid "Shared secret between uamserver and chilli" +#~ msgstr "Общий секрет для сервера UAM и Chilli" + +#~ msgid "UAM server" +#~ msgstr "Сервер UAM" + +#~ msgid "URL of web server to use for authenticating clients" +#~ msgstr "URL или веб-сервер для аутентификации клиентов" + +#~ msgid "UAM user interface" +#~ msgstr "Интерфейс пользователя UAM" + +#~ msgid "Use status file" +#~ msgstr "Использовать статус-файл" + +#~ msgid "WISPr login url" +#~ msgstr "URL входа WISPr" + +#~ msgid "Specific URL to be given in WISPr XML LoginURL" +#~ msgstr "Особый URL в WISPr XML LoginURL" + +#~ msgid "CGI program" +#~ msgstr "Программа GCI" + +#~ msgid "Web content directory" +#~ msgstr "Директория Web-контента" + +#~ msgid "Directory where embedded local web content is placed" +#~ msgstr "Директория куда будет помещен встроенный Web-контент" + +#~ msgid "MAC configuration" +#~ msgstr "Настройка MAC" + +#~ msgid "Configure MAC authentication" +#~ msgstr "Настройка аутентификации по MAC адресу" + +#~ msgid "Allowed MAC addresses" +#~ msgstr "Разрешенные MAC адреса" + +#~ msgid "List of MAC addresses for which MAC authentication will be performed" +#~ msgstr "Список MAC адресов для которых будет производиться аутентификация" + +#~ msgid "Authenticate locally allowed MACs" +#~ msgstr "Аутентифицировать локально разрешенные MAC адреса" + +#~ msgid "Authenticate allowed MAC addresses without the use of RADIUS" +#~ msgstr "Аутентифицировать разрешенные MAC адреса без использования RADIUS" + +#~ msgid "Enable MAC authentification" +#~ msgstr "Разрешить MAC аутентификацию" + +#~ msgid "Try to authenticate all users based on their mac address alone" +#~ msgstr "" +#~ "Пробовать аутентификацию всех пользователей только на основе их MAC " +#~ "адресов" + +#~ msgid "Password" +#~ msgstr "Пароль" + +#~ msgid "Password used when performing MAC authentication" +#~ msgstr "Пароль для MAC аутентификации" + +#~ msgid "Suffix" +#~ msgstr "Суффикс" + +#~ msgid "" +#~ "Suffix to add to the MAC address in order to form the User-Name, which is " +#~ "sent to the radius server" +#~ msgstr "" +#~ "Суффикс, добавляемый в MAC адрес, для формирования имени пользователя, " +#~ "которое посылается radius серверу" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/sk/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/sk/coovachilli.po new file mode 100644 index 0000000..bb5b1b9 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/sk/coovachilli.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "CoovaChilli" +msgstr "" + +msgid "Network Configuration" +msgstr "" + +msgid "RADIUS configuration" +msgstr "" + +msgid "UAM and MAC Authentication" +msgstr "" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/sv/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/sv/coovachilli.po new file mode 100644 index 0000000..8695ce5 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/sv/coovachilli.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-04-28 06:16+0200\n" +"Last-Translator: Umeaboy \n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChili" + +msgid "Network Configuration" +msgstr "Nätverkskonfiguration" + +msgid "RADIUS configuration" +msgstr "RADIUS-konfiguration" + +msgid "UAM and MAC Authentication" +msgstr "UAM och MAC-autensiering" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/templates/coovachilli.pot b/feeds/luci/applications/luci-app-coovachilli/po/templates/coovachilli.pot new file mode 100644 index 0000000..c1a2bed --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/templates/coovachilli.pot @@ -0,0 +1,14 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "CoovaChilli" +msgstr "" + +msgid "Network Configuration" +msgstr "" + +msgid "RADIUS configuration" +msgstr "" + +msgid "UAM and MAC Authentication" +msgstr "" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/tr/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/tr/coovachilli.po new file mode 100644 index 0000000..b70a840 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/tr/coovachilli.po @@ -0,0 +1,26 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-10-11 23:09+0200\n" +"Last-Translator: vincenzo \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Network Yapılandırması" + +msgid "RADIUS configuration" +msgstr "Radius Yapılandırması" + +msgid "UAM and MAC Authentication" +msgstr "UAM ve MAC Kimlik Doğrulaması" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/uk/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/uk/coovachilli.po new file mode 100644 index 0000000..07ffc55 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/uk/coovachilli.po @@ -0,0 +1,27 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-12-29 13:00+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "Конфігурація мережі" + +msgid "RADIUS configuration" +msgstr "Конфігурація RADIUS" + +msgid "UAM and MAC Authentication" +msgstr "Автентифікація через UAM і MAC" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/vi/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/vi/coovachilli.po new file mode 100644 index 0000000..dc27f8b --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/vi/coovachilli.po @@ -0,0 +1,607 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:59+0200\n" +"PO-Revision-Date: 2009-08-16 07:05+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli" + +msgid "Network Configuration" +msgstr "" + +msgid "RADIUS configuration" +msgstr "" + +msgid "UAM and MAC Authentication" +msgstr "" + +#~ msgid "General configuration" +#~ msgstr "Cấu hình tổng quát" + +#~ msgid "General CoovaChilli settings" +#~ msgstr "Các cài đặt CoovaChilli tổng quát" + +#~ msgid "Command socket" +#~ msgstr "Command socket" + +#~ msgid "UNIX socket used for communication with chilli_query" +#~ msgstr "UNIX socket dùng để giao tiếp với chilli_query" + +#~ msgid "Config refresh interval" +#~ msgstr "Config refresh interval" + +#~ msgid "" +#~ "Re-read configuration file and do DNS lookups every interval seconds. " +#~ "This has the same effect as sending the HUP signal. If interval is 0 " +#~ "(zero) this feature is disabled. " +#~ msgstr "" +#~ "Đọc lại tập tin cấu hình và tra cưứ DNS mỗi giây. Cái này có ảnh hưởng " +#~ "giống như đang gửi một tín hiệu HUP. Nếu interval là 0, tính năng này sẽ " +#~ "bị vô hiệu hóa. " + +#~ msgid "Pid file" +#~ msgstr "Tập tin Pid" + +#~ msgid "Filename to put the process id" +#~ msgstr "Tên tập tin để đặt làm ID xử lý" + +#~ msgid "State directory" +#~ msgstr "Dạnh bạ vùng" + +#~ msgid "Directory of non-volatile data" +#~ msgstr "Thư mục của những dữ liệu cố định" + +#~ msgid "TUN/TAP configuration" +#~ msgstr "Cấu hình TUN/TAP" + +#~ msgid "Network/Tun configuration" +#~ msgstr "Mạng lưới/ Cấu hình TUN" + +#~ msgid "Network down script" +#~ msgstr "Network down script" + +#~ msgid "" +#~ "Script executed after a session has moved from authorized state to " +#~ "unauthorized" +#~ msgstr "" +#~ "Script đã thực hiện sau khi một section đã di chuyển từ nơi có thẩm quyền " +#~ "đến nơi không" + +#~ msgid "Network up script" +#~ msgstr "Network up script" + +#~ msgid "Script executed after the tun network interface has been brought up" +#~ msgstr "Script thi hành sau khi giao diện mạng tun được đưa lên" + +#~ msgid "Primary DNS Server" +#~ msgstr "Primary DNS Server" + +#~ msgid "Secondary DNS Server" +#~ msgstr "Secondary DNS Server" + +#~ msgid "Domain name" +#~ msgstr "Tên miền" + +#~ msgid "" +#~ "Is used to inform the client about the domain name to use for DNS lookups" +#~ msgstr "" +#~ "Được sử dụng để thông báo cho khách hàng về tên miền để dùng cho các tra " +#~ "cứu DNS" + +#~ msgid "Dynamic IP address pool" +#~ msgstr "Dynamic IP address pool" + +#~ msgid "Specifies a pool of dynamic IP addresses" +#~ msgstr "Chỉ định một pool of dynamic IP addresses" + +#~ msgid "IP down script" +#~ msgstr "IP down script" + +#~ msgid "Script executed after the tun network interface has been taken down" +#~ msgstr "Script thực hiện sau khi giao diện mạng tun bị lấy xuống" + +#~ msgid "IP up script" +#~ msgstr "IP up script" + +#~ msgid "" +#~ "Script executed after the TUN/TAP network interface has been brought up" +#~ msgstr "Script thực hiện sau khi giao diện mạng TUN/TAP đã được đưa lên" + +#~ msgid "Uplink subnet" +#~ msgstr "Uplink subnet" + +#~ msgid "Network address of the uplink interface (CIDR notation)" +#~ msgstr "Địa chỉ mạng của giao diện uplink (CIDR chú thích)" + +#~ msgid "Static IP address pool" +#~ msgstr "Static IP address pool" + +#~ msgid "Specifies a pool of static IP addresses" +#~ msgstr "Chỉ định một pool of static IP addresses" + +#~ msgid "TUN/TAP device" +#~ msgstr "TUN/TAP device" + +#~ msgid "The specific device to use for the TUN/TAP interface" +#~ msgstr "Thiết bị cụ thể để dùng cho giao diện TUN/TAP" + +#~ msgid "TX queue length" +#~ msgstr "Độ dài của TX queue" + +#~ msgid "The TX queue length to set on the TUN/TAP interface" +#~ msgstr "Độ dài TX queue để đặt trên giao diện TUN/TAP " + +#~ msgid "Use TAP device" +#~ msgstr "Dùng dụng cụ TAP" + +#~ msgid "Use the TAP interface instead of TUN" +#~ msgstr "Dùng giao diện TAP thay cho TUN" + +#~ msgid "DHCP configuration" +#~ msgstr "Cấu hình DHCP" + +#~ msgid "Set DHCP options for connecting clients" +#~ msgstr "Đặt lựa chọn DHCP cho đối tượng kết nối" + +#~ msgid "DHCP end number" +#~ msgstr "Số cuối DHCP" + +#~ msgid "Where to stop assigning IP addresses (default 254)" +#~ msgstr "Chỗ để stop những gán IP (mặc định 254)" + +#~ msgid "DHCP interface" +#~ msgstr "Giao diện DHCP" + +#~ msgid "Ethernet interface to listen to for the downlink interface" +#~ msgstr "Giao diện Ethernet để listen cho những giao diện downlink " + +#~ msgid "Listen MAC address" +#~ msgstr "Nghe địa chỉ MAC" + +#~ msgid "" +#~ "MAC address to listen to. If not specified the MAC address of the " +#~ "interface will be used" +#~ msgstr "" +#~ "Địa chỉ MAC để nghe. Nếu địa chỉ MAC chỉ định của giao diện sẽ được sử " +#~ "dụng " + +#~ msgid "DHCP start number" +#~ msgstr "Số DHCP bắt đầu " + +#~ msgid "Where to start assigning IP addresses (default 10)" +#~ msgstr "Chỗ để bắt đầu gán địa chỉ IP (mặc định 10)" + +#~ msgid "Enable IEEE 802.1x" +#~ msgstr "Kích hoạt IEEE 802.1x" + +#~ msgid "Enable IEEE 802.1x authentication and listen for EAP requests" +#~ msgstr "Kích hoạt quá trình xác thực IEEE 802.1x và lắng nghe yêu cầu EAP" + +#~ msgid "Leasetime" +#~ msgstr "Leasetime" + +#~ msgid "Use a DHCP lease of seconds (default 600)" +#~ msgstr "Dùng một DHCP lease ở giây (600)" + +#~ msgid "Allow session update through RADIUS" +#~ msgstr "Cho phép phiên cập nhật thông qua RADIUS" + +#~ msgid "" +#~ "Allow updating of session parameters with RADIUS attributes sent in " +#~ "Accounting-Response" +#~ msgstr "" +#~ "Cho phép phiên cập nhật tham số phiên với RADIUS được gửi trong " +#~ "Accounting-Response" + +#~ msgid "Admin password" +#~ msgstr "Mật mã quản trị " + +#~ msgid "" +#~ "Password to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "" +#~ "Mật mã dùng để xác thực chế độ quản trị để pick up cấu hình chilli và " +#~ "thành lập một công cụ &quot;system&quot; session" + +#~ msgid "Admin user" +#~ msgstr "Người quản trị " + +#~ msgid "" +#~ "User-name to use for Administrative-User authentication in order to pick " +#~ "up chilli configurations and establish a device \"system\" session" +#~ msgstr "" +#~ "User name dùng để xác thực chế độ quản trị để pick up cấu hình chilli và " +#~ "thành lập một công cụ &quot;system&quot; session" + +#~ msgid "Do not check disconnection requests" +#~ msgstr "Không kiểm tra yêu cầu ngừng kết nối" + +#~ msgid "Do not check the source IP address of radius disconnect requests" +#~ msgstr "" +#~ "Không tên kiểm tra nguồn địa chỉ IP trong bán kính yêu cầu ngừng kết nối" + +#~ msgid "RADIUS disconnect port" +#~ msgstr "Cửa ngừng kết nối RADIUS" + +#~ msgid "UDP port to listen to for accepting radius disconnect requests" +#~ msgstr "Cửa UDP để nghe khi chấp nhận một yêu cầu ngừng kết nối" + +#~ msgid "NAS IP" +#~ msgstr "NAS IP " + +#~ msgid "Value to use in RADIUS NAS-IP-Address attribute" +#~ msgstr "Giá trị để dùng trong RADIUS NAS-IP-Address attribute" + +#~ msgid "NAS MAC" +#~ msgstr "NAS MAC" + +#~ msgid "MAC address value to use in RADIUS Called-Station-ID attribute" +#~ msgstr "" +#~ "Giá trị địa chỉ MAC để dùng trong RADIUS Called-Station-ID attribute" + +#~ msgid "Allow OpenID authentication" +#~ msgstr "Cho phép xác thực OpenID " + +#~ msgid "" +#~ "Allows OpenID authentication by sending ChilliSpot-Config=allow-" +#~ "openidauth in RADIUS Access-Requests" +#~ msgstr "" +#~ "Cho phép xác thực OpenID bằng cách gửi ChilliSpot-Config=allow-openidauth " +#~ "in RADIUS Access-Requests" + +#~ msgid "RADIUS accounting port" +#~ msgstr "Cổng RADIUS accounting" + +#~ msgid "" +#~ "The UDP port number to use for radius accounting requests (default 1813)" +#~ msgstr "Số của cổng UDP dùng cho yêu cầu radius accounting (mặcđịnh 1813)" + +#~ msgid "RADIUS authentication port" +#~ msgstr "Cổng xác thực RADIUS" + +#~ msgid "" +#~ "The UDP port number to use for radius authentication requests (default " +#~ "1812)" +#~ msgstr "Số của cổng UDP để yêu cầu xác thực radius (default 1812)" + +#~ msgid "Option radiuscalled" +#~ msgstr "Tùy chọn radiuscalled" + +#~ msgid "RADIUS listen address" +#~ msgstr "Địa chỉ nghe RADIUS" + +#~ msgid "Local interface IP address to use for the radius interface" +#~ msgstr "Địa chỉ IP giao diện địa phương để dùng cho giao diện radius" + +#~ msgid "RADIUS location ID" +#~ msgstr "RADIUS vị tri ID" + +#~ msgid "WISPr Location ID" +#~ msgstr "WISPr vị trí ID" + +#~ msgid "RADIUS location name" +#~ msgstr "Tên vị trí RADIUS" + +#~ msgid "WISPr Location Name" +#~ msgstr "Tên vị trí WISPr" + +#~ msgid "NAS ID" +#~ msgstr "NAS ID" + +#~ msgid "Network access server identifier" +#~ msgstr "Network truy cập server identifier" + +#~ msgid "Option radiusnasip" +#~ msgstr "Lựa chọn radiusnasip" + +#~ msgid "NAS port type" +#~ msgstr "Loại cổng NAS" + +#~ msgid "" +#~ "Value of NAS-Port-Type attribute. Defaults to 19 (Wireless-IEEE-802.11)" +#~ msgstr "" +#~ "Giá trị của NAS-Port-Type attribute. Mặc định tới 19 (Wireless-" +#~ "IEEE-802.11)" + +#~ msgid "Send RADIUS VSA" +#~ msgstr "Gửi RADIUS VSA" + +#~ msgid "Send the ChilliSpot-OriginalURL RADIUS VSA in Access-Request" +#~ msgstr "Gửi ChilliSpot-OriginalURL RADIUS VSA trong yêu cầu truy cập" + +#~ msgid "RADIUS secret" +#~ msgstr "RADIUS bí mật" + +#~ msgid "Radius shared secret for both servers" +#~ msgstr "Radius chia sẻ bí mật cho cả 2 servers" + +#~ msgid "RADIUS server 1" +#~ msgstr "RADIUS server 1" + +#~ msgid "The IP address of radius server 1" +#~ msgstr "Địa chỉ IP của radius server 1" + +#~ msgid "RADIUS server 2" +#~ msgstr "RADIUS server 2" + +#~ msgid "The IP address of radius server 2" +#~ msgstr "Địa chỉ IP của radius server 2" + +#~ msgid "Swap octets" +#~ msgstr "Swap octets" + +#~ msgid "" +#~ "Swap the meaning of \"input octets\" and \"output octets\" as it related " +#~ "to RADIUS attribtues" +#~ msgstr "" +#~ "Hoán ý nghĩa của &quot;input octets&quot; và &quot;output " +#~ "octets&quot; khi nó liên quan tới RADIUS attribtues" + +#~ msgid "Allow WPA guests" +#~ msgstr "Cho phép WPA guests" + +#~ msgid "" +#~ "Allows WPA Guest authentication by sending ChilliSpot-Config=allow-wpa-" +#~ "guests in RADIUS Access-Requests" +#~ msgstr "" +#~ "Cho phép xác thực WPA Guest bằng cách gửi ChilliSpot-Config=allow-wpa-" +#~ "guests trong RADIUS yêu cầu truy cập" + +#~ msgid "Proxy client" +#~ msgstr "Proxy client" + +#~ msgid "" +#~ "IP address from which radius requests are accepted. If omitted the server " +#~ "will not accept radius requests" +#~ msgstr "" +#~ "Địa chỉ IP mà yêu cầu radius được chấp nhận. Nếu bỏ qua server sẽ không " +#~ "chấp nhận yêu cầu radius." + +#~ msgid "Proxy listen address" +#~ msgstr "Proxy listen address" + +#~ msgid "Local interface IP address to use for accepting radius requests" +#~ msgstr "Địa chỉ giao diện IP địa phương dùng để chấp nhận yêu cầu radius" + +#~ msgid "Proxy port" +#~ msgstr "Proxy port" + +#~ msgid "UDP Port to listen to for accepting radius requests" +#~ msgstr "Cổng UDP để listen để chấp nhận yêu cầu radius" + +#~ msgid "Proxy secret" +#~ msgstr "Proxy bí mật" + +#~ msgid "Radius shared secret for clients" +#~ msgstr "Radius chia sẻ bí mật cho các client" + +#~ msgid "UAM configuration" +#~ msgstr "Cấu hình UAM" + +#~ msgid "Unified Configuration Method settings" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#~ msgid "Use Chilli XML" +#~ msgstr "Dùng Chilli XML" + +#~ msgid "Return the so-called Chilli XML along with WISPr XML" +#~ msgstr "Trở về cái gọi là Chilli XML cùng với WISPr XML" + +#~ msgid "Default idle timeout" +#~ msgstr "Mặc định idle timeout" + +#~ msgid "Default idle timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "Mặc định idle timeout trừ khi đặt bởi RADIUS (mặc định tới 0)" + +#~ msgid "Default interim interval" +#~ msgstr "Mặc định interim interval" + +#~ msgid "" +#~ "Default interim-interval for RADIUS accounting unless otherwise set by " +#~ "RADIUS (defaults to 0)" +#~ msgstr "" +#~ "Mặc định interim-interval cho RADIUS accounting trừ khi đặt bởi RADIUS " +#~ "(defaults tới 0)" + +#~ msgid "Default session timeout" +#~ msgstr "Mặc định session timeout" + +#~ msgid "" +#~ "Default session timeout unless otherwise set by RADIUS (defaults to 0)" +#~ msgstr "Mặc định session timeout trừ khi đặt bởi RADIUS (mặc định tới 0)" + +#~ msgid "Inspect DNS traffic" +#~ msgstr "Kiểm tra lưu thông DNS" + +#, fuzzy +#~ msgid "Do not redirect to UAM server" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "" +#~ "Do not return to UAM server on login success, just redirect to original " +#~ "URL" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "Do not do WISPr" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "Do not do any WISPr XML, assume the back-end is doing this instead" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "List of resources the client can access without first authenticating" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "Allow any DNS server" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "Allow any DNS server for unauthenticated clients" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "Allow any IP address" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "" +#~ "Allow clients to use any IP settings they wish by spoofing ARP " +#~ "(experimental)" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "Allowed domains" +#~ msgstr "Tên miền" + +#, fuzzy +#~ msgid "" +#~ "Defines a list of domain names to automatically add to the walled garden" +#~ msgstr "" +#~ "Được sử dụng để thông báo cho khách hàng về tên miền để dùng cho các tra " +#~ "cứu DNS" + +#, fuzzy +#~ msgid "UAM homepage" +#~ msgstr "Tên miền" + +#, fuzzy +#~ msgid "URL of homepage to redirect unauthenticated users to" +#~ msgstr "" +#~ "Được sử dụng để thông báo cho khách hàng về tên miền để dùng cho các tra " +#~ "cứu DNS" + +#, fuzzy +#~ msgid "UAM static content port" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "TCP port to bind to for only serving embedded content" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "UAM listening address" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "IP address to listen to for authentication of clients" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "UAM logout IP" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "" +#~ "Use this IP address to instantly logout a client accessing it (defaults " +#~ "to 1.1.1.1)" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "UAM listening port" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "TCP port to bind to for authenticating clients (default 3990)" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "UAM secret" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "Shared secret between uamserver and chilli" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "UAM server" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "URL of web server to use for authenticating clients" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "UAM user interface" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "" +#~ "An init.d style program to handle local content on the uamuiport web " +#~ "server" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "CGI program" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "" +#~ "Executable to run as a CGI type program (like haserl) for URLs with " +#~ "extension .chi" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "Web content directory" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "Directory where embedded local web content is placed" +#~ msgstr "Thống nhất cấu hình phương pháp cài đặt" + +#, fuzzy +#~ msgid "MAC configuration" +#~ msgstr "Cấu hình RADIUS" + +#, fuzzy +#~ msgid "Configure MAC authentication" +#~ msgstr "Cấu hình RADIUS" + +#, fuzzy +#~ msgid "Allowed MAC addresses" +#~ msgstr "Cấu hình RADIUS" + +#, fuzzy +#~ msgid "List of MAC addresses for which MAC authentication will be performed" +#~ msgstr "Cấu hình RADIUS" + +#, fuzzy +#~ msgid "Authenticate allowed MAC addresses without the use of RADIUS" +#~ msgstr "Cấu hình RADIUS" + +#, fuzzy +#~ msgid "Enable MAC authentification" +#~ msgstr "Cấu hình RADIUS" + +#, fuzzy +#~ msgid "Try to authenticate all users based on their mac address alone" +#~ msgstr "Cấu hình RADIUS" + +#, fuzzy +#~ msgid "Password" +#~ msgstr "Cấu hình RADIUS" + +#, fuzzy +#~ msgid "Password used when performing MAC authentication" +#~ msgstr "Cấu hình RADIUS" + +#, fuzzy +#~ msgid "Suffix" +#~ msgstr "Cấu hình RADIUS" + +#, fuzzy +#~ msgid "coovachilli_macauth_macsuffix_desc" +#~ msgstr "Cấu hình RADIUS" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/zh-cn/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/zh-cn/coovachilli.po new file mode 100644 index 0000000..7ab0032 --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/zh-cn/coovachilli.po @@ -0,0 +1,26 @@ +# coovachilli.pot +# generated from ./applications/luci-coovachilli/luasrc/i18n/coovachilli.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-05 14:32+0200\n" +"Last-Translator: nKsyn \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli 网页认证" + +msgid "Network Configuration" +msgstr "网络配置" + +msgid "RADIUS configuration" +msgstr "RADIUS配置" + +msgid "UAM and MAC Authentication" +msgstr "UAM和MAC认证" diff --git a/feeds/luci/applications/luci-app-coovachilli/po/zh-tw/coovachilli.po b/feeds/luci/applications/luci-app-coovachilli/po/zh-tw/coovachilli.po new file mode 100644 index 0000000..aad8a4d --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/po/zh-tw/coovachilli.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-18 19:49+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CoovaChilli" +msgstr "CoovaChilli服務" + +msgid "Network Configuration" +msgstr "網路設定" + +msgid "RADIUS configuration" +msgstr "RADIUS設定" + +msgid "UAM and MAC Authentication" +msgstr "微軟UAM模組和MAC位指驗證" diff --git a/feeds/luci/applications/luci-app-coovachilli/root/etc/config/coovachilli b/feeds/luci/applications/luci-app-coovachilli/root/etc/config/coovachilli new file mode 100644 index 0000000..0b6be2c --- /dev/null +++ b/feeds/luci/applications/luci-app-coovachilli/root/etc/config/coovachilli @@ -0,0 +1,243 @@ +############################################################################## +# +# Sample CoovaChilli configuration file +# +############################################################################## + +# General settings +config general + + # Enable this flag to include debug information. + option debug 0 + + # Re-read configuration file at this interval. Will also cause new domain + # name lookups to be performed. Value is given in seconds. + option interval 3600 + + # File to store information about the process id of the program. + # The program must have write access to this file/directory. + option pidfile /var/run/chilli.pid + + # Directory to use for nonvolatile storage. + # The program must have write access to this directory. + # This tag is currently ignored + #option statedir ./ + + +# TUN parameters +config tun + + # IP network address of external packet data network + # Used to allocate dynamic IP addresses and set up routing. + # Normally you do not need to uncomment this tag. + option net 192.168.182.0/24 + + # Dynamic IP address pool + # Used to allocate dynamic IP addresses to clients. + # If not set it defaults to the net tag. + # Do not uncomment this tag unless you are an experienced user! + #option dynip 192.168.182.0/24 + + # Static IP address pool + # Used to allocate static IP addresses to clients. + # Do not uncomment this tag unless you are an experienced user! + #option statip 192.168.182.0/24 + + # Primary DNS server. + # Will be suggested to the client. + # If omitted the system default will be used. + # Normally you do not need to uncomment this tag. + #option dns1 172.16.0.5 + + # Secondary DNS server. + # Will be suggested to the client. + # If omitted the system default will be used. + # Normally you do not need to uncomment this tag. + #option dns2 172.16.0.6 + + # Domain name + # Will be suggested to the client. + # Normally you do not need to uncomment this tag. + option domain key.chillispot.org + + # Script executed after network interface has been brought up. + # Executed with the following parameters: + # Normally you do not need to uncomment this tag. + #option ipup /etc/chilli.ipup + + # Script executed after network interface has been taken down. + # Executed with the following parameters: + # Normally you do not need to uncomment this tag. + #option ipdown /etc/chilli.ipdown + + # Script executed after a user has been authenticated. + # Executed with the following parameters: + # + # Normally you do not need to uncomment this tag. + #option conup /etc/chilli.conup + + # Script executed after a user has disconnected. + # Executed with the following parameters: + # + # Normally you do not need to uncomment this tag. + #option condown /etc/chilli.condown + + +# DHCP Parameters +config dhcp + + # Ethernet interface to listen to. + # This is the network interface which is connected to the access points. + # In a typical configuration this tag should be set to eth1. + option dhcpif eth1 + + # Use specified MAC address. + # An address in the range 00:00:5E:00:02:00 - 00:00:5E:FF:FF:FF falls + # within the IANA range of addresses and is not allocated for other + # purposes. + # Normally you do not need to uncomment this tag. + #option dhcpmac 00:00:5E:00:02:00 + + # Time before DHCP lease expires + # Normally you do not need to uncomment this tag. + #option lease 600 + + +# Radius parameters +config radius + + # IP address to listen to + # Normally you do not need to uncomment this tag. + #option radiuslisten 127.0.0.1 + + # IP address of radius server 1 + # For most installations you need to modify this tag. + option radiusserver1 rad01.chillispot.org + + # IP address of radius server 2 + # If you have only one radius server you should set radiusserver2 to the + # same value as radiusserver1. + # For most installations you need to modify this tag. + option radiusserver2 rad02.chillispot.org + + # Radius authentication port + # The UDP port number to use for radius authentication requests. + # The same port number is used for both radiusserver1 and radiusserver2. + # Normally you do not need to uncomment this tag. + #option radiusauthport 1812 + + # Radius accounting port + # The UDP port number to use for radius accounting requests. + # The same port number is used for both radiusserver1 and radiusserver2. + # Normally you do not need to uncomment this tag. + #option radiusacctport 1813 + + # Radius shared secret for both servers + # For all installations you should modify this tag. + #option radiussecret testing123 + + # Radius NAS-Identifier + # Normally you do not need to uncomment this tag. + #option radiusnasid nas01 + + # Radius NAS-IP-Address + # Normally you do not need to uncomment this tag. + #option radiusnasip 127.0.0.1 + + # Radius Called-Station-ID + # Normally you do not need to uncomment this tag. + #option radiuscalled 00133300 + + # WISPr Location ID. Should be in the format: isocc=, + # cc=,ac=,network= + # Normally you do not need to uncomment this tag. + #option radiuslocationid isocc=us,cc=1,ac=408,network=ACMEWISP_NewarkAirport + + # WISPr Location Name. Should be in the format: + # , + # Normally you do not need to uncomment this tag. + #option radiuslocationname ACMEWISP,Gate_14_Terminal_C_of_Newark_Airport + + +# Radius proxy parameters +config proxy + + # IP address to listen to + # Normally you do not need to uncomment this tag. + #option proxylisten 10.0.0.1 + + # UDP port to listen to. + # If not specified a port will be selected by the system + # Normally you do not need to uncomment this tag. + #option proxyport 1645 + + # Client(s) from which we accept radius requests + # Normally you do not need to uncomment this tag. + #option proxyclient 10.0.0.1/24 + + # Radius proxy shared secret for all clients + # If not specified defaults to radiussecret + # Normally you do not need to uncomment this tag. + #option proxysecret testing123 + + +# Universal access method (UAM) parameters +config uam + + # URL of web server handling authentication. + option uamserver https://radius.chillispot.org/hotspotlogin + + # URL of welcome homepage. + # Unauthenticated users will be redirected to this URL. If not specified + # users will be redirected to the uamserver instead. + # Normally you do not need to uncomment this tag. + #option uamhomepage http://192.168.182.1/welcome.html + + # Shared between chilli and authentication web server + #option uamsecret ht2eb8ej6s4et3rg1ulp + + # IP address to listen to for authentication requests + # Do not uncomment this tag unless you are an experienced user! + #option uamlisten 192.168.182.1 + + # TCP port to listen to for authentication requests + # Do not uncomment this tag unless you are an experienced user! + #option uamport 3990 + + # Comma separated list of domain names, IP addresses or network segments + # the client can access without first authenticating. + # It is possible to specify this tag multiple times. + # Normally you do not need to uncomment this tag. + #list uamallowed www.chillispot.org + #list uamallowed 10.11.12.0/24 + + # If this flag is given unauthenticated users are allowed to use + # any DNS server. + # Normally you do not need to uncomment this tag. + #uamanydns + + +# MAC authentication +config macauth + + # If this flag is given users will be authenticated only on their MAC + # address. + # Normally you do not need to enable this flag. + option macauth 0 + + # List of MAC addresses. + # The MAC addresses specified in this list will be authenticated only on + # their MAC address. + # This tag is ignored if the macauth tag is given. + # It is possible to specify this tag multiple times. + # Normally you do not need to uncomment this tag. + #list macallowed 00-0A-5E-AC-BE-51 + #list macallowed 00-30-1B-3C-32-E9 + + # Password to use for MAC authentication. + # Normally you do not need to uncomment this tag. + #option macpasswd password + + # Suffix to add to MAC address in order to form the username. + # Normally you do not need to uncomment this tag. + #option macsuffix suffix diff --git a/feeds/luci/applications/luci-app-ddns/Makefile b/feeds/luci/applications/luci-app-ddns/Makefile new file mode 100644 index 0000000..88c905a --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/Makefile @@ -0,0 +1,38 @@ +# +# Copyright 2008 Steven Barth +# Copyright 2008 Jo-Philipp Wich +# Copyright 2013 Manuel Munz +# Copyright 2014-2016 Christian Schoenebeck +# +# This is free software, licensed under the Apache License, Version 2.0 + +include $(TOPDIR)/rules.mk + +# PKG_NAME:=luci-app-ddns + +# Version == major.minor.patch +# increase on new functionality (minor) or patches (patch) +PKG_VERSION:=2.4.8 + +# Release == build +# increase on changes of translation files +PKG_RELEASE:=1 + +PKG_LICENSE:=Apache-2.0 +PKG_MAINTAINER:=Christian Schoenebeck + +# LuCI specific settings +LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts) +LUCI_DEPENDS:=+luci-mod-admin-full +ddns-scripts +# LUCI_PKGARCH:=all + +define Package/$(PKG_NAME)/config +# shown in make menuconfig +help + $(LUCI_TITLE) + Version: $(PKG_VERSION)-$(PKG_RELEASE) +endef + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/controller/ddns.lua b/feeds/luci/applications/luci-app-ddns/luasrc/controller/ddns.lua new file mode 100755 index 0000000..63bb8bf --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/controller/ddns.lua @@ -0,0 +1,315 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Copyright 2013 Manuel Munz +-- Copyright 2014-2016 Christian Schoenebeck +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.ddns", package.seeall) + +local NX = require "nixio" +local NXFS = require "nixio.fs" +local DISP = require "luci.dispatcher" +local HTTP = require "luci.http" +local I18N = require "luci.i18n" -- not globally avalible here +local IPKG = require "luci.model.ipkg" +local SYS = require "luci.sys" +local UCI = require "luci.model.uci" +local UTIL = require "luci.util" +local DDNS = require "luci.tools.ddns" -- ddns multiused functions + +luci_helper = "/usr/lib/ddns/dynamic_dns_lucihelper.sh" + +local srv_name = "ddns-scripts" +local srv_ver_min = "2.7.6" -- minimum version of service required +local srv_ver_cmd = luci_helper .. [[ -V | awk {'print $2'}]] +local app_name = "luci-app-ddns" +local app_title = "Dynamic DNS" +local app_version = "2.4.8-1" + +function index() + local nxfs = require "nixio.fs" -- global definitions not available + local sys = require "luci.sys" -- in function index() + local ddns = require "luci.tools.ddns" -- ddns multiused functions + local muci = require "luci.model.uci" + + -- no config create an empty one + if not nxfs.access("/etc/config/ddns") then + nxfs.writefile("/etc/config/ddns", "") + end + + -- preset new option "lookup_host" if not already defined + local uci = muci.cursor() + local commit = false + uci:foreach("ddns", "service", function (s) + if not s["lookup_host"] and s["domain"] then + uci:set("ddns", s[".name"], "lookup_host", s["domain"]) + commit = true + end + end) + if commit then uci:commit("ddns") end + uci:unload("ddns") + + entry( {"admin", "services", "ddns"}, cbi("ddns/overview"), _("Dynamic DNS"), 59) + entry( {"admin", "services", "ddns", "detail"}, cbi("ddns/detail"), nil ).leaf = true + entry( {"admin", "services", "ddns", "hints"}, cbi("ddns/hints", + {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}), nil ).leaf = true + entry( {"admin", "services", "ddns", "global"}, cbi("ddns/global"), nil ).leaf = true + entry( {"admin", "services", "ddns", "logview"}, call("logread") ).leaf = true + entry( {"admin", "services", "ddns", "startstop"}, post("startstop") ).leaf = true + entry( {"admin", "services", "ddns", "status"}, call("status") ).leaf = true +end + +-- Application specific information functions +function app_description() + return I18N.translate("Dynamic DNS allows that your router can be reached with " .. + "a fixed hostname while having a dynamically changing IP address.") + .. [[
]] + .. I18N.translate("OpenWrt Wiki") .. ": " + .. [[]] + .. I18N.translate("DDNS Client Documentation") .. [[]] + .. " --- " + .. [[]] + .. I18N.translate("DDNS Client Configuration") .. [[]] +end +function app_title_back() + return [[]] + .. I18N.translate(app_title) + .. [[]] +end + +-- Standardized application/service functions +function app_title_main() + return [[]] + .. I18N.translate(app_title) + .. [[]] +end +function service_version() + local ver = nil + + ver = UTIL.exec(srv_ver_cmd) + if #ver > 0 then return ver end + + IPKG.list_installed(srv_name, function(n, v, d) + if v and (#v > 0) then ver = v end + end + ) + return ver +end +function service_ok() + return IPKG.compare_versions((service_version() or "0"), ">=", srv_ver_min) +end + +-- internal function to read all sections status and return data array +local function _get_status() + local uci = UCI.cursor() + local service = SYS.init.enabled("ddns") and 1 or 0 + local url_start = DISP.build_url("admin", "system", "startup") + local data = {} -- Array to transfer data to javascript + + data[#data+1] = { + enabled = service, -- service enabled + url_up = url_start, -- link to enable DDS (System-Startup) + } + + uci:foreach("ddns", "service", function (s) + + -- Get section we are looking at + -- and enabled state + local section = s[".name"] + local enabled = tonumber(s["enabled"]) or 0 + local datelast = "_empty_" -- formatted date of last update + local datenext = "_empty_" -- formatted date of next update + + -- get force seconds + local force_seconds = DDNS.calc_seconds( + tonumber(s["force_interval"]) or 72 , + s["force_unit"] or "hours" ) + -- get/validate pid and last update + local pid = DDNS.get_pid(section) + local uptime = SYS.uptime() + local lasttime = DDNS.get_lastupd(section) + if lasttime > uptime then -- /var might not be linked to /tmp + lasttime = 0 -- and/or not cleared on reboot + end + + -- no last update happen + if lasttime == 0 then + datelast = "_never_" + + -- we read last update + else + -- calc last update + -- sys.epoch - sys uptime + lastupdate(uptime) + local epoch = os.time() - uptime + lasttime + -- use linux date to convert epoch + datelast = DDNS.epoch2date(epoch) + -- calc and fill next update + datenext = DDNS.epoch2date(epoch + force_seconds) + end + + -- process running but update needs to happen + -- problems if force_seconds > uptime + force_seconds = (force_seconds > uptime) and uptime or force_seconds + if pid > 0 and ( lasttime + force_seconds - uptime ) <= 0 then + datenext = "_verify_" + + -- run once + elseif force_seconds == 0 then + datenext = "_runonce_" + + -- no process running and NOT enabled + elseif pid == 0 and enabled == 0 then + datenext = "_disabled_" + + -- no process running and enabled + elseif pid == 0 and enabled ~= 0 then + datenext = "_stopped_" + end + + -- get/set monitored interface and IP version + local iface = s["interface"] or "_nonet_" + local use_ipv6 = tonumber(s["use_ipv6"]) or 0 + if iface ~= "_nonet_" then + local ipv = (use_ipv6 == 1) and "IPv6" or "IPv4" + iface = ipv .. " / " .. iface + end + + -- try to get registered IP + local lookup_host = s["lookup_host"] or "_nolookup_" + local dnsserver = s["dns_server"] or "" + local force_ipversion = tonumber(s["force_ipversion"] or 0) + local force_dnstcp = tonumber(s["force_dnstcp"] or 0) + local is_glue = tonumber(s["is_glue"] or 0) + local command = luci_helper .. [[ -]] + if (use_ipv6 == 1) then command = command .. [[6]] end + if (force_ipversion == 1) then command = command .. [[f]] end + if (force_dnstcp == 1) then command = command .. [[t]] end + if (is_glue == 1) then command = command .. [[g]] end + command = command .. [[l ]] .. lookup_host + if (#dnsserver > 0) then command = command .. [[ -d ]] .. dnsserver end + command = command .. [[ -- get_registered_ip]] + local reg_ip = SYS.exec(command) + if reg_ip == "" then + reg_ip = "_nodata_" + end + + -- fill transfer array + data[#data+1] = { + section = section, + enabled = enabled, + iface = iface, + lookup = lookup_host, + reg_ip = reg_ip, + pid = pid, + datelast = datelast, + datenext = datenext + } + end) + + uci:unload("ddns") + return data +end + +-- called by XHR.get from detail_logview.htm +function logread(section) + -- read application settings + local uci = UCI.cursor() + local ldir = uci:get("ddns", "global", "ddns_logdir") or "/var/log/ddns" + local lfile = ldir .. "/" .. section .. ".log" + local ldata = NXFS.readfile(lfile) + + if not ldata or #ldata == 0 then + ldata="_nodata_" + end + uci:unload("ddns") + HTTP.write(ldata) +end + +-- called by XHR.get from overview_status.htm +function startstop(section, enabled) + local uci = UCI.cursor() + local pid = DDNS.get_pid(section) + local data = {} -- Array to transfer data to javascript + + -- if process running we want to stop and return + if pid > 0 then + local tmp = NX.kill(pid, 15) -- terminate + NX.nanosleep(2) -- 2 second "show time" + -- status changed so return full status + data = _get_status() + HTTP.prepare_content("application/json") + HTTP.write_json(data) + return + end + + -- read uncommitted changes + -- we don't save and commit data from other section or other options + -- only enabled will be done + local exec = true + local changed = uci:changes("ddns") + for k_config, v_section in pairs(changed) do + -- security check because uci.changes only gets our config + if k_config ~= "ddns" then + exec = false + break + end + for k_section, v_option in pairs(v_section) do + -- check if only section of button was changed + if k_section ~= section then + exec = false + break + end + for k_option, v_value in pairs(v_option) do + -- check if only enabled was changed + if k_option ~= "enabled" then + exec = false + break + end + end + end + end + + -- we can not execute because other + -- uncommitted changes pending, so exit here + if not exec then + HTTP.write("_uncommitted_") + return + end + + -- save enable state + uci:set("ddns", section, "enabled", ( (enabled == "true") and "1" or "0") ) + uci:save("ddns") + uci:commit("ddns") + uci:unload("ddns") + + -- start ddns-updater for section + local command = luci_helper .. [[ -S ]] .. section .. [[ -- start]] + os.execute(command) + NX.nanosleep(3) -- 3 seconds "show time" + + -- status changed so return full status + data = _get_status() + HTTP.prepare_content("application/json") + HTTP.write_json(data) +end + +-- called by XHR.poll from overview_status.htm +function status() + local data = _get_status() + HTTP.prepare_content("application/json") + HTTP.write_json(data) +end + diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua b/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua new file mode 100644 index 0000000..a8f4cbf --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua @@ -0,0 +1,1480 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Copyright 2013 Manuel Munz +-- Copyright 2014-2016 Christian Schoenebeck +-- Licensed to the public under the Apache License 2.0. + +local NX = require "nixio" +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local UTIL = require "luci.util" +local HTTP = require "luci.http" +local DISP = require "luci.dispatcher" +local WADM = require "luci.tools.webadmin" +local DTYP = require "luci.cbi.datatypes" +local CTRL = require "luci.controller.ddns" -- this application's controller +local DDNS = require "luci.tools.ddns" -- ddns multiused functions + +-- takeover arguments -- ####################################################### +local section = arg[1] + +-- html constants -- ########################################################### +local font_red = "" +local font_off = "" +local bold_on = "" +local bold_off = "" + +-- error text constants -- ##################################################### +local err_ipv6_plain = translate("IPv6 not supported") .. " - " .. + translate("please select 'IPv4' address version") +local err_ipv6_basic = bold_on .. + font_red .. + translate("IPv6 not supported") .. + font_off .. + "
" .. translate("please select 'IPv4' address version") .. + bold_off +local err_ipv6_other = bold_on .. + font_red .. + translate("IPv6 not supported") .. + font_off .. + "
" .. translate("please select 'IPv4' address version in") .. " " .. + [[]] .. + translate("Basic Settings") .. + [[]] .. + bold_off + +function err_tab_basic(self) + return translate("Basic Settings") .. " - " .. self.title .. ": " +end +function err_tab_adv(self) + return translate("Advanced Settings") .. " - " .. self.title .. ": " +end +function err_tab_timer(self) + return translate("Timer Settings") .. " - " .. self.title .. ": " +end + +-- read services/services_ipv6 files -- ######################################## +local services4 = { } -- IPv4 -- +local fd4 = io.open("/etc/ddns/services", "r") +if fd4 then + local ln, s, t + repeat + ln = fd4:read("*l") + s = ln and ln:match('^%s*".*') -- only handle lines beginning with " + s = s and s:gsub('"','') -- remove " + t = s and UTIL.split(s,"(%s+)",nil,true) -- split on whitespaces + if t then services4[t[1]]=t[2] end + until not ln + fd4:close() +end + +local services6 = { } -- IPv6 -- +local fd6 = io.open("/etc/ddns/services_ipv6", "r") +if fd6 then + local ln, s, t + repeat + ln = fd6:read("*l") + s = ln and ln:match('^%s*".*') -- only handle lines beginning with " + s = s and s:gsub('"','') -- remove " + t = s and UTIL.split(s,"(%s+)",nil,true) -- split on whitespaces + if t then services6[t[1]]=t[2] end + until not ln + fd6:close() +end + +-- multi-used functions -- #################################################### +-- function to verify settings around ip_source +-- will use dynamic_dns_lucihelper to check if +-- local IP can be read +local function _verify_ip_source() + -- section is globally defined here be calling agrument (see above) + local _arg + + local _ipv6 = usev6:formvalue(section) + local _source = (_ipv6 == "1") + and src6:formvalue(section) + or src4:formvalue(section) + + local command = CTRL.luci_helper .. [[ -]] + if (_ipv6 == "1") then command = command .. [[6]] end + + if _source == "network" then + _arg = (_ipv6 == "1") + and ipn6:formvalue(section) + or ipn4:formvalue(section) + command = command .. [[n ]] .. _arg + elseif _source == "web" then + _arg = (_ipv6 == "1") + and iurl6:formvalue(section) + or iurl4:formvalue(section) + command = command .. [[u ]] .. _arg + + -- proxy only needed for checking url + _arg = (pxy) and pxy:formvalue(section) or "" + if (_arg and #_arg > 0) then + command = command .. [[ -p ]] .. _arg + end + elseif _source == "interface" then + command = command .. [[i ]] .. ipi:formvalue(section) + elseif _source == "script" then + command = command .. [[s ]] .. ips:formvalue(section) + end + command = command .. [[ -- get_local_ip]] + return (SYS.call(command) == 0) +end + +-- function to check if option is used inside url or script +-- return -1 on error, 0 NOT required, 1 required +local function _option_used(option, urlscript) + local surl -- search string for url + local ssh -- search string for script + local required -- option used inside url or script + + if option == "domain" then surl, ssh = '%[DOMAIN%]', '%$domain' + elseif option == "username" then surl, ssh = '%[USERNAME%]', '%$username' + elseif option == "password" then surl, ssh = '%[PASSWORD%]', '%$password' + elseif option == "param_enc" then surl, ssh = '%[PARAMENC%]', '%$param_enc' + elseif option == "param_opt" then surl, ssh = '%[PARAMOPT%]', '%$param_opt' + else + error("undefined option") + return -1 -- return on error + end + + local required = false + -- handle url + if urlscript:find('http') then + required = ( urlscript:find(surl) ) + -- handle script + else + if not urlscript:find("/") then + -- might be inside ddns-scripts directory + urlscript = "/usr/lib/ddns/" .. urlscript + end + -- problem with script exit here + if not NXFS.access(urlscript) then return -1 end + + local f = io.input(urlscript) + -- still problem with script exit here + if not f then return -1 end + for l in f:lines() do + repeat + if l:find('^#') then break end -- continue on comment lines + required = ( l:find(surl) or l:find(ssh) ) + until true + if required then break end + end + f:close() + end + return (required and 1 or 0) +end + +-- function to verify if option is valid +local function _option_validate(self, value) + -- section is globally defined here be calling agrument (see above) + local fusev6 = usev6:formvalue(section) or "0" + local fsvc4 = svc4:formvalue(section) or "-" + local fsvc6 = svc6:formvalue(section) or "-" + local urlsh, used + + -- IP-Version dependent custom service selected + if (fusev6 == "0" and fsvc4 == "-") or + (fusev6 == "1" and fsvc6 == "-") then + -- read custom url + urlsh = uurl:formvalue(section) or "" + -- no url then read custom script + if (#urlsh == 0) then + urlsh = ush:formvalue(section) or "" + end + -- IPv4 read from services4 table + elseif (fusev6 == "0") then + urlsh = services4[fsvc4] or "" + -- IPv6 read from services6 table + else + urlsh = services6[fsvc6] or "" + end + -- problem with url or script exit here + -- error handled somewhere else + if (#urlsh == 0) then return "" end + + used = _option_used(self.option, urlsh) + -- on error or not used return empty sting + if used < 1 then return "" end + -- needed but no data then return error + if not value or (#value == 0) then + return nil, err_tab_basic(self) .. translate("missing / required") + end + return value +end + +-- cbi-map definition -- ####################################################### +local m = Map("ddns") +m.title = CTRL.app_title_back() +m.description = CTRL.app_description() +m.redirect = DISP.build_url("admin", "services", "ddns") + +m.on_after_commit = function(self) + if self.changed then -- changes ? + local pid = DDNS.get_pid(section) + if pid > 0 then -- running ? + local tmp = NX.kill(pid, 1) -- send SIGHUP + end + end +end + +-- provider switch was requested, save and reload page +if m:formvalue("cbid.ddns.%s._switch" % section) then -- section == arg[1] + local fsvc + local fusev6 = m:formvalue("cbid.ddns.%s.use_ipv6" % section) or "0" + if fusev6 == "1" then + fsvc = m:formvalue("cbid.ddns.%s.ipv6_service_name" % section) or "" + else + fsvc = m:formvalue("cbid.ddns.%s.ipv4_service_name" % section) or "" + end + + if fusev6 ~= (m:get(section, "use_ipv6") or "0") then -- IPv6 was changed + m:set(section, "use_ipv6", fusev6) -- save it + end + + if fsvc ~= "-" then -- NOT "custom" + m:set(section, "service_name", fsvc) -- save it + else -- else + m:del(section, "service_name") -- delete it + end + m.uci:save(m.config) + + -- reload page + HTTP.redirect( DISP.build_url("admin", "services", "ddns", "detail", section) ) + return +end + +-- read application settings -- ################################################ +-- log directory +local logdir = m.uci:get(m.config, "global", "ddns_logdir") or "/var/log/ddns" + +-- cbi-section definition -- ################################################### +local ns = m:section( NamedSection, section, "service", + translate("Details for") .. ([[: %s]] % section), + translate("Configure here the details for selected Dynamic DNS service.") ) +ns.instance = section -- arg [1] +ns:tab("basic", translate("Basic Settings"), nil ) +ns:tab("advanced", translate("Advanced Settings"), nil ) +ns:tab("timer", translate("Timer Settings"), nil ) +ns:tab("logview", translate("Log File Viewer"), nil ) + +-- TAB: Basic ##################################################################################### +-- enabled -- ################################################################# +en = ns:taboption("basic", Flag, "enabled", + translate("Enabled"), + translate("If this service section is disabled it could not be started." .. "
" .. + "Neither from LuCI interface nor from console") ) +en.orientation = "horizontal" + +-- IPv4/IPv6 - lookup_host -- ################################################# +luh = ns:taboption("basic", Value, "lookup_host", + translate("Lookup Hostname"), + translate("Hostname/FQDN to validate, if IP update happen or necessary") ) +luh.rmempty = false +luh.placeholder = "myhost.example.com" +function luh.validate(self, value) + if not value + or not (#value > 0) + or not DTYP.hostname(value) then + return nil, err_tab_basic(self) .. translate("invalid FQDN / required - Sample") .. ": 'myhost.example.com'" + else + return UTIL.trim(value) + end +end +function luh.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- use_ipv6 -- ################################################################ +usev6 = ns:taboption("basic", ListValue, "use_ipv6", + translate("IP address version"), + translate("Defines which IP address 'IPv4/IPv6' is send to the DDNS provider") ) +usev6.widget = "radio" +usev6.default = "0" +usev6:value("0", translate("IPv4-Address") ) +function usev6.cfgvalue(self, section) + local value = AbstractValue.cfgvalue(self, section) or "0" + if DDNS.has_ipv6 or (value == "1" and not DDNS.has_ipv6) then + self:value("1", translate("IPv6-Address") ) + end + if value == "1" and not DDNS.has_ipv6 then + self.description = err_ipv6_basic + end + return value +end +function usev6.validate(self, value) + if (value == "1" and DDNS.has_ipv6) or value == "0" then + return value + end + return nil, err_tab_basic(self) .. err_ipv6_plain +end +function usev6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4 - service_name -- ##################################################### +svc4 = ns:taboption("basic", ListValue, "ipv4_service_name", + translate("DDNS Service provider") .. " [IPv4]" ) +svc4.default = "-" +svc4:depends("use_ipv6", "0") -- only show on IPv4 +function svc4.cfgvalue(self, section) + local v = DDNS.read_value(self, section, "service_name") + if v and (#v > 0) then + for s, u in UTIL.kspairs(services4) do + if v == s then return v end + end + end + return "-" +end +function svc4.validate(self, value) + if usev6:formvalue(section) ~= "1" then -- do only on IPv4 + return value + else + return "" -- suppress validate error + end +end +function svc4.write(self, section, value) + if usev6:formvalue(section) ~= "1" then -- do only IPv4 here + self.map:del(section, self.option) -- to be shure + if value ~= "-" then -- and write "service_name + self.map:del(section, "update_url") -- delete update_url + self.map:del(section, "update_script") -- delete update_script + return self.map:set(section, "service_name", value) + else + return self.map:del(section, "service_name") + end + end +end +function svc4.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv6 - service_name -- ##################################################### +svc6 = ns:taboption("basic", ListValue, "ipv6_service_name", + translate("DDNS Service provider") .. " [IPv6]" ) +svc6.default = "-" +svc6:depends("use_ipv6", "1") -- only show on IPv6 +if not DDNS.has_ipv6 then + svc6.description = err_ipv6_basic +end +function svc6.cfgvalue(self, section) + local v = DDNS.read_value(self, section, "service_name") + if v and (#v > 0) then + for s, u in UTIL.kspairs(services4) do + if v == s then return v end + end + end + return "-" +end +function svc6.validate(self, value) + if usev6:formvalue(section) == "1" then -- do only on IPv6 + if DDNS.has_ipv6 then return value end + return nil, err_tab_basic(self) .. err_ipv6_plain + else + return "" -- suppress validate error + end +end +function svc6.write(self, section, value) + if usev6:formvalue(section) == "1" then -- do only when IPv6 + self.map:del(section, self.option) -- delete "ipv6_service_name" helper + if value ~= "-" then -- and write "service_name + self.map:del(section, "update_url") -- delete update_url + self.map:del(section, "update_script") -- delete update_script + return self.map:set(section, "service_name", value) + else + return self.map:del(section, "service_name") + end + end +end +function svc6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4/IPv6 - change Provider -- ############################################# +svs = ns:taboption("basic", Button, "_switch") +svs.title = translate("Really change DDNS provider?") +svs.inputtitle = translate("Change provider") +svs.inputstyle = "apply" + +-- IPv4/IPv6 - update_url -- ################################################## +uurl = ns:taboption("basic", Value, "update_url", + translate("Custom update-URL"), + translate("Update URL to be used for updating your DDNS Provider." .. "
" .. + "Follow instructions you will find on their WEB page.") ) +function uurl.validate(self, value) + local fush = ush:formvalue(section) + local fusev6 = usev6:formvalue(section) + + if (fusev6 ~= "1" and svc4:formvalue(section) ~= "-") or + (fusev6 == "1" and svc6:formvalue(section) ~= "-") then + return "" -- suppress validate error + elseif not value or (#value == 0) then + if not fush or (#fush == 0) then + return nil, err_tab_basic(self) .. translate("missing / required") + else + return "" -- suppress validate error / update_script is given + end + elseif (#fush > 0) then + return nil, err_tab_basic(self) .. translate("either url or script could be set") + end + + local url = DDNS.parse_url(value) + if not url.scheme == "http" then + return nil, err_tab_basic(self) .. translate("must start with 'http://'") + elseif not url.query then + return nil, err_tab_basic(self) .. " " .. translate("missing / required") + elseif not url.host then + return nil, err_tab_basic(self) .. " " .. translate("missing / required") + elseif SYS.call([[nslookup ]] .. url.host .. [[ >/dev/null 2>&1]]) ~= 0 then + return nil, err_tab_basic(self) .. translate("can not resolve host: ") .. url.host + end + + return value +end +function uurl.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4/IPv6 - update_script -- ############################################### +ush = ns:taboption("basic", Value, "update_script", + translate("Custom update-script"), + translate("Custom update script to be used for updating your DDNS Provider.") ) +function ush.validate(self, value) + local fuurl = uurl:formvalue(section) + local fusev6 = usev6:formvalue(section) + + if (fusev6 ~= "1" and svc4:formvalue(section) ~= "-") or + (fusev6 == "1" and svc6:formvalue(section) ~= "-") then + return "" -- suppress validate error + elseif not value or (#value == 0) then + if not fuurl or (#fuurl == 0) then + return nil, err_tab_basic(self) .. translate("missing / required") + else + return "" -- suppress validate error / update_url is given + end + elseif (#fuurl > 0) then + return nil, err_tab_basic(self) .. translate("either url or script could be set") + elseif not NXFS.access(value) then + return nil, err_tab_basic(self) .. translate("File not found") + end + return value +end +function ush.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4/IPv6 - domain -- ###################################################### +dom = ns:taboption("basic", Value, "domain", + translate("Domain"), + translate("Replaces [DOMAIN] in Update-URL") ) +dom.placeholder = "myhost.example.com" +function dom.validate(self, value) + return _option_validate(self, value) +end +function dom.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4/IPv6 - username -- #################################################### +user = ns:taboption("basic", Value, "username", + translate("Username"), + translate("Replaces [USERNAME] in Update-URL (URL-encoded)") ) +function user.validate(self, value) + return _option_validate(self, value) +end +function user.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4/IPv6 - password -- #################################################### +pw = ns:taboption("basic", Value, "password", + translate("Password"), + translate("Replaces [PASSWORD] in Update-URL (URL-encoded)") ) +pw.password = true +function pw.validate(self, value) + return _option_validate(self, value) +end +function pw.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4/IPv6 - param_enc -- ################################################### +pe = ns:taboption("basic", Value, "param_enc", + translate("Optional Encoded Parameter"), + translate("Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)") ) +function pe.validate(self, value) + return _option_validate(self, value) +end +function pe.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4/IPv6 - param_enc -- ################################################### +po = ns:taboption("basic", Value, "param_opt", + translate("Optional Parameter"), + translate("Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)") ) +function po.validate(self, value) + return _option_validate(self, value) +end +function po.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- handled service dependent show/display -- ################################## +-- IPv4 -- +local cv4 = svc4:cfgvalue(section) +if cv4 ~= "-" then + svs:depends ("ipv4_service_name", "-" ) -- show only if "-" + ush:depends ("ipv4_service_name", "?") + uurl:depends("ipv4_service_name", "?") +else + uurl:depends("ipv4_service_name", "-") + ush:depends ("ipv4_service_name", "-") + dom:depends("ipv4_service_name", "-" ) + user:depends("ipv4_service_name", "-" ) + pw:depends("ipv4_service_name", "-" ) + pe:depends("ipv4_service_name", "-" ) + po:depends("ipv4_service_name", "-" ) +end +for s, u in UTIL.kspairs(services4) do + svc4:value(s) -- fill DropDown-List + if cv4 ~= s then + svs:depends("ipv4_service_name", s ) + else + dom:depends ("ipv4_service_name", ((_option_used(dom.option, u) == 1) and s or "?") ) + user:depends("ipv4_service_name", ((_option_used(user.option, u) == 1) and s or "?") ) + pw:depends ("ipv4_service_name", ((_option_used(pw.option, u) == 1) and s or "?") ) + pe:depends ("ipv4_service_name", ((_option_used(pe.option, u) == 1) and s or "?") ) + po:depends ("ipv4_service_name", ((_option_used(po.option, u) == 1) and s or "?") ) + end +end +svc4:value("-", translate("-- custom --") ) + +-- IPv6 -- +local cv6 = svc6:cfgvalue(section) +if cv6 ~= "-" then + svs:depends ("ipv6_service_name", "-" ) + uurl:depends("ipv6_service_name", "?") + ush:depends ("ipv6_service_name", "?") +else + uurl:depends("ipv6_service_name", "-") + ush:depends ("ipv6_service_name", "-") + dom:depends("ipv6_service_name", "-" ) + user:depends("ipv6_service_name", "-" ) + pw:depends("ipv6_service_name", "-" ) + pe:depends("ipv6_service_name", "-" ) + po:depends("ipv6_service_name", "-" ) +end +for s, u in UTIL.kspairs(services6) do + svc6:value(s) -- fill DropDown-List + if cv6 ~= s then + svs:depends("ipv6_service_name", s ) + else + dom:depends ("ipv6_service_name", ((_option_used(dom.option, u) == 1) and s or "?") ) + user:depends("ipv6_service_name", ((_option_used(user.option, u) == 1) and s or "?") ) + pw:depends ("ipv6_service_name", ((_option_used(pw.option, u) == 1) and s or "?") ) + pe:depends ("ipv6_service_name", ((_option_used(pe.option, u) == 1) and s or "?") ) + po:depends ("ipv6_service_name", ((_option_used(po.option, u) == 1) and s or "?") ) + end +end +svc6:value("-", translate("-- custom --") ) + +-- IPv4/IPv6 - use_https -- ################################################### +if DDNS.has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then + https = ns:taboption("basic", Flag, "use_https", + translate("Use HTTP Secure") ) + https.orientation = "horizontal" + function https.cfgvalue(self, section) + local value = AbstractValue.cfgvalue(self, section) + if not DDNS.has_ssl and value == "1" then + self.description = bold_on .. font_red .. + translate("HTTPS not supported") .. font_off .. "
" .. + translate("please disable") .. " !" .. bold_off + else + self.description = translate("Enable secure communication with DDNS provider") + end + return value + end + function https.validate(self, value) + if (value == "1" and DDNS.has_ssl ) or value == "0" then return value end + return nil, err_tab_basic(self) .. translate("HTTPS not supported") .. " !" + end + function https.write(self, section, value) + if value == "1" then + return self.map:set(section, self.option, value) + else + self.map:del(section, "cacert") + return self.map:del(section, self.option) + end + end +end + +-- IPv4/IPv6 - cacert -- ###################################################### +if DDNS.has_ssl then + cert = ns:taboption("basic", Value, "cacert", + translate("Path to CA-Certificate"), + translate("directory or path/file") .. "
" .. + translate("or") .. bold_on .. " IGNORE " .. bold_off .. + translate("to run HTTPS without verification of server certificates (insecure)") ) + cert:depends("use_https", "1") + cert.placeholder = "/etc/ssl/certs" + cert.forcewrite = true + function cert.validate(self, value) + if https:formvalue(section) ~= "1" then + return "" -- suppress validate error if NOT https + end + if value then -- otherwise errors in datatype check + if DTYP.directory(value) + or DTYP.file(value) + or (value == "IGNORE") + or (#value == 0) then + return value + end + end + return nil, err_tab_basic(self) .. + translate("file or directory not found or not 'IGNORE'") .. " !" + end + function cert.parse(self, section, novld) + DDNS.value_parse(self, section, novld) + end +end + +-- TAB: Advanced ################################################################################# +-- IPv4 - ip_source -- ######################################################## +src4 = ns:taboption("advanced", ListValue, "ipv4_source", + translate("IP address source") .. " [IPv4]", + translate("Defines the source to read systems IPv4-Address from, that will be send to the DDNS provider") ) +src4:depends("use_ipv6", "0") -- IPv4 selected +src4.default = "network" +src4:value("network", translate("Network")) +src4:value("web", translate("URL")) +src4:value("interface", translate("Interface")) +src4:value("script", translate("Script")) +function src4.cfgvalue(self, section) + return DDNS.read_value(self, section, "ip_source") +end +function src4.validate(self, value) + if usev6:formvalue(section) == "1" then + return "" -- ignore on IPv6 selected + elseif not _verify_ip_source() then + return nil, err_tab_adv(self) .. + translate("can not detect local IP. Please select a different Source combination") + else + return value + end +end +function src4.write(self, section, value) + if usev6:formvalue(section) == "1" then + return true -- ignore on IPv6 selected + elseif value == "network" then + self.map:del(section, "ip_url") -- delete not need parameters + self.map:del(section, "ip_interface") + self.map:del(section, "ip_script") + elseif value == "web" then + self.map:del(section, "ip_network") -- delete not need parameters + self.map:del(section, "ip_interface") + self.map:del(section, "ip_script") + elseif value == "interface" then + self.map:del(section, "ip_network") -- delete not need parameters + self.map:del(section, "ip_url") + self.map:del(section, "ip_script") + elseif value == "script" then + self.map:del(section, "ip_network") + self.map:del(section, "ip_url") -- delete not need parameters + self.map:del(section, "ip_interface") + end + self.map:del(section, self.option) -- delete "ipv4_source" helper + return self.map:set(section, "ip_source", value) -- and write "ip_source +end +function src4.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv6 - ip_source -- ######################################################## +src6 = ns:taboption("advanced", ListValue, "ipv6_source", + translate("IP address source") .. " [IPv6]", + translate("Defines the source to read systems IPv6-Address from, that will be send to the DDNS provider") ) +src6:depends("use_ipv6", 1) -- IPv6 selected +src6.default = "network" +src6:value("network", translate("Network")) +src6:value("web", translate("URL")) +src6:value("interface", translate("Interface")) +src6:value("script", translate("Script")) +if not DDNS.has_ipv6 then + src6.description = err_ipv6_other +end +function src6.cfgvalue(self, section) + return DDNS.read_value(self, section, "ip_source") +end +function src6.validate(self, value) + if usev6:formvalue(section) ~= "1" then + return "" -- ignore on IPv4 selected + elseif not DDNS.has_ipv6 then + return nil, err_tab_adv(self) .. err_ipv6_plain + elseif not _verify_ip_source() then + return nil, err_tab_adv(self) .. + translate("can not detect local IP. Please select a different Source combination") + else + return value + end +end +function src6.write(self, section, value) + if usev6:formvalue(section) ~= "1" then + return true -- ignore on IPv4 selected + elseif value == "network" then + self.map:del(section, "ip_url") -- delete not need parameters + self.map:del(section, "ip_interface") + self.map:del(section, "ip_script") + elseif value == "web" then + self.map:del(section, "ip_network") -- delete not need parameters + self.map:del(section, "ip_interface") + self.map:del(section, "ip_script") + elseif value == "interface" then + self.map:del(section, "ip_network") -- delete not need parameters + self.map:del(section, "ip_url") + self.map:del(section, "ip_script") + elseif value == "script" then + self.map:del(section, "ip_network") + self.map:del(section, "ip_url") -- delete not need parameters + self.map:del(section, "ip_interface") + end + self.map:del(section, self.option) -- delete "ipv4_source" helper + return self.map:set(section, "ip_source", value) -- and write "ip_source +end +function src6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4 - ip_network (default "wan") -- ####################################### +ipn4 = ns:taboption("advanced", ListValue, "ipv4_network", + translate("Network") .. " [IPv4]", + translate("Defines the network to read systems IPv4-Address from") ) +ipn4:depends("ipv4_source", "network") +ipn4.default = "wan" +WADM.cbi_add_networks(ipn4) +function ipn4.cfgvalue(self, section) + return DDNS.read_value(self, section, "ip_network") +end +function ipn4.validate(self, value) + if usev6:formvalue(section) == "1" + or src4:formvalue(section) ~= "network" then + -- ignore if IPv6 selected OR + -- ignore everything except "network" + return "" + else + return value + end +end +function ipn4.write(self, section, value) + if usev6:formvalue(section) == "1" + or src4:formvalue(section) ~= "network" then + -- ignore if IPv6 selected OR + -- ignore everything except "network" + return true + else + -- set also as "interface" for monitoring events changes/hot-plug + self.map:set(section, "interface", value) + self.map:del(section, self.option) -- delete "ipv4_network" helper + return self.map:set(section, "ip_network", value) -- and write "ip_network" + end +end +function ipn4.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv6 - ip_network (default "wan6") -- ###################################### +ipn6 = ns:taboption("advanced", ListValue, "ipv6_network", + translate("Network") .. " [IPv6]" ) +ipn6:depends("ipv6_source", "network") +ipn6.default = "wan6" +WADM.cbi_add_networks(ipn6) +if DDNS.has_ipv6 then + ipn6.description = translate("Defines the network to read systems IPv6-Address from") +else + ipn6.description = err_ipv6_other +end +function ipn6.cfgvalue(self, section) + return DDNS.read_value(self, section, "ip_network") +end +function ipn6.validate(self, value) + if usev6:formvalue(section) ~= "1" + or src6:formvalue(section) ~= "network" then + -- ignore if IPv4 selected OR + -- ignore everything except "network" + return "" + elseif DDNS.has_ipv6 then + return value + else + return nil, err_tab_adv(self) .. err_ipv6_plain + end +end +function ipn6.write(self, section, value) + if usev6:formvalue(section) ~= "1" + or src6:formvalue(section) ~= "network" then + -- ignore if IPv4 selected OR + -- ignore everything except "network" + return true + else + -- set also as "interface" for monitoring events changes/hotplug + self.map:set(section, "interface", value) + self.map:del(section, self.option) -- delete "ipv6_network" helper + return self.map:set(section, "ip_network", value) -- and write "ip_network" + end +end +function ipn6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4 - ip_url (default "checkip.dyndns.com") -- ############################ +iurl4 = ns:taboption("advanced", Value, "ipv4_url", + translate("URL to detect") .. " [IPv4]", + translate("Defines the Web page to read systems IPv4-Address from") ) +iurl4:depends("ipv4_source", "web") +iurl4.default = "http://checkip.dyndns.com" +function iurl4.cfgvalue(self, section) + return DDNS.read_value(self, section, "ip_url") +end +function iurl4.validate(self, value) + if usev6:formvalue(section) == "1" + or src4:formvalue(section) ~= "web" then + -- ignore if IPv6 selected OR + -- ignore everything except "web" + return "" + elseif not value or #value == 0 then + return nil, err_tab_adv(self) .. translate("missing / required") + end + + local url = DDNS.parse_url(value) + if not (url.scheme == "http" or url.scheme == "https") then + return nil, err_tab_adv(self) .. translate("must start with 'http://'") + elseif not url.host then + return nil, err_tab_adv(self) .. " " .. translate("missing / required") + elseif SYS.call([[nslookup ]] .. url.host .. [[>/dev/null 2>&1]]) ~= 0 then + return nil, err_tab_adv(self) .. translate("can not resolve host: ") .. url.host + else + return value + end +end +function iurl4.write(self, section, value) + if usev6:formvalue(section) == "1" + or src4:formvalue(section) ~= "web" then + -- ignore if IPv6 selected OR + -- ignore everything except "web" + return true + else + self.map:del(section, self.option) -- delete "ipv4_url" helper + return self.map:set(section, "ip_url", value) -- and write "ip_url" + end +end +function iurl4.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv6 - ip_url (default "checkipv6.dyndns.com") -- ########################## +iurl6 = ns:taboption("advanced", Value, "ipv6_url", + translate("URL to detect") .. " [IPv6]" ) +iurl6:depends("ipv6_source", "web") +iurl6.default = "http://checkipv6.dyndns.com" +if DDNS.has_ipv6 then + iurl6.description = translate("Defines the Web page to read systems IPv6-Address from") +else + iurl6.description = err_ipv6_other +end +function iurl6.cfgvalue(self, section) + return DDNS.read_value(self, section, "ip_url") +end +function iurl6.validate(self, value) + if usev6:formvalue(section) ~= "1" + or src6:formvalue(section) ~= "web" then + -- ignore if IPv4 selected OR + -- ignore everything except "web" + return "" + elseif not DDNS.has_ipv6 then + return nil, err_tab_adv(self) .. err_ipv6_plain + elseif not value or #value == 0 then + return nil, err_tab_adv(self) .. translate("missing / required") + end + + local url = DDNS.parse_url(value) + if not (url.scheme == "http" or url.scheme == "https") then + return nil, err_tab_adv(self) .. translate("must start with 'http://'") + elseif not url.host then + return nil, err_tab_adv(self) .. " " .. translate("missing / required") + elseif SYS.call([[nslookup ]] .. url.host .. [[>/dev/null 2>&1]]) ~= 0 then + return nil, err_tab_adv(self) .. translate("can not resolve host: ") .. url.host + else + return value + end +end +function iurl6.write(self, section, value) + if usev6:formvalue(section) ~= "1" + or src6:formvalue(section) ~= "web" then + -- ignore if IPv4 selected OR + -- ignore everything except "web" + return true + else + self.map:del(section, self.option) -- delete "ipv6_url" helper + return self.map:set(section, "ip_url", value) -- and write "ip_url" + end +end +function iurl6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4 + IPv6 - ip_interface -- ############################################## +ipi = ns:taboption("advanced", ListValue, "ip_interface", + translate("Interface"), + translate("Defines the interface to read systems IP-Address from") ) +ipi:depends("ipv4_source", "interface") -- IPv4 +ipi:depends("ipv6_source", "interface") -- or IPv6 +for _, v in pairs(SYS.net.devices()) do + -- show only interface set to a network + -- and ignore loopback + net = WADM.iface_get_network(v) + if net and net ~= "loopback" then + ipi:value(v) + end +end +function ipi.validate(self, value) + local fusev6 = usev6:formvalue(section) + if (fusev6 ~= "1" and src4:formvalue(section) ~= "interface") + or (fusev6 == "1" and src6:formvalue(section) ~= "interface") then + return "" + else + return value + end +end +function ipi.write(self, section, value) + local fusev6 = usev6:formvalue(section) + if (fusev6 ~= "1" and src4:formvalue(section) ~= "interface") + or (fusev6 == "1" and src6:formvalue(section) ~= "interface") then + return true + else + -- get network from device to + -- set also as "interface" for monitoring events changes/hotplug + local net = WADM.iface_get_network(value) + self.map:set(section, "interface", net) + return self.map:set(section, self.option, value) + end +end +function ipi.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4 + IPv6 - ip_script -- ################################################# +ips = ns:taboption("advanced", Value, "ip_script", + translate("Script"), + translate("User defined script to read systems IP-Address") ) +ips:depends("ipv4_source", "script") -- IPv4 +ips:depends("ipv6_source", "script") -- or IPv6 +ips.placeholder = "/path/to/script.sh" +function ips.validate(self, value) + local fusev6 = usev6:formvalue(section) + local split + if value then split = UTIL.split(value, " ") end + + if (fusev6 ~= "1" and src4:formvalue(section) ~= "script") + or (fusev6 == "1" and src6:formvalue(section) ~= "script") then + return "" + elseif not value or not (#value > 0) or not NXFS.access(split[1], "x") then + return nil, err_tab_adv(self) .. + translate("not found or not executable - Sample: '/path/to/script.sh'") + else + return value + end +end +function ips.write(self, section, value) + local fusev6 = usev6:formvalue(section) + if (fusev6 ~= "1" and src4:formvalue(section) ~= "script") + or (fusev6 == "1" and src6:formvalue(section) ~= "script") then + return true + else + return self.map:set(section, self.option, value) + end +end +function ips.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4 - interface - default "wan" -- ######################################## +-- event network to monitor changes/hotplug/dynamic_dns_updater.sh +-- only needs to be set if "ip_source"="web" or "script" +-- if "ip_source"="network" or "interface" we use their network +eif4 = ns:taboption("advanced", ListValue, "ipv4_interface", + translate("Event Network") .. " [IPv4]", + translate("Network on which the ddns-updater scripts will be started") ) +eif4:depends("ipv4_source", "web") +eif4:depends("ipv4_source", "script") +eif4.default = "wan" +WADM.cbi_add_networks(eif4) +function eif4.cfgvalue(self, section) + return DDNS.read_value(self, section, "interface") +end +function eif4.validate(self, value) + local fsrc4 = src4:formvalue(section) or "" + if usev6:formvalue(section) == "1" + or fsrc4 == "network" + or fsrc4 == "interface" then + return "" -- ignore IPv6, network, interface + else + return value + end +end +function eif4.write(self, section, value) + local fsrc4 = src4:formvalue(section) or "" + if usev6:formvalue(section) == "1" + or fsrc4 == "network" + or fsrc4 == "interface" then + return true -- ignore IPv6, network, interface + else + self.map:del(section, self.option) -- delete "ipv4_interface" helper + return self.map:set(section, "interface", value) -- and write "interface" + end +end +function eif4.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv6 - interface - default "wan6" -- ####################################### +-- event network to monitor changes/hotplug +-- only needs to be set if "ip_source"="web" or "script" +-- if "ip_source"="network" or "interface" we use their network +eif6 = ns:taboption("advanced", ListValue, "ipv6_interface", + translate("Event Network") .. " [IPv6]" ) +eif6:depends("ipv6_source", "web") +eif6:depends("ipv6_source", "script") +eif6.default = "wan6" +WADM.cbi_add_networks(eif6) +if not DDNS.has_ipv6 then + eif6.description = err_ipv6_other +else + eif6.description = translate("Network on which the ddns-updater scripts will be started") +end +function eif6.cfgvalue(self, section) + return DDNS.read_value(self, section, "interface") +end +function eif6.validate(self, value) + local fsrc6 = src6:formvalue(section) or "" + if usev6:formvalue(section) ~= "1" + or fsrc6 == "network" + or fsrc6 == "interface" then + return "" -- ignore IPv4, network, interface + elseif not DDNS.has_ipv6 then + return nil, err_tab_adv(self) .. err_ipv6_plain + else + return value + end +end +function eif6.write(self, section, value) + local fsrc6 = src6:formvalue(section) or "" + if usev6:formvalue(section) ~= "1" + or fsrc6 == "network" + or fsrc6 == "interface" then + return true -- ignore IPv4, network, interface + else + self.map:del(section, self.option) -- delete "ipv6_interface" helper + return self.map:set(section, "interface", value) -- and write "interface" + end +end +function eif6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4/IPv6 - bind_network -- ################################################ +if DDNS.has_bindnet or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then + bnet = ns:taboption("advanced", ListValue, "bind_network", + translate("Bind Network") ) + bnet:depends("ipv4_source", "web") + bnet:depends("ipv6_source", "web") + bnet.default = "" + bnet:value("", translate("-- default --")) + WADM.cbi_add_networks(bnet) + function bnet.cfgvalue(self, section) + local value = AbstractValue.cfgvalue(self, section) + if not DDNS.has_bindnet and value ~= "" then + self.description = bold_on .. font_red .. + translate("Binding to a specific network not supported") .. font_off .. "
" .. + translate("please set to 'default'") .. " !" .. bold_off + else + self.description = translate("OPTIONAL: Network to use for communication") .. + "
" .. translate("Casual users should not change this setting") + end + return value + end + function bnet.validate(self, value) + if ( (value ~= "") and DDNS.has_bindnet ) or (value == "") then return value end + return nil, err_tab_adv(self) .. translate("Binding to a specific network not supported") .. " !" + end + function bnet.parse(self, section, novld) + DDNS.value_parse(self, section, novld) + end +end + +-- IPv4 + IPv6 - force_ipversion -- ########################################### +-- optional to force wget/curl and host to use only selected IP version +-- command parameter "-4" or "-6" +if DDNS.has_forceip or ( ( m:get(section, "force_ipversion") or "0" ) ~= "0" ) then + fipv = ns:taboption("advanced", Flag, "force_ipversion", + translate("Force IP Version") ) + fipv.orientation = "horizontal" + function fipv.cfgvalue(self, section) + local value = AbstractValue.cfgvalue(self, section) + if not DDNS.has_forceip and value ~= "0" then + self.description = bold_on .. font_red .. + translate("Force IP Version not supported") .. font_off .. "
" .. + translate("please disable") .. " !" .. bold_off + else + self.description = translate("OPTIONAL: Force the usage of pure IPv4/IPv6 only communication.") + end + return value + end + function fipv.validate(self, value) + if (value == "1" and DDNS.has_forceip) or value == "0" then return value end + return nil, err_tab_adv(self) .. translate("Force IP Version not supported") + end +end + +-- IPv4 + IPv6 - dns_server -- ################################################ +-- optional DNS Server to use resolving my IP +if DDNS.has_dnsserver or ( ( m:get(section, "dns_server") or "" ) ~= "" ) then + dns = ns:taboption("advanced", Value, "dns_server", + translate("DNS-Server"), + translate("OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'.") .. "
" .. + translate("Format: IP or FQDN")) + dns.placeholder = "mydns.lan" + function dns.validate(self, value) + -- if .datatype is set, then it is checked before calling this function + if not value or (#value == 0) then + return "" -- ignore on empty + elseif not DDNS.has_dnsserver then + return nil, err_tab_adv(self) .. translate("Specifying a DNS-Server is not supported") + elseif not DTYP.host(value) then + return nil, err_tab_adv(self) .. translate("use hostname, FQDN, IPv4- or IPv6-Address") + else + local ipv6 = usev6:formvalue(section) or "0" + local force = fipv:formvalue(section) or "0" + local command = CTRL.luci_helper .. [[ -]] + if (ipv6 == 1) then command = command .. [[6]] end + if (force == 1) then command = command .. [[f]] end + command = command .. [[d ]] .. value .. [[ -- verify_dns]] + + local ret = SYS.call(command) + if ret == 0 then return value -- everything OK + elseif ret == 2 then return nil, err_tab_adv(self) .. translate("nslookup can not resolve host") + elseif ret == 3 then return nil, err_tab_adv(self) .. translate("nc (netcat) can not connect") + elseif ret == 4 then return nil, err_tab_adv(self) .. translate("Forced IP Version don't matched") + else return nil, err_tab_adv(self) .. translate("unspecific error") + end + end + end + function dns.parse(self, section, novld) + DDNS.value_parse(self, section, novld) + end +end + +-- IPv4 + IPv6 - force_dnstcp -- ############################################## +if DDNS.has_bindhost or ( ( m:get(section, "force_dnstcp") or "0" ) ~= "0" ) then + tcp = ns:taboption("advanced", Flag, "force_dnstcp", + translate("Force TCP on DNS") ) + tcp.orientation = "horizontal" + function tcp.cfgvalue(self, section) + local value = AbstractValue.cfgvalue(self, section) + if not DDNS.has_bindhost and value ~= "0" then + self.description = bold_on .. font_red .. + translate("DNS requests via TCP not supported") .. font_off .. "
" .. + translate("please disable") .. " !" .. bold_off + else + self.description = translate("OPTIONAL: Force the use of TCP instead of default UDP on DNS requests.") + end + return value + end + function tcp.validate(self, value) + if (value == "1" and DDNS.has_bindhost ) or value == "0" then + return value + end + return nil, err_tab_adv(self) .. translate("DNS requests via TCP not supported") + end +end + +-- IPv4 + IPv6 - proxy -- ##################################################### +-- optional Proxy to use for http/https requests [user:password@]proxyhost[:port] +if DDNS.has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then + pxy = ns:taboption("advanced", Value, "proxy", + translate("PROXY-Server") ) + pxy.placeholder="user:password@myproxy.lan:8080" + function pxy.cfgvalue(self, section) + local value = AbstractValue.cfgvalue(self, section) + if not DDNS.has_proxy and value ~= "" then + self.description = bold_on .. font_red .. + translate("PROXY-Server not supported") .. font_off .. "
" .. + translate("please remove entry") .. "!" .. bold_off + else + self.description = translate("OPTIONAL: Proxy-Server for detection and updates.") .. "
" .. + translate("Format") .. ": " .. bold_on .. "[user:password@]proxyhost:port" .. bold_off .. "
" .. + translate("IPv6 address must be given in square brackets") .. ": " .. + bold_on .. " [2001:db8::1]:8080" .. bold_off + end + return value + end + function pxy.validate(self, value) + -- if .datatype is set, then it is checked before calling this function + if not value or (#value == 0) then + return "" -- ignore on empty + elseif DDNS.has_proxy then + local ipv6 = usev6:formvalue(section) or "0" + local force = fipv:formvalue(section) or "0" + local command = CRTL.luci_helper .. [[ -]] + if (ipv6 == 1) then command = command .. [[6]] end + if (force == 1) then command = command .. [[f]] end + command = command .. [[p ]] .. value .. [[ -- verify_proxy]] + local ret = SYS.call(command) + if ret == 0 then return value + elseif ret == 2 then return nil, err_tab_adv(self) .. translate("nslookup can not resolve host") + elseif ret == 3 then return nil, err_tab_adv(self) .. translate("nc (netcat) can not connect") + elseif ret == 4 then return nil, err_tab_adv(self) .. translate("Forced IP Version don't matched") + elseif ret == 5 then return nil, err_tab_adv(self) .. translate("proxy port missing") + else return nil, err_tab_adv(self) .. translate("unspecific error") + end + else + return nil, err_tab_adv(self) .. translate("PROXY-Server not supported") + end + end + function pxy.parse(self, section, novld) + DDNS.value_parse(self, section, novld) + end +end + +-- use_syslog -- ############################################################## +slog = ns:taboption("advanced", ListValue, "use_syslog", + translate("Log to syslog"), + translate("Writes log messages to syslog. Critical Errors will always be written to syslog.") ) +slog.default = "2" +slog:value("0", translate("No logging")) +slog:value("1", translate("Info")) +slog:value("2", translate("Notice")) +slog:value("3", translate("Warning")) +slog:value("4", translate("Error")) +function slog.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- use_logfile -- ############################################################# +logf = ns:taboption("advanced", Flag, "use_logfile", + translate("Log to file"), + translate("Writes detailed messages to log file. File will be truncated automatically.") .. "
" .. + translate("File") .. [[: "]] .. logdir .. [[/]] .. section .. [[.log"]] ) +logf.orientation = "horizontal" +logf.default = "1" -- if not defined write to log by default + +-- TAB: Timer #################################################################################### +-- check_interval -- ########################################################## +ci = ns:taboption("timer", Value, "check_interval", + translate("Check Interval") ) +ci.template = "ddns/detail_value" +ci.default = "10" +function ci.validate(self, value) + if not DTYP.uinteger(value) + or tonumber(value) < 1 then + return nil, err_tab_timer(self) .. translate("minimum value 5 minutes == 300 seconds") + end + + local secs = DDNS.calc_seconds(value, cu:formvalue(section)) + if secs >= 300 then + return value + else + return nil, err_tab_timer(self) .. translate("minimum value 5 minutes == 300 seconds") + end +end +function ci.write(self, section, value) + -- remove when default + local secs = DDNS.calc_seconds(value, cu:formvalue(section)) + if secs ~= 600 then --default 10 minutes + return self.map:set(section, self.option, value) + else + self.map:del(section, "check_unit") + return self.map:del(section, self.option) + end +end +function ci.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- check_unit -- ############################################################## +cu = ns:taboption("timer", ListValue, "check_unit", "not displayed, but needed otherwise error", + translate("Interval to check for changed IP" .. "
" .. + "Values below 5 minutes == 300 seconds are not supported") ) +cu.template = "ddns/detail_lvalue" +cu.default = "minutes" +cu:value("seconds", translate("seconds")) +cu:value("minutes", translate("minutes")) +cu:value("hours", translate("hours")) +--cu:value("days", translate("days")) +function cu.write(self, section, value) + -- remove when default + local secs = DDNS.calc_seconds(ci:formvalue(section), value) + if secs ~= 600 then --default 10 minutes + return self.map:set(section, self.option, value) + else + return true + end +end +function cu.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- force_interval (modified) -- ############################################### +fi = ns:taboption("timer", Value, "force_interval", + translate("Force Interval") ) +fi.template = "ddns/detail_value" +fi.default = "72" -- see dynamic_dns_updater.sh script +--fi.rmempty = false -- validate ourselves for translatable error messages +function fi.validate(self, value) + if not DTYP.uinteger(value) + or tonumber(value) < 0 then + return nil, err_tab_timer(self) .. translate("minimum value '0'") + end + + local force_s = DDNS.calc_seconds(value, fu:formvalue(section)) + if force_s == 0 then + return value + end + + local ci_value = ci:formvalue(section) + if not DTYP.uinteger(ci_value) then + return "" -- ignore because error in check_interval above + end + + local check_s = DDNS.calc_seconds(ci_value, cu:formvalue(section)) + if force_s >= check_s then + return value + end + + return nil, err_tab_timer(self) .. translate("must be greater or equal 'Check Interval'") +end +function fi.write(self, section, value) + -- simulate rmempty=true remove default + local secs = DDNS.calc_seconds(value, fu:formvalue(section)) + if secs ~= 259200 then --default 72 hours == 3 days + return self.map:set(section, self.option, value) + else + self.map:del(section, "force_unit") + return self.map:del(section, self.option) + end +end +function fi.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- force_unit -- ############################################################## +fu = ns:taboption("timer", ListValue, "force_unit", "not displayed, but needed otherwise error", + translate("Interval to force updates send to DDNS Provider" .. "
" .. + "Setting this parameter to 0 will force the script to only run once" .. "
" .. + "Values lower 'Check Interval' except '0' are not supported") ) +fu.template = "ddns/detail_lvalue" +fu.default = "hours" +--fu.rmempty = false -- want to control write process +--fu:value("seconds", translate("seconds")) +fu:value("minutes", translate("minutes")) +fu:value("hours", translate("hours")) +fu:value("days", translate("days")) +function fu.write(self, section, value) + -- simulate rmempty=true remove default + local secs = DDNS.calc_seconds(fi:formvalue(section), value) + if secs ~= 259200 and secs ~= 0 then --default 72 hours == 3 days + return self.map:set(section, self.option, value) + else + return true + end +end +function fu.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- retry_count -- ############################################################# +rc = ns:taboption("timer", Value, "retry_count") +rc.title = translate("Error Retry Counter") +rc.description = translate("On Error the script will stop execution after given number of retrys") + .. "
" + .. translate("The default setting of '0' will retry infinite.") +rc.default = "0" +function rc.validate(self, value) + if not DTYP.uinteger(value) then + return nil, err_tab_timer(self) .. translate("minimum value '0'") + else + return value + end +end +function rc.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- retry_interval -- ########################################################## +ri = ns:taboption("timer", Value, "retry_interval", + translate("Error Retry Interval") ) +ri.template = "ddns/detail_value" +ri.default = "60" +function ri.validate(self, value) + if not DTYP.uinteger(value) + or tonumber(value) < 1 then + return nil, err_tab_timer(self) .. translate("minimum value '1'") + else + return value + end +end +function ri.write(self, section, value) + -- simulate rmempty=true remove default + local secs = DDNS.calc_seconds(value, ru:formvalue(section)) + if secs ~= 60 then --default 60seconds + return self.map:set(section, self.option, value) + else + self.map:del(section, "retry_unit") + return self.map:del(section, self.option) + end +end +function ri.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- retry_unit -- ############################################################## +ru = ns:taboption("timer", ListValue, "retry_unit", "not displayed, but needed otherwise error", + translate("On Error the script will retry the failed action after given time") ) +ru.template = "ddns/detail_lvalue" +ru.default = "seconds" +--ru.rmempty = false -- want to control write process +ru:value("seconds", translate("seconds")) +ru:value("minutes", translate("minutes")) +--ru:value("hours", translate("hours")) +--ru:value("days", translate("days")) +function ru.write(self, section, value) + -- simulate rmempty=true remove default + local secs = DDNS.calc_seconds(ri:formvalue(section), value) + if secs ~= 60 then --default 60seconds + return self.map:set(section, self.option, value) + else + return true -- will be deleted by retry_interval + end +end +function ru.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- TAB: LogView ################################################################################## +lv = ns:taboption("logview", DummyValue, "_logview") +lv.template = "ddns/detail_logview" +lv.inputtitle = translate("Read / Reread log file") +lv.rows = 50 +function lv.cfgvalue(self, section) + local lfile=logdir .. "/" .. section .. ".log" + if NXFS.access(lfile) then + return lfile .. "\n" .. translate("Please press [Read] button") + end + return lfile .. "\n" .. translate("File not found or empty") +end + +return m diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua b/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua new file mode 100644 index 0000000..9dc0857 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua @@ -0,0 +1,121 @@ +-- Copyright 2014 Christian Schoenebeck +-- Licensed to the public under the Apache License 2.0. + +local NX = require "nixio" +local NXFS = require "nixio.fs" +local DISP = require "luci.dispatcher" +local SYS = require "luci.sys" +local CTRL = require "luci.controller.ddns" -- this application's controller +local DDNS = require "luci.tools.ddns" -- ddns multiused functions + +-- cbi-map definition -- ####################################################### +local m = Map("ddns") +m.title = CTRL.app_title_back() +m.description = CTRL.app_description() +m.redirect = DISP.build_url("admin", "services", "ddns") + +function m.commit_handler(self) + if self.changed then -- changes ? + local command = CTRL.luci_helper .. " -- reload" + os.execute(command) -- reload configuration + end +end + +-- cbi-section definition -- ################################################### +local ns = m:section( NamedSection, "global", "ddns", + translate("Global Settings"), + translate("Configure here the details for all Dynamic DNS services including this LuCI application.") + .. [[
]] + .. translate("It is NOT recommended for casual users to change settings on this page.") + .. [[
]] + .. [[]] + .. translate("For detailed information about parameter settings look here.") + .. [[]] + ) + +-- section might not exist +function ns.cfgvalue(self, section) + if not self.map:get(section) then + self.map:set(section, nil, self.sectiontype) + end + return self.map:get(section) +end + +-- upd_privateip -- ########################################################### +local ali = ns:option(Flag, "upd_privateip") +ali.title = translate("Allow non-public IP's") +ali.description = translate("Non-public and by default blocked IP's") .. ":" + .. [[
IPv4: ]] + .. "0/8, 10/8, 100.64/10, 127/8, 169.254/16, 172.16/12, 192.168/16" + .. [[
IPv6: ]] + .. "::/32, f000::/4" +ali.default = "0" + +-- ddns_dateformat -- ######################################################### +local df = ns:option(Value, "ddns_dateformat") +df.title = translate("Date format") +df.description = [[]] + .. translate("For supported codes look here") + .. [[]] +df.template = "ddns/global_value" +df.default = "%F %R" +df.date_string = "" +function df.cfgvalue(self, section) + local value = AbstractValue.cfgvalue(self, section) or self.default + local epoch = os.time() + self.date_string = DDNS.epoch2date(epoch, value) + return value +end +function df.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- ddns_rundir -- ############################################################# +local rd = ns:option(Value, "ddns_rundir") +rd.title = translate("Status directory") +rd.description = translate("Directory contains PID and other status information for each running section") +rd.default = "/var/run/ddns" +-- no need to validate. if empty default is used everything else created by dns-scripts +function rd.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- ddns_logdir -- ############################################################# +local ld = ns:option(Value, "ddns_logdir") +ld.title = translate("Log directory") +ld.description = translate("Directory contains Log files for each running section") +ld.default = "/var/log/ddns" +-- no need to validate. if empty default is used everything else created by dns-scripts +function ld.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- ddns_loglines -- ########################################################### +local ll = ns:option(Value, "ddns_loglines") +ll.title = translate("Log length") +ll.description = translate("Number of last lines stored in log files") +ll.default = "250" +function ll.validate(self, value) + local n = tonumber(value) + if not n or math.floor(n) ~= n or n < 1 then + return nil, self.title .. ": " .. translate("minimum value '1'") + end + return value +end +function ll.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- use_curl -- ################################################################ +if (SYS.call([[ grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 ]]) == 0) +and NXFS.access("/usr/bin/curl") then + local pc = ns:option(Flag, "use_curl") + pc.title = translate("Use cURL") + pc.description = translate("If both cURL and GNU Wget are installed, Wget is used by default.") + .. [[
]] + .. translate("To use cURL activate this option.") + pc.orientation = "horizontal" + pc.default = "0" +end + +return m diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua b/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua new file mode 100644 index 0000000..df39a3a --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua @@ -0,0 +1,166 @@ +-- Copyright 2014-2016 Christian Schoenebeck +-- Licensed to the public under the Apache License 2.0. + +local DISP = require "luci.dispatcher" +local SYS = require "luci.sys" +local CTRL = require "luci.controller.ddns" -- this application's controller +local DDNS = require "luci.tools.ddns" -- ddns multiused functions + +-- html constants +font_red = [[]] +font_off = [[]] +bold_on = [[]] +bold_off = [[]] + +-- cbi-map definition -- ####################################################### +m = Map("ddns") +m.title = CTRL.app_title_back() +m.description = CTRL.app_description() +m.redirect = DISP.build_url("admin", "services", "ddns") + +-- SimpleSection definition -- ################################################# +-- show Hints to optimize installation and script usage +s = m:section( SimpleSection, + translate("Hints"), + translate("Below a list of configuration tips for your system to run Dynamic DNS updates without limitations") ) + +-- ddns-scripts needs to be updated for full functionality +if not CTRL.service_ok() then + local so = s:option(DummyValue, "_update_needed") + so.titleref = DISP.build_url("admin", "system", "packages") + so.rawhtml = true + so.title = font_red .. bold_on .. + translate("Software update required") .. bold_off .. font_off + so.value = translate("The currently installed 'ddns-scripts' package did not support all available settings.") .. + "
" .. + translate("Please update to the current version!") +end + +-- DDNS Service disabled +if not SYS.init.enabled("ddns") then + local se = s:option(DummyValue, "_not_enabled") + se.titleref = DISP.build_url("admin", "system", "startup") + se.rawhtml = true + se.title = bold_on .. + translate("DDNS Autostart disabled") .. bold_off + se.value = translate("Currently DDNS updates are not started at boot or on interface events." .. "
" .. + "This is the default if you run DDNS scripts by yourself (i.e. via cron with force_interval set to '0')" ) +end + +-- No IPv6 support +if not DDNS.has_ipv6 then + local v6 = s:option(DummyValue, "_no_ipv6") + v6.titleref = 'http://www.openwrt.org" target="_blank' + v6.rawhtml = true + v6.title = bold_on .. + translate("IPv6 not supported") .. bold_off + v6.value = translate("IPv6 is currently not (fully) supported by this system" .. "
" .. + "Please follow the instructions on OpenWrt's homepage to enable IPv6 support" .. "
" .. + "or update your system to the latest OpenWrt Release") +end + +-- No HTTPS support +if not DDNS.has_ssl then + local sl = s:option(DummyValue, "_no_https") + sl.titleref = DISP.build_url("admin", "system", "packages") + sl.rawhtml = true + sl.title = bold_on .. + translate("HTTPS not supported") .. bold_off + sl.value = translate("Neither GNU Wget with SSL nor cURL installed to support secure updates via HTTPS protocol.") .. + "
- " .. + translate("You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-*ssl' package.") .. + "
- " .. + translate("In some versions cURL/libcurl in OpenWrt is compiled without proxy support.") +end + +-- No bind_network +if not DDNS.has_bindnet then + local bn = s:option(DummyValue, "_no_bind_network") + bn.titleref = DISP.build_url("admin", "system", "packages") + bn.rawhtml = true + bn.title = bold_on .. + translate("Binding to a specific network not supported") .. bold_off + bn.value = translate("Neither GNU Wget with SSL nor cURL installed to select a network to use for communication.") .. + "
- " .. + translate("You should install 'wget' or 'curl' package.") .. + "
- " .. + translate("GNU Wget will use the IP of given network, cURL will use the physical interface.") .. + "
- " .. + translate("In some versions cURL/libcurl in OpenWrt is compiled without proxy support.") +end + +-- currently only cURL possibly without proxy support +if not DDNS.has_proxy then + local px = s:option(DummyValue, "_no_proxy") + px.titleref = DISP.build_url("admin", "system", "packages") + px.rawhtml = true + px.title = bold_on .. + translate("cURL without Proxy Support") .. bold_off + px.value = translate("cURL is installed, but libcurl was compiled without proxy support.") .. + "
- " .. + translate("You should install 'wget' or 'uclient-fetch' package or replace libcurl.") .. + "
- " .. + translate("In some versions cURL/libcurl in OpenWrt is compiled without proxy support.") +end + +-- "Force IP Version not supported" +if not DDNS.has_forceip then + local fi = s:option(DummyValue, "_no_force_ip") + fi.titleref = DISP.build_url("admin", "system", "packages") + fi.rawhtml = true + fi.title = bold_on .. + translate("Force IP Version not supported") .. bold_off + local value = translate("BusyBox's nslookup and Wget do not support to specify " .. + "the IP version to use for communication with DDNS Provider!") + if not (DDNS.has_wgetssl or DDNS.has_curl or DDNS.has_fetch) then + value = value .. "
- " .. + translate("You should install 'wget' or 'curl' or 'uclient-fetch' package.") + end + if not DDNS.has_bindhost then + value = value .. "
- " .. + translate("You should install 'bind-host' or 'knot-host' or 'drill' package for DNS requests.") + end + fi.value = value +end + +-- "DNS requests via TCP not supported" +if not DDNS.has_bindhost then + local dt = s:option(DummyValue, "_no_dnstcp") + dt.titleref = DISP.build_url("admin", "system", "packages") + dt.rawhtml = true + dt.title = bold_on .. + translate("DNS requests via TCP not supported") .. bold_off + dt.value = translate("BusyBox's nslookup and hostip do not support to specify to use TCP " .. + "instead of default UDP when requesting DNS server!") .. + "
- " .. + translate("You should install 'bind-host' or 'knot-host' or 'drill' package for DNS requests.") +end + +-- nslookup compiled with musl produce problems when using +if not DDNS.has_dnsserver then + local ds = s:option(DummyValue, "_no_dnsserver") + ds.titleref = DISP.build_url("admin", "system", "packages") + ds.rawhtml = true + ds.title = bold_on .. + translate("Using specific DNS Server not supported") .. bold_off + ds.value = translate("BusyBox's nslookup in the current compiled version " .. + "does not handle given DNS Servers correctly!") .. + "
- " .. + translate("You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' package, " .. + "if you need to specify a DNS server to detect your registered IP.") +end + +-- certificates installed +if DDNS.has_ssl and not DDNS.has_cacerts then + local ca = s:option(DummyValue, "_no_certs") + ca.titleref = DISP.build_url("admin", "system", "packages") + ca.rawhtml = true + ca.title = bold_on .. + translate("No certificates found") .. bold_off + ca.value = translate("If using secure communication you should verify server certificates!") .. + "
- " .. + translate("Install 'ca-certificates' package or needed certificates " .. + "by hand into /etc/ssl/certs default directory") +end + +return m diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua b/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua new file mode 100644 index 0000000..6ba3ea0 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua @@ -0,0 +1,243 @@ +-- Copyright 2014-2016 Christian Schoenebeck +-- Licensed to the public under the Apache License 2.0. + +local NXFS = require "nixio.fs" +local DISP = require "luci.dispatcher" +local HTTP = require "luci.http" +local SYS = require "luci.sys" +local CTRL = require "luci.controller.ddns" -- this application's controller +local DDNS = require "luci.tools.ddns" -- ddns multiused functions + +local show_hints = not (DDNS.has_ipv6 -- IPv6 support + and DDNS.has_ssl -- HTTPS support + and DDNS.has_proxy -- Proxy support + and DDNS.has_bindhost -- DNS TCP support + and DDNS.has_forceip -- Force IP version + and DDNS.has_dnsserver -- DNS server support + and DDNS.has_bindnet -- Bind to network/interface + and DDNS.has_cacerts -- certificates installed at /etc/ssl/certs + ) +local not_enabled = not SYS.init.enabled("ddns") +local need_update = not CTRL.service_ok() + +-- html constants +font_red = [[]] +font_off = [[]] +bold_on = [[]] +bold_off = [[]] + +-- cbi-map definition -- ####################################################### +m = Map("ddns") +m.title = CTRL.app_title_main() +m.description = CTRL.app_description() + +m.on_after_commit = function(self) + if self.changed then -- changes ? + local command = CTRL.luci_helper + if SYS.init.enabled("ddns") then -- ddns service enabled, restart all + command = command .. " -- restart" + os.execute(command) + else -- ddns service disabled, send SIGHUP to running + command = command .. " -- reload" + os.execute(command) + end + end +end + +-- SimpleSection definition -- ################################################## +-- with all the JavaScripts we need for "a good Show" +a = m:section( SimpleSection ) +a.template = "ddns/overview_status" + +-- SimpleSection definition -- ################################################# +-- show Hints to optimize installation and script usage +if show_hints or need_update or not_enabled then + + s = m:section( SimpleSection, translate("Hints") ) + + -- ddns-scripts needs to be updated for full functionality + if need_update then + local dv = s:option(DummyValue, "_update_needed") + dv.titleref = DISP.build_url("admin", "system", "packages") + dv.rawhtml = true + dv.title = font_red .. bold_on .. + translate("Software update required") .. bold_off .. font_off + dv.value = translate("The currently installed 'ddns-scripts' package did not support all available settings.") .. + "
" .. + translate("Please update to the current version!") + end + + -- DDNS Service disabled + if not_enabled then + local dv = s:option(DummyValue, "_not_enabled") + dv.titleref = DISP.build_url("admin", "system", "startup") + dv.rawhtml = true + dv.title = bold_on .. + translate("DDNS Autostart disabled") .. bold_off + dv.value = translate("Currently DDNS updates are not started at boot or on interface events." .. "
" .. + "You can start/stop each configuration here. It will run until next reboot.") + end + + -- Show more hints on a separate page + if show_hints then + local dv = s:option(DummyValue, "_separate") + dv.titleref = DISP.build_url("admin", "services", "ddns", "hints") + dv.rawhtml = true + dv.title = bold_on .. + translate("Show more") .. bold_off + dv.value = translate("Follow this link" .. "
" .. + "You will find more hints to optimize your system to run DDNS scripts with all options") + end +end + +-- TableSection definition -- ################################################## +ts = m:section( TypedSection, "service", + translate("Overview"), + translate("Below is a list of configured DDNS configurations and their current state.") + .. "
" + .. translate("If you want to send updates for IPv4 and IPv6 you need to define two separate Configurations " + .. "i.e. 'myddns_ipv4' and 'myddns_ipv6'") + .. "
" + .. [[]] + .. translate("To change global settings click here") .. [[]] ) +ts.sectionhead = translate("Configuration") +ts.template = "cbi/tblsection" +ts.addremove = true +ts.extedit = DISP.build_url("admin", "services", "ddns", "detail", "%s") +function ts.create(self, name) + AbstractSection.create(self, name) + HTTP.redirect( self.extedit:format(name) ) +end + +-- Lookup_Host and registered IP -- ################################################# +dom = ts:option(DummyValue, "_lookupIP", + translate("Lookup Hostname") .. "
" .. translate("Registered IP") ) +dom.template = "ddns/overview_doubleline" +function dom.set_one(self, section) + local lookup = self.map:get(section, "lookup_host") or "" + if lookup ~= "" then + return lookup + else + return [[]] .. translate("config error") .. [[]] + end +end +function dom.set_two(self, section) + local lookup_host = self.map:get(section, "lookup_host") or "" + if lookup_host == "" then return "" end + local dnsserver = self.map:get(section, "dnsserver") or "" + local use_ipv6 = tonumber(self.map:get(section, "use_ipv6") or 0) + local force_ipversion = tonumber(self.map:get(section, "force_ipversion") or 0) + local force_dnstcp = tonumber(self.map:get(section, "force_dnstcp") or 0) + local is_glue = tonumber(self.map:get(section, "is_glue") or 0) + local command = CTRL.luci_helper .. [[ -]] + if (use_ipv6 == 1) then command = command .. [[6]] end + if (force_ipversion == 1) then command = command .. [[f]] end + if (force_dnstcp == 1) then command = command .. [[t]] end + if (is_glue == 1) then command = command .. [[g]] end + command = command .. [[l ]] .. lookup_host + if (#dnsserver > 0) then command = command .. [[ -d ]] .. dnsserver end + command = command .. [[ -- get_registered_ip]] + local ip = SYS.exec(command) + if ip == "" then ip = translate("no data") end + return ip +end + +-- enabled +ena = ts:option( Flag, "enabled", + translate("Enabled")) +ena.template = "ddns/overview_enabled" +ena.rmempty = false + +-- show PID and next update +upd = ts:option( DummyValue, "_update", + translate("Last Update") .. "
" .. translate("Next Update")) +upd.template = "ddns/overview_doubleline" +function upd.set_one(self, section) -- fill Last Update + -- get/validate last update + local uptime = SYS.uptime() + local lasttime = DDNS.get_lastupd(section) + if lasttime > uptime then -- /var might not be linked to /tmp and cleared on reboot + lasttime = 0 + end + + -- no last update happen + if lasttime == 0 then + return translate("never") + + -- we read last update + else + -- calc last update + -- os.epoch - sys.uptime + lastupdate(uptime) + local epoch = os.time() - uptime + lasttime + -- use linux date to convert epoch + return DDNS.epoch2date(epoch) + end +end +function upd.set_two(self, section) -- fill Next Update + -- get enabled state + local enabled = tonumber(self.map:get(section, "enabled") or 0) + local datenext = translate("unknown error") -- formatted date of next update + + -- get force seconds + local force_interval = tonumber(self.map:get(section, "force_interval") or 72) + local force_unit = self.map:get(section, "force_unit") or "hours" + local force_seconds = DDNS.calc_seconds(force_interval, force_unit) + + -- get last update and get/validate PID + local uptime = SYS.uptime() + local lasttime = DDNS.get_lastupd(section) + if lasttime > uptime then -- /var might not be linked to /tmp and cleared on reboot + lasttime = 0 + end + local pid = DDNS.get_pid(section) + + -- calc next update + if lasttime > 0 then + local epoch = os.time() - uptime + lasttime + force_seconds + -- use linux date to convert epoch + datelast = DDNS.epoch2date(epoch) + end + + -- process running but update needs to happen + if pid > 0 and ( lasttime + force_seconds - uptime ) < 0 then + datenext = translate("Verify") + + -- run once + elseif force_seconds == 0 then + datenext = translate("Run once") + + -- no process running and NOT enabled + elseif pid == 0 and enabled == 0 then + datenext = translate("Disabled") + + -- no process running and NOT + elseif pid == 0 and enabled ~= 0 then + datenext = translate("Stopped") + end + + return datenext +end + +-- start/stop button +btn = ts:option( Button, "_startstop", + translate("Process ID") .. "
" .. translate("Start / Stop") ) +btn.template = "ddns/overview_startstop" +function btn.cfgvalue(self, section) + local pid = DDNS.get_pid(section) + if pid > 0 then + btn.inputtitle = "PID: " .. pid + btn.inputstyle = "reset" + btn.disabled = false + elseif (self.map:get(section, "enabled") or "0") ~= "0" then + btn.inputtitle = translate("Start") + btn.inputstyle = "apply" + btn.disabled = false + else + btn.inputtitle = "----------" + btn.inputstyle = "button" + btn.disabled = true + end + return true +end + +return m diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/tools/ddns.lua b/feeds/luci/applications/luci-app-ddns/luasrc/tools/ddns.lua new file mode 100755 index 0000000..209d9c3 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/tools/ddns.lua @@ -0,0 +1,315 @@ +-- Copyright 2014-2016 Christian Schoenebeck +-- Licensed to the public under the Apache License 2.0. + +module("luci.tools.ddns", package.seeall) + +local NX = require "nixio" +local NXFS = require "nixio.fs" +local OPKG = require "luci.model.ipkg" +local UCI = require "luci.model.uci" +local SYS = require "luci.sys" +local UTIL = require "luci.util" + +local function _check_certs() + local _, v = NXFS.glob("/etc/ssl/certs/*.crt") + if ( v == 0 ) then _, v = NXFS.glob("/etc/ssl/certs/*.pem") end + return (v > 0) +end + +has_wgetssl = (SYS.call( [[which wget-ssl >/dev/null 2>&1]] ) == 0) -- and true or nil +has_curl = (SYS.call( [[which curl >/dev/null 2>&1]] ) == 0) +has_curlssl = (SYS.call( [[$(which curl) -V 2>&1 | grep "Protocols:" | grep -qF "https"]] ) ~= 0) +has_curlpxy = (SYS.call( [[grep -i "all_proxy" /usr/lib/libcurl.so* >/dev/null 2>&1]] ) == 0) +has_fetch = (SYS.call( [[which uclient-fetch >/dev/null 2>&1]] ) == 0) +has_fetchssl = NXFS.access("/lib/libustream-ssl.so") +has_bbwget = (SYS.call( [[$(which wget) -V 2>&1 | grep -iqF "busybox"]] ) == 0) +has_bindhost = (SYS.call( [[which host >/dev/null 2>&1]] ) == 0) + or (SYS.call( [[which khost >/dev/null 2>&1]] ) == 0) + or (SYS.call( [[which drill >/dev/null 2>&1]] ) == 0) +has_hostip = (SYS.call( [[which hostip >/dev/null 2>&1]] ) == 0) +has_nslookup = (SYS.call( [[$(which nslookup) localhost 2>&1 | grep -qF "(null)"]] ) ~= 0) +has_ipv6 = (NXFS.access("/proc/net/ipv6_route") and NXFS.access("/usr/sbin/ip6tables")) +has_ssl = (has_wgetssl or has_curlssl or (has_fetch and has_fetchssl)) +has_proxy = (has_wgetssl or has_curlpxy or has_fetch or has_bbwget) +has_forceip = (has_wgetssl or has_curl or has_fetch) -- only really needed for transfer +has_dnsserver = (has_bindhost or has_hostip or has_nslookup) +has_bindnet = (has_wgetssl or has_curl) +has_cacerts = _check_certs() + +-- function to calculate seconds from given interval and unit +function calc_seconds(interval, unit) + if not tonumber(interval) then + return nil + elseif unit == "days" then + return (tonumber(interval) * 86400) -- 60 sec * 60 min * 24 h + elseif unit == "hours" then + return (tonumber(interval) * 3600) -- 60 sec * 60 min + elseif unit == "minutes" then + return (tonumber(interval) * 60) -- 60 sec + elseif unit == "seconds" then + return tonumber(interval) + else + return nil + end +end + +-- convert epoch date to given format +function epoch2date(epoch, format) + if not format or #format < 2 then + local uci = UCI.cursor() + format = uci:get("ddns", "global", "ddns_dateformat") or "%F %R" + uci:unload("ddns") + end + format = format:gsub("%%n", "
") -- replace newline + format = format:gsub("%%t", " ") -- replace tab + return os.date(format, epoch) +end + +-- read lastupdate from [section].update file +function get_lastupd(section) + local uci = UCI.cursor() + local rdir = uci:get("ddns", "global", "ddns_rundir") or "/var/run/ddns" + local etime = tonumber(NXFS.readfile("%s/%s.update" % { rdir, section } ) or 0 ) + uci:unload("ddns") + return etime +end + +-- read PID from run file and verify if still running +function get_pid(section) + local uci = UCI.cursor() + local rdir = uci:get("ddns", "global", "ddns_rundir") or "/var/run/ddns" + local pid = tonumber(NXFS.readfile("%s/%s.pid" % { rdir, section } ) or 0 ) + if pid > 0 and not NX.kill(pid, 0) then + pid = 0 + end + uci:unload("ddns") + return pid +end + +-- replacement of build-in read of UCI option +-- modified AbstractValue.cfgvalue(self, section) from cbi.lua +-- needed to read from other option then current value definition +function read_value(self, section, option) + local value + if self.tag_error[section] then + value = self:formvalue(section) + else + value = self.map:get(section, option) + end + + if not value then + return nil + elseif not self.cast or self.cast == type(value) then + return value + elseif self.cast == "string" then + if type(value) == "table" then + return value[1] + end + elseif self.cast == "table" then + return { value } + end +end + +-- replacement of build-in parse of "Value" +-- modified AbstractValue.parse(self, section, novld) from cbi.lua +-- validate is called if rmempty/optional true or false +-- before write check if forcewrite, value eq default, and more +function value_parse(self, section, novld) + local fvalue = self:formvalue(section) + local fexist = ( fvalue and (#fvalue > 0) ) -- not "nil" and "not empty" + local cvalue = self:cfgvalue(section) + local rm_opt = ( self.rmempty or self.optional ) + local eq_cfg -- flag: equal cfgvalue + + -- If favlue and cvalue are both tables and have the same content + -- make them identical + if type(fvalue) == "table" and type(cvalue) == "table" then + eq_cfg = (#fvalue == #cvalue) + if eq_cfg then + for i=1, #fvalue do + if cvalue[i] ~= fvalue[i] then + eq_cfg = false + end + end + end + if eq_cfg then + fvalue = cvalue + end + end + + -- removed parameter "section" from function call because used/accepted nowhere + -- also removed call to function "transfer" + local vvalue, errtxt = self:validate(fvalue) + + -- error handling; validate return "nil" + if not vvalue then + if novld then -- and "novld" set + return -- then exit without raising an error + end + + if fexist then -- and there is a formvalue + self:add_error(section, "invalid", errtxt or self.title .. ": invalid") + return -- so data are invalid + elseif not rm_opt then -- and empty formvalue but NOT (rmempty or optional) set + self:add_error(section, "missing", errtxt or self.title .. ": missing") + return -- so data is missing + elseif errtxt then + self:add_error(section, "invalid", errtxt) + return + end +-- error ("\n option: " .. self.option .. +-- "\n fvalue: " .. tostring(fvalue) .. +-- "\n fexist: " .. tostring(fexist) .. +-- "\n cvalue: " .. tostring(cvalue) .. +-- "\n vvalue: " .. tostring(vvalue) .. +-- "\n vexist: " .. tostring(vexist) .. +-- "\n rm_opt: " .. tostring(rm_opt) .. +-- "\n eq_cfg: " .. tostring(eq_cfg) .. +-- "\n eq_def: " .. tostring(eq_def) .. +-- "\n novld : " .. tostring(novld) .. +-- "\n errtxt: " .. tostring(errtxt) ) + end + + -- lets continue with value returned from validate + eq_cfg = ( vvalue == cvalue ) -- update equal_config flag + local vexist = ( vvalue and (#vvalue > 0) ) and true or false -- not "nil" and "not empty" + local eq_def = ( vvalue == self.default ) -- equal_default flag + + -- (rmempty or optional) and (no data or equal_default) + if rm_opt and (not vexist or eq_def) then + if self:remove(section) then -- remove data from UCI + self.section.changed = true -- and push events + end + return + end + + -- not forcewrite and no changes, so nothing to write + if not self.forcewrite and eq_cfg then + return + end + + -- we should have a valid value here + assert (vvalue, "\n option: " .. self.option .. + "\n fvalue: " .. tostring(fvalue) .. + "\n fexist: " .. tostring(fexist) .. + "\n cvalue: " .. tostring(cvalue) .. + "\n vvalue: " .. tostring(vvalue) .. + "\n vexist: " .. tostring(vexist) .. + "\n rm_opt: " .. tostring(rm_opt) .. + "\n eq_cfg: " .. tostring(eq_cfg) .. + "\n eq_def: " .. tostring(eq_def) .. + "\n errtxt: " .. tostring(errtxt) ) + + -- write data to UCI; raise event only on changes + if self:write(section, vvalue) and not eq_cfg then + self.section.changed = true + end +end + +----------------------------------------------------------------------------- +-- copied from https://svn.nmap.org/nmap/nselib/url.lua +-- @author Diego Nehab +-- @author Eddie Bell +--[[ + URI parsing, composition and relative URL resolution + LuaSocket toolkit. + Author: Diego Nehab + RCS ID: $Id: url.lua,v 1.37 2005/11/22 08:33:29 diego Exp $ + parse_query and build_query added For nmap (Eddie Bell ) +]]-- +--- +-- Parses a URL and returns a table with all its parts according to RFC 2396. +-- +-- The following grammar describes the names given to the URL parts. +-- +-- ::= :///;?# +-- ::= @: +-- ::= [:] +-- :: = {/} +-- +-- +-- The leading / in / is considered part of +-- . +-- @param url URL of request. +-- @param default Table with default values for each field. +-- @return A table with the following fields, where RFC naming conventions have +-- been preserved: +-- scheme, authority, userinfo, +-- user, password, host, +-- port, path, params, +-- query, and fragment. +----------------------------------------------------------------------------- +function parse_url(url) --, default) + -- initialize default parameters + local parsed = {} +-- for i,v in base.pairs(default or parsed) do +-- parsed[i] = v +-- end + + -- remove whitespace +-- url = string.gsub(url, "%s", "") + -- get fragment + url = string.gsub(url, "#(.*)$", + function(f) + parsed.fragment = f + return "" + end) + -- get scheme. Lower-case according to RFC 3986 section 3.1. + url = string.gsub(url, "^([%w][%w%+%-%.]*)%:", + function(s) + parsed.scheme = string.lower(s); + return "" + end) + -- get authority + url = string.gsub(url, "^//([^/]*)", + function(n) + parsed.authority = n + return "" + end) + -- get query stringing + url = string.gsub(url, "%?(.*)", + function(q) + parsed.query = q + return "" + end) + -- get params + url = string.gsub(url, "%;(.*)", + function(p) + parsed.params = p + return "" + end) + -- path is whatever was left + parsed.path = url + + local authority = parsed.authority + if not authority then + return parsed + end + authority = string.gsub(authority,"^([^@]*)@", + function(u) + parsed.userinfo = u; + return "" + end) + authority = string.gsub(authority, ":([0-9]*)$", + function(p) + if p ~= "" then + parsed.port = p + end; + return "" + end) + if authority ~= "" then + parsed.host = authority + end + + local userinfo = parsed.userinfo + if not userinfo then + return parsed + end + userinfo = string.gsub(userinfo, ":([^:]*)$", + function(p) + parsed.password = p; + return "" + end) + parsed.user = userinfo + return parsed +end diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/view/admin_status/index/ddns.htm b/feeds/luci/applications/luci-app-ddns/luasrc/view/admin_status/index/ddns.htm new file mode 100644 index 0000000..9791065 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/view/admin_status/index/ddns.htm @@ -0,0 +1 @@ +<%+ddns/system_status%> diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm new file mode 100644 index 0000000..fd1d5be --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm @@ -0,0 +1,56 @@ + + + + +<%+cbi/valueheader%> + +
+ +<% +-- one button on top, one at the buttom +%> + /> + +

+ +<% +-- set a readable style taken from openwrt theme for textarea#syslog +-- in openwrt theme there are problems with a width of 100 so we check for theme and set to lower value +%> + +

+ +<% +-- one button on top, one at the buttom +%> + /> + +<%+cbi/valuefooter%> + diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm new file mode 100644 index 0000000..b69d780 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm @@ -0,0 +1,23 @@ + + + +  +<% if self.widget == "select" then %> + +<% elseif self.widget == "radio" then + local c = 0 + for i, key in pairs(self.keylist) do + c = c + 1 +%> + /> + > + ><%=self.vallist[i]%> +<% if c == self.size then c = 0 %><% if self.orientation == "horizontal" then %> <% else %>
<% end %> +<% end end %> +<% end %> +<%+cbi/valuefooter%> + diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/detail_value.htm b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/detail_value.htm new file mode 100644 index 0000000..cbe76ab --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/detail_value.htm @@ -0,0 +1,9 @@ + + +<%+cbi/valueheader%> + /> + + diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/global_value.htm b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/global_value.htm new file mode 100644 index 0000000..23ec059 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/global_value.htm @@ -0,0 +1,34 @@ + + +<%+cbi/valueheader%> + + + +/> +
+
+ <%:help%><%=self.description%> +
+ <%:Current setting%>: <%=self.date_string%> +
+ + + diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_doubleline.htm b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_doubleline.htm new file mode 100644 index 0000000..1d1b4be --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_doubleline.htm @@ -0,0 +1,10 @@ + + +<%+cbi/valueheader%> + +<%=self:set_one(section)%> +
+<%=self:set_two(section)%> + +<%+cbi/valuefooter%> + diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_enabled.htm b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_enabled.htm new file mode 100644 index 0000000..2efc125 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_enabled.htm @@ -0,0 +1,16 @@ + + +<%+cbi/valueheader%> + + /> + + /> +> + +<%+cbi/valuefooter%> + diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_startstop.htm b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_startstop.htm new file mode 100644 index 0000000..327028c --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_startstop.htm @@ -0,0 +1,17 @@ + + +<%+cbi/valueheader%> + +<% if self:cfgvalue(section) ~= false then +-- We need to garantie that function cfgvalue run first to set missing parameters +%> + + + " style="font-size: 100%;" type="button" onclick="onclick_startstop(this.id)" + <%= + attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled") + %> /> +<% end %> + +<%+cbi/valuefooter%> + diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm new file mode 100644 index 0000000..b409ed0 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm @@ -0,0 +1,180 @@ + + + + + + diff --git a/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm new file mode 100644 index 0000000..5bdcb03 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm @@ -0,0 +1,144 @@ + + + + +
+ <%:Dynamic DNS%> + + + + + + + + + + + + +
<%:Configuration%><%:Next Update%><%:Lookup Hostname%><%:Registered IP%><%:Network%>

<%:Collecting data...%>
+
+ diff --git a/feeds/luci/applications/luci-app-ddns/po/ca/ddns.po b/feeds/luci/applications/luci-app-ddns/po/ca/ddns.po new file mode 100644 index 0000000..69be6ed --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/ca/ddns.po @@ -0,0 +1,733 @@ +# ddns.pot +# generated from ./applications/luci-ddns/luasrc/i18n/ddns.en.lua +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2014-07-03 20:30+0200\n" +"Last-Translator: Alex \n" +"Language-Team: \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +#, fuzzy +msgid "Custom update-URL" +msgstr "URL d'actualització personalitzada" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "DNS dinàmic" + +#, fuzzy +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"El DNS dinàmic permet que el teu router sigui localitzable amb un nom de " +"màquin fix mentre té una adreça IP dinàmica." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Interfície" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Xarxa" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Contrasenya" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Nom d'usuari" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/cs/ddns.po b/feeds/luci/applications/luci-app-ddns/po/cs/ddns.po new file mode 100644 index 0000000..2366f62 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/cs/ddns.po @@ -0,0 +1,731 @@ +# Generated from applications/luci-ddns/luasrc/model/cbi/ddns/ddns.lua +# +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2014-06-20 23:22+0200\n" +"Last-Translator: koli \n" +"Language-Team: \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "Vlastní aktualizační-URL" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "Dynamické DNS" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"Dynamické DNS umožňuje, aby mohl být váš router dostupný pod pevným " +"hostname, zatímco se jeho IP adresa dynamicky mění." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Rozhraní" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Síť" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Heslo" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Uživatelské jméno" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/de/ddns.po b/feeds/luci/applications/luci-app-ddns/po/de/ddns.po new file mode 100644 index 0000000..39c1fdc --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/de/ddns.po @@ -0,0 +1,830 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.2-1\n" +"POT-Creation-Date: 2016-09-25 10:43+0200\n" +"PO-Revision-Date: 2016-09-25 10:43+0200\n" +"Last-Translator: Christian Schönebeck \n" +"Language-Team: \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.7.1\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-Basepath: .\n" + +msgid "&" +msgstr "&" + +msgid "-- custom --" +msgstr "-- benutzerdefiniert --" + +msgid "-- default --" +msgstr "-- Standard --" + +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +msgid "Allow non-public IP's" +msgstr "Erlaube Nicht-öffentliche IPs" + +msgid "Applying changes" +msgstr "Änderungen anwenden" + +msgid "Basic Settings" +msgstr "Grundlegende Einstellungen" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" +"Liste der Konfigurationshinweise um Dynamische DNS Aktualisierungen ohne " +"Einschränkungen zu nutzen" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" +"Liste der konfigurierten DDNS Konfigurationen und ihr momentaner Status." + +msgid "Bind Network" +msgstr "Bind-Netzwerk" + +msgid "Binding to a specific network not supported" +msgstr "'Bind' an ein bestimmtes Netzwerk wird nicht unterstützt" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" +"BusyBox's nslookup und Wget unterstützen nicht die IP Version für die " +"Kommunikation festzulegen!" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" +"BusyBox's nslookup und hostip unterstützen es nicht das TCP-Protokoll für " +"DNS Anfragen anstelle des standardmäßigen UDP-Protokolls zu verwenden!" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" +"BusyBox nslookup in der aktuellen compilierten Version kann gegebenen DNS-" +"Server nicht korrekt verarbeiten!" + +msgid "Casual users should not change this setting" +msgstr "Standard Benutzer sollten diese Einstellung nicht ändern." + +msgid "Change provider" +msgstr "Anbieter wechseln" + +msgid "Check Interval" +msgstr "Prüfinterval" + +msgid "Collecting data..." +msgstr "Sammle Daten..." + +msgid "Config error" +msgstr "Konfigurationsfehler" + +msgid "Configuration" +msgstr "Einstellungen" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" +"Konfiguriere hier die Details für alle Dynamik DNS Dienste einschließlich " +"dieser LuCI Anwendung." + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "Konfiguriere hier die Details für den gewählten Dynamik DNS Dienst." + +msgid "Current setting" +msgstr "Aktuelle Einstellung" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" +"Aktuell werden keine DDNS Aktualisierungen beim Systemstart oder bei " +"Netzwerkereignissen gestartet.
Dieses ist der Standard, wenn Sie die " +"DDSN Skripte über eigene Routinen (z.B. cron und Erzwungener Aktualisierung " +"von '0') starten." + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" +"Aktuell werden DDNS Aktualisierungen nicht bei Systemstart oder bei " +"Netzwerkereignissen gestartet.
Sie können jede Konfiguration hier " +"starten und stoppen. Sie wird bis zum nächsten Neustart ausgeführt." + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "Update-Skript um Aktualisierungen an Ihren DDNS Anbieter zu senden." + +msgid "Custom update-URL" +msgstr "Eigene Update-URL" + +msgid "Custom update-script" +msgstr "Eigenes Update-Skript" + +msgid "DDNS Autostart disabled" +msgstr "DDNS Autostart deaktiviert" + +msgid "DDNS Client Configuration" +msgstr "DDNS Client Konfiguration" + +msgid "DDNS Client Documentation" +msgstr "DDNS Client Dokumentation" + +msgid "DDNS Service provider" +msgstr "DDNS-Dienstanbieter" + +msgid "DNS requests via TCP not supported" +msgstr "DNS Anfragen über TCP nicht unterstützt" + +msgid "DNS-Server" +msgstr "DNS-Server" + +msgid "Date format" +msgstr "Datumsformat " + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" +"Definiert die Web-Seite von der die aktuelle IPv4-Adresse des System gelesen " +"wird." + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" +"Definiert die Web-Seite von der die aktuelle IPv6-Adresse des System gelesen " +"wird." + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" +"Definiert die Schnittstelle von der die aktuelle IP-Adresse des System " +"gelesen wird." + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" +"Definiert das Netzwerk von dem die aktuelle IPv4-Adresse des System gelesen " +"wird." + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" +"Definiert das Netzwerk von dem die aktuelle IPv6-Adresse des System gelesen " +"wird." + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" +"Definiert die Quelle von der die aktuelle IPv4-Adresse des Systems gelesen " +"wird, die an Ihren DDNS Anbieter gesendet wird." + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" +"Definiert die Quelle von der die aktuelle IPv6-Adresse des Systems gelesen " +"wird, die an Ihren DDNS Anbieter gesendet wird." + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" +"Legt fest welche IP-Adresse 'IPv4/IPv6' zum DDNS Anbieter gesendet wird" + +msgid "Details for" +msgstr "Details für" + +msgid "Directory contains Log files for each running section" +msgstr "" +"Das Verzeichnis enthält die Protokolldateien aller laufenden Konfigurationen." + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" +"Das Verzeichnis enthält die PID und andere Statusinformationen aller " +"laufenden Konfigurationen." + +msgid "Disabled" +msgstr "Deaktiviert" + +msgid "Domain" +msgstr "Domäne" + +msgid "Dynamic DNS" +msgstr "Dynamisches DNS" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"Dynamisches DNS erlaubt es, den Router bei dynamischer IP-Adresse über einen " +"festen DNS-Namen zu erreichen." + +msgid "Enable secure communication with DDNS provider" +msgstr "Aktiviert sichere Kommunikation mit dem DDNS Anbieter" + +msgid "Enabled" +msgstr "Aktiviert" + +msgid "Error" +msgstr "Fehler" + +msgid "Error Retry Counter" +msgstr "Wiederholungszähler bei Fehler" + +msgid "Error Retry Interval" +msgstr "Wiederholungsintervall bei Fehler" + +msgid "Event Network" +msgstr "Ereignis Netzwerk" + +msgid "File" +msgstr "Datei" + +msgid "File not found" +msgstr "Datei nicht gefunden" + +msgid "File not found or empty" +msgstr "Datei nicht gefunden oder leer" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" +"Folgen Sie dem Link
Hier finden Sie weitere Hinweise um Ihr System für " +"die Nutzung aller Optionen der DDNS Skripte zu optimieren." + +msgid "For detailed information about parameter settings look here." +msgstr "" +"Detaillierte Informationen zu den Parametereinstellungen finden Sie hier." + +msgid "For supported codes look here" +msgstr "Unterstützte Kodierungen finden Sie hier." + +msgid "Force IP Version" +msgstr "Erzwinge IP-Version" + +msgid "Force IP Version not supported" +msgstr "Erzwinge IP-Version nicht unterstützt" + +msgid "Force Interval" +msgstr "Erzwungene Aktualisierung" + +msgid "Force TCP on DNS" +msgstr "Erzwinge TCP bei DNS-Anfragen" + +msgid "Forced IP Version don't matched" +msgstr "Erzwungene IP Version stimmt nicht überein" + +msgid "Format" +msgstr "Format" + +msgid "Format: IP or FQDN" +msgstr "Format: IP-Adresse oder FQDN" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" +"GNU Wget verwendet die IP des gewählten Netzwerkes; cURL verwendet die " +"physikalische Schnittstelle." + +msgid "Global Settings" +msgstr "Globale Einstellungen" + +msgid "HTTPS not supported" +msgstr "HTTPS nicht unterstützt" + +msgid "Hints" +msgstr "Hinweise" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" +"Hostname/FQDN um zu überprüfen, ob eine Aktualisierung stattgefunden hat " +"oder notwendig ist" + +msgid "IP address source" +msgstr "IP-Adressquelle" + +msgid "IP address version" +msgstr "IP-Adressversion" + +msgid "IPv4-Address" +msgstr "IPv4-Adresse" + +msgid "IPv6 address must be given in square brackets" +msgstr "Eine IPv6 Adresse muss in eckigen Klammern angegeben werden" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" +"IPv6 wird vom System nicht (voll) unterstützt.
Bitte folgen Sie den " +"Hinweisen auf der Homepage von OpenWrt um die volle IPv6-Unterstützung zu " +"aktivieren
oder installieren Sie die aktuellste OpenWrt Version." + +msgid "IPv6 not supported" +msgstr "IPv6 nicht unterstützt" + +msgid "IPv6-Address" +msgstr "IPv6-Adresse" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "Wenn cURL und GNU Wget installiert sind, wird Wget verwendet." + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" +"Wenn deaktiviert kann die Aktualisierung nicht gestartet werden.
Weder " +"über das LuCI Web Interface noch von der Geräte-Konsole" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" +"Wenn Sie sichere Kommunikation verwenden, sollten Sie Serverzertifikate " +"überprüfen!" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" +"Wenn Sie Aktualisierungen für IPv4 und IPv6 senden möchten benötigen Sie " +"zwei Konfigurationen z.B. 'myddns_ipv4' und 'myddns_ipv6'" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" +"In einigen Versionen von OpenWrt wurde cURL/libcurl ohne Proxy Unterstützung " +"compiliert." + +msgid "Info" +msgstr "Info" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" +"Installieren Sie das 'ca-certificates' Paket oder die benötigten Zertifikate " +"von Hand in das Standardverzeichnis /etc/ssl/certs" + +msgid "Interface" +msgstr "Schnittstelle" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" +"Intervall zur Prüfung auf geänderte IP-Adresse
Minimum Wert 5 Minuten " +"== 300 Sekunden" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" +"Intervall mit dem Aktualisierungen erzwungen an den DDNS Anbieter gesendet " +"werden.
Ein Wert von '0' führt das Skript nur einmalig aus.
Der " +"Wert muss größer als das Prüfintervall sein oder '0'." + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" +"Es wird nicht empfohlen, dass Standard Benutzer die Einstellungen auf dieser " +"Seite ändern." + +msgid "Last Update" +msgstr "Letztes Aktualisierung" + +msgid "Loading" +msgstr "Lade" + +msgid "Log File Viewer" +msgstr "Protokolldatei" + +msgid "Log directory" +msgstr "Protokoll-Verzeichnis" + +msgid "Log length" +msgstr "Protokolllänge" + +msgid "Log to file" +msgstr "Protokoll in Datei schreiben" + +msgid "Log to syslog" +msgstr "Systemprotokoll verwenden" + +msgid "Lookup Hostname" +msgstr "Nachschlage-Hostname" + +msgid "NOT installed" +msgstr "NICHT installiert" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" +"Weder GNU Wget mit SSL noch cURL sind installiert um ein Netzwerk zur " +"Kommunikation festzulegen." + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" +"Weder GNU Wget mit SSL noch cURL sind installiert um sichere " +"Aktualisierungen über HTTPS Protokoll zu unterstützen." + +msgid "Network" +msgstr "Netzwerk" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "Netzwerk auf dem Ereignisse die ddns-updater Skripte starten" + +msgid "Never" +msgstr "Nie" + +msgid "Next Update" +msgstr "Nächste Aktualisierung" + +msgid "No certificates found" +msgstr "Keine Zertifikate gefunden" + +msgid "No data" +msgstr "Keine Daten" + +msgid "No logging" +msgstr "Keine Protokollierung" + +msgid "Non-public and by default blocked IP's" +msgstr "Nicht-öffentliche und standardmäßig blockierte IPs." + +msgid "Notice" +msgstr "Notiz" + +msgid "Number of last lines stored in log files" +msgstr "" +"Anzahl der letzten Zeilen die in der Protokolldatei gespeichert werden." + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" +"OPTIONAL: Erzwingt die Verwendung einer reinen IPv4/IPv6 Kommunikation." + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" +"OPTIONAL: Erzwingt die Verwendung von TCP anstelle von UDP bei DNS Anfragen." + +msgid "OPTIONAL: Network to use for communication" +msgstr "OPTIONAL: Netzwerk das zur Kommunikation verwendet werden soll." + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "OPTIONAL: Proxy-Server für Adresserkennung und Aktualisierungen" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" +"OPTIONAL: Ersetzt den voreingestellten DNS-Server um die 'Registrierte IP' " +"zu ermitteln." + +msgid "On Error the script will retry the failed action after given time" +msgstr "" +"Bei Fehlern wird das Skript die fehlerhafte Aktion nach der gegebenen Zeit " +"wiederholen" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "Das Skript wird nach der gegebenen Anzahl von Fehlversuchen beendet." + +msgid "OpenWrt Wiki" +msgstr "OpenWrt Wiki" + +msgid "Optional Encoded Parameter" +msgstr "Optionaler codierten Parameter" + +msgid "Optional Parameter" +msgstr "Optionaler Parameter" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "Optional: Ersetzt [PARAMENC] in der Update-URL (URL-codiert)" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "Optional: Ersetzt [PARAMENC] in der Update-URL (NICHT URL-codiert)" + +msgid "Overview" +msgstr "Übersicht" + +msgid "PROXY-Server" +msgstr "Proxy-Server" + +msgid "PROXY-Server not supported" +msgstr "Proxy-Server nicht unterstützt" + +msgid "Password" +msgstr "Passwort" + +msgid "Path to CA-Certificate" +msgstr "Pfad zum CA-Zertifikat" + +msgid "Please [Save & Apply] your changes first" +msgstr "Bitte [Speichern & Anwenden] Sie Änderungen zunächst" + +msgid "Please press [Read] button" +msgstr "Bitte Protokolldatei einlesen" + +msgid "Please update to the current version!" +msgstr "Aktualisieren Sie bitte auf die aktuelle Version!" + +msgid "Process ID" +msgstr "Prozess ID" + +msgid "Read / Reread log file" +msgstr "Protokolldatei (neu) einlesen" + +msgid "Really change DDNS provider?" +msgstr "Wirklich DDNS-Anbieter wechseln?" + +msgid "Registered IP" +msgstr "Registrierte IP" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "Ersetzt [DOMAIN] in der Update-URL" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "Ersetzt [PASSWORD] in der Update-URL (URL-codiert)" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "Ersetzt [USERNAME] in der Update-URL (URL-codiert)" + +msgid "Run once" +msgstr "Einmalig ausführen" + +msgid "Script" +msgstr "Skript" + +msgid "Show more" +msgstr "Zeige mehr" + +msgid "Software update required" +msgstr "Softwareaktualisierung nötig" + +msgid "Specifying a DNS-Server is not supported" +msgstr "Die Angabe eines DNS-Server wird nicht unterstützt" + +msgid "Start" +msgstr "Start" + +msgid "Start / Stop" +msgstr "Start / Stopp" + +msgid "Status directory" +msgstr "Status-Verzeichnis" + +msgid "Stopped" +msgstr "Angehalten" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" +"Die installierte Software 'ddns-scripts' unterstützt nicht alle verfügbaren " +"Optionen." + +msgid "The default setting of '0' will retry infinite." +msgstr "Beim Standard-Wert von '0' wird es endlos erneut versucht." + +msgid "There is no service configured." +msgstr "Kein Dienst konfiguriert" + +msgid "Timer Settings" +msgstr "Zeitgeber Einstellungen" + +msgid "To change global settings click here" +msgstr "Globale Einstellungen können sie hier ändern." + +msgid "To use cURL activate this option." +msgstr "Um cURL zu verwenden aktivieren sie diese Einstellung." + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "URL zur Adresserkennung für" + +msgid "Unknown error" +msgstr "Unbekannter Fehler" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" +"Update-URL um Aktualisierungen an Ihren DDNS Anbieter zu senden.
Folgen " +"Sie der Anleitung auf der Internet Seite des Anbieters." + +msgid "Update error" +msgstr "Aktualisierungsfehler" + +msgid "Use HTTP Secure" +msgstr "Verwende sicheres HTTP" + +msgid "Use cURL" +msgstr "Verwende cURL" + +msgid "User defined script to read systems IP-Address" +msgstr "" +"Definiert das Skript mit dem die aktuelle IP-Adresse des System gelesen " +"wird." + +msgid "Username" +msgstr "Benutzername" + +msgid "Using specific DNS Server not supported" +msgstr "Verwendung spezifischer DNS-Server wird nicht unterstützt" + +msgid "Verify" +msgstr "Überprüfen" + +msgid "Version" +msgstr "Version" + +msgid "Version Information" +msgstr "Versionsinformationen" + +msgid "Waiting for changes to be applied..." +msgstr "Änderungen werden angewandt..." + +msgid "Warning" +msgstr "Warnung" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" +"Schreibt detaillierte Meldungen in die Protokolldatei. Die Datei wird " +"automatisch gekürzt." + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" +"Schreibt Meldungen ins Systemprotokoll. Kritische Fehler werden immer in das " +"Systemprotokoll geschrieben." + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" +"Sie sollten das Programmpakete 'bind-host' oder 'knot-host' oder 'drill' " +"oder 'hostip' installieren, wenn Sie einen DNS Server angeben müssen um Ihre " +"registrierte IP zu ermitteln." + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" +"Sie sollten das Programmpakete 'bind-host' oder 'knot-host' oder 'drill' für " +"DNS Anfragen installieren." + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" +"Sie sollten das Programmpaket 'wget' oder 'curl' oder 'uclient-fetch' " +"installieren." + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" +"Sie sollten das Programmpaket 'wget' oder 'curl' oder 'uclient-fetch' mit " +"'libustream-*ssl' installieren." + +msgid "You should install 'wget' or 'curl' package." +msgstr "Sie sollten das Programmpaket 'wget' oder 'curl' installieren." + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" +"Sie sollten das Programmpaket 'wget' oder 'uclient-fetch' installieren oder " +"libcurl ersetzen." + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" +"cURL ist installiert, aber libcurl wurde ohne Proxy Unterstützung compiliert" + +msgid "cURL without Proxy Support" +msgstr "cURL ohne Proxy Unterstützung" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" +"kann lokale IP-Adresse nicht ermitteln. Bitte wählen Sie eine andere Quelle." + +msgid "can not resolve host:" +msgstr "Konnte Server nicht finden:" + +msgid "config error" +msgstr "Konfigurationsfehler" + +msgid "days" +msgstr "Tage" + +msgid "directory or path/file" +msgstr "Verzeichnis oder Pfad/zur/Datei" + +msgid "either url or script could be set" +msgstr "Weder Url noch Script ist definiert" + +msgid "enable here" +msgstr "hier aktivieren" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "Datei oder Verzeichnis nicht gefunden oder nicht 'IGNORE'" + +msgid "help" +msgstr "Hilfe" + +msgid "hours" +msgstr "Stunden" + +msgid "installed" +msgstr "installiert" + +msgid "invalid FQDN / required - Sample" +msgstr "ungültige FQDN / Pflichtfeld - Beispiel" + +msgid "minimum value '0'" +msgstr "Minimum Wert '0'" + +msgid "minimum value '1'" +msgstr "Minimum Wert '1'" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "Minimum Wert 5 Minuten == 300 Sekunden" + +msgid "minutes" +msgstr "Minuten" + +msgid "missing / required" +msgstr "fehlt / Pflichteingabe" + +msgid "must be greater or equal 'Check Interval'" +msgstr "muss größer als das Prüfintervall sein" + +msgid "must start with 'http://'" +msgstr "muss mit 'http://' beginnen" + +msgid "nc (netcat) can not connect" +msgstr "nc (netcat) kann keine Verbindung herstellen" + +msgid "never" +msgstr "nie" + +msgid "no data" +msgstr "Keine Daten" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" +"Skript nicht gefunden oder nicht ausführbar. - Beispiel: 'Pfad/zum/Skript.sh'" + +msgid "nslookup can not resolve host" +msgstr "nslookup kann den Namen nicht auflösen" + +msgid "or" +msgstr "oder" + +msgid "or higher" +msgstr "oder höher" + +msgid "please disable" +msgstr "Bitte deaktivieren" + +msgid "please remove entry" +msgstr "Bitte Eintrag entfernen" + +msgid "please select 'IPv4' address version" +msgstr "Bitte 'IPv4' Adressversion auswählen" + +msgid "please select 'IPv4' address version in" +msgstr "Bitte 'IPv4' Adressversion auswählen in den" + +msgid "please set to 'default'" +msgstr "Bitte auf 'Standard' setzen" + +msgid "proxy port missing" +msgstr "Proxy-Port fehlt" + +msgid "required" +msgstr "erforderlich" + +msgid "seconds" +msgstr "Sekunden" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" +"um HTTPS ohne Überprüfung der Server Zertifikate auszuführen (unsicher)" + +msgid "unknown error" +msgstr "Unbekannter Fehler" + +msgid "unspecific error" +msgstr "Unspezifischer Fehler" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "verwende Rechnername, FQDN, IPv4- oder IPv6-Adresse" diff --git a/feeds/luci/applications/luci-app-ddns/po/el/ddns.po b/feeds/luci/applications/luci-app-ddns/po/el/ddns.po new file mode 100644 index 0000000..fce0cb8 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/el/ddns.po @@ -0,0 +1,730 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2012-03-18 17:08+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "Προσαρμοσμένο URL-ενημέρωσης" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "Δυναμικό DNS" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"Το Δυναμικό DNS επιτρέπει στον δρομολογητή σας να είναι προσβάσιμος μέσω " +"ενός σταθερού ονόματος υπολογιστή παρόλο που η διεύθυνση IP του μπορεί να " +"αλλάζει δυναμικά." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Διεπαφή" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Δίκτυο" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Κωδικός πρόσβασης" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Όνομα χρήστη" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/es/ddns.po b/feeds/luci/applications/luci-app-ddns/po/es/ddns.po new file mode 100644 index 0000000..eb5a385 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/es/ddns.po @@ -0,0 +1,729 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2012-11-01 23:37+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "URL de actualización personalizada" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "DNS dinámico" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"DNS Dinámico le permite conectar a su router con un nombre concreto aunque " +"su dirección IP cambie dinámicamente." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Interfaz" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Red" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Contraseña" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Nombre de usuario" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/fr/ddns.po b/feeds/luci/applications/luci-app-ddns/po/fr/ddns.po new file mode 100644 index 0000000..2004989 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/fr/ddns.po @@ -0,0 +1,729 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2012-11-06 13:19+0200\n" +"Last-Translator: hogsim \n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "URL de mise à jour personnalisée" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "DNS Dynamique" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"Le DNS Dynamique permet au routeur d'être joint avec un nom d'hôte fixe bien " +"que changeant dynamiquement d'adresse IP." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Interface" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Réseau" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Mot de passe" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Nom d'utilisateur" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/he/ddns.po b/feeds/luci/applications/luci-app-ddns/po/he/ddns.po new file mode 100644 index 0000000..f6f2e2b --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/he/ddns.po @@ -0,0 +1,730 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2012-09-10 04:26+0200\n" +"Last-Translator: Snoof \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +#, fuzzy +msgid "Custom update-URL" +msgstr "עדכן URL באופן ידני" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "DNS דינאמי" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"שירות DDNS מאפשר גישה לנתב שלך ע\"י שם דומיין קבוע, בעוד כתובת ה- IP שלך " +"משתנה באופן דינמי." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "ממשק" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "רשת" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "סיסמא" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "שם משתמש" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/hu/ddns.po b/feeds/luci/applications/luci-app-ddns/po/hu/ddns.po new file mode 100644 index 0000000..1f91fa1 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/hu/ddns.po @@ -0,0 +1,729 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2013-01-28 13:49+0200\n" +"Last-Translator: Gábor \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "Egyéni update-URL" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "Dinamikus DNS" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"A dinamikus DNS lehetővé teszi, hogy a routere elérhető legyen egy fix host " +"névvel akkor is ha dinamikusan változó IP címmel rendelkezik." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Interfész" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Hálózat" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Jelszó" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Felhasználónév" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/it/ddns.po b/feeds/luci/applications/luci-app-ddns/po/it/ddns.po new file mode 100644 index 0000000..f59d053 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/it/ddns.po @@ -0,0 +1,729 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2013-02-03 13:53+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "URL di aggiornamento personalizzato" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "DNS Dinamico" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"DNS Dinamico permette al tuo router di essere raggiunto con un indirizzo " +"statico anche nel caso in cui tu disponga di un indirizzo IP dinamico." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Interfaccia" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Rete" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Password" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Nome Utente" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/ja/ddns.po b/feeds/luci/applications/luci-app-ddns/po/ja/ddns.po new file mode 100644 index 0000000..8fe0180 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/ja/ddns.po @@ -0,0 +1,729 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2013-10-05 17:19+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "手動アップデート-URL" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "ダイナミックDNS" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"ダイナミックDNSを使用することで、IPアドレスが変更されても固定のホスト名を使っ" +"てルーターにアクセスすることができます。" + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "インターフェース" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "ネットワーク" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "パスワード" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "ユーザー名" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/no/ddns.po b/feeds/luci/applications/luci-app-ddns/po/no/ddns.po new file mode 100644 index 0000000..a8efd0f --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/no/ddns.po @@ -0,0 +1,728 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: Lars Hardy \n" +"Language-Team: \n" +"Language: no\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "Egendefinert oppdaterings-URL" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "Dynamisk DNS" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"Dynamisk DNS tillater at enheten kan kontaktes ved hjelp av et fast " +"vertsnavn, uavhengig av om IP adressen endres dynamisk." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Grensesnitt" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Nettverk" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Passord" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Brukernavn" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/pl/ddns.po b/feeds/luci/applications/luci-app-ddns/po/pl/ddns.po new file mode 100644 index 0000000..ade7982 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/pl/ddns.po @@ -0,0 +1,730 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2013-01-06 13:08+0200\n" +"Last-Translator: obsy \n" +"Language-Team: \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "Niestandardowy adres aktualizacyjny" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "Dynamiczny DNS" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"Dynamiczny DNS umożliwia dostęp do routera z użyciem stałej nazwy hosta, " +"pomimo posiadania dynamicznie zmieniającego się adresu IP." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Interfejs" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Sieć" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Hasło" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Nazwa użytkownika" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/pt-br/ddns.po b/feeds/luci/applications/luci-app-ddns/po/pt-br/ddns.po new file mode 100644 index 0000000..4970846 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/pt-br/ddns.po @@ -0,0 +1,809 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2016-07-01 22:40-0300\n" +"Last-Translator: Matheus Dal Mago \n" +"Language-Team: \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 1.8.8\n" + +msgid "&" +msgstr "&" + +msgid "-- custom --" +msgstr "-- personalizado --" + +msgid "-- default --" +msgstr "-- padrão --" + +msgid "Advanced Settings" +msgstr "Configurações Avançadas" + +msgid "Allow non-public IP's" +msgstr "Permitir IPs não-públicos" + +msgid "Applying changes" +msgstr "Aplicar mudanças" + +msgid "Basic Settings" +msgstr "Configurações Básicas" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" +"Abaixo uma lista de dicas de configurações para seu sistema para rodar " +"atualizações de DNS Dinâmico sem limitações" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" +"Abaixo uma lista de configurações DDNS configuradas e seus estados atuais" + +msgid "Bind Network" +msgstr "Limitar Rede" + +msgid "Binding to a specific network not supported" +msgstr "Não suportado limitar a uma rede específica" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" +"nslookup e Wget do BusyBox não suportam que especifique a versão de IP a ser " +"usada para comunicação com o provedor DDNS!" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" +"nslookup e hostip do BusyBox não suportam que especifique para usar TCP em " +"vez do padrão UDP quando requisitando servidor DNS!" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" +"nslookup do BusyBox na versão compilada atualmente não trabalha corretamente " +"com servidores DNS dados!" + +msgid "Casual users should not change this setting" +msgstr "Usuários iniciantes não devem alterar esta configuração" + +msgid "Change provider" +msgstr "Mudando provedor" + +msgid "Check Interval" +msgstr "Checar Intervalo" + +msgid "Collecting data..." +msgstr "Coletando dados…" + +msgid "Config error" +msgstr "Erro de configuração" + +msgid "Configuration" +msgstr "Configuração" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" +"Configure aqui os detalhes para todos os serviços DNS Dinâmicos incluindo " +"esta aplicação LuCI." + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "Configure aqui os detalhes para o serviço DNS Dinâmico selecionado." + +msgid "Current setting" +msgstr "Configuração atual" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" +"Atualizações DDNS atuais não são iniciadas no boot ou nos eventos da " +"interface.
Isso é o normal se você roda scripts DDNS por conta própria " +"(ex. via cron com force_interval setado para ‘0’)" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" +"Atualizações DDNS atuais não são iniciadas no boot ou nos eventos da " +"interface.
Você pode iniciar/parar cada configuração aqui. Ela irá " +"rodar até o próximo reboto." + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" +"Scripts de atualização personalizados para serem usados para atualizar seu " +"Provedor DDNS." + +msgid "Custom update-URL" +msgstr "URL para atualização personalizada" + +msgid "Custom update-script" +msgstr "Script para atualização personalizado" + +msgid "DDNS Autostart disabled" +msgstr "Auto-inicialização de DDNS desabilitada" + +msgid "DDNS Client Configuration" +msgstr "Configuração de cliente DDNS" + +msgid "DDNS Client Documentation" +msgstr "Documentação de cliente DDNS" + +msgid "DDNS Service provider" +msgstr "Provedor de serviço DDNS" + +msgid "DNS requests via TCP not supported" +msgstr "Requisição de DNS via TCP não suportada" + +msgid "DNS-Server" +msgstr "Servidor DNS" + +msgid "Date format" +msgstr "Formato de data" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "Define a página Web para ler o endereço IPv4 do sistema" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "Define a página Web para ler o endereço IPv6 do sistema" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "Define a interface para ler o endereço IP do sistema" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "Define a rede para ler o endereço IPv4 do sistema" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "Define a rede para ler o endereço IPv6 do sistema" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" +"Define a origem para ler o endereço IPv4 do sistema, que será enviado ao " +"provedor DDNS" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" +"Define a origem para ler o endereço IPv6 do sistema, que será enviado ao " +"provedor DDNS" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "Define qual endereço IP ‘IPv4/IPv6’ é enviado ao provedor DDNS" + +msgid "Details for" +msgstr "Detalhes para" + +msgid "Directory contains Log files for each running section" +msgstr "Diretório contendo arquivos de Log para cada sessão em execução" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" +"Diretório contendo PID e outras informações de status para cada sessão em " +"execução" + +msgid "Disabled" +msgstr "Desabilitado" + +msgid "Domain" +msgstr "Domínio" + +msgid "Dynamic DNS" +msgstr "DNS Dinâmico" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"O DNS dinâmico permite que o seu roteador possa ser encontrado a partir de " +"um nome fixo, mesmo usando um Endereço IP dinâmico." + +msgid "Enable secure communication with DDNS provider" +msgstr "Habilitar comunicação segura com o provedor DDNS" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "Error" +msgstr "Erro" + +msgid "Error Retry Counter" +msgstr "Contador de Tentativas em Erro" + +msgid "Error Retry Interval" +msgstr "Intervalo de tentativas em Erro" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "Arquivo" + +msgid "File not found" +msgstr "Arquivo não encontrado" + +msgid "File not found or empty" +msgstr "Arquivo não encontrado ou vazio" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" +"Siga esse link
Você vai encontrar mais dicas para otimizar seu sistema " +"para rodar scripts DDNS com todas as opções" + +msgid "For detailed information about parameter settings look here." +msgstr "" +"Olhe aqui para informações mais detalhadas sobre as configurações de " +"parâmetro" + +msgid "For supported codes look here" +msgstr "Olhe aqui para códigos suportados" + +msgid "Force IP Version" +msgstr "Forçar versão de IP" + +msgid "Force IP Version not supported" +msgstr "Forçar versão de IP não suportado" + +msgid "Force Interval" +msgstr "Forçar intervalo" + +msgid "Force TCP on DNS" +msgstr "Forçar TCP em DNS" + +msgid "Forced IP Version don't matched" +msgstr "Forçar versão de IP não corresponde" + +msgid "Format" +msgstr "Formato" + +msgid "Format: IP or FQDN" +msgstr "Formato: IP ou FQDN" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "GNU Wget usará o IP da rede informada, cURL usará a interface física" + +msgid "Global Settings" +msgstr "Configurações Globais" + +msgid "HTTPS not supported" +msgstr "HTTPS não suportado" + +msgid "Hints" +msgstr "Dicas" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" +"Hostname/FQDN a ser validado, se atualização de IP acontecer ou for " +"necessária" + +msgid "IP address source" +msgstr "Fonte do endereço IP" + +msgid "IP address version" +msgstr "Versão do endereço IP" + +msgid "IPv4-Address" +msgstr "Endereço IPv4" + +msgid "IPv6 address must be given in square brackets" +msgstr "Endereço IPv6 deve estar entre colchetes" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" +"IPv6 não é (completamente) suportado por este sistema
Por favor siga as " +"instruções na página inicial do OpenWrt para habilitar o suporte ao IPv6
ou atualize seu sistema para a última distribuição do OpenWrt" + +msgid "IPv6 not supported" +msgstr "IPv6 não suportado" + +msgid "IPv6-Address" +msgstr "Endereço IPv6" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "Se ambos cURL e GNU Wget estão instalados, Wget é utilizado por padrão" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" +"Se esta sessão do serviço está desabilidade, ele não pôde ser iniciado.
nem da interface LuCI nem do console" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" +"Você deve verificar os certificados do servidor caso estiver utilizando " +"comunicação segura" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" +"Se deseja enviar atualizações para IPv4 e IPv6 você deve definir duas " +"configurações separadas. Ex.: ‘myddns_ipv4’ e ‘myddns_ipv6’" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" +"Em algumas versões do OpenWrt cURL/libcurl é compilada sem suporte a proxy." + +msgid "Info" +msgstr "Informações" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" +"Instale manualmente o pacote ’ca-certificates’ ou certificados necessários " +"no diretório padrão /etc/ssl/certs" + +msgid "Interface" +msgstr "Interface" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" +"Intervalo para checar mudança no IP
Valores abaixo de 5 minutos == 300 " +"segundos não são suportados" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" +"Intervalo para forçar envio de atualizações para o provedor DDNS
Definindo esse parâmetro em 0 irá forçar o script a rodar apenas uma " +"vez>br />Valores menores que 'Check Interval', exceto '0', não são suportados" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" +"Não é recomendado que usuários iniciantes alterem configurações nessa página" + +msgid "Last Update" +msgstr "Última atualização" + +msgid "Loading" +msgstr "Carregando" + +msgid "Log File Viewer" +msgstr "Visualizador de arquivo de log" + +msgid "Log directory" +msgstr "Diretório do log" + +msgid "Log length" +msgstr "Tamanho do log" + +msgid "Log to file" +msgstr "Log para arquivo" + +msgid "Log to syslog" +msgstr "Log para log do sistema" + +msgid "Lookup Hostname" +msgstr "Verificar nome de host" + +msgid "NOT installed" +msgstr "NÃO instalado" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" +"Nem GNU Wget com SSL nem cURL instalado para selecionar uma rede para usar " +"para comunicação" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" +"Nem GNU Wget com SSL nem cURL instalado para suportar atualizações seguras " +"via protocolo HTTPS" + +msgid "Network" +msgstr "Rede" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "Rede na qual os scripts de atualização DDNS serão iniciados" + +msgid "Never" +msgstr "Nunca" + +msgid "Next Update" +msgstr "Próxima atualização" + +msgid "No certificates found" +msgstr "Nenhum certificado encontrado" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "IPs não públicos e bloqueados por padrão" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "Número das últimas linhas salvas nos arquivos de log" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "OPCIONAL: Force o uso de apenas comunicação IPv4/IPv6 pura" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "OPCIONAL: Force o uso de TCB em vez do padrão UDP em requisições DNS" + +msgid "OPTIONAL: Network to use for communication" +msgstr "OPCIONAL: Rede para usar para comunicação" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "OPCIONAL: Servidor Proxy para detecção e atualização" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "OPCIONAL: Use servidor DNS não-padrão para detectar 'Registered IP'" + +msgid "On Error the script will retry the failed action after given time" +msgstr "Em Erro, o script irá tentar a ação que falhou após um tempo definido" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" +"Em Erro, o script irá para a execução após um número definido de tentativas" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "Parâmetro Opcionalmente Codificado" + +msgid "Optional Parameter" +msgstr "Parâmetro Opcional" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "Opcional: Substitui [PARAMEND] na URL de atualização" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "Opcional: Substitui [PARAMOPT] na URL de atualização" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "servidor PROXY" + +msgid "PROXY-Server not supported" +msgstr "Servidor PROXY não suportado" + +msgid "Password" +msgstr "Senha" + +msgid "Path to CA-Certificate" +msgstr "Caminho para os certificados CA" + +msgid "Please [Save & Apply] your changes first" +msgstr "Por favor antes [Salve e Aplique] suas alterações" + +msgid "Please press [Read] button" +msgstr "Por favor pressione o botão [Ler]" + +msgid "Please update to the current version!" +msgstr "Por favor atualize para a versão atual" + +msgid "Process ID" +msgstr "ID do processo" + +msgid "Read / Reread log file" +msgstr "Ler / Ler novamente o arquivo de log" + +msgid "Really change DDNS provider?" +msgstr "Mudar servidor DDNS?" + +msgid "Registered IP" +msgstr "IP registrado" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "Substitui [DOMAIN] na URL de atualização" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "Substitui [PASSWORD] na URL de atualização" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "Substitui [USERNAME] na URL de atualização" + +msgid "Run once" +msgstr "Rodar apenas uma vez" + +msgid "Script" +msgstr "Script" + +msgid "Show more" +msgstr "Mostrar mais" + +msgid "Software update required" +msgstr "Atualização de software necessária" + +msgid "Specifying a DNS-Server is not supported" +msgstr "Não é suportado especificar um servidor DNS" + +msgid "Start" +msgstr "Iniciar" + +msgid "Start / Stop" +msgstr "Iniciar / Parar" + +msgid "Status directory" +msgstr "Diretório de status" + +msgid "Stopped" +msgstr "Parado" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" +"O pacote 'ddns-scripts' instalado atualmente não suporta todas as " +"configurações disponíveis" + +msgid "The default setting of '0' will retry infinite." +msgstr "A configuração padrão de '0' terá infinitas tentativas" + +msgid "There is no service configured." +msgstr "Não há serviço configurado" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "Clique aqui para mudar configurações globais" + +msgid "To use cURL activate this option." +msgstr "Ative essa opção para usar cURL" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "Detectada pela URL" + +msgid "Unknown error" +msgstr "Erro desconhecido" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" +"URL a ser usada para atualizar seu provedor DDNS.
Siga as instruções " +"encontradas na página deles." + +msgid "Update error" +msgstr "Erro de atualização" + +msgid "Use HTTP Secure" +msgstr "Usar HTTP Seguro" + +msgid "Use cURL" +msgstr "Usar cURL" + +msgid "User defined script to read systems IP-Address" +msgstr "Script definido pelo usuário para ler endereço IP do sistema" + +msgid "Username" +msgstr "Usuário" + +msgid "Using specific DNS Server not supported" +msgstr "Usar servidor DNS específico não é suportado" + +msgid "Verify" +msgstr "Verificar" + +msgid "Version" +msgstr "Versão" + +msgid "Version Information" +msgstr "Informação de Versão" + +msgid "Waiting for changes to be applied..." +msgstr "Aguardando as alterações serem aplicadas…" + +msgid "Warning" +msgstr "Alerta" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" +"Escreve mensagens detalhadas no arquivo de log. Arquivo será automaticamente " +"truncado." + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" +"Escreve mensagens de log no log do sistema. Erros críticos sempre serão " +"escritos no log do sistema." + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" +"Você deve instalar o pacote 'bind-host' ou 'knot-host' ou 'drill' ou " +"'hostip' caso precise especificar um servidor DNS para detectar seu IP " +"registrado." + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" +"Você deve instalar o pacote 'bind-host' ou 'knot-host' ou 'drill' para " +"requisições DNS." + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "Você deve instalar o pacote 'wget' ou 'curl' ou 'uclient-fetch'." + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" +"Você deve instalar o pacote 'wget' ou 'curl' ou 'uclient-fetch' com " +"'libustream-*ssl'." + +msgid "You should install 'wget' or 'curl' package." +msgstr "Você deve instalar o pacote ‘wget’ ou ‘curl’." + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" +"Você deve instalar o pacote ‘wget’ ou ‘uclient-fetch’ ou substituir libcurl." + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "cURL está instalado, mas libcurl foi compilada sem suporte a proxy" + +msgid "cURL without Proxy Support" +msgstr "cURL sem suporte a proxy" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" +"não pôde detectar IP local. Por favor selecione uma combinação de fonte " +"diferente" + +msgid "can not resolve host:" +msgstr "não pôde resolver host:" + +msgid "config error" +msgstr "erro de configuração" + +msgid "days" +msgstr "dias" + +msgid "directory or path/file" +msgstr "diretório ou caminho/arquivo" + +msgid "either url or script could be set" +msgstr "url ou script pode ser setado" + +msgid "enable here" +msgstr "habilite aqui" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "arquivo ou diretório não encontrado ou não ‘IGNORE’" + +msgid "help" +msgstr "ajuda" + +msgid "hours" +msgstr "horas" + +msgid "installed" +msgstr "instalado" + +msgid "invalid FQDN / required - Sample" +msgstr "FQDN requerido inválido - Exemplo" + +msgid "minimum value '0'" +msgstr "valor mínimo ‘0’" + +msgid "minimum value '1'" +msgstr "valor mínimo ‘1’" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "valor mínimo 5 minutos == 300 segundos" + +msgid "minutes" +msgstr "minutos" + +msgid "missing / required" +msgstr "faltando / necessário" + +msgid "must be greater or equal 'Check Interval'" +msgstr "deve ser maior ou igual ‘Check Interval’" + +msgid "must start with 'http://'" +msgstr "deve iniciar com ‘http://'" + +msgid "nc (netcat) can not connect" +msgstr "nc (netcat) não pôde conectar" + +msgid "never" +msgstr "nunca" + +msgid "no data" +msgstr "sem dados" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "não encontrado ou não executável - Exemplo: ‘/caminho/para/script.sh'" + +msgid "nslookup can not resolve host" +msgstr "nslookup não pôde resolver o host" + +msgid "or" +msgstr "ou" + +msgid "or higher" +msgstr "ou maior" + +msgid "please disable" +msgstr "por favor desabilite" + +msgid "please remove entry" +msgstr "por favor remova a entrada" + +msgid "please select 'IPv4' address version" +msgstr "por favor selecione a versão de endereço ‘IPv4’" + +msgid "please select 'IPv4' address version in" +msgstr "por favor selecione a versão de endereço ‘IPv4’ em" + +msgid "please set to 'default'" +msgstr "por favor defina como ‘default’" + +msgid "proxy port missing" +msgstr "porta de proxy faltando" + +msgid "required" +msgstr "necessário" + +msgid "seconds" +msgstr "segundos" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" +"para rodar HTTPS sem verificação dos certificados do servidor (não seguro)" + +msgid "unknown error" +msgstr "erro desconhecido" + +msgid "unspecific error" +msgstr "erro não específico" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "use hostname, FQDN, endereço IPv4 ou IPv6" + +#~ msgid "" +#~ "You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +#~ "package for DNS requests." +#~ msgstr "" +#~ "Você deve instalar o pacote 'bind-host' ou 'knot-host' ou 'drill' ou " +#~ "'hostip' para requisições DNS." diff --git a/feeds/luci/applications/luci-app-ddns/po/pt/ddns.po b/feeds/luci/applications/luci-app-ddns/po/pt/ddns.po new file mode 100644 index 0000000..1a00efb --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/pt/ddns.po @@ -0,0 +1,731 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2013-05-31 23:52+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +#, fuzzy +msgid "Custom update-URL" +msgstr "URL para actualização personalizada" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "DNS Dinâmico" + +#, fuzzy +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"O DNS dinâmico permite que o seu router possa ser encontrado a partir de um " +"hostname fixo, mesmo usando um Endereço IP dinâmico." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Interface" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Rede" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Password" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Nome de Utilizador" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/ro/ddns.po b/feeds/luci/applications/luci-app-ddns/po/ro/ddns.po new file mode 100644 index 0000000..93424ad --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/ro/ddns.po @@ -0,0 +1,730 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2013-09-25 19:11+0200\n" +"Last-Translator: Mihai \n" +"Language-Team: \n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "Adresa particularizata de actualizare" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "DNS dinamic" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"DNS-ul dinamic permite accesarea routerului printr-un nume dns fix legat de " +"adresa dinamic IP." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Interfata" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Retea" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Parola" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Utilizator" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/ru/ddns.po b/feeds/luci/applications/luci-app-ddns/po/ru/ddns.po new file mode 100644 index 0000000..a41d1f4 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/ru/ddns.po @@ -0,0 +1,731 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2012-11-01 21:54+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.8.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "Пользовательский URL обновления" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "Динамический DNS" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"Динамический DNS позволяет вашему маршрутизатору иметь постоянное доменное " +"имя при динамическом IP-адресе." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Интерфейс" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Сеть" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Пароль" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Имя пользователя" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/templates/ddns.pot b/feeds/luci/applications/luci-app-ddns/po/templates/ddns.pot new file mode 100644 index 0000000..194bf81 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/templates/ddns.pot @@ -0,0 +1,716 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/tr/ddns.po b/feeds/luci/applications/luci-app-ddns/po/tr/ddns.po new file mode 100644 index 0000000..be3b1e5 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/tr/ddns.po @@ -0,0 +1,727 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2013-11-25 14:27+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Arabirim" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Ağ" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Parola" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Kullanıcı adı" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/uk/ddns.po b/feeds/luci/applications/luci-app-ddns/po/uk/ddns.po new file mode 100644 index 0000000..33c077e --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/uk/ddns.po @@ -0,0 +1,732 @@ +# Generated from applications/luci-ddns/luasrc/model/cbi/ddns/ddns.lua +# +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2012-12-29 12:47+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "Користувацький URL оновлення" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "Динамічний DNS" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"Динамічний DNS дозволяє вашому маршрутизатору бути доступним за фіксованим " +"доменним ім'ям, маючи динамічну IP-адресу." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "Інтерфейс" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "Мережа" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "Пароль" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "Ім'я користувача" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/vi/ddns.po b/feeds/luci/applications/luci-app-ddns/po/vi/ddns.po new file mode 100644 index 0000000..9d9ee07 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/vi/ddns.po @@ -0,0 +1,730 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2009-08-12 18:06+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: \n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +#, fuzzy +msgid "Custom update-URL" +msgstr "Tùy chỉnh cập nhật - URL" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "Dynamic DNS" + +#, fuzzy +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"Dynamic DNS cho phép bộ định tuyến có thể được đạt đến với một hostname cố " +"định, trong khi có một địa chỉ AP thay đổi năng động." + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/po/zh-cn/ddns.po b/feeds/luci/applications/luci-app-ddns/po/zh-cn/ddns.po new file mode 100644 index 0000000..91bb756 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/zh-cn/ddns.po @@ -0,0 +1,757 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2015-04-23 13:00+0800\n" +"Last-Translator: Syrone Wong \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "-- 自定义 --" + +msgid "-- default --" +msgstr "-- 默认 --" + +msgid "Advanced Settings" +msgstr "高级设置" + +msgid "Allow non-public IP's" +msgstr "允许非公网IP" + +msgid "Applying changes" +msgstr "正在应用更改" + +msgid "Basic Settings" +msgstr "基础设置" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "以下是一个能够让你的系统不受限制地进行动态DNS更新的设置贴士." + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "一下是当前已经配置好的DDNS设置项列表以及它们的当前状态." + +msgid "Bind Network" +msgstr "使用的接口" + +msgid "Binding to a specific network not supported" +msgstr "不支持绑定到一个指定的网络" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "与DDNS供应商通讯时BusyBox的nslookup和Wget不支持设置特定的IP协议版本." + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "普通用户不应该改变这个设置" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "检查时间周期" + +msgid "Collecting data..." +msgstr "正在收集数据..." + +msgid "Config error" +msgstr "配置错误" + +msgid "Configuration" +msgstr "设置" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "在这里修改动态DNS服务的详细配置" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "在这里修改选择的DDNS服务的详细配置" + +msgid "Current setting" +msgstr "当前设置" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" +"现在,DDNS更新在开机或者接口动作时不会被触发
如果你手工运行DDNS脚本的话" +"(例如使用cron时把force_interval设置为0),这是默认设置." + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" +"现在,DDNS更新在开机或者接口动作时不会被触发
你可以在这里开始/停止每一个" +"设置的条目.它在下次重启之前一直有效." + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "用来更新动态DNS的自定义脚本" + +msgid "Custom update-URL" +msgstr "自定义更新URL" + +msgid "Custom update-script" +msgstr "自定义更新脚本" + +msgid "DDNS Autostart disabled" +msgstr "DDNS自动启动已禁用." + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "DDNS服务提供商" + +msgid "DNS requests via TCP not supported" +msgstr "不支持使用TCP进行DNS解析" + +msgid "DNS-Server" +msgstr "DNS服务器" + +msgid "Date format" +msgstr "日期格式" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "设定用来读取系统IPv4地址的网页" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "设定用来读取系统IPv6地址的网页" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "设定用来读取系统IP地址的接口" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "设定用来读取系统IPv4地址的网络" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "设定用来读取系统IPv6地址的网络" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "设定IPv4地址的来源.这将会被发送给DDNS提供商" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "设定IPv6地址的来源.这将会被发送给DDNS提供商" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "设定哪一个IP地址(IPv4或IPv6)会被发送给DDNS提供商" + +msgid "Details for" +msgstr "详情:" + +msgid "Directory contains Log files for each running section" +msgstr "保存每一个运行中的设置的运行日志的目录" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "保存每个运行中的设置的PID以及其它状态信息的目录" + +msgid "Disabled" +msgstr "已禁用" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "动态DNS" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "动态DNS允许为拥有动态IP的主机配置一个固定的可访问域名." + +msgid "Enable secure communication with DDNS provider" +msgstr "启用安全连接与DDNS供应商联系" + +msgid "Enabled" +msgstr "已启用" + +msgid "Error" +msgstr "错误" + +msgid "Error Retry Counter" +msgstr "错误重试计数" + +msgid "Error Retry Interval" +msgstr "错误重试间隔" + +msgid "Event Network" +msgstr "事件网络" + +msgid "File" +msgstr "文件" + +msgid "File not found" +msgstr "文件未找到" + +msgid "File not found or empty" +msgstr "文件未找到或为空" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" +"打开这个链接
你将会得到更多关于如何通过所有设置项优化你的系统以运行DDNS" +"脚本的提示." + +msgid "For detailed information about parameter settings look here." +msgstr "请看这里获得关于参数设置的详细信息" + +msgid "For supported codes look here" +msgstr "查看这里获取支持的编码" + +msgid "Force IP Version" +msgstr "强制设定IP版本" + +msgid "Force IP Version not supported" +msgstr "不支持强制设定IP版本" + +msgid "Force Interval" +msgstr "设定周期" + +msgid "Force TCP on DNS" +msgstr "强制使用TCP进行DNS查询" + +msgid "Forced IP Version don't matched" +msgstr "强制设定的IP版本不匹配" + +msgid "Format" +msgstr "格式" + +msgid "Format: IP or FQDN" +msgstr "格式:IP或者FQDN" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "GNU Wget将会使用给定的网络的IP地址,而cURL将会使用物理接口" + +msgid "Global Settings" +msgstr "全局设置" + +msgid "HTTPS not supported" +msgstr "不支持HTTPS" + +msgid "Hints" +msgstr "提示" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "IP地址来源" + +msgid "IP address version" +msgstr "IP地址版本" + +msgid "IPv4-Address" +msgstr "IPv4地址" + +msgid "IPv6 address must be given in square brackets" +msgstr "IPv6地址必须填写在中括号(\"[ ]\")内" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" +"当前系统暂时不能(完整地)支持IPv6
请查看OpenWrt首页的介绍以启用IPv6支持" +"
或者更新你的系统到最新OpenWrt版本" + +msgid "IPv6 not supported" +msgstr "IPv6不被支持" + +msgid "IPv6-Address" +msgstr "IPv6地址" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "如果cURL和GNU Wget同时被安装,那么Wget将会被优先使用." + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" +"如果服务配置被禁用那么它将不能被启动.
无论是通过LuCI页面或者是通过终端." + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" +"如果你需要同时更新IPv4和IPv6地址,你需要单独添加两个配置项(例" +"如'myddns_ipv4'和'myddns_ipv6')" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "OpenWrt中,cURL/libcurl的某些版本编译时没有启用代理服务器支持" + +msgid "Info" +msgstr "信息" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "接口" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "检查IP是否改变的时间隔
不支持低于5分钟(300秒)的数值." + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" +"强制向提供商更新DDNS的时间周期
把这个参数设置为0将会让脚本仅执行一次" +"
不支持低于\"检查时间周期\"的数值(除了0)." + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "强烈不建议初次使用的用户修改本页设定." + +msgid "Last Update" +msgstr "上次更新" + +msgid "Loading" +msgstr "加载中" + +msgid "Log File Viewer" +msgstr "日志查看器" + +msgid "Log directory" +msgstr "日志目录" + +msgid "Log length" +msgstr "日志长度" + +msgid "Log to file" +msgstr "把日志记录到文件" + +msgid "Log to syslog" +msgstr "把日志记录到系统日志" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法选择一个网络用于通信." + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "网络" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "DDNS更新脚本将会被运行于该网络" + +msgid "Never" +msgstr "从不" + +msgid "Next Update" +msgstr "下次更新" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "无数据" + +msgid "No logging" +msgstr "无日志" + +msgid "Non-public and by default blocked IP's" +msgstr "非公网IP以及默认被锁定的IP" + +msgid "Notice" +msgstr "提示" + +msgid "Number of last lines stored in log files" +msgstr "日志文件中的最后几行" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "可选:强制使用仅IPv4/IPv6通信." + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "可选:强制使用TCP而非UDP请求DNS." + +msgid "OPTIONAL: Network to use for communication" +msgstr "可选:用于通信的网络" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "可选:用于检测以及更新的代理服务器" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "可选:使用非默认DNS服务器检测\"已注册的IP地址\"" + +msgid "On Error the script will retry the failed action after given time" +msgstr "当出错时,脚本将会重试失败的动作的次数" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "当出错时,脚本将会重试该次数之后退出" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "总览" + +msgid "PROXY-Server" +msgstr "代理服务器" + +msgid "PROXY-Server not supported" +msgstr "不支持代理服务器" + +msgid "Password" +msgstr "密码" + +msgid "Path to CA-Certificate" +msgstr "CA证书路径" + +msgid "Please [Save & Apply] your changes first" +msgstr "请先保存并应用您的设置" + +msgid "Please press [Read] button" +msgstr "请按下\"读取\"按钮" + +msgid "Please update to the current version!" +msgstr "请更新到最新版本!" + +msgid "Process ID" +msgstr "处理ID" + +msgid "Read / Reread log file" +msgstr "读取/重新读取日志文件" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "已注册的IP地址" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "在更新URL中使用[DOMAIN]替换域名" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "在更新URL中使用[PASSWORD]替换密码" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "在更新URL中使用[USERNAME]替换用户名" + +msgid "Run once" +msgstr "运行一次" + +msgid "Script" +msgstr "脚本" + +msgid "Show more" +msgstr "查看更多" + +msgid "Software update required" +msgstr "需要进行软件更新" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "启用" + +msgid "Start / Stop" +msgstr "启用/禁用" + +msgid "Status directory" +msgstr "状态目录" + +msgid "Stopped" +msgstr "已停止" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "当前已安装的'ddns-scripts'软件包暂不支持所有可用设置项" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "没有已经配置好的服务项" + +msgid "Timer Settings" +msgstr "计时器设定" + +msgid "To change global settings click here" +msgstr "点击这里以更改全局设置" + +msgid "To use cURL activate this option." +msgstr "选中这个项以使用cURL" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "用于检测的URL" + +msgid "Unknown error" +msgstr "未知错误" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" +"DDNS提供商用于更新DDNS的URL
跟随教程你将会在它们的网站上提供这个URL." + +msgid "Update error" +msgstr "更新错误" + +msgid "Use HTTP Secure" +msgstr "使用HTTPS" + +msgid "Use cURL" +msgstr "使用cURL" + +msgid "User defined script to read systems IP-Address" +msgstr "使用设定的脚本来读取系统IP地址" + +msgid "Username" +msgstr "用户名" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "验证" + +msgid "Version" +msgstr "版本" + +msgid "Version Information" +msgstr "版本信息" + +msgid "Waiting for changes to be applied..." +msgstr "正在应用更改..." + +msgid "Warning" +msgstr "等待" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "向日志中写入详细信息.文件将会被自动减小." + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "把日志写入系统日志.无论是否启用这项,错误信息总是会被写入系统日志" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "cURL已经安装,但是libcurl编译时没有启用代理支持." + +msgid "cURL without Proxy Support" +msgstr "cURL不包含代理支持" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "不能确定本地IP.请更换IP来源." + +msgid "can not resolve host:" +msgstr "不能解析主机:" + +msgid "config error" +msgstr "配置错误" + +msgid "days" +msgstr "天" + +msgid "directory or path/file" +msgstr "目录或者到文件的路径" + +msgid "either url or script could be set" +msgstr "接受URL或者脚本" + +msgid "enable here" +msgstr "在这里启用" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "文件或目录未找到或未\"被忽视\"" + +msgid "help" +msgstr "帮助" + +msgid "hours" +msgstr "小时" + +msgid "installed" +msgstr "已安装" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "最小值0" + +msgid "minimum value '1'" +msgstr "最小值1" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "最小值为5分钟(300秒)" + +msgid "minutes" +msgstr "分钟" + +msgid "missing / required" +msgstr "必须填写" + +msgid "must be greater or equal 'Check Interval'" +msgstr "必须大于或等于\"检查时间周期\"" + +msgid "must start with 'http://'" +msgstr "必须以'http://'开头" + +msgid "nc (netcat) can not connect" +msgstr "nc(netcat)不可连接" + +msgid "never" +msgstr "从不" + +msgid "no data" +msgstr "无数据" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "未找到或者不可执行 - 示例: '/path/to/script.sh'" + +msgid "nslookup can not resolve host" +msgstr "nslookup不能解析主机" + +msgid "or" +msgstr "或者" + +msgid "or higher" +msgstr "或者更大" + +msgid "please disable" +msgstr "请禁用" + +msgid "please remove entry" +msgstr "请移除该字段" + +msgid "please select 'IPv4' address version" +msgstr "请设定IPv4地址" + +msgid "please select 'IPv4' address version in" +msgstr "请设定IPv4地址于" + +msgid "please set to 'default'" +msgstr "请设置为\"默认\"" + +msgid "proxy port missing" +msgstr "代理端口未填" + +msgid "required" +msgstr "必须填写" + +msgid "seconds" +msgstr "秒" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "使用HTTPS但不检查服务器证书(不安全)" + +msgid "unknown error" +msgstr "未知错误" + +msgid "unspecific error" +msgstr "未指定的错误" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "使用主机名或IPv4/IPv6地址" + +#~ msgid "" +#~ "Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS " +#~ "protocol." +#~ msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法使用HTTPS更新DDNS" + +#~ msgid "You should install BIND host package for DNS requests." +#~ msgstr "你需要安装BIND以请求DNS记录." + +#~ msgid "You should install GNU Wget with SSL (preferred) or cURL package." +#~ msgstr "你需要安装包含SSL支持的GNU Wget(推荐)或是cURL软件包." + +#~ msgid "You should install GNU Wget with SSL or cURL package." +#~ msgstr "你需要安装包含SSL支持的GNU Wget或是cURL软件包." + +#~ msgid "You should install GNU Wget with SSL or replace libcurl." +#~ msgstr "你需要安装包含SSL支持的GNU Wget或替换libcurl." diff --git a/feeds/luci/applications/luci-app-ddns/po/zh-tw/ddns.po b/feeds/luci/applications/luci-app-ddns/po/zh-tw/ddns.po new file mode 100644 index 0000000..ae0aaba --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/po/zh-tw/ddns.po @@ -0,0 +1,728 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-ddns 2.4.0-1\n" +"POT-Creation-Date: 2016-01-30 11:07+0100\n" +"PO-Revision-Date: 2013-08-07 15:53+0200\n" +"Last-Translator: Ethan \n" +"Language-Team: \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "&" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- default --" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow non-public IP's" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" +msgstr "" + +msgid "" +"Below is a list of configured DDNS configurations and their current state." +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" +msgstr "" + +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider!" +msgstr "" + +msgid "" +"BusyBox's nslookup and hostip do not support to specify to use TCP instead " +"of default UDP when requesting DNS server!" +msgstr "" + +msgid "" +"BusyBox's nslookup in the current compiled version does not handle given DNS " +"Servers correctly!" +msgstr "" + +msgid "Casual users should not change this setting" +msgstr "" + +msgid "Change provider" +msgstr "" + +msgid "Check Interval" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Config error" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" + +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" + +msgid "Custom update script to be used for updating your DDNS Provider." +msgstr "" + +msgid "Custom update-URL" +msgstr "自訂更新的URL" + +msgid "Custom update-script" +msgstr "" + +msgid "DDNS Autostart disabled" +msgstr "" + +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + +msgid "DDNS Service provider" +msgstr "" + +msgid "DNS requests via TCP not supported" +msgstr "" + +msgid "DNS-Server" +msgstr "" + +msgid "Date format" +msgstr "" + +msgid "Defines the Web page to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the Web page to read systems IPv6-Address from" +msgstr "" + +msgid "Defines the interface to read systems IP-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv4-Address from" +msgstr "" + +msgid "Defines the network to read systems IPv6-Address from" +msgstr "" + +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" +msgstr "" + +msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" +msgstr "" + +msgid "Details for" +msgstr "" + +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Domain" +msgstr "" + +msgid "Dynamic DNS" +msgstr "動態DNS" + +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." +msgstr "" +"動態DNS允許為主機配置一個固定的網域名稱,但該網路名稱卻是對應到動態的IP位置" + +msgid "Enable secure communication with DDNS provider" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Error Retry Counter" +msgstr "" + +msgid "Error Retry Interval" +msgstr "" + +msgid "Event Network" +msgstr "" + +msgid "File" +msgstr "" + +msgid "File not found" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" + +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + +msgid "Force IP Version" +msgstr "" + +msgid "Force IP Version not supported" +msgstr "" + +msgid "Force Interval" +msgstr "" + +msgid "Force TCP on DNS" +msgstr "" + +msgid "Forced IP Version don't matched" +msgstr "" + +msgid "Format" +msgstr "" + +msgid "Format: IP or FQDN" +msgstr "" + +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "HTTPS not supported" +msgstr "" + +msgid "Hints" +msgstr "" + +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" + +msgid "IP address source" +msgstr "" + +msgid "IP address version" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv6 address must be given in square brackets" +msgstr "" + +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" + +msgid "IPv6 not supported" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" + +msgid "If using secure communication you should verify server certificates!" +msgstr "" + +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgstr "" + +msgid "Info" +msgstr "" + +msgid "" +"Install 'ca-certificates' package or needed certificates by hand into /etc/" +"ssl/certs default directory" +msgstr "" + +msgid "Interface" +msgstr "界面" + +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" +msgstr "" + +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" + +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + +msgid "Last Update" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + +msgid "Log to file" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support secure updates via " +"HTTPS protocol." +msgstr "" + +msgid "Network" +msgstr "網路" + +msgid "Network on which the ddns-updater scripts will be started" +msgstr "" + +msgid "Never" +msgstr "" + +msgid "Next Update" +msgstr "" + +msgid "No certificates found" +msgstr "" + +msgid "No data" +msgstr "" + +msgid "No logging" +msgstr "" + +msgid "Non-public and by default blocked IP's" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Number of last lines stored in log files" +msgstr "" + +msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." +msgstr "" + +msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." +msgstr "" + +msgid "OPTIONAL: Network to use for communication" +msgstr "" + +msgid "OPTIONAL: Proxy-Server for detection and updates." +msgstr "" + +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgstr "" + +msgid "On Error the script will retry the failed action after given time" +msgstr "" + +msgid "On Error the script will stop execution after given number of retrys" +msgstr "" + +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PROXY-Server" +msgstr "" + +msgid "PROXY-Server not supported" +msgstr "" + +msgid "Password" +msgstr "密碼" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Please [Save & Apply] your changes first" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Process ID" +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Really change DDNS provider?" +msgstr "" + +msgid "Registered IP" +msgstr "" + +msgid "Replaces [DOMAIN] in Update-URL" +msgstr "" + +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Run once" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Show more" +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Specifying a DNS-Server is not supported" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Status directory" +msgstr "" + +msgid "Stopped" +msgstr "" + +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." +msgstr "" + +msgid "The default setting of '0' will retry infinite." +msgstr "" + +msgid "There is no service configured." +msgstr "" + +msgid "Timer Settings" +msgstr "" + +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + +msgid "URL" +msgstr "URL" + +msgid "URL to detect" +msgstr "" + +msgid "Unknown error" +msgstr "" + +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" + +msgid "Update error" +msgstr "" + +msgid "Use HTTP Secure" +msgstr "" + +msgid "Use cURL" +msgstr "" + +msgid "User defined script to read systems IP-Address" +msgstr "" + +msgid "Username" +msgstr "使用者名稱" + +msgid "Using specific DNS Server not supported" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." +msgstr "" + +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' " +"package, if you need to specify a DNS server to detect your registered IP." +msgstr "" + +msgid "" +"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS " +"requests." +msgstr "" + +msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-" +"*ssl' package." +msgstr "" + +msgid "You should install 'wget' or 'curl' package." +msgstr "" + +msgid "" +"You should install 'wget' or 'uclient-fetch' package or replace libcurl." +msgstr "" + +msgid "cURL is installed, but libcurl was compiled without proxy support." +msgstr "" + +msgid "cURL without Proxy Support" +msgstr "" + +msgid "can not detect local IP. Please select a different Source combination" +msgstr "" + +msgid "can not resolve host:" +msgstr "" + +msgid "config error" +msgstr "" + +msgid "days" +msgstr "" + +msgid "directory or path/file" +msgstr "" + +msgid "either url or script could be set" +msgstr "" + +msgid "enable here" +msgstr "" + +msgid "file or directory not found or not 'IGNORE'" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hours" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "invalid FQDN / required - Sample" +msgstr "" + +msgid "minimum value '0'" +msgstr "" + +msgid "minimum value '1'" +msgstr "" + +msgid "minimum value 5 minutes == 300 seconds" +msgstr "" + +msgid "minutes" +msgstr "" + +msgid "missing / required" +msgstr "" + +msgid "must be greater or equal 'Check Interval'" +msgstr "" + +msgid "must start with 'http://'" +msgstr "" + +msgid "nc (netcat) can not connect" +msgstr "" + +msgid "never" +msgstr "" + +msgid "no data" +msgstr "" + +msgid "not found or not executable - Sample: '/path/to/script.sh'" +msgstr "" + +msgid "nslookup can not resolve host" +msgstr "" + +msgid "or" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "please disable" +msgstr "" + +msgid "please remove entry" +msgstr "" + +msgid "please select 'IPv4' address version" +msgstr "" + +msgid "please select 'IPv4' address version in" +msgstr "" + +msgid "please set to 'default'" +msgstr "" + +msgid "proxy port missing" +msgstr "" + +msgid "required" +msgstr "" + +msgid "seconds" +msgstr "" + +msgid "to run HTTPS without verification of server certificates (insecure)" +msgstr "" + +msgid "unknown error" +msgstr "" + +msgid "unspecific error" +msgstr "" + +msgid "use hostname, FQDN, IPv4- or IPv6-Address" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ddns/root/etc/uci-defaults/40_luci-ddns b/feeds/luci/applications/luci-app-ddns/root/etc/uci-defaults/40_luci-ddns new file mode 100755 index 0000000..a82c1f9 --- /dev/null +++ b/feeds/luci/applications/luci-app-ddns/root/etc/uci-defaults/40_luci-ddns @@ -0,0 +1,10 @@ +#!/bin/sh + +# no longer needed for "Save and Apply" to restart ddns +uci -q batch <<-EOF >/dev/null + delete ucitrack.@ddns[-1] + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +return 0 diff --git a/feeds/luci/applications/luci-app-diag-core/Makefile b/feeds/luci/applications/luci-app-diag-core/Makefile new file mode 100644 index 0000000..ac9f499 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Diagnostics Tools (Core) +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-diag-core/luasrc/controller/luci_diag.lua b/feeds/luci/applications/luci-app-diag-core/luasrc/controller/luci_diag.lua new file mode 100644 index 0000000..b662d7f --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/luasrc/controller/luci_diag.lua @@ -0,0 +1,16 @@ +-- Copyright 2009 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.luci_diag", package.seeall) + +function index() + local e + + e = entry({"admin", "network", "diag_config"}, template("diag/network_config_index") , _("Configure Diagnostics"), 120) + e.index = true + e.dependent = true + + e = entry({"mini", "diag"}, template("diag/index"), _("Diagnostics"), 120) + e.index = true + e.dependent = true +end diff --git a/feeds/luci/applications/luci-app-diag-core/luasrc/view/diag/index.htm b/feeds/luci/applications/luci-app-diag-core/luasrc/view/diag/index.htm new file mode 100644 index 0000000..c667767 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/luasrc/view/diag/index.htm @@ -0,0 +1,10 @@ +<%# + Copyright 2009 Daniel Dickinson + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

<%:Diagnostics%>

+

<%:The entries in the menu allow you to perform diagnostic tests on your system to aid in troubleshooting.%>

+

<%:The diagnostics available under this menu depend on what modules you have installed on your device.%>

+<%+footer%> diff --git a/feeds/luci/applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm b/feeds/luci/applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm new file mode 100644 index 0000000..3d01453 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm @@ -0,0 +1,10 @@ +<%# + Copyright 2009 Daniel Dickinson + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

<%:Diagnostics%>

+

<%:With this menu you can configure network diagnostics, such as network device scans and ping tests.%>

+

<%:The diagnostics available under this menu depend on what modules you have installed on your device.%>

+<%+footer%> diff --git a/feeds/luci/applications/luci-app-diag-core/po/ca/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/ca/diag_core.po new file mode 100644 index 0000000..ffe0ded --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/ca/diag_core.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-01 23:52+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "Configuració de diagnòstics" + +msgid "Diagnostics" +msgstr "Diagnòstics" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-core/po/cs/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/cs/diag_core.po new file mode 100644 index 0000000..dcfea77 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/cs/diag_core.po @@ -0,0 +1,39 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-20 23:19+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "Nastavení diagnostiky" + +msgid "Diagnostics" +msgstr "Diagnostika" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Počet diagnostických testů, které jsou k dispozici v tomto menu je závislý " +"na modulech nainstalovaných ve vašem zařízení." + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Položky v menu vám umožní provádět systémové diagnostické testy, které vám " +"pomohou vyřešit problémy." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"V tomto menu můžete nastavit síťovou diagnostiku, jako je skenování síťových " +"zařízení a ping testů." diff --git a/feeds/luci/applications/luci-app-diag-core/po/de/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/de/diag_core.po new file mode 100644 index 0000000..feda0fc --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/de/diag_core.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-07-02 08:24+0200\n" +"Last-Translator: dgolle \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "Diagnose-Tests konfigurieren" + +msgid "Diagnostics" +msgstr "Diagnose" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Die verfügbaren Diagnose-Programme in diesem Menü hängen von den auf Ihrem " +"Gerät installierten Modulen ab." + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Falls es mit ihrem Gerät Probleme gibt können hier Diagnose-Tests " +"durchgeführt werden." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"Hier werden die Netzwerk Diagnose Tools konfiguriert (zB. Netzwerkscans und " +"Pings)." + +#~ msgid "l_d_diag" +#~ msgstr "Diagnose" diff --git a/feeds/luci/applications/luci-app-diag-core/po/el/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/el/diag_core.po new file mode 100644 index 0000000..8e57c52 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/el/diag_core.po @@ -0,0 +1,38 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-18 14:53+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: none\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Configure Diagnostics" +msgstr "Ρύθμιση Διαγνωστικών" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Η καταχωρήσεις στο μενού, σας επιτρέπουν να προβαίνετε σε διαγνωστικές " +"δοκιμές στο σύστημά σας, για την διευκόλυνση αντιμετώπισης προβλημάτων." + +#, fuzzy +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"Με αυτό το μενού, μπορείτε να παραμετροποιήσετε διαγνωστικά δικτύου, όπως " +"σαρώσεις συσκευών δικτύου και δοκιμές ping." diff --git a/feeds/luci/applications/luci-app-diag-core/po/en/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/en/diag_core.po new file mode 100644 index 0000000..aa030ef --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/en/diag_core.po @@ -0,0 +1,42 @@ +# Diagnostics Core. +# Copyright (C) 2009 Daniel Dickinson. +# Daniel Dickinson , 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: diag-core 0.1\n" +"PO-Revision-Date: 2009-07-17 04:54-0400\n" +"Last-Translator: Daniel Dickinson \n" +"Language-Team: en \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Configure Diagnostics" +msgstr "Configure Diagnostics" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." + +#~ msgid "l_d_diag" +#~ msgstr "Diagnostics" diff --git a/feeds/luci/applications/luci-app-diag-core/po/es/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/es/diag_core.po new file mode 100644 index 0000000..8b9b3b5 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/es/diag_core.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-07-28 23:25+0200\n" +"Last-Translator: Daniel \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "Configurar diagnósticos" + +msgid "Diagnostics" +msgstr "Diagnósticos" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Los diagnósticos disponibles bajo este menú dependen de qué módulos haya " +"instalado en su dispositivo." + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Este menú le permite realizar test de prueba de su sistema para ayudar en la " +"resolución de problemas." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"En este menú puede configurar diagnósticos de red como el escaneo de equipos " +"en red o pings." + +#~ msgid "l_d_diag" +#~ msgstr "Diagnośticos" diff --git a/feeds/luci/applications/luci-app-diag-core/po/fr/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/fr/diag_core.po new file mode 100644 index 0000000..a5b4e6a --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/fr/diag_core.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-11-06 13:21+0200\n" +"Last-Translator: hogsim \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "Configuration des diagnostics" + +msgid "Diagnostics" +msgstr "Diagnostiques" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Les diagnostics disponible ci-dessous dépendent des modules que vous avez " +"installé sur votre appareil. " + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Les items de ce menu vous permettent d'accomplir des diagnostics sur votre " +"système pour vous aider à le dépanner." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"Ce menu vous permet de configurer des diagnostics réseau, comme des " +"recherches de périphérique réseau et des tests par ping." + +#~ msgid "l_d_diag" +#~ msgstr "l_d_diag" diff --git a/feeds/luci/applications/luci-app-diag-core/po/he/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/he/diag_core.po new file mode 100644 index 0000000..b4d73e0 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/he/diag_core.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Configure Diagnostics" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-core/po/hu/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/hu/diag_core.po new file mode 100644 index 0000000..f9f6e66 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/hu/diag_core.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-07-05 16:44+0200\n" +"Last-Translator: Gyula \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "Diagnosztikai beállítások" + +msgid "Diagnostics" +msgstr "Diagnosztika" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Az itt található statisztikák attól függően változnak, hogy milyen modulokat " +"telepítettél az eszközödre." + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Ennek a menünek az elemei lehetővé teszik hálózati diagnosztikai tesztek " +"elvégzését a rendszeren a hibaelhárítás megkönnyítésére." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"Ebben a menüben beállíthatók a hálózati diagnosztika elemei, mint például " +"eszközök keresése és ping teszt." + +#~ msgid "l_d_diag" +#~ msgstr "l_d_diag" diff --git a/feeds/luci/applications/luci-app-diag-core/po/it/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/it/diag_core.po new file mode 100644 index 0000000..39d4ced --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/it/diag_core.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-02-03 13:54+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "Configura Diagnostici" + +msgid "Diagnostics" +msgstr "Diagnostiche" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Le funzioni di diagnostica disponibili in questo menu dipendono dai moduli " +"che avete installato sul vostro dispositivo." + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Gli stumenti nel menù possono servirti per diagnosi e test per aiutarti " +"nello scoprire le problematiche." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"Con questo menu puoi configurare la diagnostica di rete, come la scansione " +"di un dispositivo di rete o dei ping di test." + +#~ msgid "l_d_diag" +#~ msgstr "l_d_diag" diff --git a/feeds/luci/applications/luci-app-diag-core/po/ja/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/ja/diag_core.po new file mode 100644 index 0000000..f67657f --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/ja/diag_core.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-18 14:36+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Configure Diagnostics" +msgstr "診断機能設定" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-core/po/ms/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/ms/diag_core.po new file mode 100644 index 0000000..90fefc5 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/ms/diag_core.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Configure Diagnostics" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-core/po/no/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/no/diag_core.po new file mode 100644 index 0000000..4955d47 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/no/diag_core.po @@ -0,0 +1,35 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Configure Diagnostics" +msgstr "Konfigurer Diagnostikk" + +msgid "Diagnostics" +msgstr "Diagnostikk" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Diagnostikken tilgjengelig under denne menyen avhenger av hvilke moduler du " +"har installert på enheten." + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Oppføringene i menyen lar deg utføre diagnostiske tester på systemet ditt " +"til hjelp ved feilsøking." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"Her kan du konfigurere nettverks diagnostikk, som skanning etter nettverks " +"enheter og ping tester." + +#~ msgid "l_d_diag" +#~ msgstr "Nettverks Diagnostikk" diff --git a/feeds/luci/applications/luci-app-diag-core/po/pl/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/pl/diag_core.po new file mode 100644 index 0000000..0935fdb --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/pl/diag_core.po @@ -0,0 +1,43 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-08 13:17+0200\n" +"Last-Translator: Staszek \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "Konfiguracja diagnostyki" + +msgid "Diagnostics" +msgstr "Diagnostyka" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Liczba testów diagnostycznych dostępnych w tym menu jest uzależniona od " +"modułów zainstalowanych w tym urządzeniu." + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Wpisy w menu pozwalają na wykonanie testów diagnostycznych systemu pomocnych " +"w rozwiązywaniu problemów." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"W tym menu można skonfigurować diagnostykę sieci, jak np. skanowanie " +"urządzeń sieciowych lub testy ping." + +#~ msgid "l_d_diag" +#~ msgstr "l_d_diag" diff --git a/feeds/luci/applications/luci-app-diag-core/po/pt-br/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/pt-br/diag_core.po new file mode 100644 index 0000000..e27315b --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/pt-br/diag_core.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-08 03:14+0200\n" +"Last-Translator: luizluca \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Configure Diagnostics" +msgstr "Configura os Diagnósticos" + +msgid "Diagnostics" +msgstr "Diagnósticos" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Os diagnósticos disponíveis neste menu dependem de quais módulos você tem " +"instalado no seu dispositivo." + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"As entradas no menu permitem que você realize diagnósticos em seu sistema " +"para ajudar na resolução de problemas." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"Com este menu, você pode configurar o diagnóstico de rede como varredura de " +"dispositivos e testes de ping." + +#~ msgid "l_d_diag" +#~ msgstr "l_d_diag" diff --git a/feeds/luci/applications/luci-app-diag-core/po/pt/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/pt/diag_core.po new file mode 100644 index 0000000..6083f28 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/pt/diag_core.po @@ -0,0 +1,39 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-05-30 22:57+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "Configurar Diagnósticos" + +msgid "Diagnostics" +msgstr "Diagnósticos " + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Os diagnósticos disponíveis neste menu dependem dos módulos que tem " +"instalados no seu dispositivo. " + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"As entradas neste menu permitem levar a cabo testes de diagnóstico no seu " +"sistema para o ajudar na resolução de problemas." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"Com este menu pode configurar o diagnóstico de rede, tal como explorar " +"dispositivos de rede e testes ping." diff --git a/feeds/luci/applications/luci-app-diag-core/po/ro/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/ro/diag_core.po new file mode 100644 index 0000000..604841e --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/ro/diag_core.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-09 14:24+0200\n" +"Last-Translator: lex404 \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "Configurează diagnozele" + +# diagnostic/ diagnostice; suna oricum prea medical. Tehnic se foloseste diagnoza, din cate stiu. +msgid "Diagnostics" +msgstr "Diagnoze" + +# . +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Diagnozele disponibile sub acest meniu depind de ce module aveți instalate " +"pe device-ul dumneavoastră." + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Intrările din acest meniu permit utilizarea testelor de diagnoză în sistem " +"pentru a vă ajuta la rezolvarea problemelor." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"Cu acest meniu poți configura diagnoza în rețea, cum ar fi scanarea unor " +"dispozitive din rețea sau teste ping." + +#~ msgid "l_d_diag" +#~ msgstr "l_d_diag" diff --git a/feeds/luci/applications/luci-app-diag-core/po/ru/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/ru/diag_core.po new file mode 100644 index 0000000..1abaa8c --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/ru/diag_core.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: diag_core\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-08-15 11:44+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Configure Diagnostics" +msgstr "Настройки диагностики" + +msgid "Diagnostics" +msgstr "Диагностика" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Доступные в данном меню виды диагностики зависят от установленных на вашем " +"устройстве модулей. " + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Записи в меню позволять вам выполнить диагностику системы, чтобы помочь в " +"обнаружении проблем." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"Используя это меню, вы можете настроить диагностику сети, например, " +"сканирование сетевых устройств или ping-тест." + +#~ msgid "l_d_diag" +#~ msgstr "l_d_diag" diff --git a/feeds/luci/applications/luci-app-diag-core/po/sk/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/sk/diag_core.po new file mode 100644 index 0000000..389516f --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/sk/diag_core.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Configure Diagnostics" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-core/po/sv/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/sv/diag_core.po new file mode 100644 index 0000000..dd0a81a --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/sv/diag_core.po @@ -0,0 +1,31 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Configure Diagnostics" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-core/po/templates/diag_core.pot b/feeds/luci/applications/luci-app-diag-core/po/templates/diag_core.pot new file mode 100644 index 0000000..1b34f83 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/templates/diag_core.pot @@ -0,0 +1,23 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Configure Diagnostics" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-core/po/tr/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/tr/diag_core.po new file mode 100644 index 0000000..d0b6211 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/tr/diag_core.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Configure Diagnostics" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-core/po/uk/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/uk/diag_core.po new file mode 100644 index 0000000..eae9886 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/uk/diag_core.po @@ -0,0 +1,40 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-05-26 17:55+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "Конфігурування діагностики" + +msgid "Diagnostics" +msgstr "Діагностика" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" +"Доступні в цьому меню види діагностики залежать від того, які модулі " +"інстальовані на вашому пристроі." + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" +"Пункти меню дозволяють виконувати діагностичні тести на вашій системі, щоб " +"допомогти при усуненні неполадок." + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" +"Використовуючи це меню, ви можете сконфігурувати діагностику мережі, " +"наприклад, сканування мережевих пристроїв та пінг-тести." diff --git a/feeds/luci/applications/luci-app-diag-core/po/vi/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/vi/diag_core.po new file mode 100644 index 0000000..d0b6211 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/vi/diag_core.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Configure Diagnostics" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "" + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-core/po/zh-cn/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/zh-cn/diag_core.po new file mode 100644 index 0000000..e857d3d --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/zh-cn/diag_core.po @@ -0,0 +1,36 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-05 14:39+0200\n" +"Last-Translator: nKsyn \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "配置诊断" + +msgid "Diagnostics" +msgstr "诊断" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "可用的诊断依赖于设备上已经安装的诊断模块" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "下面的条目可以诊断测试系统,为排除故障提供信息" + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "在这里可以配置网络诊断,例如:扫描网络设备,进行ping测试等。" + +#~ msgid "l_d_diag" +#~ msgstr "l_d诊断" diff --git a/feeds/luci/applications/luci-app-diag-core/po/zh-tw/diag_core.po b/feeds/luci/applications/luci-app-diag-core/po/zh-tw/diag_core.po new file mode 100644 index 0000000..3cb3169 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-core/po/zh-tw/diag_core.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 12:47+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configure Diagnostics" +msgstr "診斷設定" + +msgid "Diagnostics" +msgstr "診斷" + +msgid "" +"The diagnostics available under this menu depend on what modules you have " +"installed on your device." +msgstr "這選單下的診斷機制可運用性, 端看你設備上已安裝的模組而定" + +msgid "" +"The entries in the menu allow you to perform diagnostic tests on your system " +"to aid in troubleshooting." +msgstr "選單內的項目允許你在系統內執行診斷測試以便解決疑難雜症" + +msgid "" +"With this menu you can configure network diagnostics, such as network device " +"scans and ping tests." +msgstr "採用這選項可以讓你設定網路診斷, 例如網路設備掃描跟ping的測試." diff --git a/feeds/luci/applications/luci-app-diag-devinfo/Makefile b/feeds/luci/applications/luci-app-diag-devinfo/Makefile new file mode 100644 index 0000000..1505b62 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/Makefile @@ -0,0 +1,18 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Diagnostics Tools (Device Info) +LUCI_DEPENDS:=+luci-app-diag-core +smap +netdiscover +mac-to-devinfo +httping +smap-to-devinfo +netdiscover-to-devinfo @BROKEN + +define Package/luci-app-diag-devinfo/conffiles +/etc/config/luci_devinfo +endef + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-diag-devinfo/luasrc/controller/luci_diag/devinfo_common.lua b/feeds/luci/applications/luci-app-diag-devinfo/luasrc/controller/luci_diag/devinfo_common.lua new file mode 100644 index 0000000..93f735c --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/luasrc/controller/luci_diag/devinfo_common.lua @@ -0,0 +1,185 @@ +-- Copyright 2009 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.luci_diag.devinfo_common", package.seeall) + +require("luci.i18n") +require("luci.util") +require("luci.sys") +require("luci.cbi") +require("luci.model.uci") + +local translate = luci.i18n.translate +local DummyValue = luci.cbi.DummyValue +local SimpleSection = luci.cbi.SimpleSection + +function index() + return -- no-op +end + +function run_processes(outnets, cmdfunc) + i = next(outnets, nil) + while (i) do + outnets[i]["output"] = luci.sys.exec(cmdfunc(outnets, i)) + i = next(outnets, i) + end +end + +function parse_output(devmap, outnets, haslink, type, mini, debug) + local curnet = next(outnets, nil) + + while (curnet) do + local output = outnets[curnet]["output"] + local subnet = outnets[curnet]["subnet"] + local ports = outnets[curnet]["ports"] + local interface = outnets[curnet]["interface"] + local netdevs = {} + devlines = luci.util.split(output) + if not devlines then + devlines = {} + table.insert(devlines, output) + end + + local j = nil + j = next(devlines, j) + + local found_a_device = false + + while (j) do + if devlines[j] and ( devlines[j] ~= "" ) then + found_a_device = true + local devtable + local row = {} + devtable = luci.util.split(devlines[j], ' | ') + row["ip"] = devtable[1] + if (not mini) then + row["mac"] = devtable[2] + end + if ( devtable[4] == 'unknown' ) then + row["vendor"] = devtable[3] + else + row["vendor"] = devtable[4] + end + row["type"] = devtable[5] + if (not mini) then + row["model"] = devtable[6] + end + if (haslink) then + row["config_page"] = devtable[7] + end + + if (debug) then + row["raw"] = devlines[j] + end + table.insert(netdevs, row) + end + j = next(devlines, j) + end + if not found_a_device then + local row = {} + row["ip"] = curnet + if (not mini) then + row["mac"] = "" + end + if (type == "smap") then + row["vendor"] = luci.i18n.translate("No SIP devices") + else + row["vendor"] = luci.i18n.translate("No devices detected") + end + row["type"] = luci.i18n.translate("check other networks") + if (not mini) then + row["model"] = "" + end + if (haslink) then + row["config_page"] = "" + end + if (debug) then + row["raw"] = output + end + table.insert(netdevs, row) + end + local s + if (type == "smap") then + if (mini) then + s = devmap:section(luci.cbi.Table, netdevs, luci.i18n.translate("SIP devices discovered for") .. " " .. curnet) + else + local interfacestring = "" + if ( interface ~= "" ) then + interfacestring = ", " .. interface + end + s = devmap:section(luci.cbi.Table, netdevs, luci.i18n.translate("SIP devices discovered for") .. " " .. curnet .. " (" .. subnet .. ":" .. ports .. interfacestring .. ")") + end + s.template = "diag/smapsection" + else + if (mini) then + s = devmap:section(luci.cbi.Table, netdevs, luci.i18n.translate("Devices discovered for") .. " " .. curnet) + else + local interfacestring = "" + if ( interface ~= "" ) then + interfacestring = ", " .. interface + end + s = devmap:section(luci.cbi.Table, netdevs, luci.i18n.translate("Devices discovered for") .. " " .. curnet .. " (" .. subnet .. interfacestring .. ")") + end + end + s:option(DummyValue, "ip", translate("IP Address")) + if (not mini) then + s:option(DummyValue, "mac", translate("MAC Address")) + end + s:option(DummyValue, "vendor", translate("Vendor")) + s:option(DummyValue, "type", translate("Device Type")) + if (not mini) then + s:option(DummyValue, "model", translate("Model")) + end + if (haslink) then + s:option(DummyValue, "config_page", translate("Link to Device")) + end + if (debug) then + s:option(DummyValue, "raw", translate("Raw")) + end + curnet = next(outnets, curnet) + end +end + +function get_network_device(interface) + local state = luci.model.uci.cursor_state() + state:load("network") + local dev + + return state:get("network", interface, "ifname") +end + + +function cbi_add_networks(field) + uci.cursor():foreach("network", "interface", + function (section) + if section[".name"] ~= "loopback" then + field:value(section[".name"]) + end + end + ) + field.titleref = luci.dispatcher.build_url("admin", "network", "network") +end + +function config_devinfo_scan(map, scannet) + local o + o = scannet:option(luci.cbi.Flag, "enable", translate("Enable")) + o.optional = false + o.rmempty = false + + o = scannet:option(luci.cbi.Value, "interface", translate("Interface")) + o.optional = false + luci.controller.luci_diag.devinfo_common.cbi_add_networks(o) + + local scansubnet + scansubnet = scannet:option(luci.cbi.Value, "subnet", translate("Subnet")) + scansubnet.optional = false + + o = scannet:option(luci.cbi.Value, "timeout", translate("Timeout"), translate("Time to wait for responses in seconds (default 10)")) + o.optional = true + + o = scannet:option(luci.cbi.Value, "repeat_count", translate("Repeat Count"), translate("Number of times to send requests (default 1)")) + o.optional = true + + o = scannet:option(luci.cbi.Value, "sleepreq", translate("Sleep Between Requests"), translate("Milliseconds to sleep between requests (default 100)")) + o.optional = true +end diff --git a/feeds/luci/applications/luci-app-diag-devinfo/luasrc/controller/luci_diag/luci_diag_devinfo.lua b/feeds/luci/applications/luci-app-diag-devinfo/luasrc/controller/luci_diag/luci_diag_devinfo.lua new file mode 100644 index 0000000..ebba03f --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/luasrc/controller/luci_diag/luci_diag_devinfo.lua @@ -0,0 +1,46 @@ +-- Copyright 2009 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.luci_diag.luci_diag_devinfo", package.seeall) + +function index() + local e + + e = entry({"admin", "voice", "diag", "phones"}, arcombine(cbi("luci_diag/smap_devinfo"), cbi("luci_diag/smap_devinfo_config")), _("Phones"), 10) + e.leaf = true + e.subindex = true + e.dependent = true + + e = entry({"admin", "voice", "diag", "phones", "config"}, cbi("luci_diag/smap_devinfo_config"), _("Configure"), 10) + + e = entry({"admin", "status", "smap_devinfo"}, cbi("luci_diag/smap_devinfo"), _("SIP Devices on Network"), 120) + e.leaf = true + e.dependent = true + + e = entry({"admin", "network", "diag_config", "netdiscover_devinfo_config"}, cbi("luci_diag/netdiscover_devinfo_config"), _("Network Device Scan"), 100) + e.leaf = true + e.dependent = true + + e = entry({"admin", "network", "diag_config", "smap_devinfo_config"}, cbi("luci_diag/smap_devinfo_config"), _("SIP Device Scan")) + e.leaf = true + e.dependent = true + + e = entry({"admin", "status", "netdiscover_devinfo"}, cbi("luci_diag/netdiscover_devinfo"), _("Devices on Network"), 90) + e.dependent = true + + e = entry({"admin", "network", "mactodevinfo"}, cbi("luci_diag/mactodevinfo"), _("MAC Device Info Overrides"), 190) + e.dependent = true + + e = entry({"mini", "diag", "phone_scan"}, cbi("luci_diag/smap_devinfo_mini"), _("Phone Scan"), 100) + e.dependent = true + + e = entry({"mini", "voice", "phones", "phone_scan_config"}, cbi("luci_diag/smap_devinfo_config_mini"), _("Config Phone Scan"), 90) + e.dependent = true + + e = entry({"mini", "diag", "netdiscover_devinfo"}, cbi("luci_diag/netdiscover_devinfo_mini"), _("Network Device Scan"), 10) + e.dependent = true + + e = entry({"mini", "network", "netdiscover_devinfo_config"}, cbi("luci_diag/netdiscover_devinfo_config_mini"), _("Device Scan Config")) + e.dependent = true + +end diff --git a/feeds/luci/applications/luci-app-diag-devinfo/luasrc/controller/luci_diag/netdiscover_common.lua b/feeds/luci/applications/luci-app-diag-devinfo/luasrc/controller/luci_diag/netdiscover_common.lua new file mode 100644 index 0000000..2e879a6 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/luasrc/controller/luci_diag/netdiscover_common.lua @@ -0,0 +1,91 @@ +-- Copyright 2009 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.luci_diag.netdiscover_common", package.seeall) + +require("luci.i18n") +require("luci.util") +require("luci.sys") +require("luci.cbi") +require("luci.model.uci") + +local translate = luci.i18n.translate +local DummyValue = luci.cbi.DummyValue +local SimpleSection = luci.cbi.SimpleSection + +function index() + return -- no-op +end + +function get_params() + + local netdiscover_uci = luci.model.uci.cursor() + netdiscover_uci:load("luci_devinfo") + local nettable = netdiscover_uci:get_all("luci_devinfo") + + local i + local subnet + local netdout + + local outnets = {} + + i = next(nettable, nil) + + while (i) do + if (netdiscover_uci:get("luci_devinfo", i) == "netdiscover_scannet") then + local scannet = netdiscover_uci:get_all("luci_devinfo", i) + if scannet["subnet"] and (scannet["subnet"] ~= "") and scannet["enable"] and ( scannet["enable"] == "1") then + local output = "" + local outrow = {} + outrow["interface"] = scannet["interface"] + outrow["timeout"] = 10 + local timeout = tonumber(scannet["timeout"]) + if timeout and ( timeout > 0 ) then + outrow["timeout"] = scannet["timeout"] + end + + outrow["repeat_count"] = 1 + local repcount = tonumber(scannet["repeat_count"]) + if repcount and ( repcount > 0 ) then + outrow["repeat_count"] = scannet["repeat_count"] + end + + outrow["sleepreq"] = 100 + local repcount = tonumber(scannet["sleepreq"]) + if repcount and ( repcount > 0 ) then + outrow["sleepreq"] = scannet["sleepreq"] + end + + outrow["subnet"] = scannet["subnet"] + outrow["output"] = output + outnets[i] = outrow + end + end + i = next(nettable, i) + end + return outnets +end + +function command_function(outnets, i) + local interface = luci.controller.luci_diag.devinfo_common.get_network_device(outnets[i]["interface"]) + + return "/usr/bin/netdiscover-to-devinfo " .. outnets[i]["subnet"] .. " " .. interface .. " " .. outnets[i]["timeout"] .. " -r " .. outnets[i]["repeat_count"] .. " -s " .. outnets[i]["sleepreq"] .. " 0 ) then + outrow["timeout"] = scannet["timeout"] + end + + outrow["repeat_count"] = 1 + local repcount = tonumber(scannet["repeat_count"]) + if repcount and ( repcount > 0 ) then + outrow["repeat_count"] = scannet["repeat_count"] + end + + outrow["sleepreq"] = 100 + local repcount = tonumber(scannet["sleepreq"]) + if repcount and ( repcount > 0 ) then + outrow["sleepreq"] = scannet["sleepreq"] + end + + if scannet["interface"] and ( scannet["interface"] ~= "" ) then + outrow["interface"] = scannet["interface"] + else + outrow["interface"] = "" + end + + outrow["ports"] = ports + outrow["output"] = output + outnets[i] = outrow + end + end + i = next(nettable, i) + end + return outnets +end + +function command_function(outnets, i) + + local interface = luci.controller.luci_diag.devinfo_common.get_network_device(outnets[i]["interface"]) + + return "/usr/bin/netsmap-to-devinfo -r " .. outnets[i]["subnet"] .. " -t " .. outnets[i]["timeout"] .. " -i " .. interface .. " -x -p " .. outnets[i]["ports"] .. " -c " .. outnets[i]["repeat_count"] .. " -s " .. outnets[i]["sleepreq"] .. " + +<%- +local rowcnt = 1 +function rowstyle() + rowcnt = rowcnt + 1 + return (rowcnt % 2) + 1 +end +-%> + + +
+ <% if self.title and #self.title > 0 then -%> + <%=self.title%> + <%- end %> +
<%=self.description%>
+
+ <%- local count = 0 -%> + + + <%- if not self.anonymous then -%> + <%- if self.sectionhead then -%> + + <%- else -%> + + <%- end -%> + <%- end -%> + <%- for i, k in pairs(self.children) do if not k.optional then -%> + + <%- count = count + 1; end; end; if self.extedit or self.addremove then -%> + + <%- count = count + 1; end -%> + + + <%- if not self.anonymous then -%> + <%- if self.sectiondesc then -%> + + <%- else -%> + + <%- end -%> + <%- end -%> + <%- for i, k in pairs(self.children) do if not k.optional then -%> + + <%- end; end; if self.extedit or self.addremove then -%> + + <%- end -%> + + <%- local isempty = true + for i, k in ipairs(self:cfgsections()) do + section = k + isempty = false + scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" } + -%> + + <% if not self.anonymous then -%> + + <%- end %> + + <%- for k, node in ipairs(self.children) do -%> + <%- if not node.optional then -%> + <%- nodevalue = node:cfgvalue(section) -%> + <%- if nodevalue and ( nodevalue ~= "" ) and string.find(nodevalue, 'http://', 1, plain) then + node.href = nodevalue + node.template = "diag/smapvalue" + end + -%> + <%- node:render(section, scope or {}) -%> + <%- end -%> + <%- end -%> + + <%- if self.extedit or self.addremove then -%> + + <%- end -%> + + <%- end -%> + + <%- if isempty then -%> + + + + <%- end -%> +
<%=self.sectionhead%>  + <%- if k.titleref then -%><%- end -%> + <%-=k.title-%> + <%- if k.titleref then -%><%- end -%> +  
<%=self.sectiondesc%><%=k.description%>

<%=k%>

+ <%- if self.extedit then -%> + + <%=self.extedit:format(section)%> + <%- elseif type(self.extedit) == "function" then -%> + <%=self:extedit(section)%> + <%- end -%> + " title="<%:Edit%>"><%:Edit%> + <%- end; if self.addremove then %> + + <%- end -%> +

<%:This section contains no values yet%>
+ + <% if self.error then %> +
+
    <% for _, c in pairs(self.error) do for _, e in ipairs(c) do -%> +
  • <%=luci.util.pcdata(e):gsub("\n","
    ")%>
  • + <%- end end %>
+
+ <% end %> + + <%- if self.addremove then -%> + <% if self.template_addremove then include(self.template_addremove) else -%> +
+ <% if self.anonymous then %> + + <% else %> + <% if self.invalid_cts then -%>
<% end %> + + + <% if self.invalid_cts then -%> +
<%:Invalid%>
+ <%- end %> + <% end %> +
+ <%- end %> + <%- end -%> +
+
+ diff --git a/feeds/luci/applications/luci-app-diag-devinfo/luasrc/view/diag/smapvalue.htm b/feeds/luci/applications/luci-app-diag-devinfo/luasrc/view/diag/smapvalue.htm new file mode 100644 index 0000000..278985c --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/luasrc/view/diag/smapvalue.htm @@ -0,0 +1,12 @@ +<%# + Copyright 2009 Daniel Dickinson + Licensed to the public under the Apache License 2.0. +-%> + +<%+cbi/valueheader%> +<% if self.href then %><% end -%> + <%=luci.util.pcdata(self:cfgvalue(section))%> +<%- if self.href then %><%end%> +  + +<%+cbi/valuefooter%> diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/ca/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/ca/diag_devinfo.po new file mode 100644 index 0000000..9739a4b --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/ca/diag_devinfo.po @@ -0,0 +1,209 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-02 05:29+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "Accions" + +msgid "Add" +msgstr "Afegeix" + +msgid "Beginning of MAC address range" +msgstr "" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "Configura" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "Suprimeix" + +msgid "Device Scan Config" +msgstr "" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "Devices discovered for" + +msgid "Devices on Network" +msgstr "" + +msgid "Edit" +msgstr "Edita" + +msgid "Enable" +msgstr "Habilita" + +msgid "End of MAC address range" +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "Adreça IP" + +msgid "Interface" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Link to Device" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" + +msgid "Model" +msgstr "Model" + +msgid "Name" +msgstr "Nom" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "Cap dispositiu SIP" + +msgid "No devices detected" +msgstr "Cap dispositiu detectat" + +msgid "Number of times to send requests (default 1)" +msgstr "" + +msgid "OUI Owner" +msgstr "Propietari OUI" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "Informació de telèfon" + +msgid "Phone Scan" +msgstr "" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "Telèfons" + +msgid "Ports" +msgstr "Ports" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "" + +msgid "SIP Device Scan" +msgstr "" + +msgid "SIP Device Scanning Configuration" +msgstr "" + +msgid "SIP Devices on Network" +msgstr "" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "" + +msgid "Subnet" +msgstr "Subxarxa" + +msgid "This section contains no values yet" +msgstr "Esta secció encara no conté valors" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "" + +msgid "Timeout" +msgstr "Temps d'espera" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "Venedor" + +msgid "check other networks" +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/cs/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/cs/diag_devinfo.po new file mode 100644 index 0000000..73fe67e --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/cs/diag_devinfo.po @@ -0,0 +1,209 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-11 19:32+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "Akce" + +msgid "Add" +msgstr "Přidat" + +msgid "Beginning of MAC address range" +msgstr "Začátek rozsahu MAC adres" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "Konfigurace" + +msgid "Configure Scans" +msgstr "Konfigurace skenů" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "Odstranit" + +msgid "Device Scan Config" +msgstr "" + +msgid "Device Type" +msgstr "Typ zařízení" + +msgid "Devices discovered for" +msgstr "Devices discovered for" + +msgid "Devices on Network" +msgstr "Zařízení na síti" + +msgid "Edit" +msgstr "Upravit" + +msgid "Enable" +msgstr "Povolit" + +msgid "End of MAC address range" +msgstr "Konec rozsahu MAC adres" + +msgid "Go to relevant configuration page" +msgstr "Přejít na příslušnou konfigurační stránku" + +msgid "IP Address" +msgstr "IP adresa" + +msgid "Interface" +msgstr "Rozhraní" + +msgid "Invalid" +msgstr "Neplatný" + +msgid "Link to Device" +msgstr "Odkaz na zařízení" + +msgid "MAC Address" +msgstr "MAC adresa" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "Jak dlouho spát mezi požadavky (milisekundy, výchozí 100)" + +msgid "Model" +msgstr "Model" + +msgid "Name" +msgstr "Jméno" + +msgid "Network Device Scan" +msgstr "Vyhledání síťových zařízení" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "Žádná zařízení SIP" + +msgid "No devices detected" +msgstr "Nebyla detekována žádná zařízení" + +msgid "Number of times to send requests (default 1)" +msgstr "Kolikrát odeslat požadavek (standardně 1)" + +msgid "OUI Owner" +msgstr "Vlastník OUI" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "Provést skenování (může trvat několik minut)" + +msgid "Phone Information" +msgstr "Informace o telefonu" + +msgid "Phone Scan" +msgstr "Vyhledání telefonů" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "Telefony" + +msgid "Ports" +msgstr "Porty" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "Počet opakování" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "Opakování skenování (může trvat několik minut)" + +msgid "SIP Device Information" +msgstr "Informace o zařízení SIP" + +msgid "SIP Device Scan" +msgstr "Skenování SIP zařízení" + +msgid "SIP Device Scanning Configuration" +msgstr "Konfigurace skenování SIP zařízení" + +msgid "SIP Devices on Network" +msgstr "Zařízení SIP na síti" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "Hledat zařízení na zadané síti" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "Nastavení skenování" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "Uspat mezi jednotlivými požadavky" + +msgid "Subnet" +msgstr "Podsíť" + +msgid "This section contains no values yet" +msgstr "Tato sekce zatím neobsahuje žádné hodnoty" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Doba čekání na odpovědi v sekundách (výchozí 10)" + +msgid "Timeout" +msgstr "Časový limit" + +msgid "Use Configuration" +msgstr "Použít nastavení" + +msgid "Vendor" +msgstr "Prodejce" + +msgid "check other networks" +msgstr "zkontrolovat ostatní sítě" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/de/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/de/diag_devinfo.po new file mode 100644 index 0000000..2401ece --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/de/diag_devinfo.po @@ -0,0 +1,221 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-08-10 02:08+0200\n" +"Last-Translator: Jo-Philipp \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "Aktionen" + +msgid "Add" +msgstr "Hinzufügen" + +msgid "Beginning of MAC address range" +msgstr "Beginn des MAC-Adress-Bereiches" + +msgid "Config Phone Scan" +msgstr "Telefonsuche konfigurieren" + +msgid "Configure" +msgstr "Konfigurieren" + +msgid "Configure Scans" +msgstr "Suche konfigurieren" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" +"Konfiguriere Suche für Geräte in gewählten Netzwerken. Das Verringern von " +"'Zeitüberschreitung', 'Wiederholungszähler' und/oder 'Pause zwischen " +"Anfragen' kann die Geschwindigkeit der Suche erhöhen, aber auch das Finden " +"einzelner Geräte verhindern." + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" +"Konfiguriere Suche für SIP-Gerätein gewählten Netzwerken. Das Verringern von " +"'Zeitüberschreitung', 'Wiederholungszähler' und/oder 'Pause zwischen " +"Anfragen' kann die Geschwindigkeit der Suche erhöhen, aber auch das Finden " +"einzelner Geräte verhindern." + +msgid "Delete" +msgstr "Löschen" + +msgid "Device Scan Config" +msgstr "Gerätesuche konfigurieren" + +msgid "Device Type" +msgstr "Geräte-Typ" + +msgid "Devices discovered for" +msgstr "Geräte gefunden für" + +msgid "Devices on Network" +msgstr "Geräte im Netzwerk" + +msgid "Edit" +msgstr "Bearbeiten" + +msgid "Enable" +msgstr "Aktivieren" + +msgid "End of MAC address range" +msgstr "Ende des MAC-Adress-Bereiches" + +msgid "Go to relevant configuration page" +msgstr "Gehe zu entsprechender Konfigurations-Seite" + +msgid "IP Address" +msgstr "IP-Adresse" + +msgid "Interface" +msgstr "Schnittstelle" + +msgid "Invalid" +msgstr "Ungültig" + +msgid "Link to Device" +msgstr "Verknüpfung zu Gerät" + +msgid "MAC Address" +msgstr "MAC-Adresse" + +msgid "MAC Device Info Overrides" +msgstr "Benutzerdefinierte MAC-zu-Gerät-Benennungen" + +msgid "MAC Device Override" +msgstr "Benutzerdefinierte MAC-zu-Gerät-Benennung" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" +"MAC-Adressbereich und Benennungen um die Informationen der System- und IEEE-" +"Datenbanken zu überschreiben" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "Wartezeit zwischen den Anfragen in Millisekunden (Standard 100)" + +msgid "Model" +msgstr "Modell" + +msgid "Name" +msgstr "Name" + +msgid "Network Device Scan" +msgstr "Netzwerkgerätesuche" + +msgid "Network Device Scanning Configuration" +msgstr "Konfiguration der Netzwerkgerätesuche" + +msgid "Networks to scan for devices" +msgstr "Zu durchsuchende Netzwerke" + +msgid "Networks to scan for supported devices" +msgstr "Nach unterstützten Geräten zu durchsuchende Netzwerke" + +msgid "No SIP devices" +msgstr "keine SIP-Geräte" + +msgid "No devices detected" +msgstr "keine Geräte gefunden" + +msgid "Number of times to send requests (default 1)" +msgstr "Anzahl der Versuche Anfragen zu senden (Standard 1)" + +msgid "OUI Owner" +msgstr "OUI-Organisation" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" +"Überschreibt die Informationen die durch das MAC-zu-Gerätename-Programm (mac-" +"to-devinfo) für einen bestimmten MAC-Adressbereich zurückgegeben werden" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "Führe Suche aus (Dies kann einige Minuten dauern)" + +msgid "Phone Information" +msgstr "Informationen zum Telefon" + +msgid "Phone Scan" +msgstr "Telefonsuche" + +msgid "Phone Scanning Configuration" +msgstr "Konfiguration der Telefonsuche" + +msgid "Phones" +msgstr "Telefone" + +msgid "Ports" +msgstr "Ports" + +msgid "Raw" +msgstr "Rohdaten" + +msgid "Repeat Count" +msgstr "Wiederholungsanzahl" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "Wiederhole Suche (Dies kann einige Minuten dauern)" + +msgid "SIP Device Information" +msgstr "SIP-Geräteinformationen" + +msgid "SIP Device Scan" +msgstr "SIP-Gerätesuche" + +msgid "SIP Device Scanning Configuration" +msgstr "Konfiguration der SIP-Gerätesuche" + +msgid "SIP Devices on Network" +msgstr "SIP-Geräte im Netzwerk" + +msgid "SIP devices discovered for" +msgstr "SIP-Geräte entdeckt für" + +msgid "Scan for devices on specified networks." +msgstr "Suche nach Geräten im spezifizierten Netzwerk" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "Suche nach SIP-unterstützenden Geräten im spezifizierten Netzwerk" + +msgid "Scanning Configuration" +msgstr "Such-Konfiguration" + +msgid "Scans for devices on specified networks." +msgstr "Scans for devices on specified networks." + +msgid "Sleep Between Requests" +msgstr "Wartezeit zwischen den Versuchen" + +msgid "Subnet" +msgstr "Subnetz" + +msgid "This section contains no values yet" +msgstr "Dieser Abschnitt enthält noch keine Werte" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Antwortwartezeit in Sekunden (Standard: 10)" + +msgid "Timeout" +msgstr "Zeitüberschreitung" + +msgid "Use Configuration" +msgstr "Verwende Konfiguration" + +msgid "Vendor" +msgstr "Hersteller" + +msgid "check other networks" +msgstr "Prüfe andere Netzwerke" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/el/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/el/diag_devinfo.po new file mode 100644 index 0000000..7a247cb --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/el/diag_devinfo.po @@ -0,0 +1,209 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-19 15:30+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: none\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Actions" +msgstr "" + +msgid "Add" +msgstr "Προσθήκη" + +msgid "Beginning of MAC address range" +msgstr "Αρχή εύρους διευθύνσεων MAC" + +msgid "Config Phone Scan" +msgstr "Ρύθμιση Σάρωσης Τηλεφώνων" + +msgid "Configure" +msgstr "Παραμετροποίηση" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "Διαγραφή" + +msgid "Device Scan Config" +msgstr "Ρύθμιση Σάρωσης Συσκευών" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "Devices discovered for" + +msgid "Devices on Network" +msgstr "Συσκευές στο Δίκτυο" + +msgid "Edit" +msgstr "Επεξεργασία" + +msgid "Enable" +msgstr "Ενεργοποίηση" + +msgid "End of MAC address range" +msgstr "Τέλος εύρους διευθύνσεων MAC" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "Διεύθυνση IP" + +msgid "Interface" +msgstr "Διεπαφή" + +msgid "Invalid" +msgstr "Μη έγκυρο" + +msgid "Link to Device" +msgstr "Ζεύξη με Συσκευή" + +msgid "MAC Address" +msgstr "Διεύθυνση MAC" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Name" +msgstr "Όνομα" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "Δεν υπάρχουν συσκευές SIP" + +msgid "No devices detected" +msgstr "Δεν ανιχνεύτηκαν συσκευές" + +msgid "Number of times to send requests (default 1)" +msgstr "" + +msgid "OUI Owner" +msgstr "Ιδιοκτήτης OUI" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "Πληροφορίες Τηλεφώνου" + +msgid "Phone Scan" +msgstr "Σάρωση Τηλεφώνων" + +msgid "Phone Scanning Configuration" +msgstr "Παραμετροποίηση Σάρωσης Τηλεφώνων" + +msgid "Phones" +msgstr "Τηλέφωνα" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "Ανεπεξέργαστα" + +msgid "Repeat Count" +msgstr "Επανάληψη Μέτρησης" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "Πληροφορίες Συσκευής SIP" + +msgid "SIP Device Scan" +msgstr "Σάρωση για συσκευές SIP" + +msgid "SIP Device Scanning Configuration" +msgstr "Παραμετροποίηση Σάρωσης Συσκευών SIP" + +msgid "SIP Devices on Network" +msgstr "Συσκευές SIP στο Δίκτυο" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "Σάρωση για συσκευές σε καθορισμένα δίκτυα." + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "Scans for devices on specified networks." + +msgid "Sleep Between Requests" +msgstr "" + +msgid "Subnet" +msgstr "Υποδίκτυο" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "" + +msgid "Timeout" +msgstr "" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "έλεγχος άλλων δικτύων" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/en/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/en/diag_devinfo.po new file mode 100644 index 0000000..7adbbea --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/en/diag_devinfo.po @@ -0,0 +1,213 @@ +# Diagnostics (Device Info). +# Copyright (C) 2009 Daniel Dickinson +# Daniel Dickinson , 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2009-07-17 04:22-0400\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Actions" +msgstr "" + +msgid "Add" +msgstr "Add" + +msgid "Beginning of MAC address range" +msgstr "Beginning of MAC address range" + +msgid "Config Phone Scan" +msgstr "Config Phone Scan" + +msgid "Configure" +msgstr "Configure" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "Delete" + +msgid "Device Scan Config" +msgstr "Device Scan Config" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "" + +msgid "Devices on Network" +msgstr "Devices on Network" + +msgid "Edit" +msgstr "Edit" + +msgid "Enable" +msgstr "Enable" + +msgid "End of MAC address range" +msgstr "End of MAC address range" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "IP Address" + +msgid "Interface" +msgstr "Interface" + +msgid "Invalid" +msgstr "Invalid" + +msgid "Link to Device" +msgstr "Link to Device" + +msgid "MAC Address" +msgstr "MAC Address" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "MAC Device Override" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "MAC range and information used to override system and IEEE databases" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "Milliseconds to sleep between requests (default 100)" + +msgid "Model" +msgstr "" + +msgid "Name" +msgstr "Name" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "No SIP devices" + +msgid "No devices detected" +msgstr "No devices detected" + +msgid "Number of times to send requests (default 1)" +msgstr "Number of times to send requests (default 1)" + +msgid "OUI Owner" +msgstr "OUI Owner" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "Phone Information" + +msgid "Phone Scan" +msgstr "Phone Scan" + +msgid "Phone Scanning Configuration" +msgstr "Phone Scanning Configuration" + +msgid "Phones" +msgstr "Phones" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "Raw" + +msgid "Repeat Count" +msgstr "Repeat Count" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "SIP Device Information" + +msgid "SIP Device Scan" +msgstr "SIP Device Scan" + +msgid "SIP Device Scanning Configuration" +msgstr "SIP Device Scanning Configuration" + +msgid "SIP Devices on Network" +msgstr "SIP Devices on Network" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "Scan for devices on specified networks." + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "Scans for devices on specified networks." + +msgid "Sleep Between Requests" +msgstr "Sleep Between Requests" + +msgid "Subnet" +msgstr "Subnet" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Time to wait for responses in seconds (default 10)" + +msgid "Timeout" +msgstr "Timeout" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "check other networks" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/es/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/es/diag_devinfo.po new file mode 100644 index 0000000..0b44ff3 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/es/diag_devinfo.po @@ -0,0 +1,222 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-08-26 20:14+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "Acciones" + +msgid "Add" +msgstr "Añadir" + +msgid "Beginning of MAC address range" +msgstr "Inicio del rango de direcciones MAC" + +msgid "Config Phone Scan" +msgstr "Configurar escaneo de teléfono" + +msgid "Configure" +msgstr "Configurar" + +msgid "Configure Scans" +msgstr "Explorar configuraciones" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" +"Configure la exploración de dispositivos en las redes especificadas. " +"Reduciendo \"Espera\", \"Repeticiones\" y/o \"Parar entre peticiones\" puede " +"acelerar las exploración, pero también puede que no encuentre algunos " +"dispositivos." + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" +"Configure la exploración de dispositivos SIP soportados en las redes " +"especificadas. Reduciendo \"Espera\", \"Repeticiones\" y/o \"Parar entre " +"peticiones\" puede acelerar la exploración, pero también puede que no " +"encuentre algunos dispositivos." + +msgid "Delete" +msgstr "Borrar" + +msgid "Device Scan Config" +msgstr "Configuración del escaneo de dispositivos" + +msgid "Device Type" +msgstr "Tipo de dispositivo" + +msgid "Devices discovered for" +msgstr "Dispositivos encontrados para" + +msgid "Devices on Network" +msgstr "Dispositivos en red" + +msgid "Edit" +msgstr "Editar" + +msgid "Enable" +msgstr "Activar" + +msgid "End of MAC address range" +msgstr "Fin del rango de direcciones MAC" + +msgid "Go to relevant configuration page" +msgstr "Ir a la página de configuración pertinente" + +msgid "IP Address" +msgstr "Dirección IP" + +msgid "Interface" +msgstr "Interfaz" + +msgid "Invalid" +msgstr "No válido" + +msgid "Link to Device" +msgstr "Enlazar con dispositivo" + +msgid "MAC Address" +msgstr "Dirección MAC" + +msgid "MAC Device Info Overrides" +msgstr "Ignorar la información del dispositivo MAC" + +msgid "MAC Device Override" +msgstr "Ignorar MAC del dispositivo" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" +"Dirección MAC e información usada para ignorar el sistema y bases de datos " +"IEEE" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "Milisegundos a detenerse entre peticiones (100 por defecto)" + +msgid "Model" +msgstr "Modelo" + +msgid "Name" +msgstr "Nombre" + +msgid "Network Device Scan" +msgstr "Exploración de dispositivos de red" + +msgid "Network Device Scanning Configuration" +msgstr "Configuración de la exploración de dispositivos de red" + +msgid "Networks to scan for devices" +msgstr "Redes en las que escanear dispositivos" + +msgid "Networks to scan for supported devices" +msgstr "Redes en las que escanear dispositivos soportados" + +msgid "No SIP devices" +msgstr "No hay dispositivos SIP" + +msgid "No devices detected" +msgstr "No se detectan dispositivos" + +msgid "Number of times to send requests (default 1)" +msgstr "Número de veces que se enviarán peticiones (1 por defecto)" + +msgid "OUI Owner" +msgstr "Propietario del OUI" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" +"Ignorar la información devuelta por el script de información MAC a " +"dispositivo (mac-to-devinfo) para el rango de direcciones MAC que se " +"especifica" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "Realizar exploraciones (puede llevar unos minutos)" + +msgid "Phone Information" +msgstr "Información de teléfono" + +msgid "Phone Scan" +msgstr "Escanear teléfono" + +msgid "Phone Scanning Configuration" +msgstr "Configuración del escaneo telefónico" + +msgid "Phones" +msgstr "Teléfonos" + +msgid "Ports" +msgstr "Puertos" + +msgid "Raw" +msgstr "Sin tratar" + +msgid "Repeat Count" +msgstr "Número de repeticiones" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "Repetir exploraciones (puede llevar unos minutos)" + +msgid "SIP Device Information" +msgstr "Información de dispositivos SIP" + +msgid "SIP Device Scan" +msgstr "Escanear dispositivos SIP" + +msgid "SIP Device Scanning Configuration" +msgstr "Configuración de escaneo de dispositivos SIP" + +msgid "SIP Devices on Network" +msgstr "Dispositivos SIP en red" + +msgid "SIP devices discovered for" +msgstr "Dispositivos SIP para los que descubrir" + +msgid "Scan for devices on specified networks." +msgstr "Buscar dispositivos en las redes especificadas." + +msgid "Scan for supported SIP devices on specified networks." +msgstr "Explorar dispositivos SIP soportados en las redes especificadas." + +msgid "Scanning Configuration" +msgstr "Configuración de la exploración" + +msgid "Scans for devices on specified networks." +msgstr "Explora dispositivos en las redes especificadas." + +msgid "Sleep Between Requests" +msgstr "Detenerse entre peticiones" + +msgid "Subnet" +msgstr "Subred" + +msgid "This section contains no values yet" +msgstr "Esta sección aún no tiene valores" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Esperar de respuestas en segundos (10 por defecto)" + +msgid "Timeout" +msgstr "Espera" + +msgid "Use Configuration" +msgstr "Use la configuración" + +msgid "Vendor" +msgstr "Vendedor" + +msgid "check other networks" +msgstr "comprueba otras redes" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/fr/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/fr/diag_devinfo.po new file mode 100644 index 0000000..e3d3809 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/fr/diag_devinfo.po @@ -0,0 +1,220 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-01-26 12:49+0200\n" +"Last-Translator: kyas \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "Actions" + +msgid "Add" +msgstr "Ajouter" + +msgid "Beginning of MAC address range" +msgstr "Début de la plage d'adresses MAC" + +msgid "Config Phone Scan" +msgstr "Configurer la recherche de téléphone" + +msgid "Configure" +msgstr "Configurer" + +msgid "Configure Scans" +msgstr "Configurer la recherche" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" +"Configurer la recherche d'appareils sur un réseau spécifié. Réduire le " +"'Timeout', 'Repeat Count', et/ou 'Sleep Between Requests' peut augmenter la " +"vitesse des scans, mais peut aussi ne pas trouver certains appareils." + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" +"Configurer la recherche d'appareils SIP supporté sur un réseau spécifié. " +"Réduire le 'Timeout', 'Repeat Count', et/ou 'Sleep Between Requests' peut " +"augmenter la vitesse des scans, mais peut aussi ne pas trouver certains " +"appareils." + +msgid "Delete" +msgstr "Supprimer" + +msgid "Device Scan Config" +msgstr "Configuration de la recherche de périphériques" + +msgid "Device Type" +msgstr "Type d'appareil" + +msgid "Devices discovered for" +msgstr "Devices discovered for" + +msgid "Devices on Network" +msgstr "Périphériques sur le réseau" + +msgid "Edit" +msgstr "Éditer" + +msgid "Enable" +msgstr "Activer" + +msgid "End of MAC address range" +msgstr "Fin de la plage d'adresses MAC" + +msgid "Go to relevant configuration page" +msgstr "Aller à la page de configuration appropriée" + +msgid "IP Address" +msgstr "Adresse IP" + +msgid "Interface" +msgstr "Interface" + +msgid "Invalid" +msgstr "Invalide" + +msgid "Link to Device" +msgstr "Lien vers le périphérique" + +msgid "MAC Address" +msgstr "Adresse MAC" + +msgid "MAC Device Info Overrides" +msgstr "Modification info MAC du périphérique" + +msgid "MAC Device Override" +msgstr "Modification de MAC de périphériques" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" +"Gamme d'adresses MAC et informations utilisées pour modifier les bases " +"système et IEEE" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "Durée d'attente en millisecondes entre les requêtes (par défaut 100)" + +msgid "Model" +msgstr "Modèle" + +msgid "Name" +msgstr "Nom" + +msgid "Network Device Scan" +msgstr "Analyse des périphériques réseau" + +msgid "Network Device Scanning Configuration" +msgstr "Configuration de l'analyse des périphériques réseau" + +msgid "Networks to scan for devices" +msgstr "Réseaux à scanner pour les périphériques " + +msgid "Networks to scan for supported devices" +msgstr "Réseaux à scanner pour les périphériques supporté" + +msgid "No SIP devices" +msgstr "Pas de périphérique SIP" + +msgid "No devices detected" +msgstr "Pas de périphérique détecté" + +msgid "Number of times to send requests (default 1)" +msgstr "Nombre de tentatives d'envois des requêtes (1 par défaut)" + +msgid "OUI Owner" +msgstr "OUI du fabricant" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" +"Modifie les informations renvoyées par le script d'information « MAC vers " +"Périphérique » (mac-to-devinfo) pour une gamme donnée d'adresses MAC" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "Faire un scan ( Cela peut prendre quelques minutes)" + +msgid "Phone Information" +msgstr "Informations concernant le téléphone" + +msgid "Phone Scan" +msgstr "Recherche d'un téléphone" + +msgid "Phone Scanning Configuration" +msgstr "Configuration de la recherche d'un téléphone" + +msgid "Phones" +msgstr "Téléphones" + +msgid "Ports" +msgstr "Ports" + +msgid "Raw" +msgstr "Brut" + +msgid "Repeat Count" +msgstr "Nombre de tentatives" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "Refaire scans (cela peut prendre quelques minutes )" + +msgid "SIP Device Information" +msgstr "Informations concernant le périphérique SIP" + +msgid "SIP Device Scan" +msgstr "Recherche de périphérique SIP" + +msgid "SIP Device Scanning Configuration" +msgstr "Configuration de la recherche de périphériques SIP" + +msgid "SIP Devices on Network" +msgstr "Périphériques SIP sur le réseau" + +msgid "SIP devices discovered for" +msgstr "Périphériques SIP découvert pour" + +msgid "Scan for devices on specified networks." +msgstr "Rechercher des périphériques sur les réseaux spécifiés." + +msgid "Scan for supported SIP devices on specified networks." +msgstr "Rechercher des périphériques SIP supportés sur les réseaux spécifiés." + +msgid "Scanning Configuration" +msgstr "Analyse de la configuration" + +msgid "Scans for devices on specified networks." +msgstr "Recherches des périphériques sur les réseaux spécifiés." + +msgid "Sleep Between Requests" +msgstr "Attente entre les requêtes" + +msgid "Subnet" +msgstr "Sous-réseau" + +msgid "This section contains no values yet" +msgstr "Cette partie ne contient pas encore de valeur." + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Durée d'attente des réponses en secondes (par défaut 10)" + +msgid "Timeout" +msgstr "Timeout" + +msgid "Use Configuration" +msgstr "Utiliser la configuration" + +msgid "Vendor" +msgstr "Vendeur" + +msgid "check other networks" +msgstr "Explorer d'autres réseaux" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/he/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/he/diag_devinfo.po new file mode 100644 index 0000000..7161955 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/he/diag_devinfo.po @@ -0,0 +1,206 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Actions" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Beginning of MAC address range" +msgstr "" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Device Scan Config" +msgstr "" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "Devices discovered for" + +msgid "Devices on Network" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "End of MAC address range" +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Link to Device" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "" + +msgid "No devices detected" +msgstr "" + +msgid "Number of times to send requests (default 1)" +msgstr "" + +msgid "OUI Owner" +msgstr "" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "" + +msgid "Phone Scan" +msgstr "" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "" + +msgid "SIP Device Scan" +msgstr "" + +msgid "SIP Device Scanning Configuration" +msgstr "" + +msgid "SIP Devices on Network" +msgstr "" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "" + +msgid "Subnet" +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "" + +msgid "Timeout" +msgstr "" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/hu/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/hu/diag_devinfo.po new file mode 100644 index 0000000..52019941 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/hu/diag_devinfo.po @@ -0,0 +1,222 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-01-31 10:01+0200\n" +"Last-Translator: Gabor \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "Műveletek" + +msgid "Add" +msgstr "Hozzáadás" + +msgid "Beginning of MAC address range" +msgstr "MAC cím tartomány kezdete" + +msgid "Config Phone Scan" +msgstr "Telefon keresés beállításai" + +msgid "Configure" +msgstr "Beállítás" + +msgid "Configure Scans" +msgstr "Keresési beállítások" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" +"Állítsa be az eszközkeresést a megadott hálózatokon. Az 'Időlimit', " +"'Ismétlésszám', és/vagy 'Alvás a lekérdezések között' csökkentése " +"felgyorsíthatja a keresést, de lehet, hogy nem talál meg néhány eszközt." + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" +"Állítsa be a támogatott SIP eszközök keresését a megadott hálózatokon. Az " +"'Időlimit', 'Ismétlésszám', és/vagy 'Alvás a lekérdezések között' " +"csökkentése felgyorsíthatja a keresést, de lehet, hogy nem talál meg néhány " +"eszközt." + +msgid "Delete" +msgstr "Törlés" + +msgid "Device Scan Config" +msgstr "Eszköz keresés beállításai" + +msgid "Device Type" +msgstr "Eszköztípus" + +msgid "Devices discovered for" +msgstr "Felfedezett eszközök" + +msgid "Devices on Network" +msgstr "Eszközök a hálózatban" + +msgid "Edit" +msgstr "Szerkesztés" + +msgid "Enable" +msgstr "Engedélyezés" + +msgid "End of MAC address range" +msgstr "MAC cím tartomány vége" + +msgid "Go to relevant configuration page" +msgstr "Ugrás a kapcsolódó beállítások oldalára" + +msgid "IP Address" +msgstr "IP cím" + +msgid "Interface" +msgstr "Interfész" + +msgid "Invalid" +msgstr "Érvénytelen" + +msgid "Link to Device" +msgstr "Eszközre mutató hivatkozás" + +msgid "MAC Address" +msgstr "MAC cím" + +msgid "MAC Device Info Overrides" +msgstr "MAC eszköz információ felülbírálások" + +msgid "MAC Device Override" +msgstr "MAC eszköz felülbírálása" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" +"A rendszer és IEEE adatbázisok felülbíráláshoz használt MAC cím tartomány és " +"információ" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" +"A kérések küldése közötti szünet időtartama ezredmásodpercben " +"(alapértelmezés: 100)" + +msgid "Model" +msgstr "Típus" + +msgid "Name" +msgstr "Név" + +msgid "Network Device Scan" +msgstr "Hálózati eszközök keresése" + +msgid "Network Device Scanning Configuration" +msgstr "Hálózati eszközök keresési beállításai" + +msgid "Networks to scan for devices" +msgstr "Eszközök keresése ezekben a hálózatokban" + +msgid "Networks to scan for supported devices" +msgstr "Támogatott eszközök keresése ezekben a hálózatokban" + +msgid "No SIP devices" +msgstr "Nem találhatóak SIP eszközök" + +msgid "No devices detected" +msgstr "Nem található semmilyen eszköz" + +msgid "Number of times to send requests (default 1)" +msgstr "Az elküldött kérések száma (alapértelmezés: 1)" + +msgid "OUI Owner" +msgstr "OUI tulajdonos" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" +"A meghatározott tartományba tartozó MAC címeknél felülbírálja a 'MAC to " +"Device Info' szkript (mac-to-devinfo) által visszadott információt." + +msgid "Perform Scans (this can take a few minutes)" +msgstr "Keresés (ez eltarthat néhány percig)" + +msgid "Phone Information" +msgstr "Telefon információ" + +msgid "Phone Scan" +msgstr "Telefon keresés" + +msgid "Phone Scanning Configuration" +msgstr "Telefon keresési beállítások" + +msgid "Phones" +msgstr "Telefonok" + +msgid "Ports" +msgstr "Portok" + +msgid "Raw" +msgstr "Nyers" + +msgid "Repeat Count" +msgstr "Ismétlés száma" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "Keresés megismétlése (ez eltarthat néhány percig)" + +msgid "SIP Device Information" +msgstr "SIP eszköz információ" + +msgid "SIP Device Scan" +msgstr "SIP eszközök keresése" + +msgid "SIP Device Scanning Configuration" +msgstr "SIP eszköz keresés beállításai" + +msgid "SIP Devices on Network" +msgstr "SIP eszközök a hálózatban" + +msgid "SIP devices discovered for" +msgstr "Megtalált SIP eszközök ehhez:" + +msgid "Scan for devices on specified networks." +msgstr "Eszközök keresése a megadott hálózatokban." + +msgid "Scan for supported SIP devices on specified networks." +msgstr "Támogatott SIP eszközök keresése a megadott hálózatokban." + +msgid "Scanning Configuration" +msgstr "Keresési beállítások" + +msgid "Scans for devices on specified networks." +msgstr "Scans for devices on specified networks." + +msgid "Sleep Between Requests" +msgstr "Kérések közötti szünet" + +msgid "Subnet" +msgstr "Alhálózat" + +msgid "This section contains no values yet" +msgstr "Ez a rész még nem tartlamaz értékeket" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Várakozási idő a válasz beérkezésére (alapértelemezés: 10)" + +msgid "Timeout" +msgstr "Várakozási idő" + +msgid "Use Configuration" +msgstr "Beállítás használata" + +msgid "Vendor" +msgstr "Gyártó" + +msgid "check other networks" +msgstr "egyéb hálózatok ellenőrzése" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/it/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/it/diag_devinfo.po new file mode 100644 index 0000000..767245c --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/it/diag_devinfo.po @@ -0,0 +1,221 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-02-09 20:40+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "Azioni" + +msgid "Add" +msgstr "Aggiungi" + +msgid "Beginning of MAC address range" +msgstr "Inizio del campo di indirizzi MAC" + +msgid "Config Phone Scan" +msgstr "Configura Scansione Telefono" + +msgid "Configure" +msgstr "Configura" + +msgid "Configure Scans" +msgstr "Configura Scansioni" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" +"Configurare la scansione per i dispositivi su reti specifiche. Diminuendo il " +"'Timeout', 'Numero Ripetizioni' e/o ''Pausa tra le Richieste' è possibile " +"aumentare la velocità delle scansioni, ma può anche non riuscire a trovare " +"alcuni dispositivo." + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" +"Configurare la scansione dei dispositivi SIP supportati su reti specifiche. " +"Diminuendo il 'Timeout', 'Numero ripetizioni' e / o ''Pausa tra le " +"richieste' è possibile aumentare la velocità delle scansioni, ma può anche " +"non riuscire a trovare alcuni dispositivo." + +msgid "Delete" +msgstr "Elimina" + +msgid "Device Scan Config" +msgstr "Configura Scansione Periferica" + +msgid "Device Type" +msgstr "Tipo di Periferica" + +msgid "Devices discovered for" +msgstr "Devices discovered for" + +msgid "Devices on Network" +msgstr "Periferiche in Rete" + +msgid "Edit" +msgstr "Modifica" + +msgid "Enable" +msgstr "Attiva" + +msgid "End of MAC address range" +msgstr "Fine intervallo dell' indirizzo MAC" + +msgid "Go to relevant configuration page" +msgstr "Vai alla pagina di configurazione rilevanti" + +msgid "IP Address" +msgstr "Indirizzo IP" + +msgid "Interface" +msgstr "Interfaccia" + +msgid "Invalid" +msgstr "Non valido" + +msgid "Link to Device" +msgstr "Collegamento alla Periferica" + +msgid "MAC Address" +msgstr "Indirizzo MAC" + +msgid "MAC Device Info Overrides" +msgstr "Informazioni su Sostituzioni della Periferica MAC" + +msgid "MAC Device Override" +msgstr "Sostituzione del MAC del dispositivo" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" +"La gamma e le informazioni MAC utilizzate per eseguire la sostituzione dei " +"database di sistema e IEEE" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "Millisecondi di attesa tra le richieste (predefinito: 100)" + +msgid "Model" +msgstr "Modello" + +msgid "Name" +msgstr "Nome" + +msgid "Network Device Scan" +msgstr "Dispositivo Scansione della Rete" + +msgid "Network Device Scanning Configuration" +msgstr "Configurazione Dispositivo di Scansione della Rete" + +msgid "Networks to scan for devices" +msgstr "Reti da scandire per i dispositivi" + +msgid "Networks to scan for supported devices" +msgstr "Reti da scandire per i dispositivi supportati" + +msgid "No SIP devices" +msgstr "Nessun dispositivo SIP" + +msgid "No devices detected" +msgstr "Nessun dispositivo rilevato" + +msgid "Number of times to send requests (default 1)" +msgstr "Numero di volte delle richieste da inviare (predefinito: 1)" + +msgid "OUI Owner" +msgstr "Proprietario OUI" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" +"Ignora le informazioni restituite dal MAC su Script per le Informazioni sul " +"dispositivo (mac-in-devinfo) per un determinato intervallo di indirizzi MAC" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "Rilevamento (richiede alcuni minuti)" + +msgid "Phone Information" +msgstr "Informazione Telefono" + +msgid "Phone Scan" +msgstr "Rilevamento Telefono" + +msgid "Phone Scanning Configuration" +msgstr "Configurazione Rilevamento Telefono" + +msgid "Phones" +msgstr "Telefoni" + +msgid "Ports" +msgstr "Porte" + +msgid "Raw" +msgstr "Raw" + +msgid "Repeat Count" +msgstr "Ripetizione Conteggio" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "Ripetizione Rilevamento (richiede alcuni minuti)" + +msgid "SIP Device Information" +msgstr "Informazioni Periferica SIP" + +msgid "SIP Device Scan" +msgstr "Rilevamento Periferica SIP" + +msgid "SIP Device Scanning Configuration" +msgstr "Configurazione Rilevamento Periferica SIP" + +msgid "SIP Devices on Network" +msgstr "Periferiche SIP in Rete" + +msgid "SIP devices discovered for" +msgstr "Periferiche SIP rilevate per" + +msgid "Scan for devices on specified networks." +msgstr "Rilevamento per periferiche su reti specificate." + +msgid "Scan for supported SIP devices on specified networks." +msgstr "Rilevamento per periferiche SIP supportate sulle reti specificate." + +msgid "Scanning Configuration" +msgstr "Configurazione Rilevamento" + +msgid "Scans for devices on specified networks." +msgstr "Rilevamento periferiche sulle reti specificate." + +msgid "Sleep Between Requests" +msgstr "Attendi tra le richieste" + +msgid "Subnet" +msgstr "Sottorete" + +msgid "This section contains no values yet" +msgstr "Questa sezione non contiene ancora valori" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Tempo di attesa per le risposte in secondi (predefinito: 10)" + +msgid "Timeout" +msgstr "Timeout" + +msgid "Use Configuration" +msgstr "Usa Configurazione" + +msgid "Vendor" +msgstr "Produttore" + +msgid "check other networks" +msgstr "Controlla altre reti" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/ja/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/ja/diag_devinfo.po new file mode 100644 index 0000000..1ef3dad --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/ja/diag_devinfo.po @@ -0,0 +1,209 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-19 07:59+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Actions" +msgstr "" + +msgid "Add" +msgstr "追加" + +msgid "Beginning of MAC address range" +msgstr "" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "設定" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "削除" + +msgid "Device Scan Config" +msgstr "デバイススキャン設定" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "" + +msgid "Devices on Network" +msgstr "ネットワーク上のデバイス" + +msgid "Edit" +msgstr "編集" + +msgid "Enable" +msgstr "有効" + +msgid "End of MAC address range" +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "IPアドレス" + +msgid "Interface" +msgstr "インターフェース" + +msgid "Invalid" +msgstr "" + +msgid "Link to Device" +msgstr "" + +msgid "MAC Address" +msgstr "MACアドレス" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "リクエスト間のスリープ時間 (単位:ミリ秒, 標準設定:100)" + +msgid "Model" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "SIPデバイスは見つかりませんでした。" + +msgid "No devices detected" +msgstr "デバイスは検出されませんでした。" + +msgid "Number of times to send requests (default 1)" +msgstr "リクエスト送信回数 (標準設定:1)" + +msgid "OUI Owner" +msgstr "" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "" + +msgid "Phone Scan" +msgstr "" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "電話" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "リピート回数" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "SIPデバイス情報" + +msgid "SIP Device Scan" +msgstr "SIPデバイスのスキャン" + +msgid "SIP Device Scanning Configuration" +msgstr "SIPデバイススキャン設定" + +msgid "SIP Devices on Network" +msgstr "ネットワーク上のSIPデバイス" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "リクエスト間のスリープ時間" + +msgid "Subnet" +msgstr "サブネット" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "応答待ち時間 (単位:秒, 標準設定:10)" + +msgid "Timeout" +msgstr "タイムアウト" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/ms/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/ms/diag_devinfo.po new file mode 100644 index 0000000..27d2b46 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/ms/diag_devinfo.po @@ -0,0 +1,205 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Actions" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Beginning of MAC address range" +msgstr "" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Device Scan Config" +msgstr "" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "Devices discovered for" + +msgid "Devices on Network" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "End of MAC address range" +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Link to Device" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "" + +msgid "No devices detected" +msgstr "" + +msgid "Number of times to send requests (default 1)" +msgstr "" + +msgid "OUI Owner" +msgstr "" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "" + +msgid "Phone Scan" +msgstr "" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "" + +msgid "SIP Device Scan" +msgstr "" + +msgid "SIP Device Scanning Configuration" +msgstr "" + +msgid "SIP Devices on Network" +msgstr "" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "" + +msgid "Subnet" +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "" + +msgid "Timeout" +msgstr "" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/no/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/no/diag_devinfo.po new file mode 100644 index 0000000..4ada96b --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/no/diag_devinfo.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Actions" +msgstr "Handlinger" + +msgid "Add" +msgstr "Legg til" + +msgid "Beginning of MAC address range" +msgstr "Begynnelsen av MAC adresseområde" + +msgid "Config Phone Scan" +msgstr "Konfigurer Telefon Skanning" + +msgid "Configure" +msgstr "Konfigurer" + +msgid "Configure Scans" +msgstr "Konfigurer Skanning" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" +"Konfigurer skanning etter enheter på angitte nettverk. Ved å minske verdiene " +"til 'Tidsavbrudd', 'Gjentagelser' og/eller Tid mellom forespørsler blir " +"skanningen utført raskere, men det kan også medføre at noen enheter ikke " +"blir funnet." + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" +"Konfigurer skanning etter støttede SIP enheter på angitte nettverk. Ved å " +"minske verdiene til 'Tidsavbrudd', 'Gjentagelser' og/eller tid mellom " +"forespørsler blir skanningen utført raskere, men det kan også medføre at " +"noen enheter ikke blir funnet." + +msgid "Delete" +msgstr "Slett" + +msgid "Device Scan Config" +msgstr "Enhets skann konfigurasjon" + +msgid "Device Type" +msgstr "Enhets type" + +msgid "Devices discovered for" +msgstr "Enheter oppdaget for" + +msgid "Devices on Network" +msgstr "Enheter i Nettverket" + +msgid "Edit" +msgstr "Rediger" + +msgid "Enable" +msgstr "Aktiver" + +msgid "End of MAC address range" +msgstr "Slutten av MAC område" + +msgid "Go to relevant configuration page" +msgstr "Gå til relevant konfigurasjons side" + +msgid "IP Address" +msgstr "IP Adresse" + +msgid "Interface" +msgstr "Grensesnitt" + +msgid "Invalid" +msgstr "Ugyldig" + +msgid "Link to Device" +msgstr "Link til Enhet" + +msgid "MAC Address" +msgstr "MAC Adresse" + +msgid "MAC Device Info Overrides" +msgstr "MAC Enhets Info Overstyring" + +msgid "MAC Device Override" +msgstr "MAC Enhets Overstyring" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" +"MAC område og informasjon brukt til å overstyre system og IEEE databaser" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "Antall millisekunder ventetid mellom forespørsler (standard 100)" + +msgid "Model" +msgstr "Modell" + +msgid "Name" +msgstr "Navn" + +msgid "Network Device Scan" +msgstr "Nettverks Enhets Skanning" + +msgid "Network Device Scanning Configuration" +msgstr "Nettverks Enhets Skanning Konfigurasjon" + +msgid "Networks to scan for devices" +msgstr "Nettverk som blir skannet" + +msgid "Networks to scan for supported devices" +msgstr "Nettverk som blir skannet for støttede enheter" + +msgid "No SIP devices" +msgstr "Ingen SIP enheter" + +msgid "No devices detected" +msgstr "Ingen enheter oppdaget" + +msgid "Number of times to send requests (default 1)" +msgstr "Antall ganger å sende forespørsel (standard 1)" + +msgid "OUI Owner" +msgstr "OUI Eier" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" +"Overstyr informasjonen hentet fra MAC til enhets info skriptet (mac-til-" +"devinfo) for et gitt område med MAC adresser" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "Utfør Skanning (dette kan ta noen minutter)" + +msgid "Phone Information" +msgstr "Telefon Informasjon" + +msgid "Phone Scan" +msgstr "Telefon skanning" + +msgid "Phone Scanning Configuration" +msgstr "Telefon skanning konfigurasjon" + +msgid "Phones" +msgstr "Telefoner" + +msgid "Ports" +msgstr "Porter" + +msgid "Raw" +msgstr "Rå" + +msgid "Repeat Count" +msgstr "Gjentagelser" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "Gjennta Skanning (dette kan ta noen minutter)" + +msgid "SIP Device Information" +msgstr "SIP Enhets Informasjon" + +msgid "SIP Device Scan" +msgstr "SIP Enhets Skanning" + +msgid "SIP Device Scanning Configuration" +msgstr "SIP Enhets Skann Konfigurasjon" + +msgid "SIP Devices on Network" +msgstr "SIP Enheter i Nettverket" + +msgid "SIP devices discovered for" +msgstr "SIP enheter oppdaget på" + +msgid "Scan for devices on specified networks." +msgstr "Skann etter enheter på spesifiserte nettverk" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "Skann etter SIP enheter på spesifiserte nettverk" + +msgid "Scanning Configuration" +msgstr "Skanning Konfigurasjon" + +msgid "Scans for devices on specified networks." +msgstr "Nettverks Skanning Informasjon" + +msgid "Sleep Between Requests" +msgstr "Tid mellom forespørsler" + +msgid "Subnet" +msgstr "Subnett" + +msgid "This section contains no values yet" +msgstr "Denne seksjonen inneholder ennå ingen verdier" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Tid for å vente på svar i sekunder (standard 10)" + +msgid "Timeout" +msgstr "Tidsavbrudd" + +msgid "Use Configuration" +msgstr "Bruk Konfigurasjonen" + +msgid "Vendor" +msgstr "Leverandør" + +msgid "check other networks" +msgstr "skjekk andre nettverk" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/pl/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/pl/diag_devinfo.po new file mode 100644 index 0000000..32ccdce --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/pl/diag_devinfo.po @@ -0,0 +1,222 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-10-11 13:44+0200\n" +"Last-Translator: mesiu84 \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "Akcje" + +msgid "Add" +msgstr "Dodaj" + +msgid "Beginning of MAC address range" +msgstr "Początek zakresu MAC adresów" + +msgid "Config Phone Scan" +msgstr "Konfiguruj skanowanie telefonów" + +msgid "Configure" +msgstr "Konfiguruj" + +msgid "Configure Scans" +msgstr "Konfiguruj skany" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" +"Konfiguruj skanowanie dla urządzeń w wybranych sieciach. Zmniejszanie " +"\"Limitu czasu\", \"Liczby powtórzeń\" i/lub \"Oczekiwania między żądaniami" +"\" może przyspieszyć skany, ale może też uniemożliwić wykrycie niektórych " +"urządzeń." + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" +"Konfiguruj skanowanie dla wspieranych urządzeń SIP w wybranych sieciach. " +"Zmniejszanie \"Limitu czasu\", \"Liczby powtórzeń\" i/lub \"Oczekiwania " +"między żądaniami\" może przyspieszyć skany, ale może też uniemożliwić " +"wykrycie niektórych urządzeń." + +msgid "Delete" +msgstr "Usuń" + +msgid "Device Scan Config" +msgstr "Konfiguruj skanowanie urządzeń" + +msgid "Device Type" +msgstr "Typ urządzenia" + +msgid "Devices discovered for" +msgstr "Devices discovered for" + +msgid "Devices on Network" +msgstr "Urządzenia w sieci" + +msgid "Edit" +msgstr "Edytuj" + +msgid "Enable" +msgstr "Włącz" + +msgid "End of MAC address range" +msgstr "Koniec zakresu adresów MAC" + +msgid "Go to relevant configuration page" +msgstr "Idź do stosownej strony konfiguracyjnej" + +msgid "IP Address" +msgstr "Adres IP" + +msgid "Interface" +msgstr "Interfejs" + +msgid "Invalid" +msgstr "Nieprawidłowe" + +msgid "Link to Device" +msgstr "Połączenie do urządzenia" + +msgid "MAC Address" +msgstr "Adres MAC" + +msgid "MAC Device Info Overrides" +msgstr "Nadpisywanie informacji o adresie MAC urządzenia" + +msgid "MAC Device Override" +msgstr "Pomijanie adresu MAC urządzenia" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" +"Zakres adresów MAC i informacje użyte do zastąpienia baz danych systemowych " +"i IEEE" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "Ilośś milisekund pauzy pomiędzy zapytaniami (domyślnie 100)" + +msgid "Model" +msgstr "Model" + +msgid "Name" +msgstr "Nazwa" + +msgid "Network Device Scan" +msgstr "Skan urządzeń w sieci" + +msgid "Network Device Scanning Configuration" +msgstr "Ustawienia skanowania urządzeń w sieci" + +msgid "Networks to scan for devices" +msgstr "Sieci do skanowania w poszukiwaniu urządzeń" + +msgid "Networks to scan for supported devices" +msgstr "Sieci do skanowania w poszukiwaniu wspieranych urządzeń" + +msgid "No SIP devices" +msgstr "Brak urządzeń SIP" + +msgid "No devices detected" +msgstr "Nie wykryto urządzeń" + +msgid "Number of times to send requests (default 1)" +msgstr "Ilość powtórzeń wysłania żądania (domyślnie 1)" + +msgid "OUI Owner" +msgstr "Właściciel OUI" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" +"Zastąp informacje zwracanych przez skrypt MAC to Device Info Script (MAC-to-" +"devinfo) dla określonego zakresu adresów MAC" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "Wykonaj skany (to może potrwać kilka minut)" + +msgid "Phone Information" +msgstr "Informacje o telefonie" + +msgid "Phone Scan" +msgstr "Skanowanie telefonów" + +msgid "Phone Scanning Configuration" +msgstr "Konfiguracja skanowania telefonu" + +msgid "Phones" +msgstr "Telefony" + +msgid "Ports" +msgstr "Porty" + +msgid "Raw" +msgstr "Surowe" + +msgid "Repeat Count" +msgstr "Ilość powtórzeń" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "Powtórz skany (to może potrwać kilka minut)" + +msgid "SIP Device Information" +msgstr "Informacje o urządzeniu SIP" + +msgid "SIP Device Scan" +msgstr "Skanowanie urządzeń SIP" + +msgid "SIP Device Scanning Configuration" +msgstr "Konfiguracja skanowania urządzeń SIP" + +msgid "SIP Devices on Network" +msgstr "Urządzenia SIP w sieci" + +msgid "SIP devices discovered for" +msgstr "Urządzenia SIP znalezione dla" + +msgid "Scan for devices on specified networks." +msgstr "Skanuj w poszukiwaniu urządzeń w wybranych sieciach." + +msgid "Scan for supported SIP devices on specified networks." +msgstr "Skanuj w poszukiwaniu wspieranych urządzeń SIP w wybranych sieciach." + +msgid "Scanning Configuration" +msgstr "Ustawienia skanowania" + +msgid "Scans for devices on specified networks." +msgstr "Scans for devices on specified networks." + +msgid "Sleep Between Requests" +msgstr "Pauza pomiędzy zapytaniami" + +msgid "Subnet" +msgstr "Podsieć" + +msgid "This section contains no values yet" +msgstr "Ta sekcja nie zawiera jeszcze wartości" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Czas oczekiwania na odpowiedź w sekundach (domyślnie 10)" + +msgid "Timeout" +msgstr "Czas oczekiwania" + +msgid "Use Configuration" +msgstr "Użyj konfiguracji" + +msgid "Vendor" +msgstr "Sprzedawca" + +msgid "check other networks" +msgstr "sprawdź inne sieci" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/pt-br/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/pt-br/diag_devinfo.po new file mode 100644 index 0000000..53face0 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/pt-br/diag_devinfo.po @@ -0,0 +1,220 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-17 23:51+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Actions" +msgstr "Ações" + +msgid "Add" +msgstr "Adicionar" + +msgid "Beginning of MAC address range" +msgstr "Começo da faixa de endereços MAC" + +msgid "Config Phone Scan" +msgstr "Configurar a Busca por Telefone" + +msgid "Configure" +msgstr "Configurar" + +msgid "Configure Scans" +msgstr "Configurar Scans" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" +"Configura busca por dispositivos em redes específicas. Ao se reduzir " +"'Timeout', 'Repeat Count' e/ou 'Sleep Between Requests' pode-se agilizar " +"buscas, mas também pode não encontrar alguns dispositivos." + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" +"Configura busca por dispositivos com suporte a SIP em redes específicas. Ao " +"se reduzir 'Timeout', 'Repeat Count' e/ou 'Sleep Between Requests' pode-se " +"agilizar buscas, mas também pode não encontrar alguns dispositivos." + +msgid "Delete" +msgstr "Apagar" + +msgid "Device Scan Config" +msgstr "Configurar a Busca por Dispositivos" + +msgid "Device Type" +msgstr "Tipo de dispositivo" + +msgid "Devices discovered for" +msgstr "Dispositivos descobertos para" + +msgid "Devices on Network" +msgstr "Dispositivos na Rede" + +msgid "Edit" +msgstr "Editar" + +msgid "Enable" +msgstr "Habilitar" + +msgid "End of MAC address range" +msgstr "Final da faixa de endereços MAC" + +msgid "Go to relevant configuration page" +msgstr "Vá para página de configuração relevante" + +msgid "IP Address" +msgstr "Endereço IP" + +msgid "Interface" +msgstr "Interface" + +msgid "Invalid" +msgstr "Inválido" + +# Link like or network link? +msgid "Link to Device" +msgstr "Ligar ao Dispositivo" + +msgid "MAC Address" +msgstr "Endereço MAC" + +msgid "MAC Device Info Overrides" +msgstr "Sobrescrição da informação do dispositivo MAC" + +msgid "MAC Device Override" +msgstr "Sobrescreve o Dispositivo MAC" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" +"Faixa MAC e informação usada para sobrescrever os bancos de dados do sistema " +"e IEEE" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "Milissegundos para esperar entre requisições (padrão 100)" + +msgid "Model" +msgstr "Modelo" + +msgid "Name" +msgstr "Nome" + +msgid "Network Device Scan" +msgstr "Busca por dispositivo de rede" + +msgid "Network Device Scanning Configuration" +msgstr "Configuração de busca por dispositivo de rede" + +msgid "Networks to scan for devices" +msgstr "Redes a serem pesquisadas por dispositivos" + +msgid "Networks to scan for supported devices" +msgstr "Redes a serem pesquisadas por dispositivos suportados" + +msgid "No SIP devices" +msgstr "Nenhum dispositivo SIP" + +msgid "No devices detected" +msgstr "Nenhum dispositivo detectado" + +msgid "Number of times to send requests (default 1)" +msgstr "Número de vezes para enviar requisições (padrão 1 )" + +msgid "OUI Owner" +msgstr "Dono da OUI" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" +"Sobrescrever a informação retornada pelo MAC para o Script de Informação do " +"Dispositivo (mac-to_devinfo) para uma faixa especificada de Endereços MAC" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "Realiza buscas (pode levar alguns minutos)" + +msgid "Phone Information" +msgstr "Informação do Telefone" + +msgid "Phone Scan" +msgstr "Busca por Telefone" + +msgid "Phone Scanning Configuration" +msgstr "Configuração da Busca por Telefone" + +msgid "Phones" +msgstr "Telefones" + +msgid "Ports" +msgstr "Portas" + +msgid "Raw" +msgstr "Bruto" + +msgid "Repeat Count" +msgstr "Quantidade de Repetições" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "Buscas Repetidas (pode levar alguns minutos)" + +msgid "SIP Device Information" +msgstr "Informação de Dispositivo SIP" + +msgid "SIP Device Scan" +msgstr "Busca por Dispositivos SIP" + +msgid "SIP Device Scanning Configuration" +msgstr "Configuração da Busca por Dispositivos SIP" + +msgid "SIP Devices on Network" +msgstr "Dispositivos SIP na Rede" + +msgid "SIP devices discovered for" +msgstr "Dispositivos SIP descobertos para" + +msgid "Scan for devices on specified networks." +msgstr "Busca por dispositivos nas redes especificadas." + +msgid "Scan for supported SIP devices on specified networks." +msgstr "Busca por dispositivos com suporte a SIP em redes especificadas." + +msgid "Scanning Configuration" +msgstr "Configuração de busca" + +msgid "Scans for devices on specified networks." +msgstr "Busca por dispositivos nas redes especificadas." + +msgid "Sleep Between Requests" +msgstr "Espera Entre Requisições" + +msgid "Subnet" +msgstr "Subrede" + +msgid "This section contains no values yet" +msgstr "Esta seção contém nenhum valor ainda" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Tempo para esperar por respostas em segundos (padrão 10)" + +msgid "Timeout" +msgstr "Estouro de tempo" + +msgid "Use Configuration" +msgstr "Usar configuração" + +msgid "Vendor" +msgstr "Fabricante" + +msgid "check other networks" +msgstr "verifique outras redes" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/pt/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/pt/diag_devinfo.po new file mode 100644 index 0000000..afe4885 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/pt/diag_devinfo.po @@ -0,0 +1,209 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-06-03 12:23+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "Acções" + +msgid "Add" +msgstr "Adicionar" + +msgid "Beginning of MAC address range" +msgstr "Inicio da gama de endereços MAC" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "Configurar" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "Apagar" + +msgid "Device Scan Config" +msgstr "" + +msgid "Device Type" +msgstr "Tipo de Dispositivo" + +msgid "Devices discovered for" +msgstr "Dispositivos descobertos para" + +msgid "Devices on Network" +msgstr "Dispositivos na Rede" + +msgid "Edit" +msgstr "Editar" + +msgid "Enable" +msgstr "Ativar" + +msgid "End of MAC address range" +msgstr "Fim da gama de endereços MAC" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "Endereço IP" + +msgid "Interface" +msgstr "Interface" + +msgid "Invalid" +msgstr "Inválido" + +msgid "Link to Device" +msgstr "" + +msgid "MAC Address" +msgstr "Endereço MAC" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" + +msgid "Model" +msgstr "Modelo" + +msgid "Name" +msgstr "Nome" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "Não há dispositivos SIP" + +msgid "No devices detected" +msgstr "Não foram detetados dispositivos" + +msgid "Number of times to send requests (default 1)" +msgstr "" + +msgid "OUI Owner" +msgstr "Dono OUI" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "Informação do Telefone" + +msgid "Phone Scan" +msgstr "" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "" + +msgid "Ports" +msgstr "Portas" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "Repetir Contagem" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "" + +msgid "SIP Device Scan" +msgstr "" + +msgid "SIP Device Scanning Configuration" +msgstr "" + +msgid "SIP Devices on Network" +msgstr "" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "" + +msgid "Subnet" +msgstr "Sub-rede" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "" + +msgid "Timeout" +msgstr "" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "verificar outras redes" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/ro/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/ro/diag_devinfo.po new file mode 100644 index 0000000..eefbd5e --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/ro/diag_devinfo.po @@ -0,0 +1,210 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-09 14:27+0200\n" +"Last-Translator: lex404 \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "Acțiuni" + +msgid "Add" +msgstr "Adauga" + +msgid "Beginning of MAC address range" +msgstr "" + +msgid "Config Phone Scan" +msgstr "Configureaza scanarea telefonului" + +msgid "Configure" +msgstr "Configureaza" + +msgid "Configure Scans" +msgstr "Configurează scanări" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "Sterge" + +msgid "Device Scan Config" +msgstr "Configureaza scanarea dispozitivului" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "Dispozitive descoperite pentru" + +msgid "Devices on Network" +msgstr "Dispozitive in retea" + +msgid "Edit" +msgstr "Editeaza" + +msgid "Enable" +msgstr "Activeaza" + +msgid "End of MAC address range" +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "Adresa IP" + +msgid "Interface" +msgstr "Interfata" + +msgid "Invalid" +msgstr "Invalid" + +msgid "Link to Device" +msgstr "Legatura spre dispozitiv" + +msgid "MAC Address" +msgstr "Adresa MAC" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "Milisecunde de asteptare intre cereri (100 implicit)" + +msgid "Model" +msgstr "" + +msgid "Name" +msgstr "Nume" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "Nici un device SIP" + +msgid "No devices detected" +msgstr "Nici un dispozitiv detectat" + +msgid "Number of times to send requests (default 1)" +msgstr "Numarul de trimiteri cereri (1 implicit)" + +msgid "OUI Owner" +msgstr "" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "Informatii despre telefon" + +msgid "Phone Scan" +msgstr "Scanare telefon" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "Telefoane" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "Numarul de repetitii" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "Informatii despre dispozitivul SIP" + +msgid "SIP Device Scan" +msgstr "Scanare dispozitiv SIP" + +msgid "SIP Device Scanning Configuration" +msgstr "Configurarea scanarii dispozitivului SIP" + +msgid "SIP Devices on Network" +msgstr "Dispozitive SIP in retea" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "Pauza dintre cereri" + +msgid "Subnet" +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Timpul de asteptare pentru raspunsuri in secunde (10 implicit)" + +msgid "Timeout" +msgstr "" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "verifica alte retele" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/ru/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/ru/diag_devinfo.po new file mode 100644 index 0000000..7531dde --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/ru/diag_devinfo.po @@ -0,0 +1,223 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: diag_devinfo\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2014-01-31 21:07+0200\n" +"Last-Translator: Moon_dark \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Actions" +msgstr "Действия" + +msgid "Add" +msgstr "Добавить" + +msgid "Beginning of MAC address range" +msgstr "Начало диапазона MAC-адресов" + +msgid "Config Phone Scan" +msgstr "Настроить сканирование телефонов" + +msgid "Configure" +msgstr "Настроить" + +msgid "Configure Scans" +msgstr "Настроить сканирование" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" +"Настроить сканирование устройств в указанных сетях. Уменьшение таймаута, " +"количества повторов и/или паузы между запросами может ускорить сканирование, " +"но также вызвать проблемы поиска некоторых устройств." + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" +"Настроить сканирование поддерживаемых SIP-устройств в указанных сетях. " +"Уменьшение таймаута, количества повторов и/или паузы между запросами может " +"ускорить сканирование, но также вызвать проблемы поиска некоторых устройств." + +msgid "Delete" +msgstr "Удалить" + +msgid "Device Scan Config" +msgstr "Конфигурация сканирования устройства" + +msgid "Device Type" +msgstr "Тип устройства" + +msgid "Devices discovered for" +msgstr "Устройства, найденные в" + +msgid "Devices on Network" +msgstr "Устройства в сети" + +msgid "Edit" +msgstr "Редактировать" + +msgid "Enable" +msgstr "Включить" + +msgid "End of MAC address range" +msgstr "Конец диапазона MAC адресов" + +msgid "Go to relevant configuration page" +msgstr "Перейти на соответствующую страницу конфигурации" + +msgid "IP Address" +msgstr "IP-адрес" + +msgid "Interface" +msgstr "Интерфейс" + +msgid "Invalid" +msgstr "Неверный" + +msgid "Link to Device" +msgstr "Соединение с устройством" + +msgid "MAC Address" +msgstr "MAC-адрес" + +#, fuzzy +msgid "MAC Device Info Overrides" +msgstr "Переопределение информации о MAC-устройстве" + +msgid "MAC Device Override" +msgstr "Задать MAC-адрес устройства" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" +"Диапазон MAC-адресов и информация для переопределения системной базы данных " +"и базы данных IEEE" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "Время бездействия между запросами (мс, 100 по умолчанию)" + +msgid "Model" +msgstr "Модель" + +msgid "Name" +msgstr "Имя" + +msgid "Network Device Scan" +msgstr "Сканирование сетевых устройств" + +msgid "Network Device Scanning Configuration" +msgstr "Конфигурация сканирования сетевых устройств" + +msgid "Networks to scan for devices" +msgstr "Сети, в которых производить сканирование устройств" + +msgid "Networks to scan for supported devices" +msgstr "Сети, в которых производить сканирование поддерживаемых устройств" + +msgid "No SIP devices" +msgstr "SIP-устройства отсутствуют" + +msgid "No devices detected" +msgstr "Устройства не обнаружены" + +msgid "Number of times to send requests (default 1)" +msgstr "Количество запросов (1 по умолчанию)" + +msgid "OUI Owner" +msgstr "Владелец OUI" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" +"Переопределить значения, полученные из скрипта \"MAC to Device\" (mac-to-" +"devinfo), для заданного диапазона MAC-адресов" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "Произвести сканирование (это может занять несколько минут)" + +msgid "Phone Information" +msgstr "Информация о телефоне" + +msgid "Phone Scan" +msgstr "Сканировать телефоны" + +msgid "Phone Scanning Configuration" +msgstr "Конфигурация сканирования телефонов" + +msgid "Phones" +msgstr "Телефоны" + +msgid "Ports" +msgstr "Порты" + +msgid "Raw" +msgstr "Необработанные (сырые) данные" + +msgid "Repeat Count" +msgstr "Количество повторов" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "Повторить сканирование (это может занять несколько минут)" + +msgid "SIP Device Information" +msgstr "Информация о SIP-устройстве" + +msgid "SIP Device Scan" +msgstr "Сканировать SIP-устройства" + +msgid "SIP Device Scanning Configuration" +msgstr "Конфигурация сканирования SIP-устройств" + +msgid "SIP Devices on Network" +msgstr "SIP-устройства в сети" + +msgid "SIP devices discovered for" +msgstr "SIP-устройства, найденные в" + +msgid "Scan for devices on specified networks." +msgstr "Сканировать устройства в заданных сетях." + +msgid "Scan for supported SIP devices on specified networks." +msgstr "Сканировать поддерживаемые SIP-устройства в заданных сетях." + +msgid "Scanning Configuration" +msgstr "Конфигурация сканирования" + +msgid "Scans for devices on specified networks." +msgstr "Сканирует устройства в заданных сетях." + +msgid "Sleep Between Requests" +msgstr "Пауза между запросами" + +msgid "Subnet" +msgstr "Подсеть" + +msgid "This section contains no values yet" +msgstr "Эта секция пока не содержит значений." + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Время ожидания ответов (сек, 10 по умолчанию)" + +msgid "Timeout" +msgstr "Таймаут" + +msgid "Use Configuration" +msgstr "Использовать конфигурацию" + +msgid "Vendor" +msgstr "Производитель" + +msgid "check other networks" +msgstr "проверить другие сети" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/sk/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/sk/diag_devinfo.po new file mode 100644 index 0000000..0d62204 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/sk/diag_devinfo.po @@ -0,0 +1,206 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Actions" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Beginning of MAC address range" +msgstr "" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Device Scan Config" +msgstr "" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "" + +msgid "Devices on Network" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "End of MAC address range" +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Link to Device" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "" + +msgid "No devices detected" +msgstr "" + +msgid "Number of times to send requests (default 1)" +msgstr "" + +msgid "OUI Owner" +msgstr "" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "" + +msgid "Phone Scan" +msgstr "" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "" + +msgid "SIP Device Scan" +msgstr "" + +msgid "SIP Device Scanning Configuration" +msgstr "" + +msgid "SIP Devices on Network" +msgstr "" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "" + +msgid "Subnet" +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "" + +msgid "Timeout" +msgstr "" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po new file mode 100644 index 0000000..cf74fbc --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po @@ -0,0 +1,207 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Actions" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Beginning of MAC address range" +msgstr "" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Device Scan Config" +msgstr "" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "" + +msgid "Devices on Network" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "End of MAC address range" +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Link to Device" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "" + +msgid "No devices detected" +msgstr "" + +msgid "Number of times to send requests (default 1)" +msgstr "" + +msgid "OUI Owner" +msgstr "" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "" + +msgid "Phone Scan" +msgstr "" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "" + +msgid "SIP Device Scan" +msgstr "" + +msgid "SIP Device Scanning Configuration" +msgstr "" + +msgid "SIP Devices on Network" +msgstr "" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "" + +msgid "Subnet" +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "" + +msgid "Timeout" +msgstr "" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/templates/diag_devinfo.pot b/feeds/luci/applications/luci-app-diag-devinfo/po/templates/diag_devinfo.pot new file mode 100644 index 0000000..350466c --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/templates/diag_devinfo.pot @@ -0,0 +1,199 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Actions" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Beginning of MAC address range" +msgstr "" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Device Scan Config" +msgstr "" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "" + +msgid "Devices on Network" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "End of MAC address range" +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Link to Device" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "" + +msgid "No devices detected" +msgstr "" + +msgid "Number of times to send requests (default 1)" +msgstr "" + +msgid "OUI Owner" +msgstr "" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "" + +msgid "Phone Scan" +msgstr "" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "" + +msgid "SIP Device Scan" +msgstr "" + +msgid "SIP Device Scanning Configuration" +msgstr "" + +msgid "SIP Devices on Network" +msgstr "" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "" + +msgid "Subnet" +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "" + +msgid "Timeout" +msgstr "" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/tr/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/tr/diag_devinfo.po new file mode 100644 index 0000000..3251675 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/tr/diag_devinfo.po @@ -0,0 +1,206 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Actions" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Beginning of MAC address range" +msgstr "" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Device Scan Config" +msgstr "" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "Devices discovered for" + +msgid "Devices on Network" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "End of MAC address range" +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Link to Device" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "" + +msgid "No devices detected" +msgstr "" + +msgid "Number of times to send requests (default 1)" +msgstr "" + +msgid "OUI Owner" +msgstr "" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "" + +msgid "Phone Scan" +msgstr "" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "" + +msgid "SIP Device Scan" +msgstr "" + +msgid "SIP Device Scanning Configuration" +msgstr "" + +msgid "SIP Devices on Network" +msgstr "" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "" + +msgid "Subnet" +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "" + +msgid "Timeout" +msgstr "" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/uk/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/uk/diag_devinfo.po new file mode 100644 index 0000000..03f49eb --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/uk/diag_devinfo.po @@ -0,0 +1,219 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-13 15:23+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "" + +msgid "Add" +msgstr "Додати" + +msgid "Beginning of MAC address range" +msgstr "" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "Конфігурація" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "Вилучити" + +msgid "Device Scan Config" +msgstr "Конфігурація пристрою сканування" + +msgid "Device Type" +msgstr "Тип пристрою" + +msgid "Devices discovered for" +msgstr "Виявленні пристрої на" + +msgid "Devices on Network" +msgstr "Пристрої в мережі" + +msgid "Edit" +msgstr "Редагувати" + +msgid "Enable" +msgstr "Активувати" + +msgid "End of MAC address range" +msgstr "" + +#, fuzzy +msgid "Go to relevant configuration page" +msgstr "Перейти до відповідної сторінки конфігурації" + +msgid "IP Address" +msgstr "IP-адреса" + +msgid "Interface" +msgstr "Інтерфейс" + +msgid "Invalid" +msgstr "Несправність" + +msgid "Link to Device" +msgstr "Посилання на пристрій" + +msgid "MAC Address" +msgstr "MAC-адреса" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" + +msgid "Model" +msgstr "Модель" + +msgid "Name" +msgstr "Назва" + +msgid "Network Device Scan" +msgstr "Сканування мережевих пристроїв" + +msgid "Network Device Scanning Configuration" +msgstr "Мережевий Пристрій Конфігурація Сканування" + +#, fuzzy +msgid "Networks to scan for devices" +msgstr "Мережі для сканування пристроїв" + +#, fuzzy +msgid "Networks to scan for supported devices" +msgstr "Мережі для пошуку підтримуваних пристроїв" + +msgid "No SIP devices" +msgstr "Немає SIP пристроїв" + +msgid "No devices detected" +msgstr "" + +msgid "Number of times to send requests (default 1)" +msgstr "" + +msgid "OUI Owner" +msgstr "" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "" + +msgid "Phone Scan" +msgstr "" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "" + +msgid "SIP Device Scan" +msgstr "" + +msgid "SIP Device Scanning Configuration" +msgstr "" + +msgid "SIP Devices on Network" +msgstr "" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "Конфігурація Сканування" + +#, fuzzy +msgid "Scans for devices on specified networks." +msgstr "Сканування пристроїв у вказаних мережах." + +#, fuzzy +msgid "Sleep Between Requests" +msgstr "Сон між запитами" + +#, fuzzy +msgid "Subnet" +msgstr "Підмережі" + +#, fuzzy +msgid "This section contains no values yet" +msgstr "Цей розділ ще не містить значень" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "Час очікування відповіді в секундах (типово 10)" + +#, fuzzy +msgid "Timeout" +msgstr "Затримка" + +#, fuzzy +msgid "Use Configuration" +msgstr "Використання конфігурації" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "перевірити інші мережі" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/vi/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/vi/diag_devinfo.po new file mode 100644 index 0000000..3251675 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/vi/diag_devinfo.po @@ -0,0 +1,206 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Actions" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Beginning of MAC address range" +msgstr "" + +msgid "Config Phone Scan" +msgstr "" + +msgid "Configure" +msgstr "" + +msgid "Configure Scans" +msgstr "" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Device Scan Config" +msgstr "" + +msgid "Device Type" +msgstr "" + +msgid "Devices discovered for" +msgstr "Devices discovered for" + +msgid "Devices on Network" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "End of MAC address range" +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Link to Device" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC Device Info Overrides" +msgstr "" + +msgid "MAC Device Override" +msgstr "" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Device Scan" +msgstr "" + +msgid "Network Device Scanning Configuration" +msgstr "" + +msgid "Networks to scan for devices" +msgstr "" + +msgid "Networks to scan for supported devices" +msgstr "" + +msgid "No SIP devices" +msgstr "" + +msgid "No devices detected" +msgstr "" + +msgid "Number of times to send requests (default 1)" +msgstr "" + +msgid "OUI Owner" +msgstr "" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "" + +msgid "Phone Information" +msgstr "" + +msgid "Phone Scan" +msgstr "" + +msgid "Phone Scanning Configuration" +msgstr "" + +msgid "Phones" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Raw" +msgstr "" + +msgid "Repeat Count" +msgstr "" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "" + +msgid "SIP Device Information" +msgstr "" + +msgid "SIP Device Scan" +msgstr "" + +msgid "SIP Device Scanning Configuration" +msgstr "" + +msgid "SIP Devices on Network" +msgstr "" + +msgid "SIP devices discovered for" +msgstr "" + +msgid "Scan for devices on specified networks." +msgstr "" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "" + +msgid "Scanning Configuration" +msgstr "" + +msgid "Scans for devices on specified networks." +msgstr "" + +msgid "Sleep Between Requests" +msgstr "" + +msgid "Subnet" +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "" + +msgid "Timeout" +msgstr "" + +msgid "Use Configuration" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "check other networks" +msgstr "" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/zh-cn/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/zh-cn/diag_devinfo.po new file mode 100644 index 0000000..fe4d241 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/zh-cn/diag_devinfo.po @@ -0,0 +1,210 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-10 05:33+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "动作" + +msgid "Add" +msgstr "添加" + +msgid "Beginning of MAC address range" +msgstr "MAC起始地址" + +msgid "Config Phone Scan" +msgstr "配置话机识别参数" + +msgid "Configure" +msgstr "配置" + +msgid "Configure Scans" +msgstr "识别参数配置" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "配置识别指定网络上设备的过程参数。减小'​​超时时长','重复次数',和/或“休眠请求”可加快识别过程,但也可能因此导致识别一些设备会失败。" + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" +"配置识别指定网络上SIP设备的过程参数。降低'​​超时时长','重复次数',和/或“休眠请求”可加快识别过程,但也可能因此导致识别一些设备会失败。" + +msgid "Delete" +msgstr "删除" + +msgid "Device Scan Config" +msgstr "设备识别参数配置" + +msgid "Device Type" +msgstr "设备类型" + +msgid "Devices discovered for" +msgstr "对发现​​的设备" + +msgid "Devices on Network" +msgstr "网络上的设备" + +msgid "Edit" +msgstr "编辑" + +msgid "Enable" +msgstr "启用" + +msgid "End of MAC address range" +msgstr "MAC地址段结束" + +msgid "Go to relevant configuration page" +msgstr "相关配置页面" + +msgid "IP Address" +msgstr "IP地址" + +msgid "Interface" +msgstr "接口" + +msgid "Invalid" +msgstr "不合法" + +msgid "Link to Device" +msgstr "连接到设备" + +msgid "MAC Address" +msgstr "MAC地址" + +msgid "MAC Device Info Overrides" +msgstr "覆盖MAC设备信息" + +msgid "MAC Device Override" +msgstr "覆盖MAC设备" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "MAC范围和使用信息覆盖系统和IEEE数据库" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "两次请求间睡眠毫秒数(默认为100)" + +msgid "Model" +msgstr "型号" + +msgid "Name" +msgstr "名字" + +msgid "Network Device Scan" +msgstr "识别网络设备" + +msgid "Network Device Scanning Configuration" +msgstr "网络设备识别参数" + +msgid "Networks to scan for devices" +msgstr "网络识别设备" + +msgid "Networks to scan for supported devices" +msgstr "网络识别支持的设备" + +msgid "No SIP devices" +msgstr "无SIP设备" + +msgid "No devices detected" +msgstr "没有识别到设备" + +msgid "Number of times to send requests (default 1)" +msgstr "发送请求次数(默认为1)" + +msgid "OUI Owner" +msgstr "OUI所有者" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "返回指定MAC地址范围内覆盖MAC设备信息脚本(mac-to-devinfo)的信息。" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "执行识别过程(这可能需要几分钟)" + +msgid "Phone Information" +msgstr "话机信息" + +msgid "Phone Scan" +msgstr "识别话机" + +msgid "Phone Scanning Configuration" +msgstr "话机识别过程参数" + +msgid "Phones" +msgstr "话机" + +msgid "Ports" +msgstr "端口" + +msgid "Raw" +msgstr "原始数据" + +msgid "Repeat Count" +msgstr "重复次数" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "重复识别(这可能需要几分钟)" + +msgid "SIP Device Information" +msgstr "SIP设备信息" + +msgid "SIP Device Scan" +msgstr "SIP设备识别" + +msgid "SIP Device Scanning Configuration" +msgstr "SIP设备识别过程参数配置" + +msgid "SIP Devices on Network" +msgstr "在线的SIP设备" + +msgid "SIP devices discovered for" +msgstr "发掘SIP设备" + +msgid "Scan for devices on specified networks." +msgstr "在指定网络上识别设备" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "在指定网络上识别SIP设备" + +msgid "Scanning Configuration" +msgstr "识别过程配置" + +msgid "Scans for devices on specified networks." +msgstr "识别指定网络上的设备" + +msgid "Sleep Between Requests" +msgstr "请求间等待间隙" + +msgid "Subnet" +msgstr "子网" + +msgid "This section contains no values yet" +msgstr "这部分任然不包含的值" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "等待响应秒数(默认10)" + +msgid "Timeout" +msgstr "超时" + +msgid "Use Configuration" +msgstr "使用配置" + +msgid "Vendor" +msgstr "厂商" + +msgid "check other networks" +msgstr "检查其他网络" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/po/zh-tw/diag_devinfo.po b/feeds/luci/applications/luci-app-diag-devinfo/po/zh-tw/diag_devinfo.po new file mode 100644 index 0000000..fe14f68 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/po/zh-tw/diag_devinfo.po @@ -0,0 +1,210 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 14:54+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Actions" +msgstr "操作" + +msgid "Add" +msgstr "新增" + +msgid "Beginning of MAC address range" +msgstr "MAC位址起始範圍" + +msgid "Config Phone Scan" +msgstr "設定電話掃描" + +msgid "Configure" +msgstr "設置" + +msgid "Configure Scans" +msgstr "掃描設置" + +msgid "" +"Configure scanning for devices on specified networks. Decreasing 'Timeout', " +"'Repeat Count', and/or 'Sleep Between Requests' may speed up scans, but also " +"may fail to find some devices." +msgstr "針對特定網路的掃描設定值. 增加\"超時\",\"重複數量,\"並且/或者\"傳到睡著者\"可以加速掃描, 但也有可能將要去搜尋某些設備時會失敗." + +msgid "" +"Configure scanning for supported SIP devices on specified networks. " +"Decreasing 'Timeout', 'Repeat Count', and/or 'Sleep Between Requests' may " +"speed up scans, but also may fail to find some devices." +msgstr "" +"對指定的網路上已支援的SIP設備設定掃描,減少\"超時\",\"重複數量,\"並且/或者\"傳到睡著者\"可以加速描, 但也有可能將要去搜尋某些設備時會失敗." + +msgid "Delete" +msgstr "刪除" + +msgid "Device Scan Config" +msgstr "設備掃描設定" + +msgid "Device Type" +msgstr "設備型態" + +msgid "Devices discovered for" +msgstr "已發現的設備為" + +msgid "Devices on Network" +msgstr "網路中的設備" + +msgid "Edit" +msgstr "編輯" + +msgid "Enable" +msgstr "啟用" + +msgid "End of MAC address range" +msgstr "MAC位址的結束範圍" + +msgid "Go to relevant configuration page" +msgstr "到相應的設定頁面" + +msgid "IP Address" +msgstr "IP位址" + +msgid "Interface" +msgstr "介面" + +msgid "Invalid" +msgstr "無效" + +msgid "Link to Device" +msgstr "連結到設備上" + +msgid "MAC Address" +msgstr "MAC位址" + +msgid "MAC Device Info Overrides" +msgstr "MAC設備資訊覆寫" + +msgid "MAC Device Override" +msgstr "MAC設備覆寫" + +msgid "MAC range and information used to override system and IEEE databases" +msgstr "MAC範圍及資訊用來覆寫系統和IEEE資料庫" + +msgid "Milliseconds to sleep between requests (default 100)" +msgstr "要求多久(毫)秒後進入睡眠" + +msgid "Model" +msgstr "型號" + +msgid "Name" +msgstr "名稱" + +msgid "Network Device Scan" +msgstr "網路設備掃描" + +msgid "Network Device Scanning Configuration" +msgstr "網路設備掃描設定值" + +msgid "Networks to scan for devices" +msgstr "要掃描的網路設備" + +msgid "Networks to scan for supported devices" +msgstr "要掃描的已支援網路設備" + +msgid "No SIP devices" +msgstr "無任何SIP設備" + +msgid "No devices detected" +msgstr "偵測不到設備" + +msgid "Number of times to send requests (default 1)" +msgstr "傳送要求的次數(預設1)" + +msgid "OUI Owner" +msgstr "OUI擁有者" + +msgid "" +"Override the information returned by the MAC to Device Info Script (mac-to-" +"devinfo) for a specified range of MAC Addresses" +msgstr "針對指定範圍的MAC位址,由設備資訊腳本回傳的MAC位址資訊進行覆蓋" + +msgid "Perform Scans (this can take a few minutes)" +msgstr "掃描操作(可能會花費數分鐘)" + +msgid "Phone Information" +msgstr "電話資訊" + +msgid "Phone Scan" +msgstr "電話掃描" + +msgid "Phone Scanning Configuration" +msgstr "電話掃描設定值" + +msgid "Phones" +msgstr "電話" + +msgid "Ports" +msgstr "埠" + +msgid "Raw" +msgstr "原生RAW" + +msgid "Repeat Count" +msgstr "重複次數" + +msgid "Repeat Scans (this can take a few minutes)" +msgstr "重複掃描(可能花費數分鐘)" + +msgid "SIP Device Information" +msgstr "SIP設備資訊" + +msgid "SIP Device Scan" +msgstr "SIP設備掃描" + +msgid "SIP Device Scanning Configuration" +msgstr "SIP設備掃描設定值" + +msgid "SIP Devices on Network" +msgstr "網路中的SIP設備" + +msgid "SIP devices discovered for" +msgstr "已發現的SIP設備" + +msgid "Scan for devices on specified networks." +msgstr "針對特定網路掃描設備" + +msgid "Scan for supported SIP devices on specified networks." +msgstr "針對特定網路掃描有支援的SIP設備" + +msgid "Scanning Configuration" +msgstr "掃描設定值" + +msgid "Scans for devices on specified networks." +msgstr "針對特定網路掃描設備" + +msgid "Sleep Between Requests" +msgstr "請求之間的睡眠" + +msgid "Subnet" +msgstr "子網路" + +msgid "This section contains no values yet" +msgstr "這個部分尚無任何數值" + +msgid "Time to wait for responses in seconds (default 10)" +msgstr "秒計等待回應時間(預設10)" + +msgid "Timeout" +msgstr "超時" + +msgid "Use Configuration" +msgstr "使用設定值" + +msgid "Vendor" +msgstr "供應製造商" + +msgid "check other networks" +msgstr "檢查它網" diff --git a/feeds/luci/applications/luci-app-diag-devinfo/root/etc/config/luci_devinfo b/feeds/luci/applications/luci-app-diag-devinfo/root/etc/config/luci_devinfo new file mode 100644 index 0000000..1bcdc19 --- /dev/null +++ b/feeds/luci/applications/luci-app-diag-devinfo/root/etc/config/luci_devinfo @@ -0,0 +1,20 @@ +config 'smap_scannet' 'SIP_LAN' + option 'enable' '0' + option 'interface' 'lan' + option 'subnet' '192.168.99.0/24' + +config 'smap_scannet' 'SIP_WAN' + option 'enable' '0' + option 'interface' 'wan' + option 'subnet' '216.218.0.0/16' + +config 'netdiscover_scannet' 'SCAN_LAN' + option 'enable' '0' + option 'interface' 'lan' + option 'subnet' '192.168.99.0/24' + +config 'netdiscover_scannet' 'SCAN_WAN' + option 'enable' '0' + option 'interface' 'wan' + option 'subnet' '216.218.0.0/16' + diff --git a/feeds/luci/applications/luci-app-dump1090/Makefile b/feeds/luci/applications/luci-app-dump1090/Makefile new file mode 100644 index 0000000..e6abd44 --- /dev/null +++ b/feeds/luci/applications/luci-app-dump1090/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for dump1090 +LUCI_DEPENDS:=+dump1090 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-dump1090/luasrc/controller/dump1090.lua b/feeds/luci/applications/luci-app-dump1090/luasrc/controller/dump1090.lua new file mode 100644 index 0000000..bc2b36d --- /dev/null +++ b/feeds/luci/applications/luci-app-dump1090/luasrc/controller/dump1090.lua @@ -0,0 +1,14 @@ +-- Copyright 2014 Álvaro Fernández Rojas +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.dump1090", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/dump1090") then + return + end + + local page = entry({"admin", "services", "dump1090"}, cbi("dump1090"), _("dump1090")) + page.dependent = true + +end diff --git a/feeds/luci/applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua b/feeds/luci/applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua new file mode 100644 index 0000000..4470a0d --- /dev/null +++ b/feeds/luci/applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua @@ -0,0 +1,199 @@ +-- Copyright 2014-2015 Álvaro Fernández Rojas +-- Licensed to the public under the Apache License 2.0. + +m = Map("dump1090", "dump1090", translate("dump1090 is a Mode S decoder specifically designed for RTLSDR devices, here you can configure the settings.")) + +s = m:section(TypedSection, "dump1090", "") +s.addremove = true +s.anonymous = false + +enable=s:option(Flag, "disabled", translate("Enabled")) +enable.enabled="0" +enable.disabled="1" +enable.default = "1" +enable.rmempty = false + +respawn=s:option(Flag, "respawn", translate("Respawn")) +respawn.default = false + +device_index=s:option(Value, "device_index", translate("RTL device index")) +device_index.rmempty = true +device_index.datatype = "uinteger" + +gain=s:option(Value, "gain", translate("Gain (-10 for auto-gain)")) +gain.rmempty = true +gain.datatype = "integer" + +enable_agc=s:option(Flag, "enable_agc", translate("Enable automatic gain control")) +enable_agc.default = false + +freq=s:option(Value, "freq", translate("Frequency")) +freq.rmempty = true +freq.datatype = "uinteger" + +ifile=s:option(Value, "ifile", translate("Data file")) +ifile.rmempty = true +ifile.datatype = "file" + +iformat=s:option(ListValue, "iformat", translate("Sample format for data file")) +iformat:value("", translate("Default")) +iformat:value("UC8") +iformat:value("SC16") +iformat:value("SC16Q11") + +throttle=s:option(Flag, "throttle", translate("When reading from a file play back in realtime, not at max speed")) +throttle.default = false + +raw=s:option(Flag, "raw", translate("Show only messages hex values")) +raw.default = false + +net=s:option(Flag, "net", translate("Enable networking")) + +modeac=s:option(Flag, "modeac", translate("Enable decoding of SSR Modes 3/A & 3/C")) +modeac.default = false + +net_beast=s:option(Flag, "net_beast", translate("TCP raw output in Beast binary format")) +net_beast.default = false + +net_only=s:option(Flag, "net_only", translate("Enable just networking, no RTL device or file used")) +net_only.default = false + +net_bind_address=s:option(Value, "net_bind_address", translate("IP address to bind to")) +net_bind_address.rmempty = true +net_bind_address.datatype = "ipaddr" + +net_http_port=s:option(Value, "net_http_port", translate("HTTP server port")) +net_http_port.rmempty = true +net_http_port.datatype = "port" + +net_ri_port=s:option(Value, "net_ri_port", translate("TCP raw input listen port")) +net_ri_port.rmempty = true +net_ri_port.datatype = "port" + +net_ro_port=s:option(Value, "net_ro_port", translate("TCP raw output listen port")) +net_ro_port.rmempty = true +net_ro_port.datatype = "port" + +net_sbs_port=s:option(Value, "net_sbs_port", translate("TCP BaseStation output listen port")) +net_sbs_port.rmempty = true +net_sbs_port.datatype = "port" + +net_bi_port=s:option(Value, "net_bi_port", translate("TCP Beast input listen port")) +net_bi_port.rmempty = true +net_bi_port.datatype = "port" + +net_bo_port=s:option(Value, "net_bo_port", translate("TCP Beast output listen port")) +net_bo_port.rmempty = true +net_bo_port.datatype = "port" + +net_fatsv_port=s:option(Value, "net_fatsv_port", translate("FlightAware TSV output port")) +net_fatsv_port.rmempty = true +net_fatsv_port.datatype = "port" + +net_ro_size=s:option(Value, "net_ro_size", translate("TCP raw output minimum size")) +net_ro_size.rmempty = true +net_ro_size.datatype = "uinteger" + +net_ro_interval=s:option(Value, "net_ro_interval", translate("TCP raw output memory flush rate in seconds")) +net_ro_interval.rmempty = true +net_ro_interval.datatype = "uinteger" + +net_heartbeat=s:option(Value, "net_heartbeat", translate("TCP heartbeat rate in seconds")) +net_heartbeat.rmempty = true +net_heartbeat.datatype = "uinteger" + +net_buffer=s:option(Value, "net_buffer", translate("TCP buffer size 64Kb * (2^n)")) +net_buffer.rmempty = true +net_buffer.datatype = "uinteger" + +net_verbatim=s:option(Flag, "net_verbatim", translate("Do not apply CRC corrections to messages we forward")) +net_verbatim.default = false + +forward_mlat=s:option(Flag, "forward_mlat", translate("Allow forwarding of received mlat results to output ports")) +forward_mlat.default = false + +lat=s:option(Value, "lat", translate("Reference/receiver latitude for surface posn")) +lat.rmempty = true +lat.datatype = "float" + +lon=s:option(Value, "lon", translate("Reference/receiver longitude for surface posn")) +lon.rmempty = true +lon.datatype = "float" + +max_range=s:option(Value, "max_range", translate("Absolute maximum range for position decoding")) +max_range.rmempty = true +max_range.datatype = "uinteger" + +fix=s:option(Flag, "fix", translate("Enable single-bits error correction using CRC")) +fix.default = false + +no_fix=s:option(Flag, "no_fix", translate("Disable single-bits error correction using CRC")) +no_fix.default = false + +no_crc_check=s:option(Flag, "no_crc_check", translate("Disable messages with broken CRC")) +no_crc_check.default = false + +phase_enhance=s:option(Flag, "phase_enhance", translate("Enable phase enhancement")) +phase_enhance.default = false + +agressive=s:option(Flag, "agressive", translate("More CPU for more messages")) +agressive.default = false + +mlat=s:option(Flag, "mlat", translate("Display raw messages in Beast ascii mode")) +mlat.default = false + +stats=s:option(Flag, "stats", translate("Print stats at exit")) +stats.default = false + +stats_range=s:option(Flag, "stats_range", translate("Collect/show range histogram")) +stats_range.default = false + +stats_every=s:option(Value, "stats_every", translate("Show and reset stats every seconds")) +stats_every.rmempty = true +stats_every.datatype = "uinteger" + +onlyaddr=s:option(Flag, "onlyaddr", translate("Show only ICAO addresses")) +onlyaddr.default = false + +metric=s:option(Flag, "metric", translate("Use metric units")) +metric.default = false + +snip=s:option(Value, "snip", translate("Strip IQ file removing samples")) +snip.rmempty = true +snip.datatype = "uinteger" + +debug_mode=s:option(Value, "debug", translate("Debug mode flags")) +debug_mode.rmempty = true + +ppm=s:option(Value, "ppm", translate("Set receiver error in parts per million")) +ppm.rmempty = true +ppm.datatype = "uinteger" + +html_dir=s:option(Value, "html_dir", translate("Base directory for the internal HTTP server")) +html_dir.rmempty = true +html_dir.datatype = "directory" + +write_json=s:option(Value, "write_json", translate("Periodically write json output to a directory")) +write_json.rmempty = true +write_json.datatype = "directory" + +write_json_every=s:option(Flag, "write_json_every", translate("Write json output every t seconds")) +write_json_every.rmempty = true +write_json_every.datatype = "uinteger" + +json_location_accuracy=s:option(ListValue, "json_location_accuracy", translate("Accuracy of receiver location in json metadata")) +json_location_accuracy:value("", translate("Default")) +json_location_accuracy:value("0", "No location") +json_location_accuracy:value("1", "Approximate") +json_location_accuracy:value("2", "Exact") + +oversample=s:option(Flag, "oversample", translate("Use the 2.4MHz demodulator")) +oversample.default = false + +dcfilter=s:option(Flag, "dcfilter", translate("Apply a 1Hz DC filter to input data")) +dcfilter.default = false + +measure_noise=s:option(Flag, "measure_noise", translate("Measure noise power")) +measure_noise.default = false + +return m diff --git a/feeds/luci/applications/luci-app-dump1090/root/etc/uci-defaults/40_luci-dump1090 b/feeds/luci/applications/luci-app-dump1090/root/etc/uci-defaults/40_luci-dump1090 new file mode 100644 index 0000000..4475d2f --- /dev/null +++ b/feeds/luci/applications/luci-app-dump1090/root/etc/uci-defaults/40_luci-dump1090 @@ -0,0 +1,12 @@ +#!/bin/sh + +# needed for "Save and Apply" to restart dump1090 +uci -q batch <<-EOF >/dev/null + delete ucitrack.@dump1090[-1] + add ucitrack dump1090 + set ucitrack.@dump1090[-1].init="dump1090" + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-dynapoint/Makefile b/feeds/luci/applications/luci-app-dynapoint/Makefile new file mode 100644 index 0000000..d16ef4a --- /dev/null +++ b/feeds/luci/applications/luci-app-dynapoint/Makefile @@ -0,0 +1,20 @@ +# +# Copyright (C) 2016 The LuCI Team +# +# This is free software, licensed under the GNU General Public License v3. +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for DynaPoint +LUCI_DEPENDS:=+dynapoint + +PKG_NAME:=luci-app-dynapoint +PKG_VERSION:=1.0 +PKG_RELEASE:=1 +PKG_LICENSE:=GPL-3.0+ +PKG_MAINTAINER:=Tobias Ilte +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/feeds/luci/applications/luci-app-dynapoint/luasrc/controller/dynapoint.lua b/feeds/luci/applications/luci-app-dynapoint/luasrc/controller/dynapoint.lua new file mode 100644 index 0000000..6534863 --- /dev/null +++ b/feeds/luci/applications/luci-app-dynapoint/luasrc/controller/dynapoint.lua @@ -0,0 +1,9 @@ +module("luci.controller.dynapoint", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/dynapoint") then + return + end + entry({"admin", "services", "dynapoint"}, cbi("dynapoint"), _("DynaPoint")) +end + diff --git a/feeds/luci/applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua b/feeds/luci/applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua new file mode 100644 index 0000000..e6871a5 --- /dev/null +++ b/feeds/luci/applications/luci-app-dynapoint/luasrc/model/cbi/dynapoint.lua @@ -0,0 +1,99 @@ +local uci = require "luci.model.uci".cursor() +local a = require "luci.model.ipkg" +local DISP = require "luci.dispatcher" + +local wlcursor = luci.model.uci.cursor_state() +local wireless = wlcursor:get_all("wireless") +local ifaces = {} + +for k, v in pairs(wireless) do + if v[".type"] == "wifi-iface" then + table.insert(ifaces, v) + end +end + +m = Map("dynapoint") +m:chain("wireless") + +s = m:section(NamedSection, "internet", "rule", translate("Configuration"), translate("Check Internet connectivity via HTTP header download")) + +hosts = s:option(DynamicList, "hosts", translate("List of host addresses"), translate("List of host addresses (url or IP) to track and request http headers from")) +hosts.datatype = "string" + +interval = s:option(Value, "interval", translate("Test-run interval"), translate("Time interval in seconds to re-start a new test run")) +interval.datatype = "uinteger" +interval.default = "30" + +offline_treshold = s:option(Value, "offline_threshold", translate("Switch_to_offline threshold"), translate("Failure counter after how many failed download attempts, the state is considered as offline")) +offline_treshold.datatype = "uinteger" +offline_treshold.default = "1" + +add_hostname_to_ssid = s:option(Flag, "add_hostname_to_ssid", translate("Append hostname to ssid"), translate("Append the router's hostname to the SSID when connectivity check fails")) +add_hostname_to_ssid.rmempty = false + + +if (a.installed("curl") == true) then + use_curl = s:option(Flag, "use_curl", translate("Use curl"), translate("Use curl instead of wget for testing the connectivity.")) + use_curl.rmempty = false + + curl_interface = s:option(Value, "curl_interface", translate("Used interface"), translate("Which interface should curl use. (Use ifconfig to find out)")) + curl_interface.datatype = "string" + curl_interface:depends("use_curl","1") + curl_interface.placeholder = "eth0" +else + use_curl = s:option(Flag, "use_curl", translate("Use curl instead of wget"), translate("Curl is currently not installed.") + .." Please install the package in the " + ..[[]] + .. "Software Section" .. [[]] + .. "." + ) + use_curl.rmempty = false + use_curl.template = "dynapoint/cbi_checkbox" +end + +m1 = Map("wireless", "DynaPoint", translate("Dynamic Access Point Manager")) + +aps = m1:section(TypedSection, "wifi-iface", translate("List of Wireless Virtual Interfaces (wVIF)")) +aps.addremove = false +aps.anonymous = true +aps.template = "cbi/tblsection" + +status = aps:option(DummyValue, "disabled", translate("WiFi Status")) +status.template = "dynapoint/cbi_color" + +function status.cfgvalue(self,section) + local val = m1:get(section, "disabled") + if val == "1" then return translate("Disabled") end + if (val == nil or val == "0") then return translate("Enabled") end + return val +end + +device = aps:option(DummyValue, "device", translate("Device")) +function device.cfgvalue(self,section) + local dev = m1:get(section, "device") + local val = m1:get(dev, "hwmode") + if val == "11a" then return dev .. " (5 GHz)" else + return dev .. " (2,4 GHz)" + end + return val +end + + + + + +mode = aps:option(DummyValue, "mode", translate("Mode")) + +ssid = aps:option(DummyValue, "ssid", translate("SSID")) + + +action = aps:option(ListValue, "dynapoint_rule", translate("Activate this wVIF if status is:")) +action.widget="select" +action:value("internet",translate("Online")) +action:value("!internet",translate("Offline")) +action:value("",translate("Not used by DynaPoint")) +action.default = "" + +return m1,m + diff --git a/feeds/luci/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_checkbox.htm b/feeds/luci/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_checkbox.htm new file mode 100644 index 0000000..5f8bcd5 --- /dev/null +++ b/feeds/luci/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_checkbox.htm @@ -0,0 +1,6 @@ +<%+cbi/valueheader%> + + + + +<%+cbi/valuefooter%> diff --git a/feeds/luci/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_color.htm b/feeds/luci/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_color.htm new file mode 100644 index 0000000..bfc710e --- /dev/null +++ b/feeds/luci/applications/luci-app-dynapoint/luasrc/view/dynapoint/cbi_color.htm @@ -0,0 +1,18 @@ +<%+cbi/valueheader%> + + +<% +if (self:cfgvalue(section) == translate("Disabled")) then +%> + +<%=self:cfgvalue(section)%> + +<% +else +%> +<%=self:cfgvalue(section)%> +<% +end +%> + +<%+cbi/valuefooter%> diff --git a/feeds/luci/applications/luci-app-dynapoint/po/de/dynapoint.po b/feeds/luci/applications/luci-app-dynapoint/po/de/dynapoint.po new file mode 100644 index 0000000..e2507e4 --- /dev/null +++ b/feeds/luci/applications/luci-app-dynapoint/po/de/dynapoint.po @@ -0,0 +1,106 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2016-08-31 15:51+0200\n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Activate this wVIF if status is:" +msgstr "Aktiviere diese drahtlose Schnittstelle wenn:" + +msgid "Append hostname to ssid" +msgstr "Anfügen des hostname zur SSID" + +msgid "Append the router's hostname to the SSID when connectivity check fails" +msgstr "" +"Fügt den hostname des routers zur SSID an, wenn die Verbindungsüberprüfung " +"fehl schlägt" + +msgid "Check Internet connectivity via HTTP header download" +msgstr "Testen der Internetverfügbarkeit via HTTP header download" + +msgid "Configuration" +msgstr "Konfiguration" + +msgid "Curl is currently not installed." +msgstr "Curl ist momentan nicht installiert." + +msgid "Device" +msgstr "Gerät" + +msgid "Disabled" +msgstr "Deaktiviert" + +msgid "DynaPoint" +msgstr "" + +msgid "Dynamic Access Point Manager" +msgstr "" + +msgid "Enabled" +msgstr "Aktiviert" + +msgid "" +"Failure counter after how many failed download attempts, the state is " +"considered as offline" +msgstr "" +"Anzahl der fehlgeschlagenen Downloadversuche, nach denen die Verbindung als offline angesehen wird" + +msgid "List of Wireless Virtual Interfaces (wVIF)" +msgstr "Liste der Drahtlosen virtuellen Schnittstellen" + +msgid "List of host addresses" +msgstr "Liste der Zieladressen" + +msgid "" +"List of host addresses (url or IP) to track and request http headers from" +msgstr "Liste der Zieladressen (URL oder IP) für den HTTP header download" + +msgid "Mode" +msgstr "Modus" + +msgid "Not used by DynaPoint" +msgstr "Nicht von DynaPoint benutzt" + +msgid "Offline" +msgstr "Offline" + +msgid "Online" +msgstr "Online" + +msgid "SSID" +msgstr "" + +msgid "Switch_to_offline threshold" +msgstr "Offline-Schwelle" + +msgid "Test-run interval" +msgstr "Testlaufintervall" + +msgid "Time interval in seconds to re-start a new test run" +msgstr "Zeitintervall in Sekunden für einen Testlauf" + +msgid "Use curl" +msgstr "Curl benutzen" + +msgid "Use curl instead of wget" +msgstr "Curl anstatt wget benutzen" + +msgid "Use curl instead of wget for testing the connectivity." +msgstr "Curl anstatt wget benutzen, um die Internetverbindung zu überprüfen." + +msgid "Used interface" +msgstr "Benutztes interface" + +msgid "Which interface should curl use. (Use ifconfig to find out)" +msgstr "" +"Welches Interface von curl benutzt werden soll. (ifconfig benutzen, um das " +"herauszufinden" + +msgid "WiFi Status" +msgstr "" + diff --git a/feeds/luci/applications/luci-app-dynapoint/po/ja/dynapoint.po b/feeds/luci/applications/luci-app-dynapoint/po/ja/dynapoint.po new file mode 100644 index 0000000..0273739 --- /dev/null +++ b/feeds/luci/applications/luci-app-dynapoint/po/ja/dynapoint.po @@ -0,0 +1,110 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: INAGAKI Hiroshi \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ja\n" + +msgid "Activate this wVIF if status is:" +msgstr "wVIFを有効化する接続ステータス:" + +msgid "Append hostname to ssid" +msgstr "ホスト名をSSIDに追加する" + +msgid "Append the router's hostname to the SSID when connectivity check fails" +msgstr "" +"接続性のチェックが失敗した場合、ルーターのホスト名をSSIDに追加します。" + +msgid "Check Internet connectivity via HTTP header download" +msgstr "" +"HTTP ヘッダーのダウンロードを通して、インターネットの接続性をチェックしま" +"す。" + +msgid "Configuration" +msgstr "設定" + +msgid "Curl is currently not installed." +msgstr "curl は現在インストールされていません。" + +msgid "Device" +msgstr "デバイス" + +msgid "Disabled" +msgstr "無効" + +msgid "DynaPoint" +msgstr "DynaPoint" + +msgid "Dynamic Access Point Manager" +msgstr "ダイナミック アクセスポイント マネージャー" + +msgid "Enabled" +msgstr "有効" + +msgid "" +"Failure counter after how many failed download attempts, the state is " +"considered as offline" +msgstr "状態をオフラインと見なすまでの、ダウンロード試行の失敗回数です。" + +msgid "List of Wireless Virtual Interfaces (wVIF)" +msgstr "無線仮想インターフェース (wVIF) のリスト" + +msgid "List of host addresses" +msgstr "ホストアドレスのリスト" + +msgid "" +"List of host addresses (url or IP) to track and request http headers from" +msgstr "" +"HTTP ヘッダーの追跡およびリクエストを行う、ホスト アドレス(URLまたはIP)の" +"リストです。" + +msgid "Mode" +msgstr "モード" + +msgid "Not used by DynaPoint" +msgstr "DynaPointで使用しない" + +msgid "Offline" +msgstr "オフライン" + +msgid "Online" +msgstr "オンライン" + +msgid "SSID" +msgstr "SSID" + +msgid "Switch_to_offline threshold" +msgstr "オフライン化閾値" + +msgid "Test-run interval" +msgstr "テスト実行間隔" + +msgid "Time interval in seconds to re-start a new test run" +msgstr "接続性テストを再実行するまでの時間間隔(秒)です。" + +msgid "Use curl" +msgstr "curl を使用する" + +msgid "Use curl instead of wget" +msgstr "wget の代わりに curl を使用する" + +msgid "Use curl instead of wget for testing the connectivity." +msgstr "接続性のテストの際、wget の代わりに curl を使用します。" + +msgid "Used interface" +msgstr "使用するインターフェース" + +msgid "Which interface should curl use. (Use ifconfig to find out)" +msgstr "" +"curl が使用するインターフェースです。ifconfigを使用してインターフェース名を" +"確認します。" + +msgid "WiFi Status" +msgstr "無線ステータス" diff --git a/feeds/luci/applications/luci-app-dynapoint/po/templates/dynapoint.pot b/feeds/luci/applications/luci-app-dynapoint/po/templates/dynapoint.pot new file mode 100644 index 0000000..d72e0c9 --- /dev/null +++ b/feeds/luci/applications/luci-app-dynapoint/po/templates/dynapoint.pot @@ -0,0 +1,93 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Activate this wVIF if status is:" +msgstr "" + +msgid "Append hostname to ssid" +msgstr "" + +msgid "Append the router's hostname to the SSID when connectivity check fails" +msgstr "" + +msgid "Check Internet connectivity via HTTP header download" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Curl is currently not installed." +msgstr "" + +msgid "Device" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "DynaPoint" +msgstr "" + +msgid "Dynamic Access Point Manager" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Failure counter after how many failed download attempts, the state is " +"considered as offline" +msgstr "" + +msgid "List of Wireless Virtual Interfaces (wVIF)" +msgstr "" + +msgid "List of host addresses" +msgstr "" + +msgid "" +"List of host addresses (url or IP) to track and request http headers from" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Not used by DynaPoint" +msgstr "" + +msgid "Offline" +msgstr "" + +msgid "Online" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "Switch_to_offline threshold" +msgstr "" + +msgid "Test-run interval" +msgstr "" + +msgid "Time interval in seconds to re-start a new test run" +msgstr "" + +msgid "Use curl" +msgstr "" + +msgid "Use curl instead of wget" +msgstr "" + +msgid "Use curl instead of wget for testing the connectivity." +msgstr "" + +msgid "Used interface" +msgstr "" + +msgid "Which interface should curl use. (Use ifconfig to find out)" +msgstr "" + +msgid "WiFi Status" +msgstr "" + diff --git a/feeds/luci/applications/luci-app-dynapoint/root/etc/uci-defaults/40_luci-dynapoint b/feeds/luci/applications/luci-app-dynapoint/root/etc/uci-defaults/40_luci-dynapoint new file mode 100644 index 0000000..7287ccd --- /dev/null +++ b/feeds/luci/applications/luci-app-dynapoint/root/etc/uci-defaults/40_luci-dynapoint @@ -0,0 +1,13 @@ +#!/bin/sh + +# needed for "Save and Apply" to restart dynapoint +uci -q batch <<-EOF >/dev/null + delete ucitrack.@dynapoint[-1] + add ucitrack dynapoint + set ucitrack.@dynapoint[-1].init="dynapoint" + commit dynapoint +EOF + +rm -f /tmp/luci-indexcache +exit 0 + diff --git a/feeds/luci/applications/luci-app-firewall/Makefile b/feeds/luci/applications/luci-app-firewall/Makefile new file mode 100644 index 0000000..21804d7 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Firewall and Portforwarding application +LUCI_DEPENDS:=+firewall + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/controller/firewall.lua b/feeds/luci/applications/luci-app-firewall/luasrc/controller/firewall.lua new file mode 100644 index 0000000..5a6ab0a --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/controller/firewall.lua @@ -0,0 +1,23 @@ +module("luci.controller.firewall", package.seeall) + +function index() + entry({"admin", "network", "firewall"}, + alias("admin", "network", "firewall", "zones"), + _("Firewall"), 60) + + entry({"admin", "network", "firewall", "zones"}, + arcombine(cbi("firewall/zones"), cbi("firewall/zone-details")), + _("General Settings"), 10).leaf = true + + entry({"admin", "network", "firewall", "forwards"}, + arcombine(cbi("firewall/forwards"), cbi("firewall/forward-details")), + _("Port Forwards"), 20).leaf = true + + entry({"admin", "network", "firewall", "rules"}, + arcombine(cbi("firewall/rules"), cbi("firewall/rule-details")), + _("Traffic Rules"), 30).leaf = true + + entry({"admin", "network", "firewall", "custom"}, + cbi("firewall/custom"), + _("Custom Rules"), 40).leaf = true +end diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua new file mode 100644 index 0000000..2b3cee3 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua @@ -0,0 +1,31 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" + +local f = SimpleForm("firewall", + translate("Firewall - Custom Rules"), + translate("Custom rules allow you to execute arbritary iptables commands \ + which are not otherwise covered by the firewall framework. \ + The commands are executed after each firewall restart, right after \ + the default ruleset has been loaded.")) + +local o = f:field(Value, "_custom") + +o.template = "cbi/tvalue" +o.rows = 20 + +function o.cfgvalue(self, section) + return fs.readfile("/etc/firewall.user") +end + +function o.write(self, section, value) + value = value:gsub("\r\n?", "\n") + fs.writefile("/etc/firewall.user", value) + require("luci.sys").call("/etc/init.d/firewall restart >/dev/null 2<&1") + require("nixio").syslog('info', 'Restarting firewall on custom /etc/firewall.user change') +end + +f.submit = translate("Restart Firewall") + +return f diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua new file mode 100644 index 0000000..22f1c77 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua @@ -0,0 +1,150 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local sys = require "luci.sys" +local dsp = require "luci.dispatcher" +local ft = require "luci.tools.firewall" + +local m, s, o + +arg[1] = arg[1] or "" + +m = Map("firewall", + translate("Firewall - Port Forwards"), + translate("This page allows you to change advanced properties of the port \ + forwarding entry. In most cases there is no need to modify \ + those settings.")) + +m.redirect = dsp.build_url("admin/network/firewall/forwards") + +if m.uci:get("firewall", arg[1]) ~= "redirect" then + luci.http.redirect(m.redirect) + return +else + local name = m:get(arg[1], "name") or m:get(arg[1], "_name") + if not name or #name == 0 then + name = translate("(Unnamed Entry)") + end + m.title = "%s - %s" %{ translate("Firewall - Port Forwards"), name } +end + +s = m:section(NamedSection, arg[1], "redirect", "") +s.anonymous = true +s.addremove = false + +ft.opt_enabled(s, Button) +ft.opt_name(s, Value, translate("Name")) + + +o = s:option(Value, "proto", translate("Protocol")) +o:value("tcp udp", "TCP+UDP") +o:value("tcp", "TCP") +o:value("udp", "UDP") +o:value("icmp", "ICMP") + +function o.cfgvalue(...) + local v = Value.cfgvalue(...) + if not v or v == "tcpudp" then + return "tcp udp" + end + return v +end + + +o = s:option(Value, "src", translate("Source zone")) +o.nocreate = true +o.default = "wan" +o.template = "cbi/firewall_zonelist" + + +o = s:option(DynamicList, "src_mac", + translate("Source MAC address"), + translate("Only match incoming traffic from these MACs.")) +o.rmempty = true +o.datatype = "neg(macaddr)" +o.placeholder = translate("any") + +luci.sys.net.mac_hints(function(mac, name) + o:value(mac, "%s (%s)" %{ mac, name }) +end) + + +o = s:option(Value, "src_ip", + translate("Source IP address"), + translate("Only match incoming traffic from this IP or range.")) +o.rmempty = true +o.datatype = "neg(ip4addr)" +o.placeholder = translate("any") + +luci.sys.net.ipv4_hints(function(ip, name) + o:value(ip, "%s (%s)" %{ ip, name }) +end) + + +o = s:option(Value, "src_port", + translate("Source port"), + translate("Only match incoming traffic originating from the given source port or port range on the client host")) +o.rmempty = true +o.datatype = "neg(portrange)" +o.placeholder = translate("any") + + +o = s:option(Value, "src_dip", + translate("External IP address"), + translate("Only match incoming traffic directed at the given IP address.")) + +luci.sys.net.ipv4_hints(function(ip, name) + o:value(ip, "%s (%s)" %{ ip, name }) +end) + + +o.rmempty = true +o.datatype = "neg(ip4addr)" +o.placeholder = translate("any") + + +o = s:option(Value, "src_dport", translate("External port"), + translate("Match incoming traffic directed at the given " .. + "destination port or port range on this host")) +o.datatype = "neg(portrange)" + + + +o = s:option(Value, "dest", translate("Internal zone")) +o.nocreate = true +o.default = "lan" +o.template = "cbi/firewall_zonelist" + + +o = s:option(Value, "dest_ip", translate("Internal IP address"), + translate("Redirect matched incoming traffic to the specified \ + internal host")) +o.datatype = "ip4addr" + +luci.sys.net.ipv4_hints(function(ip, name) + o:value(ip, "%s (%s)" %{ ip, name }) +end) + + +o = s:option(Value, "dest_port", + translate("Internal port"), + translate("Redirect matched incoming traffic to the given port on \ + the internal host")) +o.placeholder = translate("any") +o.datatype = "portrange" + + +o = s:option(Flag, "reflection", translate("Enable NAT Loopback")) +o.rmempty = true +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "1" +end + + +s:option(Value, "extra", + translate("Extra arguments"), + translate("Passes additional arguments to iptables. Use with care!")) + + +return m diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua new file mode 100644 index 0000000..e61ce73 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua @@ -0,0 +1,134 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2010-2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ds = require "luci.dispatcher" +local ft = require "luci.tools.firewall" + +m = Map("firewall", translate("Firewall - Port Forwards"), + translate("Port forwarding allows remote computers on the Internet to \ + connect to a specific computer or service within the \ + private LAN.")) + +-- +-- Port Forwards +-- + +s = m:section(TypedSection, "redirect", translate("Port Forwards")) +s.template = "cbi/tblsection" +s.addremove = true +s.anonymous = true +s.sortable = true +s.extedit = ds.build_url("admin/network/firewall/forwards/%s") +s.template_addremove = "firewall/cbi_addforward" + +function s.create(self, section) + local n = m:formvalue("_newfwd.name") + local p = m:formvalue("_newfwd.proto") + local E = m:formvalue("_newfwd.extzone") + local e = m:formvalue("_newfwd.extport") + local I = m:formvalue("_newfwd.intzone") + local a = m:formvalue("_newfwd.intaddr") + local i = m:formvalue("_newfwd.intport") + + if p == "other" or (p and a) then + created = TypedSection.create(self, section) + + self.map:set(created, "target", "DNAT") + self.map:set(created, "src", E or "wan") + self.map:set(created, "dest", I or "lan") + self.map:set(created, "proto", (p ~= "other") and p or "all") + self.map:set(created, "src_dport", e) + self.map:set(created, "dest_ip", a) + self.map:set(created, "dest_port", i) + self.map:set(created, "name", n) + end + + if p ~= "other" then + created = nil + end +end + +function s.parse(self, ...) + TypedSection.parse(self, ...) + if created then + m.uci:save("firewall") + luci.http.redirect(ds.build_url( + "admin/network/firewall/redirect", created + )) + end +end + +function s.filter(self, sid) + return (self.map:get(sid, "target") ~= "SNAT") +end + + +ft.opt_name(s, DummyValue, translate("Name")) + + +local function forward_proto_txt(self, s) + return "%s-%s" %{ + translate("IPv4"), + ft.fmt_proto(self.map:get(s, "proto"), + self.map:get(s, "icmp_type")) or "TCP+UDP" + } +end + +local function forward_src_txt(self, s) + local z = ft.fmt_zone(self.map:get(s, "src"), translate("any zone")) + local a = ft.fmt_ip(self.map:get(s, "src_ip"), translate("any host")) + local p = ft.fmt_port(self.map:get(s, "src_port")) + local m = ft.fmt_mac(self.map:get(s, "src_mac")) + + if p and m then + return translatef("From %s in %s with source %s and %s", a, z, p, m) + elseif p or m then + return translatef("From %s in %s with source %s", a, z, p or m) + else + return translatef("From %s in %s", a, z) + end +end + +local function forward_via_txt(self, s) + local a = ft.fmt_ip(self.map:get(s, "src_dip"), translate("any router IP")) + local p = ft.fmt_port(self.map:get(s, "src_dport")) + + if p then + return translatef("Via %s at %s", a, p) + else + return translatef("Via %s", a) + end +end + +match = s:option(DummyValue, "match", translate("Match")) +match.rawhtml = true +match.width = "50%" +function match.cfgvalue(self, s) + return "%s
%s
%s
" % { + forward_proto_txt(self, s), + forward_src_txt(self, s), + forward_via_txt(self, s) + } +end + + +dest = s:option(DummyValue, "dest", translate("Forward to")) +dest.rawhtml = true +dest.width = "40%" +function dest.cfgvalue(self, s) + local z = ft.fmt_zone(self.map:get(s, "dest"), translate("any zone")) + local a = ft.fmt_ip(self.map:get(s, "dest_ip"), translate("any host")) + local p = ft.fmt_port(self.map:get(s, "dest_port")) or + ft.fmt_port(self.map:get(s, "src_dport")) + + if p then + return translatef("%s, %s in %s", a, p, z) + else + return translatef("%s in %s", a, z) + end +end + +ft.opt_enabled(s, Flag, translate("Enable")).width = "1%" + +return m diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua new file mode 100644 index 0000000..97e93ae --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua @@ -0,0 +1,349 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2010-2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local sys = require "luci.sys" +local utl = require "luci.util" +local dsp = require "luci.dispatcher" +local nxo = require "nixio" + +local ft = require "luci.tools.firewall" +local nw = require "luci.model.network" +local m, s, o, k, v + +arg[1] = arg[1] or "" + +m = Map("firewall", + translate("Firewall - Traffic Rules"), + translate("This page allows you to change advanced properties of the \ + traffic rule entry, such as matched source and destination \ + hosts.")) + +m.redirect = dsp.build_url("admin/network/firewall/rules") + +nw.init(m.uci) + +local rule_type = m.uci:get("firewall", arg[1]) +if rule_type == "redirect" and m:get(arg[1], "target") ~= "SNAT" then + rule_type = nil +end + +if not rule_type then + luci.http.redirect(m.redirect) + return + +-- +-- SNAT +-- +elseif rule_type == "redirect" then + + local name = m:get(arg[1], "name") or m:get(arg[1], "_name") + if not name or #name == 0 then + name = translate("(Unnamed SNAT)") + else + name = "SNAT %s" % name + end + + m.title = "%s - %s" %{ translate("Firewall - Traffic Rules"), name } + + local wan_zone = nil + + m.uci:foreach("firewall", "zone", + function(s) + local n = s.network or s.name + if n then + local i + for i in utl.imatch(n) do + if i == "wan" then + wan_zone = s.name + return false + end + end + end + end) + + s = m:section(NamedSection, arg[1], "redirect", "") + s.anonymous = true + s.addremove = false + + + ft.opt_enabled(s, Button) + ft.opt_name(s, Value, translate("Name")) + + + o = s:option(Value, "proto", + translate("Protocol"), + translate("You may specify multiple by selecting \"-- custom --\" and \ + then entering protocols separated by space.")) + + o:value("all", "All protocols") + o:value("tcp udp", "TCP+UDP") + o:value("tcp", "TCP") + o:value("udp", "UDP") + o:value("icmp", "ICMP") + + function o.cfgvalue(...) + local v = Value.cfgvalue(...) + if not v or v == "tcpudp" then + return "tcp udp" + end + return v + end + + + o = s:option(Value, "src", translate("Source zone")) + o.nocreate = true + o.default = "wan" + o.template = "cbi/firewall_zonelist" + + + o = s:option(Value, "src_ip", translate("Source IP address")) + o.rmempty = true + o.datatype = "neg(ipaddr)" + o.placeholder = translate("any") + + luci.sys.net.ipv4_hints(function(ip, name) + o:value(ip, "%s (%s)" %{ ip, name }) + end) + + + o = s:option(Value, "src_port", + translate("Source port"), + translate("Match incoming traffic originating from the given source \ + port or port range on the client host.")) + o.rmempty = true + o.datatype = "neg(portrange)" + o.placeholder = translate("any") + + + o = s:option(Value, "dest", translate("Destination zone")) + o.nocreate = true + o.default = "lan" + o.template = "cbi/firewall_zonelist" + + + o = s:option(Value, "dest_ip", translate("Destination IP address")) + o.datatype = "neg(ip4addr)" + + luci.sys.net.ipv4_hints(function(ip, name) + o:value(ip, "%s (%s)" %{ ip, name }) + end) + + + o = s:option(Value, "dest_port", + translate("Destination port"), + translate("Match forwarded traffic to the given destination port or \ + port range.")) + + o.rmempty = true + o.placeholder = translate("any") + o.datatype = "neg(portrange)" + + + o = s:option(Value, "src_dip", + translate("SNAT IP address"), + translate("Rewrite matched traffic to the given address.")) + o.rmempty = false + o.datatype = "ip4addr" + + for k, v in ipairs(nw:get_interfaces()) do + local a + for k, a in ipairs(v:ipaddrs()) do + o:value(a:host():string(), '%s (%s)' %{ + a:host():string(), v:shortname() + }) + end + end + + + o = s:option(Value, "src_dport", translate("SNAT port"), + translate("Rewrite matched traffic to the given source port. May be \ + left empty to only rewrite the IP address.")) + o.datatype = "portrange" + o.rmempty = true + o.placeholder = translate('Do not rewrite') + + + s:option(Value, "extra", + translate("Extra arguments"), + translate("Passes additional arguments to iptables. Use with care!")) + + +-- +-- Rule +-- +else + local name = m:get(arg[1], "name") or m:get(arg[1], "_name") + if not name or #name == 0 then + name = translate("(Unnamed Rule)") + end + + m.title = "%s - %s" %{ translate("Firewall - Traffic Rules"), name } + + + s = m:section(NamedSection, arg[1], "rule", "") + s.anonymous = true + s.addremove = false + + ft.opt_enabled(s, Button) + ft.opt_name(s, Value, translate("Name")) + + + o = s:option(ListValue, "family", translate("Restrict to address family")) + o.rmempty = true + o:value("", translate("IPv4 and IPv6")) + o:value("ipv4", translate("IPv4 only")) + o:value("ipv6", translate("IPv6 only")) + + + o = s:option(Value, "proto", translate("Protocol")) + o:value("all", translate("Any")) + o:value("tcp udp", "TCP+UDP") + o:value("tcp", "TCP") + o:value("udp", "UDP") + o:value("icmp", "ICMP") + + function o.cfgvalue(...) + local v = Value.cfgvalue(...) + if not v or v == "tcpudp" then + return "tcp udp" + end + return v + end + + + o = s:option(DynamicList, "icmp_type", translate("Match ICMP type")) + o:value("", "any") + o:value("echo-reply") + o:value("destination-unreachable") + o:value("network-unreachable") + o:value("host-unreachable") + o:value("protocol-unreachable") + o:value("port-unreachable") + o:value("fragmentation-needed") + o:value("source-route-failed") + o:value("network-unknown") + o:value("host-unknown") + o:value("network-prohibited") + o:value("host-prohibited") + o:value("TOS-network-unreachable") + o:value("TOS-host-unreachable") + o:value("communication-prohibited") + o:value("host-precedence-violation") + o:value("precedence-cutoff") + o:value("source-quench") + o:value("redirect") + o:value("network-redirect") + o:value("host-redirect") + o:value("TOS-network-redirect") + o:value("TOS-host-redirect") + o:value("echo-request") + o:value("router-advertisement") + o:value("router-solicitation") + o:value("time-exceeded") + o:value("ttl-zero-during-transit") + o:value("ttl-zero-during-reassembly") + o:value("parameter-problem") + o:value("ip-header-bad") + o:value("required-option-missing") + o:value("timestamp-request") + o:value("timestamp-reply") + o:value("address-mask-request") + o:value("address-mask-reply") + + + o = s:option(Value, "src", translate("Source zone")) + o.nocreate = true + o.allowany = true + o.default = "wan" + o.template = "cbi/firewall_zonelist" + + + o = s:option(Value, "src_mac", translate("Source MAC address")) + o.datatype = "list(macaddr)" + o.placeholder = translate("any") + + luci.sys.net.mac_hints(function(mac, name) + o:value(mac, "%s (%s)" %{ mac, name }) + end) + + + o = s:option(Value, "src_ip", translate("Source address")) + o.datatype = "neg(ipaddr)" + o.placeholder = translate("any") + + luci.sys.net.ipv4_hints(function(ip, name) + o:value(ip, "%s (%s)" %{ ip, name }) + end) + + + o = s:option(Value, "src_port", translate("Source port")) + o.datatype = "list(neg(portrange))" + o.placeholder = translate("any") + + + o = s:option(Value, "dest", translate("Destination zone")) + o.nocreate = true + o.allowany = true + o.allowlocal = true + o.template = "cbi/firewall_zonelist" + + + o = s:option(Value, "dest_ip", translate("Destination address")) + o.datatype = "neg(ipaddr)" + o.placeholder = translate("any") + + luci.sys.net.ipv4_hints(function(ip, name) + o:value(ip, "%s (%s)" %{ ip, name }) + end) + + + o = s:option(Value, "dest_port", translate("Destination port")) + o.datatype = "list(neg(portrange))" + o.placeholder = translate("any") + + + o = s:option(ListValue, "target", translate("Action")) + o.default = "ACCEPT" + o:value("DROP", translate("drop")) + o:value("ACCEPT", translate("accept")) + o:value("REJECT", translate("reject")) + o:value("NOTRACK", translate("don't track")) + + + s:option(Value, "extra", + translate("Extra arguments"), + translate("Passes additional arguments to iptables. Use with care!")) +end + +o = s:option(MultiValue, "weekdays", translate("Week Days")) +o.oneline = true +o.widget = "checkbox" +o:value("Sun", translate("Sunday")) +o:value("Mon", translate("Monday")) +o:value("Tue", translate("Tuesday")) +o:value("Wed", translate("Wednesday")) +o:value("Thu", translate("Thursday")) +o:value("Fri", translate("Friday")) +o:value("Sat", translate("Saturday")) + +o = s:option(MultiValue, "monthdays", translate("Month Days")) +o.oneline = true +o.widget = "checkbox" +for i = 1,31 do + o:value(translate(i)) +end + +o = s:option(Value, "start_time", translate("Start Time (hh:mm:ss)")) +o.datatype = "timehhmmss" +o = s:option(Value, "stop_time", translate("Stop Time (hh:mm:ss)")) +o.datatype = "timehhmmss" +o = s:option(Value, "start_date", translate("Start Date (yyyy-mm-dd)")) +o.datatype = "dateyyyymmdd" +o = s:option(Value, "stop_date", translate("Stop Date (yyyy-mm-dd)")) +o.datatype = "dateyyyymmdd" + +o = s:option(Flag, "utc_time", translate("Time in UTC")) +o.default = o.disabled + +return m diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua new file mode 100644 index 0000000..c533491 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua @@ -0,0 +1,259 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2010-2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ds = require "luci.dispatcher" +local ft = require "luci.tools.firewall" + +m = Map("firewall", + translate("Firewall - Traffic Rules"), + translate("Traffic rules define policies for packets traveling between \ + different zones, for example to reject traffic between certain hosts \ + or to open WAN ports on the router.")) + +-- +-- Rules +-- + +s = m:section(TypedSection, "rule", translate("Traffic Rules")) +s.addremove = true +s.anonymous = true +s.sortable = true +s.template = "cbi/tblsection" +s.extedit = ds.build_url("admin/network/firewall/rules/%s") +s.defaults.target = "ACCEPT" +s.template_addremove = "firewall/cbi_addrule" + + +function s.create(self, section) + created = TypedSection.create(self, section) +end + +function s.parse(self, ...) + TypedSection.parse(self, ...) + + local i_n = m:formvalue("_newopen.name") + local i_p = m:formvalue("_newopen.proto") + local i_e = m:formvalue("_newopen.extport") + local i_x = m:formvalue("_newopen.submit") + + local f_n = m:formvalue("_newfwd.name") + local f_s = m:formvalue("_newfwd.src") + local f_d = m:formvalue("_newfwd.dest") + local f_x = m:formvalue("_newfwd.submit") + + if i_x then + created = TypedSection.create(self, section) + + self.map:set(created, "target", "ACCEPT") + self.map:set(created, "src", "wan") + self.map:set(created, "proto", (i_p ~= "other") and i_p or "all") + self.map:set(created, "dest_port", i_e) + self.map:set(created, "name", i_n) + + if i_p ~= "other" and i_e and #i_e > 0 then + created = nil + end + + elseif f_x then + created = TypedSection.create(self, section) + + self.map:set(created, "target", "ACCEPT") + self.map:set(created, "src", f_s) + self.map:set(created, "dest", f_d) + self.map:set(created, "name", f_n) + end + + if created then + m.uci:save("firewall") + luci.http.redirect(ds.build_url( + "admin/network/firewall/rules", created + )) + end +end + +ft.opt_name(s, DummyValue, translate("Name")) + +local function rule_proto_txt(self, s) + local f = self.map:get(s, "family") + local p = ft.fmt_proto(self.map:get(s, "proto"), + self.map:get(s, "icmp_type")) or translate("traffic") + + if f and f:match("4") then + return "%s-%s" %{ translate("IPv4"), p } + elseif f and f:match("6") then + return "%s-%s" %{ translate("IPv6"), p } + else + return "%s %s" %{ translate("Any"), p } + end +end + +local function rule_src_txt(self, s) + local z = ft.fmt_zone(self.map:get(s, "src"), translate("any zone")) + local a = ft.fmt_ip(self.map:get(s, "src_ip"), translate("any host")) + local p = ft.fmt_port(self.map:get(s, "src_port")) + local m = ft.fmt_mac(self.map:get(s, "src_mac")) + + if p and m then + return translatef("From %s in %s with source %s and %s", a, z, p, m) + elseif p or m then + return translatef("From %s in %s with source %s", a, z, p or m) + else + return translatef("From %s in %s", a, z) + end +end + +local function rule_dest_txt(self, s) + local z = ft.fmt_zone(self.map:get(s, "dest")) + local p = ft.fmt_port(self.map:get(s, "dest_port")) + + -- Forward + if z then + local a = ft.fmt_ip(self.map:get(s, "dest_ip"), translate("any host")) + if p then + return translatef("To %s, %s in %s", a, p, z) + else + return translatef("To %s in %s", a, z) + end + + -- Input + else + local a = ft.fmt_ip(self.map:get(s, "dest_ip"), + translate("any router IP")) + + if p then + return translatef("To %s at %s on this device", a, p) + else + return translatef("To %s on this device", a) + end + end +end + +local function snat_dest_txt(self, s) + local z = ft.fmt_zone(self.map:get(s, "dest"), translate("any zone")) + local a = ft.fmt_ip(self.map:get(s, "dest_ip"), translate("any host")) + local p = ft.fmt_port(self.map:get(s, "dest_port")) or + ft.fmt_port(self.map:get(s, "src_dport")) + + if p then + return translatef("To %s, %s in %s", a, p, z) + else + return translatef("To %s in %s", a, z) + end +end + + +match = s:option(DummyValue, "match", translate("Match")) +match.rawhtml = true +match.width = "70%" +function match.cfgvalue(self, s) + return "%s
%s
%s
" % { + rule_proto_txt(self, s), + rule_src_txt(self, s), + rule_dest_txt(self, s) + } +end + +target = s:option(DummyValue, "target", translate("Action")) +target.rawhtml = true +target.width = "20%" +function target.cfgvalue(self, s) + local t = ft.fmt_target(self.map:get(s, "target"), self.map:get(s, "dest")) + local l = ft.fmt_limit(self.map:get(s, "limit"), + self.map:get(s, "limit_burst")) + + if l then + return translatef("%s and limit to %s", t, l) + else + return "%s" % t + end +end + +ft.opt_enabled(s, Flag, translate("Enable")).width = "1%" + + +-- +-- SNAT +-- + +s = m:section(TypedSection, "redirect", + translate("Source NAT"), + translate("Source NAT is a specific form of masquerading which allows \ + fine grained control over the source IP used for outgoing traffic, \ + for example to map multiple WAN addresses to internal subnets.")) +s.template = "cbi/tblsection" +s.addremove = true +s.anonymous = true +s.sortable = true +s.extedit = ds.build_url("admin/network/firewall/rules/%s") +s.template_addremove = "firewall/cbi_addsnat" + +function s.create(self, section) + created = TypedSection.create(self, section) +end + +function s.parse(self, ...) + TypedSection.parse(self, ...) + + local n = m:formvalue("_newsnat.name") + local s = m:formvalue("_newsnat.src") + local d = m:formvalue("_newsnat.dest") + local a = m:formvalue("_newsnat.dip") + local p = m:formvalue("_newsnat.dport") + local x = m:formvalue("_newsnat.submit") + + if x and a and #a > 0 then + created = TypedSection.create(self, section) + + self.map:set(created, "target", "SNAT") + self.map:set(created, "src", s) + self.map:set(created, "dest", d) + self.map:set(created, "proto", "all") + self.map:set(created, "src_dip", a) + self.map:set(created, "src_dport", p) + self.map:set(created, "name", n) + end + + if created then + m.uci:save("firewall") + luci.http.redirect(ds.build_url( + "admin/network/firewall/rules", created + )) + end +end + +function s.filter(self, sid) + return (self.map:get(sid, "target") == "SNAT") +end + +ft.opt_name(s, DummyValue, translate("Name")) + +match = s:option(DummyValue, "match", translate("Match")) +match.rawhtml = true +match.width = "70%" +function match.cfgvalue(self, s) + return "%s
%s
%s
" % { + rule_proto_txt(self, s), + rule_src_txt(self, s), + snat_dest_txt(self, s) + } +end + +snat = s:option(DummyValue, "via", translate("Action")) +snat.rawhtml = true +snat.width = "20%" +function snat.cfgvalue(self, s) + local a = ft.fmt_ip(self.map:get(s, "src_dip")) + local p = ft.fmt_port(self.map:get(s, "src_dport")) + + if a and p then + return translatef("Rewrite to source %s, %s", a, p) + else + return translatef("Rewrite to source %s", a or p) + end +end + +ft.opt_enabled(s, Flag, translate("Enable")).width = "1%" + + +return m diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua new file mode 100644 index 0000000..c8b8f22 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua @@ -0,0 +1,232 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2010-2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local nw = require "luci.model.network" +local fw = require "luci.model.firewall" +local ds = require "luci.dispatcher" +local ut = require "luci.util" + +local m, p, i, v +local s, name, net, family, msrc, mdest, log, lim +local s2, out, inp + + +m = Map("firewall", translate("Firewall - Zone Settings")) +m.redirect = luci.dispatcher.build_url("admin/network/firewall/zones") + +fw.init(m.uci) +nw.init(m.uci) + + +local zone = fw:get_zone(arg[1]) +if not zone then + luci.http.redirect(dsp.build_url("admin/network/firewall/zones")) + return +else + m.title = "%s - %s" %{ + translate("Firewall - Zone Settings"), + translatef("Zone %q", zone:name() or "?") + } +end + + +s = m:section(NamedSection, zone.sid, "zone", + translatef("Zone %q", zone:name()), + translatef("This section defines common properties of %q. \ + The input and output options set the default \ + policies for traffic entering and leaving this zone while the \ + forward option describes the policy for forwarded traffic \ + between different networks within the zone. \ + Covered networks specifies which available networks are \ + members of this zone.", zone:name())) + +s.anonymous = true +s.addremove = false + +m.on_commit = function(map) + local zone = fw:get_zone(arg[1]) + if zone then + s.section = zone.sid + s2.section = zone.sid + end +end + + +s:tab("general", translate("General Settings")) +s:tab("advanced", translate("Advanced Settings")) + + +name = s:taboption("general", Value, "name", translate("Name")) +name.optional = false +name.forcewrite = true +name.datatype = "and(uciname,maxlength(11))" + +function name.write(self, section, value) + if zone:name() ~= value then + fw:rename_zone(zone:name(), value) + out.exclude = value + inp.exclude = value + end + + m.redirect = ds.build_url("admin/network/firewall/zones", value) + m.title = "%s - %s" %{ + translate("Firewall - Zone Settings"), + translatef("Zone %q", value or "?") + } +end + +p = { + s:taboption("general", ListValue, "input", translate("Input")), + s:taboption("general", ListValue, "output", translate("Output")), + s:taboption("general", ListValue, "forward", translate("Forward")) +} + +for i, v in ipairs(p) do + v:value("REJECT", translate("reject")) + v:value("DROP", translate("drop")) + v:value("ACCEPT", translate("accept")) +end + +s:taboption("general", Flag, "masq", translate("Masquerading")) +s:taboption("general", Flag, "mtu_fix", translate("MSS clamping")) + +net = s:taboption("general", Value, "network", translate("Covered networks")) +net.template = "cbi/network_netlist" +net.widget = "checkbox" +net.cast = "string" + +function net.formvalue(self, section) + return Value.formvalue(self, section) or "-" +end + +function net.cfgvalue(self, section) + return Value.cfgvalue(self, section) or name:cfgvalue(section) +end + +function net.write(self, section, value) + zone:clear_networks() + + local n + for n in ut.imatch(value) do + zone:add_network(n) + end +end + + +family = s:taboption("advanced", ListValue, "family", + translate("Restrict to address family")) + +family.rmempty = true +family:value("", translate("IPv4 and IPv6")) +family:value("ipv4", translate("IPv4 only")) +family:value("ipv6", translate("IPv6 only")) + +msrc = s:taboption("advanced", DynamicList, "masq_src", + translate("Restrict Masquerading to given source subnets")) + +msrc.optional = true +msrc.datatype = "list(neg(or(uciname,hostname,ip4addr)))" +msrc.placeholder = "0.0.0.0/0" +msrc:depends("family", "") +msrc:depends("family", "ipv4") + +mdest = s:taboption("advanced", DynamicList, "masq_dest", + translate("Restrict Masquerading to given destination subnets")) + +mdest.optional = true +mdest.datatype = "list(neg(or(uciname,hostname,ip4addr)))" +mdest.placeholder = "0.0.0.0/0" +mdest:depends("family", "") +mdest:depends("family", "ipv4") + +s:taboption("advanced", Flag, "conntrack", + translate("Force connection tracking")) + +log = s:taboption("advanced", Flag, "log", + translate("Enable logging on this zone")) + +log.rmempty = true +log.enabled = "1" + +lim = s:taboption("advanced", Value, "log_limit", + translate("Limit log messages")) + +lim.placeholder = "10/minute" +lim:depends("log", "1") + + +s2 = m:section(NamedSection, zone.sid, "fwd_out", + translate("Inter-Zone Forwarding"), + translatef("The options below control the forwarding policies between \ + this zone (%s) and other zones. Destination zones cover \ + forwarded traffic originating from %q. \ + Source zones match forwarded traffic from other zones \ + targeted at %q. The forwarding rule is \ + unidirectional, e.g. a forward from lan to wan does \ + not imply a permission to forward from wan to lan as well.", + zone:name(), zone:name(), zone:name() + + )) + +out = s2:option(Value, "out", + translate("Allow forward to destination zones:")) + +out.nocreate = true +out.widget = "checkbox" +out.exclude = zone:name() +out.template = "cbi/firewall_zonelist" + +inp = s2:option(Value, "in", + translate("Allow forward from source zones:")) + +inp.nocreate = true +inp.widget = "checkbox" +inp.exclude = zone:name() +inp.template = "cbi/firewall_zonelist" + +function out.cfgvalue(self, section) + local v = { } + local f + for _, f in ipairs(zone:get_forwardings_by("src")) do + v[#v+1] = f:dest() + end + return table.concat(v, " ") +end + +function inp.cfgvalue(self, section) + local v = { } + local f + for _, f in ipairs(zone:get_forwardings_by("dest")) do + v[#v+1] = f:src() + end + return v +end + +function out.formvalue(self, section) + return Value.formvalue(self, section) or "-" +end + +function inp.formvalue(self, section) + return Value.formvalue(self, section) or "-" +end + +function out.write(self, section, value) + zone:del_forwardings_by("src") + + local f + for f in ut.imatch(value) do + zone:add_forwarding_to(f) + end +end + +function inp.write(self, section, value) + zone:del_forwardings_by("dest") + + local f + for f in ut.imatch(value) do + zone:add_forwarding_from(f) + end +end + +return m diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua new file mode 100644 index 0000000..694bbd8 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua @@ -0,0 +1,77 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local ds = require "luci.dispatcher" +local fw = require "luci.model.firewall" + +local m, s, o, p, i, v + +m = Map("firewall", + translate("Firewall - Zone Settings"), + translate("The firewall creates zones over your network interfaces to control network traffic flow.")) + +fw.init(m.uci) + +s = m:section(TypedSection, "defaults", translate("General Settings")) +s.anonymous = true +s.addremove = false + +s:option(Flag, "syn_flood", translate("Enable SYN-flood protection")) + +o = s:option(Flag, "drop_invalid", translate("Drop invalid packets")) +o.default = o.enabled + +p = { + s:option(ListValue, "input", translate("Input")), + s:option(ListValue, "output", translate("Output")), + s:option(ListValue, "forward", translate("Forward")) +} + +for i, v in ipairs(p) do + v:value("REJECT", translate("reject")) + v:value("DROP", translate("drop")) + v:value("ACCEPT", translate("accept")) +end + + +s = m:section(TypedSection, "zone", translate("Zones")) +s.template = "cbi/tblsection" +s.anonymous = true +s.addremove = true +s.extedit = ds.build_url("admin", "network", "firewall", "zones", "%s") + +function s.create(self) + local z = fw:new_zone() + if z then + luci.http.redirect( + ds.build_url("admin", "network", "firewall", "zones", z.sid) + ) + end +end + +function s.remove(self, section) + return fw:del_zone(section) +end + +o = s:option(DummyValue, "_info", translate("Zone ⇒ Forwardings")) +o.template = "cbi/firewall_zoneforwards" +o.cfgvalue = function(self, section) + return self.map:get(section, "name") +end + +p = { + s:option(ListValue, "input", translate("Input")), + s:option(ListValue, "output", translate("Output")), + s:option(ListValue, "forward", translate("Forward")) +} + +for i, v in ipairs(p) do + v:value("REJECT", translate("reject")) + v:value("DROP", translate("drop")) + v:value("ACCEPT", translate("accept")) +end + +s:option(Flag, "masq", translate("Masquerading")) +s:option(Flag, "mtu_fix", translate("MSS clamping")) + +return m diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/tools/firewall.lua b/feeds/luci/applications/luci-app-firewall/luasrc/tools/firewall.lua new file mode 100644 index 0000000..6d08fe1 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/tools/firewall.lua @@ -0,0 +1,279 @@ +-- Copyright 2011-2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.tools.firewall", package.seeall) + +local ut = require "luci.util" +local ip = require "luci.ip" +local nx = require "nixio" + +local translate, translatef = luci.i18n.translate, luci.i18n.translatef + +local function tr(...) + return tostring(translate(...)) +end + +function fmt_neg(x) + if type(x) == "string" then + local v, neg = x:gsub("^ *! *", "") + if neg > 0 then + return v, "%s " % tr("not") + else + return x, "" + end + end + return x, "" +end + +function fmt_mac(x) + if x and #x > 0 then + local m, n + local l = { tr("MAC"), " " } + for m in ut.imatch(x) do + m, n = fmt_neg(m) + l[#l+1] = "%s%s" %{ n, m } + l[#l+1] = ", " + end + if #l > 1 then + l[#l] = nil + if #l > 3 then + l[1] = tr("MACs") + end + return table.concat(l, "") + end + end +end + +function fmt_port(x, d) + if x and #x > 0 then + local p, n + local l = { tr("port"), " " } + for p in ut.imatch(x) do + p, n = fmt_neg(p) + local a, b = p:match("(%d+)%D+(%d+)") + if a and b then + l[1] = tr("ports") + l[#l+1] = "%s%d-%d" %{ n, a, b } + else + l[#l+1] = "%s%d" %{ n, p } + end + l[#l+1] = ", " + end + if #l > 1 then + l[#l] = nil + if #l > 3 then + l[1] = tr("ports") + end + return table.concat(l, "") + end + end + return d and "%s" % d +end + +function fmt_ip(x, d) + if x and #x > 0 then + local l = { tr("IP"), " " } + local v, a, n + for v in ut.imatch(x) do + v, n = fmt_neg(v) + a, m = v:match("(%S+)/(%d+%.%S+)") + a = a or v + a = a:match(":") and ip.IPv6(a, m) or ip.IPv4(a, m) + if a and (a:is6() and a:prefix() < 128 or a:prefix() < 32) then + l[1] = tr("IP range") + l[#l+1] = "%s%s" %{ + a:minhost():string(), + a:maxhost():string(), + n, a:string() + } + else + l[#l+1] = "%s%s" %{ + n, + a and a:string() or v + } + end + l[#l+1] = ", " + end + if #l > 1 then + l[#l] = nil + if #l > 3 then + l[1] = tr("IPs") + end + return table.concat(l, "") + end + end + return d and "%s" % d +end + +function fmt_zone(x, d) + if x == "*" then + return "%s" % tr("any zone") + elseif x and #x > 0 then + return "%s" % x + elseif d then + return "%s" % d + end +end + +function fmt_icmp_type(x) + if x and #x > 0 then + local t, v, n + local l = { tr("type"), " " } + for v in ut.imatch(x) do + v, n = fmt_neg(v) + l[#l+1] = "%s%s" %{ n, v } + l[#l+1] = ", " + end + if #l > 1 then + l[#l] = nil + if #l > 3 then + l[1] = tr("types") + end + return table.concat(l, "") + end + end +end + +function fmt_proto(x, icmp_types) + if x and #x > 0 then + local v, n + local l = { } + local t = fmt_icmp_type(icmp_types) + for v in ut.imatch(x) do + v, n = fmt_neg(v) + if v == "tcpudp" then + l[#l+1] = "TCP" + l[#l+1] = ", " + l[#l+1] = "UDP" + l[#l+1] = ", " + elseif v ~= "all" then + local p = nx.getproto(v) + if p then + -- ICMP + if (p.proto == 1 or p.proto == 58) and t then + l[#l+1] = translatef( + "%s%s with %s", + n, p.aliases[1] or p.name, t + ) + else + l[#l+1] = "%s%s" %{ + n, + p.aliases[1] or p.name + } + end + l[#l+1] = ", " + end + end + end + if #l > 0 then + l[#l] = nil + return table.concat(l, "") + end + end +end + +function fmt_limit(limit, burst) + burst = tonumber(burst) + if limit and #limit > 0 then + local l, u = limit:match("(%d+)/(%w+)") + l = tonumber(l or limit) + u = u or "second" + if l then + if u:match("^s") then + u = tr("second") + elseif u:match("^m") then + u = tr("minute") + elseif u:match("^h") then + u = tr("hour") + elseif u:match("^d") then + u = tr("day") + end + if burst and burst > 0 then + return translatef("%d pkts. per %s, \ + burst %d pkts.", l, u, burst) + else + return translatef("%d pkts. per %s", l, u) + end + end + end +end + +function fmt_target(x, dest) + if dest and #dest > 0 then + if x == "ACCEPT" then + return tr("Accept forward") + elseif x == "REJECT" then + return tr("Refuse forward") + elseif x == "NOTRACK" then + return tr("Do not track forward") + else --if x == "DROP" then + return tr("Discard forward") + end + else + if x == "ACCEPT" then + return tr("Accept input") + elseif x == "REJECT" then + return tr("Refuse input") + elseif x == "NOTRACK" then + return tr("Do not track input") + else --if x == "DROP" then + return tr("Discard input") + end + end +end + + +function opt_enabled(s, t, ...) + if t == luci.cbi.Button then + local o = s:option(t, "__enabled") + function o.render(self, section) + if self.map:get(section, "enabled") ~= "0" then + self.title = tr("Rule is enabled") + self.inputtitle = tr("Disable") + self.inputstyle = "reset" + else + self.title = tr("Rule is disabled") + self.inputtitle = tr("Enable") + self.inputstyle = "apply" + end + t.render(self, section) + end + function o.write(self, section, value) + if self.map:get(section, "enabled") ~= "0" then + self.map:set(section, "enabled", "0") + else + self.map:del(section, "enabled") + end + end + return o + else + local o = s:option(t, "enabled", ...) + o.default = "1" + return o + end +end + +function opt_name(s, t, ...) + local o = s:option(t, "name", ...) + + function o.cfgvalue(self, section) + return self.map:get(section, "name") or + self.map:get(section, "_name") or "-" + end + + function o.write(self, section, value) + if value ~= "-" then + self.map:set(section, "name", value) + self.map:del(section, "_name") + else + self:remove(section) + end + end + + function o.remove(self, section) + self.map:del(section, "name") + self.map:del(section, "_name") + end + + return o +end diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm b/feeds/luci/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm new file mode 100644 index 0000000..b3079f3 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm @@ -0,0 +1,112 @@ +<%- + local fw = require "luci.model.firewall".init() + local izl = { } + local ezl = { } + local _, z + for _, z in ipairs(fw:get_zones()) do + if z:name() ~= "wan" then + izl[#izl+1] = z + end + if z:name() ~= "lan" then + ezl[#ezl+1] = z + end + end + + local keys, vals = { }, { } + luci.sys.net.ipv4_hints(function(ip, name) + keys[#keys+1] = ip + vals[#vals+1] = '%s (%s)' %{ ip, name } + end) +-%> +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
<%:New port forward%>:
<%:Name%><%:Protocol%><%:External zone%><%:External port%><%:Internal zone%><%:Internal IP address%><%:Internal port%>
+ + + + + + + + + + + 0, "data-choices", {keys, vals}) + %>/> + + + + +
+ + +
diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm b/feeds/luci/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm new file mode 100644 index 0000000..463b2e0 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm @@ -0,0 +1,112 @@ +<% + local fw = require "luci.model.firewall".init() + local wz = fw:get_zone("wan") + local lz = fw:get_zone("lan") +%> + +
+ <% if wz and lz then %> +
+ + + + + + + + + + + + + + + + +
<%:Open ports on router%>:
<%:Name%><%:Protocol%><%:External port%>
+ + + + + + + +
+ + + + + + + + + + + + + + + + + +

<%:New forward rule%>:
<%:Name%><%:Source zone%><%:Destination zone%>
+ + + + + + + +
+ + + <% else %> + + <% end %> +
diff --git a/feeds/luci/applications/luci-app-firewall/luasrc/view/firewall/cbi_addsnat.htm b/feeds/luci/applications/luci-app-firewall/luasrc/view/firewall/cbi_addsnat.htm new file mode 100644 index 0000000..ce27511 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/luasrc/view/firewall/cbi_addsnat.htm @@ -0,0 +1,65 @@ +<% + local fw = require "luci.model.firewall".init() + local nw = require "luci.model.network".init() + local wz = fw:get_zone("wan") + local lz = fw:get_zone("lan") + + local keys, vals, a, k, v = {}, {} + for k, v in ipairs(nw:get_interfaces()) do + for k, a in ipairs(v:ipaddrs()) do + keys[#keys+1] = a:host():string() + vals[#vals+1] = '%s (%s)' %{ a:host(), v:shortname() } + end + end +%> + +
+ <% if wz and lz then %> +
+ + + + + + + + + + + + + + + + + + + + +
<%:New source NAT%>:
<%:Name%><%:Source zone%><%:Destination zone%><%:To source IP%><%:To source port%>
+ + + + + + + 0, "data-choices", { keys, vals }) + %> /> + + + + +
+ <% else %> + + <% end %> +
diff --git a/feeds/luci/applications/luci-app-firewall/po/ca/firewall.po b/feeds/luci/applications/luci-app-firewall/po/ca/firewall.po new file mode 100644 index 0000000..913fb75 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/ca/firewall.po @@ -0,0 +1,521 @@ +# luci-fw.pot +# generated from ./applications/luci-fw/luasrc/i18n/luci-fw.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2014-06-17 09:40+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s en %s" + +msgid "%s%s with %s" +msgstr "%s%s amb %s" + +msgid "%s, %s in %s" +msgstr "%s, %s en %s" + +msgid "(Unnamed Entry)" +msgstr "(Entrada sense nom)" + +msgid "(Unnamed Rule)" +msgstr "(Regla sense nom)" + +msgid "(Unnamed SNAT)" +msgstr "(SNAT sense nom)" + +msgid "%d pkts. per %s" +msgstr "%d paquets al %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "%s i limita a %s" + +msgid "Action" +msgstr "Acció" + +msgid "Add" +msgstr "Afegeix" + +msgid "Add and edit..." +msgstr "Afegeix i edita..." + +msgid "Advanced Settings" +msgstr "Ajusts avançats" + +msgid "Allow forward from source zones:" +msgstr "Permet el reenviament des dels zones d'origen:" + +msgid "Allow forward to destination zones:" +msgstr "Permet el reenviament als zones de destí:" + +msgid "Any" +msgstr "Qualsevol" + +msgid "Covered networks" +msgstr "Xarxes cobertes" + +msgid "Custom Rules" +msgstr "Regles personalitzades" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Les regles personalitzades us permet executar ordres del iptables arbitraris " +"que la infraestructura de tallafocs no cobreix d'altra manera. Aquests " +"ordres s'executen després de cada reinici de tallafocs, just després el " +"conjunt de regles per defecte s'ha carregat." + +msgid "Destination IP address" +msgstr "Adreça IP de destí" + +msgid "Destination address" +msgstr "Adreça de destí" + +msgid "Destination port" +msgstr "Port de destí" + +msgid "Destination zone" +msgstr "Zona de destí" + +msgid "Do not rewrite" +msgstr "No reescriguis" + +msgid "Drop invalid packets" +msgstr "Descarta els paquets invàlids" + +msgid "Enable" +msgstr "Habilita" + +msgid "Enable NAT Loopback" +msgstr "" + +msgid "Enable SYN-flood protection" +msgstr "Habilita protecció contra la inundació SYN" + +msgid "Enable logging on this zone" +msgstr "Habilita el registre d'aquesta zona" + +msgid "External IP address" +msgstr "Adreça IP extern" + +msgid "External port" +msgstr "Port extern" + +msgid "External zone" +msgstr "Zona extern" + +msgid "Extra arguments" +msgstr "Paràmetres extres" + +msgid "Firewall" +msgstr "Tallafocs" + +msgid "Firewall - Custom Rules" +msgstr "Tallafocs - Regles personalitzades" + +msgid "Firewall - Port Forwards" +msgstr "Tallafocs - Reenviaments de port" + +msgid "Firewall - Traffic Rules" +msgstr "Tallafocs - Regles de tràfic" + +msgid "Firewall - Zone Settings" +msgstr "Tallafocs - Ajusts de zona" + +msgid "Force connection tracking" +msgstr "Força el rastreig de connexió" + +msgid "Forward" +msgstr "Reenvia" + +msgid "Forward to" +msgstr "Reenvia a" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "Des de %s en %s" + +msgid "From %s in %s with source %s" +msgstr "Des de %s en %s amb origen %s" + +msgid "From %s in %s with source %s and %s" +msgstr "Des de %s en %s amb orígens %s i %s" + +msgid "General Settings" +msgstr "Ajusts generals" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 i IPv6" + +msgid "IPv4 only" +msgstr "Només IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "Només IPv6" + +msgid "Input" +msgstr "Entrada" + +msgid "Inter-Zone Forwarding" +msgstr "Reenviament interzonal" + +msgid "Internal IP address" +msgstr "Adreça IP interna" + +msgid "Internal port" +msgstr "Port intern" + +msgid "Internal zone" +msgstr "Zona interna" + +msgid "Limit log messages" +msgstr "Limita els missatges de registre" + +msgid "MSS clamping" +msgstr "Fixació MSS" + +msgid "Masquerading" +msgstr "Mascarada" + +msgid "Match" +msgstr "Coincideix" + +msgid "Match ICMP type" +msgstr "Coincideix amb el tipus ICMP" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" +"Coincideix amb trànsit reenviat al port o rang de ports de destí donat." + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Coincideix amb trànsit entrant dirigit al port o rang de ports de destí en " +"aquest host donat" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" +"Coincideix amb trànsit entrant originant en el host client des del port o " +"rang de ports d'origen donat." + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Nom" + +msgid "New SNAT rule" +msgstr "Nova regla SNAT" + +msgid "New forward rule" +msgstr "Nova regla de reenviament" + +msgid "New input rule" +msgstr "Nova regla d'entrada" + +msgid "New port forward" +msgstr "Nou reenviament de port" + +msgid "New source NAT" +msgstr "Nou origen NAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "Només coincideix amb trànsit entrant dirigit a la adreça IP donada." + +msgid "Only match incoming traffic from these MACs." +msgstr "Només coincideix amb trànsit entrant des d'aquests MAC." + +msgid "Only match incoming traffic from this IP or range." +msgstr "Només coincideix amb trànsit entrant des d'aquest IP o rang." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" +"Només coincideix amb trànsit originant en el host client des del port o del " +"rang de ports d'origen donat" + +msgid "Open ports on router" +msgstr "Obre els ports en el encaminador" + +msgid "Other..." +msgstr "Altre..." + +msgid "Output" +msgstr "Sortida" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "Passa paràmetres addicionals al iptables. Utilitzeu-ho amb cura!" + +msgid "Port Forwards" +msgstr "Reenviaments de port" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"El reenviament de ports permet que els ordinadors remots en el Internet " +"connectin a un ordinador o servei específic dins del LAN privat." + +msgid "Protocol" +msgstr "Protocol" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "Redirigeix trànsit entrant coincidit al port donat en el host intern" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Redirigeix trànsit entrant coincidit al host intern especificat" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "Restringeix la mascarada a les subxarxes de destí donades" + +msgid "Restrict Masquerading to given source subnets" +msgstr "Restringeix la mascarada a les subxarxes d'origen donades" + +msgid "Restrict to address family" +msgstr "Restringeix a la família d'adreces" + +msgid "Rewrite matched traffic to the given address." +msgstr "Reescriu el trànsit coincidint cap a la adreça donada." + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" +"Reescriu el trànsit coincidint cap al port d'origen donat. Pot ser deixat en " +"blanc per només reescriure l'adreça IP." + +msgid "Rewrite to source %s" +msgstr "Reescriu a l'origen %s" + +msgid "Rewrite to source %s, %s" +msgstr "Reescriu als orígens %s, %s" + +msgid "SNAT IP address" +msgstr "Adreça IP de SNAT" + +msgid "SNAT port" +msgstr "Port SNAT" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "Adreça IP d'origen" + +msgid "Source MAC address" +msgstr "Adreça MAC d'origen" + +msgid "Source NAT" +msgstr "NAT d'origen" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"El NAT d'origen és un forma específic de mascarada que permet control de gra " +"fi sobre l'IP d'origen utilitzat pel trànsit sortint, per exemple per " +"associar múltiples adreces WAN a subxarxes internes." + +msgid "Source address" +msgstr "Adreça d'origen" + +msgid "Source port" +msgstr "Port d'origen" + +msgid "Source zone" +msgstr "Zona d'origen" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"El tallafocs crea zones a les teves interfícies de xarxa per controlar el " +"flux de tràfic de xarxa." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"Les opcions a sota controlen les polítiques de reenviament entre aquesta " +"zona (%s) i altres zones. Zones de destí cobreixen trànsit reenviat " +"originant des de %q. Zones d'origen coincideixen " +"amb trànsit reenviat des de altres zones apuntat a %q. La " +"regla de reenviament es unidirectional, per exemple un reenviament " +"de lan a wan no implica permís per reenviar de wan a lan també." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"Aquesta pàgina us permet canviar propietats avançats de l'entrada de " +"reenviament de port. En la majoria dels casos no hi ha necessitat de " +"modificar aquests ajusts." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"Aquesta pàgina us permet canviar propietats avançats de l'entrada de regla " +"de trànsit, com als hosts d'origen i de destí coincidits." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"Aquesta secció defineix propietats comuns de %q. Les opcions entrada i sortida estableixen les polítiques per defecte per a trànsit " +"entrant i sortint aquesta zona mentre l'opció reenvia descriu la " +"política de trànsit reenviat entre xarxes distintes dins de la zona. " +"Xarxes cobertes especifica quines xarxes disponibles són membres " +"d'aquesta zona." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "A %s a %s en aquest dispositiu" + +msgid "To %s in %s" +msgstr "A %s en %s" + +msgid "To %s on this device" +msgstr "A %s en aquest dispositiu" + +msgid "To %s, %s in %s" +msgstr "A %s, %s en %s" + +msgid "To source IP" +msgstr "A l'IP d'origen" + +msgid "To source port" +msgstr "Al port d'origen" + +msgid "Traffic Rules" +msgstr "Regles de trànsit" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"Les regles de trànsit defineixen polítiques per als paquets viatjant entre " +"zones distintes, per exemple per a rebutjar trànsit entre certs hosts o " +"obrir ports WAN en el encaminador." + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "Via %s" + +msgid "Via %s at %s" +msgstr "Via %s a %s" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"Podeu especificar múltiples per seleccionar \"-- personalitzat --\" i " +"llavors introduir protocols separats per espai." + +msgid "Zone %q" +msgstr "Zona %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Zona ⇒ Reenviaments" + +msgid "Zones" +msgstr "Zones" + +msgid "accept" +msgstr "accepta" + +msgid "any" +msgstr "qualsevol" + +msgid "any host" +msgstr "qualsevol host" + +msgid "any router IP" +msgstr "qualsevol IP d'encaminador" + +msgid "any zone" +msgstr "qualsevol zona" + +msgid "don't track" +msgstr "no rastregis" + +msgid "drop" +msgstr "descarta" + +msgid "reject" +msgstr "rebutja" + +msgid "traffic" +msgstr "trànsit" diff --git a/feeds/luci/applications/luci-app-firewall/po/cs/firewall.po b/feeds/luci/applications/luci-app-firewall/po/cs/firewall.po new file mode 100644 index 0000000..1ab1360 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/cs/firewall.po @@ -0,0 +1,516 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-21 11:22+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s v %s" + +msgid "%s%s with %s" +msgstr "%s%s s %s" + +msgid "%s, %s in %s" +msgstr "%s, %s v %s" + +msgid "(Unnamed Entry)" +msgstr "(Nepojmenovaný vstup)" + +msgid "(Unnamed Rule)" +msgstr "(Nepojmenované pravidlo)" + +msgid "(Unnamed SNAT)" +msgstr "(Nepojmenovaný SNAT)" + +msgid "%d pkts. per %s" +msgstr "%d paketů za %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "%d paketů za %s, burst %d paketů." + +msgid "%s and limit to %s" +msgstr "%s a omezit na %s" + +msgid "Action" +msgstr "Akce" + +msgid "Add" +msgstr "Přidat" + +msgid "Add and edit..." +msgstr "Přidat a upravit" + +msgid "Advanced Settings" +msgstr "Pokročilé nastavení" + +msgid "Allow forward from source zones:" +msgstr "Povolit přesměrování ze zdrojových oblastí:" + +msgid "Allow forward to destination zones:" +msgstr "Povolit přesměrování do zdrojových oblastí:" + +msgid "Any" +msgstr "Libovolné" + +msgid "Covered networks" +msgstr "Pokryté sítě" + +msgid "Custom Rules" +msgstr "Vlastní pravidla" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Vlastní pravidla vám umožňují spustit libovolné iptables příkazy, které " +"nejsou jinak pokryté frameworkem firewallu. Příkazy jsou spuštěny po každém " +"restartu firewallu, právě po načtení výchozí sady pravidel." + +msgid "Destination IP address" +msgstr "Cílová IP adresa" + +msgid "Destination address" +msgstr "Cílová adresa" + +msgid "Destination port" +msgstr "Cílový port" + +msgid "Destination zone" +msgstr "Cílová oblast" + +msgid "Do not rewrite" +msgstr "Nepřepisovat" + +msgid "Drop invalid packets" +msgstr "Zahazovat neplatné pakety" + +msgid "Enable" +msgstr "Povolit" + +msgid "Enable NAT Loopback" +msgstr "Povolit NAT Loopback" + +msgid "Enable SYN-flood protection" +msgstr "Povolit ochranu proti SYN-flood" + +msgid "Enable logging on this zone" +msgstr "Povolit logování v této oblasti" + +msgid "External IP address" +msgstr "Vnější IP adresa" + +msgid "External port" +msgstr "Vnější port" + +msgid "External zone" +msgstr "Vnější zóna" + +msgid "Extra arguments" +msgstr "Dodatečné argumenty" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall - Custom Rules" +msgstr "Firewall - Vlastní pravidla" + +msgid "Firewall - Port Forwards" +msgstr "Firewall - Přesměrování portů" + +msgid "Firewall - Traffic Rules" +msgstr "Firewall - Pravidla síťového provozu" + +msgid "Firewall - Zone Settings" +msgstr "Firewall - Nastavení zón" + +msgid "Force connection tracking" +msgstr "Vynutit sledování připojení" + +msgid "Forward" +msgstr "Přesměrování" + +msgid "Forward to" +msgstr "Přesměrovat na" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "Z %s v %s" + +msgid "From %s in %s with source %s" +msgstr "Z %s v %s se zdrojovou %s" + +msgid "From %s in %s with source %s and %s" +msgstr "Z %s v %s se zdrojovou %s a %s" + +msgid "General Settings" +msgstr "Obecné nastavení" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 a IPv6" + +msgid "IPv4 only" +msgstr "pouze IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "pouze IPv6" + +msgid "Input" +msgstr "Vstup" + +# nebo mimo zóny? +msgid "Inter-Zone Forwarding" +msgstr "Přesměrování mezi zónami" + +msgid "Internal IP address" +msgstr "Vnitřní IP adresa" + +msgid "Internal port" +msgstr "Vnitřní port" + +msgid "Internal zone" +msgstr "Vnitřní zóna" + +msgid "Limit log messages" +msgstr "Omezit logovací zprávy" + +msgid "MSS clamping" +msgstr "MSS clamping" + +msgid "Masquerading" +msgstr "Maškárádování" + +msgid "Match" +msgstr "Shoda" + +msgid "Match ICMP type" +msgstr "Odpovídá ICMP typu" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "Vybrat provoz, přesměrovaný na zadaný port nebo rozsah portů" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Vybrat příchozí provoz, směrovaný na zadaný cílový port nebo rozsah portů " +"tohoto hostitele" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" +"Vybrat příchozí provoz, pocházející ze zadaného portu nebo rozsahu portů " +"klienta." + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Název" + +msgid "New SNAT rule" +msgstr "Nové pravidlo SNAT" + +msgid "New forward rule" +msgstr "Nové přesměrovací pravidlo" + +msgid "New input rule" +msgstr "Nové vstupní pravidlo" + +msgid "New port forward" +msgstr "Nové přesměrování portu" + +msgid "New source NAT" +msgstr "Nový zdrojový NAT (SNAT)" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "Vybrat pouze příchozí provoz, směrovaný na danou IP adresu." + +msgid "Only match incoming traffic from these MACs." +msgstr "Vybrat pouze příchozí provoz z těchto MAC adres." + +msgid "Only match incoming traffic from this IP or range." +msgstr "Vybrat pouze příchozí provoz z této IP nebo rozsahu IP adres." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" +"Vybrat pouze příchozí provoz, pocházející ze zadaného portu nebo rozsahu " +"portů klienta." + +msgid "Open ports on router" +msgstr "Otevřené porty na routeru" + +msgid "Other..." +msgstr "Ostatní ..." + +msgid "Output" +msgstr "Výstup" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "Předává další argumenty iptables. Používat opatrně!" + +msgid "Port Forwards" +msgstr "Přesměrování portů" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"Přesměrování portů (port forwarding) umožňuje vzdáleným počítačům z " +"Internetu připojení k vybraným počítačům nebo službám uvnitř privátní sítě " +"LAN." + +msgid "Protocol" +msgstr "Protokol" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" +"Přesměrovat vybraný příchozí provoz na uvedený port vnitřního hostitele." + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Přesměrovat vybraný příchozí provoz na uvedeného vnitřního hostitele." + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "Omezit maškarádování na uvedené cílové podsítě" + +msgid "Restrict Masquerading to given source subnets" +msgstr "Omezit maškarádování na uvedené zdrojové podsítě" + +msgid "Restrict to address family" +msgstr "Omezit na rodinu adres" + +msgid "Rewrite matched traffic to the given address." +msgstr "Přepsat shodný provoz na uvedenou adresu." + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" +"Přepsat shodný provoz na uvedený zdrojový port. Může zůstat prázdné, pak " +"bude přepsána pouze IP adresa." + +msgid "Rewrite to source %s" +msgstr "Přepsat na zdrojovou %s" + +msgid "Rewrite to source %s, %s" +msgstr "Přepsat na zdrojovou %s, %s" + +msgid "SNAT IP address" +msgstr "IP adresa SNATu" + +msgid "SNAT port" +msgstr "Port SNATu" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "Zdrojová IP adresa" + +msgid "Source MAC address" +msgstr "Zdrojová MAC adresa" + +msgid "Source NAT" +msgstr "Zdrojový NAT" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"Zdrojový NAT je specifická forma maškarádování, která umožňuje jemnozrnnou " +"kontrolu nad zdrojovými IP, použitými pro odchozí provoz. Využívá se " +"například pro mapování množství WAN adres do vnitřních podsítí." + +msgid "Source address" +msgstr "Zdrojová adresa" + +msgid "Source port" +msgstr "Zdrojový port" + +msgid "Source zone" +msgstr "Zdrojová zóna" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"Firewall vytváří zóny přes vaše síťová rozhraní za účelem řízení síťového " +"provozu." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"Níže uvedené možnosti řídí přesměrovací politiky mezi touto zónou (%s) a " +"ostatními zónami. Cílové zóny pokrývají přesměrovávaný provoz, " +"pocházející z %q. Zdrojové zóny porovnávají " +"přesměrovávaný provoz z ostatních zón, zaměřený na %q. " +"Přesměrovávací pravidlo je jednosměrné, například přesměrování z " +"lan do wan nepovoluje přesměrování z wan do lan (a naopak)." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"Tato stránka vám umožňuje změnit pokročilé vlastností přesměrování portů. Ve " +"většině případů není potřeba upravovat tato nastavení." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"Tato stránka vám umožňuje změnit pokročilé vlastnosti pravidla síťového " +"provozu, například zdrojové a cílové hostitele." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"Tato sekce definuje běžné možnosti %q. Vstupní a výstupní " +"možnosti nastavují výchozí politiky pro provoz, vstupující do této zóny a " +"vystupující z ní, zatímco přesměrovací možnosti popisují politiku " +"pro přesměrování provozu mezi rozdílnými sítěmi uvnitř jedné zóny. " +"Pokryté sítě určuje, které z dostupných sítí jsou členy této zóny." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "Na %s v %s na tomto zařízení" + +msgid "To %s in %s" +msgstr "Na %s v %s" + +msgid "To %s on this device" +msgstr "Na %s na tomto zařízení" + +msgid "To %s, %s in %s" +msgstr "Na %s, %s v %s" + +msgid "To source IP" +msgstr "Na zdrojovou IP" + +msgid "To source port" +msgstr "Na zdrojový port" + +msgid "Traffic Rules" +msgstr "Pravidla síťového provozu" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"Pravidla síťového provozu definují politiky pro cestování paketů mezi " +"různými zónami, například pro odmítnutí provozu mezi jistými hostiteli nebo " +"pro otevření WAN portů na routeru." + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "Prostřednictvím %s" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"Lze určit více protokolů. Vyberte \"-- vlastní --\" a vkládejte protokoly " +"oddělené mezerou." + +msgid "Zone %q" +msgstr "Zóna %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Zóna ⇒ Přesměrování" + +msgid "Zones" +msgstr "Zóny" + +msgid "accept" +msgstr "přijmout" + +msgid "any" +msgstr "libovolný" + +msgid "any host" +msgstr "libovolný hostitel" + +msgid "any router IP" +msgstr "libovolná IP routeru" + +msgid "any zone" +msgstr "libovolná zóna" + +msgid "don't track" +msgstr "nesledovat" + +msgid "drop" +msgstr "zahodit" + +msgid "reject" +msgstr "odmítnout" + +msgid "traffic" +msgstr "provoz" diff --git a/feeds/luci/applications/luci-app-firewall/po/de/firewall.po b/feeds/luci/applications/luci-app-firewall/po/de/firewall.po new file mode 100644 index 0000000..448f951 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/de/firewall.po @@ -0,0 +1,522 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2014-03-25 02:04+0200\n" +"Last-Translator: laryllian \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s in %s" + +msgid "%s%s with %s" +msgstr "%s%s mit %s" + +msgid "%s, %s in %s" +msgstr "%s, %s in %s" + +msgid "(Unnamed Entry)" +msgstr "(Unbenannter Eintrag)" + +msgid "(Unnamed Rule)" +msgstr "(Unbenannte Regel)" + +msgid "(Unnamed SNAT)" +msgstr "(Unbennanter SNAT-Eintrag)" + +msgid "%d pkts. per %s" +msgstr "%d Pkte. pro %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "%d Pkte. pro %s, Häufung %d Pkte." + +msgid "%s and limit to %s" +msgstr "%s und limitieren auf %s" + +msgid "Action" +msgstr "Aktion" + +msgid "Add" +msgstr "Hinzufügen" + +msgid "Add and edit..." +msgstr "Hinzufügen und bearbeiten..." + +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +msgid "Allow forward from source zones:" +msgstr "Erlaube Weiterleitung von Quellzone:" + +msgid "Allow forward to destination zones:" +msgstr "Erlaube Weiterleitung zu Zielzone:" + +msgid "Any" +msgstr "beliebig" + +msgid "Covered networks" +msgstr "Abgedeckte Netzwerke" + +msgid "Custom Rules" +msgstr "Benutzerdefinierte Regeln" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Benutzerdefinierte Regeln ermöglichen das Ausführen belieber iptables-" +"Befehle welche durch das Firewall-Framework nicht unterstützt werden. Die " +"Befehle werden mit jedem Firewall-Neustart abgearbeitet, direkt nach dem " +"Laden der Basisregeln." + +msgid "Destination IP address" +msgstr "Ziel IP-Adresse" + +msgid "Destination address" +msgstr "Zieladresse" + +msgid "Destination port" +msgstr "Zielport" + +msgid "Destination zone" +msgstr "Ziel-Zone" + +msgid "Do not rewrite" +msgstr "Nicht umschreiben" + +msgid "Drop invalid packets" +msgstr "Ungültige Pakete verwerfen" + +msgid "Enable" +msgstr "Aktivieren" + +msgid "Enable NAT Loopback" +msgstr "NAT-Loopback aktivieren" + +msgid "Enable SYN-flood protection" +msgstr "Schutz vor SYN-flood-Attacken" + +msgid "Enable logging on this zone" +msgstr "Protokollierung innerhalb der Zone aktivieren" + +msgid "External IP address" +msgstr "Externe IP-Adresse" + +msgid "External port" +msgstr "Externer Port" + +msgid "External zone" +msgstr "Externe Zone" + +msgid "Extra arguments" +msgstr "Zusätzliche Argumente" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall - Custom Rules" +msgstr "Firewall - Benutzerdefinierte Regeln" + +msgid "Firewall - Port Forwards" +msgstr "Firewall - Portweiterleitungen" + +msgid "Firewall - Traffic Rules" +msgstr "Firewall - Verkehrsregeln" + +msgid "Firewall - Zone Settings" +msgstr "Firewall - Zoneneinstellungen" + +msgid "Force connection tracking" +msgstr "Connectiontracking erzwingen" + +msgid "Forward" +msgstr "Weitergeleitet" + +msgid "Forward to" +msgstr "Weiterleiten an" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "Von %s in %s" + +msgid "From %s in %s with source %s" +msgstr "Von %s in %s mit Quell-%s" + +msgid "From %s in %s with source %s and %s" +msgstr "Von %s in %s mit Quell-%s und %s" + +msgid "General Settings" +msgstr "Allgemein" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 und IPv6" + +msgid "IPv4 only" +msgstr "nur IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "nur IPv6" + +msgid "Input" +msgstr "Eingang" + +msgid "Inter-Zone Forwarding" +msgstr "Weiterleitungen zwischen Zonen" + +msgid "Internal IP address" +msgstr "Interne IP-Adresse" + +msgid "Internal port" +msgstr "Interner Port" + +msgid "Internal zone" +msgstr "Interne Zone" + +msgid "Limit log messages" +msgstr "Protokollnachrichten limitieren" + +msgid "MSS clamping" +msgstr "MSS Korrektur" + +msgid "Masquerading" +msgstr "NAT aktivieren" + +msgid "Match" +msgstr "Filter" + +msgid "Match ICMP type" +msgstr "Nach ICMP-Typ filtern" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "Selektiert weitergeleiteten Verkehr nach den angegebenen Ziel-Ports." + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Eingehende Verbindungen filtern welche an den angegebenen Port oder " +"Portbereich auf dem lokalen Gerät gerichtet sind" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "Selektiert eingehenden Verkehr nach den angegebenen Quell-Ports." + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Name" + +msgid "New SNAT rule" +msgstr "Neue SNAT-Regel" + +msgid "New forward rule" +msgstr "Neuer Weiterleitungsregel" + +msgid "New input rule" +msgstr "Neue Eingangsregel" + +msgid "New port forward" +msgstr "Neue Portweiterleitung" + +msgid "New source NAT" +msgstr "Neues SNAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "Selektiere nur Verkehr der an die angegebene IP-Adresse gerichtet ist." + +msgid "Only match incoming traffic from these MACs." +msgstr "Selektiere nur Verkehr von den angegebenen MAC-Adressen." + +msgid "Only match incoming traffic from this IP or range." +msgstr "Selektiere nur Verkehr vom angebenem Quell-IP-Adressbereich." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "Selektiere nur Verkehr von den angegebenen Quell-Ports auf dem Client." + +msgid "Open ports on router" +msgstr "Ports auf dem Router öffnen" + +msgid "Other..." +msgstr "Anderes..." + +msgid "Output" +msgstr "Ausgang" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" +"Gibt zusätzliche Kommandozeilenargumente an iptables weiter. Mit Vorsicht " +"benutzen!" + +msgid "Port Forwards" +msgstr "Portweiterleitungen" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"Portweiterleitungen ermöglichen es entfernten Rechnern im Internet auf " +"bestimmte Computer oder Dienste im lokalen LAN zuzugreifen." + +msgid "Protocol" +msgstr "Protokoll" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" +"Gefilterte Verbindungen an den angegeben Port auf dem internen Host " +"weiterleiten" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Gefilterte Verbindungen an den angegeben internen Host weiterleiten" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "NAT auf die angegebenen Ziel-Subnetze beschränken" + +msgid "Restrict Masquerading to given source subnets" +msgstr "NAT auf die angegebenen Quell-Subnetze beschränken" + +msgid "Restrict to address family" +msgstr "Beschränke auf Adressfamilie" + +msgid "Rewrite matched traffic to the given address." +msgstr "Schreibe selektierten Verkehr auf die angegebene Quell-IP-Adresse um." + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" +"Schreibe selektierten Verkehr auf den angegebenen Qull-Port um. Kann leer " +"gelassen werden um nur die IP-Adresse umzuschreiben." + +msgid "Rewrite to source %s" +msgstr "Schreibe um auf Quell-%s" + +msgid "Rewrite to source %s, %s" +msgstr "Schreibe um auf Quell-%s, %s" + +msgid "SNAT IP address" +msgstr "SNAT-IP-Adresse" + +msgid "SNAT port" +msgstr "SNAT-Port" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "Quell-IP-Adresse" + +msgid "Source MAC address" +msgstr "Quell-MAC-Adresse" + +msgid "Source NAT" +msgstr "Source NAT" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"Source NAT ist eine spezifische From von NAT, welche volle Kontrolle über " +"die verwendete Quell-IP-Adresse für ausgehenden Verkehr zulässt, zum " +"Beispiel um mehrere WAN-IP-Adressen auf interne Subnetze abzubilden." + +msgid "Source address" +msgstr "Quelladresse" + +msgid "Source port" +msgstr "Quellport" + +msgid "Source zone" +msgstr "Quell-Zone" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"Die Firewall erstellt Netzwerkzonen über bestimmte Netzwerkschnittstellen um " +"den Netzverkehr zu trennen." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"Die untenstehenen Optionen regeln die Verfahreinsweisen für Verkehr zwischen " +"dieser Zone (%s) und anderen Zonen. Ziel-Zonen decken " +"weitergeleiteten Verkehr von %q ab. Quell-Zonen " +"treffen auf weitergeleiteten Verkehr aus anderen Zonen zu, welcher " +"an %q gerichtet ist. Die Weiterleitung gilt nur in eine " +"Richtung, d.h. eine erlaubte Weiterleitung von LAN nach WAN impliziert " +"nicht zusätzlich die Erlaubnis, auch von WAN nach LAN " +"weiterzuleiten." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"Diese Seite bietet Zugriff auf die erweiterten Eigenschaften der " +"Portweiterleitung. In den meisten Fällen ist es unnötig die Eigenschaften zu " +"ändern." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"Diese Seite bietet Zugriff auf die erweiterten Eigenschaften der " +"Verkehrsregel, zum Beispiel die Selektion nach Quell- und Zieladressen." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"Diese Sektion definiert allgemeine Eigenschaften der %q Zone. Die " +"Eingang und Ausgang Optionen regeln die Verfahrensweise " +"für Verkehr der in diese Zone eintritt oder diese verlässt. " +"Weitergeleitet trifft auf Verkehr zwischen verschiedenen " +"Schnittstellen innerhalb dieser Zone zu. Abgedeckte Netzwerke " +"definieren die Zugehörigkeit von Schnittstellen zu dieser Zone." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "Zu %s an %s auf diesem Gerät" + +msgid "To %s in %s" +msgstr "Zu %s in %s" + +msgid "To %s on this device" +msgstr "Zu %s auf diesem Gerät" + +msgid "To %s, %s in %s" +msgstr "Zu %s, %s in %s" + +msgid "To source IP" +msgstr "Zu Quell-IP" + +msgid "To source port" +msgstr "Zu Quell-Port" + +msgid "Traffic Rules" +msgstr "Verkehrsregeln" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"Verkehrsregeln bestimmen den Fluss der Pakete zwischen verschiedenen Zonen, " +"zum Beispiel um Verkehr zwischen bestimmten Rechnern zu unterbinden oder um " +"WAN-Ports auf dem Router zu öffnen." + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "Über %s" + +msgid "Via %s at %s" +msgstr "Über %s an %s" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"Durch die Auswahl von \"-- benutzerdefiniert --\" könnene mehrere Werte " +"durch Leerzeichen getrennt angegeben werden." + +msgid "Zone %q" +msgstr "Zone %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Zone ⇒ Weiterleitungen" + +msgid "Zones" +msgstr "Zonen" + +# Die richtige Übersetzung von ACCEPT im Firewallkontext ist nicht "Annehmen" sondern "Zulassen". Man kann ja keinen +# ausgehenden Verkehr annehmen. +msgid "accept" +msgstr "zulassen" + +msgid "any" +msgstr "beliebig" + +msgid "any host" +msgstr "beliebiger Rechner" + +msgid "any router IP" +msgstr "beliebige Router-IP" + +msgid "any zone" +msgstr "beliebige Zone" + +msgid "don't track" +msgstr "nicht verfolgen" + +msgid "drop" +msgstr "verwerfen" + +msgid "reject" +msgstr "zurückweisen" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/el/firewall.po b/feeds/luci/applications/luci-app-firewall/po/el/firewall.po new file mode 100644 index 0000000..2229bf0 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/el/firewall.po @@ -0,0 +1,486 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2012-03-31 15:40+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "%s%s με %s" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "%d πκτ. ανά %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "Ενέργεια" + +msgid "Add" +msgstr "Προσθήκη" + +msgid "Add and edit..." +msgstr "Προσθήκη και επεξεργασία..." + +msgid "Advanced Settings" +msgstr "Ρυθμίσεις για προχωρημένους" + +msgid "Allow forward from source zones:" +msgstr "" + +msgid "Allow forward to destination zones:" +msgstr "" + +msgid "Any" +msgstr "Οποιοδήποτε" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "Προσαρμοσμένοι Κανόνες" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" + +msgid "Destination IP address" +msgstr "Διεύθυνση IP προορισμού" + +msgid "Destination address" +msgstr "Διεύθυνση προορισμού" + +msgid "Destination port" +msgstr "Θύρα προορισμού" + +#, fuzzy +msgid "Destination zone" +msgstr "Ζώνη προορισμού" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "Αγνόηση μη-έγκυρων πακετών" + +msgid "Enable" +msgstr "Ενεργοποίηση" + +msgid "Enable NAT Loopback" +msgstr "" + +#, fuzzy +msgid "Enable SYN-flood protection" +msgstr "Προστασία SYN-flood" + +msgid "Enable logging on this zone" +msgstr "" + +msgid "External IP address" +msgstr "Εξωτερική διεύθυνση IP" + +msgid "External port" +msgstr "Εξωτερική θύρα" + +msgid "External zone" +msgstr "" + +msgid "Extra arguments" +msgstr "Επιπλέον παράμετροι" + +msgid "Firewall" +msgstr "Τείχος προστασίας" + +msgid "Firewall - Custom Rules" +msgstr "Τείχος προστασίας - Προσαρμοσμένοι Κανόνες" + +msgid "Firewall - Port Forwards" +msgstr "Τείχος προστασίας - Προώθηση Θυρών" + +msgid "Firewall - Traffic Rules" +msgstr "Τείχος προστασίας - Κανόνες Κίνησεις" + +msgid "Firewall - Zone Settings" +msgstr "Τείχος προστασίας - Ρυθμίσεις Ζώνης" + +msgid "Force connection tracking" +msgstr "Επιβολή παρακολούθησης σύνδεσης" + +msgid "Forward" +msgstr "Προώθηση" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "Απο %s στο %s" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "Γενικές Ρυθμίσεις" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 και IPv6" + +msgid "IPv4 only" +msgstr "Μόνο IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "Μόνο IPv6" + +msgid "Input" +msgstr "Είσοδος" + +msgid "Inter-Zone Forwarding" +msgstr "" + +#, fuzzy +msgid "Internal IP address" +msgstr "Εσωτερική διεύθυνση" + +#, fuzzy +msgid "Internal port" +msgstr "Εξωτερική θύρα" + +msgid "Internal zone" +msgstr "Εσωτερική ζώνη" + +msgid "Limit log messages" +msgstr "Περιορισμός καταγραφών συστήματος" + +#, fuzzy +msgid "MSS clamping" +msgstr "Περιορισμός MSS" + +msgid "Masquerading" +msgstr "" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Όνομα" + +msgid "New SNAT rule" +msgstr "" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "" + +msgid "New port forward" +msgstr "" + +msgid "New source NAT" +msgstr "" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "Άλλο..." + +msgid "Output" +msgstr "Έξοδος" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "Προώθηση Θυρών" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" + +msgid "Protocol" +msgstr "Πρωτόκολλο" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "" + +#, fuzzy +msgid "Source IP address" +msgstr "Διεύθυνση MAC πηγής" + +msgid "Source MAC address" +msgstr "" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +#, fuzzy +msgid "Source address" +msgstr "Διεύθυνση MAC πηγής" + +msgid "Source port" +msgstr "Θύρα πηγής" + +#, fuzzy +msgid "Source zone" +msgstr "Θύρα πηγής" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"Το τείχος προστασίας δημιουργεί ζώνες πάνω στις διεπαφές δικτύου για να " +"ελέγχει την δικτυακή κίνηση." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "Ζώνες" + +msgid "accept" +msgstr "αποδοχή" + +msgid "any" +msgstr "" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "αγνόηση" + +msgid "reject" +msgstr "απόρριψη" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/en/firewall.po b/feeds/luci/applications/luci-app-firewall/po/en/firewall.po new file mode 100644 index 0000000..9dc277d --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/en/firewall.po @@ -0,0 +1,513 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "Action" + +msgid "Add" +msgstr "" + +msgid "Add and edit..." +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow forward from source zones:" +msgstr "" + +msgid "Allow forward to destination zones:" +msgstr "" + +msgid "Any" +msgstr "" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" + +msgid "Destination IP address" +msgstr "" + +msgid "Destination address" +msgstr "Destination address" + +msgid "Destination port" +msgstr "Destination port" + +msgid "Destination zone" +msgstr "Destination zone" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "Drop invalid packets" + +msgid "Enable" +msgstr "" + +msgid "Enable NAT Loopback" +msgstr "" + +msgid "Enable SYN-flood protection" +msgstr "Enable SYN-flood protection" + +msgid "Enable logging on this zone" +msgstr "" + +msgid "External IP address" +msgstr "" + +msgid "External port" +msgstr "External port" + +msgid "External zone" +msgstr "" + +msgid "Extra arguments" +msgstr "" + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/zones.lua # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall - Custom Rules" +msgstr "" + +msgid "Firewall - Port Forwards" +msgstr "" + +msgid "Firewall - Traffic Rules" +msgstr "" + +msgid "Firewall - Zone Settings" +msgstr "" + +msgid "Force connection tracking" +msgstr "" + +msgid "Forward" +msgstr "Forward" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Input" +msgstr "Input" + +msgid "Inter-Zone Forwarding" +msgstr "" + +msgid "Internal IP address" +msgstr "Internal IP address" + +msgid "Internal port" +msgstr "Internal port" + +msgid "Internal zone" +msgstr "" + +msgid "Limit log messages" +msgstr "" + +msgid "MSS clamping" +msgstr "MSS clamping" + +msgid "Masquerading" +msgstr "Masquerading" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Name" + +msgid "New SNAT rule" +msgstr "" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "" + +msgid "New port forward" +msgstr "" + +msgid "New source NAT" +msgstr "" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "" + +msgid "Output" +msgstr "Output" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" + +msgid "Protocol" +msgstr "Protocol" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" +"Redirect matched incoming traffic to the given port on the internal host" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Redirect matched incoming traffic to the specified internal host" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "" + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# +# msgid "Traffic Redirection" +# msgstr "" +# +# msgid "" +# "Traffic redirection allows you to change the destination address of " +# "forwarded packets." +# msgstr "" +# +# msgid "Overview" +# msgstr "" +# +# msgid "Name" +# msgstr "" +# +# msgid "Source zone" +# msgstr "" +# +# msgid "Source MAC-address" +# msgstr "" +# +# msgid "Source port" +# msgstr "" +# +# msgid "Protocol" +# msgstr "" +# +msgid "Source IP address" +msgstr "Source IP address" + +msgid "Source MAC address" +msgstr "" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +msgid "Source address" +msgstr "Source address" + +msgid "Source port" +msgstr "Source port" + +msgid "Source zone" +msgstr "Source zone" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "Zones" + +msgid "accept" +msgstr "accept" + +msgid "any" +msgstr "any" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "drop" + +msgid "reject" +msgstr "reject" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/es/firewall.po b/feeds/luci/applications/luci-app-firewall/po/es/firewall.po new file mode 100644 index 0000000..670b4db --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/es/firewall.po @@ -0,0 +1,519 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2014-06-15 09:00+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s en %s" + +msgid "%s%s with %s" +msgstr "%s%s con %s" + +msgid "%s, %s in %s" +msgstr "%s, %s en %s" + +msgid "(Unnamed Entry)" +msgstr "(Entrada sin nombre)" + +msgid "(Unnamed Rule)" +msgstr "(Reglas sin nombre)" + +msgid "(Unnamed SNAT)" +msgstr "(SNAT sin nombre)" + +msgid "%d pkts. per %s" +msgstr "%d paquetes por %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" +"%d paquetes por %s, máximo %d paquetes." + +msgid "%s and limit to %s" +msgstr "%s y límite a %s" + +msgid "Action" +msgstr "Acción" + +msgid "Add" +msgstr "Añadir" + +msgid "Add and edit..." +msgstr "Añadir y editar..." + +msgid "Advanced Settings" +msgstr "Configuración avanzada" + +msgid "Allow forward from source zones:" +msgstr "Permitir traspaso desde zonas de origen:" + +msgid "Allow forward to destination zones:" +msgstr "Permitir traspaso a zonas de destino:" + +msgid "Any" +msgstr "Cualquiera" + +msgid "Covered networks" +msgstr "Redes cubiertas" + +msgid "Custom Rules" +msgstr "Reglas propias" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Las reglas propias le permiten ejecutar comandos de iptables que no están " +"disponibles en el marco del cortafuegos. Los comandos se ejecutarán tras " +"cualquier rearranque del cortafuegos, justo tras haber cargado el conjunto " +"de reglas por defecto." + +msgid "Destination IP address" +msgstr "Dirección IP destino" + +msgid "Destination address" +msgstr "Dirección de destino" + +msgid "Destination port" +msgstr "Puerto de destino" + +msgid "Destination zone" +msgstr "Zona de destino" + +msgid "Do not rewrite" +msgstr "No reescribir" + +msgid "Drop invalid packets" +msgstr "Descartar paquetes no válidos" + +msgid "Enable" +msgstr "Activar" + +msgid "Enable NAT Loopback" +msgstr "Activar bucle NAT" + +msgid "Enable SYN-flood protection" +msgstr "Activar protección a inundación-SYN" + +msgid "Enable logging on this zone" +msgstr "Activar registro en esta zona" + +msgid "External IP address" +msgstr "Dirección IP externa" + +msgid "External port" +msgstr "Puerto externo" + +msgid "External zone" +msgstr "Zona externa" + +msgid "Extra arguments" +msgstr "Parámetros extra" + +msgid "Firewall" +msgstr "Cortafuegos" + +msgid "Firewall - Custom Rules" +msgstr "Cortafuegos - Reglas propias" + +msgid "Firewall - Port Forwards" +msgstr "Cortafuegos - traspasos de puerto" + +msgid "Firewall - Traffic Rules" +msgstr "Cortafuegos - Reglas de tráfico" + +msgid "Firewall - Zone Settings" +msgstr "Cortafuegos - Configuración de la zona" + +msgid "Force connection tracking" +msgstr "Forzar seguimiento de conexión" + +msgid "Forward" +msgstr "Traspasar" + +msgid "Forward to" +msgstr "Traspasar a" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "Desde %s en %s" + +msgid "From %s in %s with source %s" +msgstr "Desde %s en %s con origen %s" + +msgid "From %s in %s with source %s and %s" +msgstr "Desde %s en %s con origen %s y %s" + +msgid "General Settings" +msgstr "Configuración general" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 only" +msgstr "Sólo IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "Sñolo IPv6" + +msgid "Input" +msgstr "Entrada" + +msgid "Inter-Zone Forwarding" +msgstr "Traspaso entre zonas" + +msgid "Internal IP address" +msgstr "Dirección IP interna" + +msgid "Internal port" +msgstr "Puerto interno" + +msgid "Internal zone" +msgstr "Zona interna" + +msgid "Limit log messages" +msgstr "Limitar registro de mensajes" + +msgid "MSS clamping" +msgstr "Fijado de MSS" + +msgid "Masquerading" +msgstr "Enmascaramiento" + +msgid "Match" +msgstr "Coincidir" + +msgid "Match ICMP type" +msgstr "Coincidir con tipo ICMP" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "Coincidir con tráfico traspasado al puerto o rango de puertos destino." + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Coincidir con tráfico de entrada dirigido al puerto o rango de puertos " +"destino en esta máquina" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" +"Coincidir con tráfico de entrada originado desde el puerto o rango de " +"puertos origen en la máquina cliente." + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Nombre" + +msgid "New SNAT rule" +msgstr "Nueva regla SNAT" + +msgid "New forward rule" +msgstr "Nueva regla de traspaso" + +msgid "New input rule" +msgstr "Nueva regla de entrada" + +msgid "New port forward" +msgstr "Nuevo traspaso de puerto" + +msgid "New source NAT" +msgstr "Nuevo origen NAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "Coincidir sólo con tráfico de entrada a esta dirección IP." + +msgid "Only match incoming traffic from these MACs." +msgstr "Coincidir sólo con tráfico de entrada desde estas MACs." + +msgid "Only match incoming traffic from this IP or range." +msgstr "Coincidir sólo con tráfico de entrada desde esta IP o rango." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" +"Coincidir sólo con tráfico de entrada originado desde el puerto o rango de " +"puertos origen en la máquina cliente" + +msgid "Open ports on router" +msgstr "Abrir puertos en el router" + +msgid "Other..." +msgstr "Otros..." + +msgid "Output" +msgstr "Salida" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "Pasa más parámetros a IPTables. ¡Usar con cuidado!" + +msgid "Port Forwards" +msgstr "Traspasos de puerto" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"El traspaso de puertos permite a ordenadores remotos en internet conectar a " +"un ordenador o servicio específico en la LAN privada." + +msgid "Protocol" +msgstr "Protocolo" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" +"Redirigir el tráfico de entrada que coincida al puerto en la máquina interna" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Redirigir el tráfico de entrada que coincida a la máquina interna" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "Restringir enmascaramiento a las subredes destino" + +msgid "Restrict Masquerading to given source subnets" +msgstr "Restringir enmascaramiento a las subredes origen" + +msgid "Restrict to address family" +msgstr "Restringir a la familia de direcciones" + +msgid "Rewrite matched traffic to the given address." +msgstr "Reescribir el tráfico que coincida a estas direcciones." + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" +"Reescribir el tráfico que coincida con este puerto origen. Deje en blanco " +"para reescribir sólo la dirección IP." + +msgid "Rewrite to source %s" +msgstr "Reescribir a origen %s" + +msgid "Rewrite to source %s, %s" +msgstr "Reescribir a origen %s, %s" + +msgid "SNAT IP address" +msgstr "Dirección IP SNAT" + +msgid "SNAT port" +msgstr "Puerto SNAT" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "Dirección IP origen" + +msgid "Source MAC address" +msgstr "Dirección MAC origen" + +msgid "Source NAT" +msgstr "NAT origen" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"NAT origen es una forma específica de enmascaramiento que permite el control " +"fino del origen IP que se usa en el tráfico de salida por ejemplo para " +"dirigir múltiples direcciones WAN a las subredes internas." + +msgid "Source address" +msgstr "Dirección origen" + +msgid "Source port" +msgstr "Puerto origen" + +msgid "Source zone" +msgstr "Zona origen" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"El cortafuegos crea zonas sobre sus interfaces de red para controlar el " +"flujo del tráfico." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"Estas opciones controlan las políticas de traspaso entre esta zona (%s) y " +"otras. Las zonas origen cubren el tráfico traspasado desde " +"%q. Las zonas origen coinciden con el tráfico traspasado " +"desde otras zonas dirigido a %q. La regla de traspaso es " +"unidireccional, por ejemplo una regla de traspaso desde la LAN a la " +"WAN no implica permiso para traspasar desde la WAN a la LAN también." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"Propiedades avanzadas de la entrada \"traspaso de puertos\". No suele ser " +"necesario modificar esta configuración." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"Propiedades avanzadas de la entrada \"reglas de tráfico\", como " +"coincidencias en puertos de origen y destino." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"Esta sección define propierdades comunes de %q. Las opciones de entrada y la salida marcan las políticas por defecto para el tráfico " +"que entra y deja esta zona mientras que la opción traspaso describe " +"la política para tráfico traspasado desde diferentes redes en la zona. " +"Redes cubiertas especifican qué redes disponibles son miembros de " +"esta zona." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "A %s en %s por este dispositivo" + +msgid "To %s in %s" +msgstr "A %s en %s" + +msgid "To %s on this device" +msgstr "A %s por este dispositivo" + +msgid "To %s, %s in %s" +msgstr "A %s, %s en %s" + +msgid "To source IP" +msgstr "A IP origen" + +msgid "To source port" +msgstr "A puerto origen" + +msgid "Traffic Rules" +msgstr "Reglas de tráfico" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"Las reglas de tráfico definen políticas para tramas que se mueven entre " +"zonas diferentes, por ejemplo para rechazar tráfico entre ciertas máquinas o " +"puertos WAN abiertos en el router." + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "Vía %s" + +msgid "Via %s at %s" +msgstr "Vía %s a %s" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"Puede poner varios seleccionando \"-- propio --\" e introduciendo los " +"protocolos separados por espacio." + +msgid "Zone %q" +msgstr "Zona %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Zona ⇒ Traspasos" + +msgid "Zones" +msgstr "Zonas" + +msgid "accept" +msgstr "aceptar" + +msgid "any" +msgstr "cualquiera" + +msgid "any host" +msgstr "cualquier máquina" + +msgid "any router IP" +msgstr "cualquier router IP" + +msgid "any zone" +msgstr "cualquier zona" + +msgid "don't track" +msgstr "no seguir" + +msgid "drop" +msgstr "descartar" + +msgid "reject" +msgstr "rechazar" + +msgid "traffic" +msgstr "tráfico" diff --git a/feeds/luci/applications/luci-app-firewall/po/fr/firewall.po b/feeds/luci/applications/luci-app-firewall/po/fr/firewall.po new file mode 100644 index 0000000..cdff282 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/fr/firewall.po @@ -0,0 +1,540 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2013-02-26 00:44+0200\n" +"Last-Translator: val56 \n" +"Language-Team: French\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "Action" + +msgid "Add" +msgstr "" + +msgid "Add and edit..." +msgstr "" + +msgid "Advanced Settings" +msgstr "Paramètres avancés" + +msgid "Allow forward from source zones:" +msgstr "Permettre la transmission des zones source :" + +msgid "Allow forward to destination zones:" +msgstr "Permettre la transmission vers les zones destination :" + +msgid "Any" +msgstr "N'importe lequel" + +msgid "Covered networks" +msgstr "Réseaux couverts" + +msgid "Custom Rules" +msgstr "Régles spécifiques" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" + +msgid "Destination IP address" +msgstr "Adresse IP de destination" + +msgid "Destination address" +msgstr "Adresse de destination" + +msgid "Destination port" +msgstr "Port de destination" + +msgid "Destination zone" +msgstr "Zone de destination" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "Supprimer les paquets invalides" + +msgid "Enable" +msgstr "Activer" + +msgid "Enable NAT Loopback" +msgstr "Activer le NAT sur la boucle-locale" + +msgid "Enable SYN-flood protection" +msgstr "Activer la protection contre le SYN-flood" + +msgid "Enable logging on this zone" +msgstr "Activer les traces (logs) sur cette zone" + +msgid "External IP address" +msgstr "Adresse IP externe" + +msgid "External port" +msgstr "Port externe" + +msgid "External zone" +msgstr "Zone externe" + +msgid "Extra arguments" +msgstr "" + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# applications/luci-fw/luasrc/model/cbi/luci_fw/zones.lua # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# +msgid "Firewall" +msgstr "Pare-feu" + +msgid "Firewall - Custom Rules" +msgstr "Pare-feu -- Règles personnalisées" + +msgid "Firewall - Port Forwards" +msgstr "Pare-feu -- Redirections de ports" + +msgid "Firewall - Traffic Rules" +msgstr "Pare-feu -- Règles de trafic" + +msgid "Firewall - Zone Settings" +msgstr "Pare-feu - Configuration des zones" + +msgid "Force connection tracking" +msgstr "Forcer le suivi des connexions" + +msgid "Forward" +msgstr "Transfert" + +msgid "Forward to" +msgstr "Transférer à" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "Paramètres généraux" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 et IPv6" + +msgid "IPv4 only" +msgstr "IPv4 seulement" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "IPv6 seulement" + +msgid "Input" +msgstr "Entrée" + +msgid "Inter-Zone Forwarding" +msgstr "Transmission entre zones" + +msgid "Internal IP address" +msgstr "Adresse IP interne" + +msgid "Internal port" +msgstr "Port interne" + +msgid "Internal zone" +msgstr "Zone interne" + +msgid "Limit log messages" +msgstr "Limiter les messages de journalisation" + +msgid "MSS clamping" +msgstr "Contrainte du MSS" + +msgid "Masquerading" +msgstr "Masquage" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "Type ICMP correspondant" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Prendre en compte le trafic dirigé vers le port de destination donné (ou la " +"gamme de ports) sur cet hôte" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Nom" + +msgid "New SNAT rule" +msgstr "Nouvelle règle SNAT" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "Nouvelle règle d'entrée" + +msgid "New port forward" +msgstr "Nouvelle redirection de port" + +msgid "New source NAT" +msgstr "Nouvelle source NAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "Montrer seulement le trafic entrant provenant de ces adresses MAC." + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "Ports ouverts sur le routeur" + +msgid "Other..." +msgstr "Autre..." + +msgid "Output" +msgstr "Sortie" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "Redirections de port" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"La redirection de port permet aux ordinateurs distants sur Internet, de se " +"connecter à un ordinateur ou service spécifié dans le réseau local privé." + +msgid "Protocol" +msgstr "Protocole" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" +"Rediriger le trafic entrant correspondant vers le port donné sur l'hôte " +"interne" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Rediriger le trafic entrant correspondant vers l'hôte interne spécifié" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" +"Restreindre la substitution d'adresses (Masquerade) à ces sous-réseaux " +"destinataires" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" +"Restreindre la substitution d'adresses (Masquerade) à ces sous-réseaux " +"sources" + +msgid "Restrict to address family" +msgstr "Restreindre à cette famille d'adresses" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "Adresse IP SNAT" + +msgid "SNAT port" +msgstr "Port SNAT" + +msgid "Saturday" +msgstr "" + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# +# msgid "Traffic Redirection" +# msgstr "" +# +# msgid "" +# "Traffic redirection allows you to change the destination address of " +# "forwarded packets." +# msgstr "" +# +# msgid "Overview" +# msgstr "" +# +# msgid "Name" +# msgstr "" +# +# msgid "Source zone" +# msgstr "" +# +# msgid "Source MAC-address" +# msgstr "" +# +# msgid "Source port" +# msgstr "" +# +# msgid "Protocol" +# msgstr "" +# +msgid "Source IP address" +msgstr "Adresse IP source" + +msgid "Source MAC address" +msgstr "Adresse MAC source" + +msgid "Source NAT" +msgstr "Source NAT" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +msgid "Source address" +msgstr "Adresse source" + +msgid "Source port" +msgstr "Port source" + +msgid "Source zone" +msgstr "Zone source" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"Le pare-feu crée des zones sur les interfaces réseau pour contrôler le flux " +"du trafic réseau." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"Les options ci-dessous contrôlent les politiques de transmission entre cette " +"zone (%s) et les autres zones. Zones de destination couvre le " +"trafic transfmis venant de %q. Zones source " +"correspond au trafic transféré d'autres zones à destination de %q. La règle de transmission est unidirectionnelle, la " +"transmission du LAN au WAN n'implique pas également l'autorisation " +"de transmission du WAN au LAN." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"Cette page vous permet de modifier les propriétés avancées parmi les entrées " +"de redirection de port. Dans la plupart des cas, cela n'est pas nécessaire " +"de modifier ces paramètres." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"Cette section définit des propriétés communes de %q. Les options entrée et sortie définissent les politiques par défaut pour le trafic " +"entrant et sortant de cette zone, tandis que l'option transmission " +"décrit la politique pour le trafic transmis entre différents réseaux dans " +"cette zone. Les réseaux couverts indiquent quels réseaux " +"disponibles sont membre de cette zone." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "Règles de trafic" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "Zone %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Zone ⇒ Transmissions" + +msgid "Zones" +msgstr "Zones" + +msgid "accept" +msgstr "accepter" + +#, fuzzy +msgid "any" +msgstr "tous" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "ignorer" + +msgid "reject" +msgstr "rejeter" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/he/firewall.po b/feeds/luci/applications/luci-app-firewall/po/he/firewall.po new file mode 100644 index 0000000..ce0ad04 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/he/firewall.po @@ -0,0 +1,471 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add and edit..." +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow forward from source zones:" +msgstr "" + +msgid "Allow forward to destination zones:" +msgstr "" + +msgid "Any" +msgstr "" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" + +msgid "Destination IP address" +msgstr "" + +msgid "Destination address" +msgstr "" + +msgid "Destination port" +msgstr "" + +msgid "Destination zone" +msgstr "" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable NAT Loopback" +msgstr "" + +msgid "Enable SYN-flood protection" +msgstr "" + +msgid "Enable logging on this zone" +msgstr "" + +msgid "External IP address" +msgstr "" + +msgid "External port" +msgstr "" + +msgid "External zone" +msgstr "" + +msgid "Extra arguments" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Firewall - Custom Rules" +msgstr "" + +msgid "Firewall - Port Forwards" +msgstr "" + +msgid "Firewall - Traffic Rules" +msgstr "" + +msgid "Firewall - Zone Settings" +msgstr "" + +msgid "Force connection tracking" +msgstr "" + +msgid "Forward" +msgstr "" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Input" +msgstr "" + +msgid "Inter-Zone Forwarding" +msgstr "" + +msgid "Internal IP address" +msgstr "" + +msgid "Internal port" +msgstr "" + +msgid "Internal zone" +msgstr "" + +msgid "Limit log messages" +msgstr "" + +msgid "MSS clamping" +msgstr "" + +msgid "Masquerading" +msgstr "" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "New SNAT rule" +msgstr "" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "" + +msgid "New port forward" +msgstr "" + +msgid "New source NAT" +msgstr "" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "" + +msgid "Output" +msgstr "" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "" + +msgid "Source MAC address" +msgstr "" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "Source port" +msgstr "" + +msgid "Source zone" +msgstr "" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "" + +msgid "accept" +msgstr "" + +msgid "any" +msgstr "" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "" + +msgid "reject" +msgstr "" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/hu/firewall.po b/feeds/luci/applications/luci-app-firewall/po/hu/firewall.po new file mode 100644 index 0000000..c201e3d --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/hu/firewall.po @@ -0,0 +1,523 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-01-31 16:54+0200\n" +"Last-Translator: Gabor \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s %s-ban" + +msgid "%s%s with %s" +msgstr "%s%s %s-el" + +msgid "%s, %s in %s" +msgstr "%s, %s %s-ben" + +msgid "(Unnamed Entry)" +msgstr "(Névtelen bejegyzés)" + +msgid "(Unnamed Rule)" +msgstr "(Névtelen szabály)" + +msgid "(Unnamed SNAT)" +msgstr "(Névtelen SNAT)" + +msgid "%d pkts. per %s" +msgstr "%d csomag/%s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "%d csom. %s-enként, burst %d csom." + +msgid "%s and limit to %s" +msgstr "%s és korlátozás %s-re" + +msgid "Action" +msgstr "Művelet" + +msgid "Add" +msgstr "Hozzáadás" + +msgid "Add and edit..." +msgstr "Hozzáadás és szerkesztés..." + +msgid "Advanced Settings" +msgstr "Haladó beállítások" + +msgid "Allow forward from source zones:" +msgstr "Továbbítás engedélyezése ezekből a forrás zónákból:" + +msgid "Allow forward to destination zones:" +msgstr "Továbbítás engedélyezése ezekbe a cél zónákba:" + +msgid "Any" +msgstr "Bármelyik" + +msgid "Covered networks" +msgstr "Lefedett hálózatok" + +msgid "Custom Rules" +msgstr "Egyéni szabályok" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Az egyedi szabályok lehetővé teszik tetszőleges iptables parancsok " +"futtatását melyekre a tűzfal keretrendszer egyébként nem biztosít " +"lehetőséget. A parancsok a tűzfal minden újraindításakor futtatásra " +"kerülnek, közvetlenül az alapértelmezett szabálykészletek betöltése után." + +msgid "Destination IP address" +msgstr "Cél IP-cím" + +msgid "Destination address" +msgstr "Cél cím" + +msgid "Destination port" +msgstr "Cél port" + +msgid "Destination zone" +msgstr "Cél zóna" + +msgid "Do not rewrite" +msgstr "Ne írja felül" + +msgid "Drop invalid packets" +msgstr "Érvénytelen csomagok eldobása" + +msgid "Enable" +msgstr "Engedélyezés" + +msgid "Enable NAT Loopback" +msgstr "NAT visszacsatolás engedélyezése" + +msgid "Enable SYN-flood protection" +msgstr "SYN-flood védelem engedélyezése" + +msgid "Enable logging on this zone" +msgstr "Naplózás engeélyezése ezen a zónán" + +msgid "External IP address" +msgstr "Külső IP cím" + +msgid "External port" +msgstr "Külső port" + +msgid "External zone" +msgstr "Külső zóna" + +msgid "Extra arguments" +msgstr "További argumentumok" + +msgid "Firewall" +msgstr "Tűzfal" + +msgid "Firewall - Custom Rules" +msgstr "Tűzfal - Egyéni szabályok" + +msgid "Firewall - Port Forwards" +msgstr "Tűzfal - Port továbbítások" + +msgid "Firewall - Traffic Rules" +msgstr "Tűzfal - Forgalmi szabályok" + +msgid "Firewall - Zone Settings" +msgstr "Tűzfal - Zóna beállítások" + +msgid "Force connection tracking" +msgstr "Kapcsolat követés kényszerítése" + +msgid "Forward" +msgstr "Továbbítás" + +msgid "Forward to" +msgstr "Továbbítás ennek" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "%s felől %s-ben" + +msgid "From %s in %s with source %s" +msgstr "%s felől %s-ben %s forrással" + +msgid "From %s in %s with source %s and %s" +msgstr "%s felől %s-ben %s és %s forrással" + +msgid "General Settings" +msgstr "Általános beállítások" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 és IPv6" + +msgid "IPv4 only" +msgstr "csak IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "csak IPv6" + +msgid "Input" +msgstr "Bemenet" + +msgid "Inter-Zone Forwarding" +msgstr "Zónák-közötti továbbítás" + +msgid "Internal IP address" +msgstr "Belső IP cím" + +msgid "Internal port" +msgstr "Belső port" + +msgid "Internal zone" +msgstr "Belső zóna" + +msgid "Limit log messages" +msgstr "Napló üzenetek korlátozása" + +msgid "MSS clamping" +msgstr "MSS clamping engegélyezése" + +msgid "Masquerading" +msgstr "Álcázás" + +msgid "Match" +msgstr "Szűrés" + +msgid "Match ICMP type" +msgstr "Szűrés ICMP típus alapján" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" +"Továbbított forgalom szűrése a megadott cél port, vagy port tartomány " +"szerint." + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Adott portra vagy port tartományra irányított bejövő forgalom szűrése ezen a " +"gépen" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" +"Az ügyfél gép megadott portjáról, vagy port tartományából indított forgalom " +"szűrése. " + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Név" + +msgid "New SNAT rule" +msgstr "Új SNAT szabály" + +msgid "New forward rule" +msgstr "Új továbbítási szabály" + +msgid "New input rule" +msgstr "Új bemeneti szabály" + +msgid "New port forward" +msgstr "Új port továbbítás" + +msgid "New source NAT" +msgstr "Új forrás NAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "Csak a megadott IP címre irányított bejövő forgalmat egyeztesse." + +msgid "Only match incoming traffic from these MACs." +msgstr "Csak a megadott MAC címekről érkező bejövő forgalmat egyeztesse." + +msgid "Only match incoming traffic from this IP or range." +msgstr "" +"Csak a megadott IP címről illetve IP címtartományból érkező bejövő forgalmat " +"egyeztesse." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" +"Csak az ügyfél gép megadott forrás portjáról illetve forrás port " +"tartományába tartozó portról indított bejövő forgalmat egyeztesse." + +msgid "Open ports on router" +msgstr "Port megnyitása a routeren" + +msgid "Other..." +msgstr "Egyéb..." + +msgid "Output" +msgstr "Kimenet" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" +"További argumentumok küldése az iptables részére. Használja körültekintően!" + +msgid "Port Forwards" +msgstr "Port továbbítás" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"A port továbbítás lehetővé teszi az interneten lévő távoli számítógépeknek a " +"privát helyi hálózat bizonyos számítógépéhez vagy szolgáltatásához történő " +"csatlakozását." + +msgid "Protocol" +msgstr "Protokoll" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "Átirányítja az egyező bejövő forgalmat a belső gép megadott portjához" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Átirányítja az egyező bejövő forgalmat a megadott belső géphez" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "Álcázás korlátozása a megadott cél alhálózatokra" + +msgid "Restrict Masquerading to given source subnets" +msgstr "Álcázás korlátozása a megadott forrás alhálózatokra" + +msgid "Restrict to address family" +msgstr "Korlátozás cím családra" + +msgid "Rewrite matched traffic to the given address." +msgstr "Az összeíllő forgalom átírása a megadott címre." + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" +"Az összeillő forgalom átírása a megadott forrás portra. Amennyibe üresen van " +"hagyva, csak az IP cím kerül átírásra." + +msgid "Rewrite to source %s" +msgstr "Átírás %s forrásra" + +msgid "Rewrite to source %s, %s" +msgstr "Átírás %s, %s forrásra" + +msgid "SNAT IP address" +msgstr "SNAT IP cím" + +msgid "SNAT port" +msgstr "SNAT port" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "Forrás IP cím" + +msgid "Source MAC address" +msgstr "Forrás MAC cím" + +msgid "Source NAT" +msgstr "Forrás NAT" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"A forrás NAT az álcázás olyan speciális formája, mely lehetővé teszi a " +"kimenő forgalomhoz használt forrás IP címek aprólékos szabályozását, például " +"több WAN cím hozzárendelését a belső alhálózatokhoz." + +msgid "Source address" +msgstr "Forrás cím" + +msgid "Source port" +msgstr "Forrás port" + +msgid "Source zone" +msgstr "Forrás zóna" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"A tűzfal zónákat határoz meg a hálózati interfészek fölött a hálózati " +"forgalom áramlásának szabályozására." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"Az alábbi beállítások vezérlik a továbbítási irányelveket a jelenlegi zóna " +"(%s) és a többi zóna között. A cél zónák fedik le a továbbított " +"forgalmat amelynek forrása %q. A forrás zónák " +"szűrik a továbbított forgalmat más zónákból melynek célja %q. A továbbítási szabály egyirányú, tehát pl. egy továbbítás " +"LAN-ból WAN-ba nem jelenti azt, hogy a továbbítás WAN-ból LAN-ba is " +"engedélyezett." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"Ez a lap lehetővé teszi a port továbbítási bejegyzések speciális " +"tulajdonságainak módosítását. A legtöbb esetben ezeknek a beállításoknak a " +"módosítása nem szükséges." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"Ez a lap lehetővé teszi a forgalmi szabály bejegyzés speciális " +"tulajdonságainak módosítását, mint a forrás- és célgépek megfeleltetése." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"Ez a rész a(z) %q általános beállításait határozza meg. A bejövő és " +"kimenő beállítások határozzák meg a zónába be- és kilépő forgalom " +"alapértelmezett szabályait, míg a továbbítási beállítás a különböző " +"hálózatok közötti forgalomtovábbítás szabályát írja le a zónán belül. A " +"lefedett hálózatok adják meg, hogy mely elérhető hálózatok tagjai " +"ennek a zónának." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "%s-re %s-nél a eszközön" + +msgid "To %s in %s" +msgstr "%s-re %s-ben" + +msgid "To %s on this device" +msgstr "%s-re a eszközön" + +msgid "To %s, %s in %s" +msgstr "%s-re, %s %s-ben" + +msgid "To source IP" +msgstr "Forrás IP-re" + +msgid "To source port" +msgstr "Forrás portra" + +msgid "Traffic Rules" +msgstr "Forgalmi szabályok" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"A forgalmi szabályok a különböző zónák között utazó csomagokra vonatkozó " +"házirendet határozzák meg, például bizonyos gépek közötti forgalom " +"megakadályozához vagy WAN portok megnyitásához a routeren." + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "%s-en át" + +msgid "Via %s at %s" +msgstr "%s-en át %s-nél" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"Az \"-- egyéni --\" lehetőség választásával több protokoll megadása " +"lehetséges egymástól szóközzell elválasztva." + +msgid "Zone %q" +msgstr "Zóna %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Zóna ⇒ Továbbítások" + +msgid "Zones" +msgstr "Zónák" + +msgid "accept" +msgstr "elfogadás" + +msgid "any" +msgstr "bármelyik" + +msgid "any host" +msgstr "bármelyik gép" + +msgid "any router IP" +msgstr "bármelyik router IP" + +msgid "any zone" +msgstr "bármelyik zóna" + +msgid "don't track" +msgstr "ne kövesse" + +msgid "drop" +msgstr "eldobás" + +msgid "reject" +msgstr "visszautasítás" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/it/firewall.po b/feeds/luci/applications/luci-app-firewall/po/it/firewall.po new file mode 100644 index 0000000..8853524 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/it/firewall.po @@ -0,0 +1,506 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2012-04-19 23:05+0200\n" +"Last-Translator: claudyus \n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "%s%s con %s" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "%s e limita a %s" + +msgid "Action" +msgstr "Azione" + +msgid "Add" +msgstr "Aggiungi" + +msgid "Add and edit..." +msgstr "Aggiungi e edita..." + +msgid "Advanced Settings" +msgstr "Opzioni Avanzate" + +msgid "Allow forward from source zones:" +msgstr "Permetti routing da zone di origini:" + +msgid "Allow forward to destination zones:" +msgstr "Permetti rountin a zone di destinazione:" + +msgid "Any" +msgstr "Qualsiasi" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "Regole Personalizzate" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Le regole personalizzate ti permettorno di eseguire comandi iptables " +"arbitrari che non solo altrimenti coperti dall'applicazione firewall. I " +"comandi sono eseguiti dopo ogni riavvio del firewall, giusto dopo le altre " +"regole che son state caricate." + +msgid "Destination IP address" +msgstr "Indirizzo IP destinazione" + +msgid "Destination address" +msgstr "Indirizzo di destinazione" + +msgid "Destination port" +msgstr "Porta di destinazione" + +msgid "Destination zone" +msgstr "Zona di destinazione" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "Attiva" + +msgid "Enable" +msgstr "" + +msgid "Enable NAT Loopback" +msgstr "" + +msgid "Enable SYN-flood protection" +msgstr "" + +msgid "Enable logging on this zone" +msgstr "" + +msgid "External IP address" +msgstr "Indirizzo IP Esterno" + +msgid "External port" +msgstr "Porta Esterna" + +msgid "External zone" +msgstr "Zona Esterna" + +msgid "Extra arguments" +msgstr "Comandi extra" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall - Custom Rules" +msgstr "Firewall - Regole Personalizzate" + +msgid "Firewall - Port Forwards" +msgstr "Firewall - Inoltro Porte" + +msgid "Firewall - Traffic Rules" +msgstr "Firewall - Regole Traffico" + +msgid "Firewall - Zone Settings" +msgstr "Firewall - Opzioni delle Zone" + +msgid "Force connection tracking" +msgstr "" + +msgid "Forward" +msgstr "Inoltra" + +msgid "Forward to" +msgstr "Inoltro a" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "Opzioni Generali" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 only" +msgstr "Solo IPv4" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 only" +msgstr "Solo IPv6" + +msgid "Input" +msgstr "Ingresso" + +msgid "Inter-Zone Forwarding" +msgstr "" + +msgid "Internal IP address" +msgstr "Indirizzo IP Interno" + +msgid "Internal port" +msgstr "Porta interna" + +msgid "Internal zone" +msgstr "Zona Interna" + +msgid "Limit log messages" +msgstr "" + +msgid "MSS clamping" +msgstr "" + +msgid "Masquerading" +msgstr "Dettagli" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Nome" + +msgid "New SNAT rule" +msgstr "" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "Nuova regola di inoltro porta" + +msgid "New port forward" +msgstr "" + +msgid "New source NAT" +msgstr "" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "" + +msgid "Output" +msgstr "" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"L'inoltro delle porte permette ai computer in remoto su Internet " +"diconnettersi a uno specifico computer o servizio presente nella tua LAN " +"privata" + +msgid "Protocol" +msgstr "Protocollo" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "" + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# msgid "Traffic Redirection" +# msgstr "" +# msgid "" +# "Traffic redirection allows you to change the destination address of " +# "forwarded packets." +# msgstr "" +# msgid "Overview" +# msgstr "" +# msgid "Name" +# msgstr "" +# msgid "Source zone" +# msgstr "" +# msgid "Source MAC-address" +# msgstr "" +# msgid "Source port" +# msgstr "" +# msgid "Protocol" +# msgstr "" +msgid "Source IP address" +msgstr "Indirizzo IP di origine" + +msgid "Source MAC address" +msgstr "Indirizzo MAC di origine" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +msgid "Source address" +msgstr "Indirizzo di origine" + +msgid "Source port" +msgstr "Porta di origine" + +msgid "Source zone" +msgstr "Zona di origine" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"Il firewall crea delle zone nelle tue interfacce di rete per controllareil " +"flusso del traffico." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "" + +msgid "accept" +msgstr "accetta" + +msgid "any" +msgstr "qualsiasi" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "" + +msgid "reject" +msgstr "rifiuta" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/ja/firewall.po b/feeds/luci/applications/luci-app-firewall/po/ja/firewall.po new file mode 100644 index 0000000..0e8d71c --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/ja/firewall.po @@ -0,0 +1,555 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2016-12-24 02:55+0900\n" +"Last-Translator: INAGAKI Hiroshi \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" + +msgid "%s in %s" +msgstr "%s (%s)" + +msgid "%s%s with %s" +msgstr "%s%s ,%s" + +msgid "%s, %s in %s" +msgstr "%s, %s (%s)" + +msgid "(Unnamed Entry)" +msgstr "(名前設定の無いエントリー)" + +msgid "(Unnamed Rule)" +msgstr "(名前設定の無いルール)" + +msgid "(Unnamed SNAT)" +msgstr "(名前設定の無いSNAT)" + +msgid "%d pkts. per %s" +msgstr "%d パケット / %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" +"%d パケット / %s, バースト %d パケット" + +msgid "%s and limit to %s" +msgstr "%s, %s を上限に設定" + +msgid "Action" +msgstr "動作" + +msgid "Add" +msgstr "追加" + +msgid "Add and edit..." +msgstr "追加及び編集..." + +msgid "Advanced Settings" +msgstr "詳細設定" + +msgid "Allow forward from source zones:" +msgstr "送信元ゾーンからの転送を許可する:" + +msgid "Allow forward to destination zones:" +msgstr "宛先ゾーンへの転送を許可する:" + +msgid "Any" +msgstr "全て" + +msgid "Covered networks" +msgstr "対象ネットワーク" + +msgid "Custom Rules" +msgstr "手動設定ルール" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"手動設定ルールの設定では、ファイアウォールの設定画面ではサポートされていない" +"ような、任意のiptablesコマンドを実行することが可能です。これらの任意のコマン" +"ドは、ファイアウォール機能の起動ごとに、標準のルールが読み込まれた後に実行さ" +"れます。" + +msgid "Destination IP address" +msgstr "宛先IPアドレス" + +msgid "Destination address" +msgstr "宛先アドレス" + +msgid "Destination port" +msgstr "宛先ポート" + +msgid "Destination zone" +msgstr "宛先ゾーン" + +msgid "Do not rewrite" +msgstr "リライトしない" + +msgid "Drop invalid packets" +msgstr "無効なパケットを遮断する" + +msgid "Enable" +msgstr "有効" + +msgid "Enable NAT Loopback" +msgstr "NATループバックを有効にする" + +msgid "Enable SYN-flood protection" +msgstr "SYN-Floodプロテクションを有効にする" + +msgid "Enable logging on this zone" +msgstr "このゾーンのログ記録を有効にする" + +msgid "External IP address" +msgstr "外部IPアドレス" + +msgid "External port" +msgstr "外部ポート" + +msgid "External zone" +msgstr "外部ゾーン" + +msgid "Extra arguments" +msgstr "追加設定" + +msgid "Firewall" +msgstr "ファイアウォール" + +msgid "Firewall - Custom Rules" +msgstr "ファイアウォール - 手動設定ルール" + +msgid "Firewall - Port Forwards" +msgstr "ファイアウォール - ポートフォワーディング" + +msgid "Firewall - Traffic Rules" +msgstr "ファイアウォール - トラフィック・ルール" + +msgid "Firewall - Zone Settings" +msgstr "ファイアウォール - ゾーン設定" + +msgid "Force connection tracking" +msgstr "強制的にコネクション追跡を行う" + +msgid "Forward" +msgstr "転送" + +msgid "Forward to" +msgstr "転送先" + +msgid "Friday" +msgstr "金曜日" + +msgid "From %s in %s" +msgstr "送信元 %s (%s)" + +msgid "From %s in %s with source %s" +msgstr "送信元 %s (%s) , 送信元 %s" + +msgid "From %s in %s with source %s and %s" +msgstr "送信元 %s (%s) , 送信元 %s, 送信元 %s" + +msgid "General Settings" +msgstr "一般設定" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4及びIPv6" + +msgid "IPv4 only" +msgstr "IPv4のみ" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "IPv6のみ" + +msgid "Input" +msgstr "受信" + +msgid "Inter-Zone Forwarding" +msgstr "内部ゾーン転送" + +msgid "Internal IP address" +msgstr "内部IPアドレス" + +msgid "Internal port" +msgstr "内部ポート" + +msgid "Internal zone" +msgstr "内部ゾーン" + +msgid "Limit log messages" +msgstr "ログメッセージを制限" + +msgid "MSS clamping" +msgstr "MSSクランプ" + +msgid "Masquerading" +msgstr "マスカレード" + +msgid "Match" +msgstr "対象" + +msgid "Match ICMP type" +msgstr "ICMPタイプの一致" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" +"設定された宛先ポート(またはポート範囲)に一致した転送トラフィックが対象になり" +"ます" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"設定された宛先ポート(またはポート範囲)に一致した受信トラフィックが対象になり" +"ます" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" +"設定されたクライアントホストの送信元ポート(またはポート範囲)からの受信トラ" +"フィックと一致したトラフィックが対象になります。" + +msgid "Monday" +msgstr "月曜日" + +msgid "Month Days" +msgstr "月間" + +msgid "Name" +msgstr "名前" + +msgid "New SNAT rule" +msgstr "SNATルールの新規作成" + +msgid "New forward rule" +msgstr "転送ルールの新規作成" + +msgid "New input rule" +msgstr "受信ルールの新規作成" + +msgid "New port forward" +msgstr "転送設定の新規作成" + +msgid "New source NAT" +msgstr "SNATルールの新規作成" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "設定された宛先IPアドレスと一致した受信トラフィックが対象になります。" + +msgid "Only match incoming traffic from these MACs." +msgstr "設定されたMACアドレスと一致した受信したトラフィックが対象になります。" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" +"設定されたIPアドレス (または範囲) と一致した受信したトラフィックが対象になり" +"ます。" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" +"設定されたクライアントホストの送信元ポート(またはポート範囲)からの受信トラ" +"フィックと一致したトラフィックのみを対象にします。" + +msgid "Open ports on router" +msgstr "ポートの開放" + +msgid "Other..." +msgstr "その他のプロトコル" + +msgid "Output" +msgstr "送信" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" +"iptablesにパススルーする追加の引数を設定してください。ただし、注意して設定し" +"てください!" + +msgid "Port Forwards" +msgstr "ポートフォワーディング" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"ポートフォワーディングは、インターネット上のリモートコンピュータから、プライ" +"ベートなネットワーク上の、特定のコンピュータやサービスへのアクセスを可能にし" +"ます。" + +msgid "Protocol" +msgstr "プロトコル" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" +"ルールに一致した受信トラフィックを、内部ホストの設定されたポートへ転送します" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "ルールに一致した受信トラフィックを、設定された内部ホストへ転送します" + +msgid "Restart Firewall" +msgstr "ファイアウォールの再起動" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "設定された宛先サブネットへのマスカレードを制限する" + +msgid "Restrict Masquerading to given source subnets" +msgstr "設定された送信元サブネットへのマスカレードを制限する" + +msgid "Restrict to address family" +msgstr "アドレスファミリの制限" + +msgid "Rewrite matched traffic to the given address." +msgstr "" +"ルールに一致したトラフィックの送信元アドレスを設定した値にリライトします。" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" +"ルールに一致したトラフィックの送信元ポートを設定した値にリライトします。空欄" +"にした場合、IPアドレスのみを書き直します。" + +msgid "Rewrite to source %s" +msgstr "送信元 %s にリライト" + +msgid "Rewrite to source %s, %s" +msgstr "送信元 %s, %s にリライト" + +msgid "SNAT IP address" +msgstr "SNAT IPアドレス" + +msgid "SNAT port" +msgstr "SNAT ポート" + +msgid "Saturday" +msgstr "土曜日" + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# +# msgid "Traffic Redirection" +# msgstr "" +# +# msgid "" +# "Traffic redirection allows you to change the destination address of " +# "forwarded packets." +# msgstr "" +# +# msgid "Overview" +# msgstr "" +# +# msgid "Name" +# msgstr "" +# +# msgid "Source zone" +# msgstr "" +# +# msgid "Source MAC-address" +# msgstr "" +# +# msgid "Source port" +# msgstr "" +# +# msgid "Protocol" +# msgstr "" +# +msgid "Source IP address" +msgstr "送信元IPアドレス" + +msgid "Source MAC address" +msgstr "送信元MACアドレス" + +msgid "Source NAT" +msgstr "送信元NAT" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"送信元NAT設定は、複数のWANアドレスを内部のサブネットにマッピングするような、" +"出力トラフィックに対する送信元IPアドレスのきめ細かい制御を行うマスカレードの" +"設定フォームです。" + +msgid "Source address" +msgstr "送信元アドレス" + +msgid "Source port" +msgstr "送信元ポート" + +msgid "Source zone" +msgstr "送信元ゾーン" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "開始日 (yyyy-mm-dd)" + +msgid "Start Time (hh:mm:ss)" +msgstr "開始時刻 (hh:mm:ss)" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "停止日 (yyyy-mm-dd)" + +msgid "Stop Time (hh:mm:ss)" +msgstr "停止時刻 (hh:mm:ss)" + +msgid "Sunday" +msgstr "日曜日" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"ファイアウォール機能は、各ネットワークインターフェース上にゾーンを作成してト" +"ラフィックの制御を行います。" + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"下記の設定は、このゾーン (%s)とその他のゾーン間の転送ポリシーを制御します。" +"宛先ゾーンへの転送 は、%q から転送されたトラフィッ" +"クに対して転送を許可します。 送信元ゾーンからの転送 は、別のゾーンか" +"ら%qへ の転送を許可します。トラフィック転送設定は、一方" +"向であり、例えばlanからwanへの転送設定は、wanからlanへの転送を許可し" +"ません。" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"このページでは、各転送ルールの詳細設定を行うことができます。ただし、ほとんど" +"のケースは、これらの設定を変更する必要はありません。" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"このページでは、各トラフィックルールの送信元・宛先ホストの設定などの詳細設定" +"を行うことができます。" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"このセクションでは、%sの標準的な動作を設定します。受信及び送信オプションは、このゾーンに対して入出力するトラフィックに対する標準のポリ" +"シーを設定し、転送オプションは、ゾーン間の転送トラフィックに対する標" +"準のポリシーになります。対象ネットワークは、どのネットワーク設定がこ" +"のゾーンに属するかを設定します。" + +msgid "Thursday" +msgstr "木曜日" + +msgid "Time in UTC" +msgstr "UTC時刻を使用" + +msgid "To %s at %s on this device" +msgstr "宛先 %s, %s (デバイス)" + +msgid "To %s in %s" +msgstr "宛先 %s (%s)" + +msgid "To %s on this device" +msgstr "宛先 %s (デバイス)" + +msgid "To %s, %s in %s" +msgstr "宛先 %s, %s (%s)" + +msgid "To source IP" +msgstr "変換後送信元IP" + +msgid "To source port" +msgstr "変換後送信元ポート" + +msgid "Traffic Rules" +msgstr "トラフィック・ルール" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"トラフィック・ルールの設定では、ゾーン間を行き来するパケットのポリシーを設定" +"します。例えば、特定のホスト間や、ルーターのWANポートへのトラフィックの拒否を" +"設定することができます。" + +msgid "Tuesday" +msgstr "火曜日" + +msgid "Via %s" +msgstr "経由 %s" + +msgid "Via %s at %s" +msgstr "経由 %s , %s" + +msgid "Wednesday" +msgstr "水曜日" + +msgid "Week Days" +msgstr "曜日" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"\"-- 手動設定 --\"を選択し、プロトコルをスペースで区切って入力することで複数" +"のプロトコルを指定することができます。" + +msgid "Zone %q" +msgstr "ゾーン %q" + +msgid "Zone ⇒ Forwardings" +msgstr "ゾーン ⇒ 転送" + +msgid "Zones" +msgstr "ゾーン" + +msgid "accept" +msgstr "許可" + +msgid "any" +msgstr "全て" + +msgid "any host" +msgstr "全てのホスト" + +msgid "any router IP" +msgstr "全てのルーターIP" + +msgid "any zone" +msgstr "全てのゾーン" + +msgid "don't track" +msgstr "コネクション追跡を行わない" + +msgid "drop" +msgstr "遮断" + +msgid "reject" +msgstr "拒否" + +msgid "traffic" +msgstr "トラフィック" diff --git a/feeds/luci/applications/luci-app-firewall/po/ko/firewall.po b/feeds/luci/applications/luci-app-firewall/po/ko/firewall.po new file mode 100644 index 0000000..699af7b --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/ko/firewall.po @@ -0,0 +1,504 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2012-11-14 17:32+0200\n" +"Last-Translator: Weongyo Jeong \n" +"Language-Team: LANGUAGE \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "%s%s ,%s" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add and edit..." +msgstr "추가 후 수정..." + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow forward from source zones:" +msgstr "Source zone 로부터의 forward 허용:" + +msgid "Allow forward to destination zones:" +msgstr "Destination zone 으로 forward 허용:" + +msgid "Any" +msgstr "" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "Custom Rule" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Custom rule 은 방화벽 UI 로 해결이 되지 않는 임의의 iptables 명령을 " +"실행할 수 있도록 합니다. 입력된 명령어들은 매 방화벽 재시작시 실행되는데 " +"default ruleset 이 load 된 후 시점입니다." + +msgid "Destination IP address" +msgstr "Destination IP 주소" + +msgid "Destination address" +msgstr "Destination 주소" + +msgid "Destination port" +msgstr "" + +msgid "Destination zone" +msgstr "" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "" + +msgid "Enable" +msgstr "활성화" + +msgid "Enable NAT Loopback" +msgstr "NAT Loopback 활성화" + +msgid "Enable SYN-flood protection" +msgstr "SYN-flood protection 활성화" + +msgid "Enable logging on this zone" +msgstr "zone 의 logging 활성화" + +msgid "External IP address" +msgstr "외부 IP 주소" + +msgid "External port" +msgstr "외부 port" + +msgid "External zone" +msgstr "외부 zone" + +msgid "Extra arguments" +msgstr "추가 argument" + +msgid "Firewall" +msgstr "방화벽" + +msgid "Firewall - Custom Rules" +msgstr "방화벽 - Custom Rules" + +msgid "Firewall - Port Forwards" +msgstr "방화벽 - Port Forwards" + +msgid "Firewall - Traffic Rules" +msgstr "방화벽 - Traffic Rules" + +msgid "Firewall - Zone Settings" +msgstr "방화벽 - Zone 설정" + +msgid "Force connection tracking" +msgstr "" + +msgid "Forward" +msgstr "" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "금요일" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Input" +msgstr "" + +msgid "Inter-Zone Forwarding" +msgstr "" + +msgid "Internal IP address" +msgstr "내부 IP 주소" + +msgid "Internal port" +msgstr "내부 port" + +msgid "Internal zone" +msgstr "내부 zone" + +msgid "Limit log messages" +msgstr "" + +msgid "MSS clamping" +msgstr "" + +msgid "Masquerading" +msgstr "" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "월요일" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "이름" + +msgid "New SNAT rule" +msgstr "새로운 SNAT rule" + +msgid "New forward rule" +msgstr "새로운 forward rule" + +msgid "New input rule" +msgstr "새로운 input rule" + +msgid "New port forward" +msgstr "새로운 port forward" + +msgid "New source NAT" +msgstr "새로운 source NAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "" + +msgid "Output" +msgstr "" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "iptables 명령에 추가 인자들을 더합니다. 조심해 사용하세요!" + +msgid "Port Forwards" +msgstr "Port Forward" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"Port forwarding 기능은 인터넷 상의 원격 컴퓨터가 내부 LAN 에 속한 " +"특정 컴퓨터나 서비스에 접속할 수 있도록 합니다." + +msgid "Protocol" +msgstr "" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "주어진 destination subnet 으로 Masquerading 제한" + +msgid "Restrict Masquerading to given source subnets" +msgstr "주어진 source subnet 으로 Masquerading 제한" + +msgid "Restrict to address family" +msgstr "Address family 제한" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "토요일" + +msgid "Source IP address" +msgstr "Source IP 주소" + +msgid "Source MAC address" +msgstr "Source MAC 주소" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"Source NAT 기능은 masquerading 의 한 형태로써 outgoing 트래픽이 사용할 " +"source IP 를 세밀하게 제어할 수 있습니다. 예를 들어 다수의 WAN 주소들을 " +"내부 subnet 에 매핑(mapping) 할 경우 사용됩니다." + +msgid "Source address" +msgstr "Source 주소" + +msgid "Source port" +msgstr "" + +msgid "Source zone" +msgstr "" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "시작 날짜 (yyyy-mm-dd)" + +msgid "Start Time (hh:mm:ss)" +msgstr "시작 시간 (hh:mm:ss)" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "종료 날짜 (yyyy-mm-dd)" + +msgid "Stop Time (hh:mm:ss)" +msgstr "종료 시간 (hh:mm:ss)" + +msgid "Sunday" +msgstr "일요일" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"방화벽 기능을 이용하여 네트워크 인터페이스와 연결된 zone 을 생성할 수 있고 " +"이를 이용하여 네트워크 traffic flow 를 제어할 수 있습니다." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"이 zone (%s) 과 다른 zone 들 사이의 forwarding 정책을 제어하는 옵션들입니다. " +"Destination zones%q 에서 출발한 " +"forward traffic 을 뜻하고, Source zones 은 다른 zone 들에서 " +"%q 로 전달되는 forward traffic 을 뜻합니다. " +"Forwarding rule 은 unidirectional 인데, 예를 들어 LAN 에서 WAN " +"으로의 forward 규칙이 WAN 에서 LAN 으로의 forward 를 허락하는 것이 " +"아닙니다." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"이 메뉴에서는 port forwarding 의 고급 설정 정보를 변경할 수 있습니다. " +"대부분의 경우 이 설정을 수정할 일이 없습니다." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"이 메뉴에서는 traffic rule 항목의 고급 설정, 예를 들어 source host 와 " +"destination host 매칭, 을 변경할 수 있습니다." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"이 섹션은 %q 의 공통 속성을 설정할 수 있습니다. input 과 " +"output 옵션은 이 zone 으로 전달되어 들오거나 나가는 트래픽에 대한 " +"기본 정책을 뜻합니다. forward 옵션은 zone 내에서 다른 네트워크들 " +"사이를 오가는 forward traffic 에 대한 정책을 뜻합니다. " +"Covered networks 에서는 zone 의 영향을 받을 네트워크들을 지정할 수 " +"있습니다." + +msgid "Thursday" +msgstr "목요일" + +msgid "Time in UTC" +msgstr "UTC 기준시" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "Traffic Rule" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"Traffic rule 은 서로 다른 zone 사이를 오가는 패킷들에 대한 정책을 " +"정의합니다. 예를 들어 특정 host 들 사이의 트래픽을 차단하거나 " +"공유기의 WAN port 를 open 할때 사용됩니다." + +msgid "Tuesday" +msgstr "화요일" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "수요일" + +msgid "Week Days" +msgstr "주일" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "Zone 내역" + +msgid "accept" +msgstr "" + +msgid "any" +msgstr "" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "" + +msgid "reject" +msgstr "" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/ms/firewall.po b/feeds/luci/applications/luci-app-firewall/po/ms/firewall.po new file mode 100644 index 0000000..b82e2c1 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/ms/firewall.po @@ -0,0 +1,470 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add and edit..." +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow forward from source zones:" +msgstr "" + +msgid "Allow forward to destination zones:" +msgstr "" + +msgid "Any" +msgstr "" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" + +msgid "Destination IP address" +msgstr "" + +msgid "Destination address" +msgstr "" + +msgid "Destination port" +msgstr "" + +msgid "Destination zone" +msgstr "" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable NAT Loopback" +msgstr "" + +msgid "Enable SYN-flood protection" +msgstr "" + +msgid "Enable logging on this zone" +msgstr "" + +msgid "External IP address" +msgstr "" + +msgid "External port" +msgstr "" + +msgid "External zone" +msgstr "" + +msgid "Extra arguments" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Firewall - Custom Rules" +msgstr "" + +msgid "Firewall - Port Forwards" +msgstr "" + +msgid "Firewall - Traffic Rules" +msgstr "" + +msgid "Firewall - Zone Settings" +msgstr "" + +msgid "Force connection tracking" +msgstr "" + +msgid "Forward" +msgstr "" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Input" +msgstr "" + +msgid "Inter-Zone Forwarding" +msgstr "" + +msgid "Internal IP address" +msgstr "" + +msgid "Internal port" +msgstr "" + +msgid "Internal zone" +msgstr "" + +msgid "Limit log messages" +msgstr "" + +msgid "MSS clamping" +msgstr "" + +msgid "Masquerading" +msgstr "" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "New SNAT rule" +msgstr "" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "" + +msgid "New port forward" +msgstr "" + +msgid "New source NAT" +msgstr "" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "" + +msgid "Output" +msgstr "" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "" + +msgid "Source MAC address" +msgstr "" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "Source port" +msgstr "" + +msgid "Source zone" +msgstr "" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "" + +msgid "accept" +msgstr "" + +msgid "any" +msgstr "" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "" + +msgid "reject" +msgstr "" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/no/firewall.po b/feeds/luci/applications/luci-app-firewall/po/no/firewall.po new file mode 100644 index 0000000..59167db --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/no/firewall.po @@ -0,0 +1,517 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2013-03-25 16:42+0200\n" +"Last-Translator: protx \n" +"Language: no\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s i %s" + +msgid "%s%s with %s" +msgstr "%s%s med %s" + +msgid "%s, %s in %s" +msgstr "%s, %s i %s" + +msgid "(Unnamed Entry)" +msgstr "(oppføring uten navn)" + +msgid "(Unnamed Rule)" +msgstr "(regel uten navn)" + +msgid "(Unnamed SNAT)" +msgstr "(SNAT uten navn)" + +msgid "%d pkts. per %s" +msgstr "%d pakker per %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "%d pakker per %s, burst %dpakker." + +msgid "%s and limit to %s" +msgstr "%s og begrens til %s" + +msgid "Action" +msgstr "Handling" + +msgid "Add" +msgstr "Legg til" + +msgid "Add and edit..." +msgstr "Legg til og redigere..." + +msgid "Advanced Settings" +msgstr "Avanserte Innstillinger" + +msgid "Allow forward from source zones:" +msgstr "Tillat videresending fra kilde soner:" + +msgid "Allow forward to destination zones:" +msgstr "Tillat videresending til destinasjon soner:" + +msgid "Any" +msgstr "Enhver" + +msgid "Covered networks" +msgstr "Gjeldene nettverk" + +msgid "Custom Rules" +msgstr "Egendefinerte Regler" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Egendefinerte regler tillater deg å utføre vilkårlige iptables kommandoer " +"som ikke dekkes av brannmurens standardoppsett. Kommandoene utføres etter " +"hver omstart av brannmuren, rett etter at standard regelsett er lastet." + +msgid "Destination IP address" +msgstr "Destinasjon IP adresse" + +msgid "Destination address" +msgstr "Destinasjon adresse" + +msgid "Destination port" +msgstr "Destinasjon port" + +msgid "Destination zone" +msgstr "Destinasjon sone" + +msgid "Do not rewrite" +msgstr "Ikke omskriv" + +msgid "Drop invalid packets" +msgstr "Forkast ugyldige pakker" + +msgid "Enable" +msgstr "Aktiver" + +msgid "Enable NAT Loopback" +msgstr "Aktiver NAT Tilbakekobling" + +msgid "Enable SYN-flood protection" +msgstr "Aktiver SYN-flood beskyttelse" + +msgid "Enable logging on this zone" +msgstr "Aktiver logging av denne sonen" + +msgid "External IP address" +msgstr "Ekstern IP adressse" + +msgid "External port" +msgstr "Ekstern port" + +msgid "External zone" +msgstr "Ekstern sone" + +msgid "Extra arguments" +msgstr "Ekstra argumenter" + +msgid "Firewall" +msgstr "Brannmur" + +msgid "Firewall - Custom Rules" +msgstr "Brannmur - Egendefinerte Regler" + +msgid "Firewall - Port Forwards" +msgstr "Brannmur - Port Videresending" + +msgid "Firewall - Traffic Rules" +msgstr "Brannmur - Trafikk Regler" + +msgid "Firewall - Zone Settings" +msgstr "Brannmur - Sone Innstillinger" + +msgid "Force connection tracking" +msgstr "" +"Bruk forbindelse sporing" + +msgid "Forward" +msgstr "Videresend" + +msgid "Forward to" +msgstr "Videresend til" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "Fra %s i %s" + +msgid "From %s in %s with source %s" +msgstr "Fra %s i %s med kilde %s" + +msgid "From %s in %s with source %s and %s" +msgstr "Fra %s i %s med kilde %s og %s" + +msgid "General Settings" +msgstr "Generelle Innstillinger" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 og IPv6" + +msgid "IPv4 only" +msgstr "Kun IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "Kun IPv6" + +msgid "Input" +msgstr "Inndata" + +msgid "Inter-Zone Forwarding" +msgstr "Sone til Sone Videresending" + +msgid "Internal IP address" +msgstr "Intern IP adresse" + +msgid "Internal port" +msgstr "Intern port" + +msgid "Internal zone" +msgstr "Intern sone" + +msgid "Limit log messages" +msgstr "Begrens logging" + +msgid "MSS clamping" +msgstr "MSS Kontroll (Clamping)" + +msgid "Masquerading" +msgstr "Masquerading" + +msgid "Match" +msgstr "Match" + +msgid "Match ICMP type" +msgstr "Match ICMP type" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" +"Match videresendt trafikk til den oppgitte destinasjonsport eller " +"portområdet." + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Match innkommende trafikk rettet mot den oppgitte destinasjonsport eller " +"portområdet på denne verten" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" +"Match innkommende trafikk som kommer fra den oppgitte kildeport eller " +"portområdet på klienten." + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Navn" + +msgid "New SNAT rule" +msgstr "Ny SNAT regel" + +msgid "New forward rule" +msgstr "Ny videresending regel" + +msgid "New input rule" +msgstr "Ny inndata regel" + +msgid "New port forward" +msgstr "Ny port videresending" + +msgid "New source NAT" +msgstr "Ny kilde NAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "Match kun innkommende trafikk rettet mot den oppgitt IP adresse." + +msgid "Only match incoming traffic from these MACs." +msgstr "Match kun innkommende trafikk fra disse MAC adresser." + +msgid "Only match incoming traffic from this IP or range." +msgstr "Match kun innkommende trafikk fra denne IP eller IP område." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" +"Match kun innkommende trafikk som kommer fra den oppgitte kildeport eller " +"fra portområdet til klienten" + +msgid "Open ports on router" +msgstr "Åpne porter på ruteren" + +msgid "Other..." +msgstr "Andre..." + +msgid "Output" +msgstr "Utdata" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "Sender flere argumenter til iptables. Bruk med forsiktighet!" + +msgid "Port Forwards" +msgstr "Port Videresendinger" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"Port videresending tillater at eksterne datamaskiner på Internett kan koble " +"seg til en bestemt maskin eller tjeneste innenfor det private LAN." + +msgid "Protocol" +msgstr "Protokoll" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" +"Viderekoble matchet innkommende trafikk til den oppgitte porten på intern " +"vert" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Viderekoble matchet innkommende trafikk til den angitte interne vert" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "Begrens Masquerading til oppgitt destinasjons subnett" + +msgid "Restrict Masquerading to given source subnets" +msgstr "Begrens Masqeuerading til oppgitt kilde subnett" + +msgid "Restrict to address family" +msgstr "Begrens til adresse familie" + +msgid "Rewrite matched traffic to the given address." +msgstr "Omskriv matchet trafikk til den oppgitte adressen." + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" +"Omskriv matchet trafikk til den oppgitte kildeport. Kan stå tom for kun " +"omskriving av IP adressen." + +msgid "Rewrite to source %s" +msgstr "Omskriv til kilde %s" + +msgid "Rewrite to source %s, %s" +msgstr "Omskriv til kilde %s, %s" + +msgid "SNAT IP address" +msgstr "SNAT IP adresse" + +msgid "SNAT port" +msgstr "SNAT port" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "Kilde IP adresse" + +msgid "Source MAC address" +msgstr "Kilde MAC adresse" + +msgid "Source NAT" +msgstr "Kilde NAT" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"Kilde NAT er en spesifikk form for masquerading som tillater finkornet " +"kontroll over kilde IP adressen som brukes for utgående trafikk, for " +"eksempel for å mappe flere WAN adresser til interne subnett." + +msgid "Source address" +msgstr "Kilde adresse" + +msgid "Source port" +msgstr "Kilde port" + +msgid "Source zone" +msgstr "Kilde sone" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"Brannmuren skaper soner over nettverkets grensesnitt for å styre " +"nettverkstrafikken." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"Med valgene under konfigurerer man videresending mellom denne sone (%s) og " +"andre soner. Destinasjons soner omhandler videresendt trafikk " +"med opprinnelse fra %q. Kilde soner matcher " +"videresendt trafikk fra andre soner rettet mot %q. Reglene " +"ved videresending er enveis, d.v.s at videresending fra LAN til WAN " +"ikke automatisk også tillater videresending fra WAN til LAN." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"Denne siden lar deg endre avanserte egenskaper til port videresending " +"oppføringer. I de fleste tilfeller er det ikke nødvendig å endre disse " +"innstillingene." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"Denne siden lar deg endre de avanserte egenskapene til trafikken regel " +"oppføringer, som for eksempel matchet kilde og destinasjons vert." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"Denne seksjonen definerer de vanligste valg for %q. Med Inndata og " +"Utdata fastsetter man vanlige regler for trafikk gjennom sonen, " +"mens videresend valget definerer regler for videresendt trafikk " +"mellom forskjellige nettverk i sonen. Gjeldene nettverk " +"spesifiserer hvilken av de tilgjengelige nettverk som er medlem av denne " +"sone." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "Til %s på %s på denne enheten" + +msgid "To %s in %s" +msgstr "Til %s i %s" + +msgid "To %s on this device" +msgstr "Til %s på denne enheten" + +msgid "To %s, %s in %s" +msgstr "Til %s, %s i %s" + +msgid "To source IP" +msgstr "Til kilde IP" + +msgid "To source port" +msgstr "Til kilde port" + +msgid "Traffic Rules" +msgstr "Trafikk Regler" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"Trafikk regler definerer regler for sending av pakker mellom ulike soner, " +"for eksempel for å avvise trafikk mellom visse verter eller for å åpne WAN " +"porter på ruteren." + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "Via %s" + +msgid "Via %s at %s" +msgstr "Via %s på %s" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"Du kan spesifisere flere ved å velge \"-- egendefinert --\" og deretter " +"skrive flere protokoller atskilt med mellomrom." + +msgid "Zone %q" +msgstr "Sone %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Sone = Videresendinger" + +msgid "Zones" +msgstr "Soner" + +msgid "accept" +msgstr "godta" + +msgid "any" +msgstr "enhver" + +msgid "any host" +msgstr "enhver vert" + +msgid "any router IP" +msgstr "enhver ruter IP" + +msgid "any zone" +msgstr "enhver sone" + +msgid "don't track" +msgstr "ikke track" + +msgid "drop" +msgstr "forkast" + +msgid "reject" +msgstr "avslå" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/pl/firewall.po b/feeds/luci/applications/luci-app-firewall/po/pl/firewall.po new file mode 100644 index 0000000..2eea8c3 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/pl/firewall.po @@ -0,0 +1,530 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2013-06-22 15:49+0200\n" +"Last-Translator: obsy \n" +"Language-Team: LANGUAGE \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s w %s" + +msgid "%s%s with %s" +msgstr "%s%s z %s" + +msgid "%s, %s in %s" +msgstr "%s, %s w %s" + +msgid "(Unnamed Entry)" +msgstr "(Nienazwany wpis)" + +msgid "(Unnamed Rule)" +msgstr "(Nienazwana reguła)" + +msgid "(Unnamed SNAT)" +msgstr "(Nienazwany SNAT)" + +msgid "%d pkts. per %s" +msgstr "%d pakiet. na %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" +"%d pakiet. na %s, popsutych %d pakiet." + +msgid "%s and limit to %s" +msgstr "%s i ograniczone do %s" + +msgid "Action" +msgstr "Działanie" + +msgid "Add" +msgstr "Dodaj" + +msgid "Add and edit..." +msgstr "Dodaj i edytuj..." + +msgid "Advanced Settings" +msgstr "Ustawienia zaawansowane" + +msgid "Allow forward from source zones:" +msgstr "Zezwól na przekazywanie z source zones:" + +msgid "Allow forward to destination zones:" +msgstr "Zezwól na przekazywanie do destination zones:" + +msgid "Any" +msgstr "Każdy" + +msgid "Covered networks" +msgstr "Objęte sieci" + +msgid "Custom Rules" +msgstr "Własne reguły" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Własne reguły pozwalają na arbitralne wykonanie poleceń iptables, które nie " +"są objęte składnią zapory. Polecenia wykonywane są po każdym restarcie " +"zapory, zaraz po załadowaniu zestawu reguł domyślnych." + +msgid "Destination IP address" +msgstr "Docelowy adres IP" + +msgid "Destination address" +msgstr "Adres docelowy" + +msgid "Destination port" +msgstr "Port docelowy" + +msgid "Destination zone" +msgstr "Strefa docelowa" + +msgid "Do not rewrite" +msgstr "Nie przepisuj" + +msgid "Drop invalid packets" +msgstr "Porzuć wadliwe pakiety" + +msgid "Enable" +msgstr "Włącz" + +msgid "Enable NAT Loopback" +msgstr "Włącz NAT Loopback" + +msgid "Enable SYN-flood protection" +msgstr "Włącz ochronę przed atakiem SYN-flood" + +msgid "Enable logging on this zone" +msgstr "Włącz logowanie na tej strefy" + +msgid "External IP address" +msgstr "Zewnętrzne adresy IP" + +msgid "External port" +msgstr "Port zewnętrzny" + +msgid "External zone" +msgstr "Strefa zewnętrzna" + +msgid "Extra arguments" +msgstr "Dodatkowe argumenty" + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/zones.lua # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +msgid "Firewall" +msgstr "Zapora" + +msgid "Firewall - Custom Rules" +msgstr "Zapora - Reguły własne" + +msgid "Firewall - Port Forwards" +msgstr "Zapora - Przekazywanie portów" + +msgid "Firewall - Traffic Rules" +msgstr "Zapora - Reguły ruchu" + +msgid "Firewall - Zone Settings" +msgstr "Zapora - Ustawienia strefy" + +msgid "Force connection tracking" +msgstr "Wymuś śledzenie połączeń" + +msgid "Forward" +msgstr "Przekazuj" + +msgid "Forward to" +msgstr "Przekazuj do" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "Z %s w %s" + +msgid "From %s in %s with source %s" +msgstr "Z %s w %s ze źródłem %s" + +msgid "From %s in %s with source %s and %s" +msgstr "Z %s w %s ze źródłem %s i %s" + +msgid "General Settings" +msgstr "Ustawienia ogólne" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 i IPv6" + +msgid "IPv4 only" +msgstr "Tylko IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "Tylko IPv6" + +msgid "Input" +msgstr "Ruch przychodzący" + +msgid "Inter-Zone Forwarding" +msgstr "Przekazywanie pomiędzy strefami" + +msgid "Internal IP address" +msgstr "Wewnętrzny adres IP" + +msgid "Internal port" +msgstr "Wewnętrzny port" + +msgid "Internal zone" +msgstr "Strefa wewnętrzna" + +msgid "Limit log messages" +msgstr "Ograniczenie logowania" + +msgid "MSS clamping" +msgstr "Dostosuj MSS" + +msgid "Masquerading" +msgstr "Maskarada" + +msgid "Match" +msgstr "Dopasuj" + +msgid "Match ICMP type" +msgstr "Dopasuj typ ICMP" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" +"Dopasuj przekazywany ruch do danego docelowego portu lub zakresu portów" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Dopasuj ruch przychodzący do danego portu docelowego lub zakresu portów na " +"tym hoście" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" +"Dopasuj przychodzący ruch pochodzący z danego portu źródłowego lub zakresu " +"portów na hoście klienta." + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Nazwa" + +msgid "New SNAT rule" +msgstr "Nowa reguła SNAT" + +msgid "New forward rule" +msgstr "Nowa reguła przekazywania (forward)" + +msgid "New input rule" +msgstr "Nowa reguła wejściowa (input)" + +msgid "New port forward" +msgstr "Nowe przekierowanie portu" + +msgid "New source NAT" +msgstr "Nowy NAT źródłowy" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "Dopasuj tylko przychodzący ruch skierowany do danego adresu IP." + +msgid "Only match incoming traffic from these MACs." +msgstr "Dopasuj tylko ruch z tych adresów MAC." + +msgid "Only match incoming traffic from this IP or range." +msgstr "Dopasuj tylko ruch przychodzący z tego adresu IP lub zakresu adresów." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" +"Dopasuj tylko ruch przychodzący z podanego portu źródłowego lub zakresu " +"portów na hoście klienta" + +msgid "Open ports on router" +msgstr "Otwarte porty na routerze" + +msgid "Other..." +msgstr "Inne..." + +msgid "Output" +msgstr "Wyjście (Output)" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" +"Przekazuje dodatkowe argumenty do iptables. Zachowaj szczególną ostrożność!" + +msgid "Port Forwards" +msgstr "Przekierowania portów" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"Przekierowanie portów pozwala komputerom z internetu na połączenia z " +"komputerami z sieci LAN." + +msgid "Protocol" +msgstr "Protokół" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" +"Przekieruj ruch przychodzący na podany port do wskazanego hosta w sieci " +"wewnętrznej" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Przekieruj ruch przychodzący do wskazanego hosta w sieci wewnętrznej" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "Ogranicz maskaradę do wskazanych sieci docelowych" + +msgid "Restrict Masquerading to given source subnets" +msgstr "Ogranicz maskaradę do wskazanych sieci źródłowych" + +# Wstawiłem rodzinę gdyż gdzieś wcześniej było tak opisane ale klasa pasuje mi tu bardziej. +# Obsy - niestety ale "rodzina". W gui dotyczy to wyboru IPv4/IPv6, więc "rodzina" a nie klasa. +msgid "Restrict to address family" +msgstr "Ogranicz do rodziny adresów" + +# Dosłownie przetłumaczone, nie bardzo wiem czy chodzi o czynność przepisywania pakietu przez usługę czy to jakieś ogólne sformułowanie... +msgid "Rewrite matched traffic to the given address." +msgstr "Przepisz dopasowany ruch do wskazanych adresów." + +# Jak wyżej chodzi o przepisanie pakietu przez usługę? +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" +"Przepisz dopasowany ruch do danego portu źródłowego. Można zostawić puste " +"aby przepisać tylko adres IP" + +msgid "Rewrite to source %s" +msgstr "Przepisz do źródła %s" + +msgid "Rewrite to source %s, %s" +msgstr "Przepisz do źródła %s, %s" + +msgid "SNAT IP address" +msgstr "Adres IP SNAT" + +msgid "SNAT port" +msgstr "Port SNAT" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "Źródłowy adres IP" + +msgid "Source MAC address" +msgstr "Źródłowy adres MAC" + +msgid "Source NAT" +msgstr "NAT źródłowy" + +# http://www.digipedia.pl/def/doc/id/677604507/name/SNAT/ +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"SNAT używany jest wtedy, gdy zmieniane są adresy pakietów połączenia " +"wychodzącego, czyli pakiety źródłowe. Wykonywany jest zawsze po routowaniu " +"(POSTROUTING), a więc w chwili, gdy pakiety są gotowe opuścić host. " +"IPmasquerading jest formą SNAT." + +msgid "Source address" +msgstr "Adres źródłowy" + +msgid "Source port" +msgstr "Port źródłowy" + +msgid "Source zone" +msgstr "Strefa źródłowa" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"Firewall tworzy strefy z Twoich interfejsów sieciowych, aby kontrolować ruch " +"sieciowy." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"Opcje poniżej kontrolują politykę przekazywania pomiędzy tą strefą (%s) a " +"innymi strefami. Strefy docelowe obejmują przekazywany ruch " +"pochodzący z %q. Strefy źródłowe match forwarded " +"traffic from other zones skierowane do %q. Reguła " +"przekazywania jest jednokierunkowa, np. przekazywanie z sieci LAN " +"do WAN nie implikuje pozwolenia na przekazywanie z sieci WAN do LAN." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"Ta strona pozwala zmienić zaawansowane ustawienia przekierowania portów. W " +"większości przypadków nie ma potrzeby zmieniać tych ustawień." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"Ta strona pozwala zmienić zaawansowane ustawienia reguły ruchu sieciowego, " +"takie jak pasujące źródło i hosty docelowe." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"Ta sekcja definiuje ustawienia ogólne %q. Opcje \"wejście\" i " +"\"wyjście\" określają domyślną politykę dla ruchu przychodzącego i " +"wychodzącego w tej strefie, podczas gdy \"przekazywanie\" opisuje " +"politykę ruchu przekazywanego pomiędzy różnymi sieciami wewnątrz strefy. " +"Objęte sieci określają dostępne sieci będące członkami tej strefy." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "Do %s w %s na tym urządzeniu" + +msgid "To %s in %s" +msgstr "Do %s w %s" + +msgid "To %s on this device" +msgstr "Do %s na tym urządzeniu" + +msgid "To %s, %s in %s" +msgstr "Do %s, %s w %s" + +msgid "To source IP" +msgstr "Do źródłowego IP" + +msgid "To source port" +msgstr "Do źródłowego portu" + +msgid "Traffic Rules" +msgstr "Reguły ruchu sieciowego" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"Reguły ruchu sieciowego definiują politykę dla pakietów przechodzących " +"między strefami, na przykład aby odrzucać ruch między konkretnymi hostami " +"albo otworzyć porty WAN routera." + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "Przez %s" + +msgid "Via %s at %s" +msgstr "Przez %s w %s" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"Możesz określić kilka wybierając \"-- własne --\" i wpisując protokoły " +"rozdzielone spacją." + +msgid "Zone %q" +msgstr "Strefa %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Strefa ⇒ Przekazywanie" + +msgid "Zones" +msgstr "Strefy" + +msgid "accept" +msgstr "akceptuj" + +msgid "any" +msgstr "dowolny" + +msgid "any host" +msgstr "dowolny host" + +msgid "any router IP" +msgstr "dowolne IP routera" + +msgid "any zone" +msgstr "dowolna strefa" + +msgid "don't track" +msgstr "nie śledź" + +msgid "drop" +msgstr "porzucaj" + +msgid "reject" +msgstr "odrzucaj" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/pt-br/firewall.po b/feeds/luci/applications/luci-app-firewall/po/pt-br/firewall.po new file mode 100644 index 0000000..2d601f8 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/pt-br/firewall.po @@ -0,0 +1,522 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2014-06-21 19:03+0200\n" +"Last-Translator: Éder \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s in %s" + +msgid "%s%s with %s" +msgstr "%s%s com %s" + +msgid "%s, %s in %s" +msgstr "%s, %s em %s" + +msgid "(Unnamed Entry)" +msgstr "(Entrada Sem Nome)" + +msgid "(Unnamed Rule)" +msgstr "(Regra Sem Nome)" + +msgid "(Unnamed SNAT)" +msgstr "(SNAT Sem Nome)" + +msgid "%d pkts. per %s" +msgstr "%d pcts. por %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "%d pcts. por %s, pico %d pcts." + +msgid "%s and limit to %s" +msgstr "%s e limite a %s" + +msgid "Action" +msgstr "Ação" + +msgid "Add" +msgstr "Adicionar" + +msgid "Add and edit..." +msgstr "Adicionar e editar..." + +msgid "Advanced Settings" +msgstr "Configurações Avançadas" + +msgid "Allow forward from source zones:" +msgstr "Permite o encaminhamento da zona de origem:" + +msgid "Allow forward to destination zones:" +msgstr "Permite o encaminhamento para a zona de destino:" + +msgid "Any" +msgstr "Qualquer" + +msgid "Covered networks" +msgstr "Redes cobertas" + +msgid "Custom Rules" +msgstr "Regras Personalizadas" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"As regras personalizadas permitem executar comandos iptables arbitrários não " +"cobertos por esta ferramenta. Os comandos serão executados após cada " +"reinício do firewall, logo após a carga do conjunto de regras padrão." + +msgid "Destination IP address" +msgstr "Endereço IP de destino" + +msgid "Destination address" +msgstr "Endereço de destino" + +msgid "Destination port" +msgstr "Porta de destino" + +msgid "Destination zone" +msgstr "Zona de destino" + +msgid "Do not rewrite" +msgstr "Não sobrescreva" + +msgid "Drop invalid packets" +msgstr "Descartar pacotes inválidos" + +msgid "Enable" +msgstr "Habilitar" + +msgid "Enable NAT Loopback" +msgstr "Habilite o Loopback do NAT" + +msgid "Enable SYN-flood protection" +msgstr "Habilite proteção contra SYN-flood" + +msgid "Enable logging on this zone" +msgstr "Habilite o registro nesta zona" + +msgid "External IP address" +msgstr "Endereço IP externo" + +msgid "External port" +msgstr "Porta Externa" + +msgid "External zone" +msgstr "Zona externa" + +msgid "Extra arguments" +msgstr "Argumentos extras" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall - Custom Rules" +msgstr "Firewall - Regras personalizadas" + +msgid "Firewall - Port Forwards" +msgstr "Firewall - Encaminhamento de Portas" + +msgid "Firewall - Traffic Rules" +msgstr "Firewall - Regras de Tráfego" + +msgid "Firewall - Zone Settings" +msgstr "Firewall - Configurações de Zona" + +msgid "Force connection tracking" +msgstr "Force o rastreamento da conexão" + +msgid "Forward" +msgstr "Encaminhar" + +msgid "Forward to" +msgstr "Encaminhar para" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "Vindo de %s em %s" + +msgid "From %s in %s with source %s" +msgstr "Vindo de %s em %s com origem %s" + +msgid "From %s in %s with source %s and %s" +msgstr "Vindo de %s em %s com origem %s e %s" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 only" +msgstr "Somente IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "Somente IPv6" + +msgid "Input" +msgstr "Entrada" + +msgid "Inter-Zone Forwarding" +msgstr "Encaminhamento entre Zonas" + +msgid "Internal IP address" +msgstr "Endereço IP interno" + +msgid "Internal port" +msgstr "Porta Interna" + +msgid "Internal zone" +msgstr "Zona interna" + +msgid "Limit log messages" +msgstr "Limita as mensagens de registro" + +msgid "MSS clamping" +msgstr "Ajuste do MSS" + +msgid "Masquerading" +msgstr "Mascaramento" + +msgid "Match" +msgstr "casol" + +msgid "Match ICMP type" +msgstr "Casa com ICMP tipo" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" +"Casa o tráfego encaminhado para uma porta ou faixa de portas de destino " +"específica." + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Casa o tráfego entrante direcionado para uma porta ou faixa de portas de " +"destino específica neste computador" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" +"Casa o tráfego entrante originado de uma porta ou faixa de portas no " +"equipamento cliente." + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Nome" + +msgid "New SNAT rule" +msgstr "Nova regra de SNAT" + +msgid "New forward rule" +msgstr "Nova regra de encaminhamento" + +msgid "New input rule" +msgstr "Nova regra de entrada" + +msgid "New port forward" +msgstr "Novo encaminhamento de porta" + +msgid "New source NAT" +msgstr "Nova origem NAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" +"Somente case o tráfego entrante direcionado para o endereço IP fornecido." + +msgid "Only match incoming traffic from these MACs." +msgstr "Somente case o tráfego entrante destes endereços MAC." + +msgid "Only match incoming traffic from this IP or range." +msgstr "Somente case o tráfego entrante desta faixa de endereços IP." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" +"Somente case o tráfego entrante vindo da porta de origem fornecida ou " +"intervalo de portas no equipamento cliente" + +msgid "Open ports on router" +msgstr "Abrir portas no roteador" + +msgid "Other..." +msgstr "Outro..." + +msgid "Output" +msgstr "Saída" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "Passa argumentos adicionais para o iptables. Use com cuidado!" + +msgid "Port Forwards" +msgstr "Encaminhamentos de Porta" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"O encaminhamento de portas permite que computadores remotos na Internet " +"conectem a um computador ou serviço específico dentro da rede local privada." + +msgid "Protocol" +msgstr "Protocolo" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" +"Redireciona tráfego entrante para a porta especificada no computador interno" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Redireciona tráfego entrante para o computador interno especificado" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "Restringe o mascaramento para uma subrede de destino específica" + +msgid "Restrict Masquerading to given source subnets" +msgstr "Restringe o mascaramento para uma subrede de origem específica" + +msgid "Restrict to address family" +msgstr "Restringe para uma família de endereços" + +msgid "Rewrite matched traffic to the given address." +msgstr "Reescreva o tráfego correspondente para o endereço fornecido." + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" +"Reescreva o tráfego correspondente para a porta de origem fornecida. Pode " +"ficar em branco para somente reescrever o endereço IP." + +msgid "Rewrite to source %s" +msgstr "Reescrever para a origem %s" + +msgid "Rewrite to source %s, %s" +msgstr "Reescrever para a origem %s, %s" + +msgid "SNAT IP address" +msgstr "Endereço IP da SNAT" + +msgid "SNAT port" +msgstr "Porta da SNAT" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "Endereço IP de origem" + +msgid "Source MAC address" +msgstr "Endereço MAC de origem" + +msgid "Source NAT" +msgstr "NAT origem" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"NAT origem é uma forma específica de mascaramento que permite o controle " +"fino do endereço IP de origem usado no tráfego sainte. Por exemplo, para " +"mapear múltiplos endereços WAN para subredes internas." + +msgid "Source address" +msgstr "Endereço de origem" + +msgid "Source port" +msgstr "Porta de origem" + +msgid "Source zone" +msgstr "Zona de origem" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"O firewall cria zonas sobre as interfaces de rede para controlar o fluxo do " +"tráfego de rede." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"As opções abaixo controlam as políticas de encaminhamento entre esta zona " +"(%s) e outras zonas. Zonas de destino incluem tráfego encaminhado " +"originado de %q. Zonas de origem casam com tráfego " +"encaminhado de outras zonas apontando para %q. A regra de " +"encaminhamento é unidirecional, ex: um encaminhamento da LAN para " +"WAN não implica na permissão de encaminhar da WAN para LAN." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"Esta página permite que você mude propriedades avançadas da entrada do " +"encaminhamento de porta. Na maioria dos casos, não é necessário modificar " +"estas configurações." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"Esta página permite que você mude propriedades avançadas da entrada da regra " +"de tráfego, como os equipamentos de origem e destino." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"Esta seção define as propriedades comuns de %q. As opções de entrada e saída definem as políticas padrão para o tráfego entrando e " +"saindo desta zona, enquanto a opção de encaminhamento descreve a " +"política para encaminhar o tráfego entre diferentes redes dentro da zona. " +"Redes Cobertas especificam que redes disponíveis são membros desta " +"zona." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "Para %s em %s neste dispositivo" + +msgid "To %s in %s" +msgstr "Para %s em %s" + +msgid "To %s on this device" +msgstr "Para %s neste dispositivo" + +msgid "To %s, %s in %s" +msgstr "Para %s, %s em %s" + +msgid "To source IP" +msgstr "Para o endereço IP de origem" + +msgid "To source port" +msgstr "Para a porta de origem" + +msgid "Traffic Rules" +msgstr "Regras de tráfego" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"Regras de tráfego definem políticas para a passagem de pacotes entre as " +"diferentes zonas. Por exemplo, rejeitar o tráfego entre certos equipamentos " +"ou abrir portas WAN no roteador." + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "Via %s" + +msgid "Via %s at %s" +msgstr "Via %s at %s" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"Você pode especificar múltiplas entradas selecionando \"-- personalizado --" +"\" e então entrando os protocolos separados por espaço." + +msgid "Zone %q" +msgstr "Zona %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Zona ⇒ Encaminhamentos" + +msgid "Zones" +msgstr "Zonas" + +msgid "accept" +msgstr "aceitar" + +msgid "any" +msgstr "qualquer" + +msgid "any host" +msgstr "qualquer equipamento" + +msgid "any router IP" +msgstr "qualquer endereço IP do roteador" + +msgid "any zone" +msgstr "qualquer zona" + +msgid "don't track" +msgstr "não rastrear" + +msgid "drop" +msgstr "descartar" + +msgid "reject" +msgstr "rejeitar" + +# 20140621: edersg: tradução +msgid "traffic" +msgstr "Tráfego" diff --git a/feeds/luci/applications/luci-app-firewall/po/pt/firewall.po b/feeds/luci/applications/luci-app-firewall/po/pt/firewall.po new file mode 100644 index 0000000..f552616 --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/pt/firewall.po @@ -0,0 +1,505 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2013-06-03 13:37+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s em %s" + +msgid "%s%s with %s" +msgstr "%s%s with %s" + +msgid "%s, %s in %s" +msgstr "%s, %s em %s" + +msgid "(Unnamed Entry)" +msgstr "(Entrada Sem Nome)" + +msgid "(Unnamed Rule)" +msgstr "(Regra Sem Nome)" + +msgid "(Unnamed SNAT)" +msgstr "(SNAT Sem Nome)" + +msgid "%d pkts. per %s" +msgstr "%d pkts. por %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "Acção" + +msgid "Add" +msgstr "Adicionar" + +msgid "Add and edit..." +msgstr "Adicionar e editar..." + +msgid "Advanced Settings" +msgstr "Definições Avançadas" + +msgid "Allow forward from source zones:" +msgstr "Permitir encaminhamento de zonas de origem" + +msgid "Allow forward to destination zones:" +msgstr "Permitir encaminhamento para zonas de destino" + +msgid "Any" +msgstr "Qualquer" + +msgid "Covered networks" +msgstr "Redes abrangidas" + +msgid "Custom Rules" +msgstr "Regras Personalizadas" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"As regras personalizadas permitem-lhe executar comandos arbitrários iptables " +"os quais não são possiveis de aplicar usando a framework da firewall. Os " +"comandos são executados a seguir ao reinicio da firewall, logo a seguir ao " +"conjunto de regras predefinidas serem carregadas." + +msgid "Destination IP address" +msgstr "Endereço IP de destino" + +msgid "Destination address" +msgstr "Endereço de destino" + +msgid "Destination port" +msgstr "Porta de destino" + +msgid "Destination zone" +msgstr "Zona de destino" + +msgid "Do not rewrite" +msgstr "Não re-escrever" + +msgid "Drop invalid packets" +msgstr "Cancelar pacotes inválidos" + +msgid "Enable" +msgstr "Ativar" + +msgid "Enable NAT Loopback" +msgstr "Ativar NAT Loopback" + +msgid "Enable SYN-flood protection" +msgstr "Ativar a Proteção SYN-flood" + +msgid "Enable logging on this zone" +msgstr "Ativar registo nesta zona" + +msgid "External IP address" +msgstr "Endereço IP externo" + +msgid "External port" +msgstr "Porta externa" + +msgid "External zone" +msgstr "Zona externa" + +msgid "Extra arguments" +msgstr "Argumentos extra" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall - Custom Rules" +msgstr "Firewall - Regras Personalizadas" + +msgid "Firewall - Port Forwards" +msgstr "Firewall - Encaminhamento de Portas" + +msgid "Firewall - Traffic Rules" +msgstr "Firewall - Regras de Tráfego" + +msgid "Firewall - Zone Settings" +msgstr "Firewall - Definições de Zona" + +msgid "Force connection tracking" +msgstr "Forçar rasto de ligação" + +msgid "Forward" +msgstr "Encaminhar" + +msgid "Forward to" +msgstr "Encaminhar para" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "De %s em %s" + +msgid "From %s in %s with source %s" +msgstr "De %s em %s com origem %s" + +msgid "From %s in %s with source %s and %s" +msgstr "De %s em %s com origem %s e %s" + +msgid "General Settings" +msgstr "Definições Gerais" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 only" +msgstr "Só IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "Só IPv6" + +msgid "Input" +msgstr "Entrada" + +msgid "Inter-Zone Forwarding" +msgstr "Encaminhamento Inter-Zona" + +msgid "Internal IP address" +msgstr "Endereço IP interno" + +msgid "Internal port" +msgstr "Porta interna" + +msgid "Internal zone" +msgstr "Zona Interna" + +msgid "Limit log messages" +msgstr "Limitar registo de mensagens" + +#, fuzzy +msgid "MSS clamping" +msgstr "MSS-Correction" + +msgid "Masquerading" +msgstr "" + +msgid "Match" +msgstr "Corresponder" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" +"O tráfego encaminhado corresponde a uma determinada porta de destino ou " +"intervalo de portas." + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"O tráfego de entrada corresponde a uma dada porta de destino ou intervalo de " +"portas neste host" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" +"O tráfego de entrada corresponde a uma dada porta ou de um intervalo de " +"portas no host cliente." + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Nome" + +msgid "New SNAT rule" +msgstr "Nova regra SNAT" + +msgid "New forward rule" +msgstr "Nova regra de encaminhamento" + +msgid "New input rule" +msgstr "Nova regra de entrada" + +msgid "New port forward" +msgstr "Novo encaminhamento de porta" + +msgid "New source NAT" +msgstr "Nova origem de NAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "Só se tráfego de entrada corresponder ao endereço IP fornecido." + +msgid "Only match incoming traffic from these MACs." +msgstr "Só se o tráfego de entrada corresponder a um destes MACs." + +msgid "Only match incoming traffic from this IP or range." +msgstr "Só se o tráfego de entrada corresponder a este IP ou intervalo." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" +"Só se o tráfego de entrada corresponder à porta de origem fornecida ou de um " +"intervalo de portas no host cliente" + +msgid "Open ports on router" +msgstr "Abrir portas no router" + +msgid "Other..." +msgstr "Outro..." + +msgid "Output" +msgstr "Saída" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "Passa argumentos adicionais para o iptables. Usar com cuidado!" + +msgid "Port Forwards" +msgstr "Encaminhamento de Portas" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"O Encaminhamento de Portas permite que computadores remotos na internet se " +"liguem a um computador ou serviço especifico na rede privada (LAN)." + +msgid "Protocol" +msgstr "Protocolo" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" +"Redirecionar a entrada de trafego correspondente à porta fornecida no host " +"interno" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Redirecionar o tráfego de entrada correspondente para o host interno" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "Restringir a família de endereços" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "Re-escrever para a origem %s" + +msgid "Rewrite to source %s, %s" +msgstr "Re-escrever para a origem %s, %s" + +msgid "SNAT IP address" +msgstr "Endereço IP da SNAT" + +msgid "SNAT port" +msgstr "Porta SNAT" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "Endereço IP de origem" + +msgid "Source MAC address" +msgstr "Endereço MAC de origem" + +msgid "Source NAT" +msgstr "NAT de origem" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"NAT de origem é uma forma especifica de mascarar que permite um controlo " +"melhorado sobre o IP de origem usado para o tráfego de saída, por exemplo, " +"para mapear múltiplos endereços para as sub-redes internas." + +msgid "Source address" +msgstr "Endereço de origem" + +msgid "Source port" +msgstr "Porta de origem" + +msgid "Source zone" +msgstr "Zona de origem" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"A firewall cria zonas sobre as interfaces de rede para controlar o fluxo do " +"tráfego." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"Esta página permite-lhe alterar as definições avançadas da regra de entrada " +"de tráfego, tal como correspondências de hosts de origem e destino." + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "Para %s no %s em este dispositivo" + +msgid "To %s in %s" +msgstr "Para %s em %s" + +msgid "To %s on this device" +msgstr "Para %s em este dispositivo" + +msgid "To %s, %s in %s" +msgstr "Para %s, %s em %s" + +msgid "To source IP" +msgstr "Para o IP de origem" + +msgid "To source port" +msgstr "Para a porta de origem" + +msgid "Traffic Rules" +msgstr "Regras de Tráfego" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"As Regras de Tráfego definem políticas para os pacotes que viajam entre " +"diferentes zonas, por exemplo, para rejeitar trafego entre certos hosts ou " +"para abrir portas WAN no router." + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "Via %s" + +msgid "Via %s at %s" +msgstr "Via %s no %s" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"Pode especificar múltiplos seleccionando \"-- personalizado --\" e depois " +"introduzir os protocolos separados por espaço." + +msgid "Zone %q" +msgstr "Zona %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Zona ⇒ Encaminhamentos" + +msgid "Zones" +msgstr "Zonas" + +msgid "accept" +msgstr "aceitar" + +msgid "any" +msgstr "qualquer" + +msgid "any host" +msgstr "qualquer host" + +msgid "any router IP" +msgstr "qualquer IP do router" + +msgid "any zone" +msgstr "qualquer zona" + +msgid "don't track" +msgstr "não seguir" + +msgid "drop" +msgstr "drop" + +msgid "reject" +msgstr "rejeitar" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/ro/firewall.po b/feeds/luci/applications/luci-app-firewall/po/ro/firewall.po new file mode 100644 index 0000000..69b911e --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/ro/firewall.po @@ -0,0 +1,475 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-29 19:33+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s în %s" + +msgid "%s%s with %s" +msgstr "%s%s cu %s" + +msgid "%s, %s in %s" +msgstr "%s, %s în %s" + +msgid "(Unnamed Entry)" +msgstr "(Intrare fără nume)" + +msgid "(Unnamed Rule)" +msgstr "(Regulă fără nume)" + +msgid "(Unnamed SNAT)" +msgstr "(SNAT fără nume)" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "Acţiune" + +msgid "Add" +msgstr "Adaugă" + +msgid "Add and edit..." +msgstr "Adaugă şi editează..." + +msgid "Advanced Settings" +msgstr "Setări avansate" + +msgid "Allow forward from source zones:" +msgstr "Permite trecerea din zonele sursa." + +msgid "Allow forward to destination zones:" +msgstr "Permite trecerea catre zonele sursa." + +msgid "Any" +msgstr "Oricare" + +msgid "Covered networks" +msgstr "Retele acoperite" + +msgid "Custom Rules" +msgstr "Reguli suplimentare" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" + +msgid "Destination IP address" +msgstr "Destinaţie adresă IP" + +msgid "Destination address" +msgstr "Destinaţie adresă" + +msgid "Destination port" +msgstr "Portul destinatie" + +msgid "Destination zone" +msgstr "Zona destinatie" + +msgid "Do not rewrite" +msgstr "Nu rescrie" + +msgid "Drop invalid packets" +msgstr "Descarcă pachetele invalide" + +msgid "Enable" +msgstr "Activează" + +msgid "Enable NAT Loopback" +msgstr "Activează loopback NAT" + +msgid "Enable SYN-flood protection" +msgstr "Activează protecţia SYN-flood" + +msgid "Enable logging on this zone" +msgstr "Activeaza log in aceasta zona" + +msgid "External IP address" +msgstr "Adresă IP externă" + +msgid "External port" +msgstr "Port extern" + +msgid "External zone" +msgstr "Zonă externă" + +msgid "Extra arguments" +msgstr "" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall - Custom Rules" +msgstr "Firewall - Reguli particularizate" + +msgid "Firewall - Port Forwards" +msgstr "" + +msgid "Firewall - Traffic Rules" +msgstr "" + +msgid "Firewall - Zone Settings" +msgstr "Setari zona la firewall" + +msgid "Force connection tracking" +msgstr "Forteaza urmarirea conexiunilor" + +msgid "Forward" +msgstr "Forward" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "Setari generale" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 şi IPv6" + +msgid "IPv4 only" +msgstr "doar IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "doar IPv6" + +msgid "Input" +msgstr "Intrare" + +msgid "Inter-Zone Forwarding" +msgstr "Forwardare intre-zone" + +msgid "Internal IP address" +msgstr "Adresa IP interna" + +msgid "Internal port" +msgstr "Port intern" + +msgid "Internal zone" +msgstr "Zonă internă" + +msgid "Limit log messages" +msgstr "Limitează mesaje în log" + +msgid "MSS clamping" +msgstr "Ajustare MSS" + +msgid "Masquerading" +msgstr "Translatare" + +msgid "Match" +msgstr "Potrivire" + +msgid "Match ICMP type" +msgstr "Potriveste pe tipul de ICMP" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Nume" + +msgid "New SNAT rule" +msgstr "Regulă nouă SNAT" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "" + +msgid "New port forward" +msgstr "" + +msgid "New source NAT" +msgstr "" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "Altele..." + +msgid "Output" +msgstr "Ieşire" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" + +msgid "Protocol" +msgstr "Protocol" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "Sursă adresă IP" + +msgid "Source MAC address" +msgstr "Sursă adresă MAC" + +msgid "Source NAT" +msgstr "Sursă NAT" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +msgid "Source address" +msgstr "Adresa sursa" + +msgid "Source port" +msgstr "Port sursa" + +msgid "Source zone" +msgstr "Zona sursa" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "Zona %q" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "Zone" + +msgid "accept" +msgstr "accept" + +msgid "any" +msgstr "oricare" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "" + +msgid "reject" +msgstr "" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/ru/firewall.po b/feeds/luci/applications/luci-app-firewall/po/ru/firewall.po new file mode 100644 index 0000000..98bc92d --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/ru/firewall.po @@ -0,0 +1,545 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: firewall\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2013-09-05 16:02+0200\n" +"Last-Translator: datasheet \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "%s in %s" +msgstr "%s в %s" + +msgid "%s%s with %s" +msgstr "%s%s с %s" + +msgid "%s, %s in %s" +msgstr "%s, %s в %s" + +msgid "(Unnamed Entry)" +msgstr "(Запись без имени)" + +msgid "(Unnamed Rule)" +msgstr "(Правило без имени)" + +msgid "(Unnamed SNAT)" +msgstr "(SNAT без имени)" + +msgid "%d pkts. per %s" +msgstr "%d пакетов за %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "%d пакетов за %s, подряд %d пакетов" + +msgid "%s and limit to %s" +msgstr "%s с пределом в %s" + +msgid "Action" +msgstr "Действие" + +msgid "Add" +msgstr "Добавить" + +msgid "Add and edit..." +msgstr "Добавить и редактировать..." + +msgid "Advanced Settings" +msgstr "Расширенные настройки" + +msgid "Allow forward from source zones:" +msgstr "Разрешить перенаправление из зон-источников:" + +msgid "Allow forward to destination zones:" +msgstr "Разрешить перенаправление в зоны назначения:" + +msgid "Any" +msgstr "Любой" + +msgid "Covered networks" +msgstr "Использовать сети" + +msgid "Custom Rules" +msgstr "Пользовательские правила" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Пользовательские правила позволяют выполнять произвольные команды iptables, " +"которые так или иначе не покрываются данным фреймворком межсетевого экрана. " +"Команды выполняются при каждом перезапуске межсетевого экрана, сразу после " +"того, как загружен набор правил по умолчанию." + +msgid "Destination IP address" +msgstr "IP-адрес назначения" + +msgid "Destination address" +msgstr "Адрес назначения" + +msgid "Destination port" +msgstr "Порт назначения" + +msgid "Destination zone" +msgstr "Зона назначения" + +msgid "Do not rewrite" +msgstr "Не перезаписывать" + +msgid "Drop invalid packets" +msgstr "Не пропускать некорректные пакеты" + +msgid "Enable" +msgstr "Включить" + +#, fuzzy +msgid "Enable NAT Loopback" +msgstr "Включить NAT Loopback" + +msgid "Enable SYN-flood protection" +msgstr "Включить защиту от SYN-flood атак" + +msgid "Enable logging on this zone" +msgstr "Включить журналирование в этой зоне" + +msgid "External IP address" +msgstr "Внешний IP-адрес" + +msgid "External port" +msgstr "Внешний порт" + +msgid "External zone" +msgstr "Внешняя зона" + +msgid "Extra arguments" +msgstr "Дополнительные аргументы" + +msgid "Firewall" +msgstr "Межсетевой экран" + +msgid "Firewall - Custom Rules" +msgstr "Межсетевой экран - Пользовательские правила" + +msgid "Firewall - Port Forwards" +msgstr "Межсетевой экран - Перенаправление портов" + +msgid "Firewall - Traffic Rules" +msgstr "Межсетевой экран - Правила для трафика" + +msgid "Firewall - Zone Settings" +msgstr "Межсетевой экран - Настройка зон" + +msgid "Force connection tracking" +msgstr "Включить отслеживание соединений" + +msgid "Forward" +msgstr "Перенаправление" + +msgid "Forward to" +msgstr "Перенаправлять в" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "Из %s в %s" + +msgid "From %s in %s with source %s" +msgstr "Из %s в %s с источником %s" + +msgid "From %s in %s with source %s and %s" +msgstr "Из %s в %s с источниками %s и %s" + +msgid "General Settings" +msgstr "Общие настройки" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 и IPv6" + +msgid "IPv4 only" +msgstr "Только IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "Только IPv6" + +msgid "Input" +msgstr "Входящий" + +msgid "Inter-Zone Forwarding" +msgstr "Перенаправление между зонами" + +msgid "Internal IP address" +msgstr "Внутренний IP-адрес" + +msgid "Internal port" +msgstr "Внутренний порт" + +msgid "Internal zone" +msgstr "Внутренняя зона" + +msgid "Limit log messages" +msgstr "Ограничить журнал сообщений" + +msgid "MSS clamping" +msgstr "Ограничение MSS" + +msgid "Masquerading" +msgstr "Маскарадинг" + +#, fuzzy +msgid "Match" +msgstr "Выбирать" + +msgid "Match ICMP type" +msgstr "Соответствовать ICMP типу" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" +"Перенаправить соответствующий трафик на определённый порт или диапазон " +"портов. " + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Выбирать входящий трафик, направленный на порт или диапазон портов данного " +"хоста" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" +"Выбирать входящий трафик, исходящий из порта или диапазона портов " +"клиентского хоста." + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Имя" + +msgid "New SNAT rule" +msgstr "Новое правило SNAT" + +msgid "New forward rule" +msgstr "Новое правило перенаправления" + +msgid "New input rule" +msgstr "Новое правило для входящего трафика" + +msgid "New port forward" +msgstr "Новое перенаправление порта" + +msgid "New source NAT" +msgstr "Новый SNAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "Выбирать только входящий трафик, направленный на указанный IP-адрес." + +msgid "Only match incoming traffic from these MACs." +msgstr "Выбирать только входящий трафик от этих MAC-адресов." + +msgid "Only match incoming traffic from this IP or range." +msgstr "" +"Выбирать только входящий трафик от этого IP-адреса или диапазона адресов." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" +"Выбирать только входящий трафик, исходящий из указанного порта или диапазона " +"портов клиентского хоста" + +msgid "Open ports on router" +msgstr "Открыть порты на маршрутизаторе" + +msgid "Other..." +msgstr "Другое..." + +msgid "Output" +msgstr "Исходящий" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" +"Передаёт дополнительные аргументы iptables. Используйте с осторожностью!" + +msgid "Port Forwards" +msgstr "Перенаправления портов" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"Перенаправленные портов позволяет удалённым компьютерам из Интернета " +"соединяться с компьютером или службой внутри частной локальной сети." + +msgid "Protocol" +msgstr "Протокол" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "Перенаправить входящий трафик на указанный порт хоста внутренней сети" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Перенаправить входящий трафик на указанный хост внутренней сети" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "Использовать маскарадинг только для указанных подсетей-получателей" + +msgid "Restrict Masquerading to given source subnets" +msgstr "Использовать маскарадинг только для указанных подсетей-отправителей" + +msgid "Restrict to address family" +msgstr "Использовать только семейство протоколов" + +msgid "Rewrite matched traffic to the given address." +msgstr "Перенаправлять соответствующий трафик к указанному адресу." + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" +"Перенаправлять соответствующий трафик к указанному порту источника. Может " +"быть пустым в случае, если необходимо перенаправить только IP-адрес." + +msgid "Rewrite to source %s" +msgstr "Перенаправлять к источнику %s" + +msgid "Rewrite to source %s, %s" +msgstr "Перенаправлять к источнику %s, %s" + +msgid "SNAT IP address" +msgstr "IP-адрес SNAT" + +msgid "SNAT port" +msgstr "Порт SNAT" + +msgid "Saturday" +msgstr "" + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# msgid "Traffic Redirection" +# msgstr "" +# msgid "" +# "Traffic redirection allows you to change the destination address of " +# "forwarded packets." +# msgstr "" +# msgid "Overview" +# msgstr "" +# msgid "Name" +# msgstr "" +# msgid "Source zone" +# msgstr "" +# msgid "Source MAC-address" +# msgstr "" +# msgid "Source port" +# msgstr "" +# msgid "Protocol" +# msgstr "" +msgid "Source IP address" +msgstr "IP-адрес источника" + +msgid "Source MAC address" +msgstr "MAC-адрес источника" + +msgid "Source NAT" +msgstr "SNAT" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"SNAT - это особая форма маскарадинга (masquerading), позволяющая " +"осуществлять детальный контроль над IP-адресом источника для исходящего " +"трафика, например, перенаправление нескольких WAN-адресов во внутреннюю " +"подсеть." + +msgid "Source address" +msgstr "Адрес источника" + +msgid "Source port" +msgstr "Порт источника" + +msgid "Source zone" +msgstr "Зона-источник" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "Межсетевой экран создает зоны в вашей сети для контроля трафика." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"Данные настройки управляют перенаправлением между этой (%s) и другими " +"зонами. Трафиком зон-получателей является трафик исходящий " +"из %q. Трафиком зон-источников является трафик " +"направленый в %q. Перенаправление является " +"однонаправленным, то есть перанаправление из lan в wan не " +"допускает перенаправление трафика из wan в lan." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"На этой странице можно изменить расширенные настройки перенаправления " +"портов. В большинстве случаев нет необходимости изменять эти параметры." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"На этой странице можно изменить расширенные настройки правил для трафика. В " +"большинстве случаев нет необходимости изменять эти параметры." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"Данная секция позволяет изменять общие настройки %q. Опции входящий " +"и исходящий устанавливают политику по умолчанию для входящего и " +"исходящего трафика. Опция перенаправление позволяет установить " +"политику для трафика, который перенаправляется через несколько сетей в зоне. " +"Пункт использовать сети позволяет указать, какие сети являются " +"частью данной зоны." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "К %s, порту %s на этом устройстве" + +msgid "To %s in %s" +msgstr "К %s в %s" + +msgid "To %s on this device" +msgstr "К %s на этом устройстве" + +msgid "To %s, %s in %s" +msgstr "К %s, %s в %s" + +msgid "To source IP" +msgstr "К IP-адресу источника" + +msgid "To source port" +msgstr "К порту источника" + +msgid "Traffic Rules" +msgstr "Правила для трафика" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"Правила для трафика определяют политику прохождения пакетов между разными " +"зонами, например, запрет трафика между некоторыми хостами или открытие WAN-" +"портов маршрутизатора." + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "Через %s" + +msgid "Via %s at %s" +msgstr "Через %s, порт %s" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"Вы можете указать несколько, выбрав \"-- пользовательский --\" и перечислив " +"через пробел названия протоколов." + +msgid "Zone %q" +msgstr "Зона %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Зона ⇒ Перенаправления" + +msgid "Zones" +msgstr "Зоны" + +msgid "accept" +msgstr "принимать" + +msgid "any" +msgstr "любой" + +msgid "any host" +msgstr "любого хоста" + +msgid "any router IP" +msgstr "любой IP-адрес маршрутизатора" + +msgid "any zone" +msgstr "любой зоны" + +msgid "don't track" +msgstr "не отслеживать" + +msgid "drop" +msgstr "не обрабатывать" + +msgid "reject" +msgstr "отвергать" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/sk/firewall.po b/feeds/luci/applications/luci-app-firewall/po/sk/firewall.po new file mode 100644 index 0000000..f45e74b --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/sk/firewall.po @@ -0,0 +1,471 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add and edit..." +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow forward from source zones:" +msgstr "" + +msgid "Allow forward to destination zones:" +msgstr "" + +msgid "Any" +msgstr "" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" + +msgid "Destination IP address" +msgstr "" + +msgid "Destination address" +msgstr "" + +msgid "Destination port" +msgstr "" + +msgid "Destination zone" +msgstr "" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable NAT Loopback" +msgstr "" + +msgid "Enable SYN-flood protection" +msgstr "" + +msgid "Enable logging on this zone" +msgstr "" + +msgid "External IP address" +msgstr "" + +msgid "External port" +msgstr "" + +msgid "External zone" +msgstr "" + +msgid "Extra arguments" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Firewall - Custom Rules" +msgstr "" + +msgid "Firewall - Port Forwards" +msgstr "" + +msgid "Firewall - Traffic Rules" +msgstr "" + +msgid "Firewall - Zone Settings" +msgstr "" + +msgid "Force connection tracking" +msgstr "" + +msgid "Forward" +msgstr "" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Input" +msgstr "" + +msgid "Inter-Zone Forwarding" +msgstr "" + +msgid "Internal IP address" +msgstr "" + +msgid "Internal port" +msgstr "" + +msgid "Internal zone" +msgstr "" + +msgid "Limit log messages" +msgstr "" + +msgid "MSS clamping" +msgstr "" + +msgid "Masquerading" +msgstr "" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "New SNAT rule" +msgstr "" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "" + +msgid "New port forward" +msgstr "" + +msgid "New source NAT" +msgstr "" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "" + +msgid "Output" +msgstr "" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "" + +msgid "Source MAC address" +msgstr "" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "Source port" +msgstr "" + +msgid "Source zone" +msgstr "" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "" + +msgid "accept" +msgstr "" + +msgid "any" +msgstr "" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "" + +msgid "reject" +msgstr "" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/sv/firewall.po b/feeds/luci/applications/luci-app-firewall/po/sv/firewall.po new file mode 100644 index 0000000..2e169fb --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/sv/firewall.po @@ -0,0 +1,472 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add and edit..." +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow forward from source zones:" +msgstr "" + +msgid "Allow forward to destination zones:" +msgstr "" + +msgid "Any" +msgstr "" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" + +msgid "Destination IP address" +msgstr "" + +msgid "Destination address" +msgstr "" + +msgid "Destination port" +msgstr "" + +msgid "Destination zone" +msgstr "" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable NAT Loopback" +msgstr "" + +msgid "Enable SYN-flood protection" +msgstr "" + +msgid "Enable logging on this zone" +msgstr "" + +msgid "External IP address" +msgstr "" + +msgid "External port" +msgstr "" + +msgid "External zone" +msgstr "" + +msgid "Extra arguments" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Firewall - Custom Rules" +msgstr "" + +msgid "Firewall - Port Forwards" +msgstr "" + +msgid "Firewall - Traffic Rules" +msgstr "" + +msgid "Firewall - Zone Settings" +msgstr "" + +msgid "Force connection tracking" +msgstr "" + +msgid "Forward" +msgstr "" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Input" +msgstr "" + +msgid "Inter-Zone Forwarding" +msgstr "" + +msgid "Internal IP address" +msgstr "" + +msgid "Internal port" +msgstr "" + +msgid "Internal zone" +msgstr "" + +msgid "Limit log messages" +msgstr "" + +msgid "MSS clamping" +msgstr "" + +msgid "Masquerading" +msgstr "" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "New SNAT rule" +msgstr "" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "" + +msgid "New port forward" +msgstr "" + +msgid "New source NAT" +msgstr "" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "" + +msgid "Output" +msgstr "" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "" + +msgid "Source MAC address" +msgstr "" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "Source port" +msgstr "" + +msgid "Source zone" +msgstr "" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "" + +msgid "accept" +msgstr "" + +msgid "any" +msgstr "" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "" + +msgid "reject" +msgstr "" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/templates/firewall.pot b/feeds/luci/applications/luci-app-firewall/po/templates/firewall.pot new file mode 100644 index 0000000..d1e8eec --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/templates/firewall.pot @@ -0,0 +1,464 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add and edit..." +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow forward from source zones:" +msgstr "" + +msgid "Allow forward to destination zones:" +msgstr "" + +msgid "Any" +msgstr "" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" + +msgid "Destination IP address" +msgstr "" + +msgid "Destination address" +msgstr "" + +msgid "Destination port" +msgstr "" + +msgid "Destination zone" +msgstr "" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable NAT Loopback" +msgstr "" + +msgid "Enable SYN-flood protection" +msgstr "" + +msgid "Enable logging on this zone" +msgstr "" + +msgid "External IP address" +msgstr "" + +msgid "External port" +msgstr "" + +msgid "External zone" +msgstr "" + +msgid "Extra arguments" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Firewall - Custom Rules" +msgstr "" + +msgid "Firewall - Port Forwards" +msgstr "" + +msgid "Firewall - Traffic Rules" +msgstr "" + +msgid "Firewall - Zone Settings" +msgstr "" + +msgid "Force connection tracking" +msgstr "" + +msgid "Forward" +msgstr "" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Input" +msgstr "" + +msgid "Inter-Zone Forwarding" +msgstr "" + +msgid "Internal IP address" +msgstr "" + +msgid "Internal port" +msgstr "" + +msgid "Internal zone" +msgstr "" + +msgid "Limit log messages" +msgstr "" + +msgid "MSS clamping" +msgstr "" + +msgid "Masquerading" +msgstr "" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "New SNAT rule" +msgstr "" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "" + +msgid "New port forward" +msgstr "" + +msgid "New source NAT" +msgstr "" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "" + +msgid "Output" +msgstr "" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "" + +msgid "Source MAC address" +msgstr "" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "Source port" +msgstr "" + +msgid "Source zone" +msgstr "" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "" + +msgid "accept" +msgstr "" + +msgid "any" +msgstr "" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "" + +msgid "reject" +msgstr "" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/tr/firewall.po b/feeds/luci/applications/luci-app-firewall/po/tr/firewall.po new file mode 100644 index 0000000..1b5444f --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/tr/firewall.po @@ -0,0 +1,471 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add and edit..." +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow forward from source zones:" +msgstr "" + +msgid "Allow forward to destination zones:" +msgstr "" + +msgid "Any" +msgstr "" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" + +msgid "Destination IP address" +msgstr "" + +msgid "Destination address" +msgstr "" + +msgid "Destination port" +msgstr "" + +msgid "Destination zone" +msgstr "" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable NAT Loopback" +msgstr "" + +msgid "Enable SYN-flood protection" +msgstr "" + +msgid "Enable logging on this zone" +msgstr "" + +msgid "External IP address" +msgstr "" + +msgid "External port" +msgstr "" + +msgid "External zone" +msgstr "" + +msgid "Extra arguments" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Firewall - Custom Rules" +msgstr "" + +msgid "Firewall - Port Forwards" +msgstr "" + +msgid "Firewall - Traffic Rules" +msgstr "" + +msgid "Firewall - Zone Settings" +msgstr "" + +msgid "Force connection tracking" +msgstr "" + +msgid "Forward" +msgstr "" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Input" +msgstr "" + +msgid "Inter-Zone Forwarding" +msgstr "" + +msgid "Internal IP address" +msgstr "" + +msgid "Internal port" +msgstr "" + +msgid "Internal zone" +msgstr "" + +msgid "Limit log messages" +msgstr "" + +msgid "MSS clamping" +msgstr "" + +msgid "Masquerading" +msgstr "" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "New SNAT rule" +msgstr "" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "" + +msgid "New port forward" +msgstr "" + +msgid "New source NAT" +msgstr "" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "" + +msgid "Output" +msgstr "" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "" + +msgid "Source MAC address" +msgstr "" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "Source port" +msgstr "" + +msgid "Source zone" +msgstr "" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "" + +msgid "accept" +msgstr "" + +msgid "any" +msgstr "" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "" + +msgid "reject" +msgstr "" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/uk/firewall.po b/feeds/luci/applications/luci-app-firewall/po/uk/firewall.po new file mode 100644 index 0000000..1c4117f --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/uk/firewall.po @@ -0,0 +1,519 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-12-29 12:53+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s у %s" + +msgid "%s%s with %s" +msgstr "%s%s із %s" + +msgid "%s, %s in %s" +msgstr "%s, %s у %s" + +msgid "(Unnamed Entry)" +msgstr "(Запис без імені)" + +msgid "(Unnamed Rule)" +msgstr "(Правило без імені)" + +msgid "(Unnamed SNAT)" +msgstr "(SNAT без імені)" + +msgid "%d pkts. per %s" +msgstr "%d пакетів за %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "%d пакетів за %s, підряд %d пакетів" + +msgid "%s and limit to %s" +msgstr "%s з лімітом %s" + +msgid "Action" +msgstr "Дія" + +msgid "Add" +msgstr "Додати" + +msgid "Add and edit..." +msgstr "Додати та редагувати..." + +msgid "Advanced Settings" +msgstr "Розширені настройки" + +msgid "Allow forward from source zones:" +msgstr "Дозволити спрямовування від зон-джерел:" + +msgid "Allow forward to destination zones:" +msgstr "Дозволити спрямовування до зон призначення:" + +msgid "Any" +msgstr "Будь-який" + +msgid "Covered networks" +msgstr "Покриті мережі" + +msgid "Custom Rules" +msgstr "Настроювані правила" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"Настроювані правила дозволяють виконувати довільні команди iptables, які в іншому випадку не охоплені в межах брандмауера. Команди " +"виконуються після кожного перезавантаження брандмауера, відразу після " +"завантаження типового набору правил." + +msgid "Destination IP address" +msgstr "IP-адреса призначення" + +msgid "Destination address" +msgstr "Адреса призначення" + +msgid "Destination port" +msgstr "Порт призначення" + +msgid "Destination zone" +msgstr "Зона призначення" + +msgid "Do not rewrite" +msgstr "Не перезаписувати" + +msgid "Drop invalid packets" +msgstr "Відкидати помилкові пакети" + +msgid "Enable" +msgstr "Увімкнути" + +msgid "Enable NAT Loopback" +msgstr "Увімкнути NAT Loopback" + +msgid "Enable SYN-flood protection" +msgstr "Увімкнути захист від SYN-flood" + +msgid "Enable logging on this zone" +msgstr "Увімкнути реєстрування у цій зоні" + +msgid "External IP address" +msgstr "Зовнішня IP-адреса" + +msgid "External port" +msgstr "Зовнішній порт" + +msgid "External zone" +msgstr "Зовнішня зона" + +msgid "Extra arguments" +msgstr "Додаткові аргументи" + +msgid "Firewall" +msgstr "Брандмауер" + +msgid "Firewall - Custom Rules" +msgstr "Брандмауер — Настроювані правила" + +msgid "Firewall - Port Forwards" +msgstr "Брандмауер — Спрямовування портів" + +msgid "Firewall - Traffic Rules" +msgstr "Брандмауер — Правила трафіка" + +msgid "Firewall - Zone Settings" +msgstr "Брандмауер — Параметри зон" + +msgid "Force connection tracking" +msgstr "Увімкнути відстеження з'єднань" + +msgid "Forward" +msgstr "Спрямовування" + +msgid "Forward to" +msgstr "спрямовування до" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "%s у %s" + +msgid "From %s in %s with source %s" +msgstr "%s у %s з вихідним %s" + +msgid "From %s in %s with source %s and %s" +msgstr "%s у %s з вихідним %s та %s" + +msgid "General Settings" +msgstr "Загальні настройки" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 та IPv6" + +msgid "IPv4 only" +msgstr "Лише IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "Лише IPv6" + +msgid "Input" +msgstr "Вхідний" + +msgid "Inter-Zone Forwarding" +msgstr "Спрямовування крізь зони" + +msgid "Internal IP address" +msgstr "Внутрішня IP-адреса" + +msgid "Internal port" +msgstr "Внутрішній порт" + +msgid "Internal zone" +msgstr "Внутрішня зона" + +msgid "Limit log messages" +msgstr "Обмеження повідомлень журналу" + +msgid "MSS clamping" +msgstr "Затискання MSS" + +msgid "Masquerading" +msgstr "Підміна" + +msgid "Match" +msgstr "Зіставляти" + +msgid "Match ICMP type" +msgstr "Зіставляти ICMP типу" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" +"Зіставляти трафік, що спрямовується на заданий порт призначення або діапазон " +"портів." + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" +"Зіставляти вхідний трафік, спрямований на заданий порт призначення або " +"діапазон портів цього вузла." + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" +"Зіставляти вхідний трафік, що виникає на заданому порту джерела або " +"діапазоні портів вузла клієнта." + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "Ім'я" + +msgid "New SNAT rule" +msgstr "Нове правило SNAT" + +msgid "New forward rule" +msgstr "Нове правило спрямовування" + +msgid "New input rule" +msgstr "Нове вхідне правило" + +msgid "New port forward" +msgstr "Нове спрямовування порту" + +msgid "New source NAT" +msgstr "Новий NAT джерела" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "Зіставляти тільки вхідний трафік, спрямований на задану IP-адресу." + +msgid "Only match incoming traffic from these MACs." +msgstr "Зіставляти тільки вхідний трафік від цих MAC-адрес." + +msgid "Only match incoming traffic from this IP or range." +msgstr "Зіставляти тільки вхідний трафік від цього IP чи діапазону." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" +"Зіставляти тільки вхідний трафік, що виникає на заданому порту джерела або " +"діапазоні портів вузла клієнта." + +msgid "Open ports on router" +msgstr "Відкрити порти на роутері" + +msgid "Other..." +msgstr "Інше..." + +msgid "Output" +msgstr "Вихідний" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" +"Передача додаткових аргументів для IPTables. Використовуйте з обережністю!" + +msgid "Port Forwards" +msgstr "Спрямовування портів" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" +"Спрямовування портів дозволяє віддаленим комп'ютерам з Інтернету " +"підключатися до певного комп'ютера або служби у приватній мережі." + +msgid "Protocol" +msgstr "Протокол" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" +"Переспрямувати відповідний вхідний трафік на заданий порт внутрішнього вузла" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "Переспрямувати відповідний вхідний трафік на заданий внутрішній вузол" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "Обмежити підміну заданими підмережами призначення" + +msgid "Restrict Masquerading to given source subnets" +msgstr "Обмежити підміну заданими вихідними підмережами" + +msgid "Restrict to address family" +msgstr "Обмежити сімейство протоколів" + +msgid "Rewrite matched traffic to the given address." +msgstr "Переписувати зіставлений трафік на вказану адресу." + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" +"Переписувати зіставлений трафік на вказаний порт джерела. Може залишатися " +"порожнім, щоб переписувати тільки IP-адресу." + +msgid "Rewrite to source %s" +msgstr "перезапис на вихідний %s" + +msgid "Rewrite to source %s, %s" +msgstr "перезапис на вихідний %s, %s" + +msgid "SNAT IP address" +msgstr "IP-адреса SNAT" + +msgid "SNAT port" +msgstr "Порт SNAT" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "IP-адреса джерела" + +msgid "Source MAC address" +msgstr "MAC-адреса джерела" + +msgid "Source NAT" +msgstr "NAT джерела" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"NAT джерела є специфічною формою маскування, яка дозволяє мати детальний " +"контроль над IP джерела, що використовуються для вихідного трафіку, " +"наприклад, для зіставлення кількох WAN-адрес внутрішнім підмережам." + +msgid "Source address" +msgstr "Адреса джерела" + +msgid "Source port" +msgstr "Порт джерела" + +msgid "Source zone" +msgstr "Зона-джерело" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"Брандмауер створює зони поверх ваших мережевих інтерфейсів для управління " +"потоком мережевого трафіку." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"Опції, наведені нижче, управляють політиками спрямовування між цією (%s) та " +"іншими зонами. Зони призначення покриваються трафіком, що " +"виходить з %q. Зони-джерела покриваються трафіком " +"з інших зон, спрямованим на %q. Правила спрямування є " +"односпрямованим, тобто, спрямування від LAN до WAN не " +"означає, що є також дозвіл спрямовувати від WAN в LAN." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"На цій сторінці можна змінити додаткові властивості елемента спрямовування " +"портів. У більшості випадків змінювати ці параметри немає необхідності." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" +"На цій сторінці можна змінити додаткові властивості елемента правил трафіка, " +"таких як відповідні параметри джерела та вузлів призначення." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"Цей розділ визначає загальні властивості %q. Параметри вхідний і " +"вихідний задають типову політику для трафіку на вході й виході з " +"цієї зони, а параметр \"спрямовування\" описує політику спрямовування " +"трафіку між різними мережами в межах зони. Пункт вкриті мережі " +"визначає, які доступні мережі є членами цієї зони." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "%s на %s цього пристрою" + +msgid "To %s in %s" +msgstr "%s у %s" + +msgid "To %s on this device" +msgstr "%s на цього пристрою" + +msgid "To %s, %s in %s" +msgstr "%s, %s у %s" + +msgid "To source IP" +msgstr "До IP джерела" + +msgid "To source port" +msgstr "До порту джерела" + +msgid "Traffic Rules" +msgstr "Правила трафіка" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"Правила трафіка визначають політику для пакетів, що пересилаються між " +"різними зонами, наприклад, відхиляти трафік між певними вузлами або відкрити " +"порти WAN на маршрутизаторі." + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "Через %s" + +msgid "Via %s at %s" +msgstr "Через %s на %s" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" +"Ви можете вказати кілька протоколів, вибравши \"-- додатково --\", а потім " +"увівши їх, розділяючи пробілами." + +msgid "Zone %q" +msgstr "Зона %q" + +msgid "Zone ⇒ Forwardings" +msgstr "Зона ⇒ Спрямовування" + +msgid "Zones" +msgstr "Зони" + +msgid "accept" +msgstr "приймати" + +msgid "any" +msgstr "будь-який" + +msgid "any host" +msgstr "будь-який вузол" + +msgid "any router IP" +msgstr "будь-який IP роутера" + +msgid "any zone" +msgstr "будь-якій зоні" + +msgid "don't track" +msgstr "не відстеж." + +msgid "drop" +msgstr "опускати" + +msgid "reject" +msgstr "відкидати" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/vi/firewall.po b/feeds/luci/applications/luci-app-firewall/po/vi/firewall.po new file mode 100644 index 0000000..6c00a6f --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/vi/firewall.po @@ -0,0 +1,486 @@ +# luci-fw.pot +# generated from ./applications/luci-fw/luasrc/i18n/luci-fw.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2009-08-16 14:02+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "%s in %s" +msgstr "" + +msgid "%s%s with %s" +msgstr "" + +msgid "%s, %s in %s" +msgstr "" + +msgid "(Unnamed Entry)" +msgstr "" + +msgid "(Unnamed Rule)" +msgstr "" + +msgid "(Unnamed SNAT)" +msgstr "" + +msgid "%d pkts. per %s" +msgstr "" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "" + +msgid "%s and limit to %s" +msgstr "" + +msgid "Action" +msgstr "Action" + +msgid "Add" +msgstr "" + +msgid "Add and edit..." +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow forward from source zones:" +msgstr "" + +msgid "Allow forward to destination zones:" +msgstr "" + +msgid "Any" +msgstr "" + +msgid "Covered networks" +msgstr "" + +msgid "Custom Rules" +msgstr "" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" + +msgid "Destination IP address" +msgstr "" + +msgid "Destination address" +msgstr "Địa chỉ điểm đến" + +msgid "Destination port" +msgstr "Cổng điểm đến" + +#, fuzzy +msgid "Destination zone" +msgstr "Điểm đến" + +msgid "Do not rewrite" +msgstr "" + +msgid "Drop invalid packets" +msgstr "Bỏ qua nhưng gói không hợp lý" + +msgid "Enable" +msgstr "" + +msgid "Enable NAT Loopback" +msgstr "" + +#, fuzzy +msgid "Enable SYN-flood protection" +msgstr "SYN-flood bảo vệ " + +msgid "Enable logging on this zone" +msgstr "" + +msgid "External IP address" +msgstr "" + +msgid "External port" +msgstr "External port" + +msgid "External zone" +msgstr "" + +msgid "Extra arguments" +msgstr "" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall - Custom Rules" +msgstr "" + +msgid "Firewall - Port Forwards" +msgstr "" + +msgid "Firewall - Traffic Rules" +msgstr "" + +msgid "Firewall - Zone Settings" +msgstr "" + +msgid "Force connection tracking" +msgstr "" + +msgid "Forward" +msgstr "" + +msgid "Forward to" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "" + +msgid "From %s in %s with source %s" +msgstr "" + +msgid "From %s in %s with source %s and %s" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "Input" +msgstr "Input" + +msgid "Inter-Zone Forwarding" +msgstr "" + +#, fuzzy +msgid "Internal IP address" +msgstr "Internal address" + +#, fuzzy +msgid "Internal port" +msgstr "External port" + +msgid "Internal zone" +msgstr "" + +msgid "Limit log messages" +msgstr "" + +#, fuzzy +msgid "MSS clamping" +msgstr "MSS Clamping" + +msgid "Masquerading" +msgstr "" + +msgid "Match" +msgstr "" + +msgid "Match ICMP type" +msgstr "" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "New SNAT rule" +msgstr "" + +msgid "New forward rule" +msgstr "" + +msgid "New input rule" +msgstr "" + +msgid "New port forward" +msgstr "" + +msgid "New source NAT" +msgstr "" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "" + +msgid "Only match incoming traffic from these MACs." +msgstr "" + +msgid "Only match incoming traffic from this IP or range." +msgstr "" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "" + +msgid "Open ports on router" +msgstr "" + +msgid "Other..." +msgstr "" + +msgid "Output" +msgstr "Output" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "" + +msgid "Port Forwards" +msgstr "" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "" + +msgid "Restrict Masquerading to given source subnets" +msgstr "" + +msgid "Restrict to address family" +msgstr "" + +msgid "Rewrite matched traffic to the given address." +msgstr "" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "" + +msgid "Rewrite to source %s" +msgstr "" + +msgid "Rewrite to source %s, %s" +msgstr "" + +msgid "SNAT IP address" +msgstr "" + +msgid "SNAT port" +msgstr "" + +msgid "Saturday" +msgstr "" + +#, fuzzy +msgid "Source IP address" +msgstr "Đỉa chỉ MAC nguồn" + +msgid "Source MAC address" +msgstr "" + +msgid "Source NAT" +msgstr "" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" + +#, fuzzy +msgid "Source address" +msgstr "Đỉa chỉ MAC nguồn" + +msgid "Source port" +msgstr "Cổng nguồn" + +#, fuzzy +msgid "Source zone" +msgstr "Cổng nguồn" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "" +"The firewall tạo zones trên giao diện mạng lưới để điều triển sự dòng lưu " +"thông của mạng." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "" + +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "" + +msgid "To %s in %s" +msgstr "" + +msgid "To %s on this device" +msgstr "" + +msgid "To %s, %s in %s" +msgstr "" + +msgid "To source IP" +msgstr "" + +msgid "To source port" +msgstr "" + +msgid "Traffic Rules" +msgstr "" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "" + +msgid "Via %s at %s" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "" + +msgid "Zone %q" +msgstr "" + +msgid "Zone ⇒ Forwardings" +msgstr "" + +msgid "Zones" +msgstr "Zones" + +msgid "accept" +msgstr "chấp nhận" + +msgid "any" +msgstr "" + +msgid "any host" +msgstr "" + +msgid "any router IP" +msgstr "" + +msgid "any zone" +msgstr "" + +msgid "don't track" +msgstr "" + +msgid "drop" +msgstr "drop" + +msgid "reject" +msgstr "Không chấp nhận" + +msgid "traffic" +msgstr "" diff --git a/feeds/luci/applications/luci-app-firewall/po/zh-cn/firewall.po b/feeds/luci/applications/luci-app-firewall/po/zh-cn/firewall.po new file mode 100644 index 0000000..d36eeea --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/zh-cn/firewall.po @@ -0,0 +1,521 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-30 17:00+0200\n" +"PO-Revision-Date: 2014-06-14 18:05+0200\n" +"Last-Translator: jame-he <755085131@qq.com>\n" +"Language-Team: QQ Group 75543259 \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s 位于 %s" + +msgid "%s%s with %s" +msgstr "%s%s 和 %s" + +msgid "%s, %s in %s" +msgstr "%s, %s 位于 %s" + +msgid "(Unnamed Entry)" +msgstr "(未命名条目)" + +msgid "(Unnamed Rule)" +msgstr "(未命名规则)" + +msgid "(Unnamed SNAT)" +msgstr "(未命名SNAT)" + +msgid "%d pkts. per %s" +msgstr "%d 包.每 %s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "%d 包. 每 %s, 突发 %d 包." + +msgid "%s and limit to %s" +msgstr "%s 并且限制到 %s" + +msgid "Action" +msgstr "动作" + +msgid "Add" +msgstr "添加" + +msgid "Add and edit..." +msgstr "添加并编辑..." + +msgid "Advanced Settings" +msgstr "高级设置" + +msgid "Allow forward from source zones:" +msgstr "允许从源区域转发" + +msgid "Allow forward to destination zones:" +msgstr "允许转发到目标区域" + +msgid "Any" +msgstr "任何" + +msgid "Covered networks" +msgstr "覆盖网络" + +msgid "Custom Rules" +msgstr "自定义规则" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"自定义规则允许运行一些防火墙没有包含的功能。这些命令将在每次重启防火墙时,在" +"默认的规则运行后立即执行。" + +msgid "Destination IP address" +msgstr "目标IP地址" + +msgid "Destination address" +msgstr "目标地址" + +msgid "Destination port" +msgstr "目标端口" + +msgid "Destination zone" +msgstr "目标区域" + +msgid "Do not rewrite" +msgstr "不填写=(所有端口)" + +msgid "Drop invalid packets" +msgstr "丢弃无效数据包" + +msgid "Enable" +msgstr "启用" + +msgid "Enable NAT Loopback" +msgstr "启用NAT环回" + +msgid "Enable SYN-flood protection" +msgstr "启用SYN-flood防御" + +msgid "Enable logging on this zone" +msgstr "在此区域允许进入" + +msgid "External IP address" +msgstr "外部IP地址" + +msgid "External port" +msgstr "外部端口" + +msgid "External zone" +msgstr "外部区域" + +msgid "Extra arguments" +msgstr "附加参数" + +msgid "Firewall" +msgstr "防火墙" + +msgid "Firewall - Custom Rules" +msgstr "防火墙 - 自定义规则" + +msgid "Firewall - Port Forwards" +msgstr "防火墙 - 端口转发" + +msgid "Firewall - Traffic Rules" +msgstr "防火墙 - 通信规则" + +msgid "Firewall - Zone Settings" +msgstr "防火墙-区域设置" + +msgid "Force connection tracking" +msgstr "强制连接追踪" + +msgid "Forward" +msgstr "转发" + +msgid "Forward to" +msgstr "转发到" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "来自 %s 位于 %s" + +msgid "From %s in %s with source %s" +msgstr "来自 %s 位于 %s 带源 %s" + +msgid "From %s in %s with source %s and %s" +msgstr "来自 %s 位于 %s 带源 %s 并且 %s" + +msgid "General Settings" +msgstr "基本设置" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 和 IPv6" + +msgid "IPv4 only" +msgstr "仅IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "仅IPv6" + +msgid "Input" +msgstr "入站数据" + +msgid "Inter-Zone Forwarding" +msgstr "端口触发" + +msgid "Internal IP address" +msgstr "内部IP地址" + +msgid "Internal port" +msgstr "内部端口" + +msgid "Internal zone" +msgstr "内部区域" + +msgid "Limit log messages" +msgstr "限制日志信息" + +msgid "MSS clamping" +msgstr "MSS钳制" + +msgid "Masquerading" +msgstr "IP动态伪装" + +msgid "Match" +msgstr "匹配规则" + +msgid "Match ICMP type" +msgstr "匹配ICMP类型" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "需要匹配转发流量到的目标端口或端口范围" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "需要匹配入站流量到的目标端口或端口范围" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "需要匹配入站流量的源端口或端口范围" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "名字" + +msgid "New SNAT rule" +msgstr "新建SNAT规则" + +msgid "New forward rule" +msgstr "新建转发规则" + +msgid "New input rule" +msgstr "新建进入规则" + +msgid "New port forward" +msgstr "新建端口转发" + +msgid "New source NAT" +msgstr "新建Source NAT" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "需要匹配入站流量的源IP" + +msgid "Only match incoming traffic from these MACs." +msgstr "需要匹配入站流量的源MACs(可以为多个)" + +msgid "Only match incoming traffic from this IP or range." +msgstr "需要匹配入站流量的源IP或IP范围" + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "需要匹配入站流量的源端口或端口范围" + +msgid "Open ports on router" +msgstr "打开路由器端口" + +msgid "Other..." +msgstr "其它..." + +msgid "Output" +msgstr "出站数据" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "传递到iptables的额外参数。小心使用!" + +msgid "Port Forwards" +msgstr "端口转发" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "端口转发允许来自Internet的计算机访问私有局域网内的计算机或服务" + +msgid "Protocol" +msgstr "协议" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "重定向匹配的入站流量到内部主机的端口" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "重定向匹配的入站流量到的内部主机" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "要限制IP动态伪装的目标子网" + +msgid "Restrict Masquerading to given source subnets" +msgstr "要限制IP动态伪装的源子网" + +msgid "Restrict to address family" +msgstr "限制地址" + +msgid "Rewrite matched traffic to the given address." +msgstr "将匹配流量的源地址改写成指定地址" + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "将匹配流量的源端口改写成指定端口。也可以留空,只改写IP地址。" + +msgid "Rewrite to source %s" +msgstr "源地址改写成 %s" + +msgid "Rewrite to source %s, %s" +msgstr "源地址改写成 %s, %s" + +msgid "SNAT IP address" +msgstr "SNAT IP地址" + +msgid "SNAT port" +msgstr "SNAT 端口" + +msgid "Saturday" +msgstr "" + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# +# msgid "Traffic Redirection" +# msgstr "" +# +# msgid "" +# "Traffic redirection allows you to change the destination address of " +# "forwarded packets." +# msgstr "" +# +# msgid "Overview" +# msgstr "" +# +# msgid "Name" +# msgstr "" +# +# msgid "Source zone" +# msgstr "" +# +# msgid "Source MAC-address" +# msgstr "" +# +# msgid "Source port" +# msgstr "" +# +# msgid "Protocol" +# msgstr "" +# +msgid "Source IP address" +msgstr "源IP地址" + +msgid "Source MAC address" +msgstr "源MAC地址" + +msgid "Source NAT" +msgstr "Source NAT" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"Source NAT是一种特殊形式的封包伪装,它允许精细的控制传出流量的源IP,例如,将" +"多个WAN地址映射到内部子网。" + +msgid "Source address" +msgstr "源地址" + +msgid "Source port" +msgstr "源端口" + +msgid "Source zone" +msgstr "源区域" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "防火墙把网络接口分为不同的区域进行管理" + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"以下选项可以控制区域(%s)和其它区域间的转发规则。 目标区域接收" +"从%q转发的流量。源区域匹配从目标为%q的区域的需转发流量。以下规则无法转发,例如:转发lan流量到wan," +"但是不允许从wan转发到lan。" + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "本页面可以更改端口转发的高级设置。大多数情况下,不需要更改这些设置。" + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "本页面可以更改通信规则的高级设置,比如:需匹配的源主机和目标主机。" + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"本节定义 %q 的通用属性, 入站数据出站数据规则用于设置数" +"据包“进”和“出”路由器(某个接口)默认的转发原则,转发规则用于特定(一" +"个或多个)区域的不同子网之间的数据包转发。覆盖网络选择从属于这个区域" +"的网络。" + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "到 %s at %s 位于本设备" + +msgid "To %s in %s" +msgstr "到 %s 位于 %s" + +msgid "To %s on this device" +msgstr "到 %s 位于本设备" + +msgid "To %s, %s in %s" +msgstr "到 %s, %s 位于 %s" + +msgid "To source IP" +msgstr "到源IP" + +msgid "To source port" +msgstr "到源端口" + +msgid "Traffic Rules" +msgstr "通信规则" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"通信规则定义了不同区域间的流量传送,例如:拒绝一些主机之间的通信、打开到WAN的" +"端口。" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "通过 %s" + +msgid "Via %s at %s" +msgstr "通过 %s at %s" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "你也可以选择“--自定义--”来定义多个协议,在多个协议间需加空格。" + +msgid "Zone %q" +msgstr "区域 %q" + +msgid "Zone ⇒ Forwardings" +msgstr "区域 ⇒ 转发" + +msgid "Zones" +msgstr "区域" + +msgid "accept" +msgstr "接受" + +msgid "any" +msgstr "所有" + +msgid "any host" +msgstr "所有主机" + +msgid "any router IP" +msgstr "所有路由地址" + +msgid "any zone" +msgstr "所有区域" + +msgid "don't track" +msgstr "无动作" + +msgid "drop" +msgstr "丢弃" + +msgid "reject" +msgstr "拒绝" + +msgid "traffic" +msgstr "交通" diff --git a/feeds/luci/applications/luci-app-firewall/po/zh-tw/firewall.po b/feeds/luci/applications/luci-app-firewall/po/zh-tw/firewall.po new file mode 100644 index 0000000..b89cfab --- /dev/null +++ b/feeds/luci/applications/luci-app-firewall/po/zh-tw/firewall.po @@ -0,0 +1,494 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-21 12:45+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s in %s" +msgstr "%s 在 %s 之中" + +msgid "%s%s with %s" +msgstr "%s%s 同 %s" + +msgid "%s, %s in %s" +msgstr " %s, %s 在 %s 之中" + +msgid "(Unnamed Entry)" +msgstr "(未命名的項目)" + +msgid "(Unnamed Rule)" +msgstr "(未命名的規則)" + +msgid "(Unnamed SNAT)" +msgstr "(未命名的來源NAT)" + +msgid "%d pkts. per %s" +msgstr "%d 封包數. 每%s" + +msgid "%d pkts. per %s, burst %d pkts." +msgstr "%d 封包數. 每%s, 爆量 %d 封包數." + +msgid "%s and limit to %s" +msgstr "%s 且限制到 %s" + +msgid "Action" +msgstr "動作" + +msgid "Add" +msgstr "新增" + +msgid "Add and edit..." +msgstr "新增並編輯..." + +msgid "Advanced Settings" +msgstr "進階設定" + +msgid "Allow forward from source zones:" +msgstr "允許從source zones轉發:" + +msgid "Allow forward to destination zones:" +msgstr "允許從 destination zones轉發:" + +msgid "Any" +msgstr "任意" + +msgid "Covered networks" +msgstr "已覆蓋的網路" + +msgid "Custom Rules" +msgstr "自訂的規則群" + +msgid "" +"Custom rules allow you to execute arbritary iptables commands which are not " +"otherwise covered by the firewall framework. The commands are executed after " +"each firewall restart, right after the default ruleset has been loaded." +msgstr "" +"自定義規則允許你執行這是不以其他方式涉及的防火牆框架arbritary的iptables命令。" +"該命令是每個防火牆重啟後執行,默認規則集已經加載之後。" + +msgid "Destination IP address" +msgstr "目標IP位址" + +msgid "Destination address" +msgstr "目標位址" + +msgid "Destination port" +msgstr "目地埠" + +msgid "Destination zone" +msgstr "目標區" + +msgid "Do not rewrite" +msgstr "不要改寫" + +msgid "Drop invalid packets" +msgstr "丟棄不正確的封包群" + +msgid "Enable" +msgstr "啟用" + +msgid "Enable NAT Loopback" +msgstr "啓用NAT回傳" + +msgid "Enable SYN-flood protection" +msgstr "啟用SYN-flood攻擊的保護" + +msgid "Enable logging on this zone" +msgstr "啟用日誌記錄這區" + +msgid "External IP address" +msgstr "外部IP位址" + +msgid "External port" +msgstr "外部埠" + +msgid "External zone" +msgstr "外部區域" + +msgid "Extra arguments" +msgstr "額外參數" + +msgid "Firewall" +msgstr "防火牆" + +msgid "Firewall - Custom Rules" +msgstr "防火牆-自訂規則" + +msgid "Firewall - Port Forwards" +msgstr "防火牆-埠轉發" + +msgid "Firewall - Traffic Rules" +msgstr "防火牆-流量規則" + +msgid "Firewall - Zone Settings" +msgstr "防火牆-區域設定" + +msgid "Force connection tracking" +msgstr "強制連線追蹤" + +msgid "Forward" +msgstr "轉發" + +msgid "Forward to" +msgstr "轉發到" + +msgid "Friday" +msgstr "" + +msgid "From %s in %s" +msgstr "從%s在%s" + +msgid "From %s in %s with source %s" +msgstr "從%s在%s與來源%" + +msgid "From %s in %s with source %s and %s" +msgstr "從%s在%s與來源%s和%s" + +msgid "General Settings" +msgstr "一般設定" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 和 IPv6" + +msgid "IPv4 only" +msgstr "僅有IPv4" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 only" +msgstr "僅有IPv6" + +msgid "Input" +msgstr "輸入" + +msgid "Inter-Zone Forwarding" +msgstr "內部-區轉發" + +msgid "Internal IP address" +msgstr "內部的IP位址" + +msgid "Internal port" +msgstr "內部的埠號" + +msgid "Internal zone" +msgstr "內部區" + +msgid "Limit log messages" +msgstr "限制日誌訊息數" + +msgid "MSS clamping" +msgstr "MSS調節" + +msgid "Masquerading" +msgstr "偽裝" + +msgid "Match" +msgstr "匹配" + +msgid "Match ICMP type" +msgstr "匹配的ICMP型態" + +msgid "Match forwarded traffic to the given destination port or port range." +msgstr "匹配已轉發的流量到給定的目標埠或者範圍埠" + +msgid "" +"Match incoming traffic directed at the given destination port or port range " +"on this host" +msgstr "匹配輸入的流量到主機上給定的目標埠或者範圍埠" + +msgid "" +"Match incoming traffic originating from the given source port or port range " +"on the client host." +msgstr "從給定的來源埠或範圍埠在客戶端主機上的匹配傳入流量始發。" + +msgid "Monday" +msgstr "" + +msgid "Month Days" +msgstr "" + +msgid "Name" +msgstr "名稱" + +msgid "New SNAT rule" +msgstr "新的來源NAT規則" + +msgid "New forward rule" +msgstr "新轉發規則" + +msgid "New input rule" +msgstr "新輸入規則" + +msgid "New port forward" +msgstr "新轉發埠" + +msgid "New source NAT" +msgstr "新來源埠" + +msgid "Only match incoming traffic directed at the given IP address." +msgstr "僅匹配傳入流量予給定的IP地址." + +msgid "Only match incoming traffic from these MACs." +msgstr "僅匹配從這些MAC群的傳入流量." + +msgid "Only match incoming traffic from this IP or range." +msgstr "僅匹配從這個IP或範圍IP給傳入流量." + +msgid "" +"Only match incoming traffic originating from the given source port or port " +"range on the client host" +msgstr "僅匹配從給定的來源埠或範圍埠的客戶端主機上給傳入流量." + +msgid "Open ports on router" +msgstr "開啟路由器上的埠號群" + +msgid "Other..." +msgstr "其它..." + +msgid "Output" +msgstr "輸出" + +msgid "Passes additional arguments to iptables. Use with care!" +msgstr "通行額外的參數到 iptables上. 使用要小心!" + +msgid "Port Forwards" +msgstr "埠轉遞" + +msgid "" +"Port forwarding allows remote computers on the Internet to connect to a " +"specific computer or service within the private LAN." +msgstr "埠轉發允許遠端網際網路上的電腦來連接到在私人區網內指定的電腦或服務." + +msgid "Protocol" +msgstr "協定" + +msgid "" +"Redirect matched incoming traffic to the given port on the internal host" +msgstr "重導向已匹配傳入流量到內部主機上的指定埠" + +msgid "Redirect matched incoming traffic to the specified internal host" +msgstr "重導向已匹配傳入流量到內部主機上" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restrict Masquerading to given destination subnets" +msgstr "限制偽裝到已給予的目標子網路" + +msgid "Restrict Masquerading to given source subnets" +msgstr "限制偽裝到已給予的來源子網路" + +msgid "Restrict to address family" +msgstr "限制的位址群" + +msgid "Rewrite matched traffic to the given address." +msgstr "改寫已匹配的流量到給定的位址." + +msgid "" +"Rewrite matched traffic to the given source port. May be left empty to only " +"rewrite the IP address." +msgstr "改寫已匹配的流量到給定的來源埠. 或許可以保留空白到唯一改寫的IP位址." + +msgid "Rewrite to source %s" +msgstr "改寫到來源 %s" + +msgid "Rewrite to source %s, %s" +msgstr "改寫到來源 %s, %s" + +msgid "SNAT IP address" +msgstr "來源NAT IP 位址" + +msgid "SNAT port" +msgstr "來源NAT IP 埠" + +msgid "Saturday" +msgstr "" + +msgid "Source IP address" +msgstr "來源 IP 位址" + +msgid "Source MAC address" +msgstr "來源 MAC硬體位址" + +msgid "Source NAT" +msgstr "來源NAT" + +msgid "" +"Source NAT is a specific form of masquerading which allows fine grained " +"control over the source IP used for outgoing traffic, for example to map " +"multiple WAN addresses to internal subnets." +msgstr "" +"來源NAT是偽裝的一種特殊形式,它允許對輸出流量的來源IP進行精細控制, 例如要對映" +"到多個WAN位址到內部子網路群上." + +msgid "Source address" +msgstr "來源位址" + +msgid "Source port" +msgstr "來源埠" + +msgid "Source zone" +msgstr "來源區" + +msgid "Start Date (yyyy-mm-dd)" +msgstr "" + +msgid "Start Time (hh:mm:ss)" +msgstr "" + +msgid "Stop Date (yyyy-mm-dd)" +msgstr "" + +msgid "Stop Time (hh:mm:ss)" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "" +"The firewall creates zones over your network interfaces to control network " +"traffic flow." +msgstr "防火牆對你的網路建立區域以便控制網路流向." + +msgid "" +"The options below control the forwarding policies between this zone (%s) and " +"other zones. Destination zones cover forwarded traffic " +"originating from %q. Source zones match forwarded " +"traffic from other zones targeted at %q. The forwarding " +"rule is unidirectional, e.g. a forward from lan to wan does " +"not imply a permission to forward from wan to lan as well." +msgstr "" +"下列的選項控制這區域(%s)和其它區轉發策略.目地區 覆蓋從 %q 起" +"源的 已轉發的流量.來源區匹配從其它區域針對 %q的轉發流量.轉發規則是單向的." + +msgid "" +"This page allows you to change advanced properties of the port forwarding " +"entry. In most cases there is no need to modify those settings." +msgstr "" +"這頁面允許你修改這個轉發埠項目的進階選項. 在大多數情況下,不需要修改這些設定." + +msgid "" +"This page allows you to change advanced properties of the traffic rule " +"entry, such as matched source and destination hosts." +msgstr "這頁面允許改變進階流量規則項目的進階設置, 例如匹配的來源和目標主機." + +#, fuzzy +msgid "" +"This section defines common properties of %q. The input and " +"output options set the default policies for traffic entering and " +"leaving this zone while the forward option describes the policy for " +"forwarded traffic between different networks within the zone. Covered " +"networks specifies which available networks are members of this zone." +msgstr "" +"本節定義 %q 的通用屬性.在輸入輸出選項設置交通進出的默認策" +"略,而在轉發的選項描述在這區域內不同網路的轉發流量.已覆蓋的網路群" +"指定特定區域成員可以是被運用的網路." + +msgid "Thursday" +msgstr "" + +msgid "Time in UTC" +msgstr "" + +msgid "To %s at %s on this device" +msgstr "到%s在上的此設備的%s的" + +msgid "To %s in %s" +msgstr "到%s在%s" + +msgid "To %s on this device" +msgstr "到%s上的此設備的" + +msgid "To %s, %s in %s" +msgstr "到%s,%s的%s中" + +msgid "To source IP" +msgstr "來源IP" + +msgid "To source port" +msgstr "來源埠" + +msgid "Traffic Rules" +msgstr "流量規則" + +msgid "" +"Traffic rules define policies for packets traveling between different zones, " +"for example to reject traffic between certain hosts or to open WAN ports on " +"the router." +msgstr "" +"流量規則定義在不同區域之間竄行封包的策略,例如要拒絕特定主機群的流量或者要打開" +"路由器上WAN埠。" + +msgid "Tuesday" +msgstr "" + +msgid "Via %s" +msgstr "通過%s的" + +msgid "Via %s at %s" +msgstr "通過%s在%s的" + +msgid "Wednesday" +msgstr "" + +msgid "Week Days" +msgstr "" + +msgid "" +"You may specify multiple by selecting \"-- custom --\" and then entering " +"protocols separated by space." +msgstr "你可以以選擇\"-- 自訂 --\"並且打入由空格分開的協定來做多重指定." + +msgid "Zone %q" +msgstr "區域 %q" + +msgid "Zone ⇒ Forwardings" +msgstr "區域 ⇒ 轉發進行" + +msgid "Zones" +msgstr "領域" + +msgid "accept" +msgstr "接受" + +msgid "any" +msgstr "任意" + +msgid "any host" +msgstr "任意埠" + +msgid "any router IP" +msgstr "任意路由器IP" + +msgid "any zone" +msgstr "任意區" + +msgid "don't track" +msgstr "不要追蹤" + +msgid "drop" +msgstr "丟棄" + +msgid "reject" +msgstr "拒絕" + +msgid "traffic" +msgstr "" + +#~ msgid "-- Please choose --" +#~ msgstr "-- 請選擇 --" + +#~ msgid "-- custom --" +#~ msgstr "-- 自訂 --" diff --git a/feeds/luci/applications/luci-app-freifunk-diagnostics/Makefile b/feeds/luci/applications/luci-app-freifunk-diagnostics/Makefile new file mode 100644 index 0000000..d511684 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-diagnostics/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Tools for network diagnosis like traceroute and ping +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-freifunk-diagnostics/luasrc/controller/freifunk/diag.lua b/feeds/luci/applications/luci-app-freifunk-diagnostics/luasrc/controller/freifunk/diag.lua new file mode 100644 index 0000000..7bb4761 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-diagnostics/luasrc/controller/freifunk/diag.lua @@ -0,0 +1,72 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2011 Jo-Philipp Wich +-- Copyright 2013 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.freifunk.diag", package.seeall) + +function index() + local uci = require("luci.model.uci").cursor() + local page + page = node("freifunk", "status", "diagnostics") + page.target = template("freifunk/diagnostics") + page.title = _("Diagnostics") + page.order = 60 + + page = entry({"freifunk", "status", "diag_ping"}, call("diag_ping"), nil) + page.leaf = true + + page = entry({"freifunk", "status", "diag_nslookup"}, call("diag_nslookup"), nil) + page.leaf = true + + page = entry({"freifunk", "status", "diag_traceroute"}, call("diag_traceroute"), nil) + page.leaf = true + + page = entry({"freifunk", "status", "diag_ping6"}, call("diag_ping6"), nil) + page.leaf = true + + page = entry({"freifunk", "status", "diag_traceroute6"}, call("diag_traceroute6"), nil) + page.leaf = true +end + +function diag_command(cmd, addr) + if addr and addr:match("^[a-zA-Z0-9%-%.:_]+$") then + luci.http.prepare_content("text/plain") + + local util = io.popen(cmd % addr) + if util then + while true do + local ln = util:read("*l") + if not ln then break end + luci.http.write(ln) + luci.http.write("\n") + end + + util:close() + end + + return + end + + luci.http.status(500, "Bad address") +end + +function diag_ping(addr) + diag_command("ping -c 5 -W 1 %q 2>&1", addr) +end + +function diag_traceroute(addr) + diag_command("traceroute -q 1 -w 1 -n %q 2>&1", addr) +end + +function diag_nslookup(addr) + diag_command("nslookup %q 2>&1", addr) +end + +function diag_ping6(addr) + diag_command("ping6 -c 5 %q 2>&1", addr) +end + +function diag_traceroute6(addr) + diag_command("traceroute6 -q 1 -w 2 -n %q 2>&1", addr) +end diff --git a/feeds/luci/applications/luci-app-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm b/feeds/luci/applications/luci-app-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm new file mode 100644 index 0000000..fe205d0 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm @@ -0,0 +1,111 @@ +<%# + Copyright 2010 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +<% +local fs = require "nixio.fs" +local has_ping6 = fs.access("/bin/ping6") or fs.access("/usr/bin/ping6") +local has_traceroute6 = fs.access("/usr/bin/traceroute6") +%> + + + + +
"> +
+

<%:Diagnostics%>

+ +
+ <%:Network Utilities%> + +
+ +
+
+ <% if has_ping6 then %> + + + <% else %> + + <% end %> +
+ +
+
+ <% if has_traceroute6 then %> + + + <% else %> + + <% end %> + <% if not has_traceroute6 then %> +

 

+

<%:Install iputils-traceroute6 for IPv6 traceroute%>

+ <% end %> +
+ +
+
+ +
+ +

+ +
+
+ + +
+ +<%+footer%> diff --git a/feeds/luci/applications/luci-app-freifunk-diagnostics/root/etc/uci-defaults/40_luci-freifunk-diagnostics b/feeds/luci/applications/luci-app-freifunk-diagnostics/root/etc/uci-defaults/40_luci-freifunk-diagnostics new file mode 100644 index 0000000..963d8a4 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-diagnostics/root/etc/uci-defaults/40_luci-freifunk-diagnostics @@ -0,0 +1,2 @@ +#!/bin/sh +rm -f /tmp/luci-indexcache diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/Makefile b/feeds/luci/applications/luci-app-freifunk-policyrouting/Makefile new file mode 100644 index 0000000..f60c2ea --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Policy routing for mesh traffic +LUCI_DEPENDS:=+freifunk-policyrouting + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/luasrc/controller/freifunk/policy-routing.lua b/feeds/luci/applications/luci-app-freifunk-policyrouting/luasrc/controller/freifunk/policy-routing.lua new file mode 100644 index 0000000..b550fc8 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/luasrc/controller/freifunk/policy-routing.lua @@ -0,0 +1,9 @@ +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +module "luci.controller.freifunk.policy-routing" + +function index() + entry({"admin", "freifunk", "policyrouting"}, cbi("freifunk/policyrouting"), + _("Policy Routing"), 60) +end diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/luasrc/model/cbi/freifunk/policyrouting.lua b/feeds/luci/applications/luci-app-freifunk-policyrouting/luasrc/model/cbi/freifunk/policyrouting.lua new file mode 100644 index 0000000..b09c237 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/luasrc/model/cbi/freifunk/policyrouting.lua @@ -0,0 +1,34 @@ +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local uci = require "luci.model.uci".cursor() + +m = Map("freifunk-policyrouting", translate("Policy Routing"), translate("These pages can be used to setup policy routing for certain firewall zones. ".. + "This is useful if you need to use your own internet connection for yourself but you don't want to share it with others (thats why it can also be ".. + "called 'Ego Mode'). Your own traffic is then sent via your internet connection while traffic originating from the mesh will use another gateway in the mesh. ")) +m:chain("network") + +c = m:section(NamedSection, "pr", "settings", "") + +local pr = c:option(Flag, "enable", translate("Enable Policy Routing")) +pr.rmempty = false + +local strict = c:option(Flag, "strict", translate("Strict Filtering"), translate("If no default route is received from the mesh network then traffic which belongs to ".. + "the selected firewall zones is routed via your internet connection as a fallback. If you do not want this and instead block that traffic then you should ".. + "select this option.")) +strict.rmempty = false + +local fallback = c:option(Flag, "fallback", translate("Fallback to mesh"), + translate("If your own gateway is not available then fallback to the mesh default gateway.")) +strict.rmempty = false + +local zones = c:option(MultiValue, "zones", translate("Firewall zones"), translate("All traffic from interfaces belonging to these zones will be sent via ".. + "a gateway in the mesh network.")) +uci:foreach("firewall", "zone", function(section) + local name = section.name + if not (name == "wan") then + zones:value(name) + end +end) + +return m diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ca/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ca/freifunk-policyrouting.po new file mode 100644 index 0000000..c1d96e0 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ca/freifunk-policyrouting.po @@ -0,0 +1,62 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-06-01 23:52+0200\n" +"PO-Revision-Date: 2014-07-03 20:37+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" +"Tot el trànsit des de interfícies pertinent a aquestes zones s'enviarà via " +"una passarel·la en la xarxa en malla." + +msgid "Enable Policy Routing" +msgstr "Habilita el encaminament per política" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "Zones de tallafocs" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "Encaminament per política" + +msgid "Strict Filtering" +msgstr "Filtració estricta" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" +"Aquestes pàgines es poden utilitzar per configurar encaminament en certes " +"zones de tallafocs. Això és útil si necessiteu utilitzar la vostra pròpia " +"connexió a Internet per a vós mateix però no voleu compartir-la amb altres " +"(és per això que també es diu 'Mode egoista'). El vostre propi trànsit " +"llavors s'envia via la vostra connexió d'Internet mentre el trànsit " +"originant en malla utilitzarà altra passarel·la en malla." diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/cs/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/cs/freifunk-policyrouting.po new file mode 100644 index 0000000..4ec9f8d --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/cs/freifunk-policyrouting.po @@ -0,0 +1,52 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-26 20:27+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "Povolit politiku směrování" + +msgid "Fallback to mesh" +msgstr "Fallback do mesh" + +msgid "Firewall zones" +msgstr "Zóny firewallu" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "Politika směrování" + +msgid "Strict Filtering" +msgstr "Striktní filtrování" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/de/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/de/freifunk-policyrouting.po new file mode 100644 index 0000000..bb24f61 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/de/freifunk-policyrouting.po @@ -0,0 +1,67 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-11-21 20:53+0200\n" +"Last-Translator: Jo-Philipp \n" +"Language-Team: \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" +"Traffic der aus diesen Zonen kommt wird über ein Internetgateway im Mesh " +"weitergeleitet." + +msgid "Enable Policy Routing" +msgstr "Policy Routing aktivieren" + +msgid "Fallback to mesh" +msgstr "Auf Mesh zurückfallen" + +msgid "Firewall zones" +msgstr "Firewallzonen" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" +"Falls im Mesh kein anderer Internetgateway verfügbar ist, dann wird Traffic " +"aus den ausgewählten Zonen als Fallback über die Internetverbindung dieses " +"Routers geleitet. Wenn das nicht gewünscht ist und dieser Traffic dann " +"stattdessen geblockt werden soll, dann aktiviere diese Option." + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" +"Wenn das eigene lokale Gateway nicht verfügbar ist, dann nutze das aktuelle " +"Mesh-Default-Gateway." + +msgid "Policy Routing" +msgstr "Policy Routing" + +msgid "Strict Filtering" +msgstr "Strenges Filtern" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" +"Auf diesen Seiten kann Policy Routing für bestimmte Firewallzonen aktiviert " +"werden. Dies ist z.B. nützlich, wenn du deinen eigenen Internetverkehr über " +"deine eigene Internetverbindung routen aber diese nicht mit anderen teilen " +"willst ('Mein Gateway für mich allein'). Eigener Traffic wird dann über die " +"eigene Internetverbindung geschickt während Traffic aus den ausgewählten " +"Firewallzonen über einen anderen Gateway im Mesh geleitet wird." diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/el/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/el/freifunk-policyrouting.po new file mode 100644 index 0000000..3c9a17e --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/el/freifunk-policyrouting.po @@ -0,0 +1,39 @@ +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/en/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/en/freifunk-policyrouting.po new file mode 100644 index 0000000..3c9a17e --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/en/freifunk-policyrouting.po @@ -0,0 +1,39 @@ +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/es/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/es/freifunk-policyrouting.po new file mode 100644 index 0000000..8af3458 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/es/freifunk-policyrouting.po @@ -0,0 +1,66 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-22 22:34+0200\n" +"PO-Revision-Date: 2012-10-14 22:49+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" +"Todo el tráfico desde interfaces de estas zonas se enviará por una pasarela " +"de la red mesh." + +msgid "Enable Policy Routing" +msgstr "Activar política de enrutado" + +msgid "Fallback to mesh" +msgstr "Si falla usar mesh" + +msgid "Firewall zones" +msgstr "Zonas del cortafuegos" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" +"Si no se recibe una ruta por defecto de la red mesh el tráfico de las zonas " +"de cortafuegos seleccionado se enviará por esta conexión de red. Si no desea " +"esto marque esta opción para bloquearlo." + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" +"Si su pasarela no está disponible cambie a la pasarela por defecto de la " +"mesh." + +msgid "Policy Routing" +msgstr "Política de enrutamiento" + +msgid "Strict Filtering" +msgstr "Filtrado estricto" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" +"Estas páginas se pueden usar para definir la política de enrutamiento para " +"ciertas zonas del cortafuegos. Esto es útil si quiere usar su conexión a " +"internet pero no quiere compartirla con otros (por eso se llama \"Modo " +"egoísta\"). Su propio tráfico se enviará por su conexión internet mientras " +"que el tráfico del mes usará otra pasarela en la mesh." diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/fr/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/fr/freifunk-policyrouting.po new file mode 100644 index 0000000..3c9a17e --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/fr/freifunk-policyrouting.po @@ -0,0 +1,39 @@ +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/he/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/he/freifunk-policyrouting.po new file mode 100644 index 0000000..8d83098 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/he/freifunk-policyrouting.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/hu/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/hu/freifunk-policyrouting.po new file mode 100644 index 0000000..8d83098 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/hu/freifunk-policyrouting.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/it/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/it/freifunk-policyrouting.po new file mode 100644 index 0000000..61ac6c0 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/it/freifunk-policyrouting.po @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-09 20:22+0200\n" +"PO-Revision-Date: 2013-02-09 20:27+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" +"Tutto il traffico dalle interfacce appartenenti a tali zone saranno inviate " +"tramite un gateway nella rete mesh." + +msgid "Enable Policy Routing" +msgstr "Attiva la politica di instradamento" + +msgid "Fallback to mesh" +msgstr "Posizione di sicurezza in mesh" + +msgid "Firewall zones" +msgstr "Zone Firewall" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" +"Se nessun percorso predefinito viene ricevuto dalla rete mesh, il traffico " +"che fa parte delle zone del firewall selezionato verranno instradate tramite " +"la connessione a Internet come ripiego. Se non si desidera questo invece " +"di bloccare il traffico è necessario selezionare questa opzione." + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" +"Se il proprio gateway non è disponibile, ripiego per il gateway predefinito " +"mash." + +msgid "Policy Routing" +msgstr "Politica di Instradamento" + +msgid "Strict Filtering" +msgstr "Livello massimo di filtraggio" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" +"Queste pagine possono essere utilizzati per impostare la politica di " +"instradamento per le zone del firewall determinati. Questo è utile se è " +"necessario utilizzare la vostra connessione internet per de stesso, ma non " +"si desidera condividere con gli altri (questo è il motivo per cui può anche " +"essere chiamato 'Modalità Ego'). Il tuo traffico viene poi inviato tramite " +"la tua connessione a Internet mentre il traffico proveniente dalla rete " +"utilizzerà un altro gateway in mesh." diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ja/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ja/freifunk-policyrouting.po new file mode 100644 index 0000000..3c9a17e --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ja/freifunk-policyrouting.po @@ -0,0 +1,39 @@ +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ms/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ms/freifunk-policyrouting.po new file mode 100644 index 0000000..3c9a17e --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ms/freifunk-policyrouting.po @@ -0,0 +1,39 @@ +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/no/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/no/freifunk-policyrouting.po new file mode 100644 index 0000000..3c9a17e --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/no/freifunk-policyrouting.po @@ -0,0 +1,39 @@ +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/pl/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/pl/freifunk-policyrouting.po new file mode 100644 index 0000000..bcb4492 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/pl/freifunk-policyrouting.po @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-24 07:01+0200\n" +"PO-Revision-Date: 2012-08-24 08:02+0200\n" +"Last-Translator: goodgod261 \n" +"Language-Team: LANGUAGE \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" +"Cały ruch sieciowy z interfejsów należących do tych stref będzie wysyłany " +"przez bramę w sieci mesh." + +msgid "Enable Policy Routing" +msgstr "Włącz politykę trasowania (routingu)" + +msgid "Fallback to mesh" +msgstr "Fallback do mesh" + +msgid "Firewall zones" +msgstr "Strefy firewalla" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" +"Jeśli nie otrzymano domyślnej trasy z sieci mesh, ruch sieciowy należący do " +"wybranej strefy firewalla jest trasowany przez Twoje połączenie z internetem " +"jako fallback. Jeśli tego nie chcesz i zamiast tego chciałbyś blokować taki " +"ruch sieciowy, powinieneś zaznaczyć tę opcję." + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" +"Jeśli Twoja własna brama nie jest dostępna, wykonaj fallback do domyślnej " +"bramy sieci mesh." + +msgid "Policy Routing" +msgstr "Polityka trasowania (routingu)" + +msgid "Strict Filtering" +msgstr "Ścisłe filtrowanie" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" +"Te strony mogą zostać użyte do ustawienia polityki trasowania (routingu) dla " +"wybranych stref firewalla. Jest to użyteczne jeśli chcesz używać swojego " +"połączenia z internetem sam i nie chcesz dzielić się nim z innymi (stąd " +"alternatywna nazwa \"tryb ego\"). Twój własny ruch sieciowy jest wysyłany " +"przez Twoje połączenie, zaś ruch pochodzący z sieci mesh będzie używać innej " +"bramy w sieci." diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/pt-br/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/pt-br/freifunk-policyrouting.po new file mode 100644 index 0000000..4aac8ca --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/pt-br/freifunk-policyrouting.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-10-12 09:13+0200\n" +"PO-Revision-Date: 2012-09-27 00:40+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" +"Todo o tráfego das interfaces pertencentes a estas zonas será enviado " +"através de um roteador padrão na rede em malha." + +msgid "Enable Policy Routing" +msgstr "Habilitar a Política de Roteamento" + +msgid "Fallback to mesh" +msgstr "Se falhar, usar a malha" + +msgid "Firewall zones" +msgstr "Zonas do firewall" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" +"Se nenhuma rota padrão for recebida da rede em malha, então o tráfego que " +"pertencer a zona de firewall selecionada através da sua conexão internet " +"como solução de contorno. Se você não quer isto e, ao contrário, deseja " +"bloquear este tráfego, então você deve selecionar esta opção." + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" +"Se o seu roteador não estiver disponível, usar como alternativa o roteador " +"padrão da malha." + +msgid "Policy Routing" +msgstr "Política de Roteamento" + +msgid "Strict Filtering" +msgstr "Filtragem Estrita" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" +"Estas páginas podem ser usadas para configurar a política de roteamento para " +"certas zonas de firewall. Isto pode ser útil se você precisa usar sua " +"própria conexão com a internet para si e não quer compartilhá-la com outros " +"(é por isto que isto pode ser chamado de 'Modo Egocêntrico'). Seu próprio " +"tráfego é enviado através de sua conexão com a internet enquanto o tráfego " +"originado da rede em malha irá usar outro roteador na malha." diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/pt/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/pt/freifunk-policyrouting.po new file mode 100644 index 0000000..41a6b21 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/pt/freifunk-policyrouting.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-05-31 11:53+0200\n" +"PO-Revision-Date: 2013-05-31 11:54+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" +"Todo o trafego das interfaces que pertencem a estas zonas será enviado pela " +"gateway de rede." + +msgid "Enable Policy Routing" +msgstr "Ativar a Politica de Routing" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "Zonas da Firewall" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "Política de Routing" + +msgid "Strict Filtering" +msgstr "Filtragem Estrita" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ro/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ro/freifunk-policyrouting.po new file mode 100644 index 0000000..3386101 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ro/freifunk-policyrouting.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-28 19:28+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "Zone de firewall" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ru/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ru/freifunk-policyrouting.po new file mode 100644 index 0000000..a4ba704 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/ru/freifunk-policyrouting.po @@ -0,0 +1,70 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: freifunk-policyrouting\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-07-25 12:26+0200\n" +"PO-Revision-Date: 2012-08-15 15:27+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" +"Весь трафик от интерфейсов, принадлежащих этим зонам, будет послан через " +"шлюз в ячеистой сети." + +msgid "Enable Policy Routing" +msgstr "Разрешить политику маршрутизации" + +#, fuzzy +msgid "Fallback to mesh" +msgstr "Откат к ячеистой сети" + +msgid "Firewall zones" +msgstr "Зоны межсетевого экрана" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" +"Трафик, принадлежащий выбранным зонам межсетевого экрана, маршрутизируется " +"через ваше интернет-соединение, если маршрут по умолчанию не был получен из " +"ячеистой сети. Если вас это не устраивает, то выберите эту опцию и данный " +"трафик будет заблокирован." + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" +"Если ваш шлюз не доступен, откатиться к использованию шлюза ячеистой сети по " +"умолчанию." + +msgid "Policy Routing" +msgstr "Политика маршрутизации" + +msgid "Strict Filtering" +msgstr "Строгая фильтрация" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" +"На этих страницах Вы можете настроить политику маршрутизации для " +"определённых зон межсетевого экрана. Это может быть полезно, если вы хотите " +"использовать интернет-соединения только для себя. Ваш трафик в этом случае " +"будет использовать только ваше интернет-соединение, в то время как трафик " +"ячеистой сети будет использовать другой шлюз." diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/sk/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/sk/freifunk-policyrouting.po new file mode 100644 index 0000000..b1a7810 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/sk/freifunk-policyrouting.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/sv/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/sv/freifunk-policyrouting.po new file mode 100644 index 0000000..1310afa --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/sv/freifunk-policyrouting.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/templates/freifunk-policyrouting.pot b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/templates/freifunk-policyrouting.pot new file mode 100644 index 0000000..b4c35c1 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/templates/freifunk-policyrouting.pot @@ -0,0 +1,42 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/tr/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/tr/freifunk-policyrouting.po new file mode 100644 index 0000000..af1616f --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/tr/freifunk-policyrouting.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/uk/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/uk/freifunk-policyrouting.po new file mode 100644 index 0000000..e4cc687 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/uk/freifunk-policyrouting.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-13 16:14+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +#, fuzzy +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" +"Весь трафік з інтерфейсів, прив'язаних до цих зон буде відправлений через " +"шлюз в комірчасті мережі." + +#, fuzzy +msgid "Enable Policy Routing" +msgstr "Активувати політику маршрутизації" + +msgid "Fallback to mesh" +msgstr "" + +#, fuzzy +msgid "Firewall zones" +msgstr "Зона фаєрволу" + +#, fuzzy +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" +"Якщо маршрут типово не буде отриманий з сітки мережі, то трафік, який " +"належить до вибраної зони фаєрволу прямує через ваше інтернет-з'єднання в " +"якості запасного варіанту. Якщо ви не хочете цього, а замість цього, що " +"блокувати трафік, то ви повинні вибрати цю опцію." + +#, fuzzy +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" +"Якщо ваш шлюз недоступний, то відбувається повернення до основного шлюзу " +"сітки." + +msgid "Policy Routing" +msgstr "Політика маршрутизації" + +msgid "Strict Filtering" +msgstr "Жорстка фільтрація" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" +"Ці сторінки можна використовувати для налаштування політики маршрутизації " +"для певних зон фаєрволу. Це корисно, якщо вам потрібно використовувати своє " +"власне інтернет-з'єднання для себе, і ви не хочете ділитися ним з іншими " +"людьми (ось чому воно також називатися 'Его режим '). Ваш власний трафік " +"потім відправлений через ваше інтернет-з'єднання в той час як трафік, " +"витікаючий із мережі буде використовувати інший шлюз у мережі." diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/vi/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/vi/freifunk-policyrouting.po new file mode 100644 index 0000000..3c9a17e --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/vi/freifunk-policyrouting.po @@ -0,0 +1,39 @@ +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/zh-cn/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/zh-cn/freifunk-policyrouting.po new file mode 100644 index 0000000..ff0aabc --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/zh-cn/freifunk-policyrouting.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-10-09 03:50+0200\n" +"PO-Revision-Date: 2013-10-09 04:04+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: LANGUAGE \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "所有流量属于这个mesh网络区域的数据流都将通过网关来发送。" + +msgid "Enable Policy Routing" +msgstr "启用策略路由" + +msgid "Fallback to mesh" +msgstr "mesh后备" + +msgid "Firewall zones" +msgstr "防火墙区域" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" +"如果没有缺省的mesh网络路由,则使用属于防火墙区域内的Internet连接作为备用路由。如果你不想要这个,而是阻止该流量,那么你应该选择此选项。" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "如果您自己的网关不可用,则退回到mesh默认网关。" + +msgid "Policy Routing" +msgstr "策略路由" + +msgid "Strict Filtering" +msgstr "严格过滤" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" +"这些页面用于某些防火墙区域设置策略路由。这是非常有用的,如果你需要自己使用自己的互联网连接,但你不想把它分享给其他人(这就是为什么它也被称为“自我模式'" +")。你自己的流量,通过你的互联网连接发送,而mesh中的数据包将使用mesh中另外的网关。" diff --git a/feeds/luci/applications/luci-app-freifunk-policyrouting/po/zh-tw/freifunk-policyrouting.po b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/zh-tw/freifunk-policyrouting.po new file mode 100644 index 0000000..58efa74 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-policyrouting/po/zh-tw/freifunk-policyrouting.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "" +"All traffic from interfaces belonging to these zones will be sent via a " +"gateway in the mesh network." +msgstr "" + +msgid "Enable Policy Routing" +msgstr "" + +msgid "Fallback to mesh" +msgstr "" + +msgid "Firewall zones" +msgstr "" + +msgid "" +"If no default route is received from the mesh network then traffic which " +"belongs to the selected firewall zones is routed via your internet " +"connection as a fallback. If you do not want this and instead block that " +"traffic then you should select this option." +msgstr "" + +msgid "" +"If your own gateway is not available then fallback to the mesh default " +"gateway." +msgstr "" + +msgid "Policy Routing" +msgstr "" + +msgid "Strict Filtering" +msgstr "" + +msgid "" +"These pages can be used to setup policy routing for certain firewall zones. " +"This is useful if you need to use your own internet connection for yourself " +"but you don't want to share it with others (thats why it can also be called " +"'Ego Mode'). Your own traffic is then sent via your internet connection " +"while traffic originating from the mesh will use another gateway in the mesh." +msgstr "" diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/Makefile b/feeds/luci/applications/luci-app-freifunk-widgets/Makefile new file mode 100644 index 0000000..d748827 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Widgets for the Freifunk index page +LUCI_DEPENDS:=+luci-mod-freifunk + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/controller/freifunk/widgets.lua b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/controller/freifunk/widgets.lua new file mode 100644 index 0000000..37104fc --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/controller/freifunk/widgets.lua @@ -0,0 +1,35 @@ +-- Copyright 2012 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local require = require +module "luci.controller.freifunk.widgets" + + +function index() + + local page = node("admin", "freifunk", "widgets") + page.target = cbi("freifunk/widgets/widgets_overview") + page.title = _("Widgets") + page.i18n = "widgets" + page.order = 30 + + local page = node("admin", "freifunk", "widgets", "widget") + page.target = cbi("freifunk/widgets/widget") + page.leaf = true + + local page = node("freifunk", "search_redirect") + page.target = call("search_redirect") + page.leaf = true +end + +function search_redirect() + local dsp = require "luci.dispatcher" + local http = require "luci.http" + local engine = http.formvalue("engine") + local searchterms = http.formvalue("searchterms") or "" + if engine then + http.redirect(engine .. searchterms) + else + http.redirect(dsp.build_url()) + end +end diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/heightwidth.lua b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/heightwidth.lua new file mode 100644 index 0000000..fc23f4b --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/heightwidth.lua @@ -0,0 +1,16 @@ +-- Copyright 2012 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local map, section = ... + +local width = wdg:option(Value, "width", translate("Width")) +width.rmempty = true + +--[[ +local height = wdg:option(Value, "height", translate("Height")) +height.rmempty = true +height.optional = true +]]-- + +local pr = wdg:option(Value, "paddingright", translate("Padding right")) +pr.rmempty = true diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/html.lua b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/html.lua new file mode 100644 index 0000000..adeffa9 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/html.lua @@ -0,0 +1,31 @@ +-- Copyright 2012 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local map, section = ... +local utl = require "luci.util" +local fs = require "nixio.fs" +local file = "/usr/share/customtext/" .. arg[1] .. ".html" + +local form, ferr = loadfile(utl.libpath() .. "/model/cbi/freifunk/widgets/heightwidth.lua") +if form then + setfenv(form, getfenv(1))(m, wdg) +end + +t = wdg:option(TextValue, "_text") +t.rmempty = true +t.rows = 20 + + +function t.cfgvalue() + return fs.readfile(file) or "" +end + +function t.write(self, section, value) + return fs.writefile(file, value) +end + +function t.remove(self, section) + return fs.unlink(file) +end + + diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/iframe.lua b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/iframe.lua new file mode 100644 index 0000000..68ab06d --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/iframe.lua @@ -0,0 +1,13 @@ +-- Copyright 2012 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local map, section = ... +local utl = require "luci.util" + +local form, ferr = loadfile(utl.libpath() .. "/model/cbi/freifunk/widgets/heightwidth.lua") +if form then + setfenv(form, getfenv(1))(m, wdg) +end + +local url = wdg:option(Value, "url", translate("URL")) +url.default = "http://www.freifunk.net" diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/rssfeed.lua b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/rssfeed.lua new file mode 100644 index 0000000..68fa3be --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/rssfeed.lua @@ -0,0 +1,25 @@ +-- Copyright 2012 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local map, section = ... +local utl = require "luci.util" + +local form, ferr = loadfile(utl.libpath() .. "/model/cbi/freifunk/widgets/heightwidth.lua") +if form then + setfenv(form, getfenv(1))(m, wdg) +end + +local url = wdg:option(Value, "url", translate("URL")) +url.default = "http://global.freifunk.net/rss/all/rss.xml" + +local max = wdg:option(Value, "max", translate("Maximal entries to show")) +max.rmempty = true +max.default = "10" +max.datatype = "integer" + +local cache = wdg:option(Value, "cache", translate("Cache Time"), translate("Cache downloaded feed for that many seconds.")) +cache.rmempty = true +cache.default = "3600" +cache.datatype = "integer" + + diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/search.lua b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/search.lua new file mode 100644 index 0000000..a027489 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/search.lua @@ -0,0 +1,15 @@ +-- Copyright 2012 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local map, section = ... +local utl = require "luci.util" + +local form, ferr = loadfile(utl.libpath() .. "/model/cbi/freifunk/widgets/heightwidth.lua") +if form then + setfenv(form, getfenv(1))(m, wdg) +end + +local engine = wdg:option(DynamicList, "engine", translate("Search Engine"), + translate("Use the form Name|URL, where URL must be a full URL to the search engine " .. + "including the query GET parameter, e.g. 'Google|http://www.google.de/search?q='") + ) diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/widget.lua b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/widget.lua new file mode 100644 index 0000000..7b6cd89 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/widget.lua @@ -0,0 +1,37 @@ +-- Copyright 2012 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local uci = require "luci.model.uci".cursor() +local dsp = require "luci.dispatcher" +local utl = require "luci.util" +local widget = uci:get("freifunk-widgets", arg[1], "template") +local title = uci:get("freifunk-widgets", arg[1], "title") or "" + +m = Map("freifunk-widgets", translate("Widget")) +m.redirect = luci.dispatcher.build_url("admin/freifunk/widgets") + +if not arg[1] or m.uci:get("freifunk-widgets", arg[1]) ~= "widget" then + luci.http.redirect(m.redirect) + return +end + +wdg = m:section(NamedSection, arg[1], "widget", translate("Widget") .. " " .. title) +wdg.anonymous = true +wdg.addremove = false + +local en = wdg:option(Flag, "enabled", translate("Enable")) +en.rmempty = false + +local title = wdg:option(Value, "title", translate("Title")) +title.rmempty = true + +local form = loadfile( + utl.libpath() .. "/model/cbi/freifunk/widgets/%s.lua" % widget +) + +if form then + setfenv(form, getfenv(1))(m, wdg) +end + +return m + diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/widgets_overview.lua b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/widgets_overview.lua new file mode 100644 index 0000000..076d8e0 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/model/cbi/freifunk/widgets/widgets_overview.lua @@ -0,0 +1,68 @@ +-- Copyright 2012 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local uci = require "luci.model.uci".cursor() +local fs = require "nixio.fs" +local utl = require "luci.util" +m = Map("freifunk-widgets", translate("Widgets"), + translate("Configure installed widgets.")) + +wdg = m:section(TypedSection, "widget", translate("Widgets")) +wdg.addremove = true +wdg.extedit = luci.dispatcher.build_url("admin/freifunk/widgets/widget/%s") +wdg.template = "cbi/tblsection" +wdg.sortable = true + +--[[ +function wdg.create(...) + local sid = TypedSection.create(...) + luci.http.redirect(wdg.extedit % sid) +end +]]-- + +local en = wdg:option(Flag, "enabled", translate("Enable")) +en.rmempty = false +--en.default = "0" +function en.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" +end + +local tmpl = wdg:option(ListValue, "template", translate("Template")) +local file +for file in fs.dir("/usr/lib/lua/luci/view/freifunk/widgets/") do + if file ~= "." and file ~= ".." then + tmpl:value(file) + end +end + +local title = wdg:option(Value, "title", translate("Title")) +title.rmempty = true + +local width = wdg:option(Value, "width", translate("Width")) +width.rmempty = true + +local height = wdg:option(Value, "height", translate("Height")) +height.rmempty = true + +local pr = wdg:option(Value, "paddingright", translate("Padding right")) +pr.rmempty = true + +function m.on_commit(self) + -- clean custom text files whose config has been deleted + local dir = "/usr/share/customtext/" + local active = {} + uci:foreach("freifunk-widgets", "widget", function(s) + if s["template"] == "html" then + table.insert(active, s[".name"]) + end + end ) + local file + for file in fs.dir(dir) do + local filename = string.gsub(file, ".html", "") + if not utl.contains(active, filename) then + fs.unlink(dir .. file) + end + end +end + +return m diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/clear/main.htm b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/clear/main.htm new file mode 100644 index 0000000..df01839 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/clear/main.htm @@ -0,0 +1,15 @@ +<% +--[[ +LuCI - Lua Configuration Interface + +Copyright 2012 Manuel Munz + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +]]-- +%> +
diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/html/main.htm b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/html/main.htm new file mode 100644 index 0000000..46e063b --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/html/main.htm @@ -0,0 +1,42 @@ +<% +--[[ +LuCI - Lua Configuration Interface + +Copyright 2012 Manuel Munz + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +]]-- + +--local utl = require "luci.util" +local fs = require "nixio.fs" +local title = data.title +local name = data['.name'] +local file = "/usr/share/customtext/" .. name .. ".html" +local text = fs.readfile(file) +local width = data.width or "100%" +local pr = data.paddingright or "0" +if type(width) == "number" then + width = width .. "px" +end + +%> + +
+
+ <% if title then %> +

<%=title%>

+ <% end %> + <% if text then %> + <%=text%> + <%else%> + <%:Could not load the custom text from%> "<%=file%>!" + <%end%> + + <%=data.text%> +
+
diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/iframe/main.htm b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/iframe/main.htm new file mode 100644 index 0000000..f0d89d7 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/iframe/main.htm @@ -0,0 +1,45 @@ +<% +--[[ +LuCI - Lua Configuration Interface + +Copyright 2012 Manuel Munz + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +]]-- + +local url = data['url'] +local name = data['.name'] +local title = data['title'] or "No title set" +local height = data['height'] or "400px" +if type(height) == "number" then + height = height .. "px" +end +local width = data['width'] or "100%" +if type(width) == "number" then + width = width .. "px" +end + +%> + +
+

<%=title%>

+ +<% if not url then %> + +<%:No url set.%> + +<% else %> +
+ + +<%:Sorry, your browser doesn't support the object tag and cannot display this page:%>
+<%=url%> +
+
+
+<%end%> diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/rssfeed/main.htm b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/rssfeed/main.htm new file mode 100644 index 0000000..ff81ba8 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/rssfeed/main.htm @@ -0,0 +1,84 @@ +<% +--[[ +LuCI - Lua Configuration Interface + +Copyright 2012 Manuel Munz + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +]]-- + +local sys = require "luci.sys" +local utl = require "luci.util" +local fs = require "nixio.fs" +local i18n = require "luci.i18n" +local url = data.url +local title = data.title or i18n.translate("RSS") +local max = tonumber(data.max) or 10 +local rss +local pr = data.paddingright or "0" +local output = {} +local width = data.width or "100%" +if type(width) == "number" then + width = width .. "px" +end +local name = data['.name'] +local cachetime = tonumber(data.cache) or 3600 +cachefile = "/tmp/" .. name .. ".cache" +%> +
+
+

<%=title%>

+ + <% if not url then %> + <%:No url found in config%> + <% else + local mtime = fs.stat(cachefile, "mtime") or 0 + local now = os.time() + expire = mtime + cachetime + + if not fs.access(cachefile) or expire < now then + rss = sys.httpget(url) + if #rss == 0 then + %> + <%:Could not get rss data from%> <%=url%> + <% + else + local count = 0 + for item in string.gmatch(rss, "(.-)") do + if count < max then + local title = item:match("(.-)") + local link = item:match("(.-)") + local desc = item:match("(.-)") or "" + if title and link then + table.insert(output, { title = utl.pcdata(title), link = utl.pcdata(link) }) + end + count = count + 1 + end + end + if count > 0 then + local file = io.open(cachefile, "w") + file:write(utl.serialize_data(output)) + file:close() + end + end + else + local file = assert(io.open(cachefile)) + output = utl.restore_data(file:read'*a') + end + end + + if #output > 0 then + %> +
    + <% for k, v in ipairs(output) do %> +
  • <%=v.title%>
  • + <% end %> +
+ <%end%> +
+
diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm new file mode 100644 index 0000000..f2e2fb9 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm @@ -0,0 +1,54 @@ +<% +--[[ +LuCI - Lua Configuration Interface + +Copyright 2012 Manuel Munz + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +]]-- +local utl = require "luci.util" +local title = luci.i18n.translate(data.title or "Search") +local name = data['.name'] +local width = data.width or "100%" + +if type(width) == "number" then + width = width .. "px" +end + +local engines = {} +if type(data.engine) == "table" then + engines = data.engine +else + for k, v in ipairs(string.split(data.engine, " ")) do + table.insert(engines, v) + end +end +%> + +
+

<%=title%>

+
+
+
+ <% + local checked = " checked" + for k, v in ipairs(engines) do + local e = utl.split(v, "|") + local name = e[1] + local url = e[2] + if name and url then + %> + > <%=name%>
+ <% end + checked = "" + end +%> + +
+
+
diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/root/etc/config/freifunk-widgets b/feeds/luci/applications/luci-app-freifunk-widgets/root/etc/config/freifunk-widgets new file mode 100644 index 0000000..5a9f325 --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/root/etc/config/freifunk-widgets @@ -0,0 +1,33 @@ +config widget 'example_iframe' + option template 'iframe' + option url 'http://www.freifunk.net' + option title 'Freifunk Homepage' + option height '500px' + option width '100%' + option enabled '0' + +config widget 'example_rss' + option template 'rssfeed' + option url 'http://global.freifunk.net/rss/all/rss.xml' + option max '10' + option cache '3600' + option enabled '0' + option title 'Globaler Freifunk RSS Feed' + +config widget 'example_search' + option template 'search' + option enabled '0' + option title 'Search' + list engine 'Google|http://www.google.de/search?q=' + list engine 'Freifunk Wiki|http://wiki.freifunk.net/index.php?search=' + option width '50%' + option paddingright '8%' + +config widget 'example_customtext' + option template 'html' + option width '50%' + option enabled '0' + +config widget 'example_clear' + option enabled '0' + option template 'clear' diff --git a/feeds/luci/applications/luci-app-freifunk-widgets/root/lib/upgrade/keep.d/freifunk-widgets b/feeds/luci/applications/luci-app-freifunk-widgets/root/lib/upgrade/keep.d/freifunk-widgets new file mode 100644 index 0000000..ce5537a --- /dev/null +++ b/feeds/luci/applications/luci-app-freifunk-widgets/root/lib/upgrade/keep.d/freifunk-widgets @@ -0,0 +1 @@ +/usr/share/customtext diff --git a/feeds/luci/applications/luci-app-fwknopd/Makefile b/feeds/luci/applications/luci-app-fwknopd/Makefile new file mode 100644 index 0000000..3fbd88a --- /dev/null +++ b/feeds/luci/applications/luci-app-fwknopd/Makefile @@ -0,0 +1,17 @@ +# +# Copyright (C) 2015 The LuCI Team +# +# This is free software, licensed under the GNU General Public License v2. +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Fwknopd config - web config for the firewall knock daemon +LUCI_DEPENDS:=+fwknopd +qrencode +PKG_VERSION:=1.0 +PKG_RELEASE:=1 +PKG_LICENSE:=GPLv2 +PKG_MAINTAINER:=Jonathan Bennett +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-fwknopd/luasrc/controller/fwknopd.lua b/feeds/luci/applications/luci-app-fwknopd/luasrc/controller/fwknopd.lua new file mode 100644 index 0000000..069a77e --- /dev/null +++ b/feeds/luci/applications/luci-app-fwknopd/luasrc/controller/fwknopd.lua @@ -0,0 +1,15 @@ +-- Copyright 2015 Jonathan Bennett +-- Licensed to the public under the GNU General Public License v2. + +module("luci.controller.fwknopd", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/fwknopd") then + return + end + + local page + + page = entry({"admin", "services", "fwknopd"}, cbi("fwknopd"), _("Firewall Knock Daemon")) + page.dependent = true +end diff --git a/feeds/luci/applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua b/feeds/luci/applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua new file mode 100644 index 0000000..4358374 --- /dev/null +++ b/feeds/luci/applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua @@ -0,0 +1,52 @@ +-- Copyright 2015 Jonathan Bennett +-- Licensed to the public under the GNU General Public License v2. +tmp = 0 +m = Map("fwknopd", translate("Firewall Knock Operator")) + +s = m:section(TypedSection, "global", translate("Enable Uci/Luci control")) -- Set uci control on or off +s.anonymous=true +s:option(Flag, "uci_enabled", translate("Enable config overwrite"), translate("When unchecked, the config files in /etc/fwknopd will be used as is, ignoring any settings here.")) + +s = m:section(TypedSection, "access", translate("access.conf stanzas")) -- set the access.conf settings +s.anonymous=true +s.addremove=true +qr = s:option(DummyValue, "note0", "dummy") +qr.tmp = tmp +qr.template = "fwknopd-qr" +qr:depends("uci_enabled", "1") +s:option(Value, "SOURCE", "SOURCE", translate("Use ANY for any source ip")) +k1 = s:option(Value, "KEY", "KEY", translate("Define the symmetric key used for decrypting an incoming SPA packet that is encrypted by the fwknop client with Rijndael.")) +k1:depends("keytype", translate("Normal Key")) +k2 = s:option(Value, "KEY_BASE64", "KEY_BASE64", translate("Define the symmetric key used for decrypting an incoming SPA \ + packet that is encrypted by the fwknop client with Rijndael.")) +k2:depends("keytype", translate("Base 64 key")) +l1 = s:option(ListValue, "keytype", "Key type") +l1:value("Normal Key", "Normal Key") +l1:value("Base 64 key", "Base 64 key") +k3 = s:option(Value, "HMAC_KEY", "HMAC_KEY", "The hmac key") +k3:depends("hkeytype", "Normal Key") +k4 = s:option(Value, "HMAC_KEY_BASE64", "HMAC_KEY_BASE64", translate("The base64 hmac key")) +k4:depends("hkeytype", "Base 64 key") +l2 = s:option(ListValue, "hkeytype", "HMAC Key type") +l2:value("Normal Key", "Normal Key") +l2:value("Base 64 key", "Base 64 key") +s:option(Value, "OPEN_PORTS", "OPEN_PORTS", translate("Define a set of ports and protocols (tcp or udp) that will be opened if a valid knock sequence is seen. \ + If this entry is not set, fwknopd will attempt to honor any proto/port request specified in the SPA data \ + (unless of it matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated.")) +s:option(Value, "FW_ACCESS_TIMEOUT", "FW_ACCESS_TIMEOUT", translate("Define the length of time access will be granted by fwknopd through the firewall after a \ + valid knock sequence from a source IP address. If “FW_ACCESS_TIMEOUT” is not set then the default \ + timeout of 30 seconds will automatically be set.")) +s:option(Value, "REQUIRE_SOURCE_ADDRESS", "REQUIRE_SOURCE_ADDRESS", translate("Force all SPA packets to contain a real IP address within the encrypted data. \ + This makes it impossible to use the -s command line argument on the fwknop client command line, so either -R \ + has to be used to automatically resolve the external address (if the client behind a NAT) or the client must \ + know the external IP and set it via the -a argument.")) + +s = m:section(TypedSection, "config", translate("fwknopd.conf config options")) +s.anonymous=true +s:option(Value, "MAX_SPA_PACKET_AGE", "MAX_SPA_PACKET_AGE", translate("Maximum age in seconds that an SPA packet will be accepted. defaults to 120 seconds")) +s:option(Value, "PCAP_INTF", "PCAP_INTF", translate("Specify the ethernet interface on which fwknopd will sniff packets.")) +s:option(Value, "ENABLE_IPT_FORWARDING", "ENABLE_IPT_FORWARDING", translate("Allow SPA clients to request access to services through an iptables firewall instead of just to it.")) +s:option(Value, "ENABLE_NAT_DNS", "ENABLE_NAT_DNS", translate("Allow SPA clients to request forwarding destination by DNS name.")) + +return m + diff --git a/feeds/luci/applications/luci-app-fwknopd/luasrc/view/fwknopd-qr.htm b/feeds/luci/applications/luci-app-fwknopd/luasrc/view/fwknopd-qr.htm new file mode 100644 index 0000000..5773f52 --- /dev/null +++ b/feeds/luci/applications/luci-app-fwknopd/luasrc/view/fwknopd-qr.htm @@ -0,0 +1,2 @@ +<% print(luci.sys.exec("sh /usr/sbin/gen-qr.sh " .. self.tmp)) %> +<% self.tmp = self.tmp + 1 %> diff --git a/feeds/luci/applications/luci-app-fwknopd/po/en/fwknopd.po b/feeds/luci/applications/luci-app-fwknopd/po/en/fwknopd.po new file mode 100644 index 0000000..fbdd8d7 --- /dev/null +++ b/feeds/luci/applications/luci-app-fwknopd/po/en/fwknopd.po @@ -0,0 +1,116 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2015-05-12 21:03-0500\n" +"Last-Translator: Jonathan Bennett \n" +"Language-Team: English\n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "" +"Allow SPA clients to request access to services through an iptables firewall " +"instead of just to it." +msgstr "" +"Allow SPA clients to request access to services through an iptables firewall " +"instead of just to it." + +msgid "Allow SPA clients to request forwarding destination by DNS name." +msgstr "" + +msgid "Base 64 key" +msgstr "Base 64 key" + +msgid "" +"Define a set of ports and protocols (tcp or udp) that will be opened if a " +"valid knock sequence is seen. If this entry is not set, fwknopd will attempt " +"to honor any proto/port request specified in the SPA data (unless of it " +"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated." +msgstr "" +"Define a set of ports and protocols (tcp or udp) that will be opened if a " +"valid knock sequence is seen. If this entry is not set, fwknopd will attempt " +"to honor any proto/port request specified in the SPA data (unless of it " +"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated." + +msgid "" +"Define the length of time access will be granted by fwknopd through the " +"firewall after a valid knock sequence from a source IP address. If " +"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will " +"automatically be set." +msgstr "" +"Define the length of time access will be granted by fwknopd through the " +"firewall after a valid knock sequence from a source IP address. If " +"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will " +"automatically be set." + +msgid "" +"Define the symmetric key used for decrypting an incoming SPA packet that is " +"encrypted by the fwknop client with Rijndael." +msgstr "" +"Define the symmetric key used for decrypting an incoming SPA packet that is " +"encrypted by the fwknop client with Rijndael." + +msgid "Enable Uci/Luci control" +msgstr "Enable Uci/Luci control" + +msgid "Enable config overwrite" +msgstr "Enable config overwrite" + +msgid "Firewall Knock Daemon" +msgstr "Firewall Knock Daemon" + +msgid "Firewall Knock Operator" +msgstr "Firewall Knock Operator" + +msgid "" +"Force all SPA packets to contain a real IP address within the encrypted " +"data. This makes it impossible to use the -s command line argument on the " +"fwknop client command line, so either -R has to be used to automatically " +"resolve the external address (if the client behind a NAT) or the client must " +"know the external IP and set it via the -a argument." +msgstr "" +"Force all SPA packets to contain a real IP address within the encrypted " +"data. This makes it impossible to use the -s command line argument on the " +"fwknop client command line, so either -R has to be used to automatically " +"resolve the external address (if the client behind a NAT) or the client must " +"know the external IP and set it via the -a argument." + +msgid "" +"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 " +"seconds" +msgstr "" +"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 " +"seconds" + +msgid "Normal Key" +msgstr "Normal Key" + +msgid "Specify the ethernet interface on which fwknopd will sniff packets." +msgstr "Specify the ethernet interface on which fwknopd will sniff packets." + +msgid "The base64 hmac key" +msgstr "The base64 hmac key" + +msgid "Use ANY for any source ip" +msgstr "Use ANY for any source ip" + +msgid "" +"When unchecked, the config files in /etc/fwknopd will be used as is, " +"ignoring any settings here." +msgstr "" +"When unchecked, the config files in /etc/fwknopd will be used as is, " +"ignoring any settings here." + +msgid "access.conf stanzas" +msgstr "access.conf stanzas" + +msgid "fwknopd.conf config options" +msgstr "fwknopd.conf config options" + +#~ msgid "Enter custom access.conf variables below:" +#~ msgstr "Enter custom access.conf variables below:" + +#~ msgid "Enter custom fwknopd.conf variables below:" +#~ msgstr "Enter custom fwknopd.conf variables below:" diff --git a/feeds/luci/applications/luci-app-fwknopd/po/templates/fwknopd.pot b/feeds/luci/applications/luci-app-fwknopd/po/templates/fwknopd.pot new file mode 100644 index 0000000..1010ba7 --- /dev/null +++ b/feeds/luci/applications/luci-app-fwknopd/po/templates/fwknopd.pot @@ -0,0 +1,80 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "" +"Allow SPA clients to request access to services through an iptables firewall " +"instead of just to it." +msgstr "" + +msgid "Allow SPA clients to request forwarding destination by DNS name." +msgstr "" + +msgid "Base 64 key" +msgstr "" + +msgid "" +"Define a set of ports and protocols (tcp or udp) that will be opened if a " +"valid knock sequence is seen. If this entry is not set, fwknopd will attempt " +"to honor any proto/port request specified in the SPA data (unless of it " +"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated." +msgstr "" + +msgid "" +"Define the length of time access will be granted by fwknopd through the " +"firewall after a valid knock sequence from a source IP address. If " +"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will " +"automatically be set." +msgstr "" + +msgid "" +"Define the symmetric key used for decrypting an incoming SPA packet that is " +"encrypted by the fwknop client with Rijndael." +msgstr "" + +msgid "Enable Uci/Luci control" +msgstr "" + +msgid "Enable config overwrite" +msgstr "" + +msgid "Firewall Knock Daemon" +msgstr "" + +msgid "Firewall Knock Operator" +msgstr "" + +msgid "" +"Force all SPA packets to contain a real IP address within the encrypted " +"data. This makes it impossible to use the -s command line argument on the " +"fwknop client command line, so either -R has to be used to automatically " +"resolve the external address (if the client behind a NAT) or the client must " +"know the external IP and set it via the -a argument." +msgstr "" + +msgid "" +"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 " +"seconds" +msgstr "" + +msgid "Normal Key" +msgstr "" + +msgid "Specify the ethernet interface on which fwknopd will sniff packets." +msgstr "" + +msgid "The base64 hmac key" +msgstr "" + +msgid "Use ANY for any source ip" +msgstr "" + +msgid "" +"When unchecked, the config files in /etc/fwknopd will be used as is, " +"ignoring any settings here." +msgstr "" + +msgid "access.conf stanzas" +msgstr "" + +msgid "fwknopd.conf config options" +msgstr "" diff --git a/feeds/luci/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd b/feeds/luci/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd new file mode 100644 index 0000000..65ef012 --- /dev/null +++ b/feeds/luci/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd @@ -0,0 +1,23 @@ +#!/bin/sh +#-- Copyright 2015 Jonathan Bennett +#-- Licensed to the public under the GNU General Public License v2. +. /lib/functions/network.sh + +uci batch < +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Hard Disk Idle Spin-Down module +LUCI_DEPENDS:=+hd-idle + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-hd-idle/luasrc/controller/hd_idle.lua b/feeds/luci/applications/luci-app-hd-idle/luasrc/controller/hd_idle.lua new file mode 100644 index 0000000..f273a55 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/luasrc/controller/hd_idle.lua @@ -0,0 +1,15 @@ +-- Copyright 2008 Yanira +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.hd_idle", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/hd-idle") then + return + end + + local page + + page = entry({"admin", "services", "hd_idle"}, cbi("hd_idle"), _("hd-idle"), 60) + page.dependent = true +end diff --git a/feeds/luci/applications/luci-app-hd-idle/luasrc/model/cbi/hd_idle.lua b/feeds/luci/applications/luci-app-hd-idle/luasrc/model/cbi/hd_idle.lua new file mode 100644 index 0000000..70b04af --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/luasrc/model/cbi/hd_idle.lua @@ -0,0 +1,29 @@ +-- Copyright 2008 Yanira +-- Licensed to the public under the Apache License 2.0. + +require("nixio.fs") + +m = Map("hd-idle", "hd-idle", + translate("hd-idle is a utility program for spinning-down external " .. + "disks after a period of idle time.")) + +s = m:section(TypedSection, "hd-idle", translate("Settings")) +s.anonymous = true + +s:option(Flag, "enabled", translate("Enable")) + +disk = s:option(Value, "disk", translate("Disk")) +disk.rmempty = true +for dev in nixio.fs.glob("/dev/[sh]d[a-z]") do + disk:value(nixio.fs.basename(dev)) +end + +s:option(Value, "idle_time_interval", translate("Idle-time")).default = 10 +s.rmempty = true +unit = s:option(ListValue, "idle_time_unit", translate("Idle-time unit")) +unit.default = "minutes" +unit:value("minutes", translate("min")) +unit:value("hours", translate("h")) +unit.rmempty = true + +return m diff --git a/feeds/luci/applications/luci-app-hd-idle/po/ca/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/ca/hd_idle.po new file mode 100644 index 0000000..29618a8 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/ca/hd_idle.po @@ -0,0 +1,52 @@ +# hd_idle.pot +# generated from ./applications/luci-hd_idle/luasrc/i18n/hd_idle.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2014-07-01 05:48+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "Disc" + +msgid "Enable" +msgstr "Habilita" + +msgid "Idle-time" +msgstr "Temps d'inactivitat" + +msgid "Idle-time unit" +msgstr "Unitat de temps d'inactivitat" + +msgid "Settings" +msgstr "Ajusts" + +# Hours +msgid "h" +msgstr "h" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle és un programa per ralentitzar els discos externs després d'un " +"període de temps inactiu." + +# Minutes (not minimum) +msgid "min" +msgstr "min" + +#~ msgid "Enable debug" +#~ msgstr "Habilita la depuració" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/cs/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/cs/hd_idle.po new file mode 100644 index 0000000..e2deb9b --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/cs/hd_idle.po @@ -0,0 +1,52 @@ +# Generated from applications/luci-hd-idle/luasrc/model/cbi/hd_idle.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2014-04-23 22:33+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "Disk" + +msgid "Enable" +msgstr "Povolit" + +msgid "Idle-time" +msgstr "Čas nečinnosti" + +msgid "Idle-time unit" +msgstr "Čas nečinnosti - jednotka" + +msgid "Settings" +msgstr "Nastavení" + +# Hodin +msgid "h" +msgstr "h" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle je utilita pro vypnutí externích pevných disků po určité době " +"nečinnosti." + +# Minut (ne minimum) +msgid "min" +msgstr "min" + +#~ msgid "Enable debug" +#~ msgstr "Povolit ladění" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/de/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/de/hd_idle.po new file mode 100644 index 0000000..fa54896 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/de/hd_idle.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2011-06-11 01:55+0200\n" +"Last-Translator: Jo-Philipp \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Disk" +msgstr "Festplatte" + +msgid "Enable" +msgstr "Aktivieren" + +msgid "Idle-time" +msgstr "Leerlaufzeit" + +msgid "Idle-time unit" +msgstr "Leerlaufzeiteinheit" + +msgid "Settings" +msgstr "Einstellungen" + +# Hours +msgid "h" +msgstr "Stunden" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle ist ein Hilfsprogramm um externe Festplatten nach einer festgelegten " +"Leerlaufzeit herunter zu fahren." + +# Minutes (not minimum) +msgid "min" +msgstr "Minuten" + +#~ msgid "Enable debug" +#~ msgstr "Debug-Ausgaben aktivieren" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/el/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/el/hd_idle.po new file mode 100644 index 0000000..4d7c23d --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/el/hd_idle.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2012-03-18 15:14+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Disk" +msgstr "Δίσκος" + +msgid "Enable" +msgstr "Ενεργοποίηση" + +msgid "Idle-time" +msgstr "" + +msgid "Idle-time unit" +msgstr "" + +msgid "Settings" +msgstr "Ρυθμίσεις" + +# Hours +msgid "h" +msgstr "ω" + +msgid "hd-idle" +msgstr "" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" + +# Minutes (not minimum) +msgid "min" +msgstr "λεπτά" + +#~ msgid "Enable debug" +#~ msgstr "Ενεργοποίηση αποσφαλμάτωσης" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/en/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/en/hd_idle.po new file mode 100644 index 0000000..7aa4db5 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/en/hd_idle.po @@ -0,0 +1,48 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Disk" +msgstr "Disk" + +msgid "Enable" +msgstr "Enable" + +msgid "Idle-time" +msgstr "Idle-time" + +msgid "Idle-time unit" +msgstr "Idle-time unit" + +msgid "Settings" +msgstr "Settings" + +# Hours +msgid "h" +msgstr "h" + +msgid "hd-idle" +msgstr "" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." + +# Minutes (not minimum) +msgid "min" +msgstr "min" + +#~ msgid "Enable debug" +#~ msgstr "Enable debug" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/es/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/es/hd_idle.po new file mode 100644 index 0000000..d2bb017 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/es/hd_idle.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2012-08-22 17:44+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "Disco" + +msgid "Enable" +msgstr "Activar" + +msgid "Idle-time" +msgstr "Tiempo de inactividad" + +msgid "Idle-time unit" +msgstr "Unidad de tiempo" + +msgid "Settings" +msgstr "Configuración" + +# Hours +msgid "h" +msgstr "h" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle es un programa que gestiona el reposo de discos externos tras un " +"tiempo de inactividad." + +# Minutes (not minimum) +msgid "min" +msgstr "minutos" + +#~ msgid "Enable debug" +#~ msgstr "Activar depuración" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/fr/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/fr/hd_idle.po new file mode 100644 index 0000000..00c092d --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/fr/hd_idle.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2012-11-06 15:20+0200\n" +"Last-Translator: hogsim \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "Disque" + +msgid "Enable" +msgstr "Activer" + +msgid "Idle-time" +msgstr "Temps d'inactivité" + +msgid "Idle-time unit" +msgstr "Unité de temps" + +msgid "Settings" +msgstr "Réglages" + +# Hours +msgid "h" +msgstr "h" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle est un utilitaire pour arrêter la rotation des disques externes " +"après une période d'inactivité." + +# Minutes (not minimum) +msgid "min" +msgstr "min" + +#~ msgid "Enable debug" +#~ msgstr "Activer le débogage" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/he/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/he/hd_idle.po new file mode 100644 index 0000000..0ffde90 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/he/hd_idle.po @@ -0,0 +1,52 @@ +# Generated from applications/luci-hd-idle/luasrc/model/cbi/hd_idle.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2011-06-25 11:35+0200\n" +"Last-Translator: GiladL \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Disk" +msgstr "כונן" + +msgid "Enable" +msgstr "אפשר" + +msgid "Idle-time" +msgstr "זמן חוסר פעילות" + +msgid "Idle-time unit" +msgstr "יחידת זמן חוסר פעילות" + +msgid "Settings" +msgstr "הגדרות" + +# Hours +msgid "h" +msgstr "ש'" + +msgid "hd-idle" +msgstr "" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle הינה תוכנת שירות שמטרתה להקטין את מהירות הסיבוב של כוננים חיצוניים " +"לאחר זמן מסוים של חוסר פעילות." + +# Minutes (not minimum) +msgid "min" +msgstr "דק'" + +#~ msgid "Enable debug" +#~ msgstr "אפשר ניפוי שגיאות" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/hu/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/hu/hd_idle.po new file mode 100644 index 0000000..543a8fc --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/hu/hd_idle.po @@ -0,0 +1,52 @@ +# Generated from applications/luci-hd-idle/luasrc/model/cbi/hd_idle.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2012-07-10 21:04+0200\n" +"Last-Translator: Gyula \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "Lemez" + +msgid "Enable" +msgstr "Engedélyezés" + +msgid "Idle-time" +msgstr "Üresjárati idő" + +msgid "Idle-time unit" +msgstr "Üresjárati idő egysége" + +msgid "Settings" +msgstr "Beállítások" + +# Hours +msgid "h" +msgstr "óra" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle egy a külső lemezek adott üresjárati idő után történő leállítására " +"szolgáló segédprogram." + +# Minutes (not minimum) +msgid "min" +msgstr "perc" + +#~ msgid "Enable debug" +#~ msgstr "Hibakeresés engedélyezése" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/it/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/it/hd_idle.po new file mode 100644 index 0000000..ffd118d --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/it/hd_idle.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2013-02-03 13:54+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "Disco" + +msgid "Enable" +msgstr "Abilita" + +msgid "Idle-time" +msgstr "Tempo di inattività" + +msgid "Idle-time unit" +msgstr "Unità di misura del tempo di inattività" + +msgid "Settings" +msgstr "Opzioni" + +# Hours +msgid "h" +msgstr "ora/e" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"HD-idle è un programma per mettere in standby i dischi esterni dopo un " +"periodo di inattività." + +# Minutes (not minimum) +msgid "min" +msgstr "min" + +#~ msgid "Enable debug" +#~ msgstr "Abilita debug" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/ja/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/ja/hd_idle.po new file mode 100644 index 0000000..9e724eb --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/ja/hd_idle.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2012-11-14 14:40+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "ディスク" + +msgid "Enable" +msgstr "有効" + +msgid "Idle-time" +msgstr "アイドル時間" + +msgid "Idle-time unit" +msgstr "アイドル時間 (単位)" + +msgid "Settings" +msgstr "設定" + +# Hours +msgid "h" +msgstr "時" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idleはアイドル時に外部ディスクをスピンダウンさせるための、ユーティリティプ" +"ログラムです。" + +# Minutes (not minimum) +msgid "min" +msgstr "分" + +#~ msgid "Enable debug" +#~ msgstr "デバッグを有効にする" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/ms/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/ms/hd_idle.po new file mode 100644 index 0000000..45402b8 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/ms/hd_idle.po @@ -0,0 +1,44 @@ +# Generated from applications/luci-hd-idle/luasrc/model/cbi/hd_idle.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2010-04-14 10:33+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Disk" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Idle-time" +msgstr "" + +msgid "Idle-time unit" +msgstr "" + +msgid "Settings" +msgstr "" + +# Hours +msgid "h" +msgstr "" + +msgid "hd-idle" +msgstr "" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" + +# Minutes (not minimum) +msgid "min" +msgstr "" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/no/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/no/hd_idle.po new file mode 100644 index 0000000..dc0c2f8 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/no/hd_idle.po @@ -0,0 +1,39 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Disk" +msgstr "Disk" + +msgid "Enable" +msgstr "Aktiver" + +msgid "Idle-time" +msgstr "Tid inaktiv" + +msgid "Idle-time unit" +msgstr "Tidsenhet" + +msgid "Settings" +msgstr "Innstillinger" + +msgid "h" +msgstr "timer" + +msgid "hd-idle" +msgstr "Hd-Idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle er et verktøy for å spinne ned eksterne disker etter en periode med " +"inaktivitet." + +msgid "min" +msgstr "minutter" + +#~ msgid "Enable debug" +#~ msgstr "Aktiver feilsøking" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/pl/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/pl/hd_idle.po new file mode 100644 index 0000000..c6522c1 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/pl/hd_idle.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2011-06-03 16:09+0200\n" +"Last-Translator: Staszek \n" +"Language-Team: LANGUAGE \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Disk" +msgstr "Dysk" + +msgid "Enable" +msgstr "Włącz" + +msgid "Idle-time" +msgstr "Czas bezczynności" + +msgid "Idle-time unit" +msgstr "Jednostka czasu bezczynności" + +msgid "Settings" +msgstr "Ustawienia" + +# Hours +msgid "h" +msgstr "godz." + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle jest narzędziem do zwalniania obrotów zewnętrznych dysków po " +"określonym czasie bezczynności." + +# Minutes (not minimum) +msgid "min" +msgstr "min" + +#~ msgid "Enable debug" +#~ msgstr "Włącz tryb debugowania" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/pt-br/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/pt-br/hd_idle.po new file mode 100644 index 0000000..0aaca93 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/pt-br/hd_idle.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2011-10-08 03:12+0200\n" +"Last-Translator: luizluca \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Disk" +msgstr "Disco" + +msgid "Enable" +msgstr "Habilitar" + +msgid "Idle-time" +msgstr "Tempo de ociosidade" + +msgid "Idle-time unit" +msgstr "Unidade do tempo da ociosidade" + +msgid "Settings" +msgstr "Configurações" + +# Hours +msgid "h" +msgstr "horas" + +msgid "hd-idle" +msgstr "Hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"Hd-idle é um programa utilitário para ativar o modo \"economia de energia" +"\" (spinning-down) de discos externos após um período de ociosidade." + +# Minutes (not minimum) +msgid "min" +msgstr "minutos" + +#~ msgid "Enable debug" +#~ msgstr "Ativar depuração" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/pt/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/pt/hd_idle.po new file mode 100644 index 0000000..16cb085 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/pt/hd_idle.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2013-05-31 15:28+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "Disco" + +msgid "Enable" +msgstr "Ativar" + +msgid "Idle-time" +msgstr "Tempo de ociosidade" + +msgid "Idle-time unit" +msgstr "Unidade de tempo de ociosidade" + +msgid "Settings" +msgstr "Configurações" + +# Hours +msgid "h" +msgstr "h" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle é um programa utilitário para activar o modo \"economia de energia" +"\" (spinning-down) de discos externos após um período de ociosidade." + +# Minutes (not minimum) +msgid "min" +msgstr "min" + +#~ msgid "Enable debug" +#~ msgstr "Ativar debug" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/ro/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/ro/hd_idle.po new file mode 100644 index 0000000..ae6a8b0 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/ro/hd_idle.po @@ -0,0 +1,53 @@ +# Generated from applications/luci-hd-idle/luasrc/model/cbi/hd_idle.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2013-09-25 19:12+0200\n" +"Last-Translator: Mihai \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "Disc" + +msgid "Enable" +msgstr "Activeaza" + +msgid "Idle-time" +msgstr "Timp de inactivitate" + +msgid "Idle-time unit" +msgstr "Unitatea de timp pentru masurarea inactivitatii" + +msgid "Settings" +msgstr "Setari" + +# Hours +msgid "h" +msgstr "ore" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle este un utilitar pentru a oprit din rotatie hard disc-urile externe " +"dupa o anumita perioada de inactivitate." + +# Minutes (not minimum) +msgid "min" +msgstr "minute" + +#~ msgid "Enable debug" +#~ msgstr "Activeaza informatii suplimentare de tip \"debug\"" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/ru/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/ru/hd_idle.po new file mode 100644 index 0000000..45d4a51 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/ru/hd_idle.po @@ -0,0 +1,52 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: hd_idle\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2012-08-15 11:24+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Disk" +msgstr "Диск" + +msgid "Enable" +msgstr "Включить" + +msgid "Idle-time" +msgstr "Время бездействия" + +msgid "Idle-time unit" +msgstr "Единицы времени бездействия" + +msgid "Settings" +msgstr "Настройки" + +# Hours +msgid "h" +msgstr "ч" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"Утилита hd-idle позволяет замедлять внешние диски после определённого " +"времени бездействия." + +# Minutes (not minimum) +msgid "min" +msgstr "мин" + +#~ msgid "Enable debug" +#~ msgstr "Включить отладку" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/sk/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/sk/hd_idle.po new file mode 100644 index 0000000..0ae82d8 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/sk/hd_idle.po @@ -0,0 +1,38 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Disk" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Idle-time" +msgstr "" + +msgid "Idle-time unit" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "h" +msgstr "" + +msgid "hd-idle" +msgstr "" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" + +msgid "min" +msgstr "" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/sv/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/sv/hd_idle.po new file mode 100644 index 0000000..1d63095 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/sv/hd_idle.po @@ -0,0 +1,39 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Disk" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Idle-time" +msgstr "" + +msgid "Idle-time unit" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "h" +msgstr "" + +msgid "hd-idle" +msgstr "" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" + +msgid "min" +msgstr "" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/templates/hd_idle.pot b/feeds/luci/applications/luci-app-hd-idle/po/templates/hd_idle.pot new file mode 100644 index 0000000..56079ed --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/templates/hd_idle.pot @@ -0,0 +1,31 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Disk" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Idle-time" +msgstr "" + +msgid "Idle-time unit" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "h" +msgstr "" + +msgid "hd-idle" +msgstr "" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" + +msgid "min" +msgstr "" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/tr/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/tr/hd_idle.po new file mode 100644 index 0000000..f9ace87 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/tr/hd_idle.po @@ -0,0 +1,52 @@ +# Generated from applications/luci-hd-idle/luasrc/model/cbi/hd_idle.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2012-10-11 23:15+0200\n" +"Last-Translator: vincenzo \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "Disk" + +msgid "Enable" +msgstr "Kullanıma Aç" + +msgid "Idle-time" +msgstr "Bekleme Zamanı" + +msgid "Idle-time unit" +msgstr "bekleme zamanı birimi" + +msgid "Settings" +msgstr "Ayarlar" + +# Hours +msgid "h" +msgstr "s" + +msgid "hd-idle" +msgstr "Harddisk-Park" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"Harddisk-Park belirli bir zaman sonra diskleri beklemeye alan bir yardımcı " +"programdır" + +# Minutes (not minimum) +msgid "min" +msgstr "d" + +#~ msgid "Enable debug" +#~ msgstr "Hata Ayıklama" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/uk/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/uk/hd_idle.po new file mode 100644 index 0000000..129fd7b --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/uk/hd_idle.po @@ -0,0 +1,52 @@ +# Generated from applications/luci-hd-idle/luasrc/model/cbi/hd_idle.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2013-08-13 15:59+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "Диск" + +msgid "Enable" +msgstr "Активувати" + +msgid "Idle-time" +msgstr "Час простою" + +msgid "Idle-time unit" +msgstr "" + +msgid "Settings" +msgstr "Налаштування" + +# Hours +msgid "h" +msgstr "" + +#, fuzzy +msgid "hd-idle" +msgstr "HD-простій" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" + +# Minutes (not minimum) +msgid "min" +msgstr "хв" + +#~ msgid "Enable debug" +#~ msgstr "Активувати налагодження" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/vi/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/vi/hd_idle.po new file mode 100644 index 0000000..03ee2c1 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/vi/hd_idle.po @@ -0,0 +1,53 @@ +# hd_idle.pot +# generated from ./applications/luci-hd_idle/luasrc/i18n/hd_idle.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2009-08-12 17:50+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "Disk" +msgstr "Ổ đĩa" + +#, fuzzy +msgid "Enable" +msgstr "Kích hoạt debug" + +#, fuzzy +msgid "Idle-time" +msgstr "Thời gian Idle" + +#, fuzzy +msgid "Idle-time unit" +msgstr "Đơn vị thời gian Idle" + +msgid "Settings" +msgstr "Sắp đặt" + +# Hours +msgid "h" +msgstr "" + +msgid "hd-idle" +msgstr "hd-idle" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "" +"hd-idle là một chương trình tiện ích để quay các đĩa ngoài sau một khoảng " +"thời gian idle." + +# Minutes (not minimum) +msgid "min" +msgstr "" + +#~ msgid "Enable debug" +#~ msgstr "Kích hoạt debug" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/zh-cn/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/zh-cn/hd_idle.po new file mode 100644 index 0000000..8bc14dc --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/zh-cn/hd_idle.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 10:33+0200\n" +"PO-Revision-Date: 2012-09-03 17:57+0200\n" +"Last-Translator: nKsyn \n" +"Language-Team: QQ Group:75543259 \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "硬盘" + +msgid "Enable" +msgstr "开启" + +msgid "Idle-time" +msgstr "空闲时间" + +msgid "Idle-time unit" +msgstr "空闲时间单位" + +msgid "Settings" +msgstr "设置" + +# Hours +msgid "h" +msgstr "小时" + +msgid "hd-idle" +msgstr "硬盘休眠" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "硬盘休眠是一个让硬盘在空闲一段时间后休眠的工具" + +# Minutes (not minimum) +msgid "min" +msgstr "分钟" + +#~ msgid "Enable debug" +#~ msgstr "开启调试" diff --git a/feeds/luci/applications/luci-app-hd-idle/po/zh-tw/hd_idle.po b/feeds/luci/applications/luci-app-hd-idle/po/zh-tw/hd_idle.po new file mode 100644 index 0000000..bd69785 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/po/zh-tw/hd_idle.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-07 15:47+0200\n" +"Last-Translator: Ethan \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Disk" +msgstr "磁碟" + +msgid "Enable" +msgstr "啟用" + +msgid "Idle-time" +msgstr "休眠時間" + +msgid "Idle-time unit" +msgstr "休眠時間單位" + +msgid "Settings" +msgstr "設定" + +msgid "h" +msgstr "小時" + +msgid "hd-idle" +msgstr "硬碟休眠" + +msgid "" +"hd-idle is a utility program for spinning-down external disks after a period " +"of idle time." +msgstr "硬碟休眠是控制當硬碟閒置一段時間後進入休眠模式的工具" + +msgid "min" +msgstr "分鐘" + +#~ msgid "Enable debug" +#~ msgstr "啟用偵錯模式" diff --git a/feeds/luci/applications/luci-app-hd-idle/root/etc/uci-defaults/40_luci-hd_idle b/feeds/luci/applications/luci-app-hd-idle/root/etc/uci-defaults/40_luci-hd_idle new file mode 100755 index 0000000..92f4356 --- /dev/null +++ b/feeds/luci/applications/luci-app-hd-idle/root/etc/uci-defaults/40_luci-hd_idle @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@hd-idle[-1] + add ucitrack hd-idle + set ucitrack.@hd-idle[-1].init=hd-idle + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-ltqtapi/Makefile b/feeds/luci/applications/luci-app-ltqtapi/Makefile new file mode 100644 index 0000000..bf4a999 --- /dev/null +++ b/feeds/luci/applications/luci-app-ltqtapi/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for Lantiq Devices +LUCI_DEPENDS:=@BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-ltqtapi/luasrc/controller/ltqtapi.lua b/feeds/luci/applications/luci-app-ltqtapi/luasrc/controller/ltqtapi.lua new file mode 100644 index 0000000..46c7684 --- /dev/null +++ b/feeds/luci/applications/luci-app-ltqtapi/luasrc/controller/ltqtapi.lua @@ -0,0 +1,40 @@ +-- Copyright 2019 John Crispin +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.ltqtapi", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/telephony") then + return + end + + page = node("admin", "telephony") + page.target = firstchild() + page.title = _("VoIP") + page.order = 90 + + entry({"admin", "telephony", "account"}, cbi("luci_ltqtapi/account") , _("Account"), 10) + entry({"admin", "telephony", "contact"}, cbi("luci_ltqtapi/contact") , _("Contacts"), 20) + + entry({"admin", "telephony", "status"}, call("tapi_status")).leaf = true +end + +function tapi_status() + local st = { } + local state = require "luci.model.uci".cursor_state() + state:load("telephony") + + st.status = "Offline"; + if state:get("telephony", "state", "port1", "0") == "0" then + st.line1 = "Idle"; + else + st.line1 = "Calling"; + end + if state:get("telephony", "state", "port2", "0") == "0" then + st.line2 = "Idle"; + else + st.line2 = "Calling"; + end + luci.http.prepare_content("application/json") + luci.http.write_json(st) +end diff --git a/feeds/luci/applications/luci-app-ltqtapi/luasrc/model/cbi/luci_ltqtapi/account.lua b/feeds/luci/applications/luci-app-ltqtapi/luasrc/model/cbi/luci_ltqtapi/account.lua new file mode 100644 index 0000000..907db56 --- /dev/null +++ b/feeds/luci/applications/luci-app-ltqtapi/luasrc/model/cbi/luci_ltqtapi/account.lua @@ -0,0 +1,16 @@ +-- Copyright 2010 John Crispin +-- Licensed to the public under the Apache License 2.0. + +m = Map("telephony", translate("VoIP")) +m.on_after_commit = function() luci.sys.call("/etc/init.d/telephony restart") end + +s = m:section(TypedSection, "account", translate("Account"), translate("Here You can specify the SIP account that you want to use.")) +s.anonymous = true +s.addremove = true + +s:option(Value, "realm", translate("Realm")) +s:option(Value, "username", translate("Username")) +s:option(Value, "password", translate("Password")) +s:option(Flag, "disabled", translate("Disabled")) + +return m diff --git a/feeds/luci/applications/luci-app-ltqtapi/luasrc/model/cbi/luci_ltqtapi/contact.lua b/feeds/luci/applications/luci-app-ltqtapi/luasrc/model/cbi/luci_ltqtapi/contact.lua new file mode 100644 index 0000000..b32fede --- /dev/null +++ b/feeds/luci/applications/luci-app-ltqtapi/luasrc/model/cbi/luci_ltqtapi/contact.lua @@ -0,0 +1,20 @@ +-- Copyright 2010 John Crispin +-- Licensed to the public under the Apache License 2.0. + +m = Map("telephony", translate("VoIP")) +m.on_after_commit = function() luci.sys.call("/etc/init.d/telephony reload") end + +s = m:section(TypedSection, "contact", translate("Contact"), translate("Here You can specify the SIP contacts that you want to use.")) +s.anonymous = true +s.addremove = true +s.template = "cbi/tsection" + +s:option(Value, "desc", translate("Name")) +s:option(Value, "code", translate("Shortdial")) +s:option(Value, "dial", translate("Dial")) + +t = s:option(ListValue, "type", translate("Type")) +t:value("sip", "SIP") +t:value("realm", "Landline") + +return m diff --git a/feeds/luci/applications/luci-app-ltqtapi/luasrc/view/admin_status/index/telephony.htm b/feeds/luci/applications/luci-app-ltqtapi/luasrc/view/admin_status/index/telephony.htm new file mode 100644 index 0000000..c7a58dd --- /dev/null +++ b/feeds/luci/applications/luci-app-ltqtapi/luasrc/view/admin_status/index/telephony.htm @@ -0,0 +1 @@ +<%+telephony_status%> diff --git a/feeds/luci/applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm b/feeds/luci/applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm new file mode 100644 index 0000000..d861ef9 --- /dev/null +++ b/feeds/luci/applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm @@ -0,0 +1,32 @@ + + +
+ <%:Current Telephony State%> + + + + + + + + + +
<%:Uplink%><%:Port1%><%:Port2%>

<%:Collecting data...%>
+
diff --git a/feeds/luci/applications/luci-app-meshwizard/Makefile b/feeds/luci/applications/luci-app-meshwizard/Makefile new file mode 100644 index 0000000..fb2610e --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Shellscript based wizard to setup mesh networks +LUCI_DEPENDS:=+meshwizard + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-meshwizard/luasrc/controller/meshwizard.lua b/feeds/luci/applications/luci-app-meshwizard/luasrc/controller/meshwizard.lua new file mode 100644 index 0000000..0ad76b5 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/luasrc/controller/meshwizard.lua @@ -0,0 +1,9 @@ +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +module "luci.controller.meshwizard" + +function index() + entry({"admin", "freifunk", "meshwizard"}, cbi("freifunk/meshwizard"), _("Mesh Wizard"), 40) +end + diff --git a/feeds/luci/applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua b/feeds/luci/applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua new file mode 100644 index 0000000..68f7a5a --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua @@ -0,0 +1,199 @@ +-- wizard rewrite wip + +local uci = require "luci.model.uci".cursor() +local sys = require "luci.sys" +local util = require "luci.util" +local ip = require "luci.ip" + +local community = "profile_" .. (uci:get("freifunk", "community", "name") or "Freifunk") +local mesh_network = ip.IPv4(uci:get_first(community, "community", "mesh_network") or "10.0.0.0/8") +local community_ipv6 = uci:get_first(community, "community", "ipv6") or 0 +local community_ipv6mode = uci:get_first(community, "community", "ipv6_config") or "static" +local meshkit_ipv6 = uci:get("meshwizard", "ipv6", "enabled") or 0 +local community_vap = uci:get_first(community, "community", "vap") or 0 + +m = Map("meshwizard", translate("Wizard"), translate("This wizard will assist you in setting up your router for Freifunk " .. + "or another similar wireless community network.")) + +n = m:section(NamedSection, "netconfig", nil, translate("Interfaces")) +n.anonymous = true + +-- common functions + +function cbi_configure(device) + local configure = n:taboption(device, Flag, device .. "_config", translate("Configure this interface"), + translate("Note: this will set up this interface for mesh operation, i.e. add it to zone 'freifunk' and enable olsr.")) +end + +function cbi_ip4addr(device) + local ip4addr = n:taboption(device, Value, device .. "_ip4addr", translate("Mesh IP address"), + translate("This is a unique address in the mesh (e.g. 10.1.1.1) and has to be registered at your local community.")) + ip4addr:depends(device .. "_config", 1) + ip4addr.datatype = "ip4addr" + function ip4addr.validate(self, value) + local x = ip.IPv4(value) + if mesh_network:contains(x) then + return value + else + return nil, translate("The given IP address is not inside the mesh network range ") .. + "(" .. mesh_network:string() .. ")." + end + end +end + +function cbi_ip6addr(device) + local ip6addr = n:taboption(device, Value, device .. "_ip6addr", translate("Mesh IPv6 address"), + translate("This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and has to be registered at your local community.")) + ip6addr:depends(device .. "_config", 1) + ip6addr.datatype = "ip6addr" +end + + +function cbi_dhcp(device) + local dhcp = n:taboption(device, Flag, device .. "_dhcp", translate("Enable DHCP"), + translate("DHCP will automatically assign ip addresses to clients")) + dhcp:depends(device .. "_config", 1) + dhcp.rmempty = true +end + +function cbi_ra(device) + local ra = n:taboption(device, Flag, device .. "_ipv6ra", translate("Enable RA"), + translate("Send router advertisements on this device.")) + ra:depends(device .. "_config", 1) + ra.rmempty = true +end + +function cbi_dhcprange(device) + local dhcprange = n:taboption(device, Value, device .. "_dhcprange", translate("DHCP IP range"), + translate("The IP range from which clients are assigned ip addresses (e.g. 10.1.2.1/28). " .. + "If this is a range inside your mesh network range, then it will be announced as HNA. Any other range will use NAT. " .. + "If left empty then the defaults from the community profile will be used.")) + dhcprange:depends(device .. "_dhcp", "1") + dhcprange.rmempty = true + dhcprange.datatype = "ip4addr" +end +-- create tabs and config for wireless +local nets={} +uci:foreach("wireless", "wifi-device", function(section) + local device = section[".name"] + table.insert(nets, device) +end) + +local wired_nets = {} +uci:foreach("network", "interface", function(section) + local device = section[".name"] + if not util.contains(nets, device) and device ~= "loopback" and not device:find("wireless") then + table.insert(nets, device) + table.insert(wired_nets, device) + end +end) + +for _, net in util.spairs(nets, function(a,b) return (nets[a] < nets[b]) end) do + n:tab(net, net) +end + +-- create cbi config for wireless +uci:foreach("wireless", "wifi-device", function(section) + local device = section[".name"] + local hwtype = section.type + local syscc = section.country or uci:get(community, "wifi_device", "country") or + uci:get("freifunk", "wifi_device", "country") + + cbi_configure(device) + + -- Channel selection + + if hwtype == "atheros" then + local cc = util.trim(sys.exec("grep -i '" .. syscc .. "' /lib/wifi/cc_translate.txt |cut -d ' ' -f 2")) or 0 + sys.exec('"echo " .. cc .. " > /proc/sys/dev/" .. device .. "/countrycode"') + elseif hwtype == "mac80211" then + sys.exec("iw reg set " .. syscc) + elseif hwtype == "broadcom" then + sys.exec ("wlc country " .. syscc) + end + + local chan = n:taboption(device, ListValue, device .. "_channel", translate("Channel"), + translate("Your device and neighbouring nodes have to use the same channel.")) + chan:depends(device .. "_config", 1) + chan:value('default') + + local iwinfo = sys.wifi.getiwinfo(device) + if iwinfo and iwinfo.freqlist then + for _, f in ipairs(iwinfo.freqlist) do + if not f.restricted then + chan:value(f.channel) + end + end + end + -- IPv4 address + cbi_ip4addr(device) + + -- DHCP enable + cbi_dhcp(device) + + -- DHCP range + cbi_dhcprange(device) + + -- IPv6 addr and RA + if community_ipv6 == "1" then + if community_ipv6mode == "static" then + cbi_ip6addr(device) + end + cbi_ra(device) + end + + -- Enable VAP + local supports_vap = 0 + if sys.call("/usr/bin/meshwizard/helpers/supports_vap.sh " .. device .. " " .. hwtype) == 0 then + supports_vap = 1 + end + if supports_vap == 1 then + local vap = n:taboption(device, Flag, device .. "_vap", translate("Virtual Access Point (VAP)"), + translate("This will setup a new virtual wireless interface in Access Point mode.")) + vap:depends(device .. "_dhcp", "1") + vap.rmempty = true + if community_vap == "1" then + vap.default = "1" + end + end +end) + +for _, device in pairs(wired_nets) do + cbi_configure(device) + cbi_ip4addr(device) + cbi_dhcp(device) + cbi_dhcprange(device) + -- IPv6 addr and RA + if community_ipv6 == "1" then + if community_ipv6mode == "static" then + cbi_ip6addr(device) + end + cbi_ra(device) + end +end + +-- General settings +g = m:section(TypedSection, "general", translate("General Settings")) +g.anonymous = true + +local cleanup = g:option(Flag, "cleanup", translate("Cleanup config"), + translate("If this is selected then config is cleaned before setting new config options.")) +cleanup.default = "1" + +local restrict = g:option(Flag, "local_restrict", translate("Protect LAN"), + translate("Check this to protect your LAN from other nodes or clients") .. " (" .. translate("recommended") .. ").") + +local share = g:option(Flag, "sharenet", translate("Share your internet connection"), + translate("Select this to allow others to use your connection to access the internet.")) + share.rmempty = true + +-- IPv6 config +if community_ipv6 == "1" then + v6 = m:section(NamedSection, "ipv6", nil, translate("IPv6 Settings")) + local enabled = v6:option(Flag, "enabled", translate("Enabled"), + translate("Activate or deactivate IPv6 config globally.")) + enabled.default = meshkit_ipv6 + enabled.rmempty = false +end + +return m diff --git a/feeds/luci/applications/luci-app-meshwizard/po/ca/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/ca/meshwizard.po new file mode 100644 index 0000000..6d7bf93 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/ca/meshwizard.po @@ -0,0 +1,144 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-06-01 23:43+0200\n" +"PO-Revision-Date: 2014-07-01 06:11+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "Activa o desactiva la configuració IPv6 globalment." + +msgid "Channel" +msgstr "Canal" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "Neteja la configuració" + +msgid "Configure this interface" +msgstr "Configura aquesta interfície" + +msgid "DHCP IP range" +msgstr "Rang IP de DHCP" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "DHCP assignarà automàticament adreces IP als clients" + +msgid "Enable DHCP" +msgstr "Habilita DHCP" + +msgid "Enable RA" +msgstr "Habilita RA" + +msgid "Enabled" +msgstr "Habilitat" + +msgid "General Settings" +msgstr "Ajusts generals" + +msgid "IPv6 Settings" +msgstr "Ajusts IPv6" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" +"Si això està seleccionat, la configuració es neteja abans d'establir noves " +"opcions de configuració." + +msgid "Interfaces" +msgstr "Interfícies" + +msgid "Mesh IP address" +msgstr "Adreça IP en malla" + +msgid "Mesh IPv6 address" +msgstr "Adreça IPv6 en malla" + +msgid "Mesh Wizard" +msgstr "Ajudant de malla" + +#, fuzzy +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" +"Nota: això configurarà aquesta interfície per a operació en malla, és a dir, " +"la afegirà a la zona 'freifunk' i habilitarà l'OLSR." + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" +"Seleccioneu aquesta opció per permetre que altres utilitzin la vostra " +"connexió per accedir a Internet." + +msgid "Send router advertisements on this device." +msgstr "Envia publicitats d'encaminador en aquest dispositiu." + +msgid "Share your internet connection" +msgstr "Comparteix la vostra connexió a Internet" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" +"El rang IP del qual s'assignen adreces IP als clients (per exemple, " +"10.1.2.1/28). Si aquest és un rang dins del vostre rang de xarxa en malla, " +"s'anunciarà com HNA. Qualsevol altre rang utilitzarà NAT. Si deixat en " +"blanc, els valors per defecte del perfil comunitari s'utilitzaran." + +msgid "The given IP address is not inside the mesh network range" +msgstr "L'adreça IP donada no està dins del rang de la xarxa en malla" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" +"Aquesta és una adreça IPv4 única en notació CIDR (per exemple, " +"2001:1:2:3::1/64) i ha de ser registrada a la vostra comunitat local." + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" +"Aquesta és una adreça única en la malla (per exemple, 10.1.1.1) i ha de ser " +"registrada a la vostra comunitat local." + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" +"Això configurarà una nova interfície sense fil virtual en mode de punt " +"d'accés." + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" +"Aquest ajudant us ajudarà a configurar el vostre encaminador per al Freifunk " +"o altre xarxa comunitària sense fil similar." + +msgid "Virtual Access Point (VAP)" +msgstr "Punt d'accés virtual (VAP)" + +msgid "Wizard" +msgstr "Ajudant" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" +"El vostre dispositiu i els nodes veïns han d'utilitzar el mateix canal." + +msgid "recommended" +msgstr "recomanat" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/cs/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/cs/meshwizard.po new file mode 100644 index 0000000..b1253d0 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/cs/meshwizard.po @@ -0,0 +1,122 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-21 14:39+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "Kanál" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "Nastavit toto rozhraní" + +msgid "DHCP IP range" +msgstr "DHCP IP rozsah" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "Povolit DHCP" + +msgid "Enable RA" +msgstr "Povolit RA" + +msgid "Enabled" +msgstr "Povoleno" + +msgid "General Settings" +msgstr "Obecné nastavení" + +msgid "IPv6 Settings" +msgstr "Nastavení IPv6" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "Rozhraní" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "Průvodce mesh" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "Ochrana LAN" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "Sdílet vaše internetové připojení" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "Virtuální přístupový bod (VAP)" + +msgid "Wizard" +msgstr "Průvodce" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "doporučeno" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/de/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/de/meshwizard.po new file mode 100644 index 0000000..ef7ba8a --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/de/meshwizard.po @@ -0,0 +1,145 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-06-26 15:36+0200\n" +"PO-Revision-Date: 2012-11-21 20:51+0200\n" +"Last-Translator: Jo-Philipp \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "IPv6 global aktivieren oder deaktivieren" + +msgid "Channel" +msgstr "Kanal" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" +"Aktivieren um Zugriff auf das LAN von anderen Knoten oder Clients zu " +"verhindern" + +msgid "Cleanup config" +msgstr "Konfiguration aufräumen" + +msgid "Configure this interface" +msgstr "Diese Schnittstelle einrichten" + +msgid "DHCP IP range" +msgstr "DHCP-Adressbereich" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "DHCP vergibt automatisch IP-Adressen an Clients" + +msgid "Enable DHCP" +msgstr "DHCP aktivieren" + +msgid "Enable RA" +msgstr "RAs aktivieren" + +msgid "Enabled" +msgstr "Aktiviert" + +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +msgid "IPv6 Settings" +msgstr "IPv6 Einstellungen" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" +"Wenn diese Option aktiviert wird, werden eventuell vorhandene Einstellungen " +"aufgeräumt bevor neue Optionen gesetzt werden." + +msgid "Interfaces" +msgstr "Schnittstellen" + +msgid "Mesh IP address" +msgstr "Mesh-IP-Adresse" + +msgid "Mesh IPv6 address" +msgstr "Mesh-IPv6-Adresse" + +msgid "Mesh Wizard" +msgstr "Mesh-Assistent" + +#, fuzzy +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" +"Hinweis: Dies konfiguriert die Schnittstelle für den Mesh-Betrieb, d.h. sie " +"wird zur Freifunk-Zone hinzugefügt und OLSR eingerichtet." + +msgid "Protect LAN" +msgstr "LAN schützen" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" +"Diese Option aktivieren um anderen den Zugriff auf die lokale " +"Internetverbindung zu gestatten" + +msgid "Send router advertisements on this device." +msgstr "Router-Advertisements auf dieser Schnittstelle senden" + +msgid "Share your internet connection" +msgstr "Internetverbindung freigeben" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" +"Der Adressbereich, aus welchem den Clients IP-Adressen zugewiesen werden (z." +"B. 10.1.2.1/28). Liegt dieser Adressbereich außerhalb des Mesh-Bereiches, " +"dann wird dieser per HNA angekündigt. Leer lassen um den Standardwert aus " +"dem Community-Profil zu verwenden." + +msgid "The given IP address is not inside the mesh network range" +msgstr "Die angegebene IP-Adresse ist nicht Teil des Mesh-Adressbereiches" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" +"Diese ist eine eindeutige IPv6-Adresse in CIDR-Notation (z.B. " +"2001:1:2:3::1/64) welche bei der lokalen Community registriert werden muss." + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" +"Dies ist die eindeutige IP-Adresse des Mesh-Knotens (z.B. 10.1.1.1). Diese " +"muss bei der lokalen Community registriert werden." + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" +"Dies richtet eine weitere, virtuelle WLAN-Schnittstelle im Access-Point-" +"Modus ein." + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" +"Der Assistent hilft beim Einrichten des Routers für ein Freifunk- oder " +"ähnliches Wireless-Community-Netzwerk." + +msgid "Virtual Access Point (VAP)" +msgstr "Virtueller Access-Point (VAP)" + +msgid "Wizard" +msgstr "Assistent" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "Dieses Gerät und benachbarte Knoten müssen den selben Kanal verwenden." + +msgid "recommended" +msgstr "empfohlen" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/el/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/el/meshwizard.po new file mode 100644 index 0000000..1aeff1e --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/el/meshwizard.po @@ -0,0 +1,124 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-18 15:14+0200\n" +"PO-Revision-Date: 2012-03-31 15:40+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "Κανάλι" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "Καθαρισμός ρυθμίσεων" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "Ενεργοποίηση DHCP" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "Γενικές Ρυθμίσεις" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "Διεπαφές" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/en/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/en/meshwizard.po new file mode 100644 index 0000000..a67c71f --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/en/meshwizard.po @@ -0,0 +1,109 @@ +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/es/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/es/meshwizard.po new file mode 100644 index 0000000..9471d42 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/es/meshwizard.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-23 22:25+0200\n" +"PO-Revision-Date: 2012-11-24 10:22+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "Activar o desactivar la configuración IPv6 globalmente." + +msgid "Channel" +msgstr "Canal" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "Proteger la LAN de otros nodos y clientes" + +msgid "Cleanup config" +msgstr "Borrar configuración" + +msgid "Configure this interface" +msgstr "Configurar esta interfaz" + +msgid "DHCP IP range" +msgstr "Rango IP de DHCP" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "DHCP asignará direcciones IP automáticamente a los clientes" + +msgid "Enable DHCP" +msgstr "Activar DHCP" + +msgid "Enable RA" +msgstr "Activar RA" + +msgid "Enabled" +msgstr "Activado" + +msgid "General Settings" +msgstr "Configuración general" + +msgid "IPv6 Settings" +msgstr "Configuración IPv6" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "Borrar la configuración antes de establecer una nueva." + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Mesh IP address" +msgstr "Dirección IP del mesh" + +msgid "Mesh IPv6 address" +msgstr "Dirección IPv6 del mesh" + +msgid "Mesh Wizard" +msgstr "Asistente del mesh" + +#, fuzzy +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" +"Nota: esto configurará esta interfaz para uso mesh, es decir: la añadirá a " +"la zona \"freifunk\" y activará OSLR." + +msgid "Protect LAN" +msgstr "Proteger LAN" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "Permitir a otros usar su conexión para acceder a internet." + +msgid "Send router advertisements on this device." +msgstr "Envía publicaciones de routers por este dispositivo." + +msgid "Share your internet connection" +msgstr "Compartir su conexión a internet" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" +"Rango IP desde el que asignar direcciones IP (ej. 10.1.2.1/28). Si el rango " +"está dentro del de la mesh se declarará como HNA. Cualquier otro rango usará " +"NAT. Si se deja vación tomará el del perfil de la comunidad." + +msgid "The given IP address is not inside the mesh network range" +msgstr "Este rango IP no está dentro del de la red mesh" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" +"Dirección única IPv6 en notación CIDR (p.e.: 2001:1:2:3::1/64) y que tiene " +"que estar registrada en su comunidad local." + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" +"Esta dirección debe ser única en la mesh (ej. 10.1.1.1) y debe registrarse " +"en su comunidad local." + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" +"Configurar un nuevo interfaz virtual inalámbrico en modo punto de acceso." + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" +"Este asistente le ayudará a configurar su ruter para Freifunk o una red " +"comunitaria similar." + +msgid "Virtual Access Point (VAP)" +msgstr "Punto de acceso virtual (VAP)" + +msgid "Wizard" +msgstr "Asistente" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "Su dispositivo y los vecinos deben usar el mismo canal." + +msgid "recommended" +msgstr "recomendado" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/fr/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/fr/meshwizard.po new file mode 100644 index 0000000..c9f7b02 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/fr/meshwizard.po @@ -0,0 +1,139 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-23 22:20+0200\n" +"PO-Revision-Date: 2011-11-23 22:20+0200\n" +"Last-Translator: fredb \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "Canal" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "Cochez ceci pour protéger votre réseau LAN des autres nœuds ou clients" + +msgid "Cleanup config" +msgstr "Nettoyer la config" + +msgid "Configure this interface" +msgstr "Configurer cette interface" + +msgid "DHCP IP range" +msgstr "Gamme d'adresses IP pour DHCP" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "Le serveur DHCP donnera automatiquement des adresses IP aux clients" + +msgid "Enable DHCP" +msgstr "Activer le serveur DHCP" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "Paramètres généraux" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" +"Si vous sélectionnez ceci, la configuration sera nettoyée avant de " +"positionner de nouvelles options de configuration." + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Mesh IP address" +msgstr "Adresse IP maillée" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "Assistant de Maillage" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "Protéger le LAN" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" +"Sélectionnez ceci pour permettre aux autres d'utiliser votre connexion pour " +"accéder à Internet." + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "Partager votre connexion Internet" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" +"La gamme d'adresses IP utilisée pour attribuer des adresses IP aux clients " +"(par ex. 10.1.2.1/28). Si ce lot d'adresses est compris dans le réseau " +"maillé, il sera annoncé comme HNA, sinon du NAT sera utilisé. Si ce champ " +"reste vide, les valeurs par défaut du profil de la communauté seront " +"utilisées." + +msgid "The given IP address is not inside the mesh network range" +msgstr "L'adresse IP donnée n'est pas dans le réseau maillé" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" +"C'est une adresse unique dans le réseau maillé (par ex. 10.1.1.1) et doit " +"être enregistré dans votre communauté locale." + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" +"Cela configurera une nouvelle interface sans-fil virtuelle en mode Point " +"d'Accès." + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" +"Cet assistant vous aidera à configurer votre routeur pour le réseau maillé " +"Freifunk ou un autre réseau sans-fil communautaire du même genre." + +msgid "Virtual Access Point (VAP)" +msgstr "Point d'accès virtuel (VAP)" + +msgid "Wizard" +msgstr "Assistant" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "Votre matériel et les nœuds voisins doivent utiliser le même canal." + +msgid "recommended" +msgstr "recommandé" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/he/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/he/meshwizard.po new file mode 100644 index 0000000..acf5f10 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/he/meshwizard.po @@ -0,0 +1,119 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/hu/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/hu/meshwizard.po new file mode 100644 index 0000000..22aecce --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/hu/meshwizard.po @@ -0,0 +1,122 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-09 12:55+0200\n" +"Last-Translator: Bgray \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "Globális IPV6 konfiguráció aktiválása vagy kikapcsolása." + +msgid "Channel" +msgstr "Csatorna" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "DHCP Engedélyezése" + +msgid "Enable RA" +msgstr "RA Engedélyezése" + +msgid "Enabled" +msgstr "Engedélyezés" + +msgid "General Settings" +msgstr "Általános Beállítások" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "Interfészek" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/it/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/it/meshwizard.po new file mode 100644 index 0000000..b1b9799 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/it/meshwizard.po @@ -0,0 +1,143 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-02-06 18:07+0200\n" +"PO-Revision-Date: 2013-02-09 20:46+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "Attivare o disattivare la configurazione IPv6 a livello globale." + +msgid "Channel" +msgstr "Canale" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "Abilita per proteggere la tua LAN da altri nodi o clienti" + +msgid "Cleanup config" +msgstr "Ripulisci config" + +msgid "Configure this interface" +msgstr "Configura questa interfaccia" + +msgid "DHCP IP range" +msgstr "Range DHCP IP" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "DHCP assegnerà indirizzi ip ai client" + +msgid "Enable DHCP" +msgstr "Abilità DHCP" + +msgid "Enable RA" +msgstr "Attiva RA" + +msgid "Enabled" +msgstr "Attivato" + +msgid "General Settings" +msgstr "Impostazioni generali" + +msgid "IPv6 Settings" +msgstr "Impostazioni IPv6" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" +"Se questa opzione è selezionata, config viene pulita prima di nuove opzioni " +"di configurazione." + +msgid "Interfaces" +msgstr "Interfacce" + +msgid "Mesh IP address" +msgstr "Rete indirizzo IP" + +msgid "Mesh IPv6 address" +msgstr "Rete indirizzo IPv6" + +msgid "Mesh Wizard" +msgstr "Configurazione Rete" + +#, fuzzy +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" +"Nota: questo permette di configurare questa interfaccia per il funzionamento " +"in rete, vale a dire aggiungere nella zona 'Freifunk' e consentire OLSR." + +msgid "Protect LAN" +msgstr "Proteggi LAN" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" +"Selezionare per permettere ad altri di usare la tua connessione per accedere " +"a internet." + +msgid "Send router advertisements on this device." +msgstr "Inviare annunci router su questo dispositivo." + +msgid "Share your internet connection" +msgstr "Condividi la tua connessione internet" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" +"Il range IP dal quale i client ricevono gli indirizzi (es. 10.1.2.1/28). Se " +"questa subnet è all'interno della tua rete mesh, sarà annunciata as HNA. " +"Ogni altro range userà il NAT. Se lasciato vuoto allora la scelta " +"predefinita della community sarà usata." + +msgid "The given IP address is not inside the mesh network range" +msgstr "L'IP dato non è all'interno del range degli indirizzi di rete mesh" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" +"Si tratta di un indirizzo IPv6 unico in notazione CIDR (ad esempio " +"2001:1:2:3::1/64) e deve essere registrato presso la comunità locale." + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" +"Questo è un indirizzo univoco nella mesh (es. 10.1.1.1) e deve essere " +"accordato con la tua community." + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" +"Questo confgurerà una nuova interfaccia wireless virtuale in modalità Access " +"Point." + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" +"Questo wizard ti assisterà nel setup del tuo router per l'uso in una rete " +"wireless comunitaria come Freifunk o Ninux." + +msgid "Virtual Access Point (VAP)" +msgstr "Punto di Accesso Virtuale (VAP)" + +msgid "Wizard" +msgstr "Creazione guidata" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "Il tuo device a i nodi confinanti devono sare lo stesso canale." + +msgid "recommended" +msgstr "raccomandato" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/ja/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/ja/meshwizard.po new file mode 100644 index 0000000..a67c71f --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/ja/meshwizard.po @@ -0,0 +1,109 @@ +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/ms/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/ms/meshwizard.po new file mode 100644 index 0000000..a67c71f --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/ms/meshwizard.po @@ -0,0 +1,109 @@ +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/no/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/no/meshwizard.po new file mode 100644 index 0000000..a67c71f --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/no/meshwizard.po @@ -0,0 +1,109 @@ +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/pl/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/pl/meshwizard.po new file mode 100644 index 0000000..79409aa --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/pl/meshwizard.po @@ -0,0 +1,147 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-19 21:15+0200\n" +"PO-Revision-Date: 2014-04-23 19:18+0200\n" +"Last-Translator: goodgod261 \n" +"Language-Team: LANGUAGE \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "Aktywuj lub dezaktywuj ipv6 konfiguracja globalna" + +msgid "Channel" +msgstr "Kanał" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" +"Zaznacz, aby zabezpieczyć sieć lokalną przed innymi węzłami lub klientami " +"sieci" + +msgid "Cleanup config" +msgstr "Wyczyść konfigurację" + +msgid "Configure this interface" +msgstr "Skonfiguruj ten interfejs" + +msgid "DHCP IP range" +msgstr "Pula adresów DHCP" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "DHCP automatycznie przypisze adresy IP klientom" + +msgid "Enable DHCP" +msgstr "Włącz DHCP" + +msgid "Enable RA" +msgstr "Włącz RA" + +msgid "Enabled" +msgstr "Włączone" + +msgid "General Settings" +msgstr "Ustawienia ogólne" + +msgid "IPv6 Settings" +msgstr "IPv6 Ustawienia" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" +"Jeśli ta opcja jest zaznaczona to stara konfiguracja jest usuwana przed " +"zapisaniem nowych opcji." + +msgid "Interfaces" +msgstr "Interfejsy" + +msgid "Mesh IP address" +msgstr "Adres Mesh IP" + +msgid "Mesh IPv6 address" +msgstr "Adres Mech IPv6" + +msgid "Mesh Wizard" +msgstr "Kreator Mesh" + +#, fuzzy +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" +"Nota: To są ustawienia interfejsu mesh operacja i.e Dodawanie Strefy " +"'Freifunk' oraz włączyć olsr" + +msgid "Protect LAN" +msgstr "Chroń LAN" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" +"Zaznacz tę opcję aby inni użytkownicy mogli używać twojego połączenia do " +"korzystania z internetu" + +msgid "Send router advertisements on this device." +msgstr "Wyślij Routera Reklamę na urządzenie" + +msgid "Share your internet connection" +msgstr "Współdziel swoje połączenie internetowe" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" +"Zakres adresów IP, z którego klientom są przypisywane adresy IP (np. " +"10.1.2.1/28). Jeżeli jest to zakres wewnątrz twojej sieci mesh, wówczas " +"zostanie rozgłoszony jako HNA. Każdy inny zakres będzie używać NAT. Jeżeli " +"pozostanie pusty, wówczas zostanie użyty domyślny profil społeczności." + +msgid "The given IP address is not inside the mesh network range" +msgstr "Podany adres IP nie należy do zakresu sieci mesh" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" +"To jest unikalny adres IPv6 w notacji CIDR (np. 2001:1:2:3:1/64) i musi zostać zarejestrowany w " +"Twojej lokalnej społeczności" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" +"Jest to unikalny adres w sieci mesh (np. 10.1.1.1) i musi być zarejestrowana " +"w lokalnej społeczności." + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" +"Ta opcja skonfiguruje nowy wirtualny interfejs bezprzewodowy w trybie Access " +"Point`a" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" +"Ten kreator pomoże skonfigurować router do korzystania z Freifunk lub " +"podobnej społecznej sieci bezprzewodowej (darmowe WiFi)" + +msgid "Virtual Access Point (VAP)" +msgstr "Access Point Wirtualny (VAP)" + +msgid "Wizard" +msgstr "Kreator" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "Twój router i sąsiedzkie węzły sieci używają tego samego kanału." + +msgid "recommended" +msgstr "zalecane" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/pt-br/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/pt-br/meshwizard.po new file mode 100644 index 0000000..a2238e5 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/pt-br/meshwizard.po @@ -0,0 +1,150 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-10-11 00:23+0200\n" +"PO-Revision-Date: 2014-03-17 10:01+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "Habilita e desabilita a configuração IPv6 globalmente." + +msgid "Channel" +msgstr "Canal" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" +"Marque isto para proteger sua rede local (LAN) de outros nós ou clientes" + +msgid "Cleanup config" +msgstr "Limpar configuração" + +msgid "Configure this interface" +msgstr "Configure esta interface" + +msgid "DHCP IP range" +msgstr "Faixa de IP do DHCP" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "O DHCP irá atribuir automaticamente endereços IP para os clientes" + +msgid "Enable DHCP" +msgstr "Habilitar DHCP" + +msgid "Enable RA" +msgstr "" +"Habilitar RA" + +msgid "Enabled" +msgstr "Habilitado" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "IPv6 Settings" +msgstr "Configurações IPv6" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" +"Se selecionado, a configuração é limpa antes de definir as novas opções de " +"configuração." + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Mesh IP address" +msgstr "Endereço IP da rede em malha" + +msgid "Mesh IPv6 address" +msgstr "Endereço IPv6 da rede em malha" + +msgid "Mesh Wizard" +msgstr "Assistente de Configuração da Rede em Malha" + +#, fuzzy +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" +"Nota: Isto irá configurar a interface para operação em malha, p. ex. " +"adicionar à zona 'freifunk' e ativar o OLSR. " + +msgid "Protect LAN" +msgstr "Proteget Rede Local (LAN)" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" +"Selecione isto para permitir que outros usem sua conexão para acessar a " +"internet." + +msgid "Send router advertisements on this device." +msgstr "" +"Envia RA a partir deste dispositivo." + +msgid "Share your internet connection" +msgstr "Compartilhar sua conexão com a internet" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" +"Faixa de endereços IP atribuídos aos clientes (ex: 10.1.2.1/28). Se esta " +"faixa está dentro da faixa da rede em malha, então ela será anunciada no " +"HNA. Qualquer outra faixa irá utilizar NAT. Se deixada vazia, " +"os padrões do perfil da comunidade será usada." + +msgid "The given IP address is not inside the mesh network range" +msgstr "" +"O endereço IP informado não está na faixa de endereços da rede em malha" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" +"Este é um endereço IPv6 único na notação CIDR (ex: 2001:1:2:3::1/64) e deve " +"ser registrado na sua comunidade local." + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" +"Este é um endereço único na rede em malha (ex: 10.1.1.1) e tem que ser " +"registrado na sua comunidade local." + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" +"Isto configurará uma nova interface de rede sem fio virtual em modo de ponto " +"de acesso." + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" +"Este assistente irá ajudá-lo na configuração do seu roteador para Freifunk " +"ou outra rede comunitária sem fio similar." + +msgid "Virtual Access Point (VAP)" +msgstr "Ponto de Acesso Virtual (VAP)" + +msgid "Wizard" +msgstr "Assistente" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "Seu dispositivo e os nós vizinhos devem utilizar o mesmo canal." + +msgid "recommended" +msgstr "recomendado" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/pt/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/pt/meshwizard.po new file mode 100644 index 0000000..4195769 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/pt/meshwizard.po @@ -0,0 +1,133 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-06-03 16:20+0200\n" +"PO-Revision-Date: 2013-06-03 18:01+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "Ativar ou desativar a configuração IPv6 globalmente." + +msgid "Channel" +msgstr "Canal" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "Marcar isto para proteger a sua LAN de outros nós ou clientes" + +msgid "Cleanup config" +msgstr "Limpar configuração" + +msgid "Configure this interface" +msgstr "Configurar esta interface" + +msgid "DHCP IP range" +msgstr "Intervalo de IPs DHCP" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "O DHCP irá atribuir automaticamente endereços IP aos clientes" + +msgid "Enable DHCP" +msgstr "Ativar DHCP" + +msgid "Enable RA" +msgstr "Ativar RA" + +msgid "Enabled" +msgstr "Ativo" + +msgid "General Settings" +msgstr "Definições Gerais" + +msgid "IPv6 Settings" +msgstr "Definições IPv6" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" +"Se isto estiver selecionado a configuração é limpa antes de serem definidas " +"novas opções na configuração." + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +#, fuzzy +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" +"Nota: Isto irá configurar a interface para operação em malha, p. ex. " +"adicionar à zona 'freifunk' e ativar OLSR." + +msgid "Protect LAN" +msgstr "Proteger LAN" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" +"Ative isto para permitir que outros usem a sua ligação para aceder à " +"internet." + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" +"Irá ser configurado uma nova interface virtual wireless em modo de Ponto de " +"Acesso." + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "Ponto de Acesso Virtual (VAP)" + +msgid "Wizard" +msgstr "Assistente" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "O seu dispositivo e os nós vizinhos têm de usar o mesmo canal." + +msgid "recommended" +msgstr "recomendado" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/ro/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/ro/meshwizard.po new file mode 100644 index 0000000..9f1c466 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/ro/meshwizard.po @@ -0,0 +1,126 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-29 19:55+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "Canal" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" +"Bifeaza aici sa-ti protejezi reteaua locala LAN de alte noduri sau clienti" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "Configureaza aceasta interfata" + +msgid "DHCP IP range" +msgstr "Plaja de adrese IP DHCP" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "DHCP va aloca automat adrese IP la clienti" + +msgid "Enable DHCP" +msgstr "Activeaza DHCP" + +msgid "Enable RA" +msgstr "Activează RA" + +msgid "Enabled" +msgstr "Activat" + +msgid "General Settings" +msgstr "Setări generale" + +msgid "IPv6 Settings" +msgstr "Setări IPv6" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "Interfete" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "Protejeaza reteaua locala LAN" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" +"Selecteaza aici ca sa permiti si altora sa-ti foloseasca si ei conexiunea ta " +"de Internet." + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "Partajeaza cu altii conexiunea ta de Internet" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "recomandat" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/ru/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/ru/meshwizard.po new file mode 100644 index 0000000..876ac36 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/ru/meshwizard.po @@ -0,0 +1,150 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: meshwizard\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-07-20 09:47+0200\n" +"PO-Revision-Date: 2013-09-06 09:43+0200\n" +"Last-Translator: datasheet \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +#, fuzzy +msgid "Activate or deactivate IPv6 config globally." +msgstr "Активировать или деактивировать глобальную конфигурацию IPv6." + +msgid "Channel" +msgstr "Канал" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" +"Включите эту опцию, чтобы защитить локальную сеть от других узлов или " +"клиентов" + +msgid "Cleanup config" +msgstr "Очистить конфигурацию" + +msgid "Configure this interface" +msgstr "Настроить этот интерфейс" + +msgid "DHCP IP range" +msgstr "Диапазон IP-адресов DHCP" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "DHCP автоматически назначит IP-адреса клиентам" + +msgid "Enable DHCP" +msgstr "Включить DHCP" + +msgid "Enable RA" +msgstr "Разрешить ICMPv6-ответ \"Router Advertisement\"" + +msgid "Enabled" +msgstr "Включен" + +msgid "General Settings" +msgstr "Общие настройки" + +msgid "IPv6 Settings" +msgstr "Настройки IPv6" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" +"Если эта опция включена, то конфигурация очищается перед установкой новых " +"настроек." + +msgid "Interfaces" +msgstr "Интерфейсы" + +msgid "Mesh IP address" +msgstr "IP-адрес ячейки" + +msgid "Mesh IPv6 address" +msgstr "IPv6-адрес в mesh-сети" + +# предлагаю использовать именно термин "mesh-сеть", т.к. русский аналог этого понятия слишком длинный (сеть с ячеистой топологиейб ячеистая сеть) +msgid "Mesh Wizard" +msgstr "Мастер настройки ячеистой сети" + +#, fuzzy +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" +"Примечание: эта опция установит данный интерфейс в режим работы с mesh-" +"сетями, т.е. добавит его в зону ''freifunk' (\"free wireless radio\") и " +"включит протокол OLSR." + +msgid "Protect LAN" +msgstr "Защита LAN" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" +"Включите эту опцию, чтобы позволить другим клиентам использовать ваше " +"подключение к интернету." + +msgid "Send router advertisements on this device." +msgstr "Посылать ICMPv6 сообщения \"Router Advertisement\" на это устройство" + +msgid "Share your internet connection" +msgstr "Сделать интернет-подключение общедоступным" + +# HNA - Home Network Announcement +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" +"Диапазон IP-адресов для использования клиентами сети (например 10.1.2.1/28). " +"Если указанный диапазон находится внутри вашей сети, тогда он будет объявлен " +"как HNA. Любой другой диапазон будет использовать NAT. В случае пустого " +"значение будут использоваться стандартные настройки." + +msgid "The given IP address is not inside the mesh network range" +msgstr "Заданный IP-адрес не находится внутри ячеистой сети" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" +"Это уникальный адрес в ячеистой сети (например 10.1.1.1), который должен " +"быть зарегистрирован в вашем местном сообществе." + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" +"Будет произведена настройка новой виртуальной беспроводной сети в режиме " +"точки доступа." + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" +"Данный мастер поможет настроить ваш маршрутизатор для сети Freifunk или " +"другой подобной беспроводной сети." + +msgid "Virtual Access Point (VAP)" +msgstr "Виртуальная точка доступа (VAP)" + +msgid "Wizard" +msgstr "Мастер установки" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" +"Ваше устройство и соседние узлы должны использовать один и тот же канал." + +msgid "recommended" +msgstr "рекомендуется" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/sk/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/sk/meshwizard.po new file mode 100644 index 0000000..c86708a --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/sk/meshwizard.po @@ -0,0 +1,119 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/sv/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/sv/meshwizard.po new file mode 100644 index 0000000..b898024 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/sv/meshwizard.po @@ -0,0 +1,120 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/templates/meshwizard.pot b/feeds/luci/applications/luci-app-meshwizard/po/templates/meshwizard.pot new file mode 100644 index 0000000..9dfdec5 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/templates/meshwizard.pot @@ -0,0 +1,112 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/tr/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/tr/meshwizard.po new file mode 100644 index 0000000..92cabd4 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/tr/meshwizard.po @@ -0,0 +1,119 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/uk/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/uk/meshwizard.po new file mode 100644 index 0000000..9a317b7 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/uk/meshwizard.po @@ -0,0 +1,126 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-09-21 15:47+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "Канал" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "DHCP IP-діапазон" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "DHCP автоматично призначить IP-адреси клієнтам" + +msgid "Enable DHCP" +msgstr "Активувати DHCP" + +msgid "Enable RA" +msgstr "Активувати RA" + +msgid "Enabled" +msgstr "Активувати" + +msgid "General Settings" +msgstr "Загальні налаштування" + +msgid "IPv6 Settings" +msgstr "Налаштування IPv6" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "Інтерфейси" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "Захист локальної мережі" + +#, fuzzy +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" +"Оберіть це, щоб дозволити іншим використовувати з'єднання для доступу в " +"Інтернет." + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/vi/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/vi/meshwizard.po new file mode 100644 index 0000000..a67c71f --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/vi/meshwizard.po @@ -0,0 +1,109 @@ +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/zh-cn/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/zh-cn/meshwizard.po new file mode 100644 index 0000000..d5d0707 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/zh-cn/meshwizard.po @@ -0,0 +1,126 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-09-24 18:01+0200\n" +"PO-Revision-Date: 2014-03-25 04:25+0200\n" +"Last-Translator: hewenhao \n" +"Language-Team: LANGUAGE \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "启用或停用全球IPv6设置" + +msgid "Channel" +msgstr "频道" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "选择此项,隔离其他节点或客户端的攻击来保护你的局域网" + +msgid "Cleanup config" +msgstr "清空配置" + +msgid "Configure this interface" +msgstr "配置当前界面" + +msgid "DHCP IP range" +msgstr "DHCP IP 范围" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "DHCP将自动给客户端分配IP地址" + +msgid "Enable DHCP" +msgstr "启动DHCP" + +msgid "Enable RA" +msgstr "启用RA" + +msgid "Enabled" +msgstr "启用" + +msgid "General Settings" +msgstr "总体设置" + +msgid "IPv6 Settings" +msgstr "IPv6设置" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "如果此项被选中,在设置新选项之前,配置将被清空。" + +msgid "Interfaces" +msgstr "界面" + +msgid "Mesh IP address" +msgstr "Mesh IP 地址" + +msgid "Mesh IPv6 address" +msgstr "Mesh IPv6地址" + +msgid "Mesh Wizard" +msgstr "Mesh 导引" + +#, fuzzy +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "注意:这将为mesh操作建立一个接口,如:增加到‘freifunk’区域并使能olsr" + +msgid "Protect LAN" +msgstr "保护LAN口" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "选择这项来允许其它程序用你这个连接来接入因特网" + +#, fuzzy +msgid "Send router advertisements on this device." +msgstr "在这个设备上发送路由广播" + +msgid "Share your internet connection" +msgstr "分享你的Internet连接" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "这将会在接入点模式设置一个新的虚拟无线网络接口" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "虚拟接入点" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "推荐" diff --git a/feeds/luci/applications/luci-app-meshwizard/po/zh-tw/meshwizard.po b/feeds/luci/applications/luci-app-meshwizard/po/zh-tw/meshwizard.po new file mode 100644 index 0000000..a4d29e8 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/po/zh-tw/meshwizard.po @@ -0,0 +1,118 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Activate or deactivate IPv6 config globally." +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check this to protect your LAN from other nodes or clients" +msgstr "" + +msgid "Cleanup config" +msgstr "" + +msgid "Configure this interface" +msgstr "" + +msgid "DHCP IP range" +msgstr "" + +msgid "DHCP will automatically assign ip addresses to clients" +msgstr "" + +msgid "Enable DHCP" +msgstr "" + +msgid "Enable RA" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "" +"If this is selected then config is cleaned before setting new config options." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Mesh IP address" +msgstr "" + +msgid "Mesh IPv6 address" +msgstr "" + +msgid "Mesh Wizard" +msgstr "" + +msgid "" +"Note: this will set up this interface for mesh operation, i.e. add it to " +"zone 'freifunk' and enable olsr." +msgstr "" + +msgid "Protect LAN" +msgstr "" + +msgid "" +"Select this to allow others to use your connection to access the internet." +msgstr "" + +msgid "Send router advertisements on this device." +msgstr "" + +msgid "Share your internet connection" +msgstr "" + +msgid "" +"The IP range from which clients are assigned ip addresses (e.g. " +"10.1.2.1/28). If this is a range inside your mesh network range, then it " +"will be announced as HNA. Any other range will use NAT. If left empty then " +"the defaults from the community profile will be used." +msgstr "" + +msgid "The given IP address is not inside the mesh network range" +msgstr "" + +msgid "" +"This is a unique IPv6 address in CIDR notation (e.g. 2001:1:2:3::1/64) and " +"has to be registered at your local community." +msgstr "" + +msgid "" +"This is a unique address in the mesh (e.g. 10.1.1.1) and has to be " +"registered at your local community." +msgstr "" + +msgid "This will setup a new virtual wireless interface in Access Point mode." +msgstr "" + +msgid "" +"This wizard will assist you in setting up your router for Freifunk or " +"another similar wireless community network." +msgstr "" + +msgid "Virtual Access Point (VAP)" +msgstr "" + +msgid "Wizard" +msgstr "" + +msgid "Your device and neighbouring nodes have to use the same channel." +msgstr "" + +msgid "recommended" +msgstr "" diff --git a/feeds/luci/applications/luci-app-meshwizard/root/etc/uci-defaults/meshwizard b/feeds/luci/applications/luci-app-meshwizard/root/etc/uci-defaults/meshwizard new file mode 100644 index 0000000..6ceb1b7 --- /dev/null +++ b/feeds/luci/applications/luci-app-meshwizard/root/etc/uci-defaults/meshwizard @@ -0,0 +1,8 @@ +#!/bin/sh +uci batch < +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for miniDLNA +LUCI_DEPENDS:=+minidlna + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-minidlna/luasrc/controller/minidlna.lua b/feeds/luci/applications/luci-app-minidlna/luasrc/controller/minidlna.lua new file mode 100644 index 0000000..9200796 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/luasrc/controller/minidlna.lua @@ -0,0 +1,46 @@ +-- Copyright 2012 Gabor Juhos +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.minidlna", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/minidlna") then + return + end + + local page + + page = entry({"admin", "services", "minidlna"}, cbi("minidlna"), _("miniDLNA")) + page.dependent = true + + entry({"admin", "services", "minidlna_status"}, call("minidlna_status")) +end + +function minidlna_status() + local sys = require "luci.sys" + local uci = require "luci.model.uci".cursor() + local port = tonumber(uci:get_first("minidlna", "minidlna", "port")) + + local status = { + running = (sys.call("pidof minidlna >/dev/null") == 0), + audio = 0, + video = 0, + image = 0 + } + + if status.running then + local fd = sys.httpget("http://127.0.0.1:%d/" % (port or 8200), true) + if fd then + local html = fd:read("*a") + if html then + status.audio = (tonumber(html:match("Audio files(%d+)")) or 0) + status.video = (tonumber(html:match("Video files(%d+)")) or 0) + status.image = (tonumber(html:match("Image files(%d+)")) or 0) + end + fd:close() + end + end + + luci.http.prepare_content("application/json") + luci.http.write_json(status) +end diff --git a/feeds/luci/applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua b/feeds/luci/applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua new file mode 100644 index 0000000..99ef68c --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua @@ -0,0 +1,165 @@ +-- Copyright 2012 Gabor Juhos +-- Licensed to the public under the Apache License 2.0. + +local m, s, o + +m = Map("minidlna", translate("miniDLNA"), + translate("MiniDLNA is server software with the aim of being fully compliant with DLNA/UPnP-AV clients.")) + +m:section(SimpleSection).template = "minidlna_status" + +s = m:section(TypedSection, "minidlna", "miniDLNA Settings") +s.addremove = false +s.anonymous = true + +s:tab("general", translate("General Settings")) +s:tab("advanced", translate("Advanced Settings")) + +o = s:taboption("general", Flag, "enabled", translate("Enable:")) +o.rmempty = false + +function o.cfgvalue(self, section) + return luci.sys.init.enabled("minidlna") and self.enabled or self.disabled +end + +function o.write(self, section, value) + if value == "1" then + luci.sys.init.enable("minidlna") + luci.sys.call("/etc/init.d/minidlna start >/dev/null") + else + luci.sys.call("/etc/init.d/minidlna stop >/dev/null") + luci.sys.init.disable("minidlna") + end + + return Flag.write(self, section, value) +end + +o = s:taboption("general", Value, "port", translate("Port:"), + translate("Port for HTTP (descriptions, SOAP, media transfer) traffic.")) +o.datatype = "port" +o.default = 8200 + + +o = s:taboption("general", Value, "interface", translate("Interfaces:"), + translate("Network interfaces to serve.")) + +o.template = "cbi/network_ifacelist" +o.widget = "checkbox" +o.nocreate = true + +function o.cfgvalue(self, section) + local rv = { } + local val = Value.cfgvalue(self, section) + if val then + local ifc + for ifc in val:gmatch("[^,%s]+") do + rv[#rv+1] = ifc + end + end + return rv +end + +function o.write(self, section, value) + local rv = { } + local ifc + for ifc in luci.util.imatch(value) do + rv[#rv+1] = ifc + end + Value.write(self, section, table.concat(rv, ",")) +end + + +o = s:taboption("general", Value, "friendly_name", translate("Friendly name:"), + translate("Set this if you want to customize the name that shows up on your clients.")) +o.rmempty = true +o.placeholder = "OpenWrt DLNA Server" + +o = s:taboption("advanced", Value, "db_dir", translate("Database directory:"), + translate("Set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache.")) +o.rmempty = true +o.placeholder = "/var/cache/minidlna" + +o = s:taboption("advanced", Value, "log_dir", translate("Log directory:"), + translate("Set this if you would like to specify the directory where you want MiniDLNA to store its log file.")) +o.rmempty = true +o.placeholder = "/var/log" + +s:taboption("advanced", Flag, "inotify", translate("Enable inotify:"), + translate("Set this to enable inotify monitoring to automatically discover new files.")) + +s:taboption("advanced", Flag, "enable_tivo", translate("Enable TIVO:"), + translate("Set this to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO.")) +o.rmempty = true + +o = s:taboption("advanced", Flag, "strict_dlna", translate("Strict to DLNA standard:"), + translate("Set this to strictly adhere to DLNA standards. This will allow server-side downscaling of very large JPEG images, which may hurt JPEG serving performance on (at least) Sony DLNA products.")) +o.rmempty = true + +o = s:taboption("advanced", Value, "presentation_url", translate("Presentation URL:")) +o.rmempty = true +o.placeholder = "http://192.168.1.1/" + +o = s:taboption("advanced", Value, "notify_interval", translate("Notify interval:"), + translate("Notify interval in seconds.")) +o.datatype = "uinteger" +o.placeholder = 900 + +o = s:taboption("advanced", Value, "serial", translate("Announced serial number:"), + translate("Serial number the miniDLNA daemon will report to clients in its XML description.")) +o.placeholder = "12345678" + +s:taboption("advanced", Value, "model_number", translate("Announced model number:"), + translate("Model number the miniDLNA daemon will report to clients in its XML description.")) +o.placholder = "1" + +o = s:taboption("advanced", Value, "minissdpsocket", translate("miniSSDP socket:"), + translate("Specify the path to the MiniSSDPd socket.")) +o.rmempty = true +o.placeholder = "/var/run/minissdpd.sock" + +o = s:taboption("general", ListValue, "root_container", translate("Root container:")) +o:value(".", translate("Standard container")) +o:value("B", translate("Browse directory")) +o:value("M", translate("Music")) +o:value("V", translate("Video")) +o:value("P", translate("Pictures")) + + +s:taboption("general", DynamicList, "media_dir", translate("Media directories:"), + translate("Set this to the directory you want scanned. If you want to restrict the directory to a specific content type, you can prepend the type ('A' for audio, 'V' for video, 'P' for images), followed by a comma, to the directory (eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified.")) + + +o = s:taboption("general", DynamicList, "album_art_names", translate("Album art names:"), + translate("This is a list of file names to check for when searching for album art.")) +o.rmempty = true +o.placeholder = "Cover.jpg" + +function o.cfgvalue(self, section) + local rv = { } + + local val = Value.cfgvalue(self, section) + if type(val) == "table" then + val = table.concat(val, "/") + elseif not val then + val = "" + end + + local file + for file in val:gmatch("[^/%s]+") do + rv[#rv+1] = file + end + + return rv +end + +function o.write(self, section, value) + local rv = { } + local file + for file in luci.util.imatch(value) do + rv[#rv+1] = file + end + Value.write(self, section, table.concat(rv, "/")) +end + + +return m diff --git a/feeds/luci/applications/luci-app-minidlna/luasrc/view/admin_status/index/minidlna.htm b/feeds/luci/applications/luci-app-minidlna/luasrc/view/admin_status/index/minidlna.htm new file mode 100644 index 0000000..b2feeb2 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/luasrc/view/admin_status/index/minidlna.htm @@ -0,0 +1 @@ +<%+minidlna_status%> diff --git a/feeds/luci/applications/luci-app-minidlna/luasrc/view/minidlna_status.htm b/feeds/luci/applications/luci-app-minidlna/luasrc/view/minidlna_status.htm new file mode 100644 index 0000000..866eded --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/luasrc/view/minidlna_status.htm @@ -0,0 +1,29 @@ + + +
+ <%:miniDLNA Status%> +

+ <%:Collecting data...%> +

+
diff --git a/feeds/luci/applications/luci-app-minidlna/po/ca/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/ca/minidlna.po new file mode 100644 index 0000000..bf16008 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/ca/minidlna.po @@ -0,0 +1,167 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-01 05:45+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Ajusts avançats" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "Habilita TIVO:" + +msgid "Enable inotify:" +msgstr "Habilita inotify:" + +msgid "Enable:" +msgstr "Habilita:" + +msgid "Friendly name:" +msgstr "Nom amistós:" + +msgid "General Settings" +msgstr "Ajusts generals" + +msgid "Interfaces:" +msgstr "Interfícies" + +msgid "Log directory:" +msgstr "Directori de registre:" + +msgid "Media directories:" +msgstr "Directoris de medis:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "Música" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "Interval de notificació en segons." + +msgid "Notify interval:" +msgstr "Interval de notificació:" + +msgid "Pictures" +msgstr "Imatges" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Port de tràfic HTTP (descripcions, SOAP, transferència de medis)" + +msgid "Port:" +msgstr "Port:" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "Especifiqueu la ruta a l'endoll de MiniSSDPd." + +msgid "Standard container" +msgstr "Contenidor estàndard" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "Vídeo" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "Estat de miniDLNA" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/cs/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/cs/minidlna.po new file mode 100644 index 0000000..bf5a7f4 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/cs/minidlna.po @@ -0,0 +1,171 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-08-04 19:18+0200\n" +"Last-Translator: KubaCZ \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Pokročilé nastavení" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "Procházet adresář" + +msgid "Collecting data..." +msgstr "Shromažďování dat ..." + +msgid "Database directory:" +msgstr "Adresář databáze:" + +msgid "Enable TIVO:" +msgstr "Povolit TIVO:" + +msgid "Enable inotify:" +msgstr "Povolit inotify:" + +msgid "Enable:" +msgstr "Povolit:" + +msgid "Friendly name:" +msgstr "Popisek:" + +msgid "General Settings" +msgstr "Obecné nastavení" + +msgid "Interfaces:" +msgstr "Rozhraní:" + +msgid "Log directory:" +msgstr "Log adresář:" + +msgid "Media directories:" +msgstr "Media adresáře:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"MiniDLNA je serverový software s cílem být plně kompatibilní s DLNA / UPnP-" +"AV klienty." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "Hudba" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "Notifikační interval v sekundách." + +msgid "Notify interval:" +msgstr "Notifikační interval:" + +msgid "Pictures" +msgstr "Obrázky" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Port pro HTTP (popisy, SOAP, přenos médií) provoz." + +msgid "Port:" +msgstr "Port:" + +msgid "Presentation URL:" +msgstr "Prezentační URL:" + +msgid "Root container:" +msgstr "Kořenový/root kontejner:" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "Standardní kontejner" + +msgid "Strict to DLNA standard:" +msgstr "Striktně se držet standardu DLNA:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" +"Služba miniDLNA je aktivní, poskytuje %d audio, %d video a %d obrázkových " +"souborů." + +msgid "The miniDLNA service is not running." +msgstr "Služba miniDLNA není spuštěna." + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "Video" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "Stav miniDLNA" + +msgid "miniSSDP socket:" +msgstr "miniSSDP socket:" diff --git a/feeds/luci/applications/luci-app-minidlna/po/de/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/de/minidlna.po new file mode 100644 index 0000000..22cb0f7 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/de/minidlna.po @@ -0,0 +1,205 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-09 14:39+0200\n" +"Last-Translator: Jo-Philipp \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +msgid "Album art names:" +msgstr "Dateinamen für Cover-Bilder:" + +msgid "Announced model number:" +msgstr "Angekündigte Modellnummer:" + +msgid "Announced serial number:" +msgstr "Angekündigte Seriennummer:" + +msgid "Browse directory" +msgstr "Browse-Verzeichnis" + +msgid "Collecting data..." +msgstr "Sammle Daten..." + +msgid "Database directory:" +msgstr "Datenbankverzeichnis:" + +msgid "Enable TIVO:" +msgstr "TIVO aktivieren:" + +msgid "Enable inotify:" +msgstr "Inotify aktivieren:" + +msgid "Enable:" +msgstr "Aktivieren:" + +msgid "Friendly name:" +msgstr "Spitzname:" + +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +msgid "Interfaces:" +msgstr "Schnittstellen:" + +msgid "Log directory:" +msgstr "Protokollverzeichnis:" + +msgid "Media directories:" +msgstr "Medienverzeichnisse:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"MiniDLNA ist eine Serversoftware mit dem Ziel voll kompatibel mit DLNA/UPnP-" +"AV-Klienten zu sein." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Spezifiziert die Modellnummer welche der miniDLNA-Dienst als Teil seiner XML-" +"Beschreibung an Clients versendet." + +msgid "Music" +msgstr "Musik" + +msgid "Network interfaces to serve." +msgstr "Zu bedienende Netzwerkschnittstellen." + +msgid "Notify interval in seconds." +msgstr "Ankündigungsinterval in Sekunden." + +msgid "Notify interval:" +msgstr "Ankündigunsintervall" + +msgid "Pictures" +msgstr "Bilder" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Port für HTTP-Verkehr (Beschreibungen, SOAP, Mediendaten)." + +msgid "Port:" +msgstr "Port:" + +msgid "Presentation URL:" +msgstr "Präsentations-URL:" + +msgid "Root container:" +msgstr "Root-Container:" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Spezifiziert die Seriennummer welche der miniDLNA-Dienst als Teil seiner XML-" +"Beschreibung an Clients versendet." + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "Diesen Wert setzen um den auf Clients angezeigten Namen zu verändern." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" +"Diesen Wert setzen um das Verzeichnis zu bestimmen in dem miniDLNA seine " +"Datenbank und den Cover-Bild-Speicher ablegt." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" +"Diesen Wert setzen um das Verzeichnis zu bestimmen in dem miniDLNA seine " +"Protokolldateien ablegt." + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" +"Diese Option aktivieren um den Inotify-Mechanismus zum Entdecken neuer " +"Dateien zu benutzen." + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" +"Diese Option aktivieren um die Unterstützung von JPEG- und MP3-Streaming zu " +"HMO-TiVo-Geräten zu aktivieren." + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" +"Diese Option setzen um den DLNA-Standard strikt einzuhalten. Damit wird " +"serverseitiges Herunterskalieren von JPEG-Bildern aktviert was die " +"Auslieferunsgeschwindigkeit in Verbindung mit Sony DLNA-Produkten negativ " +"beeinflussen kann." + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" +"Spezifiziert die zu durchsuchenden Medienverzeichnisse. Durch Voranstellung " +"eines Buchstaben gefolgt von einem Komma kann ein Verzeichnis auf einen " +"bestimmten Typ eingeschränkt werden; 'A' für Audio-, 'V' für Video- und 'P' " +"für Bild-Verzeichnisse. Es können mehrere Verzeichnisse angegeben werden." + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "Spezifiziert den Pfad zur MiniSSDPd-Socket-Datei." + +msgid "Standard container" +msgstr "Standard-Container" + +msgid "Strict to DLNA standard:" +msgstr "Stikt nach DLNA-Standard:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" +"Der miniDLNA-Dienst ist aktiv und publiziert %d Audio-, %d Video- und %d " +"Bild-Dateien." + +msgid "The miniDLNA service is not running." +msgstr "Der miniDLNA-Dienst ist inaktiv." + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" +"Dies ist eine Liste von Dateinamen, die geprüft werden sollen wenn nach " +"Cover-Bildern gesucht wird." + +msgid "Video" +msgstr "Video" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "miniDLNA-Status" + +msgid "miniSSDP socket:" +msgstr "miniSSDP-Socket:" + +#~ msgid "Network interfaces to serve, comma delimited list." +#~ msgstr "" +#~ "Lister dee bedienten Netzwerkschnittstellen als Komma-getrennte Liste." + +#~ msgid "" +#~ "This is a list of file names to check for when searching for album art. " +#~ "Note: names must be delimited with a forward slash '/'" +#~ msgstr "" +#~ "Dies ist eine Liste von zu prüfenden Dateinamen wenn nach Album-Covern " +#~ "gesucht wird. Hinweis: Namen müssen mit einem Schrägstrich ('/') getrennt " +#~ "werden." diff --git a/feeds/luci/applications/luci-app-minidlna/po/el/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/el/minidlna.po new file mode 100644 index 0000000..48c6188 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/el/minidlna.po @@ -0,0 +1,164 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "" + +msgid "Enable inotify:" +msgstr "" + +msgid "Enable:" +msgstr "" + +msgid "Friendly name:" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Interfaces:" +msgstr "" + +msgid "Log directory:" +msgstr "" + +msgid "Media directories:" +msgstr "" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "" + +msgid "Notify interval:" +msgstr "" + +msgid "Pictures" +msgstr "" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/en/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/en/minidlna.po new file mode 100644 index 0000000..5934d42 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/en/minidlna.po @@ -0,0 +1,195 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Album art names:" +msgstr "Album art names:" + +msgid "Announced model number:" +msgstr "Announced model number:" + +msgid "Announced serial number:" +msgstr "Announced serial number:" + +msgid "Browse directory" +msgstr "Browse directory" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "Database directory:" + +msgid "Enable TIVO:" +msgstr "Enable TIVO:" + +msgid "Enable inotify:" +msgstr "Enable inotify:" + +msgid "Enable:" +msgstr "Enable:" + +msgid "Friendly name:" +msgstr "Friendly name:" + +msgid "General Settings" +msgstr "" + +msgid "Interfaces:" +msgstr "Interfaces:" + +msgid "Log directory:" +msgstr "Log directory:" + +msgid "Media directories:" +msgstr "Media directories:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." + +msgid "Music" +msgstr "Music" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "Notify interval in seconds." + +msgid "Notify interval:" +msgstr "Notify interval:" + +msgid "Pictures" +msgstr "Pictures" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Port for HTTP (descriptions, SOAP, media transfer) traffic." + +msgid "Port:" +msgstr "Port:" + +msgid "Presentation URL:" +msgstr "Presentation URL:" + +msgid "Root container:" +msgstr "Root container:" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" +"Set this if you want to customize the name that shows up on your clients." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" +"Set this to enable inotify monitoring to automatically discover new files." + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "Specify the path to the MiniSSDPd socket." + +msgid "Standard container" +msgstr "Standard container" + +msgid "Strict to DLNA standard:" +msgstr "Strict to DLNA standard:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "Video" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "miniSSDP socket:" + +#~ msgid "Network interfaces to serve, comma delimited list." +#~ msgstr "Network interfaces to serve, comma delimited list." + +#~ msgid "" +#~ "This is a list of file names to check for when searching for album art. " +#~ "Note: names must be delimited with a forward slash '/'" +#~ msgstr "" +#~ "This is a list of file names to check for when searching for album art. " +#~ "Note: names must be delimited with a forward slash '/'" diff --git a/feeds/luci/applications/luci-app-minidlna/po/es/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/es/minidlna.po new file mode 100644 index 0000000..5f6b396 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/es/minidlna.po @@ -0,0 +1,184 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-09-01 09:07+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Configuración avanzada" + +msgid "Album art names:" +msgstr "Imágenes de álbumes:" + +msgid "Announced model number:" +msgstr "Número de modelo declarado:" + +msgid "Announced serial number:" +msgstr "Número de serie declarado:" + +msgid "Browse directory" +msgstr "Ver directorio" + +msgid "Collecting data..." +msgstr "Recopilando información..." + +msgid "Database directory:" +msgstr "Directorio de la base de datos:" + +msgid "Enable TIVO:" +msgstr "Activar TIVO:" + +msgid "Enable inotify:" +msgstr "Activar inotify:" + +msgid "Enable:" +msgstr "Activar:" + +msgid "Friendly name:" +msgstr "Nombre amigable:" + +msgid "General Settings" +msgstr "Configuración general" + +msgid "Interfaces:" +msgstr "Interfaces:" + +msgid "Log directory:" +msgstr "Directorio de registro:" + +msgid "Media directories:" +msgstr "Directorios de medios:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"MiniDLNA es un servidor que buscar ser compatible con clientes DLNA/UPnP-AV." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Número de modelo que el demonio miniDLNA mostrará a los clientes en su " +"descripción XML." + +msgid "Music" +msgstr "Música" + +msgid "Network interfaces to serve." +msgstr "Interfaces de red a usar." + +msgid "Notify interval in seconds." +msgstr "Intervalo de notificación en segundos." + +msgid "Notify interval:" +msgstr "Intervalo de notificación:" + +msgid "Pictures" +msgstr "Imágenes" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" +"Puerto para tráfico HTTP (descripciones, SOAP y transferencia de medios)." + +msgid "Port:" +msgstr "Puerto:" + +msgid "Presentation URL:" +msgstr "URL de presentación:" + +msgid "Root container:" +msgstr "Raíz de contenidos:" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Número de serie que el demonio miniDLNA informará a los clientes en su " +"descripción XML." + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "Personalizar el nombre mostrado a los clientes." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" +"Indicar el directorio en el que MiniDLNA guardará su base de datos y la " +"caché de álbumes." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "Indicar el directorio donde MiniDLNA guardará su archivo de registro." + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "Inotify descubrirá automáticamente nuevos archivos." + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "Envío de archivos .jpg y .mp3 a un TiVo usando HMO." + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" +"Seguir estrictamente el estándar DLNA. Esto permite el reescalado desde el " +"servidor de imágenes JPEG grandes que pueden perjudicar el rendimiento en " +"(al menos) productos DLNA de Sony." + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" +"Directorio a explorar. Si quiere restringir el directorio a un contenido " +"específico puede añadir el tipo ('A' par audio, 'V' para vídeo o 'P' para " +"imágenes), seguido por una coma al nombre del directorio (ej. media_dir=A,/" +"mnt/media/Music). Se puede establecer varios directorios." + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "Camino al socket de MiniSSDPd." + +msgid "Standard container" +msgstr "Contenedor estándar" + +msgid "Strict to DLNA standard:" +msgstr "Ceñirse al estándar DLNA:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" +"El servicio miniDLNA está activo, sirviendo %d archivos de audio, %d de " +"vídeo y %d de imágenes." + +msgid "The miniDLNA service is not running." +msgstr "El servicio miniDLNA no está arrancado." + +msgid "This is a list of file names to check for when searching for album art." +msgstr "Lista de nombres a comprobar para buscar imágenes de álbumes." + +msgid "Video" +msgstr "Vídeo" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "Estado de miniDLNA" + +msgid "miniSSDP socket:" +msgstr "Socket de miniSSDP:" diff --git a/feeds/luci/applications/luci-app-minidlna/po/fr/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/fr/minidlna.po new file mode 100644 index 0000000..d638b0c --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/fr/minidlna.po @@ -0,0 +1,164 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "" + +msgid "Enable inotify:" +msgstr "" + +msgid "Enable:" +msgstr "" + +msgid "Friendly name:" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Interfaces:" +msgstr "" + +msgid "Log directory:" +msgstr "" + +msgid "Media directories:" +msgstr "" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "" + +msgid "Notify interval:" +msgstr "" + +msgid "Pictures" +msgstr "" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/he/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/he/minidlna.po new file mode 100644 index 0000000..48c6188 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/he/minidlna.po @@ -0,0 +1,164 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "" + +msgid "Enable inotify:" +msgstr "" + +msgid "Enable:" +msgstr "" + +msgid "Friendly name:" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Interfaces:" +msgstr "" + +msgid "Log directory:" +msgstr "" + +msgid "Media directories:" +msgstr "" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "" + +msgid "Notify interval:" +msgstr "" + +msgid "Pictures" +msgstr "" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/hu/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/hu/minidlna.po new file mode 100644 index 0000000..52fbe74 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/hu/minidlna.po @@ -0,0 +1,199 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-09 19:18+0200\n" +"Last-Translator: Gábor \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Advanced Settings" +msgstr "Haladó beállítások" + +msgid "Album art names:" +msgstr "Borító album nevek:" + +msgid "Announced model number:" +msgstr "Közölt modellszám:" + +msgid "Announced serial number:" +msgstr "Közölt sorozatszám:" + +msgid "Browse directory" +msgstr "Könyvtár tallózása" + +msgid "Collecting data..." +msgstr "Adatok gyűjtése..." + +msgid "Database directory:" +msgstr "Adatbázis könyvtár:" + +msgid "Enable TIVO:" +msgstr "TIVO engedélyezése:" + +msgid "Enable inotify:" +msgstr "Inotify engedélyezése:" + +msgid "Enable:" +msgstr "Engedélyezés:" + +msgid "Friendly name:" +msgstr "Egyéni név:" + +msgid "General Settings" +msgstr "Általános beállítások" + +msgid "Interfaces:" +msgstr "Interfészek:" + +msgid "Log directory:" +msgstr "Napló könyvtár:" + +msgid "Media directories:" +msgstr "Média könyvtárak:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"A MiniDLNA egy szerver alkalmazás, ami teljes mértékben kompatibilis a DLNA/" +"UPnP-AV képes kliensekkel." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"A miniDLNA által az XML leírásban jelentett modellszám a kliensek számára." + +msgid "Music" +msgstr "Zene" + +msgid "Network interfaces to serve." +msgstr "Kiszolgált hálózati interfészek." + +msgid "Notify interval in seconds." +msgstr "Értesítés intervalluma másodpercben." + +msgid "Notify interval:" +msgstr "Értesítési intervallum:" + +msgid "Pictures" +msgstr "Képek" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "HTTP forgalom (leírások, SOAP, média átvitel) portja." + +msgid "Port:" +msgstr "Port:" + +msgid "Presentation URL:" +msgstr "Szolgáltatott URL:" + +msgid "Root container:" +msgstr "Gyökér konténer:" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"A miniDLNA által az XML leírásban jelentett szériaszám a kliensek számára." + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" +"Állítsa be, amennyiben a kliensek számára megjelenő nevet szeretné testre " +"szabni." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" +"Állítsa be, ha meg szeretné adni azt könyvtárat, ahová a a MiniDLNA az " +"adatbázisát, illetve az album borító gyorsítótárat rögzítse." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" +"Áttítsa be, ha meg szeretné adni azt a könyvtárat, ahová a MiniDLNA a napló " +"állományait mentse." + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" +"Engedélyezze az új fájlok automatikus felfedezéséhez szükséges inotify " +"monitorozáshoz." + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" +"Engedélyezze a .jpg és .mp3 fájlok közvetítéséhez TiVo támogatott HMO-k felé." + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" +"Engedélyezze a DLNA követelmények szigorú betartásához. Ez lehetővé teszi a " +"nagyon nagy JPEG képek szerver oldali leméretezését, amik pl. a Sony DLNA " +"termékek JPEG kiszolgáló teljesítményére nincsenek kedvező hatással." + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" +"Állítsa be a vizsgálandó könyvtárra. Ha a könyvtárat egy adott típusú " +"tartalom szerint szeretné korlátozni, akkor a neve előtt vesszővel " +"elválasztva megadhatja a típust ('A' az audió, 'V' a videó, 'P' a képek " +"számára. pl.: media_dir=A,/mnt/media/Music). Több könyvtár is megadható." + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "A MiniSSDPd socket elérési útját határozza meg." + +msgid "Standard container" +msgstr "Szabvány konténer" + +msgid "Strict to DLNA standard:" +msgstr "DLNA követelmények szigorú betartása:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" +"A miniDLNA szolgáltatás aktív, %d hang, %d videó, %d kép fájl található. " + +msgid "The miniDLNA service is not running." +msgstr "A miniDLNA szolgáltatás nem aktív." + +msgid "This is a list of file names to check for when searching for album art." +msgstr "Fájlnevek listája, amik ellenőrzésre kerülnek albumborító keresésekor." + +msgid "Video" +msgstr "Videó" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "miniDLNA állapot" + +msgid "miniSSDP socket:" +msgstr "miniSSDP socket:" + +#~ msgid "Network interfaces to serve, comma delimited list." +#~ msgstr "Kiszolgált hálózati interfészek vesszővel elválasztott listája." + +#~ msgid "" +#~ "This is a list of file names to check for when searching for album art. " +#~ "Note: names must be delimited with a forward slash '/'" +#~ msgstr "" +#~ "Ez egy lista azokról a fájlnevekről, amelyeket ellenőrizni kell a " +#~ "lemezborító keresésekor. Megjegyzés: a neveket per jellel ('/') kell " +#~ "elválasztani egymástól." diff --git a/feeds/luci/applications/luci-app-minidlna/po/it/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/it/minidlna.po new file mode 100644 index 0000000..1c0abc6 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/it/minidlna.po @@ -0,0 +1,194 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-08-05 11:41+0200\n" +"Last-Translator: morganfw \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Opzioni avanzate" + +msgid "Album art names:" +msgstr "Nome Copertina Album:" + +msgid "Announced model number:" +msgstr "Numero modello annunciato:" + +msgid "Announced serial number:" +msgstr "Numero seriale annunciato:" + +msgid "Browse directory" +msgstr "Esplora directory" + +msgid "Collecting data..." +msgstr "Recuperando i dati..." + +msgid "Database directory:" +msgstr "Directory database:" + +msgid "Enable TIVO:" +msgstr "Abilita TIVO:" + +msgid "Enable inotify:" +msgstr "Abilita inotify:" + +msgid "Enable:" +msgstr "Abilita:" + +msgid "Friendly name:" +msgstr "Nome Comune:" + +msgid "General Settings" +msgstr "Impostazioni generali" + +msgid "Interfaces:" +msgstr "Interfacce:" + +msgid "Log directory:" +msgstr "Directory di log:" + +msgid "Media directories:" +msgstr "Cartelle Supporto:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"MiniDLNA è un server il cui intento è di essere completamente compatibile " +"con i DLNA/UPnP-AV client disponibili." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Numero del modello che il demone miniDLNA riporterà ai client nella sua " +"descrizione XML." + +msgid "Music" +msgstr "Musica" + +msgid "Network interfaces to serve." +msgstr "Interfaccia di rete usata." + +msgid "Notify interval in seconds." +msgstr "Intervallo di notifica in secondi." + +msgid "Notify interval:" +msgstr "Intervallo di notifica:" + +msgid "Pictures" +msgstr "Immagini" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Porta per traffico (descrizione, SOAP, trasferimento supporto) HTTP:" + +msgid "Port:" +msgstr "Porta:" + +msgid "Presentation URL:" +msgstr "URL di Presentazione:" + +msgid "Root container:" +msgstr "Contenitore Principale:" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Serial number che il server miniDLNA invierà ai client nella descrizione " +"XML." + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "Imposta se si desidera personalizzare il nome da mostrare ai client." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" +"Impostare questa opzione se si desidera specificare la cartella in cui si " +"desidera archiviare i database MiniDLNA e le copertine della cache album." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" +"Impostare questa opzione se si desidera specificare la cartella in cui si " +"desidera che MiniDLNA archivi i propri file di registro." + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" +"Impostare questa opzione per consentire il monitoraggio inotify per rilevare " +"automaticamente i nuovi file." + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" +"Impostare questo per abilitare il supporto per lo streaming di file .jpg e " +".mp3 ad un supporto TiVo che supporta HMO." + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" +"Impostare questo parametro per far rispettare rigorosamente gli standard " +"DLNA. Ciò consentirà sul lato server il ridimensionamento delle immagini " +"JPEG di grandi dimensioni che possono influire negativamente sulle " +"prestazioni JPEG del servizio su (almeno) i prodotti Sony DLNA." + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" +"Impostare la cartella che si desidera sottoporre a scansione. Se si desidera " +"limitare la directory per un tipo di contenuto specifico, è possibile " +"anteporre il tipo ('A' per l'audio, 'V' per video, 'P' per le immagini), " +"seguito da una virgola, nella cartella (es. media_dir = A,/mnt/media/Music). " +"Cartelle multiple possono essere specificate." + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "Specificare il percorso del socket MiniSSDPd." + +msgid "Standard container" +msgstr "Contenitore Standard" + +msgid "Strict to DLNA standard:" +msgstr "Scrupolosamente DLNA standard:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" +"Il servizio miniDLNA è attivo, servo %d audio, %d video, %d file di " +"immagine." + +msgid "The miniDLNA service is not running." +msgstr "Il servizio miniDLNA non è in esecuzione." + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" +"Questo è un elenco di nomi di file per verificare la presenza durante la " +"ricerca di copertine degli album." + +msgid "Video" +msgstr "Video" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "Stato miniDLNA" + +msgid "miniSSDP socket:" +msgstr "Socket miniSSDP:" diff --git a/feeds/luci/applications/luci-app-minidlna/po/ja/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/ja/minidlna.po new file mode 100644 index 0000000..4cfc338 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/ja/minidlna.po @@ -0,0 +1,198 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-10 09:10+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Advanced Settings" +msgstr "詳細設定" + +msgid "Album art names:" +msgstr "アルバムアートワーク・ファイル名:" + +msgid "Announced model number:" +msgstr "通知するモデル番号:" + +msgid "Announced serial number:" +msgstr "通知するシリアルナンバー:" + +msgid "Browse directory" +msgstr "Browse directory" + +msgid "Collecting data..." +msgstr "データ収集中です..." + +msgid "Database directory:" +msgstr "データベース・ディレクトリ:" + +msgid "Enable TIVO:" +msgstr "TIVO を有効にする:" + +msgid "Enable inotify:" +msgstr "inotify を有効にする:" + +msgid "Enable:" +msgstr "サービスを有効にする:" + +msgid "Friendly name:" +msgstr "Friendly名:" + +msgid "General Settings" +msgstr "基本設定" + +msgid "Interfaces:" +msgstr "インターフェース:" + +msgid "Log directory:" +msgstr "ログディレクトリ:" + +msgid "Media directories:" +msgstr "メディアディレクトリ:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"MiniDLNAは、DLNA/UPnP-AVクライアントの完全互換を目的としたサーバー・ソフト" +"ウェアです。" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "miniDLNAがクライアントに通知するXML中のモデル番号を設定します。" + +msgid "Music" +msgstr "ミュージック" + +msgid "Network interfaces to serve." +msgstr "サービスが使用するネットワーク・インターフェースを設定します。" + +msgid "Notify interval in seconds." +msgstr "通知間隔を秒単位で設定します。" + +msgid "Notify interval:" +msgstr "通知間隔:" + +msgid "Pictures" +msgstr "ピクチャ" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "ステータス表示のためのHTTPポート番号を設定してください。" + +msgid "Port:" +msgstr "ポート:" + +msgid "Presentation URL:" +msgstr "プレゼンテーションURL:" + +msgid "Root container:" +msgstr "ルート・コンテナ:" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "miniDLNAがクライアントに通知するXML中のシリアルナンバーを設定します。" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "クライアント上で表示されるUPnPノード名を設定してください。" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" +"miniDLNAが使用するデータベースおよびアルバムアートのキャッシュを保存するディ" +"レクトリパスを設定してください。" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "miniDLNAが書きだすログファイルのディレクトリパスを設定してください。" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" +"inotifyを使用した新規ファイルの自動検知を有効にする場合、このオプションを有効" +"にしてください。" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" +"TiVoサポートのための.jpgおよび.mp3ファイルのストリーミングを行う場合、このオ" +"プションを有効にしてください。" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" +"DLNA規格を厳守する場合、このオプションを有効にしてください。オプションを有効" +"にすると、サーバー側で、大きいサイズのJPEGファイルのダウンスケールを行いま" +"す。しかし、この機能はSonyなどのDLNA製品において、JPEGサービスのパフォーマン" +"スを損なう可能性があります。" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" +"miniDLNA がスキャンするディレクトリを設定します。ディレクトリを特定のコンテン" +"ツに制限したい場合、タイプをパスのはじめに付け、コンマ記号で区切ることで設定" +"できます ('A'=オーディオ \"audio\", 'V'=ビデオ \"video\", 'P'=写真 \"images" +"\", 例: media_dir=A,/mnt/media/Music)。また、このオプションは複数のディレクト" +"リを登録可能です。" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "MiniSSDPd ソケットのパスを設定してください。" + +msgid "Standard container" +msgstr "標準コンテナ" + +msgid "Strict to DLNA standard:" +msgstr "DLNA規格の厳守:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" +"miniDLNA サービスは稼働中です。%d 個の音楽ファイル , %d 個のビデオファイル, %" +"d 個の写真ファイルを認識しています。" + +msgid "The miniDLNA service is not running." +msgstr "miniDLNA サービスは稼働していません。" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "アルバムアート検索時にチェックするファイル名のリストを設定します。" + +msgid "Video" +msgstr "ビデオ" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "miniDLNA ステータス" + +msgid "miniSSDP socket:" +msgstr "miniSSDP ソケット:" + +#~ msgid "Network interfaces to serve, comma delimited list." +#~ msgstr "" +#~ "サービスが使用するネットワーク・インターフェースを設定します。カンマ記号 " +#~ "\",\" で区切ってください。" + +#~ msgid "" +#~ "This is a list of file names to check for when searching for album art. " +#~ "Note: names must be delimited with a forward slash '/'" +#~ msgstr "" +#~ "アルバムアート検索時にチェックするファイル名のリストを設定します。注意: " +#~ "ファイル名はスラッシュ記号 '/' で区切ってください。" diff --git a/feeds/luci/applications/luci-app-minidlna/po/ms/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/ms/minidlna.po new file mode 100644 index 0000000..8df98a8 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/ms/minidlna.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "" + +msgid "Enable inotify:" +msgstr "" + +msgid "Enable:" +msgstr "" + +msgid "Friendly name:" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Interfaces:" +msgstr "" + +msgid "Log directory:" +msgstr "" + +msgid "Media directories:" +msgstr "" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "" + +msgid "Notify interval:" +msgstr "" + +msgid "Pictures" +msgstr "" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/no/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/no/minidlna.po new file mode 100644 index 0000000..4b24712 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/no/minidlna.po @@ -0,0 +1,189 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-03-25 17:25+0200\n" +"Last-Translator: protx \n" +"Language-Team: none\n" +"Language: no\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Avanserte Innstillinger" + +msgid "Album art names:" +msgstr "Albumbilder navn:" + +msgid "Announced model number:" +msgstr "Annonsert modellnummer:" + +msgid "Announced serial number:" +msgstr "Annonsert serienummer:" + +msgid "Browse directory" +msgstr "Bla katalog" + +msgid "Collecting data..." +msgstr "Samler inn data..." + +msgid "Database directory:" +msgstr "Database katalog:" + +msgid "Enable TIVO:" +msgstr "Aktiver TIVO:" + +msgid "Enable inotify:" +msgstr "Aktiver inotify:" + +msgid "Enable:" +msgstr "Aktiver:" + +msgid "Friendly name:" +msgstr "Vennlig navn:" + +msgid "General Settings" +msgstr "Generelle Innstillinger" + +msgid "Interfaces:" +msgstr "Grensesnitt:" + +msgid "Log directory:" +msgstr "Logg katalog:" + +msgid "Media directories:" +msgstr "Media kataloger:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"MiniDLNA er serverprogramvare som sikter på å være fullt kompatibel med DLNA" +"/UPnP-AV klienter." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Modellnummer som MiniDLNA daemon vil rapportere til klienter. (XML " +"beskrivelse)" + +msgid "Music" +msgstr "Musikk" + +msgid "Network interfaces to serve." +msgstr "Nettverksgrensesnittene å tjene." + +msgid "Notify interval in seconds." +msgstr "Notify intervall i sekunder." + +msgid "Notify interval:" +msgstr "Notify intervall:" + +msgid "Pictures" +msgstr "Bilder" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Port for HTTP (beskrivelser, SOAP, media overføring) trafikk." + +msgid "Port:" +msgstr "Port:" + +msgid "Presentation URL:" +msgstr "Presentasjon URL:" + +msgid "Root container:" +msgstr "Root katalog:" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Serienummeret miniDLNA daemon vil rapportere til klienter. (XML beskrivelse)" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "Her kan en tilpasse navnet som dukker opp på MiniDLNA klientene." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" +"Her kan en spesifisere hvilken katalog som MiniDLNA bruker for å lagre sin " +"database og albumcover cache." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" +"Her kan en definere hvilken katalog som MiniDLNA skal bruke til å lagre log " +"filen i." + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" +"Her kan en aktivere inotify som overvåker mediakatalogene og dermed " +"automatisk oppdage om det kommer nytt innhold." + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" +"Her kan en aktivere støtte for strømming av .jpg og .mp3 filer til en TiVo " +"med HMO støtte." + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" +"Her kan en aktivere at en holder seg til DLNA-standarder. Dette vil tillate " +"server-side nedskalering av svært store JPEG-bilder, noe som kan skade JPEG " +"serverens ytelse på (minst) Sony DLNA-produkter." + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" +"Her kan en velge den katalogen som blir skannet. Om du ønsker å begrense " +"katalogen til en spesifikk innholdstype kan sette en bokstav foran ('A' for " +"lyd, 'V' for video, 'P' for bilder), etterfulgt av et komma og katalogen. " +"(f.eks media_dir=A,/mnt/media/Musikk). Flere kataloger kan brukes." + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "Angi banen til MiniSSDPd socketen." + +msgid "Standard container" +msgstr "Standard container" + +msgid "Strict to DLNA standard:" +msgstr "Streng overholdelse av DLNA-standarden:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" +"MiniDLNA tjenesten er aktiv, serverer %d lyd, %d video og %d bildefiler." + +msgid "The miniDLNA service is not running." +msgstr "MiniDLNA tjenesten kjører ikke." + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" +"Dette er en liste over filnavn for å se etter når du søker etter albumcover." + +msgid "Video" +msgstr "Video" + +msgid "miniDLNA" +msgstr "MiniDLNA" + +msgid "miniDLNA Status" +msgstr "MiniDLNA Status" + +msgid "miniSSDP socket:" +msgstr "miniSSDP socket:" diff --git a/feeds/luci/applications/luci-app-minidlna/po/pl/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/pl/minidlna.po new file mode 100644 index 0000000..b4a8a6f --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/pl/minidlna.po @@ -0,0 +1,189 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-08-24 07:53+0200\n" +"Last-Translator: goodgod261 \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Ustawienia zaawansowane" + +msgid "Album art names:" +msgstr "Nazwy okładek albumów:" + +msgid "Announced model number:" +msgstr "Rozgłaszany model:" + +msgid "Announced serial number:" +msgstr "Rozgłaszany numer seryjny:" + +msgid "Browse directory" +msgstr "Przeglądaj folder" + +msgid "Collecting data..." +msgstr "Zbieranie informacji..." + +msgid "Database directory:" +msgstr "Katalog bazy danych:" + +msgid "Enable TIVO:" +msgstr "Włącz TIVO:" + +msgid "Enable inotify:" +msgstr "Włącz inotify:" + +msgid "Enable:" +msgstr "Włącz:" + +msgid "Friendly name:" +msgstr "Przyjazna nazwa:" + +msgid "General Settings" +msgstr "Ustawienia ogólne" + +msgid "Interfaces:" +msgstr "Interfejsy:" + +msgid "Log directory:" +msgstr "Katalog dzienników (logów):" + +msgid "Media directories:" +msgstr "Katalog mediów:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"MiniDLNA jest oprogramowaniem serwerowym mającym na celu pełną zgodność z " +"klientami DLNA/UPnP-AV." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "Model, który demon miniDLNA zgłosi klientom w swoim opisie XML." + +msgid "Music" +msgstr "Muzyka" + +msgid "Network interfaces to serve." +msgstr "Interfejsy sieciowe do obsługiwania." + +msgid "Notify interval in seconds." +msgstr "Interwał powiadamiania w sekundach." + +msgid "Notify interval:" +msgstr "Interwał powiadamiania." + +msgid "Pictures" +msgstr "Obrazy" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Port dla ruchu HTTP (opisy, SOAP, transfer mediów)." + +msgid "Port:" +msgstr "Port:" + +msgid "Presentation URL:" +msgstr "URL prezentacyjny:" + +msgid "Root container:" +msgstr "Kontener główny (root):" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Numer seryjny, który demon miniDLNA zgłosi klientom w swoim opisie XML." + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "Ustaw to, jeśli chcesz wybrać własną nazwę pokazującą się w klientach." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" +"Ustaw to, jeśli chcesz podać folder, w którym miniDLNA powinien przechowywać " +"bazę danych i cache okładek albumów." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" +"Ustaw to, jeśli chcesz podać folder, w którym miniDLNA powinien przechowywać " +"dzienniki (logi)." + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" +"Ustaw to, aby włączyć monitorowanie inotify, by automatycznie wykrywać nowe " +"pliki." + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" +"Ustaw to, aby włączyć wsparcie dla streamingu plików .jpg i .mp3 do TiVo " +"obsługującego HMO." + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" +"Ustaw to, aby ściśle przestrzegać standardów DLNA. Pozwoli to na " +"zmniejszanie wielkich plików JPEG po stronie serwera, co może obniżyć " +"wydajność dostarczania plików JPEG (przynajmniej) na urządzeniach DLNA Sony." + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" +"Ustaw tu folder, który chcesz skanować. Jeśli chcesz ograniczyć folder do " +"konkretnego typu zawartości, możesz poprzedzić ścieżkę typem (\"A\" dla " +"audio, \"V\" dla wideo, \"P\" dla obrazów) i przecinkiem (np media_dir=A,/" +"mnt/media/Muzyka). Możesz podać kilka folderów." + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "Podaj ścieżkę do gniazda (socketu) miniSSDPd." + +msgid "Standard container" +msgstr "Standardowy kontener" + +msgid "Strict to DLNA standard:" +msgstr "Ściśle trzymaj się standardów DLNA:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" +"Usługa miniDLNA jest aktywna, dostarczając %d utworów, %d filmów i %d " +"obrazów." + +msgid "The miniDLNA service is not running." +msgstr "Usługa miniDLNA nie jest włączona." + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" +"To jest lista nazw plików do sprawdzenia podczas wyszukiwania okładki albumu." + +msgid "Video" +msgstr "Wideo" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "Status miniDLNA" + +msgid "miniSSDP socket:" +msgstr "Gniazdo (socket) miniSSDP:" diff --git a/feeds/luci/applications/luci-app-minidlna/po/pt-br/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/pt-br/minidlna.po new file mode 100644 index 0000000..3d53abd --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/pt-br/minidlna.po @@ -0,0 +1,193 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Advanced Settings" +msgstr "Configuração Avançada" + +msgid "Album art names:" +msgstr "Nomes do Álbum artistico: " + +msgid "Announced model number:" +msgstr "numero de modelo anunciado:" + +msgid "Announced serial number:" +msgstr "Anunciar serial:" + +msgid "Browse directory" +msgstr "Procurar diretório " + +msgid "Collecting data..." +msgstr "Coletando dados..." + +msgid "Database directory:" +msgstr "Banco de dados de diretório:" + +msgid "Enable TIVO:" +msgstr "Ativar TIVO:" + +msgid "Enable inotify:" +msgstr "Ativar inotify:" + +msgid "Enable:" +msgstr "Ativado" + +msgid "Friendly name:" +msgstr "Nome amigável:" + +msgid "General Settings" +msgstr "Configuração Geral" + +msgid "Interfaces:" +msgstr "Interfaces:" + +msgid "Log directory:" +msgstr "Diretório de Log" + +msgid "Media directories:" +msgstr "Diretórios de mídia:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"MiniDLNA é um software de servidor com o objetivo de ser totalmente " +"compatível com os clientes DLNA / UPnP-AV." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Número do modelo do daemon miniDLNA irá relatar aos clientes em sua " +"descrição XML." + +msgid "Music" +msgstr "Musica" + +msgid "Network interfaces to serve." +msgstr "As interfaces de rede para servir." + +msgid "Notify interval in seconds." +msgstr "Notificação de intervalo em segundos." + +msgid "Notify interval:" +msgstr "Intervalo de Notificação:" + +msgid "Pictures" +msgstr "Imagems" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Porta para HTTP (descrições, SOAP, transferência de mídia) de tráfego." + +msgid "Port:" +msgstr "Porta:" + +msgid "Presentation URL:" +msgstr "URL para Apresentação:" + +msgid "Root container:" +msgstr "Root container:" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Numero serial do miniDLNA daemon apresentará um relatório a clientes em sua " +"descrição XML." + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" +"Defina esta opção se você quiser personalizar o nome que aparece em seus " +"clientes." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" +"Defina esta opção se você gostaria de especificar o diretório onde você " +"deseja MiniDLNA para armazenar seu banco de dados e cache de arte do álbum." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" +"Defina esta opção se você gostaria de especificar o diretório onde você " +"deseja MiniDLNA para armazenar seu arquivo de log." + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" +"Defina esta opção para permitir o monitoramento inotify para descobrir " +"automaticamente novos arquivos." + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" +"Defina esta opção para habilitar o suporte para streaming. Jpg e. Arquivos " +"MP3 para um TiVo suporte HMO." + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" +"Defina esta opção para aderir estritamente às normas DLNA. Isso permitirá " +"que do lado do servidor downscaling de imagens muito grandes JPEG, que podem " +"prejudicar o desempenho servindo em JPEG (pelo menos) os produtos da Sony " +"DLNA." + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" +"Defina esta opção para o diretório que você deseja verificar. Se você quiser " +"restringir o diretório para um tipo específico de conteúdo, você pode " +"prefixar o tipo ('A' para áudio, 'V' para o vídeo, 'P' para imagens), " +"seguido por uma vírgula, para o diretório (por exemplo media_dir = A, / " +"mnt / media / Música). Vários diretórios podem ser especificados." + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "Especifique o caminho para o soquete MiniSSDPd." + +msgid "Standard container" +msgstr "container padrão" + +msgid "Strict to DLNA standard:" +msgstr "Strict para DLNA padrão:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" +"O serviço está ativo miniDLNA, servindo% d áudio, vídeo e arquivos% d% d " +"imagem." + +msgid "The miniDLNA service is not running." +msgstr "O serviço miniDLNA não está funcionando." + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" +"Esta é uma lista de nomes de arquivos para verificar quando procurando arte " +"do álbum." + +msgid "Video" +msgstr "Video" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "miniDLNA Status" + +msgid "miniSSDP socket:" +msgstr "miniSSDP soquete:" diff --git a/feeds/luci/applications/luci-app-minidlna/po/pt/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/pt/minidlna.po new file mode 100644 index 0000000..96132cd --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/pt/minidlna.po @@ -0,0 +1,171 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-06-03 23:36+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Definições Avançadas" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "Número modelo anunciado:" + +msgid "Announced serial number:" +msgstr "Número de série anunciado:" + +msgid "Browse directory" +msgstr "Procurar directório" + +msgid "Collecting data..." +msgstr "A obter dados..." + +msgid "Database directory:" +msgstr "Directório da base de dados:" + +msgid "Enable TIVO:" +msgstr "Ativar TIVO:" + +msgid "Enable inotify:" +msgstr "Ativar inotify:" + +msgid "Enable:" +msgstr "Ativar:" + +msgid "Friendly name:" +msgstr "Nome amigável:" + +msgid "General Settings" +msgstr "Definições Gerais" + +msgid "Interfaces:" +msgstr "Interfaces:" + +msgid "Log directory:" +msgstr "Directório de Log:" + +msgid "Media directories:" +msgstr "Pastas multimédia:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"O MiniDLNA é um software de servidor com o objectivo de ser totalmente " +"compatível com clientes de DLNA/UPnP-AV." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Número de modelo que o serviço de miniDLNA irá reportar aos clientes na sua " +"descrição XML." + +msgid "Music" +msgstr "Música" + +msgid "Network interfaces to serve." +msgstr "Interfaces de rede a serem seervidas." + +msgid "Notify interval in seconds." +msgstr "Intervalo de notificação em segundos." + +msgid "Notify interval:" +msgstr "Intervalo de Notificação:" + +msgid "Pictures" +msgstr "Imagens" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Porta para tráfego HTTP (descrições, SOAP, tranferencia de conteudos)." + +msgid "Port:" +msgstr "Porta:" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/ro/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/ro/minidlna.po new file mode 100644 index 0000000..cba5fe6 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/ro/minidlna.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-09 13:35+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Setări avansate" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "Răsfoire director" + +msgid "Collecting data..." +msgstr "Colectare date..." + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "Activare TIVO:" + +msgid "Enable inotify:" +msgstr "Activare inotify:" + +msgid "Enable:" +msgstr "Activare:" + +msgid "Friendly name:" +msgstr "Nume prieten:" + +msgid "General Settings" +msgstr "Setări generale" + +msgid "Interfaces:" +msgstr "Interfeţe" + +msgid "Log directory:" +msgstr "" + +msgid "Media directories:" +msgstr "Directoare media" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "Muzică" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "Notificare interval în secunde." + +msgid "Notify interval:" +msgstr "Notificare interval:" + +msgid "Pictures" +msgstr "Fotografii" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Port pentru HTTP (descrieri, SOAP, transfer media) trafic." + +msgid "Port:" +msgstr "Port:" + +msgid "Presentation URL:" +msgstr "URL de prezentare:" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "Video" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "Stare miniDLNA" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/ru/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/ru/minidlna.po new file mode 100644 index 0000000..539e8ca --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/ru/minidlna.po @@ -0,0 +1,191 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: minidlna\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2013-11-13 18:43+0200\n" +"Last-Translator: Роман \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Advanced Settings" +msgstr "Расширенные настройки" + +msgid "Album art names:" +msgstr "Имена обложек альбома:" + +msgid "Announced model number:" +msgstr "Номер модели:" + +msgid "Announced serial number:" +msgstr "Серийный номер:" + +msgid "Browse directory" +msgstr "Обзор директории" + +msgid "Collecting data..." +msgstr "Сбор данных..." + +msgid "Database directory:" +msgstr "Папка базы данных:" + +msgid "Enable TIVO:" +msgstr "Включить TIVO:" + +msgid "Enable inotify:" +msgstr "Включить inotify:" + +msgid "Enable:" +msgstr "Включить:" + +msgid "Friendly name:" +msgstr "Понятное имя:" + +msgid "General Settings" +msgstr "Общие настройки" + +msgid "Interfaces:" +msgstr "Интерфейсы:" + +msgid "Log directory:" +msgstr "Папка журнала:" + +msgid "Media directories:" +msgstr "Папки медиа:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" +"MiniDLNA - это серверное программное обеспечение, имеющее цель обеспечения " +"полной совместимости с клиентами DLNA/UPnP-AV." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Номер модели который, miniDLNA будет сообщать клиентам в своём XML-описании." + +msgid "Music" +msgstr "Музыка" + +msgid "Network interfaces to serve." +msgstr "Обслуживаемые сетевые интерфейсы." + +msgid "Notify interval in seconds." +msgstr "Интервал уведомления (секунды)." + +msgid "Notify interval:" +msgstr "Интервал уведомления:" + +msgid "Pictures" +msgstr "Картинки" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Порт для HTTP-трафика (описания, SOAP, передача мультимедиа)" + +msgid "Port:" +msgstr "Порт:" + +msgid "Presentation URL:" +msgstr "URL представления:" + +msgid "Root container:" +msgstr "Корневой контейнер:" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" +"Серийный номер, который miniDLNA будет сообщать клиентам в своём XML-" +"описании." + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "Изменение имени отображения для клиентов." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" +"Папка, в которой miniDLNA будет хранить свою базу данных и кэш обложек " +"альбомов." + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "Папка, в которой miniDLNA будет хранить свой файл журнала." + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" +"Включение наблюдения inotify для автоматического обнаружения новых файлов." + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" +"Установите для включения поддержки потокового воспроизведения файлов .jpg и ." +"mp3 для TiVo с поддержкой HMO." + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" +"Установите для строгого соответствия стандартам DLNA. Это разрешит " +"уменьшение размера слишком больших JPEG-изображений на стороне сервера, что " +"может повредить производительности (по крайней мере) DLNA-продуктов Sony." + +#, fuzzy +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" +"Директории, которые необходимо сканировать. Если вы хотите установить " +"ограничение на определённый тип содержимого в директории, вы можете написать " +"тип ('A' для аудио, 'V' для видео, 'P' для изображений) перед путём к " +"директории, за которым следует запятая (напр. media_dir=A,/mnt/media/Music). " +"Может быть указано несколько директорий." + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "Укажите путь к сокету MiniSSDPd." + +msgid "Standard container" +msgstr "Стандартный контейнер" + +msgid "Strict to DLNA standard:" +msgstr "Строгий стандарт DLNA:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" +"Сервис miniDLNA запущен, обслуживает %d аудио-, %d видео- и %d файлов с " +"изображениями." + +msgid "The miniDLNA service is not running." +msgstr "Сервис miniDLNA не запущен." + +msgid "This is a list of file names to check for when searching for album art." +msgstr "Это список файлов, среди которых необходимо искать обложки альбомов." + +msgid "Video" +msgstr "Видео" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "Статус miniDLNA" + +msgid "miniSSDP socket:" +msgstr "Сокет miniSSDP:" diff --git a/feeds/luci/applications/luci-app-minidlna/po/sk/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/sk/minidlna.po new file mode 100644 index 0000000..19c3e53 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/sk/minidlna.po @@ -0,0 +1,164 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "" + +msgid "Enable inotify:" +msgstr "" + +msgid "Enable:" +msgstr "" + +msgid "Friendly name:" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Interfaces:" +msgstr "" + +msgid "Log directory:" +msgstr "" + +msgid "Media directories:" +msgstr "" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "" + +msgid "Notify interval:" +msgstr "" + +msgid "Pictures" +msgstr "" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/sv/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/sv/minidlna.po new file mode 100644 index 0000000..51a3f3a --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/sv/minidlna.po @@ -0,0 +1,165 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "" + +msgid "Enable inotify:" +msgstr "" + +msgid "Enable:" +msgstr "" + +msgid "Friendly name:" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Interfaces:" +msgstr "" + +msgid "Log directory:" +msgstr "" + +msgid "Media directories:" +msgstr "" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "" + +msgid "Notify interval:" +msgstr "" + +msgid "Pictures" +msgstr "" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/templates/minidlna.pot b/feeds/luci/applications/luci-app-minidlna/po/templates/minidlna.pot new file mode 100644 index 0000000..2b35d1e --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/templates/minidlna.pot @@ -0,0 +1,157 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Advanced Settings" +msgstr "" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "" + +msgid "Enable inotify:" +msgstr "" + +msgid "Enable:" +msgstr "" + +msgid "Friendly name:" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Interfaces:" +msgstr "" + +msgid "Log directory:" +msgstr "" + +msgid "Media directories:" +msgstr "" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "" + +msgid "Notify interval:" +msgstr "" + +msgid "Pictures" +msgstr "" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/tr/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/tr/minidlna.po new file mode 100644 index 0000000..070d64c --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/tr/minidlna.po @@ -0,0 +1,164 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "" + +msgid "Enable inotify:" +msgstr "" + +msgid "Enable:" +msgstr "" + +msgid "Friendly name:" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Interfaces:" +msgstr "" + +msgid "Log directory:" +msgstr "" + +msgid "Media directories:" +msgstr "" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "" + +msgid "Notify interval:" +msgstr "" + +msgid "Pictures" +msgstr "" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/uk/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/uk/minidlna.po new file mode 100644 index 0000000..7df732f --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/uk/minidlna.po @@ -0,0 +1,165 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "" + +msgid "Enable inotify:" +msgstr "" + +msgid "Enable:" +msgstr "" + +msgid "Friendly name:" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Interfaces:" +msgstr "" + +msgid "Log directory:" +msgstr "" + +msgid "Media directories:" +msgstr "" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "" + +msgid "Notify interval:" +msgstr "" + +msgid "Pictures" +msgstr "" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/vi/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/vi/minidlna.po new file mode 100644 index 0000000..070d64c --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/vi/minidlna.po @@ -0,0 +1,164 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Album art names:" +msgstr "" + +msgid "Announced model number:" +msgstr "" + +msgid "Announced serial number:" +msgstr "" + +msgid "Browse directory" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Database directory:" +msgstr "" + +msgid "Enable TIVO:" +msgstr "" + +msgid "Enable inotify:" +msgstr "" + +msgid "Enable:" +msgstr "" + +msgid "Friendly name:" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Interfaces:" +msgstr "" + +msgid "Log directory:" +msgstr "" + +msgid "Media directories:" +msgstr "" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "" + +msgid "Notify interval:" +msgstr "" + +msgid "Pictures" +msgstr "" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/po/zh-cn/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/zh-cn/minidlna.po new file mode 100644 index 0000000..9989756 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/zh-cn/minidlna.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-07 16:21+0200\n" +"Last-Translator: qiuchengxuan \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "高级设置" + +msgid "Album art names:" +msgstr "专辑封面名称:" + +msgid "Announced model number:" +msgstr "通告型号:" + +msgid "Announced serial number:" +msgstr "通告编号:" + +msgid "Browse directory" +msgstr "浏览目录" + +msgid "Collecting data..." +msgstr "收集数据..." + +msgid "Database directory:" +msgstr "数据库目录:" + +msgid "Enable TIVO:" +msgstr "启用TIVO:" + +msgid "Enable inotify:" +msgstr "启用inotify:" + +msgid "Enable:" +msgstr "启用:" + +msgid "Friendly name:" +msgstr "友好名称:" + +msgid "General Settings" +msgstr "基本设置" + +msgid "Interfaces:" +msgstr "接口:" + +msgid "Log directory:" +msgstr "日志目录:" + +msgid "Media directories:" +msgstr "媒体目录:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "MiniDLNA是目标为完全兼容DLNA / UPnP-AV客户端的服务器软件。" + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "miniDLNA守护程序将在其XML描述中向客户端通告型号。" + +msgid "Music" +msgstr "音乐" + +msgid "Network interfaces to serve." +msgstr "服务的网络接口。" + +msgid "Notify interval in seconds." +msgstr "通知的时间间隔,以秒为单位。" + +msgid "Notify interval:" +msgstr "通知的时间间隔:" + +msgid "Pictures" +msgstr "图片" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "Port for HTTP (descriptions, SOAP, media transfer) traffic." + +msgid "Port:" +msgstr "端口:" + +msgid "Presentation URL:" +msgstr "服务网址" + +msgid "Root container:" +msgstr "根目录:" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "miniDLNA守护程序将在其XML描述中向客户端通告编号。" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "设置自定义名称。" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "设置miniDLNA缓存目录" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "设置miniDLNA日志目录" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "设定启用inotify监控,自动发现新的文件。" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "为HMO TiVo启用JPG和MP3流媒体支持。" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" +"设定严格遵守DLNA标准。这将允许服务器端降小大尺寸JPEG图像,在(至少)索尼DLNA" +"的产品这可能会降低JPEG服务性能。" + +# 如果写成media_dir=A,/mnt/media/Music,uci会报错。实际上应该是A,/mnt/media/Music,这样生成的minidlna.conf刚好是media_dir=A,/mnt/media/Music +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" +"设置要扫描的目录。如果你想限制特定内容类型的目录,你可以在前面加上类型(用于音频'A','V'视频,'P'图片),其次是用逗号分隔的目录(如A,/mnt" +"/媒体/音乐)。可以指定多个目录。" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "指定MiniSSDPd socket的路径。" + +msgid "Standard container" +msgstr "基本目录" + +msgid "Strict to DLNA standard:" +msgstr "严格的DLNA标准:" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "miniDLNA服务已启用,提供 %d 音频, %d 视频 和 %d 图片." + +msgid "The miniDLNA service is not running." +msgstr "miniDLNA服务未启用" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "这是一个文件名列表,为搜索专辑封面。" + +msgid "Video" +msgstr "视频" + +msgid "miniDLNA" +msgstr "miniDLNA" + +msgid "miniDLNA Status" +msgstr "miniDLNA 状态" + +msgid "miniSSDP socket:" +msgstr "miniSSDP socket:" diff --git a/feeds/luci/applications/luci-app-minidlna/po/zh-tw/minidlna.po b/feeds/luci/applications/luci-app-minidlna/po/zh-tw/minidlna.po new file mode 100644 index 0000000..1af3280 --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/po/zh-tw/minidlna.po @@ -0,0 +1,167 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 13:15+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "進階設定值" + +msgid "Album art names:" +msgstr "專輯名稱" + +msgid "Announced model number:" +msgstr "已宣告型號數量" + +msgid "Announced serial number:" +msgstr "已宣告序號數量" + +msgid "Browse directory" +msgstr "瀏覽目錄" + +msgid "Collecting data..." +msgstr "收集資料進行中..." + +msgid "Database directory:" +msgstr "資料庫目錄所在:" + +msgid "Enable TIVO:" +msgstr "啟用TIVO代錄" + +msgid "Enable inotify:" +msgstr "啟用檔案事件監控" + +msgid "Enable:" +msgstr "啟用:" + +msgid "Friendly name:" +msgstr "友善名稱" + +msgid "General Settings" +msgstr "一般設定值" + +msgid "Interfaces:" +msgstr "介面" + +msgid "Log directory:" +msgstr "Log紀錄放置區" + +msgid "Media directories:" +msgstr "媒體目錄區:" + +msgid "" +"MiniDLNA is server software with the aim of being fully compliant with DLNA/" +"UPnP-AV clients." +msgstr "MiniDLNA是一個伺服器軟體針對能完全兼容DLNA/UPnP-AV用戶端." + +msgid "" +"Model number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "Music" +msgstr "" + +msgid "Network interfaces to serve." +msgstr "" + +msgid "Notify interval in seconds." +msgstr "" + +msgid "Notify interval:" +msgstr "" + +msgid "Pictures" +msgstr "" + +msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic." +msgstr "" + +msgid "Port:" +msgstr "" + +msgid "Presentation URL:" +msgstr "" + +msgid "Root container:" +msgstr "" + +msgid "" +"Serial number the miniDLNA daemon will report to clients in its XML " +"description." +msgstr "" + +msgid "" +"Set this if you want to customize the name that shows up on your clients." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its database and album art cache." +msgstr "" + +msgid "" +"Set this if you would like to specify the directory where you want MiniDLNA " +"to store its log file." +msgstr "" + +msgid "" +"Set this to enable inotify monitoring to automatically discover new files." +msgstr "" + +msgid "" +"Set this to enable support for streaming .jpg and .mp3 files to a TiVo " +"supporting HMO." +msgstr "" + +msgid "" +"Set this to strictly adhere to DLNA standards. This will allow server-side " +"downscaling of very large JPEG images, which may hurt JPEG serving " +"performance on (at least) Sony DLNA products." +msgstr "" + +msgid "" +"Set this to the directory you want scanned. If you want to restrict the " +"directory to a specific content type, you can prepend the type ('A' for " +"audio, 'V' for video, 'P' for images), followed by a comma, to the directory " +"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified." +msgstr "" + +msgid "Specify the path to the MiniSSDPd socket." +msgstr "" + +msgid "Standard container" +msgstr "" + +msgid "Strict to DLNA standard:" +msgstr "" + +msgid "" +"The miniDLNA service is active, serving %d audio, %d video and %d image " +"files." +msgstr "" + +msgid "The miniDLNA service is not running." +msgstr "" + +msgid "This is a list of file names to check for when searching for album art." +msgstr "" + +msgid "Video" +msgstr "" + +msgid "miniDLNA" +msgstr "" + +msgid "miniDLNA Status" +msgstr "" + +msgid "miniSSDP socket:" +msgstr "" diff --git a/feeds/luci/applications/luci-app-minidlna/root/etc/uci-defaults/40_luci-minidlna b/feeds/luci/applications/luci-app-minidlna/root/etc/uci-defaults/40_luci-minidlna new file mode 100755 index 0000000..df43c1b --- /dev/null +++ b/feeds/luci/applications/luci-app-minidlna/root/etc/uci-defaults/40_luci-minidlna @@ -0,0 +1,15 @@ +#!/bin/sh + +/etc/init.d/minidlna enabled && { + /etc/init.d/minidlna stop + /etc/init.d/minidlna disable +} + +uci -q batch <<-EOF >/dev/null + delete ucitrack.minidlna + set ucitrack.minidlna=minidlna + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-mjpg-streamer/Makefile b/feeds/luci/applications/luci-app-mjpg-streamer/Makefile new file mode 100644 index 0000000..faa024d --- /dev/null +++ b/feeds/luci/applications/luci-app-mjpg-streamer/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=MJPG-Streamer service configuration module +LUCI_DEPENDS:=+mjpg-streamer + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-mjpg-streamer/luasrc/controller/mjpg-streamer.lua b/feeds/luci/applications/luci-app-mjpg-streamer/luasrc/controller/mjpg-streamer.lua new file mode 100644 index 0000000..81fd3b3 --- /dev/null +++ b/feeds/luci/applications/luci-app-mjpg-streamer/luasrc/controller/mjpg-streamer.lua @@ -0,0 +1,17 @@ +-- Copyright 2014 Roger D +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.mjpg-streamer", package.seeall) + +function index() + require("luci.i18n") + luci.i18n.loadc("mjpg-streamer") + if not nixio.fs.access("/etc/config/mjpg-streamer") then + return + end + + local page = entry({"admin", "services", "mjpg-streamer"}, cbi("mjpg-streamer"), _("MJPG-streamer")) + page.i18n = "mjpg-streamer" + page.dependent = true + +end diff --git a/feeds/luci/applications/luci-app-mjpg-streamer/luasrc/model/cbi/mjpg-streamer.lua b/feeds/luci/applications/luci-app-mjpg-streamer/luasrc/model/cbi/mjpg-streamer.lua new file mode 100644 index 0000000..d89ab27 --- /dev/null +++ b/feeds/luci/applications/luci-app-mjpg-streamer/luasrc/model/cbi/mjpg-streamer.lua @@ -0,0 +1,223 @@ +-- Copyright 2014 Roger D +-- Licensed to the public under the Apache License 2.0. + +m = Map("mjpg-streamer", "MJPG-streamer", translate("mjpg streamer is a streaming application for Linux-UVC compatible webcams")) + +--- General settings --- + +section_gen = m:section(TypedSection, "mjpg-streamer", translate("General")) + section_gen.addremove=false + section_gen.anonymous=true + +enabled = section_gen:option(Flag, "enabled", translate("Enabled"), translate("Enable MJPG-streamer")) + +input = section_gen:option(ListValue, "input", translate("Input plugin")) + input:depends("enabled", "1") + input:value("uvc", "UVC") + ---input:value("file", "File") + input.optional = false + +output = section_gen:option(ListValue, "output", translate("Output plugin")) + output:depends("enabled", "1") + output:value("http", "HTTP") + output:value("file", "File") + output.optional = false + + +--- Plugin settings --- + +s = m:section(TypedSection, "mjpg-streamer", translate("Plugin settings")) + s.addremove=false + s.anonymous=true + + s:tab("output_http", translate("HTTP output")) + s:tab("output_file", translate("File output")) + s:tab("input_uvc", translate("UVC input")) + ---s:tab("input_file", translate("File input")) + + +--- Input UVC settings --- + +this_tab = "input_uvc" + +device = s:taboption(this_tab, Value, "device", translate("Device")) + device.default="/dev/video0" + --device.datatype = "device" + device:value("/dev/video0", "/dev/video0") + device:value("/dev/video1", "/dev/video1") + device:value("/dev/video2", "/dev/video2") + device.optional = false + +resolution = s:taboption(this_tab, Value, "resolution", translate("Resolution")) + resolution.default = "640x480" + resolution:value("320x240", "320x240") + resolution:value("640x480", "640x480") + resolution:value("800x600", "800x600") + resolution:value("864x480", "864x480") + resolution:value("960x544", "960x544") + resolution:value("960x720", "960x720") + resolution:value("1280x720", "1280x720") + resolution:value("1280x960", "1280x960") + resolution:value("1920x1080", "1920x1080") + resolution.optional = true + +fps = s:taboption(this_tab, Value, "fps", translate("Frames per second")) + fps.datatype = "and(uinteger, min(1))" + fps.placeholder = "5" + fps.optional = true + +yuv = s:taboption(this_tab, Flag, "yuv", translate("Enable YUYV format"), translate("Automatic disabling of MJPEG mode")) + +quality = s:taboption(this_tab, Value, "quality", translate("JPEG compression quality"), translate("Set the quality in percent. This setting activates YUYV format, disables MJPEG")) + quality.datatype = "range(0, 100)" + +minimum_size = s:taboption(this_tab, Value, "minimum_size", translate("Drop frames smaller then this limit"),translate("Set the minimum size if the webcam produces small-sized garbage frames. May happen under low light conditions")) + minimum_size.datatype = "uinteger" + +no_dynctrl = s:taboption(this_tab, Flag, "no_dynctrl", translate("Don't initalize dynctrls"), translate("Do not initalize dynctrls of Linux-UVC driver")) + +led = s:taboption(this_tab, ListValue, "led", translate("Led control")) + led:value("on", translate("On")) + led:value("off", translate("Off")) + led:value("blink", translate("Blink")) + led:value("auto", translate("Auto")) + led.optional = true + + +--- Output HTTP settings --- + +this_tab = "output_http" + +port=s:taboption(this_tab, Value, "port", translate("Port"), translate("TCP port for this HTTP server")) + port.datatype = "port" + port.placeholder = "8080" + +enable_auth = s:taboption(this_tab, Flag, "enable_auth", translate("Authentication required"), translate("Ask for username and password on connect")) + enable_auth.default = false + +username = s:taboption(this_tab, Value, "username", translate("Username")) + username:depends("enable_auth", "1") + username.optional = false + +password = s:taboption(this_tab, Value, "password", translate("Password")) + password:depends("enable_auth", "1") + password.password = true + password.optional = false + password.default = false + +www = s:taboption(this_tab, Value, "www", translate("WWW folder"), translate("Folder that contains webpages")) + www.datatype = "directory" + www.default = "/www/webcam/" + www.optional = false + + +--- HTTP preview --- + +html = [[ + + +
+ +

Stream unavailable

+
+ + +]] + +preview = s:taboption(this_tab, DummyValue, "_dummy", html) + preview:depends("output", "http") + +--- Output file settings --- + +this_tab = "output_file" + +folder=s:taboption(this_tab, Value, "folder", translate("Folder"), translate("Set folder to save pictures")) + folder.placeholder="/tmp/images" + folder.datatype = "directory" + +--mjpeg=s:taboption(this_tab, Value, "mjpeg", translate("Mjpeg output"), translate("Check to save the stream to an mjpeg file")) + +delay=s:taboption(this_tab, Value, "delay", translate("Interval between saving pictures"), translate("Set the inteval in millisecond")) + delay.placeholder="5000" + delay.datatype = "uinteger" + +ringbuffer=s:taboption(this_tab, Value, "ringbuffer", translate("Ring buffer size"), translate("Max. number of pictures to hold")) + ringbuffer.placeholder="10" + ringbuffer.datatype = "uinteger" + +exceed=s:taboption(this_tab, Value, "exceed", translate("Exceed"), translate("Allow ringbuffer to exceed limit by this amount")) + exceed.datatype = "uinteger" + +command=s:taboption(this_tab, Value, "command", translate("Command to run"), translate("Execute command after saving picture. Mjpg-streamer parse the filename as first parameter to your script.")) + + +return m diff --git a/feeds/luci/applications/luci-app-mjpg-streamer/po/ja/mjpg-streamer.po b/feeds/luci/applications/luci-app-mjpg-streamer/po/ja/mjpg-streamer.po new file mode 100644 index 0000000..7da3444 --- /dev/null +++ b/feeds/luci/applications/luci-app-mjpg-streamer/po/ja/mjpg-streamer.po @@ -0,0 +1,171 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: INAGAKI Hiroshi \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"X-Generator: Poedit 1.8.11\n" + +msgid "Allow ringbuffer to exceed limit by this amount" +msgstr "リングバッファーがこの量だけ制限を超過することを許可します。" + +msgid "Ask for username and password on connect" +msgstr "接続時にユーザー名とパスワードを確認します。" + +msgid "Authentication required" +msgstr "認証が必要" + +msgid "Auto" +msgstr "自動" + +msgid "Automatic disabling of MJPEG mode" +msgstr "MJPEGモードの自動無効化" + +msgid "Blink" +msgstr "点滅" + +msgid "Check to save the stream to an mjpeg file" +msgstr "MJPEGファイルに保存するにはチェックします。" + +msgid "Command to run" +msgstr "実行するコマンド" + +msgid "Device" +msgstr "デバイス" + +msgid "Do not initalize dynctrls of Linux-UVC driver" +msgstr "Linux-UVCドライバのdynctrlsを初期化しません。" + +msgid "Don't initalize dynctrls" +msgstr "dynctrlsを初期化しない" + +msgid "Drop frames smaller then this limit" +msgstr "この制限よりも小さいフレームをドロップする" + +msgid "Enable MJPG-streamer" +msgstr "MJPG-streamerを有効化します。" + +msgid "Enable YUYV format" +msgstr "YUYV形式を有効化" + +msgid "Enabled" +msgstr "有効" + +msgid "Exceed" +msgstr "超過" + +msgid "" +"Execute command after saving picture. Mjpg-streamer parse the filename as " +"first parameter to your script." +msgstr "" +"画像保存後にコマンドを実行します。Mjpg-streamerは、ファイル名をスクリプトの最" +"初の引数として解釈します。" + +msgid "File input" +msgstr "ファイル入力" + +msgid "File output" +msgstr "ファイル出力" + +msgid "Folder" +msgstr "フォルダー" + +msgid "Folder that contains webpages" +msgstr "ウェブページを含むフォルダー" + +msgid "Frames per second" +msgstr "1秒当たりのフレーム数" + +msgid "General" +msgstr "一般設定" + +msgid "HTTP output" +msgstr "HTTP 出力" + +msgid "Input plugin" +msgstr "入力プラグイン" + +msgid "Interval between saving pictures" +msgstr "画像の保存間隔" + +msgid "JPEG compression quality" +msgstr "JPEG 圧縮品質" + +msgid "Led control" +msgstr "LED 制御" + +msgid "MJPG-streamer" +msgstr "MJPG-streamer" + +msgid "Max. number of pictures to hold" +msgstr "保持する画像の最大数です。" + +msgid "Mjpeg output" +msgstr "MJPEG 出力" + +msgid "Off" +msgstr "消灯" + +msgid "On" +msgstr "点灯" + +msgid "Output plugin" +msgstr "出力プラグイン" + +msgid "Password" +msgstr "パスワード" + +msgid "Plugin settings" +msgstr "プラグイン設定" + +msgid "Port" +msgstr "ポート" + +msgid "Resolution" +msgstr "解像度" + +msgid "Ring buffer size" +msgstr "リングバッファー サイズ" + +msgid "Set folder to save pictures" +msgstr "画像を保存するフォルダーを設定します。" + +msgid "Set the inteval in millisecond" +msgstr "間隔をミリ秒で設定します。" + +msgid "" +"Set the minimum size if the webcam produces small-sized garbage frames. May " +"happen under low light conditions" +msgstr "" +"もしウェブカメラが小さなサイズの余分なフレームを生成する場合は、最小サイズを" +"設定します。光量の低い条件下で発生することがあります。" + +msgid "" +"Set the quality in percent. This setting activates YUYV format, disables " +"MJPEG" +msgstr "" +"品質をパーセントで設定します。この設定はYUYV形式を有効にし、MJPEGを無効にしま" +"す。" + +msgid "TCP port for this HTTP server" +msgstr "このHTTPサーバーのTCPポートです。" + +msgid "UVC input" +msgstr "UVC 入力" + +msgid "Username" +msgstr "ユーザー名" + +msgid "WWW folder" +msgstr "WWW フォルダー" + +msgid "" +"mjpg streamer is a streaming application for Linux-UVC compatible webcams" +msgstr "" +"Mjpg streamerは、Linux-UVC互換ウェブカメラのためのストリーミング アプリケー" +"ションです。" diff --git a/feeds/luci/applications/luci-app-mjpg-streamer/po/templates/mjpg-streamer.pot b/feeds/luci/applications/luci-app-mjpg-streamer/po/templates/mjpg-streamer.pot new file mode 100644 index 0000000..ecb374d --- /dev/null +++ b/feeds/luci/applications/luci-app-mjpg-streamer/po/templates/mjpg-streamer.pot @@ -0,0 +1,153 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Allow ringbuffer to exceed limit by this amount" +msgstr "" + +msgid "Ask for username and password on connect" +msgstr "" + +msgid "Authentication required" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Automatic disabling of MJPEG mode" +msgstr "" + +msgid "Blink" +msgstr "" + +msgid "Check to save the stream to an mjpeg file" +msgstr "" + +msgid "Command to run" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "Do not initalize dynctrls of Linux-UVC driver" +msgstr "" + +msgid "Don't initalize dynctrls" +msgstr "" + +msgid "Drop frames smaller then this limit" +msgstr "" + +msgid "Enable MJPG-streamer" +msgstr "" + +msgid "Enable YUYV format" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Exceed" +msgstr "" + +msgid "" +"Execute command after saving picture. Mjpg-streamer parse the filename as " +"first parameter to your script." +msgstr "" + +msgid "File input" +msgstr "" + +msgid "File output" +msgstr "" + +msgid "Folder" +msgstr "" + +msgid "Folder that contains webpages" +msgstr "" + +msgid "Frames per second" +msgstr "" + +msgid "General" +msgstr "" + +msgid "HTTP output" +msgstr "" + +msgid "Input plugin" +msgstr "" + +msgid "Interval between saving pictures" +msgstr "" + +msgid "JPEG compression quality" +msgstr "" + +msgid "Led control" +msgstr "" + +msgid "MJPG-streamer" +msgstr "" + +msgid "Max. number of pictures to hold" +msgstr "" + +msgid "Mjpeg output" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "On" +msgstr "" + +msgid "Output plugin" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Plugin settings" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Resolution" +msgstr "" + +msgid "Ring buffer size" +msgstr "" + +msgid "Set folder to save pictures" +msgstr "" + +msgid "Set the inteval in millisecond" +msgstr "" + +msgid "" +"Set the minimum size if the webcam produces small-sized garbage frames. May " +"happen under low light conditions" +msgstr "" + +msgid "" +"Set the quality in percent. This setting activates YUYV format, disables " +"MJPEG" +msgstr "" + +msgid "TCP port for this HTTP server" +msgstr "" + +msgid "UVC input" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "WWW folder" +msgstr "" + +msgid "" +"mjpg streamer is a streaming application for Linux-UVC compatible webcams" +msgstr "" diff --git a/feeds/luci/applications/luci-app-mjpg-streamer/po/zh-cn/mjpg-streamer.po b/feeds/luci/applications/luci-app-mjpg-streamer/po/zh-cn/mjpg-streamer.po new file mode 100644 index 0000000..8b51f6a --- /dev/null +++ b/feeds/luci/applications/luci-app-mjpg-streamer/po/zh-cn/mjpg-streamer.po @@ -0,0 +1,165 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-mjpg-streamer\n" +"POT-Creation-Date: 2015-06-11 21:11+0100\n" +"PO-Revision-Date: 2015-06-11 21:11+0100\n" +"Last-Translator: maz-1 \n" +"Language-Team: \n" +"Language: zh-cn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Allow ringbuffer to exceed limit by this amount" +msgstr "允许环形缓冲区最多超过这个数值" + +msgid "Ask for username and password on connect" +msgstr "连接时询问用户名和密码" + +msgid "Authentication required" +msgstr "需要验证" + +msgid "Auto" +msgstr "自动" + +msgid "Automatic disabling of MJPEG mode" +msgstr "自动禁用MJPEG模式" + +msgid "Blink" +msgstr "闪烁" + +msgid "Check to save the stream to an mjpeg file" +msgstr "勾选以保存视频流至一个mjpeg文件" + +msgid "Command to run" +msgstr "运行的命令" + +msgid "Device" +msgstr "设备" + +msgid "Do not initalize dynctrls of Linux-UVC driver" +msgstr "不要初始化Linux-UVC驱动的dynctrls" + +msgid "Don't initalize dynctrls" +msgstr "不要初始化dynctrls" + +msgid "Drop frames smaller then this limit" +msgstr "丢弃小于该尺寸限制的帧" + +msgid "Enable MJPG-streamer" +msgstr "启用MJPG-streamer" + +msgid "Enable YUYV format" +msgstr "启用YUYV格式" + +msgid "Enabled" +msgstr "启用" + +msgid "Exceed" +msgstr "超出" + +msgid "" +"Execute command after saving picture. Mjpg-streamer parse the filename as " +"first parameter to your script." +msgstr "保存图片后执行命令。文件名将作为第一个参数传递给命令。" + +msgid "File input" +msgstr "文件输入" + +msgid "File output" +msgstr "文件输出" + +msgid "Folder" +msgstr "文件夹" + +msgid "Folder that contains webpages" +msgstr "保存网页的文件夹" + +msgid "Frames per second" +msgstr "帧每秒" + +msgid "General" +msgstr "一般设置" + +msgid "HTTP output" +msgstr "HTTP输出" + +msgid "Input plugin" +msgstr "输入插件" + +msgid "Interval between saving pictures" +msgstr "图片保存时间间隔" + +msgid "JPEG compression quality" +msgstr "JPEG压缩品质" + +msgid "Led control" +msgstr "LED控制" + +msgid "MJPG-streamer" +msgstr "MJPG-streamer" + +msgid "Max. number of pictures to hold" +msgstr "保存的图片数量上限" + +msgid "Mjpeg output" +msgstr "Mjpeg输出" + +msgid "Off" +msgstr "关" + +msgid "On" +msgstr "开" + +msgid "Output plugin" +msgstr "输出插件" + +msgid "Password" +msgstr "密码" + +msgid "Plugin settings" +msgstr "插件设置" + +msgid "Port" +msgstr "端口" + +msgid "Resolution" +msgstr "分辨率" + +msgid "Ring buffer size" +msgstr "环形缓冲区大小" + +msgid "Set folder to save pictures" +msgstr "图片保存位置" + +msgid "Set the inteval in millisecond" +msgstr "设置时间间隔(毫秒)" + +msgid "" +"Set the minimum size if the webcam produces small-sized garbage frames. May " +"happen under low light conditions" +msgstr "设置无用帧的最小尺寸。当光照不足时可能出现无用帧。" + +msgid "" +"Set the quality in percent. This setting activates YUYV format, disables " +"MJPEG" +msgstr "设置品质(百分比)。此设置会开启YUYV格式输出,关闭MJPEG输出。" + +msgid "TCP port for this HTTP server" +msgstr "HTTP服务监听的TCP端口" + +msgid "UVC input" +msgstr "UVC输入" + +msgid "Username" +msgstr "用户名" + +msgid "WWW folder" +msgstr "WWW文件夹" + +msgid "" +"mjpg streamer is a streaming application for Linux-UVC compatible webcams" +msgstr "mjpg streamer是一个视频流程序,用于兼容Linux-UVC的摄像头。" diff --git a/feeds/luci/applications/luci-app-mjpg-streamer/root/etc/uci-defaults/40_luci-mjpg-streamer b/feeds/luci/applications/luci-app-mjpg-streamer/root/etc/uci-defaults/40_luci-mjpg-streamer new file mode 100755 index 0000000..6a380cf --- /dev/null +++ b/feeds/luci/applications/luci-app-mjpg-streamer/root/etc/uci-defaults/40_luci-mjpg-streamer @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@mjpg-streamer[-1] + add ucitrack mjpg-streamer + set ucitrack.@mjpg-streamer[-1].init=mjpg-streamer + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/Makefile b/feeds/luci/applications/luci-app-mmc-over-gpio/Makefile new file mode 100644 index 0000000..4e7d695 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=MMC-over-GPIO configuration module +LUCI_DEPENDS:=+kmod-mmc-over-gpio + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/luasrc/controller/mmc_over_gpio.lua b/feeds/luci/applications/luci-app-mmc-over-gpio/luasrc/controller/mmc_over_gpio.lua new file mode 100644 index 0000000..78ed24f --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/luasrc/controller/mmc_over_gpio.lua @@ -0,0 +1,15 @@ +-- Copyright 2008 Yanira +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.mmc_over_gpio", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/mmc_over_gpio") then + return + end + + local page + + page = entry({"admin", "system", "mmc_over_gpio"}, cbi("mmc_over_gpio"), _("MMC/SD driver configuration"), 60) + page.dependent = true +end diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/luasrc/model/cbi/mmc_over_gpio.lua b/feeds/luci/applications/luci-app-mmc-over-gpio/luasrc/model/cbi/mmc_over_gpio.lua new file mode 100644 index 0000000..fd0896c --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/luasrc/model/cbi/mmc_over_gpio.lua @@ -0,0 +1,29 @@ +-- Copyright 2008 Yanira +-- Licensed to the public under the Apache License 2.0. + +m = Map("mmc_over_gpio", translate("MMC/SD driver configuration"), + translate("MMC/SD driver configuration")) + +s = m:section(TypedSection, "mmc_over_gpio", translate("Settings")) +s.addremove = true +s.anonymous = true + +s:option(Flag, "enabled", translate("Enable")) + +s:option(Value, "name", translate("Name")) + +pin = s:option(Value, "DI_pin", translate("DI_pin")) +for i = 0,7 do pin:value(i) end + +pin = s:option(Value, "DO_pin", translate("DO_pin")) +for i = 0,7 do pin:value(i) end + +pin = s:option(Value, "CLK_pin", translate("CLK_pin")) +for i = 0,7 do pin:value(i) end + +pin = s:option(Value, "CS_pin", translate("CS_pin")) +for i = 0,7 do pin:value(i) end + +s:option(Value, "mode", translate("Mode")) + +return m diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/ca/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/ca/mmc_over_gpio.po new file mode 100644 index 0000000..558e10a --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/ca/mmc_over_gpio.po @@ -0,0 +1,43 @@ +# mmc_over_gpio.pot +# generated from ./applications/luci-mmc_over_gpio/luasrc/i18n/mmc_over_gpio.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-06-01 23:04+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "" + +msgid "CS_pin" +msgstr "" + +msgid "DI_pin" +msgstr "" + +msgid "DO_pin" +msgstr "" + +msgid "Enable" +msgstr "Habilita" + +msgid "MMC/SD driver configuration" +msgstr "Configuració de controlador MMC/SD" + +msgid "Mode" +msgstr "Mode" + +msgid "Name" +msgstr "Nom" + +msgid "Settings" +msgstr "Ajusts" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/cs/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/cs/mmc_over_gpio.po new file mode 100644 index 0000000..6a7b7b1 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/cs/mmc_over_gpio.po @@ -0,0 +1,41 @@ +# mmc_over_gpio.pot +# generated from ./applications/luci-mmc_over_gpio/luasrc/i18n/mmc_over_gpio.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-15 20:16+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "Pin CLK" + +msgid "CS_pin" +msgstr "Pin CS" + +msgid "DI_pin" +msgstr "Pin DI" + +msgid "DO_pin" +msgstr "Pin DO" + +msgid "Enable" +msgstr "Povolit" + +msgid "MMC/SD driver configuration" +msgstr "Konfigurace ovladače MMC/SD" + +msgid "Mode" +msgstr "Mód" + +msgid "Name" +msgstr "Jméno" + +msgid "Settings" +msgstr "Nastavení" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/de/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/de/mmc_over_gpio.po new file mode 100644 index 0000000..3b21417 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/de/mmc_over_gpio.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2012-11-28 10:44+0200\n" +"Last-Translator: dunkelschunkel \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +# Das wäre der Pin für Clock, also Takt, eventuell kann das auch rein. Halte obige Variante aber für hinreichend +msgid "CLK_pin" +msgstr "CLK-Pin" + +msgid "CS_pin" +msgstr "CS-Pin" + +msgid "DI_pin" +msgstr "DI-Pin" + +msgid "DO_pin" +msgstr "DO-Pin" + +msgid "Enable" +msgstr "Aktivieren" + +msgid "MMC/SD driver configuration" +msgstr "MMC/SD Treibereinstellungen" + +msgid "Mode" +msgstr "Modus" + +msgid "Name" +msgstr "Name" + +msgid "Settings" +msgstr "Einstellungen" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/el/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/el/mmc_over_gpio.po new file mode 100644 index 0000000..8aadeff --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/el/mmc_over_gpio.po @@ -0,0 +1,39 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-28 02:08+0200\n" +"PO-Revision-Date: 2010-07-01 20:18+0200\n" +"Last-Translator: Vasilis Tsiligiannis \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "CLK_pin" +msgstr "" + +msgid "CS_pin" +msgstr "" + +msgid "DI_pin" +msgstr "" + +msgid "DO_pin" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "MMC/SD driver configuration" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Settings" +msgstr "Ρυθμίσεις" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/en/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/en/mmc_over_gpio.po new file mode 100644 index 0000000..bd8f3c8 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/en/mmc_over_gpio.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-03-21 18:31+0200\n" +"Last-Translator: Anonymous Pootle User\n" +"Language-Team: LANGUAGE \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "CLK_pin" +msgstr "" + +msgid "CS_pin" +msgstr "" + +msgid "DI_pin" +msgstr "" + +msgid "DO_pin" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "MMC/SD driver configuration" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Settings" +msgstr "Settings" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/es/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/es/mmc_over_gpio.po new file mode 100644 index 0000000..ee0b0c6 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/es/mmc_over_gpio.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-08-19 21:05+0200\n" +"Last-Translator: josevteg \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "Pin CLK" + +msgid "CS_pin" +msgstr "Pin CS" + +msgid "DI_pin" +msgstr "Pin DI" + +msgid "DO_pin" +msgstr "Pin DO" + +msgid "Enable" +msgstr "Activar" + +msgid "MMC/SD driver configuration" +msgstr "Configuración de controlador MMC/SD" + +msgid "Mode" +msgstr "Modo" + +msgid "Name" +msgstr "Nombre" + +msgid "Settings" +msgstr "Configuración" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/fr/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/fr/mmc_over_gpio.po new file mode 100644 index 0000000..64dc899 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/fr/mmc_over_gpio.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-11-06 16:06+0200\n" +"Last-Translator: hogsim \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "CLK_pin" + +msgid "CS_pin" +msgstr "CS_pin" + +msgid "DI_pin" +msgstr "DI_pin" + +msgid "DO_pin" +msgstr "DO_pin" + +msgid "Enable" +msgstr "Activer" + +msgid "MMC/SD driver configuration" +msgstr "Configuration driver MMC/SD" + +msgid "Mode" +msgstr "Mode" + +msgid "Name" +msgstr "Nom" + +msgid "Settings" +msgstr "Configuration" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/he/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/he/mmc_over_gpio.po new file mode 100644 index 0000000..bf506c0 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/he/mmc_over_gpio.po @@ -0,0 +1,41 @@ +# mmc_over_gpio.pot +# generated from ./applications/luci-mmc_over_gpio/luasrc/i18n/mmc_over_gpio.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-10 04:34+0200\n" +"Last-Translator: Snoof \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "" + +msgid "CS_pin" +msgstr "" + +msgid "DI_pin" +msgstr "" + +msgid "DO_pin" +msgstr "" + +msgid "Enable" +msgstr "אפשר" + +msgid "MMC/SD driver configuration" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Name" +msgstr "שם" + +msgid "Settings" +msgstr "הגדרות" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/hu/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/hu/mmc_over_gpio.po new file mode 100644 index 0000000..758c711 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/hu/mmc_over_gpio.po @@ -0,0 +1,41 @@ +# mmc_over_gpio.pot +# generated from ./applications/luci-mmc_over_gpio/luasrc/i18n/mmc_over_gpio.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-12-30 19:09+0200\n" +"Last-Translator: romboyco \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "CLK_pin" + +msgid "CS_pin" +msgstr "CS_pin" + +msgid "DI_pin" +msgstr "DI_pin" + +msgid "DO_pin" +msgstr "DO_pin" + +msgid "Enable" +msgstr "Bekapcsolás" + +msgid "MMC/SD driver configuration" +msgstr "MMC/SD driver konfiguráció" + +msgid "Mode" +msgstr "Mód" + +msgid "Name" +msgstr "Név" + +msgid "Settings" +msgstr "Beállítások" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/it/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/it/mmc_over_gpio.po new file mode 100644 index 0000000..e0f371a --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/it/mmc_over_gpio.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-02-03 13:57+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "CLK_pin" + +msgid "CS_pin" +msgstr "CS_pin" + +msgid "DI_pin" +msgstr "DI_pin" + +msgid "DO_pin" +msgstr "DO_pin" + +msgid "Enable" +msgstr "Attiva" + +msgid "MMC/SD driver configuration" +msgstr "Configurazione driver MMC/SD" + +msgid "Mode" +msgstr "Modalità" + +msgid "Name" +msgstr "Nome" + +msgid "Settings" +msgstr "Opzioni" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/ja/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/ja/mmc_over_gpio.po new file mode 100644 index 0000000..5c0f102 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/ja/mmc_over_gpio.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-10-05 16:45+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "CLK_pin" + +msgid "CS_pin" +msgstr "CS_pin" + +msgid "DI_pin" +msgstr "DI_pin" + +msgid "DO_pin" +msgstr "DO_pin" + +msgid "Enable" +msgstr "有効" + +msgid "MMC/SD driver configuration" +msgstr "MMC/SD ドライバ設定" + +msgid "Mode" +msgstr "モード" + +msgid "Name" +msgstr "名前" + +msgid "Settings" +msgstr "設定" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/ms/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/ms/mmc_over_gpio.po new file mode 100644 index 0000000..edbb2ce --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/ms/mmc_over_gpio.po @@ -0,0 +1,37 @@ +# mmc_over_gpio.pot +# generated from ./applications/luci-mmc_over_gpio/luasrc/i18n/mmc_over_gpio.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "CLK_pin" +msgstr "" + +msgid "CS_pin" +msgstr "" + +msgid "DI_pin" +msgstr "" + +msgid "DO_pin" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "MMC/SD driver configuration" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Settings" +msgstr "" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/no/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/no/mmc_over_gpio.po new file mode 100644 index 0000000..ea9a533 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/no/mmc_over_gpio.po @@ -0,0 +1,32 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "CLK_pin" +msgstr "CLK_pin" + +msgid "CS_pin" +msgstr "CS_pin" + +msgid "DI_pin" +msgstr "DI_pin" + +msgid "DO_pin" +msgstr "DO_pin" + +msgid "Enable" +msgstr "Aktiver" + +msgid "MMC/SD driver configuration" +msgstr "MMC/SD Konfigurasjon" + +msgid "Mode" +msgstr "Modus" + +msgid "Name" +msgstr "Navn" + +msgid "Settings" +msgstr "Innstillinger" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/pl/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/pl/mmc_over_gpio.po new file mode 100644 index 0000000..ff5b51b --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/pl/mmc_over_gpio.po @@ -0,0 +1,42 @@ +# mmc_over_gpio.pot +# generated from ./applications/luci-mmc_over_gpio/luasrc/i18n/mmc_over_gpio.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-08-26 12:23+0200\n" +"Last-Translator: Staszek \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "CLK_pin" +msgstr "Pin CLK" + +msgid "CS_pin" +msgstr "Pin CS" + +msgid "DI_pin" +msgstr "Pin DI" + +msgid "DO_pin" +msgstr "Pin DO" + +msgid "Enable" +msgstr "Uaktywnij" + +msgid "MMC/SD driver configuration" +msgstr "Konfiguracja sterownika MMC/SD" + +msgid "Mode" +msgstr "Tryb" + +msgid "Name" +msgstr "Nazwa" + +msgid "Settings" +msgstr "Ustawienia" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/pt-br/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/pt-br/mmc_over_gpio.po new file mode 100644 index 0000000..9fbbf0f --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/pt-br/mmc_over_gpio.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-07-05 06:43+0200\n" +"Last-Translator: rafaelff1 \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "CLK_pin" + +msgid "CS_pin" +msgstr "CS_pin" + +msgid "DI_pin" +msgstr "DI_pin" + +msgid "DO_pin" +msgstr "DO_pin" + +msgid "Enable" +msgstr "Habilitar" + +msgid "MMC/SD driver configuration" +msgstr "Configuração de driver MMC/SD" + +msgid "Mode" +msgstr "Modo" + +msgid "Name" +msgstr "Nome" + +msgid "Settings" +msgstr "Configurações" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/pt/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/pt/mmc_over_gpio.po new file mode 100644 index 0000000..497c0b0 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/pt/mmc_over_gpio.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-05-31 15:28+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "CLK_pin" + +msgid "CS_pin" +msgstr "CS_pin" + +msgid "DI_pin" +msgstr "DI_pin" + +msgid "DO_pin" +msgstr "DO_pin" + +msgid "Enable" +msgstr "Ativar" + +msgid "MMC/SD driver configuration" +msgstr "Configuração do driver MMC/SD" + +msgid "Mode" +msgstr "Modo" + +msgid "Name" +msgstr "Nome" + +msgid "Settings" +msgstr "Definições" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/ro/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/ro/mmc_over_gpio.po new file mode 100644 index 0000000..e465f0a --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/ro/mmc_over_gpio.po @@ -0,0 +1,42 @@ +# mmc_over_gpio.pot +# generated from ./applications/luci-mmc_over_gpio/luasrc/i18n/mmc_over_gpio.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-28 19:22+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "CLK_pin" + +msgid "CS_pin" +msgstr "CS_pin" + +msgid "DI_pin" +msgstr "DI_pin" + +msgid "DO_pin" +msgstr "DO_pin" + +msgid "Enable" +msgstr "Activare" + +msgid "MMC/SD driver configuration" +msgstr "Configurare driver MMC/SD" + +msgid "Mode" +msgstr "Mod" + +msgid "Name" +msgstr "Nume" + +msgid "Settings" +msgstr "Setări" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/ru/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/ru/mmc_over_gpio.po new file mode 100644 index 0000000..dcc2e93 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/ru/mmc_over_gpio.po @@ -0,0 +1,43 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: mmc_over_gpio\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-08-15 11:23+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "CLK_pin" +msgstr "Вывод CLK" + +msgid "CS_pin" +msgstr "Вывод CS" + +msgid "DI_pin" +msgstr "Вывод DI" + +msgid "DO_pin" +msgstr "Вывод DO" + +msgid "Enable" +msgstr "Включить" + +msgid "MMC/SD driver configuration" +msgstr "Конфигурация драйвера MMC/SD" + +msgid "Mode" +msgstr "Режим" + +msgid "Name" +msgstr "Имя" + +msgid "Settings" +msgstr "Настройки" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/sk/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/sk/mmc_over_gpio.po new file mode 100644 index 0000000..587ee42 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/sk/mmc_over_gpio.po @@ -0,0 +1,36 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "CLK_pin" +msgstr "" + +msgid "CS_pin" +msgstr "" + +msgid "DI_pin" +msgstr "" + +msgid "DO_pin" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "MMC/SD driver configuration" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Settings" +msgstr "" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/sv/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/sv/mmc_over_gpio.po new file mode 100644 index 0000000..598a0f0 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/sv/mmc_over_gpio.po @@ -0,0 +1,37 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "CLK_pin" +msgstr "" + +msgid "CS_pin" +msgstr "" + +msgid "DI_pin" +msgstr "" + +msgid "DO_pin" +msgstr "" + +msgid "Enable" +msgstr "Aktivera" + +msgid "MMC/SD driver configuration" +msgstr "Konfiguration av MMC/SD-drivrutin" + +msgid "Mode" +msgstr "Läge" + +msgid "Name" +msgstr "Namn" + +msgid "Settings" +msgstr "Inställningar" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/templates/mmc_over_gpio.pot b/feeds/luci/applications/luci-app-mmc-over-gpio/po/templates/mmc_over_gpio.pot new file mode 100644 index 0000000..1cc8de3 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/templates/mmc_over_gpio.pot @@ -0,0 +1,29 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "CLK_pin" +msgstr "" + +msgid "CS_pin" +msgstr "" + +msgid "DI_pin" +msgstr "" + +msgid "DO_pin" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "MMC/SD driver configuration" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Settings" +msgstr "" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/tr/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/tr/mmc_over_gpio.po new file mode 100644 index 0000000..349b8fc --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/tr/mmc_over_gpio.po @@ -0,0 +1,41 @@ +# mmc_over_gpio.pot +# generated from ./applications/luci-mmc_over_gpio/luasrc/i18n/mmc_over_gpio.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-10-11 23:19+0200\n" +"Last-Translator: vincenzo \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "CLK_ayağı" + +msgid "CS_pin" +msgstr "CS_ayağı" + +msgid "DI_pin" +msgstr "DI_ayağı" + +msgid "DO_pin" +msgstr "DO_ayağı" + +msgid "Enable" +msgstr "Etkinleştir" + +msgid "MMC/SD driver configuration" +msgstr "MMC/SD Sürücü Yapılandırması" + +msgid "Mode" +msgstr "Mod" + +msgid "Name" +msgstr "isim" + +msgid "Settings" +msgstr "Ayarlar" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/uk/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/uk/mmc_over_gpio.po new file mode 100644 index 0000000..e9b37f2 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/uk/mmc_over_gpio.po @@ -0,0 +1,42 @@ +# mmc_over_gpio.pot +# generated from ./applications/luci-mmc_over_gpio/luasrc/i18n/mmc_over_gpio.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-12-29 13:06+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "Вивід ВCLK" + +msgid "CS_pin" +msgstr "Вивід CS" + +msgid "DI_pin" +msgstr "Вивід DI" + +msgid "DO_pin" +msgstr "Вивід DO" + +msgid "Enable" +msgstr "Увімкнути" + +msgid "MMC/SD driver configuration" +msgstr "Конфігурація драйвера MMC/SD" + +msgid "Mode" +msgstr "Режим" + +msgid "Name" +msgstr "Ім'я" + +msgid "Settings" +msgstr "Настройки" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/vi/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/vi/mmc_over_gpio.po new file mode 100644 index 0000000..febcbc0 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/vi/mmc_over_gpio.po @@ -0,0 +1,41 @@ +# mmc_over_gpio.pot +# generated from ./applications/luci-mmc_over_gpio/luasrc/i18n/mmc_over_gpio.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:59+0200\n" +"PO-Revision-Date: 2009-08-13 03:43+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "CLK_pin" +msgstr "" + +msgid "CS_pin" +msgstr "" + +msgid "DI_pin" +msgstr "" + +msgid "DO_pin" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "MMC/SD driver configuration" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Settings" +msgstr "Sắp đặt" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/zh-cn/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/zh-cn/mmc_over_gpio.po new file mode 100644 index 0000000..27dcefd --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/zh-cn/mmc_over_gpio.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2013-10-08 15:25+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: LANGUAGE \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "CLK针脚" + +msgid "CS_pin" +msgstr "CS针脚" + +msgid "DI_pin" +msgstr "DI针脚" + +msgid "DO_pin" +msgstr "DO针脚" + +msgid "Enable" +msgstr "允许" + +msgid "MMC/SD driver configuration" +msgstr "MMC/SD驱动配置" + +msgid "Mode" +msgstr "模式" + +msgid "Name" +msgstr "名称" + +msgid "Settings" +msgstr "设置" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/po/zh-tw/mmc_over_gpio.po b/feeds/luci/applications/luci-app-mmc-over-gpio/po/zh-tw/mmc_over_gpio.po new file mode 100644 index 0000000..fe12e66 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/po/zh-tw/mmc_over_gpio.po @@ -0,0 +1,39 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-21 12:48+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "CLK_pin" +msgstr "CLK_pin腳" + +msgid "CS_pin" +msgstr "CS_pin腳" + +msgid "DI_pin" +msgstr "DI_pin腳" + +msgid "DO_pin" +msgstr "DO_pin腳" + +msgid "Enable" +msgstr "啟用" + +msgid "MMC/SD driver configuration" +msgstr "MMC/SD記憶卡驅動程式設定" + +msgid "Mode" +msgstr "模式" + +msgid "Name" +msgstr "名稱" + +msgid "Settings" +msgstr "設定值" diff --git a/feeds/luci/applications/luci-app-mmc-over-gpio/root/etc/uci-defaults/40_luci-mmc-over-gpio b/feeds/luci/applications/luci-app-mmc-over-gpio/root/etc/uci-defaults/40_luci-mmc-over-gpio new file mode 100755 index 0000000..c6e79e6 --- /dev/null +++ b/feeds/luci/applications/luci-app-mmc-over-gpio/root/etc/uci-defaults/40_luci-mmc-over-gpio @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@mmc_over_gpio[-1] + add ucitrack mmc_over_gpio + set ucitrack.@mmc_over_gpio[-1].init=mmc_over_gpio + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-multiwan/Makefile b/feeds/luci/applications/luci-app-multiwan/Makefile new file mode 100644 index 0000000..c5b731a --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for the OpenWrt MultiWAN agent (obsoleted by mwan3) +LUCI_DEPENDS:=+multiwan @BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-multiwan/luasrc/controller/multiwan.lua b/feeds/luci/applications/luci-app-multiwan/luasrc/controller/multiwan.lua new file mode 100644 index 0000000..523ac21 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/luasrc/controller/multiwan.lua @@ -0,0 +1,60 @@ +module("luci.controller.multiwan", package.seeall) + +function index() + local fs = require "nixio.fs" + if not fs.access("/etc/config/multiwan") then + return + end + + local page + + page = entry({"admin", "network", "multiwan"}, cbi("multiwan/multiwan"), _("Multi-WAN")) + page.dependent = true + + entry({"admin", "network", "multiwan", "status"}, call("multiwan_status")) + + page = entry({"mini", "network", "multiwan"}, cbi("multiwan/multiwanmini", {autoapply=true}), _("Multi-WAN")) + page.dependent = true +end +function multiwan_status() + local nfs = require "nixio.fs" + local cachefile = "/tmp/.mwan/cache" + + local rv = { } + + cachefile = nfs.readfile(cachefile) + if cachefile then + local ntm = require "luci.model.network".init() + _, _, wan_if_map = string.find(cachefile, "wan_if_map=\"([^\"]*)\"") + _, _, wan_fail_map = string.find(cachefile, "wan_fail_map=\"([^\"]*)\"") + _, _, wan_recovery_map = string.find(cachefile, "wan_recovery_map=\"([^\"]*)\"") + + rv.wans = { } + wansid = {} + + for wanname, wanifname in string.gfind(wan_if_map, "([^%[]+)%[([^%]]+)%]") do + local wanlink = ntm:get_interface(wanifname) + wanlink = wanlink and wanlink:get_network() + wanlink = wanlink and wanlink:adminlink() or "#" + wansid[wanname] = #rv.wans + 1 + rv.wans[wansid[wanname]] = { name = wanname, link = wanlink, ifname = wanifname, status = "ok", count = 0 } + end + + for wanname, failcount in string.gfind(wan_fail_map, "([^%[]+)%[([^%]]+)%]") do + if failcount == "x" then + rv.wans[wansid[wanname]].status = "ko" + else + rv.wans[wansid[wanname]].status = "failing" + rv.wans[wansid[wanname]].count = failcount + end + end + + for wanname, recoverycount in string.gfind(wan_recovery_map, "([^%[]+)%[([^%]]+)%]") do + rv.wans[wansid[wanname]].status = "recovering" + rv.wans[wansid[wanname]].count = recoverycount + end + end + + luci.http.prepare_content("application/json") + luci.http.write_json(rv) +end diff --git a/feeds/luci/applications/luci-app-multiwan/luasrc/model/cbi/multiwan/multiwan.lua b/feeds/luci/applications/luci-app-multiwan/luasrc/model/cbi/multiwan/multiwan.lua new file mode 100644 index 0000000..586b630 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/luasrc/model/cbi/multiwan/multiwan.lua @@ -0,0 +1,155 @@ +require("luci.tools.webadmin") + +m = Map("multiwan", translate("Multi-WAN"), + translate("Multi-WAN allows for the use of multiple uplinks for load balancing and failover.")) + +s = m:section(NamedSection, "config", "multiwan", "") + +e = s:option(Flag, "enabled", translate("Enable")) +e.rmempty = false +e.default = e.enabled + +function e.write(self, section, value) + if value == "0" then + os.execute("/etc/init.d/multiwan stop") + else + os.execute("/etc/init.d/multiwan enable") + end + Flag.write(self, section, value) +end + +s = m:section(TypedSection, "interface", translate("WAN Interfaces"), + translate("Health Monitor detects and corrects network changes and failed connections.")) +s.addremove = true + +weight = s:option(ListValue, "weight", translate("Load Balancer Distribution")) +weight:value("10", "10") +weight:value("9", "9") +weight:value("8", "8") +weight:value("7", "7") +weight:value("6", "6") +weight:value("5", "5") +weight:value("4", "4") +weight:value("3", "3") +weight:value("2", "2") +weight:value("1", "1") +weight:value("disable", translate("None")) +weight.default = "10" +weight.optional = false +weight.rmempty = false + +interval = s:option(ListValue, "health_interval", translate("Health Monitor Interval")) +interval:value("disable", translate("Disable")) +interval:value("5", "5 sec.") +interval:value("10", "10 sec.") +interval:value("20", "20 sec.") +interval:value("30", "30 sec.") +interval:value("60", "60 sec.") +interval:value("120", "120 sec.") +interval.default = "10" +interval.optional = false +interval.rmempty = false + +icmp_hosts = s:option(Value, "icmp_hosts", translate("Health Monitor ICMP Host(s)")) +icmp_hosts:value("disable", translate("Disable")) +icmp_hosts:value("dns", "DNS Server(s)") +icmp_hosts:value("gateway", "WAN Gateway") +icmp_hosts.default = "dns" +icmp_hosts.optional = false +icmp_hosts.rmempty = false + +timeout = s:option(ListValue, "timeout", translate("Health Monitor ICMP Timeout")) +timeout:value("1", "1 sec.") +timeout:value("2", "2 sec.") +timeout:value("3", "3 sec.") +timeout:value("4", "4 sec.") +timeout:value("5", "5 sec.") +timeout:value("10", "10 sec.") +timeout.default = "3" +timeout.optional = false +timeout.rmempty = false + +fail = s:option(ListValue, "health_fail_retries", translate("Attempts Before WAN Failover")) +fail:value("1", "1") +fail:value("3", "3") +fail:value("5", "5") +fail:value("10", "10") +fail:value("15", "15") +fail:value("20", "20") +fail.default = "3" +fail.optional = false +fail.rmempty = false + +recovery = s:option(ListValue, "health_recovery_retries", translate("Attempts Before WAN Recovery")) +recovery:value("1", "1") +recovery:value("3", "3") +recovery:value("5", "5") +recovery:value("10", "10") +recovery:value("15", "15") +recovery:value("20", "20") +recovery.default = "5" +recovery.optional = false +recovery.rmempty = false + +failover_to = s:option(ListValue, "failover_to", translate("Failover Traffic Destination")) +failover_to:value("disable", translate("None")) +luci.tools.webadmin.cbi_add_networks(failover_to) +failover_to:value("fastbalancer", translate("Load Balancer(Performance)")) +failover_to:value("balancer", translate("Load Balancer(Compatibility)")) +failover_to.default = "balancer" +failover_to.optional = false +failover_to.rmempty = false + +dns = s:option(Value, "dns", translate("DNS Server(s)")) +dns:value("auto", translate("Auto")) +dns.default = "auto" +dns.optional = false +dns.rmempty = true + +s = m:section(TypedSection, "mwanfw", translate("Multi-WAN Traffic Rules"), + translate("Configure rules for directing outbound traffic through specified WAN Uplinks.")) +s.template = "cbi/tblsection" +s.anonymous = true +s.addremove = true + +src = s:option(Value, "src", translate("Source Address")) +src.rmempty = true +src:value("", translate("all")) +luci.tools.webadmin.cbi_add_knownips(src) + +dst = s:option(Value, "dst", translate("Destination Address")) +dst.rmempty = true +dst:value("", translate("all")) +luci.tools.webadmin.cbi_add_knownips(dst) + +proto = s:option(Value, "proto", translate("Protocol")) +proto:value("", translate("all")) +proto:value("tcp", "TCP") +proto:value("udp", "UDP") +proto:value("icmp", "ICMP") +proto.rmempty = true + +ports = s:option(Value, "ports", translate("Ports")) +ports.rmempty = true +ports:value("", translate("all", translate("all"))) + +wanrule = s:option(ListValue, "wanrule", translate("WAN Uplink")) +luci.tools.webadmin.cbi_add_networks(wanrule) +wanrule:value("fastbalancer", translate("Load Balancer(Performance)")) +wanrule:value("balancer", translate("Load Balancer(Compatibility)")) +wanrule.default = "fastbalancer" +wanrule.optional = false +wanrule.rmempty = false + +s = m:section(NamedSection, "config", "", "") +s.addremove = false + +default_route = s:option(ListValue, "default_route", translate("Default Route")) +luci.tools.webadmin.cbi_add_networks(default_route) +default_route:value("fastbalancer", translate("Load Balancer(Performance)")) +default_route:value("balancer", translate("Load Balancer(Compatibility)")) +default_route.default = "balancer" +default_route.optional = false +default_route.rmempty = false + +return m diff --git a/feeds/luci/applications/luci-app-multiwan/luasrc/model/cbi/multiwan/multiwanmini.lua b/feeds/luci/applications/luci-app-multiwan/luasrc/model/cbi/multiwan/multiwanmini.lua new file mode 100644 index 0000000..d389745 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/luasrc/model/cbi/multiwan/multiwanmini.lua @@ -0,0 +1,67 @@ +require("luci.tools.webadmin") + +m = Map("multiwan", translate("Multi-WAN"), + translate("Multi-WAN allows for the use of multiple uplinks for load balancing and failover.")) + +s = m:section(NamedSection, "config", "multiwan", "") + +e = s:option(Flag, "enabled", translate("Enable")) +e.rmempty = false +e.default = "1" + +function e.write(self, section, value) + if value == "0" then + os.execute("/etc/init.d/multiwan stop") + else + os.execute("/etc/init.d/multiwan enable") + end + Flag.write(self, section, value) +end + +s = m:section(TypedSection, "mwanfw", translate("Multi-WAN Traffic Rules"), + translate("Configure rules for directing outbound traffic through specified WAN Uplinks.")) +s.template = "cbi/tblsection" +s.anonymous = true +s.addremove = true + +src = s:option(Value, "src", translate("Source Address")) +src.rmempty = true +src:value("", translate("all")) +luci.tools.webadmin.cbi_add_knownips(src) + +dst = s:option(Value, "dst", translate("Destination Address")) +dst.rmempty = true +dst:value("", translate("all")) +luci.tools.webadmin.cbi_add_knownips(dst) + +proto = s:option(Value, "proto", translate("Protocol")) +proto:value("", translate("all")) +proto:value("tcp", "TCP") +proto:value("udp", "UDP") +proto:value("icmp", "ICMP") +proto.rmempty = true + +ports = s:option(Value, "ports", translate("Ports")) +ports.rmempty = true +ports:value("", translate("all", translate("all"))) + +wanrule = s:option(ListValue, "wanrule", translate("WAN Uplink")) +luci.tools.webadmin.cbi_add_networks(wanrule) +wanrule:value("fastbalancer", translate("Load Balancer(Performance)")) +wanrule:value("balancer", translate("Load Balancer(Compatibility)")) +wanrule.default = "fastbalancer" +wanrule.optional = false +wanrule.rmempty = false + +s = m:section(NamedSection, "config", "", "") +s.addremove = false + +default_route = s:option(ListValue, "default_route", translate("Default Route")) +luci.tools.webadmin.cbi_add_networks(default_route) +default_route:value("fastbalancer", translate("Load Balancer(Performance)")) +default_route:value("balancer", translate("Load Balancer(Compatibility)")) +default_route.default = "balancer" +default_route.optional = false +default_route.rmempty = false + +return m diff --git a/feeds/luci/applications/luci-app-multiwan/luasrc/view/admin_status/index/multiwan.htm b/feeds/luci/applications/luci-app-multiwan/luasrc/view/admin_status/index/multiwan.htm new file mode 100644 index 0000000..79c0453 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/luasrc/view/admin_status/index/multiwan.htm @@ -0,0 +1 @@ +<%+multiwan_status%> diff --git a/feeds/luci/applications/luci-app-multiwan/luasrc/view/multiwan_status.htm b/feeds/luci/applications/luci-app-multiwan/luasrc/view/multiwan_status.htm new file mode 100644 index 0000000..03bfad1 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/luasrc/view/multiwan_status.htm @@ -0,0 +1,71 @@ + + + + +
+ <%:Multi-WAN Status%> +
<%:Collecting data...%>
+
diff --git a/feeds/luci/applications/luci-app-multiwan/po/ca/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/ca/multiwan.po new file mode 100644 index 0000000..eb81ae8 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/ca/multiwan.po @@ -0,0 +1,124 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-01 04:22+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "Intents abans de commutació WAN" + +msgid "Attempts Before WAN Recovery" +msgstr "Intents abans de recuperació WAN" + +msgid "Auto" +msgstr "Auto" + +msgid "Collecting data..." +msgstr "Recollint dades..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Configureu les regles per dirigir trànsit sortint a través d'enllaços " +"ascendents WAN especificats." + +msgid "DNS Server(s)" +msgstr "Servidors DNS" + +msgid "Default Route" +msgstr "Ruta per defecte" + +msgid "Destination Address" +msgstr "Adreça de destí" + +msgid "Disable" +msgstr "Inhabilita" + +msgid "Enable" +msgstr "Habilita" + +msgid "Failing" +msgstr "Fallant" + +msgid "Failover Traffic Destination" +msgstr "Destí de trànsit al commutar" + +msgid "Health Monitor ICMP Host(s)" +msgstr "Hosts ICMP de monitor de salut" + +msgid "Health Monitor ICMP Timeout" +msgstr "Temps d'espera ICMP del monitor de salut" + +msgid "Health Monitor Interval" +msgstr "Interval del monitor de salut" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"El monitor de salut detecta i corregeix canvis de xarxa i connexions " +"fallades." + +msgid "KO" +msgstr "KO" + +msgid "Load Balancer Distribution" +msgstr "Distribució de l'equilibrador de carrega" + +msgid "Load Balancer(Compatibility)" +msgstr "Equilibrador de carrega (compatibilitat)" + +msgid "Load Balancer(Performance)" +msgstr "Equilibrador de carrega (rendiment)" + +msgid "Multi-WAN" +msgstr "Multi-WAN" + +msgid "Multi-WAN Status" +msgstr "Estat de Multi-WAN" + +msgid "Multi-WAN Traffic Rules" +msgstr "Regles de trànsit de Multi-WAN" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"El Multi-WAN permet el ús de múltiples enllaços ascendents per a equilibri " +"de carrega i commutació d'errors." + +msgid "None" +msgstr "Cap" + +msgid "OK" +msgstr "D'acord" + +msgid "Ports" +msgstr "Ports" + +msgid "Protocol" +msgstr "Protocol" + +msgid "Recovering" +msgstr "Recuperant" + +msgid "Source Address" +msgstr "Adreça d'origen" + +msgid "Unknown" +msgstr "Desconegut" + +msgid "WAN Interfaces" +msgstr "Interfícies WAN" + +msgid "WAN Uplink" +msgstr "Enllaç ascendent WAN" + +msgid "all" +msgstr "tots" diff --git a/feeds/luci/applications/luci-app-multiwan/po/cs/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/cs/multiwan.po new file mode 100644 index 0000000..0629827 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/cs/multiwan.po @@ -0,0 +1,124 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-11 19:45+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "Počet pokusů před spuštěním záložního WAN" + +msgid "Attempts Before WAN Recovery" +msgstr "Počet pokusů před obnovou WAN" + +msgid "Auto" +msgstr "Automaticky" + +msgid "Collecting data..." +msgstr "Sbírám data..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Nastavit pravidla pro směrování odchozích paketů přes konkrétní WAN " +"rozhraní." + +msgid "DNS Server(s)" +msgstr "DNS server(y)" + +msgid "Default Route" +msgstr "Výchozí brána" + +msgid "Destination Address" +msgstr "Cílová adresa" + +msgid "Disable" +msgstr "Vypnout" + +msgid "Enable" +msgstr "Povolit" + +msgid "Failing" +msgstr "Selhání" + +msgid "Failover Traffic Destination" +msgstr "Cíl záložního spojení" + +msgid "Health Monitor ICMP Host(s)" +msgstr "Monitorování dostupnosti - ICMP host(é)" + +msgid "Health Monitor ICMP Timeout" +msgstr "Monitorování dostupnosti - ICMP časový limit" + +msgid "Health Monitor Interval" +msgstr "Monitorování dostupnosti - interval" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"Monitorování dostupnosti kontroluje a opravuje změny v síti a selhání " +"připojení." + +msgid "KO" +msgstr "KO" + +msgid "Load Balancer Distribution" +msgstr "Load Balancer - rozdělení" + +msgid "Load Balancer(Compatibility)" +msgstr "Load Balancer(Kompatibilita)" + +msgid "Load Balancer(Performance)" +msgstr "Load Balancer(Výkon)" + +msgid "Multi-WAN" +msgstr "Multi-WAN" + +msgid "Multi-WAN Status" +msgstr "Stav Multi-WAN" + +msgid "Multi-WAN Traffic Rules" +msgstr "Multi-WAN pravidla směrování" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"Multi-WAN umožňuje použít několik internetových připojení pro vyvažování " +"zátěže a zálohy připojení." + +msgid "None" +msgstr "Žádný" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "Porty" + +msgid "Protocol" +msgstr "Protokol" + +msgid "Recovering" +msgstr "Obnovuji" + +msgid "Source Address" +msgstr "Zdrojová adresa" + +msgid "Unknown" +msgstr "Neznámý" + +msgid "WAN Interfaces" +msgstr "WAN rozhraní" + +msgid "WAN Uplink" +msgstr "WAN připojení" + +msgid "all" +msgstr "Všechny" diff --git a/feeds/luci/applications/luci-app-multiwan/po/de/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/de/multiwan.po new file mode 100644 index 0000000..2fa789f --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/de/multiwan.po @@ -0,0 +1,124 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-08-10 02:55+0200\n" +"Last-Translator: Jo-Philipp \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "Versuche vor Umschalten auf WAN Ersatzverbindung" + +msgid "Attempts Before WAN Recovery" +msgstr "Versuche vor dem Zurückschalten auf normale WAN Verbindung" + +msgid "Auto" +msgstr "automatisch" + +msgid "Collecting data..." +msgstr "Sammle Daten..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Mit diesen Regeln kann ausgehender Verkehr bestimmten WAN-Uplinks zugeordnet " +"werden." + +msgid "DNS Server(s)" +msgstr "DNS Server" + +msgid "Default Route" +msgstr "Standardroute" + +msgid "Destination Address" +msgstr "Zieladresse" + +msgid "Disable" +msgstr "Deaktivieren" + +msgid "Enable" +msgstr "Aktivieren" + +msgid "Failing" +msgstr "Versagt" + +msgid "Failover Traffic Destination" +msgstr "Failover Traffic Ziel" + +msgid "Health Monitor ICMP Host(s)" +msgstr "ICMP Host(s) zur Verbindungsüberwachung" + +msgid "Health Monitor ICMP Timeout" +msgstr "Timeout für ICMP-Pakete zur Verbindungsüberwachung" + +msgid "Health Monitor Interval" +msgstr "Intervall für Verbindungsüberwachung" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"Die Verbindungsüberwachung erkennt und behebt Netzwerkänderungen und " +"Verbindungsabbrüche." + +msgid "KO" +msgstr "Getrennt" + +msgid "Load Balancer Distribution" +msgstr "Load Balancer Verteilung" + +msgid "Load Balancer(Compatibility)" +msgstr "Load Balancer (Kompatibilität)" + +msgid "Load Balancer(Performance)" +msgstr "Load Balancer (Performance)" + +msgid "Multi-WAN" +msgstr "Multi-WAN" + +msgid "Multi-WAN Status" +msgstr "Multi-WAN Status" + +msgid "Multi-WAN Traffic Rules" +msgstr "Multi-WAN Verkehrsregeln" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"Multi-WAN erlaubt es, mehrere ISP-Verbindungen gleichzeitig oder als " +"Ersatzverbindung beim Ausfall der Hauptverbindung zu verwenden." + +msgid "None" +msgstr "Keine" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "Ports" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Recovering" +msgstr "Neu verbunden" + +msgid "Source Address" +msgstr "Quelladresse" + +msgid "Unknown" +msgstr "Unbekannt" + +msgid "WAN Interfaces" +msgstr "WAN-Schnittstellen" + +msgid "WAN Uplink" +msgstr "WAN Uplink-Verbindung" + +msgid "all" +msgstr "alle" diff --git a/feeds/luci/applications/luci-app-multiwan/po/el/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/el/multiwan.po new file mode 100644 index 0000000..48d3165 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/el/multiwan.po @@ -0,0 +1,118 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-18 15:16+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: none\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "" + +msgid "Default Route" +msgstr "" + +msgid "Destination Address" +msgstr "Διεύθυνση Προορισμού" + +msgid "Disable" +msgstr "Απενεργοποίηση" + +msgid "Enable" +msgstr "Ενεργοποίηση" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "" + +msgid "Health Monitor ICMP Timeout" +msgstr "" + +msgid "Health Monitor Interval" +msgstr "" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "" + +msgid "Load Balancer(Compatibility)" +msgstr "" + +msgid "Load Balancer(Performance)" +msgstr "" + +msgid "Multi-WAN" +msgstr "" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" + +msgid "None" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "Πρωτόκολλο" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "WAN Interfaces" +msgstr "" + +msgid "WAN Uplink" +msgstr "" + +msgid "all" +msgstr "" diff --git a/feeds/luci/applications/luci-app-multiwan/po/en/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/en/multiwan.po new file mode 100644 index 0000000..241e6d0 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/en/multiwan.po @@ -0,0 +1,114 @@ +# multiwan.po +# generated from /tmp/i18n/luasrc/i18n/multiwan.en.lua +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" + +msgid "Attempts Before WAN Failover" +msgstr "Attempts Before WAN Failover" + +msgid "Attempts Before WAN Recovery" +msgstr "Attempts Before WAN Recovery" + +msgid "Auto" +msgstr "Auto" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." + +msgid "DNS Server(s)" +msgstr "DNS Server(s)" + +msgid "Default Route" +msgstr "Default Route" + +msgid "Destination Address" +msgstr "Destination Address" + +msgid "Disable" +msgstr "Disable" + +msgid "Enable" +msgstr "Enable" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "Failover Traffic Destination" + +msgid "Health Monitor ICMP Host(s)" +msgstr "Health Monitor ICMP Host(s)" + +msgid "Health Monitor ICMP Timeout" +msgstr "Health Monitor ICMP Timeout" + +msgid "Health Monitor Interval" +msgstr "Health Monitor Interval" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"Health Monitor detects and corrects network changes and failed connections." + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "Load Balancer Distribution" + +msgid "Load Balancer(Compatibility)" +msgstr "Load Balancer(Compatibility)" + +msgid "Load Balancer(Performance)" +msgstr "Load Balancer(Performance)" + +msgid "Multi-WAN" +msgstr "Multi-WAN" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "Multi-WAN Traffic Rules" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." + +msgid "None" +msgstr "None" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "Ports" + +msgid "Protocol" +msgstr "Protocol" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "Source Address" + +msgid "Unknown" +msgstr "" + +msgid "WAN Interfaces" +msgstr "WAN Interfaces" + +msgid "WAN Uplink" +msgstr "WAN Uplink" + +msgid "all" +msgstr "" diff --git a/feeds/luci/applications/luci-app-multiwan/po/es/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/es/multiwan.po new file mode 100644 index 0000000..4d2447e --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/es/multiwan.po @@ -0,0 +1,124 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-08-23 23:07+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "Reintentos ante fallo de la WAN" + +msgid "Attempts Before WAN Recovery" +msgstr "Reintentos tras recuperar la WAN" + +msgid "Auto" +msgstr "Auto" + +msgid "Collecting data..." +msgstr "Recuperando datos..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Configure las reglas que redirigen el tráfico saliente a través de los " +"enlaces WAN salientes especificados." + +msgid "DNS Server(s)" +msgstr "Servidor/es DNS" + +msgid "Default Route" +msgstr "Ruta por defecto" + +msgid "Destination Address" +msgstr "Dirección de destino" + +msgid "Disable" +msgstr "Desactivar" + +msgid "Enable" +msgstr "Activar" + +msgid "Failing" +msgstr "Fallando" + +msgid "Failover Traffic Destination" +msgstr "Destino del tráfico en caso de fallo" + +msgid "Health Monitor ICMP Host(s)" +msgstr "Monitores de salud ICMP" + +msgid "Health Monitor ICMP Timeout" +msgstr "Espera monitor de salud ICMP" + +msgid "Health Monitor Interval" +msgstr "Intervalo del monitor de salud" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"El monitor de salud detecta y corrige cambios en la red y conexiones " +"fallidas." + +msgid "KO" +msgstr "KO" + +msgid "Load Balancer Distribution" +msgstr "Distribución del balanceador de carga" + +msgid "Load Balancer(Compatibility)" +msgstr "Balanceador de carga (compatibilidad)" + +msgid "Load Balancer(Performance)" +msgstr "Balanceador de carga (rendimiento)" + +msgid "Multi-WAN" +msgstr "Multi-WAN" + +msgid "Multi-WAN Status" +msgstr "Estado de Multi-WAN" + +msgid "Multi-WAN Traffic Rules" +msgstr "Reglas de tráfico Multi-WAN" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"Multi-WAN permite el use varios enlaces de salida para balancear la carga y " +"control de fallos." + +msgid "None" +msgstr "Ninguno" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "Puertos" + +msgid "Protocol" +msgstr "Protocolo" + +msgid "Recovering" +msgstr "Recuperación" + +msgid "Source Address" +msgstr "Dirección origen" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "WAN Interfaces" +msgstr "Interfaces WAN" + +msgid "WAN Uplink" +msgstr "Enlace saliente WAN" + +msgid "all" +msgstr "todos" diff --git a/feeds/luci/applications/luci-app-multiwan/po/fr/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/fr/multiwan.po new file mode 100644 index 0000000..39b1421 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/fr/multiwan.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-11-06 16:07+0200\n" +"Last-Translator: hogsim \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "Essais avant de déclarer un WAN défaillant" + +msgid "Attempts Before WAN Recovery" +msgstr "Essais avant de déclarer qu'un WAN est rétabli" + +msgid "Auto" +msgstr "Auto" + +msgid "Collecting data..." +msgstr "Collection de données..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Configuration de règles pour diriger le trafic sortant à travers des liens " +"WAN sécifiés." + +msgid "DNS Server(s)" +msgstr "Serveur(s) DNS" + +msgid "Default Route" +msgstr "Route par défaut" + +msgid "Destination Address" +msgstr "Adresse de destination" + +msgid "Disable" +msgstr "Désactiver" + +msgid "Enable" +msgstr "Activer" + +msgid "Failing" +msgstr "Défaillance" + +msgid "Failover Traffic Destination" +msgstr "Destination du trafic en cas de défaillance" + +msgid "Health Monitor ICMP Host(s)" +msgstr "Hôte(s) à pinguer pour valider le lien" + +msgid "Health Monitor ICMP Timeout" +msgstr "Delai max du ping de validation du lien" + +msgid "Health Monitor Interval" +msgstr "Invervalle de validation du lien" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"La validation de liens détecte et corrige les changements du réseau et les " +"connexions défaillantes." + +msgid "KO" +msgstr "KO" + +msgid "Load Balancer Distribution" +msgstr "Distribution d'équilibrage de charge" + +msgid "Load Balancer(Compatibility)" +msgstr "Équilibrage de charge (compatibilité)" + +msgid "Load Balancer(Performance)" +msgstr "Équilibrage de charge (performance)" + +msgid "Multi-WAN" +msgstr "Multi-WAN" + +msgid "Multi-WAN Status" +msgstr "Statut Multi-WAN" + +msgid "Multi-WAN Traffic Rules" +msgstr "Règles de trafic avec des liens sortants multiples" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"Multi-WAN permet l'utilisation de liens sortants multiples pour la " +"l'équilibrage de charge et la répartition sur les autres en cas de " +"défaillance." + +msgid "None" +msgstr "Aucun" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "Ports" + +msgid "Protocol" +msgstr "Protocole" + +msgid "Recovering" +msgstr "Récupération" + +msgid "Source Address" +msgstr "Adresse source" + +msgid "Unknown" +msgstr "Inconnu" + +msgid "WAN Interfaces" +msgstr "Interfaces WAN" + +msgid "WAN Uplink" +msgstr "Lien remontant WAN" + +msgid "all" +msgstr "tous" diff --git a/feeds/luci/applications/luci-app-multiwan/po/he/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/he/multiwan.po new file mode 100644 index 0000000..2188822 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/he/multiwan.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "" + +msgid "Default Route" +msgstr "" + +msgid "Destination Address" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "" + +msgid "Health Monitor ICMP Timeout" +msgstr "" + +msgid "Health Monitor Interval" +msgstr "" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "" + +msgid "Load Balancer(Compatibility)" +msgstr "" + +msgid "Load Balancer(Performance)" +msgstr "" + +msgid "Multi-WAN" +msgstr "" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" + +msgid "None" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "WAN Interfaces" +msgstr "" + +msgid "WAN Uplink" +msgstr "" + +msgid "all" +msgstr "" diff --git a/feeds/luci/applications/luci-app-multiwan/po/hu/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/hu/multiwan.po new file mode 100644 index 0000000..20ff8d6 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/hu/multiwan.po @@ -0,0 +1,124 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-12-30 19:12+0200\n" +"Last-Translator: romboyco \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "Próbálkozások WAN átállás előtt" + +msgid "Attempts Before WAN Recovery" +msgstr "Probálkozások WAN helyreállítás előtt" + +msgid "Auto" +msgstr "Automatikus" + +msgid "Collecting data..." +msgstr "Adatok gyűjtése..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Szabályok beállítása a kimenő forgalom megadott WAN kapcsolatra " +"irányításához." + +msgid "DNS Server(s)" +msgstr "DNS kiszolgáló(k)" + +msgid "Default Route" +msgstr "Alapértelmezett útvonal" + +msgid "Destination Address" +msgstr "Cél cím" + +msgid "Disable" +msgstr "Letiltás" + +msgid "Enable" +msgstr "Engedélyezés" + +msgid "Failing" +msgstr "Csökkenő" + +msgid "Failover Traffic Destination" +msgstr "Failover forgalom cél" + +msgid "Health Monitor ICMP Host(s)" +msgstr "ICMP gépek kapcsolat monitorozáshoz" + +msgid "Health Monitor ICMP Timeout" +msgstr "ICMP csomagok időtúllépése a kapcsolat monitorozásánál" + +msgid "Health Monitor Interval" +msgstr "Kapcsolat monitorozási intervallum" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"A kapcsolat monitorozás megállapítja és korrigálja a hálózati változásokat " +"és sikertelen kapcsolatokat." + +msgid "KO" +msgstr "KO" + +msgid "Load Balancer Distribution" +msgstr "Load balancer megosztás" + +msgid "Load Balancer(Compatibility)" +msgstr "Terhelés kiegyensúlyozás (kompatibilitás)" + +msgid "Load Balancer(Performance)" +msgstr "Terhelés kiegyensúlyozás (teljesítmény)" + +msgid "Multi-WAN" +msgstr "Többszörös WAN" + +msgid "Multi-WAN Status" +msgstr "Többszörös WAN állapot" + +msgid "Multi-WAN Traffic Rules" +msgstr "Többszörös WAN forgalmi szabályok" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"A Multi-WAN lehetővé teszi több kapcsolat használatát egyidejűleg, vagy az " +"elsődleges kapcsolat esetleges hibája esetén." + +msgid "None" +msgstr "Nincs" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "Portok" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Recovering" +msgstr "Helyreállítás" + +msgid "Source Address" +msgstr "Forrás cím" + +msgid "Unknown" +msgstr "Ismeretlen" + +msgid "WAN Interfaces" +msgstr "WAN interfészek" + +msgid "WAN Uplink" +msgstr "WAN kapcsolat" + +msgid "all" +msgstr "összes" diff --git a/feeds/luci/applications/luci-app-multiwan/po/it/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/it/multiwan.po new file mode 100644 index 0000000..863b351 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/it/multiwan.po @@ -0,0 +1,124 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-02-03 14:00+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "Tentativi su WAN prima del Failover" + +msgid "Attempts Before WAN Recovery" +msgstr "Tentativi su WAN prima del Recovery" + +msgid "Auto" +msgstr "Auto" + +msgid "Collecting data..." +msgstr "Raccolta di dati..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Configura le regole per inviare direttamente in uscita il traffico su una " +"uplink Wan specifico." + +msgid "DNS Server(s)" +msgstr "DNS Server(s)" + +msgid "Default Route" +msgstr "Default Route" + +msgid "Destination Address" +msgstr "Indirizzo di destinazione" + +msgid "Disable" +msgstr "Disable" + +msgid "Enable" +msgstr "Enable" + +msgid "Failing" +msgstr "Fallimento" + +msgid "Failover Traffic Destination" +msgstr "Destinazione del traffico in failover" + +msgid "Health Monitor ICMP Host(s)" +msgstr "Health Monitor ICMP Host(s)" + +msgid "Health Monitor ICMP Timeout" +msgstr "Health Monitor ICMP Timeout" + +msgid "Health Monitor Interval" +msgstr "Health Monitor Interval" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"L'health monitor monitora e identifica i cambiamenti e la manca di " +"connessioni." + +msgid "KO" +msgstr "KO" + +msgid "Load Balancer Distribution" +msgstr "Bilanciamento del carico" + +msgid "Load Balancer(Compatibility)" +msgstr "Carica Bilanciatore (Compatibilità)" + +msgid "Load Balancer(Performance)" +msgstr "Carica Bilanciatore (Performance)" + +msgid "Multi-WAN" +msgstr "Multi-WAN" + +msgid "Multi-WAN Status" +msgstr "Stato Multi-WAN" + +msgid "Multi-WAN Traffic Rules" +msgstr "Regole del Traffico Multi-WAN" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"Multi-WAN permette di usare uplink multipi per il bilanciamento del carico e " +"la ridondanza da failover." + +msgid "None" +msgstr "None" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "Porte" + +msgid "Protocol" +msgstr "Protocollo" + +msgid "Recovering" +msgstr "Recupero" + +msgid "Source Address" +msgstr "Indirizzo sorgente" + +msgid "Unknown" +msgstr "Sconosciuto" + +msgid "WAN Interfaces" +msgstr "Interfaccia WAN" + +msgid "WAN Uplink" +msgstr "Collegamento ascendente WAN" + +msgid "all" +msgstr "all" diff --git a/feeds/luci/applications/luci-app-multiwan/po/ja/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/ja/multiwan.po new file mode 100644 index 0000000..ab41562 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/ja/multiwan.po @@ -0,0 +1,120 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-06 17:17+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "自動" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "DNSサーバー" + +msgid "Default Route" +msgstr "デフォルトルート" + +msgid "Destination Address" +msgstr "宛先アドレス" + +msgid "Disable" +msgstr "無効" + +msgid "Enable" +msgstr "有効" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "ヘルスモニタ ICMP宛先" + +msgid "Health Monitor ICMP Timeout" +msgstr "ヘルスモニタ ICMP タイムアウト" + +msgid "Health Monitor Interval" +msgstr "ヘルスモニタ更新間隔" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "ヘルスモニタは、ネットワークの変更及び接続失敗の検出と調整を行います。" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "ロードバランサ ディストリビューション" + +msgid "Load Balancer(Compatibility)" +msgstr "ロードバランサ (互換性)" + +msgid "Load Balancer(Performance)" +msgstr "ロードバランサ (パフォーマンス)" + +msgid "Multi-WAN" +msgstr "Multi-WAN" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "Multi-WAN トラフィック・ルール" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"Multi-WANを用いることで、複数の上りリンクを使用してロードバランサとフェイル" +"オーバー機能を使用することができます。" + +msgid "None" +msgstr "なし" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "ポート" + +msgid "Protocol" +msgstr "プロトコル" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "送信元アドレス" + +msgid "Unknown" +msgstr "不明" + +msgid "WAN Interfaces" +msgstr "WAN インターフェースリスト" + +msgid "WAN Uplink" +msgstr "WAN アップリンク" + +msgid "all" +msgstr "全て" diff --git a/feeds/luci/applications/luci-app-multiwan/po/ms/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/ms/multiwan.po new file mode 100644 index 0000000..d175246 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/ms/multiwan.po @@ -0,0 +1,114 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "" + +msgid "Default Route" +msgstr "" + +msgid "Destination Address" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "" + +msgid "Health Monitor ICMP Timeout" +msgstr "" + +msgid "Health Monitor Interval" +msgstr "" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "" + +msgid "Load Balancer(Compatibility)" +msgstr "" + +msgid "Load Balancer(Performance)" +msgstr "" + +msgid "Multi-WAN" +msgstr "" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" + +msgid "None" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "WAN Interfaces" +msgstr "" + +msgid "WAN Uplink" +msgstr "" + +msgid "all" +msgstr "" diff --git a/feeds/luci/applications/luci-app-multiwan/po/no/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/no/multiwan.po new file mode 100644 index 0000000..a6e8bc4 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/no/multiwan.po @@ -0,0 +1,117 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Attempts Before WAN Failover" +msgstr "Antall forsøk før WAN feilsikkerhet" + +msgid "Attempts Before WAN Recovery" +msgstr "Antall forsøk før WAN gjenoppretting" + +msgid "Auto" +msgstr "Auto" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Konfigurer regler for å styre utgående trafikk gjennom spesifiserte WAN " +"koblinger." + +msgid "DNS Server(s)" +msgstr "DNS Server(e)" + +msgid "Default Route" +msgstr "Standard rute" + +msgid "Destination Address" +msgstr "Destinasjonsadresse" + +msgid "Disable" +msgstr "Deaktiver" + +msgid "Enable" +msgstr "Aktiver" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "Feilsikkerhet trafikk destinasjon" + +msgid "Health Monitor ICMP Host(s)" +msgstr "Health monitor ICMP vert(er)" + +msgid "Health Monitor ICMP Timeout" +msgstr "Health monitor ICMP tidsavbrudd" + +msgid "Health Monitor Interval" +msgstr "Health monitor intervall" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"Health monitor oppdager og korrigerer nettverks endringer og mislykkede " +"tilkoblinger." + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "Lastbalansering fordeling" + +msgid "Load Balancer(Compatibility)" +msgstr "Lastbalansering (kompatibilitet)" + +msgid "Load Balancer(Performance)" +msgstr "Lastbalansering (ytelse)" + +msgid "Multi-WAN" +msgstr "Multi-WAN" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "Multi-WAN trafikk regler" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"Multi-WAN tillater bruk av flere internett oppkoblinger for lastbalansering " +"og feilsikkerhet." + +msgid "None" +msgstr "Ingen" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "Porter" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "Kildeadresse" + +msgid "Unknown" +msgstr "" + +msgid "WAN Interfaces" +msgstr "WAN Grensesnitt" + +msgid "WAN Uplink" +msgstr "WAN Opplinje" + +msgid "all" +msgstr "alle" diff --git a/feeds/luci/applications/luci-app-multiwan/po/pl/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/pl/multiwan.po new file mode 100644 index 0000000..5904aed --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/pl/multiwan.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-01 15:25+0200\n" +"Last-Translator: Staszek \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "Liczba prób przed procedurą WAN Failover (połączenie awaryjne WAN)" + +msgid "Attempts Before WAN Recovery" +msgstr "Liczba prób przed procedurą WAN Recovery (przywrócenie WAN)" + +msgid "Auto" +msgstr "Automatycznie" + +msgid "Collecting data..." +msgstr "Zbieranie informacji..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Skonfiguruj zasady kierowania ruchu wychodzącego za pośrednictwem " +"określonych łączy WAN." + +msgid "DNS Server(s)" +msgstr "Serwer(y) DNS" + +msgid "Default Route" +msgstr "Trasa domyślna" + +msgid "Destination Address" +msgstr "Adres docelowy" + +msgid "Disable" +msgstr "Wyłącz" + +msgid "Enable" +msgstr "Włącz" + +msgid "Failing" +msgstr "Niepowodzenie" + +msgid "Failover Traffic Destination" +msgstr "Cel ruch dla połączenia awaryjnego" + +msgid "Health Monitor ICMP Host(s)" +msgstr "Monitorowane hosty przy użyciu protokołu ICMP (ping)" + +msgid "Health Monitor ICMP Timeout" +msgstr "" +"Czas nieosiągalności monitorowanych hostów przy użyciu protokołu ICMP (ping)" + +msgid "Health Monitor Interval" +msgstr "Odstęp pomiędzy próbami monitoringu" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"Monitor stanu wykrywa i koryguje zmiany sieci oraz nieudane połączenia." + +msgid "KO" +msgstr "KO" + +msgid "Load Balancer Distribution" +msgstr "Dystrybucja równoważenia obciążenia" + +msgid "Load Balancer(Compatibility)" +msgstr "Równoważenie obciążenia (Zgodność)" + +msgid "Load Balancer(Performance)" +msgstr "Równoważenie obciążenia (Wydajność)" + +msgid "Multi-WAN" +msgstr "Multi-WAN" + +msgid "Multi-WAN Status" +msgstr "Status Multi-WAN" + +msgid "Multi-WAN Traffic Rules" +msgstr "Reguły ruchu Multi-WAN" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"Multi-WAN pozwala na używanie kilku łącz w celu równoważenia obciążenia lub " +"omijania awarii." + +msgid "None" +msgstr "Żaden" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "Porty" + +msgid "Protocol" +msgstr "Protokół" + +msgid "Recovering" +msgstr "Odzyskiwanie" + +msgid "Source Address" +msgstr "Adres źródłowy" + +msgid "Unknown" +msgstr "Nieznany" + +msgid "WAN Interfaces" +msgstr "Interfejsy WAN" + +msgid "WAN Uplink" +msgstr "Łącze WAN" + +msgid "all" +msgstr "wszystkie" diff --git a/feeds/luci/applications/luci-app-multiwan/po/pt-br/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/pt-br/multiwan.po new file mode 100644 index 0000000..ba72b82 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/pt-br/multiwan.po @@ -0,0 +1,124 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-11-11 04:01+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "Tentativas Antes da Solução de Contorno da WAN" + +msgid "Attempts Before WAN Recovery" +msgstr "Tentativas Antes da Recuperação da WAN" + +msgid "Auto" +msgstr "Automático" + +msgid "Collecting data..." +msgstr "Coletando dados..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Configurar regras para direcionar a saída de tráfego através de uma conexão " +"WAN específica." + +msgid "DNS Server(s)" +msgstr "Servidor(es) DNS" + +msgid "Default Route" +msgstr "Rota Padrão" + +msgid "Destination Address" +msgstr "Endereço de Destino" + +msgid "Disable" +msgstr "Desabilitar" + +msgid "Enable" +msgstr "Habilitar" + +msgid "Failing" +msgstr "Falha" + +msgid "Failover Traffic Destination" +msgstr "Destino do Tráfego para a Recuperação" + +msgid "Health Monitor ICMP Host(s)" +msgstr "Equipamento(s) para Monitoramento da Saúde por ICMP" + +msgid "Health Monitor ICMP Timeout" +msgstr "Limite de tempo do Monitoramento da Saúde por ICMP" + +msgid "Health Monitor Interval" +msgstr "Intervalo do Monitoramento da Saúde" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"O Monitoramento da Saúde detecta e corrige as mudanças de rede e falhas nas " +"conexões." + +msgid "KO" +msgstr "KO" + +msgid "Load Balancer Distribution" +msgstr "Distribuição do Balanceador de Carga" + +msgid "Load Balancer(Compatibility)" +msgstr "Balanceador de Carga(Compatibilidade)" + +msgid "Load Balancer(Performance)" +msgstr "Balanceador de Carga(Desempenho)" + +msgid "Multi-WAN" +msgstr "Multi-WAN" + +msgid "Multi-WAN Status" +msgstr "Status de Multi-WAN" + +msgid "Multi-WAN Traffic Rules" +msgstr "Regras de Tráfego Multi-WAN" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"O Multi-WAN permite o use de múltiplas conexões ao enlace superior (ex: " +"internet) para o balanceamento de carga e tolerância a falha." + +msgid "None" +msgstr "Nenhum" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "Portas" + +msgid "Protocol" +msgstr "Procotolo" + +msgid "Recovering" +msgstr "Recuperação" + +msgid "Source Address" +msgstr "Endereço de Origem" + +msgid "Unknown" +msgstr "Desconhecido" + +msgid "WAN Interfaces" +msgstr "Interfaces WAN" + +msgid "WAN Uplink" +msgstr "Conexão WAN" + +msgid "all" +msgstr "todos" diff --git a/feeds/luci/applications/luci-app-multiwan/po/pt/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/pt/multiwan.po new file mode 100644 index 0000000..95eeba8 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/pt/multiwan.po @@ -0,0 +1,118 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-09-22 18:29+0200\n" +"Last-Translator: Low \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "Automático" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "Servidor(s) DNS" + +msgid "Default Route" +msgstr "" + +msgid "Destination Address" +msgstr "Endereço de Destino" + +msgid "Disable" +msgstr "Desativar" + +msgid "Enable" +msgstr "Activar" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "" + +msgid "Health Monitor ICMP Timeout" +msgstr "" + +msgid "Health Monitor Interval" +msgstr "" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "" + +msgid "Load Balancer(Compatibility)" +msgstr "" + +msgid "Load Balancer(Performance)" +msgstr "" + +msgid "Multi-WAN" +msgstr "" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" + +msgid "None" +msgstr "Nenhum" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "Portas" + +msgid "Protocol" +msgstr "Procotolo" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "Endereço de Origem" + +msgid "Unknown" +msgstr "Desconhecido" + +msgid "WAN Interfaces" +msgstr "" + +msgid "WAN Uplink" +msgstr "" + +msgid "all" +msgstr "todos" diff --git a/feeds/luci/applications/luci-app-multiwan/po/ro/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/ro/multiwan.po new file mode 100644 index 0000000..cd51944 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/ro/multiwan.po @@ -0,0 +1,119 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-09 13:26+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Collecting data..." +msgstr "Colectare date..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "Server(e) DNS" + +msgid "Default Route" +msgstr "Ruta default" + +msgid "Destination Address" +msgstr "Adresă destinaţie" + +msgid "Disable" +msgstr "Dezactivează" + +msgid "Enable" +msgstr "Activează" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "" + +msgid "Health Monitor ICMP Timeout" +msgstr "" + +msgid "Health Monitor Interval" +msgstr "" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "" + +msgid "Load Balancer(Compatibility)" +msgstr "" + +msgid "Load Balancer(Performance)" +msgstr "" + +msgid "Multi-WAN" +msgstr "" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" + +msgid "None" +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "Porturi" + +msgid "Protocol" +msgstr "Protocol" + +msgid "Recovering" +msgstr "Recuperare" + +msgid "Source Address" +msgstr "Adresa sursei" + +msgid "Unknown" +msgstr "Necunoscut" + +msgid "WAN Interfaces" +msgstr "Interfeţe WAN" + +msgid "WAN Uplink" +msgstr "" + +msgid "all" +msgstr "toate" diff --git a/feeds/luci/applications/luci-app-multiwan/po/ru/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/ru/multiwan.po new file mode 100644 index 0000000..c12d920 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/ru/multiwan.po @@ -0,0 +1,127 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: multiwan\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-08-15 14:05+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Attempts Before WAN Failover" +msgstr "Количество попыток перед обработкой отказа WAN" + +msgid "Attempts Before WAN Recovery" +msgstr "Количество попыток перед восстановлением WAN" + +msgid "Auto" +msgstr "Автоматически" + +msgid "Collecting data..." +msgstr "Сбор данных..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" +"Укажите правила для направления исходящего трафика через заданные восходящие " +"каналы WAN." + +msgid "DNS Server(s)" +msgstr "DNS-сервер(ы)" + +msgid "Default Route" +msgstr "Маршрут по умолчанию" + +msgid "Destination Address" +msgstr "Адрес назначения" + +msgid "Disable" +msgstr "Отключить" + +msgid "Enable" +msgstr "Включить" + +msgid "Failing" +msgstr "Отказ" + +msgid "Failover Traffic Destination" +msgstr "Назначение трафика при обработке отказа" + +msgid "Health Monitor ICMP Host(s)" +msgstr "ICMP-хост(ы) для контроля состояния" + +msgid "Health Monitor ICMP Timeout" +msgstr "Тайм-аут контроля состояния по ICMP" + +msgid "Health Monitor Interval" +msgstr "Интервал контроля состояния" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" +"Контроль состояния определяет и исправляет изменения сети и неисправные " +"соединения." + +msgid "KO" +msgstr "Не работает" + +msgid "Load Balancer Distribution" +msgstr "Распределение балансировки нагрузки" + +msgid "Load Balancer(Compatibility)" +msgstr "Балансировка нагрузки (совместимость)" + +msgid "Load Balancer(Performance)" +msgstr "Балансировка нагрузки (производительность)" + +msgid "Multi-WAN" +msgstr "Мульти-WAN" + +msgid "Multi-WAN Status" +msgstr "Состояние мульти-WAN" + +msgid "Multi-WAN Traffic Rules" +msgstr "Правила для мульти-WAN трафика" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" +"Мульти-WAN позволяет использовать несколько портов восходящего канала для " +"балансировки нагрузки и отказоустойчивости." + +msgid "None" +msgstr "Ни один из" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "Порты" + +msgid "Protocol" +msgstr "Протокол" + +msgid "Recovering" +msgstr "Восстановление" + +msgid "Source Address" +msgstr "Адрес отправителя" + +msgid "Unknown" +msgstr "Неизвестно" + +msgid "WAN Interfaces" +msgstr "WAN-интерфейсы" + +msgid "WAN Uplink" +msgstr "Восходящий канал WAN" + +msgid "all" +msgstr "все" diff --git a/feeds/luci/applications/luci-app-multiwan/po/sk/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/sk/multiwan.po new file mode 100644 index 0000000..b113eac --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/sk/multiwan.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "" + +msgid "Default Route" +msgstr "" + +msgid "Destination Address" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "" + +msgid "Health Monitor ICMP Timeout" +msgstr "" + +msgid "Health Monitor Interval" +msgstr "" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "" + +msgid "Load Balancer(Compatibility)" +msgstr "" + +msgid "Load Balancer(Performance)" +msgstr "" + +msgid "Multi-WAN" +msgstr "" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" + +msgid "None" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "WAN Interfaces" +msgstr "" + +msgid "WAN Uplink" +msgstr "" + +msgid "all" +msgstr "" diff --git a/feeds/luci/applications/luci-app-multiwan/po/sv/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/sv/multiwan.po new file mode 100644 index 0000000..fae4c58 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/sv/multiwan.po @@ -0,0 +1,116 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "" + +msgid "Default Route" +msgstr "" + +msgid "Destination Address" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "" + +msgid "Health Monitor ICMP Timeout" +msgstr "" + +msgid "Health Monitor Interval" +msgstr "" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "" + +msgid "Load Balancer(Compatibility)" +msgstr "" + +msgid "Load Balancer(Performance)" +msgstr "" + +msgid "Multi-WAN" +msgstr "" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" + +msgid "None" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "WAN Interfaces" +msgstr "" + +msgid "WAN Uplink" +msgstr "" + +msgid "all" +msgstr "" diff --git a/feeds/luci/applications/luci-app-multiwan/po/templates/multiwan.pot b/feeds/luci/applications/luci-app-multiwan/po/templates/multiwan.pot new file mode 100644 index 0000000..954eed1 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/templates/multiwan.pot @@ -0,0 +1,108 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "" + +msgid "Default Route" +msgstr "" + +msgid "Destination Address" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "" + +msgid "Health Monitor ICMP Timeout" +msgstr "" + +msgid "Health Monitor Interval" +msgstr "" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "" + +msgid "Load Balancer(Compatibility)" +msgstr "" + +msgid "Load Balancer(Performance)" +msgstr "" + +msgid "Multi-WAN" +msgstr "" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" + +msgid "None" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "WAN Interfaces" +msgstr "" + +msgid "WAN Uplink" +msgstr "" + +msgid "all" +msgstr "" diff --git a/feeds/luci/applications/luci-app-multiwan/po/tr/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/tr/multiwan.po new file mode 100644 index 0000000..e9d6ece --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/tr/multiwan.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "" + +msgid "Default Route" +msgstr "" + +msgid "Destination Address" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "" + +msgid "Health Monitor ICMP Timeout" +msgstr "" + +msgid "Health Monitor Interval" +msgstr "" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "" + +msgid "Load Balancer(Compatibility)" +msgstr "" + +msgid "Load Balancer(Performance)" +msgstr "" + +msgid "Multi-WAN" +msgstr "" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" + +msgid "None" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "WAN Interfaces" +msgstr "" + +msgid "WAN Uplink" +msgstr "" + +msgid "all" +msgstr "" diff --git a/feeds/luci/applications/luci-app-multiwan/po/uk/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/uk/multiwan.po new file mode 100644 index 0000000..922b402 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/uk/multiwan.po @@ -0,0 +1,119 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-09-21 15:52+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "Автоматично" + +msgid "Collecting data..." +msgstr "Збір даних..." + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "DNS-сервер(и)" + +msgid "Default Route" +msgstr "Типовий маршрут" + +msgid "Destination Address" +msgstr "Адреса призначення" + +msgid "Disable" +msgstr "Вимкнути" + +msgid "Enable" +msgstr "Активувати" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "" + +msgid "Health Monitor ICMP Timeout" +msgstr "" + +msgid "Health Monitor Interval" +msgstr "" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "" + +msgid "Load Balancer(Compatibility)" +msgstr "" + +msgid "Load Balancer(Performance)" +msgstr "" + +msgid "Multi-WAN" +msgstr "" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" + +msgid "None" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "WAN Interfaces" +msgstr "" + +msgid "WAN Uplink" +msgstr "" + +msgid "all" +msgstr "" diff --git a/feeds/luci/applications/luci-app-multiwan/po/vi/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/vi/multiwan.po new file mode 100644 index 0000000..e9d6ece --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/vi/multiwan.po @@ -0,0 +1,115 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Attempts Before WAN Failover" +msgstr "" + +msgid "Attempts Before WAN Recovery" +msgstr "" + +msgid "Auto" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "" + +msgid "DNS Server(s)" +msgstr "" + +msgid "Default Route" +msgstr "" + +msgid "Destination Address" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Failing" +msgstr "" + +msgid "Failover Traffic Destination" +msgstr "" + +msgid "Health Monitor ICMP Host(s)" +msgstr "" + +msgid "Health Monitor ICMP Timeout" +msgstr "" + +msgid "Health Monitor Interval" +msgstr "" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "" + +msgid "KO" +msgstr "" + +msgid "Load Balancer Distribution" +msgstr "" + +msgid "Load Balancer(Compatibility)" +msgstr "" + +msgid "Load Balancer(Performance)" +msgstr "" + +msgid "Multi-WAN" +msgstr "" + +msgid "Multi-WAN Status" +msgstr "" + +msgid "Multi-WAN Traffic Rules" +msgstr "" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "" + +msgid "None" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Recovering" +msgstr "" + +msgid "Source Address" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "WAN Interfaces" +msgstr "" + +msgid "WAN Uplink" +msgstr "" + +msgid "all" +msgstr "" diff --git a/feeds/luci/applications/luci-app-multiwan/po/zh-cn/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/zh-cn/multiwan.po new file mode 100644 index 0000000..dfb4958 --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/zh-cn/multiwan.po @@ -0,0 +1,118 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-08 16:16+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "WAN故障转移之前尝试" + +msgid "Attempts Before WAN Recovery" +msgstr "WAN故障恢复之前尝试" + +msgid "Auto" +msgstr "自动" + +msgid "Collecting data..." +msgstr "正在收集数据…" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "配置规则引导出站流量通过指定的WAN上行链路。" + +msgid "DNS Server(s)" +msgstr "DNS服务器" + +msgid "Default Route" +msgstr "缺省路由" + +msgid "Destination Address" +msgstr "目的地址" + +msgid "Disable" +msgstr "禁用" + +msgid "Enable" +msgstr "启用" + +msgid "Failing" +msgstr "失败" + +msgid "Failover Traffic Destination" +msgstr "故障转移目的地" + +msgid "Health Monitor ICMP Host(s)" +msgstr "健康状况监测ICMP主机" + +msgid "Health Monitor ICMP Timeout" +msgstr "健康状况监测ICMP主机超时" + +msgid "Health Monitor Interval" +msgstr "健康状况监测间隔" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "健康监视器,检测和修正网络变更和失败的连接。" + +msgid "KO" +msgstr "好" + +msgid "Load Balancer Distribution" +msgstr "负载均衡分布" + +msgid "Load Balancer(Compatibility)" +msgstr "负载平衡器(兼容)" + +msgid "Load Balancer(Performance)" +msgstr "负载平衡器(性能)" + +msgid "Multi-WAN" +msgstr "多WAN" + +msgid "Multi-WAN Status" +msgstr "多WAN状态" + +msgid "Multi-WAN Traffic Rules" +msgstr "多WAN流量规则" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "多WAN允许使用多条上行链路的负载均衡和故障转移。" + +msgid "None" +msgstr "空" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "端口" + +msgid "Protocol" +msgstr "协议" + +msgid "Recovering" +msgstr "恢复" + +msgid "Source Address" +msgstr "源地址" + +msgid "Unknown" +msgstr "未知" + +msgid "WAN Interfaces" +msgstr "WAN接口" + +msgid "WAN Uplink" +msgstr "WAN上联" + +msgid "all" +msgstr "所有" diff --git a/feeds/luci/applications/luci-app-multiwan/po/zh-tw/multiwan.po b/feeds/luci/applications/luci-app-multiwan/po/zh-tw/multiwan.po new file mode 100644 index 0000000..9bfbb8f --- /dev/null +++ b/feeds/luci/applications/luci-app-multiwan/po/zh-tw/multiwan.po @@ -0,0 +1,118 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 18:42+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Attempts Before WAN Failover" +msgstr "寬頻失敗前嘗試" + +msgid "Attempts Before WAN Recovery" +msgstr "寬頻復原前嘗試" + +msgid "Auto" +msgstr "自動" + +msgid "Collecting data..." +msgstr "收集資料中" + +msgid "" +"Configure rules for directing outbound traffic through specified WAN Uplinks." +msgstr "透過指定的寬頻上傳重導輸出流量的規則設定" + +msgid "DNS Server(s)" +msgstr "DNS伺服器" + +msgid "Default Route" +msgstr "預設路由器" + +msgid "Destination Address" +msgstr "目標位址" + +msgid "Disable" +msgstr "關閉" + +msgid "Enable" +msgstr "啟用" + +msgid "Failing" +msgstr "失敗" + +msgid "Failover Traffic Destination" +msgstr "故障備援流量目的地" + +msgid "Health Monitor ICMP Host(s)" +msgstr "健診ICMP的主機群" + +msgid "Health Monitor ICMP Timeout" +msgstr "健診ICMP超時" + +msgid "Health Monitor Interval" +msgstr "健診間隔" + +msgid "" +"Health Monitor detects and corrects network changes and failed connections." +msgstr "健診偵測並校正網路改變及失敗的連線" + +msgid "KO" +msgstr "KO" + +msgid "Load Balancer Distribution" +msgstr "分散式負載平衡" + +msgid "Load Balancer(Compatibility)" +msgstr "(取相容性)負載平衡" + +msgid "Load Balancer(Performance)" +msgstr "(取最大效能)負載平衡" + +msgid "Multi-WAN" +msgstr "多元寬頻" + +msgid "Multi-WAN Status" +msgstr "多元寬頻狀態" + +msgid "Multi-WAN Traffic Rules" +msgstr "多元寬頻流量規則" + +msgid "" +"Multi-WAN allows for the use of multiple uplinks for load balancing and " +"failover." +msgstr "允許多元寬頻使用多重上傳平衡負載和備援" + +msgid "None" +msgstr "無" + +msgid "OK" +msgstr "OK" + +msgid "Ports" +msgstr "埠號" + +msgid "Protocol" +msgstr "協定" + +msgid "Recovering" +msgstr "復原中" + +msgid "Source Address" +msgstr "來源位址" + +msgid "Unknown" +msgstr "未知" + +msgid "WAN Interfaces" +msgstr "寬頻介面" + +msgid "WAN Uplink" +msgstr "寬頻上傳" + +msgid "all" +msgstr "全部" diff --git a/feeds/luci/applications/luci-app-ntpc/Makefile b/feeds/luci/applications/luci-app-ntpc/Makefile new file mode 100644 index 0000000..b30f967 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=NTP time synchronisation configuration module +LUCI_DEPENDS:=+ntpclient + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-ntpc/luasrc/controller/ntpc.lua b/feeds/luci/applications/luci-app-ntpc/luasrc/controller/ntpc.lua new file mode 100644 index 0000000..c21d4ea --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/luasrc/controller/ntpc.lua @@ -0,0 +1,19 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.ntpc", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/ntpclient") then + return + end + + local page + + page = entry({"admin", "system", "ntpc"}, cbi("ntpc/ntpc"), _("Time Synchronisation"), 50) + page.dependent = true + + page = entry({"mini", "system", "ntpc"}, cbi("ntpc/ntpcmini", {autoapply=true}), _("Time Synchronisation"), 50) + page.dependent = true +end diff --git a/feeds/luci/applications/luci-app-ntpc/luasrc/model/cbi/ntpc/ntpc.lua b/feeds/luci/applications/luci-app-ntpc/luasrc/model/cbi/ntpc/ntpc.lua new file mode 100644 index 0000000..21ea88e --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/luasrc/model/cbi/ntpc/ntpc.lua @@ -0,0 +1,39 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("ntpclient", translate("Time Synchronisation"), translate("Synchronizes the system time")) + +s = m:section(TypedSection, "ntpclient", translate("General")) +s.anonymous = true +s.addremove = false + +s:option(DummyValue, "_time", translate("Current system time")).value = os.date("%c") + +interval = s:option(Value, "interval", translate("Update interval (in seconds)")) +interval.datatype = "and(uinteger,min(1))" +interval.rmempty = true + +count = s:option(Value, "count", translate("Count of time measurements"), translate("empty = infinite")) +count.datatype = "and(uinteger,min(1))" +count.rmempty = true + +s2 = m:section(TypedSection, "ntpdrift", translate("Clock Adjustment")) +s2.anonymous = true +s2.addremove = false + +freq = s2:option(Value, "freq", translate("Offset frequency")) +freq.datatype = "integer" +freq.rmempty = true + +s3 = m:section(TypedSection, "ntpserver", translate("Time Servers")) +s3.anonymous = true +s3.addremove = true +s3.template = "cbi/tblsection" + +s3:option(Value, "hostname", translate("Hostname")) +port = s3:option(Value, "port", translate("Port")) +port.datatype = "port" +port.rmempty = true + +return m diff --git a/feeds/luci/applications/luci-app-ntpc/luasrc/model/cbi/ntpc/ntpcmini.lua b/feeds/luci/applications/luci-app-ntpc/luasrc/model/cbi/ntpc/ntpcmini.lua new file mode 100644 index 0000000..82811cf --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/luasrc/model/cbi/ntpc/ntpcmini.lua @@ -0,0 +1,28 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require("luci.tools.webadmin") +m = Map("ntpclient", translate("Time Synchronisation"), translate("Synchronizes the system time")) + +s = m:section(TypedSection, "ntpclient", translate("General")) +s.anonymous = true +s.addremove = false + +s:option(DummyValue, "_time", translate("Current system time")).value = os.date("%c") + +interval = s:option(Value, "interval", translate("Update interval (in seconds)")) +interval.datatype = "and(uinteger,min(1))" +interval.rmempty = true + +s3 = m:section(TypedSection, "ntpserver", translate("Time Server")) +s3.anonymous = true +s3.addremove = true +s3.template = "cbi/tblsection" + +s3:option(Value, "hostname", translate("Hostname")) +port = s3:option(Value, "port", translate("Port")) +port.datatype = "port" +port.rmempty = true + +return m diff --git a/feeds/luci/applications/luci-app-ntpc/po/ca/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/ca/ntpc.po new file mode 100644 index 0000000..1a0f5fb --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/ca/ntpc.po @@ -0,0 +1,57 @@ +# ntpc.pot +# generated from ./applications/luci-ntpc/luasrc/i18n/ntpc.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2014-07-03 20:32+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "Ajustament de rellotge" + +#, fuzzy +msgid "Count of time measurements" +msgstr "Compte de mesures d'horari" + +msgid "Current system time" +msgstr "Horari del sistema actual" + +msgid "General" +msgstr "General" + +msgid "Hostname" +msgstr "Nom de host" + +#, fuzzy +msgid "Offset frequency" +msgstr "Compensació de freqüència" + +msgid "Port" +msgstr "Port" + +msgid "Synchronizes the system time" +msgstr "Sincronitza l'hora del sistema" + +msgid "Time Server" +msgstr "Servidor d'horari" + +msgid "Time Servers" +msgstr "Servidors d'horari" + +msgid "Time Synchronisation" +msgstr "Sincronització d'horari" + +msgid "Update interval (in seconds)" +msgstr "Interval d'actualització (en segons)" + +msgid "empty = infinite" +msgstr "buit = infinit" diff --git a/feeds/luci/applications/luci-app-ntpc/po/cs/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/cs/ntpc.po new file mode 100644 index 0000000..8c342de --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/cs/ntpc.po @@ -0,0 +1,55 @@ +# Generated from applications/luci-ntpc/luasrc/model/cbi/ntpc/*.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2014-04-14 12:47+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "Úprava času" + +msgid "Count of time measurements" +msgstr "Počet měření času" + +msgid "Current system time" +msgstr "Aktuální systémový čas" + +msgid "General" +msgstr "Obecné nastavení" + +msgid "Hostname" +msgstr "Hostname" + +msgid "Offset frequency" +msgstr "Offsetová frekvence (chyba měření času)" + +msgid "Port" +msgstr "Port" + +msgid "Synchronizes the system time" +msgstr "Synchronizuje systémový čas s přesným reálným časem přes síť" + +msgid "Time Server" +msgstr "Synchronizační server" + +msgid "Time Servers" +msgstr "Synchronizační servery" + +msgid "Time Synchronisation" +msgstr "Synchronizace času" + +msgid "Update interval (in seconds)" +msgstr "Interval obnovy synchronizace (v sekundách)" + +msgid "empty = infinite" +msgstr "prázdný = neustálé opakování" diff --git a/feeds/luci/applications/luci-app-ntpc/po/de/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/de/ntpc.po new file mode 100644 index 0000000..b610935 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/de/ntpc.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2012-07-17 15:07+0200\n" +"Last-Translator: Martin \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "Zeitgeberjustierung" + +msgid "Count of time measurements" +msgstr "Anzahl der Zeitmessungen" + +msgid "Current system time" +msgstr "Aktuelle Systemzeit" + +msgid "General" +msgstr "Allgemein" + +msgid "Hostname" +msgstr "Hostname" + +msgid "Offset frequency" +msgstr "Frequenzabweichung" + +msgid "Port" +msgstr "Port" + +msgid "Synchronizes the system time" +msgstr "Synchronisiert die Systemzeit" + +msgid "Time Server" +msgstr "Zeitserver" + +msgid "Time Servers" +msgstr "Zeitserver" + +msgid "Time Synchronisation" +msgstr "Zeitsynchronisation" + +msgid "Update interval (in seconds)" +msgstr "Aktualisierungsintervall (in Sekunden)" + +msgid "empty = infinite" +msgstr "leer = unendlich" diff --git a/feeds/luci/applications/luci-app-ntpc/po/el/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/el/ntpc.po new file mode 100644 index 0000000..c8f22eb --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/el/ntpc.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2012-03-31 15:40+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Clock Adjustment" +msgstr "Ρύθμιση Ρολογιού" + +msgid "Count of time measurements" +msgstr "Πλήθος μετρήσεων ώρας" + +msgid "Current system time" +msgstr "Τρέχουσα ώρα συστήματος" + +msgid "General" +msgstr "Γενικά" + +msgid "Hostname" +msgstr "Όνομα συστήματος" + +#, fuzzy +msgid "Offset frequency" +msgstr "Συχνότητα μετάθεσης" + +msgid "Port" +msgstr "Θύρα" + +msgid "Synchronizes the system time" +msgstr "Συγχρονίζει την ώρα του συστήματος" + +msgid "Time Server" +msgstr "" + +#, fuzzy +msgid "Time Servers" +msgstr "Εξυπηρετητές Ώρας" + +msgid "Time Synchronisation" +msgstr "Συγχρονισμός Ώρας" + +#, fuzzy +msgid "Update interval (in seconds)" +msgstr "Περίοδος ενημέρωσης (σε δευτερόλεπτα)" + +msgid "empty = infinite" +msgstr "άδειο = άπειρος" diff --git a/feeds/luci/applications/luci-app-ntpc/po/en/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/en/ntpc.po new file mode 100644 index 0000000..803a996 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/en/ntpc.po @@ -0,0 +1,51 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Clock Adjustment" +msgstr "Clock Adjustment" + +msgid "Count of time measurements" +msgstr "Count of time measurements" + +msgid "Current system time" +msgstr "Current system time" + +msgid "General" +msgstr "General" + +msgid "Hostname" +msgstr "Hostname" + +msgid "Offset frequency" +msgstr "Offset frequency" + +msgid "Port" +msgstr "Port" + +msgid "Synchronizes the system time" +msgstr "Synchronizes the system time" + +msgid "Time Server" +msgstr "" + +msgid "Time Servers" +msgstr "Time Servers" + +msgid "Time Synchronisation" +msgstr "Time Synchronisation" + +msgid "Update interval (in seconds)" +msgstr "Update interval (in seconds)" + +msgid "empty = infinite" +msgstr "empty = infinite" diff --git a/feeds/luci/applications/luci-app-ntpc/po/es/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/es/ntpc.po new file mode 100644 index 0000000..40edf24 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/es/ntpc.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2012-11-25 11:14+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "Ajuste del Reloj" + +msgid "Count of time measurements" +msgstr "Medida del tiempo" + +msgid "Current system time" +msgstr "Hora actual del sistema" + +msgid "General" +msgstr "General" + +msgid "Hostname" +msgstr "Nombre de la máquina" + +msgid "Offset frequency" +msgstr "Desplazamiento de frecuencia" + +msgid "Port" +msgstr "Puerto" + +msgid "Synchronizes the system time" +msgstr "Sincronizar la hora del sistema" + +msgid "Time Server" +msgstr "Servidor de tiempo" + +msgid "Time Servers" +msgstr "Servidores de hora" + +msgid "Time Synchronisation" +msgstr "Sincronización horaria" + +msgid "Update interval (in seconds)" +msgstr "Intervalo de actualización (en segundos)" + +msgid "empty = infinite" +msgstr "vacío = infinito" diff --git a/feeds/luci/applications/luci-app-ntpc/po/fr/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/fr/ntpc.po new file mode 100644 index 0000000..d417e15 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/fr/ntpc.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2012-11-06 16:08+0200\n" +"Last-Translator: hogsim \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "Ajustement de l'horloge" + +msgid "Count of time measurements" +msgstr "Nombre de mesures du temps" + +msgid "Current system time" +msgstr "Temps système actuel" + +msgid "General" +msgstr "Général" + +msgid "Hostname" +msgstr "Nom d'hôte" + +msgid "Offset frequency" +msgstr "Décalage en fréquence" + +msgid "Port" +msgstr "Port" + +msgid "Synchronizes the system time" +msgstr "Synchronise le temps système" + +msgid "Time Server" +msgstr "Serveur temps " + +msgid "Time Servers" +msgstr "Serveurs de temps" + +msgid "Time Synchronisation" +msgstr "Synchronisation du temps" + +msgid "Update interval (in seconds)" +msgstr "Intervalle de mise à jour (en secondes)" + +msgid "empty = infinite" +msgstr "vide = infini" diff --git a/feeds/luci/applications/luci-app-ntpc/po/he/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/he/ntpc.po new file mode 100644 index 0000000..9d2bee6 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/he/ntpc.po @@ -0,0 +1,59 @@ +# Generated from applications/luci-ntpc/luasrc/model/cbi/ntpc/*.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2011-06-25 11:40+0200\n" +"Last-Translator: GiladL \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +# התאמת שעון? +#, fuzzy +msgid "Clock Adjustment" +msgstr "כיוון שעון" + +#, fuzzy +msgid "Count of time measurements" +msgstr "ספירת יחידות זמן" + +msgid "Current system time" +msgstr "זמן מערכת נוכחי" + +msgid "General" +msgstr "כללי" + +msgid "Hostname" +msgstr "שם מארח" + +#, fuzzy +msgid "Offset frequency" +msgstr "תדירות סטייה" + +msgid "Port" +msgstr "פורט" + +msgid "Synchronizes the system time" +msgstr "מסנכרן את זמן המערכת" + +msgid "Time Server" +msgstr "" + +msgid "Time Servers" +msgstr "שרתי זמן" + +msgid "Time Synchronisation" +msgstr "סנכרון זמן" + +msgid "Update interval (in seconds)" +msgstr "מרווח בין עדכונים (בשניות)" + +msgid "empty = infinite" +msgstr "ריק = אינסופי" diff --git a/feeds/luci/applications/luci-app-ntpc/po/hu/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/hu/ntpc.po new file mode 100644 index 0000000..f69046f --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/hu/ntpc.po @@ -0,0 +1,55 @@ +# Generated from applications/luci-ntpc/luasrc/model/cbi/ntpc/*.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2012-07-10 21:05+0200\n" +"Last-Translator: Gyula \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "Óra igazítás" + +msgid "Count of time measurements" +msgstr "Időmérések száma" + +msgid "Current system time" +msgstr "Jelenlegi rendszeridő" + +msgid "General" +msgstr "Általános" + +msgid "Hostname" +msgstr "Gépnév" + +msgid "Offset frequency" +msgstr "Frekvencia eltolás" + +msgid "Port" +msgstr "Port" + +msgid "Synchronizes the system time" +msgstr "A rendszeridő szinkronizálása" + +msgid "Time Server" +msgstr "Időszerver" + +msgid "Time Servers" +msgstr "Időkiszolgálók" + +msgid "Time Synchronisation" +msgstr "Idő szinkronizálás" + +msgid "Update interval (in seconds)" +msgstr "Frissítési időköz (másodpercben)" + +msgid "empty = infinite" +msgstr "üres = végtelen" diff --git a/feeds/luci/applications/luci-app-ntpc/po/it/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/it/ntpc.po new file mode 100644 index 0000000..4b027b7 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/it/ntpc.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2013-02-03 13:56+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "Impostazione Ora" + +msgid "Count of time measurements" +msgstr "Conteggio delle misure del tempo" + +msgid "Current system time" +msgstr "Ora corrente del sistema" + +msgid "General" +msgstr "Generale" + +msgid "Hostname" +msgstr "Hostname" + +msgid "Offset frequency" +msgstr "Offset delle frequenza" + +msgid "Port" +msgstr "Porta" + +msgid "Synchronizes the system time" +msgstr "Sincronizza l'ora di sistema" + +msgid "Time Server" +msgstr "Server Orologio" + +msgid "Time Servers" +msgstr "Server dell'ora" + +msgid "Time Synchronisation" +msgstr "Sincronizzazione dell'ora" + +msgid "Update interval (in seconds)" +msgstr "Intervallo di aggiornamento (in secondi)" + +msgid "empty = infinite" +msgstr "vuoto = infinito" diff --git a/feeds/luci/applications/luci-app-ntpc/po/ja/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/ja/ntpc.po new file mode 100644 index 0000000..bb6135c --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/ja/ntpc.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2012-11-14 14:41+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "時刻調整" + +msgid "Count of time measurements" +msgstr "時間計測回数" + +msgid "Current system time" +msgstr "現在時刻" + +msgid "General" +msgstr "一般設定" + +msgid "Hostname" +msgstr "ホスト名" + +msgid "Offset frequency" +msgstr "オフセット周波数" + +msgid "Port" +msgstr "ポート" + +msgid "Synchronizes the system time" +msgstr "システムの時間を同期します。" + +msgid "Time Server" +msgstr "時刻サーバー" + +msgid "Time Servers" +msgstr "時刻サーバー" + +msgid "Time Synchronisation" +msgstr "Time Synchronisation" + +msgid "Update interval (in seconds)" +msgstr "アップデート間隔 (秒)" + +msgid "empty = infinite" +msgstr "空の場合、無限大になります" diff --git a/feeds/luci/applications/luci-app-ntpc/po/ms/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/ms/ntpc.po new file mode 100644 index 0000000..abbfdbe --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/ms/ntpc.po @@ -0,0 +1,52 @@ +# Generated from applications/luci-ntpc/luasrc/model/cbi/ntpc/*.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2010-04-14 13:24+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Clock Adjustment" +msgstr "" + +msgid "Count of time measurements" +msgstr "" + +msgid "Current system time" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Offset frequency" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Synchronizes the system time" +msgstr "" + +msgid "Time Server" +msgstr "" + +msgid "Time Servers" +msgstr "" + +msgid "Time Synchronisation" +msgstr "" + +msgid "Update interval (in seconds)" +msgstr "" + +msgid "empty = infinite" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ntpc/po/no/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/no/ntpc.po new file mode 100644 index 0000000..7b3fd0b --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/no/ntpc.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Clock Adjustment" +msgstr "Tidskorrigering" + +msgid "Count of time measurements" +msgstr "Antall tidsmålinger" + +msgid "Current system time" +msgstr "Nåværende system tid" + +msgid "General" +msgstr "Generelt" + +msgid "Hostname" +msgstr "Vertsnavn" + +msgid "Offset frequency" +msgstr "Frekvens forskyvning" + +msgid "Port" +msgstr "Port" + +msgid "Synchronizes the system time" +msgstr "Synkroniserer systemets tid" + +msgid "Time Server" +msgstr "Tids Server" + +msgid "Time Servers" +msgstr "Tids Servere" + +msgid "Time Synchronisation" +msgstr "Tidssynkronisering" + +msgid "Update interval (in seconds)" +msgstr "Oppdateringsintervall (i sek)" + +msgid "empty = infinite" +msgstr "tomt = uendelig" diff --git a/feeds/luci/applications/luci-app-ntpc/po/pl/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/pl/ntpc.po new file mode 100644 index 0000000..c2cb3e8 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/pl/ntpc.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2011-09-18 02:23+0200\n" +"Last-Translator: Michał \n" +"Language-Team: LANGUAGE \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Clock Adjustment" +msgstr "Regulacja zegara" + +msgid "Count of time measurements" +msgstr "Liczba pomiarów czasu" + +msgid "Current system time" +msgstr "Aktualny czas systemowy" + +msgid "General" +msgstr "Główne" + +msgid "Hostname" +msgstr "Nazwa hosta" + +msgid "Offset frequency" +msgstr "Przesunięcie częstotliwości" + +msgid "Port" +msgstr "Port" + +msgid "Synchronizes the system time" +msgstr "Synchronizuje czas systemowy" + +msgid "Time Server" +msgstr "Serwer czasu" + +msgid "Time Servers" +msgstr "Serwery czasu" + +msgid "Time Synchronisation" +msgstr "Synchronizacja czasu" + +msgid "Update interval (in seconds)" +msgstr "Interwał aktualizacji (w sekundach)" + +msgid "empty = infinite" +msgstr "puste = nieskończone" diff --git a/feeds/luci/applications/luci-app-ntpc/po/pt-br/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/pt-br/ntpc.po new file mode 100644 index 0000000..9e8849a --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/pt-br/ntpc.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2011-10-18 22:38+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Clock Adjustment" +msgstr "Ajuste do Relógio" + +msgid "Count of time measurements" +msgstr "Quantidade de medições do tempo" + +msgid "Current system time" +msgstr "Hora atual do sistema" + +msgid "General" +msgstr "Geral" + +msgid "Hostname" +msgstr "Nome do computador" + +msgid "Offset frequency" +msgstr "Frequência da compensação" + +msgid "Port" +msgstr "Porta" + +msgid "Synchronizes the system time" +msgstr "Sincroniza a hora do sistema" + +msgid "Time Server" +msgstr "Servidor de Hora." + +msgid "Time Servers" +msgstr "Servidores de Hora" + +msgid "Time Synchronisation" +msgstr "Sincronização de Horário" + +msgid "Update interval (in seconds)" +msgstr "Intervalo de atualização (em segundos)" + +msgid "empty = infinite" +msgstr "vazio = infinito" diff --git a/feeds/luci/applications/luci-app-ntpc/po/pt/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/pt/ntpc.po new file mode 100644 index 0000000..70e7952 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/pt/ntpc.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2013-05-01 01:16+0200\n" +"Last-Translator: pedromrgoncalves \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "Ajuste do Relógio" + +msgid "Count of time measurements" +msgstr "Quantas vezes irá atualizar" + +msgid "Current system time" +msgstr "Hora actual do sistema" + +msgid "General" +msgstr "Geral" + +msgid "Hostname" +msgstr "Nome do Host" + +msgid "Offset frequency" +msgstr "Frequência do Offset" + +msgid "Port" +msgstr "Porta" + +msgid "Synchronizes the system time" +msgstr "Sincroniza a hora do sistema" + +msgid "Time Server" +msgstr "Servidor de Hora" + +msgid "Time Servers" +msgstr "Servidores de Hora" + +msgid "Time Synchronisation" +msgstr "Sincronização de Horário" + +msgid "Update interval (in seconds)" +msgstr "Intervalo de Actualização (em s)" + +msgid "empty = infinite" +msgstr "vazio = infinito" diff --git a/feeds/luci/applications/luci-app-ntpc/po/ro/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/ro/ntpc.po new file mode 100644 index 0000000..893419f --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/ro/ntpc.po @@ -0,0 +1,56 @@ +# Generated from applications/luci-ntpc/luasrc/model/cbi/ntpc/*.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2012-12-01 16:08+0200\n" +"Last-Translator: cgherman \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "Ajustarea ceasului" + +msgid "Count of time measurements" +msgstr "Masuratori de timp" + +msgid "Current system time" +msgstr "Timpul curent de sistem" + +msgid "General" +msgstr "General" + +msgid "Hostname" +msgstr "Numele de host" + +msgid "Offset frequency" +msgstr "Frecventa de offset" + +msgid "Port" +msgstr "Port" + +msgid "Synchronizes the system time" +msgstr "Sincronizeaza timpul sistemului" + +msgid "Time Server" +msgstr "Server de timp" + +msgid "Time Servers" +msgstr "Serverele de timp" + +msgid "Time Synchronisation" +msgstr "Sincronizarea de timp" + +msgid "Update interval (in seconds)" +msgstr "Intervalul de actualizare (in secunde)" + +msgid "empty = infinite" +msgstr "gol = infinit" diff --git a/feeds/luci/applications/luci-app-ntpc/po/ru/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/ru/ntpc.po new file mode 100644 index 0000000..229b610 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/ru/ntpc.po @@ -0,0 +1,55 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: ntpc\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2012-08-15 11:41+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Clock Adjustment" +msgstr "Корректировка часов" + +msgid "Count of time measurements" +msgstr "Количество измерений времени" + +msgid "Current system time" +msgstr "Текущее время" + +msgid "General" +msgstr "Общие" + +msgid "Hostname" +msgstr "Имя хоста" + +msgid "Offset frequency" +msgstr "Смещение частоты" + +msgid "Port" +msgstr "Порт" + +msgid "Synchronizes the system time" +msgstr "Синхронизирует системное время" + +msgid "Time Server" +msgstr "Сервер времени" + +msgid "Time Servers" +msgstr "Серверы времени" + +msgid "Time Synchronisation" +msgstr "Синхронизация времени" + +msgid "Update interval (in seconds)" +msgstr "Интервал обновления (в секундах)" + +msgid "empty = infinite" +msgstr "пусто = бесконечно" diff --git a/feeds/luci/applications/luci-app-ntpc/po/sk/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/sk/ntpc.po new file mode 100644 index 0000000..d3f8fb8 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/sk/ntpc.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Clock Adjustment" +msgstr "" + +msgid "Count of time measurements" +msgstr "" + +msgid "Current system time" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Offset frequency" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Synchronizes the system time" +msgstr "" + +msgid "Time Server" +msgstr "" + +msgid "Time Servers" +msgstr "" + +msgid "Time Synchronisation" +msgstr "" + +msgid "Update interval (in seconds)" +msgstr "" + +msgid "empty = infinite" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ntpc/po/sv/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/sv/ntpc.po new file mode 100644 index 0000000..ce1032c --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/sv/ntpc.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Clock Adjustment" +msgstr "Justering av klocka" + +msgid "Count of time measurements" +msgstr "" + +msgid "Current system time" +msgstr "Nuvarande systemtid" + +msgid "General" +msgstr "Generell" + +msgid "Hostname" +msgstr "Värdnamn" + +msgid "Offset frequency" +msgstr "Inledningsfrekvens" + +msgid "Port" +msgstr "Port" + +msgid "Synchronizes the system time" +msgstr "Synkroniserar systemtiden" + +msgid "Time Server" +msgstr "Tidsserver" + +msgid "Time Servers" +msgstr "Tidsservrar" + +msgid "Time Synchronisation" +msgstr "Synkronisering av tid" + +msgid "Update interval (in seconds)" +msgstr "Intervall för uppdateringar (i sekunder)" + +msgid "empty = infinite" +msgstr "tom = oändlig" diff --git a/feeds/luci/applications/luci-app-ntpc/po/templates/ntpc.pot b/feeds/luci/applications/luci-app-ntpc/po/templates/ntpc.pot new file mode 100644 index 0000000..1ed4c40 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/templates/ntpc.pot @@ -0,0 +1,41 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Clock Adjustment" +msgstr "" + +msgid "Count of time measurements" +msgstr "" + +msgid "Current system time" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Offset frequency" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Synchronizes the system time" +msgstr "" + +msgid "Time Server" +msgstr "" + +msgid "Time Servers" +msgstr "" + +msgid "Time Synchronisation" +msgstr "" + +msgid "Update interval (in seconds)" +msgstr "" + +msgid "empty = infinite" +msgstr "" diff --git a/feeds/luci/applications/luci-app-ntpc/po/tr/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/tr/ntpc.po new file mode 100644 index 0000000..657b2e8 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/tr/ntpc.po @@ -0,0 +1,55 @@ +# Generated from applications/luci-ntpc/luasrc/model/cbi/ntpc/*.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2012-10-11 22:20+0200\n" +"Last-Translator: vincenzo \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "Saat Ayarı" + +msgid "Count of time measurements" +msgstr "Zaman Ölçüm Sayacı" + +msgid "Current system time" +msgstr "Mevcut Sistem Saati" + +msgid "General" +msgstr "Genel" + +msgid "Hostname" +msgstr "Sunucu Adı" + +msgid "Offset frequency" +msgstr "Denge Frekansı" + +msgid "Port" +msgstr "Port" + +msgid "Synchronizes the system time" +msgstr "Sistem Saati Senkronizasyonu" + +msgid "Time Server" +msgstr "Zaman Sunucusu" + +msgid "Time Servers" +msgstr "Zaman Sunucuları" + +msgid "Time Synchronisation" +msgstr "Saat Senkronizasyonu" + +msgid "Update interval (in seconds)" +msgstr "Güncelleme Aralığı (Saniye)" + +msgid "empty = infinite" +msgstr "Boş = Sonsuz" diff --git a/feeds/luci/applications/luci-app-ntpc/po/uk/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/uk/ntpc.po new file mode 100644 index 0000000..451f783 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/uk/ntpc.po @@ -0,0 +1,56 @@ +# Generated from applications/luci-ntpc/luasrc/model/cbi/ntpc/*.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2012-03-18 20:32+0200\n" +"Last-Translator: YuriPet \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Clock Adjustment" +msgstr "Коригування годинника" + +msgid "Count of time measurements" +msgstr "Кількість вимірювань часу" + +msgid "Current system time" +msgstr "Поточний системний час" + +msgid "General" +msgstr "Загальне" + +msgid "Hostname" +msgstr "Назва (ім'я) вузла" + +msgid "Offset frequency" +msgstr "Зсув частоти" + +msgid "Port" +msgstr "Порт" + +msgid "Synchronizes the system time" +msgstr "Синхронізація системного часу" + +msgid "Time Server" +msgstr "Сервер часу" + +msgid "Time Servers" +msgstr "Сервери часу" + +msgid "Time Synchronisation" +msgstr "Синхронізація часу" + +msgid "Update interval (in seconds)" +msgstr "Інтервал оновлення (в секундах)" + +msgid "empty = infinite" +msgstr "пусто = нескінченно" diff --git a/feeds/luci/applications/luci-app-ntpc/po/vi/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/vi/ntpc.po new file mode 100644 index 0000000..4de0971 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/vi/ntpc.po @@ -0,0 +1,57 @@ +# ntpc.pot +# generated from ./applications/luci-ntpc/luasrc/i18n/ntpc.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2009-08-13 03:46+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "Clock Adjustment" +msgstr "Điều chỉnh đồng hồ" + +#, fuzzy +msgid "Count of time measurements" +msgstr "Đếm thời gian" + +msgid "Current system time" +msgstr "Thời gian hiện tại của hệ thống" + +msgid "General" +msgstr "" + +msgid "Hostname" +msgstr "" + +#, fuzzy +msgid "Offset frequency" +msgstr "tần số offset " + +msgid "Port" +msgstr "" + +msgid "Synchronizes the system time" +msgstr "Đồng bộ hóa giờ hệ thống" + +msgid "Time Server" +msgstr "" + +#, fuzzy +msgid "Time Servers" +msgstr "Giờ server" + +msgid "Time Synchronisation" +msgstr "Thời gian đồng bộ hóa" + +#, fuzzy +msgid "Update interval (in seconds)" +msgstr "Cập nhật Interval (giây)" + +msgid "empty = infinite" +msgstr "Rỗng = Vô tận" diff --git a/feeds/luci/applications/luci-app-ntpc/po/zh-cn/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/zh-cn/ntpc.po new file mode 100644 index 0000000..0821c3f --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/zh-cn/ntpc.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCi Chinese Translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-14 13:24+0200\n" +"PO-Revision-Date: 2012-11-15 21:39+0200\n" +"Last-Translator: Rui \n" +"Language-Team: QQ Group 75543259\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "时钟校对" + +msgid "Count of time measurements" +msgstr "单位时间数" + +msgid "Current system time" +msgstr "当前系统时间" + +msgid "General" +msgstr "基本设置" + +msgid "Hostname" +msgstr "主机名" + +msgid "Offset frequency" +msgstr "偏移量" + +msgid "Port" +msgstr "端口" + +msgid "Synchronizes the system time" +msgstr "同步系统时间" + +msgid "Time Server" +msgstr "时间服务器" + +msgid "Time Servers" +msgstr "时间服务器" + +msgid "Time Synchronisation" +msgstr "时间同步" + +msgid "Update interval (in seconds)" +msgstr "更新间隔(秒)" + +msgid "empty = infinite" +msgstr "空值为无限长度" diff --git a/feeds/luci/applications/luci-app-ntpc/po/zh-tw/ntpc.po b/feeds/luci/applications/luci-app-ntpc/po/zh-tw/ntpc.po new file mode 100644 index 0000000..a898671 --- /dev/null +++ b/feeds/luci/applications/luci-app-ntpc/po/zh-tw/ntpc.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 18:43+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Clock Adjustment" +msgstr "校時修正" + +msgid "Count of time measurements" +msgstr "時間計量次數" + +msgid "Current system time" +msgstr "目前系統時間" + +msgid "General" +msgstr "一般" + +msgid "Hostname" +msgstr "主機名稱" + +msgid "Offset frequency" +msgstr "偏移頻道" + +msgid "Port" +msgstr "埠號" + +msgid "Synchronizes the system time" +msgstr "同步這個系統時間" + +msgid "Time Server" +msgstr "校時伺服器" + +msgid "Time Servers" +msgstr "校時伺服器" + +msgid "Time Synchronisation" +msgstr "校時同步" + +msgid "Update interval (in seconds)" +msgstr "更新間隔(秒)" + +msgid "empty = infinite" +msgstr "留白=不限制" diff --git a/feeds/luci/applications/luci-app-ocserv/Makefile b/feeds/luci/applications/luci-app-ocserv/Makefile new file mode 100644 index 0000000..3fbf4d2 --- /dev/null +++ b/feeds/luci/applications/luci-app-ocserv/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for OpenConnect VPN +LUCI_DEPENDS:=+ocserv +certtool + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-ocserv/luasrc/controller/ocserv.lua b/feeds/luci/applications/luci-app-ocserv/luasrc/controller/ocserv.lua new file mode 100644 index 0000000..79c6ddb --- /dev/null +++ b/feeds/luci/applications/luci-app-ocserv/luasrc/controller/ocserv.lua @@ -0,0 +1,78 @@ +-- Copyright 2014 Nikos Mavrogiannopoulos +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.ocserv", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/ocserv") then + return + end + + local page + + page = entry({"admin", "services", "ocserv"}, alias("admin", "services", "ocserv", "main"), + _("OpenConnect VPN")) + page.dependent = true + + page = entry({"admin", "services", "ocserv", "main"}, + cbi("ocserv/main"), + _("Server Settings"), 200) + page.dependent = true + + page = entry({"admin", "services", "ocserv", "users"}, + cbi("ocserv/users"), + _("User Settings"), 300) + page.dependent = true + + entry({"admin", "services", "ocserv", "status"}, + call("ocserv_status")).leaf = true + + entry({"admin", "services", "ocserv", "disconnect"}, + post("ocserv_disconnect")).leaf = true + +end + +function ocserv_status() + local ipt = io.popen("/usr/bin/occtl show users"); + + if ipt then + + local fwd = { } + while true do + + local ln = ipt:read("*l") + if not ln then break end + + local id, user, group, vpn_ip, ip, device, time, cipher, status = + ln:match("^%s*(%d+)%s+([-_%w]+)%s+([%(%)%.%*-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%(%)%:%.-_%w]+)%s+([%:%.-_%w]+).*") + if id then + fwd[#fwd+1] = { + id = id, + user = user, + group = group, + vpn_ip = vpn_ip, + ip = ip, + device = device, + time = time, + cipher = cipher, + status = status + } + end + end + ipt:close() + luci.http.prepare_content("application/json") + luci.http.write_json(fwd) + end +end + +function ocserv_disconnect(num) + local idx = tonumber(num) + + if idx and idx > 0 then + luci.sys.call("/usr/bin/occtl disconnect id %d" % idx) + luci.http.status(200, "OK") + + return + end + luci.http.status(400, "Bad request") +end diff --git a/feeds/luci/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua b/feeds/luci/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua new file mode 100644 index 0000000..74edaf4 --- /dev/null +++ b/feeds/luci/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua @@ -0,0 +1,179 @@ +-- Copyright 2014 Nikos Mavrogiannopoulos +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local has_ipv6 = fs.access("/proc/net/ipv6_route") + +m = Map("ocserv", translate("OpenConnect VPN")) + +s = m:section(TypedSection, "ocserv", "OpenConnect") +s.anonymous = true + +s:tab("general", translate("General Settings")) +s:tab("ca", translate("CA certificate")) +s:tab("template", translate("Edit Template")) + +local e = s:taboption("general", Flag, "enable", translate("Enable server")) +e.rmempty = false +e.default = "1" + +local o_sha = s:taboption("general", DummyValue, "sha_hash", translate("Server's certificate SHA1 hash"), + translate("That value should be communicated to the client to verify the server's certificate")) +local o_pki = s:taboption("general", DummyValue, "pkid", translate("Server's Public Key ID"), + translate("An alternative value to be communicated to the client to verify the server's certificate; this value only depends on the public key")) + +local fd = io.popen("/usr/bin/certtool -i --infile /etc/ocserv/server-cert.pem", "r") +if fd then local ln + local found_sha = false + local found_pki = false + local complete = 0 + while complete < 2 do + local ln = fd:read("*l") + if not ln then + break + elseif ln:match("SHA%-?1 fingerprint:") then + found_sha = true + elseif found_sha then + local hash = ln:match("([a-f0-9]+)") + o_sha.default = hash and hash:upper() + complete = complete + 1 + found_sha = false + elseif ln:match("Public Key I[Dd]:") then + found_pki = true + elseif found_pki then + local hash = ln:match("([a-f0-9]+)") + o_pki.default = hash and "sha1:" .. hash:upper() + complete = complete + 1 + found_pki = false + end + end + fd:close() +end + +function m.on_commit(map) + luci.sys.call("/usr/bin/occtl reload >/dev/null 2>&1") +end + +function e.write(self, section, value) + if value == "0" then + luci.sys.call("/etc/init.d/ocserv stop >/dev/null 2>&1") + luci.sys.call("/etc/init.d/ocserv disable >/dev/null 2>&1") + else + luci.sys.call("/etc/init.d/ocserv enable >/dev/null 2>&1") + luci.sys.call("/etc/init.d/ocserv restart >/dev/null 2>&1") + end + Flag.write(self, section, value) +end + +local o + +o = s:taboption("general", ListValue, "auth", translate("User Authentication"), + translate("The authentication method for the users. The simplest is plain with a single username-password pair. Use PAM modules to authenticate using another server (e.g., LDAP, Radius).")) +o.rmempty = false +o.default = "plain" +o:value("plain") +o:value("PAM") + +s:taboption("general", Value, "port", translate("Port"), + translate("The same UDP and TCP ports will be used")) +s:taboption("general", Value, "max_clients", translate("Max clients")) +s:taboption("general", Value, "max_same", translate("Max same clients")) +s:taboption("general", Value, "dpd", translate("Dead peer detection time (secs)")) + +local pip = s:taboption("general", Flag, "predictable_ips", translate("Predictable IPs"), + translate("The assigned IPs will be selected deterministically")) +pip.default = "1" + +local compr = s:taboption("general", Flag, "compression", translate("Enable compression"), + translate("Enable compression")) +compr.default = "1" + +local udp = s:taboption("general", Flag, "udp", translate("Enable UDP"), + translate("Enable UDP channel support; this must be enabled unless you know what you are doing")) +udp.default = "1" + +local cisco = s:taboption("general", Flag, "cisco_compat", translate("AnyConnect client compatibility"), + translate("Enable support for CISCO AnyConnect clients")) +cisco.default = "1" + + +tmpl = s:taboption("template", Value, "_tmpl", + translate("Edit the template that is used for generating the ocserv configuration.")) + +tmpl.template = "cbi/tvalue" +tmpl.rows = 20 + +function tmpl.cfgvalue(self, section) + return nixio.fs.readfile("/etc/ocserv/ocserv.conf.template") +end + +function tmpl.write(self, section, value) + value = value:gsub("\r\n?", "\n") + nixio.fs.writefile("/etc/ocserv/ocserv.conf.template", value) +end + +ca = s:taboption("ca", Value, "_ca", + translate("View the CA certificate used by this server. You will need to save it as 'ca.pem' and import it into the clients.")) + +ca.template = "cbi/tvalue" +ca.rows = 20 + +function ca.cfgvalue(self, section) + return nixio.fs.readfile("/etc/ocserv/ca.pem") +end + +--[[Networking options]]-- + +local parp = s:taboption("general", Flag, "proxy_arp", translate("Enable proxy arp"), + translate("Provide addresses to clients from a subnet of LAN; if enabled the network below must be a subnet of LAN. Note that the first address of the specified subnet will be reserved by ocserv, so it should not be in use. If you have a network in LAN covering 192.168.1.0/24 use 192.168.1.192/26 to reserve the upper 62 addresses.")) +parp.default = "0" + +ipaddr = s:taboption("general", Value, "ipaddr", translate("VPN IPv4-Network-Address"), + translate("The IPv4 subnet address to provide to clients; this should be some private network different than the LAN addresses unless proxy ARP is enabled. Leave empty to attempt auto-configuration.")) +ipaddr.datatype = "ip4addr" +ipaddr.default = "192.168.100.1" + +nm = s:taboption("general", Value, "netmask", translate("VPN IPv4-Netmask"), + translate("The mask of the subnet above.")) +nm.datatype = "ip4addr" +nm.default = "255.255.255.0" +nm:value("255.255.255.0") +nm:value("255.255.0.0") +nm:value("255.0.0.0") + +if has_ipv6 then + ip6addr = s:taboption("general", Value, "ip6addr", translate("VPN IPv6-Network-Address"), translate("CIDR-Notation: address/prefix"), + translate("The IPv6 subnet address to provide to clients; leave empty to attempt auto-configuration.")) + ip6addr.datatype = "ip6addr" +end + + +--[[DNS]]-- + +s = m:section(TypedSection, "dns", translate("DNS servers"), + translate("The DNS servers to be provided to clients; can be either IPv6 or IPv4. Typically you should include the address of this device")) +s.anonymous = true +s.addremove = true +s.template = "cbi/tblsection" + +s:option(Value, "ip", translate("IP Address")).rmempty = true +s.datatype = "ipaddr" + +--[[Routes]]-- + +s = m:section(TypedSection, "routes", translate("Routing table"), + translate("The routing table to be provided to clients; you can mix IPv4 and IPv6 routes, the server will send only the appropriate. Leave empty to set a default route")) +s.anonymous = true +s.addremove = true +s.template = "cbi/tblsection" + +s:option(Value, "ip", translate("IP Address")).rmempty = true + +o = s:option(Value, "netmask", translate("Netmask (or IPv6-prefix)")) +o.default = "255.255.255.0" +o:value("255.255.255.0") +o:value("255.255.0.0") +o:value("255.0.0.0") + + +return m diff --git a/feeds/luci/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/user-config.lua b/feeds/luci/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/user-config.lua new file mode 100644 index 0000000..c50cb39 --- /dev/null +++ b/feeds/luci/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/user-config.lua @@ -0,0 +1,139 @@ +-- Copyright 2014 Nikos Mavrogiannopoulos +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local has_ipv6 = fs.access("/proc/net/ipv6_route") + +m = Map("ocserv", translate("OpenConnect VPN")) + +s = m:section(TypedSection, "ocserv", "OpenConnect") +s.anonymous = true + +s:tab("general", translate("General Settings")) +s:tab("ca", translate("CA certificate")) +s:tab("template", translate("Edit Template")) + +local e = s:taboption("general", Flag, "enable", translate("Enable server")) +e.rmempty = false +e.default = "1" + +function m.on_commit(map) + luci.sys.call("/usr/bin/occtl reload >/dev/null 2>&1") +end + +function e.write(self, section, value) + if value == "0" then + luci.sys.call("/etc/init.d/ocserv stop >/dev/null 2>&1") + luci.sys.call("/etc/init.d/ocserv disable >/dev/null 2>&1") + else + luci.sys.call("/etc/init.d/ocserv enable >/dev/null 2>&1") + luci.sys.call("/etc/init.d/ocserv restart >/dev/null 2>&1") + end + Flag.write(self, section, value) +end + +local o + +o = s:taboption("general", ListValue, "auth", translate("User Authentication"), + translate("The authentication method for the users. The simplest is plain with a single username-password pair. Use PAM modules to authenticate using another server (e.g., LDAP, Radius).")) +o.rmempty = false +o.default = "plain" +o:value("plain") +o:value("PAM") + +o = s:taboption("general", Value, "zone", translate("Firewall Zone"), + translate("The firewall zone that the VPN clients will be set to")) +o.nocreate = true +o.default = "lan" +o.template = "cbi/firewall_zonelist" + +s:taboption("general", Value, "port", translate("Port"), + translate("The same UDP and TCP ports will be used")) +s:taboption("general", Value, "max_clients", translate("Max clients")) +s:taboption("general", Value, "max_same", translate("Max same clients")) +s:taboption("general", Value, "dpd", translate("Dead peer detection time (secs)")) + +local pip = s:taboption("general", Flag, "predictable_ips", translate("Predictable IPs"), + translate("The assigned IPs will be selected deterministically")) +pip.default = "1" + +local udp = s:taboption("general", Flag, "udp", translate("Enable UDP"), + translate("Enable UDP channel support; this must be enabled unless you know what you are doing")) +udp.default = "1" + +local cisco = s:taboption("general", Flag, "cisco_compat", translate("AnyConnect client compatibility"), + translate("Enable support for CISCO AnyConnect clients")) +cisco.default = "1" + +ipaddr = s:taboption("general", Value, "ipaddr", translate("VPN IPv4-Network-Address")) +ipaddr.default = "192.168.100.1" +ipaddr.datatype = "ip4addr" + +nm = s:taboption("general", Value, "netmask", translate("VPN IPv4-Netmask")) +nm.default = "255.255.255.0" +nm.datatype = "ip4addr" +nm:value("255.255.255.0") +nm:value("255.255.0.0") +nm:value("255.0.0.0") + +if has_ipv6 then + ip6addr = s:taboption("general", Value, "ip6addr", translate("VPN IPv6-Network-Address"), translate("CIDR-Notation: address/prefix")) +end + + +tmpl = s:taboption("template", Value, "_tmpl", + translate("Edit the template that is used for generating the ocserv configuration.")) + +tmpl.template = "cbi/tvalue" +tmpl.rows = 20 + +function tmpl.cfgvalue(self, section) + return nixio.fs.readfile("/etc/ocserv/ocserv.conf.template") +end + +function tmpl.write(self, section, value) + value = value:gsub("\r\n?", "\n") + nixio.fs.writefile("/etc/ocserv/ocserv.conf.template", value) +end + +ca = s:taboption("ca", Value, "_ca", + translate("View the CA certificate used by this server. You will need to save it as 'ca.pem' and import it into the clients.")) + +ca.template = "cbi/tvalue" +ca.rows = 20 + +function ca.cfgvalue(self, section) + return nixio.fs.readfile("/etc/ocserv/ca.pem") +end + +--[[DNS]]-- + +s = m:section(TypedSection, "dns", translate("DNS servers"), + translate("The DNS servers to be provided to clients; can be either IPv6 or IPv4")) +s.anonymous = true +s.addremove = true +s.template = "cbi/tblsection" + +s:option(Value, "ip", translate("IP Address")).rmempty = true +s.datatype = "ipaddr" + +--[[Routes]]-- + +s = m:section(TypedSection, "routes", translate("Routing table"), + translate("The routing table to be provided to clients; you can mix IPv4 and IPv6 routes, the server will send only the appropriate. Leave empty to set a default route")) +s.anonymous = true +s.addremove = true +s.template = "cbi/tblsection" + +s:option(Value, "ip", translate("IP Address")).rmempty = true +s.datatype = "ipaddr" + +o = s:option(Value, "netmask", translate("Netmask (or IPv6-prefix)")) +o.default = "255.255.255.0" + +o:value("255.255.255.0") +o:value("255.255.0.0") +o:value("255.0.0.0") + + +return m diff --git a/feeds/luci/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua b/feeds/luci/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua new file mode 100644 index 0000000..0fa997c --- /dev/null +++ b/feeds/luci/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua @@ -0,0 +1,75 @@ +-- Copyright 2014 Nikos Mavrogiannopoulos +-- Licensed to the public under the Apache License 2.0. + +local dsp = require "luci.dispatcher" +local nixio = require "nixio" + +m = Map("ocserv", translate("OpenConnect VPN")) + +if m.uci:get("ocserv", "config", "auth") == "plain" then + +--[[Users]]-- + +function m.on_commit(map) + luci.sys.call("/etc/init.d/ocserv restart >/dev/null 2>&1") +end + +s = m:section(TypedSection, "ocservusers", translate("Available users")) +s.anonymous = true +s.addremove = true +s.template = "cbi/tblsection" + +s:option(Value, "name", translate("Name")).rmempty = true +s:option(DummyValue, "group", translate("Group")).rmempty = true +pwd = s:option(Value, "password", translate("Password")) +pwd.password = false + +function pwd.write(self, section, value) + local pass + if string.match(value, "^\$%d\$.*") then + pass = value + else + local t = tonumber(nixio.getpid()*os.time()) + local salt = "$1$" .. t .. "$" + pass = nixio.crypt(value, salt) + end + Value.write(self, section, pass) +end + +--[[if plain]]-- +end + +local lusers = { } +local fd = io.popen("/usr/bin/occtl show users", "r") +if fd then local ln + repeat + ln = fd:read("*l") + if not ln then break end + + local id, user, group, vpn_ip, ip, device, time, cipher, status = + ln:match("^%s*(%d+)%s+([-_%w]+)%s+([%(%)%.%*-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%(%)%:%.-_%w]+)%s+([%:%.-_%w]+).*") + if id then + table.insert(lusers, {id, user, group, vpn_ip, ip, device, time, cipher, status}) + end + until not ln + fd:close() +end + + +--[[Active Users]]-- + +local s = m:section(Table, lusers, translate("Active users")) +s.anonymous = true +s.template = "cbi/tblsection" + +s:option(DummyValue, 1, translate("ID")) +s:option(DummyValue, 2, translate("Username")) +s:option(DummyValue, 3, translate("Group")) +s:option(DummyValue, 4, translate("IP")) +s:option(DummyValue, 5, translate("VPN IP")) +s:option(DummyValue, 6, translate("Device")) +s:option(DummyValue, 7, translate("Time")) +s:option(DummyValue, 8, translate("Cipher")) +s:option(DummyValue, 9, translate("Status")) + +return m diff --git a/feeds/luci/applications/luci-app-ocserv/luasrc/view/admin_status/index/ocserv.htm b/feeds/luci/applications/luci-app-ocserv/luasrc/view/admin_status/index/ocserv.htm new file mode 100644 index 0000000..4575806 --- /dev/null +++ b/feeds/luci/applications/luci-app-ocserv/luasrc/view/admin_status/index/ocserv.htm @@ -0,0 +1 @@ +<%+ocserv_status%> diff --git a/feeds/luci/applications/luci-app-ocserv/luasrc/view/ocserv_status.htm b/feeds/luci/applications/luci-app-ocserv/luasrc/view/ocserv_status.htm new file mode 100644 index 0000000..03a9ed7 --- /dev/null +++ b/feeds/luci/applications/luci-app-ocserv/luasrc/view/ocserv_status.htm @@ -0,0 +1,76 @@ + + +
+ <%:Active OpenConnect Users%> + + + + + + + + + + + + + + + +
<%:User%><%:Group%><%:IP Address%><%:VPN IP Address%><%:Device%><%:Time%><%:Cipher%><%:Status%> 

<%:Collecting data...%>
+
diff --git a/feeds/luci/applications/luci-app-olsr-services/Makefile b/feeds/luci/applications/luci-app-olsr-services/Makefile new file mode 100644 index 0000000..b1daf6d --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr-services/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Show services announced with the nameservice plugin +LUCI_DEPENDS:=+luci-app-olsr +olsrd +olsrd-mod-nameservice + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-olsr-services/luasrc/controller/services.lua b/feeds/luci/applications/luci-app-olsr-services/luasrc/controller/services.lua new file mode 100644 index 0000000..a4636bf --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr-services/luasrc/controller/services.lua @@ -0,0 +1,16 @@ +module "luci.controller.services" + +function index() + local uci = require "luci.model.uci".cursor() + + uci:foreach("olsrd", "LoadPlugin", function(s) + if s.library == "olsrd_nameservice.so.0.3" then + has_serv = true + end + end) + + if has_serv then + entry({"freifunk", "services"}, template("freifunk-services/services"), _("Services"), 60) + end +end + diff --git a/feeds/luci/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm b/feeds/luci/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm new file mode 100644 index 0000000..476150d --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm @@ -0,0 +1,193 @@ +<%# + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<% +local fs = require "nixio.fs" +local utl = require "luci.util" +local last_update +local i = 1 +local rawdata +local rawdata6 +local services_file_empty = true +local has_services = false +local uci = require "luci.model.uci".cursor() +local ip = require "luci.ip" + +uci:foreach("olsrd", "LoadPlugin", function(s) + if s.library == "olsrd_nameservice.so.0.3" then + local services_file=s.services_file + if services_file and fs.access(services_file) then + has_services = true + rawdata = fs.readfile(s.services_file) + else + services_file="/var/run/services_olsr" + if fs.access(services_file) then + has_services = true + rawdata = fs.readfile(services_file) + end + end + services_file=services_file..".ipv6" + if services_file and fs.access(services_file) then + has_services = true + rawdata6 = fs.readfile(services_file) + else + services_file="/var/run/services_olsr.ipv6" + if fs.access(services_file) then + has_services = true + rawdata6 = fs.readfile(services_file) + end + end + if rawdata and #rawdata ~= 0 then + services_file_empty = nil + end + if rawdata6 and #rawdata6 ~= 0 then + services_file_empty = nil + end + end +end) + + +if not has_services or services_file_empty then +%> + <%+header%> +
+ <%:No services can be shown, because olsrd is not running or the olsrd-nameservice Plugin is not loaded.%> + <%+footer%> +<% + return +end + +function fetch_services() + local tables = {} + if rawdata and #rawdata ~= 0 then + tables = utl.split(utl.trim(rawdata), "\n", nil, true) + -- remove first 3 lines + for i = 1,3 do + table.remove(tables,1) + end + end + local tables6 = {} + if rawdata6 and #rawdata6 ~= 0 then + tables6 = utl.split(utl.trim(rawdata6), "\n", nil, true) + -- remove first 3 lines + for i = 1,3 do + table.remove(tables6,1) + end + end + + -- store last line in last_update and remove it, then remove another empty line at the end + last_update=table.remove(tables) + table.remove(tables) + last_update=table.remove(tables6) + table.remove(tables6) + for k, v in ipairs(tables6) do + table.insert(tables, v) + end + return tables +end +local services = fetch_services() + +if luci.http.formvalue("status") == "1" then + local rv = {} + for k, line in ipairs(services) do + local field = utl.split(line, "[#|]", split, true) + local origin_lnk = ip.IPv6(pcdata(field[4])) + local origin_link = "" + if origin_lnk and origin_lnk:is6() then + origin_link = "["..origin_lnk:string().."]" + else + origin_link = pcdata(field[4]) + end + local url, proto, descr, origin = pcdata(field[1]), pcdata(field[2]), utl.trim(pcdata(field[3])), pcdata(field[4]) + rv[#rv+1] = { + url = url, + proto = proto, + origin = origin, + origin_link = origin_link, + descr = descr, + } + end + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + return +end + +%> + +<%+header%> + + + + + + + +

<%:Services%>

+ +
+ <%:Internal services%> + + + + + + + + + + + <% + for k, line in ipairs(services) do + local field = {} + -- split line at # and |, 1=url, 2=proto, 3=description, 4=source + local field = utl.split(line, "[#|]", split, true) + local origin_lnk = ip.IPv6(pcdata(field[4])) + local origin_link + if origin_lnk and origin_lnk:is6() then + origin_link = "["..origin_lnk:string().."]" + else + origin_link = pcdata(field[4]) + end + local url, proto, descr, origin = pcdata(field[1]), pcdata(field[2]), utl.trim(pcdata(field[3])), pcdata(field[4]) + %> + + + + + + + <% i = ((i % 2) + 1) + end %> + +
<%:Url%><%:Protocol%><%:Source%>
<%=descr%><%=proto%><%=origin%>
+
+ <%=last_update%> +
+<%+footer%> diff --git a/feeds/luci/applications/luci-app-olsr-viz/Makefile b/feeds/luci/applications/luci-app-olsr-viz/Makefile new file mode 100644 index 0000000..e1a1185 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr-viz/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=OLSR Visualisation +LUCI_DEPENDS:=+luci-app-olsr +olsrd +olsrd-mod-txtinfo + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-olsr-viz/htdocs/cgi-bin/olsr-viz.sh b/feeds/luci/applications/luci-app-olsr-viz/htdocs/cgi-bin/olsr-viz.sh new file mode 100755 index 0000000..e33c632 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr-viz/htdocs/cgi-bin/olsr-viz.sh @@ -0,0 +1,40 @@ +#!/bin/sh +echo Content-type: text/html +echo + +cat << EOF + + +
+
+
+
+
+
+

Zoom +    +|  Metrik +    +|  Optimierung  +|  Hostnamen  +|  Speichern  +|  Zurücksetzen

+
+ + + +EOF diff --git a/feeds/luci/applications/luci-app-olsr-viz/htdocs/cgi-bin/vizdata.sh b/feeds/luci/applications/luci-app-olsr-viz/htdocs/cgi-bin/vizdata.sh new file mode 100755 index 0000000..5a74f2b --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr-viz/htdocs/cgi-bin/vizdata.sh @@ -0,0 +1,48 @@ +#!/bin/sh +echo Content-type: text/html +echo + +cat< + + OLSR-VIZ Data + + + + + + + +EOF diff --git a/feeds/luci/applications/luci-app-olsr-viz/htdocs/luci-static/resources/olsr-viz.js b/feeds/luci/applications/luci-app-olsr-viz/htdocs/luci-static/resources/olsr-viz.js new file mode 100644 index 0000000..49435a4 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr-viz/htdocs/luci-static/resources/olsr-viz.js @@ -0,0 +1,818 @@ +/* +Copyright (c) 2006, Lorenz Schori +All rights reserved (Naja: Ich hab' trotzdem was geaendert. Sven-Ola). (Naja: +diese Rechte garantiert dir die BSD-Lizenz ja ausdrücklich. Lorenz) + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +OLSR-Viz is inspired by Wi-viz: http://wiviz.natetrue.com + +Changes: +2007-10-04: Added hostname display option -- Stefan Katerkamp . +2007-10-04: Optimized display by moving presentation css out of js -- lo +2010-12-11: Changed some paths to make it work with Kamikaze and Luci -- soma +*/ + +var cgi_url = "/cgi-bin/vizdata.sh"; + +var maxmetric = 3; +var iconvariant = "-mini"; +var nodes = new Array(); +var ncount = 0; +var newnodes = new Array(); +var edges = new Array(); +var iel = 220; // ideal edge length +var optsize = 10; // boundingbox around nodes + +var vwidth = 0; +var vheight = 0; + +var xoff = 0; +var yoff = 0; +var scale = 1.0; + +var idle_timeout = 15; +var erase_timeout = 60; +var dcl_timeout = 250; +var dcllow_timeout = 500; +var auto_declump = true; +var showdesc = true; +var auto_save = 1; +var now_secs = 5; + +// dom elements +var IFrameObj; +var maindiv; +var nodediv; +var edgediv; + +/******* CALL TO SERVER ********/ +function callToServer(URL) { + var IFrameDoc; + + if (IFrameObj.document) { + // For IE5 + opera + IFrameDoc = IFrameObj.document; + } + else if (IFrameObj.contentDocument) { + // For NS6 + IFrameDoc = IFrameObj.contentDocument; + } + else if (IFrameObj.contentWindow) { + // For IE5.5 and IE6 + IFrameDoc = IFrameObj.contentWindow.document; + } + else { + // opera? hmmmm + return true; + } + + IFrameDoc.location.replace(URL); + return false; +} + + +/******** EDGE CLASS ********/ +function edge(n1,n2){ + this.getHTML = function() + { + var nh = ""; + + if(this.n1.metric > maxmetric || this.n2.metric > maxmetric) { + return ""; + } + + x = this.n1.x*scale; + y = this.n1.y*scale; + dx = this.n2.x*scale - x; + dy = this.n2.y*scale - y; + + x += xoff*scale + 75; + y += yoff*scale + 15; + + imgtag = " 2 && this.etx < 5) { + imgtag += "ok.gif'"; + } + else if(this.etx > 5 && this.etx < 10) { + imgtag += "weak.gif'"; + } + else { + imgtag += "down.gif'"; + } + imgtag += " alt='ETX: " + this.etx + "' title='ETX: " + this.etx + "' "; + + d = Math.sqrt(dx*dx+dy*dy); + + for (j = 0; j < d; j += 15) { + nh += imgtag + "style='top:" + + parseInt(y+dy * j / d) + "px; left:" + + parseInt(x+dx * j / d) + "px; " + + "width: 4px; height: 4px; position: absolute; z-index: 2' >"; + } + + nh += "
" + + "" + this.etx + "
"; + + return nh; + } + + this.isIdle = function() + { + return (now_secs - this.lastseen > idle_timeout); + } + + this.isDead = function() + { + return (now_secs - this.lastseen > erase_timeout); + } + + this.cleanup = function() + { + if(this.n1 && this.n1.weight) { + this.n1.weight--; + } + if(this.n2 && this.n2.weight) { + this.n2.weight--; + } + if(this.n1 && this.n2) { + delete this.n1.edges[n2.ip]; + delete this.n2.edges[n1.ip]; + } + } + + this.n1 = n1; + this.n2 = n2; + + // setup edges within node objects + this.n1.weight++; + this.n1.edges[n2.ip] = this; + this.n2.weight++; + this.n2.edges[n1.ip] = this; + + return this; +} + +function getEdgeKey(ip1,ip2) +{ + key = ""; + if(ip1 > ip2) { + key = ip2 + "-" + ip1; + } + else { + key = ip1 + "-" + ip2; + } + return key; +} + +function touch_edge(n1,n2,etx) +{ + var key = getEdgeKey(n1.ip,n2.ip); + var e = edges[key]; + if(!e) { + e = new edge(n1,n2); + edges[key] = e; + } + e.etx = etx; + e.lastseen = now_secs; + return e; +} + +/******** NODE CLASS ********/ +function node(ip) { + this.getHTML = function() + { + var nh; + + if(this.metric > maxmetric) { + return ""; + } + var igw = 0; + for(h in this.hna) { + if(h == "0.0.0.0") { + igw = 1; + break; + } + } + nh = + "
" + + "
node " + this.ip + "
" + + "" + + "" + this.ip + "" + + (showdesc && this.desc != "" ? + "
" + this.desc + "" : "") + + "
"; + return nh; + } + + this.isIdle = function() + { + return (now_secs - this.lastseen > idle_timeout); + } + + this.isDead = function() + { + return (now_secs - this.lastseen > erase_timeout); + } + + this.cleanup = function() + { + ncount--; + } + + this.set_metric = function(metric) { + this.metric = metric; + return this; + } + + this.set_desc = function(desc) { + this.desc = desc + return this; + } + + this.update = function() { + this.lastseen = now_secs; + return this; + } + + this.ip = ip; + this.x = 0; + this.y = 0; + this.dx_last=0; + this.dy_last=0; + this.placed = false; + this.weight = 0; + this.edges = new Array(); + this.hna = new Array(); + this.pinned = false; + this.metric = 999; + this.desc = ""; + + ncount++; + return this; +} + +function touch_node(ip) { + n = nodes[ip]; + if(!n) { + n = new node(ip); + nodes[ip] = n; + // newnodes.push(n); + // push and pop not supported in old ie. shit. + newnodes[newnodes.length] = n; + } + return n; +} + +function place_new_nodes() { + var nc = 0; + for(i = 0;i1){ + // see if we find allredy placed nodes + ox=0,oy=0;dx=0,dy=0;c=0; + for(e in n.edges){ + if(nodes[e] && nodes[e].placed){ + if(!ox && !oy) { + ox = nodes[e].x; + oy = nodes[e].y; + } + else { + dx += nodes[e].x - ox; + dy += nodes[e].y - oy; + } + c++; + } + } + if(c>0) { + n.x = ox + dx/c + Math.random()*iel/2-iel/4; + n.y = oy + dy/c + Math.random()*iel/2-iel/4; + } + } + else { + // beginn somewhere + n.x = Math.random()*400; + n.y = Math.random()*400; + } + n.placed = true; + nc++; + } + newnodes.length=0; + return nc; +} + +/******** HNA CLASS ********/ +function hna(gw,net,mask) { + this.gw = gw; + this.net = net; + this.mask = mask; + return this; +} + +function touch_hna(node,net,mask) { + h = node.hna[net]; + if(!h) { + h = new hna(node.ip,net,mask); + node.hna[net] = h; + } + + h.lastseen = now_secs; + return h; +} + +/******** VIZ SETUP AND SETTINGS ********/ +function viz_setup(iframeid,maindivid,nodedivid,edgedivid) { + // assign a reference to the + // object to our global variable IFrameObj. + IFrameObj=document.getElementById(iframeid); + if (document.frames) { + // this is for IE5 Mac, because it will only + // allow access to the document object + // of the IFrame if we access it through + // the document.frames array + IFrameObj = document.frames[iframeid]; + } + + draginit(); + + maindiv=document.getElementById(maindivid); + nodediv=document.getElementById(nodedivid); + edgediv=document.getElementById(edgedivid); + + // autosave on exit? + if((autosave = getCookie("prefs_autosave"))) { + auto_save = parseInt(autosave); + } + viz_autosave(auto_save); + + // maximum metric of surrounding nodes + if(mmx = getCookie("prefs_maxmetric")) { + set_maxmetric(mmx,true,true); + } + + // scale of view + if((savescale = getCookie("prefs_scale")) && + (savescale = parseFloat(savescale))) { + set_scale(savescale,true); + } + + // scroll - FIXME + /* + if(val = getCookie("prefs_innerview")) { + iv = val.split("x"); + if (iv[0] && (iv[0] = parseInt(iv[0])) && + iv[1] && (iv[2] = parseInt(iv[2])) && + iv[3] && (iv[3] = parseInt(iv[3])) && + iv[4] && (iv[4] = parseInt(iv[4]))) + { + maindiv.scrollLeft = iv[0] + "px"; + maindiv.scrollHeight = iv[1] + "px"; + } + } + */ +} + +function viz_save() +{ + // let cookie survive a month + exp = new Date(); + exp.setTime(exp.getTime() + 2592000000); + // save node positions + for(ip in nodes) + { + if(nodes[ip].metric > maxmetric) { + continue; + } + setCookie("node_"+ip,nodes[ip].x+"x"+nodes[ip].y,exp); + } + + // save maxmetric + setCookie("prefs_maxmetric",maxmetric,exp); + + // save zooming + setCookie("prefs_scale",scale,exp); + + // save scroll - FIXME + setCookie("prefs_innerview", + parseInt(maindiv.scrollLeft)+"x"+parseInt(maindiv.scrollTop)+"x"+ + parseInt(vwidth*scale)+"x"+parseInt(vheight*scale),exp); +} + +function viz_autosave(autosave) +{ + auto_save = autosave; + if(auto_save) { + document.body.onunload=viz_save; + } + else { + deleteCookie("prefs_autosave"); + } +} + +function viz_reset() +{ + deleteAllCookies(); + for(ip in nodes) { + delete nodes[ip]; + } + for(e in edges) { + delete edges[e]; + } + viz_update(); +} + +var updateTimer = 0; +function viz_update() { + if (updateTimer) { + clearTimeout(updateTimer); + } + now_secs = new Date().getTime()/1000; + callToServer(cgi_url); +} + +function viz_callback() { + if (updateTimer) { + clearTimeout(updateTimer); + } + + if(place_new_nodes() > 0 && auto_declump) { + declump(); + } + refresh(); + updateTimer = setTimeout('viz_update()', 5000); +} + +var refresh_running = false; +function refresh() { + if(refresh_running) { + return; + } + refresh_running = true; + + var nh = ""; + + // refresh nodes + nh = ""; + for (var n in nodes) { + if(nodes[n].isDead()) { + nodes[n].cleanup(); + delete nodes[n]; + } + else { + nh += nodes[n].getHTML(); + } + } + nodediv.innerHTML = nh; + + // refresh edges + + nh = ""; + for (var e in edges) { + if(edges[e].isDead()) { + edges[e].cleanup(); + delete edges[e]; + } + else { + nh += edges[e].getHTML(); + } + } + edgediv.innerHTML = nh; + refresh_running = false; +} + +function set_showdesc(doit) +{ + showdesc = doit; + if(!noupdate) refresh(); +} + +function set_autodeclump(doit) +{ + auto_declump = doit; + if(doit) { + declump(); + } + else { + clearTimeout(dclTimer); + } +} + +function set_scale(inscale,noupdate) +{ + if(!inscale) { + inscale = parseFloat(document.getElementById("zoom").value/2); + } + scale = Math.round(inscale*100)/100; + if(!scale || scale<0.1) { + scale = 0.1; + } + document.getElementById("zoom").value = scale*2; + if(!noupdate) refresh(); +} + +function set_maxmetric(inmetric,noupdate,noconfirm) +{ + inmetric = parseInt(inmetric); + if(inmetric > 0 || !noconfirm || confirm("warning. setting the maximum metric to zero can lead to expensive calculations if you are connected to a network with many nodes. do you want to proceed?")) { + maxmetric = inmetric; + } + document.getElementById("maxmetric").value = maxmetric; + if(!noupdate) refresh(); +} + +// k = area / nodes +function fr(x) { + return Math.pow((iel*iel)/x,2); +} + +function fa(x) { + return Math.pow((x*x)/iel,2); +} + +var dclTimer = 0; +var declump_running = false; +function declump(t) { + // clear declump timer + if(dclTimer) { + clearTimeout(dclTimer); + } + if(declump_running) { + return; + } + declump_running = true; + + // nodes + nc = 0; + for (var ip1 in nodes) { + nodes[ip1].fr_x=0; + nodes[ip1].fr_y=0; + nodes[ip1].fa_x=0; + nodes[ip1].fa_y=0; + nodes[ip1].x_next = nodes[ip1].x; + nodes[ip1].y_next = nodes[ip1].y; + nodes[ip1].randdisplace = 0; + } + for (var ip1 in nodes) { + if(nodes[ip1].metric > maxmetric || nodes[ip1].pinned) { + continue; + } + for (ip2 in nodes) { + if (nodes[ip2].metric > maxmetric || ip1 == ip2) { + continue; + } + dx = (nodes[ip1].x_next - nodes[ip2].x_next); + dy = (nodes[ip1].y_next - nodes[ip2].y_next); + d = Math.sqrt(dx*dx+dy*dy); + d = Math.max(d-optsize,(d+optsize)/optsize); + + nodes[ip1].fr_x += (dx/d) * fr(d); + nodes[ip1].fr_y += (dy/d) * fr(d); + } + + dx = nodes[ip1].fr_x; + dy = nodes[ip1].fr_y; + d = Math.sqrt(dx*dx+dy*dy); + md = Math.min(d,iel/nodes[ip1].weight); + nodes[ip1].x_next += (dx / d) * md; + nodes[ip1].y_next += (dy / d) * md; + nc++; + } + + // edges + ec = 0; + for (var e in edges) { + if (!edges[e].n1 || !edges[e].n2 || + edges[e].n1.metric > maxmetric || edges[e].n2.metric > maxmetric) { + continue; + } + dx = (edges[e].n1.x_next - edges[e].n2.x_next); + dy = (edges[e].n1.y_next - edges[e].n2.y_next); + d = Math.sqrt(dx*dx+dy*dy); +// d = Math.max(d-optsize,(d+optsize)/optsize); + + edges[e].n1.fa_x -= (dx/d) * fa(d); + edges[e].n1.fa_y -= (dy/d) * fa(d); + edges[e].n2.fa_x += (dx/d) * fa(d); + edges[e].n2.fa_y += (dy/d) * fa(d); + ec++; + } + + // displacement + xmin=-20;ymin=-20;xmax=20;ymax=20;dsum=0; + for (var ip in nodes) { + if(nodes[ip].metric > maxmetric || nodes[ip].pinned) { + continue; + } + + dx = nodes[ip].fa_x; + dy = nodes[ip].fa_y; + d = Math.sqrt(dx*dx+dy*dy); + dx = (dx / d) * Math.min(d,iel/nodes[ip].weight) * 0.75 + nodes[ip].dx_last * 0.25; + dy = (dy / d) * Math.min(d,iel/nodes[ip].weight) * 0.75 + nodes[ip].dy_last * 0.25; + + nodes[ip].dx_last = dx; + nodes[ip].dy_last = dy; + nodes[ip].x_next += dx; + nodes[ip].y_next += dy; + + if(!nodes[ip].x_next || !nodes[ip].y_next) { + continue; + } + + dx = (nodes[ip].x - nodes[ip].x_next); + dy = (nodes[ip].y - nodes[ip].y_next); + dsum += Math.sqrt(dx*dx+dy*dy); + + nodes[ip].x = nodes[ip].x_next; + nodes[ip].y = nodes[ip].y_next; + + xmin = Math.min(xmin,nodes[ip].x); + xmax = Math.max(xmax,nodes[ip].x); + ymin = Math.min(ymin,nodes[ip].y); + ymax = Math.max(ymax,nodes[ip].y); + } + vwidth=(xmax-xmin); + vheight=(ymax-ymin); + + xoff=-xmin; + yoff=-ymin; + /* + document.getElementById('debug').innerHTML = "
" + + "offset: " + xoff + "x" + yoff + " dsum: " + dsum + "
" + + "nc: " + nc + " ec: " + ec + "xmax: " + xmax + " xmin: " + xmin + "
" + + "optsize: " + optsize + "
"; + */ + refresh(); + if(auto_declump) { + dclTimer = setTimeout("declump()", dsum>ncount ? dcl_timeout : dcllow_timeout ); + } + declump_running = false; +} + +//Das Objekt, das gerade bewegt wird. +var dragip = null; + +// Position, an der das Objekt angeklickt wurde. +var dragx = 0; +var dragy = 0; + +// Mausposition +var posx = 0; +var posy = 0; + +function draginit() { + // Initialisierung der ãberwachung der Events + + document.onmousemove = drag; + document.onmouseup = dragstop; +} + + +function dragstart(element) { + //Wird aufgerufen, wenn ein Objekt bewegt werden soll. + dragip = element.id.split("_")[1]; + dragx = posx - element.offsetLeft; + dragy = posy - element.offsetTop; + + n = nodes[dragip]; + if(n) { + n.pinned = true; + } +} + + +function dragstop() { + //Wird aufgerufen, wenn ein Objekt nicht mehr bewegt werden soll. + + n = nodes[dragip]; + if(n) { + n.pinned = false; + } + refresh(); + dragip=null; +} + + +function drag(ereignis) { + //Wird aufgerufen, wenn die Maus bewegt wird und bewegt bei Bedarf das Objekt. + + posx = document.all ? window.event.clientX : ereignis.pageX; + posy = document.all ? window.event.clientY : ereignis.pageY; + if(dragip != null) { + n = nodes[dragip]; + if(n) { + n.x = (posx - dragx)/scale - xoff; + n.y = (posy - dragy)/scale - yoff; + } + e = document.getElementById('node_'+dragip); + e.style.left = parseInt((n.x+xoff)*scale) + "px"; + e.style.top = parseInt((n.y+yoff)*scale) + "px"; + } +} + +function debug_writeln(line) +{ + document.getElementById('debug').innerHTML = line + "
" + document.getElementById('debug').innerHTML; +} + +/** + * Sets a Cookie with the given name and value. + * + * name Name of the cookie + * value Value of the cookie + * [expires] Expiration date of the cookie (default: end of current session) + * [path] Path where the cookie is valid (default: path of calling document) + * [domain] Domain where the cookie is valid + * (default: domain of calling document) + * [secure] Boolean value indicating if the cookie transmission requires a + * secure transmission + */ + +function setCookie(name, value, expires, path, domain, secure) { + document.cookie= name + "=" + escape(value) + + ((expires) ? "; expires=" + expires.toGMTString() : "") + + ((path) ? "; path=" + path : "") + + ((domain) ? "; domain=" + domain : "") + + ((secure) ? "; secure" : ""); +} + +/** + * Gets the value of the specified cookie. + * + * name Name of the desired cookie. + * + * Returns a string containing value of specified cookie, + * or null if cookie does not exist. + */ + +function getCookie(name) +{ + var results = document.cookie.match ( name + '=(.*?)(;|$)' ); + if (results) { + return unescape(results[1]); + } + return null; +} + +/** + * Deletes the specified cookie. + * + * name name of the cookie + * [path] path of the cookie (must be same as path used to create cookie) + * [domain] domain of the cookie (must be same as domain used to create cookie) + */ + +function deleteCookie(name, path, domain) { + if (getCookie(name)) { + document.cookie = name + "=" + + ((path) ? "; path=" + path : "") + + ((domain) ? "; domain=" + domain : "") + + "; expires=Thu, 01-Jan-70 00:00:01 GMT"; + } +} + +function deleteAllCookies() { + cookies = document.cookie.split("; "); + for(i=0;i + + + + +<%+footer%> diff --git a/feeds/luci/applications/luci-app-olsr/Makefile b/feeds/luci/applications/luci-app-olsr/Makefile new file mode 100644 index 0000000..93815a5 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=OLSR configuration and status module +LUCI_DEPENDS:=+olsrd +olsrd-mod-jsoninfo +luci-lib-luaneightbl +luci-lib-json + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-olsr/htdocs/cgi-bin-nodes.html b/feeds/luci/applications/luci-app-olsr/htdocs/cgi-bin-nodes.html new file mode 120000 index 0000000..80d235f --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/htdocs/cgi-bin-nodes.html @@ -0,0 +1 @@ +cgi-bin-status.html \ No newline at end of file diff --git a/feeds/luci/applications/luci-app-olsr/htdocs/cgi-bin-status.html b/feeds/luci/applications/luci-app-olsr/htdocs/cgi-bin-status.html new file mode 100644 index 0000000..0270f4a --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/htdocs/cgi-bin-status.html @@ -0,0 +1,10 @@ + + + + + + + +LuCI - Lua Configuration Interface + + diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/controller/olsr.lua b/feeds/luci/applications/luci-app-olsr/luasrc/controller/olsr.lua new file mode 100644 index 0000000..0564bd4 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/controller/olsr.lua @@ -0,0 +1,425 @@ +module("luci.controller.olsr", package.seeall) + +local neigh_table = nil +local ifaddr_table = nil + +function index() + local ipv4,ipv6 + if nixio.fs.access("/etc/config/olsrd") then + ipv4 = 1 + end + if nixio.fs.access("/etc/config/olsrd6") then + ipv6 = 1 + end + if not ipv4 and not ipv6 then + return + end + + require("luci.model.uci") + local uci = luci.model.uci.cursor_state() + + uci:foreach("olsrd", "olsrd", function(s) + if s.SmartGateway and s.SmartGateway == "yes" then has_smartgw = true end + end) + + local page = node("admin", "status", "olsr") + page.target = template("status-olsr/overview") + page.title = _("OLSR") + page.subindex = true + + local page = node("admin", "status", "olsr", "json") + page.target = call("action_json") + page.title = nil + page.leaf = true + + local page = node("admin", "status", "olsr", "neighbors") + page.target = call("action_neigh") + page.title = _("Neighbours") + page.subindex = true + page.order = 5 + + local page = node("admin", "status", "olsr", "routes") + page.target = call("action_routes") + page.title = _("Routes") + page.order = 10 + + local page = node("admin", "status", "olsr", "topology") + page.target = call("action_topology") + page.title = _("Topology") + page.order = 20 + + local page = node("admin", "status", "olsr", "hna") + page.target = call("action_hna") + page.title = _("HNA") + page.order = 30 + + local page = node("admin", "status", "olsr", "mid") + page.target = call("action_mid") + page.title = _("MID") + page.order = 50 + + if has_smartgw then + local page = node("admin", "status", "olsr", "smartgw") + page.target = call("action_smartgw") + page.title = _("SmartGW") + page.order = 60 + end + + local page = node("admin", "status", "olsr", "interfaces") + page.target = call("action_interfaces") + page.title = _("Interfaces") + page.order = 70 + + odsp = entry( + {"admin", "services", "olsrd", "display"}, + cbi("olsr/olsrddisplay"), _("Display") + ) + +end + +function action_json() + local http = require "luci.http" + local utl = require "luci.util" + local uci = require "luci.model.uci".cursor() + local jsonreq4 + local jsonreq6 + + local v4_port = uci:get("olsrd", "olsrd_jsoninfo", "port") or 9090 + local v6_port = uci:get("olsrd6", "olsrd_jsoninfo", "port") or 9090 + + jsonreq4 = utl.exec("(echo /status | nc 127.0.0.1 " .. v4_port .. " | sed -n '/^[}{ ]/p') 2>/dev/null" ) + jsonreq6 = utl.exec("(echo /status | nc ::1 " .. v6_port .. " | sed -n '/^[}{ ]/p') 2>/dev/null") + http.prepare_content("application/json") + if not jsonreq4 or jsonreq4 == "" then + jsonreq4 = "{}" + end + if not jsonreq6 or jsonreq6 == "" then + jsonreq6 = "{}" + end + http.write('{"v4":' .. jsonreq4 .. ', "v6":' .. jsonreq6 .. '}') +end + + +local function local_mac_lookup(ipaddr) + local _, ifa, dev + + ipaddr = tostring(ipaddr) + + if not ifaddr_table then + ifaddr_table = nixio.getifaddrs() + end + + -- ipaddr -> ifname + for _, ifa in ipairs(ifaddr_table) do + if ifa.addr == ipaddr then + dev = ifa.name + break + end + end + + -- ifname -> macaddr + for _, ifa in ipairs(ifaddr_table) do + if ifa.name == dev and ifa.family == "packet" then + return ifa.addr + end + end +end + +local function remote_mac_lookup(ipaddr) + local _, n + + if not neigh_table then + neigh_table = luci.ip.neighbors() + end + + for _, n in ipairs(neigh_table) do + if n.mac and n.dest and n.dest:equal(ipaddr) then + return n.mac + end + end +end + +function action_neigh(json) + local data, has_v4, has_v6, error = fetch_jsoninfo('links') + + if error then + return + end + + local uci = require "luci.model.uci".cursor_state() + local resolve = uci:get("luci_olsr", "general", "resolve") + local ntm = require "luci.model.network".init() + local devices = ntm:get_wifidevs() + local sys = require "luci.sys" + local assoclist = {} + --local neightbl = require "neightbl" + local ntm = require "luci.model.network" + local ipc = require "luci.ip" + local nxo = require "nixio" + local defaultgw + + ipc.routes({ family = 4, type = 1, dest_exact = "0.0.0.0/0" }, + function(rt) defaultgw = rt.gw end) + + local function compare(a,b) + if a.proto == b.proto then + return a.linkCost < b.linkCost + else + return a.proto < b.proto + end + end + + for _, dev in ipairs(devices) do + for _, net in ipairs(dev:get_wifinets()) do + local radio = net:get_device() + assoclist[#assoclist+1] = {} + assoclist[#assoclist]['ifname'] = net:ifname() + assoclist[#assoclist]['network'] = net:network()[1] + assoclist[#assoclist]['device'] = radio and radio:name() or nil + assoclist[#assoclist]['list'] = net:assoclist() + end + end + + for k, v in ipairs(data) do + local snr = 0 + local signal = 0 + local noise = 0 + local mac = "" + local ip + local neihgt = {} + + if resolve == "1" then + hostname = nixio.getnameinfo(v.remoteIP, nil, 100) + if hostname then + v.hostname = hostname + end + end + + local interface = ntm:get_status_by_address(v.localIP) + local lmac = local_mac_lookup(v.localIP) + local rmac = remote_mac_lookup(v.remoteIP) + + for _, val in ipairs(assoclist) do + if val.network == interface and val.list then + for assocmac, assot in pairs(val.list) do + assocmac = string.lower(assocmac or "") + if rmac == assocmac then + signal = tonumber(assot.signal) + noise = tonumber(assot.noise) + snr = (noise*-1) - (signal*-1) + end + end + end + end + if interface then + v.interface = interface + end + v.snr = snr + v.signal = signal + v.noise = noise + if rmac then + v.remoteMAC = rmac + end + if lmac then + v.localMAC = lmac + end + + if defaultgw == v.remoteIP then + v.defaultgw = 1 + end + end + + table.sort(data, compare) + luci.template.render("status-olsr/neighbors", {links=data, has_v4=has_v4, has_v6=has_v6}) +end + +function action_routes() + local data, has_v4, has_v6, error = fetch_jsoninfo('routes') + if error then + return + end + + local uci = require "luci.model.uci".cursor_state() + local resolve = uci:get("luci_olsr", "general", "resolve") + + for k, v in ipairs(data) do + if resolve == "1" then + local hostname = nixio.getnameinfo(v.gateway, nil, 100) + if hostname then + v.hostname = hostname + end + end + end + + local function compare(a,b) + if a.proto == b.proto then + return a.rtpMetricCost < b.rtpMetricCost + else + return a.proto < b.proto + end + end + + table.sort(data, compare) + luci.template.render("status-olsr/routes", {routes=data, has_v4=has_v4, has_v6=has_v6}) +end + +function action_topology() + local data, has_v4, has_v6, error = fetch_jsoninfo('topology') + if error then + return + end + + local function compare(a,b) + if a.proto == b.proto then + return a.tcEdgeCost < b.tcEdgeCost + else + return a.proto < b.proto + end + end + + table.sort(data, compare) + luci.template.render("status-olsr/topology", {routes=data, has_v4=has_v4, has_v6=has_v6}) +end + +function action_hna() + local data, has_v4, has_v6, error = fetch_jsoninfo('hna') + if error then + return + end + + local uci = require "luci.model.uci".cursor_state() + local resolve = uci:get("luci_olsr", "general", "resolve") + + local function compare(a,b) + if a.proto == b.proto then + return a.genmask < b.genmask + else + return a.proto < b.proto + end + end + + for k, v in ipairs(data) do + if resolve == "1" then + hostname = nixio.getnameinfo(v.gateway, nil, 100) + if hostname then + v.hostname = hostname + end + end + if v.validityTime then + v.validityTime = tonumber(string.format("%.0f", v.validityTime / 1000)) + end + end + + table.sort(data, compare) + luci.template.render("status-olsr/hna", {hna=data, has_v4=has_v4, has_v6=has_v6}) +end + +function action_mid() + local data, has_v4, has_v6, error = fetch_jsoninfo('mid') + if error then + return + end + + local function compare(a,b) + if a.proto == b.proto then + return a.ipAddress < b.ipAddress + else + return a.proto < b.proto + end + end + + table.sort(data, compare) + luci.template.render("status-olsr/mid", {mids=data, has_v4=has_v4, has_v6=has_v6}) +end + +function action_smartgw() + local data, has_v4, has_v6, error = fetch_jsoninfo('gateways') + if error then + return + end + + local function compare(a,b) + if a.proto == b.proto then + return a.tcPathCost < b.tcPathCost + else + return a.proto < b.proto + end + end + + table.sort(data, compare) + luci.template.render("status-olsr/smartgw", {gws=data, has_v4=has_v4, has_v6=has_v6}) +end + +function action_interfaces() + local data, has_v4, has_v6, error = fetch_jsoninfo('interfaces') + if error then + return + end + + local function compare(a,b) + return a.proto < b.proto + end + + table.sort(data, compare) + luci.template.render("status-olsr/interfaces", {iface=data, has_v4=has_v4, has_v6=has_v6}) +end + +-- Internal +function fetch_jsoninfo(otable) + local uci = require "luci.model.uci".cursor_state() + local utl = require "luci.util" + local json = require "luci.json" + local IpVersion = uci:get_first("olsrd", "olsrd","IpVersion") + local jsonreq4 = "" + local jsonreq6 = "" + local v4_port = uci:get("olsrd", "olsrd_jsoninfo", "port") or 9090 + local v6_port = uci:get("olsrd6", "olsrd_jsoninfo", "port") or 9090 + + jsonreq4 = utl.exec("(echo /" .. otable .. " | nc 127.0.0.1 " .. v4_port .. " | sed -n '/^[}{ ]/p') 2>/dev/null") + jsonreq6 = utl.exec("(echo /" .. otable .. " | nc ::1 " .. v6_port .. " | sed -n '/^[}{ ]/p') 2>/dev/null") + local jsondata4 = {} + local jsondata6 = {} + local data4 = {} + local data6 = {} + local has_v4 = False + local has_v6 = False + + if jsonreq4 == '' and jsonreq6 == '' then + luci.template.render("status-olsr/error_olsr") + return nil, 0, 0, true + end + + if jsonreq4 ~= "" then + has_v4 = 1 + jsondata4 = json.decode(jsonreq4) + if otable == 'status' then + data4 = jsondata4 or {} + else + data4 = jsondata4[otable] or {} + end + + for k, v in ipairs(data4) do + data4[k]['proto'] = '4' + end + + end + if jsonreq6 ~= "" then + has_v6 = 1 + jsondata6 = json.decode(jsonreq6) + if otable == 'status' then + data6 = jsondata6 or {} + else + data6 = jsondata6[otable] or {} + end + for k, v in ipairs(data6) do + data6[k]['proto'] = '6' + end + end + + for k, v in ipairs(data6) do + table.insert(data4, v) + end + + return data4, has_v4, has_v6, false +end + diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/controller/olsr4.lua b/feeds/luci/applications/luci-app-olsr/luasrc/controller/olsr4.lua new file mode 100644 index 0000000..31a3101 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/controller/olsr4.lua @@ -0,0 +1,47 @@ +module("luci.controller.olsr4", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/olsrd") then + return + end + + require("luci.model.uci") + local uci = luci.model.uci.cursor_state() + + local ol = entry( + {"admin", "services", "olsrd"}, + cbi("olsr/olsrd"), "OLSR IPv4" + ) + ol.subindex = true + + entry( + {"admin", "services", "olsrd", "iface"}, + cbi("olsr/olsrdiface") + ).leaf = true + + entry( + {"admin", "services", "olsrd", "hna"}, + cbi("olsr/olsrdhna"), _("HNA Announcements") + ) + + oplg = entry( + {"admin", "services", "olsrd", "plugins"}, + cbi("olsr/olsrdplugins"), _("Plugins") + ) + + oplg.leaf = true + oplg.subindex = true + + local uci = require("luci.model.uci").cursor() + uci:foreach("olsrd", "LoadPlugin", + function (section) + local lib = section.library + entry( + {"admin", "services", "olsrd", "plugins", lib }, + cbi("olsr/olsrdplugins"), + nil --'Plugin "%s"' % lib:gsub("^olsrd_",""):gsub("%.so.+$","") + ) + end + ) +end + diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/controller/olsr6.lua b/feeds/luci/applications/luci-app-olsr/luasrc/controller/olsr6.lua new file mode 100644 index 0000000..9fbaa04 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/controller/olsr6.lua @@ -0,0 +1,47 @@ +module("luci.controller.olsr6", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/olsrd6") then + return + end + + require("luci.model.uci") + local uci = luci.model.uci.cursor_state() + + local ol = entry( + {"admin", "services", "olsrd6"}, + cbi("olsr/olsrd6"), "OLSR IPv6" + ) + ol.subindex = true + + entry( + {"admin", "services", "olsrd6", "iface"}, + cbi("olsr/olsrdiface6") + ).leaf = true + + entry( + {"admin", "services", "olsrd6", "hna"}, + cbi("olsr/olsrdhna6"), _("HNA6 Announcements") + ) + + oplg = entry( + {"admin", "services", "olsrd6", "plugins"}, + cbi("olsr/olsrdplugins6"), _("Plugins") + ) + + oplg.leaf = true + oplg.subindex = true + + local uci = require("luci.model.uci").cursor() + uci:foreach("olsrd6", "LoadPlugin", + function (section) + local lib = section.library + entry( + {"admin", "services", "olsrd6", "plugins", lib }, + cbi("olsr/olsrdplugins6"), + nil --'Plugin "%s"' % lib:gsub("^olsrd_",""):gsub("%.so.+$","") + ) + end + ) +end + diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrd.lua b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrd.lua new file mode 100644 index 0000000..a075bcf --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrd.lua @@ -0,0 +1,409 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require("luci.tools.webadmin") +local fs = require "nixio.fs" +local util = require "luci.util" +local ip = require "luci.ip" + +local has_ipip = fs.glob("/etc/modules.d/[0-9]*-ipip")() + +m = Map("olsrd", translate("OLSR Daemon"), + translate("The OLSR daemon is an implementation of the Optimized Link State Routing protocol. ".. + "As such it allows mesh routing for any network equipment. ".. + "It runs on any wifi card that supports ad-hoc mode and of course on any ethernet device. ".. + "Visit olsrd.org for help and documentation.")) + +function m.on_parse() + local has_defaults = false + + m.uci:foreach("olsrd", "InterfaceDefaults", + function(s) + has_defaults = true + return false + end) + + if not has_defaults then + m.uci:section("olsrd", "InterfaceDefaults") + end +end + +function write_float(self, section, value) + local n = tonumber(value) + if n ~= nil then + return Value.write(self, section, "%.1f" % n) + end +end + +s = m:section(TypedSection, "olsrd", translate("General settings")) +s.anonymous = true + +s:tab("general", translate("General Settings")) +s:tab("lquality", translate("Link Quality Settings")) +s:tab("smartgw", translate("SmartGW"), not has_ipip and translate("Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not work, please install it.")) +s:tab("advanced", translate("Advanced Settings")) + +ipv = s:taboption("general", ListValue, "IpVersion", translate("Internet protocol"), + translate("IP-version to use. If 6and4 is selected then one olsrd instance is started for each protocol.")) +ipv:value("4", "IPv4") +ipv:value("6and4", "6and4") + + +poll = s:taboption("advanced", Value, "Pollrate", translate("Pollrate"), + translate("Polling rate for OLSR sockets in seconds. Default is 0.05.")) +poll.optional = true +poll.datatype = "ufloat" +poll.placeholder = "0.05" + +nicc = s:taboption("advanced", Value, "NicChgsPollInt", translate("Nic changes poll interval"), + translate("Interval to poll network interfaces for configuration changes (in seconds). Default is \"2.5\".")) +nicc.optional = true +nicc.datatype = "ufloat" +nicc.placeholder = "2.5" + +tos = s:taboption("advanced", Value, "TosValue", translate("TOS value"), + translate("Type of service value for the IP header of control traffic. Default is \"16\".")) +tos.optional = true +tos.datatype = "uinteger" +tos.placeholder = "16" + +fib = s:taboption("general", ListValue, "FIBMetric", translate("FIB metric"), + translate ("FIBMetric controls the metric value of the host-routes OLSRd sets. ".. + "\"flat\" means that the metric value is always 2. This is the preferred value ".. + "because it helps the linux kernel routing to clean up older routes. ".. + "\"correct\" uses the hopcount as the metric value. ".. + "\"approx\" use the hopcount as the metric value too, but does only update the hopcount if the nexthop changes too. ".. + "Default is \"flat\".")) +fib:value("flat") +fib:value("correct") +fib:value("approx") + +lql = s:taboption("lquality", ListValue, "LinkQualityLevel", translate("LQ level"), + translate("Link quality level switch between hopcount and cost-based (mostly ETX) routing.
".. + "0 = do not use link quality
".. + "2 = use link quality for MPR selection and routing
".. + "Default is \"2\"")) +lql:value("2") +lql:value("0") + +lqage = s:taboption("lquality", Value, "LinkQualityAging", translate("LQ aging"), + translate("Link quality aging factor (only for lq level 2). Tuning parameter for etx_float and etx_fpm, smaller values ".. + "mean slower changes of ETX value. (allowed values are between 0.01 and 1.0)")) +lqage.optional = true +lqage:depends("LinkQualityLevel", "2") + +lqa = s:taboption("lquality", ListValue, "LinkQualityAlgorithm", translate("LQ algorithm"), + translate("Link quality algorithm (only for lq level 2).
".. + "etx_float: floating point ETX with exponential aging
".. + "etx_fpm : same as etx_float, but with integer arithmetic
".. + "etx_ff : ETX freifunk, an etx variant which use all OLSR traffic (instead of only hellos) for ETX calculation
".. + "etx_ffeth: incompatible variant of etx_ff that allows ethernet links with ETX 0.1.
".. + "Defaults to \"etx_ff\"")) +lqa.optional = true +lqa:value("etx_ff") +lqa:value("etx_fpm") +lqa:value("etx_float") +lqa:value("etx_ffeth") +lqa:depends("LinkQualityLevel", "2") +lqa.optional = true + +lqfish = s:taboption("lquality", Flag, "LinkQualityFishEye", translate("LQ fisheye"), + translate("Fisheye mechanism for TCs (checked means on). Default is \"on\"")) +lqfish.default = "1" +lqfish.optional = true + +hyst = s:taboption("lquality", Flag, "UseHysteresis", translate("Use hysteresis"), + translate("Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more robustness to the link sensing ".. + "but delays neighbor registration. Defaults is \"yes\"")) +hyst.default = "yes" +hyst.enabled = "yes" +hyst.disabled = "no" +hyst:depends("LinkQualityLevel", "0") +hyst.optional = true +hyst.rmempty = true + +port = s:taboption("general", Value, "OlsrPort", translate("Port"), + translate("The port OLSR uses. This should usually stay at the IANA assigned port 698. It can have a value between 1 and 65535.")) +port.optional = true +port.default = "698" +port.rmempty = true + +mainip = s:taboption("general", Value, "MainIp", translate("Main IP"), + translate("Sets the main IP (originator ip) of the router. This IP will NEVER change during the uptime of olsrd. ".. + "Default is 0.0.0.0, which triggers usage of the IP of the first interface.")) +mainip.optional = true +mainip.rmempty = true +mainip.datatype = "ipaddr" +mainip.placeholder = "0.0.0.0" + +sgw = s:taboption("smartgw", Flag, "SmartGateway", translate("Enable"), translate("Enable SmartGateway. If it is disabled, then " .. + "all other SmartGateway parameters are ignored. Default is \"no\".")) +sgw.default="no" +sgw.enabled="yes" +sgw.disabled="no" +sgw.rmempty = true + +sgwnat = s:taboption("smartgw", Flag, "SmartGatewayAllowNAT", translate("Allow gateways with NAT"), translate("Allow the selection of an outgoing ipv4 gateway with NAT")) +sgwnat:depends("SmartGateway", "yes") +sgwnat.default="yes" +sgwnat.enabled="yes" +sgwnat.disabled="no" +sgwnat.optional = true +sgwnat.rmempty = true + +sgwuplink = s:taboption("smartgw", ListValue, "SmartGatewayUplink", translate("Announce uplink"), translate("Which kind of uplink is exported to the other mesh nodes. " .. + "An uplink is detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. Default setting is \"both\".")) +sgwuplink:value("none") +sgwuplink:value("ipv4") +sgwuplink:value("ipv6") +sgwuplink:value("both") +sgwuplink:depends("SmartGateway", "yes") +sgwuplink.default="both" +sgwuplink.optional = true +sgwuplink.rmempty = true + +sgwulnat = s:taboption("smartgw", Flag, "SmartGatewayUplinkNAT", translate("Uplink uses NAT"), translate("If this Node uses NAT for connections to the internet. " .. + "Default is \"yes\".")) +sgwulnat:depends("SmartGatewayUplink", "ipv4") +sgwulnat:depends("SmartGatewayUplink", "both") +sgwulnat.default="yes" +sgwulnat.enabled="yes" +sgwulnat.disabled="no" +sgwnat.optional = true +sgwnat.rmempty = true + +sgwspeed = s:taboption("smartgw", Value, "SmartGatewaySpeed", translate("Speed of the uplink"), translate("Specifies the speed of ".. + "the uplink in kilobits/s. First parameter is upstream, second parameter is downstream. Default is \"128 1024\".")) +sgwspeed:depends("SmartGatewayUplink", "ipv4") +sgwspeed:depends("SmartGatewayUplink", "ipv6") +sgwspeed:depends("SmartGatewayUplink", "both") +sgwspeed.optional = true +sgwspeed.rmempty = true + +sgwprefix = s:taboption("smartgw", Value, "SmartGatewayPrefix", translate("IPv6-Prefix of the uplink"), translate("This can be used " .. + "to signal the external IPv6 prefix of the uplink to the clients. This might allow a client to change it's local IPv6 address to " .. + "use the IPv6 gateway without any kind of address translation. The maximum prefix length is 64 bits. " .. + "Default is \"::/0\" (no prefix).")) +sgwprefix:depends("SmartGatewayUplink", "ipv6") +sgwprefix:depends("SmartGatewayUplink", "both") +sgwprefix.optional = true +sgwprefix.rmempty = true + +willingness = s:taboption("advanced", ListValue, "Willingness", translate("Willingness"), + translate("The fixed willingness to use. If not set willingness will be calculated dynamically based on battery/power status. Default is \"3\".")) +for i=0,7 do + willingness:value(i) +end +willingness.optional = true +willingness.default = "3" + +natthr = s:taboption("advanced", Value, "NatThreshold", translate("NAT threshold"), + translate("If the route to the current gateway is to be changed, the ETX value of this gateway is ".. + "multiplied with this value before it is compared to the new one. ".. + "The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 if changed.
".. + "WARNING: This parameter should not be used together with the etx_ffeth metric!
".. + "Defaults to \"1.0\".")) +for i=1,0.1,-0.1 do + natthr:value(i) +end +natthr:depends("LinkQualityAlgorithm", "etx_ff") +natthr:depends("LinkQualityAlgorithm", "etx_float") +natthr:depends("LinkQualityAlgorithm", "etx_fpm") +natthr.default = "1.0" +natthr.optional = true +natthr.write = write_float + + +i = m:section(TypedSection, "InterfaceDefaults", translate("Interfaces Defaults")) +i.anonymous = true +i.addremove = false + +i:tab("general", translate("General Settings")) +i:tab("addrs", translate("IP Addresses")) +i:tab("timing", translate("Timing and Validity")) + +mode = i:taboption("general", ListValue, "Mode", translate("Mode"), + translate("Interface Mode is used to prevent unnecessary packet forwarding on switched ethernet interfaces. ".. + "valid Modes are \"mesh\" and \"ether\". Default is \"mesh\".")) +mode:value("mesh") +mode:value("ether") +mode.optional = true +mode.rmempty = true + + +weight = i:taboption("general", Value, "Weight", translate("Weight"), + translate("When multiple links exist between hosts the weight of interface is used to determine the link to use. ".. + "Normally the weight is automatically calculated by olsrd based on the characteristics of the interface, ".. + "but here you can specify a fixed value. Olsrd will choose links with the lowest value.
".. + "Note: Interface weight is used only when LinkQualityLevel is set to 0. ".. + "For any other value of LinkQualityLevel, the interface ETX value is used instead.")) +weight.optional = true +weight.datatype = "uinteger" +weight.placeholder = "0" + +lqmult = i:taboption("general", DynamicList, "LinkQualityMult", translate("LinkQuality Multiplicator"), + translate("Multiply routes with the factor given here. Allowed values are between 0.01 and 1.0. ".. + "It is only used when LQ-Level is greater than 0. Examples:
".. + "reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
".. + "reduce LQ to all nodes on this interface by 20%: default 0.8")) +lqmult.optional = true +lqmult.rmempty = true +lqmult.cast = "table" +lqmult.placeholder = "default 1.0" + +function lqmult.validate(self, value) + for _, v in pairs(value) do + if v ~= "" then + local val = util.split(v, " ") + local host = val[1] + local mult = val[2] + if not host or not mult then + return nil, translate("LQMult requires two values (IP address or 'default' and multiplicator) seperated by space.") + end + if not (host == "default" or ip.IPv4(host) or ip.IPv6(host)) then + return nil, translate("Can only be a valid IPv4 or IPv6 address or 'default'") + end + if not tonumber(mult) or tonumber(mult) > 1 or tonumber(mult) < 0.01 then + return nil, translate("Invalid Value for LQMult-Value. Must be between 0.01 and 1.0.") + end + if not mult:match("[0-1]%.[0-9]+") then + return nil, translate("Invalid Value for LQMult-Value. You must use a decimal number between 0.01 and 1.0 here.") + end + end + end + return value +end + +ip4b = i:taboption("addrs", Value, "Ip4Broadcast", translate("IPv4 broadcast"), + translate("IPv4 broadcast address for outgoing OLSR packets. One useful example would be 255.255.255.255. ".. + "Default is \"0.0.0.0\", which triggers the usage of the interface broadcast IP.")) +ip4b.optional = true +ip4b.datatype = "ip4addr" +ip4b.placeholder = "0.0.0.0" + +ip6m = i:taboption("addrs", Value, "IPv6Multicast", translate("IPv6 multicast"), + translate("IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal multicast.")) +ip6m.optional = true +ip6m.datatype = "ip6addr" +ip6m.placeholder = "FF02::6D" + +ip4s = i:taboption("addrs", Value, "IPv4Src", translate("IPv4 source"), + translate("IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which triggers usage of the interface IP.")) +ip4s.optional = true +ip4s.datatype = "ip4addr" +ip4s.placeholder = "0.0.0.0" + +ip6s = i:taboption("addrs", Value, "IPv6Src", translate("IPv6 source"), + translate("IPv6 src prefix. OLSRd will choose one of the interface IPs which matches the prefix of this parameter. ".. + "Default is \"0::/0\", which triggers the usage of a not-linklocal interface IP.")) +ip6s.optional = true +ip6s.datatype = "ip6addr" +ip6s.placeholder = "0::/0" + + +hi = i:taboption("timing", Value, "HelloInterval", translate("Hello interval")) +hi.optional = true +hi.datatype = "ufloat" +hi.placeholder = "5.0" +hi.write = write_float + +hv = i:taboption("timing", Value, "HelloValidityTime", translate("Hello validity time")) +hv.optional = true +hv.datatype = "ufloat" +hv.placeholder = "40.0" +hv.write = write_float + +ti = i:taboption("timing", Value, "TcInterval", translate("TC interval")) +ti.optional = true +ti.datatype = "ufloat" +ti.placeholder = "2.0" +ti.write = write_float + +tv = i:taboption("timing", Value, "TcValidityTime", translate("TC validity time")) +tv.optional = true +tv.datatype = "ufloat" +tv.placeholder = "256.0" +tv.write = write_float + +mi = i:taboption("timing", Value, "MidInterval", translate("MID interval")) +mi.optional = true +mi.datatype = "ufloat" +mi.placeholder = "18.0" +mi.write = write_float + +mv = i:taboption("timing", Value, "MidValidityTime", translate("MID validity time")) +mv.optional = true +mv.datatype = "ufloat" +mv.placeholder = "324.0" +mv.write = write_float + +ai = i:taboption("timing", Value, "HnaInterval", translate("HNA interval")) +ai.optional = true +ai.datatype = "ufloat" +ai.placeholder = "18.0" +ai.write = write_float + +av = i:taboption("timing", Value, "HnaValidityTime", translate("HNA validity time")) +av.optional = true +av.datatype = "ufloat" +av.placeholder = "108.0" +av.write = write_float + + +ifs = m:section(TypedSection, "Interface", translate("Interfaces")) +ifs.addremove = true +ifs.anonymous = true +ifs.extedit = luci.dispatcher.build_url("admin/services/olsrd/iface/%s") +ifs.template = "cbi/tblsection" + +function ifs.create(...) + local sid = TypedSection.create(...) + luci.http.redirect(ifs.extedit % sid) +end + +ign = ifs:option(Flag, "ignore", translate("Enable")) +ign.enabled = "0" +ign.disabled = "1" +ign.rmempty = false +function ign.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" +end + +network = ifs:option(DummyValue, "interface", translate("Network")) +network.template = "cbi/network_netinfo" + +mode = ifs:option(DummyValue, "Mode", translate("Mode")) +function mode.cfgvalue(...) + return Value.cfgvalue(...) or m.uci:get_first("olsrd", "InterfaceDefaults", "Mode", "mesh") +end + +hello = ifs:option(DummyValue, "_hello", translate("Hello")) +function hello.cfgvalue(self, section) + local i = tonumber(m.uci:get("olsrd", section, "HelloInterval")) or tonumber(m.uci:get_first("olsrd", "InterfaceDefaults", "HelloInterval", 5)) + local v = tonumber(m.uci:get("olsrd", section, "HelloValidityTime")) or tonumber(m.uci:get_first("olsrd", "InterfaceDefaults", "HelloValidityTime", 40)) + return "%.01fs / %.01fs" %{ i, v } +end + +tc = ifs:option(DummyValue, "_tc", translate("TC")) +function tc.cfgvalue(self, section) + local i = tonumber(m.uci:get("olsrd", section, "TcInterval")) or tonumber(m.uci:get_first("olsrd", "InterfaceDefaults", "TcInterval", 2)) + local v = tonumber(m.uci:get("olsrd", section, "TcValidityTime")) or tonumber(m.uci:get_first("olsrd", "InterfaceDefaults", "TcValidityTime", 256)) + return "%.01fs / %.01fs" %{ i, v } +end + +mid = ifs:option(DummyValue, "_mid", translate("MID")) +function mid.cfgvalue(self, section) + local i = tonumber(m.uci:get("olsrd", section, "MidInterval")) or tonumber(m.uci:get_first("olsrd", "InterfaceDefaults", "MidInterval", 18)) + local v = tonumber(m.uci:get("olsrd", section, "MidValidityTime")) or tonumber(m.uci:get_first("olsrd", "InterfaceDefaults", "MidValidityTime", 324)) + return "%.01fs / %.01fs" %{ i, v } +end + +hna = ifs:option(DummyValue, "_hna", translate("HNA")) +function hna.cfgvalue(self, section) + local i = tonumber(m.uci:get("olsrd", section, "HnaInterval")) or tonumber(m.uci:get_first("olsrd", "InterfaceDefaults", "HnaInterval", 18)) + local v = tonumber(m.uci:get("olsrd", section, "HnaValidityTime")) or tonumber(m.uci:get_first("olsrd", "InterfaceDefaults", "HnaValidityTime", 108)) + return "%.01fs / %.01fs" %{ i, v } +end + +return m diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrd6.lua b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrd6.lua new file mode 100644 index 0000000..0007e67 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrd6.lua @@ -0,0 +1,390 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require("luci.tools.webadmin") +local fs = require "nixio.fs" +local util = require "luci.util" +local ip = require "luci.ip" + +local has_ipip = fs.glob("/etc/modules.d/[0-9]*-ipip")() + +m = Map("olsrd6", translate("OLSR Daemon"), + translate("The OLSR daemon is an implementation of the Optimized Link State Routing protocol. ".. + "As such it allows mesh routing for any network equipment. ".. + "It runs on any wifi card that supports ad-hoc mode and of course on any ethernet device. ".. + "Visit olsrd.org for help and documentation.")) + +function m.on_parse() + local has_defaults = false + + m.uci:foreach("olsrd6", "InterfaceDefaults", + function(s) + has_defaults = true + return false + end) + + if not has_defaults then + m.uci:section("olsrd6", "InterfaceDefaults") + end +end + +function write_float(self, section, value) + local n = tonumber(value) + if n ~= nil then + return Value.write(self, section, "%.1f" % n) + end +end + +s = m:section(TypedSection, "olsrd6", translate("General settings")) +s.anonymous = true + +s:tab("general", translate("General Settings")) +s:tab("lquality", translate("Link Quality Settings")) +s:tab("smartgw", translate("SmartGW"), not has_ipip and translate("Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not work, please install it.")) +s:tab("advanced", translate("Advanced Settings")) + +poll = s:taboption("advanced", Value, "Pollrate", translate("Pollrate"), + translate("Polling rate for OLSR sockets in seconds. Default is 0.05.")) +poll.optional = true +poll.datatype = "ufloat" +poll.placeholder = "0.05" + +nicc = s:taboption("advanced", Value, "NicChgsPollInt", translate("Nic changes poll interval"), + translate("Interval to poll network interfaces for configuration changes (in seconds). Default is \"2.5\".")) +nicc.optional = true +nicc.datatype = "ufloat" +nicc.placeholder = "2.5" + +tos = s:taboption("advanced", Value, "TosValue", translate("TOS value"), + translate("Type of service value for the IP header of control traffic. Default is \"16\".")) +tos.optional = true +tos.datatype = "uinteger" +tos.placeholder = "16" + +fib = s:taboption("general", ListValue, "FIBMetric", translate("FIB metric"), + translate ("FIBMetric controls the metric value of the host-routes OLSRd sets. ".. + "\"flat\" means that the metric value is always 2. This is the preferred value ".. + "because it helps the linux kernel routing to clean up older routes. ".. + "\"correct\" uses the hopcount as the metric value. ".. + "\"approx\" use the hopcount as the metric value too, but does only update the hopcount if the nexthop changes too. ".. + "Default is \"flat\".")) +fib:value("flat") +fib:value("correct") +fib:value("approx") + +lql = s:taboption("lquality", ListValue, "LinkQualityLevel", translate("LQ level"), + translate("Link quality level switch between hopcount and cost-based (mostly ETX) routing.
".. + "0 = do not use link quality
".. + "2 = use link quality for MPR selection and routing
".. + "Default is \"2\"")) +lql:value("2") +lql:value("0") + +lqage = s:taboption("lquality", Value, "LinkQualityAging", translate("LQ aging"), + translate("Link quality aging factor (only for lq level 2). Tuning parameter for etx_float and etx_fpm, smaller values ".. + "mean slower changes of ETX value. (allowed values are between 0.01 and 1.0)")) +lqage.optional = true +lqage:depends("LinkQualityLevel", "2") + +lqa = s:taboption("lquality", ListValue, "LinkQualityAlgorithm", translate("LQ algorithm"), + translate("Link quality algorithm (only for lq level 2).
".. + "etx_float: floating point ETX with exponential aging
".. + "etx_fpm : same as etx_float, but with integer arithmetic
".. + "etx_ff : ETX freifunk, an etx variant which use all OLSR traffic (instead of only hellos) for ETX calculation
".. + "etx_ffeth: incompatible variant of etx_ff that allows ethernet links with ETX 0.1.
".. + "Defaults to \"etx_ff\"")) +lqa.optional = true +lqa:value("etx_ff") +lqa:value("etx_fpm") +lqa:value("etx_float") +lqa:value("etx_ffeth") +lqa:depends("LinkQualityLevel", "2") +lqa.optional = true + +lqfish = s:taboption("lquality", Flag, "LinkQualityFishEye", translate("LQ fisheye"), + translate("Fisheye mechanism for TCs (checked means on). Default is \"on\"")) +lqfish.default = "1" +lqfish.optional = true + +hyst = s:taboption("lquality", Flag, "UseHysteresis", translate("Use hysteresis"), + translate("Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more robustness to the link sensing ".. + "but delays neighbor registration. Defaults is \"yes\"")) +hyst.default = "yes" +hyst.enabled = "yes" +hyst.disabled = "no" +hyst:depends("LinkQualityLevel", "0") +hyst.optional = true +hyst.rmempty = true + +port = s:taboption("general", Value, "OlsrPort", translate("Port"), + translate("The port OLSR uses. This should usually stay at the IANA assigned port 698. It can have a value between 1 and 65535.")) +port.optional = true +port.default = "698" +port.rmempty = true + +mainip = s:taboption("general", Value, "MainIp", translate("Main IP"), + translate("Sets the main IP (originator ip) of the router. This IP will NEVER change during the uptime of olsrd. ".. + "Default is ::, which triggers usage of the IP of the first interface.")) +mainip.optional = true +mainip.rmempty = true +mainip.datatype = "ipaddr" +mainip.placeholder = "::" + +sgw = s:taboption("smartgw", Flag, "SmartGateway", translate("Enable"), translate("Enable SmartGateway. If it is disabled, then " .. + "all other SmartGateway parameters are ignored. Default is \"no\".")) +sgw.default="no" +sgw.enabled="yes" +sgw.disabled="no" +sgw.rmempty = true + +sgwnat = s:taboption("smartgw", Flag, "SmartGatewayAllowNAT", translate("Allow gateways with NAT"), translate("Allow the selection of an outgoing ipv4 gateway with NAT")) +sgwnat:depends("SmartGateway", "yes") +sgwnat.default="yes" +sgwnat.enabled="yes" +sgwnat.disabled="no" +sgwnat.optional = true +sgwnat.rmempty = true + +sgwuplink = s:taboption("smartgw", ListValue, "SmartGatewayUplink", translate("Announce uplink"), translate("Which kind of uplink is exported to the other mesh nodes. " .. + "An uplink is detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default setting is \"both\".")) +sgwuplink:value("none") +sgwuplink:value("ipv4") +sgwuplink:value("ipv6") +sgwuplink:value("both") +sgwuplink:depends("SmartGateway", "yes") +sgwuplink.default="both" +sgwuplink.optional = true +sgwuplink.rmempty = true + +sgwulnat = s:taboption("smartgw", Flag, "SmartGatewayUplinkNAT", translate("Uplink uses NAT"), translate("If this Node uses NAT for connections to the internet. " .. + "Default is \"yes\".")) +sgwulnat:depends("SmartGatewayUplink", "ipv4") +sgwulnat:depends("SmartGatewayUplink", "both") +sgwulnat.default="yes" +sgwulnat.enabled="yes" +sgwulnat.disabled="no" +sgwnat.optional = true +sgwnat.rmempty = true + +sgwspeed = s:taboption("smartgw", Value, "SmartGatewaySpeed", translate("Speed of the uplink"), translate("Specifies the speed of ".. + "the uplink in kilobits/s. First parameter is upstream, second parameter is downstream. Default is \"128 1024\".")) +sgwspeed:depends("SmartGatewayUplink", "ipv4") +sgwspeed:depends("SmartGatewayUplink", "ipv6") +sgwspeed:depends("SmartGatewayUplink", "both") +sgwspeed.optional = true +sgwspeed.rmempty = true + +sgwprefix = s:taboption("smartgw", Value, "SmartGatewayPrefix", translate("IPv6-Prefix of the uplink"), translate("This can be used " .. + "to signal the external IPv6 prefix of the uplink to the clients. This might allow a client to change it's local IPv6 address to " .. + "use the IPv6 gateway without any kind of address translation. The maximum prefix length is 64 bits. " .. + "Default is \"::/0\" (no prefix).")) +sgwprefix:depends("SmartGatewayUplink", "ipv6") +sgwprefix:depends("SmartGatewayUplink", "both") +sgwprefix.optional = true +sgwprefix.rmempty = true + +willingness = s:taboption("advanced", ListValue, "Willingness", translate("Willingness"), + translate("The fixed willingness to use. If not set willingness will be calculated dynamically based on battery/power status. Default is \"3\".")) +for i=0,7 do + willingness:value(i) +end +willingness.optional = true +willingness.default = "3" + +natthr = s:taboption("advanced", Value, "NatThreshold", translate("NAT threshold"), + translate("If the route to the current gateway is to be changed, the ETX value of this gateway is ".. + "multiplied with this value before it is compared to the new one. ".. + "The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 if changed.
".. + "WARNING: This parameter should not be used together with the etx_ffeth metric!
".. + "Defaults to \"1.0\".")) +for i=1,0.1,-0.1 do + natthr:value(i) +end +natthr:depends("LinkQualityAlgorithm", "etx_ff") +natthr:depends("LinkQualityAlgorithm", "etx_float") +natthr:depends("LinkQualityAlgorithm", "etx_fpm") +natthr.default = "1.0" +natthr.optional = true +natthr.write = write_float + + +i = m:section(TypedSection, "InterfaceDefaults", translate("Interfaces Defaults")) +i.anonymous = true +i.addremove = false + +i:tab("general", translate("General Settings")) +i:tab("addrs", translate("IP Addresses")) +i:tab("timing", translate("Timing and Validity")) + +mode = i:taboption("general", ListValue, "Mode", translate("Mode"), + translate("Interface Mode is used to prevent unnecessary packet forwarding on switched ethernet interfaces. ".. + "valid Modes are \"mesh\" and \"ether\". Default is \"mesh\".")) +mode:value("mesh") +mode:value("ether") +mode.optional = true +mode.rmempty = true + + +weight = i:taboption("general", Value, "Weight", translate("Weight"), + translate("When multiple links exist between hosts the weight of interface is used to determine the link to use. ".. + "Normally the weight is automatically calculated by olsrd based on the characteristics of the interface, ".. + "but here you can specify a fixed value. Olsrd will choose links with the lowest value.
".. + "Note: Interface weight is used only when LinkQualityLevel is set to 0. ".. + "For any other value of LinkQualityLevel, the interface ETX value is used instead.")) +weight.optional = true +weight.datatype = "uinteger" +weight.placeholder = "0" + +lqmult = i:taboption("general", DynamicList, "LinkQualityMult", translate("LinkQuality Multiplicator"), + translate("Multiply routes with the factor given here. Allowed values are between 0.01 and 1.0. ".. + "It is only used when LQ-Level is greater than 0. Examples:
".. + "reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
".. + "reduce LQ to all nodes on this interface by 20%: default 0.8")) +lqmult.optional = true +lqmult.rmempty = true +lqmult.cast = "table" +lqmult.placeholder = "default 1.0" + +function lqmult.validate(self, value) + for _, v in pairs(value) do + if v ~= "" then + local val = util.split(v, " ") + local host = val[1] + local mult = val[2] + if not host or not mult then + return nil, translate("LQMult requires two values (IP address or 'default' and multiplicator) seperated by space.") + end + if not (host == "default" or ip.IPv6(host)) then + return nil, translate("Can only be a valid IPv6 address or 'default'") + end + if not tonumber(mult) or tonumber(mult) > 1 or tonumber(mult) < 0.01 then + return nil, translate("Invalid Value for LQMult-Value. Must be between 0.01 and 1.0.") + end + if not mult:match("[0-1]%.[0-9]+") then + return nil, translate("Invalid Value for LQMult-Value. You must use a decimal number between 0.01 and 1.0 here.") + end + end + end + return value +end + +ip6m = i:taboption("addrs", Value, "IPv6Multicast", translate("IPv6 multicast"), + translate("IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal multicast.")) +ip6m.optional = true +ip6m.datatype = "ip6addr" +ip6m.placeholder = "FF02::6D" + +ip6s = i:taboption("addrs", Value, "IPv6Src", translate("IPv6 source"), + translate("IPv6 src prefix. OLSRd will choose one of the interface IPs which matches the prefix of this parameter. ".. + "Default is \"0::/0\", which triggers the usage of a not-linklocal interface IP.")) +ip6s.optional = true +ip6s.datatype = "ip6addr" +ip6s.placeholder = "0::/0" + + +hi = i:taboption("timing", Value, "HelloInterval", translate("Hello interval")) +hi.optional = true +hi.datatype = "ufloat" +hi.placeholder = "5.0" +hi.write = write_float + +hv = i:taboption("timing", Value, "HelloValidityTime", translate("Hello validity time")) +hv.optional = true +hv.datatype = "ufloat" +hv.placeholder = "40.0" +hv.write = write_float + +ti = i:taboption("timing", Value, "TcInterval", translate("TC interval")) +ti.optional = true +ti.datatype = "ufloat" +ti.placeholder = "2.0" +ti.write = write_float + +tv = i:taboption("timing", Value, "TcValidityTime", translate("TC validity time")) +tv.optional = true +tv.datatype = "ufloat" +tv.placeholder = "256.0" +tv.write = write_float + +mi = i:taboption("timing", Value, "MidInterval", translate("MID interval")) +mi.optional = true +mi.datatype = "ufloat" +mi.placeholder = "18.0" +mi.write = write_float + +mv = i:taboption("timing", Value, "MidValidityTime", translate("MID validity time")) +mv.optional = true +mv.datatype = "ufloat" +mv.placeholder = "324.0" +mv.write = write_float + +ai = i:taboption("timing", Value, "HnaInterval", translate("HNA interval")) +ai.optional = true +ai.datatype = "ufloat" +ai.placeholder = "18.0" +ai.write = write_float + +av = i:taboption("timing", Value, "HnaValidityTime", translate("HNA validity time")) +av.optional = true +av.datatype = "ufloat" +av.placeholder = "108.0" +av.write = write_float + + +ifs = m:section(TypedSection, "Interface", translate("Interfaces")) +ifs.addremove = true +ifs.anonymous = true +ifs.extedit = luci.dispatcher.build_url("admin/services/olsrd6/iface/%s") +ifs.template = "cbi/tblsection" + +function ifs.create(...) + local sid = TypedSection.create(...) + luci.http.redirect(ifs.extedit % sid) +end + +ign = ifs:option(Flag, "ignore", translate("Enable")) +ign.enabled = "0" +ign.disabled = "1" +ign.rmempty = false +function ign.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" +end + +network = ifs:option(DummyValue, "interface", translate("Network")) +network.template = "cbi/network_netinfo" + +mode = ifs:option(DummyValue, "Mode", translate("Mode")) +function mode.cfgvalue(...) + return Value.cfgvalue(...) or m.uci:get_first("olsrd6", "InterfaceDefaults", "Mode", "mesh") +end + +hello = ifs:option(DummyValue, "_hello", translate("Hello")) +function hello.cfgvalue(self, section) + local i = tonumber(m.uci:get("olsrd6", section, "HelloInterval")) or tonumber(m.uci:get_first("olsrd6", "InterfaceDefaults", "HelloInterval", 5)) + local v = tonumber(m.uci:get("olsrd6", section, "HelloValidityTime")) or tonumber(m.uci:get_first("olsrd6", "InterfaceDefaults", "HelloValidityTime", 40)) + return "%.01fs / %.01fs" %{ i, v } +end + +tc = ifs:option(DummyValue, "_tc", translate("TC")) +function tc.cfgvalue(self, section) + local i = tonumber(m.uci:get("olsrd6", section, "TcInterval")) or tonumber(m.uci:get_first("olsrd6", "InterfaceDefaults", "TcInterval", 2)) + local v = tonumber(m.uci:get("olsrd6", section, "TcValidityTime")) or tonumber(m.uci:get_first("olsrd6", "InterfaceDefaults", "TcValidityTime", 256)) + return "%.01fs / %.01fs" %{ i, v } +end + +mid = ifs:option(DummyValue, "_mid", translate("MID")) +function mid.cfgvalue(self, section) + local i = tonumber(m.uci:get("olsrd6", section, "MidInterval")) or tonumber(m.uci:get_first("olsrd6", "InterfaceDefaults", "MidInterval", 18)) + local v = tonumber(m.uci:get("olsrd6", section, "MidValidityTime")) or tonumber(m.uci:get_first("olsrd6", "InterfaceDefaults", "MidValidityTime", 324)) + return "%.01fs / %.01fs" %{ i, v } +end + +hna = ifs:option(DummyValue, "_hna", translate("HNA")) +function hna.cfgvalue(self, section) + local i = tonumber(m.uci:get("olsrd6", section, "HnaInterval")) or tonumber(m.uci:get_first("olsrd6", "InterfaceDefaults", "HnaInterval", 18)) + local v = tonumber(m.uci:get("olsrd6", section, "HnaValidityTime")) or tonumber(m.uci:get_first("olsrd6", "InterfaceDefaults", "HnaValidityTime", 108)) + return "%.01fs / %.01fs" %{ i, v } +end + +return m diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrddisplay.lua b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrddisplay.lua new file mode 100644 index 0000000..aadb44f --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrddisplay.lua @@ -0,0 +1,14 @@ +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_olsr", translate("OLSR - Display Options")) + +s = m:section(TypedSection, "olsr") +s.anonymous = true + +res = s:option(Flag, "resolve", translate("Resolve"), + translate("Resolve hostnames on status pages. It is generally safe to allow this, but if you use public IPs and have unstable DNS-Setup then those pages will load really slow. In this case disable it here.")) +res.default = "0" +res.optional = true + +return m diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdhna.lua b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdhna.lua new file mode 100644 index 0000000..e4b093a --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdhna.lua @@ -0,0 +1,45 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local uci = require "luci.model.uci".cursor() +local ipv = uci:get_first("olsrd", "olsrd", "IpVersion", "4") + +mh = Map("olsrd", translate("OLSR - HNA-Announcements"), translate("Hosts in a OLSR routed network can announce connecitivity " .. + "to external networks using HNA messages.")) + +if ipv == "6and4" or ipv == "4" then + hna4 = mh:section(TypedSection, "Hna4", translate("Hna4"), translate("Both values must use the dotted decimal notation.")) + hna4.addremove = true + hna4.anonymous = true + hna4.template = "cbi/tblsection" + + net4 = hna4:option(Value, "netaddr", translate("Network address")) + net4.datatype = "ip4addr" + net4.placeholder = "10.11.12.13" + net4.default = "10.11.12.13" + msk4 = hna4:option(Value, "netmask", translate("Netmask")) + msk4.datatype = "ip4addr" + msk4.placeholder = "255.255.255.255" + msk4.default = "255.255.255.255" +end + +if ipv == "6and4" or ipv == "6" then + hna6 = mh:section(TypedSection, "Hna6", translate("Hna6"), translate("IPv6 network must be given in full notation, " .. + "prefix must be in CIDR notation.")) + hna6.addremove = true + hna6.anonymous = true + hna6.template = "cbi/tblsection" + + net6 = hna6:option(Value, "netaddr", translate("Network address")) + net6.datatype = "ip6addr" + net6.placeholder = "fec0:2200:106:0:0:0:0:0" + net6.default = "fec0:2200:106:0:0:0:0:0" + msk6 = hna6:option(Value, "prefix", translate("Prefix")) + msk6.datatype = "range(0,128)" + msk6.placeholder = "128" + msk6.default = "128" +end + +return mh + diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdhna6.lua b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdhna6.lua new file mode 100644 index 0000000..682421f --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdhna6.lua @@ -0,0 +1,25 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local uci = require "luci.model.uci".cursor() + +mh = Map("olsrd6", translate("OLSR - HNA6-Announcements"), translate("Hosts in a OLSR routed network can announce connecitivity " .. + "to external networks using HNA6 messages.")) + + hna6 = mh:section(TypedSection, "Hna6", translate("Hna6"), translate("IPv6 network must be given in full notation, " .. + "prefix must be in CIDR notation.")) + hna6.addremove = true + hna6.anonymous = true + hna6.template = "cbi/tblsection" + + net6 = hna6:option(Value, "netaddr", translate("Network address")) + net6.datatype = "ip6addr" + net6.placeholder = "fec0:2200:106:0:0:0:0:0" + net6.default = "fec0:2200:106:0:0:0:0:0" + msk6 = hna6:option(Value, "prefix", translate("Prefix")) + msk6.datatype = "range(0,128)" + msk6.placeholder = "128" + msk6.default = "128" +return mh + diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdiface.lua b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdiface.lua new file mode 100644 index 0000000..d6b7cd1 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdiface.lua @@ -0,0 +1,177 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local util = require "luci.util" +local ip = require "luci.ip" + +function write_float(self, section, value) + local n = tonumber(value) + if n ~= nil then + return Value.write(self, section, "%.1f" % n) + end +end + +m = Map("olsrd", translate("OLSR Daemon - Interface"), + translate("The OLSR daemon is an implementation of the Optimized Link State Routing protocol. ".. + "As such it allows mesh routing for any network equipment. ".. + "It runs on any wifi card that supports ad-hoc mode and of course on any ethernet device. ".. + "Visit olsrd.org for help and documentation.")) + +m.redirect = luci.dispatcher.build_url("admin/services/olsrd") + +if not arg[1] or m.uci:get("olsrd", arg[1]) ~= "Interface" then + luci.http.redirect(m.redirect) + return +end + +i = m:section(NamedSection, arg[1], "Interface", translate("Interface")) +i.anonymous = true +i.addremove = false + +i:tab("general", translate("General Settings")) +i:tab("addrs", translate("IP Addresses")) +i:tab("timing", translate("Timing and Validity")) + +ign = i:taboption("general", Flag, "ignore", translate("Enable"), + translate("Enable this interface.")) +ign.enabled = "0" +ign.disabled = "1" +ign.rmempty = false +function ign.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" +end + +network = i:taboption("general", Value, "interface", translate("Network"), + translate("The interface OLSRd should serve.")) + +network.template = "cbi/network_netlist" +network.widget = "radio" +network.nocreate = true + +mode = i:taboption("general", ListValue, "Mode", translate("Mode"), + translate("Interface Mode is used to prevent unnecessary packet forwarding on switched ethernet interfaces. ".. + "valid Modes are \"mesh\" and \"ether\". Default is \"mesh\".")) +mode:value("mesh") +mode:value("ether") +mode.optional = true +mode.rmempty = true + + +weight = i:taboption("general", Value, "Weight", translate("Weight"), + translate("When multiple links exist between hosts the weight of interface is used to determine the link to use. ".. + "Normally the weight is automatically calculated by olsrd based on the characteristics of the interface, ".. + "but here you can specify a fixed value. Olsrd will choose links with the lowest value.
".. + "Note: Interface weight is used only when LinkQualityLevel is set to 0. ".. + "For any other value of LinkQualityLevel, the interface ETX value is used instead.")) +weight.optional = true +weight.datatype = "uinteger" +weight.placeholder = "0" + +lqmult = i:taboption("general", DynamicList, "LinkQualityMult", translate("LinkQuality Multiplicator"), + translate("Multiply routes with the factor given here. Allowed values are between 0.01 and 1.0. ".. + "It is only used when LQ-Level is greater than 0. Examples:
".. + "reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
".. + "reduce LQ to all nodes on this interface by 20%: default 0.8")) +lqmult.optional = true +lqmult.rmempty = true +lqmult.cast = "table" +lqmult.placeholder = "default 1.0" + +function lqmult.validate(self, value) + for _, v in pairs(value) do + if v ~= "" then + local val = util.split(v, " ") + local host = val[1] + local mult = val[2] + if not host or not mult then + return nil, translate("LQMult requires two values (IP address or 'default' and multiplicator) seperated by space.") + end + if not (host == "default" or ip.IPv4(host) or ip.IPv6(host)) then + return nil, translate("Can only be a valid IPv4 or IPv6 address or 'default'") + end + if not tonumber(mult) or tonumber(mult) > 1 or tonumber(mult) < 0.01 then + return nil, translate("Invalid Value for LQMult-Value. Must be between 0.01 and 1.0.") + end + if not mult:match("[0-1]%.[0-9]+") then + return nil, translate("Invalid Value for LQMult-Value. You must use a decimal number between 0.01 and 1.0 here.") + end + end + end + return value +end + +ip4b = i:taboption("addrs", Value, "Ip4Broadcast", translate("IPv4 broadcast"), + translate("IPv4 broadcast address for outgoing OLSR packets. One useful example would be 255.255.255.255. ".. + "Default is \"0.0.0.0\", which triggers the usage of the interface broadcast IP.")) +ip4b.optional = true +ip4b.datatype = "ip4addr" +ip4b.placeholder = "0.0.0.0" + +ip6m = i:taboption("addrs", Value, "IPv6Multicast", translate("IPv6 multicast"), + translate("IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal multicast.")) +ip6m.optional = true +ip6m.datatype = "ip6addr" +ip6m.placeholder = "FF02::6D" + +ip4s = i:taboption("addrs", Value, "IPv4Src", translate("IPv4 source"), + translate("IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which triggers usage of the interface IP.")) +ip4s.optional = true +ip4s.datatype = "ip4addr" +ip4s.placeholder = "0.0.0.0" + +ip6s = i:taboption("addrs", Value, "IPv6Src", translate("IPv6 source"), + translate("IPv6 src prefix. OLSRd will choose one of the interface IPs which matches the prefix of this parameter. ".. + "Default is \"0::/0\", which triggers the usage of a not-linklocal interface IP.")) +ip6s.optional = true +ip6s.datatype = "ip6addr" +ip6s.placeholder = "0::/0" + +hi = i:taboption("timing", Value, "HelloInterval", translate("Hello interval")) +hi.optional = true +hi.datatype = "ufloat" +hi.placeholder = "5.0" +hi.write = write_float + +hv = i:taboption("timing", Value, "HelloValidityTime", translate("Hello validity time")) +hv.optional = true +hv.datatype = "ufloat" +hv.placeholder = "40.0" +hv.write = write_float + +ti = i:taboption("timing", Value, "TcInterval", translate("TC interval")) +ti.optional = true +ti.datatype = "ufloat" +ti.placeholder = "2.0" +ti.write = write_float + +tv = i:taboption("timing", Value, "TcValidityTime", translate("TC validity time")) +tv.optional = true +tv.datatype = "ufloat" +tv.placeholder = "256.0" +tv.write = write_float + +mi = i:taboption("timing", Value, "MidInterval", translate("MID interval")) +mi.optional = true +mi.datatype = "ufloat" +mi.placeholder = "18.0" +mi.write = write_float + +mv = i:taboption("timing", Value, "MidValidityTime", translate("MID validity time")) +mv.optional = true +mv.datatype = "ufloat" +mv.placeholder = "324.0" +mv.write = write_float + +ai = i:taboption("timing", Value, "HnaInterval", translate("HNA interval")) +ai.optional = true +ai.datatype = "ufloat" +ai.placeholder = "18.0" +ai.write = write_float + +av = i:taboption("timing", Value, "HnaValidityTime", translate("HNA validity time")) +av.optional = true +av.datatype = "ufloat" +av.placeholder = "108.0" +av.write = write_float + +return m diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdiface6.lua b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdiface6.lua new file mode 100644 index 0000000..2f0fa6c --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdiface6.lua @@ -0,0 +1,164 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local util = require "luci.util" +local ip = require "luci.ip" + +function write_float(self, section, value) + local n = tonumber(value) + if n ~= nil then + return Value.write(self, section, "%.1f" % n) + end +end + +m = Map("olsrd6", translate("OLSR Daemon - Interface"), + translate("The OLSR daemon is an implementation of the Optimized Link State Routing protocol. ".. + "As such it allows mesh routing for any network equipment. ".. + "It runs on any wifi card that supports ad-hoc mode and of course on any ethernet device. ".. + "Visit olsrd.org for help and documentation.")) + +m.redirect = luci.dispatcher.build_url("admin/services/olsrd6") + +if not arg[1] or m.uci:get("olsrd6", arg[1]) ~= "Interface" then + luci.http.redirect(m.redirect) + return +end + +i = m:section(NamedSection, arg[1], "Interface", translate("Interface")) +i.anonymous = true +i.addremove = false + +i:tab("general", translate("General Settings")) +i:tab("addrs", translate("IP Addresses")) +i:tab("timing", translate("Timing and Validity")) + +ign = i:taboption("general", Flag, "ignore", translate("Enable"), + translate("Enable this interface.")) +ign.enabled = "0" +ign.disabled = "1" +ign.rmempty = false +function ign.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" +end + +network = i:taboption("general", Value, "interface", translate("Network"), + translate("The interface OLSRd should serve.")) + +network.template = "cbi/network_netlist" +network.widget = "radio" +network.nocreate = true + +mode = i:taboption("general", ListValue, "Mode", translate("Mode"), + translate("Interface Mode is used to prevent unnecessary packet forwarding on switched ethernet interfaces. ".. + "valid Modes are \"mesh\" and \"ether\". Default is \"mesh\".")) +mode:value("mesh") +mode:value("ether") +mode.optional = true +mode.rmempty = true + + +weight = i:taboption("general", Value, "Weight", translate("Weight"), + translate("When multiple links exist between hosts the weight of interface is used to determine the link to use. ".. + "Normally the weight is automatically calculated by olsrd based on the characteristics of the interface, ".. + "but here you can specify a fixed value. Olsrd will choose links with the lowest value.
".. + "Note: Interface weight is used only when LinkQualityLevel is set to 0. ".. + "For any other value of LinkQualityLevel, the interface ETX value is used instead.")) +weight.optional = true +weight.datatype = "uinteger" +weight.placeholder = "0" + +lqmult = i:taboption("general", DynamicList, "LinkQualityMult", translate("LinkQuality Multiplicator"), + translate("Multiply routes with the factor given here. Allowed values are between 0.01 and 1.0. ".. + "It is only used when LQ-Level is greater than 0. Examples:
".. + "reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
".. + "reduce LQ to all nodes on this interface by 20%: default 0.8")) +lqmult.optional = true +lqmult.rmempty = true +lqmult.cast = "table" +lqmult.placeholder = "default 1.0" + +function lqmult.validate(self, value) + for _, v in pairs(value) do + if v ~= "" then + local val = util.split(v, " ") + local host = val[1] + local mult = val[2] + if not host or not mult then + return nil, translate("LQMult requires two values (IP address or 'default' and multiplicator) seperated by space.") + end + if not (host == "default" or ip.IPv6(host)) then + return nil, translate("Can only be a valid IPv6 address or 'default'") + end + if not tonumber(mult) or tonumber(mult) > 1 or tonumber(mult) < 0.01 then + return nil, translate("Invalid Value for LQMult-Value. Must be between 0.01 and 1.0.") + end + if not mult:match("[0-1]%.[0-9]+") then + return nil, translate("Invalid Value for LQMult-Value. You must use a decimal number between 0.01 and 1.0 here.") + end + end + end + return value +end + +ip6m = i:taboption("addrs", Value, "IPv6Multicast", translate("IPv6 multicast"), + translate("IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal multicast.")) +ip6m.optional = true +ip6m.datatype = "ip6addr" +ip6m.placeholder = "FF02::6D" + +ip6s = i:taboption("addrs", Value, "IPv6Src", translate("IPv6 source"), + translate("IPv6 src prefix. OLSRd will choose one of the interface IPs which matches the prefix of this parameter. ".. + "Default is \"0::/0\", which triggers the usage of a not-linklocal interface IP.")) +ip6s.optional = true +ip6s.datatype = "ip6addr" +ip6s.placeholder = "0::/0" + +hi = i:taboption("timing", Value, "HelloInterval", translate("Hello interval")) +hi.optional = true +hi.datatype = "ufloat" +hi.placeholder = "5.0" +hi.write = write_float + +hv = i:taboption("timing", Value, "HelloValidityTime", translate("Hello validity time")) +hv.optional = true +hv.datatype = "ufloat" +hv.placeholder = "40.0" +hv.write = write_float + +ti = i:taboption("timing", Value, "TcInterval", translate("TC interval")) +ti.optional = true +ti.datatype = "ufloat" +ti.placeholder = "2.0" +ti.write = write_float + +tv = i:taboption("timing", Value, "TcValidityTime", translate("TC validity time")) +tv.optional = true +tv.datatype = "ufloat" +tv.placeholder = "256.0" +tv.write = write_float + +mi = i:taboption("timing", Value, "MidInterval", translate("MID interval")) +mi.optional = true +mi.datatype = "ufloat" +mi.placeholder = "18.0" +mi.write = write_float + +mv = i:taboption("timing", Value, "MidValidityTime", translate("MID validity time")) +mv.optional = true +mv.datatype = "ufloat" +mv.placeholder = "324.0" +mv.write = write_float + +ai = i:taboption("timing", Value, "HnaInterval", translate("HNA interval")) +ai.optional = true +ai.datatype = "ufloat" +ai.placeholder = "18.0" +ai.write = write_float + +av = i:taboption("timing", Value, "HnaValidityTime", translate("HNA validity time")) +av.optional = true +av.datatype = "ufloat" +av.placeholder = "108.0" +av.write = write_float + +return m diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdplugins.lua b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdplugins.lua new file mode 100644 index 0000000..43d6a08 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdplugins.lua @@ -0,0 +1,259 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ip = require "luci.ip" +local fs = require "nixio.fs" + +if arg[1] then + mp = Map("olsrd", translate("OLSR - Plugins")) + + p = mp:section(TypedSection, "LoadPlugin", translate("Plugin configuration")) + p:depends("library", arg[1]) + p.anonymous = true + + ign = p:option(Flag, "ignore", translate("Enable")) + ign.enabled = "0" + ign.disabled = "1" + ign.rmempty = false + function ign.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" + end + + lib = p:option(DummyValue, "library", translate("Library")) + lib.default = arg[1] + + local function Range(x,y) + local t = {} + for i = x, y do t[#t+1] = i end + return t + end + + local function Cidr2IpMask(val) + if val then + for i = 1, #val do + local cidr = ip.IPv4(val[i]) or ip.IPv6(val[i]) + if cidr then + val[i] = cidr:network():string() .. " " .. cidr:mask():string() + end + end + return val + end + end + + local function IpMask2Cidr(val) + if val then + for i = 1, #val do + local ip, mask = val[i]:gmatch("([^%s]+)%s+([^%s]+)")() + local cidr + if ip and mask and ip:match(":") then + cidr = ip.IPv6(ip, mask) + elseif ip and mask then + cidr = ip.IPv4(ip, mask) + end + + if cidr then + val[i] = cidr:string() + end + end + return val + end + end + + + local knownPlParams = { + ["olsrd_bmf.so.1.5.3"] = { + { Value, "BmfInterface", "bmf0" }, + { Value, "BmfInterfaceIp", "10.10.10.234/24" }, + { Flag, "DoLocalBroadcast", "no" }, + { Flag, "CapturePacketsOnOlsrInterfaces", "yes" }, + { ListValue, "BmfMechanism", { "UnicastPromiscuous", "Broadcast" } }, + { Value, "BroadcastRetransmitCount", "2" }, + { Value, "FanOutLimit", "4" }, + { DynamicList, "NonOlsrIf", "br-lan" } + }, + + ["olsrd_dyn_gw.so.0.4"] = { + { Value, "Interval", "40" }, + { DynamicList, "Ping", "141.1.1.1" }, + { DynamicList, "HNA", "192.168.80.0/24", IpMask2Cidr, Cidr2IpMask } + }, + + ["olsrd_httpinfo.so.0.1"] = { + { Value, "port", "80" }, + { DynamicList, "Host", "163.24.87.3" }, + { DynamicList, "Net", "0.0.0.0/0", Cidr2IpMask } + }, + + ["olsrd_nameservice.so.0.3"] = { + { DynamicList, "name", "my-name.mesh" }, + { DynamicList, "hosts", "1.2.3.4 name-for-other-interface.mesh" }, + { Value, "suffix", ".olsr" }, + { Value, "hosts_file", "/path/to/hosts_file" }, + { Value, "add_hosts", "/path/to/file" }, + { Value, "dns_server", "141.1.1.1" }, + { Value, "resolv_file", "/path/to/resolv.conf" }, + { Value, "interval", "120" }, + { Value, "timeout", "240" }, + { Value, "lat", "12.123" }, + { Value, "lon", "12.123" }, + { Value, "latlon_file", "/var/run/latlon.js" }, + { Value, "latlon_infile", "/var/run/gps.txt" }, + { Value, "sighup_pid_file", "/var/run/dnsmasq.pid" }, + { Value, "name_change_script", "/usr/local/bin/announce_new_hosts.sh" }, + { DynamicList, "service", "http://me.olsr:80|tcp|my little homepage" }, + { Value, "services_file", "/var/run/services_olsr" }, + { Value, "services_change_script", "/usr/local/bin/announce_new_services.sh" }, + { DynamicList, "mac", "xx:xx:xx:xx:xx:xx[,0-255]" }, + { Value, "macs_file", "/path/to/macs_file" }, + { Value, "macs_change_script", "/path/to/script" } + }, + + ["olsrd_quagga.so.0.2.2"] = { + { StaticList, "redistribute", { + "system", "kernel", "connect", "static", "rip", "ripng", "ospf", + "ospf6", "isis", "bgp", "hsls" + } }, + { ListValue, "ExportRoutes", { "only", "both" } }, + { Flag, "LocalPref", "true" }, + { Value, "Distance", Range(0,255) } + }, + + ["olsrd_secure.so.0.5"] = { + { Value, "Keyfile", "/etc/private-olsr.key" } + }, + + ["olsrd_txtinfo.so.0.1"] = { + { Value, "accept", "127.0.0.1" } + }, + + ["olsrd_jsoninfo.so.0.0"] = { + { Value, "accept", "127.0.0.1" }, + { Value, "port", "9090" }, + { Value, "UUIDFile", "/etc/olsrd/olsrd.uuid" }, + + }, + + ["olsrd_watchdog.so.0.1"] = { + { Value, "file", "/var/run/olsrd.watchdog" }, + { Value, "interval", "30" } + }, + + ["olsrd_mdns.so.1.0.0"] = { + { DynamicList, "NonOlsrIf", "lan" } + }, + + ["olsrd_p2pd.so.0.1.0"] = { + { DynamicList, "NonOlsrIf", "lan" }, + { Value, "P2pdTtl", "10" } + }, + + ["olsrd_arprefresh.so.0.1"] = {}, + ["olsrd_dot_draw.so.0.3"] = {}, + ["olsrd_dyn_gw_plain.so.0.4"] = {}, + ["olsrd_pgraph.so.1.1"] = {}, + ["olsrd_tas.so.0.1"] = {} + } + + + -- build plugin options with dependencies + if knownPlParams[arg[1]] then + for _, option in ipairs(knownPlParams[arg[1]]) do + local otype, name, default, uci2cbi, cbi2uci = unpack(option) + local values + + if type(default) == "table" then + values = default + default = default[1] + end + + if otype == Flag then + local bool = p:option( Flag, name, name ) + if default == "yes" or default == "no" then + bool.enabled = "yes" + bool.disabled = "no" + elseif default == "on" or default == "off" then + bool.enabled = "on" + bool.disabled = "off" + elseif default == "1" or default == "0" then + bool.enabled = "1" + bool.disabled = "0" + else + bool.enabled = "true" + bool.disabled = "false" + end + bool.optional = true + bool.default = default + bool:depends({ library = plugin }) + else + local field = p:option( otype, name, name ) + if values then + for _, value in ipairs(values) do + field:value( value ) + end + end + if type(uci2cbi) == "function" then + function field.cfgvalue(self, section) + return uci2cbi(otype.cfgvalue(self, section)) + end + end + if type(cbi2uci) == "function" then + function field.formvalue(self, section) + return cbi2uci(otype.formvalue(self, section)) + end + end + field.optional = true + field.default = default + --field:depends({ library = arg[1] }) + end + end + end + + return mp + +else + + mpi = Map("olsrd", translate("OLSR - Plugins")) + + local plugins = {} + mpi.uci:foreach("olsrd", "LoadPlugin", + function(section) + if section.library and not plugins[section.library] then + plugins[section.library] = true + end + end + ) + + -- create a loadplugin section for each found plugin + for v in fs.dir("/usr/lib") do + if v:sub(1, 6) == "olsrd_" then + if not plugins[v] then + mpi.uci:section( + "olsrd", "LoadPlugin", nil, + { library = v, ignore = 1 } + ) + end + end + end + + t = mpi:section( TypedSection, "LoadPlugin", translate("Plugins") ) + t.anonymous = true + t.template = "cbi/tblsection" + t.override_scheme = true + function t.extedit(self, section) + local lib = self.map:get(section, "library") or "" + return luci.dispatcher.build_url("admin", "services", "olsrd", "plugins") .. "/" .. lib + end + + ign = t:option( Flag, "ignore", translate("Enabled") ) + ign.enabled = "0" + ign.disabled = "1" + ign.rmempty = false + function ign.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" + end + + t:option( DummyValue, "library", translate("Library") ) + + return mpi +end diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdplugins6.lua b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdplugins6.lua new file mode 100644 index 0000000..d1c68be --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/model/cbi/olsr/olsrdplugins6.lua @@ -0,0 +1,259 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ip = require "luci.ip" +local fs = require "nixio.fs" + +if arg[1] then + mp = Map("olsrd6", translate("OLSR - Plugins")) + + p = mp:section(TypedSection, "LoadPlugin", translate("Plugin configuration")) + p:depends("library", arg[1]) + p.anonymous = true + + ign = p:option(Flag, "ignore", translate("Enable")) + ign.enabled = "0" + ign.disabled = "1" + ign.rmempty = false + function ign.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" + end + + lib = p:option(DummyValue, "library", translate("Library")) + lib.default = arg[1] + + local function Range(x,y) + local t = {} + for i = x, y do t[#t+1] = i end + return t + end + + local function Cidr2IpMask(val) + if val then + for i = 1, #val do + local cidr = ip.IPv4(val[i]) or ip.IPv6(val[i]) + if cidr then + val[i] = cidr:network():string() .. " " .. cidr:mask():string() + end + end + return val + end + end + + local function IpMask2Cidr(val) + if val then + for i = 1, #val do + local ip, mask = val[i]:gmatch("([^%s]+)%s+([^%s]+)")() + local cidr + if ip and mask and ip:match(":") then + cidr = ip.IPv6(ip, mask) + elseif ip and mask then + cidr = ip.IPv4(ip, mask) + end + + if cidr then + val[i] = cidr:string() + end + end + return val + end + end + + + local knownPlParams = { + ["olsrd_bmf.so.1.5.3"] = { + { Value, "BmfInterface", "bmf0" }, + { Value, "BmfInterfaceIp", "10.10.10.234/24" }, + { Flag, "DoLocalBroadcast", "no" }, + { Flag, "CapturePacketsOnOlsrInterfaces", "yes" }, + { ListValue, "BmfMechanism", { "UnicastPromiscuous", "Broadcast" } }, + { Value, "BroadcastRetransmitCount", "2" }, + { Value, "FanOutLimit", "4" }, + { DynamicList, "NonOlsrIf", "br-lan" } + }, + + ["olsrd_dyn_gw.so.0.4"] = { + { Value, "Interval", "40" }, + { DynamicList, "Ping", "141.1.1.1" }, + { DynamicList, "HNA", "192.168.80.0/24", IpMask2Cidr, Cidr2IpMask } + }, + + ["olsrd_httpinfo.so.0.1"] = { + { Value, "port", "80" }, + { DynamicList, "Host", "163.24.87.3" }, + { DynamicList, "Net", "0.0.0.0/0", Cidr2IpMask } + }, + + ["olsrd_nameservice.so.0.3"] = { + { DynamicList, "name", "my-name.mesh" }, + { DynamicList, "hosts", "1.2.3.4 name-for-other-interface.mesh" }, + { Value, "suffix", ".olsr" }, + { Value, "hosts_file", "/path/to/hosts_file" }, + { Value, "add_hosts", "/path/to/file" }, + { Value, "dns_server", "141.1.1.1" }, + { Value, "resolv_file", "/path/to/resolv.conf" }, + { Value, "interval", "120" }, + { Value, "timeout", "240" }, + { Value, "lat", "12.123" }, + { Value, "lon", "12.123" }, + { Value, "latlon_file", "/var/run/latlon.js.ipv6" }, + { Value, "latlon_infile", "/var/run/gps.txt" }, + { Value, "sighup_pid_file", "/var/run/dnsmasq.pid" }, + { Value, "name_change_script", "/usr/local/bin/announce_new_hosts.sh" }, + { DynamicList, "service", "http://me.olsr:80|tcp|my little homepage" }, + { Value, "services_file", "/var/run/services_olsr" }, + { Value, "services_change_script", "/usr/local/bin/announce_new_services.sh" }, + { DynamicList, "mac", "xx:xx:xx:xx:xx:xx[,0-255]" }, + { Value, "macs_file", "/path/to/macs_file" }, + { Value, "macs_change_script", "/path/to/script" } + }, + + ["olsrd_quagga.so.0.2.2"] = { + { StaticList, "redistribute", { + "system", "kernel", "connect", "static", "rip", "ripng", "ospf", + "ospf6", "isis", "bgp", "hsls" + } }, + { ListValue, "ExportRoutes", { "only", "both" } }, + { Flag, "LocalPref", "true" }, + { Value, "Distance", Range(0,255) } + }, + + ["olsrd_secure.so.0.5"] = { + { Value, "Keyfile", "/etc/private-olsr.key" } + }, + + ["olsrd_txtinfo.so.0.1"] = { + { Value, "accept", "::1/128" } + }, + + ["olsrd_jsoninfo.so.0.0"] = { + { Value, "accept", "::1/128" }, + { Value, "port", "9090" }, + { Value, "UUIDFile", "/etc/olsrd/olsrd.uuid.ipv6" }, + + }, + + ["olsrd_watchdog.so.0.1"] = { + { Value, "file", "/var/run/olsrd.watchdog.ipv6" }, + { Value, "interval", "30" } + }, + + ["olsrd_mdns.so.1.0.0"] = { + { DynamicList, "NonOlsrIf", "lan" } + }, + + ["olsrd_p2pd.so.0.1.0"] = { + { DynamicList, "NonOlsrIf", "lan" }, + { Value, "P2pdTtl", "10" } + }, + + ["olsrd_arprefresh.so.0.1"] = {}, + ["olsrd_dot_draw.so.0.3"] = {}, + ["olsrd_dyn_gw_plain.so.0.4"] = {}, + ["olsrd_pgraph.so.1.1"] = {}, + ["olsrd_tas.so.0.1"] = {} + } + + + -- build plugin options with dependencies + if knownPlParams[arg[1]] then + for _, option in ipairs(knownPlParams[arg[1]]) do + local otype, name, default, uci2cbi, cbi2uci = unpack(option) + local values + + if type(default) == "table" then + values = default + default = default[1] + end + + if otype == Flag then + local bool = p:option( Flag, name, name ) + if default == "yes" or default == "no" then + bool.enabled = "yes" + bool.disabled = "no" + elseif default == "on" or default == "off" then + bool.enabled = "on" + bool.disabled = "off" + elseif default == "1" or default == "0" then + bool.enabled = "1" + bool.disabled = "0" + else + bool.enabled = "true" + bool.disabled = "false" + end + bool.optional = true + bool.default = default + bool:depends({ library = plugin }) + else + local field = p:option( otype, name, name ) + if values then + for _, value in ipairs(values) do + field:value( value ) + end + end + if type(uci2cbi) == "function" then + function field.cfgvalue(self, section) + return uci2cbi(otype.cfgvalue(self, section)) + end + end + if type(cbi2uci) == "function" then + function field.formvalue(self, section) + return cbi2uci(otype.formvalue(self, section)) + end + end + field.optional = true + field.default = default + --field:depends({ library = arg[1] }) + end + end + end + + return mp + +else + + mpi = Map("olsrd6", translate("OLSR - Plugins")) + + local plugins = {} + mpi.uci:foreach("olsrd6", "LoadPlugin", + function(section) + if section.library and not plugins[section.library] then + plugins[section.library] = true + end + end + ) + + -- create a loadplugin section for each found plugin + for v in fs.dir("/usr/lib") do + if v:sub(1, 6) == "olsrd_" then + if not plugins[v] then + mpi.uci:section( + "olsrd6", "LoadPlugin", nil, + { library = v, ignore = 1 } + ) + end + end + end + + t = mpi:section( TypedSection, "LoadPlugin", translate("Plugins") ) + t.anonymous = true + t.template = "cbi/tblsection" + t.override_scheme = true + function t.extedit(self, section) + local lib = self.map:get(section, "library") or "" + return luci.dispatcher.build_url("admin", "services", "olsrd6", "plugins") .. "/" .. lib + end + + ign = t:option( Flag, "ignore", translate("Enabled") ) + ign.enabled = "0" + ign.disabled = "1" + ign.rmempty = false + function ign.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" + end + + t:option( DummyValue, "library", translate("Library") ) + + return mpi +end diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/tools/olsr.lua b/feeds/luci/applications/luci-app-olsr/luasrc/tools/olsr.lua new file mode 100644 index 0000000..781b265 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/tools/olsr.lua @@ -0,0 +1,33 @@ +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +module("luci.tools.olsr", package.seeall) + +function etx_color(etx) + local color = "#bb3333" + if etx == 0 then + color = "#bb3333" + elseif etx < 2 then + color = "#00cc00" + elseif etx < 4 then + color = "#ffcb05" + elseif etx < 10 then + color = "#ff6600" + end + return color +end + +function snr_color(snr) + local color = "#bb3333" + if snr == 0 then + color = "#bb3333" + elseif snr > 30 then + color = "#00cc00" + elseif snr > 20 then + color = "#ffcb05" + elseif snr > 5 then + color = "#ff6600" + end + return color +end + diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/common_js.htm b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/common_js.htm new file mode 100644 index 0000000..1ee763e --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/common_js.htm @@ -0,0 +1,35 @@ +<% if has_v4 and has_v6 then %> + +<%end %> diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/error_olsr.htm b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/error_olsr.htm new file mode 100644 index 0000000..eb41219 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/error_olsr.htm @@ -0,0 +1,11 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

<%:OLSR Daemon%>

+

<%:Unable to connect to the OLSR daemon!%>

+

<%:Make sure that OLSRd is running, the "jsoninfo" plugin is loaded, configured on port 9090 and accepts connections from "127.0.0.1".%>

+<%+footer%> diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm new file mode 100644 index 0000000..5ea7b74 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm @@ -0,0 +1,122 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<% +local i = 1 + +if luci.http.formvalue("status") == "1" then + local rv = {} + for k, hna in ipairs(hna) do + rv[#rv+1] = { + proto = hna["proto"], + destination = hna["destination"], + genmask = hna["genmask"], + gateway = hna["gateway"], + hostname = hna["hostname"], + validityTime = hna["validityTime"] + } + end + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + return +end +%> + +<%+header%> + + + + +

<%:Active host net announcements%>

+ +
+
+ + <%:Overview of currently active OLSR host net announcements%> + + + + + + + + + + + <% for k, route in ipairs(hna) do %> + + + + + <% if hna[k].validityTime then + validity = hna[k].validityTime .. 's' + else + validity = '-' + end %> + + + + + <% i = ((i % 2) + 1) + end %> + +
<%:Announced network%><%:OLSR gateway%><%:Validity Time%>
<%=hna[k].destination%>/<%=hna[k].genmask%> + <% if hna[k].proto == '6' then %> + <%=hna[k].gateway%> + <% else %> + <%=hna[k].gateway%> + <% end %> + <% if hna[k].hostname then %> + / <%=hna[k].hostname%> + <% end %> + <%=validity%>
+
+ +<%+status-olsr/common_js%> +<%+footer%> diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm new file mode 100644 index 0000000..81d0a3d --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm @@ -0,0 +1,50 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<% +local i = 1 +%> + +<%+header%> + +

<%:Interfaces%>

+ +
+ +
+ <%:Overview of interfaces where OLSR is running%> + + + + + + + + + + + + + <% for k, iface in ipairs(iface) do %> + + + + + + + + + + + <% i = ((i % 2) + 1) + end %> +
<%:Interface%><%:State%><%:MTU%><%:WLAN%><%:Source address%><%:Netmask%><%:Broadcast address%>
<%=iface.name%><%=iface.state%><%=iface.olsrMTU%><%=iface.wireless and luci.i18n.translate('yes') or luci.i18n.translate('no')%><%=iface.ipv4Address or iface.ipv6Address%><%=iface.netmask%><%=iface.broadcast or iface.multicast%>
+
+<%+status-olsr/common_js%> +<%+footer%> + + diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/legend.htm b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/legend.htm new file mode 100644 index 0000000..2f59848 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/legend.htm @@ -0,0 +1,24 @@ +

<%:Legend%>:

+
    +
  • LQ: <%:Success rate of packages received from the neighbour%>
  • +
  • NLQ: <%:Success rate of packages sent to the neighbour%>
  • +
  • ETX: <%:Expected retransmission count%>
  • +
  • +
      +
    • <%:Green%>:<%:Very good (ETX < 2)%>
    • +
    • <%:Yellow%>:<%:Good (2 < ETX < 4)%>
    • +
    • <%:Orange%>:<%:Still usable (4 < ETX < 10)%>
    • +
    • <%:Red%>:<%:Bad (ETX > 10)%>
    • +
    +
  • +
  • SNR: <%:Signal Noise Ratio in dB%>
  • +
  • +
      +
    • <%:Green%>:<%:Very good (SNR > 30)%>
    • +
    • <%:Yellow%>:<%:Good (30 > SNR > 20)%>
    • +
    • <%:Orange%>:<%:Still usable (20 > SNR > 5)%>
    • +
    • <%:Red%>:<%:Bad (SNR < 5)%>
    • +
    +
  • +
+ diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm new file mode 100644 index 0000000..f658288 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm @@ -0,0 +1,50 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<% +local i = 1 +%> + +<%+header%> +

<%:Active MID announcements%>

+ +
+
+ <%:Overview of known multiple interface announcements%> + + + + + + + <% for k, mid in ipairs(mids) do + local aliases = '' + for k,v in ipairs(mid.aliases) do + if aliases == '' then + sep = '' + else + sep = ', ' + end + aliases = v.ipAddress .. sep .. aliases + end + local host = mid.ipAddress + if mid.proto == '6' then + host = '[' .. mid.ipAddress .. ']' + end + %> + + + + + + + <% i = ((i % 2) + 1) + end %> +
<%:OLSR node%><%:Secondary OLSR interfaces%>
<%=mid.ipAddress%><%=aliases%>
+
+<%+status-olsr/common_js%> +<%+footer%> diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm new file mode 100644 index 0000000..c077c20 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm @@ -0,0 +1,174 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<% +local olsrtools = require "luci.tools.olsr" +local i = 1 + +if luci.http.formvalue("status") == "1" then + local rv = {} + for k, link in ipairs(links) do + link.linkCost = tonumber(link.linkCost) or 0 + if link.linkCost == 4194304 then + link.linkCost = 0 + end + local color = olsrtools.etx_color(link.linkCost) + local snr_color = olsrtools.snr_color(link.snr) + defaultgw_color = "" + if link.defaultgw == 1 then + defaultgw_color = "#ffff99" + end + + rv[#rv+1] = { + rip = link.remoteIP, + hn = link.hostname, + lip = link.localIP, + ifn = link.interface, + lq = string.format("%.3f", link.linkQuality), + nlq = string.format("%.3f",link.neighborLinkQuality), + cost = string.format("%.3f", link.linkCost), + snr = link.snr, + signal = link.signal, + noise = link.noise, + color = color, + snr_color = snr_color, + dfgcolor = defaultgw_color, + proto = link.proto + } + end + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + return +end +%> + +<%+header%> + + + + + +

<%:OLSR connections%>

+ +
+ +
+ <%:Overview of currently established OLSR connections%> + + + + + + + + + + + + + + + + + <% local i = 1 + for k, link in ipairs(links) do + link.linkCost = tonumber(link.linkCost) or 0 + if link.linkCost == 4194304 then + link.linkCost = 0 + end + + color = olsrtools.etx_color(link.linkCost) + snr_color = olsrtools.snr_color(link.snr) + + if link.snr == 0 then + link.snr = '?' + end + + defaultgw_color = "" + if link.defaultgw == 1 then + defaultgw_color = "#ffff99" + end + %> + + + <% if link.proto == "6" then %> + + <% else %> + + <% end %> + + + + + + + + + <% + i = ((i % 2) + 1) + end %> + +
<%:Neighbour IP%><%:Hostname%><%:Interface%><%:Local interface IP%>LQNLQETXSNR
<%=link.remoteIP%><%=link.remoteIP%><%=link.hostname%><%=link.interface%><%=link.localIP%><%=string.format("%.3f", link.linkQuality)%><%=string.format("%.3f", link.neighborLinkQuality)%><%=string.format("%.3f", link.linkCost)%><%=link.snr%>
+
+ +<%+status-olsr/legend%> +
+<%+status-olsr/common_js%> +<%+footer%> diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm new file mode 100644 index 0000000..61e17b3 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm @@ -0,0 +1,221 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<% + +has_ipv4_conf = luci.model.uci.cursor():get_first("olsrd", "olsrd", "IpVersion") +has_ipv6_conf = luci.model.uci.cursor():get_first("olsrd6", "olsrd", "IpVersion") + +function write_conf(conf, file) + local fs = require "nixio.fs" + if fs.access(conf) then + luci.http.header("Content-Disposition", "attachment; filename="..file) + luci.http.prepare_content("text/plain") + luci.http.write(fs.readfile(conf)) + end +end + +conf = luci.http.formvalue() + +if conf.openwrt_v4 then + write_conf("/etc/config/olsrd", "olsrd") + return false +end + +if conf.openwrt_v6 then + write_conf("/etc/config/olsrd6", "olsrd6") + return false +end + +if conf.conf_v4 then + write_conf("/var/etc/olsrd.conf", "olsrd.conf") + return false +end + +if conf.conf_v6 then + write_conf("/var/etc/olsrd6.conf", "olsrd6.conf") + return false +end + +%> + +<%+header%> + + + + + +
+ +

OLSR <%:Overview%>

+ +
+ <%:Network%> + + + + + + + + + + +
<%:Interfaces%> + + - + +
<%:Neighbors%> + + - + +
<%:Nodes%> + + - + +
<%:HNA%> + + - + +
<%:Links total%> + + - + +
<%:Links per node (average)%> + - +
+
+ + +
+ OLSR <%:Configuration%> + + + +
<%:Version%> + - +
<%:Download Config%> + <% if has_ipv4_conf then %> + OpenWrt (IPv4), + <% end %> + <% if has_ipv6_conf then %> + OpenWrt (IPv6), + <% end %> + <% if has_ipv4_conf then %> + OLSRD (IPv4), + <% end %> + <% if has_ipv6_conf then %> + OLSRD (IPv6) + <% end %> +
+
+ +<%+footer%> diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm new file mode 100644 index 0000000..8e46daa --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm @@ -0,0 +1,142 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<% + +local olsrtools = require "luci.tools.olsr" +local i = 1 + +if luci.http.formvalue("status") == "1" then + local rv = {} + for k, route in ipairs(routes) do + local ETX = string.format("%.3f", tonumber(route.rtpMetricCost)/1024 or 0) + rv[#rv+1] = { + hostname = route.hostname, + dest = route.destination, + genmask = route.genmask, + gw = route.gateway, + interface = route.networkInterface, + metric = route.metric, + etx = ETX, + color = olsrtools.etx_color(tonumber(ETX)) + } + end + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + return +end + +%> + +<%+header%> + + + + + + +

<%:Known OLSR routes%>

+ +
+ +
+<%:Overview of currently known routes to other OLSR nodes%> + + + + + + + + + + + + + + + <% for k, route in ipairs(routes) do + ETX = tonumber(route.rtpMetricCost)/1024 or '0' + color = olsrtools.etx_color(ETX) + %> + + + + + + + + + <% + i = ((i % 2) + 1) + end %> + +
<%:Announced network%><%:OLSR gateway%><%:Interface%><%:Metric%>ETX
<%=route.destination%>/<%=route.genmask%> + <% if route.proto == '6' then %> + <%=route.gateway%> + <% else %> + <%=route.gateway%> + <% end %> + <% if route.hostname then %> + / <%=route.hostname%> + <% end %> + <%=route.networkInterface%><%=route.metric%><%=string.format("%.3f", ETX)%>
+ +<%+status-olsr/legend%> +
+<%+status-olsr/common_js%> +<%+footer%> diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm new file mode 100644 index 0000000..6aa7a75 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm @@ -0,0 +1,152 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<% +local i = 1 +require("luci.model.uci") +local uci = luci.model.uci.cursor_state() + +uci:foreach("olsrd", "olsrd", function(s) + if s.SmartGateway and s.SmartGateway == "yes" then has_smartgw = true end +end) + + +if luci.http.formvalue("status") == "1" then + local rv = {} + for k, gw in ipairs(gws) do + gw.tcPathCost = tonumber(gw.tcPathCost)/1024 or 0 + if gw.tcPathCost == 4096 then + gw.tcPathCost = 0 + end + + rv[#rv+1] = { + proto = gw.proto, + ipAddress = gw.ipAddress, + status = gw.ipv4Status or gw.ipv6Status, + tcPathCost = string.format("%.3f", gw.tcPathCost), + hopCount = gw.hopCount, + uplinkSpeed = gw.uplinkSpeed, + downlinkSpeed = gw.downlinkSpeed, + v4 = gw.ipv4 and luci.i18n.translate('yes') or luci.i18n.translate('no'), + v6 = gw.ipv6 and luci.i18n.translate('yes') or luci.i18n.translate('no'), + externalPrefix = gw.externalPrefix + } + end + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + return +end +%> + +<%+header%> + + + + + +<%+header%> + +

<%:SmartGW announcements%>

+ +
+ +<% if has_smartgw then %> + +
+ <%:Overview of smart gateways in this network%> + + + + + + + + + + + + + + + + + + <% for k, gw in ipairs(gws) do + + gw.tcPathCost = tonumber(gw.tcPathCost)/1024 or 0 + if gw.tcPathCost == 4096 then + gw.tcPathCost = 0 + end + %> + + + <% if gw.proto == '6' then %> + + <% else %> + + <% end %> + + + + + + + + + + + + <% i = ((i % 2) + 1) + end %> + +
<%:Gateway%><%:Status%><%:ETX%><%:Hops%><%:Uplink%><%:Downlink%><%:IPv4%><%:IPv6%><%:Prefix%>
<%=gw.ipAddress%><%=gw.ipAddress%><%=gw.ipv4Status or gw.ipv6Status or '-' %><%=string.format("%.3f", gw.tcPathCost)%><%=gw.hopCount%><%=gw.uplinkSpeed%><%=gw.downlinkSpeed%><%=gw.ipv4 and luci.i18n.translate('yes') or luci.i18n.translate('no')%><%=gw.ipv6 and luci.i18n.translate('yes') or luci.i18n.translate('no')%><%=gw.externalPrefix%>
+
+ +<% else %> + + <%:SmartGateway is not configured on this system.%> + +<% end %> + +<%+status-olsr/common_js%> +<%+footer%> diff --git a/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm new file mode 100644 index 0000000..b3abeae --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm @@ -0,0 +1,62 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<% +local i = 1 +local olsrtools = require "luci.tools.olsr" +%> + +<%+header%> +

<%:Active OLSR nodes%>

+ +
+ +
+ <%:Overview of currently known OLSR nodes%> + + + + + + + + + + <% for k, route in ipairs(routes) do + local cost = string.format("%.3f", tonumber(route.tcEdgeCost/1024) or 0) + local color = olsrtools.etx_color(tonumber(cost)) + local lq = string.format("%.3f", tonumber(route.linkQuality) or 0) + local nlq = string.format("%.3f", tonumber(route.neighborLinkQuality) or 0) + %> + + + + <% if route.proto == "6" then %> + + + + + <% else %> + + + + + <%end%> + + + + + + + <% i = ((i % 2) + 1) + end %> +
<%:OLSR node%><%:Last hop%><%:LQ%><%:NLQ%><%:ETX%>
<%=route.destinationIP%><%=route.lastHopIP%><%=route.destinationIP%><%=route.lastHopIP%><%=lq%><%=nlq%><%=cost%>
+<%+status-olsr/legend%> +
+ +<%+status-olsr/common_js%> +<%+footer%> diff --git a/feeds/luci/applications/luci-app-olsr/po/ca/olsr.po b/feeds/luci/applications/luci-app-olsr/po/ca/olsr.po new file mode 100644 index 0000000..db4bce1 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/ca/olsr.po @@ -0,0 +1,707 @@ +# olsr.pot +# generated from ./applications/luci-olsr/luasrc/i18n/olsr.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-06-06 11:22+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "Anuncis MID actius" + +msgid "Active OLSR nodes" +msgstr "Nodes OLSR actius" + +msgid "Active host net announcements" +msgstr "Anuncis de xarxa de màquines actives" + +msgid "Advanced Settings" +msgstr "Ajusts avançats" + +msgid "Allow gateways with NAT" +msgstr "Permet els passarel·les amb NAT " + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "Xarxa anunciada" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "Adreça de difusió" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "Configuració" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "Habilita" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "Habilita aquesta interfície." + +msgid "Enabled" +msgstr "Habilitat" + +msgid "Expected retransmission count" +msgstr "Compte de retransmissió previst" + +msgid "FIB metric" +msgstr "Mètrica FIB" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "Passarel·la" + +msgid "General Settings" +msgstr "Ajusts generals" + +msgid "General settings" +msgstr "Ajusts generals" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "HNA" + +msgid "HNA Announcements" +msgstr "Anuncis HNA" + +msgid "HNA interval" +msgstr "Interval HNA" + +msgid "HNA validity time" +msgstr "Temps de validesa HNA" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "Anuncis HNA" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "Interval Hello" + +msgid "Hello validity time" +msgstr "Temps de validesa Hello" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "Hna4" + +msgid "Hna6" +msgstr "Hna6" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "Adreces IP" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "Difusió IPv4" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "Difusió selectiva IPv6" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "Interfície" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "Interfícies" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "Protocol d'Internet" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "Rutes OLSR conegudes" + +msgid "LQ" +msgstr "LQ" + +msgid "LQ aging" +msgstr "Envelliment LQ" + +msgid "LQ algorithm" +msgstr "Algoritme LQ" + +msgid "LQ fisheye" +msgstr "LQ fisheye" + +msgid "LQ level" +msgstr "Nivell LQ" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "Últim salt" + +msgid "Legend" +msgstr "Llegenda" + +msgid "Library" +msgstr "Biblioteca" + +msgid "Link Quality Settings" +msgstr "Ajusts de qualitat d'enllaç" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "Multiplicador de qualitat d'enllaç" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "IP d'interfície local" + +msgid "MID" +msgstr "MID" + +msgid "MID interval" +msgstr "Interval MID" + +msgid "MID validity time" +msgstr "Temps de validesa MID" + +msgid "MTU" +msgstr "MTU" + +msgid "Main IP" +msgstr "IP principal" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "Mètric" + +msgid "Mode" +msgstr "Mode" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "Llindar NAT" + +msgid "NLQ" +msgstr "NLQ" + +msgid "Neighbors" +msgstr "Veïns" + +msgid "Neighbour IP" +msgstr "IP del veí" + +msgid "Neighbours" +msgstr "Veïns" + +msgid "Netmask" +msgstr "Màscara de xarxa" + +msgid "Network" +msgstr "Xarxa" + +msgid "Network address" +msgstr "Adreça de xarxa" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "OLSR" + +msgid "OLSR - Display Options" +msgstr "OLSR - Opcions de mostra" + +msgid "OLSR - HNA-Announcements" +msgstr "Anuncis OLSR - HNA" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "Anuncis OLSR - HNA" + +msgid "OLSR - Plugins" +msgstr "OLSR - Connectors" + +msgid "OLSR Daemon" +msgstr "Dimoni OLSR" + +msgid "OLSR Daemon - Interface" +msgstr "Dimoni OLSR - Interfície" + +msgid "OLSR connections" +msgstr "Connexions OLSR" + +msgid "OLSR gateway" +msgstr "Passarel·la OLSR" + +msgid "OLSR node" +msgstr "Node OLSR" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "Visió de conjunt" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "Visió de conjunt d'anuncis de xarxa de màquines OLSR actives" + +msgid "Overview of currently established OLSR connections" +msgstr "Visió de conjunt de les connexions OLSR establertes actualment" + +msgid "Overview of currently known OLSR nodes" +msgstr "Visió de conjunt dels nodes OLSR coneguts actualment" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "Visió de conjunt de rutes conegudes actualment a altres nodes OLSR" + +msgid "Overview of interfaces where OLSR is running" +msgstr "Visió de conjunt de interfícies on està funcionant OLSR" + +msgid "Overview of known multiple interface announcements" +msgstr "Visió de conjunt d'anuncis d'interfície múltiple coneguts" + +msgid "Overview of smart gateways in this network" +msgstr "Visió de conjunt de les passarel·les intel·ligents en aquesta xarxa" + +msgid "Plugin configuration" +msgstr "Configuració de connector" + +msgid "Plugins" +msgstr "Connectors" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "Taxa de sondeig" + +msgid "Port" +msgstr "Port" + +msgid "Prefix" +msgstr "Prefix" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "Interfícies OSLR secundàries" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "SmartGW" + +msgid "SmartGW announcements" +msgstr "Anuncis de SmartGW" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "Estat" + +msgid "Status" +msgstr "Estat" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "TC" + +msgid "TC interval" +msgstr "Interval TC" + +msgid "TC validity time" +msgstr "Temps de validesa TC" + +msgid "TOS value" +msgstr "Valor TOS" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "Sincronització i validitat" + +msgid "Topology" +msgstr "Topologia" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "No s'ha pogut connectar al dimoni OLSR" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "Utilitza histèresi" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "Versió" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "WLAN" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "Pes" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "Voluntat" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "Device" +#~ msgstr "Dispositiu" + +#~ msgid "" +#~ "Make sure that OLSRd is running, the \"txtinfo\" plugin is loaded, " +#~ "configured on port 2006 and accepts connections from \"127.0.0.1\"." +#~ msgstr "" +#~ "Assegura't que l'OLSRd està corrent, que el connector \"txtinfo\" està " +#~ "carregat, configurat al port 2006, i que accepta connexions de " +#~ "\"127.0.0.1\"." diff --git a/feeds/luci/applications/luci-app-olsr/po/cs/olsr.po b/feeds/luci/applications/luci-app-olsr/po/cs/olsr.po new file mode 100644 index 0000000..3166907 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/cs/olsr.po @@ -0,0 +1,693 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-21 14:56+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "Pokročilé nastavení" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "Špatné (ETX > 10)" + +msgid "Bad (SNR < 5)" +msgstr "Špatné (SNR < 5)" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "Konfigurace" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "Downlink" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "Povolit" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "Povolit toto rozhraní." + +msgid "Enabled" +msgstr "Povoleno" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "Gateway" + +msgid "General Settings" +msgstr "Obecné nastavení" + +msgid "General settings" +msgstr "Obecné nastavení" + +msgid "Good (2 < ETX < 4)" +msgstr "Dobré (2 < ETX < 4)" + +msgid "Good (30 > SNR > 20)" +msgstr "Dobré (30 > SNR > 20)" + +msgid "Green" +msgstr "Zelený" + +msgid "HNA" +msgstr "HNA" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "HNA interval" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "Skrýt IPv4" + +msgid "Hide IPv6" +msgstr "Skrýt IPv6" + +msgid "Hna4" +msgstr "Hna4" + +msgid "Hna6" +msgstr "Hna6" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "Hostname" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "IP adresy" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "IPv4 broadcast" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "IPv6 multicast" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "Rozhraní" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "Rozhraní" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "Internet protokol" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "LQ" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "LQ algoritmus" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "Poslední skok (hop)" + +msgid "Legend" +msgstr "Legenda" + +msgid "Library" +msgstr "Knihovna" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "IP lokálního rozhraní" + +msgid "MID" +msgstr "MID" + +msgid "MID interval" +msgstr "MID interval" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "MTU" + +msgid "Main IP" +msgstr "Hlavní IP" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "NLQ" + +msgid "Neighbors" +msgstr "Sousedé" + +msgid "Neighbour IP" +msgstr "IP souseda" + +msgid "Neighbours" +msgstr "Sousedé" + +msgid "Netmask" +msgstr "Maska sítě" + +msgid "Network" +msgstr "Síť" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "OLSR" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "OLSR - pluginy" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "Oranžový" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "Konfigurace pluginu" + +msgid "Plugins" +msgstr "Pluginy" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Prefix" +msgstr "Prefix" + +msgid "Red" +msgstr "Červený" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "Zobrazit IPv4" + +msgid "Show IPv6" +msgstr "Zobrazit IPv6" + +msgid "Signal Noise Ratio in dB" +msgstr "Úroveň šumu v dB" + +msgid "SmartGW" +msgstr "SmartGW" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "Stále použitelné (4 < ETX < 10)" + +msgid "Still usable (4 < ETX < 10)" +msgstr "Stále použitelné (4 < ETX < 10)" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "TC" + +msgid "TC interval" +msgstr "TC interval" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "TOS hodnota" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "Topologie" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "Uplink" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "Verze" + +msgid "Very good (ETX < 2)" +msgstr "Velmi dobré (ETX < 2)" + +msgid "Very good (SNR > 30)" +msgstr "Velmi dobré (SNR > 30)" + +msgid "WLAN" +msgstr "WLAN" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "Váha" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "Žlutý" + +msgid "no" +msgstr "ne" + +msgid "yes" +msgstr "ano" + +#~ msgid "Device" +#~ msgstr "Zařízení" diff --git a/feeds/luci/applications/luci-app-olsr/po/de/olsr.po b/feeds/luci/applications/luci-app-olsr/po/de/olsr.po new file mode 100644 index 0000000..a23a20d --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/de/olsr.po @@ -0,0 +1,814 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-11-21 20:54+0200\n" +"Last-Translator: Jo-Philipp \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "Aktive MID-Ankündigungen" + +msgid "Active OLSR nodes" +msgstr "Aktive OLSR-Knoten" + +msgid "Active host net announcements" +msgstr "Aktive HNA-Ankündigungen" + +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +msgid "Allow gateways with NAT" +msgstr "Gateways mit NAT erlauben" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "Auswahl von IPv4-Gateways erlauben, die zum Internet hin NAT verwenden" + +msgid "Announce uplink" +msgstr "Uplink ankündigen" + +msgid "Announced network" +msgstr "Angekündigtes Netzwerk" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" +"Beide Werte müssen in der 'dotted decimal' Schreibweise angegeben werden." + +msgid "Broadcast address" +msgstr "Broadcast-Adresse" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "Konfiguration" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "Anzeige" + +msgid "Downlink" +msgstr "Download-Bandbreite" + +msgid "Download Config" +msgstr "Konfiguration herunterladen" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "Aktivieren" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" +"SmartGateway aktivieren. Ist diese Option deaktiviert, dann werden alle " +"folgenden SmartGateway Einstellungen ignoriert. Der Defaultwert ist \"no\"." + +msgid "Enable this interface." +msgstr "Dieses Interface benutzen." + +msgid "Enabled" +msgstr "Aktiviert" + +msgid "Expected retransmission count" +msgstr "Zu erwartende Sendeversuche pro Paket" + +msgid "FIB metric" +msgstr "FIB-Metrik" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" +"FIBMetric bestimmt die Metrik für Hostrouten die olsrd setzt. \"flat\" setzt " +"die Metrik immer auf 2. Dies ist der bevorzugte Wert, da er dem Kernel dabei " +"hilft, veraltete Routen zu löschen. \"correct\" verwendet den Hopcount als " +"Metrik. \"approx\" benutzt ebenfalls den Hopcount als Metrik, updated diese " +"aber nur, wenn sich auch der Nexthop verändert hat. Der Defaultwert ist " +"\"flat\"." + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" +"Fisheye Mechanismus für TC-Nachrichten (ausgewählt entspricht ein). Der " +"Defaultwert ist \"ein\"" + +msgid "Gateway" +msgstr "Gateway" + +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +msgid "General settings" +msgstr "Allgemeine Einstellungen" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "HNA" + +msgid "HNA Announcements" +msgstr "HNA-Ankündigungen" + +msgid "HNA interval" +msgstr "HNA-Intervall" + +msgid "HNA validity time" +msgstr "HNA-Gültigkeit" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "HNA-Ankündigungen" + +msgid "Hello" +msgstr "Hello" + +msgid "Hello interval" +msgstr "Hello-Intervall" + +msgid "Hello validity time" +msgstr "Hello-Gültigkeit" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "Hna4" + +msgid "Hna6" +msgstr "Hna6" + +msgid "Hops" +msgstr "Sprünge" + +msgid "Hostname" +msgstr "Hostname" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" +"Rechner in einem OLSR-geroutetem Netzwerk können Konnektivität zu externen " +"Netzwerken mittels HNA-Nachrichten ankündigen." + +#, fuzzy +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" +"Rechner in einem OLSR-geroutetem Netzwerk können Konnektivität zu externen " +"Netzwerken mittels HNA-Nachrichten ankündigen." + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" +"Verwende Hysterese zur Berechnung von Links (nur verfügbar für Hopcount " +"Metric). Hysterese erhöht die Stabilität von berechneten Routen, verzögert " +"aber das Registrieren von Nachbarknoten. Der Defaultwert ist \"eingeschaltet" +"\"." + +msgid "IP Addresses" +msgstr "IP-Adressen" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" +"Die zu verwendende IP-Version. Wird 6and4 gewählt dann wird ein OLSRd-" +"Prozess für jedes Protokoll gestartet." + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "IPv4 Broadcast" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" +"IPv4 Broadcastadresse für ausgehende OLSR-Pakete. Ein häufig verwendetes " +"Beispiel ist 255.255.255.255. Der Defaultwert ist \"0.0.0.0\". Dies " +"verwendet die Broadcastadresse des Interfaces." + +msgid "IPv4 source" +msgstr "IPv4 Quell-IP" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" +"IPv4 Quell-IP für ausgehende OLSR-Nachrichten. Der Defaultwert ist " +"\"0.0.0.0\", dann wird die IP des Interfaces verwendet." + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "IPv6 Multicast" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" +"IPv6 Multicast-Adresse. Der Defaultwert ist \"FF02::6D\", die linklocal " +"Multicastadresse für MANETs." + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" +"IPv6 Netzwerk muss in 'full notation', der Prefix in CIDR Schreibweise " +"eingegeben werden." + +msgid "IPv6 source" +msgstr "IPv6 Quell-IP" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" +"IPv6 Quell-Prefix. OLSRd wählt eine IP als Quell-IP die innerhalb des " +"angegebenen Prefix liegt. Der Defaultwert ist \"0::/0\", damit wird eine " +"IPv6-Adresse des Interfaces verwendet die nicht linklocal ist." + +msgid "IPv6-Prefix of the uplink" +msgstr "IPv6-Präfix des Uplinks" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" +"Wenn sich die Route zum aktuellen Gateway ändert, dann wird sein ETX-Wert " +"zunächst mit diesem Wert multipliziert bevor er mit dem neuen ETX-Wert " +"verglichen wird. Damit kann \"flapping\" von Routen reduziert werden. Der " +"Wert kann zwischen 0.1 und 1.0 liegen, sollte aber nahe bei 1.0 sein.
ACHTUNG: Diese Einstellung darf nicht zusammen mit der etx_ffeth " +"Metrik verwendet werden!
Der Defaultwert ist \"1.0\"." + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" +"Benutzt dieser Knoten NAT für die Verbindung zum Internet? Der Defaultwert " +"ist \"yes\"." + +msgid "Interface" +msgstr "Schnittstelle" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" +"Mit dieser Einstellung kann unnötiges Forwarden von Paketen auf geswitchten " +"Ethernetschnittstellen unterbunden werden. Gültige Werte sind \"mesh\" und " +"\"ether\". Der Defaultwert ist \"mesh\"." + +msgid "Interfaces" +msgstr "Schnittstellen" + +msgid "Interfaces Defaults" +msgstr "Schnittstellen-Standards" + +msgid "Internet protocol" +msgstr "Internet Protokoll" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" +"Intervall mit dem Netzwerkschnittstellen auf Änderungen in ihrer " +"Konfiguration überprüft werden (in Sekunden). Der Defaultwert ist \"2.5\"." + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "Bekannte OLSR-Routen" + +msgid "LQ" +msgstr "LQ" + +msgid "LQ aging" +msgstr "LQ-Alterung" + +msgid "LQ algorithm" +msgstr "LQ-Algorithmus" + +msgid "LQ fisheye" +msgstr "LQ-Fisheye" + +msgid "LQ level" +msgstr "LQ-Level" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "letzter Hop" + +msgid "Legend" +msgstr "Legende" + +msgid "Library" +msgstr "Bibliothek" + +msgid "Link Quality Settings" +msgstr "Linkqualitätseinstellungen" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" +"Der Linkqualitäts-Alterungsfaktor kann nur zusammen mit Linkqualitylevel 2 " +"verwendet werden. Kleinere Werte bedeuten, dass ETX-Werte sich langsamer " +"verändern. Erlaubte Werte sind 0.01 bis 1.0." + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" +"Link Quality Algorithmus (nur für lq level 2).
etx_float: " +"floating point ETX mit exponentieller Alterung
etx_fpm: Dasselbe " +"wie etx_float, Berechnung jedoch mit Ganzzahlen
etx_ff: ETX " +"freifunk, eine ETX Variante die allen OLSR Traffic zur ETX Berechnung nutzt " +"(und nicht nur Hello-Nachrichten)
etx_ffeth: Inkompatible " +"Variante von etx_ff die Ethernetlinks mit ETX 0.1 erlaubt
Der Default " +"ist \"etx_ff\"" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" +"Mit dieser Option kann der Linkquality-Algorithmus gewählt werden.
0 = Linkquality nicht benutzen
2 = Linkquality für die " +"Wahl von MPRs und fürs Routing benutzen.
Der Defaultwert ist \"2\"." + +msgid "LinkQuality Multiplicator" +msgstr "LQ-Multiplikator" + +msgid "Links per node (average)" +msgstr "Verbindungen pro Node (Durchschnitt)" + +msgid "Links total" +msgstr "Verbindungen insgesamt" + +msgid "Local interface IP" +msgstr "Lokale Interface-IP" + +msgid "MID" +msgstr "MID" + +msgid "MID interval" +msgstr "MID-Intervall" + +msgid "MID validity time" +msgstr "MID-Gültigkeit" + +msgid "MTU" +msgstr "MTU" + +msgid "Main IP" +msgstr "Haupt-IP" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "Metrik" + +msgid "Mode" +msgstr "Modus" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +#, fuzzy +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" +"Multipliziere die Linkquality (LQ) für Routen mit dem hier angegebenen " +"Faktor, der zwischen 0.01 und 1 liegen kann. Beispiele:
halbiere die LQ " +"zu 192.168.0.1: 192.168.0.1 0.5
reduziere die LQ für alle Nodes die mit " +"diesem Interface kommunizieren um 20%: default 0.8" + +msgid "NAT threshold" +msgstr "NAT-Schwellenwert" + +msgid "NLQ" +msgstr "NLQ" + +msgid "Neighbors" +msgstr "Nachbarn" + +msgid "Neighbour IP" +msgstr "Nachbar-IP" + +msgid "Neighbours" +msgstr "Nachbarn" + +msgid "Netmask" +msgstr "Netzmaske" + +msgid "Network" +msgstr "Netzwerk" + +msgid "Network address" +msgstr "Netzwerk-Adresse" + +msgid "Nic changes poll interval" +msgstr "Abfrageintervall für Schnittstellenänderungen" + +msgid "Nodes" +msgstr "Knoten" + +msgid "OLSR" +msgstr "OLSR" + +msgid "OLSR - Display Options" +msgstr "OLSR - Anzeigeoptionen" + +msgid "OLSR - HNA-Announcements" +msgstr "OLSR - HNA-Ankündigungen" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "OLSR - HNA-Ankündigungen" + +msgid "OLSR - Plugins" +msgstr "OLSR - Plugins" + +msgid "OLSR Daemon" +msgstr "OLSR Daemon" + +msgid "OLSR Daemon - Interface" +msgstr "OLSR Daemon - Schnittstelle" + +msgid "OLSR connections" +msgstr "OLSR-Verbindungen" + +msgid "OLSR gateway" +msgstr "OLSR-Gateway" + +msgid "OLSR node" +msgstr "OLSR-Knoten" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "Übersicht" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "Übersicht über zur Zeit aktive OLSR-Netzwerk-Ankündigungen" + +msgid "Overview of currently established OLSR connections" +msgstr "Übersicht über aktuell bestehende OLSR-Verbindungen" + +msgid "Overview of currently known OLSR nodes" +msgstr "Übersicht über zur Zeit bekannte andere OLSR-Knoten" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "Übersicht über zur Zeit bekannte Routen zu anderen OLSR-Knoten" + +msgid "Overview of interfaces where OLSR is running" +msgstr "Übersicht über Interfaces auf denen OLSRd läuft." + +msgid "Overview of known multiple interface announcements" +msgstr "Übersicht über bekannte Mehrfachschnittstellenmeldungen" + +msgid "Overview of smart gateways in this network" +msgstr "Übersicht über Smart Gateways in diesem Netzwerk." + +msgid "Plugin configuration" +msgstr "Pluginkonfiguration" + +msgid "Plugins" +msgstr "Plugins" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "Abfragerate für OLSRd-Sockets in Sekunden. Der Defaultwert ist 0.05." + +msgid "Pollrate" +msgstr "Abfragerate" + +msgid "Port" +msgstr "Port" + +msgid "Prefix" +msgstr "Prefix" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "DNS auflösen" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" +"Hostnamen auf den Statusseiten auflösen. Dies ist in der Regel kein Problem, " +"wenn aber öffentliche IPs benutzt werden und das DNS-Setup nicht stabil ist, " +"dann werden die OLSR-Statusseiten nur sehr langsam laden. In diesem Fall " +"sollte man diese Option deaktivieren." + +msgid "Routes" +msgstr "Routen" + +msgid "Secondary OLSR interfaces" +msgstr "Sekundäre OLSR Schnittstellen" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" +"Setzt die Haupt-IP (originator ip) für diesen Router. Diese IP wird sich " +"NIEMALS während der Laufzeit von OLSRD verändern. Der Defaultwert ist " +"0.0.0.0. Damit wird die IP des ersten Interfaces verwendet." + +#, fuzzy +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" +"Setzt die Haupt-IP (originator ip) für diesen Router. Diese IP wird sich " +"NIEMALS während der Laufzeit von OLSRD verändern. Der Defaultwert ist " +"0.0.0.0. Damit wird die IP des ersten Interfaces verwendet." + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "Smart Gateway" + +msgid "SmartGW announcements" +msgstr "Smart Gateway Ankündigungen" + +msgid "SmartGateway is not configured on this system." +msgstr "Smart Gateway ist auf diesem System nicht konfiguriert." + +msgid "Source address" +msgstr "Quell-IP" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" +"Hiermit kann man die Geschwindigkeit des Uplinks dieses Knotens ankündigen. " +"Der erste Wert ist die Upload-, der zweite Wert die Downloadgeschwindigkeit. " +"Der Defaultwert ist \"128 1024\"." + +msgid "Speed of the uplink" +msgstr "Geschwindigkeit des Uplinks" + +msgid "State" +msgstr "Status" + +msgid "Status" +msgstr "Status" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "Erfolgsquote vom Nachbarn empfangener Pakete" + +msgid "Success rate of packages sent to the neighbour" +msgstr "Erfolgsquote zum Nachbarn gesendeter Pakete" + +msgid "TC" +msgstr "TC" + +msgid "TC interval" +msgstr "TC-Intervall" + +msgid "TC validity time" +msgstr "TC-Gültigkeit" + +msgid "TOS value" +msgstr "TOS-Wert" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" +"OLSR ist eine Implementation des Optimized Link State Routing Protokolls und " +"erlaubt damit Mesh-Routing für jegliche Netzwerkgeräte. Besuche olsrd.org für Hilfe und Dokumentation." + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" +"Hier kann ein Bereitschaftswert angegeben werden. Bleibt dieses Feld leer, " +"dann wird der Bereitschaftswert automatisch anhand von Akkukapazität und " +"Stromversorgung berechnet" + +msgid "The interface OLSRd should serve." +msgstr "Interface das OLSRd verwenden soll." + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" +"Port, den OLSRd benutzt. Dieser sollte in der Regel auf dem Defaultwert 698 " +"bleiben, was dem von IANA zugewiesenen Port für OLSRd entspricht." + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" +"Hiermit kann der externe IPv6-Präfix an Clients signalisiert werden. Dadurch " +"können Clients ihre lokale IP-Adresse ändern, um diesen IPv6-Gateway ohne " +"Übersetzung der IPv6-Adresse zu benutzen. Die maximale erlaubte Länge des " +"Präfix ist 64 bit. Der Defaultwert ist \"::/0\" (kein Präfix)." + +msgid "Timing and Validity" +msgstr "Taktung und Validität" + +msgid "Topology" +msgstr "Topologie" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" +"TOS-Wert für den IP-Header von OLSR-Nachrichten. Der Defaultwert ist \"16\"." + +msgid "Unable to connect to the OLSR daemon!" +msgstr "Es konnte keine Verbindung zum OLSR-Daemon hergestellt werden!" + +msgid "Uplink" +msgstr "Upload-Bandbreite" + +msgid "Uplink uses NAT" +msgstr "Der Uplink benutzt NAT." + +msgid "Use hysteresis" +msgstr "Hysterese aktivieren" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "Version" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "WLAN" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" +"WARNUNG: kmod-ipip ist nicht installiert. Ohne kmod-ipip wird SmartGateway " +"nicht funktionieren!" + +msgid "Weight" +msgstr "Gewichtung" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" +"Gibt es mehrere Links zwischen einzelnen Nodes dann wird ein Gewichtungswert " +"verwendet um zu bestimmen, welches Interface bevorzugt wird. Dieses Gewicht " +"wird in der Regel automatisch berechnet, kann hier jedoch mit einem festen " +"Wert überschrieben werden. OLSRd wählt den Link mit dem niedrigsten Wert. " +"
Hinweis: Diese Gewichtung ist nur möglich wenn " +"LinkQualityLevel= 0 ist. Für alle anderen Werte von LinkQualityLevel wird " +"stattdessen der ETX-Wert verwendet." + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" +"Welche Art von Uplink im Mesh angekündigt wird. Ein Uplink wird automatisch " +"anhand der lokal angekündigten HNA erkannt (0.0.0.0/0, ::ffff:0:0/96 oder " +"2000::/3). Der Defaultwert ist \"both\" (sowohl IPv4 als auch IPv6 Uplink " +"ankündigen sofern verfügbar)." + +#, fuzzy +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" +"Welche Art von Uplink im Mesh angekündigt wird. Ein Uplink wird automatisch " +"anhand der lokal angekündigten HNA erkannt (0.0.0.0/0, ::ffff:0:0/96 oder " +"2000::/3). Der Defaultwert ist \"both\" (sowohl IPv4 als auch IPv6 Uplink " +"ankündigen sofern verfügbar)." + +msgid "Willingness" +msgstr "Bereitschaft" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "Device" +#~ msgstr "Schnittstelle" + +#~ msgid "" +#~ "Make sure that OLSRd is running, the \"txtinfo\" plugin is loaded, " +#~ "configured on port 2006 and accepts connections from \"127.0.0.1\"." +#~ msgstr "" +#~ "Stellen Sie sicher das OLSRd läuft und das \"txtinfo\" Plugin auf Port " +#~ "2006 geladen und \"127.0.0.1\" als Accept-Host gesetzt ist." diff --git a/feeds/luci/applications/luci-app-olsr/po/el/olsr.po b/feeds/luci/applications/luci-app-olsr/po/el/olsr.po new file mode 100644 index 0000000..a3cf0d2 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/el/olsr.po @@ -0,0 +1,695 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-28 02:08+0200\n" +"PO-Revision-Date: 2012-03-31 15:41+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "Ενεργοί κόμβοι OLSR" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "Προχωρημένες Ρυθμίσεις" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "Ενεργοποίηση" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "Ενεργοποίηση αυτής της διεπαφής." + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "Πύλη" + +msgid "General Settings" +msgstr "Γενικές Ρυθμίσεις" + +msgid "General settings" +msgstr "Γενικές ρυθμίσεις" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "HNA" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "Διευθύνσεις IP" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "Διεπαφή" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "Διεπαφές" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "Συνδέσεις σύνολο" + +msgid "Local interface IP" +msgstr "IP τοπικής διεπαφής" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "MTU" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "Δίκτυο" + +msgid "Network address" +msgstr "Διεύθυνση δικτύου" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "OLSR" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "OLSR Δαίμονας" + +msgid "OLSR Daemon - Interface" +msgstr "OLSR Δαίμονας - Διεπαφή" + +msgid "OLSR connections" +msgstr "OLSR συνδέσεις" + +msgid "OLSR gateway" +msgstr "OLSR πύλη" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "Πόρτα" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "Διαδρομές" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "SmartGW" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "Τοπολογία" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "Έκδοση" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "Device" +#~ msgstr "Συσκευή" diff --git a/feeds/luci/applications/luci-app-olsr/po/en/olsr.po b/feeds/luci/applications/luci-app-olsr/po/en/olsr.po new file mode 100644 index 0000000..131005e --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/en/olsr.po @@ -0,0 +1,701 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:35+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "Active MID announcements" +msgstr "Active MID announcements" + +msgid "Active OLSR nodes" +msgstr "Active OLSR nodes" + +msgid "Active host net announcements" +msgstr "Active host net announcements" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "Announced network" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "Expected retransmission count" + +msgid "FIB metric" +msgstr "FIB metric" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "General settings" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "HNA interval" + +msgid "HNA validity time" +msgstr "HNA validity time" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "OLSR - HNA-Announcements" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "Hello interval" + +msgid "Hello validity time" +msgstr "Hello validity time" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "IPv4 broadcast" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "Internet protocol" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "Known OLSR routes" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "LQ aging" + +msgid "LQ algorithm" +msgstr "LQ algorithm" + +msgid "LQ fisheye" +msgstr "LQ fisheye" + +msgid "LQ level" +msgstr "LQ level" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "Last hop" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "Library" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "Local interface IP" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "MID interval" + +msgid "MID validity time" +msgstr "MID validity time" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "Neighbour IP" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "Netmask" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "OLSR - HNA-Announcements" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "OLSR - HNA-Announcements" + +msgid "OLSR - Plugins" +msgstr "OLSR - Plugins" + +msgid "OLSR Daemon" +msgstr "OLSR Daemon" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "OLSR connections" + +msgid "OLSR gateway" +msgstr "OLSR gateway" + +msgid "OLSR node" +msgstr "OLSR node" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "Overview of currently active OLSR host net announcements" + +msgid "Overview of currently established OLSR connections" +msgstr "Overview of currently established OLSR connections" + +msgid "Overview of currently known OLSR nodes" +msgstr "Overview of currently known OLSR nodes" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "Overview of currently known routes to other OLSR nodes" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "Overview of known multiple interface announcements" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "Plugin configuration" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "Pollrate" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "Prefix" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "Secondary OLSR interfaces" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "TC interval" + +msgid "TC validity time" +msgstr "TC validity time" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "Unable to connect to the OLSR daemon!" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "Use hysteresis" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "Willingness" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "" +#~ "Make sure that OLSRd is running, the \"txtinfo\" plugin is loaded, " +#~ "configured on port 2006 and accepts connections from \"127.0.0.1\"." +#~ msgstr "" +#~ "Make sure that OLSRd is running, the \"txtinfo\" plugin is loaded, " +#~ "configured on port 2006 and accepts connections from \"127.0.0.1\"." diff --git a/feeds/luci/applications/luci-app-olsr/po/es/olsr.po b/feeds/luci/applications/luci-app-olsr/po/es/olsr.po new file mode 100644 index 0000000..0e161bd --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/es/olsr.po @@ -0,0 +1,830 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2014-06-15 13:17+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "Declaraciones MID activas" + +msgid "Active OLSR nodes" +msgstr "Nodos OLSR activos" + +msgid "Active host net announcements" +msgstr "Declaraciones activas de máquinas en la red" + +msgid "Advanced Settings" +msgstr "Configuración avanzada" + +msgid "Allow gateways with NAT" +msgstr "Permitir pasarelas con NAT" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "Permitir seleccionar una pasarela IPv4 con NAT" + +msgid "Announce uplink" +msgstr "Declarar enlace de subida" + +msgid "Announced network" +msgstr "Red declarada" + +msgid "Bad (ETX > 10)" +msgstr "Mal (ETX > 10)" + +msgid "Bad (SNR < 5)" +msgstr "Mal (SNR < 5)" + +msgid "Both values must use the dotted decimal notation." +msgstr "Ambos valores en notación decimal con punto." + +msgid "Broadcast address" +msgstr "Dirección de propagación" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "Sólo puede ser una dirección IPv4 o IPv6 válidas o \"por defecto\"" + +#, fuzzy +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "Sólo puede ser una dirección IPv4 o IPv6 válidas o \"por defecto\"" + +msgid "Configuration" +msgstr "Configuración" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" +"No pude obtener datos. Asegúrese de que el plugin jsoninfo está instalado y " +"permite conexiones desde localhost." + +msgid "Display" +msgstr "Mostrar" + +msgid "Downlink" +msgstr "Enlace de bajada" + +msgid "Download Config" +msgstr "Configuración de descarga" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "Activar" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" +"Activar SmartGateway. Si se desactiva el resto de parámetros de SmartGateway " +"se ignoran. \"No\" por defecto." + +msgid "Enable this interface." +msgstr "Activar esta interfaz." + +msgid "Enabled" +msgstr "Activado" + +msgid "Expected retransmission count" +msgstr "Contador de retransmisión esperado" + +msgid "FIB metric" +msgstr "Métrica FIB" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" +"FIBMetric controla el valor métrico de los conjuntos OLSRd. \"Plano\" " +"significa que la métrica es siempre 2. Este es el valor preferido porque " +"ayuda al enrutador del kernel de linux a limpiar valores antiguos. \"Correct" +"\" usa como métrica el número de saltos. \"Approx\" usa la cuenta de saltos " +"también, pero solo la actualiza si cambia el siguiente salto también. Por " +"defecto \"flat\"." + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "Mecanismo Fisheye para TCs (marcado = activado). Activado por defecto" + +msgid "Gateway" +msgstr "Pasarela" + +msgid "General Settings" +msgstr "Configuración general" + +msgid "General settings" +msgstr "Configuración general" + +msgid "Good (2 < ETX < 4)" +msgstr "Bien (2 < ETX < 4)" + +msgid "Good (30 > SNR > 20)" +msgstr "Bien (30 > SNR > 20)" + +msgid "Green" +msgstr "Verde" + +msgid "HNA" +msgstr "HNA" + +msgid "HNA Announcements" +msgstr "Declaraciones HNA" + +msgid "HNA interval" +msgstr "Intervalo HNA" + +msgid "HNA validity time" +msgstr "Tiempo de validez de HNA" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "Declaraciones HNA" + +msgid "Hello" +msgstr "Saludo" + +msgid "Hello interval" +msgstr "Intervalo de saludo" + +msgid "Hello validity time" +msgstr "Tiempo de validez del saludo" + +msgid "Hide IPv4" +msgstr "Ocultar IPv4" + +msgid "Hide IPv6" +msgstr "Ocultar IPv6" + +msgid "Hna4" +msgstr "Hna4" + +msgid "Hna6" +msgstr "Hna6" + +msgid "Hops" +msgstr "Saltos" + +msgid "Hostname" +msgstr "Nombre de máquina" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" +"Las máquinas de una red OLSR pueden declarar conectividad con redes externas " +"usando mensajes HNA." + +#, fuzzy +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" +"Las máquinas de una red OLSR pueden declarar conectividad con redes externas " +"usando mensajes HNA." + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" +"Histéresis para la sensibilidad del enlace (sólo para métrica de saltos). La " +"histéresis da más robustez a la sensibilidad de enlace pero retrasa el " +"registro de vecinos. \"Sí\" por defecto" + +msgid "IP Addresses" +msgstr "Direcciones IP" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" +"Versión IP a usar. Si se selecciona 6and4 se arrancarán una instancia de " +"oslrd para cada protocolo." + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "Propagar IPv4" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" +"Dirección de propagación IPv4 para paquetes salientes OLSR. Por ejemplo " +"\"255.255.255.255\". Por defecto es \"0.0.0.0\" que hace que se use la " +"interfaz de propagación IP." + +msgid "IPv4 source" +msgstr "IPv4 origen" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" +"Dirección origen IPv4 para paquetes OLSR. Por defecto es \"0.0.0.0\" que " +"hace que se use la interfaz de propagación IP." + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "Multidifusión IPv6" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" +"Dirección IPv6 de multidifusión. Por defecto es \"FF02::6D\", la dirección " +"de multidifusión local en routers MANET." + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" +"La red IPv6 debe escribirse en notación completa y el prefijo debe estar en " +"notación CIDR." + +msgid "IPv6 source" +msgstr "IPv6 origen" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" +"Prefijo origen IPv6. OLSRd elegirá un interfaz IP que encaje con el prefijo " +"de este parámetro. Por defecto es \"0::/0\" que provoca el uso de un " +"interfaz IP no local." + +msgid "IPv6-Prefix of the uplink" +msgstr "Prefijo IPv6 para el enlace de subida" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" +"Si la ruta a la pasarela actual cambia su ETX de se multiplica por este " +"valor antes de compararse con el nuevo. El parámetro debe estar entre 0.1 y " +"1.0, pero debería aproximarse a 1.0 si se cambia.
AVISO: No debe " +"usarse junto con la métrica etx_ffeth!
Por defecto es 1.0." + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "Este nodo usa NAT para conectar a internet. \"Sí\" por defecto." + +msgid "Interface" +msgstr "Interfaz" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" +"El modo de interfaz se usar para evitar traspaso innecesario de paquetes en " +"interfaces de red conmutados. Los modos válidos son \"mesh\" y \"ether\". " +"Por defecto es \"mesh\"." + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interfaces Defaults" +msgstr "Valores por defecto de los interfaces" + +msgid "Internet protocol" +msgstr "Protocolo de Internet" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" +"Intervalo de sondeo de cambios de configuración a interfaces de red (en " +"segundos). Por defecto es \"2.5\"." + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "Valor no válido para LQMult-Value. Debe ser entre 0,01 y 1,0." + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" +"Valor no válido para LQMult-Value. Debe usar un número decimal entre 0,01 y " +"1,0." + +msgid "Known OLSR routes" +msgstr "Rutas OLSR conocidas" + +msgid "LQ" +msgstr "LQ" + +msgid "LQ aging" +msgstr "LQ - Envejecimiento" + +msgid "LQ algorithm" +msgstr "LQ - Algoritmo" + +msgid "LQ fisheye" +msgstr "LQ - Ojo de pez" + +msgid "LQ level" +msgstr "LQ - Nivel" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" +"LQMult precisa dos valores (dirección IP o \"por defecto\" y multiplicador) " +"separados por un espacio." + +msgid "Last hop" +msgstr "Último salto" + +msgid "Legend" +msgstr "Leyenda" + +msgid "Library" +msgstr "Biblioteca" + +msgid "Link Quality Settings" +msgstr "Configuración de calidad de enlace" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" +"Factor de envejecimiento de la calidad del enlace (sólo para CE nivel 2). " +"Parámetro de ajuste para etx_float y etx_fpm, valores menores implican " +"cambios más lentos en el valor ETX. (los valores permitidos están entre 0.01 " +"y 1.0)" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" +"Algoritmo de calidad de enlace (solo para CE nivel 2).
etx_float: ETX en punto flotante con envejecimiento exponencial
etx_fpm : igual que etx_float, pero con aritmética entera
etx_ff : " +"ETX freifunk, variante etx que usar todo el tráfico OLSR (en vez de sólo " +"\"hellos\") para los cálculos ETX
etx_ffeth: variante " +"incompatible de etx_ff que permite enlaces ethernet con ETX 0.1.
Por " +"defecto \"etx_ff\"" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" +"Intercambio del nivel de calidad del enlace entre \"cuenta de saltos\" y " +"enrutado \"basado en coste\" (principalmente ETX).
0 = no usar " +"calidad del enlace
2 = use calidad del enlace para selección de " +"MPR y enrutado
Por defecto es 2" + +msgid "LinkQuality Multiplicator" +msgstr "Multilplicador de calidad de enlace" + +msgid "Links per node (average)" +msgstr "Media de enlaces por nodo" + +msgid "Links total" +msgstr "Enlaces totales" + +msgid "Local interface IP" +msgstr "IP de la interfaz local" + +msgid "MID" +msgstr "MID" + +msgid "MID interval" +msgstr "Intervalo de MID" + +msgid "MID validity time" +msgstr "Tiempo de validez de MID" + +msgid "MTU" +msgstr "MTU" + +msgid "Main IP" +msgstr "IP principal" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" +"Asegúrese de que OLSRd funciona y de que el plugin \"jsoninfo\" está " +"cargado, configurado en el puerto 9090 y que acepta conexiones desde " +"127.0.0.1." + +msgid "Metric" +msgstr "Métrica" + +msgid "Mode" +msgstr "Modo" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" +"Multiplicar las rutas con el factor dado aquí. Los valores permitidos está " +"entre 0,01 y 1,0. Se usa sólo cuando el nivel LQ es mayor que 0. Ejemplos:" +"
reducir LQ a 192.168.0.1 por la mitad: 192.168.0.1 0,5
reducir LQ " +"a todos los nodos de esta interfaz el 20%: default 0,8" + +#, fuzzy +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" +"Multiplicar las rutas con el factor dado aquí. Los valores permitidos está " +"entre 0,01 y 1,0. Se usa sólo cuando el nivel LQ es mayor que 0. Ejemplos:" +"
reducir LQ a 192.168.0.1 por la mitad: 192.168.0.1 0,5
reducir LQ " +"a todos los nodos de esta interfaz el 20%: default 0,8" + +msgid "NAT threshold" +msgstr "Umbral NAT" + +msgid "NLQ" +msgstr "NLQ" + +msgid "Neighbors" +msgstr "Vecinos" + +msgid "Neighbour IP" +msgstr "IP vecina" + +msgid "Neighbours" +msgstr "Vecinos" + +msgid "Netmask" +msgstr "Máscara de red" + +msgid "Network" +msgstr "Red" + +msgid "Network address" +msgstr "Dirección de red" + +msgid "Nic changes poll interval" +msgstr "Intervalo de muestreo de cambios de nic" + +msgid "Nodes" +msgstr "Nodos" + +msgid "OLSR" +msgstr "OLSR" + +msgid "OLSR - Display Options" +msgstr "OLSR - Mostrar opciones" + +msgid "OLSR - HNA-Announcements" +msgstr "OLSR - Declaraciones HNA" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "OLSR - Declaraciones HNA" + +msgid "OLSR - Plugins" +msgstr "OLSR - Plugins" + +msgid "OLSR Daemon" +msgstr "Demonio OLSR" + +msgid "OLSR Daemon - Interface" +msgstr "Demonio OLSR - Interfaz" + +msgid "OLSR connections" +msgstr "Conexiones OLSR" + +msgid "OLSR gateway" +msgstr "Puerta de enlace OLSR" + +msgid "OLSR node" +msgstr "Nodo OLSR" + +msgid "Orange" +msgstr "Naranja" + +msgid "Overview" +msgstr "Resumen" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "Resumen de declaraciones OLSR de máquinas activas" + +msgid "Overview of currently established OLSR connections" +msgstr "Resumen de conexiones de OLSR vivas" + +msgid "Overview of currently known OLSR nodes" +msgstr "Nodos conocidos OLSR" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "Rutas conocidas a otros nodos OLSR" + +msgid "Overview of interfaces where OLSR is running" +msgstr "Resumen de interfaces con OLSR en ejecución" + +msgid "Overview of known multiple interface announcements" +msgstr "Declaraciones de múltiples interfaces conocidas" + +msgid "Overview of smart gateways in this network" +msgstr "Pasarelas inteligentes en esta red" + +msgid "Plugin configuration" +msgstr "Configuración del plugin" + +msgid "Plugins" +msgstr "Plugins" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "Ratio de muestreo de paquetes OLSR en segundos. Por defecto es 0.05." + +msgid "Pollrate" +msgstr "Tasa de muestreo" + +msgid "Port" +msgstr "Puerto" + +msgid "Prefix" +msgstr "Prefijo" + +msgid "Red" +msgstr "Rojo" + +msgid "Resolve" +msgstr "Calcular" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" +"Calcula los nombres de máquina en las páginas de estado. Suele ser seguro, " +"pero las páginas se cargarán lentamente si usa IPs públicas y tiene una " +"configuración inestable de DNS." + +msgid "Routes" +msgstr "Rutas" + +msgid "Secondary OLSR interfaces" +msgstr "Interfaces OLSR secundarias" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" +"Configura la dirección IP principal (IP originadora) del router. NUNCA debe " +"cambiar mientras OLSRd esté activa. Por defecto es \"0.0.0.0\" que provoca " +"el uso de la IP del primer interfaz." + +#, fuzzy +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" +"Configura la dirección IP principal (IP originadora) del router. NUNCA debe " +"cambiar mientras OLSRd esté activa. Por defecto es \"0.0.0.0\" que provoca " +"el uso de la IP del primer interfaz." + +msgid "Show IPv4" +msgstr "Mostrar IPv4" + +msgid "Show IPv6" +msgstr "Mostrar IPv6" + +msgid "Signal Noise Ratio in dB" +msgstr "Ratio señal / ruido en dB" + +msgid "SmartGW" +msgstr "SmartGW" + +msgid "SmartGW announcements" +msgstr "Declaraciones SmartGW" + +msgid "SmartGateway is not configured on this system." +msgstr "SmartGateway no está configurado." + +msgid "Source address" +msgstr "Dirección origen" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" +"Especifica la velocidad del enlace en kilobits/s. El primer parámetro es la " +"subida y el segundo la bajada. Por defecto es \"128 1024\"." + +msgid "Speed of the uplink" +msgstr "Velocidad de subida" + +msgid "State" +msgstr "Estado" + +msgid "Status" +msgstr "Estado" + +msgid "Still usable (20 > SNR > 5)" +msgstr "Aún usable (20 > SNR > 5)" + +msgid "Still usable (4 < ETX < 10)" +msgstr "Aún usable (4 < ETX < 10)" + +msgid "Success rate of packages received from the neighbour" +msgstr "Ratio de éxito de paquetes recibidos de la vecindad" + +msgid "Success rate of packages sent to the neighbour" +msgstr "Ratio de éxito de paquetes enviados a la vecindad" + +msgid "TC" +msgstr "TC" + +msgid "TC interval" +msgstr "Intervalo TC" + +msgid "TC validity time" +msgstr "Validez de TC" + +msgid "TOS value" +msgstr "TOS" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" +"El demonio OLSR es una implementación del protocolo Optimized Link State " +"Routing. Permite enrutado mesh para cualquier equipo en red. Funciona sobre " +"cualquier tarjeta wi.fi que soporte el modo ad-hoc y cualquier dispositivo " +"ethernet. Puede visitar olsrd.org para " +"ayuda y documentación." + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" +"Willingness fija a usar. Si no se establece se calculará dinámicamente " +"basándose en el estado de la batería y la corriente. Por defecto es 3." + +msgid "The interface OLSRd should serve." +msgstr "Interfaz a usar por OLSRD." + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" +"Puerto a usar por OLSR. Debería ser 698 tal y como asigna IANA. Puede tener " +"un valor entre 1 y 65535." + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" +"Prefijo IPv6 a mostrar a clientes del enlace. Puede hacer que un cliente " +"cambio su dirección IPv6 para usar la pasarela sin ningún tipo de traducción " +"de dirección. La longitud máxima del prefijo es 64 bits. Por defecto es " +"\"::/0\" (sin prefijo)." + +msgid "Timing and Validity" +msgstr "Tiempo y validez" + +msgid "Topology" +msgstr "Topología" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" +"Tipo de servicio para la cabecera de control de tráfico de IP. Por defecto " +"es 16." + +msgid "Unable to connect to the OLSR daemon!" +msgstr "¡No puedo conectar con el demonio OLSR!" + +msgid "Uplink" +msgstr "Enlace saliente" + +msgid "Uplink uses NAT" +msgstr "El enlace saliente usa NAT" + +msgid "Use hysteresis" +msgstr "Usar histéresis" + +msgid "Validity Time" +msgstr "Tiempo de validez" + +msgid "Version" +msgstr "Versión" + +msgid "Very good (ETX < 2)" +msgstr "Muy bien (ETX < 2)" + +msgid "Very good (SNR > 30)" +msgstr "Muy bien (SNR > 30)" + +msgid "WLAN" +msgstr "WLAN" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" +"Aviso: kmod-ipip no está instalado. Sin kmod-ipip SmartGateway no funcionará." + +msgid "Weight" +msgstr "Peso" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" +"Cuando hayan múltiples enlaces entre máquinas el peso del interfaz se usar " +"para determinar qué enlace usar. Normalmente se calcula automáticamente " +"basándose en las características de la interfaz, pero puede indicar un valor " +"fijo. OLSRd elegirá enlaces con el valor menor.
Nota: El peso " +"del interfaz se usao sólo cuando LinkQualityLevel está en 0. Para otros " +"valores se usará el valor del interfaz EXT." + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" +"Tipo de enlace exportado a otros nodos del mesh. Un enlace se detecta " +"buscando una HNA local de 0.0.0.0/0, ::ffff:0:0/96 o 2000::/3. Por defecto " +"\"both\"." + +#, fuzzy +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" +"Tipo de enlace exportado a otros nodos del mesh. Un enlace se detecta " +"buscando una HNA local de 0.0.0.0/0, ::ffff:0:0/96 o 2000::/3. Por defecto " +"\"both\"." + +msgid "Willingness" +msgstr "Willingness" + +msgid "Yellow" +msgstr "Amarillo" + +msgid "no" +msgstr "no" + +msgid "yes" +msgstr "sí" + +#~ msgid "Device" +#~ msgstr "Dispositivo" + +#~ msgid "" +#~ "Make sure that OLSRd is running, the \"txtinfo\" plugin is loaded, " +#~ "configured on port 2006 and accepts connections from \"127.0.0.1\"." +#~ msgstr "" +#~ "Asegúrese de que OLSRd se está ejecutando, que el plugin \"txtinfo\" esté " +#~ "cargado, configurado en el puerto 2006 y que acepta conexiones desde " +#~ "127.0.0.1." + +#~ msgid "" +#~ "Multiply routes with the factor given here. Allowed values are between " +#~ "0.01 and 1. It is only used when LQ-Level is greater than 0. Examples:" +#~ "
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to " +#~ "all nodes on this interface by 20%: default 0.8" +#~ msgstr "" +#~ "Multiplicar rutas por este factor. Valores entre 0,01 y 1. Sólo se usa si " +#~ "el nivel de CA es mayor que 0. Ejemplos:
reducir CE a la mitad a " +#~ "192.168.0.1: \"192.168.0.1 0.5\"
reducir CE a todos los nodos en " +#~ "esta interfaz el 20%: \"default 0.8\"" diff --git a/feeds/luci/applications/luci-app-olsr/po/fr/olsr.po b/feeds/luci/applications/luci-app-olsr/po/fr/olsr.po new file mode 100644 index 0000000..e93a6bd --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/fr/olsr.po @@ -0,0 +1,692 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-01-15 05:35+0200\n" +"Last-Translator: desillu \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "IPv6 multidiffusion" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-olsr/po/he/olsr.po b/feeds/luci/applications/luci-app-olsr/po/he/olsr.po new file mode 100644 index 0000000..38aa43b --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/he/olsr.po @@ -0,0 +1,687 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-olsr/po/hu/olsr.po b/feeds/luci/applications/luci-app-olsr/po/hu/olsr.po new file mode 100644 index 0000000..38aa43b --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/hu/olsr.po @@ -0,0 +1,687 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-olsr/po/it/olsr.po b/feeds/luci/applications/luci-app-olsr/po/it/olsr.po new file mode 100644 index 0000000..a88d297 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/it/olsr.po @@ -0,0 +1,733 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-02-10 15:13+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "Annunci MID attivi" + +msgid "Active OLSR nodes" +msgstr "Nodi OLSR attivi" + +msgid "Active host net announcements" +msgstr "Annunci rete host attiva" + +msgid "Advanced Settings" +msgstr "Opzioni avanzate" + +msgid "Allow gateways with NAT" +msgstr "Permetti gateway con NAT" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "Permetti l'uso di gateway in uscita con NAT" + +msgid "Announce uplink" +msgstr "Annuncia uplink" + +msgid "Announced network" +msgstr "Rete da annnunciare" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "Entrambi i valori devono essere nella notazione decimale puntata" + +msgid "Broadcast address" +msgstr "Indirizzo di broadcast" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "Configurazione" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "Display" + +msgid "Downlink" +msgstr "Downlink" + +msgid "Download Config" +msgstr "Configurazione Download" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "Attiva" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" +"Abitita SmartGateway. Se è disattivata, tutti gli altri parametri " +"SmartGateway verrano ignorati. Predefinito è \"no\"." + +msgid "Enable this interface." +msgstr "Attiva questa interfaccia." + +msgid "Enabled" +msgstr "Attivato" + +msgid "Expected retransmission count" +msgstr "Expected retransmission count" + +msgid "FIB metric" +msgstr "Metrica FIB" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "Gateway" + +msgid "General Settings" +msgstr "Impostazioni Generali" + +msgid "General settings" +msgstr "Impostazioni Generali" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "HNA" + +msgid "HNA Announcements" +msgstr "Annuncio di HNA" + +msgid "HNA interval" +msgstr "Intervallo HNA" + +msgid "HNA validity time" +msgstr "Durata di validità HNA" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "Annuncio di HNA" + +msgid "Hello" +msgstr "Ciao" + +msgid "Hello interval" +msgstr "Intervallo Saluto" + +msgid "Hello validity time" +msgstr "Durata validità Saluto" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "Hna4" + +msgid "Hna6" +msgstr "Hna6" + +msgid "Hops" +msgstr "Hops" + +msgid "Hostname" +msgstr "Nome Host" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" +"Isteresi del link (solo per la metrica hopocount). L'isteresi aggiunge " +"robustezza alla sensibilità del link ma rallenta la registrazione dei " +"vicini. Default è \"si\"" + +msgid "IP Addresses" +msgstr "Indirizzi IP" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" +"Versione IP da usare. Se entrambe sono selezionate una istanza di olsrd è " +"avviata per ogni versione." + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" +"Indirizzo di broadcast per i pacchetti OLSR. Per esempio potresti avere " +"255.255.255.255. Default is 0.0.0.0, il che abilita l'uso dell'ip di " +"broadcast di default." + +msgid "IPv4 source" +msgstr "IPv4 source" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" +"IPv4 source per i pacchetti uscenti da OLSR. Predefinito \"0.0.0.0\", il che " +"abilita l'uso dell'IP dell'interfaccia di uscita." + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "IPv6 multicast" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" +"IPv6 network deve essere specificata in full notation, il prefisso deve " +"essere in CIDR notation." + +msgid "IPv6 source" +msgstr "IPv6 source" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" +"IPv6 src prefix. OLSRd sceglierà uno degli IP dell'interfaccia che matchano " +"questo parametro. Predefinito è \"0::/0\", il che abilita l'uso di un IP non-" +"linklocal." + +msgid "IPv6-Prefix of the uplink" +msgstr "IPv6-Prefix dell' uplink" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" +"Se la rotta del gateway attuale viene modificata, il valore di ETX del " +"gateway è moltiplicata per questo valore prima che sia comparato con nuovo " +"valore.Il parametro può essere compreso tra 0.1 e 1.0, ma si consiglia un " +"valore vicino a 1.0.
ATTENZIONE: Questo valore non deve essere " +"utilizzato insieme con la metrica etx_ffeth!
Defaults a \"1.0\"." + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" +"Se questo nodo usa un NAT per connettersi a Internet. Predefinito è \"si\"." + +msgid "Interface" +msgstr "Interfaccia" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "Annuncio di HNA" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "Impossibile connetersi al demone OLSR!" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "L'uplink usa il NAT" + +msgid "Use hysteresis" +msgstr "Usa l'isteresi" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "Versione" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "WLAN" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "Peso" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" +"Quando link multipli esisto tra gli hosts il peso dell'interfaccia viene " +"usato. Normalmente il peso è automaticamente calcolato dal demone olsrd in " +"base alle caratteristiche del link, ma qui puoi specificare un valore di " +"contrappeso. OLSRd sceglierà il link con il più basso valore.
Nota:Il peso dell'interfaccia è uso quando LinkQualityLevel è 0. Per ogni altro " +"valore di LinkQualityLevel, il valore di ETX è usato." + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" +"Quale tipo di uplink è mostrato agli altri nodi. Un uplink è individuato " +"cercando un HNA del tipo 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." + +#, fuzzy +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" +"Quale tipo di uplink è mostrato agli altri nodi. Un uplink è individuato " +"cercando un HNA del tipo 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "Device" +#~ msgstr "Periferica" diff --git a/feeds/luci/applications/luci-app-olsr/po/ja/olsr.po b/feeds/luci/applications/luci-app-olsr/po/ja/olsr.po new file mode 100644 index 0000000..b3f0109 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/ja/olsr.po @@ -0,0 +1,800 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-11-14 14:40+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "アクティブなMID(Multi Interface Declaration) 通知" + +msgid "Active OLSR nodes" +msgstr "アクティブなOLSRノード" + +msgid "Active host net announcements" +msgstr "アクティブなホストネットワーク通知" + +msgid "Advanced Settings" +msgstr "詳細設定" + +msgid "Allow gateways with NAT" +msgstr "NATを使用するゲートウェイを選択可能にする" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "NATを介してパケットを送信するIPv4 ゲートウェイを選択可能にします" + +msgid "Announce uplink" +msgstr "通知するアップリンク" + +msgid "Announced network" +msgstr "通知ネットワーク" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "どちらの値もドット付き十進数の形式で入力してください。" + +msgid "Broadcast address" +msgstr "ブロードキャストアドレス" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "設定" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "ディスプレイ" + +msgid "Downlink" +msgstr "ダウンリンク" + +msgid "Download Config" +msgstr "設定ダウンロード" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "有効" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" +"スマートゲートウェイを有効にします。無効の場合、その他全てのスマートゲート" +"ウェイの設定値は無視されます。標準設定は\"無効\"です。" + +msgid "Enable this interface." +msgstr "このインターフェースを有効にします。" + +msgid "Enabled" +msgstr "有効" + +msgid "Expected retransmission count" +msgstr "再送数の期待値" + +msgid "FIB metric" +msgstr "FIB メトリック" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" +"FIB メトリックは、OLSRdが設定するホスト経路のメトリック値をコントロールしま" +"す。\"flat\"を選択した場合、メトリック値は常に\"2\"となります。この設定は、" +"Linuxカーネルが古い経路を消去するのに有効なため、好ましい設定です。\"correct" +"\"はホップ数をメトリック値として使用します。\"approx\"も同様にホップ数をメト" +"リック値として使用しますが、次ホップが変更した場合のみ更新を行います。標準設" +"定は\"flat\"です。" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "TCsのfisheyeメカニズムを使用します。標準設定は\"有効\"です。" + +msgid "Gateway" +msgstr "ゲートウェイ" + +msgid "General Settings" +msgstr "一般設定" + +msgid "General settings" +msgstr "一般設定" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "HNA" + +msgid "HNA Announcements" +msgstr "HNA 通知" + +msgid "HNA interval" +msgstr "HNA 送信間隔" + +msgid "HNA validity time" +msgstr "HNA 有効時間" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "HNA 通知" + +msgid "Hello" +msgstr "Hello" + +msgid "Hello interval" +msgstr "Hello 送信間隔" + +msgid "Hello validity time" +msgstr "Hello 有効時間" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "Hna4" + +msgid "Hna6" +msgstr "Hna6" + +msgid "Hops" +msgstr "ホップ" + +msgid "Hostname" +msgstr "ホスト名" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" +"リンク検出に対するヒステリシスを設定します (ホップ数メトリックの場合のみ有" +"効)。ヒステリシスはリンク検出に対するロバスト性を向上させますが、隣接ノードの" +"登録が遅くなります。標準設定は\"有効\"です。" + +msgid "IP Addresses" +msgstr "IPアドレス" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" +"使用するIPプロトコルバージョンを指定します。6and4が選択された場合、各プロトコ" +"ルに対して1つづつOLSRdインスタンスが起動します。" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "IPv4 ブロードキャスト" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" +"送信するOLSRパケットのIPv4ブロードキャストアドレスです。便利な一例として、" +"255.255.255.255が挙げられます。標準設定は\"0.0.0.0\"であり、インターフェース" +"のブロードキャストIPを使用します。" + +msgid "IPv4 source" +msgstr "IPv4 送信元" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" +"送信するOLSRパケットのIPv4送信元アドレスです。標準設定は\"0.0.0.0\"であり、イ" +"ンターフェースのIPを使用します。" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "IPv6 マルチキャスト" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" +"IPv6 マルチキャストアドレスを設定します。標準はMANETルーターが使用するリンク" +"ローカル・マルチキャストである\"FF02::6D\"です。" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" +"IPv6 ネットワークアドレスは省略せずに入力してください。プレフィクスはCIDR形式" +"で入力してください。" + +msgid "IPv6 source" +msgstr "IPv6 送信元" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" +"IPv6送信元プレフィクスを設定します。OLSRdはインターフェースの中から、このプレ" +"フィクス値に一致するものを選択します。標準設定は\"0::/0\"であり、リンクローカ" +"ルIPでないインターフェースIPを使用します。" + +msgid "IPv6-Prefix of the uplink" +msgstr "アップリンクIPv6 プレフィクス" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" +"現在のゲートウェイへの経路が変わる場合、このゲートウェイのETX値は新しい値と比" +"較される前に、このパラメータの値と乗算されます。パラメータは0.1から1.0の間で" +"設定可能です。ただし、変更する場合、1.0に近い値を設定する事をお薦めします。" +"
警告:このパラメータはetx_ffeth メトリックと同時に使用しないでく" +"ださい!
標準設定は\"1.0\"です。" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" +"このノードがNATを使用してインターネットに接続する場合、有効にしてください。標" +"準設定は\"有効\"です。" + +msgid "Interface" +msgstr "インターフェース" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" +"インターフェースモードは、スイッチ上のイーサネットインターフェースに不必要な" +"パケットの送信を抑制するために使用します。有効なモードは\"mesh\"及び\"ether" +"\"です。標準設定は\"mesh\"です。" + +msgid "Interfaces" +msgstr "インターフェース" + +msgid "Interfaces Defaults" +msgstr "インターフェース デフォルト設定" + +msgid "Internet protocol" +msgstr "インターネットプロトコル" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" +"ネットワーク・インターフェースの設定が変更されたかをチェックするポーリング間" +"隔を秒単位で設定します。標準設定は\"2.5\"です。" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "OLSR ルーティング" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "LQ エイジング" + +msgid "LQ algorithm" +msgstr "LQ アルゴリズム" + +msgid "LQ fisheye" +msgstr "LQ fisheye" + +msgid "LQ level" +msgstr "LQ レベル" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "最終ホップ" + +msgid "Legend" +msgstr "凡例" + +msgid "Library" +msgstr "ライブラリ" + +msgid "Link Quality Settings" +msgstr "リンク品質 (LQ) 設定" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" +"リンク品質 (LQ) のエイジング要素の設定を行います (LQ レベルが2の場合のみ有" +"効)。etx_float及びetx_fpmの値の調整を行います。値が小さくなると、ETX値の変化" +"が遅くなります。設定可能な値は0.01-1.0です。" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" +"リンク品質 (LQ) アルゴリズムを設定します (LQ レベルが2の場合のみ有効)。
etx_float: 浮動小数点演算+指数関数エイジング
etx_fpm : " +"etx_floatと同様、ただし整数値演算を行います
etx_ff : ETX " +"freifunk, ETXの変形版であり、ETX算出のためにHelloパケットだけでなく全てのOLSR" +"トラフィックを使用します
etx_ffeth: etx_ffと互換性のない変形版で" +"す。イーサネットのリンクにETX 0.1を設定することができます
標準設定は" +"\"etx_ff\"です。" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" +"リンク品質(LQ) レベルの設定では、ホップ数ベースまたはコストベース(ETX) のどち" +"らかにルーティング方法を切り替えます。
0 = リンク品質を加味しない" +"
2 = MPR集合及びルーティングにリンク品質を加味する
標準設定" +"は\"2\"です。" + +msgid "LinkQuality Multiplicator" +msgstr "リンク品質 (LQ) マルチプリケーター" + +msgid "Links per node (average)" +msgstr "ノードあたりのリンク数 (平均)" + +msgid "Links total" +msgstr "リンク数の合計" + +msgid "Local interface IP" +msgstr "ローカルインターフェース IP" + +msgid "MID" +msgstr "MID" + +msgid "MID interval" +msgstr "MID 送信間隔" + +msgid "MID validity time" +msgstr "MID 有効時間" + +msgid "MTU" +msgstr "MTU" + +msgid "Main IP" +msgstr "メインIP" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "メトリック" + +msgid "Mode" +msgstr "モード" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +#, fuzzy +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" +"経路のLQと設定値の乗算を行います。設定可能な値は0.01-1です。この設定はLQ レベ" +"ルが0以上の場合のみ設定可能です。
例:192.168.0.1へのLQを半分にする場合: " +"192.168.0.1 0.5
このインターフェースから全てのノードへ対して20%減らす場" +"合: default 0.8" + +msgid "NAT threshold" +msgstr "NAT しきい値" + +msgid "NLQ" +msgstr "NLQ" + +msgid "Neighbors" +msgstr "隣接ノード" + +msgid "Neighbour IP" +msgstr "隣接ノード IP" + +msgid "Neighbours" +msgstr "隣接ノード" + +msgid "Netmask" +msgstr "ネットマスク" + +msgid "Network" +msgstr "ネットワーク" + +msgid "Network address" +msgstr "ネットワークアドレス" + +msgid "Nic changes poll interval" +msgstr "NIC変更ポーリング間隔" + +msgid "Nodes" +msgstr "ノード" + +msgid "OLSR" +msgstr "OLSR" + +msgid "OLSR - Display Options" +msgstr "OLSR - 表示オプション" + +msgid "OLSR - HNA-Announcements" +msgstr "OLSR - HNA (Host and Network Association) 通知" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "OLSR - HNA (Host and Network Association) 通知" + +msgid "OLSR - Plugins" +msgstr "OLSR - プラグイン" + +msgid "OLSR Daemon" +msgstr "OLSR デーモン" + +msgid "OLSR Daemon - Interface" +msgstr "OLSR デーモン - インターフェース" + +msgid "OLSR connections" +msgstr "OLSR コネクション" + +msgid "OLSR gateway" +msgstr "OLSR ゲートウェイ" + +msgid "OLSR node" +msgstr "OLSR ノード" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "概要" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "現在アクティブなOLSR HNA 一覧" + +msgid "Overview of currently established OLSR connections" +msgstr "現在確立済のOLSR接続一覧" + +msgid "Overview of currently known OLSR nodes" +msgstr "現在既知のOLSRノードの一覧" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "現在のその他のOLSRノードへの経路一覧" + +msgid "Overview of interfaces where OLSR is running" +msgstr "OLSR稼働中のインターフェース一覧" + +msgid "Overview of known multiple interface announcements" +msgstr "通知されているマルチ・インターフェースの一覧" + +msgid "Overview of smart gateways in this network" +msgstr "ネットワーク内のスマート・ゲートウェイ一覧" + +msgid "Plugin configuration" +msgstr "プラグイン設定" + +msgid "Plugins" +msgstr "プラグイン" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "OLSRソケットのポーリング間隔を秒単位で設定します。標準は0.05です。" + +msgid "Pollrate" +msgstr "ポーリング間隔" + +msgid "Port" +msgstr "ポート" + +msgid "Prefix" +msgstr "プレフィックス" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "名前解決" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" +"ステータス・ページでホスト名の名前解決を行います。一般的には本機能を使用して" +"も問題が起こることはありませんが、もしあなたがパブリックIPや不安定なDNS設定を" +"使用している場合、ページの読み込み速度が極端に遅くなります。その場合はこの機" +"能を無効にしてください。" + +msgid "Routes" +msgstr "経路" + +msgid "Secondary OLSR interfaces" +msgstr "セカンダリOLSR インターフェース" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" +"ルーターのメインIP (発信元IP)を設定してください。このIPは、OLSRdの稼働中は決" +"して変更しません。標準設定は0.0.0.0であり、プライマリ・インターフェースのIPを" +"自動的に使用します。" + +#, fuzzy +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" +"ルーターのメインIP (発信元IP)を設定してください。このIPは、OLSRdの稼働中は決" +"して変更しません。標準設定は0.0.0.0であり、プライマリ・インターフェースのIPを" +"自動的に使用します。" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "SmartGW" + +msgid "SmartGW announcements" +msgstr "SmartGW 通知" + +msgid "SmartGateway is not configured on this system." +msgstr "スマート・ゲートウェイ(SmartGW)は設定されていません。" + +msgid "Source address" +msgstr "送信元アドレス" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" +"アップリンク速度をキロビット/秒で設定してください。1つ目のパラメータは上り、2" +"つ目のパラメータは下りのストリームです。標準は\"128 1024\"です。" + +msgid "Speed of the uplink" +msgstr "アップリンク速度" + +msgid "State" +msgstr "状態" + +msgid "Status" +msgstr "ステータス" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "隣接ノードから受信したパケットの受信成功率" + +msgid "Success rate of packages sent to the neighbour" +msgstr "隣接ノードへ送信したパケットの送信成功率" + +msgid "TC" +msgstr "TC" + +msgid "TC interval" +msgstr "TC 送信間隔" + +msgid "TC validity time" +msgstr "TC 有効時間" + +msgid "TOS value" +msgstr "TOS値" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" +"OLSRデーモンは、Optimized Link State Routingプロコトルを実装したサービスで" +"す。OLSRはどのようなネットワーク環境でもメッシュルーティングを実現します。" +"OLSRはアドホック・モードをサポートした全ての無線LANカードをサポートし、もちろ" +"ん全てのイーサネットデバイスでも使用可能です。olsrd.orgにアクセスして、ヘルプ及びドキュメントを参照してください。" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" +"willingnessを固定する場合に使用します。willingnessが設定されていない場合、" +"バッテリや電源のステータスによって動的に計算されます。標準は\"3\"です。" + +msgid "The interface OLSRd should serve." +msgstr "OLSRdが使用するインターフェースです。" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" +"OLSRが使用するポート番号です。通常、このポート番号はIANAがアサインした698番で" +"あるべきです。1-65535の間で設定可能です。" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "送信間隔及び有効時間" + +msgid "Topology" +msgstr "トポロジー" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" +"OLSRコントロールパケットにおける、IPヘッダのTOS (Type Of Service) 値を設定し" +"ます。標準設定は\"16\"です。" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "OLSRデーモンに接続できません!" + +msgid "Uplink" +msgstr "アップリンク" + +msgid "Uplink uses NAT" +msgstr "NATを使用して上位ネットワークに接続する" + +msgid "Use hysteresis" +msgstr "ヒステリシスを使用する" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "バージョン" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "WLAN" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" +"警告: kmod-ipipがインストールされていません。スマートゲートウェイはkmod-ipip" +"なしでは動作しません。まず初めにインストールを行なってください。" + +msgid "Weight" +msgstr "Weight" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" +"ホスト間において複数の経路が存在する場合に、どちらのリンクを使用するかの決定" +"を行うために、インターフェースの重み付けを行います。通常、weightはインター" +"フェースの特性を基に、OLSRdが自動的に計算を行いますが、固定値を設定することも" +"可能です。OLSRdは最も低い値のリンクを選択します。
注意:インター" +"フェースの重み付けは、LQ レベルが0の場合のみ、設定可能です。LQ レベルが0以外" +"の値の場合、インターフェース ETX値が代わりに使用されます。" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" +"どのアップリンクを他のメッシュノードへ通知するかを設定します。アップリンクは" +"ローカルのHNAである0.0.0.0/0、::ffff:0:0/96、2000::/3を探索することで検出しま" +"す。標準設定は、\"both\"です。" + +#, fuzzy +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" +"どのアップリンクを他のメッシュノードへ通知するかを設定します。アップリンクは" +"ローカルのHNAである0.0.0.0/0、::ffff:0:0/96、2000::/3を探索することで検出しま" +"す。標準設定は、\"both\"です。" + +msgid "Willingness" +msgstr "Willingness" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "Device" +#~ msgstr "デバイス" + +#~ msgid "" +#~ "Make sure that OLSRd is running, the \"txtinfo\" plugin is loaded, " +#~ "configured on port 2006 and accepts connections from \"127.0.0.1\"." +#~ msgstr "" +#~ "OLSRdが稼働中であること、\"txinfo\"プラグインがロードされていること、ポー" +#~ "ト2006番が設定されていること、\"127.0.0.1\"からの接続が許可されていること" +#~ "を確認してください。" diff --git a/feeds/luci/applications/luci-app-olsr/po/ms/olsr.po b/feeds/luci/applications/luci-app-olsr/po/ms/olsr.po new file mode 100644 index 0000000..c0edce1 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/ms/olsr.po @@ -0,0 +1,686 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-olsr/po/no/olsr.po b/feeds/luci/applications/luci-app-olsr/po/no/olsr.po new file mode 100644 index 0000000..38aa43b --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/no/olsr.po @@ -0,0 +1,687 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-olsr/po/pl/olsr.po b/feeds/luci/applications/luci-app-olsr/po/pl/olsr.po new file mode 100644 index 0000000..64a99f6 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/pl/olsr.po @@ -0,0 +1,749 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-05 03:22+0200\n" +"Last-Translator: piosl \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "Aktywne ogłoszenia MID" + +msgid "Active OLSR nodes" +msgstr "Aktywne węzły OLSR" + +msgid "Active host net announcements" +msgstr "Aktywne ogłoszenia hostnet" + +msgid "Advanced Settings" +msgstr "Ustawienia zaawansowane" + +msgid "Allow gateways with NAT" +msgstr "Zezwól na bramy z NAT" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "Zezwól na wybieranie wychodzącej bramy IPv4 przez NAT" + +msgid "Announce uplink" +msgstr "Ogłaszaj uplink" + +msgid "Announced network" +msgstr "Ogłaszana sieć" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" +"Obie wartości muszą używać zapisu dziesiętnego z kropką przed częścią " +"dziesiętną." + +msgid "Broadcast address" +msgstr "Adres rozgłoszeniowy (broadcast)" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "Konfiguracja" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "Wyświetl" + +msgid "Downlink" +msgstr "Downlink" + +msgid "Download Config" +msgstr "Ustawienia pobierania" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "Włącz" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" +"Włącz SmartGateway. Jeśli wyłączone, wszystkie inne parametry SmartGateway " +"są ignorowane. Domyślnie jest wyłączone." + +msgid "Enable this interface." +msgstr "Włącz ten interfejs." + +msgid "Enabled" +msgstr "Włączone" + +msgid "Expected retransmission count" +msgstr "Oczekiwana wartość retransmisji" + +msgid "FIB metric" +msgstr "Metryka FIB" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +# skorzystałem z niemieckiego tłumaczenia +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" +"Mechanizm Fisheye dla TCs (zaznaczone oznacza \"włączone\"). Domyślnie jest " +"\"włączone\"" + +msgid "Gateway" +msgstr "Brama" + +msgid "General Settings" +msgstr "Ustawienia ogólne" + +msgid "General settings" +msgstr "Ustawienia ogólne" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "HNA" + +msgid "HNA Announcements" +msgstr "Ogłoszenia HNA" + +msgid "HNA interval" +msgstr "Interwał HNA" + +msgid "HNA validity time" +msgstr "Czas poprawności HNA" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "Ogłoszenia HNA" + +msgid "Hello" +msgstr "Hello" + +msgid "Hello interval" +msgstr "Interwał Hello" + +msgid "Hello validity time" +msgstr "Czas poprawności Hello" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "Hna4" + +msgid "Hna6" +msgstr "Hna6" + +msgid "Hops" +msgstr "Skoki (hops)" + +msgid "Hostname" +msgstr "Nazwa hosta" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" +"Hosty w sieci OLSR mogą ogłaszać połączenia z zewnętrznymi sieciami poprzez " +"wiadomości HNA." + +#, fuzzy +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" +"Hosty w sieci OLSR mogą ogłaszać połączenia z zewnętrznymi sieciami poprzez " +"wiadomości HNA." + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "Adresy IP" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" +"Wersja protokołu IP. Jeśli jest wybrana 6and4 wtedy instancja olsrd jest " +"uruchomiona dla każdego protokołu." + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "Rozgłaszanie IPv4" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" +"Adres rozgłoszeniowy (broadcast) IPv4 dla wychodzących pakietów OLSR. " +"Przydatnym przykładem byłoby 255.255.255.255. Domyślna wartość to " +"\"0.0.0.0\" - jest wtedy używany adres rozgłoszeniowy interfejsu." + +msgid "IPv4 source" +msgstr "Źródło IPv4" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" +"Adres źródłowy IPv4 dla wychodzących pakietów. Domyślna wartość to " +"\"0.0.0.0\" - jest wtedy używany adres IP interfejsu." + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "Multicast IPv6" + +# Nie mam pojęcia, jak to lepiej przetłumaczyć, ale w moich tłumaczeniach kieruję się zasadą "release early, release often". +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" +"Adres multicast IPv6. Domyślna wartość to \"FF02::6D\", multicast lokalnego " +"routera." + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" +"Sieć IPv6 musi być podana w pełnej notacji, prefiks musi być w notacji CIDR." + +msgid "IPv6 source" +msgstr "Źródło IPv6" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" +"Prefiks źródła IPv6. OLSRd wybierze jeden z adresów IP interfejsów, który " +"będzie pasował do tego prefiksu. Domyślna wartość to \"0::/0\" - jest wtedy " +"używany adres IP interfejsu." + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "Czy węzeł korzysta z NAT do połączenia z Internetem. Domyślnie \"Tak\"" + +msgid "Interface" +msgstr "Interfejs" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" +"Tryb interfejsu jest używany, aby zapobiec niepotrzebnemu przekazywaniu " +"pakietów. Prawidłowe tryby to \"mesh\" i \"ether\". Domyślna wartość to " +"\"mesh\"." + +msgid "Interfaces" +msgstr "Interfejsy" + +# by Google :D po części +msgid "Interfaces Defaults" +msgstr "Standardy interfejsów" + +msgid "Internet protocol" +msgstr "Protokół internetowy" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "Znane ścieżki OLSR" + +msgid "LQ" +msgstr "LQ" + +msgid "LQ aging" +msgstr "Starzenie się LQ" + +msgid "LQ algorithm" +msgstr "Algorytm LQ" + +msgid "LQ fisheye" +msgstr "LQ-Fisheye" + +msgid "LQ level" +msgstr "Poziom LQ" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "Ostatni skok (hop)" + +msgid "Legend" +msgstr "Legenda" + +msgid "Library" +msgstr "Biblioteka" + +#, fuzzy +msgid "Link Quality Settings" +msgstr "Ustawienia jakości linków" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "Mnożnik LinkQuality" + +msgid "Links per node (average)" +msgstr "Linków na węzeł (średnio)" + +msgid "Links total" +msgstr "Linków w sumie" + +msgid "Local interface IP" +msgstr "IP lokalnego interfejsu" + +msgid "MID" +msgstr "MID" + +msgid "MID interval" +msgstr "Interwał MID" + +msgid "MID validity time" +msgstr "Czas poprawności MID" + +msgid "MTU" +msgstr "MTU" + +msgid "Main IP" +msgstr "Główny IP" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +#, fuzzy +msgid "Metric" +msgstr "Miara" + +msgid "Mode" +msgstr "Tryb" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "Próg NAT" + +msgid "NLQ" +msgstr "NLQ" + +msgid "Neighbors" +msgstr "Sąsiedzi" + +msgid "Neighbour IP" +msgstr "IP sąsiadów" + +msgid "Neighbours" +msgstr "Sąsiedzi" + +msgid "Netmask" +msgstr "Maska sieciowa" + +msgid "Network" +msgstr "Sieć" + +msgid "Network address" +msgstr "Adres sieci" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "Węzły" + +msgid "OLSR" +msgstr "OLSR" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "OLSR - ogłoszenia HNA" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "OLSR - ogłoszenia HNA" + +msgid "OLSR - Plugins" +msgstr "OLSR - pluginy" + +msgid "OLSR Daemon" +msgstr "Demon OLSR" + +msgid "OLSR Daemon - Interface" +msgstr "Demon OLSR - interfejs" + +msgid "OLSR connections" +msgstr "Połączenia OLSR" + +msgid "OLSR gateway" +msgstr "Brama OLSR" + +msgid "OLSR node" +msgstr "Węzeł OLSR" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "Przegląd" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "Przegląd aktywnych ogłoszeń hostnet OLSR" + +msgid "Overview of currently established OLSR connections" +msgstr "Przegląd nawiązanych połączeń OLSR" + +msgid "Overview of currently known OLSR nodes" +msgstr "Przegląd znanych węzłów OLSR" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "Przegląd znanych tras do innych węzłów OLSR" + +msgid "Overview of interfaces where OLSR is running" +msgstr "Przegląd interfejsów z włączonym OLSR" + +msgid "Overview of known multiple interface announcements" +msgstr "Przegląd znanych wielointerfejsowych ogłoszeń" + +msgid "Overview of smart gateways in this network" +msgstr "Przegląd bram SmartGateway w tej sieci" + +msgid "Plugin configuration" +msgstr "Ustawienia pluginu" + +msgid "Plugins" +msgstr "Pluginy" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Prefix" +msgstr "Prefiks" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "Rozwiąż" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "Trasy (routes)" + +msgid "Secondary OLSR interfaces" +msgstr "Zapasowy interfejs OLSR" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "SmartGW" + +msgid "SmartGW announcements" +msgstr "Ogłoszenia SmartGW" + +msgid "SmartGateway is not configured on this system." +msgstr "SmartGateway jest nieskonfigurowane." + +msgid "Source address" +msgstr "Adres źródłowy" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "Stan" + +msgid "Status" +msgstr "Status" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +#, fuzzy +msgid "Success rate of packages received from the neighbour" +msgstr "Wartość poprawnie otrzymanych od sąsiada pakietów" + +#, fuzzy +msgid "Success rate of packages sent to the neighbour" +msgstr "Wartość poprawnie wysłanych pakietów do sąsiada" + +msgid "TC" +msgstr "TC" + +msgid "TC interval" +msgstr "Interwał TC" + +msgid "TC validity time" +msgstr "Czas poprawności TC" + +msgid "TOS value" +msgstr "Wartość TOS" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "Interfejs, który powinien oferować OLSRd." + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" +"Port używany przez OLSR. Zwykle powinien pozostać na przydzielonym przez " +"IANA porcie 698. Może mieć wartość pomiędzy 1 a 65535." + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "Topologia" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "Połączenie z demonem OLSR nieudane!" + +msgid "Uplink" +msgstr "Uplink" + +msgid "Uplink uses NAT" +msgstr "Uplink używa NAT" + +msgid "Use hysteresis" +msgstr "Używaj histerezy" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "Wersja" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "WLAN" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" +"Uwaga: kmod-ipip nie jest zainstalowany. Bez kmod-ipip bramy SmartGateway " +"nie będą działać. Proszę go zainstalować." + +msgid "Weight" +msgstr "Waga" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" +"Kiedy istnieje wiele połączeń między hostami, waga interfejsów określa, " +"którego z nich użyć. Zwykle jest liczona automatycznie przez olsrd opartym " +"na charakterystyce interfejsu, ale tu możesz podać stałą wartość. Olsrd " +"wybierze połączenie z najniższą wartością.
Uwaga: Waga " +"interfejsu jest używana tylko kiedy LinkQualityLevel jest ustawione na 0. " +"Dla dowolnej innej wartości LinkQualityLevel, zamiast tego jest używana " +"wartość ETX." + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "Gotowość" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "Device" +#~ msgstr "Urządzenie" + +#~ msgid "" +#~ "Make sure that OLSRd is running, the \"txtinfo\" plugin is loaded, " +#~ "configured on port 2006 and accepts connections from \"127.0.0.1\"." +#~ msgstr "" +#~ "Upewnij się że OLSRd jest uruchomione, \"txtinfo\" plugin jest " +#~ "załadowany, skonfigurowany na porcie 2006 i akceptuje połączenia z " +#~ "127.0.0.1 (localhost)" diff --git a/feeds/luci/applications/luci-app-olsr/po/pt-br/olsr.po b/feeds/luci/applications/luci-app-olsr/po/pt-br/olsr.po new file mode 100644 index 0000000..1461c1d --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/pt-br/olsr.po @@ -0,0 +1,906 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2014-06-21 19:36+0200\n" +"Last-Translator: Éder \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "" +"Anúncios MID ativos" + +msgid "Active OLSR nodes" +msgstr "Nós OLSR ativos" + +msgid "Active host net announcements" +msgstr "Anúncios ativos de equipamentos" + +msgid "Advanced Settings" +msgstr "Configurações Avançadas" + +msgid "Allow gateways with NAT" +msgstr "Permitir rotadores com NAT" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "Permitir a seleção de rotador de saída IPv4 com NAT" + +msgid "Announce uplink" +msgstr "Anunciar enlace superior (uplink)" + +msgid "Announced network" +msgstr "Rede anunciada" + +# 20140621: edersg: tradução +msgid "Bad (ETX > 10)" +msgstr "Ruim (ETX > 10)" + +# 20140621: edersg: tradução +msgid "Bad (SNR < 5)" +msgstr "Ruim (SNR < 5)" + +msgid "Both values must use the dotted decimal notation." +msgstr "Ambos os valores devem usar a notação decimal com pontos." + +msgid "Broadcast address" +msgstr "Endereço de broadcast" + +# 20140621: edersg: tradução +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" +"Somente pode ser um endereço IPv4 ou IPv6 válidos ou um endereço 'padrão'" + +# 20140621: edersg: tradução +#, fuzzy +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" +"Somente pode ser um endereço IPv4 ou IPv6 válidos ou um endereço 'padrão'" + +msgid "Configuration" +msgstr "Configuração" + +# 20140621: edersg: tradução +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" +"Não foi possível obter nenhuma informação. Certifique-se que a extensão " +"jsoninfo está instalada e permite conexões a partir da sua máquina local " +"(localhost)." + +msgid "Display" +msgstr "Visão" + +msgid "Downlink" +msgstr "Enlace inferior (downlink)" + +# I didn't find in GUI this one +msgid "Download Config" +msgstr "Configuração do Recebimento de Dados " + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "Habilitar" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" +"Habilita o SmartGateway. Se isto está desabilitado, então todos os demais " +"parâmetros do SmartGateway são ignorados. Padrão é \"não\"." + +msgid "Enable this interface." +msgstr "Habilita esta interface." + +msgid "Enabled" +msgstr "Habilitado" + +msgid "Expected retransmission count" +msgstr "Contagem esperada de retransmissões" + +msgid "FIB metric" +msgstr "Métrica FIB" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" +"A métrica FIB controla o valor da métrica dos conjuntos de equipamentos-" +"roteadores. \"flat\" significa que o valor da métrica é sempre 2. Este é o " +"valor preferido porque ele ajuda o roteamento do kernel do Linux limpar as " +"rotas antigas. \"correct\" usa a contagem de saltos como valor da métrica. " +"\"approx\" também usa a contagem de saltos como métrica, mas somente " +"atualiza a contagem de saltos se o próximo salto também mudar. O padrão é " +"\"flat\"." + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" +"Mecanismo Fisheye para TCs (marcado significa ligado). O padrão é \"ligado\"" + +msgid "Gateway" +msgstr "Roteador" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "General settings" +msgstr "Configurações gerais" + +# 20140621: edersg: tradução +msgid "Good (2 < ETX < 4)" +msgstr "Bom (2 < ETX < 4)" + +# 20140621: edersg: tradução +msgid "Good (30 > SNR > 20)" +msgstr "Bom (30 > SNR > 20)" + +# 20140621: edersg: tradução +msgid "Green" +msgstr "Verde" + +msgid "HNA" +msgstr "" +"HNA" + +msgid "HNA Announcements" +msgstr "" +"Anúncios do HNA" + +msgid "HNA interval" +msgstr "" +"Intervalo entre HNA" + +msgid "HNA validity time" +msgstr "" +"Validade do HNA" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "" +"Anúncios do HNA" + +msgid "Hello" +msgstr "Saudação (Hello)" + +msgid "Hello interval" +msgstr "Intervalo entre Saudações (Hello)" + +msgid "Hello validity time" +msgstr "Validade da Saudação (Hello)" + +# 20140621: edersg: tradução +msgid "Hide IPv4" +msgstr "Ocultar IPv4" + +# 20140621: edersg: tradução +msgid "Hide IPv6" +msgstr "Ocultar IPv6" + +msgid "Hna4" +msgstr "Hna4" + +msgid "Hna6" +msgstr "Hna6" + +msgid "Hops" +msgstr "Saltos" + +msgid "Hostname" +msgstr "Nome do equipamento" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" +"Equipamentos em uma rede roteada por OLSR podem anunciar conectividade para " +"redes externas usando mensagens HNA." + +#, fuzzy +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" +"Equipamentos em uma rede roteada por OLSR podem anunciar conectividade para " +"redes externas usando mensagens HNA." + +# Hysteresis é Histerese que significa "retardo" +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" +"Retardo para a sensibilidade do enlace (somente para a métrica de contagem " +"de saltos), Retardo incrementa a robustez da sensibilidade do enlace mas " +"atrasa o registro dos vizinhos. O padrão é \"sim\"" + +msgid "IP Addresses" +msgstr "Endereços IP" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" +"Versão do IP para usar. Se 6and4 for selecionado, então uma instância é " +"disparada para cada protocolo." + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "Endereço IPv4 de Broadcast" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" +"Endereço IPv5 de broadcast para a saída de pacotes OLSR. Um exemplo útil " +"seria 255.255.255.255. O padrão é \"0.0.0.0\", que indica o uso do endereço " +"IP de broadcast da interface." + +msgid "IPv4 source" +msgstr "Origem IPv4" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" +"Endereço IPv4 de origem para a saída de pacotes OLSR. Um exemplo útil seria " +"255.255.255.255. O padrão é \"0.0.0.0\", que indica o uso do endereço IP da " +"interface." + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "Multicast IPv6" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" +"Endereço de multicast IPv6. O padrão é \"FF02::6D\", o multicast do enlace " +"local do roteador MANET." + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" +"A rede IPv6 deve ser informada em notação completa. O prefixo deve ser em " +"notação CIDR." + +msgid "IPv6 source" +msgstr "Origem IPv6" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" +"Prefixo de origem IPv6. O OLSRd escolherá um dos IPs da interface que casam " +"com o prefixo do parâmetro. O padrão é \"0::/0\", que faz com que seja usado " +"um endereço IP não local da interface." + +msgid "IPv6-Prefix of the uplink" +msgstr "Prefixo IPv6 do enlace superior (uplink)" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" +"Se a rota para o roteador está para ser alterada, o valor ETX deste roteador " +"é multiplicado com o este valor antes que ele seja comparado com o novo " +"valor. O parâmetro pode ser um valor entre 0.1 e 1.0, mas deve ser próximo a " +"1.0 se alterado..
CUIDADO: Este parâmetro não deve ser usado em " +"conjunto com a métrica etx_ffeth!
O padrão é \"1.0\"." + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "Se este Nó usa NAT para conexões com a internet. Padrão é \"sim\"." + +msgid "Interface" +msgstr "Interface" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" +"Modo da Interface é usado para evitar o encaminhamento desnecessário de " +"pacotes na interface ethernet em ponte. Os modos válidos são \"mesh\" e " +"\"ether\". O padrão é \"mesh\"." + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interfaces Defaults" +msgstr "Padrões da Interface" + +msgid "Internet protocol" +msgstr "Protocolo internet" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" +"Intervalo para consultar as interfaces de rede por mudanças nas " +"configurações (em segundos). O padrão é \"2.5\"." + +# 20140621: edersg: tradução +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "Valor inválido para LQMult-Value. Deve estar entre 0.01 e 1.0." + +# 20140621: edersg: tradução +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" +"Valor inválido para LQMult-Value. Você deve utilizar aqui um número decimal " +"entre 0.01 e 1.0." + +msgid "Known OLSR routes" +msgstr "Rotas OLSR conhecidas" + +msgid "LQ" +msgstr "LQ" + +msgid "LQ aging" +msgstr "" +"Envelhecimento do LQ" + +msgid "LQ algorithm" +msgstr "Algoritmo LQ" + +msgid "LQ fisheye" +msgstr "Fisheye LQ" + +msgid "LQ level" +msgstr "Nível LQ" + +# 20140621: edersg: tradução +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" +"LQMult exige dois valores (endereço IP ou 'padrão' e multiplicador) " +"separados por espaços." + +msgid "Last hop" +msgstr "Último salto" + +msgid "Legend" +msgstr "Legenda" + +msgid "Library" +msgstr "Biblioteca" + +msgid "Link Quality Settings" +msgstr "Configurações da Qualidade do Enlace" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" +"O fator de envelhecimento da qualidade do enlace (somente para LQ nível 2). Parâmtro de ajuste " +"para etx_float e etx_fpm, Valores menores significam mudanças mais lentas do " +"valor ETX. (permitido valores entre 0.01 e 1.0)" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" +"Algoritmo de qualidade do enlace (somente para LQ nível 2).
etx_float: ETX ponto " +"flutuante com o envelhecimento exponencial
etx_fpm : o mesmo que " +"etx_float, mas com aritmética inteira
etx_ff : ETX freifunk, uma " +"variante do etx que usa todo tráfego OLSE (ao invés de somente as saudações) " +"para o cálculo do ETX
etx_ffeth: variação incompatível do etx_ff " +"que permite enlaces ethernet com ETX 0.1.
O padrão é \"etx_ff\"" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" +"O nível de qualidade do enlace escolhe entre o roteamento por contagem de " +"saltos e o roteamento baseado em custos (na sua maioria, ETX).
0 = não use a qualidade do enlace
2 = use a qualidade do enlace " +"para a seleção do MPR e roteamento
O padrão é \"2\"" + +msgid "LinkQuality Multiplicator" +msgstr "Multiplicador da Qualidade do Enlace" + +msgid "Links per node (average)" +msgstr "Enlaces por nó (média)" + +msgid "Links total" +msgstr "Total de enlaces" + +msgid "Local interface IP" +msgstr "Endereço IP da interface local" + +msgid "MID" +msgstr "" +"MID" + +msgid "MID interval" +msgstr "" +"Intervalo do MID" + +msgid "MID validity time" +msgstr "" +"Validade do MID" + +msgid "MTU" +msgstr "MTU" + +msgid "Main IP" +msgstr "IP Principal" + +# 20140621: edersg: tradução +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" +"Certifique-se de que a extensão \"jsoninfo\" esteja carregada e o serviço " +"OLSRd esteja rodando e configurado na porta 9090 aceitando conexões a partir " +"de \"127.0.0.1\"." + +msgid "Metric" +msgstr "Métrica" + +msgid "Mode" +msgstr "Modo" + +# 20140621: edersg: tradução +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" +"Múltiplas rotas com o fator configurado aqui. Os valores permitidos estão " +"entre 0.01 e 1.0. Ele somente é utilizado quando o nível-LQ é maior que 0. " +"Exemplos:
reduzir LQ para 192.168.0.1 pela metade: 192.168.0.1 0.5
reduzir LQ para todos os nós nesta interface em 20%: padrão 0.8" + +# 20140621: edersg: tradução +#, fuzzy +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" +"Múltiplas rotas com o fator configurado aqui. Os valores permitidos estão " +"entre 0.01 e 1.0. Ele somente é utilizado quando o nível-LQ é maior que 0. " +"Exemplos:
reduzir LQ para 192.168.0.1 pela metade: 192.168.0.1 0.5
reduzir LQ para todos os nós nesta interface em 20%: padrão 0.8" + +msgid "NAT threshold" +msgstr "Limiar do NAT" + +msgid "NLQ" +msgstr "" +"NLQ" + +msgid "Neighbors" +msgstr "Vizinhos" + +msgid "Neighbour IP" +msgstr "Endereço IP do Vizinho" + +msgid "Neighbours" +msgstr "Vizinhos" + +msgid "Netmask" +msgstr "Máscara de rede" + +msgid "Network" +msgstr "Rede" + +msgid "Network address" +msgstr "Endereço de rede" + +msgid "Nic changes poll interval" +msgstr "Intervalo de consulta de mudanças na placa de rede" + +msgid "Nodes" +msgstr "Nós" + +msgid "OLSR" +msgstr "OLSR" + +msgid "OLSR - Display Options" +msgstr "OLSR - Opções de Visão" + +msgid "OLSR - HNA-Announcements" +msgstr "" +"OLSR - Anúncios HNA" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "" +"OLSR - Anúncios HNA" + +msgid "OLSR - Plugins" +msgstr "OLSR - Plugins" + +msgid "OLSR Daemon" +msgstr "Servidor OLSR" + +msgid "OLSR Daemon - Interface" +msgstr "Servidor OLSR - Interface" + +msgid "OLSR connections" +msgstr "Conexões do OLSR" + +msgid "OLSR gateway" +msgstr "Roteador OLSR" + +msgid "OLSR node" +msgstr "Nó OLSR" + +# 20140621: edersg: tradução +msgid "Orange" +msgstr "Laranja" + +msgid "Overview" +msgstr "Visão Geral" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "Visão geral os anúncios de rede de equipamentos OLSR atualmente ativos" + +msgid "Overview of currently established OLSR connections" +msgstr "Visão geral das conexões OLSR atualmente estabelecidas" + +msgid "Overview of currently known OLSR nodes" +msgstr "Visão geral dos nós OLSR conhecidos atualmente" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "Visão geral das rotas conhecidas atualmente para outros nós OLSR" + +msgid "Overview of interfaces where OLSR is running" +msgstr "Visão geral das interfaces onde o OLSR está rodando" + +msgid "Overview of known multiple interface announcements" +msgstr "Visão geral de anúncios de nós com múltiplas interfaces conhecidas" + +msgid "Overview of smart gateways in this network" +msgstr "Visão geral dos SmartGateways na rede" + +msgid "Plugin configuration" +msgstr "Configuração do Plugin" + +msgid "Plugins" +msgstr "Plugins" + +# Que socket? +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "Taxa de consulta por conexões OLSR, em segundos. Padrão é 0.05." + +msgid "Pollrate" +msgstr "Taxa de consulta" + +msgid "Port" +msgstr "Porta" + +msgid "Prefix" +msgstr "Prefixo" + +# 20140621: edersg: tradução +msgid "Red" +msgstr "Vermelho" + +msgid "Resolve" +msgstr "Resolver" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" +"Resolve os nomes dos equipamentos na página de estado. É geralmente seguro " +"permitir isto, mas se você usa IPs públicos e tem uma configuração DNS " +"instável, então estas páginas podem carregar de forma extremamente lenta. " +"Neste caso, desabilite isto aqui." + +msgid "Routes" +msgstr "Rotas" + +msgid "Secondary OLSR interfaces" +msgstr "Interfaces OLSR secundárias" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" +"Define o IP principal (ip originador) do seu roteador. Este IP nunca muda " +"durante o funcionamento do olsrd. O padrão é 0.0.0.0, que faz com que o " +"endereço da primeira interface seja usado." + +#, fuzzy +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" +"Define o IP principal (ip originador) do seu roteador. Este IP nunca muda " +"durante o funcionamento do olsrd. O padrão é 0.0.0.0, que faz com que o " +"endereço da primeira interface seja usado." + +# 20140621: edersg: tradução +msgid "Show IPv4" +msgstr "Exibir IPv4" + +# 20140621: edersg: tradução +msgid "Show IPv6" +msgstr "Exibir IPv6" + +# 20140621: edersg: tradução +msgid "Signal Noise Ratio in dB" +msgstr "Relação do ruído do sinal em dB" + +msgid "SmartGW" +msgstr "SmartGW" + +msgid "SmartGW announcements" +msgstr "Anúncios do SmartGW" + +msgid "SmartGateway is not configured on this system." +msgstr "SmartGateway não está configurado no seu sistema." + +msgid "Source address" +msgstr "Endereço de origem" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" +"Especifica a velocidade do enlace superior (uplink) em kilobits/s. O " +"primeiro parâmetro é a taxa de envio (upstream) e o segundo parâmetro é a " +"taxa de recebimento (downstream). O padrão é \"128 1024\"." + +msgid "Speed of the uplink" +msgstr "Velocidade do enlace superior" + +msgid "State" +msgstr "Estado" + +msgid "Status" +msgstr "Estado" + +# 20140621: edersg: tradução +msgid "Still usable (20 > SNR > 5)" +msgstr "Ainda utilizável (20 > SNR > 5)" + +# 20140621: edersg: tradução +msgid "Still usable (4 < ETX < 10)" +msgstr "Ainda utilizável (4 > ETX > 10)" + +msgid "Success rate of packages received from the neighbour" +msgstr "Taxa de sucesso de pacotes recebidos de vizinhos" + +msgid "Success rate of packages sent to the neighbour" +msgstr "Taxa de sucesso de pacotes enviados a vizinhos" + +msgid "TC" +msgstr "TC" + +msgid "TC interval" +msgstr "" +"Intervalo do TC" + +msgid "TC validity time" +msgstr "" +"Validade do TC" + +msgid "TOS value" +msgstr "Valor do TOS" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" +"O servidor OLSR é uma implementação do protoloco de Roteamento de Estado de " +"Enlace Otimizado. Como tal, ele permite o roteamento em malha para qualquer " +"equipamento de rede. Ele roda sobre qualquer placa de rede sem fio que " +"suporte o modo ad-hoc e, é claro, em qualquer dispositivo ethernet. Visite " +"olsrd.org para ajuda e documentação." + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" +"A disponibilidade fixa para ser usada. Se a disponibilidade não for " +"definida, ela será dinamicamente calculada baseada no estado da energia/" +"bateria, O padrão é \"3\"." + +msgid "The interface OLSRd should serve." +msgstr "A interface onde o OLSRd deve servir." + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" +"A porta que o OLSR usa. Isto geralmente deve ficar na porta 698, designada " +"pela IANA. Pode ter qualquer valor entre 1 e 65535." + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" +"Isto pode ser usado para sinalizar o prefixo IPv6 externo do enlace superior " +"(uplink) para os clientes. Isto pode permitir que um cliente mude o endereço " +"IPv6 local para usar o roteador IPv6 sem qualquer tradução de endereços. O " +"tamanho máximo do prefixo é 64 bits. O padrão é \"::/0\" (nenhum prefixo)." + +msgid "Timing and Validity" +msgstr "Temporização e Validade" + +msgid "Topology" +msgstr "Topologia" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" +"Valor do tipo de serviço para o cabeçalho IP para controle de tráfego. O " +"padrao é \"16\"." + +msgid "Unable to connect to the OLSR daemon!" +msgstr "Não foi possível conectar ao servidor OLSR!" + +msgid "Uplink" +msgstr "Enlace superior (uplink)" + +msgid "Uplink uses NAT" +msgstr "Enlace superior (uplink) usa NAT" + +msgid "Use hysteresis" +msgstr "Usar retardo" + +# 20140621: edersg: tradução +msgid "Validity Time" +msgstr "Tempo de validade" + +msgid "Version" +msgstr "Versão" + +# 20140621: edersg: tradução +msgid "Very good (ETX < 2)" +msgstr "Muito bom (ETX < 2)" + +# 20140621: edersg: tradução +msgid "Very good (SNR > 30)" +msgstr "Muito bom (SNR > 30)" + +msgid "WLAN" +msgstr "Rede sem fio (WLAN)" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" +"Atenção: o kmod-ipip não está instalado. Sem o kmod-ipip, o SmartGateway não " +"irá funcionar. Por favor, instale-o." + +msgid "Weight" +msgstr "Peso" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" +"Quando múltiplos enlaces existirem entre dois equipamentos, o peso da " +"interface é usado para determinar o enlace usado. Normalmente, o peso é " +"automaticamente calculado pelo olsrd baseado nas características da " +"interface, mas aqui você pode especificar um valor fixo. Olsrd escolherá " +"enlaces com o valor mais baixo.
Nota: O peso da interface é " +"usado somente quando o nível de qualidade do enlace está definido como 0. " +"Para qualquer outro valor do nível de qualidade do enlace, o valor ETX da " +"interface é usado." + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" +"Que tipo de enlace superior (uplink) é exportado para outros nós da rede em " +"malha. Um enlace superior é detectado buscando por uma HNA " +"local de 0.0.0.0/0, ::ffff:0:0/96 ou 2000::/3. O padrão é \"ambos\"." + +#, fuzzy +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" +"Que tipo de enlace superior (uplink) é exportado para outros nós da rede em " +"malha. Um enlace superior é detectado buscando por uma HNA " +"local de 0.0.0.0/0, ::ffff:0:0/96 ou 2000::/3. O padrão é \"ambos\"." + +msgid "Willingness" +msgstr "Disponibilidade" + +msgid "Yellow" +msgstr "Amarelo" + +msgid "no" +msgstr "Não" + +msgid "yes" +msgstr "Sim" + +#~ msgid "Device" +#~ msgstr "Dispositivo" + +#~ msgid "" +#~ "Make sure that OLSRd is running, the \"txtinfo\" plugin is loaded, " +#~ "configured on port 2006 and accepts connections from \"127.0.0.1\"." +#~ msgstr "" +#~ "Certifique-se que o processo OLSRd está em execução, que o plugin " +#~ "\"txtinfo\" está carregado e configurado para a porta 2006 e que aceita " +#~ "conexões a partir de \"127.0.0.1\"." + +#~ msgid "" +#~ "Multiply routes with the factor given here. Allowed values are between " +#~ "0.01 and 1. It is only used when LQ-Level is greater than 0. Examples:" +#~ "
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to " +#~ "all nodes on this interface by 20%: default 0.8" +#~ msgstr "" +#~ "Multiplica rotas com o fator informado. Os valores válidos são entre 0.01 " +#~ "e 1. Somente é usado quando o nível LQ é maior que 0. Exemplos:
reduzir o LQ para 192.168.0.1 pela " +#~ "metade: 192.168.0.1 0.5
reduzir o LQ de todos os nós desta interface para 20%: " +#~ "Padrão 0.8" diff --git a/feeds/luci/applications/luci-app-olsr/po/pt/olsr.po b/feeds/luci/applications/luci-app-olsr/po/pt/olsr.po new file mode 100644 index 0000000..4e04248 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/pt/olsr.po @@ -0,0 +1,715 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-06-03 16:17+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "Anuncios MID ativos" + +msgid "Active OLSR nodes" +msgstr "Nós OLSR ativos" + +#, fuzzy +msgid "Active host net announcements" +msgstr "Anuncios activos de hosts" + +msgid "Advanced Settings" +msgstr "Definições Avançadas" + +msgid "Allow gateways with NAT" +msgstr "Permitir gateways com NAT" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "Permitir a selecção de uma gateway IPv4 para saída com NAT" + +msgid "Announce uplink" +msgstr "Anunciar uplink" + +msgid "Announced network" +msgstr "Rede anunciada" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "Os valores tem de usar a dotação decimal." + +msgid "Broadcast address" +msgstr "Endereço de broadcast" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "Configuração" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "Mostrar" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "Descarregar Configuração" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "Ativar" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" +"Ativar SmartGateway. Se estiver desativado, então todos os outros parâmetros " +"SmartGateway são ignorados. Por defeito é \"não\"" + +msgid "Enable this interface." +msgstr "Ativar esta interface." + +msgid "Enabled" +msgstr "Ativado" + +msgid "Expected retransmission count" +msgstr "Contagem de retransmissões esperada" + +msgid "FIB metric" +msgstr "métrica FIB" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "Definições gerais" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "Intervalo entre HNA" + +msgid "HNA validity time" +msgstr "Validade de HNA" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "OLSR - Anuncios HNA4" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "Intervalo entre Hello" + +msgid "Hello validity time" +msgstr "Validade de Hello" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "Endereços IP" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "Endereço IPv4 de Broadcast" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "Multicast IPv6" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" +"A rede IPv6 deve ser fornecido em dotação completa, o prefixo deve estar na " +"notação CIDR." + +msgid "IPv6 source" +msgstr "Origem IPv6" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "Interface" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" +"O Modo de Interface é usado para para prevenir encaminhamentos " +"desnecessários de pacotes em interfaces switched ethernet. Os Modos válidos " +"são \"mesh\" e \"ether\". Por defeito é \"mesh\"." + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interfaces Defaults" +msgstr "Predefinições das Interfaces" + +msgid "Internet protocol" +msgstr "Protocolo de Internet" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "Rotas OLSR conhecidas" + +msgid "LQ" +msgstr "LQ" + +msgid "LQ aging" +msgstr "Envelhecimento LQ" + +msgid "LQ algorithm" +msgstr "Algoritmo LQ" + +#, fuzzy +msgid "LQ fisheye" +msgstr "LQ Fisheye" + +msgid "LQ level" +msgstr "Nível LQ" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "Ultimo salto" + +msgid "Legend" +msgstr "Legenda" + +msgid "Library" +msgstr "Biblioteca" + +msgid "Link Quality Settings" +msgstr "Definições de Qualidade do Link" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "Endereço IP do interface local" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "Intervalo de MID" + +msgid "MID validity time" +msgstr "Validade de MID" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "IP Principal" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "Métrica" + +msgid "Mode" +msgstr "Modo" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "Vizinhos" + +msgid "Neighbour IP" +msgstr "Endereço IP do Vizinho" + +msgid "Neighbours" +msgstr "Vizinhos" + +msgid "Netmask" +msgstr "Máscara de rede" + +msgid "Network" +msgstr "Rede" + +msgid "Network address" +msgstr "Endereço de rede" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "Nós" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "OLSR - Anuncios HNA4" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "OLSR - Anuncios HNA4" + +msgid "OLSR - Plugins" +msgstr "OLSR - Plugins" + +msgid "OLSR Daemon" +msgstr "Servidor OLSR" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "OLSR - Ligações" + +msgid "OLSR gateway" +msgstr "Gateway OLSR" + +msgid "OLSR node" +msgstr "Nó OLSR" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +#, fuzzy +msgid "Overview of currently active OLSR host net announcements" +msgstr "Resumo de anuncios activos de hosts" + +msgid "Overview of currently established OLSR connections" +msgstr "Resumo das ligações OLSR actualmente estabelecidas" + +msgid "Overview of currently known OLSR nodes" +msgstr "Resumo dos nós OLSR conhecidos" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "Resumo das rotas conhecidas para outros nós OLSR" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "Resumo de anuncios de nós com multiplos interfaces activos" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "Configuração de Plugin" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "Pollrate" + +msgid "Port" +msgstr "Porta" + +msgid "Prefix" +msgstr "Prefixo" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "Rotas" + +msgid "Secondary OLSR interfaces" +msgstr "Interfaces OLSR secundários" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "Endereço de origem" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "Velocidade do uplink" + +msgid "State" +msgstr "Estado" + +msgid "Status" +msgstr "Estado" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "Intervalo de TC" + +msgid "TC validity time" +msgstr "Validade de TC" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "Topologia" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "Não foi possivel ligar ao servidor OLSR!" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "O uplink usa NAT" + +msgid "Use hysteresis" +msgstr "Usar histerese" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "Versão" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "WLAN" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "Disponibilidade" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "Device" +#~ msgstr "Dispositivo" + +#~ msgid "" +#~ "Make sure that OLSRd is running, the \"txtinfo\" plugin is loaded, " +#~ "configured on port 2006 and accepts connections from \"127.0.0.1\"." +#~ msgstr "" +#~ "Certifique-se que o processo olsrd está em execução, que o plugin " +#~ "\"txtinfo\" está carregado e configurado para a porta 2006 e que aceita " +#~ "ligações a partir de \"127.0.0.1\"." diff --git a/feeds/luci/applications/luci-app-olsr/po/ro/olsr.po b/feeds/luci/applications/luci-app-olsr/po/ro/olsr.po new file mode 100644 index 0000000..257fab3 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/ro/olsr.po @@ -0,0 +1,691 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-28 19:40+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "Setări avansate" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "Configuraţie" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "Activare" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "Activează această interfaţă" + +msgid "Enabled" +msgstr "Activat" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "Setări generale" + +msgid "General settings" +msgstr "Setări generale" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "Verde" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "Ascunde IPv4" + +msgid "Hide IPv6" +msgstr "Ascunde IPv6" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "Nume domeniu" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "Adrese IP" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "Interfaţă" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "Interfeţe" + +msgid "Interfaces Defaults" +msgstr "Interfeţe implicite" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "Algoritm LQ" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "Nivel LQ" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "Legendă" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "Vecini" + +msgid "Neighbour IP" +msgstr "IP vecin" + +msgid "Neighbours" +msgstr "Vecini" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "Pluginuri" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "Arată IPv4" + +msgid "Show IPv6" +msgstr "Arată IPv6" + +msgid "Signal Noise Ratio in dB" +msgstr "Raport zgomot semnal în dB" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "Stare" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "Versiune" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "Greutate" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "Galben" + +msgid "no" +msgstr "nu" + +msgid "yes" +msgstr "da" diff --git a/feeds/luci/applications/luci-app-olsr/po/ru/olsr.po b/feeds/luci/applications/luci-app-olsr/po/ru/olsr.po new file mode 100644 index 0000000..51267e0 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/ru/olsr.po @@ -0,0 +1,812 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: olsr\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-09-06 09:58+0200\n" +"Last-Translator: datasheet \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Active MID announcements" +msgstr "Активные объявления MID" + +msgid "Active OLSR nodes" +msgstr "Активные OLSR-узлы" + +msgid "Active host net announcements" +msgstr "Активные объявления хост-сети (HNA)" + +msgid "Advanced Settings" +msgstr "Расширенные настройки" + +msgid "Allow gateways with NAT" +msgstr "Разрешить шлюзы с NAT" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "Разрешить выбор исходящего IPv4-шлюза с NAT" + +msgid "Announce uplink" +msgstr "Объявлять восходящий канал" + +msgid "Announced network" +msgstr "Объявленная сеть" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" +"Оба значения должны быть в десятичном представлении с разделительными " +"точками." + +msgid "Broadcast address" +msgstr "Широковещательный адрес" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "Конфигурация" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "Показать" + +msgid "Downlink" +msgstr "Нисходящий канал" + +msgid "Download Config" +msgstr "Загрузить конфигурацию" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "Включить" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" +"Включить SmartGateway. Если выключено, все остальные параметры SmartGateway " +"игнорируются. По умолчанию \"нет\"." + +msgid "Enable this interface." +msgstr "Использовать этот интерфейс." + +msgid "Enabled" +msgstr "Включено" + +msgid "Expected retransmission count" +msgstr "Ожидаемое количество повторных передач" + +msgid "FIB metric" +msgstr "Метрика FIB" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" +"Метрика FIB управляет значением метрики хост-маршрутов, которые " +"устанавливает OLSRd. При \"flat\" значение метрики всегда равно 2. Это " +"предпочтительное значение, помогающее ядру Linux очищать устаревшие " +"маршруты. При \"correct\" используется счётчик прыжков в качестве значения " +"метрики. \"approx\" также испозьзует счётчик прыжков, но его обновление " +"происходит только при изменении следующего прыжка. По умолчанию используется " +"\"flat\"." + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "Механизм рыбьего глаза для TC. По умолчанию \"включено\"" + +msgid "Gateway" +msgstr "Шлюз" + +msgid "General Settings" +msgstr "Общие настройки" + +msgid "General settings" +msgstr "Общие настройки" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "HNA" + +msgid "HNA Announcements" +msgstr "Объявления HNA" + +msgid "HNA interval" +msgstr "HNA интервал" + +msgid "HNA validity time" +msgstr "Время действия HNA" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "Объявления HNA" + +msgid "Hello" +msgstr "Приветственное сообщение" + +msgid "Hello interval" +msgstr "Интервал приветственных сообщений" + +msgid "Hello validity time" +msgstr "Время действия приветственного сообщения" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "Hna4" + +msgid "Hna6" +msgstr "Hna6" + +msgid "Hops" +msgstr "Прыжки" + +msgid "Hostname" +msgstr "Имя хоста" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" +"Хосты в маршрутизируемой сети OLSR могут извещать о подключении к внешним " +"сетям с помощью сообщений HNA." + +#, fuzzy +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" +"Хосты в маршрутизируемой сети OLSR могут извещать о подключении к внешним " +"сетям с помощью сообщений HNA." + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" +"Гистерезис для автоопределения канала (только для метрики кол-ва прыжков). " +"Гистерезис увеличивает надёжность канала, но вносит задержку в регистрацию " +"соседних устройств. По умолчанию \"да\"" + +msgid "IP Addresses" +msgstr "IP-адреса" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" +"Версия IP, которая будет использована. Если выбрано 6and4, olsrd будет " +"запущен для каждой версии." + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "Широковещательный IPv4" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" +"Широковещательный IPv4-адрес для исходящих OLSR-пакетов, например, " +"255.255.255.255. Адрес по умолчанию \"0.0.0.0\" ведёт к использованию " +"широковещательного IP-адреса интерфейса." + +msgid "IPv4 source" +msgstr "IPv4-источник" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" +"IPv4-адрес отправителя для исходящих OLSR-пакетов. Адрес по умолчанию " +"\"0.0.0.0\" включает использование IP-адреса интерфейса." + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "Групповой IPv6" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "Групповой IPv6-адрес. По умолчанию \"FF02::6D\"." + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" +"IPv6-сеть должна быть указана в полной нотации, префикс должен быть в " +"нотации CIDR." + +msgid "IPv6 source" +msgstr "IPv6-источник" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" +"Префикс источника IPv6. OLSRd выберет один из IP-адресов интерфейса, " +"соответствующий данному префиксу. По умолчанию \"0::/0\" включает " +"использование нелокального IP-адреса интерфейса." + +msgid "IPv6-Prefix of the uplink" +msgstr "IPv6-префикс восходящего канала" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" +"Если маршрут к текущему шлюзу должен быть изменён, значение ETX данного " +"шлюза умножается на указанное число перед сравнением с новым значением. " +"Значение данного параметра может быть в пределах от 0.1 до 1.0, но при " +"изменении должно быть ближе к 1.0.
ВНИМАНИЕ:Не используйте " +"данный параметр вместе с метрикой etx_ffeth!
По умолчанию \"1.0\"." + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" +"Использует ли данный узел NAT для подключения к интернету. По умолчанию \"да" +"\"." + +msgid "Interface" +msgstr "Интерфейс" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" +"Режим интерфейса используется для предотвращения ненужных перенаправлений на " +"коммутируемых Ethernet-интерфейсах. Возможные значения режима: \"mesh\" и " +"\"ether\". По умолчанию \"mesh\"." + +msgid "Interfaces" +msgstr "Интерфейсы" + +msgid "Interfaces Defaults" +msgstr "Значения по умолчанию для интерфейсов" + +msgid "Internet protocol" +msgstr "Интернет-протокол" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" +"Интервал опроса сетвых интерфейсов на наличие изменений в конфигурации " +"(сек.). По умолчанию, \"2.5\"." + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "Известные OLSR-маршруты" + +msgid "LQ" +msgstr "LQ" + +msgid "LQ aging" +msgstr "Старение LQ" + +msgid "LQ algorithm" +msgstr "Алгоритм LQ" + +#, fuzzy +msgid "LQ fisheye" +msgstr "Рыбий глаз LQ" + +msgid "LQ level" +msgstr "Уровень LQ" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "Последний прыжок" + +msgid "Legend" +msgstr "Легенда" + +msgid "Library" +msgstr "Библиотека" + +msgid "Link Quality Settings" +msgstr "Настройки качества соединения (LQ)" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" +"Коэффициент старения LQ (только для уровня LQ, равного 2). Параметр " +"подстройки для etx_float и etx_fpm. Чем меньше значение, тем меньше " +"изменения значения ETX. Диапазон допустимых значений от 0.01 до 1.0." + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" +"Алгоритм LQ (только для уровня LQ, равного 2).
etx_float: ETX с " +"плавающей точкой и экспоненциальным старением
etx_fpm : тоже что " +"и etx_float, но с целочисленной арифметикой
etx_ff : ETX " +"freifunk, использует весь трафик OLSR для расчета ETX
etx_ffeth: " +"несовместимый вариант etx_ff, разрешающий Ethernet-соединения с ETX 0.1.
По умолчанию \"etx_ff\"" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" +"Переключатель уровня LQ между маршрутизацией по кол-во прыжков и ETX.
0 = не использовать LQ
2 = использовать LQ для выбора " +"MPR и маршрутизации
По умолчанию \"2\"" + +msgid "LinkQuality Multiplicator" +msgstr "Множитель LQ" + +msgid "Links per node (average)" +msgstr "Кол-во соединений на узел (среднее)" + +msgid "Links total" +msgstr "Общее кол-во соединений" + +msgid "Local interface IP" +msgstr "IP-адрес локального интерфейса" + +msgid "MID" +msgstr "MID" + +msgid "MID interval" +msgstr "Интервал MID" + +msgid "MID validity time" +msgstr "Время действия MID" + +msgid "MTU" +msgstr "MTU" + +msgid "Main IP" +msgstr "Основной IP-адрес" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "Метрика" + +msgid "Mode" +msgstr "Режим" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +#, fuzzy +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" +"Умножить маршруты на указанный коэффициент в пределах от 0.01 до 1. Данный " +"коэффициент используется только в случае, если LQ уровень > 0. Примеры:
уменьшить LQ для 192.168.0.1 на половину: 192.168.0.1 0.5
уменьшить LQ " +"для всех узлов на данном интерфейсе на 20%: default 0.8" + +msgid "NAT threshold" +msgstr "Порог NAT" + +msgid "NLQ" +msgstr "NLQ" + +msgid "Neighbors" +msgstr "Соседние узлы" + +msgid "Neighbour IP" +msgstr "Соседние IP-адреса" + +msgid "Neighbours" +msgstr "Соседние узлы" + +msgid "Netmask" +msgstr "Маска сети" + +msgid "Network" +msgstr "Сеть" + +msgid "Network address" +msgstr "Сетевой адрес" + +msgid "Nic changes poll interval" +msgstr "Интервал опроса изменений NIC" + +msgid "Nodes" +msgstr "Узлы" + +msgid "OLSR" +msgstr "OLSR" + +msgid "OLSR - Display Options" +msgstr "OLSR - Настройки отображения" + +msgid "OLSR - HNA-Announcements" +msgstr "OLSR - HNA-объявления" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "OLSR - HNA-объявления" + +msgid "OLSR - Plugins" +msgstr "OLSR - Модули" + +msgid "OLSR Daemon" +msgstr "Сервис OLSR" + +msgid "OLSR Daemon - Interface" +msgstr "Сервис OLSR - Интерфейс" + +msgid "OLSR connections" +msgstr "OLSR-соединения" + +msgid "OLSR gateway" +msgstr "OLSR-шлюз" + +msgid "OLSR node" +msgstr "OLSR-узел" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "Обзор" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "Обзор текущих активных OLSR-объявлений HNA" + +msgid "Overview of currently established OLSR connections" +msgstr "Обзор установленных OLSR-соединений" + +msgid "Overview of currently known OLSR nodes" +msgstr "Обзор текущих известных OLSR-узлов" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "Обзор известных маршрутов к OLSR-узлам" + +msgid "Overview of interfaces where OLSR is running" +msgstr "Обзор интерфейсов с запущенным OLSR" + +msgid "Overview of known multiple interface announcements" +msgstr "Обзор известных мульти-интерфейсных извещений" + +# Может таки "умные" шлюзы? Или вообще SmartGW... +#, fuzzy +msgid "Overview of smart gateways in this network" +msgstr "Обзор смарт-шлюзов в сети" + +msgid "Plugin configuration" +msgstr "Настройки модулей" + +msgid "Plugins" +msgstr "Модули" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "Периодичность опроса OLSR-сокетов в секундах. 0.05 по умолчанию." + +msgid "Pollrate" +msgstr "Частота опроса" + +msgid "Port" +msgstr "Порт" + +msgid "Prefix" +msgstr "Префикс" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "Разрешать имена" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" +"Разрешать имена хостов на страницах состояния. Не используйте данную " +"функцию, если у вас публичный IP-адрес и нестабильный DNS. В противном " +"случае загрузка страниц состояния может происходить очень медленно." + +msgid "Routes" +msgstr "Маршруты" + +msgid "Secondary OLSR interfaces" +msgstr "Вторичные OLSR-интерфейсы" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" +"Устанавливает основной IP-адрес маршрутизатора. Данный адрес НИКОГДА не " +"будет изменяться во время работы olsrd. По умолчанию 0.0.0.0 (используется " +"IP-адрес первого сетевого интерфейса)." + +#, fuzzy +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" +"Устанавливает основной IP-адрес маршрутизатора. Данный адрес НИКОГДА не " +"будет изменяться во время работы olsrd. По умолчанию 0.0.0.0 (используется " +"IP-адрес первого сетевого интерфейса)." + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "SmartGW" + +msgid "SmartGW announcements" +msgstr "Объявления SmartGW" + +msgid "SmartGateway is not configured on this system." +msgstr "SmartGW не сконфигурирован на этой системе." + +msgid "Source address" +msgstr "Адрес источника" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" +"Устанавливает скорость восходящего канала (кбит/с). Первый параметр " +"указывает на прямое, а второй на обратное направление. По умолчанию \"128 " +"1024\"." + +msgid "Speed of the uplink" +msgstr "Скорость восходящего канала" + +msgid "State" +msgstr "Состояние" + +msgid "Status" +msgstr "Статус" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "Достигнутая скорость приема посылок от соседних узлов" + +msgid "Success rate of packages sent to the neighbour" +msgstr "Достигнутая скорость передачи посылок к соседним узлам" + +msgid "TC" +msgstr "TC" + +msgid "TC interval" +msgstr "Интервал TC" + +msgid "TC validity time" +msgstr "Время действия TC" + +msgid "TOS value" +msgstr "Значение ToS" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" +"Сервис OLSRd реализует поддержку протокола OLSR (Optimized Link State " +"Routing) и тем самым обеспечивает ячеистую маршрутизацию для любого сетевого " +"оборудования. OLSRd может работать на любом Wi-Fi-адаптере или устройстве " +"Ethernet с поддержкой режима ad-hoc. Более подробную информацию можно найти " +"на olsr.org." + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" +"Фиксированное значение готовности. Если не задано, то будет рассчитываться " +"динамически на основе состояния батареи/питания. По умолчанию \"3\"." + +msgid "The interface OLSRd should serve." +msgstr "Интерфейс, обслуживаемый OLSRd." + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" +"Порт, используемый для OLSR. Рекомендуется использовать присвоенный IANA " +"порт 698. Допустимо любое значение в диапазоне от 1 до 65535." + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" +"Может быть использовано для оповещения клиентов об IPv6-префиксе восходящего " +"канала. Это может позволить клиентам изменять свой локальный IPv6-адрес для " +"использования IPv6-шлюза без какой-либо трансляции адресов. Максимальная " +"длина префикса - 64 бита. По умолчанию \"::/0\" (без префикса)." + +msgid "Timing and Validity" +msgstr "Время и сроки действия" + +msgid "Topology" +msgstr "Топология" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" +"Значение поля ToS IP -аголовка управляющего трафика. По умолчанию \"16\"." + +msgid "Unable to connect to the OLSR daemon!" +msgstr "Не удалось подключиться к сервису OLSR!" + +msgid "Uplink" +msgstr "Восходящий канал" + +msgid "Uplink uses NAT" +msgstr "Восходящий канал использует NAT" + +msgid "Use hysteresis" +msgstr "Использовать гистерезис" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "Версия" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "WLAN" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" +"Внимание: kmod-ipip не установлен. Без kmod-ipip SmartGateway не будет " +"работать, пожалуйста, установите этот пакет." + +msgid "Weight" +msgstr "Вес" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" +"При использовании нескольких соединений между хостами, вес служит для выбора " +"используемого интерфейса. Обычно, вес рассчитывается автоматически olsrd на " +"основе характеристик интерфейса, но данное поле позволяет установить вес " +"вручную. Olsrd выберет соединения с наименьшим значением веса.
Замечание: вес интерфейса используется только в случае установки поля " +"\"Уровень LQ\" в 0. Для любых других значений поля \"Уровень LQ\", " +"используется значение поля ETX." + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" +"Какой вид восходящего канала экпортируется другим узлам ячеистой сети. " +"Определение восходящего канала происходит при наличии в локальном HNA " +"0.0.0.0/0, ::ffff:0:0/96 или 2000::/3. Значение по умолчанию: \"оба\"." + +#, fuzzy +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" +"Какой вид восходящего канала экпортируется другим узлам ячеистой сети. " +"Определение восходящего канала происходит при наличии в локальном HNA " +"0.0.0.0/0, ::ffff:0:0/96 или 2000::/3. Значение по умолчанию: \"оба\"." + +msgid "Willingness" +msgstr "Готовность" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "Device" +#~ msgstr "Устройство" + +#~ msgid "" +#~ "Make sure that OLSRd is running, the \"txtinfo\" plugin is loaded, " +#~ "configured on port 2006 and accepts connections from \"127.0.0.1\"." +#~ msgstr "" +#~ "Удостоверьтесь, что OLSRd работает, модуль \"txtinfo\" загружен, настроен " +#~ "на порт 2006 и принимает соединения от \"127.0.0.1\"." diff --git a/feeds/luci/applications/luci-app-olsr/po/sk/olsr.po b/feeds/luci/applications/luci-app-olsr/po/sk/olsr.po new file mode 100644 index 0000000..fdd37e3 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/sk/olsr.po @@ -0,0 +1,687 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-olsr/po/sv/olsr.po b/feeds/luci/applications/luci-app-olsr/po/sv/olsr.po new file mode 100644 index 0000000..adf690c --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/sv/olsr.po @@ -0,0 +1,692 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "Aktiva OLSR-noder" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "Avancerade inställningar" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "Tillkännage upplänk" + +msgid "Announced network" +msgstr "Tillkännagivet nätverk" + +msgid "Bad (ETX > 10)" +msgstr "Dålig (ETX > 10)" + +msgid "Bad (SNR < 5)" +msgstr "Dålig (SNR < 5)" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "Sändningsadress" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "Kan endast vara en giltig IPv4 eller IPv6-adress eller 'standard'" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "Kan endast vara en giltig IPv6-adress eller 'standard'" + +msgid "Configuration" +msgstr "Konfiguration" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" +"Kunde inte ta emot någon data. Försäkra dig om att insticksprogrammet " +"jsoninfo är installerat och tillåter anslutningar från localhost" + +msgid "Display" +msgstr "Visa" + +msgid "Downlink" +msgstr "Nerlänk" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "Aktivera" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "Aktivera det här gränssnittet." + +msgid "Enabled" +msgstr "Aktivera" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "Gateway" + +msgid "General Settings" +msgstr "Generella inställningar" + +msgid "General settings" +msgstr "Generella inställningar" + +msgid "Good (2 < ETX < 4)" +msgstr "Bra (2 < ETX < 4)" + +msgid "Good (30 > SNR > 20)" +msgstr "Bra (30 > SNR > 20)" + +msgid "Green" +msgstr "Grön" + +msgid "HNA" +msgstr "HNA" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "Giltighetstid för HNA" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "Hallå" + +msgid "Hello interval" +msgstr "Hallå-intervall" + +msgid "Hello validity time" +msgstr "Giltighetstid för Hallå" + +msgid "Hide IPv4" +msgstr "Göm IPv4" + +msgid "Hide IPv6" +msgstr "Göm IPv6" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "Värdnamn" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "IP-adresser" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "IPv4-källa" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "IPv6-källa" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "Gränssnitt" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "Gränssnitten" + +msgid "Interfaces Defaults" +msgstr "Standard-gränssnitten" + +msgid "Internet protocol" +msgstr "Internet-protokoll" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "Kända OLSR-rutter" + +msgid "LQ" +msgstr "LQ" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "LQ-algoritm" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "LQ-nivå" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "Senaste hopp" + +msgid "Legend" +msgstr "Legend" + +msgid "Library" +msgstr "Bibliotek" + +msgid "Link Quality Settings" +msgstr "Inställningar för länkkvalité" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "Länker per nod (vanlig)" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "IP-adress för lokalt gränssnitt" + +msgid "MID" +msgstr "MID" + +msgid "MID interval" +msgstr "MID-intervall" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "MTU" + +msgid "Main IP" +msgstr "Huvudsaklig IP-adress" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "Metrisk" + +msgid "Mode" +msgstr "Läge" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "NLQ" + +msgid "Neighbors" +msgstr "Grannar" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "Grannar" + +msgid "Netmask" +msgstr "Nätmask" + +msgid "Network" +msgstr "Nätverk" + +msgid "Network address" +msgstr "Nätverksadress" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "Noder" + +msgid "OLSR" +msgstr "OLSR" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "OLSR - Insticksprogram" + +msgid "OLSR Daemon" +msgstr "OLSR-demon" + +msgid "OLSR Daemon - Interface" +msgstr "OLSR-demon - Gränssnitt" + +msgid "OLSR connections" +msgstr "OLSR-anslutningar" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "OLSR-nod" + +msgid "Orange" +msgstr "Orange" + +msgid "Overview" +msgstr "Överblick" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "Konfiguration av insticksprogram" + +msgid "Plugins" +msgstr "Insticksprogram" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Prefix" +msgstr "Prefix" + +msgid "Red" +msgstr "Röd" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "Rutter" + +msgid "Secondary OLSR interfaces" +msgstr "Andra OLSR-gränssnitt" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "Visa IPv4" + +msgid "Show IPv6" +msgstr "Visa IPv6" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "Adress för källkod" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "Skick" + +msgid "Status" +msgstr "Status" + +msgid "Still usable (20 > SNR > 5)" +msgstr "Fortfarande användbar (20 > SNR > 5)" + +msgid "Still usable (4 < ETX < 10)" +msgstr "Fortfarande användbar (4 < ETX < 10)" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "TC" + +msgid "TC interval" +msgstr "TC-intervall" + +msgid "TC validity time" +msgstr "Giltighetstid för TC" + +msgid "TOS value" +msgstr "TOS-värde" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "Topologi" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "Kunde inte ansluta till OLSR-demonen!" + +msgid "Uplink" +msgstr "Upplänk" + +msgid "Uplink uses NAT" +msgstr "Upplänken använder NAT" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "Giltighetstid" + +msgid "Version" +msgstr "Version" + +msgid "Very good (ETX < 2)" +msgstr "Jättebra (ETX < 2)" + +msgid "Very good (SNR > 30)" +msgstr "Jättebra (SNR > 30)" + +msgid "WLAN" +msgstr "WLAN" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" +"Varning: kmod-ipip är inte installerat. SmartGateway kommer inte att " +"fungerautan kmod-ipip, vänligen installera det." + +msgid "Weight" +msgstr "Vikt" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "Frivillighet" + +msgid "Yellow" +msgstr "Gul" + +msgid "no" +msgstr "nej" + +msgid "yes" +msgstr "ja" diff --git a/feeds/luci/applications/luci-app-olsr/po/templates/olsr.pot b/feeds/luci/applications/luci-app-olsr/po/templates/olsr.pot new file mode 100644 index 0000000..6bd63c2 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/templates/olsr.pot @@ -0,0 +1,680 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-olsr/po/tr/olsr.po b/feeds/luci/applications/luci-app-olsr/po/tr/olsr.po new file mode 100644 index 0000000..1864189 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/tr/olsr.po @@ -0,0 +1,687 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-olsr/po/uk/olsr.po b/feeds/luci/applications/luci-app-olsr/po/uk/olsr.po new file mode 100644 index 0000000..d35fe31 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/uk/olsr.po @@ -0,0 +1,688 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "" + +msgid "FIB metric" +msgstr "" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +msgid "HNA6 Announcements" +msgstr "" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-olsr/po/vi/olsr.po b/feeds/luci/applications/luci-app-olsr/po/vi/olsr.po new file mode 100644 index 0000000..698e528 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/vi/olsr.po @@ -0,0 +1,703 @@ +# olsr.pot +# generated from ./applications/luci-olsr/luasrc/i18n/olsr.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:58+0200\n" +"PO-Revision-Date: 2009-08-16 12:39+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "Active MID announcements" +msgstr "Thông báo của các MID đang hoạt động" + +msgid "Active OLSR nodes" +msgstr "Những OLSR nodes đang hoạt động" + +msgid "Active host net announcements" +msgstr "Thông báo của mạng host đang hoạt động" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow gateways with NAT" +msgstr "" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "" + +msgid "Announce uplink" +msgstr "" + +msgid "Announced network" +msgstr "Mạng lưới thông báo" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "" + +msgid "Broadcast address" +msgstr "" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Download Config" +msgstr "" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" + +msgid "Enable this interface." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Expected retransmission count" +msgstr "Expected retransmission count" + +msgid "FIB metric" +msgstr "FIB metric" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General settings" +msgstr "Cài đặt tổng quát" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "Khoảng HNA" + +msgid "HNA validity time" +msgstr "Thời gian hợp lệ hóa HNA " + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "OLSR - HNA - Thông báo" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "Vùng xin chào" + +msgid "Hello validity time" +msgstr "Thời gian hợp lệ hóa lời chào" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "IPv4 broadcast" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "Internet protocol" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "Tuyến OLRS đã biết" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "LQ aging" + +msgid "LQ algorithm" +msgstr "LQ algorithm" + +msgid "LQ fisheye" +msgstr "LQ fisheye" + +msgid "LQ level" +msgstr "LQ level" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "Hop cuối " + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "Thư viện " + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "Giao diện địa phương IP" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "Khoảng MID" + +msgid "MID validity time" +msgstr "Thời gian hợp lệ hóa MID" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "Lận cận IP" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "Netmask" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "OLSR - HNA - Thông báo" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "OLSR - HNA - Thông báo" + +msgid "OLSR - Plugins" +msgstr "OLSR - Plugins" + +msgid "OLSR Daemon" +msgstr "OLSR Daemon" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "Kết nối OLSR" + +msgid "OLSR gateway" +msgstr "Cổng OLSR" + +msgid "OLSR node" +msgstr "OLSR node" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "Tổng quát về các thông báo của mạng host đang hoạt động" + +msgid "Overview of currently established OLSR connections" +msgstr "Tổng quát về kết nối OLSR hiện tại " + +msgid "Overview of currently known OLSR nodes" +msgstr "Tổng quát của các OLSR nodes đã biết hiện tại" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "Tổng quát của các tuyến đã biết hiện tại tới những OLSR nodes khác" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "Tổng quát về thông báo của nhiều giao diện đã biết" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "Cấu hình Plugin" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "Pollrate" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "Tiền tố" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "Giao diện OLSR thứ nhì" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "Khoảng TC" + +msgid "TC validity time" +msgstr "Thời gian hợp lệ hóa TC" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "Không thể kết nối với OLSR daemon!" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "Dùng hysteresis" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "Sẵn sàng" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "" +#~ "Make sure that OLSRd is running, the \"txtinfo\" plugin is loaded, " +#~ "configured on port 2006 and accepts connections from \"127.0.0.1\"." +#~ msgstr "" +#~ "Bảo đảm là OLSRd đang vận hành, the &quot;txtinfo&quot; plugin " +#~ "được tải, định cấu hình trên cổng 2006 và chấp nhận kết nối từ &" +#~ "quot;127.0.0.1&quot;." diff --git a/feeds/luci/applications/luci-app-olsr/po/zh-cn/olsr.po b/feeds/luci/applications/luci-app-olsr/po/zh-cn/olsr.po new file mode 100644 index 0000000..37264f5 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/zh-cn/olsr.po @@ -0,0 +1,696 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-10 20:26+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "" + +msgid "Active OLSR nodes" +msgstr "" + +msgid "Active host net announcements" +msgstr "" + +msgid "Advanced Settings" +msgstr "高级设置" + +msgid "Allow gateways with NAT" +msgstr "允许网关使用NAT" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "允许选定的IPv4通过网关NAT" + +msgid "Announce uplink" +msgstr "广告上行" + +msgid "Announced network" +msgstr "广告网络" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "两个值必须使用点分十进制表示法。" + +msgid "Broadcast address" +msgstr "广播地址" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "配置" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "显示" + +msgid "Downlink" +msgstr "断线" + +msgid "Download Config" +msgstr "下载配置" + +msgid "ETX" +msgstr "ETX" + +msgid "Enable" +msgstr "允许" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" +"启用SmartGateway。如果禁用,则SmartGateway其他所有参数将忽略。缺省值:“禁用”" + +msgid "Enable this interface." +msgstr "启用这个端口" + +msgid "Enabled" +msgstr "启用" + +msgid "Expected retransmission count" +msgstr "预期重发数" + +msgid "FIB metric" +msgstr "FIB度量" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "网关" + +msgid "General Settings" +msgstr "通用设置" + +msgid "General settings" +msgstr "通用设置" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "HNA" + +msgid "HNA Announcements" +msgstr "HNA公告" + +msgid "HNA interval" +msgstr "HNA间隙" + +msgid "HNA validity time" +msgstr "HNA有效时长" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "HNA公告" + +msgid "Hello" +msgstr "Hello" + +msgid "Hello interval" +msgstr "Hello间隙" + +msgid "Hello validity time" +msgstr "Hello有效时长" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "Hna4" + +msgid "Hna6" +msgstr "Hna6" + +msgid "Hops" +msgstr "跳" + +msgid "Hostname" +msgstr "主机名" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "IP地址" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 broadcast" +msgstr "IPv4广播地址" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +#, fuzzy +msgid "OLSR - HNA6-Announcements" +msgstr "HNA公告" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "Device" +#~ msgstr "设备" diff --git a/feeds/luci/applications/luci-app-olsr/po/zh-tw/olsr.po b/feeds/luci/applications/luci-app-olsr/po/zh-tw/olsr.po new file mode 100644 index 0000000..797874d --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/po/zh-tw/olsr.po @@ -0,0 +1,700 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-15 07:15+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Active MID announcements" +msgstr "啟用Mesh網狀網路ID公告" + +msgid "Active OLSR nodes" +msgstr "啟用OLSR路由協議節點" + +msgid "Active host net announcements" +msgstr "啟用主機網路公告" + +msgid "Advanced Settings" +msgstr "進階設定" + +msgid "Allow gateways with NAT" +msgstr "允許帶NAT的匝道器" + +msgid "Allow the selection of an outgoing ipv4 gateway with NAT" +msgstr "允許帶NAT的匝道器選擇輸出ipv4封包" + +msgid "Announce uplink" +msgstr "公告上傳" + +msgid "Announced network" +msgstr "公告網路" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Bad (SNR < 5)" +msgstr "" + +msgid "Both values must use the dotted decimal notation." +msgstr "這兩個值都必須採用點分十進位制格式" + +msgid "Broadcast address" +msgstr "廣播位址" + +msgid "Can only be a valid IPv4 or IPv6 address or 'default'" +msgstr "" + +msgid "Can only be a valid IPv6 address or 'default'" +msgstr "" + +msgid "Configuration" +msgstr "設定" + +msgid "" +"Could not get any data. Make sure the jsoninfo plugin is installed and " +"allows connections from localhost." +msgstr "" + +msgid "Display" +msgstr "顯示" + +msgid "Downlink" +msgstr "下行" + +msgid "Download Config" +msgstr "下載設置" + +msgid "ETX" +msgstr "" + +msgid "Enable" +msgstr "啟用" + +msgid "" +"Enable SmartGateway. If it is disabled, then all other SmartGateway " +"parameters are ignored. Default is \"no\"." +msgstr "" +"啟用機動式匝道器. 假如它失效, 其它所有機動式匝道器參數將被忽視. 預設值是\"no" +"\"" + +msgid "Enable this interface." +msgstr "啟用這個介面" + +msgid "Enabled" +msgstr "啟用" + +msgid "Expected retransmission count" +msgstr "預計重傳次數" + +msgid "FIB metric" +msgstr "FIB指標" + +msgid "" +"FIBMetric controls the metric value of the host-routes OLSRd sets. \"flat\" " +"means that the metric value is always 2. This is the preferred value because " +"it helps the linux kernel routing to clean up older routes. \"correct\" uses " +"the hopcount as the metric value. \"approx\" use the hopcount as the metric " +"value too, but does only update the hopcount if the nexthop changes too. " +"Default is \"flat\"." +msgstr "" +"FIBMetric控制OLSR主機路由的公用路由計量設定. \"flat\" 代表是公用計量數永遠是" +"2. 這是較受歡迎的數值, 因為它會協助linux核心路由清除舊的路由表. \"correct\"使" +"用跳躍數當作公用路由計量. \"approx\"也使用跳躍數當作公用路由計量, 但只作用在" +"跳躍數也更新時. 預設值是\"flat\"." + +msgid "Fisheye mechanism for TCs (checked means on). Default is \"on\"" +msgstr "" + +msgid "Gateway" +msgstr "匝道器" + +msgid "General Settings" +msgstr "一般設定" + +msgid "General settings" +msgstr "一般設定" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Good (30 > SNR > 20)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "HNA" +msgstr "" + +msgid "HNA Announcements" +msgstr "" + +msgid "HNA interval" +msgstr "" + +msgid "HNA validity time" +msgstr "" + +#, fuzzy +msgid "HNA6 Announcements" +msgstr "啟用Mesh網狀網路ID公告" + +msgid "Hello" +msgstr "" + +msgid "Hello interval" +msgstr "" + +msgid "Hello validity time" +msgstr "" + +msgid "Hide IPv4" +msgstr "" + +msgid "Hide IPv6" +msgstr "" + +msgid "Hna4" +msgstr "" + +msgid "Hna6" +msgstr "" + +msgid "Hops" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA messages." +msgstr "" + +msgid "" +"Hosts in a OLSR routed network can announce connecitivity to external " +"networks using HNA6 messages." +msgstr "" + +msgid "" +"Hysteresis for link sensing (only for hopcount metric). Hysteresis adds more " +"robustness to the link sensing but delays neighbor registration. Defaults is " +"\"yes\"" +msgstr "" + +msgid "IP Addresses" +msgstr "" + +msgid "" +"IP-version to use. If 6and4 is selected then one olsrd instance is started " +"for each protocol." +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "" +"IPv4 broadcast address for outgoing OLSR packets. One useful example would " +"be 255.255.255.255. Default is \"0.0.0.0\", which triggers the usage of the " +"interface broadcast IP." +msgstr "" + +msgid "IPv4 source" +msgstr "" + +msgid "" +"IPv4 src address for outgoing OLSR packages. Default is \"0.0.0.0\", which " +"triggers usage of the interface IP." +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 multicast" +msgstr "" + +msgid "" +"IPv6 multicast address. Default is \"FF02::6D\", the manet-router linklocal " +"multicast." +msgstr "" + +msgid "" +"IPv6 network must be given in full notation, prefix must be in CIDR notation." +msgstr "" + +msgid "IPv6 source" +msgstr "" + +msgid "" +"IPv6 src prefix. OLSRd will choose one of the interface IPs which matches " +"the prefix of this parameter. Default is \"0::/0\", which triggers the usage " +"of a not-linklocal interface IP." +msgstr "" + +msgid "IPv6-Prefix of the uplink" +msgstr "" + +msgid "" +"If the route to the current gateway is to be changed, the ETX value of this " +"gateway is multiplied with this value before it is compared to the new one. " +"The parameter can be a value between 0.1 and 1.0, but should be close to 1.0 " +"if changed.
WARNING: This parameter should not be used together " +"with the etx_ffeth metric!
Defaults to \"1.0\"." +msgstr "" + +msgid "" +"If this Node uses NAT for connections to the internet. Default is \"yes\"." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Interface Mode is used to prevent unnecessary packet forwarding on switched " +"ethernet interfaces. valid Modes are \"mesh\" and \"ether\". Default is " +"\"mesh\"." +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces Defaults" +msgstr "" + +msgid "Internet protocol" +msgstr "" + +msgid "" +"Interval to poll network interfaces for configuration changes (in seconds). " +"Default is \"2.5\"." +msgstr "" + +msgid "Invalid Value for LQMult-Value. Must be between 0.01 and 1.0." +msgstr "" + +msgid "" +"Invalid Value for LQMult-Value. You must use a decimal number between 0.01 " +"and 1.0 here." +msgstr "" + +msgid "Known OLSR routes" +msgstr "" + +msgid "LQ" +msgstr "" + +msgid "LQ aging" +msgstr "" + +msgid "LQ algorithm" +msgstr "" + +msgid "LQ fisheye" +msgstr "" + +msgid "LQ level" +msgstr "" + +msgid "" +"LQMult requires two values (IP address or 'default' and multiplicator) " +"seperated by space." +msgstr "" + +msgid "Last hop" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Library" +msgstr "" + +msgid "Link Quality Settings" +msgstr "" + +msgid "" +"Link quality aging factor (only for lq level 2). Tuning parameter for " +"etx_float and etx_fpm, smaller values mean slower changes of ETX value. " +"(allowed values are between 0.01 and 1.0)" +msgstr "" + +msgid "" +"Link quality algorithm (only for lq level 2).
etx_float: " +"floating point ETX with exponential aging
etx_fpm : same as " +"etx_float, but with integer arithmetic
etx_ff : ETX freifunk, an " +"etx variant which use all OLSR traffic (instead of only hellos) for ETX " +"calculation
etx_ffeth: incompatible variant of etx_ff that " +"allows ethernet links with ETX 0.1.
Defaults to \"etx_ff\"" +msgstr "" + +msgid "" +"Link quality level switch between hopcount and cost-based (mostly ETX) " +"routing.
0 = do not use link quality
2 = use link " +"quality for MPR selection and routing
Default is \"2\"" +msgstr "" + +msgid "LinkQuality Multiplicator" +msgstr "" + +msgid "Links per node (average)" +msgstr "" + +msgid "Links total" +msgstr "" + +msgid "Local interface IP" +msgstr "" + +msgid "MID" +msgstr "" + +msgid "MID interval" +msgstr "" + +msgid "MID validity time" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "Main IP" +msgstr "" + +msgid "" +"Make sure that OLSRd is running, the \"jsoninfo\" plugin is loaded, " +"configured on port 9090 and accepts connections from \"127.0.0.1\"." +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5
reduce LQ to all " +"nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "" +"Multiply routes with the factor given here. Allowed values are between 0.01 " +"and 1.0. It is only used when LQ-Level is greater than 0. Examples:
reduce LQ to fd91:662e:3c58::1 by half: fd91:662e:3c58::1 0.5
reduce " +"LQ to all nodes on this interface by 20%: default 0.8" +msgstr "" + +msgid "NAT threshold" +msgstr "" + +msgid "NLQ" +msgstr "" + +msgid "Neighbors" +msgstr "" + +msgid "Neighbour IP" +msgstr "" + +msgid "Neighbours" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network address" +msgstr "" + +msgid "Nic changes poll interval" +msgstr "" + +msgid "Nodes" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "OLSR - Display Options" +msgstr "" + +msgid "OLSR - HNA-Announcements" +msgstr "" + +msgid "OLSR - HNA6-Announcements" +msgstr "" + +msgid "OLSR - Plugins" +msgstr "" + +msgid "OLSR Daemon" +msgstr "" + +msgid "OLSR Daemon - Interface" +msgstr "" + +msgid "OLSR connections" +msgstr "" + +msgid "OLSR gateway" +msgstr "" + +msgid "OLSR node" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Overview of currently active OLSR host net announcements" +msgstr "" + +msgid "Overview of currently established OLSR connections" +msgstr "" + +msgid "Overview of currently known OLSR nodes" +msgstr "" + +msgid "Overview of currently known routes to other OLSR nodes" +msgstr "" + +msgid "Overview of interfaces where OLSR is running" +msgstr "" + +msgid "Overview of known multiple interface announcements" +msgstr "" + +msgid "Overview of smart gateways in this network" +msgstr "" + +msgid "Plugin configuration" +msgstr "" + +msgid "Plugins" +msgstr "" + +msgid "Polling rate for OLSR sockets in seconds. Default is 0.05." +msgstr "" + +msgid "Pollrate" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "Resolve" +msgstr "" + +msgid "" +"Resolve hostnames on status pages. It is generally safe to allow this, but " +"if you use public IPs and have unstable DNS-Setup then those pages will load " +"really slow. In this case disable it here." +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Secondary OLSR interfaces" +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is 0.0.0.0, which triggers usage of the " +"IP of the first interface." +msgstr "" + +msgid "" +"Sets the main IP (originator ip) of the router. This IP will NEVER change " +"during the uptime of olsrd. Default is ::, which triggers usage of the IP of " +"the first interface." +msgstr "" + +msgid "Show IPv4" +msgstr "" + +msgid "Show IPv6" +msgstr "" + +msgid "Signal Noise Ratio in dB" +msgstr "" + +msgid "SmartGW" +msgstr "" + +msgid "SmartGW announcements" +msgstr "" + +msgid "SmartGateway is not configured on this system." +msgstr "" + +msgid "Source address" +msgstr "" + +msgid "" +"Specifies the speed of the uplink in kilobits/s. First parameter is " +"upstream, second parameter is downstream. Default is \"128 1024\"." +msgstr "" + +msgid "Speed of the uplink" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (20 > SNR > 5)" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "Success rate of packages received from the neighbour" +msgstr "" + +msgid "Success rate of packages sent to the neighbour" +msgstr "" + +msgid "TC" +msgstr "" + +msgid "TC interval" +msgstr "" + +msgid "TC validity time" +msgstr "" + +msgid "TOS value" +msgstr "" + +msgid "" +"The OLSR daemon is an implementation of the Optimized Link State Routing " +"protocol. As such it allows mesh routing for any network equipment. It runs " +"on any wifi card that supports ad-hoc mode and of course on any ethernet " +"device. Visit olsrd.org for help and " +"documentation." +msgstr "" + +msgid "" +"The fixed willingness to use. If not set willingness will be calculated " +"dynamically based on battery/power status. Default is \"3\"." +msgstr "" + +msgid "The interface OLSRd should serve." +msgstr "" + +msgid "" +"The port OLSR uses. This should usually stay at the IANA assigned port 698. " +"It can have a value between 1 and 65535." +msgstr "" + +msgid "" +"This can be used to signal the external IPv6 prefix of the uplink to the " +"clients. This might allow a client to change it's local IPv6 address to use " +"the IPv6 gateway without any kind of address translation. The maximum prefix " +"length is 64 bits. Default is \"::/0\" (no prefix)." +msgstr "" + +msgid "Timing and Validity" +msgstr "" + +msgid "Topology" +msgstr "" + +msgid "" +"Type of service value for the IP header of control traffic. Default is " +"\"16\"." +msgstr "" + +msgid "Unable to connect to the OLSR daemon!" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Uplink uses NAT" +msgstr "" + +msgid "Use hysteresis" +msgstr "" + +msgid "Validity Time" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "Very good (SNR > 30)" +msgstr "" + +msgid "WLAN" +msgstr "" + +msgid "" +"Warning: kmod-ipip is not installed. Without kmod-ipip SmartGateway will not " +"work, please install it." +msgstr "" + +msgid "Weight" +msgstr "" + +msgid "" +"When multiple links exist between hosts the weight of interface is used to " +"determine the link to use. Normally the weight is automatically calculated " +"by olsrd based on the characteristics of the interface, but here you can " +"specify a fixed value. Olsrd will choose links with the lowest value.
Note: Interface weight is used only when LinkQualityLevel is set to " +"0. For any other value of LinkQualityLevel, the interface ETX value is used " +"instead." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA of 0.0.0.0/0, ::ffff:0:0/96 or 2000::/3. " +"Default setting is \"both\"." +msgstr "" + +msgid "" +"Which kind of uplink is exported to the other mesh nodes. An uplink is " +"detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default " +"setting is \"both\"." +msgstr "" + +msgid "Willingness" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" + +#~ msgid "Device" +#~ msgstr "設備" diff --git a/feeds/luci/applications/luci-app-olsr/root/etc/config/luci_olsr b/feeds/luci/applications/luci-app-olsr/root/etc/config/luci_olsr new file mode 100644 index 0000000..2dd4ffa --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/root/etc/config/luci_olsr @@ -0,0 +1,2 @@ +config 'olsr' 'general' + option 'resolve' '1' diff --git a/feeds/luci/applications/luci-app-olsr/root/etc/uci-defaults/40_luci-olsr b/feeds/luci/applications/luci-app-olsr/root/etc/uci-defaults/40_luci-olsr new file mode 100755 index 0000000..63c01e4 --- /dev/null +++ b/feeds/luci/applications/luci-app-olsr/root/etc/uci-defaults/40_luci-olsr @@ -0,0 +1,14 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@olsrd[-1] + add ucitrack olsrd + set ucitrack.@olsrd[-1].init=olsrd + delete ucitrack.@olsrd6[-1] + add ucitrack olsrd6 + set ucitrack.@olsrd6[-1].init=olsrd6 + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-openvpn/Makefile b/feeds/luci/applications/luci-app-openvpn/Makefile new file mode 100644 index 0000000..a8070fd --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for OpenVPN +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-openvpn/luasrc/controller/openvpn.lua b/feeds/luci/applications/luci-app-openvpn/luasrc/controller/openvpn.lua new file mode 100644 index 0000000..2e48a46 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/luasrc/controller/openvpn.lua @@ -0,0 +1,11 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.openvpn", package.seeall) + +function index() + entry( {"admin", "services", "openvpn"}, cbi("openvpn"), _("OpenVPN") ) + entry( {"admin", "services", "openvpn", "basic"}, cbi("openvpn-basic"), nil ).leaf = true + entry( {"admin", "services", "openvpn", "advanced"}, cbi("openvpn-advanced"), nil ).leaf = true +end diff --git a/feeds/luci/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua b/feeds/luci/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua new file mode 100644 index 0000000..1bbee83 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua @@ -0,0 +1,265 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +require("luci.ip") +require("luci.model.uci") + + +local knownParams = { + -- + -- Widget Name Default(s) Description Option(s) + -- + + { "Service", { + -- initialisation and daemon options + { ListValue, "verb", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, translate("Set output verbosity") }, + { Flag, "mlock", 0, translate("Disable Paging") }, + { Flag, "disable_occ", 0, translate("Disable options consistency check") }, + -- { Value, "user", "root", translate("Set UID to user") }, + -- { Value, "group", "root", translate("Set GID to group") }, + { Value, "cd", "/etc/openvpn", translate("Change to directory before initialization") }, + { Value, "chroot", "/var/run", translate("Chroot to directory after initialization") }, + -- { Value, "daemon", "Instance-Name", translate("Daemonize after initialization") }, + -- { Value, "syslog", "Instance-Name", translate("Output to syslog and do not daemonize") }, + { Flag, "passtos", 0, translate("TOS passthrough (applies to IPv4 only)") }, + -- { Value, "inetd", "nowait Instance-Name", translate("Run as an inetd or xinetd server") }, + { Value, "log", "/var/log/openvpn.log", translate("Write log to file") }, + { Value, "log_append", "/var/log/openvpn.log", translate("Append log to file") }, + { Flag, "suppress_timestamps", 0, translate("Don't log timestamps") }, + -- { Value, "writepid", "/var/run/openvpn.pid", translate("Write process ID to file") }, + { Value, "nice", 0, translate("Change process priority") }, + { Flag, "fast_io", 0, translate("Optimize TUN/TAP/UDP writes") }, + { Value, "echo", "some params echoed to log", translate("Echo parameters to log") }, + { ListValue, "remap_usr1", { "SIGHUP", "SIGTERM" }, translate("Remap SIGUSR1 signals") }, + { Value, "status", "/var/run/openvpn.status 5", translate("Write status to file every n seconds") }, + { Value, "status_version", { 1, 2 }, translate("Status file format version") }, -- status + { Value, "mute", 5, translate("Limit repeated log messages") }, + + { Value, "up", "/usr/bin/ovpn-up", translate("Shell cmd to execute after tun device open") }, + { Value, "up_delay", 5, translate("Delay tun/tap open and up script execution") }, + { Value, "down", "/usr/bin/ovpn-down", translate("Shell cmd to run after tun device close") }, + { Flag, "down_pre", 0, translate("Call down cmd/script before TUN/TAP close") }, + { Flag, "up_restart", 0, translate("Run up/down scripts for all restarts") }, + { Value, "route_up", "/usr/bin/ovpn-routeup", translate("Execute shell cmd after routes are added") }, + { Value, "ipchange", "/usr/bin/ovpn-ipchange", translate("Execute shell command on remote ip change"), { mode="p2p" } }, + { DynamicList, "setenv", { "VAR1 value1", "VAR2 value2" }, translate("Pass environment variables to script") }, + { Value, "tls_verify", "/usr/bin/ovpn-tlsverify", translate("Shell command to verify X509 name") }, + { Value, "client_connect", "/usr/bin/ovpn-clientconnect", translate("Run script cmd on client connection") }, + { Flag, "client_disconnect", 0, translate("Run script cmd on client disconnection") }, + { Value, "learn_address", "/usr/bin/ovpn-learnaddress", translate("Executed in server mode whenever an IPv4 address/route or MAC address is added to OpenVPN's internal routing table") }, + { Value, "auth_user_pass_verify", "/usr/bin/ovpn-userpass via-env", translate("Executed in server mode on new client connections, when the client is still untrusted") }, + { ListValue, "script_security", { 0, 1, 2, 3 }, translate("Policy level over usage of external programs and scripts") }, + } }, + + { "Networking", { + -- socket config + { ListValue, "mode", { "p2p", "server" }, translate("Major mode") }, + { Value, "local", "0.0.0.0", translate("Local host name or ip address") }, + { Value, "port", 1194, translate("TCP/UDP port # for both local and remote") }, + { Value, "lport", 1194, translate("TCP/UDP port # for local (default=1194)") }, + { Value, "rport", 1194, translate("TCP/UDP port # for remote (default=1194)") }, + { Flag, "float", 0, translate("Allow remote to change its IP or port") }, + { Flag, "nobind", 0, translate("Do not bind to local address and port") }, + + { Value, "dev", "tun0", translate("tun/tap device") }, + { ListValue, "dev_type", { "tun", "tap" }, translate("Type of used device") }, + { Value, "dev_node", "/dev/net/tun", translate("Use tun/tap device node") }, + { Flag, "tun_ipv6", 0, translate("Make tun device IPv6 capable") }, + + { Value, "ifconfig", "10.200.200.3 10.200.200.1", translate("Set tun/tap adapter parameters") }, + { Flag, "ifconfig_noexec", 0, translate("Don't actually execute ifconfig") }, + { Flag, "ifconfig_nowarn", 0, translate("Don't warn on ifconfig inconsistencies") }, + + { DynamicList, "route", "10.123.0.0 255.255.0.0", translate("Add route after establishing connection") }, + { Value, "route_gateway", "10.234.1.1", translate("Specify a default gateway for routes") }, + { Value, "route_delay", 0, translate("Delay n seconds after connection") }, + { Flag, "route_noexec", 0, translate("Don't add routes automatically") }, + { Flag, "route_nopull", 0, translate("Don't pull routes automatically") }, + + { ListValue, "mtu_disc", { "yes", "maybe", "no" }, translate("Enable Path MTU discovery") }, + { Flag, "mtu_test", 0, translate("Empirically measure MTU") }, + { ListValue, "comp_lzo", { "yes", "no", "adaptive" }, translate("Use fast LZO compression") }, + { Flag, "comp_noadapt", 0, translate("Don't use adaptive lzo compression"), { comp_lzo=1 } }, + { Value, "link_mtu", 1500, translate("Set TCP/UDP MTU") }, + { Value, "tun_mtu", 1500, translate("Set tun/tap device MTU") }, + { Value, "tun_mtu_extra", 1500, translate("Set tun/tap device overhead") }, + { Value, "fragment", 1500, translate("Enable internal datagram fragmentation"), { proto="udp" } }, + { Value, "mssfix", 1500, translate("Set upper bound on TCP MSS"), { proto="udp" } }, + { Value, "sndbuf", 65536, translate("Set the TCP/UDP send buffer size") }, + { Value, "rcvbuf", 65536, translate("Set the TCP/UDP receive buffer size") }, + { Value, "txqueuelen", 100, translate("Set tun/tap TX queue length") }, + { Value, "shaper", 10240, translate("Shaping for peer bandwidth") }, + + { Value, "inactive", 240, translate("tun/tap inactivity timeout") }, + { Value, "keepalive", "10 60", translate("Helper directive to simplify the expression of --ping and --ping-restart in server mode configurations") }, + { Value, "ping", 30, translate("Ping remote every n seconds over TCP/UDP port") }, + { Value, "ping_exit", 120, translate("Remote ping timeout") }, + { Value, "ping_restart", 60, translate("Restart after remote ping timeout") }, + { Flag, "ping_timer_rem", 0, translate("Only process ping timeouts if routes exist") }, + + { Flag, "persist_tun", 0, translate("Keep tun/tap device open on restart") }, + { Flag, "persist_key", 0, translate("Don't re-read key on restart") }, + { Flag, "persist_local_ip", 0, translate("Keep local IP address on restart") }, + { Flag, "persist_remote_ip", 0, translate("Keep remote IP address on restart") }, + + -- management channel + { Value, "management", "127.0.0.1 31194 /etc/openvpn/mngmt-pwds", translate("Enable management interface on IP port") }, + { Flag, "management_query_passwords", 0, translate("Query management channel for private key") }, -- management + { Flag, "management_hold", 0, translate("Start OpenVPN in a hibernating state") }, -- management + { Value, "management_log_cache", 100, translate("Number of lines for log file history") }, -- management + { ListValue, "topology", { "net30", "p2p", "subnet" }, translate("'net30', 'p2p', or 'subnet'"), {dev_type="tun" } }, + } }, + + { "VPN", { + { Value, "server", "10.200.200.0 255.255.255.0", translate("Configure server mode"), { server_mode="1" } }, + { Value, "server_bridge", "10.200.200.1 255.255.255.0 10.200.200.200 10.200.200.250", translate("Configure server bridge"), { server_mode="1" } }, + { DynamicList, "push", { "redirect-gateway", "comp-lzo" }, translate("Push options to peer"), { server_mode="1" } }, + { Flag, "push_reset", 0, translate("Don't inherit global push options"), { server_mode="1" } }, + { Flag, "disable", 0, translate("Client is disabled"), { server_mode="1" } }, + { Value, "ifconfig_pool", "10.200.200.100 10.200.200.150 255.255.255.0", translate("Set aside a pool of subnets"), { server_mode="1" } }, + { Value, "ifconfig_pool_persist", "/etc/openvpn/ipp.txt 600", translate("Persist/unpersist ifconfig-pool"), { server_mode="1" } }, +-- { Flag, "ifconfig_pool_linear", 0, translate("Use individual addresses rather than /30 subnets"), { server_mode="1" } }, -- deprecated and replaced by --topology p2p + { Value, "ifconfig_push", "10.200.200.1 255.255.255.255", translate("Push an ifconfig option to remote"), { server_mode="1" } }, + { Value, "iroute", "10.200.200.0 255.255.255.0", translate("Route subnet to client"), { server_mode="1" } }, + { Flag, "client_to_client", 0, translate("Allow client-to-client traffic"), { server_mode="1" } }, + { Flag, "duplicate_cn", 0, translate("Allow multiple clients with same certificate"), { server_mode="1" } }, + { Value, "client_config_dir", "/etc/openvpn/ccd", translate("Directory for custom client config files"), { server_mode="1" } }, + { Flag, "ccd_exclusive", 0, translate("Refuse connection if no custom client config"), { server_mode="1" } }, + { Value, "tmp_dir", "/var/run/openvpn", translate("Temporary directory for client-connect return file"), { server_mode="1" } }, + { Value, "hash_size", "256 256", translate("Set size of real and virtual address hash tables"), { server_mode="1" } }, + { Value, "bcast_buffers", 256, translate("Number of allocated broadcast buffers"), { server_mode="1" } }, + { Value, "tcp_queue_limit", 64, translate("Maximum number of queued TCP output packets"), { server_mode="1" } }, + { Value, "max_clients", 10, translate("Allowed maximum of connected clients"), { server_mode="1" } }, + { Value, "max_routes_per_client", 256, translate("Allowed maximum of internal"), { server_mode="1" } }, + { Value, "connect_freq", "3 10", translate("Allowed maximum of new connections"), { server_mode="1" } }, + { Flag, "client_cert_not_required", 0, translate("Don't require client certificate"), { server_mode="1" } }, + { Flag, "username_as_common_name", 0, translate("Use username as common name"), { server_mode="1" } }, + { Flag, "client", 0, translate("Configure client mode"), { server_mode="0" }, { server_mode="" } }, + { Flag, "pull", 0, translate("Accept options pushed from server"), { client="1" } }, + { Value, "auth_user_pass", "/etc/openvpn/userpass.txt", translate("Authenticate using username/password"), { client="1" } }, + { ListValue, "auth_retry", { "none", "nointeract", "interact" }, translate("Handling of authentication failures"), { client="1" } }, + { Value, "explicit_exit_notify", 1, translate("Send notification to peer on disconnect"), { client="1" } }, + { DynamicList, "remote", "1.2.3.4", translate("Remote host name or ip address"), { client="1" } }, + { Flag, "remote_random", 1, translate("Randomly choose remote server"), { client="1" } }, + { ListValue, "proto", { "udp", "tcp-client", "tcp-server" }, translate("Use protocol"), { client="1" } }, + { Value, "connect_retry", 5, translate("Connection retry interval"), { proto="tcp-client" }, { client="1" } }, + { Value, "http_proxy", "192.168.1.100 8080", translate("Connect to remote host through an HTTP proxy"), { client="1" } }, + { Flag, "http_proxy_retry", 0, translate("Retry indefinitely on HTTP proxy errors"), { client="1" } }, + { Value, "http_proxy_timeout", 5, translate("Proxy timeout in seconds"), { client="1" } }, + { DynamicList, "http_proxy_option", { "VERSION 1.0", "AGENT OpenVPN/2.0.9" }, translate("Set extended HTTP proxy options"), { client="1" } }, + { Value, "socks_proxy", "192.168.1.200 1080", translate("Connect through Socks5 proxy"), { client="1" } }, + { Value, "socks_proxy_retry", 5, translate("Retry indefinitely on Socks proxy errors"), { client="1" } }, -- client && socks_proxy + { Value, "resolv_retry", "infinite", translate("If hostname resolve fails, retry"), { client="1" } }, + { ListValue, "redirect_gateway", { "", "local", "def1", "local def1" }, translate("Automatically redirect default route"), { client="1" } }, + } }, + + { "Cryptography", { + { FileUpload, "secret", "/etc/openvpn/secret.key", translate("Enable Static Key encryption mode (non-TLS)") }, + { Value, "auth", "SHA1", translate("HMAC authentication for packets") }, -- parse + { Value, "cipher", "BF-CBC", translate("Encryption cipher for packets") }, -- parse + { Value, "keysize", 1024, translate("Size of cipher key") }, -- parse + { Value, "engine", "dynamic", translate("Enable OpenSSL hardware crypto engines") }, -- parse + { Flag, "no_replay", 0, translate("Disable replay protection") }, + { Value, "replay_window", "64 15", translate("Replay protection sliding window size") }, + { Flag, "mute_replay_warnings", 0, translate("Silence the output of replay warnings") }, + { Value, "replay_persist", "/var/run/openvpn-replay-state", translate("Persist replay-protection state") }, + { Flag, "no_iv", 0, translate("Disable cipher initialisation vector") }, + { Flag, "tls_server", 0, translate("Enable TLS and assume server role"), { tls_client="" }, { tls_client="0" } }, + { Flag, "tls_client", 0, translate("Enable TLS and assume client role"), { tls_server="" }, { tls_server="0" } }, + { FileUpload, "ca", "/etc/easy-rsa/keys/ca.crt", translate("Certificate authority") }, + { FileUpload, "dh", "/etc/easy-rsa/keys/dh1024.pem", translate("Diffie Hellman parameters") }, + { FileUpload, "cert", "/etc/easy-rsa/keys/some-client.crt", translate("Local certificate") }, + { FileUpload, "key", "/etc/easy-rsa/keys/some-client.key", translate("Local private key") }, + { FileUpload, "pkcs12", "/etc/easy-rsa/keys/some-client.pk12", translate("PKCS#12 file containing keys") }, + { ListValue, "key_method", { 1, 2 }, translate("Enable TLS and assume client role") }, + { Value, "tls_cipher", "DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:RC4-SHA:RC4-MD5:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5", + translate("TLS cipher") }, + { Value, "tls_timeout", 2, translate("Retransmit timeout on TLS control channel") }, + { Value, "reneg_bytes", 1024, translate("Renegotiate data chan. key after bytes") }, + { Value, "reneg_pkts", 100, translate("Renegotiate data chan. key after packets") }, + { Value, "reneg_sec", 3600, translate("Renegotiate data chan. key after seconds") }, + { Value, "hand_window", 60, translate("Timeframe for key exchange") }, + { Value, "tran_window", 3600, translate("Key transition window") }, + { Flag, "single_session", 0, translate("Allow only one session") }, + { Flag, "tls_exit", 0, translate("Exit on TLS negotiation failure") }, + { Value, "tls_auth", "/etc/openvpn/tlsauth.key", translate("Additional authentication over TLS") }, + --{ Value, "askpass", "[file]", translate("Get PEM password from controlling tty before we daemonize") }, + { Flag, "auth_nocache", 0, translate("Don't cache --askpass or --auth-user-pass passwords") }, + { Value, "tls_remote", "remote_x509_name", translate("Only accept connections from given X509 name") }, + { ListValue, "ns_cert_type", { "client", "server" }, translate("Require explicit designation on certificate") }, + { ListValue, "remote_cert_tls", { "client", "server" }, translate("Require explicit key usage on certificate") }, + { Value, "crl_verify", "/etc/easy-rsa/keys/crl.pem", translate("Check peer certificate against a CRL") }, + { Value, "tls_version_min", "1.0", translate("The lowest supported TLS version") }, + { Value, "tls_version_max", "1.2", translate("The highest supported TLS version") }, + { Value, "key_direction", "1", translate("The key direction for 'tls-auth' and 'secret' options") }, + } } +} + + +local cts = { } +local params = { } + +local m = Map("openvpn") +local p = m:section( SimpleSection ) + +p.template = "openvpn/pageswitch" +p.mode = "advanced" +p.instance = arg[1] +p.category = arg[2] or "Service" + +for _, c in ipairs(knownParams) do + cts[#cts+1] = c[1] + if c[1] == p.category then params = c[2] end +end + +p.categories = cts + + +local s = m:section( + NamedSection, arg[1], "openvpn", + translate("%s" % arg[2]) +) + +s.title = translate("%s" % arg[2]) +s.addremove = false +s.anonymous = true + + +for _, option in ipairs(params) do + local o = s:option( + option[1], option[2], + option[2], option[4] + ) + + if option[1] == DummyValue then + o.value = option[3] + else + if option[1] == DynamicList then + function o.cfgvalue(...) + local val = AbstractValue.cfgvalue(...) + return ( val and type(val) ~= "table" ) and { val } or val + end + end + + o.optional = true + + if type(option[3]) == "table" then + if o.optional then o:value("", "-- remove --") end + for _, v in ipairs(option[3]) do + v = tostring(v) + o:value(v) + end + o.default = tostring(option[3][1]) + else + o.default = tostring(option[3]) + end + end + + for i=5,#option do + if type(option[i]) == "table" then + o:depends(option[i]) + end + end +end + +return m diff --git a/feeds/luci/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua b/feeds/luci/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua new file mode 100644 index 0000000..aaa1979 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua @@ -0,0 +1,91 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +require("luci.ip") +require("luci.model.uci") + + +local basicParams = { + -- + -- Widget, Name, Default(s), Description + -- + + { ListValue, "verb", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, translate("Set output verbosity") }, + { Value, "nice",0, translate("Change process priority") }, + { Value,"port",1194, translate("TCP/UDP port # for both local and remote") }, + { ListValue,"dev_type",{ "tun", "tap" }, translate("Type of used device") }, + { Flag,"tun_ipv6",0, translate("Make tun device IPv6 capable") }, + + { Value,"ifconfig","10.200.200.3 10.200.200.1", translate("Set tun/tap adapter parameters") }, + { Value,"server","10.200.200.0 255.255.255.0", translate("Configure server mode") }, + { Value,"server_bridge","192.168.1.1 255.255.255.0 192.168.1.128 192.168.1.254", translate("Configure server bridge") }, + { Flag,"nobind",0, translate("Do not bind to local address and port") }, + + { ListValue,"comp_lzo",{"yes","no","adaptive"}, translate("Use fast LZO compression") }, + { Value,"keepalive","10 60", translate("Helper directive to simplify the expression of --ping and --ping-restart in server mode configurations") }, + + { ListValue,"proto",{ "udp", "udp6", "tcp", "tcp6" }, translate("Use protocol") }, + + { Flag,"client",0, translate("Configure client mode") }, + { Flag,"client_to_client",0, translate("Allow client-to-client traffic") }, + { DynamicList,"remote","vpnserver.example.org", translate("Remote host name or ip address") }, + + { FileUpload,"secret","/etc/openvpn/secret.key", translate("Enable Static Key encryption mode (non-TLS)") }, + { Value,"key_direction","1", translate("The key direction for 'tls-auth' and 'secret' options") }, + { FileUpload,"pkcs12","/etc/easy-rsa/keys/some-client.pk12", translate("PKCS#12 file containing keys") }, + { FileUpload,"ca","/etc/easy-rsa/keys/ca.crt", translate("Certificate authority") }, + { FileUpload,"dh","/etc/easy-rsa/keys/dh1024.pem", translate("Diffie Hellman parameters") }, + { FileUpload,"cert","/etc/easy-rsa/keys/some-client.crt", translate("Local certificate") }, + { FileUpload,"key","/etc/easy-rsa/keys/some-client.key", translate("Local private key") }, +} + + +local m = Map("openvpn") +local p = m:section( SimpleSection ) + +p.template = "openvpn/pageswitch" +p.mode = "basic" +p.instance = arg[1] + + +local s = m:section( NamedSection, arg[1], "openvpn" ) + +for _, option in ipairs(basicParams) do + local o = s:option( + option[1], option[2], + option[2], option[4] + ) + + o.optional = true + + if option[1] == DummyValue then + o.value = option[3] + else + if option[1] == DynamicList then + function o.cfgvalue(...) + local val = AbstractValue.cfgvalue(...) + return ( val and type(val) ~= "table" ) and { val } or val + end + end + + if type(option[3]) == "table" then + if o.optional then o:value("", "-- remove --") end + for _, v in ipairs(option[3]) do + v = tostring(v) + o:value(v) + end + o.default = tostring(option[3][1]) + else + o.default = tostring(option[3]) + end + end + + for i=5,#option do + if type(option[i]) == "table" then + o:depends(option[i]) + end + end +end + +return m + diff --git a/feeds/luci/applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua b/feeds/luci/applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua new file mode 100644 index 0000000..719145b --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua @@ -0,0 +1,130 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local sys = require "luci.sys" +local uci = require "luci.model.uci".cursor() +local testfullps = luci.sys.exec("ps --help 2>&1 | grep BusyBox") --check which ps do we have +local psstring = (string.len(testfullps)>0) and "ps w" or "ps axfw" --set command we use to get pid + +local m = Map("openvpn", translate("OpenVPN")) +local s = m:section( TypedSection, "openvpn", translate("OpenVPN instances"), translate("Below is a list of configured OpenVPN instances and their current state") ) +s.template = "cbi/tblsection" +s.template_addremove = "openvpn/cbi-select-input-add" +s.addremove = true +s.add_select_options = { } +s.extedit = luci.dispatcher.build_url( + "admin", "services", "openvpn", "basic", "%s" +) + +uci:load("openvpn_recipes") +uci:foreach( "openvpn_recipes", "openvpn_recipe", + function(section) + s.add_select_options[section['.name']] = + section['_description'] or section['.name'] + end +) + +function s.getPID(section) -- Universal function which returns valid pid # or nil + local pid = sys.exec("%s | grep -w %s | grep openvpn | grep -v grep | awk '{print $1}'" % { psstring,section} ) + if pid and #pid > 0 and tonumber(pid) ~= nil then + return tonumber(pid) + else + return nil + end +end + +function s.parse(self, section) + local recipe = luci.http.formvalue( + luci.cbi.CREATE_PREFIX .. self.config .. "." .. + self.sectiontype .. ".select" + ) + + if recipe and not s.add_select_options[recipe] then + self.invalid_cts = true + else + TypedSection.parse( self, section ) + end +end + +function s.create(self, name) + local recipe = luci.http.formvalue( + luci.cbi.CREATE_PREFIX .. self.config .. "." .. + self.sectiontype .. ".select" + ) + name = luci.http.formvalue( + luci.cbi.CREATE_PREFIX .. self.config .. "." .. + self.sectiontype .. ".text" + ) + if string.len(name)>3 and not name:match("[^a-zA-Z0-9_]") then + uci:section( + "openvpn", "openvpn", name, + uci:get_all( "openvpn_recipes", recipe ) + ) + + uci:delete("openvpn", name, "_role") + uci:delete("openvpn", name, "_description") + uci:save("openvpn") + + luci.http.redirect( self.extedit:format(name) ) + else + self.invalid_cts = true + end +end + + +s:option( Flag, "enabled", translate("Enabled") ) + +local active = s:option( DummyValue, "_active", translate("Started") ) +function active.cfgvalue(self, section) + local pid = s.getPID(section) + if pid ~= nil then + return (sys.process.signal(pid, 0)) + and translatef("yes (%i)", pid) + or translate("no") + end + return translate("no") +end + +local updown = s:option( Button, "_updown", translate("Start/Stop") ) +updown._state = false +updown.redirect = luci.dispatcher.build_url( + "admin", "services", "openvpn" +) +function updown.cbid(self, section) + local pid = s.getPID(section) + self._state = pid ~= nil and sys.process.signal(pid, 0) + self.option = self._state and "stop" or "start" + return AbstractValue.cbid(self, section) +end +function updown.cfgvalue(self, section) + self.title = self._state and "stop" or "start" + self.inputstyle = self._state and "reset" or "reload" +end +function updown.write(self, section, value) + if self.option == "stop" then + local pid = s.getPID(section) + if pid ~= nil then + sys.process.signal(pid,15) + end + else + luci.sys.call("/etc/init.d/openvpn start %s" % section) + end + luci.http.redirect( self.redirect ) +end + + +local port = s:option( DummyValue, "port", translate("Port") ) +function port.cfgvalue(self, section) + local val = AbstractValue.cfgvalue(self, section) + return val or "1194" +end + +local proto = s:option( DummyValue, "proto", translate("Protocol") ) +function proto.cfgvalue(self, section) + local val = AbstractValue.cfgvalue(self, section) + return val or "udp" +end + + +return m diff --git a/feeds/luci/applications/luci-app-openvpn/luasrc/view/openvpn/cbi-select-input-add.htm b/feeds/luci/applications/luci-app-openvpn/luasrc/view/openvpn/cbi-select-input-add.htm new file mode 100644 index 0000000..0166de7 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/luasrc/view/openvpn/cbi-select-input-add.htm @@ -0,0 +1,11 @@ +
+ <% if self.invalid_cts then -%>
<% end %> + + + + <% if self.invalid_cts then %>
<%:Invalid%>
<% end %> +
diff --git a/feeds/luci/applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm b/feeds/luci/applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm new file mode 100644 index 0000000..f22cb68 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm @@ -0,0 +1,30 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +
+ + <%:Overview%> » + <%=luci.i18n.translatef("Instance \"%s\"", self.instance)%> + + + <% if self.mode == "basic" then %> + "><%:Switch to advanced configuration »%> + <% else %> + <%:« Switch to basic configuration%> +
+ <%:Configuration category%>: + <% for i, c in ipairs(self.categories) do %> + <% if c == self.category then %> + <%=translate(c)%> + <% else %> + "><%=translate(c)%> + <% end %> + <% if next(self.categories, i) then %>|<% end %> + <% end %> + <% end %> +
diff --git a/feeds/luci/applications/luci-app-openvpn/po/ca/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/ca/openvpn.po new file mode 100644 index 0000000..1b75fe6 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/ca/openvpn.po @@ -0,0 +1,558 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-08-07 20:41+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p', o 'subnet'" + +msgid "Accept options pushed from server" +msgstr "Accepta opcions rebudes del servidor" + +msgid "Add" +msgstr "Afegeix" + +msgid "Add route after establishing connection" +msgstr "Afegeix ruta després d'establir connexió" + +msgid "Additional authentication over TLS" +msgstr "Autenticació addicional sobre TLS" + +msgid "Allow client-to-client traffic" +msgstr "Permet tràfic client a client" + +msgid "Allow multiple clients with same certificate" +msgstr "Permet múltiples clients amb el mateix certificat" + +msgid "Allow only one session" +msgstr "Permet només una sessió" + +msgid "Allow remote to change its IP or port" +msgstr "Permet al remot canviar la seva IP o port" + +msgid "Allowed maximum of connected clients" +msgstr "Màxim de clients connectats pemès" + +msgid "Allowed maximum of internal" +msgstr "Màxim permès d'interns" + +msgid "Allowed maximum of new connections" +msgstr "Màxim de noves connexions permesès" + +msgid "Append log to file" +msgstr "Afegeix el registre al fitxer" + +msgid "Authenticate using username/password" +msgstr "Autentica utilitzant nom d'usuari/contrasenya" + +msgid "Automatically redirect default route" +msgstr "Readreça automàticament la ruta per defecte" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" +"A sota hi ha una llista d'instàncies OpenVPN configurades i el seu estat " +"actual" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" +"Crida l'script/comanda de desactivació abans de tancar el dispositiu TUN/TAP" + +msgid "Certificate authority" +msgstr "Autoritat de certificat" + +msgid "Change process priority" +msgstr "Canvia la prioritat del procés" + +msgid "Change to directory before initialization" +msgstr "Canvia el directori abans de la inicialització" + +msgid "Check peer certificate against a CRL" +msgstr "Comprova el certificat de peer contra un CRL" + +msgid "Chroot to directory after initialization" +msgstr "Chroot al directori després de la inicialització" + +msgid "Client is disabled" +msgstr "El client està inhabilitat" + +msgid "Configuration category" +msgstr "Categoria de configuració" + +msgid "Configure client mode" +msgstr "Configura el mode client" + +msgid "Configure server bridge" +msgstr "Configura el pont de servidor" + +msgid "Configure server mode" +msgstr "Configura el mode servidor" + +msgid "Connect through Socks5 proxy" +msgstr "Connecta't a través un proxy Socks5" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "Connecta al host remot a través d'un intermediari HTTP" + +msgid "Connection retry interval" +msgstr "Interval de reintent de connexió" + +msgid "Daemonize after initialization" +msgstr "Dimonitza després d'inicialitzar" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "Retarda l'obertura tun/tap i l'execució d'script d'activació" + +msgid "Diffie Hellman parameters" +msgstr "Paràmetres Diffie-Hellman" + +msgid "Directory for custom client config files" +msgstr "Directori per fitxers de configuració de client personalitzats" + +msgid "Disable Paging" +msgstr "Desactiva Paging" + +msgid "Disable cipher initialisation vector" +msgstr "Desactiva xifratge de vector d'inicialització" + +msgid "Disable options consistency check" +msgstr "Desactiva la comprovació de consistència d'opcions" + +msgid "Disable replay protection" +msgstr "Desactiva la protecció de reproducció" + +msgid "Do not bind to local address and port" +msgstr "No vinculis a adreça i port locals" + +msgid "Don't actually execute ifconfig" +msgstr "No executis ifconfig" + +msgid "Don't add routes automatically" +msgstr "No afegeixis rutes automàticament" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "No desis a la memòria cau contrasenyes --askpass o --auth-user-pass" + +msgid "Don't inherit global push options" +msgstr "No heretis les opcions globals enviades pel servidor" + +msgid "Don't log timestamps" +msgstr "No registris les marques horàries" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "No rellegeixis la clau al reiniciar" + +msgid "Don't require client certificate" +msgstr "No requereixis el certificat de client" + +msgid "Don't use adaptive lzo compression" +msgstr "No utilitzis compressió adaptativa LZO" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "No alertis d'inconsistències ifconfig" + +msgid "Echo parameters to log" +msgstr "Escriu els paràmetres al registre" + +msgid "Empirically measure MTU" +msgstr "Mesura empíricament l'MTU" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "Habilita els motors criptogràfics de maquinari del OpenSSL" + +msgid "Enable Path MTU discovery" +msgstr "Habilita el descobriment de ruta MTU" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "Activa el mode d'encriptació de Clau Estàtica (no-TLS)" + +msgid "Enable TLS and assume client role" +msgstr "Activa el TLS i assumeix el rol de client" + +msgid "Enable TLS and assume server role" +msgstr "Activa el TLS i assumeix el rol de servidor" + +msgid "Enable internal datagram fragmentation" +msgstr "Activa la fragmentació de datagrames interna" + +msgid "Enable management interface on IP port" +msgstr "Activa la interfície de gestió a IP port" + +msgid "Enabled" +msgstr "Activat" + +msgid "Encryption cipher for packets" +msgstr "Xifra d'encriptació per paquets" + +msgid "Execute shell cmd after routes are added" +msgstr "Executa comanda després d'afegir les rutes" + +msgid "Execute shell command on remote ip change" +msgstr "Executa una ordre de consola quan hi hagi un canvi d'IP remot" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "Surt en fallar la negociació TLS" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "Aconsegueix contrasenya PEM de controlar tty abans de dimonitzar" + +msgid "HMAC authentication for packets" +msgstr "Autenticació HMAC per paquets" + +msgid "Handling of authentication failures" +msgstr "Gestió de fallades d'autenticació" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "Si la resolució del nom de màquina falla, reintenta-ho" + +msgid "Instance \"%s\"" +msgstr "Instància \"%s\"" + +msgid "Invalid" +msgstr "Invàlid" + +msgid "Keep local IP address on restart" +msgstr "Mantingues l'adreça IP local al reiniciar" + +msgid "Keep remote IP address on restart" +msgstr "Mantingues l'adreça IP remota al reiniciar" + +msgid "Keep tun/tap device open on restart" +msgstr "Mantingues el dispositiu tun/tap obert al reiniciar" + +msgid "Key transition window" +msgstr "Finestra de transició de clau" + +msgid "Limit repeated log messages" +msgstr "Limita els missatges de registre repetits" + +msgid "Local certificate" +msgstr "Certificat local" + +msgid "Local host name or ip address" +msgstr "Nom de màquina local o adreça IP" + +msgid "Local private key" +msgstr "Clau privada local" + +msgid "Major mode" +msgstr "Mode major" + +msgid "Make tun device IPv6 capable" +msgstr "Fes que el dispositiu tun sigui apte per IPv6" + +msgid "Maximum number of queued TCP output packets" +msgstr "Número màxim de paquets TCP encuats a la sortida" + +msgid "Number of allocated broadcast buffers" +msgstr "Número de memòries intermèdies de difusió assignades" + +msgid "Number of lines for log file history" +msgstr "Número de línies per historial de fitxer de registre" + +msgid "Only accept connections from given X509 name" +msgstr "Accepta connexions només d'un cert nom X509" + +msgid "Only process ping timeouts if routes exist" +msgstr "Processa l'excés de temps d'espera de pings remots si la ruta existeix" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "Instàncies OpenVPN" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "Optimitza les escriptures TUN/TAP/UDP" + +msgid "Output to syslog and do not daemonize" +msgstr "Sortida al syslog i no dimonitzis" + +msgid "Overview" +msgstr "Visió de conjunt" + +msgid "PKCS#12 file containing keys" +msgstr "Fitxer PKCS#12 contenidor de claus" + +msgid "Pass environment variables to script" +msgstr "Passa les variables d'ambient a l'script" + +msgid "Persist replay-protection state" +msgstr "Persisteix l'estat de protecció de reproducció" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "Persisteix/deixa de persistir ifconfig-pool" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "Ping remot cada n segons sobre port TCP/UDP" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Protocol" +msgstr "Protocol" + +msgid "Proxy timeout in seconds" +msgstr "Temps d'espera màxim de proxy en segons" + +msgid "Push an ifconfig option to remote" +msgstr "Envia una opció ifconfig al remot" + +msgid "Push options to peer" +msgstr "Envia opcions al peer" + +msgid "Query management channel for private key" +msgstr "Consulta el canal de gestió per una clau privada" + +msgid "Randomly choose remote server" +msgstr "Tria aleatòriament el servidor remot" + +msgid "Refuse connection if no custom client config" +msgstr "Refusa la connexió si no hi ha configuració de client personalitzada" + +msgid "Remap SIGUSR1 signals" +msgstr "Remapeja senyals SIGUSR1" + +msgid "Remote host name or ip address" +msgstr "Nom de màquina remot o adreça IP" + +msgid "Remote ping timeout" +msgstr "Temps d'espera màxim de ping remot" + +msgid "Renegotiate data chan. key after bytes" +msgstr "Renegocia clau de canal de dades després de bytes" + +msgid "Renegotiate data chan. key after packets" +msgstr "Renegocia clau de canal de dades després de paquets" + +msgid "Renegotiate data chan. key after seconds" +msgstr "Renegocia clau de canal de dades després de segons" + +msgid "Replay protection sliding window size" +msgstr "Mida de la finestra lliscant de protecció de reproducció" + +msgid "Require explicit designation on certificate" +msgstr "Requereix una designació explícita al certificat" + +msgid "Require explicit key usage on certificate" +msgstr "Requereix ús de clau explícit al certificat" + +msgid "Restart after remote ping timeout" +msgstr "Reinicia després d'excedir el temps d'espera de ping remot" + +msgid "Retransmit timeout on TLS control channel" +msgstr "Temps d'espera de retransmissió en canal de control TLS" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "Reintenta indefinidament en errors de proxy HTTP" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "Reintenta indefinidament en errors de proxy Socks" + +msgid "Route subnet to client" +msgstr "Enruta subxarxa al client" + +msgid "Run as an inetd or xinetd server" +msgstr "Executa com un servidor inetd o xinetd" + +msgid "Run script cmd on client connection" +msgstr "Executa l'script en connectar-se el client" + +msgid "Run script cmd on client disconnection" +msgstr "Executa l'script en desconnectar-te el client" + +msgid "Run up/down scripts for all restarts" +msgstr "Executa els scripts d'activació/desactivació per tots els reinicis." + +msgid "Send notification to peer on disconnect" +msgstr "Envia notificació al peer en desconnectar-se" + +msgid "Set GID to group" +msgstr "Estableix el GID al grup" + +msgid "Set TCP/UDP MTU" +msgstr "Estableix la MTU de TCP/UDP" + +msgid "Set UID to user" +msgstr "Estableix l'UID per l'usuari" + +msgid "Set aside a pool of subnets" +msgstr "Deixa de banda un conjunt de subxarxes" + +msgid "Set extended HTTP proxy options" +msgstr "Estableix les opcions de proxy HTTP exteses" + +msgid "Set output verbosity" +msgstr "Estableix el detall de sortida" + +msgid "Set size of real and virtual address hash tables" +msgstr "" +"Estableix la mida de les taules de dispersió d'adreces reals i virtuals" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "Estableix la mida de memòria intermèdia de recepció TCP/UDP" + +msgid "Set the TCP/UDP send buffer size" +msgstr "Estableix la mida de memòria intermèdia d'enviament TCP/UDP" + +msgid "Set tun/tap TX queue length" +msgstr "Estableix la mida de cua TX de tun/tap" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "Estableix la MTU del dispositiu tun/tap" + +msgid "Set tun/tap device overhead" +msgstr "Estableix la càrrega (overhead) del dispositiu tun/tap" + +msgid "Set upper bound on TCP MSS" +msgstr "Estableix el límit superior al TCP MSS" + +msgid "Shaping for peer bandwidth" +msgstr "Configuració d'ample de banda d'un peer" + +msgid "Shell cmd to execute after tun device open" +msgstr "Ordre a executar després que s'obri un dispositiu tun" + +msgid "Shell cmd to run after tun device close" +msgstr "Ordre a executar després que es tanqui un dispositiu tun" + +msgid "Shell command to verify X509 name" +msgstr "Ordre de comanda per verificar el nom X509" + +msgid "Silence the output of replay warnings" +msgstr "Silencia la sortida d'alertes de reproducció" + +msgid "Size of cipher key" +msgstr "Mida de la clau de xifratge" + +msgid "Specify a default gateway for routes" +msgstr "Especifica una passarel·la per defecte per rutes" + +msgid "Start OpenVPN in a hibernating state" +msgstr "Inicia l'OpenVPN en un estat d'hivernació" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "Iniciat" + +msgid "Status file format version" +msgstr "Versió de format de fitxer d'estat" + +msgid "Switch to advanced configuration »" +msgstr "Canvia a configuració avançada" + +msgid "TCP/UDP port # for both local and remote" +msgstr "Port TCP/UDP tan per local com per remot" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "Port TCP/UDP per local (defecte=1194)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "Port TCP/UDP per remot (defecte=1194)" + +msgid "TLS cipher" +msgstr "Xifrador TLS" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "Pas TOS (aplica només a IPv4)" + +msgid "Temporary directory for client-connect return file" +msgstr "Directori temporal pel fitxer de retorn per la connexió de client" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "Calendari per intercanvi de claus" + +msgid "Type of used device" +msgstr "Tipus de dispositiu utilitzat" + +msgid "Use fast LZO compression" +msgstr "Utilitza compressió ràpida LZO" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "Utilitza adreces individuals en comptes de subxarxes /30" + +msgid "Use protocol" +msgstr "Utilitza protocol" + +msgid "Use tun/tap device node" +msgstr "Utilitza un node de dispositiu tun/tap" + +msgid "Use username as common name" +msgstr "Utilitza el nom d'usuari com a nom comú" + +msgid "Write log to file" +msgstr "Escriu registre al fitxer" + +msgid "Write process ID to file" +msgstr "Escriu l'ID del procés al fitxer" + +msgid "Write status to file every n seconds" +msgstr "Escriu l'estat al fitxer cada n segons" + +msgid "no" +msgstr "no" + +msgid "tun/tap device" +msgstr "dispositiu tun/tap" + +msgid "tun/tap inactivity timeout" +msgstr "temps d'espera màxim d'inactivitat tun/tap" + +msgid "yes (%i)" +msgstr "sí (%i)" + +msgid "« Switch to basic configuration" +msgstr "Canvia a configuració bàsica" + +#~ msgid "Cryptography" +#~ msgstr "Criptografia" diff --git a/feeds/luci/applications/luci-app-openvpn/po/cs/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/cs/openvpn.po new file mode 100644 index 0000000..c687422 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/cs/openvpn.po @@ -0,0 +1,558 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-12 19:47+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p', nebo 'subnet'" + +msgid "Accept options pushed from server" +msgstr "Přijmout nastavení, přijatá ze serveru" + +msgid "Add" +msgstr "Přidat" + +msgid "Add route after establishing connection" +msgstr "Přidat trasu po navázání spojení" + +msgid "Additional authentication over TLS" +msgstr "Dodatečné ověření přes TLS" + +msgid "Allow client-to-client traffic" +msgstr "Povolit provoz typu klient-klient" + +msgid "Allow multiple clients with same certificate" +msgstr "Povolit více klientů se stejným certifikátem" + +msgid "Allow only one session" +msgstr "Povolit pouze jedno sezení" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "Maximální povolené množství připojených klientů" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "Maximální povolené množství nových připojení" + +msgid "Append log to file" +msgstr "Připojit log do souboru" + +msgid "Authenticate using username/password" +msgstr "Ověřit prostřednictvím uživatelského jména / hesla" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "Certifikační autorita" + +msgid "Change process priority" +msgstr "Změnit prioritu procesu" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "Klient je zakázáný" + +msgid "Configuration category" +msgstr "Konfigurace kategorie" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "Parametry Diffie Hellman" + +msgid "Directory for custom client config files" +msgstr "Adresář s uživatelskými konfiguračními soubory" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "Povolit hardwarovou akceleraci OpenSSL" + +msgid "Enable Path MTU discovery" +msgstr "Povolit Path MTU discovery (PMTUD)" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "Povolit TLS a převzít roli klienta" + +msgid "Enable TLS and assume server role" +msgstr "Povolit TLS a převzít roli serveru" + +msgid "Enable internal datagram fragmentation" +msgstr "Povolit interní fragmentaci datagramů" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "Povoleno" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "Instance \"%s\"" + +msgid "Invalid" +msgstr "Neplatné" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "Lokální certifikát" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "Lokální soukromý klíč" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "OpenVPN instance" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "Přehled" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Protocol" +msgstr "Protokol" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "Spustit skript cmd pro připojení klienta" + +msgid "Run script cmd on client disconnection" +msgstr "Spustit skript cmd pro odpojení klienta" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "Velikost šifrovacího klíče" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "Start/Stop" + +msgid "Started" +msgstr "Spuštěno" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "Přepnout na pokročilou konfiguraci »" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "TLS šifra" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "ne" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "ano (%i)" + +msgid "« Switch to basic configuration" +msgstr "« Přepnout na základní konfiguraci" + +#~ msgid "Cryptography" +#~ msgstr "Šifrování" + +#~ msgid "Service" +#~ msgstr "Služba" + +#~ msgid "VPN" +#~ msgstr "VPN" diff --git a/feeds/luci/applications/luci-app-openvpn/po/de/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/de/openvpn.po new file mode 100644 index 0000000..dc382ee --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/de/openvpn.po @@ -0,0 +1,572 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2013-01-28 22:15+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "Topologietyp" + +msgid "Accept options pushed from server" +msgstr "Vom Server übertragene Optionen lokal akzeptieren" + +msgid "Add" +msgstr "Hinzufügen" + +msgid "Add route after establishing connection" +msgstr "Netzwerkrouten nach Verbindungsaufbau einrichten" + +msgid "Additional authentication over TLS" +msgstr "Erweiterte Authentifikation über TLS" + +msgid "Allow client-to-client traffic" +msgstr "Netzwerkverkehr zwischen Teilnehmern zulassen" + +msgid "Allow multiple clients with same certificate" +msgstr "Mehrere Teilnehmer mit selbem Zertifikat erlauben" + +msgid "Allow only one session" +msgstr "Nur eine einzige Verbindung zulassen" + +msgid "Allow remote to change its IP or port" +msgstr "Address- und Port-Änderungen der Gegenstelle zulassen" + +msgid "Allowed maximum of connected clients" +msgstr "Betriebsmodus" + +msgid "Allowed maximum of internal" +msgstr "Maximal erlaubte Anzahl an Netzwerkrouten pro Teilnehmer" + +msgid "Allowed maximum of new connections" +msgstr "Wiederholrate für Verbindungversuche" + +msgid "Append log to file" +msgstr "An Protokolldatei anfügen" + +msgid "Authenticate using username/password" +msgstr "Authentifikation mittels Benutzername und Passwort" + +msgid "Automatically redirect default route" +msgstr "Automatisch die Standard-Route umleiten" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "Liste der konfigurierten OpenVPN Instanzen und ihr momentaner Status" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" +"Shell-Kommando vor Deaktivierung der TUN/TAP Schnittstelle ausführen" + +msgid "Certificate authority" +msgstr "Zertifikat der Zertifizierungsstelle" + +msgid "Change process priority" +msgstr "Prozess-Priorität anpassen" + +msgid "Change to directory before initialization" +msgstr "Vor der Initialisierung in Verzeichnis wechseln" + +msgid "Check peer certificate against a CRL" +msgstr "Teilnehmerzertifikat mit Sperrliste abgleichen" + +msgid "Chroot to directory after initialization" +msgstr "Nach der Initialisierung in Verzeichnis wechseln" + +msgid "Client is disabled" +msgstr "Teilnehmer-Konto deaktivieren" + +msgid "Configuration category" +msgstr "Kategorie" + +msgid "Configure client mode" +msgstr "Clientmodus" + +msgid "Configure server bridge" +msgstr "Server-zu-Server Netzwerkbrücke" + +msgid "Configure server mode" +msgstr "Server-Modus" + +msgid "Connect through Socks5 proxy" +msgstr "Verbindung über einen Socks 5 - Proxy" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "Verbindung zum entfernten Rechner über HTTP-Proxy aufbauen" + +msgid "Connection retry interval" +msgstr "Wiederholrate für Verbindungversuche" + +msgid "Daemonize after initialization" +msgstr "Nach der Initialisierung als Hintergrundprozess ausführen" + +msgid "Delay n seconds after connection" +msgstr "Nach dem Verbindungsaufbau um n Sekunden verzögern" + +msgid "Delay tun/tap open and up script execution" +msgstr "Shell-Kommando nach Schnittstelleneinrichtung verzögern" + +msgid "Diffie Hellman parameters" +msgstr "Diffie-Hellman-Parameter" + +msgid "Directory for custom client config files" +msgstr "Verzeichnis für eigene Konfigurationsdateien" + +msgid "Disable Paging" +msgstr "Benutzten Arbeitsspeicher sperren" + +msgid "Disable cipher initialisation vector" +msgstr "Initialisierungsvektor für Verschlüsselung deaktivieren" + +msgid "Disable options consistency check" +msgstr "Konsistenzprüfungen für Optionen durchführen" + +msgid "Disable replay protection" +msgstr "\"Replay\"-Schutz deaktivieren" + +msgid "Do not bind to local address and port" +msgstr "An keine spezielle Adresse binden" + +msgid "Don't actually execute ifconfig" +msgstr "Schnittstellenkonfiguration nicht durchführen" + +msgid "Don't add routes automatically" +msgstr "Netzwerkrouten nicht automatisch einrichten" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "Authentifikationsdaten nicht zwischenspeichern" + +msgid "Don't inherit global push options" +msgstr "Nur teilnehmerspezifische Optionen übertragen" + +msgid "Don't log timestamps" +msgstr "Keine Zeitangaben protokollieren" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "Schlüssel bei Neustarts beibehalten" + +msgid "Don't require client certificate" +msgstr "Verbindung ohne Teilnehmerzertifikat erlauben" + +msgid "Don't use adaptive lzo compression" +msgstr "Adaptive LZO-Kompression deaktivieren" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "Keine Warnung bei inkonsistenter Schnittstellenkonfiguration" + +msgid "Echo parameters to log" +msgstr "Parameter in Protokolldatei speichern" + +msgid "Empirically measure MTU" +msgstr "MTU regelmäßig testen" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "OpenSSL-Unterstützung für Kryptographie-Hardware benutzen" + +msgid "Enable Path MTU discovery" +msgstr "MTU-Erkennung aktivieren" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "Verschlüsselung mittels statischer Schlüssel (kein TLS)" + +msgid "Enable TLS and assume client role" +msgstr "TLS im Client-Betriebsmodus aktivieren" + +msgid "Enable TLS and assume server role" +msgstr "TLS im Server-Betriebsmodus aktivieren" + +msgid "Enable internal datagram fragmentation" +msgstr "Datenpakete bei Bedarf fragmentieren" + +msgid "Enable management interface on IP port" +msgstr "Administratorschnittstelle aktivieren" + +msgid "Enabled" +msgstr "Einschalten" + +msgid "Encryption cipher for packets" +msgstr "Verschlüsselungsalgorithmus für Pakete" + +msgid "Execute shell cmd after routes are added" +msgstr "Shell-Befehl nach Routen-Einrichtung ausführen" + +msgid "Execute shell command on remote ip change" +msgstr "Programm bei Adressänderung der Gegenstelle aufrufen" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" +"Wird bei neuen Client-Verbindungen im Servermodus ausgeführt, wenn dem " +"Clienten noch nicht vertraut wird" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" +"Wird im Servermodus ausgeführt, wann immer eine IPv4-Adresse/Route oder MAC-" +"Adresse zur internen Routingtabelle von OpenVPN hinzugefügt wird" + +msgid "Exit on TLS negotiation failure" +msgstr "Terminieren nach fehlgeschlagenem Schlüsselaustausch" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "PEM-Passwort von Konsole abfragen" + +msgid "HMAC authentication for packets" +msgstr "HMAC-Authentifizierung für Pakete" + +msgid "Handling of authentication failures" +msgstr "Behandlung von Authentifikationsfehlern" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" +"Helfer-Direktive, um den Ausdruck von --ping und --ping-restart in " +"Servermodus-Konfigurationen zu vereinfachen" + +msgid "If hostname resolve fails, retry" +msgstr "Neuer Verbindungsversuch wenn Namensauflösung fehlschlägt" + +msgid "Instance \"%s\"" +msgstr "Instanz \"%s\"" + +msgid "Invalid" +msgstr "Ungültig" + +msgid "Keep local IP address on restart" +msgstr "Lokale IP-Adresse bei Neustarts beibehalten" + +msgid "Keep remote IP address on restart" +msgstr "IP-Adresse der Gegenstelle bei Neustarts beibehalten" + +msgid "Keep tun/tap device open on restart" +msgstr "TUN/TAP Schnittelle bei Neustarts offen halten" + +msgid "Key transition window" +msgstr "Maximaler Zeitraum für Schlüsselwechsel" + +msgid "Limit repeated log messages" +msgstr "Wiederholende Protokollmeldungen unterdrücken" + +msgid "Local certificate" +msgstr "Lokales Zertifikat" + +msgid "Local host name or ip address" +msgstr "Lokaler Rechnername oder IP Adresse" + +msgid "Local private key" +msgstr "Lokaler privater Schlüssel" + +msgid "Major mode" +msgstr "Betriebsmodus" + +msgid "Make tun device IPv6 capable" +msgstr "IPv6 auf TUN Schnittstellen aktivieren" + +msgid "Maximum number of queued TCP output packets" +msgstr "Maximale Anzahl an TCP-Paketen in der Warteschlange" + +msgid "Number of allocated broadcast buffers" +msgstr "Anzahl der benutzten Broadcast-Puffer" + +msgid "Number of lines for log file history" +msgstr "Anzahl der Zeilen im Protokoll-Zwischenspeicher" + +msgid "Only accept connections from given X509 name" +msgstr "Nur Verbindungen vom angegebenem X.509 Name zulassen" + +msgid "Only process ping timeouts if routes exist" +msgstr "Ping-Timeouts nur bei vorhandenen Routen auslösen" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "OpenVPN Instanzen" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "TUN-, TAP- und UDP-Schreibvorgänge optimieren" + +msgid "Output to syslog and do not daemonize" +msgstr "Ausgaben ins Systemprotokoll umleiten und im Vordergrund ausführen" + +msgid "Overview" +msgstr "Übersicht" + +msgid "PKCS#12 file containing keys" +msgstr "PKCS#12 Schlüsselarchiv" + +msgid "Pass environment variables to script" +msgstr "Umgebungsvariablen für Shell-Befehle" + +msgid "Persist replay-protection state" +msgstr "Persistenter Status für \"Replay\"-Schutz" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "Persistenten IP-Adressbereich nutzen" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "Ping-Intervall für Gegenstellen" + +msgid "Policy level over usage of external programs and scripts" +msgstr "Policy-Ebene über Nutzung von externen Programmen und Skripten" + +msgid "Port" +msgstr "Netzwerkport" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Proxy timeout in seconds" +msgstr "Maximaler Timeout für Proxy-Verbindungen" + +msgid "Push an ifconfig option to remote" +msgstr "IP-Adresskonfiguration an Teilnehmer übertragen" + +msgid "Push options to peer" +msgstr "Optionen an Teilnehmer übertragen" + +msgid "Query management channel for private key" +msgstr "Privaten Schlüssel über Management-Kanal abfragen" + +msgid "Randomly choose remote server" +msgstr "Entfernten Server zufällig wählen" + +msgid "Refuse connection if no custom client config" +msgstr "Teilnehmer-Verbindung verweigern wenn Teilnehmer-Konfiguration fehlt" + +msgid "Remap SIGUSR1 signals" +msgstr "\"USR1\" Systemsignal umleiten" + +msgid "Remote host name or ip address" +msgstr "Entfernter Rechnername oder IP-Adresse" + +msgid "Remote ping timeout" +msgstr "Ping-Timeout für Gegenstellen" + +msgid "Renegotiate data chan. key after bytes" +msgstr "Schlüssel nach maximale Verkehrsmenge neu aushandeln" + +msgid "Renegotiate data chan. key after packets" +msgstr "Schlüssel nach maximaler Anzahl von Paketen neu aushandeln" + +msgid "Renegotiate data chan. key after seconds" +msgstr "Schlüssel nach maximaler Verbindungsdauer neu aushandeln" + +msgid "Replay protection sliding window size" +msgstr "Fenstergröße für \"Replay\"-Schutz" + +msgid "Require explicit designation on certificate" +msgstr "Verwendungszweck von Zertifikaten überprüfen" + +msgid "Require explicit key usage on certificate" +msgstr "Zertifikat explizit auf einfachen Verwendungszweck prüfen" + +msgid "Restart after remote ping timeout" +msgstr "Neu Starten nach Ping-Timeout an Gegenstellen" + +msgid "Retransmit timeout on TLS control channel" +msgstr "TLS Timeout" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "Neue Verbindung bei Proxy-Fehlern aufbauen" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "Neue Verbindung bei Proxy-Fehlern aufbauen" + +msgid "Route subnet to client" +msgstr "Subnetz an Teilnehmer routen" + +msgid "Run as an inetd or xinetd server" +msgstr "Als inetd oder xinetd Server laufen" + +msgid "Run script cmd on client connection" +msgstr "Shell-Kommando bei neuer Teilnehmer-Verbindung ausführen" + +msgid "Run script cmd on client disconnection" +msgstr "Shell-Kommando beim Trennen von Teilnehmer-Verbindungen ausführen" + +msgid "Run up/down scripts for all restarts" +msgstr "Shell-Kommandos bei jedem Neustart ausführen" + +msgid "Send notification to peer on disconnect" +msgstr "Teilnehmer über Verbindungstrennung informieren" + +msgid "Set GID to group" +msgstr "Dienst mit Benutzergruppe laufen lassen" + +msgid "Set TCP/UDP MTU" +msgstr "MTU für TCP/UDP Protokoll festlegen" + +msgid "Set UID to user" +msgstr "Dienst als Benutzer laufen lassen" + +msgid "Set aside a pool of subnets" +msgstr "IP-Adressbereich für zu vergebende Subnetze" + +msgid "Set extended HTTP proxy options" +msgstr "Erweiterte HTTP-Proxy Einstellungen vornehmen" + +msgid "Set output verbosity" +msgstr "Detailstufe für Protokolle" + +msgid "Set size of real and virtual address hash tables" +msgstr "Größe für interne Adresstabellen" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "Größe des TCP/UDP Empfangs-Puffers" + +msgid "Set the TCP/UDP send buffer size" +msgstr "Größe des TCP/UDP Sende-Puffers" + +msgid "Set tun/tap TX queue length" +msgstr "Größe der Sende-Warteschlange" + +msgid "Set tun/tap adapter parameters" +msgstr "Tun/Tap parameter einstellen" + +msgid "Set tun/tap device MTU" +msgstr "MTU für TUN/TAP Schnittstelle festlegen" + +msgid "Set tun/tap device overhead" +msgstr "Overhead für TUN/TAP Schnittstelle festlegen" + +msgid "Set upper bound on TCP MSS" +msgstr "Maximale TCP-MSS erzwingen" + +msgid "Shaping for peer bandwidth" +msgstr "Verbindungsrate von Gegenstellen limitieren" + +msgid "Shell cmd to execute after tun device open" +msgstr "Shell-Kommando nach Einrichtung von TUN/TAP Schnittstelle ausführen" + +msgid "Shell cmd to run after tun device close" +msgstr "" +"Shell-Kommando nach Deaktivierung der TUN/TAP Schnittstelle " +"ausführen" + +msgid "Shell command to verify X509 name" +msgstr "Shell-Kommando zum Überprüfen das X.509 Namens" + +msgid "Silence the output of replay warnings" +msgstr "\"Replay\"-Warnungen unterdrücken" + +msgid "Size of cipher key" +msgstr "Größe des Schlüssels" + +msgid "Specify a default gateway for routes" +msgstr "Standard-Gateway für Netzwerkrouten" + +msgid "Start OpenVPN in a hibernating state" +msgstr "OpenVPN im Schlafmodus starten" + +msgid "Start/Stop" +msgstr "Start/Stopp" + +msgid "Started" +msgstr "Gestartet" + +msgid "Status file format version" +msgstr "Format für Status-Datei" + +msgid "Switch to advanced configuration »" +msgstr "Erweiterte Einstellungen" + +msgid "TCP/UDP port # for both local and remote" +msgstr "Benutzter TCP oder UDP Port" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "Lokaler TCP oder UDP Port" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "TCP oder UDP Port der Gegenstelle" + +msgid "TLS cipher" +msgstr "TLS Verschlüsselungsalgorithmus" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "\"TOS\" Durchleitung (nur für IPv4)" + +msgid "Temporary directory for client-connect return file" +msgstr "Temporäres Verzeichnis für Teilnehmer-Verbindungen" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "Maximaler Zeitraum für Schlüsselaustausch" + +msgid "Type of used device" +msgstr "Schnittstellentyp" + +msgid "Use fast LZO compression" +msgstr "Schnelle LZO-Kompression benutzen" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "Einzeladressen statt /30 Subnetze vergeben" + +msgid "Use protocol" +msgstr "Netzwerkprotokoll" + +msgid "Use tun/tap device node" +msgstr "TUN/TAP Gerätedatei" + +msgid "Use username as common name" +msgstr "Benutzernamen als Common-Name benutzen" + +msgid "Write log to file" +msgstr "In Protokolldatei schreiben" + +msgid "Write process ID to file" +msgstr "Prozess-Nummer in Datei schreiben" + +msgid "Write status to file every n seconds" +msgstr "Status-Datei schreiben" + +msgid "no" +msgstr "Nicht gestartet" + +msgid "tun/tap device" +msgstr "TUN/TAP Schnittstelle" + +msgid "tun/tap inactivity timeout" +msgstr "Inaktivitäts-Timeout für TUN/TAP Schnittstellen" + +msgid "yes (%i)" +msgstr "Gestartet (%s)" + +msgid "« Switch to basic configuration" +msgstr "« Zur vereinfachten Konfiguration wechseln" + +#~ msgid "Cryptography" +#~ msgstr "Kryptographie" + +#~ msgid "Networking" +#~ msgstr "Netzwerk" + +#~ msgid "Service" +#~ msgstr "Dienst" + +#~ msgid "VPN" +#~ msgstr "VPN" diff --git a/feeds/luci/applications/luci-app-openvpn/po/el/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/el/openvpn.po new file mode 100644 index 0000000..2c787d8 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/el/openvpn.po @@ -0,0 +1,569 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-28 02:08+0200\n" +"PO-Revision-Date: 2012-03-18 15:23+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "Προσθήκη" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "" + +msgid "Allow multiple clients with same certificate" +msgstr "" + +msgid "Allow only one session" +msgstr "" + +msgid "Allow remote to change its IP or port" +msgstr "Επιτρέπουμε στον απομακρυσμένο να αλλάξει την IP ή τη θύρα" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" +"Παρακάτω είναι μία λίστα των ρυθμισμένων περιστατικών OpenVPN και της " +"τρέχουσας κατάστασής τους" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "Σύνδεση μέσω διαμεσολαβητή Socks5" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "Διάστημα επαναπροσπάθειας σύνδεσης" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "Μη συνδέσεις σε τοπική διεύθυνση και θύρα" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "Ενεργοποιημένο" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "Εκτέλεση της εντολής κελύφους στην αλλαγή IP του απομακρυσμένου" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" +"Αν αποτύχει η μετατροπή του ονόματος του μηχανήματος σε IP, ξαναπροσπάθησε" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "Όνομα τοπικού μηχανήματος ή διεύθυνση IP" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "Διεργασίες OpenVPN" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "Θύρα" + +msgid "Protocol" +msgstr "Πρωτόκολλο" + +msgid "Proxy timeout in seconds" +msgstr "Τέλος χρόνου μεσολαβητή σε δευτερόλεπτα" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "Τυχαία επιλογή απομακρυσμένου διακομιστή" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "Όνομα απομακρυσμένου μηχανήματος ή διεύθυνση IP" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "Επαναπροσπάθεια για πάντα αν υπάρχουν λάθη HTTP στο μεσολαβητή" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "Επαναπροσπάθεια για πάντα σε περίπτωση λαθών στο διαμεσολαβητή Socks5" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "Ορισμός εκτεταμένων ρυθμίσεων διαμεσολαβητή HTTP" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "Εκκίνηση/Τερματισμός" + +msgid "Started" +msgstr "Ξεκίνησε" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "Μετάβαση στις προχωρημένες ρυθμίσεις »" + +msgid "TCP/UDP port # for both local and remote" +msgstr "TCP/UDP νούμερο θύρας για το τοπικό και το απομακρυσμένο" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "TCP/UDP αριθμός θύρας για το τοπικό (εξ'ορισμού=1194)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "TCP/UDP αριθμός θύρας για τον απομακρυσμένο (εξ'ορισμού=1194)" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "Είδος χρησιμοποιούμενης συσκευής" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "όχι" + +msgid "tun/tap device" +msgstr "Συσκευή tun/tap" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "ναι (%i)" + +msgid "« Switch to basic configuration" +msgstr "« Μετάβαση στις βασικές επιλογές" + +#~ msgid "Cryptography" +#~ msgstr "Κρυπτογραφία" + +#~ msgid "Service" +#~ msgstr "Υπηρεσία" + +#~ msgid "VPN" +#~ msgstr "VPN" + +#~ msgid "openvpn_%s" +#~ msgstr "openvpn_%s" + +#~ msgid "openvpn_%s_desc" +#~ msgstr "openvpn_%s_desc" diff --git a/feeds/luci/applications/luci-app-openvpn/po/en/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/en/openvpn.po new file mode 100644 index 0000000..a5994dc --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/en/openvpn.po @@ -0,0 +1,552 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:35+0200\n" +"PO-Revision-Date: 2012-04-03 08:45+0200\n" +"Last-Translator: juhosg \n" +"Language-Team: LANGUAGE \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p', or 'subnet'" + +msgid "Accept options pushed from server" +msgstr "Accept options pushed from server" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "Add route after establishing connection" + +msgid "Additional authentication over TLS" +msgstr "Additional authentication over TLS" + +msgid "Allow client-to-client traffic" +msgstr "Allow client-to-client traffic" + +msgid "Allow multiple clients with same certificate" +msgstr "Allow multiple clients with same certificate" + +msgid "Allow only one session" +msgstr "Allow only one session" + +msgid "Allow remote to change its IP or port" +msgstr "Allow remote to change its IP or port" + +msgid "Allowed maximum of connected clients" +msgstr "Allowed maximum of connected clients" + +msgid "Allowed maximum of internal" +msgstr "Allowed maximum of internal" + +msgid "Allowed maximum of new connections" +msgstr "Allowed maximum of new connections" + +msgid "Append log to file" +msgstr "Append log to file" + +msgid "Authenticate using username/password" +msgstr "Authenticate using username/password" + +msgid "Automatically redirect default route" +msgstr "Automatically redirect default route" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" +"Below is a list of configured OpenVPN instances and their current state" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "Call down cmd/script before TUN/TAP close" + +msgid "Certificate authority" +msgstr "Certificate authority" + +msgid "Change process priority" +msgstr "Change process priority" + +msgid "Change to directory before initialization" +msgstr "Change to directory before initialization" + +msgid "Check peer certificate against a CRL" +msgstr "Check peer certificate against a CRL" + +msgid "Chroot to directory after initialization" +msgstr "Chroot to directory after initialization" + +msgid "Client is disabled" +msgstr "Client is disabled" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "Configure client mode" + +msgid "Configure server bridge" +msgstr "Configure server bridge" + +msgid "Configure server mode" +msgstr "Configure server mode" + +msgid "Connect through Socks5 proxy" +msgstr "Connect through Socks5 proxy" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "Connection retry interval" + +msgid "Daemonize after initialization" +msgstr "Daemonize after initialization" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "Delay tun/tap open and up script execution" + +msgid "Diffie Hellman parameters" +msgstr "Diffie Hellman parameters" + +msgid "Directory for custom client config files" +msgstr "Directory for custom client config files" + +msgid "Disable Paging" +msgstr "Disable Paging" + +msgid "Disable cipher initialisation vector" +msgstr "Disable cipher initialisation vector" + +msgid "Disable options consistency check" +msgstr "Disable options consistency check" + +msgid "Disable replay protection" +msgstr "Disable replay protection" + +msgid "Do not bind to local address and port" +msgstr "Do not bind to local address and port" + +msgid "Don't actually execute ifconfig" +msgstr "Don't actually execute ifconfig" + +msgid "Don't add routes automatically" +msgstr "Don't add routes automatically" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "Don't cache --askpass or --auth-user-pass passwords" + +msgid "Don't inherit global push options" +msgstr "Don't inherit global push options" + +msgid "Don't log timestamps" +msgstr "Don't log timestamps" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "Don't re-read key on restart" + +msgid "Don't require client certificate" +msgstr "Don't require client certificate" + +msgid "Don't use adaptive lzo compression" +msgstr "Don't use adaptive lzo compression" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "Don't warn on ifconfig inconsistencies" + +msgid "Echo parameters to log" +msgstr "Echo parameters to log" + +msgid "Empirically measure MTU" +msgstr "Empirically measure MTU" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "Enable OpenSSL hardware crypto engines" + +msgid "Enable Path MTU discovery" +msgstr "Enable Path MTU discovery" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "Enable Static Key encryption mode (non-TLS)" + +msgid "Enable TLS and assume client role" +msgstr "Enable TLS and assume client role" + +msgid "Enable TLS and assume server role" +msgstr "Enable TLS and assume server role" + +msgid "Enable internal datagram fragmentation" +msgstr "Enable internal datagram fragmentation" + +msgid "Enable management interface on IP port" +msgstr "Enable management interface on IP port" + +msgid "Enabled" +msgstr "Enabled" + +msgid "Encryption cipher for packets" +msgstr "Encryption cipher for packets" + +msgid "Execute shell cmd after routes are added" +msgstr "Execute shell cmd after routes are added" + +msgid "Execute shell command on remote ip change" +msgstr "Execute shell command on remote ip change" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "Exit on TLS negotiation failure" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "Get PEM password from controlling tty before we daemonize" + +msgid "HMAC authentication for packets" +msgstr "HMAC authentication for packets" + +msgid "Handling of authentication failures" +msgstr "Handling of authentication failures" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "If hostname resolve fails, retry" + +msgid "Instance \"%s\"" +msgstr "Instance \"%s\"" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "Keep local IP address on restart" + +msgid "Keep remote IP address on restart" +msgstr "Keep remote IP address on restart" + +msgid "Keep tun/tap device open on restart" +msgstr "Keep tun/tap device open on restart" + +msgid "Key transition window" +msgstr "Key transition window" + +msgid "Limit repeated log messages" +msgstr "Limit repeated log messages" + +msgid "Local certificate" +msgstr "Local certificate" + +msgid "Local host name or ip address" +msgstr "Local host name or ip address" + +msgid "Local private key" +msgstr "Local private key" + +msgid "Major mode" +msgstr "Major mode" + +msgid "Make tun device IPv6 capable" +msgstr "Make tun device IPv6 capable" + +msgid "Maximum number of queued TCP output packets" +msgstr "Maximum number of queued TCP output packets" + +msgid "Number of allocated broadcast buffers" +msgstr "Number of allocated broadcast buffers" + +msgid "Number of lines for log file history" +msgstr "Number of lines for log file history" + +msgid "Only accept connections from given X509 name" +msgstr "Only accept connections from given X509 name" + +msgid "Only process ping timeouts if routes exist" +msgstr "Only process ping timeouts if routes exist" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "OpenVPN instances" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "Optimize TUN/TAP/UDP writes" + +msgid "Output to syslog and do not daemonize" +msgstr "Output to syslog and do not daemonize" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "PKCS#12 file containing keys" + +msgid "Pass environment variables to script" +msgstr "Pass environment variables to script" + +msgid "Persist replay-protection state" +msgstr "Persist replay-protection state" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "Persist/unpersist ifconfig-pool" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "Ping remote every n seconds over TCP/UDP port" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Protocol" +msgstr "Protocol" + +msgid "Proxy timeout in seconds" +msgstr "Proxy timeout in seconds" + +msgid "Push an ifconfig option to remote" +msgstr "Push an ifconfig option to remote" + +msgid "Push options to peer" +msgstr "Push options to peer" + +msgid "Query management channel for private key" +msgstr "Query management channel for private key" + +msgid "Randomly choose remote server" +msgstr "Randomly choose remote server" + +msgid "Refuse connection if no custom client config" +msgstr "Refuse connection if no custom client config" + +msgid "Remap SIGUSR1 signals" +msgstr "Remap SIGUSR1 signals" + +msgid "Remote host name or ip address" +msgstr "Remote host name or ip address" + +msgid "Remote ping timeout" +msgstr "Remote ping timeout" + +msgid "Renegotiate data chan. key after bytes" +msgstr "Renegotiate data chan. key after bytes" + +msgid "Renegotiate data chan. key after packets" +msgstr "Renegotiate data chan. key after packets" + +msgid "Renegotiate data chan. key after seconds" +msgstr "Renegotiate data chan. key after seconds" + +msgid "Replay protection sliding window size" +msgstr "Replay protection sliding window size" + +msgid "Require explicit designation on certificate" +msgstr "Require explicit designation on certificate" + +msgid "Require explicit key usage on certificate" +msgstr "Require explicit key usage on certificate" + +msgid "Restart after remote ping timeout" +msgstr "Restart after remote ping timeout" + +msgid "Retransmit timeout on TLS control channel" +msgstr "Retransmit timeout on TLS control channel" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "Retry indefinitely on HTTP proxy errors" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "Retry indefinitely on Socks proxy errors" + +msgid "Route subnet to client" +msgstr "Route subnet to client" + +msgid "Run as an inetd or xinetd server" +msgstr "Run as an inetd or xinetd server" + +msgid "Run script cmd on client connection" +msgstr "Run script cmd on client connection" + +msgid "Run script cmd on client disconnection" +msgstr "Run script cmd on client disconnection" + +msgid "Run up/down scripts for all restarts" +msgstr "Run up/down scripts for all restarts" + +msgid "Send notification to peer on disconnect" +msgstr "Send notification to peer on disconnect" + +msgid "Set GID to group" +msgstr "Set GID to group" + +msgid "Set TCP/UDP MTU" +msgstr "Set TCP/UDP MTU" + +msgid "Set UID to user" +msgstr "Set UID to user" + +msgid "Set aside a pool of subnets" +msgstr "Set aside a pool of subnets" + +msgid "Set extended HTTP proxy options" +msgstr "Set extended HTTP proxy options" + +msgid "Set output verbosity" +msgstr "Set output verbosity" + +msgid "Set size of real and virtual address hash tables" +msgstr "Set size of real and virtual address hash tables" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "Set the TCP/UDP receive buffer size" + +msgid "Set the TCP/UDP send buffer size" +msgstr "Set the TCP/UDP send buffer size" + +msgid "Set tun/tap TX queue length" +msgstr "Set tun/tap TX queue length" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "Set tun/tap device MTU" + +msgid "Set tun/tap device overhead" +msgstr "Set tun/tap device overhead" + +msgid "Set upper bound on TCP MSS" +msgstr "Set upper bound on TCP MSS" + +msgid "Shaping for peer bandwidth" +msgstr "Shaping for peer bandwidth" + +msgid "Shell cmd to execute after tun device open" +msgstr "Shell cmd to execute after tun device open" + +msgid "Shell cmd to run after tun device close" +msgstr "Shell cmd to run after tun device close" + +msgid "Shell command to verify X509 name" +msgstr "Shell command to verify X509 name" + +msgid "Silence the output of replay warnings" +msgstr "Silence the output of replay warnings" + +msgid "Size of cipher key" +msgstr "Size of cipher key" + +msgid "Specify a default gateway for routes" +msgstr "Specify a default gateway for routes" + +msgid "Start OpenVPN in a hibernating state" +msgstr "Start OpenVPN in a hibernating state" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "Started" + +msgid "Status file format version" +msgstr "Status file format version" + +msgid "Switch to advanced configuration »" +msgstr "Switch to advanced configuration »" + +msgid "TCP/UDP port # for both local and remote" +msgstr "TCP/UDP port # for both local and remote" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "TCP/UDP port # for local (default=1194)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "TCP/UDP port # for remote (default=1194)" + +msgid "TLS cipher" +msgstr "TLS cipher" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "TOS passthrough (applies to IPv4 only)" + +msgid "Temporary directory for client-connect return file" +msgstr "Temporary directory for client-connect return file" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "Timeframe for key exchange" + +msgid "Type of used device" +msgstr "Type of used device" + +msgid "Use fast LZO compression" +msgstr "Use fast LZO compression" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "Use individual addresses rather than /30 subnets" + +msgid "Use protocol" +msgstr "Use protocol" + +msgid "Use tun/tap device node" +msgstr "Use tun/tap device node" + +msgid "Use username as common name" +msgstr "Use username as common name" + +msgid "Write log to file" +msgstr "Write log to file" + +msgid "Write process ID to file" +msgstr "Write process ID to file" + +msgid "Write status to file every n seconds" +msgstr "Write status to file every n seconds" + +msgid "no" +msgstr "no" + +msgid "tun/tap device" +msgstr "tun/tap device" + +msgid "tun/tap inactivity timeout" +msgstr "tun/tap inactivity timeout" + +msgid "yes (%i)" +msgstr "yes (%i)" + +msgid "« Switch to basic configuration" +msgstr "« Switch to basic configuration" diff --git a/feeds/luci/applications/luci-app-openvpn/po/es/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/es/openvpn.po new file mode 100644 index 0000000..a514183 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/es/openvpn.po @@ -0,0 +1,571 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2013-09-01 09:09+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p', o 'subnet'" + +msgid "Accept options pushed from server" +msgstr "Aceptar opciones envidadas desde el servidor" + +msgid "Add" +msgstr "Añadir" + +msgid "Add route after establishing connection" +msgstr "Añadir la ruta tras establecer la conexión" + +msgid "Additional authentication over TLS" +msgstr "Autentificación adicional con TLS" + +msgid "Allow client-to-client traffic" +msgstr "Permitir el tráfico cliente-a-cliente" + +msgid "Allow multiple clients with same certificate" +msgstr "Permitir múltiples clientes con el mismo certificado" + +msgid "Allow only one session" +msgstr "Permitir sólo una sesión" + +msgid "Allow remote to change its IP or port" +msgstr "Permitir al conectado cambiar su IP o puerto" + +msgid "Allowed maximum of connected clients" +msgstr "Máximo de clientes conectados" + +msgid "Allowed maximum of internal" +msgstr "Máximo de internos" + +msgid "Allowed maximum of new connections" +msgstr "Máximo de nuevas conexiones" + +msgid "Append log to file" +msgstr "Unir registro al archivo" + +msgid "Authenticate using username/password" +msgstr "Autentificar con nombre usuario y contraseña" + +msgid "Automatically redirect default route" +msgstr "Redirigir automáticamente la ruta por defecto" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "Instancias OpenVPN configuradas y estado actual" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "Comando/script a llamar al cerrar el dispositivo TUn/TAP" + +msgid "Certificate authority" +msgstr "Autoridad certificativa" + +msgid "Change process priority" +msgstr "Cambiar la prioridad del proceso" + +msgid "Change to directory before initialization" +msgstr "Cambiar a este directorio antes de inicializar" + +msgid "Check peer certificate against a CRL" +msgstr "Comprobar certificados contra un CRL" + +msgid "Chroot to directory after initialization" +msgstr "Restringir a este directorio tras inicializar" + +msgid "Client is disabled" +msgstr "Cliente desactivado" + +msgid "Configuration category" +msgstr "Categoría de configuración" + +msgid "Configure client mode" +msgstr "Configurar el modo cliente" + +msgid "Configure server bridge" +msgstr "Configurar el puente servidor" + +msgid "Configure server mode" +msgstr "Configurar el modo servidor" + +msgid "Connect through Socks5 proxy" +msgstr "Conectar por un proxy Socks5" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "Conectar a la máquina remota usando un proxy HTTP" + +msgid "Connection retry interval" +msgstr "Intervalo de reconexión" + +msgid "Daemonize after initialization" +msgstr "Demonizar tras inicialización" + +msgid "Delay n seconds after connection" +msgstr "Espera tras conexión (segundos)" + +msgid "Delay tun/tap open and up script execution" +msgstr "Espera para la apertura TUN/TAP y ejecución del script de arranque" + +msgid "Diffie Hellman parameters" +msgstr "Parámetros Diffie-Hellman" + +msgid "Directory for custom client config files" +msgstr "Directorio de configuraciones personalizadas" + +msgid "Disable Paging" +msgstr "Desactivar paginación" + +msgid "Disable cipher initialisation vector" +msgstr "Desactivar vector de inicialización de cifrado" + +msgid "Disable options consistency check" +msgstr "Desactivar comprobación de consistencia de opciones" + +msgid "Disable replay protection" +msgstr "Desactivar la protección contra reproducción" + +msgid "Do not bind to local address and port" +msgstr "No asociar a un puerto y dirección locales" + +msgid "Don't actually execute ifconfig" +msgstr "No ejecutar ifconfig" + +msgid "Don't add routes automatically" +msgstr "No añadir rutas automáticamente" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "No guardar las contraseñas --askpass o --auth-user-pass" + +msgid "Don't inherit global push options" +msgstr "No heredar opciones push globales" + +msgid "Don't log timestamps" +msgstr "No guardar en registro horas" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "No releer la clave al rearrancar" + +msgid "Don't require client certificate" +msgstr "No es necesario certificado cliente" + +msgid "Don't use adaptive lzo compression" +msgstr "No usar compresión adaptativa LZO" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "No avisar de inconsistencias en ifconfig" + +msgid "Echo parameters to log" +msgstr "Guardar parámetros en el registro" + +msgid "Empirically measure MTU" +msgstr "Medir MTU empíricamente" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "Motor criptográfico por hardware OpenSSL" + +msgid "Enable Path MTU discovery" +msgstr "Detección de MTU" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "Modo de encriptado de clave estática (no-TLS)" + +msgid "Enable TLS and assume client role" +msgstr "Activar TLS y asumir el papel de cliente" + +msgid "Enable TLS and assume server role" +msgstr "Activar TLS y asumir el papel de servidor" + +msgid "Enable internal datagram fragmentation" +msgstr "Fragmentación de datagramas interna" + +msgid "Enable management interface on IP port" +msgstr "Interfaz de gestión en IP puerto" + +msgid "Enabled" +msgstr "Activado" + +msgid "Encryption cipher for packets" +msgstr "Cifra de encriptación de paquetes" + +msgid "Execute shell cmd after routes are added" +msgstr "Comandos a ejecutar tras añadir rutas" + +msgid "Execute shell command on remote ip change" +msgstr "Comando a ejecutar si se cambia la IP remota" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" +"Ejecutado en modo servidor en nuevas conexiones de clientes, cuando no se " +"confía aún en el cliente" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" +"Ejecutado en modo servidor cuando una ruta, dirección IPv4 o dirección MAC " +"se añade a la tabla de rutas interna de OpenVPN" + +msgid "Exit on TLS negotiation failure" +msgstr "Salir si falla la negociación" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "Obtener la clave PEM del tty de control antes de demonizar" + +msgid "HMAC authentication for packets" +msgstr "Autentificación HMAC de paquetes" + +msgid "Handling of authentication failures" +msgstr "Gestión de fallos de autentificación" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" +"Directriz para simplificar la expresión de --ping y --ping-restart en " +"configuraciones en modo servido" + +msgid "If hostname resolve fails, retry" +msgstr "Reintentar si falla la resolución de nombre de máquina" + +msgid "Instance \"%s\"" +msgstr "Instancia \"%s\"" + +msgid "Invalid" +msgstr "No válido" + +msgid "Keep local IP address on restart" +msgstr "Mantener la dirección IP local al rearrancar" + +msgid "Keep remote IP address on restart" +msgstr "Mantener la dirección IP remota al rearrancar" + +msgid "Keep tun/tap device open on restart" +msgstr "Mantener el dispositivo TUN/TAP abierto al rearrancar" + +msgid "Key transition window" +msgstr "Ventana de transición de clave" + +msgid "Limit repeated log messages" +msgstr "Limitar mensajes repetidos al registro" + +msgid "Local certificate" +msgstr "Certificado local" + +msgid "Local host name or ip address" +msgstr "Nombre de máquina local o dirección IP" + +msgid "Local private key" +msgstr "Clave privada local" + +msgid "Major mode" +msgstr "Modo principal" + +msgid "Make tun device IPv6 capable" +msgstr "Habilitar IPv6 en dispositivo TUN" + +msgid "Maximum number of queued TCP output packets" +msgstr "Paquetes máximos en la cola de salida TCP" + +msgid "Number of allocated broadcast buffers" +msgstr "Número de buffers de propagación" + +msgid "Number of lines for log file history" +msgstr "Líneas en el archivo de registro histórico" + +msgid "Only accept connections from given X509 name" +msgstr "Aceptar solo conexiones desde este nombre X509" + +msgid "Only process ping timeouts if routes exist" +msgstr "Procesa solo las esperas a ping si existe la ruta" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "Instancias OpenVPN" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "Optimizar escrituras TUN/TAP/UDP" + +msgid "Output to syslog and do not daemonize" +msgstr "Escribir en SysLog y no demonizar" + +msgid "Overview" +msgstr "Resumen" + +msgid "PKCS#12 file containing keys" +msgstr "Archivo PKCS#12 de claves" + +msgid "Pass environment variables to script" +msgstr "Pasar variables de entorno al script" + +msgid "Persist replay-protection state" +msgstr "Estado continuo de protección antireproducción" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "Mantener/no mantener el listado de interfaces" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "Ping al remoto cada n segundos sobre un puerto TCP/UDP" + +msgid "Policy level over usage of external programs and scripts" +msgstr "Política sobre el uso de programas externos y scripts" + +msgid "Port" +msgstr "Puerto" + +msgid "Protocol" +msgstr "Protocolo" + +msgid "Proxy timeout in seconds" +msgstr "Espera del proxy en segundos" + +msgid "Push an ifconfig option to remote" +msgstr "Enviar un opción de ifconfig al puesto remoto" + +msgid "Push options to peer" +msgstr "Enviar opciones al otro" + +msgid "Query management channel for private key" +msgstr "Consulta el canal de gestión por la clave privada" + +msgid "Randomly choose remote server" +msgstr "Elegir aleatoriamente un servidor remoto" + +msgid "Refuse connection if no custom client config" +msgstr "" +"Rechazar conexión si no tiene una configuración de cliente personalizada" + +msgid "Remap SIGUSR1 signals" +msgstr "Redirigir señales SIGUSR1" + +msgid "Remote host name or ip address" +msgstr "Nombre de máquina remota o dirección IP" + +msgid "Remote ping timeout" +msgstr "Espera a ping remoto" + +msgid "Renegotiate data chan. key after bytes" +msgstr "Bytes tras los que renegociar la clave del canal del datos" + +msgid "Renegotiate data chan. key after packets" +msgstr "Paquetes tras los que renegociar la clave del canal del datos" + +msgid "Renegotiate data chan. key after seconds" +msgstr "Segundos tras los que renegociar la clave del canal del datos" + +msgid "Replay protection sliding window size" +msgstr "Tamaño de la ventana deslizante de la protección de reproducción" + +msgid "Require explicit designation on certificate" +msgstr "Designación explícita de certificado" + +msgid "Require explicit key usage on certificate" +msgstr "Clave de uso explícita de certificado" + +msgid "Restart after remote ping timeout" +msgstr "Rearrancar tras espera del ping remoto" + +msgid "Retransmit timeout on TLS control channel" +msgstr "Espera de retransmisión en el canal de control TLS" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "Reintentar indefinidamente en errores del proxy HTTP" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "Reintentar indefinidamente en errores del proxy Socks" + +msgid "Route subnet to client" +msgstr "Enrutar subred a cliente" + +msgid "Run as an inetd or xinetd server" +msgstr "Ejecutar como servidor inetd o xinetd" + +msgid "Run script cmd on client connection" +msgstr "Script a ejecutar tras una conexión de cliente" + +msgid "Run script cmd on client disconnection" +msgstr "Script a ejecutar tras una desconexión de cliente" + +msgid "Run up/down scripts for all restarts" +msgstr "Ejecutar scripts de activación/desactivación en todos los rearranques" + +msgid "Send notification to peer on disconnect" +msgstr "Enviar notificación al otro en caso de desconexión" + +msgid "Set GID to group" +msgstr "GID del grupo" + +msgid "Set TCP/UDP MTU" +msgstr "MTU TCP/UDP" + +msgid "Set UID to user" +msgstr "UID del usuario" + +msgid "Set aside a pool of subnets" +msgstr "Reservar un bloque de subredes" + +msgid "Set extended HTTP proxy options" +msgstr "Opciones HTTP extendidas del proxy" + +msgid "Set output verbosity" +msgstr "Nivel de detalle de mensajes" + +msgid "Set size of real and virtual address hash tables" +msgstr "Tamaño de las tablas real y virtual de hashes" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "Tamaño del búfer de recepción TCP/UDP" + +msgid "Set the TCP/UDP send buffer size" +msgstr "Tamaño del búfer de envío TCP/UDP" + +msgid "Set tun/tap TX queue length" +msgstr "Longitud de la cola de transmisión TUN/TAP" + +msgid "Set tun/tap adapter parameters" +msgstr "Parámetros del adaptador TUN/TAP" + +msgid "Set tun/tap device MTU" +msgstr "MTU del dispositivo TUN/TAP" + +msgid "Set tun/tap device overhead" +msgstr "Sobrecarga del dispositivo TUN/TAP" + +msgid "Set upper bound on TCP MSS" +msgstr "Límite superior de MSS de TCP" + +msgid "Shaping for peer bandwidth" +msgstr "Adaptar ancho de banda de clientes" + +msgid "Shell cmd to execute after tun device open" +msgstr "Comando shell a ejecutar tras abrir el dispositivo TUN" + +msgid "Shell cmd to run after tun device close" +msgstr "Comando shell a ejecutar tras cerrar el dispositivo TUN" + +msgid "Shell command to verify X509 name" +msgstr "Comando shell a ejecutar para verificar un nombre X509" + +msgid "Silence the output of replay warnings" +msgstr "No mostrar avisos de reproducción" + +msgid "Size of cipher key" +msgstr "Tamaño de la clave de cifrado" + +msgid "Specify a default gateway for routes" +msgstr "Gateway por defecto" + +msgid "Start OpenVPN in a hibernating state" +msgstr "Arrancar OpenVPN en estado hibernado" + +msgid "Start/Stop" +msgstr "Arrancar/Parar" + +msgid "Started" +msgstr "Arrancado" + +msgid "Status file format version" +msgstr "Versión del formato del fichero de estado" + +msgid "Switch to advanced configuration »" +msgstr "Cambiar a configuración avanzada »" + +msgid "TCP/UDP port # for both local and remote" +msgstr "Número de puerto TCP/UDP para local y remoto" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "Número de puerto TCP/UDP para local (default=1194)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "Número de puerto TCP/UDP para remoto (default=1194)" + +msgid "TLS cipher" +msgstr "Cifra TLS" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "Paso a través TOS (sólo para IPv4)" + +msgid "Temporary directory for client-connect return file" +msgstr "" +"Directorio temporal para el fichero de retorno de la conexión del cliente" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "Tiempo de intercambio de clave" + +msgid "Type of used device" +msgstr "Tipo de dispositivo usado" + +msgid "Use fast LZO compression" +msgstr "Compresión rápida LZO" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "Direcciones individuales en vez de subredes /30" + +msgid "Use protocol" +msgstr "Protocolo" + +msgid "Use tun/tap device node" +msgstr "Nodo de dispositivo TUN/TAP" + +msgid "Use username as common name" +msgstr "Nombre de usuario como nombre común" + +msgid "Write log to file" +msgstr "Escribir registro a fichero" + +msgid "Write process ID to file" +msgstr "Escribir ID del proceso a fichero" + +msgid "Write status to file every n seconds" +msgstr "Segundos tras los que escribir el fichero de estado" + +msgid "no" +msgstr "no" + +msgid "tun/tap device" +msgstr "dispositivo TUN/TAP" + +msgid "tun/tap inactivity timeout" +msgstr "Espera de inactividad tun/tap" + +msgid "yes (%i)" +msgstr "sí (%i)" + +msgid "« Switch to basic configuration" +msgstr "« Cambiar a configuración básica" + +#~ msgid "Cryptography" +#~ msgstr "Criptografía" + +#~ msgid "Networking" +#~ msgstr "Red" + +#~ msgid "Service" +#~ msgstr "Servicio" + +#~ msgid "VPN" +#~ msgstr "VPN" diff --git a/feeds/luci/applications/luci-app-openvpn/po/fr/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/fr/openvpn.po new file mode 100644 index 0000000..e2f33dc --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/fr/openvpn.po @@ -0,0 +1,592 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2014-01-26 12:53+0200\n" +"Last-Translator: kyas \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p' ou 'subnet'" + +msgid "Accept options pushed from server" +msgstr "Accepter les options envoyées par le serveur" + +msgid "Add" +msgstr "Ajouter" + +msgid "Add route after establishing connection" +msgstr "Ajouter un routage après l'établissement de la connexion" + +msgid "Additional authentication over TLS" +msgstr "Authentification supplémentaire par dessus TLS" + +msgid "Allow client-to-client traffic" +msgstr "Autoriser le trafic entre clients" + +msgid "Allow multiple clients with same certificate" +msgstr "Permettre à plusieurs clients d'utiliser le même certificat" + +msgid "Allow only one session" +msgstr "Autoriser seulement une session" + +msgid "Allow remote to change its IP or port" +msgstr "Autoriser l'hôte distant à changer d'adresse IP ou de port" + +msgid "Allowed maximum of connected clients" +msgstr "Maximum autorisé de clients connectés" + +msgid "Allowed maximum of internal" +msgstr "Admis au maximum interne" + +msgid "Allowed maximum of new connections" +msgstr "Maximum autorisé de nouvelles connexions" + +msgid "Append log to file" +msgstr "Ajouter les journaux en fin de ce fichier" + +msgid "Authenticate using username/password" +msgstr "S'authentifier par identifiant/mot-de-passe" + +msgid "Automatically redirect default route" +msgstr "Rediriger automatiquement la route par défaut" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" +"Voici ci-dessous la liste d'instances OpenVPN configurées et leur état " +"courant" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" +"Appelle une commande/script d'arrêt avant que le périphérique TUN/TAP soit " +"fermé" + +msgid "Certificate authority" +msgstr "Autorité des certificats" + +msgid "Change process priority" +msgstr "Modifier la priorité du processus" + +msgid "Change to directory before initialization" +msgstr "Aller dans ce répertorie avant l'initialisation" + +msgid "Check peer certificate against a CRL" +msgstr "" +"Confronter le certificat du distant à une liste des certificats révoqués " +"(CRL)" + +msgid "Chroot to directory after initialization" +msgstr "Faire un « chroot » dans ce répertoire après initialisation" + +msgid "Client is disabled" +msgstr "Client désactivé" + +msgid "Configuration category" +msgstr "Catégorie de configuration" + +msgid "Configure client mode" +msgstr "Configurer le mode client" + +msgid "Configure server bridge" +msgstr "Configurer le mode pont" + +msgid "Configure server mode" +msgstr "Configurer le mode serveur" + +msgid "Connect through Socks5 proxy" +msgstr "Se connecter via un proxy Socks5" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "Se connecter à un hôte distant via un mandataire HTTP" + +msgid "Connection retry interval" +msgstr "Intervalle entre 2 tentatives de connexion" + +msgid "Daemonize after initialization" +msgstr "Transformer en démon après l'initialisation" + +msgid "Delay n seconds after connection" +msgstr "Attends n secondes après la connexion" + +msgid "Delay tun/tap open and up script execution" +msgstr "" +"Attends avant l'ouverture de tun/tap et l'exécution de scripts de mise en " +"marche" + +msgid "Diffie Hellman parameters" +msgstr "Paramètres Diffie Hellman" + +msgid "Directory for custom client config files" +msgstr "Répertoire contenant vos fichiers de config client spécifiques" + +msgid "Disable Paging" +msgstr "Désactiver la pagination" + +msgid "Disable cipher initialisation vector" +msgstr "Désactivé le vecteur d'initialisation cipher" + +msgid "Disable options consistency check" +msgstr "Désactiver la vérification de la cohérence des options" + +msgid "Disable replay protection" +msgstr "Désactiver la protection anti-rejeu" + +msgid "Do not bind to local address and port" +msgstr "Ne pas attacher à l'adresse et au port local" + +msgid "Don't actually execute ifconfig" +msgstr "Ne pas exécuter réellement ifconfig" + +msgid "Don't add routes automatically" +msgstr "Ne pas ajouter de routes automatiquement" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" +"Ne pas copier en cache les mots de passe des options --askpass ou --auth-" +"user-pass" + +msgid "Don't inherit global push options" +msgstr "Ne pas hériter des options d'envoi globales" + +msgid "Don't log timestamps" +msgstr "Ne pas journaliser les horodatages" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "Ne pas relire la clef au redémarrage" + +msgid "Don't require client certificate" +msgstr "Ne pas exiger un certificat client" + +msgid "Don't use adaptive lzo compression" +msgstr "Ne pas utiliser la compression adaptative LZO" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "Ne pas alerter en cas d'incohérence d'ifconfig" + +msgid "Echo parameters to log" +msgstr "Écrire les paramètres dans le journal" + +msgid "Empirically measure MTU" +msgstr "Mesurer le MTU empiriquement" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "Activer les systèmes de cryptages OpenSSL matériels" + +msgid "Enable Path MTU discovery" +msgstr "Activer la découverte du MTU du chemin" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "Activer le mode de cryptage à clef statique (non TLS)" + +msgid "Enable TLS and assume client role" +msgstr "Activer le TLS et prendre le rôle du client" + +msgid "Enable TLS and assume server role" +msgstr "Activer le TLS et prendre le rôle du serveur" + +msgid "Enable internal datagram fragmentation" +msgstr "Autoriser la fragmentation des datagrammes en interne" + +msgid "Enable management interface on IP port" +msgstr "Activer l'interface de gestion sur IP port" + +msgid "Enabled" +msgstr "Activé" + +msgid "Encryption cipher for packets" +msgstr "Méthode de chiffrement des paquets" + +msgid "Execute shell cmd after routes are added" +msgstr "Exécuter une commande shell après l'ajout des routes" + +msgid "Execute shell command on remote ip change" +msgstr "" +"Exécuter une commande Shell suite à un changement d'IP de l'hôte distant" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" +"Lancé en mode serveur pour les nouvelles connexions client, quand le client " +"n'est pas encore reconnu" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" +"Lancé en mode serveur à chaque fois qu'une adresse/route IPv4 ou une adresse " +"MAC est ajoutée à la table de routage interne d'OpenVPN" + +msgid "Exit on TLS negotiation failure" +msgstr "Arrêter suite à l'échec de la négociation TLS" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" +"Obtenir le mot de passe du certificat depuis le terminal avant de passer en " +"mode démon" + +msgid "HMAC authentication for packets" +msgstr "Authentification HMAC des paquets" + +msgid "Handling of authentication failures" +msgstr "Gestion des erreurs d'authentification" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" +"Aide pour simplifier l'expression des --ping et --ping-restart dans les " +"configurations en mode serveur" + +msgid "If hostname resolve fails, retry" +msgstr "Si la résolution du nom de l'hôte échoue, ré-essayer" + +msgid "Instance \"%s\"" +msgstr "Instance \"%s\"" + +msgid "Invalid" +msgstr "Invalide" + +msgid "Keep local IP address on restart" +msgstr "Conserver l'adresse IP locale lors du redémarrage" + +msgid "Keep remote IP address on restart" +msgstr "Conserver l'adresse IP distante lors du redémarrage" + +msgid "Keep tun/tap device open on restart" +msgstr "Conserver le périphérique tun/tap ouvert au redémarrage" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "Limiter les messages répétés dans les journaux" + +msgid "Local certificate" +msgstr "Certificat local" + +msgid "Local host name or ip address" +msgstr "Nom ou adresse IP de l'hôte local" + +msgid "Local private key" +msgstr "Clef privée locale" + +msgid "Major mode" +msgstr "Mode principal" + +msgid "Make tun device IPv6 capable" +msgstr "Rendre le périphérique tun compatible IPv6" + +msgid "Maximum number of queued TCP output packets" +msgstr "Nombre maximum de paquets TCP en attente d'émission" + +msgid "Number of allocated broadcast buffers" +msgstr "Nombre de tampons de diffusion alloués" + +msgid "Number of lines for log file history" +msgstr "Nombre de lignes de l'historique du fichier-journal" + +msgid "Only accept connections from given X509 name" +msgstr "Accepte seulement des connexions du nom X509 donné" + +msgid "Only process ping timeouts if routes exist" +msgstr "" +"Traiter l'expiration des délais des pings seulement si les routes existent" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "Instances OpenVPN" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "Optimiser les écritures TUN/TAP/UDP" + +msgid "Output to syslog and do not daemonize" +msgstr "Envoyer à syslog et ne pas transformer en démon" + +msgid "Overview" +msgstr "Vue d'ensemble" + +msgid "PKCS#12 file containing keys" +msgstr "Fichier au format PKCS#12 contenant les clefs" + +msgid "Pass environment variables to script" +msgstr "Transmettre les variables d'environnement au script" + +msgid "Persist replay-protection state" +msgstr "Reconduire l'état de protection anti-rejeu" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "Reconduire ou non le lot d'ifconfig" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" +"Envoyer un ping à l'hôte distant toutes les n secondes sur le port TCP/UDP" + +msgid "Policy level over usage of external programs and scripts" +msgstr "Règle de sécurité appliqué à l'usage de programmes et scripts externes" + +msgid "Port" +msgstr "Port" + +msgid "Protocol" +msgstr "Protocole" + +msgid "Proxy timeout in seconds" +msgstr "Délai d'attente du mandataire, en secondes" + +msgid "Push an ifconfig option to remote" +msgstr "Envoyer une option ifconfig au distant" + +msgid "Push options to peer" +msgstr "Envoyer les options au client" + +msgid "Query management channel for private key" +msgstr "Canal de requête de gestion pour clef privée" + +msgid "Randomly choose remote server" +msgstr "Choisir au hasard un serveur distant" + +msgid "Refuse connection if no custom client config" +msgstr "Refuser la connexion en l'absence de config client spécifique" + +msgid "Remap SIGUSR1 signals" +msgstr "Rediriger les signaux SIGUSR1" + +msgid "Remote host name or ip address" +msgstr "Nom ou adresse IP de l'hôte distant" + +msgid "Remote ping timeout" +msgstr "Délai de ping du distant" + +msgid "Renegotiate data chan. key after bytes" +msgstr "Renégocier la clé du canal de données après tant d'octets" + +msgid "Renegotiate data chan. key after packets" +msgstr "Renégocier la clé du canal de données après tant de paquets" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" +"Renégocier la clé du canal de données après tant de temps (en secondes)" + +msgid "Replay protection sliding window size" +msgstr "Taille de la fenêtre glissante pour la protection anti-rejeu" + +msgid "Require explicit designation on certificate" +msgstr "Exiger l'appellation explicite sur le certificat" + +msgid "Require explicit key usage on certificate" +msgstr "Exiger l'utilisation explicite de la clé sur le certificat" + +msgid "Restart after remote ping timeout" +msgstr "Redémarrer aprés le dépassement du délai de ping du distant" + +msgid "Retransmit timeout on TLS control channel" +msgstr "Renvoyer l'expiration du délai sur le canal de contrôle TLS" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "Ré-essayer indéfiniment suite à des erreurs du proxy HTTP" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "Ré-essayer indéfiniment suite à des erreurs du proxy Socks" + +msgid "Route subnet to client" +msgstr "Router le sous-réseau vers le client" + +msgid "Run as an inetd or xinetd server" +msgstr "Exécuter en tant que serveur inetd ou xinetd" + +msgid "Run script cmd on client connection" +msgstr "Exécuter une commande de script lors de la connexion d'un client" + +msgid "Run script cmd on client disconnection" +msgstr "Exécuter une commande de script lors de la déconnexion d'un client" + +msgid "Run up/down scripts for all restarts" +msgstr "Exécuter les scripts up/down à tous les redémarrages" + +msgid "Send notification to peer on disconnect" +msgstr "Envoyer une notification au distant à la déconnexion" + +msgid "Set GID to group" +msgstr "Utiliser le GID de ce groupe" + +msgid "Set TCP/UDP MTU" +msgstr "Définir le MTU TCP/UDP" + +msgid "Set UID to user" +msgstr "Utiliser l'UID de cet utilisateur" + +msgid "Set aside a pool of subnets" +msgstr "Mettre de coté un lot de sous-réseaux" + +msgid "Set extended HTTP proxy options" +msgstr "Définir les options de mandataire HTTP étendu" + +msgid "Set output verbosity" +msgstr "Définir la verbosité des écrits" + +msgid "Set size of real and virtual address hash tables" +msgstr "" +"Définir la taille des tables de haché des adresses réelles et virtuelles" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "Définir la taille de la pile de réception TCP/UDP" + +msgid "Set the TCP/UDP send buffer size" +msgstr "Définir la taille de la pile d'envoi TCP/UDP" + +msgid "Set tun/tap TX queue length" +msgstr "Définir la taille de la pile TX tun/tap" + +msgid "Set tun/tap adapter parameters" +msgstr "Définir les paramètres de l'adaptateur tun/tap" + +msgid "Set tun/tap device MTU" +msgstr "Définir le MTU du périphérique tun/tap" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "Définir la borne supérieure du MSS TCP" + +msgid "Shaping for peer bandwidth" +msgstr "Gère la bande-passante du distant" + +msgid "Shell cmd to execute after tun device open" +msgstr "Commande Shell à exécuter après l'ouverture du périphérique tun" + +msgid "Shell cmd to run after tun device close" +msgstr "Commande Shell à exécuter après la fermeture du périphérique tun" + +msgid "Shell command to verify X509 name" +msgstr "Commande shell de vérification du nom X509" + +msgid "Silence the output of replay warnings" +msgstr "Supprime les messages d'alertes anti-rejeu" + +msgid "Size of cipher key" +msgstr "Taille de la clé de cryptage" + +msgid "Specify a default gateway for routes" +msgstr "Définir la passerelle par défaut des routes" + +msgid "Start OpenVPN in a hibernating state" +msgstr "Démarrer OpenVPN dans un état d'hibernation" + +msgid "Start/Stop" +msgstr "Démarrer/Arrêter" + +msgid "Started" +msgstr "Démarré" + +msgid "Status file format version" +msgstr "Version du format du fichier de status" + +msgid "Switch to advanced configuration »" +msgstr "Afficher les paramètres de configuration avancés" + +msgid "TCP/UDP port # for both local and remote" +msgstr "Numéro de port TCP/UDP valable pour l'hôte local et l'hôte distant" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "Numéro de port TCP/UDP pour l'hôte local (par défaut 1194)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "Numéro de port TCP/UDP pour l'hôte distant (par défaut 1194)" + +msgid "TLS cipher" +msgstr "Méthode de chiffrement TLS" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "Répertoire pour le fichier temporaire lié à la connexion d'un client" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "Période d'un échange de clés" + +msgid "Type of used device" +msgstr "Type de périphérique utilisé" + +msgid "Use fast LZO compression" +msgstr "Utiliser la compression LZO rapide" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "Utiliser des adresses individuelles plutôt que des sous-réseaux en /30" + +msgid "Use protocol" +msgstr "Utiliser le protocole" + +msgid "Use tun/tap device node" +msgstr "Utiliser le périphérique tun/tap" + +msgid "Use username as common name" +msgstr "Utiliser le nom d'utilisateur comme nom « commun » (du certificat)" + +msgid "Write log to file" +msgstr "Écrire le journal dans le fichier" + +msgid "Write process ID to file" +msgstr "Écrire le numéro de processus dans le fichier" + +msgid "Write status to file every n seconds" +msgstr "Écrire le status dans le fichier chaque n secondes" + +msgid "no" +msgstr "non" + +msgid "tun/tap device" +msgstr "Périphérique tun/tap" + +msgid "tun/tap inactivity timeout" +msgstr "Délai d'inactivité tun/tap" + +msgid "yes (%i)" +msgstr "oui (%i)" + +msgid "« Switch to basic configuration" +msgstr "Afficher les paramètres de configuration standards" + +#~ msgid "Cryptography" +#~ msgstr "Cryptage" + +#~ msgid "Networking" +#~ msgstr "Réseau" + +#~ msgid "Service" +#~ msgstr "Service" + +#~ msgid "VPN" +#~ msgstr "VPN" + +#~ msgid "openvpn_%s" +#~ msgstr "openvpn_%s" + +#~ msgid "openvpn_%s_desc" +#~ msgstr "openvpn_%s_desc" diff --git a/feeds/luci/applications/luci-app-openvpn/po/he/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/he/openvpn.po new file mode 100644 index 0000000..3528444 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/he/openvpn.po @@ -0,0 +1,547 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "" + +msgid "Allow multiple clients with same certificate" +msgstr "" + +msgid "Allow only one session" +msgstr "" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN instances" +msgstr "" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "" + +msgid "« Switch to basic configuration" +msgstr "" diff --git a/feeds/luci/applications/luci-app-openvpn/po/hu/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/hu/openvpn.po new file mode 100644 index 0000000..1f9d691 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/hu/openvpn.po @@ -0,0 +1,569 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-01-31 12:06+0200\n" +"Last-Translator: Gabor \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p' vagy 'subnet'" + +msgid "Accept options pushed from server" +msgstr "A kiszolgáló által küldött opciók elfogadás" + +msgid "Add" +msgstr "Hozzáadás" + +msgid "Add route after establishing connection" +msgstr "Útvonal hozzáadása a kapcsolat létrejötte után" + +msgid "Additional authentication over TLS" +msgstr "További hitelesítés TLS-en keresztül" + +msgid "Allow client-to-client traffic" +msgstr "Ügyfél-ügyfél közötti kapcsolat engedélyezése" + +msgid "Allow multiple clients with same certificate" +msgstr "Több ügyfél engedélyezése ugyanazzal a tanúsítvánnyal" + +msgid "Allow only one session" +msgstr "Csak egy munkafolyamat engedélyezése" + +msgid "Allow remote to change its IP or port" +msgstr "A távoli gép IP címének vagy portjának megváltozatásának engedélyezése" + +msgid "Allowed maximum of connected clients" +msgstr "A csatlakozott ügyfelek maximális megengedett száma" + +msgid "Allowed maximum of internal" +msgstr "Belső kapcsolatok maximális száma" + +msgid "Allowed maximum of new connections" +msgstr "Az új kapcsolatok maximálisan megengedett száma" + +msgid "Append log to file" +msgstr "Napló hozzáfűzése fájlhoz" + +msgid "Authenticate using username/password" +msgstr "Azonosítás felhasználónév és jelszó használatával" + +msgid "Automatically redirect default route" +msgstr "Az alapértelmezett útvonal automatikus átirányítása" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" +"Az alábbi listában találhatóak a beállított OpenVPN példányok és azok " +"aktuális állapota" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "A TUN/TAP interfész lezárása előtt futtatandó shell script." + +msgid "Certificate authority" +msgstr "Hitelesítésszolgáltató" + +msgid "Change process priority" +msgstr "Folyamat prioritásának módosítása" + +msgid "Change to directory before initialization" +msgstr "Váltás a könyvtárra inicializáslás előtt" + +msgid "Check peer certificate against a CRL" +msgstr "Kliens tanúsítvány összevetése a tiltólistával." + +msgid "Chroot to directory after initialization" +msgstr "Gyökérkönyvtár váltás inicializáció után" + +msgid "Client is disabled" +msgstr "Ügyfél letiltva" + +msgid "Configuration category" +msgstr "Beállítások / Visszavonás" + +msgid "Configure client mode" +msgstr "Ügyfél mód beállítása" + +msgid "Configure server bridge" +msgstr "Kiszolgáló híd beállítása" + +msgid "Configure server mode" +msgstr "Kiszolgáló mód beállítása" + +msgid "Connect through Socks5 proxy" +msgstr "Kapcsolódás Sock5 proxy-n keresztül" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "Kapcsolódás a távoli géphez HTTP proxyn keresztül" + +msgid "Connection retry interval" +msgstr "Kapcsolódás újrapróbálkozási időköz" + +msgid "Daemonize after initialization" +msgstr "Váltás démon módba inicializálás után" + +msgid "Delay n seconds after connection" +msgstr "Kapcsolat felépítés után 'n' másodperc késleltetés" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "Diffie Hellman paraméterek" + +msgid "Directory for custom client config files" +msgstr "Egyéni ügyfél konfigurációs fájlok könyvtára " + +msgid "Disable Paging" +msgstr "Lapozás letiltása" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "Újrajátszás védelem letiltása" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "Ne adjon hozzá útvonalakat automatikusan " + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "Időbélyegeket ne naplózza" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "Ne használjon adaptív LZO tömörítést" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "A paramétereket írja a naplóba" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "OpenSSL hardveres titkosítás engedélyezése" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "Engedélyezve" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "Érvénytelen" + +msgid "Keep local IP address on restart" +msgstr "Helyi IP cím megtartása újraindításkor" + +msgid "Keep remote IP address on restart" +msgstr "Távoli IP cím megtartása újraindításkor" + +msgid "Keep tun/tap device open on restart" +msgstr "tun/tap eszközök nyitva tartása újraindításkor" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "Helyi tanúsítvány" + +msgid "Local host name or ip address" +msgstr "Helyi gép név vagy IP cím" + +msgid "Local private key" +msgstr "Helyi privát kulcs" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "A sorbaállított kimenő TCP csomagok maximális száma" + +msgid "Number of allocated broadcast buffers" +msgstr "Lefoglalt broadcast pufferek száma" + +msgid "Number of lines for log file history" +msgstr "Naplófájl történet sorainak száma" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "OpenVPN példányok" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "Áttekintés" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Proxy timeout in seconds" +msgstr "Proxy várakozási idő (másodperc)" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "Kapcsolat megtagadás ha nincs egyéni ügyfél konfiguráció" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "Távoli gép név vagy IP cím" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "Indítás/Leállítás" + +msgid "Started" +msgstr "Elindítva" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "Váltás haladó beállításokra »" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "TLS titkosító" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "A használt eszköz típusa" + +msgid "Use fast LZO compression" +msgstr "Gyors LZO tömörítés használata" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "Egyedi címek használata /30 alhálózat helyett" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "Napló írása fájlba" + +msgid "Write process ID to file" +msgstr "Folyamat azonosító (PID) fájlba írása" + +msgid "Write status to file every n seconds" +msgstr "Állapot fájlba írása 'n' másodpercenként" + +msgid "no" +msgstr "nem" + +msgid "tun/tap device" +msgstr "tun/tap/ eszköz" + +msgid "tun/tap inactivity timeout" +msgstr "tun/tap tétlenségi idő" + +msgid "yes (%i)" +msgstr "igen (%i)" + +msgid "« Switch to basic configuration" +msgstr "« Váltás alap beállításokra" + +#~ msgid "Cryptography" +#~ msgstr "Titkosítás" + +#~ msgid "Networking" +#~ msgstr "Hálózatkezelés" + +#~ msgid "Service" +#~ msgstr "Szolgáltatás" + +#~ msgid "VPN" +#~ msgstr "VPN" + +#~ msgid "openvpn_%s" +#~ msgstr "openvpn_%s" + +#~ msgid "openvpn_%s_desc" +#~ msgstr "openvpn_%s_desc" diff --git a/feeds/luci/applications/luci-app-openvpn/po/it/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/it/openvpn.po new file mode 100644 index 0000000..233c144 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/it/openvpn.po @@ -0,0 +1,553 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-04-20 10:36+0200\n" +"Last-Translator: claudyus \n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "Accetta opzioni inviate dal server" + +msgid "Add" +msgstr "Aggiungi" + +msgid "Add route after establishing connection" +msgstr "Aggiungi rotte dopo aver stabilito la connessione" + +msgid "Additional authentication over TLS" +msgstr "Autenticazione addizionale over TLS" + +msgid "Allow client-to-client traffic" +msgstr "Permetti traffico client-client" + +msgid "Allow multiple clients with same certificate" +msgstr "Permetti più client con lo stesso certificato" + +msgid "Allow only one session" +msgstr "Permetti solo una sessione" + +msgid "Allow remote to change its IP or port" +msgstr "Permetti ai remote di cambiare il proprio IP o porta" + +msgid "Allowed maximum of connected clients" +msgstr "Numero massimo di clienti connessi" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "Numero massimo di nuove connessioni ammesse" + +msgid "Append log to file" +msgstr "Appendi il log al file" + +msgid "Authenticate using username/password" +msgstr "Autenticazione usando username/passoword" + +msgid "Automatically redirect default route" +msgstr "Modifica automaticamente la default route" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" +"Sotto c'è una lista di istanze di OpenVPN configurate e il loro stato " +"corrente" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "Cambia priorità del processo" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "Connetti attraverso un proxy Socks5" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "Connetti attraverso un proxy HTTP" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "Non effettuare il bind sull'indirizzo/porta locale" + +msgid "Don't actually execute ifconfig" +msgstr "Non eseguire realmente ifconfig" + +msgid "Don't add routes automatically" +msgstr "Non aggiungere rotte automaticamente" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "Non loggare il timestamps" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "Non rileggere le chiavi al riavvio" + +msgid "Don't require client certificate" +msgstr "Non richiedere certificati dei client" + +msgid "Don't use adaptive lzo compression" +msgstr "Non usare compressione lzo adattiva" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "Misura empericamente l'MTU" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "Abilita il supporto criptografico hardware per OpenSSL" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "Abilita frammentazione interna dei datagram" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "Abilitato" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "Esegui un comando shell dopo che le rotte sono aggiunte" + +msgid "Execute shell command on remote ip change" +msgstr "Esegui un comando shell al cambio di ip remoto" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "Istanza \"%s\"" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "Mantieni l'IP local al riavvio" + +msgid "Keep remote IP address on restart" +msgstr "Mantieni l'IP remoto al riavvio" + +msgid "Keep tun/tap device open on restart" +msgstr "Mantienti il device tun/tap aperto al riavvio" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "Limita le ripetizioni di messaggi nel log" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "Chiave privata local" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "Rendi il device tun ipv6 ready" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "OpenVPN istanze" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "Ottimizza le scritture su TUN/TAP/UDP" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "Anteprima" + +msgid "PKCS#12 file containing keys" +msgstr "PKCS#12 file containing keys" + +msgid "Pass environment variables to script" +msgstr "Passa le variabili d'ambiente allo script" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "Porta" + +msgid "Protocol" +msgstr "Protocollo" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "Avviato" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "Passa alla configurazione avanzata »" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "no" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "si (%i)" + +msgid "« Switch to basic configuration" +msgstr "« Passa alla configurazione base" diff --git a/feeds/luci/applications/luci-app-openvpn/po/ja/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/ja/openvpn.po new file mode 100644 index 0000000..5474008 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/ja/openvpn.po @@ -0,0 +1,563 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-04-09 08:12+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p', または 'subnet'" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "追加" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "クライアント間通信を許可する" + +msgid "Allow multiple clients with same certificate" +msgstr "" + +msgid "Allow only one session" +msgstr "1つのセッションのみを許可する" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "現在設定済のOpenVPNの設定とステータスを表示しています。" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "設定カテゴリ" + +msgid "Configure client mode" +msgstr "クライアントモードに設定" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "サーバーモードに設定" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "再接続間隔" + +msgid "Daemonize after initialization" +msgstr "初期化後にデーモン化する" + +msgid "Delay n seconds after connection" +msgstr "セッション接続後、n秒ディレイする" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "Diffie Hellman パラメータ" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "ページングを無効にする" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "時刻をログに書き込まない" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "再起動時にキーの再読み込みを行わない" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "OpenSSL暗号化のハードウェアサポートを有効にする" + +msgid "Enable Path MTU discovery" +msgstr "Path MTU discovery を有効にする" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "有効" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "設定 \"%s\"" + +msgid "Invalid" +msgstr "無効" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "tun デバイスでIPv6機能を有効にする" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "OpenVPN 設定" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "概要" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "ポート" + +msgid "Protocol" +msgstr "プロトコル" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "TCP/UDP のMTUを設定" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "ログ出力レベルの設定" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "TCP/UDP の受信バッファサイズ" + +msgid "Set the TCP/UDP send buffer size" +msgstr "TCP/UDP の送信バッファサイズ" + +msgid "Set tun/tap TX queue length" +msgstr "tun/tap デバイスの送信キューサイズ" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "tun/tap デバイスのMTU設定" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "開始 / 停止" + +msgid "Started" +msgstr "実行中" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "詳細設定へ移動 »" + +msgid "TCP/UDP port # for both local and remote" +msgstr "TCP/UDP ポート (ローカル・リモート共用)" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "TCP/UDP ポート (ローカル, 標準設定=1194)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "TCP/UDP ポート (リモート, 標準設定=1194)" + +msgid "TLS cipher" +msgstr "TLS 暗号化方式" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "高速LZO圧縮機能を使用する" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "使用するプロトコル" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "いいえ" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "はい (%i)" + +msgid "« Switch to basic configuration" +msgstr "« 基本設定へ移動" + +#~ msgid "Cryptography" +#~ msgstr "暗号設定" + +#~ msgid "Networking" +#~ msgstr "ネットワーク" + +#~ msgid "Service" +#~ msgstr "サービス" + +#~ msgid "VPN" +#~ msgstr "VPN" diff --git a/feeds/luci/applications/luci-app-openvpn/po/ms/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/ms/openvpn.po new file mode 100644 index 0000000..c439c3e --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/ms/openvpn.po @@ -0,0 +1,546 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "" + +msgid "Allow multiple clients with same certificate" +msgstr "" + +msgid "Allow only one session" +msgstr "" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN instances" +msgstr "" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "" + +msgid "« Switch to basic configuration" +msgstr "" diff --git a/feeds/luci/applications/luci-app-openvpn/po/no/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/no/openvpn.po new file mode 100644 index 0000000..3528444 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/no/openvpn.po @@ -0,0 +1,547 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "" + +msgid "Allow multiple clients with same certificate" +msgstr "" + +msgid "Allow only one session" +msgstr "" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN instances" +msgstr "" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "" + +msgid "« Switch to basic configuration" +msgstr "" diff --git a/feeds/luci/applications/luci-app-openvpn/po/pl/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/pl/openvpn.po new file mode 100644 index 0000000..e289a80 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/pl/openvpn.po @@ -0,0 +1,578 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-05 03:41+0200\n" +"Last-Translator: piosl \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p', lub 'subnet'" + +msgid "Accept options pushed from server" +msgstr "Zaakceptuj opcje narzucone przez serwer" + +msgid "Add" +msgstr "Dodaj" + +msgid "Add route after establishing connection" +msgstr "Dodaj trasę po nawiązaniu połączenia" + +msgid "Additional authentication over TLS" +msgstr "Dodatkowe uwierzytelnianie poprzez TLS" + +msgid "Allow client-to-client traffic" +msgstr "Zezwól na łączność klient-klient" + +msgid "Allow multiple clients with same certificate" +msgstr "Zezwól na łączenie wielu klientów z tym samym certyfikatem." + +msgid "Allow only one session" +msgstr "Zezwól tylko na jedną sesję" + +msgid "Allow remote to change its IP or port" +msgstr "Zezwól na zmianę IP lub portu odległemu hostowi." + +msgid "Allowed maximum of connected clients" +msgstr "Maksymalna dozwolona liczba klientów" + +msgid "Allowed maximum of internal" +msgstr "Maksymalna dozwolona liczba wewnętrznych" + +msgid "Allowed maximum of new connections" +msgstr "Maksymalna dozwolona liczba nowych połączeń" + +msgid "Append log to file" +msgstr "Dopisz log do pliku" + +msgid "Authenticate using username/password" +msgstr "Autoryzacja z użyciem loginu oraz hasła" + +msgid "Automatically redirect default route" +msgstr "Automatycznie przekieruj domyślną trasę" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" +"Ponieżej znajduje się lista skonfigurowanych procesów OpenVPN wraz z ich " +"aktualnymi stanami." + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "Zatrzymaj skrypt przed wyłączeniem interfejsu TUN/TAP" + +msgid "Certificate authority" +msgstr "Urząd certyfikacji" + +msgid "Change process priority" +msgstr "Zmień priorytet procesu" + +msgid "Change to directory before initialization" +msgstr "Przejdź do katalogu przed inicjalizacją" + +msgid "Check peer certificate against a CRL" +msgstr "Sprawdź certyfikat peera na obecność w CRL" + +msgid "Chroot to directory after initialization" +msgstr "Zmień root (chroot) na katalog po inicjalizacji" + +msgid "Client is disabled" +msgstr "Klient jest wyłączony" + +msgid "Configuration category" +msgstr "Kategoria konfiguracji" + +msgid "Configure client mode" +msgstr "Konfiguruj tryb klienta" + +msgid "Configure server bridge" +msgstr "Konfiguruj serwer w trybie mostu" + +msgid "Configure server mode" +msgstr "Konfiguruj serwer" + +msgid "Connect through Socks5 proxy" +msgstr "Połącz poprzez SOCKS5 proxy" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "Połącz ze zdalnym hostem poprzez HTTP proxy" + +msgid "Connection retry interval" +msgstr "Interwał powtarzania połączeń" + +msgid "Daemonize after initialization" +msgstr "Przejdź w tryb demona po inicjalizacji" + +msgid "Delay n seconds after connection" +msgstr "Opóźnienie n sekund po nawiązaniu połączenia" + +msgid "Delay tun/tap open and up script execution" +msgstr "Opóźnienie otwarcia interfejsu tun/tap i wykonania skryptu" + +msgid "Diffie Hellman parameters" +msgstr "Parametry Diffie Hellman" + +msgid "Directory for custom client config files" +msgstr "Katalog na pliki konfiguracyjne" + +msgid "Disable Paging" +msgstr "Wyłącz stronicowanie" + +msgid "Disable cipher initialisation vector" +msgstr "Wyłącz wektor inicjalizacji szyfru" + +msgid "Disable options consistency check" +msgstr "Wyłącz sprawdzanie poprawności ustawień" + +msgid "Disable replay protection" +msgstr "Wyłącz ochronę odpowiedzi" + +msgid "Do not bind to local address and port" +msgstr "Nie związuj z lokalnym adresem i portem" + +msgid "Don't actually execute ifconfig" +msgstr "Nie uruchamiaj obecnie ifconfig" + +msgid "Don't add routes automatically" +msgstr "Nie dodawaj tras (routes) automatycznie" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "Nie cacheuj haseł --askpass lub --auth-user-pass" + +msgid "Don't inherit global push options" +msgstr "Nie dziedzicz globalnej opcji push" + +msgid "Don't log timestamps" +msgstr "Nie zapisuj czasu w logu" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "Nie wczytuj ponownie klucza podczas restartu" + +msgid "Don't require client certificate" +msgstr "Nie wymagaj certyfikatu od klienta" + +msgid "Don't use adaptive lzo compression" +msgstr "Nie używaj adaptatywnej kompresji lzo" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "Nie ostrzegaj przed niespójnością w ifconfig" + +msgid "Echo parameters to log" +msgstr "Zapisuj parametry w logu" + +msgid "Empirically measure MTU" +msgstr "Mierz MTU empirycznie" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "Włącz sprzętowe przyspieszenie OpenSSL" + +msgid "Enable Path MTU discovery" +msgstr "Włącz wykrywanie \"Path MTU\"" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "Włącz tryb szyfrowania statycznym kluczem (non-TLS)" + +msgid "Enable TLS and assume client role" +msgstr "Włącz TLS i przyjmij rolę klienta" + +msgid "Enable TLS and assume server role" +msgstr "Włącz TLS i przyjmij rolę serwera" + +msgid "Enable internal datagram fragmentation" +msgstr "Włącz wewnętrzną fragmentację datagramu" + +msgid "Enable management interface on IP port" +msgstr "Włącz interfejs zarządzalny na IP port" + +msgid "Enabled" +msgstr "Włączone" + +msgid "Encryption cipher for packets" +msgstr "Szyfrowanie dla pakietów" + +msgid "Execute shell cmd after routes are added" +msgstr "Wykonaj komendę powłoki po dodaniu tras" + +msgid "Execute shell command on remote ip change" +msgstr "Wykonaj komendę powłoki po zmianie zdalnego IP" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" +"Wykonane w trybie serwera na nowych połączeniach klienta, gdy klient jest " +"nadal niezaufany" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" +"Wykonane w trybie serwera, gdy adres IPv4, trasa lub adres MAC są dodane do " +"wewnętrznej tablicy routingu w OpenVPN" + +msgid "Exit on TLS negotiation failure" +msgstr "Wyjdź przy niepowodzeniu negocjacji TLS" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "Uzyskaj hasło PEM z kontroli tty przed demonizacją" + +msgid "HMAC authentication for packets" +msgstr "Autoryzacja HMAC dla pakietów" + +msgid "Handling of authentication failures" +msgstr "Postępowanie z błędami uwierzytelniania" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" +"Dyrektywa Helper w celu uproszczenia wyrażenie --ping i --ping-restart w " +"konfiguracjach w trybie serwera" + +msgid "If hostname resolve fails, retry" +msgstr "Jeżeli ustanowienie nazwy hosta nie powiedzie się, spróbuj ponownie" + +msgid "Instance \"%s\"" +msgstr "Instancja \"%s\"" + +msgid "Invalid" +msgstr "Nieprawidłowe" + +msgid "Keep local IP address on restart" +msgstr "Zachowaj lokalny adres IP przy restarcie" + +msgid "Keep remote IP address on restart" +msgstr "Zachowaj zdalny adres IP przy restarcie" + +msgid "Keep tun/tap device open on restart" +msgstr "Utrzymaj urządzenie tun/tap po restarcie jako otwarte" + +msgid "Key transition window" +msgstr "Okno zmiany klucza" + +msgid "Limit repeated log messages" +msgstr "Limit powtarzających się wiadomości w logu" + +msgid "Local certificate" +msgstr "Certyfikat lokalny" + +msgid "Local host name or ip address" +msgstr "Lokalna nazwa hosta lub adres IP" + +msgid "Local private key" +msgstr "Lokalny klucz prywatny" + +msgid "Major mode" +msgstr "Tryb główny" + +msgid "Make tun device IPv6 capable" +msgstr "Urządzenie tun zgodne z IPv6" + +msgid "Maximum number of queued TCP output packets" +msgstr "Maksymalna liczba wychodzących pakietów TCP w kolejce" + +msgid "Number of allocated broadcast buffers" +msgstr "Liczba przydzielonych buforów nadawczych" + +msgid "Number of lines for log file history" +msgstr "Liczba linii w pliku dziennika historii" + +msgid "Only accept connections from given X509 name" +msgstr "Akceptuj tylko połączenia z podanej nazwy X509" + +msgid "Only process ping timeouts if routes exist" +msgstr "Wykonaj procedurę \"ping timeout\" tylko jeżeli trasy istnieją" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "Instancje OpenVPN" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "Optymalizuj wpisy TUN/TAP/UDP" + +msgid "Output to syslog and do not daemonize" +msgstr "Wysyłaj do syslog'a i nie demonizuj" + +msgid "Overview" +msgstr "Przegląd" + +msgid "PKCS#12 file containing keys" +msgstr "Plik PKCS#12 zawierający klucze" + +msgid "Pass environment variables to script" +msgstr "Przekaż zmienne środowiskowe do skryptu" + +msgid "Persist replay-protection state" +msgstr "Utrzymaj status ochrony odpowiedzi" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "Utrzymuj/Nie utrzymuj ifconfig-pool" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "Pinguj zdalnego co n sekund przez port TCP/UDP" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" +"Poziom zasad odnoszących się do używania zewnętrznych programów i skryptów" + +msgid "Port" +msgstr "Port" + +msgid "Protocol" +msgstr "Protokół" + +msgid "Proxy timeout in seconds" +msgstr "Czas bezczynności proxy w sekundach" + +msgid "Push an ifconfig option to remote" +msgstr "Wyślij opcje ifconfig do zdalnego" + +msgid "Push options to peer" +msgstr "Wyślij opcje do peera" + +msgid "Query management channel for private key" +msgstr "Kanał zarządzania zapytaniami dla klucza prywatnego" + +msgid "Randomly choose remote server" +msgstr "Losowo wybierz serwer zdalny" + +msgid "Refuse connection if no custom client config" +msgstr "Odmów połączenie gdy nie standardowy klient konfiguracja" + +msgid "Remap SIGUSR1 signals" +msgstr "Przemapuj SIGUSR1" + +msgid "Remote host name or ip address" +msgstr "Nazwa lub IP zdalnego hosta" + +msgid "Remote ping timeout" +msgstr "Zdalny ping upłynął czas" + +msgid "Renegotiate data chan. key after bytes" +msgstr "Renegocjacja danych charakteru klucza po bajtach" + +msgid "Renegotiate data chan. key after packets" +msgstr "Renegocjacja danych charakteru klucza po pakietach" + +msgid "Renegotiate data chan. key after seconds" +msgstr "Renegocjacja danych charakteru klucza po sekundach" + +msgid "Replay protection sliding window size" +msgstr "Powtórzenie osłony okna rozmiaru" + +msgid "Require explicit designation on certificate" +msgstr "Potrzebna Podpis na Certyfikacie" + +msgid "Require explicit key usage on certificate" +msgstr "Potrzebna klucza używanego w certyfikacie" + +msgid "Restart after remote ping timeout" +msgstr "restart po zdalnym ping upływie czasu" + +msgid "Retransmit timeout on TLS control channel" +msgstr "Retransmisja po upływie czasu TLS na kanale kontrolnym" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "Ponownie spróbować na Http proxy Błędzie" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "Trasa podsieci do klienta" + +msgid "Run as an inetd or xinetd server" +msgstr "Uruchom jako serwer inetd lub xinetd" + +msgid "Run script cmd on client connection" +msgstr "Uruchom skrypt cmd po połączeniu klienta" + +msgid "Run script cmd on client disconnection" +msgstr "Uruchom skrypt cmd po rozłączeniu klienta" + +msgid "Run up/down scripts for all restarts" +msgstr "Uruchom skrypty up/down dla wszystkich restartów" + +#, fuzzy +msgid "Send notification to peer on disconnect" +msgstr "Wyślij zgłoszenie o rozłączeniu do peer" + +msgid "Set GID to group" +msgstr "Ustaw GID dla grupy" + +msgid "Set TCP/UDP MTU" +msgstr "Ustaw TCP/UDP MTU" + +msgid "Set UID to user" +msgstr "Ustaw UID dla użytkownika" + +#, fuzzy +msgid "Set aside a pool of subnets" +msgstr "Odłożyć na bok pulę podsieci" + +msgid "Set extended HTTP proxy options" +msgstr "Ustaw rozszerzone opcje proxy HTTP" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "Ustaw rozmiar rzeczywistych i wirtualnych adresów tablicy hash" + +#, fuzzy +msgid "Set the TCP/UDP receive buffer size" +msgstr "Ustaw rozmiar buforu wysyłania TCP/UDP" + +#, fuzzy +msgid "Set the TCP/UDP send buffer size" +msgstr "Ustaw rozmiar buforu wysyłania TCP/UDP" + +#, fuzzy +msgid "Set tun/tap TX queue length" +msgstr "Ustaw długość kolejki tun / tap TX " + +msgid "Set tun/tap adapter parameters" +msgstr "Ustaw parametr adaptera tun/tap" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "Ustaw górną granicę TCP MSS" + +msgid "Shaping for peer bandwidth" +msgstr "Formowanie wzajemnego pasma" + +#, fuzzy +msgid "Shell cmd to execute after tun device open" +msgstr "cmd Shell po uruchomieniu urzadzenie tun" + +#, fuzzy +msgid "Shell cmd to run after tun device close" +msgstr "cmd Shell po wyłączeniu urzadzenie tun" + +msgid "Shell command to verify X509 name" +msgstr "polecenie Shell aby sprawdzić nazwę X509" + +msgid "Silence the output of replay warnings" +msgstr "Wycisz powtórne pojawianie się ostrzeżeń" + +msgid "Size of cipher key" +msgstr "Rozmiar klucza szyfrowania" + +msgid "Specify a default gateway for routes" +msgstr "Określ domyślną bramę dla tras" + +msgid "Start OpenVPN in a hibernating state" +msgstr "Uruchom OpenVPN w stanie hibernacji" + +msgid "Start/Stop" +msgstr "Start/Stop" + +msgid "Started" +msgstr "Uruchomiono" + +msgid "Status file format version" +msgstr "Wersja formatu pliku statusu" + +msgid "Switch to advanced configuration »" +msgstr "Konfiguracja zaawansowana »" + +msgid "TCP/UDP port # for both local and remote" +msgstr "Numer portu TCP/UDP zarówno dla lokalnego jak i zdalnego" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "Numer portu TCP/UDP dla lokalnego (domyślnie=1194)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "Numer portu TCP/UDP dla zdalnego (domyślnie=1194)" + +msgid "TLS cipher" +msgstr "Kodowanie TLS" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "Przepuszczanie TOS (dotyczy tylko IPv4)" + +msgid "Temporary directory for client-connect return file" +msgstr "Katalog tymczasowy dla pliku zwrotnego połączenia klienta" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "Typ użytego urządzenia" + +msgid "Use fast LZO compression" +msgstr "Użyj szybkiej kompresji LZO" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "Użyj indywidualnego adresu zamiast podsieci /30" + +msgid "Use protocol" +msgstr "Użyj protokołu" + +msgid "Use tun/tap device node" +msgstr "Użyj węzła urządzenia tun/tap" + +msgid "Use username as common name" +msgstr "Użyj nazwy użytkownika jako nazwy wspólnej" + +msgid "Write log to file" +msgstr "Zapisz log do pliku" + +msgid "Write process ID to file" +msgstr "Zapisz numer ID procesu do pliku" + +msgid "Write status to file every n seconds" +msgstr "Zapisz status do pliku co n sekund" + +msgid "no" +msgstr "nie" + +msgid "tun/tap device" +msgstr "urządzenie tun/tap" + +msgid "tun/tap inactivity timeout" +msgstr "czas bezczynności tun/tap" + +msgid "yes (%i)" +msgstr "tak (%i)" + +msgid "« Switch to basic configuration" +msgstr "« Konfiguracja podstawowa" + +#~ msgid "Cryptography" +#~ msgstr "Kryptografia" + +#~ msgid "Networking" +#~ msgstr "Ustawienia sieciowe" + +#~ msgid "Service" +#~ msgstr "Serwis" + +#~ msgid "VPN" +#~ msgstr "VPN" diff --git a/feeds/luci/applications/luci-app-openvpn/po/pt-br/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/pt-br/openvpn.po new file mode 100644 index 0000000..916370e --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/pt-br/openvpn.po @@ -0,0 +1,578 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2014-03-29 23:19+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p', ou 'subnet'" + +msgid "Accept options pushed from server" +msgstr "Aceitar opções enviadas pelo servidor" + +msgid "Add" +msgstr "Adicionar" + +msgid "Add route after establishing connection" +msgstr "Adicionar rota após estabelecimento da conexão" + +msgid "Additional authentication over TLS" +msgstr "Autenticação adicional por TLS" + +msgid "Allow client-to-client traffic" +msgstr "Permitir tráfego entre os clientes" + +msgid "Allow multiple clients with same certificate" +msgstr "Permitir múltiplos clientes com o mesmo certificado" + +msgid "Allow only one session" +msgstr "Permitir apenas uma sessão" + +msgid "Allow remote to change its IP or port" +msgstr "Permitir a um equipamento remoto altere o seu IP ou porta" + +msgid "Allowed maximum of connected clients" +msgstr "Máximo permitido de clientes conectados" + +msgid "Allowed maximum of internal" +msgstr "Máximo permitido internamente para rotas de clientes" + +msgid "Allowed maximum of new connections" +msgstr "Máximo permitido de novas conexões" + +msgid "Append log to file" +msgstr "Acrescentar registos ao arquivo" + +msgid "Authenticate using username/password" +msgstr "Autenticar com usuário/senha" + +msgid "Automatically redirect default route" +msgstr "Redirecionar automaticamente a rota padrão" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" +"Abaixo está uma lista de todas as instâncias OpenVPN configuradas e o seu " +"estado atual" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "Executar o comando/script antes do tun/tap fechar" + +msgid "Certificate authority" +msgstr "Autoridade certificadora" + +msgid "Change process priority" +msgstr "Alterar prioridade do processo" + +msgid "Change to directory before initialization" +msgstr "Mudar para o diretório antes da iniciação" + +msgid "Check peer certificate against a CRL" +msgstr "Verificar certificado do parceiro conta uma CRL" + +msgid "Chroot to directory after initialization" +msgstr "Chroot para o diretório após a iniciação" + +msgid "Client is disabled" +msgstr "Cliente desativado" + +msgid "Configuration category" +msgstr "Categoria da configuração" + +msgid "Configure client mode" +msgstr "Configurar modo cliente" + +msgid "Configure server bridge" +msgstr "Configurar ponte de servidor" + +msgid "Configure server mode" +msgstr "Configurar modo de servidor" + +msgid "Connect through Socks5 proxy" +msgstr "Conectar através de um proxy Socks5" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "Conectar a equipamento remoto através de um proxy HTTP" + +msgid "Connection retry interval" +msgstr "Intervalo de reestabelecimento de conexão" + +msgid "Daemonize after initialization" +msgstr "Entre em segundo plano após a iniciação" + +msgid "Delay n seconds after connection" +msgstr "Atrase n segundos depois da conexão" + +msgid "Delay tun/tap open and up script execution" +msgstr "Retardar o script de abertura e ativação do tun/tap" + +msgid "Diffie Hellman parameters" +msgstr "Parâmetros Diffie-Hellman" + +msgid "Directory for custom client config files" +msgstr "Diretório para configurações personalizadas dos clientes" + +msgid "Disable Paging" +msgstr "Desativar paginação" + +msgid "Disable cipher initialisation vector" +msgstr "Desativar o vetor de iniciação da cifra" + +msgid "Disable options consistency check" +msgstr "Desativar opções de verificação de consistência" + +msgid "Disable replay protection" +msgstr "Desativar proteção contra replay" + +msgid "Do not bind to local address and port" +msgstr "Não ativar no endereço e porta locais" + +msgid "Don't actually execute ifconfig" +msgstr "Não executar ifconfig de verdade" + +msgid "Don't add routes automatically" +msgstr "Não adicionar rotas automaticamente" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "Não colocar em cache as senhas do --askpass ou --auth-user-pass " + +msgid "Don't inherit global push options" +msgstr "Não herdar as opções globais de envio (push)" + +msgid "Don't log timestamps" +msgstr "Não registar a data/hora" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "Não reler a chave entre os reinícios" + +msgid "Don't require client certificate" +msgstr "Não solicitar certificado ao cliente" + +msgid "Don't use adaptive lzo compression" +msgstr "Não usar compressão LZO adaptiva" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "Não avisar quando existirem inconsistências no ifconfig" + +msgid "Echo parameters to log" +msgstr "Escrever parâmetros no registo" + +msgid "Empirically measure MTU" +msgstr "Medir empíricamente o MTU" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "Ativar motor OpenSSL por hardware" + +msgid "Enable Path MTU discovery" +msgstr "Ativar a descoberta do MTU do caminho" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "Ativar modo de encriptação por chave estática (não-TLS)" + +msgid "Enable TLS and assume client role" +msgstr "Ativar TLS e assumir papel de cliente" + +msgid "Enable TLS and assume server role" +msgstr "Ativar TLS e assumir papel de servidor" + +msgid "Enable internal datagram fragmentation" +msgstr "Ativar a fragmentação interna de datagramas" + +msgid "Enable management interface on IP port" +msgstr "Ativar o interface de gestão em IP porta" + +msgid "Enabled" +msgstr "Ativado" + +msgid "Encryption cipher for packets" +msgstr "Cifra de encriptação para pacotes" + +msgid "Execute shell cmd after routes are added" +msgstr "Executar o comando shell após as rotas serem adicionadas" + +msgid "Execute shell command on remote ip change" +msgstr "Executar o comando shell quando existir alteração do IP remoto" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" +"Executado em modo servidor na nova conexão de cliente, enquanto o cliente " +"ainda não é confiável" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" +"Executado em modo servidor quando um endereço/rota IPv4 é adicionao na " +"tabela de roteamento interna do OpenVPN" + +msgid "Exit on TLS negotiation failure" +msgstr "Fechar quando existir falha na negociacao TLS" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "Obter password PEM do terminal de controlo antes de passar a daemon" + +msgid "HMAC authentication for packets" +msgstr "Autenticação HMAC para pacotes" + +msgid "Handling of authentication failures" +msgstr "Gestão de falhas de autenticação" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" +"Diretiva de ajuda para simplificar a expressão --ping e --ping-restart nas " +"configurações de modo servidor" + +msgid "If hostname resolve fails, retry" +msgstr "Se a resolução de nomes falhar, tentar novamente" + +msgid "Instance \"%s\"" +msgstr "Instância \"%s\"" + +msgid "Invalid" +msgstr "Inválido" + +msgid "Keep local IP address on restart" +msgstr "Manter o endereço IP local entre os reinícios" + +msgid "Keep remote IP address on restart" +msgstr "Manter o endereço IP remoto entre os reinícios" + +msgid "Keep tun/tap device open on restart" +msgstr "Manter o dispositivo tun/tap aberto entre os reinícios" + +msgid "Key transition window" +msgstr "Janela para transição de chaves" + +msgid "Limit repeated log messages" +msgstr "Limitar entradas repetidas no registo" + +msgid "Local certificate" +msgstr "Certificado local" + +msgid "Local host name or ip address" +msgstr "Nome do equipamento ou endereço IP local" + +msgid "Local private key" +msgstr "Chave privada local" + +msgid "Major mode" +msgstr "Modo principal" + +msgid "Make tun device IPv6 capable" +msgstr "Tornar o dispositivo tun capaz de IPv6" + +msgid "Maximum number of queued TCP output packets" +msgstr "Número máximo de pacotes TCP na fila de saída" + +msgid "Number of allocated broadcast buffers" +msgstr "Número de buffers de broadcast alocados" + +msgid "Number of lines for log file history" +msgstr "Número de linhas para o histórico do registo" + +msgid "Only accept connections from given X509 name" +msgstr "Aceitar conexões apenas de um dado nome X509" + +msgid "Only process ping timeouts if routes exist" +msgstr "Só processe os estouros de tempo de pings se as rotas existirem" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "Instâncias OpenVPN" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "Otimizar as escritas TUN/TAP/UDP" + +msgid "Output to syslog and do not daemonize" +msgstr "Enviar para o syslog os registos e não vá para segundo plano" + +msgid "Overview" +msgstr "Visão Geral" + +msgid "PKCS#12 file containing keys" +msgstr "Arquivo PKCS#12 com as chaves" + +msgid "Pass environment variables to script" +msgstr "Passar variáveis de ambiente ao script" + +msgid "Persist replay-protection state" +msgstr "Manter persistência da proteção replay" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "Manter ou não o conjunto de subredes" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "Pingar o remoto a cada n segundos sobre a porta TCP/UDP" + +msgid "Policy level over usage of external programs and scripts" +msgstr "Nível da política sobre o uso de programas e scripts externos" + +msgid "Port" +msgstr "Porta" + +msgid "Protocol" +msgstr "Protocolo" + +msgid "Proxy timeout in seconds" +msgstr "Tempo limite do proxy em segundos" + +msgid "Push an ifconfig option to remote" +msgstr "Enviar uma opção ifconfig ao remoto" + +msgid "Push options to peer" +msgstr "Enviar opções ao remoto" + +msgid "Query management channel for private key" +msgstr "Solicitar chave privada ao canal de gestão" + +msgid "Randomly choose remote server" +msgstr "Escolher o server remoto aleatoriamente" + +msgid "Refuse connection if no custom client config" +msgstr "Recusar conexões de clientes que não tenham configuração personalizada" + +msgid "Remap SIGUSR1 signals" +msgstr "Remapear os sinais SIGUSR1" + +msgid "Remote host name or ip address" +msgstr "Nome do equipamento ou endereço IP remoto" + +msgid "Remote ping timeout" +msgstr "Tempo limite do ping remoto" + +msgid "Renegotiate data chan. key after bytes" +msgstr "Renegociar chave do canal de dados após n bytes" + +msgid "Renegotiate data chan. key after packets" +msgstr "Renegociar chave do canal de dados após n pacotes" + +msgid "Renegotiate data chan. key after seconds" +msgstr "Renegociar chave do canal de dados após n segundos" + +msgid "Replay protection sliding window size" +msgstr "Tamanho da janela de proteção conta replay" + +msgid "Require explicit designation on certificate" +msgstr "Requerer designação específica no certificado" + +msgid "Require explicit key usage on certificate" +msgstr "Requerer que o uso da chave seja explicitado no certificado" + +msgid "Restart after remote ping timeout" +msgstr "Reiniciar após estouro do tempo do ping remoto" + +msgid "Retransmit timeout on TLS control channel" +msgstr "Estouro de tempo de retransmissão no canal de controle TLS" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "Tentar infinitamente a conexão quando existirem erros de proxy Socks" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "Tentar infinitamente a conexão quando existirem erros de proxy Socks" + +msgid "Route subnet to client" +msgstr "Encaminhar rota da subrede para o cliente" + +msgid "Run as an inetd or xinetd server" +msgstr "Executar através do inetd ou xinetd" + +msgid "Run script cmd on client connection" +msgstr "Executar script quando o cliente conectar" + +msgid "Run script cmd on client disconnection" +msgstr "Executar script quando o cliente desconectar" + +msgid "Run up/down scripts for all restarts" +msgstr "Executar scripts de subida/descida para todos os reinícios" + +msgid "Send notification to peer on disconnect" +msgstr "Notificar parceiro remoto ao desconectar" + +msgid "Set GID to group" +msgstr "Usar o GID do grupo" + +msgid "Set TCP/UDP MTU" +msgstr "Definir o MTU TCP/UDP" + +msgid "Set UID to user" +msgstr "Usar o UID do usuário" + +msgid "Set aside a pool of subnets" +msgstr "Reservar um conjunto de subredes" + +msgid "Set extended HTTP proxy options" +msgstr "Definir opções extendidas para o proxy HTTP" + +msgid "Set output verbosity" +msgstr "Definir detalhamento do registo" + +msgid "Set size of real and virtual address hash tables" +msgstr "Definir tamanho das tabelas hash de endereços reais e virtuais" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "Definir o tamanho do buffer de recepção TCP/UDP" + +msgid "Set the TCP/UDP send buffer size" +msgstr "Definir o tamanho do buffer de envio TCP/UDP" + +msgid "Set tun/tap TX queue length" +msgstr "Definir o tamanho da fila de transmissão tun/tap" + +msgid "Set tun/tap adapter parameters" +msgstr "Definir parâmetros do adaptador TUN/TAP" + +msgid "Set tun/tap device MTU" +msgstr "Definir o MTU do dispositivo tun/tap" + +msgid "Set tun/tap device overhead" +msgstr "Definir o overhead do dispositivo tun/tap" + +msgid "Set upper bound on TCP MSS" +msgstr "Definir teto do MSS TCP" + +msgid "Shaping for peer bandwidth" +msgstr "Restringir a largura de banda ao parceiro" + +msgid "Shell cmd to execute after tun device open" +msgstr "Comando shell para executar após abertura do dispositivo tun" + +msgid "Shell cmd to run after tun device close" +msgstr "Comando shell para executar após o fechamento do dispositivo tun" + +msgid "Shell command to verify X509 name" +msgstr "Comando shell para verificar o nome do X509" + +msgid "Silence the output of replay warnings" +msgstr "Silenciar a saída dos avisos de replay" + +msgid "Size of cipher key" +msgstr "Tamanho da chave de cifragem" + +msgid "Specify a default gateway for routes" +msgstr "Especificar uma roteador padrão para as rotas" + +msgid "Start OpenVPN in a hibernating state" +msgstr "Iniciar o OpenVPN em estado de hibernação" + +msgid "Start/Stop" +msgstr "Iniciar/Parar" + +msgid "Started" +msgstr "Iniciado" + +msgid "Status file format version" +msgstr "Versão de formato do arquivo de estado" + +msgid "Switch to advanced configuration »" +msgstr "Mudar para configuração avançada »" + +msgid "TCP/UDP port # for both local and remote" +msgstr "Porta TCP/UDP tanto para local e remoto" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "Porta TCP/UDP para local (padrão=1194)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "Porta TCP/UDP para remoto (padrão=1194)" + +msgid "TLS cipher" +msgstr "Cifra TLS" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "Encaminhe TOS (aplicável apenas a IPv4)" + +msgid "Temporary directory for client-connect return file" +msgstr "Diretório temporário para arquivo de retorno de conexão-cliente" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "Janela temporal para troca de chaves" + +msgid "Type of used device" +msgstr "Tipo de dispositivo utilizado" + +msgid "Use fast LZO compression" +msgstr "Usar compressão LZO rápida" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "Usar endereços individuais em vez de subredes /30" + +msgid "Use protocol" +msgstr "Usar protocolo" + +msgid "Use tun/tap device node" +msgstr "Utilizar dispositivo tun/tap" + +msgid "Use username as common name" +msgstr "Usar o nome do usuário como 'common name' (CN)" + +msgid "Write log to file" +msgstr "Escrever registo no arquivo" + +msgid "Write process ID to file" +msgstr "Escrever PID no arquivo" + +msgid "Write status to file every n seconds" +msgstr "Escrever estado para arquivo a cada n segundos" + +msgid "no" +msgstr "não" + +msgid "tun/tap device" +msgstr "Dispositivo tun/tap" + +msgid "tun/tap inactivity timeout" +msgstr "Tempo limite de inatividade tun/tap" + +msgid "yes (%i)" +msgstr "sim (%i)" + +msgid "« Switch to basic configuration" +msgstr "« Mudar para configuração básica" + +#~ msgid "Cryptography" +#~ msgstr "Criptografia" + +# Which context? +#~ msgid "Networking" +#~ msgstr "Rede" + +#~ msgid "Service" +#~ msgstr "Serviço" + +#~ msgid "VPN" +#~ msgstr "VPN" + +#~ msgid "openvpn_%s" +#~ msgstr "openvpn_%s" + +#~ msgid "openvpn_%s_desc" +#~ msgstr "openvpn_%s_desc" diff --git a/feeds/luci/applications/luci-app-openvpn/po/pt/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/pt/openvpn.po new file mode 100644 index 0000000..95c50a5 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/pt/openvpn.po @@ -0,0 +1,571 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-06-03 13:43+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p', ou 'subnet'" + +msgid "Accept options pushed from server" +msgstr "Aceitar opções enviadas pelo servidor" + +msgid "Add" +msgstr "Adicionar" + +msgid "Add route after establishing connection" +msgstr "Adicionar rota após estabelecimento da ligação" + +msgid "Additional authentication over TLS" +msgstr "Autenticação adicional por TLS" + +msgid "Allow client-to-client traffic" +msgstr "Permitir tráfego cliente-a-cliente" + +msgid "Allow multiple clients with same certificate" +msgstr "Permitir multiplos clientes com o mesmo certificado" + +msgid "Allow only one session" +msgstr "Permitir apenas uma sessão" + +msgid "Allow remote to change its IP or port" +msgstr "Permitir a um host remoto que altere o seu IP ou porta" + +msgid "Allowed maximum of connected clients" +msgstr "Máximo permitido de clientes ligados" + +msgid "Allowed maximum of internal" +msgstr "Máximo permitido internamente para rotas de clientes" + +msgid "Allowed maximum of new connections" +msgstr "Maximo permitido de novas ligações" + +msgid "Append log to file" +msgstr "Acrescentar registos ao ficheiro" + +msgid "Authenticate using username/password" +msgstr "Autenticar com username/password" + +msgid "Automatically redirect default route" +msgstr "Redireccionar automaticamente a rota pre-definida" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" +"Abaixo está uma lista de todas as instâncias OpenVPN configuradas e o seu " +"estado actual" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "Executar o comando/script antes do fecho tun/tap" + +msgid "Certificate authority" +msgstr "Autoridade certificadora" + +msgid "Change process priority" +msgstr "Alterar prioridade do processo" + +msgid "Change to directory before initialization" +msgstr "Mudar para o directório antes da inicialização" + +msgid "Check peer certificate against a CRL" +msgstr "Verificar certificado do remoto conta uma CRL" + +msgid "Chroot to directory after initialization" +msgstr "Chroot para o directorio apos a inicialização" + +msgid "Client is disabled" +msgstr "Cliente desativado" + +msgid "Configuration category" +msgstr "Categoria da configuração" + +msgid "Configure client mode" +msgstr "Configurar modo cliente" + +msgid "Configure server bridge" +msgstr "Configurar bridge de servidor" + +msgid "Configure server mode" +msgstr "Configurar modo de servidor" + +msgid "Connect through Socks5 proxy" +msgstr "Ligar através de um proxy Socks5" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "Ligar ao host remoto através de um proxy HTTP" + +msgid "Connection retry interval" +msgstr "Intervalo de reestabelecimento de ligação" + +msgid "Daemonize after initialization" +msgstr "Passar a daemon após a inicialização" + +msgid "Delay n seconds after connection" +msgstr "Aguardar n segundos após a ligação" + +msgid "Delay tun/tap open and up script execution" +msgstr "Retardar o script de abertura/ativação tun/tap" + +msgid "Diffie Hellman parameters" +msgstr "Parametros Diffie-Hellman" + +msgid "Directory for custom client config files" +msgstr "Directório para configurações personalizadas dos clientes" + +msgid "Disable Paging" +msgstr "Desativar Paging" + +msgid "Disable cipher initialisation vector" +msgstr "Desativar o vector de inicialização da cifra" + +msgid "Disable options consistency check" +msgstr "Desativar opções de verificação de consistência" + +msgid "Disable replay protection" +msgstr "Desativar protecção contra replay" + +msgid "Do not bind to local address and port" +msgstr "Não vincular o endereço e porta locais" + +msgid "Don't actually execute ifconfig" +msgstr "Não executar ifconfig" + +msgid "Don't add routes automatically" +msgstr "Não adicionar rotas automaticamente" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "Não colocar em cache as passwords --askpass ou --auth-user-pass " + +msgid "Don't inherit global push options" +msgstr "Não herdar as opções globais de envio (push)" + +msgid "Don't log timestamps" +msgstr "Não registar timestamps" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "Não reler a chave entre reinicios" + +msgid "Don't require client certificate" +msgstr "Não solicitar certificado ao cliente" + +msgid "Don't use adaptive lzo compression" +msgstr "Não usar compressão LZO adaptiva" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "Não avisar quando existirem inconsistencias no ifconfig" + +msgid "Echo parameters to log" +msgstr "Escrever parametros no registo" + +msgid "Empirically measure MTU" +msgstr "Medição empírica de MTU" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "Ativar motor OpenSSL por hardware" + +msgid "Enable Path MTU discovery" +msgstr "Ativar a descoberta do MTU do caminho" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "Ativar modo de encriptação por chave estática (não-TLS)" + +msgid "Enable TLS and assume client role" +msgstr "Activar TLS e assumir papel de cliente" + +msgid "Enable TLS and assume server role" +msgstr "Activar TLS e assumir papel de servidor" + +msgid "Enable internal datagram fragmentation" +msgstr "Activar a fragmentação interna de datagramas" + +msgid "Enable management interface on IP port" +msgstr "Activar o interface de gestão em IP porta" + +msgid "Enabled" +msgstr "Activado" + +msgid "Encryption cipher for packets" +msgstr "Cifra de encriptação para pacotes" + +msgid "Execute shell cmd after routes are added" +msgstr "Executar o comando shell após as rotas serem adicionadas" + +msgid "Execute shell command on remote ip change" +msgstr "Executar o comando shell quando existir alteração do IP remoto" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" +"Executado em modo de servidor em novas ligações de cliente, quando o cliente " +"ainda não é de confiável" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" +"Executado em modo de servidor quando um endereço IPv4/rota ou endereço MAC é " +"adicionado à tabela interna de roteamento do OpernVPN." + +msgid "Exit on TLS negotiation failure" +msgstr "Fechar quando existir falha na negociação TLS" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "Obter password PEM do terminal de controlo antes de passar a daemon" + +msgid "HMAC authentication for packets" +msgstr "Autenticação HMAC para pacotes" + +msgid "Handling of authentication failures" +msgstr "Gestão de falhas de autenticação" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" +"Directiva auxiliar para simplificar a expressão de --ping e --ping-restart " +"nas configurações do modo servidor" + +msgid "If hostname resolve fails, retry" +msgstr "Se a resolução de nomes falhar, tentar novamente" + +msgid "Instance \"%s\"" +msgstr "Instância \"%s\"" + +msgid "Invalid" +msgstr "Inválido" + +msgid "Keep local IP address on restart" +msgstr "Manter o endereço IP local entre reinicios" + +msgid "Keep remote IP address on restart" +msgstr "Manter o endereço IP remoto entre reinicios" + +msgid "Keep tun/tap device open on restart" +msgstr "Manter o dispositivo tun/tap aberto entre reinicios" + +msgid "Key transition window" +msgstr "Janela para transição de chaves" + +msgid "Limit repeated log messages" +msgstr "Limitar repetição de entradas no registo" + +msgid "Local certificate" +msgstr "Certificado local" + +msgid "Local host name or ip address" +msgstr "Hostname ou endereço IP local" + +msgid "Local private key" +msgstr "Chave privada local" + +msgid "Major mode" +msgstr "Modo principal" + +msgid "Make tun device IPv6 capable" +msgstr "Tornar o dispositivo tun capaz de IPv6" + +msgid "Maximum number of queued TCP output packets" +msgstr "Maximo de pacotes TCP na queue de output" + +msgid "Number of allocated broadcast buffers" +msgstr "Numero de buffers de broadcast alocados" + +msgid "Number of lines for log file history" +msgstr "Numero de linhas para o historico do registo" + +msgid "Only accept connections from given X509 name" +msgstr "Aceitar ligações apenas de um dado nome X509" + +msgid "Only process ping timeouts if routes exist" +msgstr "Só processar timeouts de pings se existirem rotas" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "Instâncias OpenVPN" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "Optimizar as escritas TUN/TAP/UDP" + +msgid "Output to syslog and do not daemonize" +msgstr "Registos para o syslog e não passar a daemon" + +msgid "Overview" +msgstr "Visão Geral" + +msgid "PKCS#12 file containing keys" +msgstr "Ficheiro PKCS#12 com chaves" + +msgid "Pass environment variables to script" +msgstr "Passar variaveis de ambiente ao script" + +msgid "Persist replay-protection state" +msgstr "Manter persistência da protecção replay" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "Manter ou não o conjunto de subredes" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "Pingar o remoto a cada n segundos sobre a porta TCP/UDP" + +msgid "Policy level over usage of external programs and scripts" +msgstr "Nível da política sobre o uso de programas externos e scripts" + +msgid "Port" +msgstr "Porta" + +msgid "Protocol" +msgstr "Protocolo" + +msgid "Proxy timeout in seconds" +msgstr "Timeout do proxy em segundos" + +msgid "Push an ifconfig option to remote" +msgstr "Enviar uma opção ifconfig ao remoto" + +msgid "Push options to peer" +msgstr "Enviar opções ao remoto" + +msgid "Query management channel for private key" +msgstr "Solicitar chave privada ao canal de gestão" + +msgid "Randomly choose remote server" +msgstr "Escolher o server remoto aleatoriamente" + +msgid "Refuse connection if no custom client config" +msgstr "Recusar ligações de clientes que não tenham configurações " + +msgid "Remap SIGUSR1 signals" +msgstr "Mapear os sinais SIGUSR1" + +msgid "Remote host name or ip address" +msgstr "Hostname endereço IP remoto" + +msgid "Remote ping timeout" +msgstr "Timeout do ping remoto" + +msgid "Renegotiate data chan. key after bytes" +msgstr "Renegociar chave do canal de dados após n bytes " + +msgid "Renegotiate data chan. key after packets" +msgstr "Renegociar chave do canal de dados após n pacotes" + +msgid "Renegotiate data chan. key after seconds" +msgstr "Renegociar chave do canal de dados após n segundos" + +msgid "Replay protection sliding window size" +msgstr "Tamanho da janela de protecção conta replay" + +msgid "Require explicit designation on certificate" +msgstr "Requerer designação específica no certificado" + +msgid "Require explicit key usage on certificate" +msgstr "Requerer utilização explicita de utilização de chave no certificado" + +msgid "Restart after remote ping timeout" +msgstr "Reiniciar após timeout do ping remoto" + +msgid "Retransmit timeout on TLS control channel" +msgstr "Timeout de retransmissão no canal de controlo TLS" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "Tentar infinitamente sempre que existam erros de proxy HTTP" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "Tentar continuamente a ligação quando existirem erros de proxy Socks" + +msgid "Route subnet to client" +msgstr "Encaminhar rota da subrede para o cliente" + +msgid "Run as an inetd or xinetd server" +msgstr "Executar via inetd ou xinetd" + +msgid "Run script cmd on client connection" +msgstr "Executar script quando o cliente ligar" + +msgid "Run script cmd on client disconnection" +msgstr "Executar script quando o cliente desligar" + +msgid "Run up/down scripts for all restarts" +msgstr "Executar scripts de abertura/activação para todos os reinicios" + +msgid "Send notification to peer on disconnect" +msgstr "Notificar remoto ao desligar" + +msgid "Set GID to group" +msgstr "Assumir GID para o grupo" + +msgid "Set TCP/UDP MTU" +msgstr "Definir o MTU TCP/UDP" + +msgid "Set UID to user" +msgstr "Assumir UID para o utilizador" + +msgid "Set aside a pool of subnets" +msgstr "Reservar um conjunto de subredes" + +msgid "Set extended HTTP proxy options" +msgstr "Definir opções extra para o proxy HTTP" + +msgid "Set output verbosity" +msgstr "Definir verbosidade do registo" + +msgid "Set size of real and virtual address hash tables" +msgstr "Definir tamanho das tabelas hash de endereços reais e virtuais" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "Definir o buffer de recepção TCP/UDP" + +msgid "Set the TCP/UDP send buffer size" +msgstr "Definir o buffer de envio TCP/UDP" + +msgid "Set tun/tap TX queue length" +msgstr "Definir o tamanho da queue de transmissão tun/tap" + +msgid "Set tun/tap adapter parameters" +msgstr "Definir os parâmetros do adaptador tun/tap" + +msgid "Set tun/tap device MTU" +msgstr "Definir o MTU do dispositivo tun/tap" + +msgid "Set tun/tap device overhead" +msgstr "Definir o overhead do dispositivo tun/tap" + +msgid "Set upper bound on TCP MSS" +msgstr "Definir tecto do MSS TCP" + +msgid "Shaping for peer bandwidth" +msgstr "Restringir a largura de banda ao remoto" + +msgid "Shell cmd to execute after tun device open" +msgstr "Comando shell a executar após abertura do dispositivo tun" + +msgid "Shell cmd to run after tun device close" +msgstr "Comando shell a executar após fecho do dispositivo tun" + +msgid "Shell command to verify X509 name" +msgstr "Comando shell para verificar o nome X509" + +msgid "Silence the output of replay warnings" +msgstr "Silenciar o output dos avisos de replay" + +msgid "Size of cipher key" +msgstr "Tamanho da chave de cifra" + +msgid "Specify a default gateway for routes" +msgstr "Especificar uma gateway para as rotas" + +msgid "Start OpenVPN in a hibernating state" +msgstr "Iniciar o OpenVPN em estado de hibernação" + +msgid "Start/Stop" +msgstr "Iniciar/Parar" + +msgid "Started" +msgstr "Iniciado" + +msgid "Status file format version" +msgstr "Versão de formato do ficheiro de estado" + +msgid "Switch to advanced configuration »" +msgstr "Mudar para configuração avançada" + +msgid "TCP/UDP port # for both local and remote" +msgstr "Porta TCP/UDP para local e remoto" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "Porta TCP/UDP para local (predefinição=1194)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "Porta TCP/UDP para remoto (predefinição=1194)" + +msgid "TLS cipher" +msgstr "Cifra TLS" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "Passthrough TOS (aplicavel apenas a IPv4)" + +msgid "Temporary directory for client-connect return file" +msgstr "Directório temporário para ficheiro de retorno de ligação-cliente" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "Janela temporal para troca de chaves" + +msgid "Type of used device" +msgstr "Tipo de dispositivo utilizado" + +msgid "Use fast LZO compression" +msgstr "Usar compressão LZO rápida" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "Usar endereços individuais em vez de subredes /30" + +msgid "Use protocol" +msgstr "Usar protocolo" + +msgid "Use tun/tap device node" +msgstr "Utilizar dispositivo tun/tap" + +msgid "Use username as common name" +msgstr "Usar o username como nome comum" + +msgid "Write log to file" +msgstr "Escrever registo para o ficheiro" + +msgid "Write process ID to file" +msgstr "Escrever PID no ficheiro" + +msgid "Write status to file every n seconds" +msgstr "Escrever estado para ficheiro a cada n segundos" + +msgid "no" +msgstr "não" + +msgid "tun/tap device" +msgstr "Dispositivo tun/tap" + +msgid "tun/tap inactivity timeout" +msgstr "Timeout de inactividade tun/tap" + +msgid "yes (%i)" +msgstr "sim (%i)" + +msgid "« Switch to basic configuration" +msgstr "Mudar para configuração básica" + +#~ msgid "Cryptography" +#~ msgstr "Criptografia" + +#~ msgid "Networking" +#~ msgstr "Rede" + +#~ msgid "Service" +#~ msgstr "Serviço" + +#~ msgid "VPN" +#~ msgstr "VPN" diff --git a/feeds/luci/applications/luci-app-openvpn/po/ro/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/ro/openvpn.po new file mode 100644 index 0000000..4a7a5b7 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/ro/openvpn.po @@ -0,0 +1,548 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "" + +msgid "Allow multiple clients with same certificate" +msgstr "" + +msgid "Allow only one session" +msgstr "" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN instances" +msgstr "" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "" + +msgid "« Switch to basic configuration" +msgstr "" diff --git a/feeds/luci/applications/luci-app-openvpn/po/ru/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/ru/openvpn.po new file mode 100644 index 0000000..00e585c --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/ru/openvpn.po @@ -0,0 +1,587 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: openvpn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-09-06 10:01+0200\n" +"Last-Translator: datasheet \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p' или 'subnet'" + +msgid "Accept options pushed from server" +msgstr "Принимать опции, отправленные с сервера" + +msgid "Add" +msgstr "Добавить" + +msgid "Add route after establishing connection" +msgstr "Добавить маршрут после установки соединения" + +msgid "Additional authentication over TLS" +msgstr "Дополнительная аутентификация через TLS" + +msgid "Allow client-to-client traffic" +msgstr "Разрешить общение клиентов друг с другом" + +msgid "Allow multiple clients with same certificate" +msgstr "Разрешить несколько клиентов с одним сертификатом" + +msgid "Allow only one session" +msgstr "Разрешить только одну сессию" + +msgid "Allow remote to change its IP or port" +msgstr "Позволить удалённому хосту изменять IP-адрес или порт" + +msgid "Allowed maximum of connected clients" +msgstr "Разрешённое максимальное количество подключенных клиентов" + +msgid "Allowed maximum of internal" +msgstr "Разрешённое максимальное количество внутренних" + +msgid "Allowed maximum of new connections" +msgstr "Разрешённое максимальное количество новых соединений" + +msgid "Append log to file" +msgstr "Дописать журнал в файл" + +msgid "Authenticate using username/password" +msgstr "Аутентификация с использованием имени пользователя и пароля" + +msgid "Automatically redirect default route" +msgstr "Автоматически перенаправлять маршруты по умолчанию" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "Список настроенных процессов OpenVPN и их текущее состояние" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "Команда/скрипт, запускаем(ая/ый) перед закрытием TUN/TAP" + +msgid "Certificate authority" +msgstr "Центр сертификации" + +msgid "Change process priority" +msgstr "Изменить приоритет процесса" + +msgid "Change to directory before initialization" +msgstr "Перейти в указанную директорию перед инициализацией" + +msgid "Check peer certificate against a CRL" +msgstr "Проверить сертификат пира в CRL" + +msgid "Chroot to directory after initialization" +msgstr "Выполнить chroot на указанную директорию после инициализации" + +msgid "Client is disabled" +msgstr "Клиент выключен" + +msgid "Configuration category" +msgstr "Категория конфигурации" + +msgid "Configure client mode" +msgstr "Настроить режим клиента" + +msgid "Configure server bridge" +msgstr "Настроить мост" + +msgid "Configure server mode" +msgstr "Настроить режим сервера" + +msgid "Connect through Socks5 proxy" +msgstr "Соединяться используя Socks5-прокси" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "Подключиться к удалённому хосту через HTTP-прокси" + +msgid "Connection retry interval" +msgstr "Интервал между попытками подключения" + +msgid "Daemonize after initialization" +msgstr "Перейти в режим демона после инициализации" + +msgid "Delay n seconds after connection" +msgstr "Задержка n секунд после подключения" + +msgid "Delay tun/tap open and up script execution" +msgstr "" +"Использовать задержку перед открытием устройства tun и выполнением скрипта" + +msgid "Diffie Hellman parameters" +msgstr "Параметры алгоритма DH" + +msgid "Directory for custom client config files" +msgstr "Директория пользовательских файлов конфигурации клиентов" + +msgid "Disable Paging" +msgstr "Выключить пейджинг" + +msgid "Disable cipher initialisation vector" +msgstr "Выключить вектор инициализации шифра" + +msgid "Disable options consistency check" +msgstr "Выключить проверку целостности опций" + +msgid "Disable replay protection" +msgstr "Отключить проверку повторов" + +msgid "Do not bind to local address and port" +msgstr "Не выполнять привязку к локальному адресу и порту" + +msgid "Don't actually execute ifconfig" +msgstr "Не выполнять ifconfig" + +msgid "Don't add routes automatically" +msgstr "Не добавлять маршруты автоматически" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "Не кешировать пароли --askpass или --auth-user-pass" + +#, fuzzy +msgid "Don't inherit global push options" +msgstr "Не наследовать глобальные параметры push" + +msgid "Don't log timestamps" +msgstr "Не записывать отметки времени в журнал" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "Не считывать заново ключ при перезапуске" + +msgid "Don't require client certificate" +msgstr "Не требовать сертификат у клиента" + +msgid "Don't use adaptive lzo compression" +msgstr "Не использовать адаптивное сжатие LZO" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "Не извещать об ошибках ifconfig" + +msgid "Echo parameters to log" +msgstr "Выводить параметры в журнал" + +msgid "Empirically measure MTU" +msgstr "Эмпирически измерять MTU" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "Включить поддержку аппаратного шифрования OpenSSL" + +msgid "Enable Path MTU discovery" +msgstr "Включить обнаружение пути MTU (PMTUD)" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "Включить шифрование с постоянным ключом (не TLS)" + +msgid "Enable TLS and assume client role" +msgstr "Включить TLS в режиме клиента" + +msgid "Enable TLS and assume server role" +msgstr "Включить TLS в режиме сервера" + +msgid "Enable internal datagram fragmentation" +msgstr "Включить внутреннюю фрагментацию дейтаграмм" + +msgid "Enable management interface on IP port" +msgstr "Включить интерфейс управления на IP порту" + +msgid "Enabled" +msgstr "Включено" + +msgid "Encryption cipher for packets" +msgstr "Шифрование для пакетов" + +msgid "Execute shell cmd after routes are added" +msgstr "Выполнить shell-команду после добавления маршрутов" + +msgid "Execute shell command on remote ip change" +msgstr "Выполнить shell-команду при изменении IP-адреса удалённого хоста" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" +"Выполняется в режиме сервера при появлении новых клиентских соединений, если " +"к клиенту ещё нет доверия" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" +"Выполняется в режиме сервера, когда адрес/маршрут IPv4 или MAC-адрес " +"добавлен в таблицу маршрутизации OpenVPN" + +msgid "Exit on TLS negotiation failure" +msgstr "Выйти при ошибке согласования TLS" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "Получить пароль PEM от управляющей консоли перед уходом в фон" + +msgid "HMAC authentication for packets" +msgstr "HMAC-аутентификация для пакетов" + +msgid "Handling of authentication failures" +msgstr "Обработка ошибок аутентификации" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" +"Вспомогательная директива для упрощения выражений --ping и --ping-restart в " +"конфигурациях серверного режима" + +msgid "If hostname resolve fails, retry" +msgstr "Пытаться заново подключиться при ошибке определения имени хоста" + +msgid "Instance \"%s\"" +msgstr "Процесс \"%s\"" + +msgid "Invalid" +msgstr "Неверный" + +msgid "Keep local IP address on restart" +msgstr "Не изменять локальный IP-адрес при перезапуске" + +msgid "Keep remote IP address on restart" +msgstr "Не изменять удалённый IP-адрес при перезапуске" + +msgid "Keep tun/tap device open on restart" +msgstr "Не закрывать устройство tun/tap при перезапуске" + +# Может "Окно перехода ключей", надо смотреть контекст +#, fuzzy +msgid "Key transition window" +msgstr "Окно передачи ключей" + +msgid "Limit repeated log messages" +msgstr "Ограничить повторяющиеся сообщения журнала" + +msgid "Local certificate" +msgstr "Локальный сертификат" + +msgid "Local host name or ip address" +msgstr "Имя локального хоста или IP-адрес" + +msgid "Local private key" +msgstr "Локальный секретный ключ" + +msgid "Major mode" +msgstr "Основной режим" + +msgid "Make tun device IPv6 capable" +msgstr "Включить поддержку IPv6 для устройства tun" + +msgid "Maximum number of queued TCP output packets" +msgstr "Максимальное количество исходящих TCP-пакетов в очереди" + +msgid "Number of allocated broadcast buffers" +msgstr "Количество выделенных широковещательных буферов" + +msgid "Number of lines for log file history" +msgstr "Количество строк в файле журнала" + +msgid "Only accept connections from given X509 name" +msgstr "Принимать соединения только от данного имени X509" + +msgid "Only process ping timeouts if routes exist" +msgstr "" +"Обрабатывать таймаут ping-запросов только в случае, когда существует " +"необходимый маршрут" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "Процессы OpenVPN" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "Оптимизировать запись TUN/TAP/UDP" + +msgid "Output to syslog and do not daemonize" +msgstr "Выводить сообщения в системный журнал и не переходить в фоновый режим" + +msgid "Overview" +msgstr "Обзор" + +msgid "PKCS#12 file containing keys" +msgstr "Файл с ключами PKCS#12" + +msgid "Pass environment variables to script" +msgstr "Передавать переменные окружения скрипту" + +msgid "Persist replay-protection state" +msgstr "Сохранять состояние защищённого ответа" + +#, fuzzy +msgid "Persist/unpersist ifconfig-pool" +msgstr "Сохранять/не сохранять пул ifconfig" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "Выполнять ping каждые n секунд, используя порт TCP/UDP" + +msgid "Policy level over usage of external programs and scripts" +msgstr "Уровень безопасности для внешних программ и скриптов" + +msgid "Port" +msgstr "Порт" + +msgid "Protocol" +msgstr "Протокол" + +msgid "Proxy timeout in seconds" +msgstr "Таймаут прокси (сек.)" + +msgid "Push an ifconfig option to remote" +msgstr "Передавать опцию ifconfig удалённой стороне" + +msgid "Push options to peer" +msgstr "Передавать опции пиру" + +msgid "Query management channel for private key" +msgstr "Запросить канал управления для закрытого ключа" + +msgid "Randomly choose remote server" +msgstr "Случайно выбирать удалённый сервер" + +msgid "Refuse connection if no custom client config" +msgstr "" +"Разорвать соединение, если пользовательская конфигурация клиента отсутствует" + +msgid "Remap SIGUSR1 signals" +msgstr "Обрабатывать сигнал SIGUSR1" + +msgid "Remote host name or ip address" +msgstr "Имя удалённого хоста или IP-адрес" + +msgid "Remote ping timeout" +msgstr "Таймаут удалённых ping-запросов" + +msgid "Renegotiate data chan. key after bytes" +msgstr "Пересогласовать ключ канала данных после кол-ва байт" + +msgid "Renegotiate data chan. key after packets" +msgstr "Пересогласовать ключ канала данных после кол-ва пакетов" + +msgid "Renegotiate data chan. key after seconds" +msgstr "Пересогласовать ключ канала данных после кол-ва секунд" + +#, fuzzy +msgid "Replay protection sliding window size" +msgstr "Размер скользящего окна защиты от повторов" + +msgid "Require explicit designation on certificate" +msgstr "Требовать явного указания в сертификате" + +msgid "Require explicit key usage on certificate" +msgstr "Требовать явного использования ключа в сертификате" + +msgid "Restart after remote ping timeout" +msgstr "Начать заново после таймаута ping-запроса" + +msgid "Retransmit timeout on TLS control channel" +msgstr "Таймаут повторной отправки канала управления TLS" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "Постоянно пытаться заново подключиться при ошибке HTTP-прокси" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "Постоянно пытаться заново подключиться при ошибке Socks-прокси" + +msgid "Route subnet to client" +msgstr "Перенаправить подсеть клиенту" + +msgid "Run as an inetd or xinetd server" +msgstr "Запустить как inetd- или xinetd-сервер" + +msgid "Run script cmd on client connection" +msgstr "Выполнить скрипт при подключении клиента" + +msgid "Run script cmd on client disconnection" +msgstr "Выполнить скрипт при отключении клиента" + +msgid "Run up/down scripts for all restarts" +msgstr "Запускать up/down скрипты для всех перезапусков" + +msgid "Send notification to peer on disconnect" +msgstr "Послать уведомление пиру при разъединении" + +msgid "Set GID to group" +msgstr "Установить GID группе" + +msgid "Set TCP/UDP MTU" +msgstr "Установить TCP/UDP MTU" + +msgid "Set UID to user" +msgstr "Установить UID пользователю" + +#, fuzzy +msgid "Set aside a pool of subnets" +msgstr "Установить пул подсетей" + +msgid "Set extended HTTP proxy options" +msgstr "Установить расширенные настройки HTTP-прокси" + +msgid "Set output verbosity" +msgstr "Установить уровень вывода" + +msgid "Set size of real and virtual address hash tables" +msgstr "Установить размер реальной и виртуальной хеш-таблиц" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "Установить размер буфера приёма TCP/UDP" + +msgid "Set the TCP/UDP send buffer size" +msgstr "Установить размер буфера передачи TCP/UDP" + +msgid "Set tun/tap TX queue length" +msgstr "Установить размер очереди передачи tun/tap" + +msgid "Set tun/tap adapter parameters" +msgstr "Установить параметры адаптера tun/tap" + +msgid "Set tun/tap device MTU" +msgstr "Установить MTU для tun/tap устройства" + +msgid "Set tun/tap device overhead" +msgstr "Установить накладные расходы tun/tap устройства" + +msgid "Set upper bound on TCP MSS" +msgstr "Установить верхнюю границу для TCP MSS" + +msgid "Shaping for peer bandwidth" +msgstr "Шейпинг пропускной способности пира" + +msgid "Shell cmd to execute after tun device open" +msgstr "Выполнить shell-команду после открытия устройства tun" + +msgid "Shell cmd to run after tun device close" +msgstr "Выполнить shell-команду после закрытия устройства tun" + +msgid "Shell command to verify X509 name" +msgstr "Shell-команда для проверки имени X509" + +msgid "Silence the output of replay warnings" +msgstr "Заглушить вывод предупреждений повторов" + +msgid "Size of cipher key" +msgstr "Размер ключа шифрования" + +msgid "Specify a default gateway for routes" +msgstr "Установить шлюз по умолчанию для маршрутов" + +msgid "Start OpenVPN in a hibernating state" +msgstr "Запустить OpenVPN в спящем режиме" + +msgid "Start/Stop" +msgstr "Старт/Стоп" + +msgid "Started" +msgstr "Запущено" + +msgid "Status file format version" +msgstr "Версия формата статусного файла" + +msgid "Switch to advanced configuration »" +msgstr "Перейти к расширенным настройкам »" + +msgid "TCP/UDP port # for both local and remote" +msgstr "Номер локального и удалённого TCP/UDP порта" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "Номер локального TCP/UDP порта (1194 по умолчанию)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "Номер удалённого TCP/UDP порта (1194 по умолчанию)" + +msgid "TLS cipher" +msgstr "Шифр TLS" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "Пропуск ToS (только для IPv4)" + +msgid "Temporary directory for client-connect return file" +msgstr "Временная директория для файла возрата подключения клиента" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "Временное окно для обмена ключами" + +msgid "Type of used device" +msgstr "Тип используемого устройства" + +msgid "Use fast LZO compression" +msgstr "Использовать быстрое сжатие LZO" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "Использовать адреса вместо подсетей /30" + +msgid "Use protocol" +msgstr "Использовать протокол" + +msgid "Use tun/tap device node" +msgstr "Использовать файл устройства tun/tap" + +msgid "Use username as common name" +msgstr "Использовать имя пользователя как общее имя" + +msgid "Write log to file" +msgstr "Записать журнал в файл" + +msgid "Write process ID to file" +msgstr "Записать ID процесса в файл" + +msgid "Write status to file every n seconds" +msgstr "Записывать статус в файл каждые n секунд" + +msgid "no" +msgstr "нет" + +msgid "tun/tap device" +msgstr "устройство tun/tap" + +msgid "tun/tap inactivity timeout" +msgstr "таймаут простоя tun/tap" + +msgid "yes (%i)" +msgstr "да (%i)" + +msgid "« Switch to basic configuration" +msgstr "« Перейти к основным настройкам" + +#~ msgid "Cryptography" +#~ msgstr "Криптография" + +#~ msgid "Networking" +#~ msgstr "Сеть" + +#~ msgid "Service" +#~ msgstr "Служба" + +#~ msgid "VPN" +#~ msgstr "VPN" + +#~ msgid "openvpn_%s" +#~ msgstr "openvpn_%s" + +#~ msgid "openvpn_%s_desc" +#~ msgstr "openvpn_%s_описание" diff --git a/feeds/luci/applications/luci-app-openvpn/po/sk/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/sk/openvpn.po new file mode 100644 index 0000000..f001c12 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/sk/openvpn.po @@ -0,0 +1,546 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "" + +msgid "Allow multiple clients with same certificate" +msgstr "" + +msgid "Allow only one session" +msgstr "" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN instances" +msgstr "" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "" + +msgid "« Switch to basic configuration" +msgstr "" diff --git a/feeds/luci/applications/luci-app-openvpn/po/sv/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/sv/openvpn.po new file mode 100644 index 0000000..6b8f92f --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/sv/openvpn.po @@ -0,0 +1,547 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "" + +msgid "Allow multiple clients with same certificate" +msgstr "" + +msgid "Allow only one session" +msgstr "" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN instances" +msgstr "" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "" + +msgid "« Switch to basic configuration" +msgstr "" diff --git a/feeds/luci/applications/luci-app-openvpn/po/templates/openvpn.pot b/feeds/luci/applications/luci-app-openvpn/po/templates/openvpn.pot new file mode 100644 index 0000000..f2e4011 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/templates/openvpn.pot @@ -0,0 +1,539 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "" + +msgid "Allow multiple clients with same certificate" +msgstr "" + +msgid "Allow only one session" +msgstr "" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN instances" +msgstr "" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "" + +msgid "« Switch to basic configuration" +msgstr "" diff --git a/feeds/luci/applications/luci-app-openvpn/po/tr/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/tr/openvpn.po new file mode 100644 index 0000000..7b8ffad --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/tr/openvpn.po @@ -0,0 +1,546 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "" + +msgid "Allow multiple clients with same certificate" +msgstr "" + +msgid "Allow only one session" +msgstr "" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN instances" +msgstr "" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "" + +msgid "« Switch to basic configuration" +msgstr "" diff --git a/feeds/luci/applications/luci-app-openvpn/po/uk/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/uk/openvpn.po new file mode 100644 index 0000000..a6910c2 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/uk/openvpn.po @@ -0,0 +1,550 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-11-30 09:14+0200\n" +"Last-Translator: Pavel \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "Дозволити обмін трафіком між клієнтами" + +msgid "Allow multiple clients with same certificate" +msgstr "Дозволити декілька клієнтів з однаковим сертифікатом" + +msgid "Allow only one session" +msgstr "Дозволити лише одну сесію" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN instances" +msgstr "" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "" + +msgid "« Switch to basic configuration" +msgstr "" diff --git a/feeds/luci/applications/luci-app-openvpn/po/vi/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/vi/openvpn.po new file mode 100644 index 0000000..8e8b96d --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/vi/openvpn.po @@ -0,0 +1,552 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:58+0200\n" +"PO-Revision-Date: 2009-08-16 12:27+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p', or 'subnet'" + +msgid "Accept options pushed from server" +msgstr "Chấp nhận tùy chọn được đảy từ server" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "Thêm tuyến sau khi kết nối thành lập" + +msgid "Additional authentication over TLS" +msgstr "Xác thực bổ xung trên TLS" + +msgid "Allow client-to-client traffic" +msgstr "Cho phép lưu thông đối tượng - đến - đối tượng" + +msgid "Allow multiple clients with same certificate" +msgstr "Cho phép nhiều đối tượng với cùng một chứng chỉ" + +msgid "Allow only one session" +msgstr "Chỉ cho phép một session" + +msgid "Allow remote to change its IP or port" +msgstr "Cho phép đối tượng ngoài vùng thay đổi IP hoặc cổng" + +msgid "Allowed maximum of connected clients" +msgstr "Cho phép tối đa đối tượng kết nối mới là" + +msgid "Allowed maximum of internal" +msgstr "Internal tối đa được cho phép" + +msgid "Allowed maximum of new connections" +msgstr "Cho phép tối đa kết nối mới là" + +msgid "Append log to file" +msgstr "Nối thêm log lên tập tin" + +msgid "Authenticate using username/password" +msgstr "Xác thực username/password đang sử dụng" + +msgid "Automatically redirect default route" +msgstr "Tự động chuyển hướng tuyến mặc định" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" +"Dưới đây là một list của OpenVPN instances đã được cấu hình và tình trạng " +"hiện tại" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "Call down cmd/script trước khi TUN/TAP đóng" + +msgid "Certificate authority" +msgstr "Giấy chứng nhận ủy quyền" + +msgid "Change process priority" +msgstr "Thay đổi quy trình ưu tiên" + +msgid "Change to directory before initialization" +msgstr "Chuyển qua thư mục trước khi khởi tạo" + +msgid "Check peer certificate against a CRL" +msgstr "Kiểm tra chứng chỉ đối tác với một CRL" + +msgid "Chroot to directory after initialization" +msgstr "Chroot vào thư mục sau khi khởi tạo" + +msgid "Client is disabled" +msgstr "Đối tượng bị vô hiệu hóa" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "Định cấu hình chế độ đối tượng " + +msgid "Configure server bridge" +msgstr "Định cấu hình cầu nối server" + +msgid "Configure server mode" +msgstr "Định cấu hình chế độ server" + +msgid "Connect through Socks5 proxy" +msgstr "Kết nối qua Socks5 proxy" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "Khoảng thử kết nối" + +msgid "Daemonize after initialization" +msgstr "Daemonize sau khi khởi tạo" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "Trì hoãn tun/tap mở và up script execution" + +msgid "Diffie Hellman parameters" +msgstr "Tham số Diffie Hellman " + +msgid "Directory for custom client config files" +msgstr "Dạnh mục cho các tập tin config đối tương tùy chỉnh" + +msgid "Disable Paging" +msgstr "Vô hiệu hóa Paging" + +msgid "Disable cipher initialisation vector" +msgstr "Vô hiệu hóa cipher initialisation vector" + +msgid "Disable options consistency check" +msgstr "Vô hiệu hóa tùy chọn kiểm tra nhất quán" + +msgid "Disable replay protection" +msgstr "Vô hiệu hóa replay protection" + +msgid "Do not bind to local address and port" +msgstr "Đừng đóng kết địa chỉ địa phương và cổng" + +msgid "Don't actually execute ifconfig" +msgstr "Đừng thực sự thực hiện ifconfig" + +msgid "Don't add routes automatically" +msgstr "Đừng tự động thêm vào đường dẫn" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "Don't cache --askpass or --auth-user-pass passwords" + +msgid "Don't inherit global push options" +msgstr "Đừng thừa hưởng tùy chọn đẩy toàn cầu" + +msgid "Don't log timestamps" +msgstr "Đừng log timestamps" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "Đừng đọc lại key ở chế độ khởi động " + +msgid "Don't require client certificate" +msgstr "Đừng yêu câu chứng chỉ đối tượng" + +msgid "Don't use adaptive lzo compression" +msgstr "Đừng dùng bộ nén lzo thích ứng" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "Đừng cảnh báo về sự không nhất quán của ifconfig" + +msgid "Echo parameters to log" +msgstr "Báo tham số lên log" + +msgid "Empirically measure MTU" +msgstr "Đo MTU" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "Kích hoạt OpenSSL hardware crypto engines" + +msgid "Enable Path MTU discovery" +msgstr "Kích hoạt khám phá đường dẫn MTU" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "Kích hoạt chế độ mã hóa khóa tĩnh (non-TLS)" + +msgid "Enable TLS and assume client role" +msgstr "Kích hoạt TLS và giả định vải trò của client" + +msgid "Enable TLS and assume server role" +msgstr "Kích hoạt TLS và giả định vải trò của server" + +msgid "Enable internal datagram fragmentation" +msgstr "Kích hoạt internal datagram fragmentation" + +msgid "Enable management interface on IP port" +msgstr "Kích hoạt giao diện điều hành trên IP cổng" + +msgid "Enabled" +msgstr "Kích hoạt " + +msgid "Encryption cipher for packets" +msgstr "Encryption cipher cho các gói" + +msgid "Execute shell cmd after routes are added" +msgstr "Thực hiện shell cmd sau khi tuyến đã thêm vào" + +msgid "Execute shell command on remote ip change" +msgstr "Thực hiện lệnh shell trên ip thay đổi từ xa" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "Exit trên TLS khi thương lượng thất bại" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "Lấy mật mã PEM từ điều khiển tty trước khi chúng ta daemonize" + +msgid "HMAC authentication for packets" +msgstr "Sự xác thực HMAC cho gói" + +msgid "Handling of authentication failures" +msgstr "Xử lý những sai soát khi xác thực " + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "Nếu hostname resolve thất bại, thử lại" + +msgid "Instance \"%s\"" +msgstr "Instance \"%s\"" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "Giữ địa chỉ IP ở chế độ khởi động" + +msgid "Keep remote IP address on restart" +msgstr "Giữ remote địa chỉ IP ở chế độ khởi động" + +msgid "Keep tun/tap device open on restart" +msgstr "Giữ công cụ tun/tap mở khi khởi động lại " + +msgid "Key transition window" +msgstr "Key transition window" + +msgid "Limit repeated log messages" +msgstr "Giới hạn lập log tin nhắn" + +msgid "Local certificate" +msgstr "Chứng chỉ địa phương" + +msgid "Local host name or ip address" +msgstr "Tên host địa phương và địa chỉ IP" + +msgid "Local private key" +msgstr "Phím bảo mật địa phương" + +msgid "Major mode" +msgstr "Chế độ chính" + +msgid "Make tun device IPv6 capable" +msgstr "Làm cho tun công cụ IPv6 có khả năng" + +msgid "Maximum number of queued TCP output packets" +msgstr "Số lượng tối đa của queued TCP output packets" + +msgid "Number of allocated broadcast buffers" +msgstr "Số lượng phân bổ phát sóng buffers" + +msgid "Number of lines for log file history" +msgstr "Số dòng cho tập tin log history" + +msgid "Only accept connections from given X509 name" +msgstr "Chỉ chấp nhận kết nối từ những tên X509 cho sẵn" + +msgid "Only process ping timeouts if routes exist" +msgstr "Chỉ xử lý ping timouts nếu tuyến tồn tại" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "OpenVPN instances" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "Tối ưu hóa TUN/TAP/UDP writes" + +msgid "Output to syslog and do not daemonize" +msgstr "Output tới syslog và đừng daemonize" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "PKCS # 12 tập tin có chứa key" + +msgid "Pass environment variables to script" +msgstr "Bỏ qua yếu tố môi trường tới script" + +msgid "Persist replay-protection state" +msgstr "Tiếp tục tình trạng replay-protection" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "Persist/unpersist ifconfig-pool" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "Ping remote mỗi n giây trên cổng TCP/UDP" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "Cổng" + +msgid "Protocol" +msgstr "Protocol" + +msgid "Proxy timeout in seconds" +msgstr "Proxy timeout in seconds" + +msgid "Push an ifconfig option to remote" +msgstr "Đảy một tùy chọn ifconfig tới remote" + +msgid "Push options to peer" +msgstr "Đẩy lựa chọn cho đối tác" + +msgid "Query management channel for private key" +msgstr "Tra vấn kênh điều hành cho phím bảo mật " + +msgid "Randomly choose remote server" +msgstr "Ngẫu nhiên chọn server ngoài vùng" + +msgid "Refuse connection if no custom client config" +msgstr "Từ chối kết nối nêu không có config đối tượng tùy chỉnh" + +msgid "Remap SIGUSR1 signals" +msgstr "Remap tín hiệu SIGUSR1" + +msgid "Remote host name or ip address" +msgstr "Tên host ngoài vùng và địa chỉ IP" + +msgid "Remote ping timeout" +msgstr "PING timeout từ xa" + +msgid "Renegotiate data chan. key after bytes" +msgstr "Thương lượng lại data chan. key sau bytes" + +msgid "Renegotiate data chan. key after packets" +msgstr "Thương lượng lại data chan. key sau packets" + +msgid "Renegotiate data chan. key after seconds" +msgstr "Thương lượng lại data chan. key sau seconds" + +msgid "Replay protection sliding window size" +msgstr "Replay chế độ bảo vệ kích thước window trượt" + +msgid "Require explicit designation on certificate" +msgstr "Yêu cầu rõ ràng về giấy chứng nhận " + +msgid "Require explicit key usage on certificate" +msgstr "Yêu cầu key dùng rõ rãng trên chứng nhận" + +msgid "Restart after remote ping timeout" +msgstr "Khởi động lại sau khi remote ping timeout" + +msgid "Retransmit timeout on TLS control channel" +msgstr "Retransmit timeout trên kênh kiểm soát TLS" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "Thử lại trên HTTP proxy lỗi" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "Thử lại trên Socks proxy lỗi" + +msgid "Route subnet to client" +msgstr "Tuyến subnet tới khách hàng" + +msgid "Run as an inetd or xinetd server" +msgstr "Chạy như inetd hoặc xinetd server" + +msgid "Run script cmd on client connection" +msgstr "Chạy script cmd trên đối tượng kết nối" + +msgid "Run script cmd on client disconnection" +msgstr "Chạy script cmd trên đối tượng không kết nối" + +msgid "Run up/down scripts for all restarts" +msgstr "Chạy up/down scripts cho tất cả khởi động" + +msgid "Send notification to peer on disconnect" +msgstr "Gửi thông báo cho bạn bè về ngắt kết nối" + +msgid "Set GID to group" +msgstr "Cài đặt GID tới nhóm" + +msgid "Set TCP/UDP MTU" +msgstr "Cài đặt TCP/UDP MTU" + +msgid "Set UID to user" +msgstr "Cài đặt UID tới người dùng" + +msgid "Set aside a pool of subnets" +msgstr "Để sang một bên một pool của subnets" + +msgid "Set extended HTTP proxy options" +msgstr "Thiết lập các tùy chọn mở rộng HTTP proxy" + +msgid "Set output verbosity" +msgstr "Đặt output verbosity" + +msgid "Set size of real and virtual address hash tables" +msgstr "Đặt dung lượng của bảng address hash thực và ảo" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "Đặt TCP/UDP nhận dung lượng buffer" + +msgid "Set the TCP/UDP send buffer size" +msgstr "Đặt TCP/UDP gửi dung lượng buffer" + +msgid "Set tun/tap TX queue length" +msgstr "Đặt tun/tap độ dài queue" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "Đặt công cụ tun/tap MTU" + +msgid "Set tun/tap device overhead" +msgstr "Đặt thiết bị tun/tap overhead" + +msgid "Set upper bound on TCP MSS" +msgstr "Đặt upper bound trên TCP MSS" + +msgid "Shaping for peer bandwidth" +msgstr "Shaping cho peer bandwidth" + +msgid "Shell cmd to execute after tun device open" +msgstr "Shell cmd để thực thi sau khi thiết bị tun mở" + +msgid "Shell cmd to run after tun device close" +msgstr "Shell cmd để chạy sau khi thiết bị tun đóng" + +msgid "Shell command to verify X509 name" +msgstr "Shell command để hợp thức hóa tên X509 " + +msgid "Silence the output of replay warnings" +msgstr "Silence the output của các cảnh báo reply" + +msgid "Size of cipher key" +msgstr "Dung lượng của cipher key" + +msgid "Specify a default gateway for routes" +msgstr "Chỉ định một cổng mặc định cho tuyến" + +msgid "Start OpenVPN in a hibernating state" +msgstr "Bắt đầu OpenVPN trong một hibernating state" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "Bắt đầu" + +msgid "Status file format version" +msgstr "Tình trạng tập tin phiên bản format" + +msgid "Switch to advanced configuration »" +msgstr "Chuyển sang cấu hình cấp cao" + +msgid "TCP/UDP port # for both local and remote" +msgstr "Cổng TCP/UDP # cho cả địa phương và ngoài vùng" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "Cổng TCP/UDP # cho địa phương (default=1194)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "Cổng TCP/UDP # cho ngoài vùng (default=1194)" + +msgid "TLS cipher" +msgstr "TLS cipher" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "TOS passthrough (chỉ áp dụng cho IPv4)" + +msgid "Temporary directory for client-connect return file" +msgstr "Danh mục tạm thời cho tập tin client-connect return" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "Timeframe cho trao đổi key" + +msgid "Type of used device" +msgstr "Loại công cụ sử dụng" + +msgid "Use fast LZO compression" +msgstr "Dùng LZO nén nhanh" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "Nên dùng địa chỉ cá nhân hơn là /30 subnets" + +msgid "Use protocol" +msgstr "Dùng protocol" + +msgid "Use tun/tap device node" +msgstr "Dùng chế độ công cụ tun/tap" + +msgid "Use username as common name" +msgstr "Dùng tên đăng nhập như tên thông thường" + +msgid "Write log to file" +msgstr "Viết log lên tập tin" + +msgid "Write process ID to file" +msgstr "Viết xử lý ID lên tập tin" + +msgid "Write status to file every n seconds" +msgstr "Viết tình trạng tới tập tin mỗi n giây" + +msgid "no" +msgstr "không" + +msgid "tun/tap device" +msgstr "Công cụ tun/tap" + +msgid "tun/tap inactivity timeout" +msgstr "tun/tap timeout không có hành động" + +msgid "yes (%i)" +msgstr "Có (%i)" + +msgid "« Switch to basic configuration" +msgstr "Chuyển sang cấu hình căn bản" diff --git a/feeds/luci/applications/luci-app-openvpn/po/zh-cn/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/zh-cn/openvpn.po new file mode 100644 index 0000000..899b4d2 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/zh-cn/openvpn.po @@ -0,0 +1,564 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:35+0200\n" +"PO-Revision-Date: 2013-10-10 06:09+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: QQ Group 75543259 \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s" +msgstr "%s" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "'net30', 'p2p', 或 '子网'" + +msgid "Accept options pushed from server" +msgstr "接受从服务器发送过来的选项" + +msgid "Add" +msgstr "添加" + +msgid "Add route after establishing connection" +msgstr "建立连接后添加路由" + +msgid "Additional authentication over TLS" +msgstr "TLS以外的验证" + +msgid "Allow client-to-client traffic" +msgstr "允许客户端到客户端的通信" + +msgid "Allow multiple clients with same certificate" +msgstr "允许多用户共用同一证书" + +msgid "Allow only one session" +msgstr "只允许一个会话" + +msgid "Allow remote to change its IP or port" +msgstr "允许远程修改ip和端口" + +msgid "Allowed maximum of connected clients" +msgstr "允许最大已连接客户端数" + +msgid "Allowed maximum of internal" +msgstr "允许最大内部连接" + +msgid "Allowed maximum of new connections" +msgstr "允许最大新建连接数" + +msgid "Append log to file" +msgstr "添加日志至文件" + +msgid "Authenticate using username/password" +msgstr "以用户名/密码的方式进行验证" + +msgid "Automatically redirect default route" +msgstr "自动重定向至默认路由" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "Openvpn已配置实例及其当前状态列表" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "TUN/TAP关闭前关闭命令行及脚本" + +msgid "Certificate authority" +msgstr "认证授权" + +msgid "Change process priority" +msgstr "改变进程优先级" + +msgid "Change to directory before initialization" +msgstr "初始化前改变根目录" + +msgid "Check peer certificate against a CRL" +msgstr "验证客户端证书以确保其是否过期" + +msgid "Chroot to directory after initialization" +msgstr "初始化后改变根目录" + +msgid "Client is disabled" +msgstr "客户端已被禁止" + +msgid "Configuration category" +msgstr "配置分类" + +msgid "Configure client mode" +msgstr "配置客户端模式" + +msgid "Configure server bridge" +msgstr "配置服务器桥接" + +msgid "Configure server mode" +msgstr "配置服务器模式" + +msgid "Connect through Socks5 proxy" +msgstr "通过Sock5代理连接" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "通过HTTP代理连接到远程主机" + +msgid "Connection retry interval" +msgstr "连接重试时间间隔" + +msgid "Daemonize after initialization" +msgstr "初始化后进入后台运行" + +msgid "Delay n seconds after connection" +msgstr "连接后延迟时间(秒)" + +msgid "Delay tun/tap open and up script execution" +msgstr "延迟tun/tap的打开并加速脚本执行" + +msgid "Diffie Hellman parameters" +msgstr "Diffie–Hellman/DH密钥交换 参数" + +msgid "Directory for custom client config files" +msgstr "自定义客户端配置文件的目录" + +msgid "Disable Paging" +msgstr "禁止分页" + +msgid "Disable cipher initialisation vector" +msgstr "关闭加密的初始化向量" + +msgid "Disable options consistency check" +msgstr "禁止选项一致性检查" + +msgid "Disable replay protection" +msgstr "关闭重播保护" + +msgid "Do not bind to local address and port" +msgstr "不绑定本地地址和端口" + +msgid "Don't actually execute ifconfig" +msgstr "不实际执行ifconfig命令" + +msgid "Don't add routes automatically" +msgstr "不自动添加路由" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "不缓存--askpass 或--auth-user-pass passwords" + +msgid "Don't inherit global push options" +msgstr "不继承全局主动发送选项" + +msgid "Don't log timestamps" +msgstr "不记录时间戳" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "服务重启时不重读密钥值" + +msgid "Don't require client certificate" +msgstr "不需要客户的证书" + +msgid "Don't use adaptive lzo compression" +msgstr "不用自适应的lzo压缩" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "ifconfig不一致时不警告" + +msgid "Echo parameters to log" +msgstr "把参数写入日志" + +msgid "Empirically measure MTU" +msgstr "以历史值估算MTU值" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "打开OpenSSL硬件加密引擎" + +msgid "Enable Path MTU discovery" +msgstr "启用路径MTU发现" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "允许静态密钥加密模式" + +msgid "Enable TLS and assume client role" +msgstr "允许TLS并伪装为客户端" + +msgid "Enable TLS and assume server role" +msgstr "允许TLS并伪装为服务器" + +msgid "Enable internal datagram fragmentation" +msgstr "允许内部数据报分片" + +msgid "Enable management interface on IP port" +msgstr "在IP port上启用可管理接口" + +msgid "Enabled" +msgstr "启用" + +msgid "Encryption cipher for packets" +msgstr "加密数据包" + +msgid "Execute shell cmd after routes are added" +msgstr "添加路由后执行shell命令" + +msgid "Execute shell command on remote ip change" +msgstr "当远程ip改变时执行shell命令" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "在服务器模式下执行新的客户端连接,当客户端仍然是不可信" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" +"服务器模式下,将每个IPv4地址/路由或MAC地址添加到OpenVPN的内部路由表中。" + +msgid "Exit on TLS negotiation failure" +msgstr "TLS验证失败后退出" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "后台运行前从控制的tty中获取PEM密码" + +msgid "HMAC authentication for packets" +msgstr "利用HMAC水印算法校验数据包" + +msgid "Handling of authentication failures" +msgstr "处理验证失败" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "在服务配置模式下Helper简明的执行--ping和--ping-restart" + +msgid "If hostname resolve fails, retry" +msgstr "如果主机名解析错误,重试" + +msgid "Instance \"%s\"" +msgstr "实例 \"%s\"" + +msgid "Invalid" +msgstr "无效" + +msgid "Keep local IP address on restart" +msgstr "服务重启时保持本地IP地址" + +msgid "Keep remote IP address on restart" +msgstr "服务重启时保持远程IP地址" + +msgid "Keep tun/tap device open on restart" +msgstr "服务重启时自动打开 tun/tap 设备" + +msgid "Key transition window" +msgstr "密钥传输滑动窗口" + +msgid "Limit repeated log messages" +msgstr "限制重复性的日志消息" + +msgid "Local certificate" +msgstr "本地证书" + +msgid "Local host name or ip address" +msgstr "本地主机名或ip地址" + +msgid "Local private key" +msgstr "本地私人密钥" + +msgid "Major mode" +msgstr "主要模式" + +msgid "Make tun device IPv6 capable" +msgstr "使 tun 设备兼容IPv6" + +msgid "Maximum number of queued TCP output packets" +msgstr "TCP队列中输出包的最大数量" + +msgid "Number of allocated broadcast buffers" +msgstr "已分配的广播缓冲区数量" + +msgid "Number of lines for log file history" +msgstr "历史日志文件的行数" + +msgid "Only accept connections from given X509 name" +msgstr "只接收已给定的X509名称的连接" + +msgid "Only process ping timeouts if routes exist" +msgstr "当且仅当路由存在时处理ping超时" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN instances" +msgstr "OpenVPN 实例" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "优化 TUN/TAP/UDP 写入" + +msgid "Output to syslog and do not daemonize" +msgstr "显式输出到syslog" + +msgid "Overview" +msgstr "概览" + +msgid "PKCS#12 file containing keys" +msgstr "PKCS#12文件包含的密钥" + +msgid "Pass environment variables to script" +msgstr "传递环境变量至脚本" + +msgid "Persist replay-protection state" +msgstr "保存重播保护的状态" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "持久/非持久ifconfig池" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "每n秒ping一次远程 TCP/UDP 端口" + +msgid "Policy level over usage of external programs and scripts" +msgstr "外部程序和脚本超出了策略允许的使用范围" + +msgid "Port" +msgstr "端口" + +msgid "Protocol" +msgstr "协议" + +msgid "Proxy timeout in seconds" +msgstr "代理超时,单位秒" + +msgid "Push an ifconfig option to remote" +msgstr "主动向远程发送ifconfig选项" + +msgid "Push options to peer" +msgstr "主动向端点发送选项" + +msgid "Query management channel for private key" +msgstr "为私人密钥查询管理通道" + +msgid "Randomly choose remote server" +msgstr "随机选择远程服务器" + +msgid "Refuse connection if no custom client config" +msgstr "拒接没有自定义客户端配置的连接" + +msgid "Remap SIGUSR1 signals" +msgstr "重映射SIGUSR1信号" + +msgid "Remote host name or ip address" +msgstr "远程主机名或ip地址" + +msgid "Remote ping timeout" +msgstr "远程ping超时" + +msgid "Renegotiate data chan. key after bytes" +msgstr "传输若干字节后重新验证数据通道密钥" + +msgid "Renegotiate data chan. key after packets" +msgstr "传输若干数据包后重新验证数据通道密钥" + +msgid "Renegotiate data chan. key after seconds" +msgstr "传输若干秒后重新验证数据通道密钥" + +msgid "Replay protection sliding window size" +msgstr "重播保护的滑动窗口大小" + +msgid "Require explicit designation on certificate" +msgstr "证书需要显式指定" + +msgid "Require explicit key usage on certificate" +msgstr "证书需要明确的密钥" + +msgid "Restart after remote ping timeout" +msgstr "远程ping超时后重启" + +msgid "Retransmit timeout on TLS control channel" +msgstr "TLS控制通道超时后重新发送" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "无限重试直至代理正确" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "无限重试直至Socks代理正确" + +msgid "Route subnet to client" +msgstr "路由子网至客户端" + +msgid "Run as an inetd or xinetd server" +msgstr "以inetd或xinetd服务器的方式运行" + +msgid "Run script cmd on client connection" +msgstr "当客户端连接时在命令行下允许脚本" + +msgid "Run script cmd on client disconnection" +msgstr "当客户端断开时在命令行下允许脚本" + +msgid "Run up/down scripts for all restarts" +msgstr "每次重启都执行启动/关闭脚本" + +msgid "Send notification to peer on disconnect" +msgstr "断开连接时向客户端发送通知" + +msgid "Set GID to group" +msgstr "为群组设置GID值" + +msgid "Set TCP/UDP MTU" +msgstr "设置TCP/UDP的MTU值" + +msgid "Set UID to user" +msgstr "为用户设置UID值" + +msgid "Set aside a pool of subnets" +msgstr "设置为拒绝子网线程池模式" + +msgid "Set extended HTTP proxy options" +msgstr "设置HTTP扩展代理选项" + +msgid "Set output verbosity" +msgstr "设置输出冗余级别" + +msgid "Set size of real and virtual address hash tables" +msgstr "设置实际和虚拟地址的哈希表大小" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "设置TCP/UDP接收缓冲区大小" + +msgid "Set the TCP/UDP send buffer size" +msgstr "设置TCP/UDP发送缓冲区大小" + +msgid "Set tun/tap TX queue length" +msgstr "设置tun/tap发送队列长度" + +msgid "Set tun/tap adapter parameters" +msgstr "设置tun/ tap适配器参数" + +msgid "Set tun/tap device MTU" +msgstr "设置tun/tap设备的MTU值" + +msgid "Set tun/tap device overhead" +msgstr "设置tun/tap设备的开销" + +msgid "Set upper bound on TCP MSS" +msgstr "设置TCP MSS的上限" + +msgid "Shaping for peer bandwidth" +msgstr "改变结点带宽" + +msgid "Shell cmd to execute after tun device open" +msgstr "tun设备打开后运行shell命令行" + +msgid "Shell cmd to run after tun device close" +msgstr "tun设备关闭后运行shell命令行e" + +msgid "Shell command to verify X509 name" +msgstr "运行shell命令以验证X509名称" + +msgid "Silence the output of replay warnings" +msgstr "以静音的方式发出重播警告" + +msgid "Size of cipher key" +msgstr "密钥大小" + +msgid "Specify a default gateway for routes" +msgstr "指定路由默认网关" + +msgid "Start OpenVPN in a hibernating state" +msgstr "以休眠的状态打开OpenVPN" + +msgid "Start/Stop" +msgstr "启动/停止" + +msgid "Started" +msgstr "已运行的" + +msgid "Status file format version" +msgstr "显式文件格式版本的状态" + +msgid "Switch to advanced configuration »" +msgstr "高级配置 »" + +msgid "TCP/UDP port # for both local and remote" +msgstr "TCP/UDP 端口 # 同时针对本地和远程" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "TCP/UDP 端口 # 本地 (默认 1194)" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "TCP/UDP 端口 # 远程 (默认 1194)" + +msgid "TLS cipher" +msgstr "TLS加密" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "TOS 穿透 (仅限IPv4)" + +msgid "Temporary directory for client-connect return file" +msgstr "客户端连接返回文件的临时目录" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "密钥交换时间表" + +msgid "Type of used device" +msgstr "使用设备类型" + +msgid "Use fast LZO compression" +msgstr "使用快速LZO压缩" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "利用个人地址代替/30 子网" + +msgid "Use protocol" +msgstr "采用协议" + +msgid "Use tun/tap device node" +msgstr "使用 tun/tap 设备节点" + +msgid "Use username as common name" +msgstr "把用户名作为通用名称" + +msgid "Write log to file" +msgstr "保存日志至文件" + +msgid "Write process ID to file" +msgstr "记录进程ID至文件" + +msgid "Write status to file every n seconds" +msgstr "每n秒后写状态值至文件" + +msgid "no" +msgstr "否" + +msgid "tun/tap device" +msgstr "tun/tap 设备" + +msgid "tun/tap inactivity timeout" +msgstr "tun/tap 休眠超时" + +msgid "yes (%i)" +msgstr "是 (%i)" + +msgid "« Switch to basic configuration" +msgstr "« 基本配置" + +#~ msgid "Cryptography" +#~ msgstr "加密" + +#~ msgid "Networking" +#~ msgstr "网络" + +#~ msgid "Service" +#~ msgstr "服务" + +#~ msgid "VPN" +#~ msgstr "VPN" diff --git a/feeds/luci/applications/luci-app-openvpn/po/zh-tw/openvpn.po b/feeds/luci/applications/luci-app-openvpn/po/zh-tw/openvpn.po new file mode 100644 index 0000000..f26aeb0 --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/po/zh-tw/openvpn.po @@ -0,0 +1,545 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "%s" +msgstr "" + +msgid "'net30', 'p2p', or 'subnet'" +msgstr "" + +msgid "Accept options pushed from server" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add route after establishing connection" +msgstr "" + +msgid "Additional authentication over TLS" +msgstr "" + +msgid "Allow client-to-client traffic" +msgstr "" + +msgid "Allow multiple clients with same certificate" +msgstr "" + +msgid "Allow only one session" +msgstr "" + +msgid "Allow remote to change its IP or port" +msgstr "" + +msgid "Allowed maximum of connected clients" +msgstr "" + +msgid "Allowed maximum of internal" +msgstr "" + +msgid "Allowed maximum of new connections" +msgstr "" + +msgid "Append log to file" +msgstr "" + +msgid "Authenticate using username/password" +msgstr "" + +msgid "Automatically redirect default route" +msgstr "" + +msgid "Below is a list of configured OpenVPN instances and their current state" +msgstr "" + +msgid "Call down cmd/script before TUN/TAP close" +msgstr "" + +msgid "Certificate authority" +msgstr "" + +msgid "Change process priority" +msgstr "" + +msgid "Change to directory before initialization" +msgstr "" + +msgid "Check peer certificate against a CRL" +msgstr "" + +msgid "Chroot to directory after initialization" +msgstr "" + +msgid "Client is disabled" +msgstr "" + +msgid "Configuration category" +msgstr "" + +msgid "Configure client mode" +msgstr "" + +msgid "Configure server bridge" +msgstr "" + +msgid "Configure server mode" +msgstr "" + +msgid "Connect through Socks5 proxy" +msgstr "" + +msgid "Connect to remote host through an HTTP proxy" +msgstr "" + +msgid "Connection retry interval" +msgstr "" + +msgid "Daemonize after initialization" +msgstr "" + +msgid "Delay n seconds after connection" +msgstr "" + +msgid "Delay tun/tap open and up script execution" +msgstr "" + +msgid "Diffie Hellman parameters" +msgstr "" + +msgid "Directory for custom client config files" +msgstr "" + +msgid "Disable Paging" +msgstr "" + +msgid "Disable cipher initialisation vector" +msgstr "" + +msgid "Disable options consistency check" +msgstr "" + +msgid "Disable replay protection" +msgstr "" + +msgid "Do not bind to local address and port" +msgstr "" + +msgid "Don't actually execute ifconfig" +msgstr "" + +msgid "Don't add routes automatically" +msgstr "" + +msgid "Don't cache --askpass or --auth-user-pass passwords" +msgstr "" + +msgid "Don't inherit global push options" +msgstr "" + +msgid "Don't log timestamps" +msgstr "" + +msgid "Don't pull routes automatically" +msgstr "" + +msgid "Don't re-read key on restart" +msgstr "" + +msgid "Don't require client certificate" +msgstr "" + +msgid "Don't use adaptive lzo compression" +msgstr "" + +msgid "Don't warn on ifconfig inconsistencies" +msgstr "" + +msgid "Echo parameters to log" +msgstr "" + +msgid "Empirically measure MTU" +msgstr "" + +msgid "Enable OpenSSL hardware crypto engines" +msgstr "" + +msgid "Enable Path MTU discovery" +msgstr "" + +msgid "Enable Static Key encryption mode (non-TLS)" +msgstr "" + +msgid "Enable TLS and assume client role" +msgstr "" + +msgid "Enable TLS and assume server role" +msgstr "" + +msgid "Enable internal datagram fragmentation" +msgstr "" + +msgid "Enable management interface on IP port" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption cipher for packets" +msgstr "" + +msgid "Execute shell cmd after routes are added" +msgstr "" + +msgid "Execute shell command on remote ip change" +msgstr "" + +msgid "" +"Executed in server mode on new client connections, when the client is still " +"untrusted" +msgstr "" + +msgid "" +"Executed in server mode whenever an IPv4 address/route or MAC address is " +"added to OpenVPN's internal routing table" +msgstr "" + +msgid "Exit on TLS negotiation failure" +msgstr "" + +msgid "Get PEM password from controlling tty before we daemonize" +msgstr "" + +msgid "HMAC authentication for packets" +msgstr "" + +msgid "Handling of authentication failures" +msgstr "" + +msgid "" +"Helper directive to simplify the expression of --ping and --ping-restart in " +"server mode configurations" +msgstr "" + +msgid "If hostname resolve fails, retry" +msgstr "" + +msgid "Instance \"%s\"" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Keep local IP address on restart" +msgstr "" + +msgid "Keep remote IP address on restart" +msgstr "" + +msgid "Keep tun/tap device open on restart" +msgstr "" + +msgid "Key transition window" +msgstr "" + +msgid "Limit repeated log messages" +msgstr "" + +msgid "Local certificate" +msgstr "" + +msgid "Local host name or ip address" +msgstr "" + +msgid "Local private key" +msgstr "" + +msgid "Major mode" +msgstr "" + +msgid "Make tun device IPv6 capable" +msgstr "" + +msgid "Maximum number of queued TCP output packets" +msgstr "" + +msgid "Number of allocated broadcast buffers" +msgstr "" + +msgid "Number of lines for log file history" +msgstr "" + +msgid "Only accept connections from given X509 name" +msgstr "" + +msgid "Only process ping timeouts if routes exist" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN instances" +msgstr "" + +msgid "Optimize TUN/TAP/UDP writes" +msgstr "" + +msgid "Output to syslog and do not daemonize" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "PKCS#12 file containing keys" +msgstr "" + +msgid "Pass environment variables to script" +msgstr "" + +msgid "Persist replay-protection state" +msgstr "" + +msgid "Persist/unpersist ifconfig-pool" +msgstr "" + +msgid "Ping remote every n seconds over TCP/UDP port" +msgstr "" + +msgid "Policy level over usage of external programs and scripts" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Proxy timeout in seconds" +msgstr "" + +msgid "Push an ifconfig option to remote" +msgstr "" + +msgid "Push options to peer" +msgstr "" + +msgid "Query management channel for private key" +msgstr "" + +msgid "Randomly choose remote server" +msgstr "" + +msgid "Refuse connection if no custom client config" +msgstr "" + +msgid "Remap SIGUSR1 signals" +msgstr "" + +msgid "Remote host name or ip address" +msgstr "" + +msgid "Remote ping timeout" +msgstr "" + +msgid "Renegotiate data chan. key after bytes" +msgstr "" + +msgid "Renegotiate data chan. key after packets" +msgstr "" + +msgid "Renegotiate data chan. key after seconds" +msgstr "" + +msgid "Replay protection sliding window size" +msgstr "" + +msgid "Require explicit designation on certificate" +msgstr "" + +msgid "Require explicit key usage on certificate" +msgstr "" + +msgid "Restart after remote ping timeout" +msgstr "" + +msgid "Retransmit timeout on TLS control channel" +msgstr "" + +msgid "Retry indefinitely on HTTP proxy errors" +msgstr "" + +msgid "Retry indefinitely on Socks proxy errors" +msgstr "" + +msgid "Route subnet to client" +msgstr "" + +msgid "Run as an inetd or xinetd server" +msgstr "" + +msgid "Run script cmd on client connection" +msgstr "" + +msgid "Run script cmd on client disconnection" +msgstr "" + +msgid "Run up/down scripts for all restarts" +msgstr "" + +msgid "Send notification to peer on disconnect" +msgstr "" + +msgid "Set GID to group" +msgstr "" + +msgid "Set TCP/UDP MTU" +msgstr "" + +msgid "Set UID to user" +msgstr "" + +msgid "Set aside a pool of subnets" +msgstr "" + +msgid "Set extended HTTP proxy options" +msgstr "" + +msgid "Set output verbosity" +msgstr "" + +msgid "Set size of real and virtual address hash tables" +msgstr "" + +msgid "Set the TCP/UDP receive buffer size" +msgstr "" + +msgid "Set the TCP/UDP send buffer size" +msgstr "" + +msgid "Set tun/tap TX queue length" +msgstr "" + +msgid "Set tun/tap adapter parameters" +msgstr "" + +msgid "Set tun/tap device MTU" +msgstr "" + +msgid "Set tun/tap device overhead" +msgstr "" + +msgid "Set upper bound on TCP MSS" +msgstr "" + +msgid "Shaping for peer bandwidth" +msgstr "" + +msgid "Shell cmd to execute after tun device open" +msgstr "" + +msgid "Shell cmd to run after tun device close" +msgstr "" + +msgid "Shell command to verify X509 name" +msgstr "" + +msgid "Silence the output of replay warnings" +msgstr "" + +msgid "Size of cipher key" +msgstr "" + +msgid "Specify a default gateway for routes" +msgstr "" + +msgid "Start OpenVPN in a hibernating state" +msgstr "" + +msgid "Start/Stop" +msgstr "" + +msgid "Started" +msgstr "" + +msgid "Status file format version" +msgstr "" + +msgid "Switch to advanced configuration »" +msgstr "" + +msgid "TCP/UDP port # for both local and remote" +msgstr "" + +msgid "TCP/UDP port # for local (default=1194)" +msgstr "" + +msgid "TCP/UDP port # for remote (default=1194)" +msgstr "" + +msgid "TLS cipher" +msgstr "" + +msgid "TOS passthrough (applies to IPv4 only)" +msgstr "" + +msgid "Temporary directory for client-connect return file" +msgstr "" + +msgid "The highest supported TLS version" +msgstr "" + +msgid "The key direction for 'tls-auth' and 'secret' options" +msgstr "" + +msgid "The lowest supported TLS version" +msgstr "" + +msgid "Timeframe for key exchange" +msgstr "" + +msgid "Type of used device" +msgstr "" + +msgid "Use fast LZO compression" +msgstr "" + +msgid "Use individual addresses rather than /30 subnets" +msgstr "" + +msgid "Use protocol" +msgstr "" + +msgid "Use tun/tap device node" +msgstr "" + +msgid "Use username as common name" +msgstr "" + +msgid "Write log to file" +msgstr "" + +msgid "Write process ID to file" +msgstr "" + +msgid "Write status to file every n seconds" +msgstr "" + +msgid "no" +msgstr "" + +msgid "tun/tap device" +msgstr "" + +msgid "tun/tap inactivity timeout" +msgstr "" + +msgid "yes (%i)" +msgstr "" + +msgid "« Switch to basic configuration" +msgstr "" diff --git a/feeds/luci/applications/luci-app-openvpn/root/etc/config/openvpn_recipes b/feeds/luci/applications/luci-app-openvpn/root/etc/config/openvpn_recipes new file mode 100644 index 0000000..1b394df --- /dev/null +++ b/feeds/luci/applications/luci-app-openvpn/root/etc/config/openvpn_recipes @@ -0,0 +1,102 @@ +# +# Routed point-to-point server +# +config openvpn_recipe server_tun_ptp + option _description "Simple server configuration for a routed point-to-point VPN" + option _role "server" + option dev "tun" + option ifconfig "10.0.0.1 10.0.0.2" + option secret "shared-secret.key" + option keepalive "10 60" + option comp_lzo "yes" + option verb "3" + option mssfix "1420" + +# +# Routed point-to-point client +# +config openvpn_recipe client_tun_ptp + option _description "Simple client configuration for a routed point-to-point VPN" + option _role "client" + option dev "tun" + list remote "vpnserver.example.org" + option ifconfig "10.0.0.2 10.0.0.1" + option secret "shared-secret.key" + option nobind "1" + option comp_lzo "yes" + option verb "3" + +# +# Routed multi-client server +# +config openvpn_recipe server_tun + option _description "Server configuration for a routed multi-client VPN" + option _role "server" + option dev "tun" + option server "10.0.100.0 255.255.255.0" + option ca "ca.crt" + option cert "server.crt" + option key "server.key" + option dh "dh1024.pem" + option keepalive "10 60" + option comp_lzo "yes" + option verb "3" + option mssfix "1420" + +# +# Routed client +# +config openvpn_recipe client_tun + option _description "Client configuration for a routed multi-client VPN" + option _role "client" + option client "1" + option dev "tun" + list remote "vpnserver.example.org" + option pkcs12 "my_client.p12" + option remote_cert_tls "server" + option comp_lzo "yes" + option nobind "1" + option persist_key "1" + option persist_tun "1" + option verb "3" + option reneg_sec "0" + option float "1" + +# +# Multi-client ethernet bridge server +# +config openvpn_recipe server_tap_bridge + option _description "Server configuration for an ethernet bridge VPN" + option _role "server" + option dev "tap" + option server_bridge "192.168.1.1 255.255.255.0 192.168.1.128 192.168.1.254" + option ca "ca.crt" + option cert "server.crt" + option key "server.key" + option dh "dh1024.pem" + option keepalive "10 60" + option comp_lzo "yes" + option verb "3" + option mssfix "1420" + +# +# Ethernet bridge client +# +config openvpn_recipe client_tap_bridge + option _description "Client configuration for an ethernet bridge VPN" + option _role "client" + option client "1" + option dev "tap" + list remote "vpnserver.example.org" + option ca "ca.crt" + option cert "my_client.crt" + option key "my_client.key" + option dh "dh1024.pem" + option remote_cert_tls "server" + option comp_lzo "yes" + option nobind "1" + option persist_key "1" + option verb "3" + option reneg_sec "0" + option float "1" + diff --git a/feeds/luci/applications/luci-app-p2pblock/Makefile b/feeds/luci/applications/luci-app-p2pblock/Makefile new file mode 100644 index 0000000..137849c --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for the Freifunk P2P-Block addon +LUCI_DEPENDS:=+luci-app-firewall +freifunk-p2pblock @BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-p2pblock/luasrc/controller/ff_p2pblock.lua b/feeds/luci/applications/luci-app-p2pblock/luasrc/controller/ff_p2pblock.lua new file mode 100644 index 0000000..eaedda2 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/luasrc/controller/ff_p2pblock.lua @@ -0,0 +1,9 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.ff_p2pblock", package.seeall) + +function index() + entry({"admin", "network", "firewall", "p2pblock"}, cbi("luci_fw/p2pblock"), + _("P2P-Block"), 40) +end diff --git a/feeds/luci/applications/luci-app-p2pblock/luasrc/model/cbi/luci_fw/p2pblock.lua b/feeds/luci/applications/luci-app-p2pblock/luasrc/model/cbi/luci_fw/p2pblock.lua new file mode 100644 index 0000000..1f21429 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/luasrc/model/cbi/luci_fw/p2pblock.lua @@ -0,0 +1,66 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local sys = require "luci.sys" + +m = Map("freifunk_p2pblock", translate("P2P-Block"), + translate("P2P-Block is a greylisting mechanism to block various peer-to-peer protocols for non-whitelisted clients.")) + +s = m:section(NamedSection, "p2pblock", "settings", "Settings") +s.anonymous = true +s.addremove = false + +en = s:option(Flag, "_enabled", translate("Enable P2P-Block")) +en.rmempty = false + +function en.cfgvalue() + return ( sys.init.enabled("freifunk-p2pblock") and "1" or "0" ) +end + +function en.write(self, section, val) + if val == "1" then + sys.init.enable("freifunk-p2pblock") + else + sys.init.disable("freifunk-p2pblock") + end +end + +s:option(Value, "portrange", translate("Portrange")) + +s:option(Value, "blocktime", translate("Block Time"), + translate("seconds")) + +s:option(DynamicList, "whitelist", translate("Whitelisted IPs")) + +l7 = s:option(MultiValue, "layer7", translate("Layer7-Protocols")) +l7.widget = "checkbox" +l7:value("aim", "AIM Chat") +l7:value("bittorrent", "Bittorrent") +l7:value("edonkey", "eDonkey, eMule, Kademlia") +l7:value("fasttrack", "Fasttrack Protocol") +l7:value("ftp", "File Transfer Protocol") +l7:value("gnutella", "Gnutella") +l7:value("http", "Hypertext Transfer Protocol") +l7:value("ident", "Ident Protocol") +l7:value("irc", "Internet Relay Chat") +l7:value("jabber", "Jabber/XMPP") +l7:value("msnmessenger", "MSN Messenger") +l7:value("ntp", "Network Time Protocol") +l7:value("pop3", "POP3 Protocol") +l7:value("smtp", "SMTP Protocol") +l7:value("ssl", "SSL Protocol") +l7:value("vnc", "VNC Protocol") + +ipp2p = s:option(MultiValue, "ipp2p", translate("IP-P2P")) +ipp2p.widget = "checkbox" +ipp2p:value("edk", "eDonkey, eMule, Kademlia") +ipp2p:value("kazaa", "KaZaA, FastTrack") +ipp2p:value("gnu", "Gnutella") +ipp2p:value("dc", "Direct Connect") +ipp2p:value("bit", "BitTorrent, extended BT") +ipp2p:value("apple", "AppleJuice") +ipp2p:value("winmx", "WinMX") +ipp2p:value("soul", "SoulSeek") +ipp2p:value("ares", "AresLite") + +return m diff --git a/feeds/luci/applications/luci-app-p2pblock/po/ca/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/ca/p2pblock.po new file mode 100644 index 0000000..fe99a77 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/ca/p2pblock.po @@ -0,0 +1,46 @@ +# default.pot +# generated from ./i18n/english/luasrc/i18n/default.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2011-02-14 17:43+0100\n" +"Last-Translator: Manuel Munz \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "Block Time" +msgstr "Temps de bloqueig" + +msgid "Enable P2P-Block" +msgstr "Habilita el Blocat P2P" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Protocols de capa 7" + +msgid "P2P-Block" +msgstr "Blocat P2P" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"El Blocat P2P és un mecanisme de llista grisa per blocar diversos protocols " +"peer-tp-peer per clients que no estiguin a la llista blanca." + +msgid "Portrange" +msgstr "Rang de ports" + +msgid "Whitelisted IPs" +msgstr "IPs a la llista blanca" + +msgid "seconds" +msgstr "segons" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/cs/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/cs/p2pblock.po new file mode 100644 index 0000000..02eafef --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/cs/p2pblock.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-08-04 22:44+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Block Time" +msgstr "Doba blokování" + +msgid "Enable P2P-Block" +msgstr "Povolit P2P-Block" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Layer7-Protokoly" + +msgid "P2P-Block" +msgstr "P2P-Block" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" + +msgid "Portrange" +msgstr "Rozsah portů" + +msgid "Whitelisted IPs" +msgstr "Povolené IP adresy" + +msgid "seconds" +msgstr "sekundy" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/de/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/de/p2pblock.po new file mode 100644 index 0000000..e3613d6 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/de/p2pblock.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2011-02-14 17:44+0100\n" +"Last-Translator: Manuel Munz \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "Block Time" +msgstr "Sperr-Zeitraum" + +msgid "Enable P2P-Block" +msgstr "P2P-Sperr-Mechanismus aktivieren" + +msgid "IP-P2P" +msgstr "IPP2P" + +msgid "Layer7-Protocols" +msgstr "Layer7-Protokolle" + +msgid "P2P-Block" +msgstr "P2P-Sperre" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"P2P-Block ist ein Mechanismus zum vorrübergehendem Sperren von Peer-to-Peer " +"Protokollen für nicht auf der Whitelist stehende Clients. " + +msgid "Portrange" +msgstr "Überwachter Port-Bereich" + +msgid "Whitelisted IPs" +msgstr "Freigeschaltete IP-Adressen" + +msgid "seconds" +msgstr "Angabe in Sekunden" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/el/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/el/p2pblock.po new file mode 100644 index 0000000..9db357a --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/el/p2pblock.po @@ -0,0 +1,43 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-18 15:23+0200\n" +"PO-Revision-Date: 2012-03-18 15:23+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Block Time" +msgstr "" + +msgid "Enable P2P-Block" +msgstr "" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "" + +msgid "P2P-Block" +msgstr "" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" + +msgid "Portrange" +msgstr "" + +msgid "Whitelisted IPs" +msgstr "" + +msgid "seconds" +msgstr "δευτερόλεπτα" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/en/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/en/p2pblock.po new file mode 100644 index 0000000..00cccc8 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/en/p2pblock.po @@ -0,0 +1,28 @@ +msgid "Block Time" +msgstr "" + +msgid "Enable P2P-Block" +msgstr "" + +msgid "IP-P2P" +msgstr "" + +msgid "Layer7-Protocols" +msgstr "" + +msgid "P2P-Block" +msgstr "" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" + +msgid "Portrange" +msgstr "" + +msgid "Whitelisted IPs" +msgstr "" + +msgid "seconds" +msgstr "" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/es/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/es/p2pblock.po new file mode 100644 index 0000000..1edc533 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/es/p2pblock.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-19 16:56+0200\n" +"PO-Revision-Date: 2012-08-19 16:56+0200\n" +"Last-Translator: josevteg \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Block Time" +msgstr "Tiempo de bloqueo" + +msgid "Enable P2P-Block" +msgstr "Activar bloqueo P2P" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Protocolo Layer7" + +msgid "P2P-Block" +msgstr "Bloqueo de P2P" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"El bloqueo de P2P es un mecanismo de lista gris para bloquear varios " +"protocolos punto a punto a clientes que no están en lista blanca." + +msgid "Portrange" +msgstr "Rango de puertos" + +msgid "Whitelisted IPs" +msgstr "IPs en la lista blanca" + +msgid "seconds" +msgstr "segundos" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/fr/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/fr/p2pblock.po new file mode 100644 index 0000000..524d3d0 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/fr/p2pblock.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-06-13 21:39+0200\n" +"PO-Revision-Date: 2012-01-15 07:06+0200\n" +"Last-Translator: desillu \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Block Time" +msgstr "Temps de blocage" + +msgid "Enable P2P-Block" +msgstr "Activer le blocage P2P" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Protocoles de couche 7" + +msgid "P2P-Block" +msgstr "Blocage P2P" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"Le blocage P2P est un mécanisme de liste grise pour bloquer divers " +"protocoles de pair-à-pair de clients non autorisés." + +msgid "Portrange" +msgstr "Gamme de ports" + +msgid "Whitelisted IPs" +msgstr "Adresses IP autorisées" + +msgid "seconds" +msgstr "secondes" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/he/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/he/p2pblock.po new file mode 100644 index 0000000..5b2679b --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/he/p2pblock.po @@ -0,0 +1,43 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-10 03:39+0200\n" +"Last-Translator: Snoof \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Block Time" +msgstr "זמן חסימה" + +msgid "Enable P2P-Block" +msgstr "אפשר חסימת P2P" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "פרוטוקולי Layer7" + +msgid "P2P-Block" +msgstr "חסימת P2P" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"חסימת P2P הינו מנגנון ליצירת 'רשימה אפורה', במטרה לחסום סוגים שונים של " +"פרוטוקולי P2P עבור לקוחות שאינם ב'רשימה הלבנה'." + +msgid "Portrange" +msgstr "טווח פורטים" + +msgid "Whitelisted IPs" +msgstr "כתובות IP ברשימה הלבנה" + +msgid "seconds" +msgstr "שניות" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/hu/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/hu/p2pblock.po new file mode 100644 index 0000000..4f1dffa --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/hu/p2pblock.po @@ -0,0 +1,43 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-01 19:16+0200\n" +"Last-Translator: juhosg \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Block Time" +msgstr "Blokkolási idő" + +msgid "Enable P2P-Block" +msgstr "P2P-Block engedélyezése" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Layer7 protokollok" + +msgid "P2P-Block" +msgstr "P2P-Block" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"A P2P-Block különféle peer-to-peer protokollok blokkolására szolgáló " +"mechanizmus, a fehérlistában nem szereplő ügyfelek részére." + +msgid "Portrange" +msgstr "Port tartomány" + +msgid "Whitelisted IPs" +msgstr "Fehérlistás IP címek" + +msgid "seconds" +msgstr "másodperc" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/it/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/it/p2pblock.po new file mode 100644 index 0000000..3be5010 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/it/p2pblock.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-20 10:18+0200\n" +"PO-Revision-Date: 2012-04-20 10:21+0200\n" +"Last-Translator: claudyus \n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Block Time" +msgstr "Periodo di censura" + +msgid "Enable P2P-Block" +msgstr "Abilita la censura del P2P" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Protocolli di Layer7" + +msgid "P2P-Block" +msgstr "Censura P2P" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"La censura, block, del P2P è un meccanismo per bloccare diversi protocolli " +"peer-to-peer da parte di clienti non apparteneti alla whitelist." + +msgid "Portrange" +msgstr "Range delle porte" + +msgid "Whitelisted IPs" +msgstr "IP in whitelist" + +msgid "seconds" +msgstr "secondi" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/ja/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/ja/p2pblock.po new file mode 100644 index 0000000..00cccc8 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/ja/p2pblock.po @@ -0,0 +1,28 @@ +msgid "Block Time" +msgstr "" + +msgid "Enable P2P-Block" +msgstr "" + +msgid "IP-P2P" +msgstr "" + +msgid "Layer7-Protocols" +msgstr "" + +msgid "P2P-Block" +msgstr "" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" + +msgid "Portrange" +msgstr "" + +msgid "Whitelisted IPs" +msgstr "" + +msgid "seconds" +msgstr "" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/ms/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/ms/p2pblock.po new file mode 100644 index 0000000..00cccc8 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/ms/p2pblock.po @@ -0,0 +1,28 @@ +msgid "Block Time" +msgstr "" + +msgid "Enable P2P-Block" +msgstr "" + +msgid "IP-P2P" +msgstr "" + +msgid "Layer7-Protocols" +msgstr "" + +msgid "P2P-Block" +msgstr "" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" + +msgid "Portrange" +msgstr "" + +msgid "Whitelisted IPs" +msgstr "" + +msgid "seconds" +msgstr "" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/no/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/no/p2pblock.po new file mode 100644 index 0000000..af9c25e --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/no/p2pblock.po @@ -0,0 +1,36 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Block Time" +msgstr "Blokkerings tid" + +msgid "Enable P2P-Block" +msgstr "Aktiver P2P-Blokkering" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Lag7-Protokoller" + +msgid "P2P-Block" +msgstr "P2P-Blokkering" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"P2P-blokkering er en mekanisme for å blokkere ulike peer-to-peer protokoller " +"for klienter som ikke er hvitelistede." + +msgid "Portrange" +msgstr "Portområde" + +msgid "Whitelisted IPs" +msgstr "Hvitelistede IP'er" + +msgid "seconds" +msgstr "sekunder" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/pl/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/pl/p2pblock.po new file mode 100644 index 0000000..9222a08 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/pl/p2pblock.po @@ -0,0 +1,46 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-29 10:53+0200\n" +"PO-Revision-Date: 2012-03-29 10:55+0200\n" +"Last-Translator: Anonymous Pootle User\n" +"Language-Team: LANGUAGE \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Block Time" +msgstr "Czas blokowania" + +msgid "Enable P2P-Block" +msgstr "Włącz P2P-Block" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Protokoły Layer7" + +msgid "P2P-Block" +msgstr "P2P-Block" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"P2P-Block jest mechanizmem który blokuje rozmaite protokoły peer-to-peer dla " +"klientów spoza dozwolonej listy." + +msgid "Portrange" +msgstr "Zakres portów" + +msgid "Whitelisted IPs" +msgstr "Dozwolone adresy IP" + +msgid "seconds" +msgstr "sekund" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/pt-br/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/pt-br/p2pblock.po new file mode 100644 index 0000000..de36381 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/pt-br/p2pblock.po @@ -0,0 +1,30 @@ +msgid "Block Time" +msgstr "Tempo de bloqueio" + +msgid "Enable P2P-Block" +msgstr "Habilite o bloqueio P2P" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Protocolos da camada de aplicação" + +msgid "P2P-Block" +msgstr "P2P-Block" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"P2P-Block é um mecanismo de lista cinza para bloquear vários protocolos " +"peer-to-peer para clientes fora da lista branca." + +msgid "Portrange" +msgstr "Faixa de porta" + +msgid "Whitelisted IPs" +msgstr "IPs na lista branca" + +msgid "seconds" +msgstr "segundos" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/pt/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/pt/p2pblock.po new file mode 100644 index 0000000..365f9f2 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/pt/p2pblock.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-05-01 01:17+0200\n" +"PO-Revision-Date: 2013-05-01 01:30+0200\n" +"Last-Translator: pedromrgoncalves \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Block Time" +msgstr "Tempo a bloquear" + +msgid "Enable P2P-Block" +msgstr "Activar Bloqueio P2P" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Portocolos Layer7" + +msgid "P2P-Block" +msgstr "Bloqueio P2P" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"Bloqueio P2P é um mecanismo lista verde para bloquear vários protocolos " +"peer-to-peer para clientes que não se encontram na lista branca" + +msgid "Portrange" +msgstr "Intervalo de Portas" + +msgid "Whitelisted IPs" +msgstr "IPs na lista branca" + +msgid "seconds" +msgstr "segundos" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/ro/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/ro/p2pblock.po new file mode 100644 index 0000000..2f7d74e --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/ro/p2pblock.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-07 17:09+0200\n" +"Last-Translator: Daniel \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Block Time" +msgstr "Durata de blocare" + +msgid "Enable P2P-Block" +msgstr "Activeaza blocarea P2P" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Protocoale Layer7" + +msgid "P2P-Block" +msgstr "Blocare P2P" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"Blocarea P2P este un mecanism de blocare a diferitelor protocoale pentru " +"clienti necunoscuti." + +msgid "Portrange" +msgstr "Gama de porturi" + +msgid "Whitelisted IPs" +msgstr "Adrese IP de incredere" + +msgid "seconds" +msgstr "secunde" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/ru/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/ru/p2pblock.po new file mode 100644 index 0000000..f6a2740 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/ru/p2pblock.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: p2pblock\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-06-01 12:02+0200\n" +"PO-Revision-Date: 2013-11-13 18:46+0200\n" +"Last-Translator: Роман \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Block Time" +msgstr "Время блокировки" + +msgid "Enable P2P-Block" +msgstr "Включить блокировку P2P" + +#, fuzzy +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Протоколы 7-го уровня" + +msgid "P2P-Block" +msgstr "Блокировка P2P" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"Блокировка P2P позволяет запретить P2P-протоколы для клиентов вне белого " +"списка." + +msgid "Portrange" +msgstr "Диапазон портов" + +msgid "Whitelisted IPs" +msgstr "Белый список IP" + +msgid "seconds" +msgstr "секунды" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/sk/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/sk/p2pblock.po new file mode 100644 index 0000000..1881b3c --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/sk/p2pblock.po @@ -0,0 +1,38 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Block Time" +msgstr "" + +msgid "Enable P2P-Block" +msgstr "" + +msgid "IP-P2P" +msgstr "" + +msgid "Layer7-Protocols" +msgstr "" + +msgid "P2P-Block" +msgstr "" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" + +msgid "Portrange" +msgstr "" + +msgid "Whitelisted IPs" +msgstr "" + +msgid "seconds" +msgstr "" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/sv/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/sv/p2pblock.po new file mode 100644 index 0000000..f98c6cc --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/sv/p2pblock.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Block Time" +msgstr "Tid för blockering" + +msgid "Enable P2P-Block" +msgstr "Aktivera P2P-blockering" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Layer7-protokollen" + +msgid "P2P-Block" +msgstr "P2P-blockering" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"P2P-Block är en grålistande mekanism för att blockera vissa peer-to-peer-" +"protokoll för icke-vitlistade klienter." + +msgid "Portrange" +msgstr "Porträckvidd" + +msgid "Whitelisted IPs" +msgstr "Vitlistade IP-adresser" + +msgid "seconds" +msgstr "sekunder" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/templates/p2pblock.pot b/feeds/luci/applications/luci-app-p2pblock/po/templates/p2pblock.pot new file mode 100644 index 0000000..6fa5da1 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/templates/p2pblock.pot @@ -0,0 +1,31 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Block Time" +msgstr "" + +msgid "Enable P2P-Block" +msgstr "" + +msgid "IP-P2P" +msgstr "" + +msgid "Layer7-Protocols" +msgstr "" + +msgid "P2P-Block" +msgstr "" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" + +msgid "Portrange" +msgstr "" + +msgid "Whitelisted IPs" +msgstr "" + +msgid "seconds" +msgstr "" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/tr/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/tr/p2pblock.po new file mode 100644 index 0000000..7c670d8 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/tr/p2pblock.po @@ -0,0 +1,43 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-10-11 22:45+0200\n" +"Last-Translator: vincenzo \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Block Time" +msgstr "Engel Zamanı" + +msgid "Enable P2P-Block" +msgstr "P2P-Bloğu'nu Aç" + +msgid "IP-P2P" +msgstr "iP-P2P" + +msgid "Layer7-Protocols" +msgstr "Layer7 - Protokolleri" + +msgid "P2P-Block" +msgstr "P2P-Bloğu" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"P2P-Bloğu bir engel (greylist) mekanizmasıdır. izin verilenler listesinde " +"(Beyaz Liste) olmayan istemciler için p2p protokolünü engeller." + +msgid "Portrange" +msgstr "Portrange" + +msgid "Whitelisted IPs" +msgstr "Beyaz Liste iPleri" + +msgid "seconds" +msgstr "saniye" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/uk/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/uk/p2pblock.po new file mode 100644 index 0000000..3e7dff9 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/uk/p2pblock.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-13 16:04+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Block Time" +msgstr "Загальний час" + +msgid "Enable P2P-Block" +msgstr "Активувати блокування P2P" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Протокол Layer7" + +msgid "P2P-Block" +msgstr "P2P блоковано" + +#, fuzzy +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"P2P-блокування являє собою механізм сірих списків для блокування різних " +"рівний-однотипних протоколів для НЕ-білого списку клієнтів." + +msgid "Portrange" +msgstr "Діапазон портів" + +msgid "Whitelisted IPs" +msgstr "Білий список IP-адрес" + +msgid "seconds" +msgstr "секунд" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/vi/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/vi/p2pblock.po new file mode 100644 index 0000000..4bad090 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/vi/p2pblock.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: Manuel Munz \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Block Time" +msgstr "Thời gian Block" + +msgid "Enable P2P-Block" +msgstr "Kích hoạt P2P-Block" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "Layer7-protocols" + +msgid "P2P-Block" +msgstr "P2P-Block" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "" +"P2P-Block là một cÆ¡ chế greylisting để chặn các peer-to-peer " +"protocols cho khách hàng không nằm trên whitelisted." + +msgid "Portrange" +msgstr "Portrange" + +msgid "Whitelisted IPs" +msgstr "Whitelisted IPs" + +msgid "seconds" +msgstr "giây" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/zh-cn/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/zh-cn/p2pblock.po new file mode 100644 index 0000000..66725be --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/zh-cn/p2pblock.po @@ -0,0 +1,43 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-06-17 19:11+0200\n" +"PO-Revision-Date: 2013-10-08 15:22+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: LANGUAGE \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Block Time" +msgstr "封锁时间" + +msgid "Enable P2P-Block" +msgstr "启动P2P封锁" + +msgid "IP-P2P" +msgstr "IP-P2P" + +msgid "Layer7-Protocols" +msgstr "第7层协议" + +msgid "P2P-Block" +msgstr "P2P封锁" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "P2P封锁使用灰名单机制,以阻止非白名单客户的各种P2P协议。" + +msgid "Portrange" +msgstr "端口范围" + +msgid "Whitelisted IPs" +msgstr "白名单IP地址" + +msgid "seconds" +msgstr "秒" diff --git a/feeds/luci/applications/luci-app-p2pblock/po/zh-tw/p2pblock.po b/feeds/luci/applications/luci-app-p2pblock/po/zh-tw/p2pblock.po new file mode 100644 index 0000000..f542f77 --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/po/zh-tw/p2pblock.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 11:09+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Block Time" +msgstr "阻斷時間" + +msgid "Enable P2P-Block" +msgstr "啓用P2P禁斷" + +msgid "IP-P2P" +msgstr "IP點對點協定" + +msgid "Layer7-Protocols" +msgstr "第七層協定" + +msgid "P2P-Block" +msgstr "P2P禁斷" + +msgid "" +"P2P-Block is a greylisting mechanism to block various peer-to-peer protocols " +"for non-whitelisted clients." +msgstr "P2P-Block是一個灰名單機制, 針對不在白名單清單裡面的用戶, 阻斷各種類的P2P點對點協定." + +msgid "Portrange" +msgstr "範圍埠" + +msgid "Whitelisted IPs" +msgstr "白名單列表IP" + +msgid "seconds" +msgstr "秒數" diff --git a/feeds/luci/applications/luci-app-p2pblock/root/etc/uci-defaults/40_luci-p2pblock b/feeds/luci/applications/luci-app-p2pblock/root/etc/uci-defaults/40_luci-p2pblock new file mode 100755 index 0000000..030ebbe --- /dev/null +++ b/feeds/luci/applications/luci-app-p2pblock/root/etc/uci-defaults/40_luci-p2pblock @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete citrack.@freifunk_p2pblock[-1] + add ucitrack freifunk_p2pblock + set ucitrack.@freifunk_p2pblock[-1].init=freifunk-p2pblock + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-p910nd/Makefile b/feeds/luci/applications/luci-app-p910nd/Makefile new file mode 100644 index 0000000..adb35bd --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=p910nd - Printer server module +LUCI_DEPENDS:=+p910nd + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-p910nd/luasrc/controller/p910nd.lua b/feeds/luci/applications/luci-app-p910nd/luasrc/controller/p910nd.lua new file mode 100644 index 0000000..df47e9f --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/luasrc/controller/p910nd.lua @@ -0,0 +1,15 @@ +-- Copyright 2008 Yanira +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.p910nd", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/p910nd") then + return + end + + local page + + page = entry({"admin", "services", "p910nd"}, cbi("p910nd"), _("p910nd - Printer server"), 60) + page.dependent = true +end diff --git a/feeds/luci/applications/luci-app-p910nd/luasrc/model/cbi/p910nd.lua b/feeds/luci/applications/luci-app-p910nd/luasrc/model/cbi/p910nd.lua new file mode 100644 index 0000000..0990138 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/luasrc/model/cbi/p910nd.lua @@ -0,0 +1,49 @@ +-- Copyright 2008 Yanira +-- Copyright 2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local uci = luci.model.uci.cursor_state() +local net = require "luci.model.network" +local m, s, p, b + +m = Map("p910nd", translate("p910nd - Printer server"), + translatef("First you have to install the packages to get support for USB (kmod-usb-printer) or parallel port (kmod-lp).")) + +net = net.init(m.uci) + +s = m:section(TypedSection, "p910nd", translate("Settings")) +s.addremove = true +s.anonymous = true + +s:option(Flag, "enabled", translate("enable")) + +s:option(Value, "device", translate("Device")).rmempty = true + +b = s:option(Value, "bind", translate("Interface"), translate("Specifies the interface to listen on.")) +b.template = "cbi/network_netlist" +b.nocreate = true +b.unspecified = true + +function b.cfgvalue(...) + local v = Value.cfgvalue(...) + if v then + return (net:get_status_by_address(v)) + end +end + +function b.write(self, section, value) + local n = net:get_network(value) + if n and n:ipaddr() then + Value.write(self, section, n:ipaddr()) + end +end + +p = s:option(ListValue, "port", translate("Port"), translate("TCP listener port.")) +p.rmempty = true +for i=0,9 do + p:value(i, 9100+i) +end + +s:option(Flag, "bidirectional", translate("Bidirectional mode")) + +return m diff --git a/feeds/luci/applications/luci-app-p910nd/po/ca/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/ca/p910nd.po new file mode 100644 index 0000000..6862df4 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/ca/p910nd.po @@ -0,0 +1,55 @@ +# p910nd.pot +# generated from ./applications/luci-p910nd/luasrc/i18n/p910nd.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-07-01 03:56+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "Mode bidireccional" + +msgid "Device" +msgstr "Dispositiu" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Primer heu d'instal·lar els paquets de suport USB (kmod-usb-printer) o de " +"port paral·lel (kmod-lp)." + +msgid "Interface" +msgstr "Interfície" + +msgid "Port" +msgstr "Port" + +msgid "Settings" +msgstr "Ajusts" + +msgid "Specifies the interface to listen on." +msgstr "Especifica la interfície en que escoltar." + +msgid "TCP listener port." +msgstr "Port d'escolta TCP." + +msgid "enable" +msgstr "habilita" + +msgid "p910nd - Printer server" +msgstr "p910nd - Servidor d'impressió" + +#~ msgid "port_help" +#~ msgstr "" +#~ "El p910nd escolta al port 910+N. Per exemple, 9100 per la primera " +#~ "impressora (la 0)." diff --git a/feeds/luci/applications/luci-app-p910nd/po/cs/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/cs/p910nd.po new file mode 100644 index 0000000..e4f1c71 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/cs/p910nd.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-20 23:28+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "Obousměrný režim" + +msgid "Device" +msgstr "Zařízení" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Nejprve je nutno nainstalovat balíčky přinášející podporu USB (kmod-usb-" +"printer) či paralelního portu (kmod-lp)." + +msgid "Interface" +msgstr "Rozhraní" + +msgid "Port" +msgstr "Port" + +msgid "Settings" +msgstr "Nastavení" + +msgid "Specifies the interface to listen on." +msgstr "Specifikuje rozhraní pro naslouchání." + +msgid "TCP listener port." +msgstr "Naslouchající TCP port" + +msgid "enable" +msgstr "Povolit" + +msgid "p910nd - Printer server" +msgstr "p910nd - tiskový server" + +#~ msgid "port_help" +#~ msgstr "Nápověda pro výběr portu" diff --git a/feeds/luci/applications/luci-app-p910nd/po/de/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/de/p910nd.po new file mode 100644 index 0000000..d72e858 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/de/p910nd.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2012-09-12 14:00+0200\n" +"Last-Translator: Jo-Philipp \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "Bidirektionaler Modus" + +msgid "Device" +msgstr "Gerät" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Bevor p910nd verwendet werden kann muessen Pakete fuer USB (kmod-usb-" +"printer) und Parallelport (kmod-lp) Support installiert werden." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Settings" +msgstr "Einstellungen" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "TCP Port" + +msgid "enable" +msgstr "aktivieren" + +msgid "p910nd - Printer server" +msgstr "p910nd - Printserver" + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "p910nd hoert auf Port 910+N. Z.B. 9100 fuer ersten Drucker" diff --git a/feeds/luci/applications/luci-app-p910nd/po/el/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/el/p910nd.po new file mode 100644 index 0000000..13b97c0 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/el/p910nd.po @@ -0,0 +1,55 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-28 02:08+0200\n" +"PO-Revision-Date: 2012-03-18 15:25+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Bidirectional mode" +msgstr "Αμφίδρομη μέθοδος" + +msgid "Device" +msgstr "Συσκευή" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Πρώτα πρέπει να εγκατασταθούν τα πακέτα για να υπάρξει υποστήριξη για USB " +"(kmod-usb-printer) ή παράλληλη θύρα (kmod-lp)." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "Θύρα" + +msgid "Settings" +msgstr "Ρυθμίσεις" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "Θύρα ακρόασης TCP" + +msgid "enable" +msgstr "ενεργοποίηση" + +msgid "p910nd - Printer server" +msgstr "p910nd - Εξυπηρετητής εκτυπώσεων" + +#~ msgid "port_help" +#~ msgstr "port_help" + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "" +#~ "p910nd ανταποκρίνεται στην πόρτα 910+N. π.χ. 9100 για τον πρώτο εκτυπωτή" diff --git a/feeds/luci/applications/luci-app-p910nd/po/en/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/en/p910nd.po new file mode 100644 index 0000000..766673a --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/en/p910nd.po @@ -0,0 +1,51 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:35+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "Bidirectional mode" +msgstr "Bidirectional mode" + +msgid "Device" +msgstr "" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "" + +msgid "enable" +msgstr "" + +msgid "p910nd - Printer server" +msgstr "p910nd - Printer server" + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "p910nd listens on port 910+N. E.g. 9100 for the first printer." diff --git a/feeds/luci/applications/luci-app-p910nd/po/es/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/es/p910nd.po new file mode 100644 index 0000000..f558c99 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/es/p910nd.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2014-06-15 09:10+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "Modo bidireccional" + +msgid "Device" +msgstr "Dispositivo" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Debe instalar primero el soporte para puertos USB (kmod-usb-printer) o " +"paralelo (kmod-lp)." + +msgid "Interface" +msgstr "Interfaz" + +msgid "Port" +msgstr "Puerto" + +msgid "Settings" +msgstr "Configuración" + +msgid "Specifies the interface to listen on." +msgstr "Especifica el interfaz en el que se escucha." + +msgid "TCP listener port." +msgstr "Puerto de escucha TCP." + +msgid "enable" +msgstr "activar" + +msgid "p910nd - Printer server" +msgstr "Servidor de Impresión - p910nd" + +#~ msgid "port_help" +#~ msgstr "puerto_ayuda" diff --git a/feeds/luci/applications/luci-app-p910nd/po/fr/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/fr/p910nd.po new file mode 100644 index 0000000..5621e10 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/fr/p910nd.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-01-15 07:08+0200\n" +"Last-Translator: desillu \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Bidirectional mode" +msgstr "Mode bi-directionnel" + +msgid "Device" +msgstr "Périphérique" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Vous devez d'abord installer les paquets pour gérer des imprimantes USB " +"(kmod-usb-printer) ou sur port parallèle (kmod-lp)." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Settings" +msgstr "Paramètres" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "Port d'écoute TCP." + +msgid "enable" +msgstr "activer" + +msgid "p910nd - Printer server" +msgstr "p910nd - Serveur d'impression" + +#~ msgid "port_help" +#~ msgstr "aide_port" + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "" +#~ "p910nd écoute sur le port 910+N, par exemple 9100 pour la première " +#~ "imprimante." diff --git a/feeds/luci/applications/luci-app-p910nd/po/he/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/he/p910nd.po new file mode 100644 index 0000000..3accdca --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/he/p910nd.po @@ -0,0 +1,53 @@ +# p910nd.pot +# generated from ./applications/luci-p910nd/luasrc/i18n/p910nd.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-10 03:43+0200\n" +"Last-Translator: Snoof \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "מצב דו-כיווני." + +msgid "Device" +msgstr "התקן" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"ראשית עליך להתקין את החבילות כדי לקבל תמיכה ב- USB (kmod-usb-printer) או " +"בחיבור מקבילי (kmod-lp)." + +msgid "Interface" +msgstr "" + +# "יציאה" או "יציאת התקן" ? +#, fuzzy +msgid "Port" +msgstr "יציאת התקן" + +msgid "Settings" +msgstr "הגדרות" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "יציאת האזנה ל- TCP" + +msgid "enable" +msgstr "לאפשר" + +msgid "p910nd - Printer server" +msgstr "p910nd - שרת מדפסות" + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "p910nd מאזין לפורט 910+N (למשל 9100) עבור המדפסת הראשונה." diff --git a/feeds/luci/applications/luci-app-p910nd/po/hu/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/hu/p910nd.po new file mode 100644 index 0000000..7179871 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/hu/p910nd.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-28 16:41+0200\n" +"Last-Translator: Gábor \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Bidirectional mode" +msgstr "Kétirányú mód" + +msgid "Device" +msgstr "Eszköz" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"A p910nd használata előtt szükséges az USB (kmod-usb-printer), vagy " +"párhuzamos (kmod-lp) portokat támogató csomagok telepítése." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Settings" +msgstr "Beállítások" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "TCP port" + +msgid "enable" +msgstr "Engedélyezés" + +msgid "p910nd - Printer server" +msgstr "p910nd - Nyomtató szerver" + +#~ msgid "port_help" +#~ msgstr "port_súgó" diff --git a/feeds/luci/applications/luci-app-p910nd/po/it/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/it/p910nd.po new file mode 100644 index 0000000..47bf687 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/it/p910nd.po @@ -0,0 +1,55 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2014-08-05 11:23+0200\n" +"Last-Translator: morganfw \n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "Modalità bidirezionale" + +msgid "Device" +msgstr "Dispositivo" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Devi prima aver installato i pacchetti per avere il supporto dell'USB (kmod-" +"usb-printer) o della porta parallela (kmod-lp)." + +msgid "Interface" +msgstr "Interfaccia" + +msgid "Port" +msgstr "Porta" + +msgid "Settings" +msgstr "Impostazioni" + +msgid "Specifies the interface to listen on." +msgstr "Specifica l'interfaccia per l'ascolto." + +msgid "TCP listener port." +msgstr "Porta d'ascolto TCP." + +msgid "enable" +msgstr "Attiva" + +msgid "p910nd - Printer server" +msgstr "p910nd - Server di stampa" + +#~ msgid "port_help" +#~ msgstr "Porta d'aiuto" + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "" +#~ "p910nd è in ascolto sulla porta 910+N. Ad es. 9100 per la prima stampante." diff --git a/feeds/luci/applications/luci-app-p910nd/po/ja/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/ja/p910nd.po new file mode 100644 index 0000000..28ffc38 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/ja/p910nd.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2016-12-22 01:08+0900\n" +"Last-Translator: INAGAKI Hiroshi \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" + +msgid "Bidirectional mode" +msgstr "双方向モード" + +msgid "Device" +msgstr "デバイス" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"まず初めに、USB(kmod-usb-printer)または、パラレルポート(kmod-lp)をサポートす" +"るためのパッケージをインストールしてください。" + +msgid "Interface" +msgstr "インターフェース" + +msgid "Port" +msgstr "ポート番号" + +msgid "Settings" +msgstr "設定" + +msgid "Specifies the interface to listen on." +msgstr "待ち受けるインターフェースを指定します。" + +msgid "TCP listener port." +msgstr "TCP接続待ちポート" + +msgid "enable" +msgstr "有効" + +msgid "p910nd - Printer server" +msgstr "p910nd - プリンタサーバー" + +#~ msgid "port_help" +#~ msgstr "port_help" diff --git a/feeds/luci/applications/luci-app-p910nd/po/ms/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/ms/p910nd.po new file mode 100644 index 0000000..254fc66 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/ms/p910nd.po @@ -0,0 +1,43 @@ +# p910nd.pot +# generated from ./applications/luci-p910nd/luasrc/i18n/p910nd.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Bidirectional mode" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "" + +msgid "enable" +msgstr "" + +msgid "p910nd - Printer server" +msgstr "" diff --git a/feeds/luci/applications/luci-app-p910nd/po/no/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/no/p910nd.po new file mode 100644 index 0000000..3bf49c5 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/no/p910nd.po @@ -0,0 +1,47 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2013-03-21 23:05+0200\n" +"Last-Translator: protx \n" +"Language: no\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "Toveis modus (bidirectional)" + +msgid "Device" +msgstr "Enhet" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Du må først installere pakkene som gir støtte for USB (kmod-usb-printer) " +"eller parallellport (kmod-lp) skriver." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Settings" +msgstr "Innstillinger" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "TCP lytte port." + +msgid "enable" +msgstr "Aktiver" + +msgid "p910nd - Printer server" +msgstr "p910nd - Skriverserver" + +#~ msgid "port_help" +#~ msgstr "" +#~ "p910nd lytter på port 910+N. (N=0 blir port 9100 for første skriver)" diff --git a/feeds/luci/applications/luci-app-p910nd/po/pl/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/pl/p910nd.po new file mode 100644 index 0000000..c5f611a --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/pl/p910nd.po @@ -0,0 +1,56 @@ +# p910nd.pot +# generated from ./applications/luci-p910nd/luasrc/i18n/p910nd.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-02 19:31+0200\n" +"Last-Translator: obsy \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "Tryb dwukierunkowy" + +msgid "Device" +msgstr "Urządzenie" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Po pierwsze, musisz zainstalować pakiety obsługujące interfejs USB (kmod-" +"usb-printer) lub LPT (kmod-lp)." + +msgid "Interface" +msgstr "Interfejs" + +msgid "Port" +msgstr "Port" + +msgid "Settings" +msgstr "Ustawienia" + +msgid "Specifies the interface to listen on." +msgstr "Określa interfejs do nasłuchu." + +msgid "TCP listener port." +msgstr "Port nasłuchu TCP" + +msgid "enable" +msgstr "Włączony" + +# W sambie usługa też się nazywa "network shares", więc nie ma specjalnie potrzeby używania nazwy własnej demona "p910nd". +msgid "p910nd - Printer server" +msgstr "Serwer wydruku" + +#~ msgid "port_help" +#~ msgstr "port_help" + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "p910nd nasłuchuje na porcie 910X, np. 9100 dla pierwszej drukarki." diff --git a/feeds/luci/applications/luci-app-p910nd/po/pt-br/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/pt-br/p910nd.po new file mode 100644 index 0000000..de7c429 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/pt-br/p910nd.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2014-06-21 19:02+0200\n" +"Last-Translator: Éder \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "Modo bidirecional" + +msgid "Device" +msgstr "Dispositivo" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Primeiro você deve instalar os pacotes para obter suporte USB (kmod-usb-" +"printer) ou porta paralela (kmod-lp)." + +# 20140621: edersg: tradução +msgid "Interface" +msgstr "Interface" + +msgid "Port" +msgstr "Porta" + +msgid "Settings" +msgstr "Configurações" + +# 20140621: edersg: tradução +msgid "Specifies the interface to listen on." +msgstr "Especifica a interface para escuta." + +msgid "TCP listener port." +msgstr "Porta TCP de escuta." + +msgid "enable" +msgstr "habilitado" + +msgid "p910nd - Printer server" +msgstr "p910nd - Servidor de impressão" + +#~ msgid "port_help" +#~ msgstr "" +#~ "p910nd escuta na porta 910x. Por exemplo, 9100 para a primeira impressora." + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "p910nd escuta na porta 910+N. Ex. 9100 para a primeira impressora." diff --git a/feeds/luci/applications/luci-app-p910nd/po/pt/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/pt/p910nd.po new file mode 100644 index 0000000..734967e --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/pt/p910nd.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-05-01 00:41+0200\n" +"Last-Translator: pedromrgoncalves \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "Modo bidirecional" + +msgid "Device" +msgstr "Dispositivo" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Primeiro você deve instalar os pacotes para obter suporte USB (kmod-usb-" +"printer) ou porta paralela (kmod-lp)." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "Porta" + +msgid "Settings" +msgstr "Definições" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "Porta TCP ouvinte" + +msgid "enable" +msgstr "activar" + +msgid "p910nd - Printer server" +msgstr "P910nd - Servidor de impressão" + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "p910nd escuta na porta 910+N. Ex. 9100 para a primeira impressora." diff --git a/feeds/luci/applications/luci-app-p910nd/po/ro/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/ro/p910nd.po new file mode 100644 index 0000000..7cad5c0 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/ro/p910nd.po @@ -0,0 +1,47 @@ +# p910nd.pot +# generated from ./applications/luci-p910nd/luasrc/i18n/p910nd.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-29 20:02+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "" + +msgid "Device" +msgstr "Dispozitiv" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" + +msgid "Interface" +msgstr "Interfaţă" + +msgid "Port" +msgstr "Port" + +msgid "Settings" +msgstr "Setări" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "" + +msgid "enable" +msgstr "activează" + +msgid "p910nd - Printer server" +msgstr "" diff --git a/feeds/luci/applications/luci-app-p910nd/po/ru/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/ru/p910nd.po new file mode 100644 index 0000000..923b22e --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/ru/p910nd.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: p910nd\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-08-15 11:42+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Bidirectional mode" +msgstr "Двунаправленный режим" + +msgid "Device" +msgstr "Устройство" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Для начала вам необходимо установить пакеты для поддержки USB (kmod-usb-" +"printer) или параллельного порта (kmod-lp)." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "Порт" + +msgid "Settings" +msgstr "Настройки" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "Прослушиваемый TCP-порт." + +msgid "enable" +msgstr "включить" + +msgid "p910nd - Printer server" +msgstr "p910nd - сервер печати" + +#~ msgid "port_help" +#~ msgstr "Помощь по портам" + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "" +#~ "p910nd прослушивает порт 910+N. То есть 9100 - номер первого принтера." diff --git a/feeds/luci/applications/luci-app-p910nd/po/sk/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/sk/p910nd.po new file mode 100644 index 0000000..5282dd7 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/sk/p910nd.po @@ -0,0 +1,41 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Bidirectional mode" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "" + +msgid "enable" +msgstr "" + +msgid "p910nd - Printer server" +msgstr "" diff --git a/feeds/luci/applications/luci-app-p910nd/po/sv/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/sv/p910nd.po new file mode 100644 index 0000000..82b0be4 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/sv/p910nd.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Bidirectional mode" +msgstr "" + +msgid "Device" +msgstr "Enhet" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Först behöver du installera paketen för att få stöd för USB (kmod-usb-" +"printer) eller paralell port (kmod-lp)." + +msgid "Interface" +msgstr "Gränssnitt" + +msgid "Port" +msgstr "Port" + +msgid "Settings" +msgstr "Inställningar" + +msgid "Specifies the interface to listen on." +msgstr "Anger gränssnittet att lyssna på" + +msgid "TCP listener port." +msgstr "Port för TCP-lyssnare." + +msgid "enable" +msgstr "aktivera" + +msgid "p910nd - Printer server" +msgstr "p910nd- Skrivar-server" diff --git a/feeds/luci/applications/luci-app-p910nd/po/templates/p910nd.pot b/feeds/luci/applications/luci-app-p910nd/po/templates/p910nd.pot new file mode 100644 index 0000000..3674fdb --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/templates/p910nd.pot @@ -0,0 +1,34 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Bidirectional mode" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "" + +msgid "enable" +msgstr "" + +msgid "p910nd - Printer server" +msgstr "" diff --git a/feeds/luci/applications/luci-app-p910nd/po/tr/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/tr/p910nd.po new file mode 100644 index 0000000..ed69a01 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/tr/p910nd.po @@ -0,0 +1,46 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-10-11 23:24+0200\n" +"Last-Translator: vincenzo \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "Çift Yönlü Mod" + +msgid "Device" +msgstr "Aygıt" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"USB (kmod-usb-yazıcı) veya paralel port (kmod-lp) kullanabilmek için destek " +"paketi yüklemeniz gerekebilir." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Settings" +msgstr "Ayarlar" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "Dinlemedeki TCP portları" + +msgid "enable" +msgstr "Etkinleştir" + +msgid "p910nd - Printer server" +msgstr "P910nd_Yazıcı Sunucusu" diff --git a/feeds/luci/applications/luci-app-p910nd/po/uk/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/uk/p910nd.po new file mode 100644 index 0000000..237054d --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/uk/p910nd.po @@ -0,0 +1,47 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-05-26 18:35+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "Двонаправлений режим" + +msgid "Device" +msgstr "Пристрій" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Спочатку вам слід інсталювати пакети для підтримки USB (kmod-usb-printer) " +"або паралельного порту (kmod-lp)." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "Порт" + +msgid "Settings" +msgstr "Параметри" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "Порт TCP, що прослуховується" + +msgid "enable" +msgstr "Увімкнути" + +msgid "p910nd - Printer server" +msgstr "p910nd - сервер друку" diff --git a/feeds/luci/applications/luci-app-p910nd/po/vi/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/vi/p910nd.po new file mode 100644 index 0000000..10035b8 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/vi/p910nd.po @@ -0,0 +1,52 @@ +# p910nd.pot +# generated from ./applications/luci-p910nd/luasrc/i18n/p910nd.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:58+0200\n" +"PO-Revision-Date: 2009-08-13 04:03+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "Bidirectional mode" +msgstr "Chế độ 2 chiều" + +msgid "Device" +msgstr "" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"Trước tiên, bạn cần phải cài đặt các gói để hỗ trợ cho cổng USB (kmod-usb-" +"in), hoặc cổng song song (kmod-lp)." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "" + +msgid "enable" +msgstr "" + +msgid "p910nd - Printer server" +msgstr "p910nd - Máy in chủ" + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "p910nd tiếp thu ở cổng 910+N. E.g. 9100 cho máy in đầu tiên." diff --git a/feeds/luci/applications/luci-app-p910nd/po/zh-cn/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/zh-cn/p910nd.po new file mode 100644 index 0000000..c14e2e7 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/zh-cn/p910nd.po @@ -0,0 +1,49 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:35+0200\n" +"PO-Revision-Date: 2014-06-22 14:36+0200\n" +"Last-Translator: phantasm131 \n" +"Language-Team: QQ Group 75543259 \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "双向模式" + +msgid "Device" +msgstr "设备" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "必须安装支持USB打印机的驱动(kmod-usb-printer)或者并口驱动(kmod-lp)" + +msgid "Interface" +msgstr "接口" + +msgid "Port" +msgstr "端口" + +msgid "Settings" +msgstr "设置" + +msgid "Specifies the interface to listen on." +msgstr "指定监听端口" + +msgid "TCP listener port." +msgstr "TCP监听端口" + +msgid "enable" +msgstr "启用" + +msgid "p910nd - Printer server" +msgstr "打印服务器" + +#~ msgid "p910nd listens on port 910+N. E.g. 9100 for the first printer." +#~ msgstr "p910nd 的监听端口是910+N,举例:9100用于监听第一台打印机" diff --git a/feeds/luci/applications/luci-app-p910nd/po/zh-tw/p910nd.po b/feeds/luci/applications/luci-app-p910nd/po/zh-tw/p910nd.po new file mode 100644 index 0000000..7d6c080 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/po/zh-tw/p910nd.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-18 20:03+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Bidirectional mode" +msgstr "雙向模式" + +msgid "Device" +msgstr "設備" + +msgid "" +"First you have to install the packages to get support for USB (kmod-usb-" +"printer) or parallel port (kmod-lp)." +msgstr "" +"首先你必須安裝軟體包以便獲得USB (kmod-usb-printer)或串列埠(kmod-lp)的支援." + +msgid "Interface" +msgstr "" + +msgid "Port" +msgstr "埠" + +msgid "Settings" +msgstr "設定值" + +msgid "Specifies the interface to listen on." +msgstr "" + +msgid "TCP listener port." +msgstr "聆聽TCP埠" + +msgid "enable" +msgstr "啟用" + +msgid "p910nd - Printer server" +msgstr "p910nd - 印表機伺服器" diff --git a/feeds/luci/applications/luci-app-p910nd/root/etc/uci-defaults/40_luci-p910nd b/feeds/luci/applications/luci-app-p910nd/root/etc/uci-defaults/40_luci-p910nd new file mode 100755 index 0000000..80f6d62 --- /dev/null +++ b/feeds/luci/applications/luci-app-p910nd/root/etc/uci-defaults/40_luci-p910nd @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@p910nd[-1] + add ucitrack p910nd + set ucitrack.@p910nd[-1].init=p910nd + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/COPYING b/feeds/luci/applications/luci-app-pbx-voicemail/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/Makefile b/feeds/luci/applications/luci-app-pbx-voicemail/Makefile new file mode 100644 index 0000000..eefe0fd --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI PBX Administration Voicemail Support +LUCI_DEPENDS:=+luci-app-pbx +asterisk18 +msmtp +coreutils-base64 @BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/luasrc/controller/pbx-voicemail.lua b/feeds/luci/applications/luci-app-pbx-voicemail/luasrc/controller/pbx-voicemail.lua new file mode 100644 index 0000000..6f3dfac --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/luasrc/controller/pbx-voicemail.lua @@ -0,0 +1,24 @@ +--[[ + Copyright 2011 Iordan Iordanov + + This file is part of luci-pbx-voicemail. + + luci-pbx-voicemail is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + luci-pbx-voicemail is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with luci-pbx-voicemail. If not, see . +]]-- + +module("luci.controller.pbx-voicemail", package.seeall) + +function index() + entry({"admin", "services", "pbx", "pbx-voicemail"}, cbi("pbx-voicemail"), "Voicemail", 5) +end diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/luasrc/model/cbi/pbx-voicemail.lua b/feeds/luci/applications/luci-app-pbx-voicemail/luasrc/model/cbi/pbx-voicemail.lua new file mode 100644 index 0000000..a6087e9 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/luasrc/model/cbi/pbx-voicemail.lua @@ -0,0 +1,153 @@ +--[[ + Copyright 2011 Iordan Iordanov + + This file is part of luci-pbx-voicemail. + + luci-pbx-voicemail is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + luci-pbx-voicemail is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with luci-pbx-voicemail. If not, see . +]]-- + +if nixio.fs.access("/etc/init.d/asterisk") then + server = "asterisk" +elseif nixio.fs.access("/etc/init.d/freeswitch") then + server = "freeswitch" +else + server = "" +end + +modulename = "pbx-voicemail" +vmlogfile = "/tmp/last_sent_voicemail.log" + +m = Map (modulename, translate("Voicemail Setup"), + translate("Here you can configure a global voicemail for this PBX. Since this system is \ + intended to run on embedded systems like routers, there is no local storage of voicemail - \ + it must be sent out by email. Therefore you need to configure an outgoing mail (SMTP) server \ + (for example your ISP's, Google's, or Yahoo's SMTP server), and provide a list of \ + addresses that receive recorded voicemail.")) + +-- Recreate the config, and restart services after changes are commited to the configuration. +function m.on_after_commit(self) + luci.sys.call("/etc/init.d/pbx-" .. server .. " restart 1\>/dev/null 2\>/dev/null") + luci.sys.call("/etc/init.d/" .. server .. " restart 1\>/dev/null 2\>/dev/null") +end + + +---------------------------------------------------------------------------------------------------- +s = m:section(NamedSection, "global_voicemail", "voicemail", translate("Global Voicemail Setup"), + translate("When you enable voicemail, you will have the opportunity to specify \ + email addresses that receive recorded voicemail. You must also set up an SMTP server below.")) +s.anonymous = true + +enable = s:option(ListValue, "enabled", translate("Enable Voicemail")) +enable:value("yes", translate("Yes")) +enable:value("no", translate("No")) +enable.default = "no" + +emails = s:option(DynamicList, "global_email_addresses", + translate("Email Addresses that Receive Voicemail")) +emails:depends("enabled", "yes") + +savepath = s:option(Value, "global_save_path", translate("Local Storage Directory"), + translate("You can also retain copies of voicemail messages on the device running \ + your PBX. The path specified here will be created if it doesn't exist. \ + Beware of limited space on embedded devices like routers, and enable this \ + option only if you know what you are doing.")) +savepath.optional = true + +if nixio.fs.access("/etc/pbx-voicemail/recordings/greeting.gsm") then + m1 = s:option(DummyValue, "_m1") + m1:depends("enabled", "yes") + m1.default = "NOTE: Found a voicemail greeting. To check or change your voicemail greeting, dial *789 \ + and the system will play back your current greeting. After that, a long beep will sound and \ + you can press * in order to record a new message. Hang up to avoid recording a message. \ + If you press *, a second long beep will sound, and you can record a new greeting. \ + Hang up or press # to stop recording. When # is pressed the system will play back the \ + new greeting." +else + m1 = s:option(DummyValue, "_m1") + m1:depends("enabled", "yes") + m1.default = "WARNING: Could not find voicemail greeting. Callers will hear only a beep before \ + recording starts. To record a greeting, dial *789, and press * after the long beep. \ + If you press *, a second long beep will sound, and you can record a new greeting. \ + Hang up or press # to stop recording. When # is pressed the system will play back the \ + new greeting." +end + + +---------------------------------------------------------------------------------------------------- +s = m:section(NamedSection, "voicemail_smtp", "voicemail", translate("Outgoing mail (SMTP) Server"), + translate("In order for this PBX to send emails containing voicemail recordings, you need to \ + set up an SMTP server here. Your ISP usually provides an SMTP server for that purpose. \ + You can also set up a third party SMTP server such as the one provided by Google or Yahoo.")) +s.anonymous = true + +serv = s:option(Value, "smtp_server", translate("SMTP Server Hostname or IP Address")) +serv.datatype = "host(0)" + +port = s:option(Value, "smtp_port", translate("SMTP Port Number")) +port.datatype = "port" +port.default = "25" + +tls = s:option(ListValue, "smtp_tls", translate("Secure Connection Using TLS")) +tls:value("on", translate("Yes")) +tls:value("off", translate("No")) +tls.default = "on" + +auth = s:option(ListValue, "smtp_auth", translate("SMTP Server Authentication")) +auth:value("on", translate("Yes")) +auth:value("off", translate("No")) +auth.default = "off" + +user = s:option(Value, "smtp_user", translate("SMTP User Name")) +user:depends("smtp_auth", "on") + +pwd = s:option(Value, "smtp_password", translate("SMTP Password"), + translate("Your real SMTP password is not shown for your protection. It will be changed \ + only when you change the value in this box.")) +pwd.password = true +pwd:depends("smtp_auth", "on") + +-- We skip reading off the saved value and return nothing. +function pwd.cfgvalue(self, section) + return "Password Not Displayed" +end + +-- We check the entered value against the saved one, and only write if the entered value is +-- something other than the empty string, and it differes from the saved value. +function pwd.write(self, section, value) + local orig_pwd = m:get(section, self.option) + if value == "Password Not Displayed" then value = "" end + if value and #value > 0 and orig_pwd ~= value then + Value.write(self, section, value) + end +end + +---------------------------------------------------------------------------------------------------- +s = m:section(NamedSection, "voicemail_log", "voicemail", translate("Last Sent Voicemail Log")) +s.anonymous = true + +s:option (DummyValue, "vmlog") + +sts = s:option(DummyValue, "_sts") +sts.template = "cbi/tvalue" +sts.rows = 5 + +function sts.cfgvalue(self, section) + log = nixio.fs.readfile(vmlogfile) + if log == nil or log == "" then + log = "No errors or messages reported." + end + return log +end + +return m diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/ca/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/ca/pbx-voicemail.po new file mode 100644 index 0000000..c0119f7 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/ca/pbx-voicemail.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-01 05:47+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "Adreces de correu electrònic que reben correu de veu" + +msgid "Enable Voicemail" +msgstr "Habilita el correu de veu" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "Registre del últim correu de veu enviat" + +msgid "Local Storage Directory" +msgstr "Directori d'emmagatzematge local" + +msgid "No" +msgstr "No" + +msgid "Outgoing mail (SMTP) Server" +msgstr "Servidor de correu sortint (SMTP)" + +msgid "SMTP Password" +msgstr "Contrasenya SMTP" + +msgid "SMTP Port Number" +msgstr "Nombre de port SMTP" + +msgid "SMTP Server Authentication" +msgstr "Autenticació del servidor SMTP" + +msgid "SMTP Server Hostname or IP Address" +msgstr "Adreça IP o nom de host del servidor SMTP" + +msgid "SMTP User Name" +msgstr "Nom d'usuari SMTP" + +msgid "Secure Connection Using TLS" +msgstr "Assegura la connexió mitjançant TLS" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" +"Quan habiliteu el correu de veu, tindreu l'oportunitat d'especificar adreces " +"de correu electrònic que reben correu de veu gravat. Heu d'establir també " +"un servidor SMTP a baix." + +msgid "Yes" +msgstr "Sí" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" +"Podeu també retenir còpies de missatges de veu en el dispositiu executant el " +"vostre PBX. La ruta especificat aquí es crearà si no existeix. Teniu compte " +"d'espai limitat en dispositius incrustats com els encaminadors, i habiliteu " +"aquesta opció només si coneixeu ho que feu." + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" +"La vostra contrasenya SMTP no es mostra per a la vostra protecció. Es " +"canviarà només quan canvieu el valor en aquesta caixa." diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/cs/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/cs/pbx-voicemail.po new file mode 100644 index 0000000..6d94b35 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/cs/pbx-voicemail.po @@ -0,0 +1,91 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-05 19:16+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "Povolit Voicemail" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "Ne" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "SMTP heslo" + +msgid "SMTP Port Number" +msgstr "SMTP číslo portu" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "SMTP uživatelské jméno" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "Voicemail nastavení" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "Ano" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/de/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/de/pbx-voicemail.po new file mode 100644 index 0000000..224b5a9 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/de/pbx-voicemail.po @@ -0,0 +1,141 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-28 22:30+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "E-Mail Adressen die Sprachnachrichten empfangen" + +msgid "Enable Voicemail" +msgstr "Anrufbeantworter aktivieren" + +msgid "Global Voicemail Setup" +msgstr "Allgemeine Einstellungen für Voicemail" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" +"Es kann ein systemweiter Anrufbeantworter für diese Telefonanlage (PBX) konfiguriert werden. Da dieses " +"System für den Einsatz auf embedded Systemen wie Routern optimiert wurde, " +"gibt es keine Möglichkeit die Sprachnachrichten lokal zu speichern. Sie " +"müssen per E-Mail versendet werden. Daher muss ein ausgehender Mail-Server " +"(SMTP) konfiguriert " +"werden. Hier kann zum Beispiel der SMTP-Server des Providers, aber auch ein " +"Freemailer wie GMail eingetragen werden. Zusätzlich muss noch eine Liste von " +"Adressen angegeben werden, an die aufgezeichnete Sprachnachrichten geschickt " +"werden." + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" +"Damit diese Telefonanlage (PBX) " +"E-Mails mit Sprachaufnahmen senden kann, muss an dieser Stelle ein SMTP-" +"Server eingetragen werden. Ihr Internet-Dienstanbieter (ISP) stellt normalerweise einen " +"SMTP-Server für diesen Zweck zur Verfügung. Sie können auch einen SMTP-" +"Server eines Drittanbieters, wie z.B. Google oder Yahoo, hier einstellen." + +msgid "Last Sent Voicemail Log" +msgstr "Log der zuletzt gesendeten Voicemails" + +msgid "Local Storage Directory" +msgstr "Lokales Speicherverzeichnis" + +msgid "No" +msgstr "Nein" + +msgid "Outgoing mail (SMTP) Server" +msgstr "Server für ausgehende Mails (SMTP)" + +msgid "SMTP Password" +msgstr "SMTP-Passwort" + +msgid "SMTP Port Number" +msgstr "SMTP-Portnummer" + +msgid "SMTP Server Authentication" +msgstr "SMTP-Server-Anmeldung" + +msgid "SMTP Server Hostname or IP Address" +msgstr "SMTP-Servername oder IP-Adresse" + +msgid "SMTP User Name" +msgstr "SMTP-Benutzername" + +msgid "Secure Connection Using TLS" +msgstr "Sichere Verbindung über TLS" + +msgid "Voicemail Setup" +msgstr "Voicemail-Einstellungen" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" +"Wenn Sie Voicemail aktivieren, können Sie E-Mail-Adressen angeben, die " +"aufgenommene Voicemails erhalten sollen. Sie müssen ebenfalls einen SMTP-" +"Server unten angeben." + +msgid "Yes" +msgstr "Ja" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" +"Sie können auch Kopien Ihrer Voicemail-Nachrichten auf dem Gerät speichern. " +"Der hier angegebene Pfad wird erstellt, falls er nicht existiert. Beachten " +"Sie, dass Geräte wie Router nur begrenzten Speicherplatz haben, und " +"aktivieren Sie diese Option nur, wenn Sie wissen, was Sie tun." + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" +"Ihr SMTP-Passwort wird zu Ihrem Schutz nicht angezeigt. Es wird nur " +"geändert, wenn Sie dein Eintrag in diesem Kästchen verändern." + +#~ msgid "Directory to save voicemail into" +#~ msgstr "Verzeichnis für eingehende Sprachnachrichten" + +#~ msgid "Enabled" +#~ msgstr "Aktiviert" + +#~ msgid "" +#~ "Here you can configure a global voicemail for this PBX. Since this system " +#~ "is intended to run on embedded systems like routers, there is no local " +#~ "storage of voicemail - it must be sent out by email. Therefore you need " +#~ "to configure an outgoing mail (SMTP) server (for example the SMTP server " +#~ "your ISP provides, or GMail), and provide a list of addresses the " +#~ "voicemail will be sent to." +#~ msgstr "" +#~ "Es kann ein systemweiter Anrufbeantworter für diese Telefonanlage (PBX) konfiguriert werden. Da " +#~ "dieses System für den Einsatz auf embedded Systemen wie Routern optimiert " +#~ "wurde, gibt es keine Möglichkeit die Sprachnachrichten lokal zu " +#~ "speichern. Sie müssen per E-Mail versendet werden. Daher muss ein " +#~ "ausgehender Mail-Server (SMTP) konfiguriert werden. Hier kann zum Beispiel der SMTP-" +#~ "Server des Providers, aber auch ein Freemailer wie GMail verwendet " +#~ "werden. Zusätzlich muss noch eine Liste von Adressen angegeben werden, zu " +#~ "denen die Sprachnachrichten geschickt werden." diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/el/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/el/pbx-voicemail.po new file mode 100644 index 0000000..fc0a2e3 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/el/pbx-voicemail.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-18 15:26+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: none\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "Όχι" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" + +#~ msgid "Enabled" +#~ msgstr "Ενεργοποιημένο" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/en/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/en/pbx-voicemail.po new file mode 100644 index 0000000..79c8848 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/en/pbx-voicemail.po @@ -0,0 +1,169 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "Email Addresses that Receive Voicemail" + +msgid "Enable Voicemail" +msgstr "Enable Voicemail" + +msgid "Global Voicemail Setup" +msgstr "Global Voicemail Setup" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." + +msgid "Last Sent Voicemail Log" +msgstr "Last Sent Voicemail Log" + +msgid "Local Storage Directory" +msgstr "Local Storage Directory" + +msgid "No" +msgstr "No" + +msgid "Outgoing mail (SMTP) Server" +msgstr "Outgoing mail (SMTP) Server" + +msgid "SMTP Password" +msgstr "SMTP Password" + +msgid "SMTP Port Number" +msgstr "SMTP Port Number" + +msgid "SMTP Server Authentication" +msgstr "SMTP Server Authentication" + +msgid "SMTP Server Hostname or IP Address" +msgstr "SMTP Server Hostname or IP Address" + +msgid "SMTP User Name" +msgstr "SMTP User Name" + +msgid "Secure Connection Using TLS" +msgstr "Secure Connection Using TLS" + +msgid "Voicemail Setup" +msgstr "Voicemail Setup" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." + +msgid "Yes" +msgstr "Yes" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." + +#~ msgid "Directory to save voicemail into" +#~ msgstr "Directory to save voicemail into" + +#~ msgid "Email addresses to forward to" +#~ msgstr "Email addresses to forward to" + +#~ msgid "Enabled" +#~ msgstr "Enabled" + +#~ msgid "" +#~ "Here you can configure a global voicemail for this PBX. Since this system " +#~ "is intended to run on embedded systems like routers, there is no local " +#~ "storage of voicemail - it must be sent out by email. Therefore you need " +#~ "to configure an outgoing mail (SMTP) server (for example the SMTP server " +#~ "your ISP provides, or GMail), and provide a list of addresses the " +#~ "voicemail will be sent to." +#~ msgstr "" +#~ "Here you can configure a global voicemail for this PBX. Since this system " +#~ "is intended to run on embedded systems like routers, there is no local " +#~ "storage of voicemail - it must be sent out by email. Therefore you need " +#~ "to configure an outgoing mail (SMTP) server (for example the SMTP server " +#~ "your ISP provides, or GMail), and provide a list of addresses the " +#~ "voicemail will be sent to." + +#~ msgid "" +#~ "In order for this PBX to send emails containing voicemail recordings, you " +#~ "need to set up an SMTP server here. Your ISP usually provides an SMTP " +#~ "server for that purpose. You can also set up a GMail, Yahoo, or other 3rd " +#~ "party SMTP server." +#~ msgstr "" +#~ "In order for this PBX to send emails containing voicemail recordings, you " +#~ "need to set up an SMTP server here. Your ISP usually provides an SMTP " +#~ "server for that purpose. You can also set up a GMail, Yahoo, or other 3rd " +#~ "party SMTP server." + +#~ msgid "SMTP port number" +#~ msgstr "SMTP port number" + +#~ msgid "SMTP server authentication" +#~ msgstr "SMTP server authentication" + +#~ msgid "SMTP server hostname or IP" +#~ msgstr "SMTP server hostname or IP" + +#~ msgid "SMTP user name" +#~ msgstr "SMTP user name" + +#~ msgid "Timeout before sending callers to voicemail" +#~ msgstr "Timeout before sending callers to voicemail" + +#~ msgid "Use TLS (secure connection)" +#~ msgstr "Use TLS (secure connection)" + +#~ msgid "" +#~ "When you enable voicemail, you will have the opportunity to specify email " +#~ "addresses which receive the message. You must also set up an SMTP server " +#~ "below." +#~ msgstr "" +#~ "When you enable voicemail, you will have the opportunity to specify email " +#~ "addresses which receive the message. You must also set up an SMTP server " +#~ "below." diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/es/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/es/pbx-voicemail.po new file mode 100644 index 0000000..384e169 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/es/pbx-voicemail.po @@ -0,0 +1,106 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-08-23 22:44+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "Dirección de correo electrónica que recibe Voicemail" + +msgid "Enable Voicemail" +msgstr "Activar Voicemail" + +msgid "Global Voicemail Setup" +msgstr "Configuración global de Voicemail" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" +"Configure un correo de voz global para esta PBX. Como el sistema está " +"diseñado para sistemas integrados como routers, no tiene un almacenamiento " +"local y debe enviarse por correo. Por este motivo debe configurar un " +"servidor SMTP de correo saliente (como ISP, Google o el correo de Yahoo) y " +"establecer una lista de direcciones que recibirán el correo de voz grabado." + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" +"Para usar esta PBX para enviar correos con grabaciones de correos de voz " +"tiene que configurar un servidor SMTP. Su ISP es posible que tenga uno. " +"También puede usar otros como los de Google o Yahoo." + +msgid "Last Sent Voicemail Log" +msgstr "Último registro de Voicemail enviado" + +msgid "Local Storage Directory" +msgstr "Directorio local de almacenamiento" + +msgid "No" +msgstr "No" + +msgid "Outgoing mail (SMTP) Server" +msgstr "Servidor de correo SMTP saliente" + +msgid "SMTP Password" +msgstr "Contraseña SMTP" + +msgid "SMTP Port Number" +msgstr "Número de puerto SMTP" + +msgid "SMTP Server Authentication" +msgstr "Autentificación de servidor SMTP" + +msgid "SMTP Server Hostname or IP Address" +msgstr "Nombre del servidor SMTP o dirección IP" + +msgid "SMTP User Name" +msgstr "Nombre de usuario SMTP" + +msgid "Secure Connection Using TLS" +msgstr "Asegurar la conexión con TLS" + +msgid "Voicemail Setup" +msgstr "Configuración de Voicemail" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" +"Cuando active Voicemail tendrá que especificar direcciones de correo que " +"recibirán los correos grabados así como un servidor SMTP." + +msgid "Yes" +msgstr "Sí" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" +"También puede guardar copias de los mensajes de Voicemail en el dispositivo. " +"El camino se creará si no existe. Tenga cuidado de no sobrepasar el espacio " +"disponible en dispositivos pequeños como routers." + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" +"Su contraseña SMTP real no se muestra. Se cambiará solo cuando cambie el " +"valor en esta caja." diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/fr/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/fr/pbx-voicemail.po new file mode 100644 index 0000000..0ccaa50 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/fr/pbx-voicemail.po @@ -0,0 +1,88 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/he/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/he/pbx-voicemail.po new file mode 100644 index 0000000..be25f0b --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/he/pbx-voicemail.po @@ -0,0 +1,88 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/hu/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/hu/pbx-voicemail.po new file mode 100644 index 0000000..be25f0b --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/hu/pbx-voicemail.po @@ -0,0 +1,88 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/it/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/it/pbx-voicemail.po new file mode 100644 index 0000000..fe8c4bf --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/it/pbx-voicemail.po @@ -0,0 +1,110 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-02-09 21:15+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "Indirizzi e-mail che ricevono Voicemail" + +msgid "Enable Voicemail" +msgstr "Attiva Voicemail" + +msgid "Global Voicemail Setup" +msgstr "Attiva Voicemail" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" +"Qui è possibile configurare un messaggio vocale globale per questo PBX. " +"Poiché questo sistema è destinato a girare su sistemi embedded come router, " +"non vi è alcuna memorizzazione locale di segreteria - deve essere inviato " +"via e-mail. Pertanto, è necessario configurare un server di posta in uscita " +"(SMTP) (ad esempio del vostro ISP, di Google, Server Yahoo SMTP), e di " +"fornire un elenco di indirizzi che ricevono posta vocale registrato." + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" +"Affinché questo PBX possa inviare messaggi di posta elettronica contenenti " +"le registrazioni vocali, è necessario impostare un server SMTP qui. Il tuo " +"ISP in genere fornisce un server SMTP per tale scopo. È inoltre possibile " +"impostare un terzo SMTP come quello fornito da Google o Yahoo." + +msgid "Last Sent Voicemail Log" +msgstr "Ultimo file di registro Voicemail inviato" + +msgid "Local Storage Directory" +msgstr "Cartella di memorizzazione Locale" + +msgid "No" +msgstr "No" + +msgid "Outgoing mail (SMTP) Server" +msgstr "Server posta in uscita (SMTP)" + +msgid "SMTP Password" +msgstr "Password SMTP" + +msgid "SMTP Port Number" +msgstr "Numero Porta SMTP" + +msgid "SMTP Server Authentication" +msgstr "Autenticazione Server SMTP" + +msgid "SMTP Server Hostname or IP Address" +msgstr "Nome Host Server SMTP o Indirizzo IP" + +msgid "SMTP User Name" +msgstr "Nome Utente SMTP" + +msgid "Secure Connection Using TLS" +msgstr "Connessione Sicura utilizzando TLS" + +msgid "Voicemail Setup" +msgstr "Impostazione Voicemail" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" +"Quando si attiva la segreteria telefonica, si avrà la possibilità di " +"specificare gli indirizzi e-mail che ricevono i messaggi vocali registrati. " +"È inoltre necessario impostare un server SMTP di seguito." + +msgid "Yes" +msgstr "Sì" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" +"È inoltre possibile conservare copie dei messaggi vocali sul dispositivo che " +"esegue il PBX. Il percorso specificato in questo campo viene creato se non " +"esiste. Attenzione lo spazio è limitato sui dispositivi embedded come " +"router, e abilitare questa opzione solo se si sa cosa si sta facendo." + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" +"La tua password SMTP reale non viene visualizzata per la vostra protezione. " +"Verrà modificato solo quando si modifica il valore in questa casella." diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/ja/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/ja/pbx-voicemail.po new file mode 100644 index 0000000..19e26bf --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/ja/pbx-voicemail.po @@ -0,0 +1,88 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/ms/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/ms/pbx-voicemail.po new file mode 100644 index 0000000..bf633a6 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/ms/pbx-voicemail.po @@ -0,0 +1,87 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/no/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/no/pbx-voicemail.po new file mode 100644 index 0000000..be25f0b --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/no/pbx-voicemail.po @@ -0,0 +1,88 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/pl/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/pl/pbx-voicemail.po new file mode 100644 index 0000000..3f07fe4 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/pl/pbx-voicemail.po @@ -0,0 +1,111 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-05 02:29+0200\n" +"Last-Translator: piosl \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "Adres e-mail do odbierania poczty głosowej" + +msgid "Enable Voicemail" +msgstr "Włącz pocztę głosową" + +msgid "Global Voicemail Setup" +msgstr "Ustawienia globalnej poczty głosowej" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" +"Tutaj można skonfigurować globalną pocztę głosową dla PBX. Ponieważ system " +"ten jest przeznaczony do pracy w systemach wbudowanych, takich jak routery, " +"nie ma możliwości lokalnego przechowywania poczty głosowej - wiadomości " +"muszą być wysłane e-mailem. Z tego powodu należy skonfigurować serwer poczty " +"wychodzącej (SMTP) i podać listę adresów, które będą otrzymywać nagrania z " +"poczty głosowej" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" +"W celu wysyłało e-maili zawierających nagrania poczty głosowej przez PBX, " +"należy skonfigurować serwer SMTP. Twój dostawca usług internetowych " +"zazwyczaj dostarcza serwer SMTP. Można również skonfigurować serwer SMTP " +"firm trzecich, takich jak Google lub Yahoo." + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "Lokalny katalog przechowywania" + +msgid "No" +msgstr "Nie" + +msgid "Outgoing mail (SMTP) Server" +msgstr "Serwer poczty wychodzącej (SMTP)" + +msgid "SMTP Password" +msgstr "Hasło SMTP" + +msgid "SMTP Port Number" +msgstr "Numer portu SMTP" + +msgid "SMTP Server Authentication" +msgstr "Uwierzytelnianie serwera SMTP" + +msgid "SMTP Server Hostname or IP Address" +msgstr "Nazwa hosta serwera SMTP lub adres IP" + +msgid "SMTP User Name" +msgstr "Nazwa użytkownika SMTP" + +msgid "Secure Connection Using TLS" +msgstr "Bezpieczne połączenie za pomocą protokołu TLS" + +msgid "Voicemail Setup" +msgstr "Ustawienia Poczty głosowej" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" +"Po włączeniu poczty głosowej, będziesz miał szansę na podanie adresów " +"e-mail, które będą otrzymywać nagrane wiadomości głosowe. Musisz również " +"skonfigurować serwer SMTP." + +msgid "Yes" +msgstr "Tak" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" +"Możesz też zachować kopie nagrań poczty głosowej na urządzeniu, na którym " +"działa PBX. Ścieżka określona tutaj zostanie utworzona, jeśli nie istnieje. " +"Pamiętaj o ograniczonym miejscu na urządzeniach takich jak routery i włącz " +"tę opcję tylko jeśli wiesz co robisz." + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" +"Twoje prawdziwe hasło SMTP nie jest pokazane dla Twojej ochrony. Zostanie " +"zmienione tylko jeśli zmienisz wartość w tym polu." diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/pt-br/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/pt-br/pbx-voicemail.po new file mode 100644 index 0000000..2e3a51e --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/pt-br/pbx-voicemail.po @@ -0,0 +1,175 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-16 02:32+0200\n" +"Last-Translator: Julio Cezar \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "Endereços de correio eletrônicos que Recebem Correio de Voz" + +msgid "Enable Voicemail" +msgstr "Habilitar o Correio de Voz" + +msgid "Global Voicemail Setup" +msgstr "Configuração Global do Correio de Voz" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" +"Aqui você pode configurar um correio de voz global para este PBX. Uma vez " +"que este sistema é previsto para ser executado em ambientes embarcados como " +"roteadores, não existe armazenamento local do correio de voz - ele deve ser " +"enviado por correio eletrônico. Desta maneira, você deve configurar um " +"servidor (SMTP) de correio eletrônico (por exemplo, o servidor SMTP do seu " +"provedor de Internet, do Google ou do Yahool), e fornecer uma lista dos " +"endereços para os quais o correio de voz será enviado." + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" +"Para este PBX enviar mensagens eletrônicas contendo as gravações do correio " +"de voz, você precisa definir aqui um servidor SMTP. Seu provedor de Internet " +"geralmente fornece um servidor SMTP para este propósito. Você também pode " +"usar um servidor de terceiros como os fornecidos pelo GMail ou Yahoo." + +msgid "Last Sent Voicemail Log" +msgstr "Registro do Último Correio de Voz Enviado" + +msgid "Local Storage Directory" +msgstr "Diretório de Armazenamento Local" + +msgid "No" +msgstr "Não" + +msgid "Outgoing mail (SMTP) Server" +msgstr "Servidor de correio eletrônico (SMTP) para envio" + +msgid "SMTP Password" +msgstr "Senha do SMTP" + +msgid "SMTP Port Number" +msgstr "Porta do SMTP" + +msgid "SMTP Server Authentication" +msgstr "Autenticação do Servidor SMTP" + +msgid "SMTP Server Hostname or IP Address" +msgstr "Nome do Equipamento ou Endereço IP do Servidor SMTP" + +msgid "SMTP User Name" +msgstr "Nome do Usuário do SMTP" + +msgid "Secure Connection Using TLS" +msgstr "Proteja a Conexão Usando TLS" + +msgid "Voicemail Setup" +msgstr "Configuração do Correio de Voz" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" +"Quando você habilita o correio de voz, você terá a oportunidade de " +"especificar endereços de correio eletrônio que recebem o correio de voz " +"gravado. Você precisa também configurar um servidor SMTP abaixo." + +msgid "Yes" +msgstr "Sim" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" +"Você pode também manter cópias das mensagens de correio de voz no " +"dispositivo executando o seu PBX. O caminho especificado aqui será criado se " +"ele não existe. Cuidado com espaço limitado em dispositivos embarcados, como " +"roteadores, e habilite esta opção apenas se você sabe o que você está " +"fazendo." + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" +"Sua senha real do SMTP não é mostrada para a sua proteção. Ela será alterada " +"apenas quando você modificar o valor neste campo." + +#~ msgid "Directory to save voicemail into" +#~ msgstr "Diretório para salvar o correio de voz" + +#~ msgid "Email addresses to forward to" +#~ msgstr "Endereços de correio eletrônicos para encaminhar" + +#~ msgid "Enabled" +#~ msgstr "Habilitado" + +#~ msgid "" +#~ "Here you can configure a global voicemail for this PBX. Since this system " +#~ "is intended to run on embedded systems like routers, there is no local " +#~ "storage of voicemail - it must be sent out by email. Therefore you need " +#~ "to configure an outgoing mail (SMTP) server (for example the SMTP server " +#~ "your ISP provides, or GMail), and provide a list of addresses the " +#~ "voicemail will be sent to." +#~ msgstr "" +#~ "Aqui você pode configurar um correio de voz global para este PBX. Uma vez " +#~ "que este sistema é previsto para ser executado em ambientes embarcados " +#~ "como roteadores, não existe armazenamento local do correio de voz - ele " +#~ "deve ser enviado por correio eletrônico. Desta maneira, você deve " +#~ "configurar um servidor (SMTP) de correio eletrônico (por exemplo, o " +#~ "servidor SMTP do seu provedor de Internet, ou o do GMail), e fornecer uma " +#~ "lista dos endereços para os quais o correio de voz será enviado." + +#~ msgid "" +#~ "In order for this PBX to send emails containing voicemail recordings, you " +#~ "need to set up an SMTP server here. Your ISP usually provides an SMTP " +#~ "server for that purpose. You can also set up a GMail, Yahoo, or other 3rd " +#~ "party SMTP server." +#~ msgstr "" +#~ "Para este PBX enviar mensagens eletrônicas contendo as gravações do " +#~ "correio de voz, você precisa definir aqui um servidor SMTP. Seu provedor " +#~ "de Internet geralmente fornece um servidor SMTP para este propósito. Você " +#~ "também pode usar o servidor SMTP do GMail, Yahoo, ou outro de terceiros." + +#~ msgid "SMTP port number" +#~ msgstr "Número da porta do SMTP" + +#~ msgid "SMTP server authentication" +#~ msgstr "Autenticação do servidor SMTP" + +#~ msgid "SMTP server hostname or IP" +#~ msgstr "Nome do equipamento ou endereço IP do servidor SMTP" + +#~ msgid "SMTP user name" +#~ msgstr "Nome do usuário do SMTP" + +#~ msgid "Timeout before sending callers to voicemail" +#~ msgstr "Tempo de espera antes de enviar chamadas para correio de voz" + +#~ msgid "Use TLS (secure connection)" +#~ msgstr "Usar TLS (conexão segura)" + +#~ msgid "" +#~ "When you enable voicemail, you will have the opportunity to specify email " +#~ "addresses which receive the message. You must also set up an SMTP server " +#~ "below." +#~ msgstr "" +#~ "Quando você habilita o correio de voz, você terá a oportunidade de " +#~ "especificar endereços de correio eletrônio que recebem a mensagem. Você " +#~ "também deve configurar um servidor SMTP abaixo." diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/pt/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/pt/pbx-voicemail.po new file mode 100644 index 0000000..f5cfd89 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/pt/pbx-voicemail.po @@ -0,0 +1,91 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-06-03 18:28+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "Ativar Voicemail" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "Não" + +msgid "Outgoing mail (SMTP) Server" +msgstr "Servidor de Envio de mail (SMTP)" + +msgid "SMTP Password" +msgstr "Password SMTP" + +msgid "SMTP Port Number" +msgstr "Porta SMTP" + +msgid "SMTP Server Authentication" +msgstr "Servidor de Autenticação SMTP" + +msgid "SMTP Server Hostname or IP Address" +msgstr "Nome ou Endereço IP do Servidor SMTP" + +msgid "SMTP User Name" +msgstr "Utilizador SMTP" + +msgid "Secure Connection Using TLS" +msgstr "Ligação Segura usando TLS" + +msgid "Voicemail Setup" +msgstr "Configuração do Voicemail" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "Sim" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/ro/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/ro/pbx-voicemail.po new file mode 100644 index 0000000..42b66f6 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/ro/pbx-voicemail.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/ru/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/ru/pbx-voicemail.po new file mode 100644 index 0000000..ae49c6d --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/ru/pbx-voicemail.po @@ -0,0 +1,174 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: pbx-voicemail\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-08-15 17:42+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "Адрес эл. почты для получения голосовой почты" + +msgid "Enable Voicemail" +msgstr "Включить голосовую почту" + +msgid "Global Voicemail Setup" +msgstr "Глобальные настройки голосовой почты" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" +"Здесь Вы можете настроить голосовую почту АТС. Так как данная система " +"является встраиваемой и предназначена для таких устройств как, например, " +"маршрутизаторы, локальное хранилище голосовой почты отсутствует. Голосовая " +"почта пересылается через электронную почту. Следовательно, вам нужно указать " +"сервер исходящей почты (SMTP) и перечислить адреса, на которые будет " +"пересылаться голосовая почта." + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" +"Чтобы отсылать электронную почту с записями голосовой почты, вам необходимо " +"указать SMTP-сервер. Вы можете использовать SMTP-сервер вашего интернет-" +"провайдера или любой другой, например, SMTP-сервер Google или Yahoo." + +msgid "Last Sent Voicemail Log" +msgstr "Запись журнала последнего отправленного сообщения голосовой почты" + +msgid "Local Storage Directory" +msgstr "Локальная директория хранения" + +msgid "No" +msgstr "Нет" + +msgid "Outgoing mail (SMTP) Server" +msgstr "Сервер исходящей почты (SMTP)" + +msgid "SMTP Password" +msgstr "Пароль SMTP" + +msgid "SMTP Port Number" +msgstr "Номер порта SMTP" + +msgid "SMTP Server Authentication" +msgstr "Аутентификация SMTP-сервера" + +msgid "SMTP Server Hostname or IP Address" +msgstr "Имя SMTP-сервера или IP-адрес" + +msgid "SMTP User Name" +msgstr "Имя пользователя SMTP" + +msgid "Secure Connection Using TLS" +msgstr "Защищенное соединение с использованием TLS" + +msgid "Voicemail Setup" +msgstr "Настройка голосовой почты" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" +"При включении голосовой почты, у вас будет возможность указать адреса " +"электронной почты, на которые будут отправляться записи голосовой почты. Вы " +"также должны указать SMTP-сервер ниже." + +msgid "Yes" +msgstr "Да" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" +"Вы также можете сохранять копии сообщений голосовой почты локально на " +"устройстве с запущенной АТС. Указанный здесь путь будет создан в случае его " +"отсутствия. Учитывайте, что пространство для хранения сообщений голосовой " +"почты может быть ограничено вашим устройством." + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" +"Ваш настоящий пароль SMTP здесь не показан. Он будет изменён только тогда, " +"когда вы измените значение в этом поле." + +#~ msgid "Directory to save voicemail into" +#~ msgstr "Директория для сохранения голосовой почты" + +#~ msgid "Email addresses to forward to" +#~ msgstr "Адрес эл. почты для перенаправления" + +#~ msgid "Enabled" +#~ msgstr "Включено" + +#~ msgid "" +#~ "Here you can configure a global voicemail for this PBX. Since this system " +#~ "is intended to run on embedded systems like routers, there is no local " +#~ "storage of voicemail - it must be sent out by email. Therefore you need " +#~ "to configure an outgoing mail (SMTP) server (for example the SMTP server " +#~ "your ISP provides, or GMail), and provide a list of addresses the " +#~ "voicemail will be sent to." +#~ msgstr "" +#~ "Здесь Вы можете настроить голосовую почту АТС. Так как данная система " +#~ "является встраиваемой и предназначена для таких устройств как, например, " +#~ "маршрутизаторы, локальное хранилище голосовой почты отсутствует. " +#~ "Голосовая почта пересылается через электронную почту. Следовательно, Вам " +#~ "нужно указать сервер (SMTP) исходящей почты и перечислить адреса на " +#~ "которые будет пересылаться голосовая почта." + +#~ msgid "" +#~ "In order for this PBX to send emails containing voicemail recordings, you " +#~ "need to set up an SMTP server here. Your ISP usually provides an SMTP " +#~ "server for that purpose. You can also set up a GMail, Yahoo, or other 3rd " +#~ "party SMTP server." +#~ msgstr "" +#~ "Чтобы отсылать электронную почту с записями голосовой почты, Вам " +#~ "необходимо указать SMTP сервер. Вы можете использовать SMTP сервер вашего " +#~ "интернет провайдера или любой другой, например, SMTP сервер GMail или " +#~ "Yahoo." + +#~ msgid "SMTP port number" +#~ msgstr "Номер порта SMTP" + +#~ msgid "SMTP server authentication" +#~ msgstr "Аутентификация SMTP сервера" + +#~ msgid "SMTP server hostname or IP" +#~ msgstr "Имя SMTP сервера или IP адрес" + +#~ msgid "SMTP user name" +#~ msgstr "Имя пользователя SMTP" + +#~ msgid "Timeout before sending callers to voicemail" +#~ msgstr "Таймаут перед перенаправлением звонящих на голосовую почту" + +#~ msgid "Use TLS (secure connection)" +#~ msgstr "Использовать TLS (защищенное соединение)" + +#~ msgid "" +#~ "When you enable voicemail, you will have the opportunity to specify email " +#~ "addresses which receive the message. You must also set up an SMTP server " +#~ "below." +#~ msgstr "" +#~ "При включении голосовой почты, у Вас будет возможность указать адреса " +#~ "электронной почты на которые будут отправляться записи голосовой почты. " +#~ "Вы также должны указать SMTP сервер ниже." diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/sk/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/sk/pbx-voicemail.po new file mode 100644 index 0000000..c3a5c5f --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/sk/pbx-voicemail.po @@ -0,0 +1,88 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/sv/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/sv/pbx-voicemail.po new file mode 100644 index 0000000..4945538 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/sv/pbx-voicemail.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "E-postadresser som ska ta emot röstbrev" + +msgid "Enable Voicemail" +msgstr "Aktivera röstbrevlåda" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "Lokal lagringsmapp" + +msgid "No" +msgstr "Nej" + +msgid "Outgoing mail (SMTP) Server" +msgstr "Utgående mail (SMTP)-server" + +msgid "SMTP Password" +msgstr "SMTP-lösenord" + +msgid "SMTP Port Number" +msgstr "SMTP-portnummer" + +msgid "SMTP Server Authentication" +msgstr "Autentisering för SMTP-server" + +msgid "SMTP Server Hostname or IP Address" +msgstr "SMTP-servern värdnamn eller IP-adress" + +msgid "SMTP User Name" +msgstr "Användarnamn för SMTP" + +msgid "Secure Connection Using TLS" +msgstr "Säker anslutning med användning av TLS" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "Ja" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/templates/pbx-voicemail.pot b/feeds/luci/applications/luci-app-pbx-voicemail/po/templates/pbx-voicemail.pot new file mode 100644 index 0000000..35cdca3 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/templates/pbx-voicemail.pot @@ -0,0 +1,81 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/tr/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/tr/pbx-voicemail.po new file mode 100644 index 0000000..19e26bf --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/tr/pbx-voicemail.po @@ -0,0 +1,88 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/uk/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/uk/pbx-voicemail.po new file mode 100644 index 0000000..5654183 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/uk/pbx-voicemail.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/vi/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/vi/pbx-voicemail.po new file mode 100644 index 0000000..19e26bf --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/vi/pbx-voicemail.po @@ -0,0 +1,88 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "" + +msgid "Enable Voicemail" +msgstr "" + +msgid "Global Voicemail Setup" +msgstr "" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" + +msgid "Last Sent Voicemail Log" +msgstr "" + +msgid "Local Storage Directory" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Outgoing mail (SMTP) Server" +msgstr "" + +msgid "SMTP Password" +msgstr "" + +msgid "SMTP Port Number" +msgstr "" + +msgid "SMTP Server Authentication" +msgstr "" + +msgid "SMTP Server Hostname or IP Address" +msgstr "" + +msgid "SMTP User Name" +msgstr "" + +msgid "Secure Connection Using TLS" +msgstr "" + +msgid "Voicemail Setup" +msgstr "" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/zh-cn/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/zh-cn/pbx-voicemail.po new file mode 100644 index 0000000..0be8258 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/zh-cn/pbx-voicemail.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-08 18:42+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "接收语音邮箱的电子邮箱地址" + +msgid "Enable Voicemail" +msgstr "启用语音邮箱" + +msgid "Global Voicemail Setup" +msgstr "全局语音邮箱设置" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" +"在这里,你可以为PBX配置一个全球性的语音邮件。由于这个系统运行在嵌入式系统中,如路由器,没有本地存储语音邮件 - 它必须通过电子邮件发送出去。因此,你" +"需要配置一个外发邮件(SMTP)服务器(例如您的ISP,谷歌或雅虎的SMTP服务器),并提供接收记录语音信箱的地址的列表。" + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" +"为了这个PBX发送包含语音信箱录音的电子邮件,你需要在这里设置一个SMTP服务器。您的ISP通常会提供一个SMTP服务器。您也可以设立一个第三方的SMT" +"P服务器,像谷歌或雅虎。" + +msgid "Last Sent Voicemail Log" +msgstr "最后发送的语音信箱日志" + +msgid "Local Storage Directory" +msgstr "本地存储目录" + +msgid "No" +msgstr "不" + +msgid "Outgoing mail (SMTP) Server" +msgstr "电子邮件发送服务器(SMTP)" + +msgid "SMTP Password" +msgstr "SMTP登录密码" + +msgid "SMTP Port Number" +msgstr "SMTP端口" + +msgid "SMTP Server Authentication" +msgstr "SMTP服务器认证" + +msgid "SMTP Server Hostname or IP Address" +msgstr "SMTP服务器主机名或IP地址" + +msgid "SMTP User Name" +msgstr "SMTP用户名" + +msgid "Secure Connection Using TLS" +msgstr "使用TLS安全连接" + +msgid "Voicemail Setup" +msgstr "语音邮箱设置" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "当你启用了语音信箱,你将要指定接收记录语音信箱的电子邮件地址。您还必须设置下面的SMTP服务器" + +msgid "Yes" +msgstr "是" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" +"您也可以保留您的PBX语音信箱留言的副本在你运行的设备上。此处指定的路径当不存在时,将被创建。谨防嵌入式设备上有限的存取空间,如路由器,所以此选项只有你" +"当知道处理时才可使用。" + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "为了保护您真正的SMTP密码不显示。该选项需要更改。" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/po/zh-tw/pbx-voicemail.po b/feeds/luci/applications/luci-app-pbx-voicemail/po/zh-tw/pbx-voicemail.po new file mode 100644 index 0000000..14de629 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/po/zh-tw/pbx-voicemail.po @@ -0,0 +1,98 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 18:41+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Email Addresses that Receive Voicemail" +msgstr "接收語音郵件的信箱位址" + +msgid "Enable Voicemail" +msgstr "啟用語音郵件功能" + +msgid "Global Voicemail Setup" +msgstr "語音郵件通用設定" + +msgid "" +"Here you can configure a global voicemail for this PBX. Since this system is " +"intended to run on embedded systems like routers, there is no local storage " +"of voicemail - it must be sent out by email. Therefore you need to configure " +"an outgoing mail (SMTP) server (for example your ISP's, Google's, or Yahoo's " +"SMTP server), and provide a list of addresses that receive recorded " +"voicemail." +msgstr "" +"在這裡可以幫PBX總機設定通用語音郵件. 因為這個系統想要像路由器一般跑在嵌入式系統, 這裡並無本地語言郵件的儲存空間 - 它必須由郵件來傳送. " +"因此你需要設定一個(SMTP)外寄郵件伺服器(例如你的ISP, Google, 或者Yahoo外寄郵件伺服器), " +"並且提供一個位址清單可以接收錄音檔的語音郵件." + +msgid "" +"In order for this PBX to send emails containing voicemail recordings, you " +"need to set up an SMTP server here. Your ISP usually provides an SMTP server " +"for that purpose. You can also set up a third party SMTP server such as the " +"one provided by Google or Yahoo." +msgstr "" +"為了幫PBX總機傳送附帶語音郵件錄音檔, 你必須設定一個(SMTP)外寄郵件伺服器.通常你的ISP會提供一個SMTP外寄郵件伺服器讓客戶寄信,.你也可以" +"設定第三方SMTP外寄郵件伺服器類似Google或Yahoo提供的也行." + +msgid "Last Sent Voicemail Log" +msgstr "上一次傳送語音郵件的記錄" + +msgid "Local Storage Directory" +msgstr "本地端儲存目錄" + +msgid "No" +msgstr "No" + +msgid "Outgoing mail (SMTP) Server" +msgstr "外寄郵件(SMTP)伺服器" + +msgid "SMTP Password" +msgstr "外寄郵件(SMTP)伺服器傳送密碼" + +msgid "SMTP Port Number" +msgstr "外寄郵件(SMTP)伺服器服務埠號" + +msgid "SMTP Server Authentication" +msgstr "外寄郵件(SMTP)伺服器驗證" + +msgid "SMTP Server Hostname or IP Address" +msgstr "外寄郵件(SMTP)伺服器主機名稱或者IP位址" + +msgid "SMTP User Name" +msgstr "外寄郵件(SMTP)伺服器登入使用者名稱" + +msgid "Secure Connection Using TLS" +msgstr "採用TLS加密協議安全連線" + +msgid "Voicemail Setup" +msgstr "設定語音郵件" + +msgid "" +"When you enable voicemail, you will have the opportunity to specify email " +"addresses that receive recorded voicemail. You must also set up an SMTP " +"server below." +msgstr "當你啟用語音郵件功能, 擬將有機會指定特定可接收錄音檔的語音郵件的郵件位址. 你也必須在下面設定外寄郵件(SMTP)伺服器." + +msgid "Yes" +msgstr "Yes" + +msgid "" +"You can also retain copies of voicemail messages on the device running your " +"PBX. The path specified here will be created if it doesn't exist. Beware of " +"limited space on embedded devices like routers, and enable this option only " +"if you know what you are doing." +msgstr "" +"你也可以保留語音郵件訊息的複本在PBX總機的設備上. 這裡所指定的路徑如果它不存在時將會被建立. 為預防像路由器的嵌入式設備有限的空間限制, " +"如果你確定這個用途請啟用這個選項." + +msgid "" +"Your real SMTP password is not shown for your protection. It will be changed " +"only when you change the value in this box." +msgstr "為了保護你的SMTP密碼將不會顯示. 只有當你改變盒子中的值時它將會被變更" diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/config/pbx-voicemail b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/config/pbx-voicemail new file mode 100644 index 0000000..94e3e96 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/config/pbx-voicemail @@ -0,0 +1,6 @@ +config 'voicemail' 'global_voicemail' + +config 'voicemail' 'voicemail_smtp' + +config 'voicemail' 'voicemail_log' + diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-move-greeting b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-move-greeting new file mode 100755 index 0000000..21fe694 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-move-greeting @@ -0,0 +1,6 @@ +#!/bin/sh + +if [ -f "/tmp/voicemail/greeting.gsm" ] +then + mv /tmp/voicemail/greeting.gsm /etc/pbx-voicemail/recordings/ +fi diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-account-auth.TEMPLATE b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-account-auth.TEMPLATE new file mode 100644 index 0000000..6b2026c --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-account-auth.TEMPLATE @@ -0,0 +1,2 @@ +user |USER| +password |PASSWORD| diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-account-default.TEMPLATE b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-account-default.TEMPLATE new file mode 100644 index 0000000..a001c64 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-account-default.TEMPLATE @@ -0,0 +1,2 @@ +account default : defaultacct + diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-account.TEMPLATE b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-account.TEMPLATE new file mode 100644 index 0000000..fd1f479 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-account.TEMPLATE @@ -0,0 +1,5 @@ +account defaultacct +host |HOST| +port |PORT| +from voicemail@pbx + diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-defaults.TEMPLATE b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-defaults.TEMPLATE new file mode 100644 index 0000000..a4456b8 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-msmtprc-defaults.TEMPLATE @@ -0,0 +1,5 @@ +defaults +auth |AUTH| +tls_certcheck off +tls |TLS| + diff --git a/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-send-voicemail b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-send-voicemail new file mode 100755 index 0000000..ba639d0 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx-voicemail/root/etc/pbx-voicemail/pbx-send-voicemail @@ -0,0 +1,114 @@ +#!/bin/sh +# +# Copyright 2011 Iordan Iordanov +# +# This file is part of luci-pbx-voicemail. +# +# luci-pbx-voicemail is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# luci-pbx-voicemail is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with luci-pbx-voicemail. If not, see . +# +# +# Thanks to http://www.zedwood.com for providing an excellent example of how to +# properly assemble an email message with a base64 encoded attachment. +# + +LOGFILE=/tmp/voicemail/last_sent_voicemail.log + +# Redirect standard error and standard output to a log file. +rm -f "$LOGFILE" +exec 1>"$LOGFILE" +exec 2>&1 + +# Appends its second argument to a file named in the first argument. +append_to_file () +{ + echo "$2">>$1; +} + +# Grab the attachment name, which should be sent as the first argument, and +# exit with a warning if there is no voicemail to send. +ATTACHMENT="$1" +[ ! -f "$ATTACHMENT" ] && echo "WARNING: Found no voicemail recording to send." && exit + +# Grab the callerID which should have been sent as an argument. +CALLERID="$2" +[ -z "$CALLERID" ] && CALLERID="An unknown caller" + +# Determine addresses we would like to send the voicemail to and exit if none are found. +TO="`uci -q get pbx-voicemail.global_voicemail.global_email_addresses | tr ' ' ','`" +[ -z "$TO" ] && echo "WARNING: Found no addresses to send voicemail to." && exit + +# See whether we should retain a copy of the voicemail. +SAVEPATH="`uci -q get pbx-voicemail.global_voicemail.global_save_path`" + +DATE="`date +%Y-%m-%d`" +TIME="`date +%H:%M:%S`" +FROM="voicemail@pbx" +REPLY="do-not-reply@pbx" +SUBJECT="Voicemail from $CALLERID, $DATE, $TIME" +MSGBODY="$CALLERID has left voicemail for you on $DATE at $TIME." +MIMETYPE="audio/wav" +TMP1="/tmp/voicemail/tmpemail1.$$"; +TMP2="/tmp/voicemail/tmpemail2.$$"; +BOUNDARY="`date +%s | md5sum | awk '{print $1}'`" +FILENAME="voicemail-$DATE-$TIME.WAV" + +# Clean up just in case. +rm -f $TMP1 $TMP2 + +append_to_file $TMP1 "From: $FROM" +append_to_file $TMP1 "To: $TO" +append_to_file $TMP1 "Reply-To: $REPLY" +append_to_file $TMP1 "Subject: $SUBJECT" +append_to_file $TMP1 "Content-Type: multipart/mixed; boundary=\""$BOUNDARY"\"" +append_to_file $TMP1 "" +append_to_file $TMP1 "This is a MIME formatted message. If you see this text it means that your" +append_to_file $TMP1 "email software does not support MIME formatted messages." +append_to_file $TMP1 "" +append_to_file $TMP1 "--$BOUNDARY" +append_to_file $TMP1 "Content-Type: text/plain; charset=ISO-8859-1; format=flowed" +append_to_file $TMP1 "Content-Transfer-Encoding: 7bit" +append_to_file $TMP1 "Content-Disposition: inline" +append_to_file $TMP1 "" +append_to_file $TMP1 "$MSGBODY" +append_to_file $TMP1 "" +append_to_file $TMP1 "" +append_to_file $TMP1 "--$BOUNDARY" +append_to_file $TMP1 "Content-Type: $MIMETYPE; name=\"$FILENAME\"" +append_to_file $TMP1 "Content-Transfer-Encoding: base64" +append_to_file $TMP1 "Content-Disposition: attachment; filename=\"$FILENAME\";" +append_to_file $TMP1 "" + +append_to_file $TMP2 "" +append_to_file $TMP2 "" +append_to_file $TMP2 "--$BOUNDARY--" +append_to_file $TMP2 "" +append_to_file $TMP2 "" + +# Cat everything together and pass to msmtprc to send out. +( cat $TMP1 + cat "$ATTACHMENT" | base64 + cat $TMP2 ) | msmtp -t -C /etc/pbx-msmtprc + +# Clean up email temp files. +rm -f $TMP1 $TMP2 + +# Either delete or move the attachment based on the SAVEPATH variable. +if [ -z "$SAVEPATH" ] +then + rm -f "$ATTACHMENT" +else + mkdir -p "$SAVEPATH" + mv --backup=t "$ATTACHMENT" "$SAVEPATH/$FILENAME" +fi + diff --git a/feeds/luci/applications/luci-app-pbx/COPYING b/feeds/luci/applications/luci-app-pbx/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/feeds/luci/applications/luci-app-pbx/CREDITS-SOUNDS b/feeds/luci/applications/luci-app-pbx/CREDITS-SOUNDS new file mode 100644 index 0000000..1fa64bc --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/CREDITS-SOUNDS @@ -0,0 +1,7 @@ +This file pertains to the sounds files included in root/etc/pbx-asterisk/sounds + +Recorded by: +Allison Smith (http://www.theivrvoice.com) + +Financial Contributions by: +Digium, Inc. (http://www.digium.com) diff --git a/feeds/luci/applications/luci-app-pbx/LICENSE-SOUNDS b/feeds/luci/applications/luci-app-pbx/LICENSE-SOUNDS new file mode 100644 index 0000000..fe9c822 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/LICENSE-SOUNDS @@ -0,0 +1,312 @@ +This file pertains to the sounds files included in root/etc/pbx-asterisk/sounds + +LICENSE FOR VOICE PROMPT FILES +------------------------------ + +The voice prompt files distributed herewith are Copyright (C) 2003-2008 +Allison Smith, and provided under terms of the following License. For +more information, or to purchase custom voice prompt files, please +visit: + +http://www.digium.com/ivr or http://www.theasteriskvoice.com + +LICENSE +------- + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS +CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS +PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE +WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS +PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND +AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS +LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU +THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH +TERMS AND CONDITIONS. + +1. Definitions. + +a. "Collective Work" means a work, such as a periodical issue, +anthology or encyclopedia, in which the Work in its entirety in +unmodified form, along with one or more other contributions, +constituting separate and independent works in themselves, are +assembled into a collective whole. A work that constitutes a +Collective Work will not be considered a Derivative Work (as defined +below) for the purposes of this License. + +b. "Creative Commons Compatible License" means a license that is +listed at http://creativecommons.org/compatiblelicenses that has been +approved by Creative Commons as being essentially equivalent to this +License, including, at a minimum, because that license: (i) contains +terms that have the same purpose, meaning and effect as the License +Elements of this License; and, (ii) explicitly permits the relicensing +of derivatives of works made available under that license under this +License or either a Creative Commons unported license or a Creative +Commons jurisdiction license with the same License Elements as this +License. + +c. "Derivative Work" means a work based upon the Work or upon the Work +and other pre-existing works, such as a translation, musical +arrangement, dramatization, fictionalization, motion picture version, +sound recording, art reproduction, abridgment, condensation, or any +other form in which the Work may be recast, transformed, or adapted, +except that a work that constitutes a Collective Work will not be +considered a Derivative Work for the purpose of this License. For the +avoidance of doubt, where the Work is a musical composition or sound +recording, the synchronization of the Work in timed-relation with a +moving image ("synching") will be considered a Derivative Work for the +purpose of this License. + +d. "License Elements" means the following high-level license +attributes as selected by Licensor and indicated in the title of this +License: Attribution, ShareAlike. + +e. "Licensor" means the individual, individuals, entity or entities +that offers the Work under the terms of this License. + +f. "Original Author" means the individual, individuals, entity or +entities who created the Work. + +g. "Work" means the copyrighted voice prompt files recorded by Allison +Smith for Asterisk and distributed with this License. + +h. "You" means an individual or entity exercising rights under this +License who has not previously violated the terms of this License with +respect to the Work, or who has received express permission from the +Licensor to exercise rights under this License despite a previous +violation. + +2. Fair Use Rights. + +Nothing in this license is intended to reduce, limit, or restrict any +rights arising from fair use, first sale or other limitations on the +exclusive rights of the copyright owner under copyright law or other +applicable laws. + +3. License Grant. + +Subject to the terms and conditions of this License, Licensor hereby +grants You a worldwide, royalty-free, non-exclusive, perpetual (for +the duration of the applicable copyright) license to exercise the +rights in the Work as stated below: + +a. to reproduce the Work, to incorporate the Work into one or more +Collective Works, and to reproduce the Work as incorporated in the +Collective Works; + +b. to create and reproduce Derivative Works provided that any such +Derivative Work, including any translation in any medium, takes +reasonable steps to clearly label, demarcate or otherwise identify +that changes were made to the original Work. For example, a +translation could be marked "The original work was translated from +English to Spanish," or a modification could indicate "The original +work has been modified."; + +c. to distribute copies or phonorecords of, display publicly, perform +publicly, and perform publicly by means of a digital audio +transmission the Work including as incorporated in Collective Works; + +d. to distribute copies or phonorecords of, display publicly, perform +publicly, and perform publicly by means of a digital audio +transmission Derivative Works. + +e. For the avoidance of doubt, where the Work is a musical +composition: + + i. Performance Royalties Under Blanket Licenses. Licensor waives the + exclusive right to collect, whether individually or, in the event + that Licensor is a member of a performance rights society + (e.g. ASCAP, BMI, SESAC), via that society, royalties for the public + performance or public digital performance e.g. webcast) of the Work. + + ii.Mechanical Rights and Statutory Royalties. Licensor waives the + exclusive right to collect, whether individually or via a music + rights agency or designated agent (e.g. Harry Fox Agency), royalties + for any phonorecord You create from the Work ("cover version") and + distribute, subject to the compulsory license created by 17 USC + Section 115 of the US Copyright Act (or the equivalent in other + jurisdictions). + +f. Webcasting Rights and Statutory Royalties. For the avoidance of +doubt, where the Work is a sound recording, Licensor waives the +exclusive right to collect, whether individually or via a +performance-rights society (e.g. SoundExchange), royalties for the +public digital performance (e.g. webcast) of the Work, subject to the +compulsory license created by 17 USC Section 114 of the US Copyright +Act (or the equivalent in other jurisdictions). + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights +in other media and formats. All rights not expressly granted by +Licensor are hereby reserved. + +4. Restrictions. + +The license granted in Section 3 above is expressly made subject to +and limited by the following restrictions: + +a. You may distribute, publicly display, publicly perform, or publicly +digitally perform the Work only under the terms of this License, and +You must include a copy of, or the Uniform Resource Identifier for, +this License with every copy or phonorecord of the Work You +distribute, publicly display, publicly perform, or publicly digitally +perform. You may not offer or impose any terms on the Work that +restrict the terms of this License or the ability of a recipient of +the Work to exercise of the rights granted to that recipient under the +terms of the License. You may not sublicense the Work. You must keep +intact all notices that refer to this License and to the disclaimer of +warranties. When You distribute, publicly display, publicly perform, +or publicly digitally perform the Work, You may not impose any +technological measures on the Work that restrict the ability of a +recipient of the Work from You to exercise of the rights granted to +that recipient under the terms of the License. This Section 4(a) +applies to the Work as incorporated in a Collective Work, but this +does not require the Collective Work apart from the Work itself to be +made subject to the terms of this License. If You create a Collective +Work, upon notice from any Licensor You must, to the extent +practicable, remove from the Collective Work any credit as required by +Section 4(c), as requested. If You create a Derivative Work, upon +notice from any Licensor You must, to the extent practicable, remove +from the Derivative Work any credit as required by Section 4(c), as +requested. + +b. You may distribute, publicly display, publicly perform, or publicly +digitally perform a Derivative Work only under: (i) the terms of this +License; (ii) a later version of this License with the same License +Elements as this License; (iii) either the Creative Commons (Unported) +license or a Creative Commons jurisdiction license (either this or a +later license version) that contains the same License Elements as this +License (e.g. Attribution-ShareAlike 3.0 (Unported)); (iv) a Creative +Commons Compatible License. If you license the Derivative Work under +one of the licenses mentioned in (iv), you must comply with the terms +of that license. If you license the Derivative Work under the terms of +any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable +License"), you must comply with the terms of the Applicable License +generally and with the following provisions: (I) You must include a +copy of, or the Uniform Resource Identifier for, the Applicable +License with every copy or phonorecord of each Derivative Work You +distribute, publicly display, publicly perform, or publicly digitally +perform; (II) You may not offer or impose any terms on the Derivative +Works that restrict the terms of the Applicable License or the ability +of a recipient of the Work to exercise the rights granted to that +recipient under the terms of the Applicable License; (III) You must +keep intact all notices that refer to the Applicable License and to +the disclaimer of warranties; and, (IV) when You distribute, publicly +display, publicly perform, or publicly digitally perform the Work, You +may not impose any technological measures on the Derivative Work that +restrict the ability of a recipient of the Derivative Work from You to +exercise the rights granted to that recipient under the terms of the +Applicable License. This Section 4(b) applies to the Derivative Work +as incorporated in a Collective Work, but this does not require the +Collective Work apart from the Derivative Work itself to be made +subject to the terms of the Applicable License. + +c. If You distribute, publicly display, publicly perform, or publicly +digitally perform the Work (as defined in Section 1 above) or any +Derivative Works (as defined in Section 1 above) or Collective Works +(as defined in Section 1 above), You must, unless a request has been +made pursuant to Section 4(a), keep intact all copyright notices for +the Work and provide, reasonable to the medium or means You are +utilizing: (i) the name of the Original Author (or pseudonym, if +applicable) if supplied, and/or (ii) if the Original Author and/or +Licensor designate another party or parties (e.g. a sponsor institute, +publishing entity, journal) for attribution ("Attribution Parties") in +Licensor's copyright notice, terms of service or by other reasonable +means, the name of such party or parties; the title of the Work if +supplied; to the extent reasonably practicable, the Uniform Resource +Identifier, if any, that Licensor specifies to be associated with the +Work, unless such URI does not refer to the copyright notice or +licensing information for the Work; and, consistent with Section 3(b) +in the case of a Derivative Work, a credit identifying the use of the +Work in the Derivative Work (e.g., "French translation of the Work by +Original Author," or "Screenplay based on original Work by Original +Author"). The credit required by this Section 4(c) may be implemented +in any reasonable manner; provided, however, that in the case of a +Derivative Work or Collective Work, at a minimum such credit will +appear, if a credit for all contributing authors of the Derivative +Work or Collective Work appears, then as part of these credits and in +a manner at least as prominent as the credits for the other +contributing authors. For the avoidance of doubt, You may only use the +credit required by this Section for the purpose of attribution in the +manner set out above and, by exercising Your rights under this +License, You may not implicitly or explicitly assert or imply any +connection with, sponsorship or endorsement by the Original Author, +Licensor and/or Attribution Parties, as appropriate, of You or Your +use of the Work, without the separate, express prior written +permission of the Original Author, Licensor and/or Attribution +Parties. + +5. Representations, Warranties and Disclaimer. + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, +LICENSOR OFFERS THE WORK AS-IS AND ONLY TO THE EXTENT OF ANY RIGHTS +HELD IN THE LICENSED WORK BY THE LICENSOR. THE LICENSOR MAKES NO +REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, +EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT +LIMITATION, WARRANTIES OF TITLE, MARKETABILITY, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF +ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW +THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY +TO YOU. + +6. Limitation on Liability. + +EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL +LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, +INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT +OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN +ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination. + +a. This License and the rights granted hereunder will terminate +automatically upon any breach by You of the terms of this +License. Individuals or entities who have received Derivative Works or +Collective Works from You under this License, however, will not have +their licenses terminated provided such individuals or entities remain +in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 +will survive any termination of this License. + +b. Subject to the above terms and conditions, the license granted here +is perpetual (for the duration of the applicable copyright in the +Work). Notwithstanding the above, Licensor reserves the right to +release the Work under different license terms or to stop distributing +the Work at any time; provided, however that any such election will +not serve to withdraw this License (or any other license that has +been, or is required to be, granted under the terms of this License), +and this License will continue in full force and effect unless +terminated as stated above. + +8. Miscellaneous. + +a. Each time You distribute or publicly digitally perform the Work (as +defined in Section 1 above) or a Collective Work (as defined in +Section 1 above), the Licensor offers to the recipient a license to +the Work on the same terms and conditions as the license granted to +You under this License. + +b. Each time You distribute or publicly digitally perform a Derivative +Work, Licensor offers to the recipient a license to the original Work +on the same terms and conditions as the license granted to You under +this License. + +c. If any provision of this License is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this License, and without further action +by the parties to this agreement, such provision shall be reformed to +the minimum extent necessary to make such provision valid and +enforceable. + +d. No term or provision of this License shall be deemed waived and no +breach consented to unless such waiver or consent shall be in writing +and signed by the party to be charged with such waiver or consent. + +e. This License constitutes the entire agreement between the parties +with respect to the Work licensed here. There are no understandings, +agreements or representations with respect to the Work not specified +here. Licensor shall not be bound by any additional provisions that +may appear in any communication from You. This License may not be +modified without the mutual written agreement of the Licensor and You. diff --git a/feeds/luci/applications/luci-app-pbx/Makefile b/feeds/luci/applications/luci-app-pbx/Makefile new file mode 100644 index 0000000..772713b --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/Makefile @@ -0,0 +1,19 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI PBX Administration +LUCI_DEPENDS:= @BROKEN \ + +asterisk18 +asterisk18-app-authenticate +asterisk18-app-disa \ + +asterisk18-app-setcallerid +asterisk18-app-system +asterisk18-chan-gtalk \ + +asterisk18-codec-a-mu +asterisk18-codec-alaw +asterisk18-func-cut \ + +asterisk18-res-clioriginate +asterisk18-func-channel +asterisk18-chan-local \ + +asterisk18-app-record +asterisk18-app-senddtmf +asterisk18-res-crypto + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-pbx/luasrc/controller/pbx.lua b/feeds/luci/applications/luci-app-pbx/luasrc/controller/pbx.lua new file mode 100644 index 0000000..b77814b --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/luasrc/controller/pbx.lua @@ -0,0 +1,29 @@ +--[[ + Copyright 2011 Iordan Iordanov + + This file is part of luci-pbx. + + luci-pbx is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + luci-pbx is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with luci-pbx. If not, see . +]]-- + +module("luci.controller.pbx", package.seeall) + +function index() + entry({"admin", "services", "pbx"}, cbi("pbx"), "PBX", 80) + entry({"admin", "services", "pbx", "pbx-google"}, cbi("pbx-google"), "Google Accounts", 1) + entry({"admin", "services", "pbx", "pbx-voip"}, cbi("pbx-voip"), "SIP Accounts", 2) + entry({"admin", "services", "pbx", "pbx-users"}, cbi("pbx-users"), "User Accounts", 3) + entry({"admin", "services", "pbx", "pbx-calls"}, cbi("pbx-calls"), "Call Routing", 4) + entry({"admin", "services", "pbx", "pbx-advanced"}, cbi("pbx-advanced"), "Advanced Settings", 6) +end diff --git a/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-advanced.lua b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-advanced.lua new file mode 100644 index 0000000..34288c6 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-advanced.lua @@ -0,0 +1,293 @@ +--[[ + Copyright 2011 Iordan Iordanov + + This file is part of luci-pbx. + + luci-pbx is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + luci-pbx is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with luci-pbx. If not, see . +]]-- + +if nixio.fs.access("/etc/init.d/asterisk") then + server = "asterisk" +elseif nixio.fs.access("/etc/init.d/freeswitch") then + server = "freeswitch" +else + server = "" +end + +appname = "PBX" +modulename = "pbx-advanced" +defaultbindport = 5060 +defaultrtpstart = 19850 +defaultrtpend = 19900 + +-- Returns all the network related settings, including a constructed RTP range +function get_network_info() + externhost = m.uci:get(modulename, "advanced", "externhost") + ipaddr = m.uci:get("network", "lan", "ipaddr") + bindport = m.uci:get(modulename, "advanced", "bindport") + rtpstart = m.uci:get(modulename, "advanced", "rtpstart") + rtpend = m.uci:get(modulename, "advanced", "rtpend") + + if bindport == nil then bindport = defaultbindport end + if rtpstart == nil then rtpstart = defaultrtpstart end + if rtpend == nil then rtpend = defaultrtpend end + + if rtpstart == nil or rtpend == nil then + rtprange = nil + else + rtprange = rtpstart .. "-" .. rtpend + end + + return bindport, rtprange, ipaddr, externhost +end + +-- If not present, insert empty rules in the given config & section named PBX-SIP and PBX-RTP +function insert_empty_sip_rtp_rules(config, section) + + -- Add rules named PBX-SIP and PBX-RTP if not existing + found_sip_rule = false + found_rtp_rule = false + m.uci:foreach(config, section, + function(s1) + if s1._name == 'PBX-SIP' then + found_sip_rule = true + elseif s1._name == 'PBX-RTP' then + found_rtp_rule = true + end + end) + + if found_sip_rule ~= true then + newrule=m.uci:add(config, section) + m.uci:set(config, newrule, '_name', 'PBX-SIP') + end + if found_rtp_rule ~= true then + newrule=m.uci:add(config, section) + m.uci:set(config, newrule, '_name', 'PBX-RTP') + end +end + +-- Delete rules in the given config & section named PBX-SIP and PBX-RTP +function delete_sip_rtp_rules(config, section) + + -- Remove rules named PBX-SIP and PBX-RTP + commit = false + m.uci:foreach(config, section, + function(s1) + if s1._name == 'PBX-SIP' or s1._name == 'PBX-RTP' then + m.uci:delete(config, s1['.name']) + commit = true + end + end) + + -- If something changed, then we commit the config. + if commit == true then m.uci:commit(config) end +end + +-- Deletes QoS rules associated with this PBX. +function delete_qos_rules() + delete_sip_rtp_rules ("qos", "classify") +end + + +function insert_qos_rules() + -- Insert empty PBX-SIP and PBX-RTP rules if not present. + insert_empty_sip_rtp_rules ("qos", "classify") + + -- Get the network information + bindport, rtprange, ipaddr, externhost = get_network_info() + + -- Iterate through the QoS rules, and if there is no other rule with the same port + -- range at the priority service level, insert this rule. + commit = false + m.uci:foreach("qos", "classify", + function(s1) + if s1._name == 'PBX-SIP' then + if s1.ports ~= bindport or s1.target ~= "Priority" or s1.proto ~= "udp" then + m.uci:set("qos", s1['.name'], "ports", bindport) + m.uci:set("qos", s1['.name'], "proto", "udp") + m.uci:set("qos", s1['.name'], "target", "Priority") + commit = true + end + elseif s1._name == 'PBX-RTP' then + if s1.ports ~= rtprange or s1.target ~= "Priority" or s1.proto ~= "udp" then + m.uci:set("qos", s1['.name'], "ports", rtprange) + m.uci:set("qos", s1['.name'], "proto", "udp") + m.uci:set("qos", s1['.name'], "target", "Priority") + commit = true + end + end + end) + + -- If something changed, then we commit the qos config. + if commit == true then m.uci:commit("qos") end +end + +-- This function is a (so far) unsuccessful attempt to manipulate the firewall rules from here +-- Need to do more testing and eventually move to this mode. +function maintain_firewall_rules() + -- Get the network information + bindport, rtprange, ipaddr, externhost = get_network_info() + + commit = false + -- Only if externhost is set, do we control firewall rules. + if externhost ~= nil and bindport ~= nil and rtprange ~= nil then + -- Insert empty PBX-SIP and PBX-RTP rules if not present. + insert_empty_sip_rtp_rules ("firewall", "rule") + + -- Iterate through the firewall rules, and if the dest_port and dest_ip setting of the\ + -- SIP and RTP rule do not match what we want configured, set all the entries in the rule\ + -- appropriately. + m.uci:foreach("firewall", "rule", + function(s1) + if s1._name == 'PBX-SIP' then + if s1.dest_port ~= bindport then + m.uci:set("firewall", s1['.name'], "dest_port", bindport) + m.uci:set("firewall", s1['.name'], "src", "wan") + m.uci:set("firewall", s1['.name'], "proto", "udp") + m.uci:set("firewall", s1['.name'], "target", "ACCEPT") + commit = true + end + elseif s1._name == 'PBX-RTP' then + if s1.dest_port ~= rtprange then + m.uci:set("firewall", s1['.name'], "dest_port", rtprange) + m.uci:set("firewall", s1['.name'], "src", "wan") + m.uci:set("firewall", s1['.name'], "proto", "udp") + m.uci:set("firewall", s1['.name'], "target", "ACCEPT") + commit = true + end + end + end) + else + -- We delete the firewall rules if one or more of the necessary parameters are not set. + sip_rule_name=nil + rtp_rule_name=nil + + -- First discover the configuration names of the rules. + m.uci:foreach("firewall", "rule", + function(s1) + if s1._name == 'PBX-SIP' then + sip_rule_name = s1['.name'] + elseif s1._name == 'PBX-RTP' then + rtp_rule_name = s1['.name'] + end + end) + + -- Then, using the names, actually delete the rules. + if sip_rule_name ~= nil then + m.uci:delete("firewall", sip_rule_name) + commit = true + end + if rtp_rule_name ~= nil then + m.uci:delete("firewall", rtp_rule_name) + commit = true + end + end + + -- If something changed, then we commit the firewall config. + if commit == true then m.uci:commit("firewall") end +end + +m = Map (modulename, translate("Advanced Settings"), + translate("This section contains settings that do not need to be changed under \ + normal circumstances. In addition, here you can configure your system \ + for use with remote SIP devices, and resolve call quality issues by enabling \ + the insertion of QoS rules.")) + +-- Recreate the voip server config, and restart necessary services after changes are commited +-- to the advanced configuration. The firewall must restart because of "Remote Usage". +function m.on_after_commit(self) + + -- Make sure firewall rules are in place + maintain_firewall_rules() + + -- If insertion of QoS rules is enabled + if m.uci:get(modulename, "advanced", "qos_enabled") == "yes" then + insert_qos_rules() + else + delete_qos_rules() + end + + luci.sys.call("/etc/init.d/pbx-" .. server .. " restart 1\>/dev/null 2\>/dev/null") + luci.sys.call("/etc/init.d/" .. server .. " restart 1\>/dev/null 2\>/dev/null") + luci.sys.call("/etc/init.d/firewall restart 1\>/dev/null 2\>/dev/null") +end + +----------------------------------------------------------------------------- +s = m:section(NamedSection, "advanced", "settings", translate("Advanced Settings")) +s.anonymous = true + +s:tab("general", translate("General Settings")) +s:tab("remote_usage", translate("Remote Usage"), + translatef("You can use your SIP devices/softphones with this system from a remote location \ + as well, as long as your Internet Service Provider gives you a public IP. \ + You will be able to call other local users for free (e.g. other Analog Telephone Adapters (ATAs)) \ + and use your VoIP providers to make calls as if you were local to the PBX. \ + After configuring this tab, go back to where users are configured and see the new \ + Server and Port setting you need to configure the remote SIP devices with. Please note that if this \ + PBX is not running on your router/gateway, you will need to configure port forwarding (NAT) on your \ + router/gateway. Please forward the ports below (SIP port and RTP range) to the IP address of the \ + device running this PBX.")) + +s:tab("qos", translate("QoS Settings"), + translate("If you experience jittery or high latency audio during heavy downloads, you may want \ + to enable QoS. QoS prioritizes traffic to and from your network for specified ports and IP \ + addresses, resulting in better latency and throughput for sound in our case. If enabled below, \ + a QoS rule for this service will be configured by the PBX automatically, but you must visit the \ + QoS configuration page (Network->QoS) to configure other critical QoS settings like Download \ + and Upload speed.")) + +ringtime = s:taboption("general", Value, "ringtime", translate("Number of Seconds to Ring"), + translate("Set the number of seconds to ring users upon incoming calls before hanging up \ + or going to voicemail, if the voicemail is installed and enabled.")) +ringtime.datatype = "port" +ringtime.default = 30 + +ua = s:taboption("general", Value, "useragent", translate("User Agent String"), + translate("This is the name that the VoIP server will use to identify itself when \ + registering to VoIP (SIP) providers. Some providers require this to a specific \ + string matching a hardware SIP device.")) +ua.default = appname + +h = s:taboption("remote_usage", Value, "externhost", translate("Domain/IP Address/Dynamic Domain"), + translate("You can enter your domain name, external IP address, or dynamic domain name here. \ + The best thing to input is a static IP address. If your IP address is dynamic and it changes, \ + your configuration will become invalid. Hence, it's recommended to set up Dynamic DNS in this case. \ + and enter your Dynamic DNS hostname here. You can configure Dynamic DNS with the luci-app-ddns package.")) +h.datatype = "host(0)" + +p = s:taboption("remote_usage", Value, "bindport", translate("External SIP Port"), + translate("Pick a random port number between 6500 and 9500 for the service to listen on. \ + Do not pick the standard 5060, because it is often subject to brute-force attacks. \ + When finished, (1) click \"Save and Apply\", and (2) look in the \ + \"SIP Device/Softphone Accounts\" section for updated Server and Port settings \ + for your SIP Devices/Softphones.")) +p.datatype = "port" + +p = s:taboption("remote_usage", Value, "rtpstart", translate("RTP Port Range Start"), + translate("RTP traffic carries actual voice packets. This is the start of the port range \ + that will be used for setting up RTP communication. It's usually OK to leave this \ + at the default value.")) +p.datatype = "port" +p.default = defaultrtpstart + +p = s:taboption("remote_usage", Value, "rtpend", translate("RTP Port Range End")) +p.datatype = "port" +p.default = defaultrtpend + +p = s:taboption("qos", ListValue, "qos_enabled", translate("Insert QoS Rules")) +p:value("yes", translate("Yes")) +p:value("no", translate("No")) +p.default = "yes" + +return m diff --git a/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-calls.lua b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-calls.lua new file mode 100644 index 0000000..ca373d6 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-calls.lua @@ -0,0 +1,424 @@ +--[[ + Copyright 2011 Iordan Iordanov + + This file is part of luci-pbx. + + luci-pbx is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + luci-pbx is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with luci-pbx. If not, see . +]]-- + +if nixio.fs.access("/etc/init.d/asterisk") then + server = "asterisk" +elseif nixio.fs.access("/etc/init.d/freeswitch") then + server = "freeswitch" +else + server = "" +end + +modulename = "pbx-calls" +voipmodulename = "pbx-voip" +googlemodulename = "pbx-google" +usersmodulename = "pbx-users" +allvalidaccounts = {} +nallvalidaccounts = 0 +validoutaccounts = {} +nvalidoutaccounts = 0 +validinaccounts = {} +nvalidinaccounts = 0 +allvalidusers = {} +nallvalidusers = 0 +validoutusers = {} +nvalidoutusers = 0 + + +-- Checks whether the entered extension is valid syntactically. +function is_valid_extension(exten) + return (exten:match("[#*+0-9NXZ]+$") ~= nil) +end + + +m = Map (modulename, translate("Call Routing"), + translate("This is where you indicate which Google/SIP accounts are used to call what \ + country/area codes, which users can use what SIP/Google accounts, how incoming \ + calls are routed, what numbers can get into this PBX with a password, and what \ + numbers are blacklisted.")) + +-- Recreate the config, and restart services after changes are commited to the configuration. +function m.on_after_commit(self) + luci.sys.call("/etc/init.d/pbx-" .. server .. " restart 1\>/dev/null 2\>/dev/null") + luci.sys.call("/etc/init.d/" .. server .. " restart 1\>/dev/null 2\>/dev/null") +end + +-- Add Google accounts to all valid accounts, and accounts valid for incoming and outgoing calls. +m.uci:foreach(googlemodulename, "gtalk_jabber", + function(s1) + -- Add this provider to list of valid accounts. + if s1.username ~= nil and s1.name ~= nil then + allvalidaccounts[s1.name] = s1.username + nallvalidaccounts = nallvalidaccounts + 1 + + if s1.make_outgoing_calls == "yes" then + -- Add provider to the associative array of valid outgoing accounts. + validoutaccounts[s1.name] = s1.username + nvalidoutaccounts = nvalidoutaccounts + 1 + end + + if s1.register == "yes" then + -- Add provider to the associative array of valid outgoing accounts. + validinaccounts[s1.name] = s1.username + nvalidinaccounts = nvalidinaccounts + 1 + end + end + end) + +-- Add SIP accounts to all valid accounts, and accounts valid for incoming and outgoing calls. +m.uci:foreach(voipmodulename, "voip_provider", + function(s1) + -- Add this provider to list of valid accounts. + if s1.defaultuser ~= nil and s1.host ~= nil and s1.name ~= nil then + allvalidaccounts[s1.name] = s1.defaultuser .. "@" .. s1.host + nallvalidaccounts = nallvalidaccounts + 1 + + if s1.make_outgoing_calls == "yes" then + -- Add provider to the associative array of valid outgoing accounts. + validoutaccounts[s1.name] = s1.defaultuser .. "@" .. s1.host + nvalidoutaccounts = nvalidoutaccounts + 1 + end + + if s1.register == "yes" then + -- Add provider to the associative array of valid outgoing accounts. + validinaccounts[s1.name] = s1.defaultuser .. "@" .. s1.host + nvalidinaccounts = nvalidinaccounts + 1 + end + end + end) + +-- Add Local User accounts to all valid users, and users allowed to make outgoing calls. +m.uci:foreach(usersmodulename, "local_user", + function(s1) + -- Add user to list of all valid users. + if s1.defaultuser ~= nil then + allvalidusers[s1.defaultuser] = true + nallvalidusers = nallvalidusers + 1 + + if s1.can_call == "yes" then + validoutusers[s1.defaultuser] = true + nvalidoutusers = nvalidoutusers + 1 + end + end + end) + + +---------------------------------------------------------------------------------------------------- +-- If there are no accounts configured, or no accounts enabled for outgoing calls, display a warning. +-- Otherwise, display the usual help text within the section. +if nallvalidaccounts == 0 then + text = translate("NOTE: There are no Google or SIP provider accounts configured.") +elseif nvalidoutaccounts == 0 then + text = translate("NOTE: There are no Google or SIP provider accounts enabled for outgoing calls.") +else + text = translate("If you have more than one account that can make outgoing calls, you \ + should enter a list of phone numbers and/or prefixes in the following fields for each \ + provider listed. Invalid prefixes are removed silently, and only 0-9, X, Z, N, #, *, \ + and + are valid characters. The letter X matches 0-9, Z matches 1-9, and N matches 2-9. \ + For example to make calls to Germany through a provider, you can enter 49. To make calls \ + to North America, you can enter 1NXXNXXXXXX. If one of your providers can make \"local\" \ + calls to an area code like New York's 646, you can enter 646NXXXXXX for that \ + provider. You should leave one account with an empty list to make calls with \ + it by default, if no other provider's prefixes match. The system will automatically \ + replace an empty list with a message that the provider dials all numbers not matched by another \ + provider's prefixes. Be as specific as possible (i.e. 1NXXNXXXXXX is better than 1). Please note \ + all international dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a \ + space-separated list, and/or one per line by hitting enter after every one.") +end + + +s = m:section(NamedSection, "outgoing_calls", "call_routing", translate("Outgoing Calls"), text) +s.anonymous = true + +for k,v in pairs(validoutaccounts) do + patterns = s:option(DynamicList, k, v) + + -- If the saved field is empty, we return a string + -- telling the user that this provider would dial any exten. + function patterns.cfgvalue(self, section) + value = self.map:get(section, self.option) + + if value == nil then + return {translate("Dials numbers unmatched elsewhere")} + else + return value + end + end + + -- Write only valid extensions into the config file. + function patterns.write(self, section, value) + newvalue = {} + nindex = 1 + for index, field in ipairs(value) do + val = luci.util.trim(value[index]) + if is_valid_extension(val) == true then + newvalue[nindex] = val + nindex = nindex + 1 + end + end + DynamicList.write(self, section, newvalue) + end +end + +---------------------------------------------------------------------------------------------------- +-- If there are no accounts configured, or no accounts enabled for incoming calls, display a warning. +-- Otherwise, display the usual help text within the section. +if nallvalidaccounts == 0 then + text = translate("NOTE: There are no Google or SIP provider accounts configured.") +elseif nvalidinaccounts == 0 then + text = translate("NOTE: There are no Google or SIP provider accounts enabled for incoming calls.") +else + text = translate("For each provider enabled for incoming calls, here you can restrict which users to\ + ring on incoming calls. If the list is empty, the system will indicate that all users \ + enabled for incoming calls will ring. Invalid usernames will be rejected \ + silently. Also, entering a username here overrides the user's setting to not receive \ + incoming calls. This way, you can make certain users ring only for specific providers. \ + Entries can be made in a space-separated list, and/or one per line by hitting enter after \ + every one.") +end + + +s = m:section(NamedSection, "incoming_calls", "call_routing", translate("Incoming Calls"), text) +s.anonymous = true + +for k,v in pairs(validinaccounts) do + users = s:option(DynamicList, k, v) + + -- If the saved field is empty, we return a string telling the user that + -- this provider would ring all users configured for incoming calls. + function users.cfgvalue(self, section) + value = self.map:get(section, self.option) + + if value == nil then + return {translate("Rings users enabled for incoming calls")} + else + return value + end + end + + -- Write only valid user names. + function users.write(self, section, value) + newvalue = {} + nindex = 1 + for index, field in ipairs(value) do + trimuser = luci.util.trim(value[index]) + if allvalidusers[trimuser] == true then + newvalue[nindex] = trimuser + nindex = nindex + 1 + end + end + DynamicList.write(self, section, newvalue) + end +end + + +---------------------------------------------------------------------------------------------------- +-- If there are no user accounts configured, no user accounts enabled for outgoing calls, +-- display a warning. Otherwise, display the usual help text within the section. +if nallvalidusers == 0 then + text = translate("NOTE: There are no local user accounts configured.") +elseif nvalidoutusers == 0 then + text = translate("NOTE: There are no local user accounts enabled for outgoing calls.") +else + text = translate("For each user enabled for outgoing calls you can restrict what providers the user \ + can use for outgoing calls. By default all users can use all providers. To show up in the list \ + below the user should be allowed to make outgoing calls in the \"User Accounts\" page. Enter VoIP \ + providers in the format username@some.host.name, as listed in \"Outgoing Calls\" above. It's \ + easiest to copy and paste the providers from above. Invalid entries, including providers not \ + enabled for outgoing calls, will be rejected silently. Entries can be made in a space-separated \ + list, and/or one per line by hitting enter after every one.") +end + + +s = m:section(NamedSection, "providers_user_can_use", "call_routing", + translate("Providers Used for Outgoing Calls"), text) +s.anonymous = true + +for k,v in pairs(validoutusers) do + providers = s:option(DynamicList, k, k) + + -- If the saved field is empty, we return a string telling the user + -- that this user uses all providers enavled for outgoing calls. + function providers.cfgvalue(self, section) + value = self.map:get(section, self.option) + + if value == nil then + return {translate("Uses providers enabled for outgoing calls")} + else + newvalue = {} + -- Convert internal names to user@host values. + for i,v in ipairs(value) do + newvalue[i] = validoutaccounts[v] + end + return newvalue + end + end + + -- Cook the new values prior to entering them into the config file. + -- Also, enter them only if they are valid. + function providers.write(self, section, value) + cookedvalue = {} + cindex = 1 + for index, field in ipairs(value) do + cooked = string.gsub(luci.util.trim(value[index]), "%W", "_") + if validoutaccounts[cooked] ~= nil then + cookedvalue[cindex] = cooked + cindex = cindex + 1 + end + end + DynamicList.write(self, section, cookedvalue) + end +end + +---------------------------------------------------------------------------------------------------- +s = m:section(TypedSection, "callthrough_numbers", translate("Call-through Numbers"), + translate("Designate numbers that are allowed to call through this system and which user's \ + privileges they will have.")) +s.anonymous = true +s.addremove = true + +num = s:option(DynamicList, "callthrough_number_list", translate("Call-through Numbers"), + translate("Specify numbers individually here. Press enter to add more numbers. \ + You will have to experiment with what country and area codes you need to add \ + to the number.")) +num.datatype = "uinteger" + +p = s:option(ListValue, "enabled", translate("Enabled")) +p:value("yes", translate("Yes")) +p:value("no", translate("No")) +p.default = "yes" + +user = s:option(Value, "defaultuser", translate("User Name"), + translate("The number(s) specified above will be able to dial out with this user's providers. \ + Invalid usernames, including users not enabled for outgoing calls, are dropped silently. \ + Please verify that the entry was accepted.")) +function user.write(self, section, value) + trimuser = luci.util.trim(value) + if allvalidusers[trimuser] == true then + Value.write(self, section, trimuser) + end +end + +pwd = s:option(Value, "pin", translate("PIN"), + translate("Your PIN disappears when saved for your protection. It will be changed \ + only when you enter a value different from the saved one. Leaving the PIN \ + empty is possible, but please beware of the security implications.")) +pwd.password = true +pwd.rmempty = false + +-- We skip reading off the saved value and return nothing. +function pwd.cfgvalue(self, section) + return "" +end + +-- We check the entered value against the saved one, and only write if the entered value is +-- something other than the empty string, and it differes from the saved value. +function pwd.write(self, section, value) + local orig_pwd = m:get(section, self.option) + if value and #value > 0 and orig_pwd ~= value then + Value.write(self, section, value) + end +end + +---------------------------------------------------------------------------------------------------- +s = m:section(TypedSection, "callback_numbers", translate("Call-back Numbers"), + translate("Designate numbers to whom the system will hang up and call back, which provider will \ + be used to call them, and which user's privileges will be granted to them.")) +s.anonymous = true +s.addremove = true + +num = s:option(DynamicList, "callback_number_list", translate("Call-back Numbers"), + translate("Specify numbers individually here. Press enter to add more numbers. \ + You will have to experiment with what country and area codes you need to add \ + to the number.")) +num.datatype = "uinteger" + +p = s:option(ListValue, "enabled", translate("Enabled")) +p:value("yes", translate("Yes")) +p:value("no", translate("No")) +p.default = "yes" + +delay = s:option(Value, "callback_hangup_delay", translate("Hang-up Delay"), + translate("How long to wait before hanging up. If the provider you use to dial automatically forwards \ + to voicemail, you can set this value to a delay that will allow you to hang up before your call gets \ + forwarded and you get billed for it.")) +delay.datatype = "uinteger" +delay.default = 0 + +user = s:option(Value, "defaultuser", translate("User Name"), + translate("The number(s) specified above will be able to dial out with this user's providers. \ + Invalid usernames, including users not enabled for outgoing calls, are dropped silently. \ + Please verify that the entry was accepted.")) +function user.write(self, section, value) + trimuser = luci.util.trim(value) + if allvalidusers[trimuser] == true then + Value.write(self, section, trimuser) + end +end + +pwd = s:option(Value, "pin", translate("PIN"), + translate("Your PIN disappears when saved for your protection. It will be changed \ + only when you enter a value different from the saved one. Leaving the PIN \ + empty is possible, but please beware of the security implications.")) +pwd.password = true +pwd.rmempty = false + +-- We skip reading off the saved value and return nothing. +function pwd.cfgvalue(self, section) + return "" +end + +-- We check the entered value against the saved one, and only write if the entered value is +-- something other than the empty string, and it differes from the saved value. +function pwd.write(self, section, value) + local orig_pwd = m:get(section, self.option) + if value and #value > 0 and orig_pwd ~= value then + Value.write(self, section, value) + end +end + +provider = s:option(Value, "callback_provider", translate("Call-back Provider"), + translate("Enter a VoIP provider to use for call-back in the format username@some.host.name, as listed in \ + \"Outgoing Calls\" above. It's easiest to copy and paste the providers from above. Invalid entries, including \ + providers not enabled for outgoing calls, will be rejected silently.")) +function provider.write(self, section, value) + cooked = string.gsub(luci.util.trim(value), "%W", "_") + if validoutaccounts[cooked] ~= nil then + Value.write(self, section, value) + end +end + +---------------------------------------------------------------------------------------------------- +s = m:section(NamedSection, "blacklisting", "call_routing", translate("Blacklisted Numbers"), + translate("Enter phone numbers that you want to decline calls from automatically. \ + You should probably omit the country code and any leading zeroes, but please \ + experiment to make sure you are blocking numbers from your desired area successfully.")) +s.anonymous = true + +b = s:option(DynamicList, "blacklist1", translate("Dynamic List of Blacklisted Numbers"), + translate("Specify numbers individually here. Press enter to add more numbers.")) +b.cast = "string" +b.datatype = "uinteger" + +b = s:option(Value, "blacklist2", translate("Space-Separated List of Blacklisted Numbers"), + translate("Copy-paste large lists of numbers here.")) +b.template = "cbi/tvalue" +b.rows = 3 + +return m diff --git a/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-google.lua b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-google.lua new file mode 100644 index 0000000..3c36a16 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-google.lua @@ -0,0 +1,122 @@ +--[[ + Copyright 2011 Iordan Iordanov + + This file is part of luci-pbx. + + luci-pbx is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + luci-pbx is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with luci-pbx. If not, see . +]]-- + +if nixio.fs.access("/etc/init.d/asterisk") then + server = "asterisk" +elseif nixio.fs.access("/etc/init.d/freeswitch") then + server = "freeswitch" +else + server = "" +end + +modulename = "pbx-google" +googlemodulename = "pbx-google" +defaultstatus = "dnd" +defaultstatusmessage = "PBX online, may lose messages" + +m = Map (modulename, translate("Google Accounts"), + translate("This is where you set up your Google (Talk and Voice) Accounts, in order to start \ + using them for dialing and receiving calls (voice chat and real phone calls). Please \ + make at least one voice call using the Google Talk plugin installable through the \ + GMail interface, and then log out from your account everywhere. Click \"Add\" \ + to add as many accounts as you wish.")) + +-- Recreate the config, and restart services after changes are commited to the configuration. +function m.on_after_commit(self) + -- Create a field "name" for each account that identifies the account in the backend. + commit = false + m.uci:foreach(modulename, "gtalk_jabber", + function(s1) + if s1.username ~= nil then + name=string.gsub(s1.username, "%W", "_") + if s1.name ~= name then + m.uci:set(modulename, s1['.name'], "name", name) + commit = true + end + end + end) + if commit == true then m.uci:commit(modulename) end + + luci.sys.call("/etc/init.d/pbx-" .. server .. " restart 1\>/dev/null 2\>/dev/null") + luci.sys.call("/etc/init.d/asterisk restart 1\>/dev/null 2\>/dev/null") +end + +----------------------------------------------------------------------------- +s = m:section(TypedSection, "gtalk_jabber", translate("Google Voice/Talk Accounts")) +s.anonymous = true +s.addremove = true + +s:option(Value, "username", translate("Email")) + +pwd = s:option(Value, "secret", translate("Password"), + translate("When your password is saved, it disappears from this field and is not displayed \ + for your protection. The previously saved password will be changed only when you \ + enter a value different from the saved one.")) +pwd.password = true +pwd.rmempty = false + +-- We skip reading off the saved value and return nothing. +function pwd.cfgvalue(self, section) + return "" +end + +-- We check the entered value against the saved one, and only write if the entered value is +-- something other than the empty string, and it differes from the saved value. +function pwd.write(self, section, value) + local orig_pwd = m:get(section, self.option) + if value and #value > 0 and orig_pwd ~= value then + Value.write(self, section, value) + end +end + + +p = s:option(ListValue, "register", + translate("Enable Incoming Calls (set Status below)"), + translate("When somebody starts voice chat with your GTalk account or calls the GVoice, \ + number (if you have Google Voice), the call will be forwarded to any users \ + that are online (registered using a SIP device or softphone) and permitted to \ + receive the call. If you have Google Voice, you must go to your GVoice settings and \ + forward calls to Google chat in order to actually receive calls made to your \ + GVoice number. If you have trouble receiving calls from GVoice, experiment \ + with the Call Screening option in your GVoice Settings. Finally, make sure no other \ + client is online with this account (browser in gmail, mobile/desktop Google Talk \ + App) as it may interfere.")) +p:value("yes", translate("Yes")) +p:value("no", translate("No")) +p.default = "yes" + +p = s:option(ListValue, "make_outgoing_calls", translate("Enable Outgoing Calls"), + translate("Use this account to make outgoing calls as configured in the \"Call Routing\" section.")) +p:value("yes", translate("Yes")) +p:value("no", translate("No")) +p.default = "yes" + +st = s:option(ListValue, "status", translate("Google Talk Status")) +st:depends("register", "yes") +st:value("dnd", translate("Do Not Disturb")) +st:value("away", translate("Away")) +st:value("available", translate("Available")) +st.default = defaultstatus + +stm = s:option(Value, "statusmessage", translate("Google Talk Status Message"), + translate("Avoid using anything but alpha-numeric characters, space, comma, and period.")) +stm:depends("register", "yes") +stm.default = defaultstatusmessage + +return m diff --git a/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-users.lua b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-users.lua new file mode 100644 index 0000000..c7c8b4d --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-users.lua @@ -0,0 +1,133 @@ +--[[ + Copyright 2011 Iordan Iordanov + + This file is part of luci-pbx. + + luci-pbx is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + luci-pbx is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with luci-pbx. If not, see . +]]-- + +if nixio.fs.access("/etc/init.d/asterisk") then + server = "asterisk" +elseif nixio.fs.access("/etc/init.d/freeswitch") then + server = "freeswitch" +else + server = "" +end + +modulename = "pbx-users" +modulenamecalls = "pbx-calls" +modulenameadvanced = "pbx-advanced" + + +m = Map (modulename, translate("User Accounts"), + translate("Here you must configure at least one SIP account, that you \ + will use to register with this service. Use this account either in an Analog Telephony \ + Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid on your \ + smartphone, or Ekiga, Linphone, or X-Lite on your computer. By default, all SIP accounts \ + will ring simultaneously if a call is made to one of your VoIP provider accounts or GV \ + numbers.")) + +-- Recreate the config, and restart services after changes are commited to the configuration. +function m.on_after_commit(self) + luci.sys.call("/etc/init.d/pbx-" .. server .. " restart 1\>/dev/null 2\>/dev/null") + luci.sys.call("/etc/init.d/" .. server .. " restart 1\>/dev/null 2\>/dev/null") +end + +externhost = m.uci:get(modulenameadvanced, "advanced", "externhost") +bindport = m.uci:get(modulenameadvanced, "advanced", "bindport") +ipaddr = m.uci:get("network", "lan", "ipaddr") + +----------------------------------------------------------------------------- +s = m:section(NamedSection, "server", "user", translate("Server Setting")) +s.anonymous = true + +if ipaddr == nil or ipaddr == "" then + ipaddr = "(IP address not static)" +end + +if bindport ~= nil then + just_ipaddr = ipaddr + ipaddr = ipaddr .. ":" .. bindport +end + +s:option(DummyValue, "ipaddr", translate("Server Setting for Local SIP Devices"), + translate("Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices you will \ + use ONLY locally and never from a remote location.")).default = ipaddr + +if externhost ~= nil then + if bindport ~= nil then + just_externhost = externhost + externhost = externhost .. ":" .. bindport + end + s:option(DummyValue, "externhost", translate("Server Setting for Remote SIP Devices"), + translate("Enter this hostname (or hostname:port) in the Server/Registrar setting of SIP \ + devices you will use from a remote location (they will work locally too).") + ).default = externhost +end + +if bindport ~= nil then + s:option(DummyValue, "bindport", translate("Port Setting for SIP Devices"), + translatef("If setting Server/Registrar to %s or %s does not work for you, try setting \ + it to %s or %s and entering this port number in a separate field that specifies the \ + Server/Registrar port number. Beware that some devices have a confusing \ + setting that sets the port where SIP requests originate from on the SIP \ + device itself (the bind port). The port specified on this page is NOT this bind port \ + but the port this service listens on.", + ipaddr, externhost, just_ipaddr, just_externhost)).default = bindport +end + +----------------------------------------------------------------------------- +s = m:section(TypedSection, "local_user", translate("SIP Device/Softphone Accounts")) +s.anonymous = true +s.addremove = true + +s:option(Value, "fullname", translate("Full Name"), + translate("You can specify a real name to show up in the Caller ID here.")) + +du = s:option(Value, "defaultuser", translate("User Name"), + translate("Use (four to five digit) numeric user name if you are connecting normal telephones \ + with ATAs to this system (so they can dial user names).")) +du.datatype = "uciname" + +pwd = s:option(Value, "secret", translate("Password"), + translate("Your password disappears when saved for your protection. It will be changed \ + only when you enter a value different from the saved one.")) +pwd.password = true +pwd.rmempty = false + +-- We skip reading off the saved value and return nothing. +function pwd.cfgvalue(self, section) + return "" +end + +-- We check the entered value against the saved one, and only write if the entered value is +-- something other than the empty string, and it differes from the saved value. +function pwd.write(self, section, value) + local orig_pwd = m:get(section, self.option) + if value and #value > 0 and orig_pwd ~= value then + Value.write(self, section, value) + end +end + +p = s:option(ListValue, "ring", translate("Receives Incoming Calls")) +p:value("yes", translate("Yes")) +p:value("no", translate("No")) +p.default = "yes" + +p = s:option(ListValue, "can_call", translate("Makes Outgoing Calls")) +p:value("yes", translate("Yes")) +p:value("no", translate("No")) +p.default = "yes" + +return m diff --git a/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-voip.lua b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-voip.lua new file mode 100644 index 0000000..9b46202 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx-voip.lua @@ -0,0 +1,116 @@ +--[[ + Copyright 2011 Iordan Iordanov + + This file is part of luci-pbx. + + luci-pbx is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + luci-pbx is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with luci-pbx. If not, see . +]]-- + +if nixio.fs.access("/etc/init.d/asterisk") then + server = "asterisk" +elseif nixio.fs.access("/etc/init.d/freeswitch") then + server = "freeswitch" +else + server = "" +end + +modulename = "pbx-voip" + +m = Map (modulename, translate("SIP Accounts"), + translate("This is where you set up your SIP (VoIP) accounts ts like Sipgate, SipSorcery, \ + the popular Betamax providers, and any other providers with SIP settings in order to start \ + using them for dialing and receiving calls (SIP uri and real phone calls). Click \"Add\" to \ + add as many accounts as you wish.")) + +-- Recreate the config, and restart services after changes are commited to the configuration. +function m.on_after_commit(self) + commit = false + -- Create a field "name" for each account that identifies the account in the backend. + m.uci:foreach(modulename, "voip_provider", + function(s1) + if s1.defaultuser ~= nil and s1.host ~= nil then + name=string.gsub(s1.defaultuser.."_"..s1.host, "%W", "_") + if s1.name ~= name then + m.uci:set(modulename, s1['.name'], "name", name) + commit = true + end + end + end) + if commit == true then m.uci:commit(modulename) end + + luci.sys.call("/etc/init.d/pbx-" .. server .. " restart 1\>/dev/null 2\>/dev/null") + luci.sys.call("/etc/init.d/" .. server .. " restart 1\>/dev/null 2\>/dev/null") +end + +----------------------------------------------------------------------------- +s = m:section(TypedSection, "voip_provider", translate("SIP Provider Accounts")) +s.anonymous = true +s.addremove = true + +s:option(Value, "defaultuser", translate("User Name")) +pwd = s:option(Value, "secret", translate("Password"), + translate("When your password is saved, it disappears from this field and is not displayed \ + for your protection. The previously saved password will be changed only when you \ + enter a value different from the saved one.")) + + + +pwd.password = true +pwd.rmempty = false + +-- We skip reading off the saved value and return nothing. +function pwd.cfgvalue(self, section) + return "" +end + +-- We check the entered value against the saved one, and only write if the entered value is +-- something other than the empty string, and it differes from the saved value. +function pwd.write(self, section, value) + local orig_pwd = m:get(section, self.option) + if value and #value > 0 and orig_pwd ~= value then + Value.write(self, section, value) + end +end + +h = s:option(Value, "host", translate("SIP Server/Registrar")) +h.datatype = "host(0)" + +p = s:option(ListValue, "register", translate("Enable Incoming Calls (Register via SIP)"), + translate("This option should be set to \"Yes\" if you have a DID \(real telephone number\) \ + associated with this SIP account or want to receive SIP uri calls through this \ + provider.")) +p:value("yes", translate("Yes")) +p:value("no", translate("No")) +p.default = "yes" + +p = s:option(ListValue, "make_outgoing_calls", translate("Enable Outgoing Calls"), + translate("Use this account to make outgoing calls.")) +p:value("yes", translate("Yes")) +p:value("no", translate("No")) +p.default = "yes" + +from = s:option(Value, "fromdomain", + translate("SIP Realm (needed by some providers)")) +from.optional = true +from.datatype = "host(0)" + +port = s:option(Value, "port", translate("SIP Server/Registrar Port")) +port.optional = true +port.datatype = "port" + +op = s:option(Value, "outboundproxy", translate("Outbound Proxy")) +op.optional = true +op.datatype = "host(0)" + +return m diff --git a/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx.lua b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx.lua new file mode 100644 index 0000000..4c5fcbd --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/luasrc/model/cbi/pbx.lua @@ -0,0 +1,115 @@ +--[[ + Copyright 2011 Iordan Iordanov + + This file is part of luci-pbx. + + luci-pbx is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + luci-pbx is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with luci-pbx. If not, see . +]]-- + +modulename = "pbx" + + +if nixio.fs.access("/etc/init.d/asterisk") then + server = "asterisk" +elseif nixio.fs.access("/etc/init.d/freeswitch") then + server = "freeswitch" +else + server = "" +end + + +-- Returns formatted output of string containing only the words at the indices +-- specified in the table "indices". +function format_indices(string, indices) + if indices == nil then + return "Error: No indices to format specified.\n" + end + + -- Split input into separate lines. + lines = luci.util.split(luci.util.trim(string), "\n") + + -- Split lines into separate words. + splitlines = {} + for lpos,line in ipairs(lines) do + splitlines[lpos] = luci.util.split(luci.util.trim(line), "%s+", nil, true) + end + + -- For each split line, if the word at all indices specified + -- to be formatted are not null, add the formatted line to the + -- gathered output. + output = "" + for lpos,splitline in ipairs(splitlines) do + loutput = "" + for ipos,index in ipairs(indices) do + if splitline[index] ~= nil then + loutput = loutput .. string.format("%-40s", splitline[index]) + else + loutput = nil + break + end + end + + if loutput ~= nil then + output = output .. loutput .. "\n" + end + end + return output +end + + +m = Map (modulename, translate("PBX Main Page"), + translate("This configuration page allows you to configure a phone system (PBX) service which \ + permits making phone calls through multiple Google and SIP (like Sipgate, \ + SipSorcery, and Betamax) accounts and sharing them among many SIP devices. \ + Note that Google accounts, SIP accounts, and local user accounts are configured in the \ + \"Google Accounts\", \"SIP Accounts\", and \"User Accounts\" sub-sections. \ + You must add at least one User Account to this PBX, and then configure a SIP device or \ + softphone to use the account, in order to make and receive calls with your Google/SIP \ + accounts. Configuring multiple users will allow you to make free calls between all users, \ + and share the configured Google and SIP accounts. If you have more than one Google and SIP \ + accounts set up, you should probably configure how calls to and from them are routed in \ + the \"Call Routing\" page. If you're interested in using your own PBX from anywhere in the \ + world, then visit the \"Remote Usage\" section in the \"Advanced Settings\" page.")) + +----------------------------------------------------------------------------------------- +s = m:section(NamedSection, "connection_status", "main", + translate("PBX Service Status")) +s.anonymous = true + +s:option (DummyValue, "status", translate("Service Status")) + +sts = s:option(DummyValue, "_sts") +sts.template = "cbi/tvalue" +sts.rows = 20 + +function sts.cfgvalue(self, section) + + if server == "asterisk" then + regs = luci.sys.exec("asterisk -rx 'sip show registry' | sed 's/peer-//'") + jabs = luci.sys.exec("asterisk -rx 'jabber show connections' | grep onnected") + usrs = luci.sys.exec("asterisk -rx 'sip show users'") + chan = luci.sys.exec("asterisk -rx 'core show channels'") + + return format_indices(regs, {1, 5}) .. + format_indices(jabs, {2, 4}) .. "\n" .. + format_indices(usrs, {1} ) .. "\n" .. chan + + elseif server == "freeswitch" then + return "Freeswitch is not supported yet.\n" + else + return "Neither Asterisk nor FreeSwitch discovered, please install Asterisk, as Freeswitch is not supported yet.\n" + end +end + +return m diff --git a/feeds/luci/applications/luci-app-pbx/po/ca/pbx.po b/feeds/luci/applications/luci-app-pbx/po/ca/pbx.po new file mode 100644 index 0000000..c8a0a99 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/ca/pbx.po @@ -0,0 +1,509 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-01 05:14+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Ajusts avançats" + +msgid "Available" +msgstr "Disponible" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" +"Eviteu utilitzar res excepte caràcters alfanumèrics, espai, coma, i punt." + +msgid "Away" +msgstr "Fora" + +msgid "Blacklisted Numbers" +msgstr "Nombres prohibits" + +msgid "Call Routing" +msgstr "Encaminament de trucades" + +msgid "Call-back Numbers" +msgstr "Nombres de trucada de tornada" + +msgid "Call-back Provider" +msgstr "Proveïdor de trucada de tornada" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "Copieu i enganxeu llistes grans de nombres aquí." + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" +"Designeu els nombres que es permeten trucar a través d'aquest sistema i els " +"privilegis de qual usuari tindran." + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" +"Designeu els nombres als quals el sistema penjarà i trucarà de tornada, qual " +"proveïdor s'emprarà per a trucar-los, i els privilegis de qual usuari se " +"lis concedirà." + +msgid "Dials numbers unmatched elsewhere" +msgstr "Truca els nombres que no coincideixen d'altra manera" + +msgid "Do Not Disturb" +msgstr "No molestis" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "Habilita trucades entrants (registreu via SIP)" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "Habilita trucades entrants (establiu l'Estat a baix)" + +msgid "Enable Outgoing Calls" +msgstr "Habilita trucades sortints" + +msgid "Enabled" +msgstr "Habilitat" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "Port SIP extern" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "Nom complet" + +msgid "General Settings" +msgstr "Ajusts generals" + +msgid "Google Accounts" +msgstr "Comptes de Google" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "Retard de penja" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" +"Quant temps per a esperar abans de penjar. Si el proveïdor que empreu per a " +"trucar automàticament redirigeix al correu de veu, podeu estableix aquest " +"valor a un retard que us permet penjar abans que la teva trucada es " +"redirigeixi i s'us cobri per ella." + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "Trucades entrants" + +msgid "Insert QoS Rules" +msgstr "Insereix regles QoS" + +msgid "Makes Outgoing Calls" +msgstr "Fa trucades sortints" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "NOTA: No hi ha cap compte configurat ni del Google ni de proveïdor SIP." + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" +"NOTA: No hi ha cap compte habilitat ni del Google ni de proveïdor SIP per " +"als trucades entrants." + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" +"NOTA: No hi ha cap compte habilitat ni del Google ni de proveïdor SIP per " +"als trucades sortints." + +msgid "NOTE: There are no local user accounts configured." +msgstr "NOTA: No hi ha cap compte d'usuari local configurat." + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" +"NOTA: No hi ha cap compte d'usuari local habilitat per als trucades " +"sortints." + +msgid "No" +msgstr "No" + +msgid "Number of Seconds to Ring" +msgstr "Nombre de segons a sonar" + +msgid "Outbound Proxy" +msgstr "Servidor intermediari de sortida" + +msgid "Outgoing Calls" +msgstr "Trucades sortints" + +msgid "PBX Main Page" +msgstr "Pàgina principal PBX" + +msgid "PBX Service Status" +msgstr "Estat del servei PBX" + +msgid "PIN" +msgstr "PIN" + +msgid "Password" +msgstr "Contrasenya" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "Ajust de port per als dispositius SIP" + +msgid "Providers Used for Outgoing Calls" +msgstr "Proveïdors utilitzats per als trucades sortints" + +msgid "QoS Settings" +msgstr "Ajusts QoS" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "Rep trucades entrants" + +msgid "Remote Usage" +msgstr "Ús remot" + +msgid "Rings users enabled for incoming calls" +msgstr "Truca als usuaris habilitats per a rebre trucades" + +msgid "SIP Accounts" +msgstr "Comptes SIP" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "Comptes de proveïdor SIP" + +msgid "SIP Realm (needed by some providers)" +msgstr "Regne SIP (necessitat per alguns proveïdors)" + +msgid "SIP Server/Registrar" +msgstr "Servidor/Registrador SIP" + +msgid "SIP Server/Registrar Port" +msgstr "Port del Servidor/Registrador SIP" + +msgid "Server Setting" +msgstr "Ajust de servidor" + +msgid "Server Setting for Local SIP Devices" +msgstr "Ajust de servidor pels dispositius SIP locals" + +msgid "Server Setting for Remote SIP Devices" +msgstr "Ajust de servidor pels dispositius SIP remots" + +msgid "Service Status" +msgstr "Estat de servei" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" +"Estableix el nombre de segons per a sonar als usuaris abans de penjar o anar " +"al correu de veu, si el correu de veu està instal·lat i habilitat." + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "Llista de nombres prohibits separats per espai" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" +"Especifiqueu els nombres individualment aquí. Premeu Enter per afegir més " +"nombres." + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" +"Utilitza aquest compte per fer trucades sortints com configurat en la secció " +"\"Encaminament de trucades\"." + +msgid "Use this account to make outgoing calls." +msgstr "Utilitza aquest compte per fer trucades sortints." + +msgid "User Accounts" +msgstr "Comptes d'usuari" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "Nom d'usuari" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "Sí" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/cs/pbx.po b/feeds/luci/applications/luci-app-pbx/po/cs/pbx.po new file mode 100644 index 0000000..8b69ef1 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/cs/pbx.po @@ -0,0 +1,487 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-12 20:19+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Pokročilé nastavení" + +msgid "Available" +msgstr "Dostupné" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "Pryč" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "Nevyrušovat" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "Email" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "Povolit příchozí hovory (Registrace přes SIP)" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "Povolit odchozí hovory" + +msgid "Enabled" +msgstr "Povoleno" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "Externí SIP port" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "Celé jméno (jméno a příjmení)" + +msgid "General Settings" +msgstr "Obecné nastavení" + +msgid "Google Accounts" +msgstr "Google účty" + +msgid "Google Talk Status" +msgstr "Stav Google Talk" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "Google Voice/Talk účty" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "Příchozí volání" + +msgid "Insert QoS Rules" +msgstr "Vložte QoS pravidla" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "Ne" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "Odchozí volání" + +msgid "PBX Main Page" +msgstr "Hlavní stránka PBX" + +msgid "PBX Service Status" +msgstr "Stav PBX služby" + +msgid "PIN" +msgstr "PIN" + +msgid "Password" +msgstr "Heslo" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "Nastavení QoS" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "SIP účty" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "Stav služby" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "Uživatelské účty" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "Uživatelské jméno" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "Ano" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/de/pbx.po b/feeds/luci/applications/luci-app-pbx/po/de/pbx.po new file mode 100644 index 0000000..3bc4bd4 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/de/pbx.po @@ -0,0 +1,699 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-30 18:17+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +msgid "Available" +msgstr "Verfügbar" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "Nur alphanumerische Zeichen, Komma, Punkt und Leerzeichen verwenden" + +msgid "Away" +msgstr "Abwesend" + +msgid "Blacklisted Numbers" +msgstr "Nicht erlaubte Nummern (Blacklist)" + +msgid "Call Routing" +msgstr "Anrufweiterleitung" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "Durchwahl Nummern" + +msgid "Copy-paste large lists of numbers here." +msgstr "Hier können per Copy & Paste größere Nummernlisten eingefügt werden." + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "Wählt Nummern an, für die es keine andere Übereinstimmung gibt" + +msgid "Do Not Disturb" +msgstr "Beschäftigt" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "Domäne/IP-Adresse/Dynamische Domäne" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "Dynamische Liste nicht erlaubter Nummern (Dynamische Blacklist)" + +msgid "Email" +msgstr "E-Mail" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "Eingehende Anrufe akzeptieren (registrieren via SIP)" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "Eingehende Anrufe akzeptieren (Status unten einstellen)" + +msgid "Enable Outgoing Calls" +msgstr "Ausgehende Anrufe aktivieren" + +msgid "Enabled" +msgstr "Aktiv" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" +"Geben Sie Telefonnummern ein, von denen Anrufe automatisch zurückgewiesen " +"werden sollen. Sie sollten die Ländervorwahl und alle führenden Nullen " +"weglassen, aber experimentieren Sie ruhig, damit Sie auch wirklich alle " +"Nummern blockieren, die blockiert werden sollen." + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" +"Geben SIe diese IP (oder IP:Port) in der Server-/Registrar-Einstellung der " +"SIP-Geräte an, die Sie NUR local und niemals von einem entfernten Ort " +"einsetzen werden." + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" +"Geben SIe diese IP (oder IP:Port) in der Server-/Registrar-Einstellung der " +"SIP-Geräte an, die Sie von einem entfernten Ort einsetzen werden (sie " +"funktionieren auch lokal)." + +msgid "External SIP Port" +msgstr "Externer SIP Port" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" +"Hier können Sie für jeden Dienstanbieter, der für eingehende Anrufe " +"eingerichtet ist, festlegen, welche Nutzer ein Klingelzeichen bei " +"eingehenden Anrufen erhalten. Ist die Liste leer, klingelt es bei allen " +"Nutzern, die eingehende Anrufe empfangen dürfen. Ungültige Benutzernamen " +"werden ohne Fehlermeldung zurückgewiesen. Außerdem überschreibt der Eintrag " +"eines Benutzernamens an dieser Stelle die evtl. vorhandene Einstellung für " +"diesen Benutzer, keine eingehenden Anrufe zu erhalten. Auf diese Weise kann " +"eingestellt werden, dass die Nutzer nur bei bestimmten Dienstanbietern ein " +"Klingelzeichen erhalten. Einträge in dieser Liste können entweder durch " +"Leerzeichen getrennt oder als ein Eintrag pro Zeile (Eingabetaste nach jedem " +"Eintrag) eingegeben werden." + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" +"Hier können Sie für jeden Benutzer, der für abgehende Anrufe eingerichtet " +"ist, festlegen, welche Dienstanbieter verwendet werden dürfen. In der " +"Voreinstellung dürfen alle Benutzer auch alle Dienstanbieter verwenden. Um " +"in der Liste unten aufzutauchen, sollte dem Benutzer auf der Seite " +"\"Benutzerkonten\" erlaubt werden, abgehende Anrufe machen zu dürfen. Geben " +"Sie VoIP-Dienstanbieter im Format Benutzername@Servername an, wie bereits " +"oben unter \"Abgehende Anrufe\". Am einfachsten kopieren Sie die " +"Dienstanbieter von dort und fügen sie hier wieder ein. Ungültige Einträge, " +"einschließlich nicht für abgehende Anrufe zugelassene Dienstanbieter, werden " +"ohne Fehlermeldung zurückgewiesen. Einträge in dieser Liste können entweder " +"durch Leerzeichen getrennt und/oder als ein Eintrag pro Zeile (Eingabetaste " +"nach jedem Eintrag) eingegeben werden." + +msgid "Full Name" +msgstr "Vollständiger Name" + +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +msgid "Google Accounts" +msgstr "Google-Konten" + +msgid "Google Talk Status" +msgstr "Status für Google Talk" + +msgid "Google Talk Status Message" +msgstr "Statusbenachrichtigung für Google Talk" + +msgid "Google Voice/Talk Accounts" +msgstr "Google Voice/Talk-Konten" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" +"Hier müssen Sie wenigstens ein SIP-Konto angeben, welches Sie zur Anmeldung " +"an diesen Dienst nutzen. Verwenden Sie dieses Konto entweder in einem " +"Adapter für analoges Telefonieren (ATA) oder einer SIP-Software wie " +"CSipSimple, Linphone, oder Sipdroid auf Ihrem Smartphone, oder Ekiga, " +"Linphone, oder X-Lite auf Ihrem Computer. In der Voreinstellung klingeln " +"alle SIP-Konten gleichzeitig, wenn ein Anruf auf eines Ihrer VoIP-Konten " +"oder Ihre GV-Nummern gemacht wird." + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" +"Wenn EInstellen des Servers/Registrars auf %s oder %s bei Ihnen nicht " +"funktioniert, versuchen Sie die Einstellung %s oder %s und geben Sie die " +"Portnummer in ein separates Feld für Server/Registrat-Portnummer ein. " +"Achtung: Einige Geräte haben eine verwirrende Einstellung, die den Port " +"setzt, von dem die SIP-Anfragen auf dem Gerät selbst herkommen (der Bindungs-" +"Port). Der Port auf dieser Seite meint NICHT diesen Bindungs-Port, sondern " +"den Port, an dem der Dienst lauscht." + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" +"Wenn Sie stotternden oder stark verzögerten Ton während großer Downloads " +"haben, sollten Sie QoS einschalten. QoS priorisiert Verkehr von und zu Ihrem " +"Netzwerk für bestimmte Ports und IP-Adressen mit dem Ergebnis einer besseren " +"Tonübertragung in unserem Fall. Wenn unten eingeschaltet, wird eine QoS-" +"Regel automatisch vom PBX eingerichtet, aber Sie müssen die QoS-" +"Konfigurationsseite (Netzwerk->QoS) aufrufen, um andere kritische QoS-" +"Einstellungen wie Upload-und Download-Geschwindigkeit vorzunehmen." + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" +"Wenn Sie mehr als ein Konto für abgehende Anrufe haben, sollten Sie eine " +"Liste von Telefonnummern/Vorwahlen in den folgenden Feldern für jeden " +"aufgeführten Dienstanbieter eintragen. Ungültige Vorwahlen werden ohne " +"Fehlermeldung entfernt, nur 0-9, X, Z, N, #, *, und + sind gültige Zeichen. " +"Der Buchstabe X entspricht 0-9, Z entrpricht 1-9, N entspricht 2-9. Zum " +"Beispiel können Sie 49 eingeben, um Anrufe nach Deutschland über einen " +"Dienstanbieter zu tätigen. Für Anrufe nach Nordamerika geben Sie 1NXXNXXXXXX " +"an. Unterstützt ein Dienstanbieter Ortsgespräche, wie im Gebiet 646 von New " +"York, geben Sie 646NXXXXXX für diesen Anbieter ein. Ein Konto sollte eine " +"leere Liste behalten, damit Sie darüber standardmäßig Anrufe tätigen können, " +"wenn keine der Vorwahlen für die anderen Anbieter übereinstimmt. Das System " +"ersetzt eine leere Liste automatisch mit dem Eintrag, dass dieser Anbieter " +"alle Vorwahlen unterstützt, die von den anderen Anbietern nicht unterstützt " +"werden. Seien Sie so spezifisch wie möglich (1NXXNXXXXXX ist besser als 1). " +"Bitte beachten Sie, dass alle internationalen Vorwahl-Codes (wie 00, 011, " +"010, 0011) verworfen werden. Einträge können durch Leezeichen getrennt und/" +"oder einzeln pro Zeile (Abschließen mit Eingabe-Taste) eingegeben werden." + +msgid "Incoming Calls" +msgstr "Eingehende Anrufe" + +msgid "Insert QoS Rules" +msgstr "QoS-Regeln einfügen" + +msgid "Makes Outgoing Calls" +msgstr "Macht ausgehende Anrufe" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" +"ACHTUNG: Es sind keine Konten für Google oder einen SIP-Dienstanbieter " +"eingerichtet." + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" +"ACHTUNG: Es sind keine Konten für Google oder einen SIP-Dienstanbieter für " +"eingehende Anrufe eingerichtet." + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" +"ACHTUNG: Es sind keine Konten für Google oder einen SIP-Dienstanbieter für " +"abgehende Anrufe eingerichtet." + +msgid "NOTE: There are no local user accounts configured." +msgstr "ACHTUNG: Es sind keine lokalen Benutzerkonten eingerichtet." + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" +"ACHTUNG: Es sind keine lokalen Benutzerkonten für abgehende Anrufe " +"eingerichtet." + +msgid "No" +msgstr "Nein" + +msgid "Number of Seconds to Ring" +msgstr "Dauer des Klingelns in Sekunden" + +msgid "Outbound Proxy" +msgstr "Proxy für ausgehende Verbindungen" + +msgid "Outgoing Calls" +msgstr "Abgehende Anrufe" + +msgid "PBX Main Page" +msgstr "PBX-Hauptseite" + +msgid "PBX Service Status" +msgstr "PBX-Dienststatus" + +msgid "PIN" +msgstr "PIN" + +msgid "Password" +msgstr "Passwort" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "Port-Einstellung für SIP-Geräte" + +msgid "Providers Used for Outgoing Calls" +msgstr "Provider für abgehende Anrufe" + +msgid "QoS Settings" +msgstr "QoS Einstellungen" + +msgid "RTP Port Range End" +msgstr "Ende des RTP-Port-Bereichs" + +msgid "RTP Port Range Start" +msgstr "Anfang des RTP-Port-Bereichs" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" +"RTP-Verkehr überträgt die aktuellen Sprachpakete. Dies ist der Anfang des " +"Port-Bereichs, der für die Einrichtung der RTP-Verbindung verwendet wird. " +"Normalerweise kann hier die Voreinstellung belassen werden." + +msgid "Receives Incoming Calls" +msgstr "Empfängt eingehende Anrufe" + +msgid "Remote Usage" +msgstr "Benutzung aus der Ferne" + +msgid "Rings users enabled for incoming calls" +msgstr "Für eingehende Anrufe freigeschaltete Nutzer erhalten Klingelzeichen" + +msgid "SIP Accounts" +msgstr "SIP-Konten" + +msgid "SIP Device/Softphone Accounts" +msgstr "SIP-Geräte-/Softphone-Konten" + +msgid "SIP Provider Accounts" +msgstr "SIP-Dienstanbieter-Konten" + +msgid "SIP Realm (needed by some providers)" +msgstr "SIP-Bereich (von manchen Dienstanbietern benötigt)" + +msgid "SIP Server/Registrar" +msgstr "SIP-Server/Registrar" + +msgid "SIP Server/Registrar Port" +msgstr "SIP-Server/Registrar Port" + +msgid "Server Setting" +msgstr "Servereinstellung" + +msgid "Server Setting for Local SIP Devices" +msgstr "Servereinstellung für lokale SIP-Geräte" + +msgid "Server Setting for Remote SIP Devices" +msgstr "Servereinstellung für entfernte SIP-Geräte" + +msgid "Service Status" +msgstr "Dienst-Status" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" +"Stellen Sie ein (in Sekunden), wie lange es bei den Benutzern klingeln soll, " +"bevor aufgelegt oder zur Voicemail (falls installiert und aktiv) " +"übergegangen wird. " + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "Mit Leerzeichen unterteilte Liste gesperrter Nummern" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" +"Geben Sie die Nummern hier einzeln an. Drücken Sie Eingabe, um weitere " +"Nummern hinzuzufügen." + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" +"Die oben angegebene(n) Nummer(n) können für ausgehende Anrufe mit den " +"Dienstanbietern dieses Nutzers verwendet werden. Ungültige Benutzernamen, " +"einschließlich Nutzer, die nicht für ausgehende Anrufe freigeschaltet sind, " +"werden ohne Fehlermeldung verworfen. Bitte überprüfen Sie deshalb, ob der " +"Eintrag akzeptiert wurde." + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" +"Diese Konfigurationsseite erlaubt Ihnen die Einrichtung eines " +"Telefonsystemdienstes (PBX), der Anrufe über mehrere Google- und SIP-Konten " +"(wie Sipgate, SipSorcery und Betamax) erlaubt. Sie können diese Konten für " +"viele SIP-Geräte verwenden. Beachten Sie, dass Google-, SIP- und lokale " +"Benutzer-Konten in den Abschnitten \"Google-Konten\", \"SIP-Konten\" und " +"\"Benutzerkonten\" eingerichtet werden. Sie müssen mindestens ein " +"Benutzerkonto für diesen PBX vorsehen und dann ein SIP-Gerät oder Softphone " +"für die Benutzung dieses Kontos einrichten, damit Sie Anrufe mit Ihren " +"Google-/SIP-Konten tätigen oder empfangen können. Wenn Sie mehr als ein " +"Google- / SIP-Konto eingerichtet haben, sollten Sie auf der Seite " +"\"Anrufweiterleitung\" einrichten, wie diese Anrufe behandelt werden. Wenn " +"Sie Ihr PBX von irgendwo auf der Welt nutzen wollen, schauen Sie auf den " +"Abschnitt \"Benutzung aus der Ferne\" auf der Seite \"Erweiterte " +"Einstellungen\". " + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" +"Dies ist der Name, den der VoIP-Server verwenden wird, um sich selbst bei " +"der Registrierung beim VoIP-Dienstanbieter zu identifizieren. Einige " +"Anbieter verlangen, dass dies ein spezieller Begriff ist, der einem Hardware-" +"SIP-Gerät entspricht." + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" +"Hier geben Sie an, welche Google-/SIP-Konten für welche Ländervorwahlen " +"benutzt werden sollen, welche Nutzer welche Konten verwenden dürfen, wie " +"Anrufe weitergeleitet werden, welche Nummern mit Password in diesen PBX " +"kommen, und welche Nummern ausgeschlossen werden." + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" +"Hier stellen Sie Ihre Google (Talk und Voice) Konten ein, um sie für " +"abgehende und ankommende Anrufe nutzen zu können (Voice Chat und Telefon-" +"Anrufe). Bitte tätigen Sie wenigstens einen Sprach-Anruf mit dem Google-Talk-" +"Plugin, das über das GMail-Interface zu installieren ist, und melden Sie " +"sich dann überall aus Ihrem Konto ab. Klicken Sie auf \"Hinzufügen\" um so " +"viele Konten hinzuzufügen, wie Sie wollen." + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" +"Hier stellen Sie Ihre SIP (VoIP) Konten, wie Sipgate, SipSorcery, die " +"populären Betamax-Anbieter, und alle anderen Anbieter mit SIP-Einstellungen " +"ein, um sie für abgehende und ankommende Anrufe nutzen zu können (SIP uri " +"und Telefon-Anrufe). Klicken Sie auf \"Hinzufügen\" um so viele Konten " +"hinzuzufügen, wie Sie wollen." + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" +"Diese Option sollte auf \"Ja\" gesetzt werden, wenn Sie eine DID (reale " +"Telefonnummer) haben, die mit diesem SIP-Konto verknüpft ist, oder wenn Sie " +"SIP-Anrufe über diesen Anbieter empfangen wollen." + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" +"Dieser Abschnitt enthält Einstellungen, die unter normalen Umständen nicht " +"geändert werden müssen. Zusätzlich konnen Sie hier Ihr System für die " +"Verwendung mit entfernten SIP-Geräten einrichten und Probleme bei der " +"Tonqualität beheben, indem Sie die Festlegung von QoS-Regeln aktivieren." + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" +"Verwenden Sie eine vier- bis fünfstellige Nummer als Benutzernamen, wenn Sie " +"normale Telefone mit ATA an dieses System anschließen (damit diese Namen " +"über deren Zifferntastatur eingegeben werden können)." + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" +"Dieses Konto für abgehende Anrufe verwenden, wie im Abschnitt " +"\"Anrufweiterleitung\" eingestellt." + +msgid "Use this account to make outgoing calls." +msgstr "Dieses Konto für abgehende Anrufe verwenden." + +msgid "User Accounts" +msgstr "Benutzerkonten" + +msgid "User Agent String" +msgstr "Benutzeridentifikation (User Agent)" + +msgid "User Name" +msgstr "Benutzername" + +msgid "Uses providers enabled for outgoing calls" +msgstr "Verwendet für abgehende Anrufe eingerichtete Dienstanbieter" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" +"Wenn jemand einen Voice-Chat mit Ihrem GTalk-Konto oder die GVoice-Nummer " +"(falls Sie Google Voice haben) anruft, wird der Anruf an jeden Benutzer " +"weiter geleitet, der Online ist (mit SIP-Gerät oder Softphone) und den Anruf " +"empfangen darf. Wenn Sie Google Voice haben, müssen Sie in Ihre GVoice-" +"Einstellungen gehen und Anrufe zu Google Chat weiter leiten, damit Sie " +"Anrufe auf Ihre GVoice-Nummer empfangen können. Bei Problemen mit dem " +"Empfang von Anrufen über GVoice, experimentieren Sie mit der Option " +"\"Anrufprüfung\" in den GVoice-Einstellungen. Stellen Sie schließlich " +"sicher, dass kein anderer Client mit diesem Konto Online ist (z.B. Browser " +"in GMail, Google Talk App mobil oder auf PC), denn das könnte Einfluss haben." + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" +"Wenn Ihr Passwort gespeichert wird, verschwindet es aus diesem Feld und wird " +"zu Ihrem Schutz nicht angezeigt. Ein vorher gespeichertes Passwort wird nur " +"geändert, wenn Sie ein geändertes Passwort eingeben." + +msgid "Yes" +msgstr "Ja" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" +"Sie können hier einen Klarnamen angeben, der als Name des Anrufers erscheint." + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" +"Sie können Ihre SIP-Geräte/Softphones mit diesem System auch von einem " +"entfernten Ort aus benutzen, so lange Ihnen Ihr Internet-Dienstanbieter eine " +"öffentliche IP-Adresse zuweist. Sie können andere lokale Benutzer kostenlos " +"anrufen (z.B. andere Analog-Telefon-Adapter (ATA)) und Ihre VoIP-Anbieter " +"für Anrufe verwenden, als ob Sie am lokalen PBX angeschlossen wären. Nach " +"der Einrichtung dieses Tabs gehen Sie zu den Benutzereinstellungen zurück " +"und schauen Sie nach den neuen Einstellungen für Server und Port, die Sie an " +"den entfernten SIP-Geräten vornehmen müssen. Bitte beachten Sie, dass Sie " +"NAT/Portweiterleitung auf dem Router/Gateway einrichten müssen, falls dieser " +"PBX nicht auf Ihrem Router/Gateway läuft. Bitte leiten Sie die unten " +"angegebenen Ports (SIP-Port und RTP-Bereich) auf die IP-Adresse dieses PBX " +"weiter." + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" +"Ihre PIN verschwindet beim Speichern aus diesem Feld und wird zu Ihrem " +"Schutz nicht angezeigt. Eine vorher gespeicherte PIN wird nur geändert, wenn " +"Sie eine geänderte PIN eingeben. Sie können die PIN leer lassen, aber denken " +"Sie an die Konsequenzen für die Sicherheit." + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" +"Ihr Passwort verschwindet beim Speichern und wird zu Ihrem Schutz nicht " +"angezeigt. Es wird nur geändert, wenn Sie ein anderes Passwort eingeben." + +#~ msgid "" +#~ "Designate numbers that are allowed to call through this system and which " +#~ "user's privileges it will have." +#~ msgstr "" +#~ "Nummern auswählen, die durch dieses System anrufen können, und deren " +#~ "Benutzerrechte einstellen" + +#~ msgid "" +#~ "Pick a random port number between 6500 and 9500 for the service to listen " +#~ "on. Do not pick the standard 5060, because it is often subject to brute-" +#~ "force attacks. When finished, (1) click \"Save and Apply\", and (2) click " +#~ "the \"Restart VoIP Service\" button above. Finally, (3) look in the \"SIP " +#~ "Device/Softphone Accounts\" section for updated Server and Port settings " +#~ "for your SIP Devices/Softphones." +#~ msgstr "" +#~ "Wählen Sie eine zufällige Portnummer zwischen 6500 und 9000 für den Dienst " +#~ "aus. Nehmen Sie nicht die standardmäßige 5060, weil sie oft attackiert wird. " +#~ "Wenn fertig (1) klicken Sie auf \"Speichern und Anwenden\" und (2) auf \"VoIP-" +#~ "Dienst neu starten\" oben. Schließlich (3) sehen Sie im Abschnitt \"SIP-Geräte" +#~ "/Softphone-Konten\" nach aktualisierten Einstellungen für Ihre SIP-" +#~ "Geräte/Softphones." + +#~ msgid "" +#~ "You can enter your domain name, external IP address, or dynamic domain " +#~ "name here Please keep in mind that if your IP address is dynamic and it " +#~ "changes your configuration will become invalid. Hence, it's recommended " +#~ "to set up Dynamic DNS in this case." +#~ msgstr "" +#~ "Sie können Ihren Domänennamen, externe IP-Adresse, oder dynamischen " +#~ "Domänennamen hier angeben.Bitte beachten Sie, dass Ihre Konfiguration " +#~ "ungältig wird, wenn Sie eine dynamische IP-Adresse besitzen und sich diese " +#~ "ändert. Für diesen Fall wird deshalb die Einrichtung von dnamischem DNS " +#~ "empfohlen." + +#~ msgid "Account Status" +#~ msgstr "Konto-Status" + +#~ msgid "Account Status Message" +#~ msgstr "Konto-Status Meldung" + +#~ msgid "Domain Name/Dynamic Domain Name" +#~ msgstr "DNS Name (auch dynamisch möglich)" diff --git a/feeds/luci/applications/luci-app-pbx/po/el/pbx.po b/feeds/luci/applications/luci-app-pbx/po/el/pbx.po new file mode 100644 index 0000000..717e256 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/el/pbx.po @@ -0,0 +1,493 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-31 15:41+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: none\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "Μην Ενοχλείτε" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "Ενεργοποιημένο" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "Πλήρες Όνομα" + +msgid "General Settings" +msgstr "Γενικές Ρυθμίσεις" + +msgid "Google Accounts" +msgstr "Λογαριασμοί Google" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "Λογαριασμοί Google Voice/Talk" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "Εισερχόμενες Κλήσεις" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "Όχι" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "Εξερχόμενες Κλήσεις" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "PIN" + +msgid "Password" +msgstr "Κωδικός πρόσβασης" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "Λογαριασμοί SIP" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +#~ msgid "Account Status" +#~ msgstr "Κατάσταση Λογαριασμού" + +#~ msgid "Account Status Message" +#~ msgstr "Μήνυμα Κατάστασης Λογαριασμού" diff --git a/feeds/luci/applications/luci-app-pbx/po/en/pbx.po b/feeds/luci/applications/luci-app-pbx/po/en/pbx.po new file mode 100644 index 0000000..8b995e1 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/en/pbx.po @@ -0,0 +1,502 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "Advanced Settings" + +msgid "Available" +msgstr "Available" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." + +msgid "Away" +msgstr "Away" + +msgid "Blacklisted Numbers" +msgstr "Blacklisted Numbers" + +msgid "Call Routing" +msgstr "Call Routing" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "Call-through Numbers" + +msgid "Copy-paste large lists of numbers here." +msgstr "Copy-paste large lists of numbers here." + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "Do Not Disturb" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "Dynamic List of Blacklisted Numbers" + +msgid "Email" +msgstr "Email" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "Enable Incoming Calls (Register via SIP)" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "Enable Outgoing Calls" + +msgid "Enabled" +msgstr "Enabled" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "External SIP Port" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "Full Name" + +msgid "General Settings" +msgstr "General Settings" + +msgid "Google Accounts" +msgstr "Google Accounts" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "Google Voice/Talk Accounts" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "Incoming Calls" + +msgid "Insert QoS Rules" +msgstr "Insert QoS Rules" + +msgid "Makes Outgoing Calls" +msgstr "Makes Outgoing Calls" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "No" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "Outbound Proxy" + +msgid "Outgoing Calls" +msgstr "Outgoing Calls" + +msgid "PBX Main Page" +msgstr "PBX Main Page" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "PIN" + +msgid "Password" +msgstr "Password" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "Port Setting for SIP Devices" + +msgid "Providers Used for Outgoing Calls" +msgstr "Providers Used for Outgoing Calls" + +msgid "QoS Settings" +msgstr "QoS Settings" + +msgid "RTP Port Range End" +msgstr "RTP Port Range End" + +msgid "RTP Port Range Start" +msgstr "RTP Port Range Start" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "Receives Incoming Calls" + +msgid "Remote Usage" +msgstr "Remote Usage" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "SIP Accounts" + +msgid "SIP Device/Softphone Accounts" +msgstr "SIP Device/Softphone Accounts" + +msgid "SIP Provider Accounts" +msgstr "SIP Provider Accounts" + +msgid "SIP Realm (needed by some providers)" +msgstr "SIP Realm (needed by some providers)" + +msgid "SIP Server/Registrar" +msgstr "SIP Server/Registrar" + +msgid "SIP Server/Registrar Port" +msgstr "SIP Server/Registrar Port" + +msgid "Server Setting" +msgstr "Server Setting" + +msgid "Server Setting for Local SIP Devices" +msgstr "Server Setting for Local SIP Devices" + +msgid "Server Setting for Remote SIP Devices" +msgstr "Server Setting for Remote SIP Devices" + +msgid "Service Status" +msgstr "Service Status" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "Space-Separated List of Blacklisted Numbers" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "Specify numbers individually here. Press enter to add more numbers." + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." + +msgid "Use this account to make outgoing calls." +msgstr "Use this account to make outgoing calls." + +msgid "User Accounts" +msgstr "User Accounts" + +msgid "User Agent String" +msgstr "User Agent String" + +msgid "User Name" +msgstr "User Name" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "Yes" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "You can specify a real name to show up in the Caller ID here." + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +#~ msgid "Account Status" +#~ msgstr "Account Status" + +#~ msgid "Account Status Message" +#~ msgstr "Account Status Message" + +#~ msgid "Domain Name/Dynamic Domain Name" +#~ msgstr "Domain Name/Dynamic Domain Name" + +#~ msgid "Enable Incoming Calls (See Status, Message below)" +#~ msgstr "Enable Incoming Calls (See Status, Message below)" + +#~ msgid "Service Control and Connection Status" +#~ msgstr "Service Control and Connection Status" diff --git a/feeds/luci/applications/luci-app-pbx/po/es/pbx.po b/feeds/luci/applications/luci-app-pbx/po/es/pbx.po new file mode 100644 index 0000000..8071b61 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/es/pbx.po @@ -0,0 +1,677 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-15 13:15+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Configuración avanzada" + +msgid "Available" +msgstr "Disponible" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "Usar sólo caracteres alfanuméricos, espacio, coma y punto." + +msgid "Away" +msgstr "No disponible" + +msgid "Blacklisted Numbers" +msgstr "Lista negra" + +msgid "Call Routing" +msgstr "Enrutado de llamadas" + +msgid "Call-back Numbers" +msgstr "Números de call-back" + +msgid "Call-back Provider" +msgstr "Proveedor de call-back" + +msgid "Call-through Numbers" +msgstr "Números call-through" + +msgid "Copy-paste large lists of numbers here." +msgstr "Pegue aquí grandes listas de números." + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" +"Listar los números a los que se permitirá llamar desde este sistema y qué " +"privilegios de usuario tendrán." + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" +"Listar los números a los que el sistema colgará y volverá a llamar, qué " +"proveedor se usará para llamarles y qué privilegios de usuario se les dará." + +msgid "Dials numbers unmatched elsewhere" +msgstr "Marca el resto de números en cualquier lugar" + +msgid "Do Not Disturb" +msgstr "No molestar" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "Dominio/Dirección IP/Dominio dinámico" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "Lista dinámica de números en lista negra" + +msgid "Email" +msgstr "e-mail" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "Permitir llamadas entrantes (registrar vía SIP)" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "Permitir llamadas entrantes (ver estado abajo)" + +msgid "Enable Outgoing Calls" +msgstr "Permitir llamadas salientes" + +msgid "Enabled" +msgstr "Activado" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" +"Proveedor VoIP para callbacks en formato nombredeusuario@algun.nombre.host, " +"tal y como se detalla arriba en \"Llamadas salientes\". Puede copiar y pegar " +"los proveedores desde ahí. Las entradas no válidas, incluyendo a proveedores " +"no habilitados para llamadas saliente, serán rechazadas sin mostrar aviso." + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" +"Números de teléfono de los que se reclina la llamada automáticamente. Es " +"posible que tenga que omitir el código de país y ceros precedentes, pero " +"experimente para asegurarse que bloquea los números correctamente." + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" +"Ponga esta IP (o IP:puerto) en el parámetro Servidor/Registrador de los " +"dispositivos SIP que usará SOLO localmente y nunca desde una posición remota." + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" +"Ponga este nombre de máquina en el parámetro Servidor/Registrador de los " +"dispositivos SIP que usará desde posiciones remotas (también vale " +"localmente)." + +msgid "External SIP Port" +msgstr "Puerto externo SIP" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" +"Para cada proveedor al que se habilita a hacer llamadas entrantes puede " +"restringir a qué usuarios llamar. Si se deja vacío el sistema indicará que " +"llamará a todos los usuarios que puedan recibir llamadas entrantes. Los " +"nombres de usuario no válidos se rechazarán sin aviso. Estos nombres de " +"usuario hacen ignorar la configuración de usuario de no recibir llamadas. De " +"esta manera puede hacer que a ciertos usuarios sólo les llamen ciertos " +"proveedores. Puede separar los nombres con espacios o poniéndolos en líneas " +"diferentes." + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" +"Para cada usuario habilitado a hacer llamadas salientes puede restringir qué " +"proveedores usar. Por defecto todos los usuarios pueden usar a todos los " +"proveedores. Para mostrarse en la lista el usuario debe poder hacer llamadas " +"salientes (ver página \"Cuentas de usuario\"). Ponga los proveedores en " +"formato username@some.host.name igual que se listan en \"Llamadas salientes" +"\" arriba. Los nombres no válidos se rechazarán sin aviso.Puede separar los " +"nombres con espacios o poniéndolos en líneas diferentes." + +msgid "Full Name" +msgstr "Nombre completo" + +msgid "General Settings" +msgstr "Configuración general" + +msgid "Google Accounts" +msgstr "Cuentas en google" + +msgid "Google Talk Status" +msgstr "Estado de Google Talk" + +msgid "Google Talk Status Message" +msgstr "Mensaje de estado de Google Talk" + +msgid "Google Voice/Talk Accounts" +msgstr "Cuentas Google Voice/Talk" + +msgid "Hang-up Delay" +msgstr "Retraso para descolgar" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" +"Configure una cuenta SIP que usará para conectar con este servicio. Úsela " +"tanpo en un adaptador de telefonía analógico (ATA) o en un programa SIP como " +"CSipSimple, Linphone, o Sipdroid para smartphones, o Ekiga, Linphone, o X-" +"Lite para ordenadores. Por defecto, todas las cuentas SIP sonarán a la vez " +"si se hace una llamada desde una de las cuentas de su proveedor de VoIP o " +"números GV." + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" +"Cuánto esperar antes de descolgar. Si el proveedor que usas para marcar " +"automáticamente desvía a un correo de voz puedes ajustar este valor con un " +"retraso que permitirá descolgar antes de que se desvíe la llamada y se " +"facture." + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" +"Si la configuración Servidor/Registrador en %s o %s no le funciona, prueba a " +"poner %s o %s e introduzca este número de puerto en un campo separado que " +"especifique el número de puerto del Servidor/Registrador. Algunos " +"dispositivos tienen una configuración extraña que muestra este puerto desde " +"el que el SIP origina peticiones en el mismo dispositivo SIP (el puerto " +"asociado). El puerto que está configurando aquí NO es este puerto asociado " +"sino el puerto en el que el servicio escucha." + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" +"Si nota saltos o retrasos en el audio mientras realiza descargas puede " +"querer activar QoS. QoS prioriza el tráfico a y desde su red para ciertos " +"puertos y direcciones IP mejorando la latencia y el rendimiento del sonido " +"en dicho caso. Al activarlo el PBX creará una regla QoS para este servicio, " +"pero deberá rellenar en la página de configuración de QoS (Red/QoS) otros " +"parámetros necesarios como la velocidad de subida y la de bajada." + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" +"Si tiene más de una cuenta para hacer llamadas salientes, debe introducir " +"una lista de números de teléfono y/o prefijos para cada proveedor. Los " +"prefijos no válidos se rechazarán sin aviso y solo son caracteres válidos " +"0-9, X, Z, N, #, *, y +. La letra X equivale a 0-9, Z a 1-9 y N a 2-9. Por " +"ejemplo para hacer llamadas a Alemania con su proveedor debe introducir 49. " +"Para hacer llamadas a Estados Unidos 1NXXNXXXXXX. Si uno de sus proveedores " +"puede hacer llamadas locales a un código de área como el 646 de Nueva York " +"debe introducir 646NXXXXXX para ese proveedor. Debería dehar una cuenta con " +"una lista vacía para que haga las llamadas por defecto en caso de que ningún " +"prefijo encaje. El sistema reemplazará automáticamente la lista vacía con el " +"mensaje de que el proveedor marca todos los números que no estén en los " +"prefijos de otros proveedores. Sea todo lo específico que pueda (ej. " +"1NXXNXXXXXX es mejor que 1). Todos los códigos internaciones de marcado se " +"descartan (ej. 00, 011, 010, 0011). Las entradas pueden ser una lista " +"separada por espacios y/o cambios de línea." + +msgid "Incoming Calls" +msgstr "Llamadas entrantes" + +msgid "Insert QoS Rules" +msgstr "Reglas QoS" + +msgid "Makes Outgoing Calls" +msgstr "Realizar llamadas salientes" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "NOTA: Sin cuentas configuradas de Google o porveedor SIP." + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" +"NOTA: Sin cuentas configuradas de Google o porveedor SIP para llamadas " +"entrantes." + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" +"NOTA: Sin cuentas configuradas de Google o porveedor SIP para llamadas " +"salientes." + +msgid "NOTE: There are no local user accounts configured." +msgstr "NOTA: Sin cuentas locales configuradas." + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "NOTA: Sin cuentas locales habilitadas para llamadas saientes." + +msgid "No" +msgstr "No" + +msgid "Number of Seconds to Ring" +msgstr "Número de segundos a sonar" + +msgid "Outbound Proxy" +msgstr "Proxy saliente" + +msgid "Outgoing Calls" +msgstr "Llamadas salientes" + +msgid "PBX Main Page" +msgstr "Página principal de PBX" + +msgid "PBX Service Status" +msgstr "Estado del servicio PBX" + +msgid "PIN" +msgstr "PIN" + +msgid "Password" +msgstr "Contraseña" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" +"Escoge un número de puerto aleatorio entre 6500 y 9500 para el servicio. No " +"elijas el estándar 5060 ya que es objeto, a menudo, de ataques por fuerza " +"bruta. Cuando hayas terminado pulsa en \"Salvar y aplicar\" y busca en la " +"sección \"Cuentas SIP del dispositivo/softphone\" el puerto actual para tus " +"dispositivos/softphones SIP." + +msgid "Port Setting for SIP Devices" +msgstr "Configuración de puerto para dispositivos SIP" + +msgid "Providers Used for Outgoing Calls" +msgstr "Proveedores usados para llamadas salientess" + +msgid "QoS Settings" +msgstr "Configuración de QoS" + +msgid "RTP Port Range End" +msgstr "Fin del rango de puertos RTP" + +msgid "RTP Port Range Start" +msgstr "Inicio del rango de puertos RTP" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" +"El tráfico RTP es el que lleva los paquetes de voz. Este es el inicio del " +"rango de puertos que se usará para comunicaciones RTP. Suele ser correcto " +"dejar el valor por defecto." + +msgid "Receives Incoming Calls" +msgstr "Recibe llamadas entrantes" + +msgid "Remote Usage" +msgstr "Uso remoto" + +msgid "Rings users enabled for incoming calls" +msgstr "Llama a usuarios habilitados a recibir llamadas" + +msgid "SIP Accounts" +msgstr "Cuentas SIP" + +msgid "SIP Device/Softphone Accounts" +msgstr "Dispositivo SIP/Cuentas Softphone" + +msgid "SIP Provider Accounts" +msgstr "Cuentas del proveedor SIP" + +msgid "SIP Realm (needed by some providers)" +msgstr "Ámbito SIP (necesario para algunos proveedores)" + +msgid "SIP Server/Registrar" +msgstr "Servidor/Registrador del SIP" + +msgid "SIP Server/Registrar Port" +msgstr "Puerto del Servidor/Registrador del SIP" + +msgid "Server Setting" +msgstr "Configuración del servidor" + +msgid "Server Setting for Local SIP Devices" +msgstr "Dispositivos SIP locales" + +msgid "Server Setting for Remote SIP Devices" +msgstr "Dispositivos SIP remotos" + +msgid "Service Status" +msgstr "Estado del servicio" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" +"Segundos que se llamará a los usuarios antes de colgar o pasar a correo voz " +"(si el correo voz está instalado y habilitado)." + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "Lista negra (separar números con espacios)" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "Números individuales. Pulse enter para añadir más." + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" +"Especifica números individualmente. Pulsa enter para añadir más. Tendrás que " +"experimentar con qué códigos de país y área necesitas añadir al número." + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" +"Estos números podrán llamar con los proveedores de este usuario. Los nombres " +"de usuario no válidos se descartan sin aviso. Por favor, verifique que los " +"números se aceptan." + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" +"Aquí puede configurar un servicio de sistema telefónico (PBX) que le " +"permitirá hacer llamadas por múltiples cuentas Google y SIP (como Sipgate, " +"SipSorcery, and Betamax) y compartirlas entre muchos dispositivos SIP. Tenga " +"en cuenta que las cuentas Google, SIP y locales deben configurarse en " +"subsecciones diferentes. Debe añadir al menos una cuenta de usuarioa este " +"PBX y configurar un dispositivo SIP o softphone para usarla para recibir las " +"llamadas de sus cuentas Google/SIP. Configurar múltiples usuarios le " +"permitirá hacer llamadas gratuitas entre los usuarios y compartir las " +"cuentas Google/SIP configuradas. Si tiene más de una cuenta Google/SIP " +"configurada tendrá que configurar cómo se enrutan en la página \"Enrutado de " +"llamadas\". Si está interesado en usar su PBX desde cualquier sitio del " +"mundo puede visitar la sección \"Uso remoto\" en la página \"Configuración " +"avanzada\"." + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" +"Nombre del servidor VoIP que usará para identificarse cuando se registre en " +"proveedores de VoIP (SIP). Algunos requieres que sea una cadena específica a " +"una dispositivo hardware." + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" +"Indique las cuentas Google/SIP que usará para llamar a qué códigos de país/" +"zona, qué usuarios pueden usuarios pueden usar qué cuentas SIP/Google y cómo " +"se enrutan las llamadas entrantes, qué números pueden entrar en esta PBX con " +"una contraseña y qué números están en lista negra." + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" +"Configure sus cuentas Google (Talk y Voz) para empezar a usarlas para hacer " +"y recibir llamadas (chat de voz y teléfono real). Haga al menos una llamada " +"de voz con el plugin de Google Talk (instalable desde GMail) y desconéctese " +"de la cuenta en cualquier otro sitio." + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" +"Configure sus cuentas SIP (VoIP) como Sipgate, SipSorcery, los popular " +"proveedores Betamax y cualquier otro proveedor para empezar a usarlos para " +"hacer y recibir llamadas (uri SIP y teléfono real)." + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" +"Debería ser \"Sí\" si tiene un DID (teléfono real) asociado a esta cuenta " +"SIP o quiere recibir llamads uri SIP de este proveedor." + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" +"Algunos de estos parámetros no suele ser necesario cambiarlos. Además puede " +"configurar su sistema para usar con dispositivos SIP remotos y resolver " +"problemas de calidad de llamada habilitando algunas reglas QoS." + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" +"Use nombre de usuario númericos (cuatro o cinco dígitos) si conecta a " +"teléfonos normales con ATAs a este sistema (para que puedan marcar números " +"de usuario)." + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" +"Cuenta para llamadas salientes como se configura en la sección \"Enrutado de " +"llamadas\"." + +msgid "Use this account to make outgoing calls." +msgstr "Cuenta para llamadas salientes." + +msgid "User Accounts" +msgstr "Cuentas de usuario" + +msgid "User Agent String" +msgstr "Cadena \"User Agent\"" + +msgid "User Name" +msgstr "Nombre de usuario" + +msgid "Uses providers enabled for outgoing calls" +msgstr "Usar proveedores habilitados para llamadas salientes" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" +"Cuando alguien inicia un chat de voz con su cuenta de GTalk o llame al " +"número de GVoice (si tiene Google Voice) la llamada se transferirá a " +"cualquier usuario que esté conectado (registrado usando un dispositivo SIP o " +"softphone) y se le permitirá recibir la llamada. Si tiene Google Voice debe " +"ir a la configuración de GVoice y traspasar las llamadas a Google chat para " +"recibir las hechas a si número de GVoice. Si tiene problemas recibiendo " +"llamadas de GVoice pruebe con la opción \"Call Screening\" en la " +"configuración de GVoice. Asegúrese de que ningún otro cliente esté conectado " +"con esta cuenta (navegador en gmail, o una aplicación para móvil o " +"escritorio) ya que podría interferir." + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" +"Cuando se salve su contraseña desaparece de este campo y no se muestra para " +"su seguridad. La contraseña sólo se podrá cambiar si introduce un valor " +"diferente al salvado." + +msgid "Yes" +msgstr "Sí" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" +"Puedes introducir el nombre de dominio, dirección IP external o nombre " +"dinámino aquí. Lo mejor es introducir una dirección IP estática. Si la " +"dirección es dinámica la configuración sería inválida cuando cambiase. En " +"estos casos es recomendable configurar Dynamic DNS e introducir tu nombre de " +"host Dynamic DNS. Puedes instalar y configurar Dynamic DNS con el paquete " +"luci-app-ddns." + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "Nombre real a mostrar en el \"Caller ID\"." + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" +"Puede usar sus dispositivos SIP/softphones con este sistema desde una " +"ubicación remota mientras su proveedor de internet le dé una dirección IP " +"pública. Podrá llamar a usuarios locales gratis (ej. otros adaptadores de " +"teléfonos analógicos) y podrá usar sus proveedores de VoIP para hacer " +"llamadas como si estuviese en su PBX local. Tras configurar esta pestaña " +"vuelva a la configuración de usuarios y veo el nuevo servidor y puerto que " +"debe configurar en sus dispositivos SIP remotos. Tenga en cuenta que si este " +"PBX no funciona en su router/pasarela, tendrá que configurar el traspaso de " +"puertos (NAT) en su router/pasarela. Traspase los puertos indicados (Puerto " +"SIP y rango RTP) hacia la dirección IP del dispositivo en que corre esta PBX." + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" +"Su PIN desaparecerá cuando se salve para su protección. Se cambiará solo " +"cuando introduzca un valor diferente al salvado. No se puede dejar el PIN " +"vacío." + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" +"Su contraseña desaparecerá cuando se salve para su protección. Sólo se puede " +"cambiar si entra un valor diferente al salvado." + +#~ msgid "" +#~ "Designate numbers that are allowed to call through this system and which " +#~ "user's privileges it will have." +#~ msgstr "" +#~ "Números a los que se permite llamar por este sistema y privilegios de " +#~ "usuario." + +#~ msgid "" +#~ "Pick a random port number between 6500 and 9500 for the service to listen " +#~ "on. Do not pick the standard 5060, because it is often subject to brute-" +#~ "force attacks. When finished, (1) click \"Save and Apply\", and (2) click " +#~ "the \"Restart VoIP Service\" button above. Finally, (3) look in the \"SIP " +#~ "Device/Softphone Accounts\" section for updated Server and Port settings " +#~ "for your SIP Devices/Softphones." +#~ msgstr "" +#~ "Puerto aleatorio entre 6500 y 9500 en el que escuche el servicio. No elija " +#~ "el estándar 5060 porque es susceptible de ataques por fuerza bruta. Cuando " +#~ "termine (1) pulsa \"Salvar y aplicar\" y (2) pulse \"Rearrancar servicio VoIP\". " +#~ "Finalmente (3) busque en la sección \"Dispositivo SIP/Cuentas softphone\" la " +#~ "configuración del puerto." + +#~ msgid "" +#~ "You can enter your domain name, external IP address, or dynamic domain " +#~ "name here Please keep in mind that if your IP address is dynamic and it " +#~ "changes your configuration will become invalid. Hence, it's recommended " +#~ "to set up Dynamic DNS in this case." +#~ msgstr "" +#~ "Nombre de dominio, dirección IP externa o nombre de dominio dinámico. Si su " +#~ "dirección IP es dinámica y cambia su configuración podría resultar no " +#~ "válida. Se recomienda el uso de DNS dinámico en estos casos." diff --git a/feeds/luci/applications/luci-app-pbx/po/fr/pbx.po b/feeds/luci/applications/luci-app-pbx/po/fr/pbx.po new file mode 100644 index 0000000..971a696 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/fr/pbx.po @@ -0,0 +1,484 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Google Accounts" +msgstr "" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/he/pbx.po b/feeds/luci/applications/luci-app-pbx/po/he/pbx.po new file mode 100644 index 0000000..2a45821 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/he/pbx.po @@ -0,0 +1,484 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Google Accounts" +msgstr "" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/hu/pbx.po b/feeds/luci/applications/luci-app-pbx/po/hu/pbx.po new file mode 100644 index 0000000..2a45821 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/hu/pbx.po @@ -0,0 +1,484 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Google Accounts" +msgstr "" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/it/pbx.po b/feeds/luci/applications/luci-app-pbx/po/it/pbx.po new file mode 100644 index 0000000..6da8e45 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/it/pbx.po @@ -0,0 +1,487 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-12-15 19:31+0200\n" +"Last-Translator: claudyus \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Opzioni avanzate" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Google Accounts" +msgstr "" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/ja/pbx.po b/feeds/luci/applications/luci-app-pbx/po/ja/pbx.po new file mode 100644 index 0000000..76199f4 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/ja/pbx.po @@ -0,0 +1,493 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-21 07:57+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Advanced Settings" +msgstr "詳細設定" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "Eメール" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "外部SIPポート" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "General Settings" +msgstr "基本設定" + +msgid "Google Accounts" +msgstr "Google アカウント" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "Google Voice/Talk アカウント" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "QoS ルール設定を有効にする" + +msgid "Makes Outgoing Calls" +msgstr "発信を許可する" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "いいえ" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "PBX メインページ" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "PIN" + +msgid "Password" +msgstr "パスワード" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "QoS 設定" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "受信を許可する" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "SIP アカウント" + +msgid "SIP Device/Softphone Accounts" +msgstr "SIP デバイス/ソフトフォン アカウント" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "サーバー設定" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "ユーザーエージェント名" + +msgid "User Name" +msgstr "ユーザー名" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "はい" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +#~ msgid "Account Status" +#~ msgstr "アカウントのステータス" + +#~ msgid "Account Status Message" +#~ msgstr "アカウントステータス・メッセージ" diff --git a/feeds/luci/applications/luci-app-pbx/po/ms/pbx.po b/feeds/luci/applications/luci-app-pbx/po/ms/pbx.po new file mode 100644 index 0000000..23403f2 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/ms/pbx.po @@ -0,0 +1,483 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Google Accounts" +msgstr "" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/no/pbx.po b/feeds/luci/applications/luci-app-pbx/po/no/pbx.po new file mode 100644 index 0000000..2a45821 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/no/pbx.po @@ -0,0 +1,484 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Google Accounts" +msgstr "" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/pl/pbx.po b/feeds/luci/applications/luci-app-pbx/po/pl/pbx.po new file mode 100644 index 0000000..4e80a45 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/pl/pbx.po @@ -0,0 +1,508 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-05 04:37+0200\n" +"Last-Translator: piosl \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Ustawienia zaawansowane" + +msgid "Available" +msgstr "Dostępny" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "Unikaj znaków innych niż alfanumeryczne, spacja, przecinek i kropka." + +msgid "Away" +msgstr "Oddalony" + +msgid "Blacklisted Numbers" +msgstr "Numery na czarnej liście" + +msgid "Call Routing" +msgstr "Przekierowanie połączeń" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +# Chodzi tu o numery, przez które dzwoni się, aby obniżyć koszta połączeń zagranicznych. Jeśli ktoś ma pomysł na lepsze tłumaczenie, proszę zmienić. W sieci nie znalazłem. +msgid "Call-through Numbers" +msgstr "Numery pośredniczące" + +msgid "Copy-paste large lists of numbers here." +msgstr "Wklej tu wielkie listy numerów." + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "Nie przeszkadzać" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "Domena/adres IP/dynamiczna domena" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "Dynamiczna czarna lista numerów" + +msgid "Email" +msgstr "E-mail" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "Włącz połączenia przychodzące (rejestruj przez SIP)" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "Włącz połączenia przychodzące (zobacz status poniżej)" + +msgid "Enable Outgoing Calls" +msgstr "Włącz połączenia wychodzące" + +msgid "Enabled" +msgstr "Włączone" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" +"Podaj numery telefonów, które powinny być automatycznie odrzucane. " +"Prawdopodobnie powinieneś pominąć numer kierunkowy kraju i zera z przodu, " +"ale samemu to przetestuj, aby upewnić się, że blokowanie działa prawidłowo " +"dla Twojego położenia." + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" +"Podaj to IP (lub parę IP:port) w ustawieniach serwera/rejestratora urządzeń " +"SIP których będziesz używać WYŁĄCZNIE lokalnie i nigdy z zewnątrz." + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" +"Podaj tę nazwę hosta (lub parę nazwa hosta:port) w ustawieniach serwera/" +"rejestratora urządzeń SIP których będziesz używać z zewnątrz (będą też " +"działać lokalnie)." + +msgid "External SIP Port" +msgstr "Zewnętrzny port SIP" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" +"Dla każdego użytkownika z prawem wykonywania połączeń wychodzących możesz " +"ograniczyć których operatorów mogą używać do tych połączeń. Domyślnie każdy " +"użytkownik może używać dowolnego operatora. Użytkownik musi mieć prawo " +"wykonywania połączeń wychodzących ustawione na stronie \"Konta użytkowników" +"\", aby pojawić się na poniższej liście. Podaj operatorów VoIP w formacie " +"nazwa.użytkownika@jakaś.nazwa.hosta, tak jak są wypisani w \"Połączeniach " +"wychodzących\" powyżej. Łatwiej jest skopiować powyższych operatorów. " +"Nieprawidłowe wpisy, włącznie z operatorami bez prawa do połączeń " +"wychodzących, będą odrzucani bez komunikatów. Wpisy mogą być rozdzielone " +"spacjami albo podane po jednym w wierszu." + +msgid "Full Name" +msgstr "Pełne imię i nazwisko" + +msgid "General Settings" +msgstr "Ustawienia ogólne" + +msgid "Google Accounts" +msgstr "Konta Google" + +msgid "Google Talk Status" +msgstr "Status Google Talk" + +msgid "Google Talk Status Message" +msgstr "Opis Google Talk" + +msgid "Google Voice/Talk Accounts" +msgstr "Konta Google Voice/Talk" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "Połączenia przychodzące" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/pt-br/pbx.po b/feeds/luci/applications/luci-app-pbx/po/pt-br/pbx.po new file mode 100644 index 0000000..fd93e4f --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/pt-br/pbx.po @@ -0,0 +1,744 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-08-04 09:00+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Configurações Avançadas" + +msgid "Available" +msgstr "Disponível" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" +"Evite usar qualquer carácter que não seja um alfanumérico, espaço, vírgula " +"ou ponto." + +msgid "Away" +msgstr "Ausente" + +msgid "Blacklisted Numbers" +msgstr "Números na Lista Negra" + +msgid "Call Routing" +msgstr "Roteamento de Chamada" + +# 20140630: edersg: tradução +msgid "Call-back Numbers" +msgstr "Voltar a discar os números" + +# 20140630: edersg: tradução +msgid "Call-back Provider" +msgstr "Voltar a chamar o provedor" + +msgid "Call-through Numbers" +msgstr "Números de Ligação Direta" + +msgid "Copy-paste large lists of numbers here." +msgstr "Copie e cole aqui listas de números extensas." + +# 20140630: edersg: tradução +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" +"Designar os números que estão autorizados a chamar por este sistema e quais " +"privilégios do usuário eles terão." + +# 20140630: edersg: tradução +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" +"Designar números para os quais o sistema irá desligar e ligar de volta, qual " +"provedor será utilizado para chamá-los, e quais privilégios do usuário " +"serão concedidos a eles." + +msgid "Dials numbers unmatched elsewhere" +msgstr "Disca números que não casam em qualquer lugar." + +msgid "Do Not Disturb" +msgstr "Não Perturbe" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "Domínio/Endereço IP/Domínio Dinâmico" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "Lista Dinâmica dos Números da Lista Negra" + +msgid "Email" +msgstr "Email" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "Habilitar Chamadas Recebidas (Registrar pelo SIP)" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "Habilitar Chamadas Recebidas (defina o Estado abaixo)" + +msgid "Enable Outgoing Calls" +msgstr "Habilitar Chamadas para Fora" + +msgid "Enabled" +msgstr "Habilitado" + +# 20140630: edersg: tradução +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" +"Digite um provedor VoIP para utilizar para voltar a chamada no formato " +"username@some.host.name conforme listado acima em \"Chamadas Originadas\". É " +"mais fácil copiar e colar os provedores. As entradas inválidas, incluindo " +"provedores não habilitados para chamadas de saída, serão rejeitados em " +"silêncio." + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" +"Entre com os números de telefone que você deseja rejeitar automaticamente. " +"Você pode omitir o código do país e qualquer zeros no início, mas, por " +"favor, teste para ter certeza que você está bloqueando da área desejada com " +"sucesso." + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" +"Entre este endereço IP (ou IP:porta) na configuração de servidor/registrador " +"dos seus dispositivos SIP que você irá usar SOMENTE localmente e nunca de um " +"local remoto." + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" +"Entre com o nome do equipamento (ou equipamento:porta) na configuração de " +"servidor/Registrar do seus dispositivos SIP que você irá usar de um local " +"remoto (eles também funcionarão localmente)." + +msgid "External SIP Port" +msgstr "Porta SIP Externa" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" +"Para cada provedor habilitado para receber chamadas, aqui você pode " +"restringir quais usuários tocarão quando receber chamadas. Se a lista " +"estiver vazia, o sistema indicará que todos os usuários com recepção de " +"chamadas habilitada tocarão. Nome de usuários inválidos serão rejeitados " +"silenciosamente. Além disto, entrar com um nome de usuário aqui sobrescreve " +"a configuração do usuário para não receber chamadas. Desta forma, você pode " +"fazer com que alguns usuários toquem somente para alguns provedores " +"específicos. As entradas podem ser inseridas usando uma lista separada por " +"espaço ou um por nova linha." + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" +"Para cada usuário habilitado para realizar chamadas externas, você pode " +"restringir quais provedores o usuário poderá usar. Por padrão, todos os " +"usuários podem usar todos os provedores. Para aparecer na lista abaixo, o " +"usuário deve estar habilitado para realizar chamadas externas na página de " +"\"Contas de Usuários\". Entre com os provedores de VoIP no formato " +"usuário@algum.nome.de.equipamento, como listado em \"Chamadas Efetuadas\" " +"abaixo. É mais fácil copiar e colar os provedores da lista abaixo. Entradas " +"inválidas, includindo provedores não habilitados para chamadas externas, " +"serão rejeitadas silenciosamente. As entradas podem ser inseridas usando uma " +"lista separada por espaço ou um por nova linha." + +msgid "Full Name" +msgstr "Nome Completo" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "Google Accounts" +msgstr "Contas do Google" + +msgid "Google Talk Status" +msgstr "Estado do Google Talk" + +msgid "Google Talk Status Message" +msgstr "Mensagem de Estado do Google Talk" + +msgid "Google Voice/Talk Accounts" +msgstr "Contas do Google Voice/Talk" + +# 20140630: edersg: tradução +msgid "Hang-up Delay" +msgstr "Atraso de hang-up" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" +"Aqui você deve configurar pelo menos uma conta SIP, que você irá usar para " +"se cadastrar neste serviço. Use essa conta, seja em um adaptador de " +"telefonia analógica (ATA), ou em um softphone SIP como Linphone, CSipSimple, " +"ou Sipdroid em seu smartphone, ou o Ekiga, Linphone, ou X-Lite no seu " +"computador. Por padrão, ao receber uma chamada em uma das suas contas nos " +"provedores VoIP ou em números GV, todas as contas SIP tocarão " +"simultaneamente." + +# 20140630: edersg: tradução +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" +"Quanto tempo esperar antes de desligar. Se o provedor que você utiliza para " +"discar automaticamente encaminha para a caixa postal de voz, você pode " +"definir este valor para um atraso que irá permitir que você desligue sua " +"chamada antes de ser encaminhada e cobrado financeiramente por isso." + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" +"Se definir o servidor/registrador como %s ou %s não funcionar para você, " +"tente defini-lo como %s ou %s e entre com este número de porta em um campo " +"separado que especifica o número da porta do servidor/registrador. Fique " +"ciente que alguns dispositivos têm uma configuração confusa que define a " +"porta de origem das solicitações SIP no dispositivo SIP em si (a porta local " +"no dispositivo). A porta especificada nesta página não é essa porta de " +"ligação, mas a porta na qual o serviço escutará serviço." + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" +"Se você sentir falhas ou alta latência enquanto baixa conteúdos pesados​​, " +"você pode querer habilitar o QoS. O QoS prioriza o tráfego de e para a sua rede para endereços " +"IP e portas específicas, resultando em melhor latência e redimento de som. " +"Se ativado, será configurada automaticamente pelo PABX uma regra de QoS para este " +"serviço, mas você deve visitar a página de configuração de QoS (Rede -> QoS) para " +"configurar outras configurações críticas de QoS como as velocidades da sua " +"conexão." + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" +"Se você tiver mais de uma conta que pode fazer chamadas externas, você deve " +"informar uma lista de números de telefone e/ou prefixos nos seguintes campos " +"para cada provedor listados. Prefixos inválidos são removidos " +"silênciosamente, e some os caracteres 0-9, X, Z, N, # *,, e + são válidos. A " +"letra X corresponde a 0-9, Z corresponde a 1-9, e N corresponde a 2-9. Por " +"exemplo, para fazer chamadas para a Alemanha através de um provedor, você " +"pode digitar 49. Para fazer chamadas para a América do Norte, você pode " +"entrar 1NXXNXXXXXX. Se um de seus provedores pode fazer chamadas locais para " +"um código de área como Nova York (646), você pode entrar com 646NXXXXXX para " +"esse provedor. Você deve deixar uma conta com uma lista vazia para fazer " +"chamadas com ele por padrão para o caso do prefixo não casar com nenhum " +"outro fornecedor. O sistema irá substituir automaticamente uma lista vazia " +"com uma mensagem que os este provedor será utilizado caso nenhuma das regras " +"dos demais provedores casem. Seja tão específico quanto possível (isto é " +"1NXXNXXXXXX é melhor do que 1). Por favor, note que todos os códigos de " +"discagem internacionais são descartados (por exemplo 00, 011, 010, 0011). As " +"entradas podem ser feitas em uma lista separada por espaços ou por nova " +"linha." + +msgid "Incoming Calls" +msgstr "Chamadas Recebidas" + +msgid "Insert QoS Rules" +msgstr "Inserir Regras QoS" + +msgid "Makes Outgoing Calls" +msgstr "Realiza Chamadas para Fora" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "NOTA: Não existe uma conta Google ou provedor SIP configurado." + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" +"NOTA: Não existe uma conta Google ou provedor SIP habilitado para receber " +"chamadas." + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" +"NOTA: Não existe uma conta Google ou provedor SIP habilitado para efetuar " +"chamadas externas." + +msgid "NOTE: There are no local user accounts configured." +msgstr "NOTA: Não existe uma conta local configurada." + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" +"NOTA: Não existe uma conta local configurada para efetuar chamadas externas." + +msgid "No" +msgstr "Não" + +msgid "Number of Seconds to Ring" +msgstr "Número de Segundos para Tocar" + +msgid "Outbound Proxy" +msgstr "Proxy Externo" + +msgid "Outgoing Calls" +msgstr "Chamadas Efetuadas" + +msgid "PBX Main Page" +msgstr "Página Principal do PBX" + +msgid "PBX Service Status" +msgstr "Estado do Serviço PBX" + +msgid "PIN" +msgstr "PIN" + +msgid "Password" +msgstr "Senha" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" +"Escolha uma porta aleatória entre 6500 e 9500 onde o serviço irá escutar. " +"Não escolha a porta padrão 5060 pois ela é frequentemente alvo de ataques de " +"força bruta. Quanto terminar, (1) clique em \"Salvar e Aplicar\", e (2) olhe " +"na seção \"Dispositivo SIP/Contas do Softphone\" para as configurações " +"atualizadas do servidor e porta para o seu Dispositivo SIP/Softphone." + +msgid "Port Setting for SIP Devices" +msgstr "Configuração da Porta para Dispositivos SIP" + +msgid "Providers Used for Outgoing Calls" +msgstr "Provedores Usados para as Chamadas para Fora" + +msgid "QoS Settings" +msgstr "Configurações de QoS" + +msgid "RTP Port Range End" +msgstr "Final da Faixa de Portas RTP" + +msgid "RTP Port Range Start" +msgstr "Inicio da Faixa de Portas RTP" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" +"O tráfego RTP transporta de fato os pacotes de voz. Este é o início do " +"intervalo de portas que será usado para a estabelecer uma comunicação RTP. " +"Geralmente não é um problema deixar esta configuração com o valor padrão." + +msgid "Receives Incoming Calls" +msgstr "Recebe Chamadas para Dentro" + +msgid "Remote Usage" +msgstr "Uso Remoto" + +msgid "Rings users enabled for incoming calls" +msgstr "Toca usuários habilitados para receber chamadas" + +msgid "SIP Accounts" +msgstr "Contas SIP" + +msgid "SIP Device/Softphone Accounts" +msgstr "Contas de Dispositivos SIP/Telefones em Software" + +msgid "SIP Provider Accounts" +msgstr "Contas dos Provedores SIP" + +msgid "SIP Realm (needed by some providers)" +msgstr "Domínio SIP (necessário para alguns provedores)" + +msgid "SIP Server/Registrar" +msgstr "Servidor SIP/Registrador" + +msgid "SIP Server/Registrar Port" +msgstr "Porta do Servidor SIP/Registrador" + +msgid "Server Setting" +msgstr "Configuração do Servidor" + +msgid "Server Setting for Local SIP Devices" +msgstr "Configuração do Servidor para Dispositivos SIP Locais" + +msgid "Server Setting for Remote SIP Devices" +msgstr "Configuração do Servidor para Dispositivos SIP Remotos" + +msgid "Service Status" +msgstr "Estado do Serviço" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" +"Define o número de segundos para tocar o telefone ao receber chamadas antes " +"de desligar ou ir para a caixa postal, se o correio de voz estiver instalado " +"e habilitado." + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "Números na Lista Negra separados por Espaço" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" +"Especifique os números individualmente aqui. Pressione o Enter para " +"adicionar mais números." + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" +"Especifique aqui os números individualmente. Pressione o \"Enter\" para " +"adicionar mais números. Você terá que experimentar com qual código de país " +"ou de área você precisa adicionar aos números." + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" +"O número(s) acima especificados serão capazes de discar com os provedores " +"deste usuário. Nomes inválidos, incluindo usuários não habilitados para " +"chamadas externas, serão descartados silenciosamente. Por favor, verifique " +"se a entrada foi aceita." + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" +"Esta página de configuração permite configurar um sistema de serviço de " +"telefone (PABX), que permite fazer chamadas telefônicas através do Google " +"múltipla e SIP (como Sipgate, SipSorcery e Betamax) contas e compartilhá-los " +"entre diversos dispositivos SIP. Note-se que as contas do Google, contas " +"SIP, e contas de usuários locais são configurados em \"Contas do Google\", " +"\"Contas SIP\" e \"Contas de Usuário\" sub-seções. Você deve adicionar pelo " +"menos uma conta de usuário para este PABX e configurar um dispositivo SIP ou " +"softphone para usar a conta, a fim de fazer e receber chamadas com o " +"Google / SIP contas. Configurando vários usuários permitem que você faça " +"chamadas gratuitas entre todos os usuários, e partilhar o Google configurado " +"e contas SIP. Se você tem mais de um Google e contas SIP configurado, você " +"provavelmente deve configurar como as chamadas de e para eles são " +"encaminhados para a \"Call Routing\" página. Se você está interessado em " +"usar o seu próprio PABX de qualquer lugar do mundo, então, visitar o " +"\"Remote Uso\" na seção \"Advanced Settings\" página." + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" +"Este é o nome que o servidor VoIP será usado para identificar-se quando se " +"registrar para VoIP (SIP) fornecedores. Alguns provedores exigem isso para " +"uma seqüência específica de correspondência de um dispositivo de hardware " +"SIP." + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" +"Este é o local onde você indica quais contas Google/SIP serão usadas para " +"chamar quais códigos de área/país, que usuários poderão usar quais contas " +"Google/SIP, como as chamadas recebidas serão roteadas, que números podem ser " +"recebidos por este PBX com uma senha e qual números estão banidos." + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" +"Este é o local onde você configura suas contas Google (Talk e Voice) para " +"poder usá-las para realizar ou receber chamadas (conversa por voz e chamadas " +"para telefones reais). Por favor, realize ao menos uma chamada de voz usando " +"o plugin do Google Talk, instalável na interface do GMail. Após esta " +"chamada, saia da sua conta em todos os serviços. Clique em \"Adicionar\" " +"para adicionar quantas contas você desejar." + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" +"Este é o local onde você configura suas contas SIP (VoIP) como Sipgate, " +"SipSorcery, os populares provedores Betamax, e qualquer outro provedor com " +"suporte a SIP para permitir o uso destas contas para efetuar e receber " +"chamadas (URI de SIP e chamads para números reais). Clique em \"Adicionar\" " +"para adicionar quantas contas você desejar." + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" +"Esta opção deve estar definida como \"Sim\" se você tem um DDR (Discagem " +"Direta a Ramal) associado com esta conta SIP or quer receber chamadas URI de " +"SIP através deste provedor." + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" +"Esta seção contém configurações que não precisam ser modificadas em " +"condições normais. Aqui você pode configurar seu sistema para usar com " +"dispositivos SIP remotos e resolver problemas com a qualidade das chamadas " +"através da inserção de regras de QoS." + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" +"Use o nome de usuário numérico (4 a 5 dígitos) se você estiver conectando " +"telefones normais com ATAs para este sistema (para que eles possam discar os " +"nomes de seus usuários)." + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" +"Use esta conta para realizar chamadas externas como configurado na seção de " +"\"Roteamento de Chamada\"." + +msgid "Use this account to make outgoing calls." +msgstr "Use esta conta para realizar chamadas externas." + +msgid "User Accounts" +msgstr "Contas de Usuários" + +msgid "User Agent String" +msgstr "Texto para o Agente do Usuário" + +msgid "User Name" +msgstr "Nome do Usuário" + +msgid "Uses providers enabled for outgoing calls" +msgstr "Usa provedores habilitados para chamadas externas" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" +"Quando alguém iniciar uma conversa por voz com sua conta do GTalk ou chamar " +"seu número GVoice (se você tiver uma conta Google Voice), a chamada será " +"encaminhada para qualquer usuários que estão conectados (registados " +"utilizando um dispositivo SIP ou softphone) e autorizados a receber a " +"chamada. Se você tiver uma conta Google Voice, você deve ir para as " +"configurações da sua conta GVoice e encaminhar as chamadas para o Google " +"Chat, a fim de realmente receber chamadas feitas para o seu número GVoice. " +"Se você tiver problemas para receber chamadas oriundas do GVoice, " +"experimente a opção \"Call Screening/Monitoramento de Chamadas\" na " +"configurações da sua conta GVoice. Finalmente, certifique-se de nenhum outro " +"cliente está online com essa conta (navegador contado no GMail, aplicativo " +"Google Talk no Desktop ou Celular), pois isto pode interferir." + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" +"Quando a sua senha for salva, ela desaparece deste campo e não será exibida " +"para sua proteção. A senha será alterada somente quando você informar uma " +"nova senha diferente da que foi salva anteriormente." + +msgid "Yes" +msgstr "Sim" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" +"Você pode informar aqui o nome do domínio, endereço IP externo, ou um nome " +"de domínio dinâmico. O melhor é informar um endereço IP estático. Se o seu " +"endereço IP é dinâmico e ele muda, sua configuração se tornará inválida. " +"Desta forma, é recomendado configurar um serviço de domínios dinâmicos e " +"utilizar este nome aqui. Você pode configurar o serviço de domínios " +"dinâmicos com o pacote luci-app-ddns." + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" +"Você pode especificar um nome real para aparecer no identificador de " +"chamadas." + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" +"Você pode usar seus dispositivos SIP/softphones com este sistema a partir de " +"um local remoto, desde que o seu provedor de Internet lhe forneça um " +"endereço IP público. Você poderá ligar para outros usuários locais sem custo " +"(por exemplo, outros adaptadores de telefone analógico (ATAs)) e usar seus " +"provedores de VoIP para fazer chamadas como se fossem originadas do local do " +"seu PBX. Depois de configurar esta aba, volte para onde os usuários são " +"configurados e veja as novas configurações de servidor e porta com as quais " +"você precisa configurar os seus dispositivos SIP remotos. Por favor, note " +"que se este PABX não está rodando no seu roteador, você terá que configurar " +"o redirecionamento de portas (NAT) no seu roteador. Por favor, encaminhe as " +"portas abaixo (porta SIP e intervalo de porta RTP) para o endereço IP do " +"dispositivo que executa este PBX." + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" +"Seu PIN desaparece deste campo quando for salvo e não será exibido para sua " +"proteção. Ele será alterada somente quando você informar um PIN diferente do " +"que foi salvo anteriormente. É possível deixá-lo em branco mas fique atento " +"quanto as implicações na segurança." + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" +"Sua senha desaparece deste campo quando for salva e não será exibida para " +"sua proteção. A senha será alterada somente quando você informar uma nova " +"senha diferente da que foi salva anteriormente." + +#~ msgid "" +#~ "Designate numbers that are allowed to call through this system and which " +#~ "user's privileges it will have." +#~ msgstr "" +#~ "Números definidos que poderão realizar chamadas através deste sistema e " +#~ "quais privilégios o usuário terá." + +#~ msgid "" +#~ "Pick a random port number between 6500 and 9500 for the service to listen " +#~ "on. Do not pick the standard 5060, because it is often subject to brute-" +#~ "force attacks. When finished, (1) click \"Save and Apply\", and (2) click " +#~ "the \"Restart VoIP Service\" button above. Finally, (3) look in the \"SIP " +#~ "Device/Softphone Accounts\" section for updated Server and Port settings " +#~ "for your SIP Devices/Softphones." +#~ msgstr "" +#~ "Escolha um número de porta aleatória entre 6500 e 9500 para o serviço " +#~ "escutar. Não escolher o padrão 5060, porque é frequentemente alvo de ataques " +#~ "de força bruta. Quando terminar, (1) clique em \"Salvar e Aplicar\", e (2) " +#~ "clique no \"Reiniciar o serviço VoIP\" acima. Finalmente, (3) olhe na seção " +#~ "\"Contas de Dispositivos SIP/Telefones em Software\" para atualizar o endereço " +#~ "e porta do servidor para seu Dispositivos SIP/Telefones em Software." + +#~ msgid "" +#~ "You can enter your domain name, external IP address, or dynamic domain " +#~ "name here Please keep in mind that if your IP address is dynamic and it " +#~ "changes your configuration will become invalid. Hence, it's recommended " +#~ "to set up Dynamic DNS in this case." +#~ msgstr "" +#~ "Você pode digitar aqui o seu nome de domínio, endereço IP externo, ou nome " +#~ "de domínio dinâmico. Tenha em mente que se o seu endereço IP é dinâmico e " +#~ "ele mudar, a sua configuração se tornará inválida. Por isso, é recomendado " +#~ "configurar um DNS dinâmico neste caso." + +#~ msgid "Account Status" +#~ msgstr "Estado da Conta" + +#~ msgid "Account Status Message" +#~ msgstr "Mensagem do Estado da Conta" + +#~ msgid "Domain Name/Dynamic Domain Name" +#~ msgstr "Nome do Domínio/Nome do Domínio Dinâmico" + +#~ msgid "Enable Incoming Calls (See Status, Message below)" +#~ msgstr "Habilitar Chamadas Recebidas (Veja o Estado, Mensagem abaixo)" + +#~ msgid "Service Control and Connection Status" +#~ msgstr "Controle do Serviço e Estado da Conexão" diff --git a/feeds/luci/applications/luci-app-pbx/po/pt/pbx.po b/feeds/luci/applications/luci-app-pbx/po/pt/pbx.po new file mode 100644 index 0000000..75b6c8c --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/pt/pbx.po @@ -0,0 +1,487 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-09-22 19:17+0200\n" +"Last-Translator: Low \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Available" +msgstr "Disponível" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "Ativado" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "Nome Completo" + +msgid "General Settings" +msgstr "" + +msgid "Google Accounts" +msgstr "" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "Não" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "Sim" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/ro/pbx.po b/feeds/luci/applications/luci-app-pbx/po/ro/pbx.po new file mode 100644 index 0000000..49e8dac --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/ro/pbx.po @@ -0,0 +1,488 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-28 18:50+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Setări avansate" + +msgid "Available" +msgstr "Disponibil" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "Nu deranjaţi" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "Domeniu/Adresă IP/Domeniu dinamic" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "Activat" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "Nume complet" + +msgid "General Settings" +msgstr "Setări generale" + +msgid "Google Accounts" +msgstr "Conturi Google" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "Parolă" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "Setări QoS" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/ru/pbx.po b/feeds/luci/applications/luci-app-pbx/po/ru/pbx.po new file mode 100644 index 0000000..e85c947 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/ru/pbx.po @@ -0,0 +1,525 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-09-06 10:28+0200\n" +"Last-Translator: datasheet \n" +"Language-Team: none\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Расширенные установки" + +msgid "Available" +msgstr "Доступен" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" +"Старайтесь не использовать ничего, кроме алфавитно-цифровых символов, " +"пробелов, запятых и точек." + +msgid "Away" +msgstr "Отошел" + +msgid "Blacklisted Numbers" +msgstr "Номера в \"черном\" списке" + +msgid "Call Routing" +msgstr "Маршрутизация вызовов" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "Номера сквозных вызовов" + +msgid "Copy-paste large lists of numbers here." +msgstr "Вставьте большие списки номеров здесь" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "Не беспокоить" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "Динамический список запрещенных номеров" + +msgid "Email" +msgstr "Эл. почта" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "Разрешить входящие вызовы (регистрация через SIP)" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "Разрешить входящие звонки (см. ниже Статус)" + +msgid "Enable Outgoing Calls" +msgstr "Разрешить исходящие вызовы" + +msgid "Enabled" +msgstr "Включено" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" +"Введите телефонные номера, звонки с которых вы хотите автоматически " +"отклонять. Вы, вероятно, не должны вводить код страны и ведущие нули, но, " +"чтобы удостовериться в этом, пожалуйста проверьте, что звонки из " +"нежелательной зоны успешно блокируются." + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" +"Введите этот IP (или IP порт) в установках Сервера/Регистратора SIP " +"устройств, который вы будете использовать ТОЛЬКО локально и никогда удаленно." + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" +"Введите это имя_хоста (или имя_хоста:порт) в установках Сервера/Регистратора " +"тех SIP-устройств, которые вы будете использовать удаленно (локально они " +"также будут работать)." + +msgid "External SIP Port" +msgstr "Внешний порт SIP" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "Полное имя" + +msgid "General Settings" +msgstr "Общие установки" + +msgid "Google Accounts" +msgstr "Учетные записи Google" + +msgid "Google Talk Status" +msgstr "Статус Google Talk" + +msgid "Google Talk Status Message" +msgstr "Сообщение статуса Google Talk" + +msgid "Google Voice/Talk Accounts" +msgstr "Учетные записи Google Voice/Talk" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "Входящие вызовы" + +msgid "Insert QoS Rules" +msgstr "Вставить правила QoS" + +msgid "Makes Outgoing Calls" +msgstr "Совершает исходящие вызовы" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "Нет" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "Outbound прокси сервер" + +msgid "Outgoing Calls" +msgstr "Исходящие вызовы" + +msgid "PBX Main Page" +msgstr "Главная страница АТС" + +#, fuzzy +msgid "PBX Service Status" +msgstr "Состояние службы АТС" + +msgid "PIN" +msgstr "PIN" + +msgid "Password" +msgstr "Пароль" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "Настройки порта устройств SIP" + +msgid "Providers Used for Outgoing Calls" +msgstr "Провайдеры исходящих вызовов" + +msgid "QoS Settings" +msgstr "Установки QoS" + +msgid "RTP Port Range End" +msgstr "Конец диапазона портов RTP" + +msgid "RTP Port Range Start" +msgstr "Начало диапазоно портов RTP" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "Принимает входящие вызовы" + +msgid "Remote Usage" +msgstr "Удаленное использование" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "Учетные записи SIP" + +msgid "SIP Device/Softphone Accounts" +msgstr "Учетные записи SIP устройства/программного телефона" + +msgid "SIP Provider Accounts" +msgstr "Учетные записи SIP провайдера" + +msgid "SIP Realm (needed by some providers)" +msgstr "SIP Realm (нужен для некоторых провайдеров)" + +msgid "SIP Server/Registrar" +msgstr "SIP Сервер/Регистратор" + +msgid "SIP Server/Registrar Port" +msgstr "Порт SIP Сервера/Регистратора" + +msgid "Server Setting" +msgstr "Настройки сервера" + +msgid "Server Setting for Local SIP Devices" +msgstr "Установки сервера для локальных SIP устройств" + +msgid "Server Setting for Remote SIP Devices" +msgstr "Настройки сервера для удаленных SIP устройств" + +msgid "Service Status" +msgstr "Состояние сервиса" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "Черный список номеров (пробел между номерами для разделения)" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" +"Укажите отдельные номера. Нажмите enter, чтобы добавить больше номеров." + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" +"Использовать эту учетную запись для исходящих вызовов в соответстии с " +"наcтройками секции \"Маршрутизация вызовов\"." + +msgid "Use this account to make outgoing calls." +msgstr "Использовать эту учетную запись для исходящих вызовов" + +msgid "User Accounts" +msgstr "Учетные записи пользователя" + +msgid "User Agent String" +msgstr "Строка агента пользователя" + +msgid "User Name" +msgstr "Имя пользователя" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "Да" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "Здесь Вы можете указать имя для отображения вместо ID звонящего." + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +#~ msgid "" +#~ "Designate numbers that are allowed to call through this system and which " +#~ "user's privileges it will have." +#~ msgstr "" +#~ "Указать телефонные номера, которым разрешено осуществлять звонки через эту " +#~ "систему, а также какими они будут обладать пользовательскими привилегиями." + +#~ msgid "Account Status" +#~ msgstr "Статус учетной записи" + +#~ msgid "Account Status Message" +#~ msgstr "Статус сообщение учетной записи" + +#~ msgid "Domain Name/Dynamic Domain Name" +#~ msgstr "Имя домена/Динамическое имя домена" + +#~ msgid "Enable Incoming Calls (See Status, Message below)" +#~ msgstr "Разрешить входящие вызовы (см. статус, сообщение ниже)" + +#~ msgid "Service Control and Connection Status" +#~ msgstr "Управление сервисом и статус соединения" diff --git a/feeds/luci/applications/luci-app-pbx/po/sk/pbx.po b/feeds/luci/applications/luci-app-pbx/po/sk/pbx.po new file mode 100644 index 0000000..7b6d4a5 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/sk/pbx.po @@ -0,0 +1,484 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Google Accounts" +msgstr "" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/sv/pbx.po b/feeds/luci/applications/luci-app-pbx/po/sv/pbx.po new file mode 100644 index 0000000..400289b --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/sv/pbx.po @@ -0,0 +1,506 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-04-28 06:11+0200\n" +"Last-Translator: Umeaboy \n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Avancerade inställningar" + +msgid "Available" +msgstr "Tillgänglig" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" +"Undvik att använda allt förutom alfa-numeriska karaktärer, mellanslag, komma-" +"tecken och punkt." + +msgid "Away" +msgstr "Borta" + +msgid "Blacklisted Numbers" +msgstr "Svartlistade nummer" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "Kopiera och klistra in ett stort antal nummer här." + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "Ringer upp nummer som inte passar någon annanstans" + +msgid "Do Not Disturb" +msgstr "Stör ej" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "Domän/IP-adress/Dynamisk domän" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "Dynamisk lista över svartlistade nummer" + +msgid "Email" +msgstr "E-post" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "Aktivera inkommande samtal (Registrera via SIP)" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "Aktivera inkommande samtal (se status nedanför)" + +msgid "Enable Outgoing Calls" +msgstr "Aktivera utgående samtal" + +msgid "Enabled" +msgstr "Aktiverat" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" +"Ange telefonnummer som du vill neka samtal från automatiskt. Du borde " +"förmodligen utesluta landskoden och eventuella inledande nollor, men " +"experimentera gärna för att vara säker på att du lyckas blockera nummer från " +"ditt önskade område." + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" +"Ange den här IP:n (eller IP:port) i Server/Registrar-inställningarna för SIP-" +"enheter som du endast kommer att använda LOKALT och aldrig från en " +"fjärrstyrd anslutning." + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" +"Ange det här värdnamnet (eller värdnamn:port) under Server/Registrar " +"inställningen för SIP-enheten som du kommer att använda från en fjärrstyrd " +"plats (de kommer att fungera lokalt också)." + +msgid "External SIP Port" +msgstr "Extern SIP-port" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "Fullständigt namn" + +msgid "General Settings" +msgstr "Allmänna inställningar" + +msgid "Google Accounts" +msgstr "Google-konton" + +msgid "Google Talk Status" +msgstr "Status för Google Talk" + +msgid "Google Talk Status Message" +msgstr "Statusmeddelande för Google Talk" + +msgid "Google Voice/Talk Accounts" +msgstr "Google Voice/Talk-konton" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "Inkommande samtal" + +msgid "Insert QoS Rules" +msgstr "För in QoS-regler" + +msgid "Makes Outgoing Calls" +msgstr "Gör utgående samtal" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "NOTERA: Det finns inga lokala användarkonton konfigurerade." + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" +"NOTERA: Det finns inga lokala användar-konton aktiverade för utgående samtal." + +msgid "No" +msgstr "Nej" + +msgid "Number of Seconds to Ring" +msgstr "Antal sekunder att ringa" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "Utgående samtal" + +msgid "PBX Main Page" +msgstr "Huvudsida för PBX" + +msgid "PBX Service Status" +msgstr "Status för PBX-tjänsten" + +msgid "PIN" +msgstr "PIN-kod" + +msgid "Password" +msgstr "Lösenord" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "Port-inställning för SIP-enheter" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "QoS-inställningar" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "Tar emot inkommande samtal" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "Ringer användare som är aktiverade för inkommande samtal" + +msgid "SIP Accounts" +msgstr "SIP-konton" + +msgid "SIP Device/Softphone Accounts" +msgstr "SIP-enhet/Softphone-konton" + +msgid "SIP Provider Accounts" +msgstr "SIP-operatörskonton" + +msgid "SIP Realm (needed by some providers)" +msgstr "SIP-sfär (behövs av vissa operatörer)" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "Server-inställning" + +msgid "Server Setting for Local SIP Devices" +msgstr "Server-inställning för lokala SIP-enheter" + +msgid "Server Setting for Remote SIP Devices" +msgstr "Server-inställning för fjärrstyrda SIP-enheter" + +msgid "Service Status" +msgstr "Status för tjänst" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" +"Specificera nummer individuellt här. Tryck på enter-knappen för att lägga " +"till fler nummer." + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" +"Det här valet borde vara inställt på \"Ja\" om du har ett DID (riktigt " +"telefonnummer) associerat med det här SIP-kontot eller om du vill ta emot " +"SIP uri-samtal via den här operatören." + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "Använd det här kontot för att göra utgående samtal." + +msgid "User Accounts" +msgstr "Användar-konton" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "Användarnamn" + +msgid "Uses providers enabled for outgoing calls" +msgstr "Använder operatörer för utgående samtal" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "Ja" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" +"Du kan specifiera ett riktigt namn som visas i samband med nummret här." + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/templates/pbx.pot b/feeds/luci/applications/luci-app-pbx/po/templates/pbx.pot new file mode 100644 index 0000000..86dd2eb --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/templates/pbx.pot @@ -0,0 +1,477 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Advanced Settings" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Google Accounts" +msgstr "" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/tr/pbx.po b/feeds/luci/applications/luci-app-pbx/po/tr/pbx.po new file mode 100644 index 0000000..59af3e8 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/tr/pbx.po @@ -0,0 +1,484 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Google Accounts" +msgstr "" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/uk/pbx.po b/feeds/luci/applications/luci-app-pbx/po/uk/pbx.po new file mode 100644 index 0000000..d65a784 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/uk/pbx.po @@ -0,0 +1,501 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-13 15:47+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Розширені налаштування" + +msgid "Available" +msgstr "Доступний" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" +"Намагайтеся не використовувати нічого, крім алфавітно-цифрових символів, " +"пропусків, ком і крапок." + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "Маршрутизація Викликів" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "Виклик через номери" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +#, fuzzy +msgid "Do Not Disturb" +msgstr "Не турбувати" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +#, fuzzy +msgid "Dynamic List of Blacklisted Numbers" +msgstr "Динамічний список небажаних дзвінків" + +msgid "Email" +msgstr "Електронна скринька" + +#, fuzzy +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "Активувати вхідні дзвінки (зареєструватися через SIP)" + +#, fuzzy +msgid "Enable Incoming Calls (set Status below)" +msgstr "Активувати вхідні дзвінки (Встановити низький статус)" + +msgid "Enable Outgoing Calls" +msgstr "Активувати вихідні виклики" + +msgid "Enabled" +msgstr "Активувати" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +#, fuzzy +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" +"Введіть цей IP (або IP:порт) Сервера/Реєстратор налаштування SIP пристрою ви " +"будете використовувати тільки локально й ніколи з віддаленого місця." + +#, fuzzy +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" +"Введіть це хост ім'я (або ім'я хоста:порт) сервер/Реєстратор налаштування " +"SIP пристрою ви будете використовувати з віддаленого місця розташування " +"(воно також буде працювати локально)." + +msgid "External SIP Port" +msgstr "Зовнішній порт SIP" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "Повне Ім'я" + +msgid "General Settings" +msgstr "Загальні Налаштування" + +msgid "Google Accounts" +msgstr "Облікові записи Google" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "Ні" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "Облікові записи користувачів" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "Ім'я користувача" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "Так" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/vi/pbx.po b/feeds/luci/applications/luci-app-pbx/po/vi/pbx.po new file mode 100644 index 0000000..59af3e8 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/vi/pbx.po @@ -0,0 +1,484 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "" + +msgid "Away" +msgstr "" + +msgid "Blacklisted Numbers" +msgstr "" + +msgid "Call Routing" +msgstr "" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "" + +msgid "Copy-paste large lists of numbers here." +msgstr "" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "" + +msgid "Do Not Disturb" +msgstr "" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "" + +msgid "Enable Outgoing Calls" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Google Accounts" +msgstr "" + +msgid "Google Talk Status" +msgstr "" + +msgid "Google Talk Status Message" +msgstr "" + +msgid "Google Voice/Talk Accounts" +msgstr "" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "" + +msgid "Insert QoS Rules" +msgstr "" + +msgid "Makes Outgoing Calls" +msgstr "" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "" + +msgid "NOTE: There are no local user accounts configured." +msgstr "" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "" + +msgid "No" +msgstr "" + +msgid "Number of Seconds to Ring" +msgstr "" + +msgid "Outbound Proxy" +msgstr "" + +msgid "Outgoing Calls" +msgstr "" + +msgid "PBX Main Page" +msgstr "" + +msgid "PBX Service Status" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "" + +msgid "Providers Used for Outgoing Calls" +msgstr "" + +msgid "QoS Settings" +msgstr "" + +msgid "RTP Port Range End" +msgstr "" + +msgid "RTP Port Range Start" +msgstr "" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "" + +msgid "Remote Usage" +msgstr "" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "" + +msgid "SIP Device/Softphone Accounts" +msgstr "" + +msgid "SIP Provider Accounts" +msgstr "" + +msgid "SIP Realm (needed by some providers)" +msgstr "" + +msgid "SIP Server/Registrar" +msgstr "" + +msgid "SIP Server/Registrar Port" +msgstr "" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" diff --git a/feeds/luci/applications/luci-app-pbx/po/zh-cn/pbx.po b/feeds/luci/applications/luci-app-pbx/po/zh-cn/pbx.po new file mode 100644 index 0000000..8ac03e1 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/zh-cn/pbx.po @@ -0,0 +1,495 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-15 16:11+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "高级设置" + +msgid "Available" +msgstr "可用" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "避免使用除字母,数字,空格,逗号和句号外的其他字符。" + +msgid "Away" +msgstr "外" + +msgid "Blacklisted Numbers" +msgstr "黑名单" + +msgid "Call Routing" +msgstr "呼叫路由" + +msgid "Call-back Numbers" +msgstr "回调数" + +msgid "Call-back Provider" +msgstr "回呼提供者" + +msgid "Call-through Numbers" +msgstr "通过数字呼叫" + +msgid "Copy-paste large lists of numbers here." +msgstr "复制粘贴数字大名单。" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "其他地方无法匹配拨号号码" + +msgid "Do Not Disturb" +msgstr "请勿打扰" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "域名/ IP地址/动态域名" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "动态黑名单号码列表" + +msgid "Email" +msgstr "电子邮件" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "允许电话呼入(SIP注册者)" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "允许电话呼入(下面设置状态)" + +msgid "Enable Outgoing Calls" +msgstr "允许电话外呼" + +msgid "Enabled" +msgstr "允许" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" +"输入你想自动屏蔽的电话号码。你应该忽略国家代码和任何前导零,但请测试来确保你成" +"功屏蔽了想要屏蔽的号码。" + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" +"在SIP设备注册服务器中输入IP(或IP:端口),仅在本地使用,不可以在远程使用。" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" + +msgid "External SIP Port" +msgstr "外部SIP端口" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "全名" + +msgid "General Settings" +msgstr "通用设置" + +msgid "Google Accounts" +msgstr "google账号" + +msgid "Google Talk Status" +msgstr "google Talk状态" + +msgid "Google Talk Status Message" +msgstr "google Talk状态消息" + +msgid "Google Voice/Talk Accounts" +msgstr "Google Voice/Talk账号" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "呼入电话" + +msgid "Insert QoS Rules" +msgstr "插入QoS规则" + +msgid "Makes Outgoing Calls" +msgstr "安排外呼列表" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "注意:没有google或SIP提供者账户配置。" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "注意:没有google或SIP提供者账户允许呼入电话。" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "注意:没有google或SIP提供者账户允许外呼电话。" + +msgid "NOTE: There are no local user accounts configured." +msgstr "注意:没有本地用户设置。" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "注意:没有本地用户允许外呼电话。" + +msgid "No" +msgstr "不" + +msgid "Number of Seconds to Ring" +msgstr "多少秒振铃" + +msgid "Outbound Proxy" +msgstr "外呼代理" + +msgid "Outgoing Calls" +msgstr "外呼电话" + +msgid "PBX Main Page" +msgstr "PBX主页" + +msgid "PBX Service Status" +msgstr "PBX服务状态" + +msgid "PIN" +msgstr "PIN" + +msgid "Password" +msgstr "密码" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "SIP设备端口设置" + +msgid "Providers Used for Outgoing Calls" +msgstr "用于外呼电话的提供者" + +msgid "QoS Settings" +msgstr "QoS设置" + +msgid "RTP Port Range End" +msgstr "RTP结束端口" + +msgid "RTP Port Range Start" +msgstr "RTP起始端口" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "收到呼入电话" + +msgid "Remote Usage" +msgstr "远程使用" + +msgid "Rings users enabled for incoming calls" +msgstr "" + +msgid "SIP Accounts" +msgstr "SIP账号" + +msgid "SIP Device/Softphone Accounts" +msgstr "SIP 设备/软电话账号" + +msgid "SIP Provider Accounts" +msgstr "SIP提供者账户" + +msgid "SIP Realm (needed by some providers)" +msgstr "SIP Realm(一些供应商需要)" + +msgid "SIP Server/Registrar" +msgstr "SIP注册服务器" + +msgid "SIP Server/Registrar Port" +msgstr "SIP注册服务器端口" + +msgid "Server Setting" +msgstr "" + +msgid "Server Setting for Local SIP Devices" +msgstr "" + +msgid "Server Setting for Remote SIP Devices" +msgstr "" + +msgid "Service Status" +msgstr "" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "" + +msgid "User Accounts" +msgstr "" + +msgid "User Agent String" +msgstr "" + +msgid "User Name" +msgstr "" + +msgid "Uses providers enabled for outgoing calls" +msgstr "" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +#~ msgid "" +#~ "Designate numbers that are allowed to call through this system and which " +#~ "user's privileges it will have." +#~ msgstr "设定号码作为用户拥有使用交换机呼叫的权限。" diff --git a/feeds/luci/applications/luci-app-pbx/po/zh-tw/pbx.po b/feeds/luci/applications/luci-app-pbx/po/zh-tw/pbx.po new file mode 100644 index 0000000..aa05be7 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/po/zh-tw/pbx.po @@ -0,0 +1,507 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-16 13:59+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "進階設定" + +msgid "Available" +msgstr "可運用" + +msgid "" +"Avoid using anything but alpha-numeric characters, space, comma, and period." +msgstr "除了字母數字字符,空格,逗號和句號其它一概不用." + +msgid "Away" +msgstr "離線" + +msgid "Blacklisted Numbers" +msgstr "列入黑名單號碼" + +msgid "Call Routing" +msgstr "路由呼叫" + +msgid "Call-back Numbers" +msgstr "" + +msgid "Call-back Provider" +msgstr "" + +msgid "Call-through Numbers" +msgstr "通話接通號碼" + +msgid "Copy-paste large lists of numbers here." +msgstr "號碼大型清單複製貼上此地" + +msgid "" +"Designate numbers that are allowed to call through this system and which " +"user's privileges they will have." +msgstr "" + +msgid "" +"Designate numbers to whom the system will hang up and call back, which " +"provider will be used to call them, and which user's privileges will be " +"granted to them." +msgstr "" + +msgid "Dials numbers unmatched elsewhere" +msgstr "撥號它處號碼不符" + +msgid "Do Not Disturb" +msgstr "勿擾中" + +msgid "Domain/IP Address/Dynamic Domain" +msgstr "網域/IP位址/動態網域" + +msgid "Dynamic List of Blacklisted Numbers" +msgstr "黑名單動態列表" + +msgid "Email" +msgstr "郵件信箱" + +msgid "Enable Incoming Calls (Register via SIP)" +msgstr "啟用來話呼叫(透過SIP註冊)" + +msgid "Enable Incoming Calls (set Status below)" +msgstr "啟用來話呼叫(在下面設定狀態)" + +msgid "Enable Outgoing Calls" +msgstr "啟用外撥" + +msgid "Enabled" +msgstr "已啟用" + +msgid "" +"Enter a VoIP provider to use for call-back in the format username@some.host." +"name, as listed in \"Outgoing Calls\" above. It's easiest to copy and paste " +"the providers from above. Invalid entries, including providers not enabled " +"for outgoing calls, will be rejected silently." +msgstr "" + +msgid "" +"Enter phone numbers that you want to decline calls from automatically. You " +"should probably omit the country code and any leading zeroes, but please " +"experiment to make sure you are blocking numbers from your desired area " +"successfully." +msgstr "" +"打入你允許自動通話的號碼. 你或許可以忽略國碼和0字開頭, 但僅供實驗以確保期望區" +"的號碼被阻斷成功." + +msgid "" +"Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices " +"you will use ONLY locally and never from a remote location." +msgstr "" +"要設定SIP設備在Server/Registrar內打入IP(或IP:埠號)你僅能本地端使用絕不要打入" +"遠端位置" + +msgid "" +"Enter this hostname (or hostname:port) in the Server/Registrar setting of " +"SIP devices you will use from a remote location (they will work locally too)." +msgstr "" +"要設定SIP設備從遠端使用(在本地端也一樣能執行),在Server/Registrar內打入主機名" +"稱(或主機名稱:埠號)" + +msgid "External SIP Port" +msgstr "外部SIP埠號" + +msgid "" +"For each provider enabled for incoming calls, here you can restrict which " +"users to ring on incoming calls. If the list is empty, the system will " +"indicate that all users enabled for incoming calls will ring. Invalid " +"usernames will be rejected silently. Also, entering a username here " +"overrides the user's setting to not receive incoming calls. This way, you " +"can make certain users ring only for specific providers. Entries can be made " +"in a space-separated list, and/or one per line by hitting enter after every " +"one." +msgstr "" + +msgid "" +"For each user enabled for outgoing calls you can restrict what providers the " +"user can use for outgoing calls. By default all users can use all providers. " +"To show up in the list below the user should be allowed to make outgoing " +"calls in the \"User Accounts\" page. Enter VoIP providers in the format " +"username@some.host.name, as listed in \"Outgoing Calls\" above. It's easiest " +"to copy and paste the providers from above. Invalid entries, including " +"providers not enabled for outgoing calls, will be rejected silently. Entries " +"can be made in a space-separated list, and/or one per line by hitting enter " +"after every one." +msgstr "" + +msgid "Full Name" +msgstr "全名" + +msgid "General Settings" +msgstr "一般設定" + +msgid "Google Accounts" +msgstr "Google帳戶" + +msgid "Google Talk Status" +msgstr "Google Talk狀態" + +msgid "Google Talk Status Message" +msgstr "Google Talk訊息狀態" + +msgid "Google Voice/Talk Accounts" +msgstr "Google 語音/簡訊帳戶" + +msgid "Hang-up Delay" +msgstr "" + +msgid "" +"Here you must configure at least one SIP account, that you will use to " +"register with this service. Use this account either in an Analog Telephony " +"Adapter (ATA), or in a SIP software like CSipSimple, Linphone, or Sipdroid " +"on your smartphone, or Ekiga, Linphone, or X-Lite on your computer. By " +"default, all SIP accounts will ring simultaneously if a call is made to one " +"of your VoIP provider accounts or GV numbers." +msgstr "" + +msgid "" +"How long to wait before hanging up. If the provider you use to dial " +"automatically forwards to voicemail, you can set this value to a delay that " +"will allow you to hang up before your call gets forwarded and you get billed " +"for it." +msgstr "" + +msgid "" +"If setting Server/Registrar to %s or %s does not work for you, try setting " +"it to %s or %s and entering this port number in a separate field that " +"specifies the Server/Registrar port number. Beware that some devices have a " +"confusing setting that sets the port where SIP requests originate from on " +"the SIP device itself (the bind port). The port specified on this page is " +"NOT this bind port but the port this service listens on." +msgstr "" + +msgid "" +"If you experience jittery or high latency audio during heavy downloads, you " +"may want to enable QoS. QoS prioritizes traffic to and from your network for " +"specified ports and IP addresses, resulting in better latency and throughput " +"for sound in our case. If enabled below, a QoS rule for this service will be " +"configured by the PBX automatically, but you must visit the QoS " +"configuration page (Network->QoS) to configure other critical QoS settings " +"like Download and Upload speed." +msgstr "" + +msgid "" +"If you have more than one account that can make outgoing calls, you should " +"enter a list of phone numbers and/or prefixes in the following fields for " +"each provider listed. Invalid prefixes are removed silently, and only 0-9, " +"X, Z, N, #, *, and + are valid characters. The letter X matches 0-9, Z " +"matches 1-9, and N matches 2-9. For example to make calls to Germany through " +"a provider, you can enter 49. To make calls to North America, you can enter " +"1NXXNXXXXXX. If one of your providers can make \"local\" calls to an area " +"code like New York's 646, you can enter 646NXXXXXX for that provider. You " +"should leave one account with an empty list to make calls with it by " +"default, if no other provider's prefixes match. The system will " +"automatically replace an empty list with a message that the provider dials " +"all numbers not matched by another provider's prefixes. Be as specific as " +"possible (i.e. 1NXXNXXXXXX is better than 1). Please note all international " +"dial codes are discarded (e.g. 00, 011, 010, 0011). Entries can be made in a " +"space-separated list, and/or one per line by hitting enter after every one." +msgstr "" + +msgid "Incoming Calls" +msgstr "來電呼叫" + +msgid "Insert QoS Rules" +msgstr "插入QoS規則" + +msgid "Makes Outgoing Calls" +msgstr "開啟外撥" + +msgid "NOTE: There are no Google or SIP provider accounts configured." +msgstr "注意:尚缺Google或者SIP提供者帳戶被設置" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for incoming " +"calls." +msgstr "注意:尚缺Google或者SIP供應商帳戶被啟用才能接收來電呼叫" + +msgid "" +"NOTE: There are no Google or SIP provider accounts enabled for outgoing " +"calls." +msgstr "注意:尚缺Google或者SIP供應商帳戶被啟用才能外撥." + +msgid "NOTE: There are no local user accounts configured." +msgstr "注意:尚未設置本地端帳戶" + +msgid "NOTE: There are no local user accounts enabled for outgoing calls." +msgstr "注意:啟用本地端帳戶才能外撥" + +msgid "No" +msgstr "不" + +msgid "Number of Seconds to Ring" +msgstr "響鈴秒數" + +msgid "Outbound Proxy" +msgstr "外連代理" + +msgid "Outgoing Calls" +msgstr "去電外撥" + +msgid "PBX Main Page" +msgstr "PBX總機主頁" + +msgid "PBX Service Status" +msgstr "PBX服務狀態" + +msgid "PIN" +msgstr "PIN碼" + +msgid "Password" +msgstr "密碼" + +msgid "" +"Pick a random port number between 6500 and 9500 for the service to listen " +"on. Do not pick the standard 5060, because it is often subject to brute-" +"force attacks. When finished, (1) click \"Save and Apply\", and (2) look in " +"the \"SIP Device/Softphone Accounts\" section for updated Server and Port " +"settings for your SIP Devices/Softphones." +msgstr "" + +msgid "Port Setting for SIP Devices" +msgstr "SIP設備的埠號設置" + +msgid "Providers Used for Outgoing Calls" +msgstr "已採用的外撥供應商" + +msgid "QoS Settings" +msgstr "QoS語音品質設置" + +msgid "RTP Port Range End" +msgstr "RTP協定埠域結束" + +msgid "RTP Port Range Start" +msgstr "RTP協定埠域啟始" + +msgid "" +"RTP traffic carries actual voice packets. This is the start of the port " +"range that will be used for setting up RTP communication. It's usually OK to " +"leave this at the default value." +msgstr "" + +msgid "Receives Incoming Calls" +msgstr "接受來電呼叫" + +msgid "Remote Usage" +msgstr "遠端啟用" + +msgid "Rings users enabled for incoming calls" +msgstr "來電呼叫時震鈴通知使用者" + +msgid "SIP Accounts" +msgstr "SIP帳戶" + +msgid "SIP Device/Softphone Accounts" +msgstr "SIP設備/軟體式手機帳戶" + +msgid "SIP Provider Accounts" +msgstr "SIP供應商帳戶" + +msgid "SIP Realm (needed by some providers)" +msgstr "SIP領域(某些供應商需用到)" + +msgid "SIP Server/Registrar" +msgstr "SIP伺服器/登記處" + +msgid "SIP Server/Registrar Port" +msgstr "SIP伺服器/登記埠" + +msgid "Server Setting" +msgstr "伺服器設置" + +msgid "Server Setting for Local SIP Devices" +msgstr "本地SIP設備的伺服器設置" + +msgid "Server Setting for Remote SIP Devices" +msgstr "遠端SIP設備的伺服器設置" + +msgid "Service Status" +msgstr "服務狀態" + +msgid "" +"Set the number of seconds to ring users upon incoming calls before hanging " +"up or going to voicemail, if the voicemail is installed and enabled." +msgstr "" + +msgid "Space-Separated List of Blacklisted Numbers" +msgstr "以空格分隔的黑名單號碼列表" + +msgid "Specify numbers individually here. Press enter to add more numbers." +msgstr "在此指定獨立號碼. 按enter 可新增更多號碼" + +msgid "" +"Specify numbers individually here. Press enter to add more numbers. You will " +"have to experiment with what country and area codes you need to add to the " +"number." +msgstr "" + +msgid "" +"The number(s) specified above will be able to dial out with this user's " +"providers. Invalid usernames, including users not enabled for outgoing " +"calls, are dropped silently. Please verify that the entry was accepted." +msgstr "" + +msgid "" +"This configuration page allows you to configure a phone system (PBX) service " +"which permits making phone calls through multiple Google and SIP (like " +"Sipgate, SipSorcery, and Betamax) accounts and sharing them among many SIP " +"devices. Note that Google accounts, SIP accounts, and local user accounts " +"are configured in the \"Google Accounts\", \"SIP Accounts\", and \"User " +"Accounts\" sub-sections. You must add at least one User Account to this PBX, " +"and then configure a SIP device or softphone to use the account, in order to " +"make and receive calls with your Google/SIP accounts. Configuring multiple " +"users will allow you to make free calls between all users, and share the " +"configured Google and SIP accounts. If you have more than one Google and SIP " +"accounts set up, you should probably configure how calls to and from them " +"are routed in the \"Call Routing\" page. If you're interested in using your " +"own PBX from anywhere in the world, then visit the \"Remote Usage\" section " +"in the \"Advanced Settings\" page." +msgstr "" + +msgid "" +"This is the name that the VoIP server will use to identify itself when " +"registering to VoIP (SIP) providers. Some providers require this to a " +"specific string matching a hardware SIP device." +msgstr "" + +msgid "" +"This is where you indicate which Google/SIP accounts are used to call what " +"country/area codes, which users can use what SIP/Google accounts, how " +"incoming calls are routed, what numbers can get into this PBX with a " +"password, and what numbers are blacklisted." +msgstr "" + +msgid "" +"This is where you set up your Google (Talk and Voice) Accounts, in order to " +"start using them for dialing and receiving calls (voice chat and real phone " +"calls). Please make at least one voice call using the Google Talk plugin " +"installable through the GMail interface, and then log out from your account " +"everywhere. Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This is where you set up your SIP (VoIP) accounts ts like Sipgate, " +"SipSorcery, the popular Betamax providers, and any other providers with SIP " +"settings in order to start using them for dialing and receiving calls (SIP " +"uri and real phone calls). Click \"Add\" to add as many accounts as you wish." +msgstr "" + +msgid "" +"This option should be set to \"Yes\" if you have a DID (real telephone " +"number) associated with this SIP account or want to receive SIP uri calls " +"through this provider." +msgstr "" + +msgid "" +"This section contains settings that do not need to be changed under normal " +"circumstances. In addition, here you can configure your system for use with " +"remote SIP devices, and resolve call quality issues by enabling the " +"insertion of QoS rules." +msgstr "" + +msgid "" +"Use (four to five digit) numeric user name if you are connecting normal " +"telephones with ATAs to this system (so they can dial user names)." +msgstr "" + +msgid "" +"Use this account to make outgoing calls as configured in the \"Call Routing" +"\" section." +msgstr "" + +msgid "Use this account to make outgoing calls." +msgstr "使用這個帳號外撥." + +msgid "User Accounts" +msgstr "使用者帳號" + +msgid "User Agent String" +msgstr "用戶代理字串" + +msgid "User Name" +msgstr "用戶名稱" + +msgid "Uses providers enabled for outgoing calls" +msgstr "採用供應商啟用以便外撥" + +msgid "" +"When somebody starts voice chat with your GTalk account or calls the GVoice, " +"number (if you have Google Voice), the call will be forwarded to any users " +"that are online (registered using a SIP device or softphone) and permitted " +"to receive the call. If you have Google Voice, you must go to your GVoice " +"settings and forward calls to Google chat in order to actually receive calls " +"made to your GVoice number. If you have trouble receiving calls from GVoice, " +"experiment with the Call Screening option in your GVoice Settings. Finally, " +"make sure no other client is online with this account (browser in gmail, " +"mobile/desktop Google Talk App) as it may interfere." +msgstr "" + +msgid "" +"When your password is saved, it disappears from this field and is not " +"displayed for your protection. The previously saved password will be changed " +"only when you enter a value different from the saved one." +msgstr "" + +msgid "Yes" +msgstr "是" + +msgid "" +"You can enter your domain name, external IP address, or dynamic domain name " +"here. The best thing to input is a static IP address. If your IP address is " +"dynamic and it changes, your configuration will become invalid. Hence, it's " +"recommended to set up Dynamic DNS in this case. and enter your Dynamic DNS " +"hostname here. You can configure Dynamic DNS with the luci-app-ddns package." +msgstr "" + +msgid "You can specify a real name to show up in the Caller ID here." +msgstr "你可以在此指定一個真實名稱以便顯示在來電ID" + +msgid "" +"You can use your SIP devices/softphones with this system from a remote " +"location as well, as long as your Internet Service Provider gives you a " +"public IP. You will be able to call other local users for free (e.g. other " +"Analog Telephone Adapters (ATAs)) and use your VoIP providers to make calls " +"as if you were local to the PBX. After configuring this tab, go back to " +"where users are configured and see the new Server and Port setting you need " +"to configure the remote SIP devices with. Please note that if this PBX is " +"not running on your router/gateway, you will need to configure port " +"forwarding (NAT) on your router/gateway. Please forward the ports below (SIP " +"port and RTP range) to the IP address of the device running this PBX." +msgstr "" +"不管多遠,只要能取得ISP提供的公眾合法IP,依然可以使用這個系統的SIP設備/PC電話表" +"現一樣的好.你將能夠免費呼叫其他本地端用戶(e.g 其它類比電話機(ATAs)和使用你的" +"VoIP供應商講電話就像你在使用本地的PBX總機電話一樣.在設定這個標籤後, 需回到用" +"戶設定並且查看新的伺服器和埠設定以便能設定遠端SIP設備.請注意假如PBX總機若不在" +"你的路由器/GW上執行,你將必須在你的路由器/GW上設定埠轉發(NAT).在PBX主機上請轉" +"發下列(SIP埠+RTP所採用的範圍埠)埠號址定到跑PBX服務設備上的IP位址." + +msgid "" +"Your PIN disappears when saved for your protection. It will be changed only " +"when you enter a value different from the saved one. Leaving the PIN empty " +"is possible, but please beware of the security implications." +msgstr "" +"當存檔時為保護起見你的PIN碼將不會顯示. 除非你打入不同於原始存檔的值它才會變" +"更. 也可以把PIN碼保留空白, 但要提防會有安全的隱憂." + +msgid "" +"Your password disappears when saved for your protection. It will be changed " +"only when you enter a value different from the saved one." +msgstr "" +"當存檔時為保護起見你的密碼將不會顯示. 除非你打入不同於原始存檔的值它才會變更." + +#~ msgid "" +#~ "Designate numbers that are allowed to call through this system and which " +#~ "user's privileges it will have." +#~ msgstr "依據系統和戶用的權限允許通話的指定號碼" diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx b/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx new file mode 100644 index 0000000..ca7c166 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx @@ -0,0 +1 @@ +config 'main' 'connection_status' diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-advanced b/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-advanced new file mode 100644 index 0000000..39da6f8 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-advanced @@ -0,0 +1,5 @@ +config 'settings' 'advanced' + option 'useragent' 'PBX' + option 'ringtime' '30' + option 'rtpstart' '19850' + option 'rtpend' '19900' diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-calls b/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-calls new file mode 100644 index 0000000..822bd4a --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-calls @@ -0,0 +1,7 @@ +config 'call_routing' 'outgoing_calls' + +config 'call_routing' 'incoming_calls' + +config 'call_routing' 'providers_user_can_use' + +config 'call_routing' 'blacklisting' diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-google b/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-google new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-users b/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-users new file mode 100644 index 0000000..a4277b1 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-users @@ -0,0 +1 @@ +config 'user' 'server' diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-voip b/feeds/luci/applications/luci-app-pbx/root/etc/config/pbx-voip new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/init.d/pbx-asterisk b/feeds/luci/applications/luci-app-pbx/root/etc/init.d/pbx-asterisk new file mode 100755 index 0000000..e05ae11 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/init.d/pbx-asterisk @@ -0,0 +1,837 @@ +#!/bin/sh /etc/rc.common +# +# Copyright 2011 Iordan Iordanov +# +# This file is part of luci-pbx. +# +# luci-pbx is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# luci-pbx is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with luci-pbx. If not, see . + +. /lib/functions.sh + +START=60 + +# Some global variables +MODULENAME=pbx +USERAGENT="PBX" +HANGUPCNTXT=hangup-call-context +GTALKUNVL=unavailable + +ASTUSER=nobody +ASTGROUP=nogroup +ASTDIRSRECURSIVE="/var/run/asterisk /var/log/asterisk /var/spool/asterisk" +ASTDIRS="/usr/lib/asterisk" +ASTSOUNDSDIR="/usr/lib/asterisk/sounds" + +TEMPLATEDIR=/etc/${MODULENAME}-asterisk +PBXSOUNDSDIR=$TEMPLATEDIR/sounds +VMTEMPLATEDIR=/etc/${MODULENAME}-voicemail +VMSOUNDSDIR=$VMTEMPLATEDIR/sounds +ASTERISKDIR=/etc/asterisk +WORKDIR=/tmp/$MODULENAME.$$ +MD5SUMSFILE=/tmp/$MODULENAME-sums.$$ + +TMPL_ASTERISK=$TEMPLATEDIR/asterisk.conf.TEMPLATE +TMPL_GTALK=$TEMPLATEDIR/gtalk.conf.TEMPLATE +TMPL_INDICATIONS=$TEMPLATEDIR/indications.conf.TEMPLATE +TMPL_LOGGER=$TEMPLATEDIR/logger.conf.TEMPLATE +TMPL_MANAGER=$TEMPLATEDIR/manager.conf.TEMPLATE +TMPL_MODULES=$TEMPLATEDIR/modules.conf.TEMPLATE +TMPL_RTP=$TEMPLATEDIR/rtp.conf.TEMPLATE + +TMPL_EXTCTHRUCHECKHDR=$TEMPLATEDIR/extensions_disa-check_header.conf.TEMPLATE +TMPL_EXTCTHRUCHECK=$TEMPLATEDIR/extensions_disa-check.conf.TEMPLATE +TMPL_EXTCTHRUCHECKFTR=$TEMPLATEDIR/extensions_disa-check_footer.conf.TEMPLATE +TMPL_EXTCTHRUHDR=$TEMPLATEDIR/extensions_disa_header.conf.TEMPLATE +TMPL_EXTCTHRU=$TEMPLATEDIR/extensions_disa.conf.TEMPLATE +TMPL_EXTCTHRUNOPIN=$TEMPLATEDIR/extensions_disa-nopin.conf.TEMPLATE + +TMPL_EXTCBACKCHECKHDR=$TEMPLATEDIR/extensions_callback-check_header.conf.TEMPLATE +TMPL_EXTCBACKCHECK=$TEMPLATEDIR/extensions_callback-check.conf.TEMPLATE +TMPL_EXTCBACKCHECKFTR=$TEMPLATEDIR/extensions_callback-check_footer.conf.TEMPLATE +TMPL_EXTCBACKHDR=$TEMPLATEDIR/extensions_callback_header.conf.TEMPLATE +TMPL_EXTCBACKSIP=$TEMPLATEDIR/extensions_callback_sip.conf.TEMPLATE +TMPL_EXTCBACKGTALK=$TEMPLATEDIR/extensions_callback_gtalk.conf.TEMPLATE + +TMPL_EXTENSIONS=$TEMPLATEDIR/extensions.conf.TEMPLATE + +TMPL_EXTVMDISABLED=$TEMPLATEDIR/extensions_voicemail_disabled.conf.TEMPLATE +TMPL_EXTVMENABLED=$TEMPLATEDIR/extensions_voicemail_enabled.conf.TEMPLATE + +TMPL_EXTBLKLIST=$TEMPLATEDIR/extensions_blacklist.conf.TEMPLATE +TMPL_EXTBLKLISTFTR=$TEMPLATEDIR/extensions_blacklist_footer.conf.TEMPLATE +TMPL_EXTBLKLISTHDR=$TEMPLATEDIR/extensions_blacklist_header.conf.TEMPLATE + +TMPL_EXTDEFAULT=$TEMPLATEDIR/extensions_default.conf.TEMPLATE +TMPL_EXTDEFAULTUSER=$TEMPLATEDIR/extensions_default_user.conf.TEMPLATE + +TMPL_EXTINCNTXTSIP=$TEMPLATEDIR/extensions_incoming_context_sip.conf.TEMPLATE +TMPL_EXTINCNTXTGTALKHDR=$TEMPLATEDIR/extensions_incoming_context_gtalk_header.conf.TEMPLATE +TMPL_EXTINCNTXTGTALK=$TEMPLATEDIR/extensions_incoming_context_gtalk.conf.TEMPLATE + +TMPL_EXTUSERCNTXT=$TEMPLATEDIR/extensions_user_context.conf.TEMPLATE +TMPL_EXTUSERCNTXTFTR=$TEMPLATEDIR/extensions_user_context_footer.conf.TEMPLATE +TMPL_EXTUSERCNTXTHDR=$TEMPLATEDIR/extensions_user_context_header.conf.TEMPLATE + +TMPL_EXTOUTHDR=$TEMPLATEDIR/extensions_default_outgoing_header.conf.TEMPLATE +TMPL_EXTOUTGTALK=$TEMPLATEDIR/extensions_outgoing_gtalk.conf.TEMPLATE +TMPL_EXTOUTLOCAL=$TEMPLATEDIR/extensions_outgoing_dial_local_user.conf.TEMPLATE +TMPL_EXTOUTSIP=$TEMPLATEDIR/extensions_outgoing_sip.conf.TEMPLATE + +TMPL_JABBER=$TEMPLATEDIR/jabber.conf.TEMPLATE +TMPL_JABBERUSER=$TEMPLATEDIR/jabber_users.conf.TEMPLATE +TMPL_SIP=$TEMPLATEDIR/sip.conf.TEMPLATE +TMPL_SIPPEER=$TEMPLATEDIR/sip_peer.TEMPLATE +TMPL_SIPREG=$TEMPLATEDIR/sip_registration.TEMPLATE +TMPL_SIPUSR=$TEMPLATEDIR/sip_user.TEMPLATE + +TMPL_MSMTPDEFAULT=$VMTEMPLATEDIR/pbx-msmtprc-defaults.TEMPLATE +TMPL_MSMTPACCOUNT=$VMTEMPLATEDIR/pbx-msmtprc-account.TEMPLATE +TMPL_MSMTPAUTH=$VMTEMPLATEDIR/pbx-msmtprc-account-auth.TEMPLATE +TMPL_MSMTPACCTDFLT=$VMTEMPLATEDIR/pbx-msmtprc-account-default.TEMPLATE + + +INCLUDED_FILES="$WORKDIR/extensions_blacklist.conf $WORKDIR/extensions_callthrough.conf\ + $WORKDIR/extensions_incoming.conf $WORKDIR/extensions_incoming_gtalk.conf\ + $WORKDIR/extensions_user.conf $WORKDIR/jabber_users.conf\ + $WORKDIR/sip_peers.conf $WORKDIR/sip_registrations.conf\ + $WORKDIR/sip_users.conf $WORKDIR/extensions_voicemail.conf\ + $WORKDIR/extensions_default.conf" + + +# In this string, we concatenate all local users enabled to receive calls +# readily formatted for the Dial command. +localusers_to_ring="" + +# In this string, we keep a list of all users that are enabled for outgoing +# calls. It is used at the end to create the user contexts. +localusers_can_dial="" + +# In this string, we put together a space-separated list of provider names +# (alphanumeric, with all non-alpha characters replaced with underscores), +# which will be used to dial out by default (whose outgoing contexts will +# be included in users' contexts by default. +outbound_providers="" +sip_outbound_providers="" +gtalk_outbound_providers="" + +# Function which escapes non-alpha-numeric characters in a string +escape_non_alpha() { + echo $@ | sed 's/\([^a-zA-Z0-9]\)/\\\1/g' +} + +# Function which replaces non-alpha-numeric characters with an underscore +sub_underscore_for_non_alpha() { + echo $@ | sed 's/[^a-zA-Z0-9]/_/g' +} + +# Copies the template files which we don't edit. +copy_unedited_templates_over() +{ + cp $TMPL_ASTERISK $WORKDIR/asterisk.conf + cp $TMPL_GTALK $WORKDIR/gtalk.conf + cp $TMPL_INDICATIONS $WORKDIR/indications.conf + cp $TMPL_LOGGER $WORKDIR/logger.conf + cp $TMPL_MANAGER $WORKDIR/manager.conf + cp $TMPL_MODULES $WORKDIR/modules.conf + # If this file isn't present at this stage, voicemail is disabled. + [ ! -f $WORKDIR/extensions_voicemail.conf ] && \ + cp $TMPL_EXTVMDISABLED $WORKDIR/extensions_voicemail.conf +} + +# Touches all the included files, to prevent asterisk from refusing to +# start if a config item is missing and an included config file isn't created. +create_included_files() +{ + touch $INCLUDED_FILES +} + +# Puts together all the extensions.conf related configuration. +pbx_create_extensions_config() +{ + local ringtime + config_get ringtime advanced ringtime + + sed "s/|RINGTIME|/$ringtime/" $TMPL_EXTENSIONS > $WORKDIR/extensions.conf + mv $WORKDIR/inext.TMP $WORKDIR/extensions_incoming.conf + cp $TMPL_EXTINCNTXTGTALKHDR $WORKDIR/extensions_incoming_gtalk.conf + cat $WORKDIR/outextgtalk.TMP >> $WORKDIR/extensions_incoming_gtalk.conf 2>/dev/null + rm -f $WORKDIR/outextgtalk.TMP + mv $WORKDIR/blacklist.TMP $WORKDIR/extensions_blacklist.conf + mv $WORKDIR/userext.TMP $WORKDIR/extensions_user.conf + + cp $TMPL_EXTCTHRUHDR $WORKDIR/extensions_callthrough.conf + cat $WORKDIR/callthrough.TMP >> $WORKDIR/extensions_callthrough.conf 2>/dev/null + rm -f $WORKDIR/callthrough.TMP + cat $TMPL_EXTCTHRUCHECKHDR >> $WORKDIR/extensions_callthrough.conf 2>/dev/null + cat $WORKDIR/callthroughcheck.TMP >> $WORKDIR/extensions_callthrough.conf 2>/dev/null + rm -f $WORKDIR/callthroughcheck.TMP + cat $TMPL_EXTCTHRUCHECKFTR >> $WORKDIR/extensions_callthrough.conf 2>/dev/null + + cp $TMPL_EXTCBACKHDR $WORKDIR/extensions_callback.conf + cat $WORKDIR/callback.TMP >> $WORKDIR/extensions_callback.conf 2>/dev/null + rm -f $WORKDIR/callback.TMP + cat $TMPL_EXTCBACKCHECKHDR >> $WORKDIR/extensions_callback.conf 2>/dev/null + cat $WORKDIR/callbackcheck.TMP >> $WORKDIR/extensions_callback.conf 2>/dev/null + rm -f $WORKDIR/callbackcheck.TMP + cat $TMPL_EXTCBACKCHECKFTR >> $WORKDIR/extensions_callback.conf 2>/dev/null + + rm -f $WORKDIR/outext-*.TMP + rm -f $WORKDIR/localext.TMP + sed "s/|LOCALUSERS|/$localusers_to_ring/g" $TMPL_EXTDEFAULT \ + > $WORKDIR/extensions_default.conf + cat $WORKDIR/inextuser.TMP >> $WORKDIR/extensions_default.conf + rm -f $WORKDIR/inextuser.TMP +} + +# Puts together all the sip.conf related configuration. +pbx_create_sip_config() +{ + mv $WORKDIR/sip_regs.TMP $WORKDIR/sip_registrations.conf + mv $WORKDIR/sip_peers.TMP $WORKDIR/sip_peers.conf + mv $WORKDIR/sip_users.TMP $WORKDIR/sip_users.conf +} + +# Creates the jabber.conf related config +pbx_create_jabber_config() +{ + cp $TMPL_JABBER $WORKDIR/jabber.conf + mv $WORKDIR/jabber.TMP $WORKDIR/jabber_users.conf +} + +# Gets rid of any config files from $ASTERISKDIR not found in $WORKDIR. +clean_up_asterisk_config_dir() +{ + for f in $ASTERISKDIR/* ; do + basef="`basename $f`" + if [ ! -e "$WORKDIR/$basef" ] ; then + rm -rf "$f" + fi + done +} + +# Compares md5sums of the config files in $WORKDIR to those +# in $ASTERISKDIR, and copies only changed files over to reduce +# wear on flash in embedded devices. +compare_configs_and_copy_changed() +{ + # First, compute md5sums of the config files in $WORKDIR. + cd $WORKDIR/ + md5sum * > $MD5SUMSFILE + + # Now, check the files in $ASTERISKDIR against the md5sums. + cd $ASTERISKDIR/ + changed_files="`md5sum -c $MD5SUMSFILE 2>/dev/null | fgrep ": FAILED" | awk -F: '{print $1}'`" + + rm -f $MD5SUMSFILE + + [ -z "$changed_files" ] && return + + # Now copy over the changed files. + for f in $changed_files ; do + cp "$WORKDIR/$f" "$ASTERISKDIR/$f" + done +} + +# Calls the functions that create the final config files +# Calls the function which compares which files have changed +# Puts the final touches on $ASTERISKDIR +# Gets rid of $WORKDIR +pbx_assemble_and_copy_config() +{ + mkdir -p $ASTERISKDIR + + copy_unedited_templates_over + create_included_files + pbx_create_extensions_config + pbx_create_sip_config + pbx_create_jabber_config + + touch $WORKDIR/features.conf + + # At this point, $WORKDIR should contain a complete, working config. + clean_up_asterisk_config_dir + + compare_configs_and_copy_changed + + [ ! -d $ASTERISKDIR/manager.d ] && mkdir -p $ASTERISKDIR/manager.d/ + + # Get rid of the working directory + rm -rf $WORKDIR/ +} + +# Creates configuration for a user and adds it to the temporary file that holds +# all users configured so far. +pbx_add_user() +{ + local fullname + local defaultuser + local rawdefaultuser + local secret + local ring + local can_call + + config_get fullname $1 fullname + fullname=`escape_non_alpha $fullname` + config_get rawdefaultuser $1 defaultuser + defaultuser=`escape_non_alpha $rawdefaultuser` + config_get secret $1 secret + secret=`escape_non_alpha $secret` + config_get ring $1 ring + config_get can_call $1 can_call + + [ -z "$defaultuser" -o -z "$secret" ] && return + [ -z "$fullname" ] && fullname="$defaultuser" + + sed "s/|DEFAULTUSER|/$defaultuser/g" $TMPL_SIPUSR > $WORKDIR/sip_user.tmp + + if [ "$can_call" = "yes" ] ; then + # Add user to list of all users that are allowed to make calls. + localusers_can_dial="$localusers_can_dial $rawdefaultuser" + sed -i "s/|CONTEXTNAME|/$defaultuser/g" $WORKDIR/sip_user.tmp + else + sed -i "s/|CONTEXTNAME|/$HANGUPCNTXT/g" $WORKDIR/sip_user.tmp + fi + + # Add this user's configuration to the temp file containing all user configs. + sed "s/|FULLNAME|/$fullname/" $WORKDIR/sip_user.tmp |\ + sed "s/|SECRET|/$secret/g" >> $WORKDIR/sip_users.TMP + + if [ "$ring" = "yes" ] ; then + if [ -z "$localusers_to_ring" ] ; then + localusers_to_ring="SIP\/$defaultuser" + else + localusers_to_ring="$localusers_to_ring\&SIP\/$defaultuser" + fi + fi + + # Add configuration which allows local users to call each other. + sed "s/|DEFAULTUSER|/$defaultuser/g" $TMPL_EXTOUTLOCAL >> $WORKDIR/localext.TMP + + # Add configuration which puts calls to users through the default + # context, so that blacklists and voicemail take effect for this user. + sed "s/|DEFAULTUSER|/$defaultuser/g" $TMPL_EXTDEFAULTUSER >> $WORKDIR/inextuser.TMP + + rm -f $WORKDIR/sip_user.tmp +} + +# Creates configuration for a Google account, and adds it to the temporary file that holds +# all accounts configured so far. +# Also creates the outgoing extensions which are used in users' outgoing contexts. +pbx_add_jabber() +{ + local username + local secret + local numprefix + local register + local make_outgoing_calls + local name + local users_to_ring + local status + local statusmessage + + config_get username $1 username + username=`escape_non_alpha $username` + config_get secret $1 secret + secret=`escape_non_alpha $secret` + #TODO: Is this really necessary here? Numprefix is retrieved below. + config_get numprefix $1 numprefix + config_get register $1 register + config_get make_outgoing_calls $1 make_outgoing_calls + config_get name $1 name + config_get status $1 status + status=`escape_non_alpha $status` + config_get statusmessage $1 statusmessage + statusmessage=`escape_non_alpha $statusmessage` + + [ -z "$username" -o -z "$secret" ] && return + + # Construct a jabber entry for this provider. + sed "s/|USERNAME|/$username/g" $TMPL_JABBERUSER |\ + sed "s/|NAME|/$name/g" > $WORKDIR/jabber.tmp + + if [ "$register" = yes ] ; then + # If this provider is enabled for incoming calls, we need to set the + # status of the user to something other than unavailable in order to receive calls. + sed -i "s/|STATUS|/$status/g" $WORKDIR/jabber.tmp + sed -i "s/|STATUSMESSAGE|/\"$statusmessage\"/g" $WORKDIR/jabber.tmp + + users_to_ring="`uci -q get ${MODULENAME}-calls.incoming_calls.$name`" + # If no users have been specified to ring, we ring all users enabled for incoming calls. + if [ -z "$users_to_ring" ] ; then + users_to_ring=$localusers_to_ring + else + # Else, we cook up a string formatted for the Dial command + # with the specified users (SIP/user1&SIP/user2&...). We do it + # with set, shift and a loop in order to be more tolerant of ugly whitespace + # messes entered by users. + set $users_to_ring + users_to_ring="SIP\/$1" && shift + for u in $@ ; do u=`escape_non_alpha $u` ; users_to_ring=$users_to_ring\\\&SIP\\\/$u ; done + fi + + # Now, we add this account to the gtalk incoming context. + sed "s/|USERNAME|/$username/g" $TMPL_EXTINCNTXTGTALK |\ + sed "s/|LOCALUSERS|/$users_to_ring/g" >> $WORKDIR/outextgtalk.TMP + else + sed -i "s/|STATUS|/$GTALKUNVL/g" $WORKDIR/jabber.tmp + sed -i "s/|STATUSMESSAGE|/\"\"/g" $WORKDIR/jabber.tmp + fi + + # Add this account's configuration to the temp file containing all account configs. + sed "s/|SECRET|/$secret/g" $WORKDIR/jabber.tmp >> $WORKDIR/jabber.TMP + + # If this provider is enabled for outgoing calls. + if [ "$make_outgoing_calls" = "yes" ] ; then + + numprefix="`uci -q get ${MODULENAME}-calls.outgoing_calls.$name`" + + # If no prefixes are specified, then we use "X" which matches any prefix. + [ -z "$numprefix" ] && numprefix="X" + + for p in $numprefix ; do + p=`escape_non_alpha $p` + sed "s/|NUMPREFIX|/$p/g" $TMPL_EXTOUTGTALK |\ + sed "s/|NAME|/$name/g" >> $WORKDIR/outext-$name.TMP + done + + # Add this provider to the list of enabled outbound providers. + if [ -z "$outbound_providers" ] ; then + outbound_providers="$name" + else + outbound_providers="$outbound_providers $name" + fi + + # Add this provider to the list of enabled gtalk outbound providers. + if [ -z "$gtalk_outbound_providers" ] ; then + gtalk_outbound_providers="$name" + else + gtalk_outbound_providers="$gtalk_outbound_providers $name" + fi + fi + + rm -f $WORKDIR/jabber.tmp +} + +# Creates configuration for a SIP provider account, and adds it to the temporary file that holds +# all accounts configured so far. +# Also creates the outgoing extensions which are used in users' outgoing contexts. +pbx_add_peer() +{ + local defaultuser + local secret + local host + local fromdomain + local register + local numprefix + local make_outgoing_calls + local name + local users_to_ring + local port + local outboundproxy + + config_get defaultuser $1 defaultuser + defaultuser=`escape_non_alpha $defaultuser` + config_get secret $1 secret + secret=`escape_non_alpha $secret` + config_get host $1 host + host=`escape_non_alpha $host` + config_get port $1 port + config_get outbountproxy $1 outboundproxy + outbountproxy=`escape_non_alpha $outbountproxy` + config_get fromdomain $1 fromdomain + fromdomain=`escape_non_alpha $fromdomain` + config_get register $1 register + config_get numprefix $1 numprefix + config_get make_outgoing_calls $1 make_outgoing_calls + config_get name $1 name + + [ -z "$defaultuser" -o -z "$secret" -o -z "$host" ] && return + [ -z "$fromdomain" ] && fromdomain=$host + [ -n "$port" ] && port="port=$port" + [ -n "$outboundproxy" ] && outboundproxy="outboundproxy=$outboundproxy" + + # Construct a sip peer entry for this provider. + sed "s/|DEFAULTUSER|/$defaultuser/" $TMPL_SIPPEER > $WORKDIR/sip_peer.tmp + sed -i "s/|NAME|/$name/" $WORKDIR/sip_peer.tmp + sed -i "s/|FROMUSER|/$defaultuser/" $WORKDIR/sip_peer.tmp + sed -i "s/|SECRET|/$secret/" $WORKDIR/sip_peer.tmp + sed -i "s/|HOST|/$host/" $WORKDIR/sip_peer.tmp + sed -i "s/|PORT|/$port/" $WORKDIR/sip_peer.tmp + sed -i "s/|OUTBOUNDPROXY|/$outboundproxy/" $WORKDIR/sip_peer.tmp + # Add this account's configuration to the temp file containing all account configs. + sed "s/|FROMDOMAIN|/$host/" $WORKDIR/sip_peer.tmp >> $WORKDIR/sip_peers.TMP + + # If this provider is enabled for incoming calls. + if [ "$register" = "yes" ] ; then + # Then we create a registration string for this provider. + sed "s/|DEFAULTUSER|/$defaultuser/g" $TMPL_SIPREG > $WORKDIR/sip_reg.tmp + sed -i "s/|SECRET|/$secret/g" $WORKDIR/sip_reg.tmp + sed "s/|NAME|/$name/g" $WORKDIR/sip_reg.tmp >> $WORKDIR/sip_regs.TMP + + users_to_ring="`uci -q get ${MODULENAME}-calls.incoming_calls.$name`" + # If no users have been specified to ring, we ring all users enabled for incoming calls. + if [ -z "$users_to_ring" ] ; then + users_to_ring=$localusers_to_ring + else + # Else, we cook up a string formatted for the Dial command + # with the specified users (SIP/user1&SIP/user2&...). We do it + # with set, shift and a loop in order to be more tolerant of ugly whitespace + # messes entered by users. + set $users_to_ring + users_to_ring="SIP\/$1" && shift + for u in $@ ; do users_to_ring=$users_to_ring\\\&SIP\\\/$u ; done + fi + + # And we create an incoming calls context for this provider. + sed "s/|NAME|/$name/g" $TMPL_EXTINCNTXTSIP |\ + sed "s/|LOCALUSERS|/$users_to_ring/g" >> $WORKDIR/inext.TMP + fi + + # If this provider is enabled for outgoing calls. + if [ "$make_outgoing_calls" = "yes" ] ; then + + numprefix="`uci -q get ${MODULENAME}-calls.outgoing_calls.$name`" + # If no prefixes are specified, then we use "X" which matches any prefix. + [ -z "$numprefix" ] && numprefix="X" + for p in $numprefix ; do + p=`escape_non_alpha $p` + sed "s/|NUMPREFIX|/$p/g" $TMPL_EXTOUTSIP |\ + sed "s/|NAME|/$name/g" >> $WORKDIR/outext-$name.TMP + done + + # Add this provider to the list of enabled outbound providers. + if [ -z "$outbound_providers" ] ; then + outbound_providers="$name" + else + outbound_providers="$outbound_providers $name" + fi + + # Add this provider to the list of enabled sip outbound providers. + if [ -z "$sip_outbound_providers" ] ; then + sip_outbound_providers="$name" + else + sip_outbound_providers="$sip_outbound_providers $name" + fi + fi + + rm -f $WORKDIR/sip_peer.tmp + rm -f $WORKDIR/sip_reg.tmp +} + +# For all local users enabled for outbound calls, creates a context +# containing the extensions for Google and SIP accounts this user is +# allowed to use. +pbx_create_user_contexts() +{ + local providers + + for u in $localusers_can_dial ; do + u=`escape_non_alpha $u` + sed "s/|DEFAULTUSER|/$u/g" $TMPL_EXTUSERCNTXTHDR >> $WORKDIR/userext.TMP + cat $WORKDIR/localext.TMP >> $WORKDIR/userext.TMP + providers="`uci -q get ${MODULENAME}-calls.providers_user_can_use.$u`" + [ -z "$providers" ] && providers="$outbound_providers" + + # For each provider, cat the contents of outext-$name.TMP into the user's outgoing calls extension + for p in $providers ; do + [ -f $WORKDIR/outext-$p.TMP ] && cat $WORKDIR/outext-$p.TMP >> $WORKDIR/userext.TMP + done + cat $TMPL_EXTUSERCNTXTFTR >> $WORKDIR/userext.TMP + done +} + +# Creates the blacklist context which hangs up on blacklisted numbers. +pbx_add_blacklist() +{ + local blacklist1 + local blacklist2 + + config_get blacklist1 blacklisting blacklist1 + config_get blacklist2 blacklisting blacklist2 + + # We create the blacklist context no matter whether the blacklist + # actually contains entries or not, since the PBX will send calls + # to the context for a check against the list anyway. + cp $TMPL_EXTBLKLISTHDR $WORKDIR/blacklist.TMP + for n in $blacklist1 $blacklist2 ; do + n=`escape_non_alpha $n` + sed "s/|BLACKLISTITEM|/$n/g" $TMPL_EXTBLKLIST >> $WORKDIR/blacklist.TMP + done + cat $TMPL_EXTBLKLISTFTR >> $WORKDIR/blacklist.TMP +} + +# Creates the callthrough context which allows specified numbers to get +# into the PBX and dial out as the configured user. +pbx_add_callthrough() +{ + local callthrough_number_list + local defaultuser + local pin + local enabled + local F + + config_get callthrough_number_list $1 callthrough_number_list + config_get defaultuser $1 defaultuser + defaultuser=`escape_non_alpha $defaultuser` + config_get pin $1 pin + pin=`escape_non_alpha $pin` + config_get enabled $1 enabled + + [ "$enabled" = "no" ] && return + [ "$defaultuser" = "" ] && return + + for callthrough_number in $callthrough_number_list ; do + sed "s/|NUMBER|/$callthrough_number/g" $TMPL_EXTCTHRUCHECK >> $WORKDIR/callthroughcheck.TMP + + if [ -n "$pin" ] ; then F=$TMPL_EXTCTHRU ; else F=$TMPL_EXTCTHRUNOPIN ; fi + sed "s/|NUMBER|/$callthrough_number/g" $F |\ + sed "s/|DEFAULTUSER|/$defaultuser/" |\ + sed "s/|PIN|/$pin/" >> $WORKDIR/callthrough.TMP + done +} + + +# Creates the callback context which allows specified numbers to get +# a callback into the PBX and dial out as the configured user. +pbx_add_callback() +{ + local callback_number_list + local defaultuser + local pin + local enabled + local callback_provider + local callback_hangup_delay + local FB + local FT + + config_get callback_number_list $1 callback_number_list + config_get defaultuser $1 defaultuser + defaultuser=`escape_non_alpha $defaultuser` + config_get pin $1 pin + pin=`escape_non_alpha $pin` + config_get enabled $1 enabled + config_get callback_provider $1 callback_provider + callback_provider=`sub_underscore_for_non_alpha $callback_provider` + config_get callback_hangup_delay $1 callback_hangup_delay + + [ "$enabled" = "no" ] && return + [ "$defaultuser" = "" ] && return + + # If the provider is a SIP provider, set the file to use to $TMPL_EXTCBACKSIP + # otherwise, set it to $TMPL_EXTCBACKGTALK + if echo $sip_outbound_providers | grep -q $callback_provider 2>/dev/null + then + FB=$TMPL_EXTCBACKSIP + else + FB=$TMPL_EXTCBACKGTALK + fi + + for callback_number in $callback_number_list ; do + sed "s/|NUMBER|/$callback_number/g" $TMPL_EXTCBACKCHECK >> $WORKDIR/callbackcheck.TMP + + sed "s/|NUMBER|/$callback_number/g" $FB |\ + sed "s/|CALLBACKPROVIDER|/$callback_provider/" |\ + sed "s/|CALLBACKHUPDELAY|/$callback_hangup_delay/" >> $WORKDIR/callback.TMP + + # Perhaps a bit confusingly, we create "callthrough" configuration for callback + # numbers, because we use the same DISA construct as for callthrough. + if [ -n "$pin" ] ; then FT=$TMPL_EXTCTHRU ; else FT=$TMPL_EXTCTHRUNOPIN ; fi + sed "s/|NUMBER|/$callback_number/g" $FT |\ + sed "s/|DEFAULTUSER|/$defaultuser/" |\ + sed "s/|PIN|/$pin/" >> $WORKDIR/callthrough.TMP + done +} + + +# Creates sip.conf from its template. +pbx_cook_sip_template() +{ + local useragent + local externhost + local bindport + + config_get useragent advanced useragent + useragent=`escape_non_alpha $useragent` + config_get externhost advanced externhost + config_get bindport advanced bindport + + [ -z "$useragent" ] && useragent="$USERAGENT" + + sed "s/|USERAGENT|/$useragent/g" $TMPL_SIP > $WORKDIR/sip.conf + + if [ -z "$externhost" ] ; then + sed -i "s/externhost=|EXTERNHOST|//g" $WORKDIR/sip.conf + else + sed -i "s/|EXTERNHOST|/$externhost/g" $WORKDIR/sip.conf + fi + + if [ -z "$bindport" ] ; then + sed -i "s/bindport=|BINDPORT|//g" $WORKDIR/sip.conf + else + sed -i "s/|BINDPORT|/$bindport/g" $WORKDIR/sip.conf + fi + + +} + +# Creates rtp.conf from its template. +pbx_cook_rtp_template() +{ + local rtpstart + local rtpend + + config_get rtpstart advanced rtpstart + config_get rtpend advanced rtpend + + sed "s/|RTPSTART|/$rtpstart/" $TMPL_RTP |\ + sed "s/|RTPEND|/$rtpend/" > $WORKDIR/rtp.conf +} + +# Links any sound files found in $PBXSOUNDSDIR and $VMSOUNDSDIR +# into $ASTSOUNDSDIR for use by Asterisk. Does not overwrite files. +pbx_link_sounds() +{ + mkdir -p $ASTSOUNDSDIR + + for dir in $PBXSOUNDSDIR $VMSOUNDSDIR ; do + if [ -d $dir ] ; then + for f in $dir/* ; do + ln -s $f $ASTSOUNDSDIR 2>/dev/null + done + fi + done +} + + +# Makes sure the ownership of specified directories is proper. +pbx_fix_ownership() +{ + chown $ASTUSER:$ASTGROUP $ASTDIRS + chown $ASTUSER:$ASTGROUP -R $ASTDIRSRECURSIVE +} + + +# Creates voicemail config if installed and enabled. +pbx_configure_voicemail() +{ + local enabled + local global_timeout + local global_email_addresses + + local smtp_tls + local smtp_server + local smtp_port + local smtp_auth + local smtp_user + local smtp_password + + config_get enabled global_voicemail enabled + + # First check if voicemail is enabled. + [ "$enabled" != "yes" ] && return + + config_get global_timeout global_voicemail global_timeout + #config_get global_email_addresses global_voicemail global_email_addresses + config_get smtp_auth voicemail_smtp smtp_auth + config_get smtp_tls voicemail_smtp smtp_tls + config_get smtp_server voicemail_smtp smtp_server + config_get smtp_port voicemail_smtp smtp_port + config_get smtp_user voicemail_smtp smtp_user + smtp_user=`escape_non_alpha $smtp_user` + config_get smtp_password voicemail_smtp smtp_password + smtp_password=`escape_non_alpha $smtp_password` + + sed "s/|AUTH|/$smtp_auth/" $TMPL_MSMTPDEFAULT |\ + sed "s/|TLS|/$smtp_tls/" > $WORKDIR/pbx-msmtprc + + sed "s/|HOST|/$smtp_server/" $TMPL_MSMTPACCOUNT |\ + sed "s/|PORT|/$smtp_port/" >> $WORKDIR/pbx-msmtprc + + if [ "$smtp_auth" = "on" ] ; then + sed "s/|USER|/$smtp_user/" $TMPL_MSMTPAUTH |\ + sed "s/|PASSWORD|/$smtp_password/" >> $WORKDIR/pbx-msmtprc + fi + + cat $TMPL_MSMTPACCTDFLT >> $WORKDIR/pbx-msmtprc + + [ ! -f /etc/pbx-msmtprc ] && cp $WORKDIR/pbx-msmtprc /etc/pbx-msmtprc + cmp -s $WORKDIR/pbx-msmtprc /etc/pbx-msmtprc 1>/dev/null \ + || mv $WORKDIR/pbx-msmtprc /etc/pbx-msmtprc + chmod 600 /etc/pbx-msmtprc + chown nobody /etc/pbx-msmtprc + + # Copy over the extensions file which has voicemail enabled. + cp $TMPL_EXTVMENABLED $WORKDIR/extensions_voicemail.conf + + # Create the voicemail directory in /tmp + mkdir -p /tmp/voicemail + chown nobody /tmp/voicemail + + # Create the recordings directory + mkdir -p /etc/pbx-voicemail/recordings + chown nobody /etc/pbx-voicemail/recordings + + # Working around a bug in OpenWRT 12.09-rc1 + # TODO: REMOVE AS SOON AS POSSIBLE + chmod ugo+w /tmp +} + + +start() { + mkdir -p $WORKDIR + + # Create the users. + config_load ${MODULENAME}-users + config_foreach pbx_add_user local_user + + # Create configuration for each google account. + config_unset + config_load ${MODULENAME}-google + config_foreach pbx_add_jabber gtalk_jabber + + # Create configuration for each voip provider. + config_unset + config_load ${MODULENAME}-voip + config_foreach pbx_add_peer voip_provider + + # Create the user contexts, callthroug/back, and phone blacklist. + config_unset + config_load ${MODULENAME}-calls + pbx_create_user_contexts + pbx_add_blacklist + config_foreach pbx_add_callthrough callthrough_numbers + config_foreach pbx_add_callback callback_numbers + + # Prepare sip.conf using settings from the "advanced" section. + config_unset + config_load ${MODULENAME}-advanced + pbx_cook_sip_template + pbx_cook_rtp_template + + # Prepare voicemail config. + config_unset + config_load ${MODULENAME}-voicemail + pbx_configure_voicemail + + # Assemble the configuration, and copy changed files over. + config_unset + config_load ${MODULENAME}-advanced + pbx_assemble_and_copy_config + + # Link sound files + pbx_link_sounds + + # Enforce ownership of specified files and directories. + pbx_fix_ownership +} diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/asterisk.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/asterisk.conf.TEMPLATE new file mode 100644 index 0000000..ac54396 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/asterisk.conf.TEMPLATE @@ -0,0 +1,17 @@ +[directories] +astetcdir => /etc/asterisk +astmoddir => /usr/lib/asterisk/modules +astvarlibdir => /usr/lib/asterisk +astdbdir => /usr/lib/asterisk +astkeydir => /usr/lib/asterisk +astdatadir => /usr/lib/asterisk +astagidir => /usr/lib/asterisk/agi-bin +astspooldir => /var/spool/asterisk +astrundir => /var/run/asterisk +astlogdir => /var/log/asterisk + +[options] +languageprefix = yes +dumpcore = no +runuser = nobody +rungroup = nogroup diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/delayedcallback b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/delayedcallback new file mode 100755 index 0000000..903efe9 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/delayedcallback @@ -0,0 +1,18 @@ +#!/bin/sh + +# Check if there are more than one instance of this command +# with the same command line running at the same time for some +# reason, then quit. We are checking for the same +# commandline in order to permit two different callback +# attempts simultaneously. + +if ! grep -q "$@" /dev/shm/delayedcallback.[0-9]* 2>/dev/null +then + echo "$@" > /dev/shm/delayedcallback.$$ + sleep 25 + asterisk -r -x "$1 $2 \"$3\" $4 $5 $6" + rm /dev/shm/delayedcallback.$$ +# echo "`date` $@": >> /dev/shm/delayedcallback.log +#else +# echo "`date` ERROR: There appears to be a callback attempt in progress to: $@" >> /dev/shm/delayedcallback.err +fi diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions.conf.TEMPLATE new file mode 100644 index 0000000..c8966ed --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions.conf.TEMPLATE @@ -0,0 +1,25 @@ +[general] +static = yes +writeprotect = yes +clearglobalvars = no + +[globals] +RINGTIME => |RINGTIME| + +[default] + +[context-user-hangup-call-context] +exten => s,1,Hangup() +exten => _X.,1,Hangup() + +[context-catch-all] +exten => _[!-~].,1,Dial(SIP/${EXTEN},60,r) + +#include extensions_default.conf +#include extensions_voicemail.conf +#include extensions_incoming.conf +#include extensions_incoming_gtalk.conf +#include extensions_blacklist.conf +#include extensions_callthrough.conf +#include extensions_callback.conf +#include extensions_user.conf diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_blacklist.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_blacklist.conf.TEMPLATE new file mode 100644 index 0000000..54ee989 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_blacklist.conf.TEMPLATE @@ -0,0 +1 @@ +exten => s,n,Gotoif($[ "${CALLERID(NUM)}" = "|BLACKLISTITEM|" ]?context-user-hangup,s,1) diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_blacklist_footer.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_blacklist_footer.conf.TEMPLATE new file mode 100644 index 0000000..da964f2 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_blacklist_footer.conf.TEMPLATE @@ -0,0 +1,2 @@ +exten => s,n,Goto(${SOURCECONTEXT},${SOURCEEXTEN},doneblacklist) + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_blacklist_header.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_blacklist_header.conf.TEMPLATE new file mode 100644 index 0000000..de0e984 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_blacklist_header.conf.TEMPLATE @@ -0,0 +1,3 @@ + +[blacklist-call-context] +exten => s,1,Noop() diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback-check.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback-check.conf.TEMPLATE new file mode 100644 index 0000000..06b1a4b --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback-check.conf.TEMPLATE @@ -0,0 +1 @@ +exten => s,n,Gotoif($[ "${CALLERID(NUM)}" =~ ".*|NUMBER|" ]?context-user-callback,|NUMBER|,1) diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback-check_footer.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback-check_footer.conf.TEMPLATE new file mode 100644 index 0000000..282fe9e --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback-check_footer.conf.TEMPLATE @@ -0,0 +1,2 @@ +exten => s,n,Goto(${SOURCECONTEXT},${SOURCEEXTEN},donecallback) + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback-check_header.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback-check_header.conf.TEMPLATE new file mode 100644 index 0000000..be289c4 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback-check_header.conf.TEMPLATE @@ -0,0 +1,3 @@ + +[callback-check-call-context] +exten => s,1,Noop() diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback_gtalk.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback_gtalk.conf.TEMPLATE new file mode 100644 index 0000000..43eec78 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback_gtalk.conf.TEMPLATE @@ -0,0 +1,4 @@ +exten => |NUMBER|,1,System(/etc/pbx-asterisk/delayedcallback "channel originate Gtalk/gtalk-|CALLBACKPROVIDER|/|NUMBER|@voice.google.com extension |NUMBER|@disa-call-context" &) +exten => |NUMBER|,n,Wait(|CALLBACKHUPDELAY|) +exten => |NUMBER|,n,Hangup() + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback_header.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback_header.conf.TEMPLATE new file mode 100644 index 0000000..0b8fb4c --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback_header.conf.TEMPLATE @@ -0,0 +1 @@ +[context-user-callback] diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback_sip.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback_sip.conf.TEMPLATE new file mode 100644 index 0000000..300e9fa --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_callback_sip.conf.TEMPLATE @@ -0,0 +1,4 @@ +exten => |NUMBER|,1,System(/etc/pbx-asterisk/delayedcallback "channel originate SIP/|NUMBER|@peer-|CALLBACKPROVIDER| extension |NUMBER|@disa-call-context" &) +exten => |NUMBER|,n,Wait(|CALLBACKHUPDELAY|) +exten => |NUMBER|,n,Hangup() + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_default.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_default.conf.TEMPLATE new file mode 100644 index 0000000..35836e2 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_default.conf.TEMPLATE @@ -0,0 +1,11 @@ +[default-incoming-call-context] +exten => s,1,NoOp(${CALLERID}) +exten => s,n,Set(SOURCECONTEXT=default-incoming-call-context) +exten => s,n,Set(SOURCEEXTEN=s) +exten => s,n,Goto(blacklist-call-context,s,1) +exten => s,n(doneblacklist),NoOp() +exten => s,n,Goto(callback-check-call-context,s,1) +exten => s,n(donecallback),NoOp() +exten => s,n,Goto(disa-check-call-context,s,1) +exten => s,n(donedisacheck),Dial(|LOCALUSERS|,${RINGTIME},r) +exten => s,n,Goto(context-voicemail,s,1) diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_default_user.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_default_user.conf.TEMPLATE new file mode 100644 index 0000000..1910ff4 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_default_user.conf.TEMPLATE @@ -0,0 +1 @@ +exten => |DEFAULTUSER|,1,Goto(default-incoming-call-context,s,1) diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-check.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-check.conf.TEMPLATE new file mode 100644 index 0000000..ba2379b --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-check.conf.TEMPLATE @@ -0,0 +1 @@ +exten => s,n,Gotoif($[ "${CALLERID(NUM)}" =~ ".*|NUMBER|" ]?disa-call-context,|NUMBER|,1) diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-check_footer.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-check_footer.conf.TEMPLATE new file mode 100644 index 0000000..74056fa --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-check_footer.conf.TEMPLATE @@ -0,0 +1 @@ +exten => s,n,Goto(${SOURCECONTEXT},${SOURCEEXTEN},donedisacheck) diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-check_header.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-check_header.conf.TEMPLATE new file mode 100644 index 0000000..e0d67b8 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-check_header.conf.TEMPLATE @@ -0,0 +1,2 @@ +[disa-check-call-context] +exten => s,1,Noop() diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-nopin.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-nopin.conf.TEMPLATE new file mode 100644 index 0000000..74e48de --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa-nopin.conf.TEMPLATE @@ -0,0 +1,5 @@ +exten => |NUMBER|,1,Noop() +exten => |NUMBER|,n,Set(TIMEOUT(digit)=15) +exten => |NUMBER|,n,Set(TIMEOUT(response)=40) +exten => |NUMBER|,n,DISA(no-password,context-user-|DEFAULTUSER|) + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa.conf.TEMPLATE new file mode 100644 index 0000000..3dd8fa3 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa.conf.TEMPLATE @@ -0,0 +1,6 @@ +exten => |NUMBER|,1,Noop() +exten => |NUMBER|,n,Set(TIMEOUT(digit)=7) +exten => |NUMBER|,n,Set(TIMEOUT(response)=21) +exten => |NUMBER|,n,Authenticate(|PIN|) +exten => |NUMBER|,n,DISA(no-password,context-user-|DEFAULTUSER|) + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa_header.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa_header.conf.TEMPLATE new file mode 100644 index 0000000..a742271 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_disa_header.conf.TEMPLATE @@ -0,0 +1 @@ +[disa-call-context] diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_incoming_context_gtalk.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_incoming_context_gtalk.conf.TEMPLATE new file mode 100644 index 0000000..3f9cf4c --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_incoming_context_gtalk.conf.TEMPLATE @@ -0,0 +1,15 @@ +exten => |USERNAME|,1,NoOp(${CALLERID}) +same => n,Set(CALLERID(name)=${CUT(CALLERID(name),@,1)}) +same => n,GotoIf($["${CALLERID(name):0:2}" != "+1"]?notrim) +same => n,Set(CALLERID(name)=${CALLERID(name):2}) +same => n(notrim),Set(CALLERID(number)=${CALLERID(name)}) +same => n,Set(SOURCECONTEXT=context-incoming-gtalk) +same => n,Set(SOURCEEXTEN=|USERNAME|) +same => n,Goto(blacklist-call-context,s,1) +same => n(doneblacklist),NoOp() +same => n,Goto(callback-check-call-context,s,1) +same => n(donecallback),NoOp() +same => n,Goto(disa-check-call-context,s,1) +same => n(donedisacheck),Dial(|LOCALUSERS|,${RINGTIME},D(:w11111111)) +same => n,Goto(context-voicemail,s,1) + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_incoming_context_gtalk_header.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_incoming_context_gtalk_header.conf.TEMPLATE new file mode 100644 index 0000000..f6e44a5 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_incoming_context_gtalk_header.conf.TEMPLATE @@ -0,0 +1 @@ +[context-incoming-gtalk] diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_incoming_context_sip.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_incoming_context_sip.conf.TEMPLATE new file mode 100644 index 0000000..b2c3716 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_incoming_context_sip.conf.TEMPLATE @@ -0,0 +1,12 @@ + +[context-incoming-|NAME|] +exten => s,1,NoOp(${CALLERID}) +exten => s,n,Set(SOURCECONTEXT=context-incoming-|NAME|) +exten => s,n,Set(SOURCEEXTEN=s) +exten => s,n,Goto(blacklist-call-context,s,1) +exten => s,n(doneblacklist),NoOp() +exten => s,n,Goto(callback-check-call-context,s,1) +exten => s,n(donecallback),NoOp() +exten => s,n,Goto(disa-check-call-context,s,1) +exten => s,n(donedisacheck),Dial(|LOCALUSERS|,${RINGTIME},r) +exten => s,n,Goto(context-voicemail,s,1) diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_dial_local_user.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_dial_local_user.conf.TEMPLATE new file mode 100644 index 0000000..45e8758 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_dial_local_user.conf.TEMPLATE @@ -0,0 +1 @@ +exten => |DEFAULTUSER|,1,Dial(SIP/|DEFAULTUSER|,${RINGTIME},r) diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_gtalk.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_gtalk.conf.TEMPLATE new file mode 100644 index 0000000..259c2ce --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_gtalk.conf.TEMPLATE @@ -0,0 +1,9 @@ +exten => _|NUMPREFIX|,1,Dial(Gtalk/gtalk-|NAME|/${EXTEN}@voice.google.com,60) +exten => _+|NUMPREFIX|,1,Dial(Gtalk/gtalk-|NAME|/${EXTEN:1}@voice.google.com,60) +exten => _|NUMPREFIX|.,1,Dial(Gtalk/gtalk-|NAME|/${EXTEN}@voice.google.com,60) +exten => _+|NUMPREFIX|.,1,Dial(Gtalk/gtalk-|NAME|/${EXTEN:1}@voice.google.com,60) +exten => _00|NUMPREFIX|.,1,Dial(Gtalk/gtalk-|NAME|/${EXTEN:2}@voice.google.com,60) +exten => _011|NUMPREFIX|.,1,Dial(Gtalk/gtalk-|NAME|/${EXTEN:3}@voice.google.com,60) +exten => _010|NUMPREFIX|.,1,Dial(Gtalk/gtalk-|NAME|/${EXTEN:3}@voice.google.com,60) +exten => _0011|NUMPREFIX|.,1,Dial(Gtalk/gtalk-|NAME|/${EXTEN:4}@voice.google.com,60) + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_pattern_gtalk.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_pattern_gtalk.conf.TEMPLATE new file mode 100644 index 0000000..1fa7713 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_pattern_gtalk.conf.TEMPLATE @@ -0,0 +1,2 @@ +exten => |PATTERN|,1,Dial(Gtalk/gtalk-|NAME|/${EXTEN|SYMBOLSTOREMOVE|}@voice.google.com,60) + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_pattern_sip.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_pattern_sip.conf.TEMPLATE new file mode 100644 index 0000000..178b6de --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_pattern_sip.conf.TEMPLATE @@ -0,0 +1 @@ +exten => |PATTERN|,1,Dial(SIP/${EXTEN|SYMBOLSTOREMOVE|}@peer-|NAME|,60,r) diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_sip.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_sip.conf.TEMPLATE new file mode 100644 index 0000000..9b1d9ad --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_outgoing_sip.conf.TEMPLATE @@ -0,0 +1,8 @@ +exten => _|NUMPREFIX|,1,Dial(SIP/${EXTEN}@peer-|NAME|,60,r) +exten => _+|NUMPREFIX|,1,Dial(SIP/${EXTEN}@peer-|NAME|,60,r) +exten => _|NUMPREFIX|.,1,Dial(SIP/${EXTEN}@peer-|NAME|,60,r) +exten => _+|NUMPREFIX|.,1,Dial(SIP/${EXTEN:1}@peer-|NAME|,60,r) +exten => _00|NUMPREFIX|.,1,Dial(SIP/${EXTEN:2}@peer-|NAME|,60,r) +exten => _011|NUMPREFIX|.,1,Dial(SIP/${EXTEN:3}@peer-|NAME|,60,r) +exten => _010|NUMPREFIX|.,1,Dial(SIP/${EXTEN:3}@peer-|NAME|,60,r) +exten => _0011|NUMPREFIX|.,1,Dial(SIP/${EXTEN:4}@peer-|NAME|,60,r) diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_user_context_footer.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_user_context_footer.conf.TEMPLATE new file mode 100644 index 0000000..a2ba28c --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_user_context_footer.conf.TEMPLATE @@ -0,0 +1,2 @@ +include => context-voicemail-record-greeting +include => context-catch-all diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_user_context_header.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_user_context_header.conf.TEMPLATE new file mode 100644 index 0000000..5931eaf --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_user_context_header.conf.TEMPLATE @@ -0,0 +1,3 @@ + +[context-user-|DEFAULTUSER|] + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_voicemail_disabled.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_voicemail_disabled.conf.TEMPLATE new file mode 100644 index 0000000..be23c29 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_voicemail_disabled.conf.TEMPLATE @@ -0,0 +1,4 @@ +[context-voicemail-record-greeting] + +[context-voicemail] +exten => s,1,Hangup() diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_voicemail_enabled.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_voicemail_enabled.conf.TEMPLATE new file mode 100644 index 0000000..4edd9cb --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/extensions_voicemail_enabled.conf.TEMPLATE @@ -0,0 +1,27 @@ +[context-voicemail-record-greeting] +exten => *789,1,Wait(1) +exten => *789,n,Playback(/etc/pbx-voicemail/recordings/greeting) +exten => *789,n,Wait(1) +exten => *789,n,Playback(beep) +exten => *789,n,Playback(beep) +exten => *789,n,WaitExten(30) + +exten => t,1,Playback(vm-goodbye) +exten => t,n,Wait(2) +exten => t,n,Hangup() + +exten => *,1,Playback(beep) +exten => *,n,Playback(beep) +exten => *,n,Record(/tmp/voicemail/greeting:gsm,20,120,k) +exten => *,n,Wait(1) +exten => *,n,Playback(/tmp/voicemail/greeting) + +exten => h,1,System(/etc/pbx-voicemail/pbx-move-greeting &) + +[context-voicemail] +exten => s,1,Wait(2) +exten => s,2,Playback(/etc/pbx-voicemail/recordings/greeting) +exten => s,3,Wait(2) +exten => s,n,Record(/tmp/voicemail/voicemail%d:WAV,20,180,k) + +exten => h,1,System(/etc/pbx-voicemail/pbx-send-voicemail '${RECORDED_FILE}.WAV' '${CALLERID(all)}' &) diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/gtalk.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/gtalk.conf.TEMPLATE new file mode 100644 index 0000000..4f07a71 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/gtalk.conf.TEMPLATE @@ -0,0 +1,10 @@ +[general] +context=context-incoming-gtalk +allowguest=yes +allowguests=yes +bindaddr=0.0.0.0 + +[guest] +disallow=all +allow=ulaw +context=context-incoming-gtalk diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/indications.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/indications.conf.TEMPLATE new file mode 100644 index 0000000..d7088db --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/indications.conf.TEMPLATE @@ -0,0 +1,733 @@ +; indications.conf +; Configuration file for location specific tone indications +; used by the pbx_indications module. +; +; NOTE: +; When adding countries to this file, please keep them in alphabetical +; order according to the 2-character country codes! +; +; The [general] category is for certain global variables. +; All other categories are interpreted as location specific indications +; +; +[general] +country=us ; default location + + +; [example] +; description = string +; The full name of your country, in English. +; alias = iso[,iso]* +; List of other countries 2-letter iso codes, which have the same +; tone indications. +; ringcadence = num[,num]* +; List of durations the physical bell rings. +; dial = tonelist +; Set of tones to be played when one picks up the hook. +; busy = tonelist +; Set of tones played when the receiving end is busy. +; congestion = tonelist +; Set of tones played when there is some congestion (on the network?) +; callwaiting = tonelist +; Set of tones played when there is a call waiting in the background. +; dialrecall = tonelist +; Not well defined; many phone systems play a recall dial tone after hook +; flash. +; record = tonelist +; Set of tones played when call recording is in progress. +; info = tonelist +; Set of tones played with special information messages (e.g., "number is +; out of service") +; 'name' = tonelist +; Every other variable will be available as a shortcut for the "PlayList" command +; but will not be used automatically by Asterisk. +; +; +; The tonelist itself is defined by a comma-separated sequence of elements. +; Each element consist of a frequency (f) with an optional duration (in ms) +; attached to it (f/duration). The frequency component may be a mixture of two +; frequencies (f1+f2) or a frequency modulated by another frequency (f1*f2). +; The implicit modulation depth is fixed at 90%, though. +; If the list element starts with a !, that element is NOT repeated, +; therefore, only if all elements start with !, the tonelist is time-limited, +; all others will repeat indefinitely. +; +; concisely: +; element = [!]freq[+|*freq2][/duration] +; tonelist = element[,element]* +; +; Please note that SPACES ARE NOT ALLOWED in tone lists! +; + +[at] +description = Austria +ringcadence = 1000,5000 +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +dial = 420 +busy = 420/400,0/400 +ring = 420/1000,0/5000 +congestion = 420/200,0/200 +callwaiting = 420/40,0/1960 +dialrecall = 420 +; RECORDTONE - not specified +record = 1400/80,0/14920 +info = 950/330,1450/330,1850/330,0/1000 +stutter = 380+420 + +[au] +description = Australia +; Reference http://www.acif.org.au/__data/page/3303/S002_2001.pdf +; Normal Ring +ringcadence = 400,200,400,2000 +; Distinctive Ring 1 - Forwarded Calls +; 400,400,200,200,400,1400 +; Distinctive Ring 2 - Selective Ring 2 + Operator + Recall +; 400,400,200,2000 +; Distinctive Ring 3 - Multiple Subscriber Number 1 +; 200,200,400,2200 +; Distinctive Ring 4 - Selective Ring 1 + Centrex +; 400,2600 +; Distinctive Ring 5 - Selective Ring 3 +; 400,400,200,400,200,1400 +; Distinctive Ring 6 - Multiple Subscriber Number 2 +; 200,400,200,200,400,1600 +; Distinctive Ring 7 - Multiple Subscriber Number 3 + Data Privacy +; 200,400,200,400,200,1600 +; Tones +dial = 413+438 +busy = 425/375,0/375 +ring = 413+438/400,0/200,413+438/400,0/2000 +; XXX Congestion: Should reduce by 10 db every other cadence XXX +congestion = 425/375,0/375,420/375,0/375 +callwaiting = 425/200,0/200,425/200,0/4400 +dialrecall = 413+438 +; Record tone used for Call Intrusion/Recording or Conference +record = !425/1000,!0/15000,425/360,0/15000 +info = 425/2500,0/500 +; Other Australian Tones +; The STD "pips" indicate the call is not an untimed local call +std = !525/100,!0/100,!525/100,!0/100,!525/100,!0/100,!525/100,!0/100,!525/100 +; Facility confirmation tone (eg. Call Forward Activated) +facility = 425 +; Message Waiting "stutter" dialtone +stutter = 413+438/100,0/40 +; Ringtone for calls to Telstra mobiles +ringmobile = 400+450/400,0/200,400+450/400,0/2000 + +[bg] +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +description = Bulgaria +ringcadence = 1000,4000 +; +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/250,0/250 +callwaiting = 425/150,0/150,425/150,0/4000 +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +record = 1400/425,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +stutter = 425/1500,0/100 + +[br] +description = Brazil +ringcadence = 1000,4000 +dial = 425 +busy = 425/250,0/250 +ring = 425/1000,0/4000 +congestion = 425/250,0/250,425/750,0/250 +callwaiting = 425/50,0/1000 +; Dialrecall not used in Brazil standard (using UK standard) +dialrecall = 350+440 +; Record tone is not used in Brazil, use busy tone +record = 425/250,0/250 +; Info not used in Brazil standard (using UK standard) +info = 950/330,1400/330,1800/330 +stutter = 350+440 + +[be] +description = Belgium +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,3000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/3000 +congestion = 425/167,0/167 +callwaiting = 1400/175,0/175,1400/175,0/3500 +; DIALRECALL - not specified +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440" +; RECORDTONE - not specified +record = 1400/500,0/15000 +info = 900/330,1400/330,1800/330,0/1000 +stutter = 425/1000,0/250 + +[ch] +description = Switzerland +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/200,0/200,425/200,0/4000 +; DIALRECALL - not specified +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +; RECORDTONE - not specified +record = 1400/80,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +stutter = 425+340/1100,0/1100 + +[cl] +description = Chile +; According to specs from Telefonica CTC Chile +ringcadence = 1000,3000 +dial = 400 +busy = 400/500,0/500 +ring = 400/1000,0/3000 +congestion = 400/200,0/200 +callwaiting = 400/250,0/8750 +dialrecall = !400/100,!0/100,!400/100,!0/100,!400/100,!0/100,400 +record = 1400/500,0/15000 +info = 950/333,1400/333,1800/333,0/1000 +stutter = !400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,400 + +[cn] +description = China +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 450 +busy = 450/350,0/350 +ring = 450/1000,0/4000 +congestion = 450/700,0/700 +callwaiting = 450/400,0/4000 +dialrecall = 450 +record = 950/400,0/10000 +info = 450/100,0/100,450/100,0/100,450/100,0/100,450/400,0/400 +; STUTTER - not specified +stutter = 450+425 + +[cz] +description = Czech Republic +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425/330,0/330,425/660,0/660 +busy = 425/330,0/330 +ring = 425/1000,0/4000 +congestion = 425/165,0/165 +callwaiting = 425/330,0/9000 +; DIALRECALL - not specified +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425/330,0/330,425/660,0/660 +; RECORDTONE - not specified +record = 1400/500,0/14000 +info = 950/330,0/30,1400/330,0/30,1800/330,0/1000 +; STUTTER - not specified +stutter = 425/450,0/50 + +[de] +description = Germany +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425 +busy = 425/480,0/480 +ring = 425/1000,0/4000 +congestion = 425/240,0/240 +callwaiting = !425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,0 +; DIALRECALL - not specified +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +; RECORDTONE - not specified +record = 1400/80,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +stutter = 425+400 + +[dk] +description = Denmark +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = !425/200,!0/600,!425/200,!0/3000,!425/200,!0/200,!425/200,0 +; DIALRECALL - not specified +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +; RECORDTONE - not specified +record = 1400/80,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +; STUTTER - not specified +stutter = 425/450,0/50 + +[ee] +description = Estonia +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425 +busy = 425/300,0/300 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +; CALLWAIT not in accordance to ITU +callwaiting = 950/650,0/325,950/325,0/30,1400/1300,0/2600 +; DIALRECALL - not specified +dialrecall = 425/650,0/25 +; RECORDTONE - not specified +record = 1400/500,0/15000 +; INFO not in accordance to ITU +info = 950/650,0/325,950/325,0/30,1400/1300,0/2600 +; STUTTER not specified +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + +[es] +description = Spain +ringcadence = 1500,3000 +dial = 425 +busy = 425/200,0/200 +ring = 425/1500,0/3000 +congestion = 425/200,0/200,425/200,0/200,425/200,0/600 +callwaiting = 425/175,0/175,425/175,0/3500 +dialrecall = !425/200,!0/200,!425/200,!0/200,!425/200,!0/200,425 +record = 1400/500,0/15000 +info = 950/330,0/1000 +dialout = 500 + + +[fi] +description = Finland +ringcadence = 1000,4000 +dial = 425 +busy = 425/300,0/300 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/150,0/150,425/150,0/8000 +dialrecall = 425/650,0/25 +record = 1400/500,0/15000 +info = 950/650,0/325,950/325,0/30,1400/1300,0/2600 +stutter = 425/650,0/25 + +[fr] +description = France +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1500,3500 +; Dialtone can also be 440+330 +dial = 440 +busy = 440/500,0/500 +ring = 440/1500,0/3500 +; CONGESTION - not specified +congestion = 440/250,0/250 +callwait = 440/300,0/10000 +; DIALRECALL - not specified +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 +; RECORDTONE - not specified +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330 +stutter = !440/100,!0/100,!440/100,!0/100,!440/100,!0/100,!440/100,!0/100,!440/100,!0/100,!440/100,!0/100,440 + +[gr] +description = Greece +ringcadence = 1000,4000 +dial = 425/200,0/300,425/700,0/800 +busy = 425/300,0/300 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/150,0/150,425/150,0/8000 +dialrecall = 425/650,0/25 +record = 1400/400,0/15000 +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0 +stutter = 425/650,0/25 + +[hu] +description = Hungary +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1250,3750 +dial = 425 +busy = 425/300,0/300 +ring = 425/1250,0/3750 +congestion = 425/300,0/300 +callwaiting = 425/40,0/1960 +dialrecall = 425+450 +; RECORDTONE - not specified +record = 1400/400,0/15000 +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0 +stutter = 350+375+400 + +[il] +description = Israel +ringcadence = 1000,3000 +dial = 414 +busy = 414/500,0/500 +ring = 414/1000,0/3000 +congestion = 414/250,0/250 +callwaiting = 414/100,0/100,414/100,0/100,414/600,0/3000 +dialrecall = !414/100,!0/100,!414/100,!0/100,!414/100,!0/100,414 +record = 1400/500,0/15000 +info = 1000/330,1400/330,1800/330,0/1000 +stutter = !414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,414 + + +[in] +description = India +ringcadence = 400,200,400,2000 +dial = 400*25 +busy = 400/750,0/750 +ring = 400*25/400,0/200,400*25/400,0/2000 +congestion = 400/250,0/250 +callwaiting = 400/200,0/100,400/200,0/7500 +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,0/1000 +stutter = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 + +[it] +description = Italy +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425/200,0/200,425/600,0/1000 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/400,0/100,425/250,0/100,425/150,0/14000 +dialrecall = 470/400,425/400 +record = 1400/400,0/15000 +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0 +stutter = 470/400,425/400 + +[lt] +description = Lithuania +ringcadence = 1000,4000 +dial = 425 +busy = 425/350,0/350 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/150,0/150,425/150,0/4000 +; DIALRECALL - not specified +dialrecall = 425/500,0/50 +; RECORDTONE - not specified +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0 +; STUTTER - not specified +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + +[jp] +description = Japan +ringcadence = 1000,2000 +dial = 400 +busy = 400/500,0/500 +ring = 400+15/1000,0/2000 +congestion = 400/500,0/500 +callwaiting = 400+16/500,0/8000 +dialrecall = !400/200,!0/200,!400/200,!0/200,!400/200,!0/200,400 +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,0 +stutter = !400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,400 + +[mx] +description = Mexico +ringcadence = 2000,4000 +dial = 425 +busy = 425/250,0/250 +ring = 425/1000,0/4000 +congestion = 425/250,0/250 +callwaiting = 425/200,0/600,425/200,0/10000 +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 +record = 1400/500,0/15000 +info = 950/330,0/30,1400/330,0/30,1800/330,0/1000 +stutter = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 + +[my] +description = Malaysia +ringcadence = 2000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/400,0/200 +congestion = 425/500,0/500 + +[nl] +description = Netherlands +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +; Most of these 425's can also be 450's +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/250,0/250 +callwaiting = 425/500,0/9500 +; DIALRECALL - not specified +dialrecall = 425/500,0/50 +; RECORDTONE - not specified +record = 1400/500,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +stutter = 425/500,0/50 + +[no] +description = Norway +ringcadence = 1000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/200,0/600,425/200,0/10000 +dialrecall = 470/400,425/400 +record = 1400/400,0/15000 +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0 +stutter = 470/400,425/400 + +[nz] +description = New Zealand +;NOTE - the ITU has different tonesets for NZ, but according to some residents there, +; this is, indeed, the correct way to do it. +ringcadence = 400,200,400,2000 +dial = 400 +busy = 400/250,0/250 +ring = 400+450/400,0/200,400+450/400,0/2000 +congestion = 400/375,0/375 +callwaiting = !400/200,!0/3000,!400/200,!0/3000,!400/200,!0/3000,!400/200 +dialrecall = !400/100!0/100,!400/100,!0/100,!400/100,!0/100,400 +record = 1400/425,0/15000 +info = 400/750,0/100,400/750,0/100,400/750,0/100,400/750,0/400 +stutter = !400/100!0/100,!400/100,!0/100,!400/100,!0/100,!400/100!0/100,!400/100,!0/100,!400/100,!0/100,400 +unobtainable = 400/75,0/100,400/75,0/100,400/75,0/100,400/75,0/400 + +[ph] + +; reference http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf + +description = Philippines +ringcadence = 1000,4000 +dial = 425 +busy = 480+620/500,0/500 +ring = 425+480/1000,0/4000 +congestion = 480+620/250,0/250 +callwaiting = 440/300,0/10000 +; DIALRECALL - not specified +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 +; RECORDTONE - not specified +record = 1400/500,0/15000 +; INFO - not specified +info = !950/330,!1400/330,!1800/330,0 +; STUTTER - not specified +stutter = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 + + +[pl] +description = Poland +ringcadence = 1000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/500,0/500 +callwaiting = 425/150,0/150,425/150,0/4000 +; DIALRECALL - not specified +dialrecall = 425/500,0/50 +; RECORDTONE - not specified +record = 1400/500,0/15000 +; 950/1400/1800 3x0.33 on 1.0 off repeated 3 times +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000 +; STUTTER - not specified +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + +[pt] +description = Portugal +ringcadence = 1000,5000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/5000 +congestion = 425/200,0/200 +callwaiting = 440/300,0/10000 +dialrecall = 425/1000,0/200 +record = 1400/500,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + +[ru] +; References: +; http://www.minsvyaz.ru/site.shtml?id=1806 +; http://www.aboutphone.info/lib/gost/45-223-2001.html +description = Russian Federation / ex Soviet Union +ringcadence = 1000,4000 +dial = 425 +busy = 425/350,0/350 +ring = 425/1000,0/4000 +congestion = 425/175,0/175 +callwaiting = 425/200,0/5000 +record = 1400/400,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +dialrecall = 425/400,0/40 +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + +[se] +description = Sweden +ringcadence = 1000,5000 +dial = 425 +busy = 425/250,0/250 +ring = 425/1000,0/5000 +congestion = 425/250,0/750 +callwaiting = 425/200,0/500,425/200,0/9100 +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +record = 1400/500,0/15000 +info = !950/332,!0/24,!1400/332,!0/24,!1800/332,!0/2024,!950/332,!0/24,!1400/332,!0/24,!1800/332,!0/2024,!950/332,!0/24,!1400/332,!0/24,!1800/332,!0/2024,!950/332,!0/24,!1400/332,!0/24,!1800/332,!0/2024,!950/332,!0/24,!1400/332,!0/24,!1800/332,0 +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +; stutter = 425/320,0/20 ; Real swedish standard, not used for now + +[sg] +description = Singapore +; Singapore +; Reference: http://www.ida.gov.sg/idaweb/doc/download/I397/ida_ts_pstn1_i4r2.pdf +; Frequency specs are: 425 Hz +/- 20Hz; 24 Hz +/- 2Hz; modulation depth 100%; SIT +/- 50Hz +ringcadence = 400,200,400,2000 +dial = 425 +ring = 425*24/400,0/200,425*24/400,0/2000 ; modulation should be 100%, not 90% +busy = 425/750,0/750 +congestion = 425/250,0/250 +callwaiting = 425*24/300,0/200,425*24/300,0/3200 +stutter = !425/200,!0/200,!425/600,!0/200,!425/200,!0/200,!425/600,!0/200,!425/200,!0/200,!425/600,!0/200,!425/200,!0/200,!425/600,!0/200,425 +info = 950/330,1400/330,1800/330,0/1000 ; not currently in use acc. to reference +dialrecall = 425*24/500,0/500,425/500,0/2500 ; unspecified in IDA reference, use repeating Holding Tone A,B +record = 1400/500,0/15000 ; unspecified in IDA reference, use 0.5s tone every 15s +; additionally defined in reference +nutone = 425/2500,0/500 +intrusion = 425/250,0/2000 +warning = 425/624,0/4376 ; end of period tone, warning +acceptance = 425/125,0/125 +holdinga = !425*24/500,!0/500 ; followed by holdingb +holdingb = !425/500,!0/2500 + +[th] +description = Thailand +ringcadence = 1000,4000 +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +dial = 400*50 +busy = 400/500,0/500 +ring = 420/1000,0/5000 +congestion = 400/300,0/300 +callwaiting = 1000/400,10000/400,1000/400 +; DIALRECALL - not specified - use special dial tone instead. +dialrecall = 400*50/400,0/100,400*50/400,0/100 +; RECORDTONE - not specified +record = 1400/500,0/15000 +; INFO - specified as an announcement - use special information tones instead +info = 950/330,1400/330,1800/330 +; STUTTER - not specified +stutter = !400/200,!0/200,!400/600,!0/200,!400/200,!0/200,!400/600,!0/200,!400/200,!0/200,!400/600,!0/200,!400/200,!0/200,!400/600,!0/200,400 + +[uk] +description = United Kingdom +ringcadence = 400,200,400,2000 +; These are the official tones taken from BT SIN350. The actual tones +; used by BT include some volume differences so sound slightly different +; from Asterisk-generated ones. +dial = 350+440 +; Special dial is the intermittent dial tone heard when, for example, +; you have a divert active on the line +specialdial = 350+440/750,440/750 +; Busy is also called "Engaged" +busy = 400/375,0/375 +; "Congestion" is the Beep-bip engaged tone +congestion = 400/400,0/350,400/225,0/525 +; "Special Congestion" is not used by BT very often if at all +specialcongestion = 400/200,1004/300 +unobtainable = 400 +ring = 400+450/400,0/200,400+450/400,0/2000 +callwaiting = 400/100,0/4000 +; BT seem to use "Special Call Waiting" rather than just "Call Waiting" tones +specialcallwaiting = 400/250,0/250,400/250,0/250,400/250,0/5000 +; "Pips" used by BT on payphones. (Sounds wrong, but this is what BT claim it +; is and I've not used a payphone for years) +creditexpired = 400/125,0/125 +; These two are used to confirm/reject service requests on exchanges that +; don't do voice announcements. +confirm = 1400 +switching = 400/200,0/400,400/2000,0/400 +; This is the three rising tones Doo-dah-dee "Special Information Tone", +; usually followed by the BT woman saying an appropriate message. +info = 950/330,0/15,1400/330,0/15,1800/330,0/1000 +; Not listed in SIN350 +record = 1400/500,0/60000 +stutter = 350+440/750,440/750 + +[us] +description = United States / North America +ringcadence = 2000,4000 +dial = 350+440 +busy = 480+620/500,0/500 +ring = 440+480/2000,0/4000 +congestion = 480+620/250,0/250 +callwaiting = 440/300,0/10000 +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,0 +stutter = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 + +[us-old] +description = United States Circa 1950/ North America +ringcadence = 2000,4000 +dial = 600*120 +busy = 500*100/500,0/500 +ring = 420*40/2000,0/4000 +congestion = 500*100/250,0/250 +callwaiting = 440/300,0/10000 +dialrecall = !600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,600*120 +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,0 +stutter = !600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,600*120 + +[tw] +description = Taiwan +; http://nemesis.lonestar.org/reference/telecom/signaling/dialtone.html +; http://nemesis.lonestar.org/reference/telecom/signaling/busy.html +; http://www.iproducts.com.tw/ee/kylink/06ky-1000a.htm +; http://www.pbx-manufacturer.com/ky120dx.htm +; http://www.nettwerked.net/tones.txt +; http://www.cisco.com/univercd/cc/td/doc/product/tel_pswt/vco_prod/taiw_sup/taiw2.htm +; +; busy tone 480+620Hz 0.5 sec. on ,0.5 sec. off +; reorder tone 480+620Hz 0.25 sec. on,0.25 sec. off +; ringing tone 440+480Hz 1 sec. on ,2 sec. off +; +ringcadence = 1000,4000 +dial = 350+440 +busy = 480+620/500,0/500 +ring = 440+480/1000,0/2000 +congestion = 480+620/250,0/250 +callwaiting = 350+440/250,0/250,350+440/250,0/3250 +dialrecall = 300/1500,0/500 +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,0 +stutter = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 + +[ve] +; Tone definition source for ve found on +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +description = Venezuela / South America +ringcadence = 1000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/250,0/250 +callwaiting = 400+450/300,0/6000 +dialrecall = 425 +record = 1400/500,0/15000 +info = !950/330,!1440/330,!1800/330,0/1000 + + +[za] +description = South Africa +; http://www.cisco.com/univercd/cc/td/doc/product/tel_pswt/vco_prod/safr_sup/saf02.htm +; (definitions for other countries can also be found there) +; Note, though, that South Africa uses two switch types in their network -- +; Alcatel switches -- mainly in the Western Cape, and Siemens elsewhere. +; The former use 383+417 in dial, ringback etc. The latter use 400*33 +; I've provided both, uncomment the ones you prefer +ringcadence = 400,200,400,2000 +; dial/ring/callwaiting for the Siemens switches: +dial = 400*33 +ring = 400*33/400,0/200,400*33/400,0/2000 +callwaiting = 400*33/250,0/250,400*33/250,0/250,400*33/250,0/250,400*33/250,0/250 +; dial/ring/callwaiting for the Alcatel switches: +; dial = 383+417 +; ring = 383+417/400,0/200,383+417/400,0/2000 +; callwaiting = 383+417/250,0/250,383+417/250,0/250,383+417/250,0/250,383+417/250,0/250 +congestion = 400/250,0/250 +busy = 400/500,0/500 +dialrecall = 350+440 +; XXX Not sure about the RECORDTONE +record = 1400/500,0/10000 +info = 950/330,1400/330,1800/330,0/330 +stutter = !400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,400*33 diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/jabber.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/jabber.conf.TEMPLATE new file mode 100644 index 0000000..cf71e1f --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/jabber.conf.TEMPLATE @@ -0,0 +1,4 @@ +[general] +autoregister=yes + +#include jabber_users.conf diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/jabber_users.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/jabber_users.conf.TEMPLATE new file mode 100644 index 0000000..3ee2463 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/jabber_users.conf.TEMPLATE @@ -0,0 +1,8 @@ +[gtalk-|NAME|] +type=client +serverhost=talk.google.com +username=|USERNAME|/Talk +secret=|SECRET| +timeout=150 +status=|STATUS| +statusmessage=|STATUSMESSAGE| diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/logger.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/logger.conf.TEMPLATE new file mode 100644 index 0000000..e573250 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/logger.conf.TEMPLATE @@ -0,0 +1,7 @@ +[general] +queue_log = no +event_log = no + +[logfiles] +console => notice,warning,error +messages => error diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/manager.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/manager.conf.TEMPLATE new file mode 100644 index 0000000..2ac2f00 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/manager.conf.TEMPLATE @@ -0,0 +1,7 @@ +[general] +enabled = no + +port = 5038 +bindaddr = 0.0.0.0 + + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/modules.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/modules.conf.TEMPLATE new file mode 100644 index 0000000..93c7433 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/modules.conf.TEMPLATE @@ -0,0 +1,34 @@ +[modules] +autoload=no +load => res_jabber.so ; Used for Gtalk +load => res_clioriginate.so ; originate calls from commandline +load => res_rtp_asterisk.so ; rtp "engine" is now a loadable module in asterisk 1.8 +load => pbx_config.so ; Text Extension Configuration Requires N/A +load => func_callerid.so ; Gets or sets Caller*ID data on the channel. - Requires ? +load => func_channel.so +load => func_logic.so ; Logic functions (if, etc.) +load => func_strings.so ; string manipulation functions +load => cdr_manager.so ; Asterisk Call Manager CDR Backend - Requires N/A +load => chan_local.so ; Show status of local channels- Requires N/A +load => chan_gtalk.so ; Use gtalk +load => chan_sip.so ; Session Initiation Protocol (SIP) - Requires res_features.so +load => codec_alaw.so ; A-law Coder/Decoder - Requires N/A +load => codec_a_mu.so ; A-law and Mulaw direct Coder/Decoder - Requires N/A +load => codec_gsm.so ; GSM/PCM16 (signed linear) Codec Translat - Requires N/A +load => codec_ulaw.so ; Mu-law Coder/Decoder - Requires N/A +load => format_gsm.so ; Raw GSM data - Requires N/A +load => format_pcm.so ; Raw uLaw 8khz Audio support (PCM) - Requires N/A +load => format_wav_gsm.so +load => app_dial.so ; Dialing Application - Requires res_features.so, res_musiconhold.so +load => app_parkandannounce.so ; Call Parking and Announce Application - Requires res_features.so +load => app_playback.so ; Sound File Playback Application - Requires N/A +load => app_record.so ; Sound File Record Application - Requires N/A +load => app_system.so ; Execute a system command - Requires N/A +load => app_disa.so ; Direct Inward System Access +load => app_authenticate.so ; Authenticate via pin +load => app_senddtmf.so ; Ability to send DTMF tones on the line. +load => func_cut.so ; To manipulate strings +load => func_timeout.so ; Used for DISA timeouts + +[global] +chan_modem.so=no diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/rtp.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/rtp.conf.TEMPLATE new file mode 100644 index 0000000..10d577d --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/rtp.conf.TEMPLATE @@ -0,0 +1,6 @@ +[general] +rtpstart=|RTPSTART| +rtpend=|RTPEND| +rtpchecksums=no +dtmftimeout=3000 +rtcpinterval = 2000 diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip.conf.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip.conf.TEMPLATE new file mode 100644 index 0000000..8f3b112 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip.conf.TEMPLATE @@ -0,0 +1,39 @@ +[general] +transport=udp +context=default-incoming-call-context +allowoverlap=yes +allowtransfer=yes +realm=asterisk +bindaddr=0.0.0.0 +srvlookup=yes +maxexpiry=600 +minexpiry=60 +defaultexpiry=300 +qualifyfreq=55 +disallow=all +allow=ulaw +allow=alaw +dtmfmode = inband +alwaysauthreject = yes +t1min=100 +timert1=500 +timerb=16000 +rtptimeout=600 +rtpkeepalive=30 +useragent=|USERAGENT| +localnet=192.168.0.0/16 +localnet=10.0.0.0/8 +localnet=172.16.0.0/12 +nat=yes +directmedia=no +sipdebug=no +bindport=|BINDPORT| +externhost=|EXTERNHOST| +externrefresh=60 + +#include sip_registrations.conf + +[authentication] + +#include sip_peers.conf +#include sip_users.conf diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip_peer.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip_peer.TEMPLATE new file mode 100644 index 0000000..30abaad --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip_peer.TEMPLATE @@ -0,0 +1,13 @@ + +[peer-|NAME|] +type = peer +defaultuser = |DEFAULTUSER| +fromuser = |FROMUSER| +secret = |SECRET| +host = |HOST| +fromdomain = |FROMDOMAIN| +context = context-incoming-|NAME| +insecure = port,invite +qualify = 2000 +|PORT| +|OUTBOUNDPROXY| diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip_registration.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip_registration.TEMPLATE new file mode 100644 index 0000000..e139d43 --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip_registration.TEMPLATE @@ -0,0 +1,2 @@ +register => |DEFAULTUSER|:|SECRET|@peer-|NAME| + diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip_user.TEMPLATE b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip_user.TEMPLATE new file mode 100644 index 0000000..61a8b0b --- /dev/null +++ b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sip_user.TEMPLATE @@ -0,0 +1,11 @@ + +[|DEFAULTUSER|] +fullname = |FULLNAME| +defaultuser = |DEFAULTUSER| +secret = |SECRET| +hassip = yes +hasvoicemail = no +host = dynamic +type = friend +context = context-user-|CONTEXTNAME| +qualify = no \ No newline at end of file diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sounds/agent-alreadyon.gsm b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sounds/agent-alreadyon.gsm new file mode 100644 index 0000000000000000000000000000000000000000..83fe27ecfa4dd332504f40dcbd43ddbb812d3d38 GIT binary patch literal 8943 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 literal 0 HcmV?d00001 diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sounds/agent-incorrect.gsm b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sounds/agent-incorrect.gsm new file mode 100644 index 0000000000000000000000000000000000000000..27d934beb0b082969f9a55e9b4d6cb55cc4cfebb GIT binary patch literal 8085 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 ONHJ3Nf1n`$&wl`yp0Q&9 literal 0 HcmV?d00001 diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sounds/auth-incorrect.gsm b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sounds/auth-incorrect.gsm new file mode 100644 index 0000000000000000000000000000000000000000..12fec25d56cf39e92b04ae899eed85d34d994931 GIT binary patch literal 7458 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 TQ11;$C>059_}}38f7$;B(8DRC literal 0 HcmV?d00001 diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sounds/auth-thankyou.gsm b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sounds/auth-thankyou.gsm new file mode 100644 index 0000000000000000000000000000000000000000..93f936d1a0c49ac8c8b6d4d0efa285d1e276b978 GIT binary patch literal 1353 zcmV-P1-AOwUy)%VP(U`@ayHy{068RXHsg>0M%!)2Bjf-!+m1He*XM-ZYPtY79Fex% z*q}KhZMO@8pywk|$s=+ANZU?FB-kl@>V?K2O4O1j-0(n3+iA%i$LvWHog*e>iDH=6 z)TGnst{uyjk~H^`1FcX^ko=AnY_cr2OzpTN-b}XOkGT-krk-I{UF^Q(ZL1t#3t-oF z#GhYj+8~z97+;6-ba5`6)TfozR*$A*IaO68zi8H!&0G~>q!}GBKVtDnr81EuywxRj z-G;-aVmq=jd}F3u8d=Ebl}D(4O~fz9C^q66=JC}beda^Q3#luuCcDWgC>?!NTbYI~ zQcCFV%Lh>8>rm6xV0Izjq7I#))A)ZU&Y!_P$B zLLRx2&t{I^rNd^?Bl3+hT9cn+_4!PzD%DtSW=o$U3XWA((rZJuCCXJ&)`NasQBPIe ziE4*prZz8zkN4n#0 zLn8E%)K90u+l4H?;&DOLPqH}((e1pcn{z_;dC3%_XQ^ZFc9F3Pa8;>D`n zZZ1-g$1d`cG=$o$dzsXR$9^MKmsW7-8l}yNZIFeS>e2{*;;1^DhFfpd*&VjzlS?)U zll>85C^wPvv?PQmDI(A);>_o+BNEmj*d7eF(~qh8qHZ?rkBa#cDc5Y*>N69O_acwv z-=hQTNY~vZw^EVjrmA<`X_Lql^LJT-l_(b<)+URWNXEU4#N^jpE<4Maq^cW-@noCm zNeg}`-Rr7XigT$OQAo+%RT!PtoIW?qQ%Kj;aVXoPCD^@jg(6de%!OwL{8fZXu3^Kh z)!sd~)KvsaTIn{Wt0b9W&`7VVIrOaH4MFzbGG`Eg5V!cQx!$bt+xJ=w+#=8=Y z%ztGggkx1G>(ZmW7uaOwKU8K$>dJ)26TP&R%_5o1jeAqZqcLMVS54Att7GBOLeWcf z$s=mSHus4)8`y-XQ83J5n~(=%LEoS$Ux7!7|}js}|^?FKHzpCsVDHGNg4^cCFUZdE!IrXcVV+4Th=SKBWw#}CfuQZN%uRP8w%fe5jOxKx(p@I0)3909+IqraU6VTEV1XpBG7)ol z!AU4pH0*rgNZOC6>eTUb5!&X!rh?IEVv69oba~i~oPZ#%kH)FspuFA1*rU~HgN@o= zU`p$7#-`YyNo#I`#p*!I95XoEQlK`Qba(z$;yjMvRsKTO5)p LC77TlosKBmtj@qs literal 0 HcmV?d00001 diff --git a/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sounds/beep.gsm b/feeds/luci/applications/luci-app-pbx/root/etc/pbx-asterisk/sounds/beep.gsm new file mode 100644 index 0000000000000000000000000000000000000000..d38eda9cc55c8de7b488dbd7993b545210be692f GIT binary patch literal 726 zcmXBQdrT4m9Ki9;=GJEGkIcDg8i$&pvgQl{tu}nSmMJ3w0!ssDs5t@IbhULhHDcN5 zAwJ5ubC)8avqCuaAJmDVfr)ciq@DswJ{rxow*JYT|9|%VJzR88U2k!MjojJF7fj^r zC*|(+K#{DK$*YbmNqm)yaTTLTMBqUpUjfZIBp&Snpdh}o zWA65`Fc=V4*|~QFxITN>pjNRsdxIFJpG;+ zAwTjW1fAy+FFqxVGzJ9-N7RTDT!9SPyuf!izpRII`7X zzAJ+6(=OQ~T?{V;k-=KAvQ^WAOE0F{(!6lE>~-u1VN=EpbjC*jjHQ*l?9LTJ)pOH% zwFg|PiS7`Aw|!4|RAL7?Xjv4YvobhvqS;N|1p2B3VS;&lag?2XfdCk&LO54=LhJtC zJ#HEdd`?LZEB9J?^h)oa!vYXu!crM>(s)9kT&ruMlN)I|2VAkz@_Us4x(P~05bKfy z_6W_=7ae4hUPenCuqUR4dkB14Ot7B$T>zyV4=79DhU9EBzorWDiSc~S&%*+em?ScU zJ8-e$nz#|Mj_E$x)XuUz#Uo3Q0FNP4bquO=f?GBEsUaa0n#m2V!$4*Ab#^TQ%-|_x zgl2cLBxj{lsF`ew)0jzeuyPx97ZI;^vM}BOP=B*g{RvJgfHxeG#N?&`NhFQ7+~fdA+il4t*PDtR8p;4R+j2=8 zfB-h+l1Cf7AV(x^w&d<$M;vlVBiSUfnPH>=Hso?h+-@K^6}07%@D zM>|mPXOhF|^%Su%Q(%l1P-S;T3*S z#T!_`Lamlo+*Kf!nyr0=(DAe#8Cs!6iqW~DwIR6Lezh#<;i%wF$n08x`3gx~+tD=B zpqX6&xma$z)3TsnWCF^|uE1I24QCsypl4leRFu%NyWv^5pjjolBUfVp5_X-#v20){ zTUKoxu)ye=ZMNjlZMAh#Y`{%jO;qK!z+!c>yA#^LM_$Y<+^*nE(PrCQ*YT#(f(ym&u&S6@18Z9C$fdI*t0y)1+jPVDSVYF6K0^s4*hDA&0w1pZc97S=96kEX+V`C zE>lNqAnbH)GTUl_SlpLJBi6vDT}In>(J8CqDQ>{FnQBW5+<`e{hD9OZpw{w^TN~h@ zwp5YG-O#PYCK~F%=TmL9T;#w-6;;P#+|S z)a<-t3|mXT8j41;w@jCMim4l03#8$`Mw++hX7&oo#nkbPs#IMoy6KHx<6R0TBB~cV zw@5~!ZPP`!h5fo{(Pq^1d}f+kNbcKF)l;=;E7FHJ;j<~$*KR1=vr4#|>a`u!G*xO; zvF0{o9_pf3=f#zXMI)^$H(gQcktamd?KrM28`w`0|ERiaa+Nv~UN z#~Y()KICb~BBKd6+=;l`p{KE>im2Pwv0Y*lQRI43Zb)8H#ZOtSQSr%eQqgP0_+g~`tS8F!gXV)9m zW^L`mS;g5icZ^%LNFAH5IpJSuLgaNbcU{FsC3U3c)n9Gy0$T_jAu3lPn4}ehUesBK?gOaeYT{}p zXR4yFWMwxKQvvstYNVV~Vae2sG@#YkMzTwzV%M>)x=>KU_v&^gn581^D07(7p&|(M zRy2mxm`1V;?!rl(k|r*iq4-+LMs?_+OdF3T`<&q8nrkSc(wv3jTjU{WGHo{$+Cb?d zN=0JUz{?zr=NgEBKTN45Wz!*y-RgRvRPkL4CRm_Y%rMC=Sl~3%vb$7T&=d{ynsgIl19|BfHx#|M4MPZS!1o%qts=rq?%BG dHzaW>BTxWIB$7!aPyk6Jl1U^`07)d0NhDIuL#_Y- literal 0 HcmV?d00001 diff --git a/feeds/luci/applications/luci-app-polipo/Makefile b/feeds/luci/applications/luci-app-polipo/Makefile new file mode 100644 index 0000000..1fbafe7 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for the Polipo Proxy +LUCI_DEPENDS:=+polipo + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-polipo/luasrc/controller/polipo.lua b/feeds/luci/applications/luci-app-polipo/luasrc/controller/polipo.lua new file mode 100644 index 0000000..b3ae389 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/luasrc/controller/polipo.lua @@ -0,0 +1,15 @@ +-- Copyright 2008 Aleksandar Krsteski +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.polipo", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/polipo") then + return + end + + entry({"admin", "services", "polipo"}, alias("admin", "services", "polipo", "config"), _("Polipo")) + entry({"admin", "services", "polipo", "status"}, template("polipo_status"), _("Status")) + entry({"admin", "services", "polipo", "config"}, cbi("polipo"), _("Configuration")) +end + diff --git a/feeds/luci/applications/luci-app-polipo/luasrc/model/cbi/polipo.lua b/feeds/luci/applications/luci-app-polipo/luasrc/model/cbi/polipo.lua new file mode 100644 index 0000000..6031c84 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/luasrc/model/cbi/polipo.lua @@ -0,0 +1,177 @@ +-- Copyright 2008 Aleksandar Krsteski +-- Licensed to the public under the Apache License 2.0. + +m = Map("polipo", translate("Polipo"), + translate("Polipo is a small and fast caching web proxy.")) + +-- General section +s = m:section(NamedSection, "general", "polipo", translate("Proxy")) + +s:tab("general", translate("General Settings")) +s:tab("dns", translate("DNS and Query Settings")) +s:tab("proxy", translate("Parent Proxy")) +s:tab("logging", translate("Logging and RAM")) + +-- General settings +s:taboption("general", Flag, "enabled", translate("enable")) + +o = s:taboption("general", Value, "proxyAddress", translate("Listen address"), + translate("The interface on which Polipo will listen. To listen on all " .. + "interfaces use 0.0.0.0 or :: (IPv6).")) + +o.placeholder = "0.0.0.0" +o.datatype = "ipaddr" + + +o = s:taboption("general", Value, "proxyPort", translate("Listen port"), + translate("Port on which Polipo will listen")) + +o.optional = true +o.placeholder = "8123" +o.datatype = "port" + + +o = s:taboption("general", DynamicList, "allowedClients", + translate("Allowed clients"), + translate("When listen address is set to 0.0.0.0 or :: (IPv6), you must " .. + "list clients that are allowed to connect. The format is IP address " .. + "or network address (192.168.1.123, 192.168.1.0/24, " .. + "2001:660:116::/48 (IPv6))")) + +o.datatype = "ipaddr" +o.placeholder = "0.0.0.0/0" + + +-- DNS settings +dns = s:taboption("dns", Value, "dnsNameServer", translate("DNS server address"), + translate("Set the DNS server address to use, if you want Polipo to use " .. + "different DNS server than the host system.")) + +dns.optional = true +dns.datatype = "ipaddr" + +l = s:taboption("dns", ListValue, "dnsQueryIPv6", + translate("Query DNS for IPv6")) + +l.default = "happily" +l:value("true", translate("Query only IPv6")) +l:value("happily", translate("Query IPv4 and IPv6, prefer IPv6")) +l:value("reluctantly", translate("Query IPv4 and IPv6, prefer IPv4")) +l:value("false", translate("Do not query IPv6")) + + +l = s:taboption("dns", ListValue, "dnsUseGethostbyname", + translate("Query DNS by hostname")) + +l.default = "reluctantly" +l:value("true", translate("Always use system DNS resolver")) +l:value("happily", + translate("Query DNS directly, for unknown hosts fall back " .. + "to system resolver")) +l:value("reluctantly", + translate("Query DNS directly, fallback to system resolver")) +l:value("false", translate("Never use system DNS resolver")) + + +-- Proxy settings +o = s:taboption("proxy", Value, "parentProxy", + translate("Parent proxy address"), + translate("Parent proxy address (in host:port format), to which Polipo " .. + "will forward the requests.")) + +o.optional = true +o.datatype = "hostport" + + +o = s:taboption("proxy", Value, "parentAuthCredentials", + translate("Parent proxy authentication"), + translate("Basic HTTP authentication supported. Provide username and " .. + "password in username:password format.")) + +o.optional = true +o.placeholder = "username:password" + + +-- Logging +s:taboption("logging", Flag, "logSyslog", translate("Log to syslog")) + +s:taboption("logging", Value, "logFacility", + translate("Syslog facility")):depends("logSyslog", "1") + + +v = s:taboption("logging", Value, "logFile", + translate("Log file location"), + translate("Use of external storage device is recommended, because the " .. + "log file is written frequently and can grow considerably.")) + +v:depends("logSyslog", "") +v.rmempty = true + + +o = s:taboption("logging", Value, "chunkHighMark", + translate("In RAM cache size (in bytes)"), + translate("How much RAM should Polipo use for its cache.")) + +o.datatype = "uinteger" + + +-- Disk cache section +s = m:section(NamedSection, "cache", "polipo", translate("On-Disk Cache")) +s:tab("general", translate("General Settings")) +s:tab("advanced", translate("Advanced Settings")) + + +-- Disk cache settings +s:taboption("general", Value, "diskCacheRoot", translate("Disk cache location"), + translate("Location where polipo will cache files permanently. Use of " .. + "external storage devices is recommended, because the cache can " .. + "grow considerably. Leave it empty to disable on-disk " .. + "cache.")).rmempty = true + + +s:taboption("general", Flag, "cacheIsShared", translate("Shared cache"), + translate("Enable if cache (proxy) is shared by multiple users.")) + + +o = s:taboption("advanced", Value, "diskCacheTruncateSize", + translate("Truncate cache files size (in bytes)"), + translate("Size to which cached files should be truncated")) + +o.optional = true +o.placeholder = "1048576" +o.datatype = "uinteger" + + +o = s:taboption("advanced", Value, "diskCacheTruncateTime", + translate("Truncate cache files time"), + translate("Time after which cached files will be truncated")) + +o.optional = true +o.placeholder = "4d12h" + + +o = s:taboption("advanced", Value, "diskCacheUnlinkTime", + translate("Delete cache files time"), + translate("Time after which cached files will be deleted")) + +o.optional = true +o.placeholder = "32d" + + +-- Poor man's multiplexing section +s = m:section(NamedSection, "pmm", "polipo", + translate("Poor Man's Multiplexing"), + translate("Poor Man's Multiplexing (PMM) is a technique that simulates " .. + "multiplexing by requesting an instance in multiple segments. It " .. + "tries to lower the latency caused by the weakness of HTTP " .. + "protocol. NOTE: some sites may not work with PMM enabled.")) + +s:option(Value, "pmmSize", translate("PMM segments size (in bytes)"), + translate("To enable PMM, PMM segment size must be set to some " .. + "positive value.")).rmempty = true + +s:option(Value, "pmmFirstSize", translate("First PMM segment size (in bytes)"), + translate("Size of the first PMM segment. If not defined, it defaults " .. + "to twice the PMM segment size.")).rmempty = true + +return m diff --git a/feeds/luci/applications/luci-app-polipo/luasrc/view/polipo_status.htm b/feeds/luci/applications/luci-app-polipo/luasrc/view/polipo_status.htm new file mode 100644 index 0000000..007d2d5 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/luasrc/view/polipo_status.htm @@ -0,0 +1,18 @@ +<% + +local uci = require "luci.model.uci".cursor() +local addr = "127.0.0.1" +local port = uci:get("polipo", "general", "proxyPort") or "8123" + +-%> + +<%+header%> + +
+

<%:Polipo Status%>

+
+ +
+
+ +<%+footer%> diff --git a/feeds/luci/applications/luci-app-polipo/po/ca/polipo.po b/feeds/luci/applications/luci-app-polipo/po/ca/polipo.po new file mode 100644 index 0000000..76a7093 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/ca/polipo.po @@ -0,0 +1,299 @@ +# polipo.pot +# generated from ./applications/luci-polipo/luasrc/i18n/polipo.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-06-02 05:16+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Ajusts avançats" + +msgid "Allowed clients" +msgstr "Clients permesos" + +msgid "Always use system DNS resolver" +msgstr "Sempre utilitza el resolutor DNS del sistema" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" +"Se suporta autenticació HTTP bàsica. Entra el nom d'usuari i contrasenya en " +"format usuari:contrasenya." + +msgid "Configuration" +msgstr "Configuració" + +msgid "DNS and Query Settings" +msgstr "Ajusts de DNS i petició" + +msgid "DNS server address" +msgstr "Adreça de servidor DNS" + +msgid "Delete cache files time" +msgstr "Hora d'esborrat de fitxers de memòria cau" + +msgid "Disk cache location" +msgstr "Localització de la memòria cau del disc" + +msgid "Do not query IPv6" +msgstr "No consultis IPv6" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "Activa si la memòria cau (proxy) és compartida per múltiples usuaris." + +msgid "First PMM segment size (in bytes)" +msgstr "Mida de segment del primer PMM (en bytes)" + +msgid "General Settings" +msgstr "Ajusts generals" + +msgid "How much RAM should Polipo use for its cache." +msgstr "Quanta RAM hauria de fer servir Polipo per la seva memòria cau" + +msgid "In RAM cache size (in bytes)" +msgstr "Mida de memòria cau a la RAM (en bytes)" + +msgid "Listen address" +msgstr "Adreça que rep connexions" + +msgid "Listen port" +msgstr "Port que rep connexions" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" +"Localització on polipo desarà els fitxers de memòria cau permanentment. Es " +"recomana l'ús de dispositius d'emmagatzematge extern, perquè la memòria cau " +"pot créixer considerablement. Deixa-ho buit per desactivar la memòria cau en " +"disc." + +msgid "Log file location" +msgstr "Localització de fitxer registre" + +msgid "Log to syslog" +msgstr "Registra al syslog" + +msgid "Logging and RAM" +msgstr "Registre i RAM" + +msgid "Never use system DNS resolver" +msgstr "Mai utilitzis el resolutor DNS del sistema" + +msgid "On-Disk Cache" +msgstr "Memòria cau en disc" + +msgid "PMM segments size (in bytes)" +msgstr "Mida de segments MMS (en bytes)" + +msgid "Parent Proxy" +msgstr "Proxy pare" + +msgid "Parent proxy address" +msgstr "Adreça de proxy pare" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" +"Adreça de proxy pare (en format host:port), al que Polipo readreçarà les " +"sol·licituds." + +msgid "Parent proxy authentication" +msgstr "Autenticació de proxy pare" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "Estat del Polipo" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "Polipo és un proxy caché web petit i ràpid." + +msgid "Poor Man's Multiplexing" +msgstr "Multiplexació Poor Man's" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" +"Multiplexació Poor Man's (PMM) és una tècnica que multiplexa sol·licitant " +"una instància en segments múltiples. Intenta reduir la latència causada per " +"la feblesa del protocol HTTP. NOTA: algunes pàgines poden no funcionar amb " +"la PMM activada." + +msgid "Port on which Polipo will listen" +msgstr "Port en que el Polipo escolta" + +msgid "Proxy" +msgstr "Proxy" + +msgid "Query DNS by hostname" +msgstr "Consulta DNS per nom de màquina" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "Consulta DNS per IPv6" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "Consulta IPv4 i IPv6, prefereix IPv4" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "Consulta IPv4 i IPv6, prefereix IPv6" + +msgid "Query only IPv6" +msgstr "Consulta només IPv6" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" +"Estableix l'adreça de servidor DNS a utilitzar, si vols que Polipo faci " +"servir un servidor DNS diferent al del sistema." + +msgid "Shared cache" +msgstr "Memòria cau compartida" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" +"Mida del primer segment PMM. Si no es defineix, per defecte és el doble de " +"la mida de segment MMS." + +msgid "Size to which cached files should be truncated" +msgstr "Mida a que els fitxers en memòria cau es deuen truncar" + +msgid "Status" +msgstr "Estat" + +msgid "Syslog facility" +msgstr "Instal·lació syslog" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" +"La interfície a la que Polipo rebrà les connexions. Per rebre-les a a totes " +"les interfícies, utilitza 0.0.0.0 o :: (IPv6)." + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "Mida de truncatge de fitxer de memòria cau (en bytes)" + +msgid "Truncate cache files time" +msgstr "Hora de truncatge de fitxers de memòria cau" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" +"Es recomana l'ǘs de dispositius d'emmagatzematge externs, ja que el fitxer " +"de registre és escrit freqüentment i pot créixer considerablement." + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "habilita" + +#~ msgid "" +#~ "To enable polipo on-disk cache cleaning (highly recommended), you should " +#~ "add a cron job in Scheduled Tasks services that will execute /usr/sbin/" +#~ "polipo_purge script. For example to perform disk cache cleanup every day " +#~ "at 6:00 in the morning you should add the following line in Scheduled " +#~ "Tasks \"0 6 * * *\\t/usr/sbin/polipo_purge\" (without quotes)." +#~ msgstr "" +#~ "Per activar la neteja memòria cau en disc de polipo (altament recomenat), " +#~ "hauries d'afegir una tasca de cron al servei de Tasques Programades que " +#~ "executaran l'script /usr/sbin/polipo_purge. Per exemple, per executar la " +#~ "neteja de memòria cau del disc cada dia a les 6:00 del matí, hauries " +#~ "d'afegir la següent línia a les Tasques Programades: \"0 6 * * * /usr/" +#~ "sbin/polipo_purge\" (sense cometes)." + +#~ msgid "" +#~ "Size to which cached files should be truncated. (default value: 1048576)" +#~ msgstr "" +#~ "Mida a la qual els fitxers de memòria cau s'haurien de truncar (valor per " +#~ "defecte: 1048576)" + +#~ msgid "" +#~ "Time after which cached files will be truncated. (default value: 4d12h)" +#~ msgstr "" +#~ "Hora després de la qual els fitxers de memòria cau es truncaran (valor " +#~ "per defecte: 4d12h)." + +#~ msgid "Time after which cached files will be deleted. (default value: 32d)" +#~ msgstr "" +#~ "Hora després de la qual els fitxers de memòria s'esborraran (valor per " +#~ "defecte: 32d)." + +#~ msgid "General" +#~ msgstr "General" + +#~ msgid "" +#~ "When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +#~ "that are allowed to connect. The format is IP address or network address " +#~ "(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))." +#~ msgstr "" +#~ "Quan l'adreça d'escolta s'estableix a 0.0.0.0 o :: (IPv6), has de llistar " +#~ "els clients que es permeten per connectar. El format és adreça IP o " +#~ "adreça de xarxa (192.168.1.123, 192.168.1.0/24, 2001:660:116::/47 (IPv6))." + +#~ msgid "" +#~ "false = Do not query IPv6; reluctantly = Query both, prefer IPv4; happily " +#~ "= Query both, prefer IPv6; true = Query only IPv6" +#~ msgstr "" +#~ "fals = No consultis IPv6; a contracor = Consulta els dos, prefereix IPv4; " +#~ "feliçment = Consulta els dos, prefereix IPv6; cert = Consulta només IPv6" + +#~ msgid "" +#~ "false = Never use system DNS resolver; reluctantly = Query DNS directly, " +#~ "if DNS server is unavailable fail to system DNS resolver; happily = Query " +#~ "DNS directly, if host could not be found fallback to system DNS resolver; " +#~ "true = Always use system DNS resolver" +#~ msgstr "" +#~ "fals = mai utilitzis resoledor DNS; a contracor = Consulta DNS " +#~ "directament, si el servidor DNS està indisponible no utilitzis el sistema " +#~ "resoledor de DNS; feliçment = Consulta DNS directament, si la màquina no " +#~ "es pot trobar, vés al sistema resoledor de DNS; cert = Utilitza sistema " +#~ "resoledor DNS sempre" + +#~ msgid "Port on which Polipo will listen. (default value: 8123)" +#~ msgstr "Port al que Polipo rebrà les connexions (valor per defecte: 8123)." + +#~ msgid "polipo_pmm_pmmsize_desc" +#~ msgstr "" +#~ "Per habilitar el PMM, la mida dels segments PMM s'ha d'establir a algun " +#~ "valor positiu." diff --git a/feeds/luci/applications/luci-app-polipo/po/cs/polipo.po b/feeds/luci/applications/luci-app-polipo/po/cs/polipo.po new file mode 100644 index 0000000..9fa249d --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/cs/polipo.po @@ -0,0 +1,205 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-11 19:47+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Pokročilé nastavení" + +msgid "Allowed clients" +msgstr "Povolení klienti" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "Konfigurace" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "Velikost prvního PMM segmentu (v bajtech)" + +msgid "General Settings" +msgstr "Obecné nastavení" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "Velikost PMM segmentů (v bajtech)" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "Stav Polipo" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "Proxy" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "Stav" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "povolit" diff --git a/feeds/luci/applications/luci-app-polipo/po/de/polipo.po b/feeds/luci/applications/luci-app-polipo/po/de/polipo.po new file mode 100644 index 0000000..50f7819 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/de/polipo.po @@ -0,0 +1,272 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2013-01-29 20:21+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +msgid "Allowed clients" +msgstr "Zugelassene Clients" + +msgid "Always use system DNS resolver" +msgstr "Immer DNS-Auflösung des Systems benutzen" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" +"HTTP-Basis-Anmeldung wird unterstützt. Geben Sie Benutzernamen und Passwort " +"im Format benutzername:passwort an." + +msgid "Configuration" +msgstr "Konfiguration" + +msgid "DNS and Query Settings" +msgstr "Einstellungen für DNS und Abfragen" + +msgid "DNS server address" +msgstr "Adresse des DNS-Servers" + +msgid "Delete cache files time" +msgstr "Zeit zur Lösching der Cache-Dateien" + +msgid "Disk cache location" +msgstr "Cache-Verzeichnis" + +msgid "Do not query IPv6" +msgstr "IPv6 nicht abfragen" + +# Klingt komisch +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "Aktivieren, falls Cache (Proxy) von mehreren Benutzern verwendet wird." + +msgid "First PMM segment size (in bytes)" +msgstr "Größe des ersten PMM - Segment in bytes" + +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +msgid "How much RAM should Polipo use for its cache." +msgstr "Wie viel Arbeitsspeicher soll Polipo für den Cache verwenden." + +msgid "In RAM cache size (in bytes)" +msgstr "Größe des Caches im Arbeitsspeicher (Bytes)" + +msgid "Listen address" +msgstr "Aktive Adresse" + +msgid "Listen port" +msgstr "Aktiver Port" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" +"Speicherort für permanent gespeicherte Dateien. Es wird die Benutzung von " +"externen Datenträgern empfohlen, da der Cache sehr groß werden kann. Lassen " +"Sie diese Option leer um den Cache zu deaktivieren." + +msgid "Log file location" +msgstr "Ort der Log-Datei" + +msgid "Log to syslog" +msgstr "Ereignisse im Systemprotokoll (syslog) speichern" + +msgid "Logging and RAM" +msgstr "Protokollierung und Speicher" + +msgid "Never use system DNS resolver" +msgstr "DNS-Auflösung des Systems niemals verwenden" + +msgid "On-Disk Cache" +msgstr "Festplatten-Cache" + +msgid "PMM segments size (in bytes)" +msgstr "Größe des normalen PMM - Segment in bytes" + +msgid "Parent Proxy" +msgstr "Übergeordneter Proxy" + +msgid "Parent proxy address" +msgstr "Adresse des übergeordneten Proxy-Servers" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" +"Adresse des Übergeordneten Proxyservers (im Format host:port), an den Polipo " +"die Anfragen weiterleiten soll." + +msgid "Parent proxy authentication" +msgstr "Authentifizierung für übergeordneten Proxyserver" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "Polipo-Status" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "Polipo ist ein kleiner und schneller Webproxy." + +msgid "Poor Man's Multiplexing" +msgstr "PMM" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" +"Poor Man's Multiplexing (PMM) ist eine Technik, welche Multiplexing " +"simuliert, indem eine Instanz in mehreren Teilen angefordert wird. Damit " +"wird versucht, die durch Schwächen im HTTP-Protokoll verursachten Latenzen " +"auszugleichen. ACHTUNG: Einige Webseiten könnten bei aktivem PMM nicht " +"funktionieren." + +msgid "Port on which Polipo will listen" +msgstr "Port, an dem Polipo lauscht" + +msgid "Proxy" +msgstr "Proxy" + +msgid "Query DNS by hostname" +msgstr "DNS-Abfrage über Hostname" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "direkte DNS-Abfrage, Rückgriff auf System-Auflösung" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" +"direkte DNS-Abfrage, Rückgriff auf System-Auflösung für unbekannte Hosts" + +msgid "Query DNS for IPv6" +msgstr "DNS-Abfrage für IPv6" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "DNS-Abfrage für IPv4 und IPv6, bevorzuge IPv4" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "DNS-Abfrage für IPv4 und IPv6, bevorzuge IPv6" + +msgid "Query only IPv6" +msgstr "Nur IPv6 abfragen" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" +"Geben Sie einen DNS-Server an, wenn Polipo diesen Server statt des " +"systemeigenen DNS-Servers verwenden soll." + +# Verteilt? Gemeinsam? +msgid "Shared cache" +msgstr "Gemeinsamer Cache" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" +"Größe des ersten Segments. Wenn diese Option leer ist, wird hierfür die " +"Doppelte Größe des PMM-Segments angenommen" + +msgid "Size to which cached files should be truncated" +msgstr "Größe, auf die zwischengespeicherte Dateien beschnitten werden sollen" + +msgid "Status" +msgstr "Status" + +msgid "Syslog facility" +msgstr "System-Protokollierungsfunktion" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" +"Aktive Schnittstelle für Polipo. Um Polipo auf allen Schnittstellen zu " +"aktivieren, bitte 0.0.0.0 bzw. :: (IPv6) angeben." + +msgid "Time after which cached files will be deleted" +msgstr "Zeit, nach der zwischengespeicherte Dateien gelöscht werden" + +msgid "Time after which cached files will be truncated" +msgstr "Zeit, nach der zwischengespeicherte Dateien beschnitten werden" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "Um PMM zu aktivieren muss hier ein Wert eingetragen werden" + +msgid "Truncate cache files size (in bytes)" +msgstr "Zwischengespeicherte Dateien auf (Bytes) beschneiden" + +msgid "Truncate cache files time" +msgstr "Zwischengespeicherte Dateien nach (Zeit) beschneiden" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" +"Es sollte ein externes Speichermedium verwendet werden, da häufig in die " +"Protokolldatei geschrieben wird; sie kann dadurch sehr groß werden." + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" +"Ist die aktive Adresse auf 0.0.0.0 oder or :: (IPv6) gesetzt, müssen " +"Clients, die sich verbinden dürfen, angegeben werden. Das Format ist " +"entweder IP- oder Netzwerk-Adresse (192.168.1.123, 192.168.1.0/24, " +"2001:660:116::/48 (IPv6))" + +msgid "enable" +msgstr "aktivieren" + +#, fuzzy +#~ msgid "Time after which cached files will be deleted. (default value: 32d)" +#~ msgstr "" +#~ "Speicherort für permanent gespeicherte Dateien. Es wird die Benutzung von " +#~ "externen Datenträgern empfohlen, da der Cache sehr groß werden kann. " +#~ "Lassen Sie diese Option leer um den Cache zu deaktivieren." + +#~ msgid "General" +#~ msgstr "Allgemein" + +#, fuzzy +#~ msgid "" +#~ "When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +#~ "that are allowed to connect. The format is IP address or network address " +#~ "(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))." +#~ msgstr "" +#~ "Wenn der Server auf alle Anfragen (0.0.0.0 bzw. ::) hört, dann müssen die " +#~ "zugelassenen Gegenpunkte, die berechtig sind eine Verbindung aufzubauen, " +#~ "hier eingetragen werden. Als Format hier bitte die IP-Adresse oder " +#~ "Nerzwerkmaske auswählen (192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 " +#~ "(IPv6))" + +#, fuzzy +#~ msgid "" +#~ "false = Do not query IPv6; reluctantly = Query both, prefer IPv4; happily " +#~ "= Query both, prefer IPv6; true = Query only IPv6" +#~ msgstr "" +#~ "false = Beachtet IPv6 nicht, nur IPv4 möglich; reluctantly = Beachtet " +#~ "sowohl IPv4 als auch IPv6, IPv4 wird bevorzugt; happily = Beachtet sowohl " +#~ "IPv4 als auch IPv6, IPv6 wird bevorzugt; true = Beachtet IPv4 nicht, nur " +#~ "IPv6 möglich" + +#, fuzzy +#~ msgid "Port on which Polipo will listen. (default value: 8123)" +#~ msgstr "" +#~ "Beschreibt, welcher Port von Polipo genutzt werden soll. " +#~ "Grundeinstellung: Port 8123" diff --git a/feeds/luci/applications/luci-app-polipo/po/el/polipo.po b/feeds/luci/applications/luci-app-polipo/po/el/polipo.po new file mode 100644 index 0000000..e7a62dd --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/el/polipo.po @@ -0,0 +1,207 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-28 02:08+0200\n" +"PO-Revision-Date: 2012-03-18 15:29+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "" + +msgid "General Settings" +msgstr "Γενικές Ρυθμίσεις" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/en/polipo.po b/feeds/luci/applications/luci-app-polipo/po/en/polipo.po new file mode 100644 index 0000000..1bdb0c1 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/en/polipo.po @@ -0,0 +1,284 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:35+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allowed clients" +msgstr "Allowed clients" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "DNS server address" + +msgid "Delete cache files time" +msgstr "Delete cache files time" + +msgid "Disk cache location" +msgstr "Disk cache location" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "Enable if cache (proxy) is shared by multiple users." + +msgid "First PMM segment size (in bytes)" +msgstr "First PMM segment size (in bytes)" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "How much RAM should Polipo use for its cache." + +msgid "In RAM cache size (in bytes)" +msgstr "In RAM cache size (in bytes)" + +msgid "Listen address" +msgstr "Listen address" + +msgid "Listen port" +msgstr "Listen port" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." + +msgid "Log file location" +msgstr "Log file location" + +msgid "Log to syslog" +msgstr "Log to syslog" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "On-Disk Cache" + +msgid "PMM segments size (in bytes)" +msgstr "PMM segments size (in bytes)" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "Parent proxy address" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." + +msgid "Parent proxy authentication" +msgstr "Parent proxy authentication" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "Polipo is a small and fast caching web proxy." + +msgid "Poor Man's Multiplexing" +msgstr "Poor Man's Multiplexing" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing " +"by requesting an instance in multiple segments. It tries to lower the " +"latency caused by the weakness of HTTP protocol. NOTE: some sites may not " +"work with PMM enabled." + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "Query DNS by hostname" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "Query DNS for IPv6" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." + +msgid "Shared cache" +msgstr "Shared cache" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "Syslog facility" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "To enable PMM, PMM segment size must be set to some positive value." + +msgid "Truncate cache files size (in bytes)" +msgstr "Truncate cache files size (in bytes)" + +msgid "Truncate cache files time" +msgstr "Truncate cache files time" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" + +#~ msgid "" +#~ "To enable polipo on-disk cache cleaning (highly recommended), you should " +#~ "add a cron job in Scheduled Tasks services that will execute /usr/sbin/" +#~ "polipo_purge script. For example to perform disk cache cleanup every day " +#~ "at 6:00 in the morning you should add the following line in Scheduled " +#~ "Tasks \"0 6 * * *\\t/usr/sbin/polipo_purge\" (without quotes)." +#~ msgstr "" +#~ "To enable polipo on-disk cache cleaning (highly recommended), you should " +#~ "add a cron job in Scheduled Tasks services that will execute /usr/sbin/" +#~ "polipo_purge script. For example to perform disk cache cleanup every day " +#~ "at 6:00 in the morning you should add the following line in Scheduled " +#~ "Tasks \"0 6 * * *\t/usr/sbin/polipo_purge\" (without quotes)." + +#~ msgid "" +#~ "Size to which cached files should be truncated. (default value: 1048576)" +#~ msgstr "" +#~ "Size to which cached files should be truncated. (default value: 1048576)" + +#~ msgid "" +#~ "Time after which cached files will be truncated. (default value: 4d12h)" +#~ msgstr "" +#~ "Time after which cached files will be truncated. (default value: 4d12h)" + +#~ msgid "Time after which cached files will be deleted. (default value: 32d)" +#~ msgstr "Time after which cached files will be deleted. (default value: 32d)" + +#~ msgid "General" +#~ msgstr "General" + +#~ msgid "" +#~ "When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +#~ "that are allowed to connect. The format is IP address or network address " +#~ "(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))." +#~ msgstr "" +#~ "When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +#~ "that are allowed to connect. The format is IP address or network address " +#~ "(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))." + +#~ msgid "" +#~ "false = Do not query IPv6; reluctantly = Query both, prefer IPv4; happily " +#~ "= Query both, prefer IPv6; true = Query only IPv6" +#~ msgstr "" +#~ "false = Do not query IPv6; reluctantly = Query both, prefer IPv4; happily " +#~ "= Query both, prefer IPv6; true = Query only IPv6" + +#~ msgid "" +#~ "false = Never use system DNS resolver; reluctantly = Query DNS directly, " +#~ "if DNS server is unavailable fail to system DNS resolver; happily = Query " +#~ "DNS directly, if host could not be found fallback to system DNS resolver; " +#~ "true = Always use system DNS resolver" +#~ msgstr "" +#~ "false = Never use system DNS resolver; reluctantly = Query DNS directly, " +#~ "if DNS server is unavailable fail to system DNS resolver; happily = Query " +#~ "DNS directly, if host could not be found fallback to system DNS resolver; " +#~ "true = Always use system DNS resolver" + +#~ msgid "Port on which Polipo will listen. (default value: 8123)" +#~ msgstr "Port on which Polipo will listen. (default value: 8123)" diff --git a/feeds/luci/applications/luci-app-polipo/po/es/polipo.po b/feeds/luci/applications/luci-app-polipo/po/es/polipo.po new file mode 100644 index 0000000..84ba24e --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/es/polipo.po @@ -0,0 +1,307 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-09-02 08:33+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Configuración Avanzada" + +msgid "Allowed clients" +msgstr "Clientes permitos" + +msgid "Always use system DNS resolver" +msgstr "Usar siempre el DNS del sistema" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" +"Autenticación soportada: Basic HTTP. Provee del nombre de usuario y " +"contraseña in el formato username:password." + +msgid "Configuration" +msgstr "Configuración" + +msgid "DNS and Query Settings" +msgstr "Configuración de DNS y consultas" + +msgid "DNS server address" +msgstr "Dirección del servidor DNS" + +msgid "Delete cache files time" +msgstr "Tiempo para eliminar archivos de cache" + +msgid "Disk cache location" +msgstr "Ubicación de la caché de disco" + +msgid "Do not query IPv6" +msgstr "No consultar IPv6" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "Activar si la cache (proxy) es compartida por múltiples usuarios." + +msgid "First PMM segment size (in bytes)" +msgstr "Tamaño del primer segmento PMM (en bytes)" + +msgid "General Settings" +msgstr "Configuración general" + +msgid "How much RAM should Polipo use for its cache." +msgstr "Cuánta RAM debe usar Polipo como caché." + +msgid "In RAM cache size (in bytes)" +msgstr "Tamaño (en bytes) de la cache en RAM" + +msgid "Listen address" +msgstr "Dirección de escucha" + +msgid "Listen port" +msgstr "Puerto de escucha" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" +"Ubicación en la que Polipo creará archivos permanentemente. Se recomienda el " +"uso de dispositivos de almacenamiento externo, ya que la caché puede " +"aumentar considerablemente. Deje en blanco para desactivar la caché en disco." + +msgid "Log file location" +msgstr "Ubicación del archivo de registro" + +msgid "Log to syslog" +msgstr "Registrar en syslog" + +msgid "Logging and RAM" +msgstr "Registro y RAM" + +msgid "Never use system DNS resolver" +msgstr "Nunca usar el DNS del sistema" + +msgid "On-Disk Cache" +msgstr "Cache en disco" + +msgid "PMM segments size (in bytes)" +msgstr "Tamaño de segmentos PMM (en bytes)" + +msgid "Parent Proxy" +msgstr "Proxy padre" + +msgid "Parent proxy address" +msgstr "Dirección del proxy padre" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" +"Dirección del proxy padre (en formato máquina:puerto), al cual Polipo " +"traspasará las peticiones." + +msgid "Parent proxy authentication" +msgstr "Autentificación con el proxy padre" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "Estado de Polipo" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "Polipo es un servidor proxy web pequeño y rápido." + +msgid "Poor Man's Multiplexing" +msgstr "Multiplexación Poor Man's" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" +"La Multiplexación Poor Man's (PMM) simula multiplexación solicitando una " +"instancia en múltiples segmentos. Intenta reducir la latencia provocada por " +"la debilidad del protocolo HTTP. NOTA: algunos sitios pueden no funcionar " +"con PMM habilitado." + +msgid "Port on which Polipo will listen" +msgstr "Puerto de escucha de Polipo" + +msgid "Proxy" +msgstr "Proxy" + +msgid "Query DNS by hostname" +msgstr "Consultar DNS por nombre de máquina" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "Consultar DNS directamente y si falla probar con el del sistema" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" +"Consultar DNS directamente y para máquinas desconocidas probar con el del " +"sistema" + +msgid "Query DNS for IPv6" +msgstr "Consulta DNS para IPv6" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "Consultar IPv4 e IPv6, pero mejor IPv4" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "Consultar IPv4 e IPv6, pero mejor IPv6" + +msgid "Query only IPv6" +msgstr "Consultar solo IPv6" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" +"Indique la dirección del servidor DNS a utilizar, si prefiere que Polipo " +"utilice una dirección para el servidor DNS distinta al utilizado en el " +"sistema." + +msgid "Shared cache" +msgstr "Cache compartida" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" +"Tamaño del primer segmento PMM. Si no se encuentra definido, su valor por " +"defecto es el doble del tamaño del segmento PMM." + +msgid "Size to which cached files should be truncated" +msgstr "Tamaño máximo de los ficheros caché" + +msgid "Status" +msgstr "Estado" + +msgid "Syslog facility" +msgstr "Utilidad Syslog" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" +"Interfaz de escucha de Polipo. Para hacerlo en todas utilice 0.0.0.0 o :: " +"(IPv6)." + +msgid "Time after which cached files will be deleted" +msgstr "Tiempo tras el que se borrarán los ficheros en caché" + +msgid "Time after which cached files will be truncated" +msgstr "Tiempo tras el que se truncarán los ficheros en caché" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" +"Para activar PMM, el tamaño de segmento PMM debe tener un valor positivo." + +msgid "Truncate cache files size (in bytes)" +msgstr "Truncar el tamaño del archivo de la cache (en bytes)" + +msgid "Truncate cache files time" +msgstr "Truncar tiempos en el archivo de cache" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" +"El uso de un dispositivo externo de almacenamiento es recomendado, debido a " +"que el archivo log es escrito con mucha frecuencia y el mismo puede " +"incrementar su tamaño de forma considerable." + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" +"Si la dirección de escucha es 0.0.0.0 o :: (IPv6), debe listar a los " +"clientes a los que se permitirá conectar. El formato es dirección IP o " +"dirección de red (192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" + +msgid "enable" +msgstr "activar" + +#~ msgid "" +#~ "To enable polipo on-disk cache cleaning (highly recommended), you should " +#~ "add a cron job in Scheduled Tasks services that will execute /usr/sbin/" +#~ "polipo_purge script. For example to perform disk cache cleanup every day " +#~ "at 6:00 in the morning you should add the following line in Scheduled " +#~ "Tasks \"0 6 * * *\\t/usr/sbin/polipo_purge\" (without quotes)." +#~ msgstr "" +#~ "Para activar la limpieza de la cache en disco polipo (recomendada), se " +#~ "recomienda agregar un trabajo al cron in los Servicios de Tareas " +#~ "Programadas el cual ejecutará el script /usr/sbin/polipo_purge. Por " +#~ "ejemplo para ejecutar una limpieza de la cache de disco todos los días a " +#~ "las 6:00 a.m. deberá agregar la siguiente línea en el Servicio de Tareas " +#~ "Programadas.-&quot;0 6 * * * /usr/sbin/polipo_purge&quot; (sin " +#~ "las comillas)." + +#~ msgid "" +#~ "Size to which cached files should be truncated. (default value: 1048576)" +#~ msgstr "" +#~ "Tamaño del archivo sobre el cual la cache deberá ser truncada. (valor por " +#~ "defecto: 1048576)" + +#~ msgid "" +#~ "Time after which cached files will be truncated. (default value: 4d12h)" +#~ msgstr "" +#~ "Tiempo transcurrido necesario antes de truncar los archivos cacheado. " +#~ "(valor por defecto: 4d12h)" + +#~ msgid "Time after which cached files will be deleted. (default value: 32d)" +#~ msgstr "" +#~ "Tiempo transcurrido necesario antes de eliminar los archivos en la cache. " +#~ "(valor por defecto: 32d)" + +#~ msgid "General" +#~ msgstr "General" + +#~ msgid "" +#~ "When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +#~ "that are allowed to connect. The format is IP address or network address " +#~ "(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))." +#~ msgstr "" +#~ "Cuando la dirección a escuchar es establecida en 0.0.0.0 or :: (en caso " +#~ "de utilizar IPv6), deberá listar los clientes que se encuentran permitos " +#~ "a conectarse. El formato a utilizar deberá indicarse con la dirección IP " +#~ "o bien la dirección de Red.Por ejemplo: (192.168.1.123, 192.168.1.0/24, " +#~ "2001:660:116::/48 (IPv6))." + +#~ msgid "" +#~ "false = Do not query IPv6; reluctantly = Query both, prefer IPv4; happily " +#~ "= Query both, prefer IPv6; true = Query only IPv6" +#~ msgstr "" +#~ "false = No consulta IPv6, reluctantly = Consulta ambos, preferencia IPv4; " +#~ "happily = Consulta ambos, preferencia IPv6; true = Consulta sólamente IPv6" + +#~ msgid "" +#~ "false = Never use system DNS resolver; reluctantly = Query DNS directly, " +#~ "if DNS server is unavailable fail to system DNS resolver; happily = Query " +#~ "DNS directly, if host could not be found fallback to system DNS resolver; " +#~ "true = Always use system DNS resolver" +#~ msgstr "" +#~ "false = Nunca use el sistema de resolución de DNS, reluctantly = " +#~ "Consultar DNS directamente, si el servidor DNS no está disponible al " +#~ "utilizar el sistema de resolución de DNS, hapilly = Consultar DNS " +#~ "directamente, si el host no se pudo encontrar volver al sistema de " +#~ "resolución de DNS; true = Siempre use el sistema de resolución de DNS" + +#~ msgid "Port on which Polipo will listen. (default value: 8123)" +#~ msgstr "Puerto de escucha que Polipo utilizará. (valor por defecto: 8123)" + +#~ msgid "polipo_pmm_pmmsize_desc" +#~ msgstr "" +#~ "Para activar PMM, el tamaño del segmento PMM debe ser establecido a un " +#~ "valor mayor a 0 (valor positivo)." diff --git a/feeds/luci/applications/luci-app-polipo/po/fr/polipo.po b/feeds/luci/applications/luci-app-polipo/po/fr/polipo.po new file mode 100644 index 0000000..f4e49ae --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/fr/polipo.po @@ -0,0 +1,206 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/he/polipo.po b/feeds/luci/applications/luci-app-polipo/po/he/polipo.po new file mode 100644 index 0000000..931228e --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/he/polipo.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/hu/polipo.po b/feeds/luci/applications/luci-app-polipo/po/hu/polipo.po new file mode 100644 index 0000000..931228e --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/hu/polipo.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/it/polipo.po b/feeds/luci/applications/luci-app-polipo/po/it/polipo.po new file mode 100644 index 0000000..6bc0669 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/it/polipo.po @@ -0,0 +1,219 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-02-09 19:56+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Impostazioni avanzate" + +msgid "Allowed clients" +msgstr "Clients permessi" + +# che è sto DNS RESOLVER? +msgid "Always use system DNS resolver" +msgstr "Usa sempre DNS resolver" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" +"Autenticazione base HTTP supportata. Fornire username e password in formato " +"username:password." + +msgid "Configuration" +msgstr "Configurazione" + +msgid "DNS and Query Settings" +msgstr "Settaggi DNS e Query" + +msgid "DNS server address" +msgstr "Indirizzo del server DNS" + +msgid "Delete cache files time" +msgstr "Svuota la cache file dopo" + +msgid "Disk cache location" +msgstr "Percorso della cache del disco" + +msgid "Do not query IPv6" +msgstr "Non ignorare query IPv6" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "Abilita se la cache (del proxy) e' condivisa tra gli utenti." + +msgid "First PMM segment size (in bytes)" +msgstr "Dimensione del primo segmento PMM (in bytes)" + +msgid "General Settings" +msgstr "Impostazioni genarali" + +msgid "How much RAM should Polipo use for its cache." +msgstr "Quanta RAM dovrebbe Polipo usa come sua cache." + +msgid "In RAM cache size (in bytes)" +msgstr "In RAM cache size (in bytes)" + +msgid "Listen address" +msgstr "Indirizzi ip da \"ascoltare\"" + +msgid "Listen port" +msgstr "Porta" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" +"Percorso dove polipo memorizzerà i files di cache permanentemente. L'uso di " +"un dispositivo di memorizzazione esterno è raccomandato. Lasciare vuoto per " +"disabilitare la cache sul disco." + +msgid "Log file location" +msgstr "Percorso del file di log" + +msgid "Log to syslog" +msgstr "Pubblica il log nel syslog" + +msgid "Logging and RAM" +msgstr "Registra in RAM" + +msgid "Never use system DNS resolver" +msgstr "Non usare mai DNS RESOLVER" + +msgid "On-Disk Cache" +msgstr "On-Disk Cache" + +msgid "PMM segments size (in bytes)" +msgstr "DImensione segmenti PMM (in bytes)" + +msgid "Parent Proxy" +msgstr "Parent Proxy" + +msgid "Parent proxy address" +msgstr "Indirizzo parent proxy" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" +"Indirizzi del parent proxy (nel formato ip:porta), al quale Polipo dovrà " +"inoltrare le richieste." + +msgid "Parent proxy authentication" +msgstr "Autentificazione Parent proxy" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "Stato Polipo" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "Polipo è un piccolo e veloce webcache proxy." + +msgid "Poor Man's Multiplexing" +msgstr "Poor Man's Multiplexing" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" +"Poor Man's Multiplexing (PMM) è una tecnica che simula il multiplexing " +"richiedendo una nuova istanza del segmento. Questo server per abbassare la " +"latenza causata dalla debolezza del protocollo HTTP. NOTA: alcuni siti " +"potrebbero non funzionare con PMM abilitato." + +msgid "Port on which Polipo will listen" +msgstr "Porta sulla quale Polipo deve rimanere in ascolto" + +msgid "Proxy" +msgstr "Proxy" + +msgid "Query DNS by hostname" +msgstr "Richiesta DNS da parte dell'host" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "Abilita" diff --git a/feeds/luci/applications/luci-app-polipo/po/ja/polipo.po b/feeds/luci/applications/luci-app-polipo/po/ja/polipo.po new file mode 100644 index 0000000..81ce9a7 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/ja/polipo.po @@ -0,0 +1,229 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-10-06 17:01+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "詳細設定" + +msgid "Allowed clients" +msgstr "アクセスを許可するクライアント" + +msgid "Always use system DNS resolver" +msgstr "常にシステムのDNS名前解決を使用する" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" +"Basic認証をサポートしています。\"ユーザー名:パスワード\"の形式で入力してくだ" +"さい。" + +msgid "Configuration" +msgstr "設定" + +msgid "DNS and Query Settings" +msgstr "DNSおよびクエリ設定" + +msgid "DNS server address" +msgstr "DNSサーバーアドレス" + +msgid "Delete cache files time" +msgstr "キャッシュファイルを保持する時間" + +msgid "Disk cache location" +msgstr "ディスクキャッシュの保存場所" + +msgid "Do not query IPv6" +msgstr "IPv6の問い合わせを行わない" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "複数ユーザーでキャッシュを共有する場合、有効にしてください。" + +msgid "First PMM segment size (in bytes)" +msgstr "ファーストPMM セグメントサイズ (単位:バイト)" + +msgid "General Settings" +msgstr "基本設定" + +msgid "How much RAM should Polipo use for its cache." +msgstr "PolipoがRAM上で使用するキャッシュサイズを設定してください。" + +msgid "In RAM cache size (in bytes)" +msgstr "RAM キャッシュサイズ (単位:バイト)" + +msgid "Listen address" +msgstr "待ち受けアドレス" + +msgid "Listen port" +msgstr "待ち受けポート" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" +"Polipoが使用するキャッシュファイルの保存場所を設定します。キャッシュは頻繁に" +"更新されるため、外部デバイスに保存することを推奨します。空欄に設定した場合、" +"ディスクキャッシュは無効化されます。" + +msgid "Log file location" +msgstr "ログファイルの保存場所" + +msgid "Log to syslog" +msgstr "syslogにログを記録する" + +msgid "Logging and RAM" +msgstr "ログとRAM設定" + +msgid "Never use system DNS resolver" +msgstr "システムのDNS名前解決を使用しない" + +msgid "On-Disk Cache" +msgstr "ディスクキャッシュ" + +msgid "PMM segments size (in bytes)" +msgstr "PMM セグメントサイズ (単位:バイト)" + +msgid "Parent Proxy" +msgstr "親プロキシ" + +msgid "Parent proxy address" +msgstr "親プロキシ・アドレス" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" +"Polipoがリクエストを転送する、親プロキシサーバーのアドレスを\"ホスト:ポート番" +"号\"の形式で設定してください。" + +msgid "Parent proxy authentication" +msgstr "親プロキシの認証" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "Polipo ステータス" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "Polipoは、軽量で高速なWEBプロキシキャッシュサーバーです。" + +msgid "Poor Man's Multiplexing" +msgstr "Poor Man's Multiplexing" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" +"Poor Man's Multiplexing (PMM) は、複数のセグメントに渡ってインスタンスをリク" +"エストすることで、多重化をシュミレートする技術であり、HTTPプロトコルの弱点に" +"よるレイテンシを低減する試みを行います。注意:PMMを有効にしていると、いくつか" +"のサイトではつながらなくなる可能性があります。" + +msgid "Port on which Polipo will listen" +msgstr "Polipoが待ち受けを行うポート番号です。" + +msgid "Proxy" +msgstr "プロキシ" + +msgid "Query DNS by hostname" +msgstr "ホスト名のDNS問い合わせ" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "IPv6 DNS問い合わせ" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "IPv4とIPv6の問い合わせを行う (IPv4を優先)" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "IPv4とIPv6の問い合わせを行う (IPv6を優先)" + +msgid "Query only IPv6" +msgstr "IPv6のみ問い合わせを行う" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" +"Polipoがシステムとは別のDNSサーバーを使用する場合、DNSサーバーのアドレスを設" +"定してください。" + +msgid "Shared cache" +msgstr "共有キャッシュ" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" +"最初のPMM セグメントのサイズを設定します。設定されなかった場合、PMM セグメン" +"トサイズの倍のサイズをデフォルト値として設定します。" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "ステータス" + +msgid "Syslog facility" +msgstr "Syslog ファシリティ" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" +"Polipoが待ち受けを行うインターフェースです。0.0.0.0 または :: (IPv6) を設定し" +"た場合、全てのインターフェースで待ち受けを行います。" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "PMM を有効にする場合、PMM セグメントサイズには正の値を設定してください。" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" +"ログファイルは頻繁に更新されるため、外部デバイスに保存することを推奨します。" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" +"待ち受けアドレスを0.0.0.0 または :: (IPv6) に設定した場合、アクセスを許可する" +"クライアントアドレスを設定してください。設定フォーマットはIPアドレスかネット" +"ワークアドレスです。(例:192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 " +"(IPv6))" + +msgid "enable" +msgstr "サービスを有効にする" diff --git a/feeds/luci/applications/luci-app-polipo/po/ms/polipo.po b/feeds/luci/applications/luci-app-polipo/po/ms/polipo.po new file mode 100644 index 0000000..7517dcc --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/ms/polipo.po @@ -0,0 +1,201 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/no/polipo.po b/feeds/luci/applications/luci-app-polipo/po/no/polipo.po new file mode 100644 index 0000000..931228e --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/no/polipo.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/pl/polipo.po b/feeds/luci/applications/luci-app-polipo/po/pl/polipo.po new file mode 100644 index 0000000..698edc9 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/pl/polipo.po @@ -0,0 +1,231 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-06 22:57+0200\n" +"Last-Translator: obsy \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Ustawienia zaawansowane" + +msgid "Allowed clients" +msgstr "Dozwolone klienty" + +msgid "Always use system DNS resolver" +msgstr "Zawsze używaj systemowej obsługi DNS" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" +"Obsługiwana podstawowa autoryzacja HTTP. Podaj nazwę użytkownika i hasło w " +"formie username:hasło." + +msgid "Configuration" +msgstr "Konfiguracja" + +msgid "DNS and Query Settings" +msgstr "Ustawienia DNS i zapytań" + +msgid "DNS server address" +msgstr "Adres serwera DNS" + +msgid "Delete cache files time" +msgstr "Czas usuwania plików cache" + +msgid "Disk cache location" +msgstr "Położenie cache na dysku" + +msgid "Do not query IPv6" +msgstr "Nie wykonuj zapytań IPv6" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "Włącz, aby cache (proxy) był współdzielony przez wielu użytkowników." + +msgid "First PMM segment size (in bytes)" +msgstr "Rozmiar pierwszego segmentu PMM (w bajtach)" + +msgid "General Settings" +msgstr "Ustawienia ogólne" + +msgid "How much RAM should Polipo use for its cache." +msgstr "Ile pamięci RAM powinien używać Polipo jako cache." + +msgid "In RAM cache size (in bytes)" +msgstr "Rozmiar cache w RAM (w bajtach)" + +msgid "Listen address" +msgstr "Nasłuchuj adres" + +msgid "Listen port" +msgstr "Nasłuchuj port" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" +"Miejsce, w którym Polipo będzie przechowywać pliki cache na stałe. Użycie " +"zewnętrznego magazynu jest zalecane. Cache może się poważnie zwiększyć. " +"Pozostaw puste, aby wyłączyć cache na dysku." + +msgid "Log file location" +msgstr "Katalog logów" + +msgid "Log to syslog" +msgstr "Loguj do logu systemowego (syslog)" + +msgid "Logging and RAM" +msgstr "Dziennik i RAM" + +msgid "Never use system DNS resolver" +msgstr "Nigdy nie używaj systemowej obsługi DNS" + +msgid "On-Disk Cache" +msgstr "Cache na dysku" + +msgid "PMM segments size (in bytes)" +msgstr "Rozmiar segmentu PMM (w bajtach)" + +msgid "Parent Proxy" +msgstr "Nadrzędne proxy" + +msgid "Parent proxy address" +msgstr "Adres nadrzędnego proxy" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" +"Adres nadrzędnego proxy (podany jako host:port), do którego Polipo będzie " +"przekierowywać żądania." + +msgid "Parent proxy authentication" +msgstr "Autoryzacja nadrzędnego proxy" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "Status Polipo" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "Polipo jest małym i szybkim web proxy z obsługą cache." + +# "Multipleksowanie Biedaka" brzmi fajniej, ale nie chcę mieć usuniętego konta. +msgid "Poor Man's Multiplexing" +msgstr "Poor Man's Multiplexing" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" +"Poor Man's Multiplexing (PMM) to technika symulująca multipleksowanie " +"poprzez żądanie instancji w wielu segmentach. Próbuje obniżyć opóźnienia " +"spowodowane wadami protokołu HTTP. UWAGA: niektóre strony mogą nie działać " +"przy włączonym PMM!" + +msgid "Port on which Polipo will listen" +msgstr "Port, na którym Polipo będzie nasłuchiwać." + +msgid "Proxy" +msgstr "Proxy" + +msgid "Query DNS by hostname" +msgstr "Zapytanie DNS po nazwie hosta" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "Odpytuj DNS bezpośrednio, powracając do resolvera systemu" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" +"Odpytuj DNS bezpośrednio, dla nieznanych hostów powróć do resolvera systemu" + +msgid "Query DNS for IPv6" +msgstr "Zapytanie DNS dla IPv6" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "Zapytanie DNS dla IPv4 i IPv6, preferowane IPv4" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "Zapytanie DNS dla IPv4 i IPv6, preferowane IPv6" + +msgid "Query only IPv6" +msgstr "Zapytanie tylko IPv6" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" +"Ustaw adres serwera DNS do użycia, jeśli chcesz aby Polipo używał innego " +"DNS`a niż system hosta." + +msgid "Shared cache" +msgstr "Cache udostępniany" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" +"Rozmiar PIERWSZEGO segmentu PMM. Jeśli nie zdefiniowano, jego domyślny " +"rozmiar to dwu-krotność rozmiaru segmentu PMM." + +msgid "Size to which cached files should be truncated" +msgstr "Rozmiar do którego pliki cache`owane mają być przycięte" + +msgid "Status" +msgstr "Status" + +msgid "Syslog facility" +msgstr "Funkcja (facility) loga systemowego" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" +"Interfejs na którym słucha proxy Polipo. Aby słuchać na wszystkich " +"interfejsach użyj 0.0.0.0 lub :: dla IPv6" + +msgid "Time after which cached files will be deleted" +msgstr "Czas po którym pliki cache będą skasowane" + +msgid "Time after which cached files will be truncated" +msgstr "Czas po którym pliki cache będą przycięte" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" +"Aby włączyć PMM, rozmiar segmentu PMM musi mieć ustawioną wartość dodatnią." + +msgid "Truncate cache files size (in bytes)" +msgstr "Rozmiar przycinanych plików w cache(w bajtach)" + +msgid "Truncate cache files time" +msgstr "Czas przycinanych plików w cache" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" +"Użycie zewnętrznego nośnika danych wysoce zalecane, plik loga jest " +"zapisywany okresowo i może urosnąć znacząco." + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" +"Jeśli adres nasłuchu ustawiony jest na 0.0.0.0 lub ::(IPv6), musisz " +"wyszczególnić klientów mających pozwolenie na połączenie. Format to adres IP " +"lub adres sieci (192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" + +msgid "enable" +msgstr "włączone" diff --git a/feeds/luci/applications/luci-app-polipo/po/pt-br/polipo.po b/feeds/luci/applications/luci-app-polipo/po/pt-br/polipo.po new file mode 100644 index 0000000..881d5c0 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/pt-br/polipo.po @@ -0,0 +1,306 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-09-16 02:36+0200\n" +"Last-Translator: Julio Cezar \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Opções Avançadas" + +msgid "Allowed clients" +msgstr "Clientes permitidos" + +msgid "Always use system DNS resolver" +msgstr "Sempre use o resolvedor de DNS do sistema" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" +"A autenticação básica HTTP é suportada. Indique o usuário e senha no formato " +"usuário:senha." + +msgid "Configuration" +msgstr "Configuração" + +msgid "DNS and Query Settings" +msgstr "Configurações de DNS e Consulta" + +msgid "DNS server address" +msgstr "Endereço do servidor DNS" + +msgid "Delete cache files time" +msgstr "Tempo para remoção dos arquivos de cache" + +msgid "Disk cache location" +msgstr "Localização da cache em disco" + +msgid "Do not query IPv6" +msgstr "Não consulte IPv6" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "Ativar se a cache (proxy) for compartilhada por múltiplos usuários." + +msgid "First PMM segment size (in bytes)" +msgstr "Tamanho do primeiro segmento PMM (em bytes)" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "How much RAM should Polipo use for its cache." +msgstr "Quanta memória RAM deverá ser usada pelo Polipo para a sua cache." + +msgid "In RAM cache size (in bytes)" +msgstr "Tamanho da cache na RAM (bytes)" + +msgid "Listen address" +msgstr "Endereço de escuta" + +msgid "Listen port" +msgstr "Porta de escuta" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" +"Local onde o polipo guardará permanentemente os arquivos de cache. É " +"recomendada a utilização de dispositivos de armazenamento externo uma vez " +"que o cache pode crescer consideravelmente. Deixe em branco para desativar a " +"cache em disco." + +msgid "Log file location" +msgstr "Localização do arquivo de registo" + +msgid "Log to syslog" +msgstr "Registar para o syslog" + +msgid "Logging and RAM" +msgstr "Registro e RAM" + +msgid "Never use system DNS resolver" +msgstr "Nunca use o resolvedor de DNS do sistema" + +msgid "On-Disk Cache" +msgstr "Cache em Disco" + +msgid "PMM segments size (in bytes)" +msgstr "Tamanho do segmento PMM (em bytes)" + +msgid "Parent Proxy" +msgstr "Porxy Superior" + +msgid "Parent proxy address" +msgstr "Endereço do proxy superior" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" +"Endereço do proxy superior (no formato host:porta), ao qual o Polipo irá " +"encaminhar os seus pedidos." + +msgid "Parent proxy authentication" +msgstr "Autenticação no proxy superior" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "Estado do Polipo" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "O polipo é um proxy web pequeno e rápido." + +msgid "Poor Man's Multiplexing" +msgstr "Multiplexagem simples" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" +"A multiplexagem simples (PMM) consiste na simulação de multiplexagem através " +"da requisição de um pedido em múltiplos segmentos. O método tenta baixar a " +"latência causada pela fraqueza do protocolo HTTP. Nota: alguns sites web não " +"funcionam com a ativação de PMM." + +msgid "Port on which Polipo will listen" +msgstr "Porta na qual o Polipo irá escutar" + +msgid "Proxy" +msgstr "Proxy" + +msgid "Query DNS by hostname" +msgstr "Consultar DNS pelo nome do equipamento" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" +"Consulte o DNS diretamente. Alternativamente, use o resolvedor do sistema" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" +"Consulte o DNS diretamente. Para nomes desconhecidos, use o resolvedor do " +"sistema" + +msgid "Query DNS for IPv6" +msgstr "Consultar DNS para IPv6" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "Consulta IPv4 e IPv6, prefere IPv4" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "Consulta IPv4 e IPv6, prefere IPv6" + +msgid "Query only IPv6" +msgstr "Consulta somente IPv6" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" +"Define o endereço do servidor de DNS, caso pretenda que o polipo utilize um " +"servidor DNS diferente do utilizado pelo sistema." + +msgid "Shared cache" +msgstr "Cache compartilhada" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" +"Tamanho do primeiro segmento PMM. Se não estiver definido, reverte para o " +"dobro do tamanho do segmento PMM." + +msgid "Size to which cached files should be truncated" +msgstr "Tamanho que os arquivos de cache serão truncados" + +msgid "Status" +msgstr "Estado" + +msgid "Syslog facility" +msgstr "Categoria dos eventos Polipo no registo do sistema (syslog)" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" +"A interface na qual o Polipo será ativado. Para ativar em todas as " +"interfaces, use 0.0.0.0 ou :: (IPv6)." + +msgid "Time after which cached files will be deleted" +msgstr "Tempo máximo antes que um arquivo de cache seja apagado" + +msgid "Time after which cached files will be truncated" +msgstr "Tempo máximo antes que um arquivo de cache seja truncado" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" +"Para habilitar o PMM, o tamanho do segmento PMM deve ser definido para algum " +"valor positivo." + +msgid "Truncate cache files size (in bytes)" +msgstr "Tamanho de truncagem dos arquivos de cache (em bytes)" + +msgid "Truncate cache files time" +msgstr "Tempo de truncagem dos arquivos de cache" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" +"É recomendado o uso de armazenamento de externos pois o arquivo de registro " +"é escrito frequentemente e pode crescer consideravelmente." + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" +"Quando o endereço de escuta for definido como 0.0.0.0 ou :: (IPv6), é " +"necessário listar quais clientes são permitidos. O formato é o endereço IP " +"ou o endereço derede (192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 " +"(IPv6))" + +msgid "enable" +msgstr "habilitado" + +#~ msgid "" +#~ "To enable polipo on-disk cache cleaning (highly recommended), you should " +#~ "add a cron job in Scheduled Tasks services that will execute /usr/sbin/" +#~ "polipo_purge script. For example to perform disk cache cleanup every day " +#~ "at 6:00 in the morning you should add the following line in Scheduled " +#~ "Tasks \"0 6 * * *\\t/usr/sbin/polipo_purge\" (without quotes)." +#~ msgstr "" +#~ "Para activar a limpeza de cache em disco (altamente recomendado), deve " +#~ "acrescentar uma tarefa cron (\"Serviços\") que execute o script /usr/sbin/" +#~ "polipo_purge. Como exemplo, para executar uma limpeza da cache " +#~ "diariamente pelas 06H00 deve acrescentar a seguinte linha: \"0 6 * * * /" +#~ "usr/sbin/polipo_purge\" (sem as aspas)." + +#~ msgid "" +#~ "Size to which cached files should be truncated. (default value: 1048576)" +#~ msgstr "" +#~ "Tamanho com o qual devem ser trancados os ficheiros da cache. (valor pre-" +#~ "definido: 1048576)" + +#~ msgid "" +#~ "Time after which cached files will be truncated. (default value: 4d12h)" +#~ msgstr "" +#~ "Tempo após o qual os ficheiros de cache serão trancados. (valor pre-" +#~ "definido: 4d12h)" + +#~ msgid "Time after which cached files will be deleted. (default value: 32d)" +#~ msgstr "" +#~ "Tempo apos o qual os ficheiros de cache serão removidos. (valor pré-" +#~ "definido: 32d)" + +#~ msgid "General" +#~ msgstr "Geral" + +#~ msgid "" +#~ "When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +#~ "that are allowed to connect. The format is IP address or network address " +#~ "(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))." +#~ msgstr "" +#~ "Quando o endereço de listen fôr 0.0.0.0 (IPv4) ou :: (IPv6), deve listar " +#~ "os clientes que tiverem permissão para ligação. O formato é endereço de " +#~ "host ou endereço de rede (192.168.1.123, 192.168.1.0/24, " +#~ "2001:660:116::/48 (IPv6))." + +#~ msgid "" +#~ "false = Do not query IPv6; reluctantly = Query both, prefer IPv4; happily " +#~ "= Query both, prefer IPv6; true = Query only IPv6" +#~ msgstr "" +#~ "false = Não pedir IPv6; reluctantly=Pedir ambos e preferir IPv4; " +#~ "happily=Pedir ambos, preferir IPv6; true=Pedir apenas IPv6" + +#~ msgid "" +#~ "false = Never use system DNS resolver; reluctantly = Query DNS directly, " +#~ "if DNS server is unavailable fail to system DNS resolver; happily = Query " +#~ "DNS directly, if host could not be found fallback to system DNS resolver; " +#~ "true = Always use system DNS resolver" +#~ msgstr "" +#~ "false=nunca usar o resolver do sistema; reluctantly=pedir DNS " +#~ "directamente, se o servidor DNS estiver indisponivel recorrer do resolver " +#~ "DNS do sistema; happily=pedir DNS directamente, se o host nao for " +#~ "encontrado, recorrer ao resolver DNS do sistema; true=Usar sempre o " +#~ "resolver DNS do sistema" + +#~ msgid "Port on which Polipo will listen. (default value: 8123)" +#~ msgstr "Porta local na qual o polipo será activado. (pre-definido: 8123)" + +#~ msgid "polipo_pmm_pmmsize_desc" +#~ msgstr "" +#~ "Para activar PMM, o tamanho do segmento PMM deve ser definido para um " +#~ "qualquer valor positivo." diff --git a/feeds/luci/applications/luci-app-polipo/po/pt/polipo.po b/feeds/luci/applications/luci-app-polipo/po/pt/polipo.po new file mode 100644 index 0000000..cdce586 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/pt/polipo.po @@ -0,0 +1,305 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-06-02 19:10+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Definições avançadas" + +msgid "Allowed clients" +msgstr "Clientes permitidos" + +msgid "Always use system DNS resolver" +msgstr "Usar sempre o resolvedor DNS de Sistema" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" +"É suportada a autenticação basica HTTP. Indique username e password no " +"formato username:password." + +msgid "Configuration" +msgstr "Configuração" + +msgid "DNS and Query Settings" +msgstr "Definições de DNS e de Consulta" + +msgid "DNS server address" +msgstr "Endereço do servidor DNS" + +msgid "Delete cache files time" +msgstr "Tempo para remoção dos ficheiros de cache" + +msgid "Disk cache location" +msgstr "Localização da cache em disco" + +msgid "Do not query IPv6" +msgstr "Não consulta o IPv6" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "Activar se a cache (proxy) for partilhada por multiplos utilizadores." + +msgid "First PMM segment size (in bytes)" +msgstr "Tamanho do primeiro segmento PMM (em bytes)" + +msgid "General Settings" +msgstr "Definições Gerais" + +msgid "How much RAM should Polipo use for its cache." +msgstr "Quanta memória RAM deverá ser usada pelo polipo para cache." + +msgid "In RAM cache size (in bytes)" +msgstr "Tamanho da cache em RAM (bytes)" + +msgid "Listen address" +msgstr "Endereço de escuta" + +msgid "Listen port" +msgstr "Porta de escuta" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" +"Local onde o polipo guardará permanentemente os ficheiros de cache. É " +"recomendada a utilização de dispositivos de armazenamento remoto devido ao " +"grande crescimento da cache. Deixe em branco para desactivar a cache em " +"disco." + +msgid "Log file location" +msgstr "Localização do ficheiro de registo" + +msgid "Log to syslog" +msgstr "Registar para o syslog" + +msgid "Logging and RAM" +msgstr "RAM e Logging" + +msgid "Never use system DNS resolver" +msgstr "Nunca usar o DNS de sistema" + +msgid "On-Disk Cache" +msgstr "Cache em disco" + +msgid "PMM segments size (in bytes)" +msgstr "Tamanho do segmento PMM (em bytes)" + +msgid "Parent Proxy" +msgstr "Proxy Superior" + +msgid "Parent proxy address" +msgstr "Endereço do proxy de hierarquia superior." + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" +"Endereço do proxy de hierarquia superior (no formato host:porta), ao qual o " +"polipo irá encaminhar os seus pedidos." + +msgid "Parent proxy authentication" +msgstr "Autenticação em cache de hierarquia superior" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "Estado do Polipo" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "O polipo é um proxy web ligeiro e rápido." + +msgid "Poor Man's Multiplexing" +msgstr "Multiplexagem simples" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" +"A multiplexagem simples (PMM) consiste na simulação de multiplexagem através " +"da requesição de um pedido em multiplos segmentos. O método tenta baixar a " +"latencia causada pela debilidade do protocolo HTTP. Nota: alguns sites web " +"não funcionam com a activação de PMM." + +msgid "Port on which Polipo will listen" +msgstr "Porta na qual o Polipo irá escutar" + +msgid "Proxy" +msgstr "Proxy" + +msgid "Query DNS by hostname" +msgstr "Pedidos ao DNS através de hostname" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "Consultar o DNS diretamente, voltar à resolução de nomes do sistema" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" +"Consultar o DNS diretamente, para hosts desconhecidos voltar à resolução de " +"nomes de sistema" + +msgid "Query DNS for IPv6" +msgstr "Consultar DNS para o IPv6" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "Consultar IPv4 e IPv6, preferência por IPv4" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "Consultar IPv4 e IPv6, preferência por IPv6" + +msgid "Query only IPv6" +msgstr "Consultar apenas IPv6" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" +"Define o endereço do servidor de DNS a usar, caso pretenda que o polipo " +"utilize um servidor alternativo ao do sistema." + +msgid "Shared cache" +msgstr "Cache partilhada" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" +"Tamanho do primeiro segmento PMM. Se não estiver definido, reverte para o " +"dobro do tamanho do segmento PMM." + +msgid "Size to which cached files should be truncated" +msgstr "Tamanho a partir do qual os ficheiro em cache devem ser truncados" + +msgid "Status" +msgstr "Estado" + +msgid "Syslog facility" +msgstr "Categoria dos eventos polipo no registo do sistema" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" +"O interface no qual o polipo será activado. Para activar em todos os " +"endereços, use 0.0.0.0 ou :: (IPv6)." + +msgid "Time after which cached files will be deleted" +msgstr "Tempo após o qual os ficheiro em cache devem ser eliminados" + +msgid "Time after which cached files will be truncated" +msgstr "Tempo após o qual os ficheiro em cache devem ser truncados" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" +"Para ativar PMM, o tamanho do segmento PMM tem de ser definido para um valor " +"positivo." + +msgid "Truncate cache files size (in bytes)" +msgstr "Tamanho de trancagem dos ficheiros de cache (bytes)" + +msgid "Truncate cache files time" +msgstr "Tempo de trancagem dos ficheiros de cache" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" +"É recomendado o recurso a sistemas de armazenamento de ficheiros externos, " +"devido ao rápido crescimento do ficheiro de registo." + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" +"Quando o endereço de escuta está definido como 0.0.0.0 ou :: (IPv6), tem de " +"listar os clientes que estão autorizados a ligar. O formato do endereço IP " +"ou o endereço de rede (192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 " +"(IPv6))" + +msgid "enable" +msgstr "ativar" + +#~ msgid "" +#~ "To enable polipo on-disk cache cleaning (highly recommended), you should " +#~ "add a cron job in Scheduled Tasks services that will execute /usr/sbin/" +#~ "polipo_purge script. For example to perform disk cache cleanup every day " +#~ "at 6:00 in the morning you should add the following line in Scheduled " +#~ "Tasks \"0 6 * * *\\t/usr/sbin/polipo_purge\" (without quotes)." +#~ msgstr "" +#~ "Para activar a limpeza de cache em disco (altamente recomendado), deve " +#~ "acrescentar uma tarefa cron (\"Serviços\") que execute o script /usr/sbin/" +#~ "polipo_purge. Como exemplo, para executar uma limpeza da cache " +#~ "diariamente pelas 06H00 deve acrescentar a seguinte linha: \"0 6 * * * /" +#~ "usr/sbin/polipo_purge\" (sem as aspas)." + +#~ msgid "" +#~ "Size to which cached files should be truncated. (default value: 1048576)" +#~ msgstr "" +#~ "Tamanho com o qual devem ser trancados os ficheiros da cache. (valor pre-" +#~ "definido: 1048576)" + +#~ msgid "" +#~ "Time after which cached files will be truncated. (default value: 4d12h)" +#~ msgstr "" +#~ "Tempo após o qual os ficheiros de cache serão trancados. (valor pre-" +#~ "definido: 4d12h)" + +#~ msgid "Time after which cached files will be deleted. (default value: 32d)" +#~ msgstr "" +#~ "Tempo apos o qual os ficheiros de cache serão removidos. (valor pré-" +#~ "definido: 32d)" + +#~ msgid "General" +#~ msgstr "Geral" + +#~ msgid "" +#~ "When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +#~ "that are allowed to connect. The format is IP address or network address " +#~ "(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))." +#~ msgstr "" +#~ "Quando o endereço de listen fôr 0.0.0.0 (IPv4) ou :: (IPv6), deve listar " +#~ "os clientes que tiverem permissão para ligação. O formato é endereço de " +#~ "host ou endereço de rede (192.168.1.123, 192.168.1.0/24, " +#~ "2001:660:116::/48 (IPv6))." + +#~ msgid "" +#~ "false = Do not query IPv6; reluctantly = Query both, prefer IPv4; happily " +#~ "= Query both, prefer IPv6; true = Query only IPv6" +#~ msgstr "" +#~ "false = Não pedir IPv6; reluctantly=Pedir ambos e preferir IPv4; " +#~ "happily=Pedir ambos, preferir IPv6; true=Pedir apenas IPv6" + +#~ msgid "" +#~ "false = Never use system DNS resolver; reluctantly = Query DNS directly, " +#~ "if DNS server is unavailable fail to system DNS resolver; happily = Query " +#~ "DNS directly, if host could not be found fallback to system DNS resolver; " +#~ "true = Always use system DNS resolver" +#~ msgstr "" +#~ "false=nunca usar o resolver do sistema; reluctantly=pedir DNS " +#~ "directamente, se o servidor DNS estiver indisponivel recorrer do resolver " +#~ "DNS do sistema; happily=pedir DNS directamente, se o host nao for " +#~ "encontrado, recorrer ao resolver DNS do sistema; true=Usar sempre o " +#~ "resolver DNS do sistema" + +#~ msgid "Port on which Polipo will listen. (default value: 8123)" +#~ msgstr "Porta local na qual o polipo será activado. (pre-definido: 8123)" + +#~ msgid "polipo_pmm_pmmsize_desc" +#~ msgstr "" +#~ "Para activar PMM, o tamanho do segmento PMM deve ser definido para um " +#~ "qualquer valor positivo." diff --git a/feeds/luci/applications/luci-app-polipo/po/ro/polipo.po b/feeds/luci/applications/luci-app-polipo/po/ro/polipo.po new file mode 100644 index 0000000..2c2710a --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/ro/polipo.po @@ -0,0 +1,206 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-28 18:42+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Setări avansate" + +msgid "Allowed clients" +msgstr "" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/ru/polipo.po b/feeds/luci/applications/luci-app-polipo/po/ru/polipo.po new file mode 100644 index 0000000..f1d4968 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/ru/polipo.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: polipo\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-08-15 17:51+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Advanced Settings" +msgstr "Расширенные настройки" + +msgid "Allowed clients" +msgstr "Разрешённые клиенты" + +msgid "Always use system DNS resolver" +msgstr "Всегда использовать системный DNS-клиент" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" +"Поддерживается базовая HTTP-аутентификация. Введите имя пользователя и " +"пароль в формате имя:пароль." + +msgid "Configuration" +msgstr "Конфигурация" + +msgid "DNS and Query Settings" +msgstr "Настройки DNS" + +msgid "DNS server address" +msgstr "Адрес DNS-сервера" + +msgid "Delete cache files time" +msgstr "Время удаления кэш-файлов" + +msgid "Disk cache location" +msgstr "Местоположение кэша" + +msgid "Do not query IPv6" +msgstr "Не запрашивать IPv6" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" +"Включите, если вы хотите, чтобы кэш (прокси) был общим для нескольких " +"пользователей." + +msgid "First PMM segment size (in bytes)" +msgstr "Размер первого PMM-сегмента (в байтах)" + +msgid "General Settings" +msgstr "Общие настройки" + +msgid "How much RAM should Polipo use for its cache." +msgstr "Количество RAM, отведенное для кеша." + +msgid "In RAM cache size (in bytes)" +msgstr "Размер кэша в RAM (в байтах)" + +msgid "Listen address" +msgstr "Адрес для входящих соединений" + +msgid "Listen port" +msgstr "Порт для входящих соединений" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" +"Директория, где Polipo хранит кэш-файлы. Рекомендуется использовать внешнее " +"хранилище, так как размер кэша может увеличиваться. Оставьте пустым, чтобы " +"отключить хранение кэша на диске." + +msgid "Log file location" +msgstr "Местоположение файла журнала" + +msgid "Log to syslog" +msgstr "Записывать сообщения в системный журнал" + +msgid "Logging and RAM" +msgstr "Журналирование и RAM" + +msgid "Never use system DNS resolver" +msgstr "Не использовать системный DNS-клиент" + +msgid "On-Disk Cache" +msgstr "Кэширование на диске" + +msgid "PMM segments size (in bytes)" +msgstr "Размер PMM-сегментов (в байтах)" + +msgid "Parent Proxy" +msgstr "Родительский прокси" + +msgid "Parent proxy address" +msgstr "Адрес родительского прокси" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" +"Адрес родительского прокси (в формате хост:порт), на который Polipo будет " +"перенаправлять запросы." + +msgid "Parent proxy authentication" +msgstr "Аутентификация родительского прокси" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "Состояние Polipo" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "Polipo - небольшой веб-прокси, использующий кэширование." + +msgid "Poor Man's Multiplexing" +msgstr "Poor Man's Multiplexing" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" +"Poor Man's Multiplexing (PMM) - это техника, которая позволяет запрашивать " +"данные из нескольких источников. Таким образом, время отклика по HTTP-" +"протоколу сокращается. ПРИМЕЧАНИЕ: некоторые сайты могут не работать с " +"включенным PMM." + +msgid "Port on which Polipo will listen" +msgstr "Порт, на котором Polipo будет ожидать входящие соединения" + +msgid "Proxy" +msgstr "Прокси" + +msgid "Query DNS by hostname" +msgstr "Запрашивать DNS, используя имя хоста" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" +"Запрашивать DNS напрямую, использовать системный клиент в случае ошибки" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" +"Запрашивать DNS напрямую, использовать системный клиент для неизвестных " +"хостов" + +msgid "Query DNS for IPv6" +msgstr "Запрашивать DNS для IPv6" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "Запрашивать IPv4 и IPv6, предпочитать IPv4" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "Запрашивать IPv4 и IPv6, предпочитать IPv6" + +msgid "Query only IPv6" +msgstr "Запрашивать только IPv6" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" +"Установите адрес DNS-сервера для Polipo в случае, если он отличается от " +"системного." + +msgid "Shared cache" +msgstr "Общий кэш" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" +"Размер первого PMM сегмента. Если не указано, то размер первого сегмента " +"будет равен двум обычным." + +msgid "Size to which cached files should be truncated" +msgstr "Размер, до которого будут сокращены файлы кэша" + +msgid "Status" +msgstr "Состояние" + +msgid "Syslog facility" +msgstr "Системный журнал" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" +"Интерфейс, на котором Polipo будет ожидать входящие соединения. Чтобы " +"ожидать на всех интерфейсах, используйте 0.0.0.0 или :: (IPv6)." + +msgid "Time after which cached files will be deleted" +msgstr "Интервал, после которого файлы кэша будут удалены" + +msgid "Time after which cached files will be truncated" +msgstr "Интервал, после которого файлы кэша будут сокращены" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "Чтобы включить PMM, размер PMM сегмента должен быть установлен." + +msgid "Truncate cache files size (in bytes)" +msgstr "Сократить размер файлов кэша (в байтах)" + +msgid "Truncate cache files time" +msgstr "Время сокращения файлов кэша" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" +"Рекомендуется использовать внешнее хранилище, так как журнал часто " +"обновляется и может значительно увеличиваться в размере." + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" +"Если адрес для входящих соединений установлен в 0.0.0.0 или :: (IPv6), вам " +"необходимо перечислить клиентов, которым разрешено подключаться. В таком " +"случае формат - это IP-адрес или адрес подсети (192.168.1.123, " +"192.168.1.0/24, 2001:660:116::/48 (IPv6))" + +msgid "enable" +msgstr "включить" diff --git a/feeds/luci/applications/luci-app-polipo/po/sk/polipo.po b/feeds/luci/applications/luci-app-polipo/po/sk/polipo.po new file mode 100644 index 0000000..e003c17 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/sk/polipo.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/sv/polipo.po b/feeds/luci/applications/luci-app-polipo/po/sv/polipo.po new file mode 100644 index 0000000..531e881 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/sv/polipo.po @@ -0,0 +1,216 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Advanced Settings" +msgstr "Avancerade inställningar" + +msgid "Allowed clients" +msgstr "Tillåtna klienter" + +msgid "Always use system DNS resolver" +msgstr "Använd alltid systemets DNS-resolver" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "Konfiguration" + +msgid "DNS and Query Settings" +msgstr "Inställningar för DNS och Förfrågningar" + +msgid "DNS server address" +msgstr "DNS-serverns adress" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "Första PMM-segmentets storlek (i bytes)" + +msgid "General Settings" +msgstr "Generella inställningar" + +msgid "How much RAM should Polipo use for its cache." +msgstr "Hur mycket RAM borde Polipo använda för dess cache." + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "Lyssningsadress" + +msgid "Listen port" +msgstr "Lyssningsport" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "Plats för loggfil" + +msgid "Log to syslog" +msgstr "Logga till syslog" + +msgid "Logging and RAM" +msgstr "Loggning och RAM" + +msgid "Never use system DNS resolver" +msgstr "Använd aldrig systemets DNS-resolver" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "PMM-segmentets storlek (i bytes)" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "Status för Polipo" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "Vilken port som Polipo ska lyssna på" + +msgid "Proxy" +msgstr "Proxy" + +msgid "Query DNS by hostname" +msgstr "Fråga efter DNS via värdnamn" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "Fråga efter DNS för IPv6" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" +"Ange DNS-serverns adress som ska användas om du vill att Polipo ska använda " +"en annan DNS-serverän värdsystemet." + +msgid "Shared cache" +msgstr "Delad cache" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" +"Storleken av det första PMM-segmentet. Om det inte definieras så " +"standardiseras det till den dubbla storleken av PMM-segmentet" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "Status" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" +"Gränssnittet som Polipo ska lyssna i. För att lyssna på alla gränssnitt, " +"använd 0.0.0.0 eller :: (IPv6)." + +msgid "Time after which cached files will be deleted" +msgstr "Tiden efter vilket cachade filer kommer att bli raderade" + +msgid "Time after which cached files will be truncated" +msgstr "Tiden efter vilket cachade filer kommer att bli trunkerade" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" +"För att aktivera PMM så måste PMM-segmentet vara inställt till ett positivt " +"värde." + +msgid "Truncate cache files size (in bytes)" +msgstr "Storlek på cache-filer att trunkera (i bytes)" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" +"Användning av en extern lagringsenhet rekommenderas eftersom att loggfilen " +"är frekvent skriven och kan växa avsevärt." + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" +"När lyssningsadress är inställd till 0.0.0.0 eller :: (IPv6) så måste du " +"lista klienter som tillåts att ansluta. Formatet är IP-adressen eller " +"nätverksadressen (192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" + +msgid "enable" +msgstr "aktivera" diff --git a/feeds/luci/applications/luci-app-polipo/po/templates/polipo.pot b/feeds/luci/applications/luci-app-polipo/po/templates/polipo.pot new file mode 100644 index 0000000..beb0bdb --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/templates/polipo.pot @@ -0,0 +1,195 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/tr/polipo.po b/feeds/luci/applications/luci-app-polipo/po/tr/polipo.po new file mode 100644 index 0000000..25982ec --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/tr/polipo.po @@ -0,0 +1,202 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/uk/polipo.po b/feeds/luci/applications/luci-app-polipo/po/uk/polipo.po new file mode 100644 index 0000000..9b1b637 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/uk/polipo.po @@ -0,0 +1,206 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-09-21 15:36+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "Додаткові налаштування" + +msgid "Allowed clients" +msgstr "" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" + +msgid "Configuration" +msgstr "Конфігурація" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "" + +msgid "Delete cache files time" +msgstr "" + +msgid "Disk cache location" +msgstr "" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "" + +msgid "First PMM segment size (in bytes)" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" + +msgid "Log file location" +msgstr "" + +msgid "Log to syslog" +msgstr "" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/vi/polipo.po b/feeds/luci/applications/luci-app-polipo/po/vi/polipo.po new file mode 100644 index 0000000..0765db3 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/vi/polipo.po @@ -0,0 +1,290 @@ +# polipo.pot +# generated from ./applications/luci-polipo/luasrc/i18n/polipo.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:58+0200\n" +"PO-Revision-Date: 2009-08-13 07:49+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allowed clients" +msgstr "Đối tượng cho phép" + +msgid "Always use system DNS resolver" +msgstr "" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "" +"Sự chứng thực HTTP Cơ bản được hỗ trợ. Cung cấp tên người dùng và mật khẩu " +"trong tên người dùng: mật khẩu định dạng" + +msgid "Configuration" +msgstr "" + +msgid "DNS and Query Settings" +msgstr "" + +msgid "DNS server address" +msgstr "Địa chỉ tên miền máy chủ" + +msgid "Delete cache files time" +msgstr "Xóa tập tin cạc khi" + +msgid "Disk cache location" +msgstr "Vị trí cạc đĩa" + +msgid "Do not query IPv6" +msgstr "" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "Kích hoạt nếu cạc được chia rẻ bởi nhiều người dùng." + +msgid "First PMM segment size (in bytes)" +msgstr "Dung lượng phân đoạn PMM đầu tiên (in bytes)" + +msgid "General Settings" +msgstr "" + +msgid "How much RAM should Polipo use for its cache." +msgstr "Bao nhiêu RAM Polipo nên dùng cho cạc." + +msgid "In RAM cache size (in bytes)" +msgstr "Trong RAM dung lượng cạc (tính theo bytes)" + +msgid "Listen address" +msgstr "Địa chỉ nge" + +msgid "Listen port" +msgstr "Cổng nghe" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "" +"Vị trị mà polipo sẽ định các tập tin thường xuyên. Sử dụng thiết bị nhớ " +"ngoài được khuyến khích, bởi vì cạc có thể lớn lên đáng kể. Để lại nó trống " +"để vô hiệu hóa Trên cạc trên đĩa." + +msgid "Log file location" +msgstr "Vị trí tập tin sổ ghi" + +msgid "Log to syslog" +msgstr "Log to syslog" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "" + +msgid "On-Disk Cache" +msgstr "Cạc trên ổ đĩa" + +msgid "PMM segments size (in bytes)" +msgstr "Dung lượng phân đoạn PMM (in bytes)" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "Địa chỉ parent proxy " + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" +"Địa chỉ parent proxy (in host:port format), cái mà Polipo sẽ chuyển yêu cầu " +"tới." + +msgid "Parent proxy authentication" +msgstr "Xác thực parent proxy " + +msgid "Polipo" +msgstr "Polipo" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "Polipo là một web proxy nhỏ và nhanh caching." + +msgid "Poor Man's Multiplexing" +msgstr "Poor Man&#39;s Multiplexing" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" +"Poor Man&#39;s Multiplexing (PMM) là một kỹ thuật kích thích " +"multiplexing bằng cách yêu cầu trường hợp trong nhiều phân đoạn. Nó cố gắng " +"hạ thấp sự trễ nãi do các điểm yếu HTTP protocol gây ra. Chú ý: một số trang " +"web có thể không hoạt động với PMM bật." + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "Tra vấn DNS bằng hostname" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "Tra vấn DNS cho IPv6" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" +"Cài đặt địa chỉ tên miền máy chủ để sử dụng, nếu bạn muốn Polipo dùng tên " +"miền khác với hệ thông chính. " + +msgid "Shared cache" +msgstr "Cạc trên ổ đĩa" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" +"Dung lượng của phân đoạn PMM đầu tiên. Nếu không định nghĩa sẽ mặc định dung " +"lượng của phân đoạn PMM gấp 2 lần" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "Syslog facility" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" +"Giao diện mà Polipo sẽ nghe. Để nghe trên tất cả các giao diện dùng 0.0.0.0 " +"hoặc :: (IPv6)" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "Bỏ bớt những tập tin cạc với dung lượng (bytes)" + +msgid "Truncate cache files time" +msgstr "Cắt bỏ tập tin cạc khi" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" +"Nên dùng bộ nhớ ngoài bởi vì tập tin sổ ghi được viết rất nhiều lần và có " +"thể phát tán rất mạnh. " + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" + +#~ msgid "" +#~ "To enable polipo on-disk cache cleaning (highly recommended), you should " +#~ "add a cron job in Scheduled Tasks services that will execute /usr/sbin/" +#~ "polipo_purge script. For example to perform disk cache cleanup every day " +#~ "at 6:00 in the morning you should add the following line in Scheduled " +#~ "Tasks \"0 6 * * *\\t/usr/sbin/polipo_purge\" (without quotes)." +#~ msgstr "" +#~ "Để kích hoạt tính năng làm sạch trên cạc đĩa polipo (rất khuyến khích), " +#~ "bạn nên thêm vào một công việc cron trong những công tác đã schedule, nó " +#~ "sẽ thực hiện / usr / sbin / polipo_purge script. Ví dụ: để thực hiện các " +#~ "đĩa bộ nhớ cache mỗi ngày vào lúc 6:00 sáng, bạn nên thêm dòng sau trong " +#~ "Scheduled công việc &quot;0 6 * * * /usr/sbin/polipo_purge&quot; " +#~ "(không có dấu ngoặc kép)." + +#~ msgid "" +#~ "Size to which cached files should be truncated. (default value: 1048576)" +#~ msgstr "Dung lượng mà những tập tin cạc bị cắt bỏ. (Giá trị: 1048576)" + +#~ msgid "" +#~ "Time after which cached files will be truncated. (default value: 4d12h)" +#~ msgstr "Thời gian khi tập tin cạc sẽ bị cắt bỏ (Giá trị: 4d12h)" + +#~ msgid "Time after which cached files will be deleted. (default value: 32d)" +#~ msgstr "Thời gian khi tập tin cạc sẽ bị xóa. (Giá trị: 32d)" + +#~ msgid "General" +#~ msgstr "Tổng quát" + +#~ msgid "" +#~ "When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +#~ "that are allowed to connect. The format is IP address or network address " +#~ "(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))." +#~ msgstr "" +#~ "Khi nghe địa chỉ được đặt ở 0.0.0.0 hoặc :: (IPv6), bạn phải liệt kê " +#~ "những đối tượng được phép kết nối. Định dạng là địa chỉ IP hoặc địa chỉ " +#~ "mạng (192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))." + +#~ msgid "" +#~ "false = Do not query IPv6; reluctantly = Query both, prefer IPv4; happily " +#~ "= Query both, prefer IPv6; true = Query only IPv6" +#~ msgstr "" +#~ "False = Đừng truy vấn IPv6; reluctantly = Truy vấn cả hai, IPv4 được " +#~ "chuộng hơn; happily = truy vấn cả hai, IPv6 chuộng hơn; true = chỉ truy " +#~ "vấn IPv6" + +#~ msgid "" +#~ "false = Never use system DNS resolver; reluctantly = Query DNS directly, " +#~ "if DNS server is unavailable fail to system DNS resolver; happily = Query " +#~ "DNS directly, if host could not be found fallback to system DNS resolver; " +#~ "true = Always use system DNS resolver" +#~ msgstr "" +#~ "false = Đừng bao giờ dùng bộ phân tích hệ thống DNS; reluctantly = Truy " +#~ "vấn DNS trực tiếp, nếu DNS server không có sẵn trong bộ phân tích hệ " +#~ "thống DNS; happily = truy vấn DNS trực tiếp, nếu host bị đẩy lùi so với " +#~ "bộ phân tích hệ thống DNS; true = Luân luân dùng bộ phân tích hệ thống DNS" + +#~ msgid "Port on which Polipo will listen. (default value: 8123)" +#~ msgstr "Cổng mà Polipo sẽ nghe. (giá trị: 8123)" + +#~ msgid "polipo_pmm_pmmsize_desc" +#~ msgstr "" +#~ "Để kích hoạt PMM, dung lượng phân đoạn PMM phải được đặt những giá trị " +#~ "dương." diff --git a/feeds/luci/applications/luci-app-polipo/po/zh-cn/polipo.po b/feeds/luci/applications/luci-app-polipo/po/zh-cn/polipo.po new file mode 100644 index 0000000..7dcbe23 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/zh-cn/polipo.po @@ -0,0 +1,205 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-09 03:47+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "高级设置" + +msgid "Allowed clients" +msgstr "允许的客户端" + +msgid "Always use system DNS resolver" +msgstr "始终使用系统DNS解析" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "支持HTTP基本身份验证。提供用户名和密码格式为:用户名:密码。" + +msgid "Configuration" +msgstr "配置" + +msgid "DNS and Query Settings" +msgstr "DNS查询设置" + +msgid "DNS server address" +msgstr "DNS地址" + +msgid "Delete cache files time" +msgstr "清除缓存文件周期" + +msgid "Disk cache location" +msgstr "磁盘缓存位置" + +msgid "Do not query IPv6" +msgstr "不能查询IPv6" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "允许多用户共享缓存(代理)。" + +msgid "First PMM segment size (in bytes)" +msgstr "第一的PMM段的大小(字节为单位)" + +msgid "General Settings" +msgstr "通用设置" + +msgid "How much RAM should Polipo use for its cache." +msgstr "" + +msgid "In RAM cache size (in bytes)" +msgstr "" + +msgid "Listen address" +msgstr "监听地址" + +msgid "Listen port" +msgstr "监听端口" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "polipo将永久缓存文件。建议使用外部存储设备,因为缓存会一直增长。留空表示禁用磁盘缓存。" + +msgid "Log file location" +msgstr "日志存放位置" + +msgid "Log to syslog" +msgstr "吐日志到syslog" + +msgid "Logging and RAM" +msgstr "" + +msgid "Never use system DNS resolver" +msgstr "从不使用系统DNS解析" + +msgid "On-Disk Cache" +msgstr "磁盘缓存" + +msgid "PMM segments size (in bytes)" +msgstr "" + +msgid "Parent Proxy" +msgstr "" + +msgid "Parent proxy address" +msgstr "" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "" + +msgid "Parent proxy authentication" +msgstr "" + +msgid "Polipo" +msgstr "" + +msgid "Polipo Status" +msgstr "" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "" + +msgid "Poor Man's Multiplexing" +msgstr "" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr "" + +msgid "Proxy" +msgstr "" + +msgid "Query DNS by hostname" +msgstr "" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "" + +msgid "Query DNS for IPv6" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "" + +msgid "Query only IPv6" +msgstr "" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "" + +msgid "Shared cache" +msgstr "" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "" + +msgid "Size to which cached files should be truncated" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Syslog facility" +msgstr "" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "" + +msgid "Time after which cached files will be deleted" +msgstr "" + +msgid "Time after which cached files will be truncated" +msgstr "" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "" + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/po/zh-tw/polipo.po b/feeds/luci/applications/luci-app-polipo/po/zh-tw/polipo.po new file mode 100644 index 0000000..5058897 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/po/zh-tw/polipo.po @@ -0,0 +1,205 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-21 13:13+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Advanced Settings" +msgstr "進階設定" + +msgid "Allowed clients" +msgstr "允許的客戶端" + +msgid "Always use system DNS resolver" +msgstr "總是採用系統使用的DNS解析" + +msgid "" +"Basic HTTP authentication supported. Provide username and password in " +"username:password format." +msgstr "基本的HTTP驗證支援. 提供使用者名稱和密碼以username:password格式" + +msgid "Configuration" +msgstr "設定" + +msgid "DNS and Query Settings" +msgstr "DNS及查詢設定值" + +msgid "DNS server address" +msgstr "DNS伺服器位址" + +msgid "Delete cache files time" +msgstr "刪除快取檔的時間" + +msgid "Disk cache location" +msgstr "磁碟快取放置的位置" + +msgid "Do not query IPv6" +msgstr "不使用IPv6查詢" + +msgid "Enable if cache (proxy) is shared by multiple users." +msgstr "假若快取(Proxy)被多個使用者分享使用就啓用" + +msgid "First PMM segment size (in bytes)" +msgstr "第一個PMM段的大小(以bytes方式表示)" + +msgid "General Settings" +msgstr "基本設定" + +msgid "How much RAM should Polipo use for its cache." +msgstr "Polipo拿來當快取的記憶體量是多大?" + +msgid "In RAM cache size (in bytes)" +msgstr "記憶體快取大小(以bytes方式表示)" + +msgid "Listen address" +msgstr "聆聽位址" + +msgid "Listen port" +msgstr "聆聽埠號" + +msgid "" +"Location where polipo will cache files permanently. Use of external storage " +"devices is recommended, because the cache can grow considerably. Leave it " +"empty to disable on-disk cache." +msgstr "Polipo位置將永久快取文件。建議使用外部的存儲設備,因為快取會顯著增長。保留空白以便關閉磁碟快取." + +msgid "Log file location" +msgstr "紀錄檔位置" + +msgid "Log to syslog" +msgstr "記錄到系統記錄syslog中" + +msgid "Logging and RAM" +msgstr "記錄和記憶體" + +msgid "Never use system DNS resolver" +msgstr "從不使用系統DNS解析" + +msgid "On-Disk Cache" +msgstr "磁碟上的快取" + +msgid "PMM segments size (in bytes)" +msgstr "PMM段大小(以bytes表示)" + +msgid "Parent Proxy" +msgstr "上層Proxy" + +msgid "Parent proxy address" +msgstr "上層Proxy位址" + +msgid "" +"Parent proxy address (in host:port format), to which Polipo will forward the " +"requests." +msgstr "Polipo應該重導這個要求所到的上層Proxy(以 主機:埠號 格式表示)." + +msgid "Parent proxy authentication" +msgstr "上層Proxy位址驗證" + +msgid "Polipo" +msgstr "Polipo本地代理伺服器" + +msgid "Polipo Status" +msgstr "Polipo狀況" + +msgid "Polipo is a small and fast caching web proxy." +msgstr "Polipo是一個小型且快速的快取網頁代理" + +msgid "Poor Man's Multiplexing" +msgstr "窮人的多工器Poor Man's Multiplexing" + +msgid "" +"Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by " +"requesting an instance in multiple segments. It tries to lower the latency " +"caused by the weakness of HTTP protocol. NOTE: some sites may not work with " +"PMM enabled." +msgstr "" + +msgid "Port on which Polipo will listen" +msgstr " Polipo聆聽的埠號" + +msgid "Proxy" +msgstr "代理伺服器" + +msgid "Query DNS by hostname" +msgstr "以主機名稱查詢DNS" + +msgid "Query DNS directly, fallback to system resolver" +msgstr "直接查詢DNS, 回傳給系統解析" + +msgid "Query DNS directly, for unknown hosts fall back to system resolver" +msgstr "直接查詢DNS, 對莫名的主機回傳給系統解析" + +msgid "Query DNS for IPv6" +msgstr "幫IPv6查詢DNS" + +msgid "Query IPv4 and IPv6, prefer IPv4" +msgstr "查詢IPv4和IPv6,IPv4優先" + +msgid "Query IPv4 and IPv6, prefer IPv6" +msgstr "查詢IPv4和IPv6 ,IPv6優先" + +msgid "Query only IPv6" +msgstr "只查詢IPv6" + +msgid "" +"Set the DNS server address to use, if you want Polipo to use different DNS " +"server than the host system." +msgstr "設定DNS伺服器位址以便使用, 假如你要Polipo代理人使用不同的DNS伺服器而非主機系統." + +msgid "Shared cache" +msgstr "分享的快取" + +msgid "" +"Size of the first PMM segment. If not defined, it defaults to twice the PMM " +"segment size." +msgstr "第一個PMM區段的大小, 假若沒定義 ,預設兩次PMM區段的大小." + +msgid "Size to which cached files should be truncated" +msgstr "快取檔被截斷的大小" + +msgid "Status" +msgstr "狀態" + +msgid "Syslog facility" +msgstr "日誌設施" + +msgid "" +"The interface on which Polipo will listen. To listen on all interfaces use " +"0.0.0.0 or :: (IPv6)." +msgstr "Polipo將會聆聽的介面. 要聆聽所有介面使用0.0.0.0 或 :: (IPv6)." + +msgid "Time after which cached files will be deleted" +msgstr "快取將會被刪除的留存時間" + +msgid "Time after which cached files will be truncated" +msgstr "快取將會被斷頭的留存時間" + +msgid "To enable PMM, PMM segment size must be set to some positive value." +msgstr "要啟用PMM, PMM區段大小必須設定些積極的數值." + +msgid "Truncate cache files size (in bytes)" +msgstr "" + +msgid "Truncate cache files time" +msgstr "" + +msgid "" +"Use of external storage device is recommended, because the log file is " +"written frequently and can grow considerably." +msgstr "" + +msgid "" +"When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients " +"that are allowed to connect. The format is IP address or network address " +"(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))" +msgstr "" + +msgid "enable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-polipo/root/etc/uci-defaults/40_luci-polipo b/feeds/luci/applications/luci-app-polipo/root/etc/uci-defaults/40_luci-polipo new file mode 100755 index 0000000..0c57063 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/root/etc/uci-defaults/40_luci-polipo @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@polipo[-1] + add ucitrack polipo + set ucitrack.@polipo[-1].init=polipo + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-polipo/root/usr/sbin/polipo_purge b/feeds/luci/applications/luci-app-polipo/root/usr/sbin/polipo_purge new file mode 100755 index 0000000..23ba571 --- /dev/null +++ b/feeds/luci/applications/luci-app-polipo/root/usr/sbin/polipo_purge @@ -0,0 +1,18 @@ +#!/bin/sh + +DAEMON=/usr/sbin/polipo +PIDFILE=`uci get polipo.daemon.pidFile` +CFGFILE=/var/etc/polipo.conf + +[ -e "$PIDFILE" ] && { + PID=`cat $PIDFILE` + + # send Polipo USR1 signal to write its in-memory cache to disk + kill -USR1 $PID + sleep 2 + # start polipo with -x flag to purge the on-disk cache + polipo -c $CFGFILE -x + # send Polipo USR2 signal to discard its in-memory cache + kill -USR2 $PID +} + diff --git a/feeds/luci/applications/luci-app-privoxy/Makefile b/feeds/luci/applications/luci-app-privoxy/Makefile new file mode 100644 index 0000000..e174c80 --- /dev/null +++ b/feeds/luci/applications/luci-app-privoxy/Makefile @@ -0,0 +1,38 @@ +# +# Copyright (C) 2008-2015 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-privoxy + +# Version == major.minor.patch +# increase "minor" on new functionality and "patch" on patches/optimization +PKG_VERSION:=1.0.6 + +# Release == build +# increase on changes of translation files +PKG_RELEASE:=1 + +PKG_LICENSE:=Apache-2.0 +PKG_MAINTAINER:=Christian Schoenebeck + +# LuCI specific settings +LUCI_TITLE:=LuCI Support for Privoxy WEB proxy +LUCI_DEPENDS:=+luci-mod-admin-full +privoxy +LUCI_PKGARCH:=all + +define Package/$(PKG_NAME)/config +# shown in make menuconfig +help + $(LUCI_TITLE) + . + Version: $(PKG_VERSION)-$(PKG_RELEASE) + $(PKG_MAINTAINER) +endef + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-privoxy/luasrc/controller/privoxy.lua b/feeds/luci/applications/luci-app-privoxy/luasrc/controller/privoxy.lua new file mode 100644 index 0000000..6439a30 --- /dev/null +++ b/feeds/luci/applications/luci-app-privoxy/luasrc/controller/privoxy.lua @@ -0,0 +1,241 @@ +-- Copyright 2014-2016 Christian Schoenebeck +-- Licensed under the Apache License, Version 2.0 + +module("luci.controller.privoxy", package.seeall) + +local NX = require "nixio" +local NXFS = require "nixio.fs" +local DISP = require "luci.dispatcher" +local HTTP = require "luci.http" +local I18N = require "luci.i18n" -- not globally avalible here +local IPKG = require "luci.model.ipkg" +local UCI = require "luci.model.uci" +local UTIL = require "luci.util" +local SYS = require "luci.sys" + +local srv_name = "privoxy" +local srv_ver_min = "3.0.23" -- minimum version of service required +local srv_ver_cmd = [[/usr/sbin/privoxy --version | awk {'print $3'}]] +local app_name = "luci-app-privoxy" +local app_title = "Privoxy WEB proxy" +local app_version = "1.0.6-1" + +function index() + entry( {"admin", "services", "privoxy"}, cbi("privoxy"), _("Privoxy WEB proxy"), 59) + entry( {"admin", "services", "privoxy", "logview"}, call("logread") ).leaf = true + entry( {"admin", "services", "privoxy", "startstop"}, post("startstop") ).leaf = true + entry( {"admin", "services", "privoxy", "status"}, call("get_pid") ).leaf = true +end + +-- Application specific information functions +function app_description() + return I18N.translate("Privoxy is a non-caching web proxy with advanced filtering " + .. "capabilities for enhancing privacy, modifying web page data and HTTP headers, " + .. "controlling access, and removing ads and other obnoxious Internet junk.") + .. [[
]] + .. I18N.translate("For help use link at the relevant option") + .. [[]] +end + +-- Standardized application/service functions +function app_title_main() + return [[]] + .. I18N.translate(app_title) + .. [[]] +end +function service_version() + local ver = nil + IPKG.list_installed(srv_name, function(n, v, d) + if v and (#v > 0) then ver = v end + end + ) + if not ver or (#ver == 0) then + ver = UTIL.exec(srv_ver_cmd) + if #ver == 0 then ver = nil end + end + return ver +end +function service_ok() + return IPKG.compare_versions((service_version() or "0"), ">=", srv_ver_min) +end +function service_update() + local url = DISP.build_url("admin", "system", "packages") + if not service_version() then + return [[


    ]] + .. I18N.translate("Software package '%s' is not installed." % srv_name) + .. [[

    ]] + .. I18N.translate("required") .. [[: ]] .. srv_name .. [[ ]] .. srv_ver_min .. " " .. I18N.translate("or higher") + .. [[

    ]] + .. [[]] + .. I18N.translate("Please install current version !") + .. [[
 

]] + else + return [[



    ]] + .. I18N.translate("Software package '%s' is outdated." % srv_name) + .. [[

    ]] + .. I18N.translate("installed") .. ": " .. service_version() + .. [[

    ]] + .. I18N.translate("required") .. ": " .. srv_ver_min .. " " .. I18N.translate("or higher") + .. [[

    ]] + .. [[]] + .. I18N.translate("Please update to the current version!") + .. [[

 

]] + end +end + +-- called by XHR.get from detail_logview.htm +function logread() + -- read application settings + local uci = UCI.cursor() + local logdir = uci:get("privoxy", "privoxy", "logdir") or "/var/log" + local logfile = uci:get("privoxy", "privoxy", "logfile") or "privoxy.log" + uci:unload("privoxy") + + local ldata=NXFS.readfile(logdir .. "/" .. logfile) + if not ldata or #ldata == 0 then + ldata="_nodata_" + end + HTTP.write(ldata) +end + +-- called by XHR.get from detail_startstop.htm +function startstop() + local pid = get_pid(true) + if pid > 0 then + SYS.call("/etc/init.d/privoxy stop") + NX.nanosleep(1) -- sleep a second + if NX.kill(pid, 0) then -- still running + NX.kill(pid, 9) -- send SIGKILL + end + pid = 0 + else + SYS.call("/etc/init.d/privoxy start") + NX.nanosleep(1) -- sleep a second + pid = tonumber(NXFS.readfile("/var/run/privoxy.pid") or 0 ) + if pid > 0 and not NX.kill(pid, 0) then + pid = 0 -- process did not start + end + end + HTTP.write(tostring(pid)) -- HTTP needs string not number +end + +-- called by XHR.poll from detail_startstop.htm +-- and from lua (with parameter "true") +function get_pid(from_lua) + local pid = tonumber(NXFS.readfile("/var/run/privoxy.pid") or 0 ) + if pid > 0 and not NX.kill(pid, 0) then + pid = 0 + end + if from_lua then + return pid + else + HTTP.write(tostring(pid)) -- HTTP needs string not number + end +end + +-- replacement of build-in parse of UCI option +-- modified AbstractValue.parse(self, section, novld) from cbi.lua +-- validate is called if rmempty/optional true or false +-- write is called if rmempty/optional true or false +function value_parse(self, section, novld) + local fvalue = self:formvalue(section) + local fexist = ( fvalue and (#fvalue > 0) ) -- not "nil" and "not empty" + local cvalue = self:cfgvalue(section) + local rm_opt = ( self.rmempty or self.optional ) + local eq_cfg -- flag: equal cfgvalue + + -- If favlue and cvalue are both tables and have the same content + -- make them identical + if type(fvalue) == "table" and type(cvalue) == "table" then + eq_cfg = (#fvalue == #cvalue) + if eq_cfg then + for i=1, #fvalue do + if cvalue[i] ~= fvalue[i] then + eq_cfg = false + end + end + end + if eq_cfg then + fvalue = cvalue + end + end + + -- removed parameter "section" from function call because used/accepted nowhere + -- also removed call to function "transfer" + local vvalue, errtxt = self:validate(fvalue) + + -- error handling; validate return "nil" + if not vvalue then + if novld then -- and "novld" set + return -- then exit without raising an error + end + + if fexist then -- and there is a formvalue + self:add_error(section, "invalid", errtxt or self.title .. ": invalid") + return -- so data are invalid + elseif not rm_opt then -- and empty formvalue but NOT (rmempty or optional) set + self:add_error(section, "missing", errtxt or self.title .. ": missing") + return -- so data is missing + elseif errtxt then + self:add_error(section, "invalid", errtxt) + return + end +-- error ("\n option: " .. self.option .. +-- "\n fvalue: " .. tostring(fvalue) .. +-- "\n fexist: " .. tostring(fexist) .. +-- "\n cvalue: " .. tostring(cvalue) .. +-- "\n vvalue: " .. tostring(vvalue) .. +-- "\n vexist: " .. tostring(vexist) .. +-- "\n rm_opt: " .. tostring(rm_opt) .. +-- "\n eq_cfg: " .. tostring(eq_cfg) .. +-- "\n eq_def: " .. tostring(eq_def) .. +-- "\n novld : " .. tostring(novld) .. +-- "\n errtxt: " .. tostring(errtxt) ) + end + + -- lets continue with value returned from validate + eq_cfg = ( vvalue == cvalue ) -- update equal_config flag + local vexist = ( vvalue and (#vvalue > 0) ) and true or false -- not "nil" and "not empty" + local eq_def = ( vvalue == self.default ) -- equal_default flag + + -- (rmempty or optional) and (no data or equal_default) + if rm_opt and (not vexist or eq_def) then + if self:remove(section) then -- remove data from UCI + self.section.changed = true -- and push events + end + return + end + + -- not forcewrite and no changes, so nothing to write + if not self.forcewrite and eq_cfg then + return + end + + -- we should have a valid value here + assert (vvalue, "\n option: " .. self.option .. + "\n fvalue: " .. tostring(fvalue) .. + "\n fexist: " .. tostring(fexist) .. + "\n cvalue: " .. tostring(cvalue) .. + "\n vvalue: " .. tostring(vvalue) .. + "\n vexist: " .. tostring(vexist) .. + "\n rm_opt: " .. tostring(rm_opt) .. + "\n eq_cfg: " .. tostring(eq_cfg) .. + "\n eq_def: " .. tostring(eq_def) .. + "\n errtxt: " .. tostring(errtxt) ) + + -- write data to UCI; raise event only on changes + if self:write(section, vvalue) and not eq_cfg then + self.section.changed = true + end +end diff --git a/feeds/luci/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua b/feeds/luci/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua new file mode 100644 index 0000000..90754c2 --- /dev/null +++ b/feeds/luci/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua @@ -0,0 +1,918 @@ +-- Copyright 2014-2015 Christian Schoenebeck +-- Licensed under the Apache License, Version 2.0 + +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local UTIL = require "luci.util" +local DISP = require "luci.dispatcher" +local DTYP = require "luci.cbi.datatypes" +local CTRL = require "luci.controller.privoxy" -- this application's controller + +local HELP = [[%s]] + +-- Error handling if wrong privoxy version installed -- ######################## +if not CTRL.service_ok() then + local f = SimpleForm("_sf") + f.title = CTRL.app_title_main() + f.description = CTRL.app_description() + f.embedded = true + f.submit = false + f.reset = false + + local s = f:section(SimpleSection) + local v = s:option(DummyValue, "_dv") + v.titleref = DISP.build_url("admin", "system", "packages") + v.rawhtml = true + v.value = CTRL.service_update() + return f +end + +-- ################################################################################################# +-- Error handling if no config, create an empty one -- ######################### +if not NXFS.access("/etc/config/privoxy") then + NXFS.writefile("/etc/config/privoxy", "") +end + +-- cbi-map -- ################################################################## +local m = Map("privoxy") +m.title = CTRL.app_title_main() +m.description = CTRL.app_description() +function m.commit_handler(self) + if self.changed then -- changes ? + os.execute("/etc/init.d/privoxy reload &") -- reload configuration + end +end + +-- cbi-section -- ############################################################## +local ns = m:section( NamedSection, "privoxy", "privoxy") +function ns.cfgvalue(self, section) + if not self.map:get("system") then -- section might not exist + self.map:set("system", nil, "system") + end + if not self.map:get(section) then -- section might not exist + self.map:set(section, nil, self.sectiontype) + end + return self.map:get(section) +end + +ns:tab("sys", + translate("System"), + nil ) +local function err_tab_sys(title, msg) + return string.format(translate("System") .. " - %s: %s", title, msg ) +end + +ns:tab("doc", + translate("Documentation"), + translate("If you intend to operate Privoxy for more users than just yourself, " + .. "it might be a good idea to let them know how to reach you, what you block " + .. "and why you do that, your policies, etc.") ) +local function err_tab_doc(title, msg) + return string.format(translate("Documentation") .. " - %s: %s", title, msg ) +end + +ns:tab("filter", + translate("Files and Directories"), + translate("Privoxy can (and normally does) use a number of other files " + .. "for additional configuration, help and logging. This section of " + .. "the configuration file tells Privoxy where to find those other files.") ) +local function err_tab_filter(title, msg) + return string.format(translate("Files and Directories") .. " - %s: %s", title, msg ) +end + +ns:tab("access", + translate("Access Control"), + translate("This tab controls the security-relevant aspects of Privoxy's configuration.") ) +local function err_tab_access(title, msg) + return string.format(translate("Access Control") .. " - %s: %s", title, msg ) +end + +ns:tab("forward", + translate("Forwarding"), + translate("Configure here the routing of HTTP requests through a chain of multiple proxies. " + .. "Note that parent proxies can severely decrease your privacy level. " + .. "Also specified here are SOCKS proxies.") ) + +ns:tab("misc", + translate("Miscellaneous"), + nil) +local function err_tab_misc(self, msg) + return string.format(translate("Miscellaneous") .. " - %s: %s", self.title_base, msg ) +end + +ns:tab("debug", + translate("Logging"), + nil ) + +ns:tab("logview", + translate("Log File Viewer"), + nil ) + +-- tab: local -- ############################################################### + +-- start/stop button ----------------------------------------------------------- +local btn = ns:taboption("sys", Button, "_startstop") +btn.title = translate("Start / Stop") +btn.description = translate("Start/Stop Privoxy WEB Proxy") +btn.template = "privoxy/detail_startstop" +function btn.cfgvalue(self, section) + local pid = CTRL.get_pid(true) + if pid > 0 then + btn.inputtitle = "PID: " .. pid + btn.inputstyle = "reset" + btn.disabled = false + else + btn.inputtitle = translate("Start") + btn.inputstyle = "apply" + btn.disabled = false + end + return true +end + +-- enabled --------------------------------------------------------------------- +local ena = ns:taboption("sys", Flag, "_enabled") +ena.title = translate("Enabled") +ena.description = translate("Enable/Disable autostart of Privoxy on system startup and interface events") +ena.orientation = "horizontal" -- put description under the checkbox +ena.rmempty = false +function ena.cfgvalue(self, section) + return (SYS.init.enabled("privoxy")) and "1" or "0" +end +function ena.write(self, section, value) + if value == "1" then + return SYS.init.enable("privoxy") + else + return SYS.init.disable("privoxy") + end +end + +-- boot_delay ------------------------------------------------------------------ +local bd = ns:taboption("sys", Value, "boot_delay") +bd.title = translate("Boot delay") +bd.description = translate("Delay (in seconds) during system boot before Privoxy start") + .. [[
]] + .. translate("During delay ifup-events are not monitored !") +bd.default = "10" +bd.rmempty = false +-- value is in a separate section so we need to do by hand +function bd.cfgvalue(self, section) + local value = tonumber(self.map:get("system", "boot_delay") ) + if not value then return nil end + return tostring(value) +end +function bd.validate(self, value) + local val = tonumber(value) + if not val then + return nil, err_tab_sys(self.title, translate("Value is not a number") ) + elseif val < 0 or val > 300 then + return nil, err_tab_sys(self.title, translate("Value not between 0 and 300") ) + end + return value +end +function bd.write(self, section, value) + local fvalue = self:formvalue(section) + local cvalue = self:cfgvalue(section) + if (fvalue ~= cvalue) then + self.map:set("system", "boot_delay", value) + end +end + +-- hostname -------------------------------------------------------------------- +local hn = ns:taboption("doc", Value, "hostname") +hn.title = string.format(HELP, "HOSTNAME", "Hostname" ) +hn.description = translate("The hostname shown on the CGI pages.") +hn.placeholder = SYS.hostname() +hn.optional = true +hn.rmempty = true +function hn.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- user-manual ----------------------------------------------------------------- +local um = ns:taboption("doc", Value, "user_manual") +um.title = string.format(HELP, "USER-MANUAL", "User Manual" ) +um.description = translate("Location of the Privoxy User Manual.") +um.placeholder = "http://www.privoxy.org/user-manual/" +um.optional = true +um.rmempty = true +function um.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- admin-address --------------------------------------------------------------- +local aa = ns:taboption("doc", Value, "admin_address") +aa.title_base = "Admin Email" +aa.title = string.format(HELP, "ADMIN-ADDRESS", aa.title_base ) +aa.description = translate("An email address to reach the Privoxy administrator.") +aa.placeholder = "privoxy.admin@example.com" +aa.optional = true +aa.rmempty = true +function aa.validate(self, value) + if not value or #value == 0 then + return "" + end + if not (value:match("[A-Za-z0-9%.%%%+%-]+@[A-Za-z0-9%.%%%+%-]+%.%w%w%w?%w?")) then + return nil, err_tab_doc(self.title_base, translate("Invalid email address") ) + end + return value +end +function aa.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- proxy-info-url -------------------------------------------------------------- +local piu = ns:taboption("doc", Value, "proxy_info_url") +piu.title = string.format(HELP, "PROXY-INFO-URL", "Proxy Info URL" ) +piu.description = translate("A URL to documentation about the local Privoxy setup, configuration or policies.") +piu.optional = true +piu.rmempty = true +function piu.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- trust-info-url -------------------------------------------------------------- +local tiu = ns:taboption("doc", Value, "trust_info_url") +tiu.title = string.format(HELP, "TRUST-INFO-URL", "Trust Info URLs" ) +tiu.description = translate("A URL to be displayed in the error page that users will see if access to an untrusted page is denied.") + .. [[
]] + .. translate("The value of this option only matters if the experimental trust mechanism has been activated.") + .. [[]] +tiu.optional = true +tiu.rmepty = true +function tiu.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- tab: filter -- ############################################################## + +-- logdir ---------------------------------------------------------------------- +local ld = ns:taboption("filter", Value, "logdir") +ld.title_base = "Log Directory" +ld.title = string.format(HELP, "LOGDIR", ld.title_base ) +ld.description = translate("The directory where all logging takes place (i.e. where the logfile is located).") + .. [[
]] + .. translate("No trailing '/', please.") +ld.default = "/var/log" +ld.rmempty = false +function ld.validate(self, value) + if not value or #value == 0 then + return nil, err_tab_filter(self.title_base, translate("Mandatory Input: No Directory given!") ) + elseif not NXFS.access(value) then + return nil, err_tab_filter(self.title_base, translate("Directory does not exist!") ) + else + return value + end +end +function ld.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- logfile --------------------------------------------------------------------- +local lf = ns:taboption("filter", Value, "logfile") +lf.title_base = "Log File" +lf.title = string.format(HELP, "LOGFILE", lf.title_base ) +lf.description = translate("The log file to use. File name, relative to log directory.") +lf.default = "privoxy.log" +lf.rmempty = false +function lf.validate(self, value) + if not value or #value == 0 then + return nil, err_tab_filter(self.title_base, translate("Mandatory Input: No File given!") ) + else + return value + end +end + +-- confdir --------------------------------------------------------------------- +local cd = ns:taboption("filter", Value, "confdir") +cd.title_base = "Configuration Directory" +cd.title = string.format(HELP, "CONFDIR", cd.title_base ) +cd.description = translate("The directory where the other configuration files are located.") + .. [[
]] + .. translate("No trailing '/', please.") +cd.default = "/etc/privoxy" +cd.rmempty = false +function cd.validate(self, value) + if not value or #value == 0 then + return nil, err_tab_filter(self.title_base, translate("Mandatory Input: No Directory given!") ) + elseif not NXFS.access(value) then + return nil, err_tab_filter(self.title_base, translate("Directory does not exist!") ) + else + return value + end +end + +-- templdir -------------------------------------------------------------------- +local tld = ns:taboption("filter", Value, "templdir") +tld.title_base = "Template Directory" +tld.title = string.format(HELP, "TEMPLDIR", tld.title_base ) +tld.description = translate("An alternative directory where the templates are loaded from.") + .. [[
]] + .. translate("No trailing '/', please.") +tld.placeholder = "/etc/privoxy/templates" +tld.rmempty = true +function tld.validate(self, value) + if not NXFS.access(value) then + return nil, err_tab_filter(self.title_base, translate("Directory does not exist!") ) + else + return value + end +end + +-- temporary-directory --------------------------------------------------------- +local td = ns:taboption("filter", Value, "temporary_directory") +td.title_base = "Temporary Directory" +td.title = string.format(HELP, "TEMPORARY-DIRECTORY", td.title_base ) +td.description = translate("A directory where Privoxy can create temporary files.") + .. [[
]] + .. translate("Only when using 'external filters', Privoxy has to create temporary files.") + .. [[]] +td.rmempty = true + +-- actionsfile ----------------------------------------------------------------- +local af = ns:taboption("filter", DynamicList, "actionsfile") +af.title_base = "Action Files" +af.title = string.format(HELP, "ACTIONSFILE", af.title_base) +af.description = translate("The actions file(s) to use. Multiple actionsfile lines are permitted, and are in fact recommended!") + .. [[
match-all.action := ]] + .. translate("Actions that are applied to all sites and maybe overruled later on.") + .. [[
default.action := ]] + .. translate("Main actions file") + .. [[
user.action := ]] + .. translate("User customizations") +af.rmempty = false +function af.validate(self, value) + if not value or #value == 0 then + return nil, err_tab_access(self.title_base, translate("Mandatory Input: No files given!") ) + end + local confdir = cd:formvalue(ns.section) + local err = false + local file = "" + if type(value) == "table" then + local x + for _, x in ipairs(value) do + if x and #x > 0 then + if not NXFS.access(confdir .."/".. x) then + err = true + file = x + break -- break/leave for on error + end + end + end + else + if not NXFS.access(confdir .."/".. value) then + err = true + file = value + end + end + if err then + return nil, string.format(err_tab_filter(self.title_base, translate("File '%s' not found inside Configuration Directory") ), file) + end + return value +end + +-- filterfile ------------------------------------------------------------------ +local ff = ns:taboption("filter", DynamicList, "filterfile") +ff.title_base = "Filter files" +ff.title = string.format(HELP, "FILTERFILE", ff.title_base ) +ff.description = translate("The filter files contain content modification rules that use regular expressions.") +ff.rmempty = false +function ff.validate(self, value) + if not value or #value == 0 then + return nil, err_tab_access(self.title_base, translate("Mandatory Input: No files given!") ) + end + local confdir = cd:formvalue(ns.section) + local err = false + local file = "" + if type(value) == "table" then + local x + for _, x in ipairs(value) do + if x and #x > 0 then + if not NXFS.access(confdir .."/".. x) then + err = true + file = x + break -- break/leave for on error + end + end + end + else + if not NXFS.access(confdir .."/".. value) then + err = true + file = value + end + end + if err then + return nil, string.format(err_tab_filter(self.title_base, translate("File '%s' not found inside Configuration Directory") ), file ) + end + return value +end + +-- trustfile ------------------------------------------------------------------- +local tf = ns:taboption("filter", Value, "trustfile") +tf.title_base = "Trust file" +tf.title = string.format(HELP, "TRUSTFILE", tf.title_base ) +tf.description = translate("The trust mechanism is an experimental feature for building white-lists " + .."and should be used with care.") + .. [[
]] + .. translate("It is NOT recommended for the casual user.") + .. [[]] +tf.placeholder = "user.trust" +tf.rmempty = true +function tf.validate(self, value) + local confdir = cd:formvalue(ns.section) + local err = false + local file = "" + if type(value) == "table" then + local x + for _, x in ipairs(value) do + if x and #x > 0 then + if not NCFS.access(confdir .."/".. x) then + err = true + file = x + break -- break/leave for on error + end + end + end + else + if not NXFS.access(confdir .."/".. value) then + err = true + file = value + end + end + if err then + return nil, string.format(err_tab_filter(self.title_base, translate("File '%s' not found inside Configuration Directory") ), file ) + end + return value +end + +-- tab: access -- ############################################################## + +-- listen-address -------------------------------------------------------------- +local la = ns:taboption("access", DynamicList, "listen_address") +la.title_base = "Listen addresses" +la.title = string.format(HELP, "LISTEN-ADDRESS", la.title_base ) +la.description = translate("The address and TCP port on which Privoxy will listen for client requests.") + .. [[
]] + .. translate("Syntax: ") + .. "IPv4:Port / [IPv6]:Port / Host:Port" +la.default = "127.0.0.1:8118" +la.rmempty = false +function la.validate(self, value) + if not value or #value == 0 then + return nil, err_tab_access(self.title_base, translate("Mandatory Input: No Data given!") ) + end + + local function check_value(v) + local _ret = UTIL.split(v, "]:") + local _ip + if _ret[2] then -- ip6 with port + _ip = string.gsub(_ret[1], "%[", "") -- remove "[" at beginning + if not DTYP.ip6addr(_ip) then + return translate("Mandatory Input: No valid IPv6 address given!") + elseif not DTYP.port(_ret[2]) then + return translate("Mandatory Input: No valid Port given!") + else + return nil + end + end + _ret = UTIL.split(v, ":") + if not _ret[2] then + return translate("Mandatory Input: No Port given!") + end + if #_ret[1] > 0 and not DTYP.host(_ret[1]) then -- :8118 is valid address + return translate("Mandatory Input: No valid IPv4 address or host given!") + elseif not DTYP.port(_ret[2]) then + return translate("Mandatory Input: No valid Port given!") + else + return nil + end + end + + local err = "" + local entry = "" + if type(value) == "table" then + local x + for _, x in ipairs(value) do + if x and #x > 0 then + err = check_value(x) + if err then + entry = x + break + end + end + end + else + err = check_value(value) + entry = value + end + if err then + return nil, string.format(err_tab_access(self.title_base, err .. " - %s"), entry ) + end + return value +end + +-- permit-access --------------------------------------------------------------- +local pa = ns:taboption("access", DynamicList, "permit_access") +pa.title = string.format(HELP, "ACLS", "Permit access" ) +pa.description = translate("Who can access what.") + .. [[
]] + .. translate("Please read Privoxy manual for details!") + .. [[]] +pa.rmempty = true + +-- deny-access ----------------------------------------------------------------- +local da = ns:taboption("access", DynamicList, "deny_access") +da.title = string.format(HELP, "ACLS", "Deny Access" ) +da.description = translate("Who can access what.") + .. [[
]] + .. translate("Please read Privoxy manual for details!") + .. [[]] +da.rmempty = true + +-- buffer-limit ---------------------------------------------------------------- +local bl = ns:taboption("access", Value, "buffer_limit") +bl.title_base = "Buffer Limit" +bl.title = string.format(HELP, "BUFFER-LIMIT", bl.title_base ) +bl.description = translate("Maximum size (in KB) of the buffer for content filtering.") + .. [[
]] + .. translate("Value range 1 to 4096, no entry defaults to 4096") +bl.default = 4096 +bl.rmempty = true +function bl.validate(self, value) + local v = tonumber(value) + if not v then + return nil, err_tab_access(self.title_base, translate("Value is not a number") ) + elseif v < 1 or v > 4096 then + return nil, err_tab_access(self.title_base, translate("Value not between 1 and 4096") ) + elseif v == self.default then + return "" -- dont need to save default + end + return value +end + +-- toggle ---------------------------------------------------------------------- +local tgl = ns:taboption("access", Flag, "toggle") +tgl.title = string.format(HELP, "TOGGLE", "Toggle Status" ) +tgl.description = translate("Enable/Disable filtering when Privoxy starts.") + .. [[
]] + .. translate("Disabled == Transparent Proxy Mode") +tgl.orientation = "horizontal" +tgl.default = "1" +tgl.rmempty = false + +-- enable-remote-toggle -------------------------------------------------------- +local ert = ns:taboption("access", Flag, "enable_remote_toggle") +ert.title = string.format(HELP, "ENABLE-REMOTE-TOGGLE", "Enable remote toggle" ) +ert.description = translate("Whether or not the web-based toggle feature may be used.") +ert.orientation = "horizontal" +ert.rmempty = true + +-- enable-remote-http-toggle --------------------------------------------------- +local eht = ns:taboption("access", Flag, "enable_remote_http_toggle") +eht.title = string.format(HELP, "ENABLE-REMOTE-HTTP-TOGGLE", "Enable remote toggle via HTTP" ) +eht.description = translate("Whether or not Privoxy recognizes special HTTP headers to change toggle state.") + .. [[
]] + .. translate("This option will be removed in future releases as it has been obsoleted by the more general header taggers.") + .. [[]] +eht.orientation = "horizontal" +eht.rmempty = true + +-- enable-edit-actions --------------------------------------------------------- +local eea = ns:taboption("access", Flag, "enable_edit_actions") +eea.title = string.format(HELP, "ENABLE-EDIT-ACTIONS", "Enable action file editor" ) +eea.description = translate("Whether or not the web-based actions file editor may be used.") +eea.orientation = "horizontal" +eea.rmempty = true + +-- enforce-blocks -------------------------------------------------------------- +local eb = ns:taboption("access", Flag, "enforce_blocks") +eb.title = string.format(HELP, "ENFORCE-BLOCKS", "Enforce page blocking" ) +eb.description = translate("If enabled, Privoxy hides the 'go there anyway' link. " + .. "The user obviously should not be able to bypass any blocks.") +eb.orientation = "horizontal" +eb.rmempty = true + +-- tab: forward -- ############################################################# + +-- enable-proxy-authentication-forwarding -------------------------------------- +local paf = ns:taboption("forward", Flag, "enable_proxy_authentication_forwarding") +paf.title = string.format(HELP, "ENABLE-PROXY-AUTHENTICATION-FORWARDING", + translate("Enable proxy authentication forwarding") ) +paf.description = translate("Whether or not proxy authentication through Privoxy should work.") + .. [[
]] + .. translate("Enabling this option is NOT recommended if there is no parent proxy that requires authentication!") + .. [[]] +--paf.orientation = "horizontal" +paf.rmempty = true + +-- forward --------------------------------------------------------------------- +local fwd = ns:taboption("forward", DynamicList, "forward") +fwd.title = string.format(HELP, "FORWARD", "Forward HTTP" ) +fwd.description = translate("To which parent HTTP proxy specific requests should be routed.") + .. [[
]] + .. translate("Syntax: target_pattern http_parent[:port]") +fwd.rmempty = true + +-- forward-socks4 -------------------------------------------------------------- +local fs4 = ns:taboption("forward", DynamicList, "forward_socks4") +fs4.title = string.format(HELP, "SOCKS", "Forward SOCKS 4" ) +fs4.description = translate("Through which SOCKS proxy (and optionally to which parent HTTP proxy) specific requests should be routed.") + .. [[
]] + .. translate("Syntax: target_pattern socks_proxy[:port] http_parent[:port]") +fs4.rmempty = true + +-- forward-socks4a ------------------------------------------------------------- +local f4a = ns:taboption("forward", DynamicList, "forward_socks4a") +f4a.title = string.format(HELP, "SOCKS", "Forward SOCKS 4A" ) +f4a.description = fs4.description +f4a.rmempty = true + +-- forward-socks5 -------------------------------------------------------------- +local fs5 = ns:taboption("forward", DynamicList, "forward_socks5") +fs5.title = string.format(HELP, "SOCKS", "Forward SOCKS 5" ) +fs5.description = fs4.description +fs5.rmempty = true + +-- forward-socks5t ------------------------------------------------------------- +local f5t = ns:taboption("forward", DynamicList, "forward_socks5t") +f5t.title = string.format(HELP, "SOCKS", "Forward SOCKS 5t" ) +f5t.description = fs4.description +f5t.rmempty = true + +-- tab: misc -- ################################################################ + +-- accept-intercepted-requests ------------------------------------------------- +local air = ns:taboption("misc", Flag, "accept_intercepted_requests") +air.title = string.format(HELP, "ACCEPT-INTERCEPTED-REQUESTS", "Accept intercepted requests" ) +air.description = translate("Whether intercepted requests should be treated as valid.") +air.orientation = "horizontal" +air.rmempty = true + +-- allow-cgi-request-crunching ------------------------------------------------- +local crc = ns:taboption("misc", Flag, "allow_cgi_request_crunching") +crc.title = string.format(HELP, "ALLOW-CGI-REQUEST-CRUNCHING", "Allow CGI request crunching" ) +crc.description = translate("Whether requests to Privoxy's CGI pages can be blocked or redirected.") +crc.orientation = "horizontal" +crc.rmempty = true + +-- split-large-forms ----------------------------------------------------------- +local slf = ns:taboption("misc", Flag, "split_large_forms") +slf.title = string.format(HELP, "SPLIT-LARGE-FORMS", "Split large forms" ) +slf.description = translate("Whether the CGI interface should stay compatible with broken HTTP clients.") +slf.orientation = "horizontal" +slf.rmempty = true + +-- keep-alive-timeout ---------------------------------------------------------- +local kat = ns:taboption("misc", Value, "keep_alive_timeout") +kat.title_base = "Keep-alive timeout" +kat.title = string.format(HELP, "KEEP-ALIVE-TIMEOUT", kat.title_base) +kat.description = translate("Number of seconds after which an open connection will no longer be reused.") +kat.rmempty = true +function kat.validate(self, value) + local v = tonumber(value) + if not v then + return nil, err_tab_misc(self.title_base, translate("Value is not a number") ) + elseif v < 1 then + return nil, err_tab_misc(self.title_base, translate("Value not greater 0 or empty") ) + end + return value +end + +-- tolerate-pipelining --------------------------------------------------------- +local tp = ns:taboption("misc", Flag, "tolerate_pipelining") +tp.title = string.format(HELP, "TOLERATE-PIPELINING", "Tolerate pipelining" ) +tp.description = translate("Whether or not pipelined requests should be served.") +tp.orientation = "horizontal" +tp.rmempty = true + +-- default-server-timeout ------------------------------------------------------ +local dst = ns:taboption("misc", Value, "default_server_timeout") +dst.title_base = "Default server timeout" +dst.title = string.format(HELP, "DEFAULT-SERVER-TIMEOUT", dst.title_base) +dst.description = translate("Assumed server-side keep-alive timeout (in seconds) if not specified by the server.") +dst.rmempty = true +function dst.validate(self, value) + local v = tonumber(value) + if not v then + return nil, err_tab_misc(self.title_base, translate("Value is not a number") ) + elseif v < 1 then + return nil, err_tab_misc(self.title_base, translate("Value not greater 0 or empty") ) + end + return value +end + +-- connection-sharing ---------------------------------------------------------- +local cs = ns:taboption("misc", Flag, "connection_sharing") +cs.title = string.format(HELP, "CONNECTION-SHARING", "Connection sharing" ) +cs.description = translate("Whether or not outgoing connections that have been kept alive should be shared between different incoming connections.") +cs.orientation = "horizontal" +cs.rmempty = true + +-- socket-timeout -------------------------------------------------------------- +local st = ns:taboption("misc", Value, "socket_timeout") +st.title_base = "Socket timeout" +st.title = string.format(HELP, "SOCKET-TIMEOUT", st.title_base ) +st.description = translate("Number of seconds after which a socket times out if no data is received.") +st.default = 300 +st.rmempty = true +function st.validate(self, value) + local v = tonumber(value) + if not v then + return nil, err_tab_misc(self.title_base, translate("Value is not a number") ) + elseif v < 1 then + return nil, err_tab_misc(self.title_base, translate("Value not greater 0 or empty") ) + elseif v == self.default then + return "" -- dont need to save default + end + return value +end + +-- max-client-connections ------------------------------------------------------ +local mcc = ns:taboption("misc", Value, "max_client_connections") +mcc.title_base = "Max. client connections" +mcc.title = string.format(HELP, "MAX-CLIENT-CONNECTIONS", mcc.title_base ) +mcc.description = translate("Maximum number of client connections that will be served.") +mcc.default = 128 +mcc.rmempty = true +function mcc.validate(self, value) + local v = tonumber(value) + if not v then + return nil, err_tab_misc(self.title_base, translate("Value is not a number") ) + elseif v < 1 then + return nil, err_tab_misc(self.title_base, translate("Value not greater 0 or empty") ) + elseif v == self.default then + return "" -- dont need to save default + end + return value +end + +-- handle-as-empty-doc-returns-ok ---------------------------------------------- +local her = ns:taboption("misc", Flag, "handle_as_empty_doc_returns_ok") +her.title = string.format(HELP, "HANDLE-AS-EMPTY-DOC-RETURNS-OK", "Handle as empty doc returns ok" ) +her.description = translate("The status code Privoxy returns for pages blocked with +handle-as-empty-document.") +her.orientation = "horizontal" +her.rmempty = true + +-- enable-compression ---------------------------------------------------------- +local ec = ns:taboption("misc", Flag, "enable_compression") +ec.title = string.format(HELP, "ENABLE-COMPRESSION", "Enable compression" ) +ec.description = translate("Whether or not buffered content is compressed before delivery.") +ec.orientation = "horizontal" +ec.rmempty = true + +-- compression-level ----------------------------------------------------------- +local cl = ns:taboption("misc", Value, "compression_level") +cl.title_base = "Compression level" +cl.title = string.format(HELP, "COMPRESSION-LEVEL", cl.title_base ) +cl.description = translate("The compression level that is passed to the zlib library when compressing buffered content.") +cl.default = 1 +cl.rmempty = true +function cl.validate(self, value) + local v = tonumber(value) + if not v then + return nil, err_tab_misc(self.title_base, translate("Value is not a number") ) + elseif v < 0 or v > 9 then + return nil, err_tab_misc(self.title_base, translate("Value not between 0 and 9") ) + elseif v == self.default then + return "" -- don't need to save default + end + return value +end + +-- client-header-order --------------------------------------------------------- +local cho = ns:taboption("misc", Value, "client_header_order") +cho.title = string.format(HELP, "CLIENT-HEADER-ORDER", "Client header order" ) +cho.description = translate("The order in which client headers are sorted before forwarding them.") + .. [[
]] + .. translate("Syntax: Client header names delimited by spaces.") +cho.rmempty = true + +-- "debug"-tab definition -- ################################################### + +-- single-threaded ------------------------------------------------------------- +local st = ns:taboption("debug", Flag, "single_threaded") +st.title = string.format(HELP, "SINGLE-THREADED", "Single Threaded" ) +st.description = translate("Whether to run only one server thread.") + .. [[
]] + .. translate("This option is only there for debugging purposes. It will drastically reduce performance.") + .. [[]] +st.rmempty = true + +-- debug 1 --------------------------------------------------------------------- +local d0 = ns:taboption("debug", Flag, "debug_1") +d0.title = string.format(HELP, "DEBUG", "Debug 1" ) +d0.description = translate("Log the destination for each request Privoxy let through. See also 'Debug 1024'.") +d0.rmempty = true + +-- debug 2 --------------------------------------------------------------------- +local d1 = ns:taboption("debug", Flag, "debug_2") +d1.title = string.format(HELP, "DEBUG", "Debug 2" ) +d1.description = translate("Show each connection status") +d1.rmempty = true + +-- debug 4 --------------------------------------------------------------------- +local d2 = ns:taboption("debug", Flag, "debug_4") +d2.title = string.format(HELP, "DEBUG", "Debug 4" ) +d2.description = translate("Show I/O status") +d2.rmempty = true + +-- debug 8 --------------------------------------------------------------------- +local d3 = ns:taboption("debug", Flag, "debug_8") +d3.title = string.format(HELP, "DEBUG", "Debug 8" ) +d3.description = translate("Show header parsing") +d3.rmempty = true + +-- debug 16 -------------------------------------------------------------------- +local d4 = ns:taboption("debug", Flag, "debug_16") +d4.title = string.format(HELP, "DEBUG", "Debug 16" ) +d4.description = translate("Log all data written to the network") +d4.rmempty = true + +-- debug 32 -------------------------------------------------------------------- +local d5 = ns:taboption("debug", Flag, "debug_32") +d5.title = string.format(HELP, "DEBUG", "Debug 32" ) +d5.description = translate("Debug force feature") +d5.rmempty = true + +-- debug 64 -------------------------------------------------------------------- +local d6 = ns:taboption("debug", Flag, "debug_64") +d6.title = string.format(HELP, "DEBUG", "Debug 64" ) +d6.description = translate("Debug regular expression filters") +d6.rmempty = true + +-- debug 128 ------------------------------------------------------------------- +local d7 = ns:taboption("debug", Flag, "debug_128") +d7.title = string.format(HELP, "DEBUG", "Debug 128" ) +d7.description = translate("Debug redirects") +d7.rmempty = true + +-- debug 256 ------------------------------------------------------------------- +local d8 = ns:taboption("debug", Flag, "debug_256") +d8.title = string.format(HELP, "DEBUG", "Debug 256" ) +d8.description = translate("Debug GIF de-animation") +d8.rmempty = true + +-- debug 512 ------------------------------------------------------------------- +local d9 = ns:taboption("debug", Flag, "debug_512") +d9.title = string.format(HELP, "DEBUG", "Debug 512" ) +d9.description = translate("Common Log Format") +d9.rmempty = true + +-- debug 1024 ------------------------------------------------------------------ +local d10 = ns:taboption("debug", Flag, "debug_1024") +d10.title = string.format(HELP, "DEBUG", "Debug 1024" ) +d10.description = translate("Log the destination for requests Privoxy didn't let through, and the reason why.") +d10.rmempty = true + +-- debug 2048 ------------------------------------------------------------------ +local d11 = ns:taboption("debug", Flag, "debug_2048") +d11.title = string.format(HELP, "DEBUG", "Debug 2048" ) +d11.description = translate("CGI user interface") +d11.rmempty = true + +-- debug 4096 ------------------------------------------------------------------ +local d12 = ns:taboption("debug", Flag, "debug_4096") +d12.title = string.format(HELP, "DEBUG", "Debug 4096" ) +d12.description = translate("Startup banner and warnings.") +d12.rmempty = true + +-- debug 8192 ------------------------------------------------------------------ +local d13 = ns:taboption("debug", Flag, "debug_8192") +d13.title = string.format(HELP, "DEBUG", "Debug 8192" ) +d13.description = translate("Non-fatal errors - *we highly recommended enabling this*") +d13.rmempty = true + +-- debug 16384 ----------------------------------------------------------------- +--[[ TODO ??? +local d14 = ns:taboption("debug", Flag, "debug_16384") +d14.title = string.format(HELP, "DEBUG", "Debug 16384" ) +d14.description = translate("") +d14.rmempty = true +]]-- + +-- debug 32768 ----------------------------------------------------------------- +local d15 = ns:taboption("debug", Flag, "debug_32768") +d15.title = string.format(HELP, "DEBUG", "Debug 32768" ) +d15.description = translate("Log all data read from the network") +d15.rmempty = true + +-- debug 65536 ----------------------------------------------------------------- +local d16 = ns:taboption("debug", Flag, "debug_65536") +d16.title = string.format(HELP, "DEBUG", "Debug 65536" ) +d16.description = translate("Log the applying actions") +d16.rmempty = true + +-- tab: logview -- ############################################################# + +local lv = ns:taboption("logview", DummyValue, "_logview") +lv.template = "privoxy/detail_logview" +lv.inputtitle = translate("Read / Reread log file") +lv.rows = 50 +function lv.cfgvalue(self, section) + local lfile=self.map:get(ns.section, "logdir") .. "/" .. self.map:get(ns.section, "logfile") + if NXFS.access(lfile) then + return lfile .. "\n" .. translate("Please press [Read] button") + end + return lfile .. "\n" .. translate("File not found or empty") +end + +return m diff --git a/feeds/luci/applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm b/feeds/luci/applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm new file mode 100644 index 0000000..ab0019b --- /dev/null +++ b/feeds/luci/applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm @@ -0,0 +1,56 @@ + + + + +<%+cbi/valueheader%> + +
+ +<% +-- one button on top, one at the buttom +%> + /> + +

+ +<% +-- set a readable style taken from openwrt theme for textarea#syslog +-- in openwrt theme there are problems with a width of 100 so we check for theme and set to lower value +%> + +

+ +<% +-- one button on top, one at the buttom +%> + /> + +<%+cbi/valuefooter%> + diff --git a/feeds/luci/applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm b/feeds/luci/applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm new file mode 100644 index 0000000..85975ac --- /dev/null +++ b/feeds/luci/applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm @@ -0,0 +1,49 @@ + + + + +<%+cbi/valueheader%> + +<% if self:cfgvalue(section) ~= false then +-- We need to garantie that function cfgvalue run first to set missing parameters +%> + + + " style="font-size: 100%;" type="button" onclick="onclick_startstop(this.id)" + <%= + attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled") + %> /> +<% end %> + +<%+cbi/valuefooter%> + diff --git a/feeds/luci/applications/luci-app-privoxy/po/de/privoxy.po b/feeds/luci/applications/luci-app-privoxy/po/de/privoxy.po new file mode 100644 index 0000000..9e2a29e --- /dev/null +++ b/feeds/luci/applications/luci-app-privoxy/po/de/privoxy.po @@ -0,0 +1,533 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-privoxy\n" +"POT-Creation-Date: 2015-01-18 21:48+0100\n" +"PO-Revision-Date: 2015-01-18 21:51+0100\n" +"Last-Translator: Christian Schoenebeck \n" +"Language-Team: \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "" +"A URL to be displayed in the error page that users will see if access to an " +"untrusted page is denied." +msgstr "" +"Ein Link auf der Fehlerseite, der Benutzern angezeigt wird, wenn der Zugang " +"zu einer nicht vertrauenswürdigen Seite verweigert wird." + +msgid "" +"A URL to documentation about the local Privoxy setup, configuration or " +"policies." +msgstr "" +"Ein Link zur Dokumentation über die lokale Privoxy Konfiguration und die " +"Sicherheitseinstellungen." + +msgid "A directory where Privoxy can create temporary files." +msgstr "" + +msgid "Access Control" +msgstr "Zugriffskontrolle" + +msgid "Actions that are applied to all sites and maybe overruled later on." +msgstr "" +"Aktionen, die für alle Websites angewendet werden, und vielleicht später " +"überschrieben werden." + +msgid "An alternative directory where the templates are loaded from." +msgstr "Eine alternatives Verzeichnis, aus dem die Vorlagen geladen werden." + +msgid "An email address to reach the Privoxy administrator." +msgstr "Eine E-Mail-Adresse, um die Privoxy-Administrator zu erreichen." + +msgid "" +"Assumed server-side keep-alive timeout (in seconds) if not specified by the " +"server." +msgstr "" +"Angenommenes serverseitiges Keep-Alive-Timeout (in Sekunden), falls nicht " +"vom Server festgelegt." + +msgid "Boot delay" +msgstr "" + +msgid "CGI user interface" +msgstr "Protokolliert die CGI Benutzer Schnittstelle" + +msgid "Common Log Format" +msgstr "Gemeinsames Protokollformat" + +msgid "" +"Configure here the routing of HTTP requests through a chain of multiple " +"proxies. Note that parent proxies can severely decrease your privacy level. " +"Also specified here are SOCKS proxies." +msgstr "" +"Konfigurieren Sie hier das Weiterleiten von HTTP-Anforderungen durch eine " +"Kette von mehreren Proxies. Beachten Sie, dass übergeordnete Proxies Ihre " +"Privatsphäre stark verringern können. Auch hier angegeben werden SOCKS-" +"Proxies." + +msgid "Debug GIF de-animation" +msgstr "Protokolliert die GIF de-animation" + +msgid "Debug force feature" +msgstr "Protokolliert die 'Force' Eigenschaft" + +msgid "Debug redirects" +msgstr "Protokolliert Weiterleitungen" + +msgid "Debug regular expression filters" +msgstr "Protokolliert Filter für reguläre Ausdrücke" + +msgid "Delay (in seconds) during system boot before Privoxy start" +msgstr "" + +msgid "Directory does not exist!" +msgstr "Verzeichnis existiert nicht!" + +msgid "Disabled == Transparent Proxy Mode" +msgstr "Deaktiviert == Transparent Proxy Betrieb" + +msgid "Documentation" +msgstr "" + +msgid "During delay ifup-events are not monitored !" +msgstr "" + +msgid "Enable proxy authentication forwarding" +msgstr "Aktivieren die Weiterleitung von Proxy-Authentifizierungen" + +msgid "" +"Enable/Disable autostart of Privoxy on system startup and interface events" +msgstr "" +"Aktivieren / Deaktivieren des Autostart von Privoxy beim Systemstart und " +"Schnittstellenereignissen." + +msgid "Enable/Disable filtering when Privoxy starts." +msgstr "Aktivieren / Deaktivieren der Filterung, wenn Privoxy startet." + +msgid "Enabled" +msgstr "Aktiviert" + +msgid "" +"Enabling this option is NOT recommended if there is no parent proxy that " +"requires authentication!" +msgstr "" +"Die Aktivierung dieser Option wird NICHT empfohlen, wenn es keinen " +"übergeordneten Proxy gibt, der eine Authentifizierung erfordert!" + +msgid "File '%s' not found inside Configuration Directory" +msgstr "Datei '%s' nicht im Konfigurationsverzeichnis gefunden!" + +msgid "File not found or empty" +msgstr "Datei nicht gefunden oder leer" + +msgid "Files and Directories" +msgstr "Dateien und Verzeichnisse" + +msgid "For help use link at the relevant option" +msgstr "" +"Für Hilfe zur Verwendung, benutzen Sie die Verknüpfung der betreffenden " +"Option." + +msgid "Forwarding" +msgstr "Weiterleitung" + +msgid "" +"If enabled, Privoxy hides the 'go there anyway' link. The user obviously " +"should not be able to bypass any blocks." +msgstr "" +"Wenn aktiviert, verbirgt Privoxy den Link 'go there anyway'. Normalerweise " +"sollten Benutzer nicht in der Lage sein, Blockierungen zu umgehen." + +msgid "" +"If you intend to operate Privoxy for more users than just yourself, it might " +"be a good idea to let them know how to reach you, what you block and why you " +"do that, your policies, etc." +msgstr "" +"Wenn Sie beabsichtigen, Privoxy für mehr Nutzer als nur sich selbst zu " +"betreiben, ist es eine gute Idee, sie wissen zu lassen, wie sie Sie " +"erreichen können, was Sie blockieren und warum Sie das tun, etc." + +msgid "Invalid email address" +msgstr "Ungültige Email Adresse" + +msgid "It is NOT recommended for the casual user." +msgstr "Es wird NICHT für den gelegentlichen Anwender empfohlen." + +msgid "Location of the Privoxy User Manual." +msgstr "Ort des Privoxy Benutzer Handbuches" + +msgid "Log File Viewer" +msgstr "Protokolldatei" + +msgid "Log all data read from the network" +msgstr "Protokolliert alle Daten, die vom Netzwerk gelesen werden." + +msgid "Log all data written to the network" +msgstr "Protokolliert alle Daten, die auf das Netzwerk geschrieben werden." + +msgid "Log the applying actions" +msgstr "Protokiolliert angewendete Aktionen" + +msgid "" +"Log the destination for each request Privoxy let through. See also 'Debug " +"1024'." +msgstr "" +"Protokolliert das Ziel für jede Anforderung die Privoxy durchlässt. Siehe " +"auch 'Debug 1024'." + +msgid "" +"Log the destination for requests Privoxy didn't let through, and the reason " +"why." +msgstr "" +"Protokolliert das Ziel für Anfragen die Privoxy nicht durchgelassen hat, und " +"den Grund dafür." + +msgid "Logging" +msgstr "Protokollierung" + +msgid "Main actions file" +msgstr "Wichtige Aktionen-Datei" + +msgid "Mandatory Input: No Data given!" +msgstr "Pflichtfeld: Keine Daten angegeben!" + +msgid "Mandatory Input: No Directory given!" +msgstr "Pflichtfeld: Kein Verzeichnis angegeben!" + +msgid "Mandatory Input: No File given!" +msgstr "Pflichtfeld: Keine Datei angegeben!" + +msgid "Mandatory Input: No Port given!" +msgstr "Pflichtfeld: Kein Port angegeben!" + +msgid "Mandatory Input: No files given!" +msgstr "Pflichtfeld: Keine Dateien angegeben!" + +msgid "Mandatory Input: No valid IPv4 address or host given!" +msgstr "" +"Pflichtfeld: Keine gültige IPv4 Adresse oder gültiger Hostname angegeben!" + +msgid "Mandatory Input: No valid IPv6 address given!" +msgstr "Pflichtfeld: Keine gültige IPv6 Adresse angegeben!" + +msgid "Mandatory Input: No valid Port given!" +msgstr "Pflichtfeld: Keine gültige Port Nummer angegeben!" + +msgid "Maximum number of client connections that will be served." +msgstr "Maximale Anzahl von Client-Verbindungen." + +msgid "Maximum size (in KB) of the buffer for content filtering." +msgstr "Maximale Größe (in KB) des Puffers für die Inhaltsfilterung." + +msgid "Miscellaneous" +msgstr "Verschiedenes" + +msgid "NOT installed" +msgstr "" + +msgid "No trailing '/', please." +msgstr "Bitte kein '/' am Ende." + +msgid "Non-fatal errors - *we highly recommended enabling this*" +msgstr "" +"Protokolliert nicht schwerwiegende Fehler - * Es wird dringend empfohlen, " +"dieses zu aktivieren *" + +msgid "" +"Number of seconds after which a socket times out if no data is received." +msgstr "" +"Anzahl der Sekunden, nach der eine Socket Timeout erfolgt, wenn keine Daten " +"empfangen werden." + +msgid "" +"Number of seconds after which an open connection will no longer be reused." +msgstr "" +"Anzahl von Sekunden, nach der eine offene Verbindung nicht mehr " +"wiederverwendet wird." + +msgid "" +"Only when using 'external filters', Privoxy has to create temporary files." +msgstr "" + +msgid "Please install current version !" +msgstr "" + +msgid "Please press [Read] button" +msgstr "Bitte Protokolldatei einlesen" + +msgid "Please read Privoxy manual for details!" +msgstr "Bitte lesen Sie das Privoxy Handbuch für Details!" + +msgid "Please update to the current version!" +msgstr "Aktualisieren Sie bitte auf die aktuelle Version!" + +msgid "Privoxy WEB proxy" +msgstr "Privoxy WEB proxy" + +msgid "" +"Privoxy can (and normally does) use a number of other files for additional " +"configuration, help and logging. This section of the configuration file " +"tells Privoxy where to find those other files." +msgstr "" +"Privoxy verwendet (was in der Regel der Fall ist), eine Reihe von anderen " +"Dateien für eine zusätzliche Konfiguration, Hilfe und Protokollierung. " +"Dieser Abschnitt der Konfigurationsdatei definiert, wo diese Dateien zu " +"finden sind." + +msgid "" +"Privoxy is a non-caching web proxy with advanced filtering capabilities for " +"enhancing privacy, modifying web page data and HTTP headers, controlling " +"access, and removing ads and other obnoxious Internet junk." +msgstr "" +"Privoxy ist ein non-caching Web-Proxy mit erweiterten Filterfunktion zur " +"Verbesserung der Privatsphäre. Er modifiziert Webseitendaten und HTTP-" +"Header, kontrolliert den Zugang und das Entfernen von Anzeigen und anderem " +"abscheulichen Internet Schrott." + +msgid "Read / Reread log file" +msgstr "Protokolldatei (neu) lesen" + +msgid "Show I/O status" +msgstr "Protokolliert den I/O Status" + +msgid "Show each connection status" +msgstr "Protokolliert jeden Verbindungsstatus" + +msgid "Show header parsing" +msgstr "Protokolliert das 'Header parsing'" + +msgid "Software package '%s' is not installed." +msgstr "" + +msgid "Software package '%s' is outdated." +msgstr "" + +msgid "Start" +msgstr "Start" + +msgid "Start / Stop" +msgstr "Start / Stopp" + +msgid "Start/Stop Privoxy WEB Proxy" +msgstr "Start/Stopp Privoxy WEB Proxy" + +msgid "Startup banner and warnings." +msgstr "Protokolliert Start-Meldungen und Warnungen" + +msgid "Syntax:" +msgstr "Syntax:" + +msgid "Syntax: Client header names delimited by spaces." +msgstr "Syntax: Client header Namen getrennt durch Leerzeichen." + +msgid "Syntax: target_pattern http_parent[:port]" +msgstr "Syntax: target_pattern http_parent[:port]" + +msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]" +msgstr "Syntax: target_pattern socks_proxy[:port] http_parent[:port]" + +msgid "System" +msgstr "" + +msgid "" +"The actions file(s) to use. Multiple actionsfile lines are permitted, and " +"are in fact recommended!" +msgstr "" +"Die zu verwendenden Aktion-Datei(en). Mehrere Dateien sind gestattet und " +"empfohlen!" + +msgid "" +"The address and TCP port on which Privoxy will listen for client requests." +msgstr "" +"Die Adresse und das TCP-Port, auf dem Privoxy auf Client-Anforderungen " +"wartet." + +msgid "" +"The compression level that is passed to the zlib library when compressing " +"buffered content." +msgstr "" +"Die Komprimierungsstufe (0-9), die der zlib-Bibliothek beim Komprimieren " +"gepufferten Inhaltes übergeben wird." + +msgid "" +"The directory where all logging takes place (i.e. where the logfile is " +"located)." +msgstr "Das Verzeichnis in dem die Protokolldatei gespeichert wird." + +msgid "The directory where the other configuration files are located." +msgstr "Das Verzeichnis in dem weitere Konfigurationsdateien gespeichert sind." + +msgid "" +"The filter files contain content modification rules that use regular " +"expressions." +msgstr "" +"Die Filterdateien enthalten Änderung des Inhalts, die reguläre Ausdrücke " +"als Regeln verwenden." + +msgid "The hostname shown on the CGI pages." +msgstr "Der Hostname der auf CGI-Seiten angezeigt wird." + +msgid "The log file to use. File name, relative to log directory." +msgstr "" +"Zu verwendende Protokolldatei. Dateiname relativ zum Protokoll-Verzeichnis." + +msgid "The order in which client headers are sorted before forwarding them." +msgstr "" +"Die Reihenfolge, in der Client-Header sortiert werden, bevor sie " +"weitergeleitet werden." + +msgid "" +"The status code Privoxy returns for pages blocked with +handle-as-empty-" +"document." +msgstr "" +"Ob Statuscode 200(OK) oder 403(forbidden) für Seiten gemeldet wird, die " +"durch den Filter 'handle-as-empty-document' blockiert werden." + +msgid "" +"The trust mechanism is an experimental feature for building white-lists and " +"should be used with care." +msgstr "" +"Der Trust-Mechanismus ist eine experimentelle Funktion für den Aufbau von " +"White-Listen und sollte mit Vorsicht verwendet werden." + +msgid "" +"The value of this option only matters if the experimental trust mechanism " +"has been activated." +msgstr "" +"Der Wert dieser Option ist nur wirksam, wenn der experimentelle Trust-" +"Mechanismus aktiviert wurde." + +msgid "" +"This option is only there for debugging purposes. It will drastically reduce " +"performance." +msgstr "" +"Diese Option ist ausschließlich zur Fehlersuche. Es wird drastisch die " +"Leistung beeinträchtigt." + +msgid "" +"This option will be removed in future releases as it has been obsoleted by " +"the more general header taggers." +msgstr "Diese Option wird in zukünftigen Versionen entfernt werden." + +msgid "" +"This tab controls the security-relevant aspects of Privoxy's configuration." +msgstr "" +"Diese Registerkarte steuert die sicherheitsrelevanten Aspekte der Privoxy " +"Konfiguration." + +msgid "" +"Through which SOCKS proxy (and optionally to which parent HTTP proxy) " +"specific requests should be routed." +msgstr "" +"An welchen SOCKS-Proxy (und gegebenenfalls an welchen übergeordneten HTTP-" +"Proxy) spezifischen Anforderungen weitergeleitet werden." + +msgid "To which parent HTTP proxy specific requests should be routed." +msgstr "" +"An welchen übergeordneten HTTP-Proxy spezifischen Anforderungen " +"weitergeleitet werden." + +msgid "User customizations" +msgstr "Benutzerdefinierte Anpassungen" + +msgid "Value is not a number" +msgstr "Eingabe ist keine Zahl" + +msgid "Value not between 0 and 300" +msgstr "" + +msgid "Value not between 0 and 9" +msgstr "Wert nicht zwischen 0 und 9" + +msgid "Value not between 1 and 4096" +msgstr "Wert nicht zwischen 1 und 4096" + +msgid "Value not greater 0 or empty" +msgstr "Wert nicht größer 0 oder leer" + +msgid "Value range 1 to 4096, no entry defaults to 4096" +msgstr "Wertebereich: 1 bis 4096; Keine Angabe setzt 4096." + +msgid "Version" +msgstr "Version" + +msgid "Version Information" +msgstr "Versionsinformation" + +msgid "Whether intercepted requests should be treated as valid." +msgstr "Ob abgefangen Anfragen als gültig behandelt werden." + +msgid "" +"Whether or not Privoxy recognizes special HTTP headers to change toggle " +"state." +msgstr "" +"Ob Privoxy erkannte spezielle HTTP-Header zur Änderung des Toggle-Status " +"verwendet.." + +msgid "Whether or not buffered content is compressed before delivery." +msgstr "" +"Ob gepufferte Inhalte vor der Weiterleitung komprimiert werden oder nicht." + +msgid "" +"Whether or not outgoing connections that have been kept alive should be " +"shared between different incoming connections." +msgstr "" +"Ob ausgehende Verbindungen, die am Leben gehalten werden, für verschiedenen " +"eingehenden Verbindungen gemeinsam genutzt werden oder nicht." + +msgid "Whether or not pipelined requests should be served." +msgstr "Ob Pipeline-Anfragen bedient werden oder nicht." + +msgid "Whether or not proxy authentication through Privoxy should work." +msgstr "" +"Ob Proxy-Authentifizierungen durch Privoxy weitergeleitet werden oder nicht." + +msgid "Whether or not the web-based actions file editor may be used." +msgstr "De-/Aktiviert den webbasierte Action-Datei Editor." + +msgid "Whether or not the web-based toggle feature may be used." +msgstr "De-Aktiviert die webbasierte Umschaltfunktion." + +msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected." +msgstr "" +"Ob Anfragen an Privoxy CGI-Seiten gesperrt oder umgeleitet werden können " +"oder nicht." + +msgid "" +"Whether the CGI interface should stay compatible with broken HTTP clients." +msgstr "" +"Ob die CGI-Schnittstelle mit broken HTTP-Clients kompatibel bleibt oder " +"nicht." + +msgid "Whether to run only one server thread." +msgstr "Ob nur ein Server-Thread ausgeführt wird." + +msgid "Who can access what." +msgstr "Wer kann auf Was zugreifen." + +msgid "installed" +msgstr "installiert" + +msgid "or higher" +msgstr "oder höher" + +msgid "required" +msgstr "benötigt" + +#~ msgid "Local Set-up" +#~ msgstr "Lokale Einstellungen" + +#~ msgid "Software update required" +#~ msgstr "Softwareaktualisierung nötig" + +#~ msgid "" +#~ "The currently installed 'privoxy' package is not supported by LuCI " +#~ "application." +#~ msgstr "" +#~ "Das aktuell installierte 'privoxy' Paket wird von dieser LuCI Anwendung " +#~ "NICHT unterstützt." diff --git a/feeds/luci/applications/luci-app-privoxy/po/sv/privoxy.po b/feeds/luci/applications/luci-app-privoxy/po/sv/privoxy.po new file mode 100644 index 0000000..14e47e1 --- /dev/null +++ b/feeds/luci/applications/luci-app-privoxy/po/sv/privoxy.po @@ -0,0 +1,442 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" + +msgid "" +"A URL to be displayed in the error page that users will see if access to an " +"untrusted page is denied." +msgstr "" +"En URL som ska visas på felsidan som användare kommer se om tillgång till en " +"ej pålitlig sida nekas." + +msgid "" +"A URL to documentation about the local Privoxy setup, configuration or " +"policies." +msgstr "" + +msgid "A directory where Privoxy can create temporary files." +msgstr "En mapp där Privoxy kan skapa tillfälliga filer." + +msgid "Access Control" +msgstr "Åkomstkontroll" + +msgid "Actions that are applied to all sites and maybe overruled later on." +msgstr "" + +msgid "An alternative directory where the templates are loaded from." +msgstr "En alternativ mapp som mallar laddas från." + +msgid "An email address to reach the Privoxy administrator." +msgstr "En e-postadress för att nå Privoxy-administratören." + +msgid "" +"Assumed server-side keep-alive timeout (in seconds) if not specified by the " +"server." +msgstr "" + +msgid "Boot delay" +msgstr "" + +msgid "CGI user interface" +msgstr "CGI-användargränssnitt" + +msgid "Common Log Format" +msgstr "Vanliga loggformat" + +msgid "" +"Configure here the routing of HTTP requests through a chain of multiple " +"proxies. Note that parent proxies can severely decrease your privacy level. " +"Also specified here are SOCKS proxies." +msgstr "" + +msgid "Debug GIF de-animation" +msgstr "" + +msgid "Debug force feature" +msgstr "" + +msgid "Debug redirects" +msgstr "Felsök omdirigeringar" + +msgid "Debug regular expression filters" +msgstr "" + +msgid "Delay (in seconds) during system boot before Privoxy start" +msgstr "" + +msgid "Directory does not exist!" +msgstr "Mappen finns inte!" + +msgid "Disabled == Transparent Proxy Mode" +msgstr "Inaktiverad == " + +msgid "Documentation" +msgstr "" + +msgid "During delay ifup-events are not monitored !" +msgstr "" + +msgid "Enable proxy authentication forwarding" +msgstr "" + +msgid "" +"Enable/Disable autostart of Privoxy on system startup and interface events" +msgstr "" + +msgid "Enable/Disable filtering when Privoxy starts." +msgstr "Aktivera/Inaktivera filtrering när Privoxy startar." + +msgid "Enabled" +msgstr "Aktiverat" + +msgid "" +"Enabling this option is NOT recommended if there is no parent proxy that " +"requires authentication!" +msgstr "" +"Att aktivera det här alternativet är INTE rekommenderat om det inte finns " +"någon uppnbar proxy som kräver autentisering!" + +msgid "File '%s' not found inside Configuration Directory" +msgstr "Filen '%s' hittades inte inuti konfigurationsmappen" + +msgid "File not found or empty" +msgstr "Filen hittades inte eller så är den tom" + +msgid "Files and Directories" +msgstr "Filer och Mappar" + +msgid "For help use link at the relevant option" +msgstr "För hjälp använd länk vid relevant alternativ" + +msgid "Forwarding" +msgstr "Vidarebefordring" + +msgid "" +"If enabled, Privoxy hides the 'go there anyway' link. The user obviously " +"should not be able to bypass any blocks." +msgstr "" + +msgid "" +"If you intend to operate Privoxy for more users than just yourself, it might " +"be a good idea to let them know how to reach you, what you block and why you " +"do that, your policies, etc." +msgstr "" + +msgid "Invalid email address" +msgstr "Ogiltig e-postadress" + +msgid "It is NOT recommended for the casual user." +msgstr "Det är INTE rekommenderat för den vanliga användaren." + +msgid "Location of the Privoxy User Manual." +msgstr "Plats för Privoxy's användarmanual." + +msgid "Log File Viewer" +msgstr "Visare av loggfil" + +msgid "Log all data read from the network" +msgstr "Logga all läst data från nätverket" + +msgid "Log all data written to the network" +msgstr "Logga all data som skrivits till nätverket" + +msgid "Log the applying actions" +msgstr "Logga de verkställande handlingarna" + +msgid "" +"Log the destination for each request Privoxy let through. See also 'Debug " +"1024'." +msgstr "" + +msgid "" +"Log the destination for requests Privoxy didn't let through, and the reason " +"why." +msgstr "" + +msgid "Logging" +msgstr "Loggning" + +msgid "Main actions file" +msgstr "" + +msgid "Mandatory Input: No Data given!" +msgstr "Obligatorisk inmatning: Ingen data angavs!" + +msgid "Mandatory Input: No Directory given!" +msgstr "Obligatorisk inmatning: Ingen mapp angavs!" + +msgid "Mandatory Input: No File given!" +msgstr "Obligatorisk inmatning: Ingen fil angavs!" + +msgid "Mandatory Input: No Port given!" +msgstr "Obligatorisk inmatning: Ingen port angavs!" + +msgid "Mandatory Input: No files given!" +msgstr "Obligatorisk inmatning: Inga filer angavs" + +msgid "Mandatory Input: No valid IPv4 address or host given!" +msgstr "Obligatorisk inmatning: Ingen giltig IPv4-adress eller värd angavs!" + +msgid "Mandatory Input: No valid IPv6 address given!" +msgstr "Obligatorisk inmatning: Ingen giltig IPv6-adress angavs!" + +msgid "Mandatory Input: No valid Port given!" +msgstr "Obligatorisk inmatning: Ingen giltig port angavs!" + +msgid "Maximum number of client connections that will be served." +msgstr "Maximalt antal klientanslutningar som blir betjänade." + +msgid "Maximum size (in KB) of the buffer for content filtering." +msgstr "" + +msgid "Miscellaneous" +msgstr "Diverse" + +msgid "NOT installed" +msgstr "" + +msgid "No trailing '/', please." +msgstr "Vänligen, inget eftersläpande '/'" + +msgid "Non-fatal errors - *we highly recommended enabling this*" +msgstr "" +"Icke-dödliga fel - *vi rekommenderar verkligen att man aktiverar det här*" + +msgid "" +"Number of seconds after which a socket times out if no data is received." +msgstr "" + +msgid "" +"Number of seconds after which an open connection will no longer be reused." +msgstr "" + +msgid "" +"Only when using 'external filters', Privoxy has to create temporary files." +msgstr "" + +msgid "Please install current version !" +msgstr "" + +msgid "Please press [Read] button" +msgstr "Vänligen tryck på [Läs]-knappen" + +msgid "Please read Privoxy manual for details!" +msgstr "Vänligen läs Privoxy-manualen för detaljer!" + +msgid "Please update to the current version!" +msgstr "Vänligen uppdatera till den nuvarande versionen!" + +msgid "Privoxy WEB proxy" +msgstr "WEB-proxyn Privoxy" + +msgid "" +"Privoxy can (and normally does) use a number of other files for additional " +"configuration, help and logging. This section of the configuration file " +"tells Privoxy where to find those other files." +msgstr "" + +msgid "" +"Privoxy is a non-caching web proxy with advanced filtering capabilities for " +"enhancing privacy, modifying web page data and HTTP headers, controlling " +"access, and removing ads and other obnoxious Internet junk." +msgstr "" + +msgid "Read / Reread log file" +msgstr "Läs / Läs om loggfil" + +msgid "Show I/O status" +msgstr "Visa I/O-status" + +msgid "Show each connection status" +msgstr "Visa varje anslutnings status" + +msgid "Show header parsing" +msgstr "" + +msgid "Software package '%s' is not installed." +msgstr "" + +msgid "Software package '%s' is outdated." +msgstr "" + +msgid "Start" +msgstr "Starta" + +msgid "Start / Stop" +msgstr "Starta / Stoppa" + +msgid "Start/Stop Privoxy WEB Proxy" +msgstr "Starta/Stoppa Privoxy WEB-proxy" + +msgid "Startup banner and warnings." +msgstr "" + +msgid "Syntax:" +msgstr "Syntax:" + +msgid "Syntax: Client header names delimited by spaces." +msgstr "" + +msgid "Syntax: target_pattern http_parent[:port]" +msgstr "" + +msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]" +msgstr "" + +msgid "System" +msgstr "" + +msgid "" +"The actions file(s) to use. Multiple actionsfile lines are permitted, and " +"are in fact recommended!" +msgstr "" + +msgid "" +"The address and TCP port on which Privoxy will listen for client requests." +msgstr "" + +msgid "" +"The compression level that is passed to the zlib library when compressing " +"buffered content." +msgstr "" + +msgid "" +"The directory where all logging takes place (i.e. where the logfile is " +"located)." +msgstr "" + +msgid "The directory where the other configuration files are located." +msgstr "" + +msgid "" +"The filter files contain content modification rules that use regular " +"expressions." +msgstr "" + +msgid "The hostname shown on the CGI pages." +msgstr "Värdnamnet som visas på CGI-sidor." + +msgid "The log file to use. File name, relative to log directory." +msgstr "Loggfilen att använda. Filnamn, relativt till logg-mappen." + +msgid "The order in which client headers are sorted before forwarding them." +msgstr "" + +msgid "" +"The status code Privoxy returns for pages blocked with +handle-as-empty-" +"document." +msgstr "" + +msgid "" +"The trust mechanism is an experimental feature for building white-lists and " +"should be used with care." +msgstr "" + +msgid "" +"The value of this option only matters if the experimental trust mechanism " +"has been activated." +msgstr "" + +msgid "" +"This option is only there for debugging purposes. It will drastically reduce " +"performance." +msgstr "" + +msgid "" +"This option will be removed in future releases as it has been obsoleted by " +"the more general header taggers." +msgstr "" + +msgid "" +"This tab controls the security-relevant aspects of Privoxy's configuration." +msgstr "" + +msgid "" +"Through which SOCKS proxy (and optionally to which parent HTTP proxy) " +"specific requests should be routed." +msgstr "" + +msgid "To which parent HTTP proxy specific requests should be routed." +msgstr "" + +msgid "User customizations" +msgstr "Anpassningar för användare" + +msgid "Value is not a number" +msgstr "Värdet är inte ett nummer" + +msgid "Value not between 0 and 300" +msgstr "" + +msgid "Value not between 0 and 9" +msgstr "Värdet är inte mellan 0 och 9" + +msgid "Value not between 1 and 4096" +msgstr "Värdet är inte mellan 1 och 4096" + +msgid "Value not greater 0 or empty" +msgstr "Värdet är inte större än 0 eller tomt" + +msgid "Value range 1 to 4096, no entry defaults to 4096" +msgstr "" + +msgid "Version" +msgstr "Version" + +msgid "Version Information" +msgstr "Information om versionen" + +msgid "Whether intercepted requests should be treated as valid." +msgstr "" + +msgid "" +"Whether or not Privoxy recognizes special HTTP headers to change toggle " +"state." +msgstr "" + +msgid "Whether or not buffered content is compressed before delivery." +msgstr "" + +msgid "" +"Whether or not outgoing connections that have been kept alive should be " +"shared between different incoming connections." +msgstr "" + +msgid "Whether or not pipelined requests should be served." +msgstr "" + +msgid "Whether or not proxy authentication through Privoxy should work." +msgstr "" + +msgid "Whether or not the web-based actions file editor may be used." +msgstr "" + +msgid "Whether or not the web-based toggle feature may be used." +msgstr "" + +msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected." +msgstr "" + +msgid "" +"Whether the CGI interface should stay compatible with broken HTTP clients." +msgstr "" + +msgid "Whether to run only one server thread." +msgstr "Om det endast ska köras en server-tråd." + +msgid "Who can access what." +msgstr "Vem som kan komma åt vad." + +msgid "installed" +msgstr "installerad" + +msgid "or higher" +msgstr "eller högre" + +msgid "required" +msgstr "krävs" + +#~ msgid "Local Set-up" +#~ msgstr "Lokal installation" + +#~ msgid "Software update required" +#~ msgstr "Uppdatering av mjukvara krävs" diff --git a/feeds/luci/applications/luci-app-privoxy/po/templates/privoxy.pot b/feeds/luci/applications/luci-app-privoxy/po/templates/privoxy.pot new file mode 100644 index 0000000..2e44ea8 --- /dev/null +++ b/feeds/luci/applications/luci-app-privoxy/po/templates/privoxy.pot @@ -0,0 +1,431 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "" +"A URL to be displayed in the error page that users will see if access to an " +"untrusted page is denied." +msgstr "" + +msgid "" +"A URL to documentation about the local Privoxy setup, configuration or " +"policies." +msgstr "" + +msgid "A directory where Privoxy can create temporary files." +msgstr "" + +msgid "Access Control" +msgstr "" + +msgid "Actions that are applied to all sites and maybe overruled later on." +msgstr "" + +msgid "An alternative directory where the templates are loaded from." +msgstr "" + +msgid "An email address to reach the Privoxy administrator." +msgstr "" + +msgid "" +"Assumed server-side keep-alive timeout (in seconds) if not specified by the " +"server." +msgstr "" + +msgid "Boot delay" +msgstr "" + +msgid "CGI user interface" +msgstr "" + +msgid "Common Log Format" +msgstr "" + +msgid "" +"Configure here the routing of HTTP requests through a chain of multiple " +"proxies. Note that parent proxies can severely decrease your privacy level. " +"Also specified here are SOCKS proxies." +msgstr "" + +msgid "Debug GIF de-animation" +msgstr "" + +msgid "Debug force feature" +msgstr "" + +msgid "Debug redirects" +msgstr "" + +msgid "Debug regular expression filters" +msgstr "" + +msgid "Delay (in seconds) during system boot before Privoxy start" +msgstr "" + +msgid "Directory does not exist!" +msgstr "" + +msgid "Disabled == Transparent Proxy Mode" +msgstr "" + +msgid "Documentation" +msgstr "" + +msgid "During delay ifup-events are not monitored !" +msgstr "" + +msgid "Enable proxy authentication forwarding" +msgstr "" + +msgid "" +"Enable/Disable autostart of Privoxy on system startup and interface events" +msgstr "" + +msgid "Enable/Disable filtering when Privoxy starts." +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "" +"Enabling this option is NOT recommended if there is no parent proxy that " +"requires authentication!" +msgstr "" + +msgid "File '%s' not found inside Configuration Directory" +msgstr "" + +msgid "File not found or empty" +msgstr "" + +msgid "Files and Directories" +msgstr "" + +msgid "For help use link at the relevant option" +msgstr "" + +msgid "Forwarding" +msgstr "" + +msgid "" +"If enabled, Privoxy hides the 'go there anyway' link. The user obviously " +"should not be able to bypass any blocks." +msgstr "" + +msgid "" +"If you intend to operate Privoxy for more users than just yourself, it might " +"be a good idea to let them know how to reach you, what you block and why you " +"do that, your policies, etc." +msgstr "" + +msgid "Invalid email address" +msgstr "" + +msgid "It is NOT recommended for the casual user." +msgstr "" + +msgid "Location of the Privoxy User Manual." +msgstr "" + +msgid "Log File Viewer" +msgstr "" + +msgid "Log all data read from the network" +msgstr "" + +msgid "Log all data written to the network" +msgstr "" + +msgid "Log the applying actions" +msgstr "" + +msgid "" +"Log the destination for each request Privoxy let through. See also 'Debug " +"1024'." +msgstr "" + +msgid "" +"Log the destination for requests Privoxy didn't let through, and the reason " +"why." +msgstr "" + +msgid "Logging" +msgstr "" + +msgid "Main actions file" +msgstr "" + +msgid "Mandatory Input: No Data given!" +msgstr "" + +msgid "Mandatory Input: No Directory given!" +msgstr "" + +msgid "Mandatory Input: No File given!" +msgstr "" + +msgid "Mandatory Input: No Port given!" +msgstr "" + +msgid "Mandatory Input: No files given!" +msgstr "" + +msgid "Mandatory Input: No valid IPv4 address or host given!" +msgstr "" + +msgid "Mandatory Input: No valid IPv6 address given!" +msgstr "" + +msgid "Mandatory Input: No valid Port given!" +msgstr "" + +msgid "Maximum number of client connections that will be served." +msgstr "" + +msgid "Maximum size (in KB) of the buffer for content filtering." +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "No trailing '/', please." +msgstr "" + +msgid "Non-fatal errors - *we highly recommended enabling this*" +msgstr "" + +msgid "" +"Number of seconds after which a socket times out if no data is received." +msgstr "" + +msgid "" +"Number of seconds after which an open connection will no longer be reused." +msgstr "" + +msgid "" +"Only when using 'external filters', Privoxy has to create temporary files." +msgstr "" + +msgid "Please install current version !" +msgstr "" + +msgid "Please press [Read] button" +msgstr "" + +msgid "Please read Privoxy manual for details!" +msgstr "" + +msgid "Please update to the current version!" +msgstr "" + +msgid "Privoxy WEB proxy" +msgstr "" + +msgid "" +"Privoxy can (and normally does) use a number of other files for additional " +"configuration, help and logging. This section of the configuration file " +"tells Privoxy where to find those other files." +msgstr "" + +msgid "" +"Privoxy is a non-caching web proxy with advanced filtering capabilities for " +"enhancing privacy, modifying web page data and HTTP headers, controlling " +"access, and removing ads and other obnoxious Internet junk." +msgstr "" + +msgid "Read / Reread log file" +msgstr "" + +msgid "Show I/O status" +msgstr "" + +msgid "Show each connection status" +msgstr "" + +msgid "Show header parsing" +msgstr "" + +msgid "Software package '%s' is not installed." +msgstr "" + +msgid "Software package '%s' is outdated." +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Start/Stop Privoxy WEB Proxy" +msgstr "" + +msgid "Startup banner and warnings." +msgstr "" + +msgid "Syntax:" +msgstr "" + +msgid "Syntax: Client header names delimited by spaces." +msgstr "" + +msgid "Syntax: target_pattern http_parent[:port]" +msgstr "" + +msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]" +msgstr "" + +msgid "System" +msgstr "" + +msgid "" +"The actions file(s) to use. Multiple actionsfile lines are permitted, and " +"are in fact recommended!" +msgstr "" + +msgid "" +"The address and TCP port on which Privoxy will listen for client requests." +msgstr "" + +msgid "" +"The compression level that is passed to the zlib library when compressing " +"buffered content." +msgstr "" + +msgid "" +"The directory where all logging takes place (i.e. where the logfile is " +"located)." +msgstr "" + +msgid "The directory where the other configuration files are located." +msgstr "" + +msgid "" +"The filter files contain content modification rules that use regular " +"expressions." +msgstr "" + +msgid "The hostname shown on the CGI pages." +msgstr "" + +msgid "The log file to use. File name, relative to log directory." +msgstr "" + +msgid "The order in which client headers are sorted before forwarding them." +msgstr "" + +msgid "" +"The status code Privoxy returns for pages blocked with +handle-as-empty-" +"document." +msgstr "" + +msgid "" +"The trust mechanism is an experimental feature for building white-lists and " +"should be used with care." +msgstr "" + +msgid "" +"The value of this option only matters if the experimental trust mechanism " +"has been activated." +msgstr "" + +msgid "" +"This option is only there for debugging purposes. It will drastically reduce " +"performance." +msgstr "" + +msgid "" +"This option will be removed in future releases as it has been obsoleted by " +"the more general header taggers." +msgstr "" + +msgid "" +"This tab controls the security-relevant aspects of Privoxy's configuration." +msgstr "" + +msgid "" +"Through which SOCKS proxy (and optionally to which parent HTTP proxy) " +"specific requests should be routed." +msgstr "" + +msgid "To which parent HTTP proxy specific requests should be routed." +msgstr "" + +msgid "User customizations" +msgstr "" + +msgid "Value is not a number" +msgstr "" + +msgid "Value not between 0 and 300" +msgstr "" + +msgid "Value not between 0 and 9" +msgstr "" + +msgid "Value not between 1 and 4096" +msgstr "" + +msgid "Value not greater 0 or empty" +msgstr "" + +msgid "Value range 1 to 4096, no entry defaults to 4096" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "Whether intercepted requests should be treated as valid." +msgstr "" + +msgid "" +"Whether or not Privoxy recognizes special HTTP headers to change toggle " +"state." +msgstr "" + +msgid "Whether or not buffered content is compressed before delivery." +msgstr "" + +msgid "" +"Whether or not outgoing connections that have been kept alive should be " +"shared between different incoming connections." +msgstr "" + +msgid "Whether or not pipelined requests should be served." +msgstr "" + +msgid "Whether or not proxy authentication through Privoxy should work." +msgstr "" + +msgid "Whether or not the web-based actions file editor may be used." +msgstr "" + +msgid "Whether or not the web-based toggle feature may be used." +msgstr "" + +msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected." +msgstr "" + +msgid "" +"Whether the CGI interface should stay compatible with broken HTTP clients." +msgstr "" + +msgid "Whether to run only one server thread." +msgstr "" + +msgid "Who can access what." +msgstr "" + +msgid "installed" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "required" +msgstr "" diff --git a/feeds/luci/applications/luci-app-privoxy/po/zh-cn/privoxy.po b/feeds/luci/applications/luci-app-privoxy/po/zh-cn/privoxy.po new file mode 100644 index 0000000..778422b --- /dev/null +++ b/feeds/luci/applications/luci-app-privoxy/po/zh-cn/privoxy.po @@ -0,0 +1,465 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-privoxy\n" +"POT-Creation-Date: 2015-06-10 20:16+0100\n" +"PO-Revision-Date: 2017-01-05 18:01+0800\n" +"Last-Translator: maz-1 \n" +"Language-Team: \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "" +"A URL to be displayed in the error page that users will see if access to an " +"untrusted page is denied." +msgstr "当用户试图访问不受信任的页面时,错误页面所显示的URL。" + +msgid "" +"A URL to documentation about the local Privoxy setup, configuration or " +"policies." +msgstr "指向 Privoxy 安装、设置和规则说明文档的 URL" + +msgid "A directory where Privoxy can create temporary files." +msgstr "Privoxy 存放临时文件的目录。" + +msgid "Access Control" +msgstr "访问控制" + +msgid "Actions that are applied to all sites and maybe overruled later on." +msgstr "作用在所有站点上的规则,可能被后面的规则覆盖。" + +msgid "An alternative directory where the templates are loaded from." +msgstr "可选的目录,放在里面的模板会被加载。" + +msgid "An email address to reach the Privoxy administrator." +msgstr "用于联系 Privoxy 管理员的邮箱地址。" + +msgid "" +"Assumed server-side keep-alive timeout (in seconds) if not specified by the " +"server." +msgstr "当服务端没有指定超时时间时假定的超时时间(单位:秒)。" + +msgid "Boot delay" +msgstr "启动延时" + +msgid "CGI user interface" +msgstr "CGI 用户界面" + +msgid "Common Log Format" +msgstr "通用日志格式" + +msgid "" +"Configure here the routing of HTTP requests through a chain of multiple " +"proxies. Note that parent proxies can severely decrease your privacy level. " +"Also specified here are SOCKS proxies." +msgstr "" +"在这里设置 HTTP 请求所经过的多重代理链。注意:父级代理可能严重降低你的隐私安" +"全度。在这里还可以设置 SOCKS 代理。" + +msgid "Debug GIF de-animation" +msgstr "GIF动画日志" + +msgid "Debug force feature" +msgstr "Force feature 日志" + +msgid "Debug redirects" +msgstr "重定向日志" + +msgid "Debug regular expression filters" +msgstr "正则表达式日志" + +msgid "Delay (in seconds) during system boot before Privoxy start" +msgstr "Privoxy 自启动延迟时间(单位:秒)" + +msgid "Directory does not exist!" +msgstr "目录不存在!" + +msgid "Disabled == Transparent Proxy Mode" +msgstr "禁用 == 透明代理模式" + +msgid "Documentation" +msgstr "记录信息" + +msgid "During delay ifup-events are not monitored !" +msgstr "在延迟期间无法检测到 ifup 事件!" + +msgid "Enable proxy authentication forwarding" +msgstr "允许转发代理认证" + +msgid "" +"Enable/Disable autostart of Privoxy on system startup and interface events" +msgstr "开启/关闭 Privoxy 在系统启动或接口事件时自动启动。" + +msgid "Enable/Disable filtering when Privoxy starts." +msgstr "Privoxy 启动时开启/关闭过滤。" + +msgid "Enabled" +msgstr "已开启" + +msgid "" +"Enabling this option is NOT recommended if there is no parent proxy that " +"requires authentication!" +msgstr "如果没有需要认证的父级代理时,不推荐开启这个选项!" + +msgid "File '%s' not found inside Configuration Directory" +msgstr "在设置目录中未找到文件 '%S'!" + +msgid "File not found or empty" +msgstr "文件不存在或为空" + +msgid "Files and Directories" +msgstr "文件和目录" + +msgid "For help use link at the relevant option" +msgstr "点击相应选项的连接可获取帮助。" + +msgid "Forwarding" +msgstr "转发" + +msgid "" +"If enabled, Privoxy hides the 'go there anyway' link. The user obviously " +"should not be able to bypass any blocks." +msgstr "如果启用,Privoxy 会隐藏 'go there anyway' 链接,用户就不能绕过屏蔽。" + +msgid "" +"If you intend to operate Privoxy for more users than just yourself, it might " +"be a good idea to let them know how to reach you, what you block and why you " +"do that, your policies, etc." +msgstr "" +"如果除了你还有其他用户使用 Privoxy 连接,最好让他们知道如何联系你,你屏蔽什" +"么,你为什么这样做,你的政策等等。" + +msgid "Invalid email address" +msgstr "邮箱地址无效" + +msgid "It is NOT recommended for the casual user." +msgstr "不推荐新手使用。" + +msgid "Location of the Privoxy User Manual." +msgstr "Privoxy 用户手册位置" + +msgid "Log File Viewer" +msgstr "日志查看器" + +msgid "Log all data read from the network" +msgstr "记录所有接收的网络数据" + +msgid "Log all data written to the network" +msgstr "记录所有发送的网络数据" + +msgid "Log the applying actions" +msgstr "记录配置保存动作" + +msgid "" +"Log the destination for each request Privoxy let through. See also 'Debug " +"1024'." +msgstr "记录 Privoxy 允许的所有请求。另请参考 'Debug 1024'。" + +msgid "" +"Log the destination for requests Privoxy didn't let through, and the reason " +"why." +msgstr "记录 Privoxy 拒绝的请求目标以及拒绝原因。" + +msgid "Logging" +msgstr "日志" + +msgid "Main actions file" +msgstr "主要规则文件" + +msgid "Mandatory Input: No Data given!" +msgstr "必需选项: 没有设置数据!" + +msgid "Mandatory Input: No Directory given!" +msgstr "必需选项: 没有设置目录!" + +msgid "Mandatory Input: No File given!" +msgstr "必需选项: 没有设置文件!" + +msgid "Mandatory Input: No Port given!" +msgstr "必需选项: 没有设置端口!" + +msgid "Mandatory Input: No files given!" +msgstr "必需选项: 没有设置文件!" + +msgid "Mandatory Input: No valid IPv4 address or host given!" +msgstr "必需选项: 没有设置有效的IPV4地址或者主机!" + +msgid "Mandatory Input: No valid IPv6 address given!" +msgstr "必需选项: 没有设置有效的IPV6地址!" + +msgid "Mandatory Input: No valid Port given!" +msgstr "必需选项: 没有设置有效的端口!" + +msgid "Maximum number of client connections that will be served." +msgstr "客户端数量上限。" + +msgid "Maximum size (in KB) of the buffer for content filtering." +msgstr "内容过滤的最大缓冲(单位:KB)。" + +msgid "Miscellaneous" +msgstr "杂项" + +msgid "NOT installed" +msgstr "未安装" + +msgid "No trailing '/', please." +msgstr "路径结尾不要加 '/' 。" + +msgid "Non-fatal errors - *we highly recommended enabling this*" +msgstr "非致命性错误 - * 强烈建议开启 *" + +msgid "" +"Number of seconds after which a socket times out if no data is received." +msgstr "Socket 连接未收到数据的超时时间。" + +msgid "" +"Number of seconds after which an open connection will no longer be reused." +msgstr "开放的连接不再重复使用的超时时间。" + +msgid "" +"Only when using 'external filters', Privoxy has to create temporary files." +msgstr "只有使用外置规则时,Privoxy 才需要创建临时文件。" + +msgid "Please install current version !" +msgstr "请安装当前版本!" + +msgid "Please press [Read] button" +msgstr "请点击 [读取] 按钮" + +msgid "Please read Privoxy manual for details!" +msgstr "请阅读 Privoxy 手册以了解详情!" + +msgid "Please update to the current version!" +msgstr "请升级到当前版本!" + +msgid "Privoxy WEB proxy" +msgstr "Privoxy 网络代理" + +msgid "" +"Privoxy can (and normally does) use a number of other files for additional " +"configuration, help and logging. This section of the configuration file " +"tells Privoxy where to find those other files." +msgstr "" +"Privoxy 可以使用其他一些文件用于附加设置,帮助和日志。这个区域用来告诉 " +"Privoxy 从哪里找到这些文件。" + +msgid "" +"Privoxy is a non-caching web proxy with advanced filtering capabilities for " +"enhancing privacy, modifying web page data and HTTP headers, controlling " +"access, and removing ads and other obnoxious Internet junk." +msgstr "" +"Privoxy 是一个无缓存的网络代理,具有高级过滤功能,能够修改网页数据和 HTTP 请" +"求头,控制访问,移除广告等。" + +msgid "Read / Reread log file" +msgstr "读取/刷新日志文件" + +msgid "Show I/O status" +msgstr "显示 I/O 状态" + +msgid "Show each connection status" +msgstr "显示每个连接的状态" + +msgid "Show header parsing" +msgstr "显示请求头 解析" + +msgid "Software package '%s' is not installed." +msgstr "软件包 '%s' 未安装" + +msgid "Software package '%s' is outdated." +msgstr "软件包 '%s' 已过时" + +msgid "Start" +msgstr "启动" + +msgid "Start / Stop" +msgstr "启动 / 停止" + +msgid "Start/Stop Privoxy WEB Proxy" +msgstr "启动/停止 Privoxy 网络代理" + +msgid "Startup banner and warnings." +msgstr "启动标语和警告。" + +msgid "Syntax:" +msgstr "格式:" + +msgid "Syntax: Client header names delimited by spaces." +msgstr "格式: 由空格分隔的客户端请求头名称。" + +msgid "Syntax: target_pattern http_parent[:port]" +msgstr "格式: target_pattern http_parent[:port]" + +msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]" +msgstr "格式: target_pattern socks_proxy[:port] http_parent[:port]" + +msgid "System" +msgstr "系统" + +msgid "" +"The actions file(s) to use. Multiple actionsfile lines are permitted, and " +"are in fact recommended!" +msgstr "所使用的规则文件。允许并且推荐使用多个规则文件。" + +msgid "" +"The address and TCP port on which Privoxy will listen for client requests." +msgstr "Privoxy 接收客户端请求时监听的地址和 TCP 端口。" + +msgid "" +"The compression level that is passed to the zlib library when compressing " +"buffered content." +msgstr "使用 zlib 压缩缓冲内容时的压缩级别。" + +msgid "" +"The directory where all logging takes place (i.e. where the logfile is " +"located)." +msgstr "所有日志所在的目录。" + +msgid "The directory where the other configuration files are located." +msgstr "其他设置文件所在的目录。" + +msgid "" +"The filter files contain content modification rules that use regular " +"expressions." +msgstr "过滤文件包含了使用正则表达式编写的内容修改规则" + +msgid "The hostname shown on the CGI pages." +msgstr "CGI页面显示的主机名。" + +msgid "The log file to use. File name, relative to log directory." +msgstr "日志文件名称,与日志路径相对。" + +msgid "The order in which client headers are sorted before forwarding them." +msgstr "转发数据前,客户端请求头的排序。" + +msgid "" +"The status code Privoxy returns for pages blocked with +handle-as-empty-" +"document." +msgstr "" +"当页面因为 handle-as-empty-document 规则被阻止时返回的状态码(选上为 200 OK," +"不选上为 403 Forbidden)" + +msgid "" +"The trust mechanism is an experimental feature for building white-lists and " +"should be used with care." +msgstr "信任机制是一个实验性的白名单特性,使用时应小心。" + +msgid "" +"The value of this option only matters if the experimental trust mechanism " +"has been activated." +msgstr "只有开启了信任机制时这个选项的值才有效" + +msgid "" +"This option is only there for debugging purposes. It will drastically reduce " +"performance." +msgstr "这个选项仅用于调试,开启后会极大地降低性能。" + +msgid "" +"This option will be removed in future releases as it has been obsoleted by " +"the more general header taggers." +msgstr "这个选项在以后的版本中将被移除,因为它被 header taggers 所取代了。" + +msgid "" +"This tab controls the security-relevant aspects of Privoxy's configuration." +msgstr "这个标签用于设置与安全相关的 Privoxy 选项。" + +msgid "" +"Through which SOCKS proxy (and optionally to which parent HTTP proxy) " +"specific requests should be routed." +msgstr "" +"指定的请求应该通过哪一个 SOCKS 代理(并且通过哪一个 HTTP 父代理,可选)" + +msgid "To which parent HTTP proxy specific requests should be routed." +msgstr "请求应转发至哪一个父级 HTTP 代理。" + +msgid "User customizations" +msgstr "用户自定义" + +msgid "Value is not a number" +msgstr "输入值不是数字" + +msgid "Value not between 0 and 300" +msgstr "输入值不在0和300之间" + +msgid "Value not between 0 and 9" +msgstr "输入值不在0和9之间" + +msgid "Value not between 1 and 4096" +msgstr "输入值不在1和4096之间" + +msgid "Value not greater 0 or empty" +msgstr "输入值为空或者不是大于零。" + +msgid "Value range 1 to 4096, no entry defaults to 4096" +msgstr "输入值为1到4096,默认为4096" + +msgid "Version" +msgstr "版本" + +msgid "Version Information" +msgstr "版本信息" + +msgid "Whether intercepted requests should be treated as valid." +msgstr "被拦截的请求是否应被当作有效的。" + +msgid "" +"Whether or not Privoxy recognizes special HTTP headers to change toggle " +"state." +msgstr "Privoxy 是否识别特殊的 HTTP 请求头以切换状态。" + +msgid "Whether or not buffered content is compressed before delivery." +msgstr "缓冲内容在传递之前是否压缩。" + +msgid "" +"Whether or not outgoing connections that have been kept alive should be " +"shared between different incoming connections." +msgstr "持久出站连接是否应在不同的入站连接之间共享。" + +msgid "Whether or not pipelined requests should be served." +msgstr "是否处理管道化的请求。" + +msgid "Whether or not proxy authentication through Privoxy should work." +msgstr "是否可以通过 Privoxy 进行代理验证。" + +msgid "Whether or not the web-based actions file editor may be used." +msgstr "是否使用基于网页的规则编辑器。" + +msgid "Whether or not the web-based toggle feature may be used." +msgstr "是否启用基于网页的切换功能。" + +msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected." +msgstr "访问 Privoxy CGI 页面的请求是否可以被拦截或重定向。" + +msgid "" +"Whether the CGI interface should stay compatible with broken HTTP clients." +msgstr "CGI 界面是否应兼容过时的HTTP客户端。" + +msgid "Whether to run only one server thread." +msgstr "是否只运行一个服务线程。" + +msgid "Who can access what." +msgstr "谁可以访问什么。" + +msgid "installed" +msgstr "已安装" + +msgid "or higher" +msgstr "或更高" + +msgid "required" +msgstr "需要" + +#~ msgid "Local Set-up" +#~ msgstr "本地设置" + +#~ msgid "Software update required" +#~ msgstr "需要升级软件" + +#~ msgid "" +#~ "The currently installed 'privoxy' package is not supported by LuCI " +#~ "application." +#~ msgstr "目前安装的privoxy版本不被luci支持。" diff --git a/feeds/luci/applications/luci-app-privoxy/root/etc/uci-defaults/40_luci-privoxy b/feeds/luci/applications/luci-app-privoxy/root/etc/uci-defaults/40_luci-privoxy new file mode 100755 index 0000000..3405479 --- /dev/null +++ b/feeds/luci/applications/luci-app-privoxy/root/etc/uci-defaults/40_luci-privoxy @@ -0,0 +1,12 @@ +#!/bin/sh + +# no longer needed for "Save and Apply" to restart privoxy +# luci-app-privoxy calls /etc/init.d/privoxy reload +uci -q batch <<-EOF >/dev/null + delete ucitrack.@privoxy[-1] + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache + +exit 0 diff --git a/feeds/luci/applications/luci-app-qos/Makefile b/feeds/luci/applications/luci-app-qos/Makefile new file mode 100644 index 0000000..dd322a3 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Quality of Service configuration module +LUCI_DEPENDS:=+qos-scripts + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-qos/luasrc/controller/qos.lua b/feeds/luci/applications/luci-app-qos/luasrc/controller/qos.lua new file mode 100644 index 0000000..250a039 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/luasrc/controller/qos.lua @@ -0,0 +1,15 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.qos", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/qos") then + return + end + + local page + + page = entry({"admin", "network", "qos"}, cbi("qos/qos"), _("QoS")) + page.dependent = true +end diff --git a/feeds/luci/applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua b/feeds/luci/applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua new file mode 100644 index 0000000..177b17b --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua @@ -0,0 +1,81 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local wa = require "luci.tools.webadmin" +local fs = require "nixio.fs" + +m = Map("qos", translate("Quality of Service"), + translate("With QoS you " .. + "can prioritize network traffic selected by addresses, " .. + "ports or services.")) + +s = m:section(TypedSection, "interface", translate("Interfaces")) +s.addremove = true +s.anonymous = false + +e = s:option(Flag, "enabled", translate("Enable")) +e.rmempty = false + +c = s:option(ListValue, "classgroup", translate("Classification group")) +c:value("Default", translate("default")) +c.default = "Default" + +s:option(Flag, "overhead", translate("Calculate overhead")) + +s:option(Flag, "halfduplex", translate("Half-duplex")) + +dl = s:option(Value, "download", translate("Download speed (kbit/s)")) +dl.datatype = "and(uinteger,min(1))" + +ul = s:option(Value, "upload", translate("Upload speed (kbit/s)")) +ul.datatype = "and(uinteger,min(1))" + +s = m:section(TypedSection, "classify", translate("Classification Rules")) +s.template = "cbi/tblsection" +s.anonymous = true +s.addremove = true +s.sortable = true + +t = s:option(ListValue, "target", translate("Target")) +t:value("Priority", translate("priority")) +t:value("Express", translate("express")) +t:value("Normal", translate("normal")) +t:value("Bulk", translate("low")) + +local uci = require "luci.model.uci" +uci.cursor():foreach("qos", "class", + function (section) + local n = section[".name"] + if string.sub(n,-string.len("_down"))~="_down" then + t:value(n) + end + end) + +t.default = "Normal" + +srch = s:option(Value, "srchost", translate("Source host")) +srch.rmempty = true +srch:value("", translate("all")) +wa.cbi_add_knownips(srch) + +dsth = s:option(Value, "dsthost", translate("Destination host")) +dsth.rmempty = true +dsth:value("", translate("all")) +wa.cbi_add_knownips(dsth) + +p = s:option(Value, "proto", translate("Protocol")) +p:value("", translate("all")) +p:value("tcp", "TCP") +p:value("udp", "UDP") +p:value("icmp", "ICMP") +p.rmempty = true + +ports = s:option(Value, "ports", translate("Ports")) +ports.rmempty = true +ports:value("", translate("all")) + +bytes = s:option(Value, "connbytes", translate("Number of bytes")) + +comment = s:option(Value, "comment", translate("Comment")) + +return m diff --git a/feeds/luci/applications/luci-app-qos/po/ca/qos.po b/feeds/luci/applications/luci-app-qos/po/ca/qos.po new file mode 100644 index 0000000..e1430f1 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/ca/qos.po @@ -0,0 +1,122 @@ +# qos.pot +# generated from ./applications/luci-qos/luasrc/i18n/qos.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2014-07-17 23:39+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +#, fuzzy +msgid "Calculate overhead" +msgstr "Calcula càrrega (overhead)" + +msgid "Classification Rules" +msgstr "Regles de classificació" + +msgid "Classification group" +msgstr "Grup de classificació" + +msgid "Comment" +msgstr "Comentari" + +msgid "Destination host" +msgstr "Host de destí" + +msgid "Download speed (kbit/s)" +msgstr "Velocitat de baixada (kbit/s)" + +msgid "Enable" +msgstr "Habilita" + +#, fuzzy +msgid "Half-duplex" +msgstr "Half-duplex" + +msgid "Interfaces" +msgstr "Interfícies" + +msgid "Number of bytes" +msgstr "Nombre de bytes" + +msgid "Ports" +msgstr "Ports" + +msgid "Protocol" +msgstr "Protocol" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Qualitat de Servei" + +msgid "Source host" +msgstr "Host d'origen" + +msgid "Target" +msgstr "Host de destí" + +msgid "Upload speed (kbit/s)" +msgstr "Velocitat de pujada (kbit/s)" + +#, fuzzy +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Amb QoS pots prioritzar el tràfic de xarxa seleccionat per adreces, ports o " +"serveis." + +msgid "all" +msgstr "tots" + +msgid "default" +msgstr "per defecte" + +msgid "express" +msgstr "exprés" + +msgid "low" +msgstr "baix" + +msgid "normal" +msgstr "normal" + +msgid "priority" +msgstr "prioritat" + +#~ msgid "Service" +#~ msgstr "Servei" + +#~ msgid "Downlink" +#~ msgstr "Enllaç de baixada" + +#~ msgid "Internet Connection" +#~ msgstr "Connexió a Internet" + +#~ msgid "Uplink" +#~ msgstr "Enllaç de pujada" + +#~ msgid "Prioritization" +#~ msgstr "Priorització" + +#~ msgid "source network / source host" +#~ msgstr "xarxa d'origen / màquina d'origen" + +#~ msgid "target network / target host" +#~ msgstr "xarxa de destí / màquina de destí" + +#~ msgid "portrange" +#~ msgstr "rang de ports" + +#~ msgid "Bytes sent" +#~ msgstr "Bytes enviats" diff --git a/feeds/luci/applications/luci-app-qos/po/cs/qos.po b/feeds/luci/applications/luci-app-qos/po/cs/qos.po new file mode 100644 index 0000000..884310f --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/cs/qos.po @@ -0,0 +1,114 @@ +# Generated from applications/luci-qos/luasrc/model/cbi/qos/qos.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2014-06-20 23:36+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "" +"Snažit se zabránit zahlcení linky snížením jejího maximálního povoleného " +"zatížení síťovým provozem" + +msgid "Classification Rules" +msgstr "Klasifikační pravidla" + +msgid "Classification group" +msgstr "Klasifikační skupina" + +msgid "Comment" +msgstr "Komentář" + +msgid "Destination host" +msgstr "Cílová adresa" + +msgid "Download speed (kbit/s)" +msgstr "Rychlost stahování dat (kbit/s)" + +msgid "Enable" +msgstr "Povolit" + +msgid "Half-duplex" +msgstr "Poloviční duplex" + +msgid "Interfaces" +msgstr "Síťová rozhraní" + +msgid "Number of bytes" +msgstr "Počet bajtů" + +msgid "Ports" +msgstr "Porty" + +msgid "Protocol" +msgstr "Protokol" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Quality of Service" + +msgid "Source host" +msgstr "Zdrojová adresa" + +msgid "Target" +msgstr "Cílová třída priority" + +msgid "Upload speed (kbit/s)" +msgstr "Rychlost odesílání dat (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Pomocí služby \"QoS\" můžete " +"nastavit prioritu síťového provozu na základě specifikace adres, portů či " +"služeb." + +msgid "all" +msgstr "vše" + +msgid "default" +msgstr "výchozí" + +msgid "express" +msgstr "nejvyšší priorita (velké rámce)" + +msgid "low" +msgstr "nízká priorita" + +msgid "normal" +msgstr "normální priorita" + +msgid "priority" +msgstr "nejvyšší priorita (malé rámce)" + +#~ msgid "Service" +#~ msgstr "Služba" + +#~ msgid "Downlink" +#~ msgstr "Stahování" + +#~ msgid "Internet Connection" +#~ msgstr "Připojení k internetu" + +#~ msgid "Uplink" +#~ msgstr "Odesílání" + +#, fuzzy +#~ msgid "allf" +#~ msgstr "allf" + +#~ msgid "qos_connbytes" +#~ msgstr "qos_connbytes" diff --git a/feeds/luci/applications/luci-app-qos/po/de/qos.po b/feeds/luci/applications/luci-app-qos/po/de/qos.po new file mode 100644 index 0000000..46060de --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/de/qos.po @@ -0,0 +1,122 @@ +# qos.po +# generated from ./applications/luci-qos/luasrc/i18n/qos.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2013-01-28 22:18+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "Overheadberechnung" + +msgid "Classification Rules" +msgstr "Klassifizierungsregeln" + +msgid "Classification group" +msgstr "Klassifizierungsgruppe" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "Zieladresse" + +msgid "Download speed (kbit/s)" +msgstr "Downloadgeschwindigkeit (kbit/s)" + +msgid "Enable" +msgstr "Aktivieren" + +msgid "Half-duplex" +msgstr "Halb-Duplex" + +msgid "Interfaces" +msgstr "Schnittstellen" + +msgid "Number of bytes" +msgstr "Byteanzahl" + +msgid "Ports" +msgstr "Ports" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Quality of Service" + +msgid "Source host" +msgstr "Quelladresse" + +msgid "Target" +msgstr "Zieladresse" + +msgid "Upload speed (kbit/s)" +msgstr "Uploadgeschwindigkeit (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Mit Hilfe von QoS kann " +"Netzwerkverkehr anhand von Adressen, Ports oder Diensten priorisiert werden." + +msgid "all" +msgstr "alle" + +msgid "default" +msgstr "Standardeinstellung" + +msgid "express" +msgstr "express" + +msgid "low" +msgstr "niedrig" + +msgid "normal" +msgstr "normal" + +msgid "priority" +msgstr "Priorität" + +#~ msgid "Service" +#~ msgstr "Dienst" + +#~ msgid "Downlink" +#~ msgstr "Downlink" + +#~ msgid "Internet Connection" +#~ msgstr "Internetverbindung" + +#~ msgid "Uplink" +#~ msgstr "Uplink" + +#~ msgid "allf" +#~ msgstr "alle f" + +#~ msgid "qos_connbytes" +#~ msgstr "Bytes gesendet" + +#~ msgid "Prioritization" +#~ msgstr "Priorisierung" + +#~ msgid "source network / source host" +#~ msgstr "Quellnetz / Quellhost" + +#~ msgid "target network / target host" +#~ msgstr "Zielnetz / Zielhost" + +#~ msgid "portrange" +#~ msgstr "Portbereich" diff --git a/feeds/luci/applications/luci-app-qos/po/el/qos.po b/feeds/luci/applications/luci-app-qos/po/el/qos.po new file mode 100644 index 0000000..9c8a985 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/el/qos.po @@ -0,0 +1,124 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2012-03-18 15:29+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#, fuzzy +msgid "Calculate overhead" +msgstr "Υπολογισμός Overhead" + +#, fuzzy +msgid "Classification Rules" +msgstr "Κατηγοριοποίηση" + +#, fuzzy +msgid "Classification group" +msgstr "Κατηγοριοποίηση" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "" + +msgid "Download speed (kbit/s)" +msgstr "" + +msgid "Enable" +msgstr "Ενεργοποίηση" + +#, fuzzy +msgid "Half-duplex" +msgstr "Μη-ταυτόχρονη αμφίδρομη επικοινωνία" + +msgid "Interfaces" +msgstr "Διεπαφές" + +msgid "Number of bytes" +msgstr "" + +#, fuzzy +msgid "Ports" +msgstr "Προτεραιότητα" + +msgid "Protocol" +msgstr "Πρωτόκολλο" + +msgid "QoS" +msgstr "" + +msgid "Quality of Service" +msgstr "Ποιότητα Υπηρεσίας" + +#, fuzzy +msgid "Source host" +msgstr "Διεύθυνση πηγής" + +#, fuzzy +msgid "Target" +msgstr "Διεύθυνση στόχου" + +msgid "Upload speed (kbit/s)" +msgstr "" + +#, fuzzy +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Με το QoS μπορείτε να ορίσετε προτεραιότητες στην κίνηση του δικτύου με βάση " +"διευθύνσεις, θύρες ή υπηρεσίες." + +msgid "all" +msgstr "" + +msgid "default" +msgstr "προεπιλογή" + +msgid "express" +msgstr "εξπρές" + +msgid "low" +msgstr "χαμηλή" + +msgid "normal" +msgstr "κανονική" + +msgid "priority" +msgstr "προτεραιότητα" + +#~ msgid "Service" +#~ msgstr "Υπηρεσία" + +#, fuzzy +#~ msgid "Downlink" +#~ msgstr "Ταχύτητα κατεβάσματος" + +#, fuzzy +#~ msgid "Uplink" +#~ msgstr "Ταχύτητα ανεβάσματος" + +#~ msgid "Prioritization" +#~ msgstr "Προτεραιότητες" + +#~ msgid "source network / source host" +#~ msgstr "πηγαίο δίκτυο / πηγαίος υπολογιστής" + +#~ msgid "target network / target host" +#~ msgstr "δίκτυο στόχος / υπολογιστής στόχος" + +#~ msgid "portrange" +#~ msgstr "εύρος θυρών" + +#~ msgid "Bytes sent" +#~ msgstr "Απεσταλμένα byte" diff --git a/feeds/luci/applications/luci-app-qos/po/en/qos.po b/feeds/luci/applications/luci-app-qos/po/en/qos.po new file mode 100644 index 0000000..b20180f --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/en/qos.po @@ -0,0 +1,91 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2010-03-25 22:10+0100\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Calculate overhead" +msgstr "Calculate overhead" + +msgid "Classification Rules" +msgstr "Classification Rules" + +msgid "Classification group" +msgstr "Classification group" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "Destination host" + +msgid "Download speed (kbit/s)" +msgstr "Download speed (kbit/s)" + +msgid "Enable" +msgstr "Enable" + +msgid "Half-duplex" +msgstr "Half-duplex" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Number of bytes" +msgstr "Number of bytes" + +msgid "Ports" +msgstr "Ports" + +msgid "Protocol" +msgstr "Protocol" + +msgid "QoS" +msgstr "" + +msgid "Quality of Service" +msgstr "Quality of Service" + +msgid "Source host" +msgstr "Source host" + +msgid "Target" +msgstr "Target" + +msgid "Upload speed (kbit/s)" +msgstr "Upload speed (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." + +msgid "all" +msgstr "all" + +msgid "default" +msgstr "default" + +msgid "express" +msgstr "express" + +msgid "low" +msgstr "low" + +msgid "normal" +msgstr "normal" + +msgid "priority" +msgstr "priority" + +#~ msgid "Service" +#~ msgstr "Service" diff --git a/feeds/luci/applications/luci-app-qos/po/es/qos.po b/feeds/luci/applications/luci-app-qos/po/es/qos.po new file mode 100644 index 0000000..83ace8d --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/es/qos.po @@ -0,0 +1,123 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2014-06-15 09:13+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "Calcular sobrecarga" + +msgid "Classification Rules" +msgstr "Reglas de clasificación" + +msgid "Classification group" +msgstr "Grupo de clasificación" + +msgid "Comment" +msgstr "Comentario" + +msgid "Destination host" +msgstr "Máquina de destino" + +msgid "Download speed (kbit/s)" +msgstr "Velocidad de descarga (Kbit/s)" + +msgid "Enable" +msgstr "Activar" + +msgid "Half-duplex" +msgstr "Semi dúplex" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Number of bytes" +msgstr "Número de bytes" + +msgid "Ports" +msgstr "Puertos" + +msgid "Protocol" +msgstr "Protocolo" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Calidad de Servicio" + +msgid "Source host" +msgstr "Máquina origen" + +msgid "Target" +msgstr "Objetivo" + +msgid "Upload speed (kbit/s)" +msgstr "Velocidad de subida (Kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Con QoS puede priorizar el tráfico de la red seleccionando por direcciones, " +"puertos o servicios." + +msgid "all" +msgstr "todos" + +msgid "default" +msgstr "por defecto" + +msgid "express" +msgstr "exprés" + +msgid "low" +msgstr "bajo" + +msgid "normal" +msgstr "normal" + +msgid "priority" +msgstr "prioritario" + +#~ msgid "Service" +#~ msgstr "Servicio" + +#~ msgid "Downlink" +#~ msgstr "Enlace de bajada" + +#~ msgid "Internet Connection" +#~ msgstr "Conexión a Internet" + +#~ msgid "Uplink" +#~ msgstr "Enlace de subida" + +#~ msgid "allf" +#~ msgstr "-- ¿allf? --" + +#~ msgid "qos_connbytes" +#~ msgstr "-- ¿qos_connbytes? --" + +#~ msgid "Prioritization" +#~ msgstr "Priorización" + +#~ msgid "source network / source host" +#~ msgstr "red de origen / host de origen" + +#~ msgid "target network / target host" +#~ msgstr "red de destino / host de destino" + +#~ msgid "portrange" +#~ msgstr "rango de puerto" + +#~ msgid "Bytes sent" +#~ msgstr "Bytes enviados" diff --git a/feeds/luci/applications/luci-app-qos/po/fr/qos.po b/feeds/luci/applications/luci-app-qos/po/fr/qos.po new file mode 100644 index 0000000..38e9ce8 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/fr/qos.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2012-11-06 16:08+0200\n" +"Last-Translator: hogsim \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "Calculer la surcharge" + +msgid "Classification Rules" +msgstr "Règles de classification" + +msgid "Classification group" +msgstr "Groupe de classification" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "Hôte destinataire" + +msgid "Download speed (kbit/s)" +msgstr "Vitesse de téléchargement (kbit/s)" + +msgid "Enable" +msgstr "Activer" + +msgid "Half-duplex" +msgstr "Demi-duplex" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Number of bytes" +msgstr "Nombre d'octets" + +msgid "Ports" +msgstr "Ports" + +msgid "Protocol" +msgstr "Protocole" + +msgid "QoS" +msgstr "" + +msgid "Quality of Service" +msgstr "Qualité de service" + +msgid "Source host" +msgstr "Hôte source" + +msgid "Target" +msgstr "Cible" + +msgid "Upload speed (kbit/s)" +msgstr "Vitesse de téléversement (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Avec la QoS, vous pouvez donner " +"des priorités au trafic réseau en fonction des adresses, des ports ou des " +"services concernés." + +msgid "all" +msgstr "tous" + +msgid "default" +msgstr "par défaut" + +msgid "express" +msgstr "express" + +msgid "low" +msgstr "lent" + +msgid "normal" +msgstr "normal" + +msgid "priority" +msgstr "prioritaire" + +#~ msgid "Service" +#~ msgstr "Service" + +#~ msgid "qos_connbytes" +#~ msgstr "qos_connbytes" diff --git a/feeds/luci/applications/luci-app-qos/po/he/qos.po b/feeds/luci/applications/luci-app-qos/po/he/qos.po new file mode 100644 index 0000000..e2d42ef --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/he/qos.po @@ -0,0 +1,88 @@ +# Generated from applications/luci-qos/luasrc/model/cbi/qos/qos.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2010-03-25 22:10+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Calculate overhead" +msgstr "" + +msgid "Classification Rules" +msgstr "" + +msgid "Classification group" +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "" + +msgid "Download speed (kbit/s)" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Half-duplex" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Number of bytes" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "QoS" +msgstr "" + +msgid "Quality of Service" +msgstr "" + +msgid "Source host" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Upload speed (kbit/s)" +msgstr "" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" + +msgid "all" +msgstr "" + +msgid "default" +msgstr "" + +msgid "express" +msgstr "" + +msgid "low" +msgstr "" + +msgid "normal" +msgstr "" + +msgid "priority" +msgstr "" diff --git a/feeds/luci/applications/luci-app-qos/po/hu/qos.po b/feeds/luci/applications/luci-app-qos/po/hu/qos.po new file mode 100644 index 0000000..c77ac3c --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/hu/qos.po @@ -0,0 +1,111 @@ +# Generated from applications/luci-qos/luasrc/model/cbi/qos/qos.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2012-12-30 19:18+0200\n" +"Last-Translator: romboyco \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "Többletforgalom számítása" + +msgid "Classification Rules" +msgstr "Besorolási szabályok" + +msgid "Classification group" +msgstr "Besorolási csoport" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "Cél gép" + +msgid "Download speed (kbit/s)" +msgstr "Letöltési sebesség (kbit/s)" + +msgid "Enable" +msgstr "Engedélyezés" + +msgid "Half-duplex" +msgstr "Fél-duplex" + +msgid "Interfaces" +msgstr "Interfészek" + +msgid "Number of bytes" +msgstr "Bájtok száma" + +msgid "Ports" +msgstr "Portok" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Quality of Service" + +msgid "Source host" +msgstr "Forrás gép" + +msgid "Target" +msgstr "Cél" + +msgid "Upload speed (kbit/s)" +msgstr "Feltöltési sebesség (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"A QoS segítségével beállítható " +"cím, portok vagy szolgáltatások alapján kiválasztott hálózati forgalom " +"prioritása." + +msgid "all" +msgstr "összes" + +msgid "default" +msgstr "alapértelmezett" + +msgid "express" +msgstr "sürgős" + +msgid "low" +msgstr "alacsony" + +msgid "normal" +msgstr "normál" + +msgid "priority" +msgstr "prioritás" + +#~ msgid "Service" +#~ msgstr "Szolgáltatás" + +#~ msgid "Downlink" +#~ msgstr "Downlink" + +#~ msgid "Internet Connection" +#~ msgstr "Internet kapcsolat" + +#~ msgid "Uplink" +#~ msgstr "Uplink" + +#~ msgid "allf" +#~ msgstr "allf" + +#~ msgid "qos_connbytes" +#~ msgstr "qos_connbytes" diff --git a/feeds/luci/applications/luci-app-qos/po/it/qos.po b/feeds/luci/applications/luci-app-qos/po/it/qos.po new file mode 100644 index 0000000..686c745 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/it/qos.po @@ -0,0 +1,108 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2014-07-19 16:26+0200\n" +"Last-Translator: clagir \n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "Calcola l'overhead" + +msgid "Classification Rules" +msgstr "Regole di classificazione" + +msgid "Classification group" +msgstr "Gruppo di Priorità" + +msgid "Comment" +msgstr "Commento" + +msgid "Destination host" +msgstr "Host di destinazione" + +msgid "Download speed (kbit/s)" +msgstr "Velocità di download (kbit/s)" + +msgid "Enable" +msgstr "Abilita" + +msgid "Half-duplex" +msgstr "Half-duplex" + +msgid "Interfaces" +msgstr "Interfacce" + +msgid "Number of bytes" +msgstr "Numeri di bytes" + +msgid "Ports" +msgstr "Porte" + +msgid "Protocol" +msgstr "Protocollo" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Qualità del Servizio" + +msgid "Source host" +msgstr "Host sorgente" + +msgid "Target" +msgstr "Target" + +msgid "Upload speed (kbit/s)" +msgstr "Velocità di upload (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Con QoS puoi dare priorità al " +"traffico di rete in base ad un ip, una porta o dei servizi." + +msgid "all" +msgstr "tutti" + +msgid "default" +msgstr "default" + +msgid "express" +msgstr "express" + +msgid "low" +msgstr "basso" + +msgid "normal" +msgstr "normale" + +msgid "priority" +msgstr "priorità" + +#~ msgid "Service" +#~ msgstr "Servizi" + +#~ msgid "Downlink" +#~ msgstr "Collegamento discendente" + +#~ msgid "Internet Connection" +#~ msgstr "Connessione Internet" + +#~ msgid "Uplink" +#~ msgstr "Collegamento ascendente" + +#~ msgid "allf" +#~ msgstr "allf" + +#~ msgid "qos_connbytes" +#~ msgstr "qos_connbytes" diff --git a/feeds/luci/applications/luci-app-qos/po/ja/qos.po b/feeds/luci/applications/luci-app-qos/po/ja/qos.po new file mode 100644 index 0000000..a81a6e1 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/ja/qos.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2016-12-22 01:54+0900\n" +"Last-Translator: INAGAKI Hiroshi \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" + +msgid "Calculate overhead" +msgstr "オーバーヘッドを考慮する" + +msgid "Classification Rules" +msgstr "区分ルール" + +msgid "Classification group" +msgstr "区分グループ" + +msgid "Comment" +msgstr "コメント" + +msgid "Destination host" +msgstr "宛先ホスト" + +msgid "Download speed (kbit/s)" +msgstr "ダウンロード速度 (kbit/s)" + +msgid "Enable" +msgstr "有効" + +msgid "Half-duplex" +msgstr "半二重" + +msgid "Interfaces" +msgstr "インターフェース" + +msgid "Number of bytes" +msgstr "バイト数" + +msgid "Ports" +msgstr "ポート" + +msgid "Protocol" +msgstr "プロトコル" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Quality of Service" + +msgid "Source host" +msgstr "送信元ホスト" + +msgid "Target" +msgstr "対象" + +msgid "Upload speed (kbit/s)" +msgstr "アップロード速度 (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"QoSはアドレス、ポート、サービスで区" +"別して、ネットワークトラフィックに優先度を付与することが可能です。" + +msgid "all" +msgstr "全て" + +msgid "default" +msgstr "標準" + +msgid "express" +msgstr "高速" + +msgid "low" +msgstr "低速" + +msgid "normal" +msgstr "標準" + +msgid "priority" +msgstr "最優先" + +#~ msgid "Service" +#~ msgstr "サービス" diff --git a/feeds/luci/applications/luci-app-qos/po/ms/qos.po b/feeds/luci/applications/luci-app-qos/po/ms/qos.po new file mode 100644 index 0000000..f8d4ab3 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/ms/qos.po @@ -0,0 +1,87 @@ +# Generated from applications/luci-qos/luasrc/model/cbi/qos/qos.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2010-03-25 22:10+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Calculate overhead" +msgstr "" + +msgid "Classification Rules" +msgstr "" + +msgid "Classification group" +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "" + +msgid "Download speed (kbit/s)" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Half-duplex" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Number of bytes" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "QoS" +msgstr "" + +msgid "Quality of Service" +msgstr "" + +msgid "Source host" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Upload speed (kbit/s)" +msgstr "" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" + +msgid "all" +msgstr "" + +msgid "default" +msgstr "" + +msgid "express" +msgstr "" + +msgid "low" +msgstr "" + +msgid "normal" +msgstr "" + +msgid "priority" +msgstr "" diff --git a/feeds/luci/applications/luci-app-qos/po/no/qos.po b/feeds/luci/applications/luci-app-qos/po/no/qos.po new file mode 100644 index 0000000..6b390a1 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/no/qos.po @@ -0,0 +1,106 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2013-03-21 23:04+0200\n" +"Last-Translator: protx \n" +"Language: no\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "Beregn overhead" + +msgid "Classification Rules" +msgstr "Klassifisering Regler" + +msgid "Classification group" +msgstr "Klassifisering gruppe" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "Destinasjon vert" + +msgid "Download speed (kbit/s)" +msgstr "Nedlasting hastighet (kbit/s)" + +msgid "Enable" +msgstr "Aktiver" + +msgid "Half-duplex" +msgstr "Halv dupleks" + +msgid "Interfaces" +msgstr "Grensesnitt" + +msgid "Number of bytes" +msgstr "Antall bytes" + +msgid "Ports" +msgstr "Porter" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Quality of Service" + +msgid "Source host" +msgstr "Kilde vert" + +msgid "Target" +msgstr "Mål" + +msgid "Upload speed (kbit/s)" +msgstr "Opplasting hastighet (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Med QoS kan du prioritere " +"nettverkstrafikk valgt av adresser, porter eller tjenester." + +msgid "all" +msgstr "alle" + +msgid "default" +msgstr "standard" + +msgid "express" +msgstr "ekspress" + +msgid "low" +msgstr "lav" + +msgid "normal" +msgstr "normal" + +msgid "priority" +msgstr "prioritet" + +#~ msgid "Service" +#~ msgstr "Service" + +#~ msgid "Downlink" +#~ msgstr "Nedlinje" + +#~ msgid "Internet Connection" +#~ msgstr "Internett Tilkobling" + +#~ msgid "Uplink" +#~ msgstr "Opplinje" + +#~ msgid "allf" +#~ msgstr "alle" + +#~ msgid "qos_connbytes" +#~ msgstr "Bytes sendt" + +#~ msgid "Half-Duplex" +#~ msgstr "Halvdupleks" diff --git a/feeds/luci/applications/luci-app-qos/po/pl/qos.po b/feeds/luci/applications/luci-app-qos/po/pl/qos.po new file mode 100644 index 0000000..3c6a28c --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/pl/qos.po @@ -0,0 +1,111 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2012-08-31 18:14+0200\n" +"Last-Translator: obsy \n" +"Language-Team: LANGUAGE \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "Oblicz narzut" + +msgid "Classification Rules" +msgstr "Reguły klasyfikacji" + +msgid "Classification group" +msgstr "Grupa klasyfikacji" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "Host docelowy" + +msgid "Download speed (kbit/s)" +msgstr "Prędkość pobierania (kbit/s)" + +msgid "Enable" +msgstr "Włącz" + +msgid "Half-duplex" +msgstr "Półdupleks" + +msgid "Interfaces" +msgstr "Interfejsy" + +msgid "Number of bytes" +msgstr "Ilość bajtów" + +msgid "Ports" +msgstr "Porty" + +msgid "Protocol" +msgstr "Protokół" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Jakość usługi (ang. Quality of Service)" + +msgid "Source host" +msgstr "Host źródłowy" + +msgid "Target" +msgstr "Cel" + +msgid "Upload speed (kbit/s)" +msgstr "Prędkość wysyłania (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Z QoS można ustalać priorytet " +"ruchu sieciowego na podstawie adresów, portów lub usług." + +msgid "all" +msgstr "wszystko" + +msgid "default" +msgstr "domyślna" + +msgid "express" +msgstr "ekspresowy" + +msgid "low" +msgstr "niski" + +msgid "normal" +msgstr "normalny" + +msgid "priority" +msgstr "priorytetowy" + +#~ msgid "Service" +#~ msgstr "Usługa" + +#~ msgid "Downlink" +#~ msgstr "Ruch przychodzący" + +#~ msgid "Internet Connection" +#~ msgstr "Połączenie Internetowe" + +#~ msgid "Uplink" +#~ msgstr "Ruch wychodzący" + +# Jeśli w ogóle jest to gdzieś używane, to i w angielskiej wersji jest błąd. W takiej sytuacji należy udawać idiotę. +#~ msgid "allf" +#~ msgstr "allf" + +# Patrz - allf. +#~ msgid "qos_connbytes" +#~ msgstr "qos_connbytes" diff --git a/feeds/luci/applications/luci-app-qos/po/pt-br/qos.po b/feeds/luci/applications/luci-app-qos/po/pt-br/qos.po new file mode 100644 index 0000000..43cd6e2 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/pt-br/qos.po @@ -0,0 +1,127 @@ +# qos.po +# generated from ./applications/luci-qos/luasrc/i18n/qos.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2014-06-21 19:00+0200\n" +"Last-Translator: Éder \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "Calcular overhead" + +msgid "Classification Rules" +msgstr "Classificação" + +msgid "Classification group" +msgstr "Classificação" + +# 20140621: edersg: tradução +msgid "Comment" +msgstr "Comentário" + +msgid "Destination host" +msgstr "Endereço de destino" + +msgid "Download speed (kbit/s)" +msgstr "Velocidade de recebimento (kbit/s)" + +msgid "Enable" +msgstr "Habilitado" + +msgid "Half-duplex" +msgstr "Half-duplex" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Number of bytes" +msgstr "Número de bytes" + +msgid "Ports" +msgstr "Portas" + +msgid "Protocol" +msgstr "Prococolo" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Qualidade de Serviço" + +msgid "Source host" +msgstr "Endereço de origem" + +msgid "Target" +msgstr "Alvo" + +msgid "Upload speed (kbit/s)" +msgstr "Velocidade de envio (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Com QoS, " +"você pode priorizar o tráfego da rede selecionada por endereços, portas ou " +"serviços." + +msgid "all" +msgstr "todos" + +msgid "default" +msgstr "padrão" + +msgid "express" +msgstr "expressa" + +msgid "low" +msgstr "baixa" + +msgid "normal" +msgstr "normal" + +msgid "priority" +msgstr "prioritário" + +#~ msgid "Service" +#~ msgstr "Serviço" + +#~ msgid "Downlink" +#~ msgstr "Link para download" + +#~ msgid "Internet Connection" +#~ msgstr "Conexão com a Internet" + +#~ msgid "Uplink" +#~ msgstr "Link para upload" + +#~ msgid "allf" +#~ msgstr "allf" + +#~ msgid "qos_connbytes" +#~ msgstr "qos_connbytes" + +#~ msgid "Prioritization" +#~ msgstr "Priorização" + +#~ msgid "source network / source host" +#~ msgstr "rede de origem / host de origem" + +#~ msgid "target network / target host" +#~ msgstr "rede de destino / host de destino" + +#~ msgid "portrange" +#~ msgstr "faixa de portas" + +#~ msgid "Bytes sent" +#~ msgstr "Bytes enviados" diff --git a/feeds/luci/applications/luci-app-qos/po/pt/qos.po b/feeds/luci/applications/luci-app-qos/po/pt/qos.po new file mode 100644 index 0000000..449ddce --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/pt/qos.po @@ -0,0 +1,122 @@ +# qos.po +# generated from ./applications/luci-qos/luasrc/i18n/qos.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2013-05-31 23:49+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "Calcular Overhead" + +msgid "Classification Rules" +msgstr "Regras de Classificação" + +msgid "Classification group" +msgstr "Grupo de Classificação" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "Host de destino" + +msgid "Download speed (kbit/s)" +msgstr "Velocidade de Download (kbit/s)" + +msgid "Enable" +msgstr "Ativar" + +msgid "Half-duplex" +msgstr "Half-duplex" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Number of bytes" +msgstr "Número de bytes" + +msgid "Ports" +msgstr "Portas" + +msgid "Protocol" +msgstr "Protocolo" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Qualidade de Serviço" + +msgid "Source host" +msgstr "Host de origem" + +msgid "Target" +msgstr "Host de destino" + +msgid "Upload speed (kbit/s)" +msgstr "Velocidade de Upload (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Com o QoS pode dar prioridade ao " +"tráfego na rede por endereço, portas ou serviço." + +msgid "all" +msgstr "todos" + +msgid "default" +msgstr "Por defeito" + +msgid "express" +msgstr "expressa" + +msgid "low" +msgstr "baixa" + +msgid "normal" +msgstr "normal" + +msgid "priority" +msgstr "prioridade" + +#~ msgid "Service" +#~ msgstr "Serviço" + +#~ msgid "Downlink" +#~ msgstr "Link para download" + +#~ msgid "Internet Connection" +#~ msgstr "Ligação à Internet" + +#~ msgid "Uplink" +#~ msgstr "Link para upload" + +#~ msgid "qos_connbytes" +#~ msgstr "qos_connbytes" + +#~ msgid "Prioritization" +#~ msgstr "Priorização" + +#~ msgid "source network / source host" +#~ msgstr "rede de origem / host de origem" + +#~ msgid "target network / target host" +#~ msgstr "rede de destino / host de destino" + +#~ msgid "portrange" +#~ msgstr "faixa de portas" + +#~ msgid "Bytes sent" +#~ msgstr "Bytes enviados" diff --git a/feeds/luci/applications/luci-app-qos/po/ro/qos.po b/feeds/luci/applications/luci-app-qos/po/ro/qos.po new file mode 100644 index 0000000..9c88f7c --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/ro/qos.po @@ -0,0 +1,97 @@ +# Generated from applications/luci-qos/luasrc/model/cbi/qos/qos.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2013-09-25 19:25+0200\n" +"Last-Translator: Mihai \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "" + +msgid "Classification Rules" +msgstr "" + +msgid "Classification group" +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "" + +msgid "Download speed (kbit/s)" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Half-duplex" +msgstr "" + +msgid "Interfaces" +msgstr "Interfete" + +msgid "Number of bytes" +msgstr "Numarul de bytes" + +msgid "Ports" +msgstr "Porturi" + +msgid "Protocol" +msgstr "Protocol" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Quality of Service" + +msgid "Source host" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Upload speed (kbit/s)" +msgstr "" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" + +msgid "all" +msgstr "toate" + +msgid "default" +msgstr "" + +msgid "express" +msgstr "expres" + +msgid "low" +msgstr "scazuta" + +msgid "normal" +msgstr "normala" + +msgid "priority" +msgstr "ridicata" + +#~ msgid "Service" +#~ msgstr "Serviciu" + +#~ msgid "Internet Connection" +#~ msgstr "Conexiune internet" diff --git a/feeds/luci/applications/luci-app-qos/po/ru/qos.po b/feeds/luci/applications/luci-app-qos/po/ru/qos.po new file mode 100644 index 0000000..811cbf1 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/ru/qos.po @@ -0,0 +1,104 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: qos\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2012-08-15 12:02+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Calculate overhead" +msgstr "Подсчитывать накладные расходы" + +msgid "Classification Rules" +msgstr "Правила классификации" + +msgid "Classification group" +msgstr "Классификация" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "Хост назначения" + +msgid "Download speed (kbit/s)" +msgstr "Скорость загрузки (кбит/с)" + +msgid "Enable" +msgstr "Включить" + +msgid "Half-duplex" +msgstr "Полудуплекс" + +msgid "Interfaces" +msgstr "Интерфейсы" + +msgid "Number of bytes" +msgstr "Количество байт" + +msgid "Ports" +msgstr "Порты" + +msgid "Protocol" +msgstr "Протокол" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Качество обслуживания (QoS)" + +msgid "Source host" +msgstr "Хост источника" + +msgid "Target" +msgstr "Цель" + +msgid "Upload speed (kbit/s)" +msgstr "Скорость отдачи (кбит/с)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Используя QoS, вы можете " +"приоритезаровать сетевой трафик по адресам, портам и сервисам." + +msgid "all" +msgstr "все" + +msgid "default" +msgstr "по умолчанию" + +msgid "express" +msgstr "экспресс" + +msgid "low" +msgstr "низкий" + +msgid "normal" +msgstr "обычный" + +msgid "priority" +msgstr "приоритетный" + +#~ msgid "Service" +#~ msgstr "Служба" + +#~ msgid "Downlink" +#~ msgstr "Нисходящий канал" + +#~ msgid "Internet Connection" +#~ msgstr "Интернет-соединение" + +#~ msgid "Uplink" +#~ msgstr "Восходящий канал" diff --git a/feeds/luci/applications/luci-app-qos/po/sk/qos.po b/feeds/luci/applications/luci-app-qos/po/sk/qos.po new file mode 100644 index 0000000..b4d10ab --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/sk/qos.po @@ -0,0 +1,83 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Calculate overhead" +msgstr "" + +msgid "Classification Rules" +msgstr "" + +msgid "Classification group" +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "" + +msgid "Download speed (kbit/s)" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Half-duplex" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Number of bytes" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "QoS" +msgstr "" + +msgid "Quality of Service" +msgstr "" + +msgid "Source host" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Upload speed (kbit/s)" +msgstr "" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" + +msgid "all" +msgstr "" + +msgid "default" +msgstr "" + +msgid "express" +msgstr "" + +msgid "low" +msgstr "" + +msgid "normal" +msgstr "" + +msgid "priority" +msgstr "" diff --git a/feeds/luci/applications/luci-app-qos/po/sv/qos.po b/feeds/luci/applications/luci-app-qos/po/sv/qos.po new file mode 100644 index 0000000..323b75a --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/sv/qos.po @@ -0,0 +1,86 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Calculate overhead" +msgstr "" + +msgid "Classification Rules" +msgstr "Klassificeringsregler" + +msgid "Classification group" +msgstr "Klassificeringsgrupp" + +msgid "Comment" +msgstr "Kommentera" + +msgid "Destination host" +msgstr "Värd för destination" + +msgid "Download speed (kbit/s)" +msgstr "Nerladdningshastighet (kbit/s)" + +msgid "Enable" +msgstr "Aktivera" + +msgid "Half-duplex" +msgstr "Halv-duplex" + +msgid "Interfaces" +msgstr "Gränssnitt" + +msgid "Number of bytes" +msgstr "Antalet bytes" + +msgid "Ports" +msgstr "Portar" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "" + +msgid "Source host" +msgstr "" + +msgid "Target" +msgstr "Mål" + +msgid "Upload speed (kbit/s)" +msgstr "Uppladdningshastighet (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Med QoS så kan du prioritera " +"nätverkstrafiken som valts av adresser, portar eller tjänster." + +msgid "all" +msgstr "alla" + +msgid "default" +msgstr "standard" + +msgid "express" +msgstr "express" + +msgid "low" +msgstr "låg" + +msgid "normal" +msgstr "normal" + +msgid "priority" +msgstr "prioritet" diff --git a/feeds/luci/applications/luci-app-qos/po/templates/qos.pot b/feeds/luci/applications/luci-app-qos/po/templates/qos.pot new file mode 100644 index 0000000..48333e4 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/templates/qos.pot @@ -0,0 +1,76 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Calculate overhead" +msgstr "" + +msgid "Classification Rules" +msgstr "" + +msgid "Classification group" +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "" + +msgid "Download speed (kbit/s)" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Half-duplex" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Number of bytes" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "QoS" +msgstr "" + +msgid "Quality of Service" +msgstr "" + +msgid "Source host" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Upload speed (kbit/s)" +msgstr "" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" + +msgid "all" +msgstr "" + +msgid "default" +msgstr "" + +msgid "express" +msgstr "" + +msgid "low" +msgstr "" + +msgid "normal" +msgstr "" + +msgid "priority" +msgstr "" diff --git a/feeds/luci/applications/luci-app-qos/po/tr/qos.po b/feeds/luci/applications/luci-app-qos/po/tr/qos.po new file mode 100644 index 0000000..d2f3611 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/tr/qos.po @@ -0,0 +1,88 @@ +# Generated from applications/luci-qos/luasrc/model/cbi/qos/qos.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2010-03-25 22:10+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Calculate overhead" +msgstr "" + +msgid "Classification Rules" +msgstr "" + +msgid "Classification group" +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "" + +msgid "Download speed (kbit/s)" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Half-duplex" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Number of bytes" +msgstr "" + +msgid "Ports" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "QoS" +msgstr "" + +msgid "Quality of Service" +msgstr "" + +msgid "Source host" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Upload speed (kbit/s)" +msgstr "" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" + +msgid "all" +msgstr "" + +msgid "default" +msgstr "" + +msgid "express" +msgstr "" + +msgid "low" +msgstr "" + +msgid "normal" +msgstr "" + +msgid "priority" +msgstr "" diff --git a/feeds/luci/applications/luci-app-qos/po/uk/qos.po b/feeds/luci/applications/luci-app-qos/po/uk/qos.po new file mode 100644 index 0000000..5ec9f37 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/uk/qos.po @@ -0,0 +1,110 @@ +# Generated from applications/luci-qos/luasrc/model/cbi/qos/qos.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2013-08-13 15:27+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "Розраховувати додаткові витрати" + +msgid "Classification Rules" +msgstr "Правила класифікації" + +msgid "Classification group" +msgstr "Класифікаційна група" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "Вузол призначення" + +msgid "Download speed (kbit/s)" +msgstr "Швидкість завантаження (Кбіт/с)" + +msgid "Enable" +msgstr "Увімкнути" + +msgid "Half-duplex" +msgstr "Напівдуплекс" + +msgid "Interfaces" +msgstr "Інтерфейси" + +msgid "Number of bytes" +msgstr "Кількість байт" + +msgid "Ports" +msgstr "Порти" + +msgid "Protocol" +msgstr "Протокол" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "Якість обслуговування (QoS)" + +msgid "Source host" +msgstr "Вихідний вузол" + +msgid "Target" +msgstr "Мета" + +msgid "Upload speed (kbit/s)" +msgstr "Швидкість відвантаження (Кбіт/с)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Використовуючи фунцію QoS можна визначити пріоритети мережевого трафіку " +"для певних адрес, портів або сервісів." + +msgid "all" +msgstr "усі" + +msgid "default" +msgstr "типова" + +msgid "express" +msgstr "експрес" + +msgid "low" +msgstr "низький" + +msgid "normal" +msgstr "звичайний" + +msgid "priority" +msgstr "пріоритетний" + +#~ msgid "Service" +#~ msgstr "Сервіс" + +#~ msgid "Downlink" +#~ msgstr "Низхідний канал" + +#~ msgid "Internet Connection" +#~ msgstr "З'єднання з інтернетом" + +#~ msgid "Uplink" +#~ msgstr "Висхідний канал" + +#, fuzzy +#~ msgid "allf" +#~ msgstr "додаткова функція" diff --git a/feeds/luci/applications/luci-app-qos/po/vi/qos.po b/feeds/luci/applications/luci-app-qos/po/vi/qos.po new file mode 100644 index 0000000..32e7ed1 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/vi/qos.po @@ -0,0 +1,119 @@ +# qos.pot +# generated from ./applications/luci-qos/luasrc/i18n/qos.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2009-08-13 03:56+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#, fuzzy +msgid "Calculate overhead" +msgstr "Tính toán tổng quát" + +#, fuzzy +msgid "Classification Rules" +msgstr "Phân loại" + +#, fuzzy +msgid "Classification group" +msgstr "Phân loại" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "" + +msgid "Download speed (kbit/s)" +msgstr "" + +msgid "Enable" +msgstr "" + +#, fuzzy +msgid "Half-duplex" +msgstr "Half-Duplex" + +msgid "Interfaces" +msgstr "" + +msgid "Number of bytes" +msgstr "" + +#, fuzzy +msgid "Ports" +msgstr "Ưu tiên" + +msgid "Protocol" +msgstr "" + +msgid "QoS" +msgstr "" + +msgid "Quality of Service" +msgstr "Chất lượng dịch vụ " + +#, fuzzy +msgid "Source host" +msgstr "Địa chỉ nguồn" + +#, fuzzy +msgid "Target" +msgstr "Địa chỉ mục tiêu" + +msgid "Upload speed (kbit/s)" +msgstr "" + +#, fuzzy +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"Với QoS, bạn có thể ưu tiên cho mạng lưới giao thông được chọn bởi địa chỉ, " +"cổng hay dịch vụ." + +msgid "all" +msgstr "" + +msgid "default" +msgstr "" + +msgid "express" +msgstr "cấp tốc" + +msgid "low" +msgstr "thấp" + +msgid "normal" +msgstr "bình thường" + +msgid "priority" +msgstr "ưu tiên" + +#~ msgid "Downlink" +#~ msgstr "Downlink" + +#~ msgid "Uplink" +#~ msgstr "Uplink" + +#~ msgid "Prioritization" +#~ msgstr "Quá trình ưu tiên" + +#~ msgid "source network / source host" +#~ msgstr "nguồn mạng/ nguồn host" + +#~ msgid "target network / target host" +#~ msgstr "Mục tiêu mạng/ mục tiêu host" + +#~ msgid "portrange" +#~ msgstr "portrange" + +#~ msgid "Bytes sent" +#~ msgstr "Bytes đã gửi" diff --git a/feeds/luci/applications/luci-app-qos/po/zh-cn/qos.po b/feeds/luci/applications/luci-app-qos/po/zh-cn/qos.po new file mode 100644 index 0000000..0a5cd62 --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/zh-cn/qos.po @@ -0,0 +1,106 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCi Chinese Translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-25 22:10+0100\n" +"PO-Revision-Date: 2014-06-22 14:33+0200\n" +"Last-Translator: phantasm131 \n" +"Language-Team: QQ Group 75543259\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "计算开销" + +msgid "Classification Rules" +msgstr "分类规则" + +msgid "Classification group" +msgstr "分类组" + +msgid "Comment" +msgstr "注解" + +msgid "Destination host" +msgstr "目的主机" + +msgid "Download speed (kbit/s)" +msgstr "下载速度 (kbit/s)" + +msgid "Enable" +msgstr "开启" + +msgid "Half-duplex" +msgstr "半双工" + +msgid "Interfaces" +msgstr "接口" + +msgid "Number of bytes" +msgstr "字节数" + +msgid "Ports" +msgstr "端口" + +msgid "Protocol" +msgstr "协议" + +msgid "QoS" +msgstr "QoS" + +msgid "Quality of Service" +msgstr "QOS服务" + +msgid "Source host" +msgstr "源主机" + +msgid "Target" +msgstr "目标" + +msgid "Upload speed (kbit/s)" +msgstr "上传速度 (kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "根据网络地址、端口或服务,给流量数据包排序。" + +msgid "all" +msgstr "全部" + +msgid "default" +msgstr "默认" + +msgid "express" +msgstr "高" + +msgid "low" +msgstr "低" + +msgid "normal" +msgstr "普通" + +msgid "priority" +msgstr "最高" + +#~ msgid "Service" +#~ msgstr "服务" + +#~ msgid "Downlink" +#~ msgstr "下行" + +#~ msgid "Internet Connection" +#~ msgstr "Internet连接" + +#~ msgid "Uplink" +#~ msgstr "上行" + +#~ msgid "allf" +#~ msgstr "全部" + +#~ msgid "qos_connbytes" +#~ msgstr "Qos连接字节数" diff --git a/feeds/luci/applications/luci-app-qos/po/zh-tw/qos.po b/feeds/luci/applications/luci-app-qos/po/zh-tw/qos.po new file mode 100644 index 0000000..a011e9c --- /dev/null +++ b/feeds/luci/applications/luci-app-qos/po/zh-tw/qos.po @@ -0,0 +1,106 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-21 10:36+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Calculate overhead" +msgstr "流量計算" + +msgid "Classification Rules" +msgstr "分類規則" + +msgid "Classification group" +msgstr "分組" + +msgid "Comment" +msgstr "" + +msgid "Destination host" +msgstr "目的主機" + +msgid "Download speed (kbit/s)" +msgstr "下載速度(kbit/s)" + +msgid "Enable" +msgstr "啓用" + +msgid "Half-duplex" +msgstr "半雙工" + +msgid "Interfaces" +msgstr "界面" + +msgid "Number of bytes" +msgstr "位元數" + +msgid "Ports" +msgstr "埠號" + +msgid "Protocol" +msgstr "協定" + +msgid "QoS" +msgstr "先進先出頻寬管理" + +msgid "Quality of Service" +msgstr "連線品質服務" + +msgid "Source host" +msgstr "來源主機" + +msgid "Target" +msgstr "目的地" + +msgid "Upload speed (kbit/s)" +msgstr "上傳速度(kbit/s)" + +msgid "" +"With QoS you can prioritize " +"network traffic selected by addresses, ports or services." +msgstr "" +"有了 QoS 你可以用位址、埠號或者服務" +"來排優先權." + +msgid "all" +msgstr "通用優先權" + +msgid "default" +msgstr "預設值" + +msgid "express" +msgstr "高優先權" + +msgid "low" +msgstr "低優先權" + +msgid "normal" +msgstr "一般優先權" + +msgid "priority" +msgstr "優先權" + +#~ msgid "Service" +#~ msgstr "服務" + +#~ msgid "Downlink" +#~ msgstr "下載" + +#~ msgid "Internet Connection" +#~ msgstr "網際網路連線" + +#~ msgid "Uplink" +#~ msgstr "上傳" + +#~ msgid "allf" +#~ msgstr "獨一無二" + +#~ msgid "qos_connbytes" +#~ msgstr "QoS連線位元數" diff --git a/feeds/luci/applications/luci-app-radicale/Makefile b/feeds/luci/applications/luci-app-radicale/Makefile new file mode 100644 index 0000000..2b969ac --- /dev/null +++ b/feeds/luci/applications/luci-app-radicale/Makefile @@ -0,0 +1,41 @@ +# +# Copyright (C) 2008-2016 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-radicale + +# Version == major.minor.patch +# increase "minor" on new functionality and "patch" on patches/optimization +PKG_VERSION:=1.1.0 + +# Release == build +# increase on changes of translation files +PKG_RELEASE:=1 + +PKG_LICENSE:=Apache-2.0 +PKG_MAINTAINER:=Christian Schoenebeck + +# LuCI specific settings +LUCI_TITLE:=LuCI Support for Radicale CardDAV/CalDAV +LUCI_DEPENDS:=+luci-mod-admin-full +LUCI_PKGARCH:=all + +define Package/$(PKG_NAME)/config +# shown in make menuconfig +help + $(LUCI_TITLE) + . + !!! Package "radicale-py2" or "radicale-py3" needs to be !!! + !!! installed sepearatly. There is no buildin dependency set !!! + . + Version: $(PKG_VERSION)-$(PKG_RELEASE) + $(PKG_MAINTAINER) +endef + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-radicale/luasrc/controller/radicale.lua b/feeds/luci/applications/luci-app-radicale/luasrc/controller/radicale.lua new file mode 100644 index 0000000..0be433a --- /dev/null +++ b/feeds/luci/applications/luci-app-radicale/luasrc/controller/radicale.lua @@ -0,0 +1,239 @@ +-- Copyright 2014-2016 Christian Schoenebeck +-- Licensed under the Apache License, Version 2.0 + +module("luci.controller.radicale", package.seeall) + +local NX = require("nixio") +local NXFS = require("nixio.fs") +local DISP = require("luci.dispatcher") +local HTTP = require("luci.http") +local I18N = require("luci.i18n") -- not globally avalible here +local IPKG = require("luci.model.ipkg") +local UTIL = require("luci.util") +local SYS = require("luci.sys") + +local srv_name = "radicale" +local srv_ver_min = "1.1" -- minimum version of service required +local srv_ver_cmd = [[/usr/bin/radicale --version]] +local app_name = "luci-app-radicale" +local app_title = I18N.translate("Radicale CalDAV/CardDAV Server") +local app_version = "1.1.0-1" + +function index() + entry( {"admin", "services", "radicale"}, alias("admin", "services", "radicale", "edit"), _("CalDAV/CardDAV"), 58) + entry( {"admin", "services", "radicale", "edit"}, cbi("radicale") ).leaf = true + entry( {"admin", "services", "radicale", "logview"}, call("_logread") ).leaf = true + entry( {"admin", "services", "radicale", "startstop"}, post("_startstop") ).leaf = true + entry( {"admin", "services", "radicale", "status"}, call("_status") ).leaf = true +end + +-- Application / Service specific information functions +function app_description() + return I18N.translate("The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) server solution.") .. [[
]] + .. I18N.translate("Calendars and address books are available for both local and remote access, possibly limited through authentication policies.") .. [[
]] + .. I18N.translate("They can be viewed and edited by calendar and contact clients on mobile phones or computers.") +end +function app_title_main() + return [[]] + .. I18N.translate(app_title) + .. [[]] +end +function app_title_back() + return [[]] + .. I18N.translate(app_title) + .. [[]] +end +function app_err_value() + if not service_version() then + return [[


    ]] + .. I18N.translate("Software package '%s' is not installed." % srv_name) + .. [[

      ]] + .. I18N.translate("required") .. [[: ]] .. srv_name .. [[ ]] .. srv_ver_min + .. [[

    ]] + .. [[]] + .. I18N.translate("Please install current version !") + .. [[
 

]] + else + return [[


    ]] + .. I18N.translate("Software package '%s' is outdated." % srv_name) + .. [[

      ]] + .. I18N.translate("installed") .. [[: ]] .. srv_name .. [[ ]] .. service_version() + .. [[
      ]] + .. I18N.translate("required") .. [[: ]] .. srv_name .. [[ ]] .. srv_ver_min + .. [[

    ]] + .. [[]] + .. I18N.translate("Please update to current version !") + .. [[
 

]] + end +end + +function service_version() + local ver = nil + IPKG.list_installed(srv_name, function(n, v, d) + if v and (#v > 0) then ver = v end + end + ) + if not ver or (#ver == 0) then + ver = UTIL.exec(srv_ver_cmd) + if #ver == 0 then ver = nil end + end + return ver +end +function service_ok() + return IPKG.compare_versions((service_version() or "0"), ">=", srv_ver_min) +end + +-- called by XHR.get from detail_logview.htm +function _logread() + -- read application settings + local uci = UCI.cursor() + local logfile = uci:get("radicale", "radicale", "logfile") or "/var/log/radicale" + uci:unload("radicale") + + local ldata=NXFS.readfile(logfile) + if not ldata or #ldata == 0 then + ldata="_nodata_" + end + HTTP.write(ldata) +end + +-- called by XHR.get from detail_startstop.htm +function _startstop() + local pid = get_pid() + if pid > 0 then + SYS.call("/etc/init.d/radicale stop") + NX.nanosleep(1) -- sleep a second + if NX.kill(pid, 0) then -- still running + NX.kill(pid, 9) -- send SIGKILL + end + pid = 0 + else + SYS.call("/etc/init.d/radicale start") + NX.nanosleep(1) -- sleep a second + pid = get_pid() + if pid > 0 and not NX.kill(pid, 0) then + pid = 0 -- process did not start + end + end + HTTP.write(tostring(pid)) -- HTTP needs string not number +end + +-- called by XHR.poll from detail_startstop.htm +function _status() + local pid = get_pid() + HTTP.write(tostring(pid)) -- HTTP needs string not number +end + +--return pid of running process +function get_pid() + return tonumber(SYS.exec([[ps | grep "[p]ython.*[r]adicale" 2>/dev/null | awk '{print $1}']])) or 0 +end + +-- replacement of build-in parse of "Value" +-- modified AbstractValue.parse(self, section, novld) from cbi.lua +-- validate is called if rmempty/optional true or false +-- before write check if forcewrite, value eq default, and more +function value_parse(self, section, novld) + local fvalue = self:formvalue(section) + local fexist = ( fvalue and (#fvalue > 0) ) -- not "nil" and "not empty" + local cvalue = self:cfgvalue(section) + local rm_opt = ( self.rmempty or self.optional ) + local eq_cfg -- flag: equal cfgvalue + + -- If favlue and cvalue are both tables and have the same content + -- make them identical + if type(fvalue) == "table" and type(cvalue) == "table" then + eq_cfg = (#fvalue == #cvalue) + if eq_cfg then + for i=1, #fvalue do + if cvalue[i] ~= fvalue[i] then + eq_cfg = false + end + end + end + if eq_cfg then + fvalue = cvalue + end + end + + -- removed parameter "section" from function call because used/accepted nowhere + -- also removed call to function "transfer" + local vvalue, errtxt = self:validate(fvalue) + + -- error handling; validate return "nil" + if not vvalue then + if novld then -- and "novld" set + return -- then exit without raising an error + end + + if fexist then -- and there is a formvalue + self:add_error(section, "invalid", errtxt) + return -- so data are invalid + elseif not rm_opt then -- and empty formvalue but NOT (rmempty or optional) set + self:add_error(section, "missing", errtxt) + return -- so data is missing + elseif errtxt then + self:add_error(section, "invalid", errtxt) + return + end +-- error ("\n option: " .. self.option .. +-- "\n fvalue: " .. tostring(fvalue) .. +-- "\n fexist: " .. tostring(fexist) .. +-- "\n cvalue: " .. tostring(cvalue) .. +-- "\n vvalue: " .. tostring(vvalue) .. +-- "\n vexist: " .. tostring(vexist) .. +-- "\n rm_opt: " .. tostring(rm_opt) .. +-- "\n eq_cfg: " .. tostring(eq_cfg) .. +-- "\n eq_def: " .. tostring(eq_def) .. +-- "\n novld : " .. tostring(novld) .. +-- "\n errtxt: " .. tostring(errtxt) ) + end + + -- lets continue with value returned from validate + eq_cfg = ( vvalue == cvalue ) -- update equal_config flag + local vexist = ( vvalue and (#vvalue > 0) ) and true or false -- not "nil" and "not empty" + local eq_def = ( vvalue == self.default ) -- equal_default flag + + -- (rmempty or optional) and (no data or equal_default) + if rm_opt and (not vexist or eq_def) then + if self:remove(section) then -- remove data from UCI + self.section.changed = true -- and push events + end + return + end + + -- not forcewrite and no changes, so nothing to write + if not self.forcewrite and eq_cfg then + return + end + + -- we should have a valid value here + assert (vvalue, "\n option: " .. self.option .. + "\n fvalue: " .. tostring(fvalue) .. + "\n fexist: " .. tostring(fexist) .. + "\n cvalue: " .. tostring(cvalue) .. + "\n vvalue: " .. tostring(vvalue) .. + "\n vexist: " .. tostring(vexist) .. + "\n rm_opt: " .. tostring(rm_opt) .. + "\n eq_cfg: " .. tostring(eq_cfg) .. + "\n eq_def: " .. tostring(eq_def) .. + "\n errtxt: " .. tostring(errtxt) ) + + -- write data to UCI; raise event only on changes + if self:write(section, vvalue) and not eq_cfg then + self.section.changed = true + end +end diff --git a/feeds/luci/applications/luci-app-radicale/luasrc/model/cbi/radicale.lua b/feeds/luci/applications/luci-app-radicale/luasrc/model/cbi/radicale.lua new file mode 100644 index 0000000..c610478 --- /dev/null +++ b/feeds/luci/applications/luci-app-radicale/luasrc/model/cbi/radicale.lua @@ -0,0 +1,748 @@ +-- Copyright 2015-2016 Christian Schoenebeck +-- Licensed under the Apache License, Version 2.0 + +local NXFS = require("nixio.fs") +local DISP = require("luci.dispatcher") +local DTYP = require("luci.cbi.datatypes") +local HTTP = require("luci.http") +local UTIL = require("luci.util") +local UCI = require("luci.model.uci") +local SYS = require("luci.sys") +local WADM = require("luci.tools.webadmin") +local CTRL = require("luci.controller.radicale") -- this application's controller and multiused functions + +-- ################################################################################################# +-- Error handling if not installed or wrong version -- ######################### +if not CTRL.service_ok() then + local f = SimpleForm("__sf") + f.title = CTRL.app_title_main() + f.description = CTRL.app_description() + f.embedded = true + f.submit = false + f.reset = false + + local s = f:section(SimpleSection) + s.title = [[]] .. [[]] + .. translate("Software update required") + .. [[]] .. [[]] + + local v = s:option(DummyValue, "_dv") + v.rawhtml = true + v.value = CTRL.app_err_value + + return f +end + +-- ################################################################################################# +-- Error handling if no config, create an empty one -- ######################### +if not NXFS.access("/etc/config/radicale") then + NXFS.writefile("/etc/config/radicale", "") +end + +-- ################################################################################################# +-- takeover arguments if any -- ################################################ +-- then show/edit selected file +if arg[1] then + local argument = arg[1] + local filename = "" + + -- SimpleForm ------------------------------------------------ + local ft = SimpleForm("_text") + ft.title = CTRL.app_title_back() + ft.description = CTRL.app_description() + ft.redirect = DISP.build_url("admin", "services", "radicale") .. "#cbi-radicale-" .. argument + if argument == "logger" then + ft.reset = false + ft.submit = translate("Reload") + local uci = UCI.cursor() + filename = uci:get("radicale", "logger", "file_path") or "/var/log/radicale" + uci:unload("radicale") + filename = filename .. "/radicale" + elseif argument == "auth" then + ft.submit = translate("Save") + filename = "/etc/radicale/users" + elseif argument == "rights" then + ft.submit = translate("Save") + filename = "/etc/radicale/rights" + else + error("Invalid argument given as section") + end + if argument ~= "logger" and not NXFS.access(filename) then + NXFS.writefile(filename, "") + end + + -- SimpleSection --------------------------------------------- + local fs = ft:section(SimpleSection) + if argument == "logger" then + fs.title = translate("Log-file Viewer") + fs.description = translate("Please press [Reload] button below to reread the file.") + elseif argument == "auth" then + fs.title = translate("Authentication") + fs.description = translate("Place here the 'user:password' pairs for your users which should have access to Radicale.") + .. [[
]] + .. translate("Keep in mind to use the correct hashing algorithm !") + .. [[]] + else -- rights + fs.title = translate("Rights") + fs.description = translate("Authentication login is matched against the 'user' key, " + .. "and collection's path is matched against the 'collection' key.") .. " " + .. translate("You can use Python's ConfigParser interpolation values %(login)s and %(path)s.") .. " " + .. translate("You can also get groups from the user regex in the collection with {0}, {1}, etc.") + .. [[
]] + .. translate("For example, for the 'user' key, '.+' means 'authenticated user'" .. " " + .. "and '.*' means 'anybody' (including anonymous users).") + .. [[
]] + .. translate("Section names are only used for naming the rule.") + .. [[
]] + .. translate("Leading or ending slashes are trimmed from collection's path.") + end + + -- TextValue ------------------------------------------------- + local tt = fs:option(TextValue, "_textvalue") + tt.rmempty = true + if argument == "logger" then + tt.readonly = true + tt.rows = 30 + function tt.write() + HTTP.redirect(DISP.build_url("admin", "services", "radicale", "edit", argument)) + end + else + tt.rows = 15 + function tt.write(self, section, value) + if not value then value = "" end + NXFS.writefile(filename, value:gsub("\r\n", "\n")) + return true --HTTP.redirect(DISP.build_url("admin", "services", "radicale", "edit") .. "#cbi-radicale-" .. argument) + end + end + + function tt.cfgvalue() + return NXFS.readfile(filename) or + string.format(translate("File '%s' not found !"), filename) + end + + return ft + +end + +-- cbi-map -- ################################################################## +local m = Map("radicale") +m.title = CTRL.app_title_main() +m.description = CTRL.app_description() +m.template = "radicale/tabmap_nsections" +m.tabbed = true +function m.commit_handler(self) + if self.changed then -- changes ? + os.execute("/etc/init.d/radicale reload &") -- reload configuration + end +end + +-- cbi-section "System" -- ##################################################### +local sys = m:section( NamedSection, "system", "system" ) +sys.title = translate("System") +sys.description = nil +function sys.cfgvalue(self, section) + if not self.map:get(section) then -- section might not exist + self.map:set(section, nil, self.sectiontype) + end + return self.map:get(section) +end + +-- start/stop button ----------------------------------------------------------- +local btn = sys:option(DummyValue, "_startstop") +btn.template = "radicale/btn_startstop" +btn.inputstyle = nil +btn.rmempty = true +btn.title = translate("Start / Stop") +btn.description = translate("Start/Stop Radicale server") +function btn.cfgvalue(self, section) + local pid = CTRL.get_pid(true) + if pid > 0 then + btn.inputtitle = "PID: " .. pid + btn.inputstyle = "reset" + btn.disabled = false + else + btn.inputtitle = translate("Start") + btn.inputstyle = "apply" + btn.disabled = false + end + return true +end + +-- enabled --------------------------------------------------------------------- +local ena = sys:option(Flag, "_enabled") +ena.title = translate("Auto-start") +ena.description = translate("Enable/Disable auto-start of Radicale on system start-up and interface events") +ena.orientation = "horizontal" -- put description under the checkbox +ena.rmempty = false -- force write() function +function ena.cfgvalue(self, section) + return (SYS.init.enabled("radicale")) and self.enabled or self.disabled +end +function ena.write(self, section, value) + if value == self.enabled then + return SYS.init.enable("radicale") + else + return SYS.init.disable("radicale") + end +end + +-- boot_delay ------------------------------------------------------------------ +local bd = sys:option(Value, "boot_delay") +bd.title = translate("Boot delay") +bd.description = translate("Delay (in seconds) during system boot before Radicale start") + .. [[
]] + .. translate("During delay ifup-events are not monitored !") +bd.default = "10" +function bd.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function bd.validate(self, value) + local val = tonumber(value) + if not val then + return nil, self.title .. ": " .. translate("Value is not a number") + elseif val < 0 or val > 300 then + return nil, self.title .. ": " .. translate("Value not between 0 and 300") + end + return value +end + + +-- cbi-section "Server" -- ##################################################### +local srv = m:section( NamedSection, "server", "setting" ) +srv.title = translate("Server") +srv.description = nil +function srv.cfgvalue(self, section) + if not self.map:get(section) then -- section might not exist + self.map:set(section, nil, self.sectiontype) + end + return self.map:get(section) +end + +-- hosts ----------------------------------------------------------------------- +local sh = srv:option( DynamicList, "hosts" ) +sh.title = translate("Address:Port") +sh.description = translate("'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on") + .. [[
]] + .. translate("Port numbers below 1024 (Privileged ports) are not supported") + .. [[]] +sh.placeholder = "0.0.0.0:5232" +sh.rmempty = true +function sh.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- realm ----------------------------------------------------------------------- +local alm = srv:option( Value, "realm" ) +alm.title = translate("Logon message") +alm.description = translate("Message displayed in the client when a password is needed.") +alm.default = "Radicale - Password Required" +function alm.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function alm.validate(self, value) + if value then + return value + else + return self.default + end +end + +-- ssl ------------------------------------------------------------------------- +local ssl = srv:option( Flag, "ssl" ) +ssl.title = translate("Enable HTTPS") +ssl.description = nil +function ssl.write(self, section, value) + if value == "0" then -- delete all if not https enabled + self.map:del(section, "protocol") -- protocol + self.map:del(section, "certificate") -- certificate + self.map:del(section, "key") -- private key + self.map:del(section, "ciphers") -- ciphers + return self.map:del(section, self.option) + else + return self.map:set(section, self.option, value) + end +end + +-- protocol -------------------------------------------------------------------- +local prt = srv:option( ListValue, "protocol" ) +prt.title = translate("SSL Protocol") +prt.description = translate("'AUTO' selects the highest protocol version that client and server support.") +prt.widget = "select" +prt.default = "PROTOCOL_SSLv23" +prt:depends ("ssl", "1") +prt:value ("PROTOCOL_SSLv23", translate("AUTO")) +prt:value ("PROTOCOL_SSLv2", "SSL v2") +prt:value ("PROTOCOL_SSLv3", "SSL v3") +prt:value ("PROTOCOL_TLSv1", "TLS v1") +prt:value ("PROTOCOL_TLSv1_1", "TLS v1.1") +prt:value ("PROTOCOL_TLSv1_2", "TLS v1.2") +function prt.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- certificate ----------------------------------------------------------------- +local crt = srv:option( Value, "certificate" ) +crt.title = translate("Certificate file") +crt.description = translate("Full path and file name of certificate") +crt.placeholder = "/etc/radicale/ssl/server.crt" +crt:depends ("ssl", "1") +function crt.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function crt.validate(self, value) + local _ssl = ssl:formvalue(srv.section) or "0" + if _ssl == "0" then + return "" -- ignore if not https enabled + end + if value then -- otherwise errors in datatype check + if DTYP.file(value) then + return value + else + return nil, self.title .. ": " .. translate("File not found !") + end + else + return nil, self.title .. ": " .. translate("Path/File required !") + end +end + +-- key ------------------------------------------------------------------------- +local key = srv:option( Value, "key" ) +key.title = translate("Private key file") +key.description = translate("Full path and file name of private key") +key.placeholder = "/etc/radicale/ssl/server.key" +key:depends ("ssl", "1") +function key.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function key.validate(self, value) + local _ssl = ssl:formvalue(srv.section) or "0" + if _ssl == "0" then + return "" -- ignore if not https enabled + end + if value then -- otherwise errors in datatype check + if DTYP.file(value) then + return value + else + return nil, self.title .. ": " .. translate("File not found !") + end + else + return nil, self.title .. ": " .. translate("Path/File required !") + end +end + +-- ciphers --------------------------------------------------------------------- +--local cip = srv:option( Value, "ciphers" ) +--cip.title = translate("Ciphers") +--cip.description = translate("OPTIONAL: See python's ssl module for available ciphers") +--cip.rmempty = true +--cip:depends ("ssl", "1") + +-- cbi-section "Authentication" -- ############################################# +local aut = m:section( NamedSection, "auth", "setting" ) +aut.title = translate("Authentication") +aut.description = translate("Authentication method to allow access to Radicale server.") +function aut.cfgvalue(self, section) + if not self.map:get(section) then -- section might not exist + self.map:set(section, nil, self.sectiontype) + end + return self.map:get(section) +end + +-- type ----------------------------------------------------------------------- +local aty = aut:option( ListValue, "type" ) +aty.title = translate("Authentication method") +aty.description = nil +aty.widget = "select" +aty.default = "None" +aty:value ("None", translate("None")) +aty:value ("htpasswd", translate("htpasswd file")) +--aty:value ("IMAP", "IMAP") -- The IMAP authentication module relies on the imaplib module. +--aty:value ("LDAP", "LDAP") -- The LDAP authentication module relies on the python-ldap module. +--aty:value ("PAM", "PAM") -- The PAM authentication module relies on the python-pam module. +--aty:value ("courier", "courier") +--aty:value ("HTTP", "HTTP") -- The HTTP authentication module relies on the requests module +--aty:value ("remote_user", "remote_user") +--aty:value ("custom", translate("custom")) +function aty.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function aty.write(self, section, value) + if value ~= "htpasswd" then + self.map:del(section, "htpasswd_encryption") + elseif value ~= "IMAP" then + self.map:del(section, "imap_hostname") + self.map:del(section, "imap_port") + self.map:del(section, "imap_ssl") + end + if value ~= self.default then + return self.map:set(section, self.option, value) + else + return self.map:del(section, self.option) + end +end + +-- htpasswd_encryption --------------------------------------------------------- +local hte = aut:option( ListValue, "htpasswd_encryption" ) +hte.title = translate("Encryption method") +hte.description = nil +hte.widget = "select" +hte.default = "crypt" +hte:depends ("type", "htpasswd") +hte:value ("crypt", translate("crypt")) +hte:value ("plain", translate("plain")) +hte:value ("sha1", translate("SHA-1")) +hte:value ("ssha", translate("salted SHA-1")) +function hte.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- htpasswd_file (dummy) ------------------------------------------------------- +local htf = aut:option( Value, "_htf" ) +htf.title = translate("htpasswd file") +htf.description = [[]] + .. translate("Read only!") + .. [[ ]] + .. translate("Radicale uses '/etc/radicale/users' as htpasswd file.") + .. [[
]] + .. translate("To edit the file follow this link!") + .. [[]] +htf.readonly = true +htf:depends ("type", "htpasswd") +function htf.cfgvalue() + return "/etc/radicale/users" +end + +-- cbi-section "Rights" -- ##################################################### +local rig = m:section( NamedSection, "rights", "setting" ) +rig.title = translate("Rights") +rig.description = translate("Control the access to data collections.") +function rig.cfgvalue(self, section) + if not self.map:get(section) then -- section might not exist + self.map:set(section, nil, self.sectiontype) + end + return self.map:get(section) +end + +-- type ----------------------------------------------------------------------- +local rty = rig:option( ListValue, "type" ) +rty.title = translate("Rights backend") +rty.description = nil +rty.widget = "select" +rty.default = "None" +rty:value ("None", translate("Full access for everybody (including anonymous)")) +rty:value ("authenticated", translate("Full access for authenticated Users") ) +rty:value ("owner_only", translate("Full access for Owner only") ) +rty:value ("owner_write", translate("Owner allow write, authenticated users allow read") ) +rty:value ("from_file", translate("Rights are based on a regexp-based file") ) +--rty:value ("custom", "Custom handler") +function rty.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function rty.write(self, section, value) + if value ~= "custom" then + self.map:del(section, "custom_handler") + end + if value ~= self.default then + return self.map:set(section, self.option, value) + else + return self.map:del(section, self.option) + end +end + +-- from_file (dummy) ----------------------------------------------------------- +local rtf = rig:option( Value, "_rtf" ) +rtf.title = translate("RegExp file") +rtf.description = [[]] + .. translate("Read only!") + .. [[ ]] + .. translate("Radicale uses '/etc/radicale/rights' as regexp-based file.") + .. [[
]] + .. translate("To edit the file follow this link!") + .. [[]] +rtf.readonly = true +rtf:depends ("type", "from_file") +function rtf.cfgvalue() + return "/etc/radicale/rights" +end + +-- cbi-section "Storage" -- #################################################### +local sto = m:section( NamedSection, "storage", "setting" ) +sto.title = translate("Storage") +sto.description = nil +function sto.cfgvalue(self, section) + if not self.map:get(section) then -- section might not exist + self.map:set(section, nil, self.sectiontype) + end + return self.map:get(section) +end + +-- type ----------------------------------------------------------------------- +local sty = sto:option( ListValue, "type" ) +sty.title = translate("Storage backend") +sty.description = translate("WARNING: Only 'File-system' is documented and tested by Radicale development") +sty.widget = "select" +sty.default = "filesystem" +sty:value ("filesystem", translate("File-system")) +--sty:value ("multifilesystem", translate("") ) +--sty:value ("database", translate("Database") ) +--sty:value ("custom", translate("Custom") ) +function sty.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function sty.write(self, section, value) + if value ~= "filesystem" then + self.map:del(section, "filesystem_folder") + end + if value ~= self.default then + return self.map:set(section, self.option, value) + else + return self.map:del(section, self.option) + end +end + +--filesystem_folder ------------------------------------------------------------ +local sfi = sto:option( Value, "filesystem_folder" ) +sfi.title = translate("Directory") +sfi.description = nil +sfi.placeholder = "/srv/radicale" +sfi:depends ("type", "filesystem") +function sfi.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function sfi.validate(self, value) + local _typ = sty:formvalue(sto.section) or "" + if _typ ~= "filesystem" then + return "" -- ignore if not htpasswd + end + if value then -- otherwise errors in datatype check + if DTYP.directory(value) then + return value + else + return nil, self.title .. ": " .. translate("Directory not exists/found !") + end + else + return nil, self.title .. ": " .. translate("Directory required !") + end +end + +-- cbi-section "Logging" -- #################################################### +local log = m:section( NamedSection, "logger", "logging" ) +log.title = translate("Logging") +log.description = nil +function log.cfgvalue(self, section) + if not self.map:get(section) then -- section might not exist + self.map:set(section, nil, self.sectiontype) + end + return self.map:get(section) +end + +-- console_level --------------------------------------------------------------- +local lco = log:option( ListValue, "console_level" ) +lco.title = translate("Console Log level") +lco.description = nil +lco.widget = "select" +lco.default = "ERROR" +lco:value ("DEBUG", translate("Debug")) +lco:value ("INFO", translate("Info") ) +lco:value ("WARNING", translate("Warning") ) +lco:value ("ERROR", translate("Error") ) +lco:value ("CRITICAL", translate("Critical") ) +function lco.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function lco.write(self, section, value) + if value ~= self.default then + return self.map:set(section, self.option, value) + else + return self.map:del(section, self.option) + end +end + +-- syslog_level ---------------------------------------------------------------- +local lsl = log:option( ListValue, "syslog_level" ) +lsl.title = translate("Syslog Log level") +lsl.description = nil +lsl.widget = "select" +lsl.default = "WARNING" +lsl:value ("DEBUG", translate("Debug")) +lsl:value ("INFO", translate("Info") ) +lsl:value ("WARNING", translate("Warning") ) +lsl:value ("ERROR", translate("Error") ) +lsl:value ("CRITICAL", translate("Critical") ) +function lsl.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function lsl.write(self, section, value) + if value ~= self.default then + return self.map:set(section, self.option, value) + else + return self.map:del(section, self.option) + end +end + +-- file_level ------------------------------------------------------------------ +local lfi = log:option( ListValue, "file_level" ) +lfi.title = translate("File Log level") +lfi.description = nil +lfi.widget = "select" +lfi.default = "INFO" +lfi:value ("DEBUG", translate("Debug")) +lfi:value ("INFO", translate("Info") ) +lfi:value ("WARNING", translate("Warning") ) +lfi:value ("ERROR", translate("Error") ) +lfi:value ("CRITICAL", translate("Critical") ) +function lfi.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function lfi.write(self, section, value) + if value ~= self.default then + return self.map:set(section, self.option, value) + else + return self.map:del(section, self.option) + end +end + +-- file_path ------------------------------------------------------------------- +local lfp = log:option( Value, "file_path" ) +lfp.title = translate("Log-file directory") +lfp.description = translate("Directory where the rotating log-files are stored") + .. [[
]] + .. translate("To view latest log file follow this link!") + .. [[]] +lfp.default = "/var/log/radicale" +function lfp.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function lfp.validate(self, value) + if not value or (#value < 1) or (value:find("/") ~= 1) then + return nil, self.title .. ": " .. translate("no valid path given!") + end + return value +end + +-- file_maxbytes --------------------------------------------------------------- +local lmb = log:option( Value, "file_maxbytes" ) +lmb.title = translate("Log-file size") +lmb.description = translate("Maximum size of each rotation log-file.") + .. [[
]] + .. translate("Setting this parameter to '0' will disable rotation of log-file.") + .. [[]] +lmb.default = "8196" +function lmb.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function lmb.validate(self, value) + if value then -- otherwise errors in datatype check + if DTYP.uinteger(value) then + return value + else + return nil, self.title .. ": " .. translate("Value is not an Integer >= 0 !") + end + else + return nil, self.title .. ": " .. translate("Value required ! Integer >= 0 !") + end +end + +-- file_backupcount ------------------------------------------------------------ +local lbc = log:option( Value, "file_backupcount" ) +lbc.title = translate("Log-backup Count") +lbc.description = translate("Number of backup files of log to create.") + .. [[
]] + .. translate("Setting this parameter to '0' will disable rotation of log-file.") + .. [[]] +lbc.default = "1" +function lbc.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end +function lbc.validate(self, value) + if value then -- otherwise errors in datatype check + if DTYP.uinteger(value) then + return value + else + return nil, self.title .. ": " .. translate("Value is not an Integer >= 0 !") + end + else + return nil, self.title .. ": " .. translate("Value required ! Integer >= 0 !") + end +end + +-- cbi-section "Encoding" -- ################################################### +local enc = m:section( NamedSection, "encoding", "setting" ) +enc.title = translate("Encoding") +enc.description = translate("Change here the encoding Radicale will use instead of 'UTF-8' " + .. "for responses to the client and/or to store data inside collections.") +function enc.cfgvalue(self, section) + if not self.map:get(section) then -- section might not exist + self.map:set(section, nil, self.sectiontype) + end + return self.map:get(section) +end + +-- request --------------------------------------------------------------------- +local enr = enc:option( Value, "request" ) +enr.title = translate("Response Encoding") +enr.description = translate("Encoding for responding requests.") +enr.default = "utf-8" +function enr.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- stock ----------------------------------------------------------------------- +local ens = enc:option( Value, "stock" ) +ens.title = translate("Storage Encoding") +ens.description = translate("Encoding for storing local collections.") +ens.default = "utf-8" +function ens.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- cbi-section "Headers" -- #################################################### +local hea = m:section( NamedSection, "headers", "setting" ) +hea.title = translate("Additional HTTP headers") +hea.description = translate("Cross-origin resource sharing (CORS) is a mechanism that allows restricted resources (e.g. fonts, JavaScript, etc.) " + .. "on a web page to be requested from another domain outside the domain from which the resource originated.") +function hea.cfgvalue(self, section) + if not self.map:get(section) then -- section might not exist + self.map:set(section, nil, self.sectiontype) + end + return self.map:get(section) +end + +-- Access_Control_Allow_Origin ------------------------------------------------- +local heo = hea:option( DynamicList, "Access_Control_Allow_Origin" ) +heo.title = translate("Access-Control-Allow-Origin") +heo.description = nil +function heo.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- Access_Control_Allow_Methods ------------------------------------------------ +local hem = hea:option( DynamicList, "Access_Control_Allow_Methods" ) +hem.title = translate("Access-Control-Allow-Methods") +hem.description = nil +function hem.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- Access_Control_Allow_Headers ------------------------------------------------ +local heh = hea:option( DynamicList, "Access_Control_Allow_Headers" ) +heh.title = translate("Access-Control-Allow-Headers") +heh.description = nil +function heh.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +-- Access_Control_Expose_Headers ----------------------------------------------- +local hee = hea:option( DynamicList, "Access_Control_Expose_Headers" ) +hee.title = translate("Access-Control-Expose-Headers") +hee.description = nil +function hee.parse(self, section, novld) + CTRL.value_parse(self, section, novld) +end + +return m diff --git a/feeds/luci/applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm b/feeds/luci/applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm new file mode 100644 index 0000000..d9ef822 --- /dev/null +++ b/feeds/luci/applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm @@ -0,0 +1,49 @@ + + + + +<%+cbi/valueheader%> + +<% if self:cfgvalue(section) ~= false then +-- We need to garantie that function cfgvalue run first to set missing parameters +%> + + + " style="font-size: 100%;" type="button" onclick="onclick_startstop(this.id)" + <%= + attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled") + %> /> +<% end %> + +<%+cbi/valuefooter%> + diff --git a/feeds/luci/applications/luci-app-radicale/luasrc/view/radicale/tabmap_nsections.htm b/feeds/luci/applications/luci-app-radicale/luasrc/view/radicale/tabmap_nsections.htm new file mode 100644 index 0000000..45fe60c --- /dev/null +++ b/feeds/luci/applications/luci-app-radicale/luasrc/view/radicale/tabmap_nsections.htm @@ -0,0 +1,49 @@ +<%- if firstmap and messages then local msg; for _, msg in ipairs(messages) do -%> +
<%=pcdata(msg)%>
+<%- end end -%> + +<%-+cbi/apply_xhr-%> + +
+ <% if self.title and #self.title > 0 then %>

<%=self.title%>

<% end %> + <% if self.description and #self.description > 0 then %>
<%=self.description%>
<% end %> + <%- if firstmap and applymap then cbi_apply_xhr(self.config, parsechain, redirect) end -%> + + <% if self.tabbed then %> +
    + <%- self.selected_tab = luci.http.formvalue("tab.m-" .. self.config) %> + <% for i, section in ipairs(self.children) do %> + <%- if not self.selected_tab then self.selected_tab = section.sectiontype end %> +
  • + <%=section.title or section.section or section.sectiontype %> + <% if section.sectiontype == self.selected_tab then %><% end %> +
  • + <% end %> +
+
+ <% for i, section in ipairs(self.children) do %> +
style="display:none"<% end %>> + <% section:render() %> +
+ + <% end %> + + <% else %> + <%- self:render_children() %> + <% end %> + + <% if not self.save then -%> +
+ <% for _, section in ipairs(self.children) do %> + <% if section.error and section.error[section.section] then -%> +
  • + <%:One or more missing/invalid fields on tab%>: <%=section.title or section.section or section.sectiontype%> +
+ <%- end %> + <% end %> +
+ <%- end %> + +
+ +
diff --git a/feeds/luci/applications/luci-app-radicale/po/de/radicale.po b/feeds/luci/applications/luci-app-radicale/po/de/radicale.po new file mode 100644 index 0000000..fda4245 --- /dev/null +++ b/feeds/luci/applications/luci-app-radicale/po/de/radicale.po @@ -0,0 +1,459 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-radicale 1.1.0-1\n" +"POT-Creation-Date: 2016-01-30 20:34+0100\n" +"PO-Revision-Date: 2016-01-31 20:49+0100\n" +"Last-Translator: Christian Schönebeck \n" +"Language-Team: \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "" +"'AUTO' selects the highest protocol version that client and server support." +msgstr "" +"'AUTO' wählt die höchste Protokollversion, die Client und Server " +"unterstützen." + +msgid "" +"'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on" +msgstr "" +"'Hostname:Port' oder 'IPv4:Port' oder '[IPv6]:Port' die Radicale überwachen " +"soll." + +msgid "AUTO" +msgstr "AUTO" + +msgid "Access-Control-Allow-Headers" +msgstr "Access-Control-Allow-Headers" + +msgid "Access-Control-Allow-Methods" +msgstr "Access-Control-Allow-Methods" + +msgid "Access-Control-Allow-Origin" +msgstr "Access-Control-Allow-Origin" + +msgid "Access-Control-Expose-Headers" +msgstr "Access-Control-Expose-Headers" + +msgid "Additional HTTP headers" +msgstr "Zusätzliche HTTP headers" + +msgid "Address:Port" +msgstr "Adresse:Port" + +msgid "Authentication" +msgstr "Authentifizierung" + +msgid "" +"Authentication login is matched against the 'user' key, and collection's " +"path is matched against the 'collection' key." +msgstr "" +"Der Login wird gegen die 'user' Schlüssel und die Pfadsammlung gegen die " +"'collection' Schlüssel abgestimmt." + +msgid "Authentication method" +msgstr "Authentifizierungsmethode" + +msgid "Authentication method to allow access to Radicale server." +msgstr "" +"Authentifizierungsmethode um den Zugang zum Radicale Server zu kontrollieren." + +msgid "Auto-start" +msgstr "Autostart" + +msgid "Boot delay" +msgstr "Systemstart-Verzögerung" + +msgid "CalDAV/CardDAV" +msgstr "CalDAV/CardDAV" + +msgid "" +"Calendars and address books are available for both local and remote access, " +"possibly limited through authentication policies." +msgstr "" +"Auf Kalender und Adressbücher kann sowohl Lokal als auch Remote zugegriffen " +"werden, soweit nicht durch Authentifizierungsrichtlinien begrenzt." + +msgid "Certificate file" +msgstr "Zertifikat Datei" + +msgid "" +"Change here the encoding Radicale will use instead of 'UTF-8' for responses " +"to the client and/or to store data inside collections." +msgstr "" +"Ändern Sie hier die Zeichenkodierung die Radicale anstelle von \"UTF-8\" für " +"Antworten an den Client und/oder zum Speichern von Daten in einer Sammlung " +"verwendet." + +msgid "Ciphers" +msgstr "Chiffren" + +msgid "Console Log level" +msgstr "Konsole Protokoll Level" + +msgid "Control the access to data collections." +msgstr "Kontrolliert den Zugriff auf die Daten Sammlungen." + +msgid "Critical" +msgstr "Kritisch" + +msgid "" +"Cross-origin resource sharing (CORS) is a mechanism that allows restricted " +"resources (e.g. fonts, JavaScript, etc.) on a web page to be requested from " +"another domain outside the domain from which the resource originated." +msgstr "" +"Cross-Origin Resource Sharing (CORS) ist ein Mechanismus, um Webbrowsern " +"oder auch anderen Webclients Cross-Origin-Requests zu ermöglichen." + +msgid "Custom" +msgstr "Benutzerdefiniert" + +msgid "Database" +msgstr "Datenbank" + +msgid "Debug" +msgstr "Debug" + +msgid "Delay (in seconds) during system boot before Radicale start" +msgstr "" +"Verzögerung (in Sekunden) während des Systemstarts, bevor Radicale startet" + +msgid "Directory" +msgstr "Verzeichnis" + +msgid "Directory not exists/found !" +msgstr "Verzeichnis nicht gefunden / existiert nicht !" + +msgid "Directory required !" +msgstr "Verzeichnis benötigt !" + +msgid "Directory where the rotating log-files are stored" +msgstr "" +"Verzeichnis in dem die rollierenden Protokolldateien gespeichert werden" + +msgid "During delay ifup-events are not monitored !" +msgstr "Während der Verzögerung werden 'ifup'-Ereignisse nicht überwacht!" + +msgid "Enable HTTPS" +msgstr "Verwende HTTPS" + +msgid "" +"Enable/Disable auto-start of Radicale on system start-up and interface events" +msgstr "" +"Aktiviert/Deaktiviert den Autostart von Radicale beim Systemstart und bei " +"Schnittstellenereignissen." + +msgid "Encoding" +msgstr "Zeichenkodierung" + +msgid "Encoding for responding requests." +msgstr "Zeichenkodierung für die Beantwortung von Anfragen." + +msgid "Encoding for storing local collections." +msgstr "Zeichenkodierung für die Speicherung von lokalen Sammlungen." + +msgid "Encryption method" +msgstr "Verschlüsselungsmethode" + +msgid "Error" +msgstr "Fehler" + +msgid "File '%s' not found !" +msgstr "Datei '%s' wurde nicht gefunden!" + +msgid "File Log level" +msgstr "Datei Protokoll Level" + +msgid "File not found !" +msgstr "Datei nicht gefunden !" + +msgid "File-system" +msgstr "Dateisystem" + +msgid "" +"For example, for the 'user' key, '.+' means 'authenticated user' and '.*' " +"means 'anybody' (including anonymous users)." +msgstr "" +"Beispiel für den 'user' Schlüssel: '. +' bedeutet 'authentifizierten " +"Benutzer' und '. *' bedeutet 'jeder' (einschließlich anonyme Benutzer)." + +msgid "Full access for Owner only" +msgstr "Voller Zugriff nur für den Besitzer" + +msgid "Full access for authenticated Users" +msgstr "Voller Zugriff für authentifizierte Benutzer" + +msgid "Full access for everybody (including anonymous)" +msgstr "Vollzugriff für jedermann (auch anonyme)" + +msgid "Full path and file name of certificate" +msgstr "Vollständiger Pfad und Dateiname der Zertifikat Datei" + +msgid "Full path and file name of private key" +msgstr "Vollständiger Pfad und Dateiname der Privaten Schlüsseldatei" + +msgid "Info" +msgstr "Informationen" + +msgid "Keep in mind to use the correct hashing algorithm !" +msgstr "Denken Sie daran, den korrekten Hash-Algorithmus zu verwenden!" + +msgid "Leading or ending slashes are trimmed from collection's path." +msgstr "" +"Schrägstriche ('/') am Anfang und Ende der Pfadangabe der Sammlung werden " +"von der Pfadangabe abgeschnitten." + +msgid "Log-backup Count" +msgstr "Protokoll Backup Zähler" + +msgid "Log-file Viewer" +msgstr "Protokolldatei Betrachter" + +msgid "Log-file directory" +msgstr "Protokoll-Datei Verzeichnis" + +msgid "Log-file size" +msgstr "Protokoll Dateigröße" + +msgid "Logging" +msgstr "Protokollierung" + +msgid "Logon message" +msgstr "Anmelde-Hinweis" + +msgid "Maximum size of each rotation log-file." +msgstr "Maximale Größe jeder rollierenden Protokoll-Datei." + +msgid "Message displayed in the client when a password is needed." +msgstr "Meldung im Client, wenn ein Kennwort erforderlich ist." + +msgid "NOT installed" +msgstr "nicht installiert" + +msgid "None" +msgstr "Keine" + +msgid "Number of backup files of log to create." +msgstr "Anzahl der Protokoll Backup Dateien, die angelegt werden." + +msgid "OPTIONAL: See python's ssl module for available ciphers" +msgstr "OPTIONAL: Siehe Python SSL-Modul Dokumentation" + +msgid "One or more missing/invalid fields on tab" +msgstr "Ein oder mehrere fehlende/ungültige Felder auf der Registerkarte" + +msgid "Owner allow write, authenticated users allow read" +msgstr "" +"Besitzer haben Schreibrechte, Authentifizierten Benutzer dürfen nur lesen." + +msgid "Path/File required !" +msgstr "Pfad/Datei erforderlich!" + +msgid "" +"Place here the 'user:password' pairs for your users which should have access " +"to Radicale." +msgstr "" +"Speichern Sie hier die 'user: password' Paare für die Benutzer, die Zugriff " +"auf Radicale haben sollte." + +msgid "Please install current version !" +msgstr "Installieren Sie bitte die aktuelle Version!" + +msgid "Please press [Reload] button below to reread the file." +msgstr "" +"Bitte drücken Sie die [Neu laden]-Schaltfläche unten, um die Datei neu " +"einzulesen." + +msgid "Please update to current version !" +msgstr "Aktualisieren Sie bitte auf die aktuelle Version!" + +msgid "Port numbers below 1024 (Privileged ports) are not supported" +msgstr "Port Nummern unter 1024 (Privileged Ports) werden nicht unterstützt." + +msgid "Private key file" +msgstr "Private Schlüssel Datei" + +msgid "Radicale CalDAV/CardDAV Server" +msgstr "Radicale CalDAV/CardDAV Dienst" + +msgid "Radicale uses '/etc/radicale/rights' as regexp-based file." +msgstr "Radicale verwendet '/etc/radicale/rights' als RegExp-basierte Datei." + +msgid "Radicale uses '/etc/radicale/users' as htpasswd file." +msgstr "Radicale verwendet 'etc/radicale/users' als htpasswd Datei." + +msgid "Read only!" +msgstr "Nur lesbar!" + +msgid "RegExp file" +msgstr "RegExp Datei" + +msgid "Reload" +msgstr "Neu laden" + +msgid "Response Encoding" +msgstr "Antwort Zeichenkodierung" + +msgid "Rights" +msgstr "Zugriffsrechte" + +msgid "Rights are based on a regexp-based file" +msgstr "Zugriff basiert auf RegExp-basierter Datei." + +msgid "Rights backend" +msgstr "Zugagsverwaltung" + +msgid "SHA-1" +msgstr "SHA-1" + +msgid "SSL Protocol" +msgstr "SSL Protokol" + +msgid "Save" +msgstr "Speichern" + +msgid "Section names are only used for naming the rule." +msgstr "Abschnittsnamen werden nur für die Benennung der Regel verwendet." + +msgid "Server" +msgstr "Server" + +msgid "Setting this parameter to '0' will disable rotation of log-file." +msgstr "" +"Wenn dieser Parameter auf '0' gesetzt wird, wird die Protokolldatei nicht " +"mehr rolliert!" + +msgid "Software package '%s' is not installed." +msgstr "Software Paket '%s' ist nicht installiert." + +msgid "Software package '%s' is outdated." +msgstr "Software Paket '%s' ist nicht aktuell." + +msgid "Software update required" +msgstr "Software-Update erforderlich" + +msgid "Start" +msgstr "Start" + +msgid "Start / Stop" +msgstr "Start / Stopp" + +msgid "Start/Stop Radicale server" +msgstr "Start / Stopp Radicale Dienst" + +msgid "Storage" +msgstr "Datenspeicher" + +msgid "Storage Encoding" +msgstr "Datenspeicher Kodierung" + +msgid "Storage backend" +msgstr "Datenspeicher Verwaltung" + +msgid "Syslog Log level" +msgstr "Systemlog Level" + +msgid "System" +msgstr "System" + +msgid "" +"The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) " +"server solution." +msgstr "" +"Das Raidcale Projekt bietet eine vollständige CalDAV (Kalender) und CardDAV " +"(Adressbuch) Server Lösung." + +msgid "" +"They can be viewed and edited by calendar and contact clients on mobile " +"phones or computers." +msgstr "" +"Diese können von Kalender- und Adressbuch-Anwendungen auf mobilen Endgeräten " +"und Computern angezeigt und bearbeitet werden." + +msgid "To edit the file follow this link!" +msgstr "Um die Datei zu bearbeiten, folgend Sie dieser Verknüpfung!" + +msgid "To view latest log file follow this link!" +msgstr "" +"Zur Anzeige der letzten Protokolldatei, folgen Sie dieser Verknüpfung !" + +msgid "Value is not a number" +msgstr "Wert ist keine Zahl" + +msgid "Value is not an Integer >= 0 !" +msgstr "Eingabe ist keine Ganzzahl >= 0 !" + +msgid "Value not between 0 and 300" +msgstr "Wert nicht zwischen 0 und 300" + +msgid "Value required ! Integer >= 0 !" +msgstr "Eingabe erforderlich ! Ganzzahl >= 0 !" + +msgid "Version" +msgstr "Version" + +msgid "Version Information" +msgstr "Versionsinformationen" + +msgid "" +"WARNING: Only 'File-system' is documented and tested by Radicale development" +msgstr "" +"WARNUNG: Nur 'File-system' ist vom Radicale Entwicklerteam derzeit " +"dokumentiert und getestet." + +msgid "Warning" +msgstr "Warnung" + +msgid "" +"You can also get groups from the user regex in the collection with {0}, {1}, " +"etc." +msgstr "" +"Sie können auch Gruppen aus der Benutzer regex in der Sammlung mit {0}, {1} " +"usw. bekommen." + +msgid "" +"You can use Python's ConfigParser interpolation values %(login)s and " +"%(path)s." +msgstr "" +"Sie können Python ConfigParser Werte '%(login)s' und '%(path)s' verwenden." + +msgid "crypt" +msgstr "crypt" + +msgid "custom" +msgstr "benutzerdefiniert" + +msgid "htpasswd file" +msgstr "htpasswd Datei" + +msgid "installed" +msgstr "installiert" + +msgid "no valid path given!" +msgstr "Keine gültige Pfadangabe!" + +msgid "or higher" +msgstr "oder höher" + +msgid "plain" +msgstr "unverschlüsselt" + +msgid "required" +msgstr "erforderlich" + +msgid "salted SHA-1" +msgstr "Salted SHA-1" + +#~ msgid "-- Please choose --" +#~ msgstr "-- Bitte auswählen --" + +#~ msgid "-- custom --" +#~ msgstr "-- benutzerdefiniert --" + +#~ msgid "Reveal/hide password" +#~ msgstr "Passwort zeigen/verstecken" diff --git a/feeds/luci/applications/luci-app-radicale/po/sv/radicale.po b/feeds/luci/applications/luci-app-radicale/po/sv/radicale.po new file mode 100644 index 0000000..18adf26 --- /dev/null +++ b/feeds/luci/applications/luci-app-radicale/po/sv/radicale.po @@ -0,0 +1,425 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-radicale 1.1.0-1\n" +"POT-Creation-Date: 2016-01-30 20:34+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.4\n" + +msgid "" +"'AUTO' selects the highest protocol version that client and server support." +msgstr "" + +msgid "" +"'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on" +msgstr "" + +msgid "AUTO" +msgstr "AUTO" + +msgid "Access-Control-Allow-Headers" +msgstr "" + +msgid "Access-Control-Allow-Methods" +msgstr "" + +msgid "Access-Control-Allow-Origin" +msgstr "" + +msgid "Access-Control-Expose-Headers" +msgstr "" + +msgid "Additional HTTP headers" +msgstr "" + +msgid "Address:Port" +msgstr "Adress:Port" + +msgid "Authentication" +msgstr "Autentisering" + +msgid "" +"Authentication login is matched against the 'user' key, and collection's " +"path is matched against the 'collection' key." +msgstr "" + +msgid "Authentication method" +msgstr "Autentiseringsmetod" + +msgid "Authentication method to allow access to Radicale server." +msgstr "Autentiseringsmetod för att tillåta åtkomst till Radicale-servern." + +msgid "Auto-start" +msgstr "Starta automatiskt" + +msgid "Boot delay" +msgstr "" + +msgid "CalDAV/CardDAV" +msgstr "CalDAV/CardDAV" + +msgid "" +"Calendars and address books are available for both local and remote access, " +"possibly limited through authentication policies." +msgstr "" +"Kalendrar och adressböcker är tillgängliga för både lokal och fjärrstyrd " +"åtkomst, möjligtvis begränsad av villkoren för autentisering." + +msgid "Certificate file" +msgstr "Certifikat-fil" + +msgid "" +"Change here the encoding Radicale will use instead of 'UTF-8' for responses " +"to the client and/or to store data inside collections." +msgstr "" + +msgid "Ciphers" +msgstr "Chiffer" + +msgid "Console Log level" +msgstr "Loggnivå för konsoll" + +msgid "Control the access to data collections." +msgstr "Kontrollera åtkomst till insamlingen av data." + +msgid "Critical" +msgstr "Kritisk" + +msgid "" +"Cross-origin resource sharing (CORS) is a mechanism that allows restricted " +"resources (e.g. fonts, JavaScript, etc.) on a web page to be requested from " +"another domain outside the domain from which the resource originated." +msgstr "" + +msgid "Custom" +msgstr "Anpassad" + +msgid "Database" +msgstr "Databas" + +msgid "Debug" +msgstr "Felsök" + +msgid "Delay (in seconds) during system boot before Radicale start" +msgstr "" + +msgid "Directory" +msgstr "Mapp" + +msgid "Directory not exists/found !" +msgstr "Mappen finns inte/hittades inte !" + +msgid "Directory required !" +msgstr "Mapp krävs !" + +msgid "Directory where the rotating log-files are stored" +msgstr "Mappen där de roterade logg-filerna lagras" + +msgid "During delay ifup-events are not monitored !" +msgstr "" + +msgid "Enable HTTPS" +msgstr "Aktivera HTTPS" + +msgid "" +"Enable/Disable auto-start of Radicale on system start-up and interface events" +msgstr "" + +msgid "Encoding" +msgstr "" + +msgid "Encoding for responding requests." +msgstr "" + +msgid "Encoding for storing local collections." +msgstr "" + +msgid "Encryption method" +msgstr "Krypteringsmetod" + +msgid "Error" +msgstr "Fel" + +msgid "File '%s' not found !" +msgstr "Filen '%s' kunde inte hittas !" + +msgid "File Log level" +msgstr "Loggnivå för fil" + +msgid "File not found !" +msgstr "Filen kunde inte hittas !" + +msgid "File-system" +msgstr "Filsystem" + +msgid "" +"For example, for the 'user' key, '.+' means 'authenticated user' and '.*' " +"means 'anybody' (including anonymous users)." +msgstr "" + +msgid "Full access for Owner only" +msgstr "" + +msgid "Full access for authenticated Users" +msgstr "" + +msgid "Full access for everybody (including anonymous)" +msgstr "" + +msgid "Full path and file name of certificate" +msgstr "" + +msgid "Full path and file name of private key" +msgstr "" + +msgid "Info" +msgstr "Info" + +msgid "Keep in mind to use the correct hashing algorithm !" +msgstr "" + +msgid "Leading or ending slashes are trimmed from collection's path." +msgstr "" + +msgid "Log-backup Count" +msgstr "" + +msgid "Log-file Viewer" +msgstr "Visare för loggfil" + +msgid "Log-file directory" +msgstr "Mapp för loggfil" + +msgid "Log-file size" +msgstr "Storlek på loggfil" + +msgid "Logging" +msgstr "Loggning" + +msgid "Logon message" +msgstr "Inloggningsmeddelande" + +msgid "Maximum size of each rotation log-file." +msgstr "" + +msgid "Message displayed in the client when a password is needed." +msgstr "Meddelandet som visas i klienten när ett lösenord behövs." + +msgid "NOT installed" +msgstr "INTE installerad" + +msgid "None" +msgstr "Inget" + +msgid "Number of backup files of log to create." +msgstr "" + +msgid "OPTIONAL: See python's ssl module for available ciphers" +msgstr "VALFRITT: Kolla in python's ssl-modul för tillgängliga chiffer" + +msgid "One or more missing/invalid fields on tab" +msgstr "" + +msgid "Owner allow write, authenticated users allow read" +msgstr "" + +msgid "Path/File required !" +msgstr "Genväg/Fil krävs !" + +msgid "" +"Place here the 'user:password' pairs for your users which should have access " +"to Radicale." +msgstr "" + +msgid "Please install current version !" +msgstr "Vänligen installera den nuvarande versionen !" + +msgid "Please press [Reload] button below to reread the file." +msgstr "" +"Vänligen tryck på [Omstart]-knappen nedan för att läsa om filen på nytt." + +msgid "Please update to current version !" +msgstr "Vänligen uppdatera till den nuvarande versionen !" + +msgid "Port numbers below 1024 (Privileged ports) are not supported" +msgstr "Portnummer under 1024 (Priviligerade portar) stöds inte" + +msgid "Private key file" +msgstr "Privat nyckel-fil" + +msgid "Radicale CalDAV/CardDAV Server" +msgstr "Radicale CalDAV/CardDAV-server" + +msgid "Radicale uses '/etc/radicale/rights' as regexp-based file." +msgstr "Radicale använder '/etc/radicale/rights som en regexp-baserad fil." + +msgid "Radicale uses '/etc/radicale/users' as htpasswd file." +msgstr "Radicale använder '/etc/radicale/users' som en htpasswd-fil." + +msgid "Read only!" +msgstr "Endast läsbar!" + +msgid "RegExp file" +msgstr "RegExp-fil" + +msgid "Reload" +msgstr "Ladda om" + +msgid "Response Encoding" +msgstr "" + +msgid "Rights" +msgstr "Rättigheter" + +msgid "Rights are based on a regexp-based file" +msgstr "Rättigheter baseras på en regexp-baserad fil" + +msgid "Rights backend" +msgstr "" + +msgid "SHA-1" +msgstr "SHA-1" + +msgid "SSL Protocol" +msgstr "SSL-protokoll" + +msgid "Save" +msgstr "Spara" + +msgid "Section names are only used for naming the rule." +msgstr "" + +msgid "Server" +msgstr "Server" + +msgid "Setting this parameter to '0' will disable rotation of log-file." +msgstr "" +"Genom att ställa in den här parametern till '0' så kommer du att stänga av " +"rotering av logg-fil." + +msgid "Software package '%s' is not installed." +msgstr "" + +msgid "Software package '%s' is outdated." +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Start" +msgstr "Starta" + +msgid "Start / Stop" +msgstr "Starta / Stoppa" + +msgid "Start/Stop Radicale server" +msgstr "Starta/Stoppa Radicale-servern" + +msgid "Storage" +msgstr "Lagring" + +msgid "Storage Encoding" +msgstr "" + +msgid "Storage backend" +msgstr "" + +msgid "Syslog Log level" +msgstr "Loggnivå för systemloggen" + +msgid "System" +msgstr "System" + +msgid "" +"The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) " +"server solution." +msgstr "" + +msgid "" +"They can be viewed and edited by calendar and contact clients on mobile " +"phones or computers." +msgstr "" + +msgid "To edit the file follow this link!" +msgstr "Följ den här länken för att redigera den här filen!" + +msgid "To view latest log file follow this link!" +msgstr "Följ den här länken för att visa den senaste logg-filen" + +msgid "Value is not a number" +msgstr "" + +msgid "Value is not an Integer >= 0 !" +msgstr "Värdet är inte ett heltal >= 0 !" + +msgid "Value not between 0 and 300" +msgstr "" + +msgid "Value required ! Integer >= 0 !" +msgstr "Värde krävs ! Heltal >= 0 !" + +msgid "Version" +msgstr "Version" + +msgid "Version Information" +msgstr "Information om versionen" + +msgid "" +"WARNING: Only 'File-system' is documented and tested by Radicale development" +msgstr "" +"VARNING: Endast 'Filsystemet' är dokumenterat och testat av Radicale-" +"utvecklingen" + +msgid "Warning" +msgstr "Varning" + +msgid "" +"You can also get groups from the user regex in the collection with {0}, {1}, " +"etc." +msgstr "" + +msgid "" +"You can use Python's ConfigParser interpolation values %(login)s and " +"%(path)s." +msgstr "" + +msgid "crypt" +msgstr "crypt" + +msgid "custom" +msgstr "anpassad" + +msgid "htpasswd file" +msgstr "htpasswd-fil" + +msgid "installed" +msgstr "installerad" + +msgid "no valid path given!" +msgstr "" + +msgid "or higher" +msgstr "eller högre" + +msgid "plain" +msgstr "enkel" + +msgid "required" +msgstr "krävs" + +msgid "salted SHA-1" +msgstr "saltad SHA-1" + +#~ msgid "-- Please choose --" +#~ msgstr "-- Vänligen välj --" + +#~ msgid "-- custom --" +#~ msgstr "-- anpassad --" + +#~ msgid "Reveal/hide password" +#~ msgstr "Visa/göm lösenordet" diff --git a/feeds/luci/applications/luci-app-radicale/po/templates/radicale.pot b/feeds/luci/applications/luci-app-radicale/po/templates/radicale.pot new file mode 100644 index 0000000..181c4f3 --- /dev/null +++ b/feeds/luci/applications/luci-app-radicale/po/templates/radicale.pot @@ -0,0 +1,399 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "" +"'AUTO' selects the highest protocol version that client and server support." +msgstr "" + +msgid "" +"'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on" +msgstr "" + +msgid "AUTO" +msgstr "" + +msgid "Access-Control-Allow-Headers" +msgstr "" + +msgid "Access-Control-Allow-Methods" +msgstr "" + +msgid "Access-Control-Allow-Origin" +msgstr "" + +msgid "Access-Control-Expose-Headers" +msgstr "" + +msgid "Additional HTTP headers" +msgstr "" + +msgid "Address:Port" +msgstr "" + +msgid "Authentication" +msgstr "" + +msgid "" +"Authentication login is matched against the 'user' key, and collection's " +"path is matched against the 'collection' key." +msgstr "" + +msgid "Authentication method" +msgstr "" + +msgid "Authentication method to allow access to Radicale server." +msgstr "" + +msgid "Auto-start" +msgstr "" + +msgid "Boot delay" +msgstr "" + +msgid "CalDAV/CardDAV" +msgstr "" + +msgid "" +"Calendars and address books are available for both local and remote access, " +"possibly limited through authentication policies." +msgstr "" + +msgid "Certificate file" +msgstr "" + +msgid "" +"Change here the encoding Radicale will use instead of 'UTF-8' for responses " +"to the client and/or to store data inside collections." +msgstr "" + +msgid "Ciphers" +msgstr "" + +msgid "Console Log level" +msgstr "" + +msgid "Control the access to data collections." +msgstr "" + +msgid "Critical" +msgstr "" + +msgid "" +"Cross-origin resource sharing (CORS) is a mechanism that allows restricted " +"resources (e.g. fonts, JavaScript, etc.) on a web page to be requested from " +"another domain outside the domain from which the resource originated." +msgstr "" + +msgid "Custom" +msgstr "" + +msgid "Database" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Delay (in seconds) during system boot before Radicale start" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Directory not exists/found !" +msgstr "" + +msgid "Directory required !" +msgstr "" + +msgid "Directory where the rotating log-files are stored" +msgstr "" + +msgid "During delay ifup-events are not monitored !" +msgstr "" + +msgid "Enable HTTPS" +msgstr "" + +msgid "" +"Enable/Disable auto-start of Radicale on system start-up and interface events" +msgstr "" + +msgid "Encoding" +msgstr "" + +msgid "Encoding for responding requests." +msgstr "" + +msgid "Encoding for storing local collections." +msgstr "" + +msgid "Encryption method" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "File '%s' not found !" +msgstr "" + +msgid "File Log level" +msgstr "" + +msgid "File not found !" +msgstr "" + +msgid "File-system" +msgstr "" + +msgid "" +"For example, for the 'user' key, '.+' means 'authenticated user' and '.*' " +"means 'anybody' (including anonymous users)." +msgstr "" + +msgid "Full access for Owner only" +msgstr "" + +msgid "Full access for authenticated Users" +msgstr "" + +msgid "Full access for everybody (including anonymous)" +msgstr "" + +msgid "Full path and file name of certificate" +msgstr "" + +msgid "Full path and file name of private key" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Keep in mind to use the correct hashing algorithm !" +msgstr "" + +msgid "Leading or ending slashes are trimmed from collection's path." +msgstr "" + +msgid "Log-backup Count" +msgstr "" + +msgid "Log-file Viewer" +msgstr "" + +msgid "Log-file directory" +msgstr "" + +msgid "Log-file size" +msgstr "" + +msgid "Logging" +msgstr "" + +msgid "Logon message" +msgstr "" + +msgid "Maximum size of each rotation log-file." +msgstr "" + +msgid "Message displayed in the client when a password is needed." +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Number of backup files of log to create." +msgstr "" + +msgid "OPTIONAL: See python's ssl module for available ciphers" +msgstr "" + +msgid "One or more missing/invalid fields on tab" +msgstr "" + +msgid "Owner allow write, authenticated users allow read" +msgstr "" + +msgid "Path/File required !" +msgstr "" + +msgid "" +"Place here the 'user:password' pairs for your users which should have access " +"to Radicale." +msgstr "" + +msgid "Please install current version !" +msgstr "" + +msgid "Please press [Reload] button below to reread the file." +msgstr "" + +msgid "Please update to current version !" +msgstr "" + +msgid "Port numbers below 1024 (Privileged ports) are not supported" +msgstr "" + +msgid "Private key file" +msgstr "" + +msgid "Radicale CalDAV/CardDAV Server" +msgstr "" + +msgid "Radicale uses '/etc/radicale/rights' as regexp-based file." +msgstr "" + +msgid "Radicale uses '/etc/radicale/users' as htpasswd file." +msgstr "" + +msgid "Read only!" +msgstr "" + +msgid "RegExp file" +msgstr "" + +msgid "Reload" +msgstr "" + +msgid "Response Encoding" +msgstr "" + +msgid "Rights" +msgstr "" + +msgid "Rights are based on a regexp-based file" +msgstr "" + +msgid "Rights backend" +msgstr "" + +msgid "SHA-1" +msgstr "" + +msgid "SSL Protocol" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Section names are only used for naming the rule." +msgstr "" + +msgid "Server" +msgstr "" + +msgid "Setting this parameter to '0' will disable rotation of log-file." +msgstr "" + +msgid "Software package '%s' is not installed." +msgstr "" + +msgid "Software package '%s' is outdated." +msgstr "" + +msgid "Software update required" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start / Stop" +msgstr "" + +msgid "Start/Stop Radicale server" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Storage Encoding" +msgstr "" + +msgid "Storage backend" +msgstr "" + +msgid "Syslog Log level" +msgstr "" + +msgid "System" +msgstr "" + +msgid "" +"The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) " +"server solution." +msgstr "" + +msgid "" +"They can be viewed and edited by calendar and contact clients on mobile " +"phones or computers." +msgstr "" + +msgid "To edit the file follow this link!" +msgstr "" + +msgid "To view latest log file follow this link!" +msgstr "" + +msgid "Value is not a number" +msgstr "" + +msgid "Value is not an Integer >= 0 !" +msgstr "" + +msgid "Value not between 0 and 300" +msgstr "" + +msgid "Value required ! Integer >= 0 !" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Version Information" +msgstr "" + +msgid "" +"WARNING: Only 'File-system' is documented and tested by Radicale development" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "" +"You can also get groups from the user regex in the collection with {0}, {1}, " +"etc." +msgstr "" + +msgid "" +"You can use Python's ConfigParser interpolation values %(login)s and " +"%(path)s." +msgstr "" + +msgid "crypt" +msgstr "" + +msgid "custom" +msgstr "" + +msgid "htpasswd file" +msgstr "" + +msgid "installed" +msgstr "" + +msgid "no valid path given!" +msgstr "" + +msgid "or higher" +msgstr "" + +msgid "plain" +msgstr "" + +msgid "required" +msgstr "" + +msgid "salted SHA-1" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radicale/root/etc/uci-defaults/40_luci-radicale b/feeds/luci/applications/luci-app-radicale/root/etc/uci-defaults/40_luci-radicale new file mode 100755 index 0000000..333ca65 --- /dev/null +++ b/feeds/luci/applications/luci-app-radicale/root/etc/uci-defaults/40_luci-radicale @@ -0,0 +1,12 @@ +#!/bin/sh + +# no longer needed for "Save and Apply" to restart radicale +# luci-app-radicale calls /etc/init.d/radicale reload +uci -q batch <<-EOF >/dev/null + delete ucitrack.@radicale[-1] + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache + +exit 0 diff --git a/feeds/luci/applications/luci-app-radvd/Makefile b/feeds/luci/applications/luci-app-radvd/Makefile new file mode 100644 index 0000000..2142056 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2016 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for Radvd +LUCI_DEPENDS:=+radvd @BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-radvd/luasrc/controller/radvd.lua b/feeds/luci/applications/luci-app-radvd/luasrc/controller/radvd.lua new file mode 100644 index 0000000..9c08f4c --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/luasrc/controller/radvd.lua @@ -0,0 +1,17 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.radvd", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/radvd") then + return + end + + entry({"admin", "network", "radvd"}, cbi("radvd"), _("Radvd"), 61) + entry({"admin", "network", "radvd", "interface"}, cbi("radvd/interface"), nil).leaf = true + entry({"admin", "network", "radvd", "prefix"}, cbi("radvd/prefix"), nil).leaf = true + entry({"admin", "network", "radvd", "route"}, cbi("radvd/route"), nil).leaf = true + entry({"admin", "network", "radvd", "rdnss"}, cbi("radvd/rdnss"), nil).leaf = true + entry({"admin", "network", "radvd", "dnssl"}, cbi("radvd/dnssl"), nil).leaf = true +end diff --git a/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd.lua b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd.lua new file mode 100644 index 0000000..755dcb4 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd.lua @@ -0,0 +1,324 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("radvd", translate("Radvd"), + translate("Radvd is a router advertisement daemon for IPv6. " .. + "It listens to router solicitations and sends router advertisements " .. + "as described in RFC 4861.")) + +local nm = require "luci.model.network".init(m.uci) +local ut = require "luci.util" + + +-- +-- Interfaces +-- + +s = m:section(TypedSection, "interface", translate("Interfaces")) +s.template = "cbi/tblsection" +s.extedit = luci.dispatcher.build_url("admin/network/radvd/interface/%s") +s.anonymous = true +s.addremove = true + +function s.create(...) + local id = TypedSection.create(...) + luci.http.redirect(s.extedit % id) +end + +function s.remove(self, section) + if m.uci:get("radvd", section) == "interface" then + local iface = m.uci:get("radvd", section, "interface") + if iface then + m.uci:delete_all("radvd", "prefix", + function(s) return s.interface == iface end) + + m.uci:delete_all("radvd", "route", + function(s) return s.interface == iface end) + + m.uci:delete_all("radvd", "rdnss", + function(s) return s.interface == iface end) + end + end + + return TypedSection.remove(self, section) +end + +o = s:option(Flag, "ignore", translate("Enable")) +o.rmempty = false +o.width = "30px" +function o.cfgvalue(...) + local v = Flag.cfgvalue(...) + return v == "1" and "0" or "1" +end +function o.write(self, section, value) + Flag.write(self, section, value == "1" and "0" or "1") +end + +o = s:option(DummyValue, "interface", translate("Interface")) +o.template = "cbi/network_netinfo" +o.width = "10%" + +o = s:option(DummyValue, "UnicastOnly", translate("Multicast")) +function o.cfgvalue(self, section) + local v = Value.cfgvalue(self, section) + local v2 = m.uci:get("radvd", section, "client") + return (v == "1" or (v2 and #v2 > 0)) and translate("no") or translate("yes") +end + +o = s:option(DummyValue, "AdvSendAdvert", translate("Advertising")) +function o.cfgvalue(...) + local v = Value.cfgvalue(...) + return v == "1" and translate("yes") or translate("no") +end + +o = s:option(DummyValue, "MaxRtrAdvInterval", translate("Max. interval")) +function o.cfgvalue(...) + local v = Value.cfgvalue(...) or "600" + return v .. "s" +end + +o = s:option(DummyValue, "AdvHomeAgentFlag", translate("Mobile IPv6")) +function o.cfgvalue(...) + local v = Value.cfgvalue(...) + return v == "1" and translate("yes") or translate("no") +end + +o = s:option(DummyValue, "AdvDefaultPreference", translate("Preference")) +function o.cfgvalue(...) + local v = Value.cfgvalue(...) or "medium" + return translate(v) +end + + +-- +-- Prefixes +-- + +s2 = m:section(TypedSection, "prefix", translate("Prefixes")) +s2.template = "cbi/tblsection" +s2.extedit = luci.dispatcher.build_url("admin/network/radvd/prefix/%s") +s2.addremove = true +s2.anonymous = true + +function s2.create(...) + local id = TypedSection.create(...) + luci.http.redirect(s2.extedit % id) +end + + +o = s2:option(Flag, "ignore", translate("Enable")) +o.rmempty = false +o.width = "30px" +function o.cfgvalue(...) + local v = Flag.cfgvalue(...) + return v == "1" and "0" or "1" +end +function o.write(self, section, value) + Flag.write(self, section, value == "1" and "0" or "1") +end + +o = s2:option(DummyValue, "interface", translate("Interface")) +o.template = "cbi/network_netinfo" +o.width = "10%" + +pfx = s2:option(DummyValue, "prefix", translate("Prefix")) +pfx.width = "60%" +function pfx.cfgvalue(self, section) + local v = m.uci:get_list("radvd", section, self.option) + local l = { } + + if not v or #v == 0 or (#v == 1 and #v[1] == 0) then + local net = nm:get_network(m.uci:get("radvd", section, "interface")) + if net then + local ifc = nm:get_interface(net:ifname()) + if ifc then + local adr + for _, adr in ipairs(ifc:ip6addrs()) do + if not adr:is6linklocal() then + v = adr:string() + break + end + end + end + end + end + + for v in ut.imatch(v) do + v = luci.ip.IPv6(v) + if v then + l[#l+1] = v:string() + end + end + + if #l == 0 then + l[1] = "?" + end + + return table.concat(l, ", ") +end + +o = s2:option(DummyValue, "AdvAutonomous", translate("Autonomous")) +function o.cfgvalue(...) + local v = Value.cfgvalue(...) + return v == "1" and translate("yes") or translate("no") +end + +o = s2:option(DummyValue, "AdvOnLink", translate("On-link")) +function o.cfgvalue(...) + local v = Value.cfgvalue(...) + return v == "1" and translate("yes") or translate("no") +end + +o = s2:option(DummyValue, "AdvValidLifetime", translate("Validity time")) +function o.cfgvalue(...) + local v = Value.cfgvalue(...) or "86400" + return translate(v) +end + + +-- +-- Routes +-- + +s3 = m:section(TypedSection, "route", translate("Routes")) +s3.template = "cbi/tblsection" +s3.extedit = luci.dispatcher.build_url("admin/network/radvd/route/%s") +s3.addremove = true +s3.anonymous = true + +function s3.create(...) + local id = TypedSection.create(...) + luci.http.redirect(s3.extedit % id) +end + + +o = s3:option(Flag, "ignore", translate("Enable")) +o.rmempty = false +o.width = "30px" +function o.cfgvalue(...) + local v = Flag.cfgvalue(...) + return v == "1" and "0" or "1" +end +function o.write(self, section, value) + Flag.write(self, section, value == "1" and "0" or "1") +end + +o = s3:option(DummyValue, "interface", translate("Interface")) +o.template = "cbi/network_netinfo" +o.width = "10%" + +o = s3:option(DummyValue, "prefix", translate("Prefix")) +o.width = "60%" +o.cfgvalue = pfx.cfgvalue + +o = s3:option(DummyValue, "AdvRouteLifetime", translate("Lifetime")) +function o.cfgvalue(self, section) + local v = Value.cfgvalue(self, section) or "1800" + return translate(v) +end + +o = s3:option(DummyValue, "AdvRoutePreference", translate("Preference")) +function o.cfgvalue(self, section) + local v = Value.cfgvalue(self, section) or "medium" + return translate(v) +end + + +-- +-- RDNSS +-- + +s4 = m:section(TypedSection, "rdnss", translate("RDNSS")) +s4.template = "cbi/tblsection" +s4.extedit = luci.dispatcher.build_url("admin/network/radvd/rdnss/%s") +s4.addremove = true +s4.anonymous = true + +function s4.create(...) + local id = TypedSection.create(...) + luci.http.redirect(s4.extedit % id) +end + + +o = s4:option(Flag, "ignore", translate("Enable")) +o.rmempty = false +o.width = "30px" +function o.cfgvalue(...) + local v = Flag.cfgvalue(...) + return v == "1" and "0" or "1" +end +function o.write(self, section, value) + Flag.write(self, section, value == "1" and "0" or "1") +end + +o = s4:option(DummyValue, "interface", translate("Interface")) +o.template = "cbi/network_netinfo" +o.width = "10%" + +o = s4:option(DummyValue, "addr", translate("Address")) +o.width = "60%" +o.cfgvalue = pfx.cfgvalue + +o = s4:option(DummyValue, "AdvRDNSSLifetime", translate("Lifetime")) +function o.cfgvalue(self, section) + local v = Value.cfgvalue(self, section) or "1200" + return translate(v) +end + + +-- +-- DNSSL +-- + +s5 = m:section(TypedSection, "dnssl", translate("DNSSL")) +s5.template = "cbi/tblsection" +s5.extedit = luci.dispatcher.build_url("admin/network/radvd/dnssl/%s") +s5.addremove = true +s5.anonymous = true + +function s5.create(...) + local id = TypedSection.create(...) + luci.http.redirect(s5.extedit % id) +end + + +o = s5:option(Flag, "ignore", translate("Enable")) +o.rmempty = false +o.width = "30px" +function o.cfgvalue(...) + local v = Flag.cfgvalue(...) + return v == "1" and "0" or "1" +end +function o.write(self, section, value) + Flag.write(self, section, value == "1" and "0" or "1") +end + +o = s5:option(DummyValue, "interface", translate("Interface")) +o.template = "cbi/network_netinfo" +o.width = "10%" + +o = s5:option(DummyValue, "suffix", translate("Suffix")) +o.width = "60%" +function o.cfgvalue(self, section) + local v = m.uci:get_list("radvd", section, "suffix") + local l = { } + + for v in ut.imatch(v) do + l[#l+1] = v + end + + if #l == 0 then + l[1] = "?" + end + + return table.concat(l, ", ") +end + +o = s5:option(DummyValue, "AdvDNSSLLifetime", translate("Lifetime")) +function o.cfgvalue(self, section) + local v = Value.cfgvalue(self, section) or "1200" + return translate(v) +end + + +return m diff --git a/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/dnssl.lua b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/dnssl.lua new file mode 100644 index 0000000..d331c25 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/dnssl.lua @@ -0,0 +1,88 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local sid = arg[1] +local utl = require "luci.util" + +m = Map("radvd", translatef("Radvd - DNSSL"), + translate("Radvd is a router advertisement daemon for IPv6. " .. + "It listens to router solicitations and sends router advertisements " .. + "as described in RFC 4861.")) + +m.redirect = luci.dispatcher.build_url("admin/network/radvd") + +if m.uci:get("radvd", sid) ~= "dnssl" then + luci.http.redirect(m.redirect) + return +end + + +s = m:section(NamedSection, sid, "interface", translate("DNSSL Configuration")) +s.addremove = false + + +-- +-- General +-- + +o = s:option(Flag, "ignore", translate("Enable")) +o.rmempty = false + +function o.cfgvalue(...) + local v = Flag.cfgvalue(...) + return v == "1" and "0" or "1" +end + +function o.write(self, section, value) + Flag.write(self, section, value == "1" and "0" or "1") +end + + +o = s:option(Value, "interface", translate("Interface"), + translate("Specifies the logical interface name this section belongs to")) + +o.template = "cbi/network_netlist" +o.nocreate = true +o.optional = false + +function o.formvalue(...) + return Value.formvalue(...) or "-" +end + +function o.validate(self, value) + if value == "-" then + return nil, translate("Interface required") + end + return value +end + +function o.write(self, section, value) + m.uci:set("radvd", section, "ignore", 0) + m.uci:set("radvd", section, "interface", value) +end + + +o = s:option(DynamicList, "suffix", translate("Suffix"), + translate("Advertised Domain Suffixes")) + +o.optional = false +o.rmempty = false +o.datatype = "hostname" +function o.cfgvalue(self, section) + local l = { } + local v = m.uci:get_list("radvd", section, "suffix") + for v in utl.imatch(v) do + l[#l+1] = v + end + return l +end + + +o = s:option(Value, "AdvDNSSLLifetime", translate("Lifetime"), + translate("Specifies the maximum duration how long the DNSSL entries are used for name resolution.")) + +o.datatype = 'or(uinteger,"infinity")' +o.placeholder = 1200 + + +return m diff --git a/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/interface.lua b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/interface.lua new file mode 100644 index 0000000..e5d0322 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/interface.lua @@ -0,0 +1,265 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local sid = arg[1] +local utl = require "luci.util" + +m = Map("radvd", translatef("Radvd - Interface %q", "?"), + translate("Radvd is a router advertisement daemon for IPv6. " .. + "It listens to router solicitations and sends router advertisements " .. + "as described in RFC 4861.")) + +m.redirect = luci.dispatcher.build_url("admin/network/radvd") + +if m.uci:get("radvd", sid) ~= "interface" then + luci.http.redirect(m.redirect) + return +end + +m.uci:foreach("radvd", "interface", + function(s) + if s['.name'] == sid and s.interface then + m.title = translatef("Radvd - Interface %q", s.interface) + return false + end + end) + + +s = m:section(NamedSection, sid, "interface", translate("Interface Configuration")) +s.addremove = false + +s:tab("general", translate("General")) +s:tab("timing", translate("Timing")) +s:tab("mobile", translate("Mobile IPv6")) + + +-- +-- General +-- + +o = s:taboption("general", Flag, "ignore", translate("Enable")) +o.rmempty = false + +function o.cfgvalue(...) + local v = Flag.cfgvalue(...) + return v == "1" and "0" or "1" +end + +function o.write(self, section, value) + Flag.write(self, section, value == "1" and "0" or "1") +end + + +o = s:taboption("general", Value, "interface", translate("Interface"), + translate("Specifies the logical interface name this section belongs to")) + +o.template = "cbi/network_netlist" +o.nocreate = true +o.optional = false + +function o.formvalue(...) + return Value.formvalue(...) or "-" +end + +function o.validate(self, value) + if value == "-" then + return nil, translate("Interface required") + end + return value +end + +function o.write(self, section, value) + m.uci:set("radvd", section, "ignore", 0) + m.uci:set("radvd", section, "interface", value) +end + + +o = s:taboption("general", DynamicList, "client", translate("Clients"), + translate("Restrict communication to specified clients, leave empty to use multicast")) + +o.rmempty = true +o.datatype = "ip6addr" +o.placeholder = "any" +function o.cfgvalue(...) + local v = Value.cfgvalue(...) + local l = { } + for v in utl.imatch(v) do + l[#l+1] = v + end + return l +end + + +o = s:taboption("general", Flag, "AdvSendAdvert", translate("Enable advertisements"), + translate("Enables router advertisements and solicitations")) + +o.rmempty = false +function o.write(self, section, value) + if value == "1" then + m.uci:set("radvd", section, "ignore", 0) + m.uci:set("radvd", section, "IgnoreIfMissing", 1) + end + + m.uci:set("radvd", section, "AdvSendAdvert", value) +end + + +o = s:taboption("general", Flag, "UnicastOnly", translate("Unicast only"), + translate("Indicates that the underlying link is not broadcast capable, prevents unsolicited advertisements from being sent")) + +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("general", Flag, "AdvManagedFlag", translate("Managed flag"), + translate("Enables the additional stateful administered autoconfiguration protocol (RFC2462)")) + +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("general", Flag, "AdvOtherConfigFlag", translate("Configuration flag"), + translate("Enables the autoconfiguration of additional, non address information (RFC2462)")) + +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("general", Flag, "AdvSourceLLAddress", translate("Source link-layer address"), + translate("Includes the link-layer address of the outgoing interface in the RA")) + +o.rmempty = false +o.default = "1" +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("general", Value, "AdvLinkMTU", translate("Link MTU"), + translate("Advertises the given link MTU in the RA if specified. 0 disables MTU advertisements")) + +o.datatype = "uinteger" +o.placeholder = 0 +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("general", Value, "AdvCurHopLimit", translate("Current hop limit"), + translate("Advertises the default Hop Count value for outgoing unicast packets in the RA. 0 disables hopcount advertisements")) + +o.datatype = "uinteger" +o.optional = false +o.placeholder = 64 +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("general", ListValue, "AdvDefaultPreference", translate("Default preference"), + translate("Advertises the default router preference")) + +o.optional = false +o.default = "medium" +o:value("low", translate("low")) +o:value("medium", translate("medium")) +o:value("high", translate("high")) +o:depends("AdvSendAdvert", "1") + + +-- +-- Timing +-- + +o = s:taboption("timing", Value, "MinRtrAdvInterval", translate("Minimum advertisement interval"), + translate("The minimum time allowed between sending unsolicited multicast router advertisements from the interface, in seconds")) + +o.datatype = "uinteger" +o.optional = false +o.placeholder = 198 +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("timing", Value, "MaxRtrAdvInterval", translate("Maximum advertisement interval"), + translate("The maximum time allowed between sending unsolicited multicast router advertisements from the interface, in seconds")) + +o.datatype = "uinteger" +o.optional = false +o.placeholder = 600 +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("timing", Value, "MinDelayBetweenRAs", translate("Minimum advertisement delay"), + translate("The minimum time allowed between sending multicast router advertisements from the interface, in seconds")) + +o.datatype = "uinteger" +o.optional = false +o.placeholder = 3 +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("timing", Value, "AdvReachableTime", translate("Reachable time"), + translate("Advertises assumed reachability time in milliseconds of neighbours in the RA if specified. 0 disables reachability advertisements")) + +o.datatype = "uinteger" +o.optional = false +o.placeholder = 0 +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("timing", Value, "AdvRetransTimer", translate("Retransmit timer"), + translate("Advertises wait time in milliseconds between Neighbor Solicitation messages in the RA if specified. 0 disables retransmit advertisements")) + +o.datatype = "uinteger" +o.optional = false +o.placeholder = 0 +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("timing", Value, "AdvDefaultLifetime", translate("Default lifetime"), + translate("Advertises the lifetime of the default router in seconds. 0 indicates that the node is no default router")) + +o.datatype = "uinteger" +o.optional = false +o.placeholder = 1800 +o:depends("AdvSendAdvert", "1") + + +-- +-- Mobile +-- + +o = s:taboption("mobile", Flag, "AdvHomeAgentFlag", translate("Advertise Home Agent flag"), + translate("Advertises Mobile IPv6 Home Agent capability (RFC3775)")) + +o:depends("AdvSendAdvert", "1") + + +o = s:taboption("mobile", Flag, "AdvIntervalOpt", translate("Mobile IPv6 interval option"), + translate("Include Mobile IPv6 Advertisement Interval option to RA")) + +o:depends({AdvHomeAgentFlag = "1", AdvSendAdvert = "1"}) + + +o = s:taboption("mobile", Flag, "AdvHomeAgentInfo", translate("Home Agent information"), + translate("Include Home Agent Information in the RA")) + +o:depends({AdvHomeAgentFlag = "1", AdvSendAdvert = "1"}) + + +o = s:taboption("mobile", Flag, "AdvMobRtrSupportFlag", translate("Mobile IPv6 router registration"), + translate("Advertises Mobile Router registration capability (NEMO Basic)")) + +o:depends({AdvHomeAgentInfo = "1", AdvSendAdvert = "1"}) + + +o = s:taboption("mobile", Value, "HomeAgentLifetime", translate("Home Agent lifetime"), + translate("Advertises the time in seconds the router is offering Mobile IPv6 Home Agent services")) + +o.datatype = "uinteger" +o.optional = false +o.placeholder = 1800 +o:depends({AdvHomeAgentInfo = "1", AdvSendAdvert = "1"}) + + +o = s:taboption("mobile", Value, "HomeAgentPreference", translate("Home Agent preference"), + translate("The preference for the Home Agent sending this RA")) + +o.datatype = "uinteger" +o.optional = false +o.placeholder = 0 +o:depends({AdvHomeAgentInfo = "1", AdvSendAdvert = "1"}) + + +return m diff --git a/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/prefix.lua b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/prefix.lua new file mode 100644 index 0000000..a2b4285 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/prefix.lua @@ -0,0 +1,128 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local sid = arg[1] +local utl = require "luci.util" + +m = Map("radvd", translatef("Radvd - Prefix"), + translate("Radvd is a router advertisement daemon for IPv6. " .. + "It listens to router solicitations and sends router advertisements " .. + "as described in RFC 4861.")) + +m.redirect = luci.dispatcher.build_url("admin/network/radvd") + +if m.uci:get("radvd", sid) ~= "prefix" then + luci.http.redirect(m.redirect) + return +end + + +s = m:section(NamedSection, sid, "interface", translate("Prefix Configuration")) +s.addremove = false + +s:tab("general", translate("General")) +s:tab("advanced", translate("Advanced")) + + +-- +-- General +-- + +o = s:taboption("general", Flag, "ignore", translate("Enable")) +o.rmempty = false + +function o.cfgvalue(...) + local v = Flag.cfgvalue(...) + return v == "1" and "0" or "1" +end + +function o.write(self, section, value) + Flag.write(self, section, value == "1" and "0" or "1") +end + + +o = s:taboption("general", Value, "interface", translate("Interface"), + translate("Specifies the logical interface name this section belongs to")) + +o.template = "cbi/network_netlist" +o.nocreate = true +o.optional = false + +function o.formvalue(...) + return Value.formvalue(...) or "-" +end + +function o.validate(self, value) + if value == "-" then + return nil, translate("Interface required") + end + return value +end + +function o.write(self, section, value) + m.uci:set("radvd", section, "ignore", 0) + m.uci:set("radvd", section, "interface", value) +end + + +o = s:taboption("general", DynamicList, "prefix", translate("Prefixes"), + translate("Advertised IPv6 prefixes. If empty, the current interface prefix is used")) + +o.optional = true +o.datatype = "ip6addr" +o.placeholder = translate("default") +function o.cfgvalue(self, section) + local l = { } + local v = m.uci:get_list("radvd", section, "prefix") + for v in utl.imatch(v) do + l[#l+1] = v + end + return l +end + + +o = s:taboption("general", Flag, "AdvOnLink", translate("On-link determination"), + translate("Indicates that this prefix can be used for on-link determination (RFC4861)")) + +o.rmempty = false +o.default = "1" + + +o = s:taboption("general", Flag, "AdvAutonomous", translate("Autonomous"), + translate("Indicates that this prefix can be used for autonomous address configuration (RFC4862)")) + +o.rmempty = false +o.default = "1" + + +-- +-- Advanced +-- + +o = s:taboption("advanced", Flag, "AdvRouterAddr", translate("Advertise router address"), + translate("Indicates that the address of interface is sent instead of network prefix, as is required by Mobile IPv6")) + + +o = s:taboption("advanced", Value, "AdvValidLifetime", translate("Valid lifetime"), + translate("Advertises the length of time in seconds that the prefix is valid for the purpose of on-link determination.")) + +o.datatype = 'or(uinteger,"infinity")' +o.placeholder = 86400 + + +o = s:taboption("advanced", Value, "AdvPreferredLifetime", translate("Preferred lifetime"), + translate("Advertises the length of time in seconds that addresses generated from the prefix via stateless address autoconfiguration remain preferred.")) + +o.datatype = 'or(uinteger,"infinity")' +o.placeholder = 14400 + + +o = s:taboption("advanced", Value, "Base6to4Interface", translate("6to4 interface"), + translate("Specifies a logical interface name to derive a 6to4 prefix from. The interfaces public IPv4 address is combined with 2002::/3 and the value of the prefix option")) + +o.template = "cbi/network_netlist" +o.nocreate = true +o.unspecified = true + + +return m diff --git a/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/rdnss.lua b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/rdnss.lua new file mode 100644 index 0000000..d6588ac --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/rdnss.lua @@ -0,0 +1,89 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local sid = arg[1] +local utl = require "luci.util" + +m = Map("radvd", translatef("Radvd - RDNSS"), + translate("Radvd is a router advertisement daemon for IPv6. " .. + "It listens to router solicitations and sends router advertisements " .. + "as described in RFC 4861.")) + +m.redirect = luci.dispatcher.build_url("admin/network/radvd") + +if m.uci:get("radvd", sid) ~= "rdnss" then + luci.http.redirect(m.redirect) + return +end + + +s = m:section(NamedSection, sid, "interface", translate("RDNSS Configuration")) +s.addremove = false + + +-- +-- General +-- + +o = s:option(Flag, "ignore", translate("Enable")) +o.rmempty = false + +function o.cfgvalue(...) + local v = Flag.cfgvalue(...) + return v == "1" and "0" or "1" +end + +function o.write(self, section, value) + Flag.write(self, section, value == "1" and "0" or "1") +end + + +o = s:option(Value, "interface", translate("Interface"), + translate("Specifies the logical interface name this section belongs to")) + +o.template = "cbi/network_netlist" +o.nocreate = true +o.optional = false + +function o.formvalue(...) + return Value.formvalue(...) or "-" +end + +function o.validate(self, value) + if value == "-" then + return nil, translate("Interface required") + end + return value +end + +function o.write(self, section, value) + m.uci:set("radvd", section, "ignore", 0) + m.uci:set("radvd", section, "interface", value) +end + + +o = s:option(DynamicList, "addr", translate("Addresses"), + translate("Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface is used")) + +o.optional = false +o.rmempty = true +o.datatype = "ip6addr" +o.placeholder = translate("default") +function o.cfgvalue(self, section) + local l = { } + local v = m.uci:get_list("radvd", section, "addr") + for v in utl.imatch(v) do + l[#l+1] = v + end + return l +end + + +o = s:option(Value, "AdvRDNSSLifetime", translate("Lifetime"), + translate("Specifies the maximum duration how long the RDNSS entries are used for name resolution.")) + +o.datatype = 'or(uinteger,"infinity")' +o.placeholder = 1200 + + +return m diff --git a/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/route.lua b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/route.lua new file mode 100644 index 0000000..1aac27a --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/luasrc/model/cbi/radvd/route.lua @@ -0,0 +1,97 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local sid = arg[1] +local utl = require "luci.util" + +m = Map("radvd", translatef("Radvd - Route"), + translate("Radvd is a router advertisement daemon for IPv6. " .. + "It listens to router solicitations and sends router advertisements " .. + "as described in RFC 4861.")) + +m.redirect = luci.dispatcher.build_url("admin/network/radvd") + +if m.uci:get("radvd", sid) ~= "route" then + luci.http.redirect(m.redirect) + return +end + + +s = m:section(NamedSection, sid, "interface", translate("Route Configuration")) +s.addremove = false + + +-- +-- General +-- + +o = s:option(Flag, "ignore", translate("Enable")) +o.rmempty = false + +function o.cfgvalue(...) + local v = Flag.cfgvalue(...) + return v == "1" and "0" or "1" +end + +function o.write(self, section, value) + Flag.write(self, section, value == "1" and "0" or "1") +end + + +o = s:option(Value, "interface", translate("Interface"), + translate("Specifies the logical interface name this section belongs to")) + +o.template = "cbi/network_netlist" +o.nocreate = true +o.optional = false + +function o.formvalue(...) + return Value.formvalue(...) or "-" +end + +function o.validate(self, value) + if value == "-" then + return nil, translate("Interface required") + end + return value +end + +function o.write(self, section, value) + m.uci:set("radvd", section, "ignore", 0) + m.uci:set("radvd", section, "interface", value) +end + + +o = s:option(DynamicList, "prefix", translate("Prefixes"), + translate("Advertised IPv6 prefixes")) + +o.rmempty = false +o.datatype = "ip6addr" +o.placeholder = translate("default") +function o.cfgvalue(self, section) + local l = { } + local v = m.uci:get_list("radvd", section, "prefix") + for v in utl.imatch(v) do + l[#l+1] = v + end + return l +end + + +o = s:option(Value, "AdvRouteLifetime", translate("Lifetime"), + translate("Specifies the lifetime associated with the route in seconds.")) + +o.datatype = 'or(uinteger,"infinity")' +o.placeholder = 1800 + + +o = s:option(ListValue, "AdvRoutePreference", translate("Preference"), + translate("Specifies the preference associated with the default router")) + +o.default = "medium" +o:value("low", translate("low")) +o:value("medium", translate("medium")) +o:value("high", translate("high")) + + +return m diff --git a/feeds/luci/applications/luci-app-radvd/po/ca/radvd.po b/feeds/luci/applications/luci-app-radvd/po/ca/radvd.po new file mode 100644 index 0000000..a9a317d --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/ca/radvd.po @@ -0,0 +1,382 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-02 21:41+0200\n" +"Last-Translator: Alex \n" +"Language-Team: German\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "6to4 interface" +msgstr "Interfície 6to4" + +msgid "Address" +msgstr "Adreça" + +msgid "Addresses" +msgstr "Adreces" + +msgid "Advanced" +msgstr "Avançat" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "" + +msgid "Advertised Domain Suffixes" +msgstr "Sufixos de domini publicats" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "Prefixos IPv6 publicats" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "Publicació" + +msgid "Autonomous" +msgstr "Autònom" + +msgid "Clients" +msgstr "Clients" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "Configuració DNSSL" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "Preferència per defecte" + +msgid "Enable" +msgstr "Habilita" + +msgid "Enable advertisements" +msgstr "Habilita la publicitat" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "General" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" +"Indica que la enllaç subjacent no és capaç de la difusió, prevén que les " +"publicitats no sol·licitats es enviïn" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "Interfície" + +msgid "Interface Configuration" +msgstr "Configuració d'interfície" + +msgid "Interface required" +msgstr "Interfície requerida" + +msgid "Interfaces" +msgstr "Interfícies" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "IPv6 mòbil" + +msgid "Mobile IPv6 interval option" +msgstr "Opció d'interval d'IPv6 mòbil" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "Difusió selectiva" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "Prefix" + +msgid "Prefix Configuration" +msgstr "Configuració de prefix" + +msgid "Prefixes" +msgstr "Prefixos" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "Configuració RDNSS" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - Interfície %q" + +msgid "Radvd - Prefix" +msgstr "Radvd - Prefix" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - Ruta" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" +"El Radvd és un dimoni de publicitat d'encaminador per IPv6. Escolta per " +"sol·licituds i envia publicitats d'encaminador com descrit en RFC 4861." + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" +"Restringeix la comunicació a clients especificats, deixeu en blanc per " +"utilitzar la difusió selectiva" + +msgid "Retransmit timer" +msgstr "Temporitzador de retransmissió" + +msgid "Route Configuration" +msgstr "Configuració de ruta" + +msgid "Routes" +msgstr "Rutes" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "Sufix" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"El temps màxim permès entre enviar publicitats d'encaminador de difusió " +"selectiva no sol·licitats des de la interfície, en segons" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" +"El temps mínim permès entre enviar publicitats d'encaminador de difusió " +"selectiva des de la interfície, en segons" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"El temps mínim permès entre enviar publicitats d'encaminador de difusió " +"selectiva no sol·licitats des de la interfície, en segons" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "Sincronització" + +msgid "Unicast only" +msgstr "Només unidifusió" + +msgid "Valid lifetime" +msgstr "Durada de vida vàlida" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "per defecte" + +msgid "high" +msgstr "alt" + +msgid "low" +msgstr "baix" + +msgid "medium" +msgstr "mitjà" + +msgid "no" +msgstr "no" + +msgid "yes" +msgstr "sí" diff --git a/feeds/luci/applications/luci-app-radvd/po/cs/radvd.po b/feeds/luci/applications/luci-app-radvd/po/cs/radvd.po new file mode 100644 index 0000000..ab4e4af --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/cs/radvd.po @@ -0,0 +1,389 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-08-04 19:04+0200\n" +"Last-Translator: KubaCZ \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "6to4 interface" +msgstr "6to4 rozhraní" + +msgid "Address" +msgstr "Adresa" + +msgid "Addresses" +msgstr "Adresy" + +msgid "Advanced" +msgstr "Pokročilé" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "Oznamovat adresu routeru" + +msgid "Advertised Domain Suffixes" +msgstr "Oznamované doménové přípony" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"Oznamované IPv6 RDNSS. Pokud prázdné, bude použita stávající IPv6 adresa " +"rozhraní." + +msgid "Advertised IPv6 prefixes" +msgstr "Oznamované IPv6 prefixy" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Oznamované IPv6 prefixy. Pokud prázdné, bude použit stávající prefix na " +"rozhraní." + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" +"Oznamovaná doba za kterou by sousední stroje měly být dosažitelné. 0 znamená " +"neoznamovat." + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" +"Oznamovaný výchozí počet hopů pro odchozí unicast pakety. 0 vypne oznamování " +"počtu hopů." + +msgid "Advertises the default router preference" +msgstr "Oznamovaný preferovaný router." + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "Oznamovat MTU linky. 0 vypne oznamování MTU." + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" +"Oznamovaný počet sekund po kterých adresa generovaná z prefixu bezestavové " +"konfigurace zůstává preferovaná." + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" +"Oznamovaný počet sekund po kterou je prefix validní pro potřeby zjištění " +"stavu on-link/off-link." + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" +"Oznamovaný počet sekund k vypršení platnosti preference routeru. 0 zančí že " +"není žádný router preferován." + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" +"Oznamovaný počet sekund k vypršení nabízení služeb Mobile IPv6 Home Agenta" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" +"Oznamovaný počet milisekund mezi Neighbor Solicitation zprávamy. 0 vypne " +"oznamování." + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "Autonomní" + +msgid "Clients" +msgstr "Klienti" + +msgid "Configuration flag" +msgstr "Konfigurační volba" + +msgid "Current hop limit" +msgstr "Aktuální limit počtu hopů" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "Konfigurace DNSSL" + +msgid "Default lifetime" +msgstr "Výchozí časový limit" + +msgid "Default preference" +msgstr "Výchozí preference" + +msgid "Enable" +msgstr "Povolit" + +msgid "Enable advertisements" +msgstr "Povolit oznamování" + +msgid "Enables router advertisements and solicitations" +msgstr "Povolí oznamování routeru a hledání sousedů" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" +"Povolí přídavný stavový administrovaný autokonfigurační protokol (RFC2462)" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "Povolí autokonfiguraci přídavného, neadresních informací (RFC2462)" + +msgid "General" +msgstr "Obecné" + +msgid "Home Agent information" +msgstr "Informace Home Agenta" + +msgid "Home Agent lifetime" +msgstr "Časový limit Home Agenta" + +msgid "Home Agent preference" +msgstr "Preferovaný Home Agent" + +msgid "Include Home Agent Information in the RA" +msgstr "Zahrnout informace o Home Agentovi v oznámeních" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "Rozhraní" + +msgid "Interface Configuration" +msgstr "Konfigurace rozhraní" + +msgid "Interface required" +msgstr "Rozhraní vyžadováno" + +msgid "Interfaces" +msgstr "Rozhraní" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "Max. interval" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "Multicast" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "Prefix" + +msgid "Prefix Configuration" +msgstr "Nastavení prefixu" + +msgid "Prefixes" +msgstr "Prefixy" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "Konfigurace RDNSS" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - rozhraní %q" + +msgid "Radvd - Prefix" +msgstr "Radvd - Prefix" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - Route" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "Dostupný čas" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "Trasy" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "Suffix" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "Načasování" + +msgid "Unicast only" +msgstr "Pouze unicast" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "Doba platnosti" + +msgid "default" +msgstr "výchozí" + +msgid "high" +msgstr "vysoká" + +msgid "low" +msgstr "nízká" + +msgid "medium" +msgstr "střední" + +msgid "no" +msgstr "ne" + +# ano +msgid "yes" +msgstr "ano" diff --git a/feeds/luci/applications/luci-app-radvd/po/de/radvd.po b/feeds/luci/applications/luci-app-radvd/po/de/radvd.po new file mode 100644 index 0000000..a294619 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/de/radvd.po @@ -0,0 +1,483 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-15 16:46+0200\n" +"Last-Translator: Jo-Philipp \n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "6to4 interface" +msgstr "6to4-Schnittstelle" + +msgid "Address" +msgstr "Adresse" + +msgid "Addresses" +msgstr "Adressen" + +msgid "Advanced" +msgstr "Erweitert" + +msgid "Advertise Home Agent flag" +msgstr "Home-Agent Funktionalität ankündigen" + +msgid "Advertise router address" +msgstr "Router-Adresse ankündigen" + +msgid "Advertised Domain Suffixes" +msgstr "Angekündigte Domain-Suffixes" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"Angekündigte rekursive IPv6 DNS Server. Wenn leer wird die aktuelle IPv6-" +"Adresse der Schnittstelle verwendet" + +msgid "Advertised IPv6 prefixes" +msgstr "Angekündigte IPv6-Prefixe" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Angekündigte IPv6-Subnetze in CIDR-Notation. Wenn leer wird das aktuelle " +"IPv6-Prefix der Schnittstelle verwendet" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "Kündigt \"Mobile IPv6 Home Agent\"-Fähigkeit an (RFC3775)" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "Kündigt \"Mobile Router Registration\"-Fähigkeit an (NEMO Basic)" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" +"Kündigt die angenommene Erreichbarkeit von Nachbarn als Zeitspanne in " +"Millisekunden an, sofern gegeben. Der Wert \"0\" deaktiviert " +"Erreichbarkeitsankündigungen" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" +"Kündigt den Standard Hop-Count-Wert für ausgehende Unicast-Pakete an. Der " +"Wert \"0\" deaktiviert Hop-Count-Ankündigungen" + +msgid "Advertises the default router preference" +msgstr "Kündigt das Vorhandensein des Default-Routers an" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" +"Kündigt die gegebene Verbindungs-MTU an wenn gegeben. Der Wert \"0\" " +"deaktiviert MTU-Ankündigungen" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" +"Kündigt den Zeitraum an, in dem die vom angekündigtem Prefix generierte " +"Adresse bevorzugt bleibt, als Zeitspanne in Sekunden." + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" +"Kündigt den Zeitraum in Sekunden an, in dem der Prefix für On-Link-" +"Ermittlung gültig ist." + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" +"Kündigt die Gültigskeitsdauer des Defaultrouters in Sekunden an. Der Wert \"0" +"\" impliziert dass dieser Knoten kein Default-Router ist" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" +"Kündigt die Zeitspanne in Sekunden an, in der der Router \"Mobile IPv6 Home " +"Agent\"-Dienste anbietet" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" +"Kündigt die vorgegebene Wartezeit zwischen wiederholt versendeten Neighbor-" +"Solicitation-Nachrichten als Zeitspanne in Millisekunden an, wenn gegeben. " +"Der Wert \"0\" deaktiviert die Ankündigung der Wartezeit" + +msgid "Advertising" +msgstr "Ankündigend" + +msgid "Autonomous" +msgstr "Autonom" + +msgid "Clients" +msgstr "Clienten" + +msgid "Configuration flag" +msgstr "Konfigurations-Bit" + +msgid "Current hop limit" +msgstr "Aktuelles Hop-Limit" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "DNSSL-Konfiguration" + +msgid "Default lifetime" +msgstr "Standard-Gültigkeitszeitraum" + +msgid "Default preference" +msgstr "Standard-Priorität" + +msgid "Enable" +msgstr "Aktivieren" + +msgid "Enable advertisements" +msgstr "Ankündigungen aktivieren" + +msgid "Enables router advertisements and solicitations" +msgstr "Aktiviert Router-Ankündigungen und Solicitations" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" +"Aktiviert das zusätzliche \"Stateful Administered Autoconfiguration Protocol" +"\" (RFC2462)" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" +"Aktiviert die Auto-Konfiguration von zusätzlichen, Nicht-Adress-" +"Eigenschaften (RFC2462)" + +msgid "General" +msgstr "Allgemein" + +msgid "Home Agent information" +msgstr "Home-Agent-Information" + +msgid "Home Agent lifetime" +msgstr "Home-Agent-Gültigkeitsdauer" + +msgid "Home Agent preference" +msgstr "Home-Agent-Priorität" + +msgid "Include Home Agent Information in the RA" +msgstr "Home-Agent-Informationen in die RA-Nachricht einfügen" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "Mobile-IPv6-Ankündigungsintervall in die RA-Nachricht einfügen" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" +"Link-Layer-Adresse der ausgehenden Schnittstelle in die RA-Nachricht einfügen" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" +"Zeigt an, dass die Adresse der Schnittstelle statt einem Netzwerk-Prefix " +"gesendet wird - benötigt für Mobile IPv6" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" +"Zeigt an, dass die zugrundeliegende Verbindung keinen Broadcast-Verkehr " +"beherrscht, verhindert das Senden unaufgeforderter Ankündigungsnachrichten" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" +"Zeigt an, dass das angekündigte Prefix für autonome Adress-Konfiguration " +"genutzt werden kann (RFC4862)" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" +"Zeigt an, dass das Prefix für On-Link-Ermittlungen genutzt werden kann " +"(RFC4861)" + +msgid "Interface" +msgstr "Schnittstelle" + +msgid "Interface Configuration" +msgstr "Schnittstellenkonfiguration" + +msgid "Interface required" +msgstr "Schnittstelle benötigt" + +msgid "Interfaces" +msgstr "Schnittstellen" + +msgid "Lifetime" +msgstr "Gültigkeitsdauer" + +msgid "Link MTU" +msgstr "Verbindungs-MTU" + +msgid "Managed flag" +msgstr "Managed-Bit" + +msgid "Max. interval" +msgstr "Max. Intervall" + +msgid "Maximum advertisement interval" +msgstr "Maximales Ankündigungsintervall" + +msgid "Minimum advertisement delay" +msgstr "Minimale Ankündigungsverzögerung" + +msgid "Minimum advertisement interval" +msgstr "Minimales Ankündigungsintervall" + +msgid "Mobile IPv6" +msgstr "Mobile IPv6" + +msgid "Mobile IPv6 interval option" +msgstr "Mobile-IPv6-Intervall-Option" + +msgid "Mobile IPv6 router registration" +msgstr "Mobile-IPv6-Router-Registrierung" + +msgid "Multicast" +msgstr "Multicast" + +msgid "On-link" +msgstr "On-Link" + +msgid "On-link determination" +msgstr "On-Link-Ermittlung" + +msgid "Preference" +msgstr "Priorität" + +msgid "Preferred lifetime" +msgstr "Bevorzugte Gültigkeitsdauer" + +msgid "Prefix" +msgstr "Prefix" + +msgid "Prefix Configuration" +msgstr "Prefix-Konfiguration" + +msgid "Prefixes" +msgstr "Prefixes" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "RDNSS-Konfiguration" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - Schnittstelle %q" + +msgid "Radvd - Prefix" +msgstr "Radvd - Prefix" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - Route" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" +"Radvd ist ein Router-Advertisement-Dienst für IPv6. Er hört auf Router-" +"Solicitations und sendet Ankündigungen wie in RFC 4861 spezifiziert." + +msgid "Reachable time" +msgstr "Erreichbarkeitsdauer" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" +"Kommunikation auf angegebene Clients beschränken, leer lassen um Multicast " +"zu nutzen" + +msgid "Retransmit timer" +msgstr "Taktung von Neu-Übertragungen" + +msgid "Route Configuration" +msgstr "Routen-Konfiguration" + +msgid "Routes" +msgstr "Routen" + +msgid "Source link-layer address" +msgstr "Quell-Link-Layer-Adresse" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" +"Spezifiziert eine Schnittstelle, von welcher das 6to4-Prefix abgeleitet " +"wird. Die öffentliche IPv4-Adresse der Schnittstelle wird dazu mit dem " +"Subnetz 2002::/3 und dem Wert der Prefix-Option kombiniert" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "Bestimmt die Gültigkeitsdauer dieser Route." + +msgid "Specifies the logical interface name this section belongs to" +msgstr "Bestimmt die Schnittstelle, zu welcher diese Sektion gehört" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" +"Bestimmt die maximale Dauer, für welche die DNSSL-Einträge gültig zur " +"Namensauflösung sind." + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" +"Bestimmt die maximale Dauer, für welche die RDNSS-Einträge gültig zur " +"Namensauflösung sind." + +msgid "Specifies the preference associated with the default router" +msgstr "Bestimmt die mit diesem Router assoziierte Priorität" + +msgid "Suffix" +msgstr "Suffix" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"Die maximal erlaubte Wartezeit zwischen dem Versand aufeinanderfolgender, " +"unaufgeforderter Mutlicast-Router-Ankündigungen auf dieser Schnittstelle als " +"Zeitspanne in Sekunden" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" +"Die minimal erlaubte Wartezeit zwischen dem Versand aufeinanderfolgender " +"Router-Ankündigungen auf dieser Schnittstelle als Zeitspanne in Sekunden" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"Die minimal erlaubte Wartezeit zwischen dem Versand aufeinanderfolgender, " +"unaufgeforderter Mutlicast-Router-Ankündigungen auf dieser Schnittstelle als " +"Zeitspanne in Sekunden" + +msgid "The preference for the Home Agent sending this RA" +msgstr "Die Priorität des ankündigendem \"IPv6 Home Agent\"" + +msgid "Timing" +msgstr "Taktung" + +msgid "Unicast only" +msgstr "Nur Unicast" + +msgid "Valid lifetime" +msgstr "Gültigkeitsdauer" + +msgid "Validity time" +msgstr "Gültigkeitsdauer" + +msgid "default" +msgstr "Standard" + +msgid "high" +msgstr "hoch" + +msgid "low" +msgstr "niedrig" + +msgid "medium" +msgstr "mittel" + +msgid "no" +msgstr "nein" + +msgid "yes" +msgstr "ja" + +#~ msgid "Advertised IPv6 prefix" +#~ msgstr "Angekündigtes IPv6-Prefix" + +#~ msgid "" +#~ "Advertised IPv6 prefix. If empty, the current interface prefix is used" +#~ msgstr "" +#~ "Angekündigtes IPv6-Subnetz in CIDR-Notation. Wenn leer wird das aktuelle " +#~ "IPv6-Prefix der Schnittstelle verwendet" + +#~ msgid "" +#~ "Advertises the length of time in seconds that addresses generated from " +#~ "the prefix via stateless address autoconfiguration remain preferred. Use " +#~ "0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Kündigt den Zeitraum an, in dem die vom angekündigtem Prefix generierte " +#~ "Adresse bevorzugt bleibt, als Zeitspanne in Sekunden. Der Wert \"0\" " +#~ "spezifiziert eine unbegrenzte Gültigkeitsspanne" + +#~ msgid "" +#~ "Advertises the length of time in seconds that the prefix is valid for the " +#~ "purpose of on-link determination. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Kündigt den Zeitraum in Sekunden an, in dem der Prefix für On-Link-" +#~ "Ermittlung gültig ist. Der Wert \"0\" spezifiziert eine unbegrenzte " +#~ "Gültigkeitsspanne" + +#~ msgid "" +#~ "Indicates whether that RDNSS continues to be available to hosts even if " +#~ "they moved to a different subnet" +#~ msgstr "" +#~ "Zeigt an, ob dieser rekursive DNS Server von anderen Subnetzen aus " +#~ "verfügbar bleibt" + +#~ msgid "Open" +#~ msgstr "Offen" + +#~ msgid "" +#~ "Specifies the lifetime associated with the route in seconds. Use 0 to " +#~ "specify an infinite lifetime" +#~ msgstr "" +#~ "Bestimmt die Gültigkeitsdauer dieser Route. Der Wert \"0\" spezifiziert " +#~ "einen unbegrenzten Zeitraum" + +#~ msgid "" +#~ "Specifies the maximum duration how long the DNSSL entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Bestimmt die maximale Dauer, für welche die DNSSL-Einträge gültig zur " +#~ "Namensauflösung sind. Der Wert \"0\" spezifiziert einen unbegrenzten " +#~ "Zeitraum" + +#~ msgid "" +#~ "Specifies the maximum duration how long the RDNSS entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Bestimmt die maximale Dauer, für welche die RDNSS-Einträge gültig zur " +#~ "Namensauflösung sind. Der Wert \"0\" spezifiziert einen unbegrenzten " +#~ "Zeitraum" diff --git a/feeds/luci/applications/luci-app-radvd/po/el/radvd.po b/feeds/luci/applications/luci-app-radvd/po/el/radvd.po new file mode 100644 index 0000000..00763c9 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/el/radvd.po @@ -0,0 +1,370 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-18 15:31+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: German\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "6to4 interface" +msgstr "Διεπαφή 6to4" + +msgid "Address" +msgstr "Διεύθυνση" + +msgid "Addresses" +msgstr "Διευθύνσεις" + +msgid "Advanced" +msgstr "" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "" + +msgid "Advertised Domain Suffixes" +msgstr "" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "Πελάτες" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "Ενεργοποίηση" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "Διεπαφή" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "Διεπαφές" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - Διεπαφή %q" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - Διαδρομή" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "Διαδρομές" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "όχι" + +msgid "yes" +msgstr "ναι" diff --git a/feeds/luci/applications/luci-app-radvd/po/en/radvd.po b/feeds/luci/applications/luci-app-radvd/po/en/radvd.po new file mode 100644 index 0000000..63f8fa0 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/en/radvd.po @@ -0,0 +1,368 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2010-11-21 04:06+0100\n" +"Last-Translator: \n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "6to4 interface" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Addresses" +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "" + +msgid "Advertised Domain Suffixes" +msgstr "" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radvd/po/es/radvd.po b/feeds/luci/applications/luci-app-radvd/po/es/radvd.po new file mode 100644 index 0000000..8656192 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/es/radvd.po @@ -0,0 +1,412 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-08-26 17:12+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: German\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "6to4 interface" +msgstr "Interfaz 6a4" + +msgid "Address" +msgstr "Dirección" + +msgid "Addresses" +msgstr "Direcciones" + +msgid "Advanced" +msgstr "Avanzado" + +msgid "Advertise Home Agent flag" +msgstr "Publicar marca de agente personal" + +msgid "Advertise router address" +msgstr "Publicar dirección del router" + +msgid "Advertised Domain Suffixes" +msgstr "Publicar sufijos de dominio" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"RDNSS IPv6 publicado. Dejar en blanco para usar la dirección IPv6 de la " +"interfaz" + +msgid "Advertised IPv6 prefixes" +msgstr "Prefijo IPv6 publicado" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Prefijos IPv6 publicados. Dejar en blanco para usar el propio del interfaz" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "Publica aptitudes móviles IPv6 del Home Agent (RFC3775)" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "Publica las aptitudes de registro del router móvil" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" +"Publica el alcance asumido en milisegundos de los vecinos en la RA si se " +"especifica. 0 para desactivar" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" +"Publica la cuenta de saltos para paquetes salientes en el RA. Desactivar con " +"0" + +msgid "Advertises the default router preference" +msgstr "Publica la preferencia de router por defecto" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "Publica el MTU del enlace en la RA si se especifica. Desactivar con 0" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" +"Publica el tiempo de vida en segundos que se prefieren las direcciones " +"generadas desde el prefijo vía una dirección de autoconfiguración sin estado." + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" +"Publica el tiempo en segundos que el prefijo es válido para determinar que " +"el enlace está activo." + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" +"Publica tiempo de vida del router por defecto en segundos. 0 si el router no " +"lo es" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" +"Publica tiempo en segundos que router ofrece servicios de Home Agent para " +"IPv6 móvil" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" +"Publicar el tiempo de espera en milisegundos entre mensajes de solicitud de " +"vecinos en la RA. Desactivar con 0" + +msgid "Advertising" +msgstr "Publicación" + +msgid "Autonomous" +msgstr "Autónomo" + +msgid "Clients" +msgstr "Clientes" + +msgid "Configuration flag" +msgstr "Marca de configuración" + +msgid "Current hop limit" +msgstr "Límite de saltos actual" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "Configuración DNSSL" + +msgid "Default lifetime" +msgstr "Vida por defecto" + +msgid "Default preference" +msgstr "Preferencia por defecto" + +msgid "Enable" +msgstr "Activar" + +msgid "Enable advertisements" +msgstr "Activar publicaciones" + +msgid "Enables router advertisements and solicitations" +msgstr "Activar publicaciones y solicitudes de router" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "Activa el protocolo adicional de autoconfiguración de estado (RFC2462)" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" +"Activa la configuración de información adicional que no sea de dirección " +"(RFC2462)" + +msgid "General" +msgstr "General" + +msgid "Home Agent information" +msgstr "Información del \"Home Agent\"" + +msgid "Home Agent lifetime" +msgstr "Vida del \"Home Agent\"" + +msgid "Home Agent preference" +msgstr "Preferencia del \"Home Agent\"" + +msgid "Include Home Agent Information in the RA" +msgstr "Incluir información del \"Home Agent\" en el RA" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "Incluir la opción de publicación móvil IPv6 a RA" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" +"Incluye la dirección de capa de enlace para el interfaz saliente en la RA" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" +"Se enviará la dirección del interfaz en vez del prefijo de red tal y como se " +"requiere par IPv6 móvil" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" +"El enlace inferior no puede hacer redifusión, no se pueden enviar " +"publicaciones no solicitadas" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" +"Este prefijo se puede usar como una dirección autónoma de configuración " +"(RFC4862)" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" +"Este prefijo se puede usar para determinación de enlace activado (RFC4861)" + +msgid "Interface" +msgstr "Interfaz" + +msgid "Interface Configuration" +msgstr "Configuración de la interfaz" + +msgid "Interface required" +msgstr "Se necesita una interfaz" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Lifetime" +msgstr "Vida" + +msgid "Link MTU" +msgstr "MTU del enlace" + +msgid "Managed flag" +msgstr "Marca de gestionado" + +msgid "Max. interval" +msgstr "Intervalo máximo" + +msgid "Maximum advertisement interval" +msgstr "Intervalo máximo de publicación" + +msgid "Minimum advertisement delay" +msgstr "Retraso mínimo de publicación" + +msgid "Minimum advertisement interval" +msgstr "Intervalo mínimo de publicación" + +msgid "Mobile IPv6" +msgstr "IPv6 móvil" + +msgid "Mobile IPv6 interval option" +msgstr "Opción de intervalo móvil IPv6" + +msgid "Mobile IPv6 router registration" +msgstr "Registro de router móvil IPv6" + +msgid "Multicast" +msgstr "Multidifusión" + +msgid "On-link" +msgstr "Enlace activado (On-link)" + +msgid "On-link determination" +msgstr "Determinar enlace activado" + +msgid "Preference" +msgstr "Preferencia" + +msgid "Preferred lifetime" +msgstr "Duración de vida preferida" + +msgid "Prefix" +msgstr "Prefijo" + +msgid "Prefix Configuration" +msgstr "Configuración del prefijo" + +msgid "Prefixes" +msgstr "Prefijos" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "Configuración RDNSS" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - Interfaz %q" + +msgid "Radvd - Prefix" +msgstr "Radvd - Prefijo" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - Ruta" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" +"Radvd es un demonio de publicación de enrutado de para IPv6. Atiende " +"solicitudes de ruta y envía anuncios de ruta como se describe en RFC4861." + +msgid "Reachable time" +msgstr "Tiempo alcanzable" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" +"Restringir comunicaciones a estos clientes, dejar en blanco para " +"multidifusión" + +msgid "Retransmit timer" +msgstr "Retraso de retransmisión" + +msgid "Route Configuration" +msgstr "Configuración de rutas" + +msgid "Routes" +msgstr "Rutas" + +msgid "Source link-layer address" +msgstr "Dirección origen de enlace de red" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" +"Nombre lógicos del interfaz del que derivar un prefijo 6to4. La dirección " +"IPv4 pública del interfaz se combina con 2002::/3 y el valor de la opción " +"\"prefijo\"" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "Tiempo de vida asociado a la ruta en segundos." + +msgid "Specifies the logical interface name this section belongs to" +msgstr "Nombre del interfaz lógico al que pertenece esta sección" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" +"Máximo tiempo que las entradas DNSSL se usan para resolución de nombres." + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" +"Máximo tiempo que las entradas RDNSS se usan para resolución de nombres." + +msgid "Specifies the preference associated with the default router" +msgstr "Preferencia asociada con el router por defecto" + +msgid "Suffix" +msgstr "Sufijo" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"Máximo tiempo en segundos entre envíos de publicaciones multidifusión desde " +"el interfaz" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" +"Mínimo tiempo en segundos entre envíos de publicaciones multidifusión desde " +"el interfaz" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"Mínimo tiempo en segundos entre envíos de publicaciones multidifusión no " +"solicitadas desde el interfaz" + +msgid "The preference for the Home Agent sending this RA" +msgstr "Preferencia que el Home Agent enviará a esta RA" + +msgid "Timing" +msgstr "Temporización" + +msgid "Unicast only" +msgstr "Solo unidifusión" + +msgid "Valid lifetime" +msgstr "Tiempo de vida válido" + +msgid "Validity time" +msgstr "Tiempo de validez" + +msgid "default" +msgstr "por defecto" + +msgid "high" +msgstr "alto" + +msgid "low" +msgstr "bajo" + +msgid "medium" +msgstr "medio" + +msgid "no" +msgstr "no" + +msgid "yes" +msgstr "sí" diff --git a/feeds/luci/applications/luci-app-radvd/po/fr/radvd.po b/feeds/luci/applications/luci-app-radvd/po/fr/radvd.po new file mode 100644 index 0000000..b26e6e0 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/fr/radvd.po @@ -0,0 +1,472 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-11-23 22:32+0200\n" +"Last-Translator: fredb \n" +"Language-Team: German\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "6to4 interface" +msgstr "Interface 6to4" + +msgid "Address" +msgstr "Adresse" + +msgid "Addresses" +msgstr "Adresses" + +msgid "Advanced" +msgstr "Avancé" + +msgid "Advertise Home Agent flag" +msgstr "Drapeau de publication de l'agent Personnel (Home Agent)" + +msgid "Advertise router address" +msgstr "Publier l'adresse du routeur" + +msgid "Advertised Domain Suffixes" +msgstr "Suffixes de domaines publiés" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"IPv6 RDNSS publié. S'il est vide, l'adresse IPv6 courante de l'interface est " +"utilisée" + +msgid "Advertised IPv6 prefixes" +msgstr "Préfixes IPv6 publiés" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Préfixes IPv6 publiés. Si c'est vide, le préfixe actuel de l'interface est " +"utilisé" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "Publie la capacité Home Agent d'IPv6 Mobile (RFC 3775)" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "Publie la capacité d'enregistrement d'un Routeur Mobile (NEMO basique)" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" +"Publie le temps d'accès présumé en milli-secondes des voisins dans le RA " +"s'il est spécifié. 0 désactive les publications d'accessibilité" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" +"Publie le nombre de sauts par défaut pour les paquets unicast sortants dans " +"le RA. 0 désactive les publications de nombre de sauts" + +msgid "Advertises the default router preference" +msgstr "Publie la préférence du routeur par défaut" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" +"Publie la valeur donnée de MTU dans les messages RA. 0 désactive la " +"publication du MTU" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" +"Publie la durée du routeur par défaut, en secondes. 0 indique que le nœud " +"n'est pas un routeur par défaut" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" +"Publie la durée en secondes pendant laquelle le routeur offre les services " +"IPv6 Mobile d'agent personnel (Home Agent)" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" +"Publie le temps d'attente en millisecondes entre deux messages de " +"sollicitation de voisinage dans le RA. 0 indique de ne pas retransmettre les " +"publications" + +msgid "Advertising" +msgstr "Publication" + +msgid "Autonomous" +msgstr "Autonome" + +msgid "Clients" +msgstr "Clients" + +msgid "Configuration flag" +msgstr "Drapeau de configuration" + +msgid "Current hop limit" +msgstr "Limite de sauts actuelle" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "Configuration DNSSL" + +msgid "Default lifetime" +msgstr "Durée de vie par défaut" + +msgid "Default preference" +msgstr "Préférence par défaut" + +msgid "Enable" +msgstr "Activer" + +msgid "Enable advertisements" +msgstr "Activer les publications" + +msgid "Enables router advertisements and solicitations" +msgstr "Activer les publications et sollicitations du routeur" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" +"Active le protocole d'auto-configuration administrée à états supplémentaire " +"(RFC 2462)" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" +"Active l'auto-configuration d'informations autres que l'adresse " +"supplémentaires (RFC 2462)" + +msgid "General" +msgstr "Général" + +msgid "Home Agent information" +msgstr "Informations de l'agent personnel (Home Agent)" + +msgid "Home Agent lifetime" +msgstr "Durée de vie de l'agent personnel (Home Agent)" + +msgid "Home Agent preference" +msgstr "Préférence de l'agent personnel (Home Agent)" + +msgid "Include Home Agent Information in the RA" +msgstr "Inclure les informations de l'agent personnel (Home Agent) dans le RA" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" +"Inclure l'option de l'intervalle de publication de Mobile IPv6 dans le RA" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "Inclure l'adresse de niveau lien de l'interface sortante dans le RA" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" +"Indique que l'adresse de l'interface est envoyée à la place du préfixe " +"réseau, comme demandé par la norme IPv6 Mobile" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" +"Indique que le lien sous-jacent ne peut faire de publication « broadcast », " +"pour éviter l'envoi de publications non sollicitées" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" +"Indique que ce préfixe peut être utilisé pour la configuration autonome des " +"adresses (RFC 4862)" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" +"Indique que ce préfixe peut être utilisé pour la détermination des adresses " +"liées-au-support (On-Link, RFC 4861)" + +msgid "Interface" +msgstr "Interface" + +msgid "Interface Configuration" +msgstr "Configuration de l'interface" + +msgid "Interface required" +msgstr "Interface nécessaire" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Lifetime" +msgstr "Durée de vie" + +msgid "Link MTU" +msgstr "MTU du lien" + +msgid "Managed flag" +msgstr "Indicateur de gestion" + +msgid "Max. interval" +msgstr "Intervalle Max" + +msgid "Maximum advertisement interval" +msgstr "Intervalle maximum de publication" + +msgid "Minimum advertisement delay" +msgstr "Délai de publication minimum" + +msgid "Minimum advertisement interval" +msgstr "Intervalle minimum de publication" + +msgid "Mobile IPv6" +msgstr "IPv6 Mobile" + +msgid "Mobile IPv6 interval option" +msgstr "Option d'intervalle pour l'IPv6 Mobile" + +msgid "Mobile IPv6 router registration" +msgstr "Enregistrement du routeur pour IPv6 Mobile" + +msgid "Multicast" +msgstr "Multicast" + +msgid "On-link" +msgstr "lié-au-support (On-link)" + +msgid "On-link determination" +msgstr "Détermination de la liaison-au-support (On-link)" + +msgid "Preference" +msgstr "Préférence" + +msgid "Preferred lifetime" +msgstr "Durée de vie préférée" + +msgid "Prefix" +msgstr "Préfixe" + +msgid "Prefix Configuration" +msgstr "Configuration du préfixe" + +msgid "Prefixes" +msgstr "Préfixes" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "Configuration RDNSS" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - Interface %q" + +msgid "Radvd - Prefix" +msgstr "Radvd - Préfixe" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - Routage" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" +"Radvd est un démon de publication de routage pour IPv6. Il écoute des " +"sollicitations de routage (Router Sollicitation) et envoie des publications " +"de routage (Router Advertisement) comme décrit dans la RFC 4861." + +msgid "Reachable time" +msgstr "temps d'accès" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" +"Restreint la communication aux clients spécifiés, laissez vide pour utiliser " +"le multicast" + +msgid "Retransmit timer" +msgstr "Délai de retransmission" + +msgid "Route Configuration" +msgstr "Configuration du routage" + +msgid "Routes" +msgstr "Routes" + +msgid "Source link-layer address" +msgstr "Adresse-source de niveau lien" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" +"Décrit le nom d'une interface logique de laquelle le préfixe 6to4 sera " +"déduit. Les adresses IPv4 des interfaces publiques sont combinées avec " +"2002::/3 et la valeur de l'option de préfixe" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" +"Indique le nom de l'interface logique auquelle cette section est rattachée" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "Indique la préférence associée au routeur par défaut" + +msgid "Suffix" +msgstr "Suffixe" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"Temps maximum autorisé entre deux émissions de publications multicast non " +"sollicitées du routeur depuis cette interface, en secondes" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" +"Temps minimum autorisé entre deux émissions de publications multicast du " +"routeur depuis cette interface, en secondes" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"Temps minimum autorisé entre deux émissions de publications multicast non " +"sollicitées du routeur depuis cette interface, en secondes" + +msgid "The preference for the Home Agent sending this RA" +msgstr "Préférence pour l'agent personnel (Home Agent) envoyant ce RA" + +msgid "Timing" +msgstr "Délai" + +msgid "Unicast only" +msgstr "Unicast seulement" + +msgid "Valid lifetime" +msgstr "Durée de la validité" + +msgid "Validity time" +msgstr "Durée de validité" + +msgid "default" +msgstr "Défaut" + +msgid "high" +msgstr "haut" + +msgid "low" +msgstr "bas" + +msgid "medium" +msgstr "moyen" + +msgid "no" +msgstr "non" + +msgid "yes" +msgstr "oui" + +#~ msgid "Advertised IPv6 prefix" +#~ msgstr "Préfixe IPv6 publié" + +#~ msgid "" +#~ "Advertised IPv6 prefix. If empty, the current interface prefix is used" +#~ msgstr "" +#~ "Préfixe IPv6 publié. S'il est vide, le préfixe actuel de l'interface est " +#~ "utilisé" + +#~ msgid "" +#~ "Advertises the length of time in seconds that addresses generated from " +#~ "the prefix via stateless address autoconfiguration remain preferred. Use " +#~ "0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Publie la durée en secondes pendant laquelle les adresses générées depuis " +#~ "le préfixe via l'auto-configuration sans état restent préférées. 0 " +#~ "indique une durée infinie" + +#~ msgid "" +#~ "Advertises the length of time in seconds that the prefix is valid for the " +#~ "purpose of on-link determination. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Publie la durée en secondes pendant laquelle le préfixe est valable pour " +#~ "le choix des adresses liées-au-support (on-link). 0 indique une durée " +#~ "infinie" + +#~ msgid "" +#~ "Indicates whether that RDNSS continues to be available to hosts even if " +#~ "they moved to a different subnet" +#~ msgstr "" +#~ "Indique si le RDNSS contine d'être disponible aux hôtes même s'ils ont " +#~ "migré sur un sous-réseau différent" + +#~ msgid "Open" +#~ msgstr "Ouvert" + +#~ msgid "" +#~ "Specifies the lifetime associated with the route in seconds. Use 0 to " +#~ "specify an infinite lifetime" +#~ msgstr "" +#~ "Précise la durée de vie d'une route, en secondes. Utiliser 0 pour une " +#~ "durée de vie infinie" + +#~ msgid "" +#~ "Specifies the maximum duration how long the DNSSL entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Indique la durée maximum d'utilisation des entrées DNSSL pour la " +#~ "résolution de nom. Utiliser 0 pour une durée infinie" + +#~ msgid "" +#~ "Specifies the maximum duration how long the RDNSS entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Indique la durée maximum d'utilisation des entrées RDNSS pour la " +#~ "résolution de nom. Utiliser 0 pour une durée infinie" diff --git a/feeds/luci/applications/luci-app-radvd/po/he/radvd.po b/feeds/luci/applications/luci-app-radvd/po/he/radvd.po new file mode 100644 index 0000000..63ec168 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/he/radvd.po @@ -0,0 +1,367 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "6to4 interface" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Addresses" +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "" + +msgid "Advertised Domain Suffixes" +msgstr "" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radvd/po/hu/radvd.po b/feeds/luci/applications/luci-app-radvd/po/hu/radvd.po new file mode 100644 index 0000000..90aa4ba --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/hu/radvd.po @@ -0,0 +1,372 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-01-31 12:14+0200\n" +"Last-Translator: Gabor \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "6to4 interface" +msgstr "6to4 interfész" + +msgid "Address" +msgstr "Cím" + +msgid "Addresses" +msgstr "Címek" + +msgid "Advanced" +msgstr "Fejlett" + +msgid "Advertise Home Agent flag" +msgstr "Otthoni Ügynök jelző közzététele" + +msgid "Advertise router address" +msgstr "Útválasztó cím közzététele" + +msgid "Advertised Domain Suffixes" +msgstr "Közzétett domain utótagok" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "Közzétett IPv6 előtagok" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Közzétett IPv6 előtagok. Ha üres, a jelenlegi interfész előtag lesz " +"használva." + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "DNSSL konfiguráció" + +msgid "Default lifetime" +msgstr "Alapértelemezett élettartam" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "Interfészek" + +msgid "Lifetime" +msgstr "Élettartam" + +msgid "Link MTU" +msgstr "Kapcsolat MTU" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "RDNSS beállítások" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - %q interfész" + +msgid "Radvd - Prefix" +msgstr "Radvd - Előtag" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - Útvonal" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "Útvonal beállítás" + +msgid "Routes" +msgstr "Útvonalak" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "Időzítés" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "alípértelmezett" + +msgid "high" +msgstr "magas" + +msgid "low" +msgstr "alacsony" + +msgid "medium" +msgstr "közepes" + +msgid "no" +msgstr "nem" + +msgid "yes" +msgstr "igen" diff --git a/feeds/luci/applications/luci-app-radvd/po/it/radvd.po b/feeds/luci/applications/luci-app-radvd/po/it/radvd.po new file mode 100644 index 0000000..cda09b7 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/it/radvd.po @@ -0,0 +1,374 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-02-10 19:21+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: German\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "6to4 interface" +msgstr "Interfaccia 6to4" + +msgid "Address" +msgstr "Indirizzo" + +msgid "Addresses" +msgstr "Indirizzi" + +msgid "Advanced" +msgstr "Avanzato" + +msgid "Advertise Home Agent flag" +msgstr "Advertise Home Agent flag" + +msgid "Advertise router address" +msgstr "Annuncia indirizzo router" + +msgid "Advertised Domain Suffixes" +msgstr "Annuncia Suffissi Dominio" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"Annuncia RDNSS IPv6. Se vuoto, l'indirizzo IPv6 attuale dell'interfaccia " +"verrà usato" + +msgid "Advertised IPv6 prefixes" +msgstr "Prefissi IPv6 Annunciati" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Prefissi IPv6 Annunciati. Se vuoto, il prefisso dell'interfaccia attuale " +"verrà usato" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "Annuncia la capacità dell'Agente Home IPv6 Mobile (RFC3775)" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "Abilita" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radvd/po/ja/radvd.po b/feeds/luci/applications/luci-app-radvd/po/ja/radvd.po new file mode 100644 index 0000000..35cde34 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/ja/radvd.po @@ -0,0 +1,378 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-16 09:35+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: German\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "6to4 interface" +msgstr "6to4 インターフェース" + +msgid "Address" +msgstr "アドレス" + +msgid "Addresses" +msgstr "アドレス" + +msgid "Advanced" +msgstr "詳細設定" + +msgid "Advertise Home Agent flag" +msgstr "ホームエージェントフラグの広告" + +msgid "Advertise router address" +msgstr "ルーターアドレスの広告" + +msgid "Advertised Domain Suffixes" +msgstr "広告するドメインサフィックスを設定します。" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"広告するIPv6 RDNSSを設定します。未設定の場合、現在のインターフェースのIPv6 ア" +"ドレスに設定します。" + +msgid "Advertised IPv6 prefixes" +msgstr "広告するIPv6 プレフィクスを設定します" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"広告するIPv6 プレフィクスを設定します。未設定の場合、現在のインターフェースの" +"プレフィクスに設定します。" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "モバイルIPv6 ホームエージェント機能の広告を行います。 (RFC3775)" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "広告" + +msgid "Autonomous" +msgstr "Autonomous" + +msgid "Clients" +msgstr "クライアント" + +msgid "Configuration flag" +msgstr "Configuration フラグ" + +msgid "Current hop limit" +msgstr "現在のホップ数制限" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "DNSSL 設定" + +msgid "Default lifetime" +msgstr "標準有効時間" + +msgid "Default preference" +msgstr "標準優先度設定" + +msgid "Enable" +msgstr "有効" + +msgid "Enable advertisements" +msgstr "広告を有効にする" + +msgid "Enables router advertisements and solicitations" +msgstr "ルータ広告および要請を有効にする" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "基本設定" + +msgid "Home Agent information" +msgstr "ホームエージェント 情報" + +msgid "Home Agent lifetime" +msgstr "ホームエージェント 有効時間" + +msgid "Home Agent preference" +msgstr "ホームエージェント 優先度" + +msgid "Include Home Agent Information in the RA" +msgstr "ルータ広告 (RA) にホームエージェント情報を含める" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "インターフェース" + +msgid "Interface Configuration" +msgstr "インターフェース設定" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "インターフェース" + +msgid "Lifetime" +msgstr "有効時間" + +msgid "Link MTU" +msgstr "リンクMTU" + +msgid "Managed flag" +msgstr "Managed フラグ" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "ルータ要請最大送信間隔" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "ルータ要請最低送信間隔" + +msgid "Mobile IPv6" +msgstr "モバイル IPv6" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "モバイル IPv6 ルータ登録" + +msgid "Multicast" +msgstr "マルチキャスト" + +msgid "On-link" +msgstr "On-link" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "優先度" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "プレフィクス" + +msgid "Prefix Configuration" +msgstr "プレフィクス設定" + +msgid "Prefixes" +msgstr "プレフィクス" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "RDNSS 設定" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - インターフェース %q" + +msgid "Radvd - Prefix" +msgstr "Radvd - プレフィクス" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - 経路" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" +"Radvdは、IPv6用のルータ広告デーモンです。RadvdはRFC 4861に規定されている、" +"ルータ要請の受信と、ルータ広告の送信を行います。" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" +"設定されたクライアントに対してのみ通信を行います。設定しない場合、マルチキャ" +"ストを行います。" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "経路設定" + +msgid "Routes" +msgstr "経路" + +msgid "Source link-layer address" +msgstr "送信元リンク層アドレス" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "このセクションで使用する論理インターフェース名を設定してください。" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "サフィックス" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "タイミング設定" + +msgid "Unicast only" +msgstr "ユニキャストのみ" + +msgid "Valid lifetime" +msgstr "有効時間の設定" + +msgid "Validity time" +msgstr "有効時間" + +msgid "default" +msgstr "default" + +msgid "high" +msgstr "高" + +msgid "low" +msgstr "低" + +msgid "medium" +msgstr "中" + +msgid "no" +msgstr "いいえ" + +msgid "yes" +msgstr "はい" diff --git a/feeds/luci/applications/luci-app-radvd/po/ms/radvd.po b/feeds/luci/applications/luci-app-radvd/po/ms/radvd.po new file mode 100644 index 0000000..63f8fa0 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/ms/radvd.po @@ -0,0 +1,368 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2010-11-21 04:06+0100\n" +"Last-Translator: \n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "6to4 interface" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Addresses" +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "" + +msgid "Advertised Domain Suffixes" +msgstr "" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radvd/po/no/radvd.po b/feeds/luci/applications/luci-app-radvd/po/no/radvd.po new file mode 100644 index 0000000..1c43442 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/no/radvd.po @@ -0,0 +1,435 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "6to4 interface" +msgstr "6til4 grensesnitt" + +msgid "Address" +msgstr "Adresse" + +msgid "Addresses" +msgstr "Adresser" + +msgid "Advanced" +msgstr "Avansert" + +msgid "Advertise Home Agent flag" +msgstr "Annonser Home Agent flagg" + +msgid "Advertise router address" +msgstr "Annonser ruteradressen" + +msgid "Advertised Domain Suffixes" +msgstr "Annonserte Domenesuffikser" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"Annonsert IPv6 RDNSS. Hvis tom, brukes den gjeldende IPv6-adressen til " +"grensesnittet" + +msgid "Advertised IPv6 prefixes" +msgstr "Annonserte IPv6 prefikser" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Annonserte IPv6 prefikser. Hvis tom, brukes gjeldende grensesnitt prefiks" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "Annonserer Mobile IPv6 Home Agent muligheter (RFC3775)" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "Annonserer Mobile Router registration muligheter (NEMO Basic)" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" +"Annonserer antatt tilgjengelighet i millisekunder for naboer i RA. 0 " +"deaktiverer annonsenering av tilgjengelighet" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" +"Annonserer standard Hop Count verdien for utgående unicast pakker i RA. 0 " +"deaktierer annonsering av hopcount" + +msgid "Advertises the default router preference" +msgstr "Annonserer standard ruter preferanse" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "Annonserer angitt link MTU i RA. 0 deaktiverer annonsereing av MTU" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" +"Annonserer levetiden for standard ruter i sekunder. 0 indikerer at noden " +"ikke er standard ruter" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" +"Annonserer tiden i sekunder der ruteren tilbyr Mobile IPv6 Home Agent " +"tjenester" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" +"Annonserer ventetiden i millisekunder mellom Neighbor Solicitation meldinger " +"i RA. 0 deaktiverer omsendte annonseringer" + +msgid "Advertising" +msgstr "Annonsering" + +msgid "Autonomous" +msgstr "Selvstendig" + +msgid "Clients" +msgstr "Klienter" + +msgid "Configuration flag" +msgstr "Konfigurasjon flagg" + +msgid "Current hop limit" +msgstr "Nåværende hop grense" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "DNSSL Konfigurasjon" + +msgid "Default lifetime" +msgstr "Standard levetid" + +msgid "Default preference" +msgstr "Standard prepreferanse" + +msgid "Enable" +msgstr "Aktiver" + +msgid "Enable advertisements" +msgstr "Aktiver annonsering" + +msgid "Enables router advertisements and solicitations" +msgstr "Aktiverer ruter annonsering og anmodning" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" +"Aktiverer den ekstra 'stateful' administrerte autokonfigurasjon protokoll " +"(RFC2462)" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" +"Aktiverer autokonfigurasjon for annen ikke adresse informasjon (RFC2462)" + +msgid "General" +msgstr "Generell" + +msgid "Home Agent information" +msgstr "Home Agen informasjon" + +msgid "Home Agent lifetime" +msgstr "Home Agent levetid" + +msgid "Home Agent preference" +msgstr "Home Agent preferanse" + +msgid "Include Home Agent Information in the RA" +msgstr "Inkluder Home Agent informasjon i RA" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "Inkluder Mobile IPv6 annonserings intervall alternativer til RA" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "Inkluder utgående grensesnitts link-layer adresse til RA" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" +"Indikerer at grensesnittets adresse er sendt istedet for nettverks " +"prefikset, noe som er nødvendig for Mobile IPv6" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" +"Indikerer at underliggende link ikke er broadcast kapabel, dette forhindrer " +"spontane annonsering" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" +"Indikerer at dette prefikset kan bli brukt for autonom adresse konfigurasjon " +"(RFC4862)" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" +"Indikerer at dette prefikset kan bli brukt for on-link bestemmelse (RFC4861)" + +msgid "Interface" +msgstr "Grensesnitt" + +msgid "Interface Configuration" +msgstr "Grensesnitt Konfigurasjon" + +msgid "Interface required" +msgstr "Grenesnitt er nødvendig" + +msgid "Interfaces" +msgstr "Grensesnitt" + +msgid "Lifetime" +msgstr "Levetid" + +msgid "Link MTU" +msgstr "Link MTU" + +msgid "Managed flag" +msgstr "Managed flagg" + +msgid "Max. interval" +msgstr "Maks. intervall" + +msgid "Maximum advertisement interval" +msgstr "Maksimum annonsering intervall" + +msgid "Minimum advertisement delay" +msgstr "Minimum annonsering forsinkelse" + +msgid "Minimum advertisement interval" +msgstr "Minimum annonsering intervall" + +msgid "Mobile IPv6" +msgstr "Mobile IPv6" + +msgid "Mobile IPv6 interval option" +msgstr "Mobile IPv6 intervall alternativer" + +msgid "Mobile IPv6 router registration" +msgstr "Mobile IPv6 ruter registrering" + +msgid "Multicast" +msgstr "Multicast" + +msgid "On-link" +msgstr "On-link" + +msgid "On-link determination" +msgstr "On-link bestemmelse" + +msgid "Preference" +msgstr "Preferanse" + +msgid "Preferred lifetime" +msgstr "Foretrukket levetid" + +msgid "Prefix" +msgstr "Prefiks" + +msgid "Prefix Configuration" +msgstr "Prefiks Konfigurasjon" + +msgid "Prefixes" +msgstr "Prefikser" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "RDNSS Konfigurasjon" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - Grensesnitt %q" + +msgid "Radvd - Prefix" +msgstr "Radvd - Prefiks" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - Rute" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" +"Radvd er en ruter annonserings tjeneste for IPv6. Den lytter etter ruter " +"anmodninger og sender ruter annonsering som beskrevet i RFC 4861" + +msgid "Reachable time" +msgstr "Tilgjengelighet tid" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" +"Begrens kommunikasjonen til klienter spesifisert her, la stå tomt for å " +"bruke multicast" + +msgid "Retransmit timer" +msgstr "Omsendelse tidsmåler" + +msgid "Route Configuration" +msgstr "Rute Konfigurasjon" + +msgid "Routes" +msgstr "Ruter" + +msgid "Source link-layer address" +msgstr "Kilde link-lag adresse" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" +"Angir et logisk grensenittsnavn å hente 6til4 prefiks fra. Grensesnittets " +"offentlige IPv4 adresse er kombinert med 2002::/3 og verdien av prefiks " +"alternativet" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "Angir det logiske grensesnittsnavnet som denne seksjonen tilhører" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "Angir preferanse knyttet til standard ruteren" + +msgid "Suffix" +msgstr "Suffiks" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"Maksimal tillatt tid mellom sending av spontane multicast annonseringer fra " +"grensesnittet, i sekunder" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" +"Minimum tillatt tid mellom sending av multicast annonseringer fra " +"grensesnittet, i sekunder" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"Minimum tillatt tid mellom sending av spontane multicast annonseringer fra " +"grensesnittet, i sekunder" + +msgid "The preference for the Home Agent sending this RA" +msgstr "Referansen til Home Agenten som sender denne RA" + +msgid "Timing" +msgstr "Timing" + +msgid "Unicast only" +msgstr "Kun Unikast" + +msgid "Valid lifetime" +msgstr "Gyldig levetid" + +msgid "Validity time" +msgstr "Gyldighetsperiode" + +msgid "default" +msgstr "standard" + +msgid "high" +msgstr "høy" + +msgid "low" +msgstr "lav" + +msgid "medium" +msgstr "medium" + +msgid "no" +msgstr "nei" + +msgid "yes" +msgstr "ja" + +#~ msgid "" +#~ "Advertises the length of time in seconds that addresses generated from " +#~ "the prefix via stateless address autoconfiguration remain preferred. Use " +#~ "0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Annonserer tiden i sekunder hvor adresser generert ut fra prefikset via " +#~ "tilstandsløs autokonfigurasjon er foretrukket. Bruk 0 for ubegrenset " +#~ "levetid" + +#~ msgid "" +#~ "Advertises the length of time in seconds that the prefix is valid for the " +#~ "purpose of on-link determination. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Annonserer tiden i sekunder hvor prefikset er gyldig, hvor formålet er on-" +#~ "link fastsettelse. Bruk 0 for ubegrenset levetid." + +#~ msgid "" +#~ "Specifies the lifetime associated with the route in seconds. Use 0 to " +#~ "specify an infinite lifetime" +#~ msgstr "" +#~ "Angir levetiden tilknyttet ruten i sekunder. Bruk 0 for ubegrenset levetid" + +#~ msgid "" +#~ "Specifies the maximum duration how long the DNSSL entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Angir den maksimale varighet av DNSSL navne oppslag. Bruk 0 for " +#~ "ubegrenset levetid" + +#~ msgid "" +#~ "Specifies the maximum duration how long the RDNSS entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Angir den maksimale varighet av RDNSS navne oppslag. Bruk 0 for " +#~ "ubegrenset levetid" diff --git a/feeds/luci/applications/luci-app-radvd/po/pl/radvd.po b/feeds/luci/applications/luci-app-radvd/po/pl/radvd.po new file mode 100644 index 0000000..a080c97 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/pl/radvd.po @@ -0,0 +1,377 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-05 04:35+0200\n" +"Last-Translator: piosl \n" +"Language-Team: German\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +# Na polskiej Wikipedii jest artykuł "6to4", więc chyba ok. +msgid "6to4 interface" +msgstr "Interfejs 6to4" + +msgid "Address" +msgstr "Adres" + +msgid "Addresses" +msgstr "Adresy" + +msgid "Advanced" +msgstr "Zaawansowane" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "Rozgłaszaj adres routera" + +msgid "Advertised Domain Suffixes" +msgstr "Rozgłaszana Domena Rozszerzenia" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"Rozgłaszane IPv6 RDNSS. Jeżeli jest puste, używany jest aktualny adres IPv6 " +"interfejsu" + +msgid "Advertised IPv6 prefixes" +msgstr "Rozgłaszany prefixy IPv6 " + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Rozgłaszany prefixy IPv6. Jeżeli jest puste, używany jest aktualny prefix " +"interfejsu" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "Rozgłaszanie" + +msgid "Autonomous" +msgstr "Autonomiczny" + +msgid "Clients" +msgstr "Klienci" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "Konfiguracja DNSSL" + +msgid "Default lifetime" +msgstr "Domyślna żywotność" + +msgid "Default preference" +msgstr "preferencje domyślne" + +msgid "Enable" +msgstr "umożliwiać" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "Ogólny" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "Interfejs" + +msgid "Interface Configuration" +msgstr "Konfiguracja interfejsu" + +msgid "Interface required" +msgstr "wymagany interfejs" + +msgid "Interfaces" +msgstr "Interfejs" + +msgid "Lifetime" +msgstr "Dożywotni" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "Max. Przedział" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "preferencje" + +msgid "Preferred lifetime" +msgstr "preferowana żywotność" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "Konfiguracja RDNSS" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - interfejs %q" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +#, fuzzy +msgid "Timing" +msgstr "Timing" + +msgid "Unicast only" +msgstr "Tylko unicast" + +msgid "Valid lifetime" +msgstr "ważne dożywotnio" + +msgid "Validity time" +msgstr "czas ważności" + +msgid "default" +msgstr "domyślne" + +msgid "high" +msgstr "wysoki" + +msgid "low" +msgstr "niski" + +msgid "medium" +msgstr "średni" + +msgid "no" +msgstr "nie" + +msgid "yes" +msgstr "tak" diff --git a/feeds/luci/applications/luci-app-radvd/po/pt-br/radvd.po b/feeds/luci/applications/luci-app-radvd/po/pt-br/radvd.po new file mode 100644 index 0000000..62c63bb --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/pt-br/radvd.po @@ -0,0 +1,469 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-17 23:13+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: German\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "6to4 interface" +msgstr "Interface 6to4" + +msgid "Address" +msgstr "Endereço" + +msgid "Addresses" +msgstr "Endereços" + +msgid "Advanced" +msgstr "Avançado" + +msgid "Advertise Home Agent flag" +msgstr "Anuncie a opção de Agente Local" + +msgid "Advertise router address" +msgstr "Anuncie o endereço do roteador" + +msgid "Advertised Domain Suffixes" +msgstr "Anuncie o Sufixo do Domínio" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"Anuncia IPv6 RDNSS. Se vazio, o endereço IPv6 atual da interface será usado" + +msgid "Advertised IPv6 prefixes" +msgstr "Anuncie os prefixos IPv6" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Anuncie os prefixos IPv6. Se vazio, o prefixo da interface atual será usado" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "Anuncia a capacidade de Agente Local para IPv6 Móvel (RFC3775)" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "Anuncia a capacidade de registro de Roteador Móvel (NEMO Básico)" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" +"Se especificado, anuncia no RA o tempo assumido de alcance dos vizinhos, em " +"milissegundos. Especifique 0 para desabilita este anuncio" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" +"Anuncia no RA o valor padrão para a contagem de saltos nos pacotes unicast " +"saindo da rede. Especifique 0 para desabilita este anuncio" + +msgid "Advertises the default router preference" +msgstr "Anuncia a preferência do roteador padrão" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" +"Anuncia no RA o MTU da conexão. Especifique 0 para desabilita este anuncio" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" +"Divulga a duração do tempo em segundos que endereços gerados a partir do " +"prefixo através apátridas endereço autoconfiguração permanecem preferido." + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" +"Divulga a duração do tempo em segundos que o prefixo é válido para o " +"propósito de sobre-link determinado." + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" +"Anuncia o período de tempo, em segundos, da validade do roteador padrão. " +"Especifique 0 para período infinito" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" +"Anuncia o período de tempo, em segundos, que o roteador está oferecendo o " +"serviço de Agente Local para IPv6 Móvel" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" +"Anuncia o tempo de espera, em milissegundos, entre mensagens de Solicitação " +"de Vizinhos no RA. Especifique 0 para desabilitar a retransmissão do anúncio" + +msgid "Advertising" +msgstr "Anúncio" + +msgid "Autonomous" +msgstr "Autônomo" + +msgid "Clients" +msgstr "Clientes" + +msgid "Configuration flag" +msgstr "Marcação de configuração" + +msgid "Current hop limit" +msgstr "Limite de saltos atual" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "Configuração DNSSL" + +msgid "Default lifetime" +msgstr "Validade padrão" + +msgid "Default preference" +msgstr "Preferências padrão" + +msgid "Enable" +msgstr "Habilita" + +msgid "Enable advertisements" +msgstr "Habilita anúncios" + +msgid "Enables router advertisements and solicitations" +msgstr "Habilita as solicitações e os anúncios do roteador" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" +"Habilita o protoloco de autoconfiguração administrada com estado (RFC2462)" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" +"Habilita a autoconfiguração de informação adicional, não endereço (RFC2462)" + +msgid "General" +msgstr "Geral" + +msgid "Home Agent information" +msgstr "Informação do Agente Local" + +msgid "Home Agent lifetime" +msgstr "Validade do Agente Local" + +msgid "Home Agent preference" +msgstr "Preferências do Agente Local" + +msgid "Include Home Agent Information in the RA" +msgstr "Inclui Informação do Agente Local no RA" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "Inclui a opção de Intervalo de Anúncio de IPv6 Móvel no RA" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "Inclui o endereço da camada de rede da interface de saída no RA" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" +"Indica que o endereço da interface é enviado ao invés do prefixo de rede, " +"como é necessário para IPv6 Móvel" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" +"Indica que a conexão abaixo não é capaz de utilizar broadcast. Isto inibe o " +"envio de anúncios não solicitados" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" +"Indica que este prefixo pode ser usado para configuração autônoma de " +"endereços (RFC4862)" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" +"Indica que este prefixo pode ser usado para a determinação da presença no " +"enlace local (RFC4861)" + +msgid "Interface" +msgstr "Interface" + +msgid "Interface Configuration" +msgstr "Configuração da Interface" + +msgid "Interface required" +msgstr "Requer uma interface" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Lifetime" +msgstr "Validade" + +msgid "Link MTU" +msgstr "MTU da conexão" + +msgid "Managed flag" +msgstr "Marcação de gerenciado" + +msgid "Max. interval" +msgstr "Intervalo Máximo" + +msgid "Maximum advertisement interval" +msgstr "Intervalo máximo de anúncio" + +msgid "Minimum advertisement delay" +msgstr "Atraso mínimo de anúncio" + +msgid "Minimum advertisement interval" +msgstr "Intervalo mínimo de anúncio" + +msgid "Mobile IPv6" +msgstr "IPv6 Móvel" + +msgid "Mobile IPv6 interval option" +msgstr "Opçao de intervalo de IPv6 móvel" + +msgid "Mobile IPv6 router registration" +msgstr "Registro de roteador IPv6 móvel" + +msgid "Multicast" +msgstr "Multicast" + +msgid "On-link" +msgstr "Presença no enlace local" + +msgid "On-link determination" +msgstr "Determinação da presença no enlace local" + +msgid "Preference" +msgstr "Preferência" + +msgid "Preferred lifetime" +msgstr "Validade preferida" + +msgid "Prefix" +msgstr "Prefixo" + +msgid "Prefix Configuration" +msgstr "Configuração do Prefixo" + +msgid "Prefixes" +msgstr "Prefixos" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "Configuração do RDNSS" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - Interface %q" + +msgid "Radvd - Prefix" +msgstr "advd - Prefixo" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - Rota" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" +"Radvd é um programa de anúncio de rotas para IPv6. Ele escuta por " +"solicitações de rota e envia anúncios de roteador (RA) como descrito em RFC " +"4861." + +msgid "Reachable time" +msgstr "Tempo de alcance" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" +"Restringe a comnuicação para clientes específicos. Deixe vazio para usar " +"multicast" + +msgid "Retransmit timer" +msgstr "Cronômetro de retransmissão" + +msgid "Route Configuration" +msgstr "Configuração da Rota" + +msgid "Routes" +msgstr "Rotas" + +msgid "Source link-layer address" +msgstr "Endereço de origem da camada de enlace" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" +"Especifica o nome da interface lógica da qual será derivada o prefixo 6to4. " +"O endereço IPv4 público da interface é combinado com 2002::/3 e o valor da " +"opção de prefixo" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "Especifica o tempo de vida associado com o trajecto em segundos." + +msgid "Specifies the logical interface name this section belongs to" +msgstr "Especifica o nome da interface lógica que esta seção pertence" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" +"Especifica a duração máxima de quanto tempo as entradas DNSSL são usados ​​" +"para resolução de nomes." + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" +"Especifica a duração máxima de quanto tempo as entradas RDNSS são usados ​​" +"para resolução de nomes." + +msgid "Specifies the preference associated with the default router" +msgstr "Especifica as preferências associadas com o roteador padrão" + +msgid "Suffix" +msgstr "Sufixo" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"O tempo máximo, em segundos, permitido entre o envio de RAs não solicitados " +"a partir desta interface" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" +"O tempo mínimo, em segundos, permitido entre o envio de RAs a partir desta " +"interface" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"O tempo mínimo, em segundos, permitido entre o envio de RAs não solicitados " +"a partir desta interface" + +msgid "The preference for the Home Agent sending this RA" +msgstr "As preferencias para o Agente Local enviando este RA" + +msgid "Timing" +msgstr "Cronometragem" + +msgid "Unicast only" +msgstr "Somente Unicast" + +msgid "Valid lifetime" +msgstr "Duração da validade" + +msgid "Validity time" +msgstr "Tempo de validade" + +msgid "default" +msgstr "padrão" + +msgid "high" +msgstr "alto" + +msgid "low" +msgstr "baixo" + +msgid "medium" +msgstr "médio" + +msgid "no" +msgstr "não" + +msgid "yes" +msgstr "sim" + +#~ msgid "Advertised IPv6 prefix" +#~ msgstr "Anuncie o prefixo IPv6" + +#~ msgid "" +#~ "Advertised IPv6 prefix. If empty, the current interface prefix is used" +#~ msgstr "" +#~ "Anuncie o prefixo IPv6. Se vazio, o prefixo da interface atual será usado" + +#~ msgid "" +#~ "Advertises the length of time in seconds that addresses generated from " +#~ "the prefix via stateless address autoconfiguration remain preferred. Use " +#~ "0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Anuncia o período de tempo, em segundos, que endereços gerados a partir " +#~ "do prefixo através da autoconfiguração de endereço sem estado terão " +#~ "preferência. Especifique 0 para período infinito" + +#~ msgid "" +#~ "Advertises the length of time in seconds that the prefix is valid for the " +#~ "purpose of on-link determination. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Anuncia o período de tempo, em segundos, que o prefixo é valido para o " +#~ "propósito de determinação da presença no enlace local. Especifique 0 para " +#~ "período infinito" + +#~ msgid "" +#~ "Indicates whether that RDNSS continues to be available to hosts even if " +#~ "they moved to a different subnet" +#~ msgstr "" +#~ "Indica se o RDNSS continuará a estar disponível mesmo se o cliente for " +#~ "movido para uma subrede diferente" + +#~ msgid "Open" +#~ msgstr "Abrir" + +#~ msgid "" +#~ "Specifies the lifetime associated with the route in seconds. Use 0 to " +#~ "specify an infinite lifetime" +#~ msgstr "Especifica a validade da rota em segundos. Utilize 0 para infinita" + +#~ msgid "" +#~ "Specifies the maximum duration how long the DNSSL entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Especifica a validade da entrada DNSSL para a resolução de nomes. Utilize " +#~ "0 para duração infinita" + +#~ msgid "" +#~ "Specifies the maximum duration how long the RDNSS entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Especifica a validade da entrada RDNS para a resolução de nomes. Utilize " +#~ "0 para duração infinita" diff --git a/feeds/luci/applications/luci-app-radvd/po/pt/radvd.po b/feeds/luci/applications/luci-app-radvd/po/pt/radvd.po new file mode 100644 index 0000000..63f8fa0 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/pt/radvd.po @@ -0,0 +1,368 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2010-11-21 04:06+0100\n" +"Last-Translator: \n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "6to4 interface" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Addresses" +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "" + +msgid "Advertised Domain Suffixes" +msgstr "" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radvd/po/ro/radvd.po b/feeds/luci/applications/luci-app-radvd/po/ro/radvd.po new file mode 100644 index 0000000..77e3d9e --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/ro/radvd.po @@ -0,0 +1,384 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-07 16:12+0200\n" +"Last-Translator: Daniel \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "6to4 interface" +msgstr "Interfata 6la4" + +msgid "Address" +msgstr "Adresa" + +msgid "Addresses" +msgstr "Adrese" + +msgid "Advanced" +msgstr "Avansat" + +msgid "Advertise Home Agent flag" +msgstr "Anunta semaforul \"Home Agent\"" + +msgid "Advertise router address" +msgstr "Anunta adresa routerului" + +msgid "Advertised Domain Suffixes" +msgstr "Sufixe anuntate de domeniu" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"Server RDNSS IPv6 anuntat. Daca e lasat gol, atunci adresa IPv6 a interfetei " +"este folosita" + +msgid "Advertised IPv6 prefixes" +msgstr "Prefixe IPv6 anuntate" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Prefixe IPv6 anuntate. Daca e neconfigurat atunci prefixul de pe interfata " +"curenta este folosit" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "Anunta capabilitatea de \"Home Agent\" IPv6 mobil (RFC3775)" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "Anunta capacitatea de inregistrare \"Mobile Router\"" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "Anunta preferinta routerului implicit" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "Anunta" + +msgid "Autonomous" +msgstr "Autonom" + +msgid "Clients" +msgstr "Clienti" + +msgid "Configuration flag" +msgstr "Semafor de configurare" + +msgid "Current hop limit" +msgstr "Limita hop-ului curent" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "Configurarea DNSSL" + +msgid "Default lifetime" +msgstr "Durata implicita" + +msgid "Default preference" +msgstr "Preferinta implicita" + +msgid "Enable" +msgstr "Activeaza" + +msgid "Enable advertisements" +msgstr "Activeaza anunturile" + +msgid "Enables router advertisements and solicitations" +msgstr "Activeaza anunturile si solicitarile routerului" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "Informatia despre \"Home Agent\"" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "Preferinta \"Home Agent\"" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "Interfata" + +msgid "Interface Configuration" +msgstr "Configurarea interfetei" + +msgid "Interface required" +msgstr "Interfata necesara" + +msgid "Interfaces" +msgstr "Interfete" + +msgid "Lifetime" +msgstr "Durata de viata" + +msgid "Link MTU" +msgstr "MTU pe legatura" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "Interval maxim" + +msgid "Maximum advertisement interval" +msgstr "Intervalul maxim de anuntare" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "IPv6 mobil" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "Multicast" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "Preferinta" + +msgid "Preferred lifetime" +msgstr "Durata de viata preferata" + +msgid "Prefix" +msgstr "Prefix" + +msgid "Prefix Configuration" +msgstr "Configurarea prefixului" + +msgid "Prefixes" +msgstr "Prefixe" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "Configurarea rutelor" + +msgid "Routes" +msgstr "Rute" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "Sufix" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "Doar unicast" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "nu" + +msgid "yes" +msgstr "da" + +#~ msgid "Advertised IPv6 prefix" +#~ msgstr "Prefixul IPv6 anuntat" + +#~ msgid "" +#~ "Advertised IPv6 prefix. If empty, the current interface prefix is used" +#~ msgstr "" +#~ "Prefixul IPv6 anuntat. Daca e lasat gol atunci prefixul de pe interfata " +#~ "curenta este folosit" diff --git a/feeds/luci/applications/luci-app-radvd/po/ru/radvd.po b/feeds/luci/applications/luci-app-radvd/po/ru/radvd.po new file mode 100644 index 0000000..37cc942 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/ru/radvd.po @@ -0,0 +1,473 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: radvd\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-08-16 11:37+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "6to4 interface" +msgstr "Интерфейс 6to4" + +msgid "Address" +msgstr "Адрес" + +msgid "Addresses" +msgstr "Адреса" + +msgid "Advanced" +msgstr "Расширенные" + +msgid "Advertise Home Agent flag" +msgstr "Извещать индикатор домашнего агента" + +msgid "Advertise router address" +msgstr "Извещать адрес маршрутизатора" + +msgid "Advertised Domain Suffixes" +msgstr "Извещаемые суффиксы домена" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"Извещаемый IPv6 RDNSS. Если значение не задано, то будет использован текущий " +"IPv6-адрес интерфейса." + +msgid "Advertised IPv6 prefixes" +msgstr "Извещаемые IPv6-префиксы" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Извещаемые IPv6-префиксы. Если значение не задано, то будет использован " +"текущий префикс интерфейса." + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "Извещает возможности домашнего агента мобильного IPv6 (RFC3775)" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" +"Извещает возможности регистрации мобильного маршрутизатора (NEMO Basic)" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" +"Извещает предполагаемое время доступа к соседним узлам (мс). При значении 0 " +"извещение не происходит." + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" +"Извещает значение числа переходов по умолчанию для исходящих одноадресных " +"пакетов. При значении 0 извещение не происходит." + +msgid "Advertises the default router preference" +msgstr "Извещает параметры предпочтения маршрутизатора по умолчанию" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" +"Извещает указанный максимальный размер пакета (MTU) в сообщении RA. 0 " +"выключает данную функцию" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" +"Извещает период (сек.), в течение которого адреса, созданные из префикса с " +"помощью SLAAC, остаются предпочтительными." + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" +"Извещает период (сек.), в течение которого префикс является действительным " +"для определения включения соединения." + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" +"Извещает период действия (сек.) маршрутизатора по умолчанию. 0 указывает на " +"то, что узел не является маршрутизатором по умолчанию." + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" +"Извещает период (сек.) предоставления служб домашнего агента мобильного IPv6" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" +"Извещает время ожидания (мс) между сообщениями Neighbor Solicitation, если " +"RA включен. 0 отключает передачу извещений" + +msgid "Advertising" +msgstr "Извещение" + +msgid "Autonomous" +msgstr "Автономный" + +msgid "Clients" +msgstr "Клиенты" + +msgid "Configuration flag" +msgstr "Конфигурационный флаг" + +msgid "Current hop limit" +msgstr "Текущее ограничение кол-ва прыжков" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "Конфигурация DNSSL" + +msgid "Default lifetime" +msgstr "Срок действия по умолчанию" + +msgid "Default preference" +msgstr "Приоритет по умолчанию" + +msgid "Enable" +msgstr "Включить" + +msgid "Enable advertisements" +msgstr "Включить извещения" + +msgid "Enables router advertisements and solicitations" +msgstr "Включает извещения и запросы маршрутизатора" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "Включает дополнительный протокол автоконфигурации (RFC2462)" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "Включает автоконфигурацию дополнительной информации (RFC2462)" + +msgid "General" +msgstr "Общие" + +msgid "Home Agent information" +msgstr "Информация о домашнем агенте" + +msgid "Home Agent lifetime" +msgstr "Срок действия домашнего агента" + +msgid "Home Agent preference" +msgstr "Приоритет домашнего агента" + +msgid "Include Home Agent Information in the RA" +msgstr "Включить информацию о домашнем агенте в сообщения RA" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "Включить интервал извещения мобильного IPv6 в сообщения RA" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "Включает адрес канального уровня исходящего интерфейса в сообщения RA" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" +"Указывает, что адрес интерфейса отправляется вместо префикса сети, как это " +"требуется в мобильном IPv6" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" +"Указывает, что соединение не является широковещательным, и блокирует отсылку " +"незапрошенных извещений" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" +"Указывае, что данный префикс может быть использован для автономной настройки " +"адреса (RFC4862)" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" +"Указывает, что данный префикс может быть использован для определения " +"включения соединения (RFC4861)" + +msgid "Interface" +msgstr "Интерфейс" + +msgid "Interface Configuration" +msgstr "Конфигурация интерфейса" + +msgid "Interface required" +msgstr "Требуется интерфейс" + +msgid "Interfaces" +msgstr "Интерфейсы" + +msgid "Lifetime" +msgstr "Срок действия" + +msgid "Link MTU" +msgstr "Максимальный размер пакета (MTU)" + +msgid "Managed flag" +msgstr "Управляемый флаг" + +msgid "Max. interval" +msgstr "Макс. интервал" + +msgid "Maximum advertisement interval" +msgstr "Максимальный интервал извещения" + +msgid "Minimum advertisement delay" +msgstr "Минимальная задержка извещения" + +msgid "Minimum advertisement interval" +msgstr "Минимальный интервал извещения" + +msgid "Mobile IPv6" +msgstr "Мобильный IPv6" + +msgid "Mobile IPv6 interval option" +msgstr "Параметры интервала мобильного IPv6" + +msgid "Mobile IPv6 router registration" +msgstr "Регистрация мобильного IPv6 маршрутизатора" + +msgid "Multicast" +msgstr "Групповая рассылка" + +#, fuzzy +msgid "On-link" +msgstr "Соединение" + +msgid "On-link determination" +msgstr "Определение включения соединения" + +msgid "Preference" +msgstr "Приоритет" + +msgid "Preferred lifetime" +msgstr "Предпочитаемый срок действия" + +msgid "Prefix" +msgstr "Префикс" + +msgid "Prefix Configuration" +msgstr "Конфигурация префикса" + +msgid "Prefixes" +msgstr "Префиксы" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "Конфигурация RDNSS" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - Интерфейс %q" + +msgid "Radvd - Prefix" +msgstr "Radvd - Префикс" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - Маршрут" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" +"Radvd - это служба извещений маршрутизатора для IPv6. Она слушает запросы " +"(Router Solicitations) и отсылает извещения (Router Advertisements), как " +"описано в RFC 4861." + +msgid "Reachable time" +msgstr "Период доступности" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" +"Связываться только с указанными клиентами. Оставьте пустым, чтобы " +"использовать групповую рассылку" + +msgid "Retransmit timer" +msgstr "Таймер ретрансляции" + +msgid "Route Configuration" +msgstr "Настройка маршрута" + +msgid "Routes" +msgstr "Маршруты" + +msgid "Source link-layer address" +msgstr "Адрес источника (канальный уровень)" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" +"Устанавливает имя логического интерфейса для получения префикса 6to4. " +"Публичный IPv4-адрес интерфейса комбинитуется с 2002::/3 и значением префикса" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "Указывает период жизни, связанный с маршрутом (сек.)" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" +"Устанавливает имя логического интерфейса, которому принадлежит данная секция" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" +"Указывает максимальную длительность использования записей DNSSL для " +"разрешения имён." + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" +"Указывает максимальную длительность использования записей RDNSS для " +"разрешения имён." + +msgid "Specifies the preference associated with the default router" +msgstr "Указывает приоритет, связанный с маршрутизатором по умолчанию" + +msgid "Suffix" +msgstr "Суффикс" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"Максимальный интервал времени между отсылкой групповых незапрашиваемых " +"извещений маршрутизатора (сек.)" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" +"Минимальный интервал времени между отсылкой групповых извещений " +"маршрутизатора с интерфейса (сек.)" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" +"Минимальный интервал времени между отсылкой групповых незапрашиваемых " +"извещений маршрутизатора (сек.)" + +msgid "The preference for the Home Agent sending this RA" +msgstr "Предпочтение домашнего агента, отсылающего данное извещение RA" + +msgid "Timing" +msgstr "Интервалы" + +msgid "Unicast only" +msgstr "Только одноадресная передача" + +msgid "Valid lifetime" +msgstr "Срок действия" + +msgid "Validity time" +msgstr "Период действия" + +msgid "default" +msgstr "по умолчанию" + +msgid "high" +msgstr "высокий" + +msgid "low" +msgstr "низкий" + +msgid "medium" +msgstr "средний" + +msgid "no" +msgstr "нет" + +msgid "yes" +msgstr "да" + +#~ msgid "Advertised IPv6 prefix" +#~ msgstr "Извещаемый IPv6 префикс" + +#~ msgid "" +#~ "Advertised IPv6 prefix. If empty, the current interface prefix is used" +#~ msgstr "" +#~ "Извещаемый IPv6 префикс. Если значение не задано, то будет использован " +#~ "текущий префикс интерфейса." + +#~ msgid "" +#~ "Advertises the length of time in seconds that addresses generated from " +#~ "the prefix via stateless address autoconfiguration remain preferred. Use " +#~ "0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Извещает время в секундах, в течение которого адреса сгенерированные " +#~ "автоматически из префикса остаются предпочтительными. 0 устанавливает " +#~ "неограниченное время." + +#~ msgid "" +#~ "Advertises the length of time in seconds that the prefix is valid for the " +#~ "purpose of on-link determination. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Извещает время в секундах, в течение которого используется префикс для " +#~ "определения включения соединения. 0 устанавливает неограниченное время." + +#~ msgid "" +#~ "Indicates whether that RDNSS continues to be available to hosts even if " +#~ "they moved to a different subnet" +#~ msgstr "" +#~ "Указывает остается ли RDNSS доступным для хостов даже в случае их " +#~ "перемещения в другую подсеть" + +#~ msgid "" +#~ "Specifies the lifetime associated with the route in seconds. Use 0 to " +#~ "specify an infinite lifetime" +#~ msgstr "" +#~ "Устанавливает срок действия, связанный с маршрутом (секунды). Используйте " +#~ "0 для установки бесконечного срока действия." + +#~ msgid "" +#~ "Specifies the maximum duration how long the DNSSL entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Устанавливает максимальный срок действия DNSSL элементов для разрешения " +#~ "имен.Используйте 0 для установки бесконечного срока действия" + +#~ msgid "" +#~ "Specifies the maximum duration how long the RDNSS entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "" +#~ "Устанавливает максимальный срок действия DNSSL элементов для разрешения " +#~ "имен.Используйте 0 для установки бесконечного срока действия" diff --git a/feeds/luci/applications/luci-app-radvd/po/sk/radvd.po b/feeds/luci/applications/luci-app-radvd/po/sk/radvd.po new file mode 100644 index 0000000..9bd26fa --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/sk/radvd.po @@ -0,0 +1,367 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "6to4 interface" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Addresses" +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "" + +msgid "Advertised Domain Suffixes" +msgstr "" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radvd/po/sv/radvd.po b/feeds/luci/applications/luci-app-radvd/po/sv/radvd.po new file mode 100644 index 0000000..b2a8899 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/sv/radvd.po @@ -0,0 +1,370 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "6to4 interface" +msgstr "" + +msgid "Address" +msgstr "Adress" + +msgid "Addresses" +msgstr "Adresser" + +msgid "Advanced" +msgstr "Avancerat" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "Annonsera router-adress" + +msgid "Advertised Domain Suffixes" +msgstr "" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "Annonsering" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "Klienter" + +msgid "Configuration flag" +msgstr "Konfigurationsflagga" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "DNSSL" + +msgid "DNSSL Configuration" +msgstr "Konfiguration av DNSSL" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "Aktivera" + +msgid "Enable advertisements" +msgstr "Aktivera annonser" + +msgid "Enables router advertisements and solicitations" +msgstr "Aktivera router-annonser och hemställande" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "Generella" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "Gränssnitt" + +msgid "Interface Configuration" +msgstr "Konfiguration av gränssnitt" + +msgid "Interface required" +msgstr "Gränssnitt krävs" + +msgid "Interfaces" +msgstr "Gränsnitt" + +msgid "Lifetime" +msgstr "Livstid" + +msgid "Link MTU" +msgstr "Länka MTU" + +msgid "Managed flag" +msgstr "Hanterad flagga" + +msgid "Max. interval" +msgstr "Maximalt intervall" + +msgid "Maximum advertisement interval" +msgstr "Maximalt intervall för annonsering" + +msgid "Minimum advertisement delay" +msgstr "Minsta fördröjning av annonsering" + +msgid "Minimum advertisement interval" +msgstr "Minsta intervall för annonsering" + +msgid "Mobile IPv6" +msgstr "Mobilt IPv6" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "Prefix" + +msgid "Prefix Configuration" +msgstr "Konfiguration av prefix" + +msgid "Prefixes" +msgstr "Prefix" + +msgid "RDNSS" +msgstr "RDNSS" + +msgid "RDNSS Configuration" +msgstr "Konfiguration av RDNSS" + +msgid "Radvd" +msgstr "Radvd" + +msgid "Radvd - DNSSL" +msgstr "Radvd - DNSSL" + +msgid "Radvd - Interface %q" +msgstr "Radvd - Gränssnitt %q" + +msgid "Radvd - Prefix" +msgstr "Radvd - Prefix" + +msgid "Radvd - RDNSS" +msgstr "Radvd - RDNSS" + +msgid "Radvd - Route" +msgstr "Radvd - Route" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" +"Begränsa kommunikation till specificerade klienter, lämna tom för att " +"använda multicast" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "Konfiguration för rutt" + +msgid "Routes" +msgstr "Rutter" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "Tillägg" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "Endast Unicast" + +msgid "Valid lifetime" +msgstr "Giltig livstid" + +msgid "Validity time" +msgstr "Tid för giltighet" + +msgid "default" +msgstr "standard" + +msgid "high" +msgstr "hög" + +msgid "low" +msgstr "låg" + +msgid "medium" +msgstr "mellan" + +msgid "no" +msgstr "nej" + +msgid "yes" +msgstr "ja" diff --git a/feeds/luci/applications/luci-app-radvd/po/templates/radvd.pot b/feeds/luci/applications/luci-app-radvd/po/templates/radvd.pot new file mode 100644 index 0000000..ff9eb54 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/templates/radvd.pot @@ -0,0 +1,360 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "6to4 interface" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Addresses" +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "" + +msgid "Advertised Domain Suffixes" +msgstr "" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radvd/po/tr/radvd.po b/feeds/luci/applications/luci-app-radvd/po/tr/radvd.po new file mode 100644 index 0000000..8b8ed8f --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/tr/radvd.po @@ -0,0 +1,367 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "6to4 interface" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Addresses" +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "" + +msgid "Advertised Domain Suffixes" +msgstr "" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radvd/po/uk/radvd.po b/feeds/luci/applications/luci-app-radvd/po/uk/radvd.po new file mode 100644 index 0000000..648035d --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/uk/radvd.po @@ -0,0 +1,381 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-05-26 19:17+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "6to4 interface" +msgstr "Інтерфейс 6to4" + +msgid "Address" +msgstr "Адреса" + +msgid "Addresses" +msgstr "Адреси" + +msgid "Advanced" +msgstr "Додатково" + +msgid "Advertise Home Agent flag" +msgstr "Оголошувати позначку Home Agent" + +msgid "Advertise router address" +msgstr "Оголошувати адресу роутера" + +msgid "Advertised Domain Suffixes" +msgstr "Оголошувані суфікси домену" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" +"Оголошуваний IPv6 RDNSS. Якщо не задано, використовується поточна " +"IPv6-адреса інтерфейсу." + +msgid "Advertised IPv6 prefixes" +msgstr "Оголошувані IPv6-префікси" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" +"Оголошувані IPv6-префікси. Якщо не задано, використовується поточний префікс " +"інтерфейсу" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "Оголошує можливості Home Agent мобільного IPv6 (RFC3775)" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "Оголошує можливості реєстрації мобільного маршрутизатора (NEMO Basic)" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" +"Оголошує передбачуваний час досяжності (у мілісекундах) сусідніх вузлів. " +"Значення 0 відключає оголошення." + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" +"Оголошує типове значення лічильника HOP-ів для вихідних unicast-пакетів. " +"Значення 0 відключає оголошення." + +msgid "Advertises the default router preference" +msgstr "Оголошує типові настройки маршрутизатора" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" +"Оголошує певний максимальний розмір пакета (якщо він вказаний). Значення 0 " +"відключає оголошення." + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "Оголошення" + +msgid "Autonomous" +msgstr "Автономний" + +msgid "Clients" +msgstr "Клієнти" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radvd/po/vi/radvd.po b/feeds/luci/applications/luci-app-radvd/po/vi/radvd.po new file mode 100644 index 0000000..63f8fa0 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/vi/radvd.po @@ -0,0 +1,368 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2010-11-21 04:06+0100\n" +"Last-Translator: \n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "6to4 interface" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Addresses" +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "" + +msgid "Advertised Domain Suffixes" +msgstr "" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radvd/po/zh-cn/radvd.po b/feeds/luci/applications/luci-app-radvd/po/zh-cn/radvd.po new file mode 100644 index 0000000..f3dae7f --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/zh-cn/radvd.po @@ -0,0 +1,391 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2014-07-13 16:23+0200\n" +"Last-Translator: qiuchengxuan \n" +"Language-Team: QQ Group 75543259 \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "6to4 interface" +msgstr "IPv6到IPv4的接口" + +msgid "Address" +msgstr "地址" + +msgid "Addresses" +msgstr "地址" + +msgid "Advanced" +msgstr "进阶选项" + +msgid "Advertise Home Agent flag" +msgstr "广播本地中继标识" + +msgid "Advertise router address" +msgstr "广播路由地址" + +msgid "Advertised Domain Suffixes" +msgstr "区域广播后缀" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "IPv6 Recursive DNS服务器(RDNSS)地址。若为空,则为当前IPv6地址" + +msgid "Advertised IPv6 prefixes" +msgstr "IPV6广播前缀群" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "IPv6广播前缀群。如果为空,将使用当前接口的前缀" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "广播移动IPv6本地代理功能(RFC3775" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "广播移动路由器注册功能(NEMO基本)" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "路由器公告报文中宣告估算的邻居可达时间(毫秒)。0代表禁用可达性宣告。" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "路由器公告报文中广播外发单播数据包的缺省跳数值。 0禁用广播跳数" + +msgid "Advertises the default router preference" +msgstr "发布缺省路由设置" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "路由器公告报文中宣告链路MTU。0代表禁用MTU宣告" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "声明默认路由器的生存时间(单位为秒)。0代表结点没有默认路由" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "自治的" + +msgid "Clients" +msgstr "客户端" + +msgid "Configuration flag" +msgstr "设置标识" + +msgid "Current hop limit" +msgstr "当前跳数限制" + +msgid "DNSSL" +msgstr "DNS搜索列表" + +msgid "DNSSL Configuration" +msgstr "DNS搜索列表设置" + +msgid "Default lifetime" +msgstr "默认生存时限" + +msgid "Default preference" +msgstr "默认优先级" + +msgid "Enable" +msgstr "启用" + +msgid "Enable advertisements" +msgstr "启用广播" + +msgid "Enables router advertisements and solicitations" +msgstr "激活路由广播和请求" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "使能附加的基于状态管理的自动配置协议(RFC2462)" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "启用自动配置,不包括地址信息(RFC2462)" + +msgid "General" +msgstr "概况" + +msgid "Home Agent information" +msgstr "本地中继信息" + +msgid "Home Agent lifetime" +msgstr "本地中继有效期" + +msgid "Home Agent preference" +msgstr "本地中继优先权" + +msgid "Include Home Agent Information in the RA" +msgstr "路由器公告报文中包含本地中继信息" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "路由器公告报文中包含移动IPV6广播间隔设置" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "路由器公告报文中包含出接口的链路层地址" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "表明使用接口的地址发送而非网络前缀,移动IPv6需要" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "表明潜在的链路并不具有广播能力,避免主动触发的宣告报文发出" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "表明此前缀能够用于匿名地址配置(RFC4862)" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "表明此前缀能够用于on-link决定(RFC481)" + +msgid "Interface" +msgstr "接口" + +msgid "Interface Configuration" +msgstr "接口设置" + +msgid "Interface required" +msgstr "接口必要项" + +msgid "Interfaces" +msgstr "接口" + +msgid "Lifetime" +msgstr "有效期" + +msgid "Link MTU" +msgstr "连接MTU" + +msgid "Managed flag" +msgstr "M标识" + +msgid "Max. interval" +msgstr "最大间隔" + +msgid "Maximum advertisement interval" +msgstr "最大广播间隔" + +msgid "Minimum advertisement delay" +msgstr "最小广播延时" + +msgid "Minimum advertisement interval" +msgstr "最小广播间隔" + +msgid "Mobile IPv6" +msgstr "移动IPV6" + +msgid "Mobile IPv6 interval option" +msgstr "移动IPV6间隔选项" + +msgid "Mobile IPv6 router registration" +msgstr "移动IPV6路由注册" + +msgid "Multicast" +msgstr "组播传输" + +msgid "On-link" +msgstr "已连接的" + +msgid "On-link determination" +msgstr "已连接的目标" + +msgid "Preference" +msgstr "优先权" + +msgid "Preferred lifetime" +msgstr "期望的生存时间" + +msgid "Prefix" +msgstr "前缀" + +msgid "Prefix Configuration" +msgstr "前缀设置" + +msgid "Prefixes" +msgstr "前缀群" + +msgid "RDNSS" +msgstr "邻居发现服务器" + +msgid "RDNSS Configuration" +msgstr "邻居发现服务器设置" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "RADVD-DNS搜索列表" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "RADVD-前缀" + +msgid "Radvd - RDNSS" +msgstr "RADVD-邻居发现服务器" + +msgid "Radvd - Route" +msgstr "RADVD-路由" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "RADVD是一个IPV6路由公告软件,按照RFC4861监听路由请求和发送路由公告。" + +msgid "Reachable time" +msgstr "可达延时" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "限制特定会话,留空则使用组播" + +msgid "Retransmit timer" +msgstr "中继转发计时器" + +msgid "Route Configuration" +msgstr "路由设置" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "源链路层地址" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "设定路由关联的生存时间,单位为秒" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "说明这个物理接口连接到哪个网络" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "设定DNSSL表项名称解析的最长时间间隔" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "设定RDNSS表项名称解析的最长时间间隔" + +msgid "Specifies the preference associated with the default router" +msgstr "设定关联的默认路由的配置" + +msgid "Suffix" +msgstr "后缀" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "允许接口发送组播路由宣告报文的最大时间间隔,单位为秒" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "允许接口发送组播路由宣告报文的最小时间间隔,单位为秒" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "允许接口发送主动触发组播路由宣告报文的最小时间间隔,单位为秒" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "单播" + +msgid "Valid lifetime" +msgstr "有效的生存时间" + +msgid "Validity time" +msgstr "有效期" + +msgid "default" +msgstr "默认" + +msgid "high" +msgstr "高" + +msgid "low" +msgstr "低" + +msgid "medium" +msgstr "中等" + +msgid "no" +msgstr "否" + +msgid "yes" +msgstr "是" + +#~ msgid "Advertised IPv6 prefix" +#~ msgstr "IPV6广播前缀" + +#~ msgid "" +#~ "Advertised IPv6 prefix. If empty, the current interface prefix is used" +#~ msgstr "IPV6广播前缀。若为空,则当前接口前缀已被使用。" + +#~ msgid "Open" +#~ msgstr "打开" + +#~ msgid "" +#~ "Specifies the maximum duration how long the DNSSL entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "指定DNSSL解析域名的最长时间,0则为无限长" + +#~ msgid "" +#~ "Specifies the maximum duration how long the RDNSS entries are used for " +#~ "name resolution. Use 0 to specify an infinite lifetime" +#~ msgstr "指定RDNSS解析域名的最长时间,0则为无限长" diff --git a/feeds/luci/applications/luci-app-radvd/po/zh-tw/radvd.po b/feeds/luci/applications/luci-app-radvd/po/zh-tw/radvd.po new file mode 100644 index 0000000..aed76c5 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/po/zh-tw/radvd.po @@ -0,0 +1,366 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "6to4 interface" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Addresses" +msgstr "" + +msgid "Advanced" +msgstr "" + +msgid "Advertise Home Agent flag" +msgstr "" + +msgid "Advertise router address" +msgstr "" + +msgid "Advertised Domain Suffixes" +msgstr "" + +msgid "" +"Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface " +"is used" +msgstr "" + +msgid "Advertised IPv6 prefixes" +msgstr "" + +msgid "" +"Advertised IPv6 prefixes. If empty, the current interface prefix is used" +msgstr "" + +msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)" +msgstr "" + +msgid "Advertises Mobile Router registration capability (NEMO Basic)" +msgstr "" + +msgid "" +"Advertises assumed reachability time in milliseconds of neighbours in the RA " +"if specified. 0 disables reachability advertisements" +msgstr "" + +msgid "" +"Advertises the default Hop Count value for outgoing unicast packets in the " +"RA. 0 disables hopcount advertisements" +msgstr "" + +msgid "Advertises the default router preference" +msgstr "" + +msgid "" +"Advertises the given link MTU in the RA if specified. 0 disables MTU " +"advertisements" +msgstr "" + +msgid "" +"Advertises the length of time in seconds that addresses generated from the " +"prefix via stateless address autoconfiguration remain preferred." +msgstr "" + +msgid "" +"Advertises the length of time in seconds that the prefix is valid for the " +"purpose of on-link determination." +msgstr "" + +msgid "" +"Advertises the lifetime of the default router in seconds. 0 indicates that " +"the node is no default router" +msgstr "" + +msgid "" +"Advertises the time in seconds the router is offering Mobile IPv6 Home Agent " +"services" +msgstr "" + +msgid "" +"Advertises wait time in milliseconds between Neighbor Solicitation messages " +"in the RA if specified. 0 disables retransmit advertisements" +msgstr "" + +msgid "Advertising" +msgstr "" + +msgid "Autonomous" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "Configuration flag" +msgstr "" + +msgid "Current hop limit" +msgstr "" + +msgid "DNSSL" +msgstr "" + +msgid "DNSSL Configuration" +msgstr "" + +msgid "Default lifetime" +msgstr "" + +msgid "Default preference" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable advertisements" +msgstr "" + +msgid "Enables router advertisements and solicitations" +msgstr "" + +msgid "" +"Enables the additional stateful administered autoconfiguration protocol " +"(RFC2462)" +msgstr "" + +msgid "" +"Enables the autoconfiguration of additional, non address information " +"(RFC2462)" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Home Agent information" +msgstr "" + +msgid "Home Agent lifetime" +msgstr "" + +msgid "Home Agent preference" +msgstr "" + +msgid "Include Home Agent Information in the RA" +msgstr "" + +msgid "Include Mobile IPv6 Advertisement Interval option to RA" +msgstr "" + +msgid "Includes the link-layer address of the outgoing interface in the RA" +msgstr "" + +msgid "" +"Indicates that the address of interface is sent instead of network prefix, " +"as is required by Mobile IPv6" +msgstr "" + +msgid "" +"Indicates that the underlying link is not broadcast capable, prevents " +"unsolicited advertisements from being sent" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for autonomous address configuration " +"(RFC4862)" +msgstr "" + +msgid "" +"Indicates that this prefix can be used for on-link determination (RFC4861)" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface required" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Lifetime" +msgstr "" + +msgid "Link MTU" +msgstr "" + +msgid "Managed flag" +msgstr "" + +msgid "Max. interval" +msgstr "" + +msgid "Maximum advertisement interval" +msgstr "" + +msgid "Minimum advertisement delay" +msgstr "" + +msgid "Minimum advertisement interval" +msgstr "" + +msgid "Mobile IPv6" +msgstr "" + +msgid "Mobile IPv6 interval option" +msgstr "" + +msgid "Mobile IPv6 router registration" +msgstr "" + +msgid "Multicast" +msgstr "" + +msgid "On-link" +msgstr "" + +msgid "On-link determination" +msgstr "" + +msgid "Preference" +msgstr "" + +msgid "Preferred lifetime" +msgstr "" + +msgid "Prefix" +msgstr "" + +msgid "Prefix Configuration" +msgstr "" + +msgid "Prefixes" +msgstr "" + +msgid "RDNSS" +msgstr "" + +msgid "RDNSS Configuration" +msgstr "" + +msgid "Radvd" +msgstr "" + +msgid "Radvd - DNSSL" +msgstr "" + +msgid "Radvd - Interface %q" +msgstr "" + +msgid "Radvd - Prefix" +msgstr "" + +msgid "Radvd - RDNSS" +msgstr "" + +msgid "Radvd - Route" +msgstr "" + +msgid "" +"Radvd is a router advertisement daemon for IPv6. It listens to router " +"solicitations and sends router advertisements as described in RFC 4861." +msgstr "" + +msgid "Reachable time" +msgstr "" + +msgid "" +"Restrict communication to specified clients, leave empty to use multicast" +msgstr "" + +msgid "Retransmit timer" +msgstr "" + +msgid "Route Configuration" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "Source link-layer address" +msgstr "" + +msgid "" +"Specifies a logical interface name to derive a 6to4 prefix from. The " +"interfaces public IPv4 address is combined with 2002::/3 and the value of " +"the prefix option" +msgstr "" + +msgid "Specifies the lifetime associated with the route in seconds." +msgstr "" + +msgid "Specifies the logical interface name this section belongs to" +msgstr "" + +msgid "" +"Specifies the maximum duration how long the DNSSL entries are used for name " +"resolution." +msgstr "" + +msgid "" +"Specifies the maximum duration how long the RDNSS entries are used for name " +"resolution." +msgstr "" + +msgid "Specifies the preference associated with the default router" +msgstr "" + +msgid "Suffix" +msgstr "" + +msgid "" +"The maximum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending multicast router advertisements " +"from the interface, in seconds" +msgstr "" + +msgid "" +"The minimum time allowed between sending unsolicited multicast router " +"advertisements from the interface, in seconds" +msgstr "" + +msgid "The preference for the Home Agent sending this RA" +msgstr "" + +msgid "Timing" +msgstr "" + +msgid "Unicast only" +msgstr "" + +msgid "Valid lifetime" +msgstr "" + +msgid "Validity time" +msgstr "" + +msgid "default" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + +msgid "medium" +msgstr "" + +msgid "no" +msgstr "" + +msgid "yes" +msgstr "" diff --git a/feeds/luci/applications/luci-app-radvd/root/etc/uci-defaults/40_luci-radvd b/feeds/luci/applications/luci-app-radvd/root/etc/uci-defaults/40_luci-radvd new file mode 100755 index 0000000..c1f3b75 --- /dev/null +++ b/feeds/luci/applications/luci-app-radvd/root/etc/uci-defaults/40_luci-radvd @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@radvd[-1] + add ucitrack radvd + set ucitrack.@radvd[-1].init=radvd + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-rp-pppoe-server/Makefile b/feeds/luci/applications/luci-app-rp-pppoe-server/Makefile new file mode 100644 index 0000000..6cf4595 --- /dev/null +++ b/feeds/luci/applications/luci-app-rp-pppoe-server/Makefile @@ -0,0 +1,15 @@ +# +# Copyright (C) 2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Roaring Penguing PPPoE Server +LUCI_DEPENDS:=+rp-pppoe-server + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-rp-pppoe-server/luasrc/controller/rp-pppoe-server.lua b/feeds/luci/applications/luci-app-rp-pppoe-server/luasrc/controller/rp-pppoe-server.lua new file mode 100644 index 0000000..105a80e --- /dev/null +++ b/feeds/luci/applications/luci-app-rp-pppoe-server/luasrc/controller/rp-pppoe-server.lua @@ -0,0 +1,13 @@ +-- Copyright 2015 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.rp-pppoe-server", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/pppoe") then + return + end + + entry({"admin", "services", "rp-pppoe-server"}, cbi("rp-pppoe-server"), _("RP PPPoE Server")) +end + diff --git a/feeds/luci/applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua b/feeds/luci/applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua new file mode 100644 index 0000000..ef15ed6 --- /dev/null +++ b/feeds/luci/applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua @@ -0,0 +1,72 @@ +-- Copyright 2015 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +local m, s, o + +local nixio = require "nixio" + +m = Map("pppoe", translate("Roaring Penguin PPPoE Server"), + translate("PPPoE Server Configuration")) + +s = m:section(TypedSection, "pppoe_server", translate("Server Configuration")) +s.addremove = false +s.anonymous = true + +o = s:option(Value, "interface", translate("Interface"), translate("Interface on which to listen.")) +o.template = "cbi/network_ifacelist" +o.nocreate = true + +o = s:option(Value, "ac_name", translate("Access Concentrator Name")) +o.optional = true + +o = s:option(DynamicList, "service_name", translate("Service Name")) +o.optional = true + +o = s:option(Value, "maxsessionsperpeer", translate("Maximum sessions per peer")) +o.optional = true +o.datatype = "uinteger" + +o = s:option(Value, "localip", translate("IP of listening side")) +o.datetype = "ipaddr" + +o = s:option(Value, "firstremoteip", translate("First remote IP")) +o.datatype = "ipaddr" + +o = s:option(Value, "maxsessions", translate("Maximum sessions")) +o.datatype = "uinteger" +o.default = 64 +o.optional = true + +o = s:option(Value, "optionsfile", translate("Options file")) +o.default = "/etc/ppp/pppoe-server-options" +o.optional = true + +o = s:option(Flag, "randomsessions", translate("Random session selection"), translate("Instead of starting at beginning and going to end, randomize session number")) +o.optional = true + +o = s:option(Value, "unit", translate("Unit"), translate("PPP unit number")) +o.optional = true +o.datatype = "uinteger" +o.default = 0 + +o = s:option(Value, "offset", translate("Offset"), translate("PPP offset")) +o.optional = true +o.datatype = "uinteger" +o.default = 0 + +o = s:option(Value, "timeout", translate("Timeout")) +o.optional = true +o.datatype = "uinteger" +o.default = 60 + +o = s:option(Value, "mss", translate("MSS")) +o.optional = true +o.datatype = "uinteger" +o.default = 1468 + + +o = s:option(Flag, "sync", translate("Sync")) +o.optional = true +o.default = false + +return m diff --git a/feeds/luci/applications/luci-app-samba/Makefile b/feeds/luci/applications/luci-app-samba/Makefile new file mode 100644 index 0000000..ba599b3 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Network Shares - Samba SMB/CIFS module +LUCI_DEPENDS:=+samba36-server + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-samba/luasrc/controller/samba.lua b/feeds/luci/applications/luci-app-samba/luasrc/controller/samba.lua new file mode 100644 index 0000000..397af6a --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/luasrc/controller/samba.lua @@ -0,0 +1,16 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.samba", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/samba") then + return + end + + local page + + page = entry({"admin", "services", "samba"}, cbi("samba"), _("Network Shares")) + page.dependent = true +end diff --git a/feeds/luci/applications/luci-app-samba/luasrc/model/cbi/samba.lua b/feeds/luci/applications/luci-app-samba/luasrc/model/cbi/samba.lua new file mode 100644 index 0000000..721191a --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/luasrc/model/cbi/samba.lua @@ -0,0 +1,72 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("samba", translate("Network Shares")) + +s = m:section(TypedSection, "samba", "Samba") +s.anonymous = true + +s:tab("general", translate("General Settings")) +s:tab("template", translate("Edit Template")) + +s:taboption("general", Value, "name", translate("Hostname")) +s:taboption("general", Value, "description", translate("Description")) +s:taboption("general", Value, "workgroup", translate("Workgroup")) +s:taboption("general", Value, "homes", translate("Share home-directories"), + translate("Allow system users to reach their home directories via " .. + "network shares")) + +tmpl = s:taboption("template", Value, "_tmpl", + translate("Edit the template that is used for generating the samba configuration."), + translate("This is the content of the file '/etc/samba/smb.conf.template' from which your samba configuration will be generated. " .. + "Values enclosed by pipe symbols ('|') should not be changed. They get their values from the 'General Settings' tab.")) + +tmpl.template = "cbi/tvalue" +tmpl.rows = 20 + +function tmpl.cfgvalue(self, section) + return nixio.fs.readfile("/etc/samba/smb.conf.template") +end + +function tmpl.write(self, section, value) + value = value:gsub("\r\n?", "\n") + nixio.fs.writefile("//etc/samba/smb.conf.template", value) +end + + +s = m:section(TypedSection, "sambashare", translate("Shared Directories")) +s.anonymous = true +s.addremove = true +s.template = "cbi/tblsection" + +s:option(Value, "name", translate("Name")) +pth = s:option(Value, "path", translate("Path")) +if nixio.fs.access("/etc/config/fstab") then + pth.titleref = luci.dispatcher.build_url("admin", "system", "fstab") +end + +s:option(Value, "users", translate("Allowed users")).rmempty = true + +ro = s:option(Flag, "read_only", translate("Read-only")) +ro.rmempty = false +ro.enabled = "yes" +ro.disabled = "no" + +go = s:option(Flag, "guest_ok", translate("Allow guests")) +go.rmempty = false +go.enabled = "yes" +go.disabled = "no" + +cm = s:option(Value, "create_mask", translate("Create mask"), + translate("Mask for new files")) +cm.rmempty = true +cm.size = 4 + +dm = s:option(Value, "dir_mask", translate("Directory mask"), + translate("Mask for new directories")) +dm.rmempty = true +dm.size = 4 + + +return m diff --git a/feeds/luci/applications/luci-app-samba/po/ca/samba.po b/feeds/luci/applications/luci-app-samba/po/ca/samba.po new file mode 100644 index 0000000..0668b1b --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/ca/samba.po @@ -0,0 +1,95 @@ +# samba.pot +# generated from ./applications/luci-samba/luasrc/i18n/samba.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-07-01 05:47+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Allow guests" +msgstr "Permet convidats" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Permet que els usuaris del sistema pugin arribar als seus directoris d'inici " +"via comparticions de xarxa" + +msgid "Allowed users" +msgstr "Usuaris permesos" + +msgid "Create mask" +msgstr "Crea màscara" + +msgid "Description" +msgstr "Descripció" + +msgid "Directory mask" +msgstr "Màscara de directori" + +msgid "Edit Template" +msgstr "Edita plantilla" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "Edita la plantilla que s'usa per generar la configuració de samba." + +msgid "General Settings" +msgstr "Ajusts generals" + +msgid "Hostname" +msgstr "Nom de màquina" + +msgid "Mask for new directories" +msgstr "Màscara per directoris nous" + +msgid "Mask for new files" +msgstr "Màscara per fitxers nous" + +msgid "Name" +msgstr "Nom" + +msgid "Network Shares" +msgstr "Comparticions de xarxa" + +msgid "Path" +msgstr "Ruta" + +msgid "Read-only" +msgstr "Només lectura" + +msgid "Share home-directories" +msgstr "Comparteix directoris d'inici" + +msgid "Shared Directories" +msgstr "Directoris compartits" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Això és el contingut del fitxer '/etc/samba/smb.conf.template' del qual la " +"vostra configuració de samba es generarà. Valors encerclats per símbols de " +"barra ('|') no es deuen canviar. Reben els seus valors de la pestanya " +"'Ajusts generals'." + +msgid "Workgroup" +msgstr "Grup de treball" + +#~ msgid "Shared Directory" +#~ msgstr "Directori compartit" + +#~ msgid "Physical Path" +#~ msgstr "Ruta física" + +#~ msgid "optional" +#~ msgstr "opcional" diff --git a/feeds/luci/applications/luci-app-samba/po/cs/samba.po b/feeds/luci/applications/luci-app-samba/po/cs/samba.po new file mode 100644 index 0000000..fefb7ff --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/cs/samba.po @@ -0,0 +1,83 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-31 13:56+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Allow guests" +msgstr "Povolení hosté" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Povoluje systémovým uživatelům přístup do jejich domácích adresářů skrze " +"sdílení přes síť." + +msgid "Allowed users" +msgstr "Povolení uživatelé" + +msgid "Create mask" +msgstr "Vytvořit masku" + +msgid "Description" +msgstr "Popis" + +msgid "Directory mask" +msgstr "Maska adresáře" + +msgid "Edit Template" +msgstr "Editovat šablonu" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" +"Editovat šablonu, která je použita pro generování konfiguračního souboru pro " +"sambu." + +msgid "General Settings" +msgstr "Obecné nastavení" + +msgid "Hostname" +msgstr "Název počítače." + +msgid "Mask for new directories" +msgstr "Maska pro nové adresáře" + +msgid "Mask for new files" +msgstr "Maska pro nové soubory" + +msgid "Name" +msgstr "Jméno" + +msgid "Network Shares" +msgstr "Síťová sdílení" + +msgid "Path" +msgstr "Cesta" + +msgid "Read-only" +msgstr "Pouze pro čtení" + +msgid "Share home-directories" +msgstr "Sdílet domácí adresáře" + +msgid "Shared Directories" +msgstr "Sdílené adresáře" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Toto je obsah souboru \"/etc/samba/smb.conf.template\", ze kterého je " +"konfigurace samby generována. Hodnoty uzavřené rourou (\"|\"), by se neměly " +"měnit. Tyto hodnoty jsou brány ze záložky \"Obecná nastavení\"." + +msgid "Workgroup" +msgstr "Skupina" diff --git a/feeds/luci/applications/luci-app-samba/po/de/samba.po b/feeds/luci/applications/luci-app-samba/po/de/samba.po new file mode 100644 index 0000000..a5ceb05 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/de/samba.po @@ -0,0 +1,87 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2011-10-18 13:13+0200\n" +"Last-Translator: Manuel \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Allow guests" +msgstr "Gastzugang" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Systembenutzer dürfen ihre Heimatverzeichnis über Netzwerkfreigaben " +"erreichen." + +msgid "Allowed users" +msgstr "Legitimierte Benutzer" + +msgid "Create mask" +msgstr "Berechtigungsmaske für neue Dateien" + +msgid "Description" +msgstr "Beschreibung" + +msgid "Directory mask" +msgstr "Verzeichnismaske" + +msgid "Edit Template" +msgstr "Template bearbeiten" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" +"Hier kann das Template bearbeitet werden, das zur Erstellung der Samba-" +"Konfigurationsdateien verwendet wird." + +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +msgid "Hostname" +msgstr "Hostname" + +msgid "Mask for new directories" +msgstr "Maske für neue Verzeichnisse" + +msgid "Mask for new files" +msgstr "Maske für neue Dateien" + +msgid "Name" +msgstr "Name" + +msgid "Network Shares" +msgstr "Netzwerkfreigaben" + +msgid "Path" +msgstr "Pfad" + +msgid "Read-only" +msgstr "Nur Lesen" + +msgid "Share home-directories" +msgstr "Heimatverzeichnisse freigeben" + +msgid "Shared Directories" +msgstr "Freigegebene Verzeichnisse" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Dieses Fenster zeigt den Inhalt der Datei '/etc/samba/smb.conf.template', " +"die als Template zum Erstellen der Samba-Konfiguration verwendet wird. Werte " +"die von Pipe Symbolen (|) eingeschlossen sind sollten nicht verändert " +"werden, da diese beim Erstellen der Konfiguration mit den Werten aus dem Tab " +"'Allgemeine Einstellungen' ersetzt werden." + +msgid "Workgroup" +msgstr "Arbeitsgruppe" diff --git a/feeds/luci/applications/luci-app-samba/po/el/samba.po b/feeds/luci/applications/luci-app-samba/po/el/samba.po new file mode 100644 index 0000000..7cc722d --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/el/samba.po @@ -0,0 +1,78 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-28 02:08+0200\n" +"PO-Revision-Date: 2012-03-18 15:31+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Allow guests" +msgstr "" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" + +msgid "Allowed users" +msgstr "" + +msgid "Create mask" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Directory mask" +msgstr "" + +msgid "Edit Template" +msgstr "" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Mask for new directories" +msgstr "" + +msgid "Mask for new files" +msgstr "" + +msgid "Name" +msgstr "Όνομα" + +msgid "Network Shares" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Read-only" +msgstr "" + +msgid "Share home-directories" +msgstr "" + +msgid "Shared Directories" +msgstr "" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" + +msgid "Workgroup" +msgstr "" diff --git a/feeds/luci/applications/luci-app-samba/po/en/samba.po b/feeds/luci/applications/luci-app-samba/po/en/samba.po new file mode 100644 index 0000000..f524c14 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/en/samba.po @@ -0,0 +1,82 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-22 15:23+0100\n" +"PO-Revision-Date: 2011-10-25 21:26+0200\n" +"Last-Translator: awm1 \n" +"Language-Team: LANGUAGE \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Allow guests" +msgstr "Allow guests" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "Allow system users to reach their home directories via network shares" + +msgid "Allowed users" +msgstr "Allowed users" + +msgid "Create mask" +msgstr "Create mask" + +msgid "Description" +msgstr "Description" + +msgid "Directory mask" +msgstr "Directory mask" + +msgid "Edit Template" +msgstr "Edit template" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "Edit the template that is used for generating the Samba configuration." + +msgid "General Settings" +msgstr "General settings" + +msgid "Hostname" +msgstr "Hostname" + +msgid "Mask for new directories" +msgstr "Mask for new directories" + +msgid "Mask for new files" +msgstr "Mask for new files" + +msgid "Name" +msgstr "Name" + +msgid "Network Shares" +msgstr "Network Shares" + +msgid "Path" +msgstr "Path" + +msgid "Read-only" +msgstr "Read-only" + +msgid "Share home-directories" +msgstr "Share home-directories" + +msgid "Shared Directories" +msgstr "Shared Directories" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your Samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"settings' tab." + +msgid "Workgroup" +msgstr "Workgroup" diff --git a/feeds/luci/applications/luci-app-samba/po/es/samba.po b/feeds/luci/applications/luci-app-samba/po/es/samba.po new file mode 100644 index 0000000..950a817 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/es/samba.po @@ -0,0 +1,92 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-08-22 17:45+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Allow guests" +msgstr "Permitir invitados" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Permitir a los usuarios acceder a sus directorios de inicio vía " +"comparticiones de red" + +msgid "Allowed users" +msgstr "Usuarios permitidos" + +msgid "Create mask" +msgstr "Crear máscara" + +msgid "Description" +msgstr "Descripción" + +msgid "Directory mask" +msgstr "Máscara de directorio" + +msgid "Edit Template" +msgstr "Editar plantilla" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "Editar la plantilla usada para generar la configuración de samba." + +msgid "General Settings" +msgstr "Configuración general" + +msgid "Hostname" +msgstr "Nombre de máquina" + +msgid "Mask for new directories" +msgstr "Máscara para directorios nuevos" + +msgid "Mask for new files" +msgstr "Máscara para archivos nuevos" + +msgid "Name" +msgstr "Nombre" + +msgid "Network Shares" +msgstr "Comparticiones de red" + +msgid "Path" +msgstr "Dirección" + +msgid "Read-only" +msgstr "Solo lectura" + +msgid "Share home-directories" +msgstr "Compartir directorios personales" + +msgid "Shared Directories" +msgstr "Directorios compartidos" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Contenido del fichero '/etc/samba/smb.conf.template' desde el que se " +"generará la configuración de samba. Los valores entre tuberías ('|') no " +"deben cambiarse. Su valor se toma desde la pestaña 'Configuración General'." + +msgid "Workgroup" +msgstr "Grupo de trabajo" + +#~ msgid "Shared Directory" +#~ msgstr "Directorio compatido" + +#~ msgid "Physical Path" +#~ msgstr "Ruta Física" + +#~ msgid "optional" +#~ msgstr "opcional" diff --git a/feeds/luci/applications/luci-app-samba/po/fr/samba.po b/feeds/luci/applications/luci-app-samba/po/fr/samba.po new file mode 100644 index 0000000..8877900 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/fr/samba.po @@ -0,0 +1,84 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2011-11-23 22:36+0200\n" +"Last-Translator: fredb \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Allow guests" +msgstr "Invités autorisés" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Autoriser les utilisateurs système à atteindre leurs dossiers personnels via " +"les partages réseau" + +msgid "Allowed users" +msgstr "Utilisateurs autorisés" + +msgid "Create mask" +msgstr "Maque de création" + +msgid "Description" +msgstr "Description" + +msgid "Directory mask" +msgstr "Masque des dossiers" + +msgid "Edit Template" +msgstr "Éditer le modèle" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "Éditer le modèle utilisé pour générer la configuration Samba." + +msgid "General Settings" +msgstr "Paramètres généraux" + +msgid "Hostname" +msgstr "Nom d'hôte" + +msgid "Mask for new directories" +msgstr "Masque pour les nouveaux dossiers" + +msgid "Mask for new files" +msgstr "Masque pour les nouveaux fichiers" + +msgid "Name" +msgstr "Nom" + +msgid "Network Shares" +msgstr "Partages réseau" + +msgid "Path" +msgstr "Chemin" + +msgid "Read-only" +msgstr "Lecture seule" + +msgid "Share home-directories" +msgstr "Partager les dossiers personnels" + +msgid "Shared Directories" +msgstr "Dossiers partagés" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Voici le contenu du fichier '/etc/samba/smb.conf.template' d'où sera généré " +"votre configuration Samba. Les valeurs entre les symboles barre-verticale " +" (« | ») ne doivent pas être modifiées, elles proviennent de l'onglet " +"« Paramètres généraux »." + +msgid "Workgroup" +msgstr "Groupe de travail" diff --git a/feeds/luci/applications/luci-app-samba/po/he/samba.po b/feeds/luci/applications/luci-app-samba/po/he/samba.po new file mode 100644 index 0000000..dd21a4a --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/he/samba.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Allow guests" +msgstr "" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" + +msgid "Allowed users" +msgstr "" + +msgid "Create mask" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Directory mask" +msgstr "" + +msgid "Edit Template" +msgstr "" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Mask for new directories" +msgstr "" + +msgid "Mask for new files" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Shares" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Read-only" +msgstr "" + +msgid "Share home-directories" +msgstr "" + +msgid "Shared Directories" +msgstr "" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" + +msgid "Workgroup" +msgstr "" diff --git a/feeds/luci/applications/luci-app-samba/po/hu/samba.po b/feeds/luci/applications/luci-app-samba/po/hu/samba.po new file mode 100644 index 0000000..64d1e22 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/hu/samba.po @@ -0,0 +1,84 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-06 10:56+0200\n" +"Last-Translator: juhosg \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Allow guests" +msgstr "Vendég hozzáférés" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"A rendszerfelhasználók hálózati megosztáson keresztül hozzáférhetnek a home " +"könyvtárukhoz." + +msgid "Allowed users" +msgstr "Engedélyezett felhasználók" + +msgid "Create mask" +msgstr "Létrehozási maszk" + +msgid "Description" +msgstr "Leírás" + +msgid "Directory mask" +msgstr "Könyvtár maszk" + +msgid "Edit Template" +msgstr "Sablon szerkesztése" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" +"Itt szerkesztheti a sablont, ami a végleges samba konfiguráció " +"elkészítéséhez kerül felhasználásra." + +msgid "General Settings" +msgstr "Általános beállítások" + +msgid "Hostname" +msgstr "Gépnév" + +msgid "Mask for new directories" +msgstr "Új könyvtárak maszkja" + +msgid "Mask for new files" +msgstr "Új fájlok maszkja" + +msgid "Name" +msgstr "Név" + +msgid "Network Shares" +msgstr "Hálózati megosztások" + +msgid "Path" +msgstr "Elérési út" + +msgid "Read-only" +msgstr "Csak olvasható" + +msgid "Share home-directories" +msgstr "Home könyvtárak megosztása" + +msgid "Shared Directories" +msgstr "Megosztott könyvtárak" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Itt látható a /etc/samba/smb.conf.template file tartalma, ami a samba " +"konfiguráció előállításához kerül felhasználásra. A pipe szimbólumok ('|') " +"közé zárt értékek módosítása nem szükséges, az értéküket az általános " +"beállítások fülről kapják." + +msgid "Workgroup" +msgstr "Munkacsoport" diff --git a/feeds/luci/applications/luci-app-samba/po/it/samba.po b/feeds/luci/applications/luci-app-samba/po/it/samba.po new file mode 100644 index 0000000..4645782 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/it/samba.po @@ -0,0 +1,85 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-04-19 22:28+0200\n" +"Last-Translator: claudyus \n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Allow guests" +msgstr "Permetti ospiti" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Autorizza gli utenti del sistema a raggiungere la loro cartella home " +"attraverso le condivisioni di rete" + +msgid "Allowed users" +msgstr "Utenti ammessi" + +msgid "Create mask" +msgstr "Mask di creazione dei file" + +msgid "Description" +msgstr "Descrizione" + +msgid "Directory mask" +msgstr "Maschera della cartella" + +msgid "Edit Template" +msgstr "Modifica Template" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" +"Modifica il template utilizzato per generare la configurazione di samba." + +msgid "General Settings" +msgstr "Opzioni Generali" + +msgid "Hostname" +msgstr "Hostname" + +msgid "Mask for new directories" +msgstr "Maschera per le nuove cartelle" + +msgid "Mask for new files" +msgstr "Maschera per i nuovi files" + +msgid "Name" +msgstr "Nome" + +msgid "Network Shares" +msgstr "Condivisioni di rete" + +msgid "Path" +msgstr "Percorso" + +msgid "Read-only" +msgstr "Solo lettura" + +msgid "Share home-directories" +msgstr "Condividi cartelle home" + +msgid "Shared Directories" +msgstr "Cartelle Condivise" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Questo è il contenuto del file '/etc/samba/smb.conf.template' dal quale sarà " +"generata la tua configurazione di samba. I valori racchiusi tra il simbolo " +"('|') non dovrebbero essere toccati. Essi vengono generati dalla schermata " +"'Opzioni Generali'." + +msgid "Workgroup" +msgstr "Gruppo di lavoro" diff --git a/feeds/luci/applications/luci-app-samba/po/ja/samba.po b/feeds/luci/applications/luci-app-samba/po/ja/samba.po new file mode 100644 index 0000000..c527507 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/ja/samba.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2011-11-03 18:09+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Allow guests" +msgstr "ゲストアクセスを許可" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "sambaを介してユーザーのホームディレクトリへのアクセスを許可します" + +msgid "Allowed users" +msgstr "許可されたユーザー" + +msgid "Create mask" +msgstr "マスクの作成" + +msgid "Description" +msgstr "説明" + +msgid "Directory mask" +msgstr "ディレクトリのマスク" + +msgid "Edit Template" +msgstr "テンプレートの編集" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "samba設定を生成するテンプレートを編集します。" + +msgid "General Settings" +msgstr "一般設定" + +msgid "Hostname" +msgstr "ホスト名" + +msgid "Mask for new directories" +msgstr "新規ディレクトリのマスク" + +msgid "Mask for new files" +msgstr "新規ファイルのマスク" + +msgid "Name" +msgstr "名前" + +msgid "Network Shares" +msgstr "ネットワーク共有" + +msgid "Path" +msgstr "パス" + +msgid "Read-only" +msgstr "読み込みのみ" + +msgid "Share home-directories" +msgstr "ホームディレクトリの共有" + +msgid "Shared Directories" +msgstr "共有ディレクトリ" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"これは、samba設定を生成するための'/etc/samba/smb.conf.template' ファイルの内" +"容です。パイプ('|')で閉じられた値は変更しないでください。これらの値は'一般設" +"定'タブ内の値によって置き換えられます。" + +msgid "Workgroup" +msgstr "ワークグループ" diff --git a/feeds/luci/applications/luci-app-samba/po/ms/samba.po b/feeds/luci/applications/luci-app-samba/po/ms/samba.po new file mode 100644 index 0000000..e29133e --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/ms/samba.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Allow guests" +msgstr "" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" + +msgid "Allowed users" +msgstr "" + +msgid "Create mask" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Directory mask" +msgstr "" + +msgid "Edit Template" +msgstr "" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Mask for new directories" +msgstr "" + +msgid "Mask for new files" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Shares" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Read-only" +msgstr "" + +msgid "Share home-directories" +msgstr "" + +msgid "Shared Directories" +msgstr "" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" + +msgid "Workgroup" +msgstr "" diff --git a/feeds/luci/applications/luci-app-samba/po/no/samba.po b/feeds/luci/applications/luci-app-samba/po/no/samba.po new file mode 100644 index 0000000..1c5c807 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/no/samba.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Allow guests" +msgstr "Tillat gjester" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "Tillat systembrukere å nå sine hjemmekataloger via nettverks mapper." + +msgid "Allowed users" +msgstr "Tillatte brukere" + +msgid "Create mask" +msgstr "Opprett Maske" + +msgid "Description" +msgstr "Beskrivelse" + +msgid "Directory mask" +msgstr "Katalog maske" + +msgid "Edit Template" +msgstr "Rediger Mal" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "Rediger malen som brukes til å generere samba konfigurasjonen." + +msgid "General Settings" +msgstr "Generelle Innstillinger" + +msgid "Hostname" +msgstr "Vertsnavn" + +msgid "Mask for new directories" +msgstr "Maske for nye kataloger" + +msgid "Mask for new files" +msgstr "Maske for nye filer" + +msgid "Name" +msgstr "Navn" + +msgid "Network Shares" +msgstr "Nettverks Mapper" + +msgid "Path" +msgstr "Fysisk bane" + +msgid "Read-only" +msgstr "Skrivebeskyttet" + +msgid "Share home-directories" +msgstr "Del Hjemmekataloger" + +msgid "Shared Directories" +msgstr "Delte Kataloger" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Dette er innholdet av filen '/etc/samba/smb.conf.template' som din samba " +"konfigurasjon vil bli generert fra. Verdier omsluttet av ('|') bør ikke " +"endres. De får sine verdier fra 'Generelle Innstillinger' fanen." + +msgid "Workgroup" +msgstr "Arbeidsgruppe" diff --git a/feeds/luci/applications/luci-app-samba/po/pl/samba.po b/feeds/luci/applications/luci-app-samba/po/pl/samba.po new file mode 100644 index 0000000..7482622 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/pl/samba.po @@ -0,0 +1,83 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-08-26 09:51+0200\n" +"Last-Translator: Staszek \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Allow guests" +msgstr "Zezwalaj Gościom" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Użytkownicy systemu mogą dostać się do swoich katalogów domowych za " +"pośrednictwem udziałów sieciowych." + +msgid "Allowed users" +msgstr "Użytkownicy z prawem dostępu" + +msgid "Create mask" +msgstr "Utwórz maskę" + +msgid "Description" +msgstr "Opis" + +msgid "Directory mask" +msgstr "Maska katalogu" + +msgid "Edit Template" +msgstr "Edytuj szablon" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "Edytuj szablon, który jest używany do generowania konfiguracji samby." + +msgid "General Settings" +msgstr "Ustawienia ogólne" + +msgid "Hostname" +msgstr "Nazwa hosta" + +msgid "Mask for new directories" +msgstr "Maska dla nowych katalogów" + +msgid "Mask for new files" +msgstr "Maska dla nowych plików" + +msgid "Name" +msgstr "Nazwa" + +msgid "Network Shares" +msgstr "Udziały sieciowe" + +msgid "Path" +msgstr "Ścieżka" + +msgid "Read-only" +msgstr "Tylko do odczytu" + +msgid "Share home-directories" +msgstr "Udostępniaj katalogi domowe" + +msgid "Shared Directories" +msgstr "Udostępniane katalogi" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"To jest zawartość pliku '/etc/samba/smb.conf.template\", na podstawie " +"którego zostanie wygenerowana konfiguracja samby. Wartości otoczone symbolem " +"kreski pionowej ('|') nie powinny być zmieniane. Wartości ich zostaną " +"pobrane z zakładki \"Ustawienia ogólne\"." + +msgid "Workgroup" +msgstr "Grupa robocza" diff --git a/feeds/luci/applications/luci-app-samba/po/pt-br/samba.po b/feeds/luci/applications/luci-app-samba/po/pt-br/samba.po new file mode 100644 index 0000000..a753152 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/pt-br/samba.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2013-04-06 22:54+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Allow guests" +msgstr "Permitir convidados" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Usuários do sistema poderão acessar seu diretório home através dos " +"compartilhamentos de rede" + +msgid "Allowed users" +msgstr "Usuários permitidos" + +msgid "Create mask" +msgstr "Máscara de criação" + +msgid "Description" +msgstr "Descrição" + +msgid "Directory mask" +msgstr "Máscara do diretório" + +msgid "Edit Template" +msgstr "Editar modelo" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "Edita o modelo que é usado para gerar a configuração do samba." + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "Hostname" +msgstr "Nome do equipamento" + +msgid "Mask for new directories" +msgstr "Máscara para novos diretórios" + +msgid "Mask for new files" +msgstr "Máscara para novos arquivos" + +msgid "Name" +msgstr "Nome" + +msgid "Network Shares" +msgstr "Compartilhamentos de Rede" + +msgid "Path" +msgstr "Caminho" + +msgid "Read-only" +msgstr "Somente leitura" + +msgid "Share home-directories" +msgstr "Compartilhar diretórios home" + +msgid "Shared Directories" +msgstr "Diretórios Compartilhados" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Este é o conteúdo do arquivo '/etc/samba/smb.conf.template' a partir do qual " +"sua configuração do samba será gerada. Valores entre simbolos de pipe ('|') " +"não devem ser alterados. Estes valores serão obtidos a partir da aba " +"'Configurações Gerais'." + +msgid "Workgroup" +msgstr "Grupo de trabalho" + +#~ msgid "Shared Directory" +#~ msgstr "Diretório Compartilhado" + +#~ msgid "Physical Path" +#~ msgstr "Caminho Físico" + +#~ msgid "optional" +#~ msgstr "opcional" diff --git a/feeds/luci/applications/luci-app-samba/po/pt/samba.po b/feeds/luci/applications/luci-app-samba/po/pt/samba.po new file mode 100644 index 0000000..4c5a2cd --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/pt/samba.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-05-01 01:13+0200\n" +"Last-Translator: pedromrgoncalves \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Allow guests" +msgstr "Permitir Convidados" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Utilizadores do sistema poderão aceder ao seu directório home através das " +"partilhas de rede." + +msgid "Allowed users" +msgstr "Utilizadores Permitidos" + +msgid "Create mask" +msgstr "Criar Máscara" + +msgid "Description" +msgstr "Descrição" + +msgid "Directory mask" +msgstr "Máscara do Directório" + +msgid "Edit Template" +msgstr "Editar Template" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "Editar a template que é utilizada para gerar a configuração samba" + +msgid "General Settings" +msgstr "Definições Gerais" + +msgid "Hostname" +msgstr "Nome do host" + +msgid "Mask for new directories" +msgstr "Máscara para novos directórios" + +msgid "Mask for new files" +msgstr "Máscara para novos ficheiros" + +msgid "Name" +msgstr "Nome" + +msgid "Network Shares" +msgstr "Partilhas da Rede" + +msgid "Path" +msgstr "Caminho" + +msgid "Read-only" +msgstr "Apenas Leitura" + +msgid "Share home-directories" +msgstr "Partilha de directórios home" + +msgid "Shared Directories" +msgstr "Directórios Partilhados" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Isto é o conteúdo do ficheiro 'etc/samba/smb.conf.template' a partir do qual " +"será gerado o ficheiro de configuração do samba. Os valores entre o símbolo " +"| não devem ser alterados. Eles recebem os valores do separador 'Definições " +"Gerais'." + +msgid "Workgroup" +msgstr "Grupo de trabalho" + +#~ msgid "Shared Directory" +#~ msgstr "Diretório Compartilhado" + +#~ msgid "Physical Path" +#~ msgstr "Caminho Físico" + +#~ msgid "optional" +#~ msgstr "opcional" diff --git a/feeds/luci/applications/luci-app-samba/po/ro/samba.po b/feeds/luci/applications/luci-app-samba/po/ro/samba.po new file mode 100644 index 0000000..4bc3415 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/ro/samba.po @@ -0,0 +1,82 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-07 17:16+0200\n" +"Last-Translator: Daniel \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Allow guests" +msgstr "Permite oaspeti" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Permite utilizatorii de sistem sa acceseze directoarele lor peste " +"partajarile de retea" + +msgid "Allowed users" +msgstr "Utilizatori acceptati" + +msgid "Create mask" +msgstr "Creaza masca" + +msgid "Description" +msgstr "Descriere" + +msgid "Directory mask" +msgstr "Masca director" + +msgid "Edit Template" +msgstr "Editeaza sablon" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "Editeaza sablonul care e folosit pentru generarea configuratiei samba." + +msgid "General Settings" +msgstr "Setari generale" + +msgid "Hostname" +msgstr "Numele de host" + +msgid "Mask for new directories" +msgstr "Masca pentru directoarele noi" + +msgid "Mask for new files" +msgstr "Masca pentru fisierele noi" + +msgid "Name" +msgstr "Nume" + +msgid "Network Shares" +msgstr "Partajari pe retea" + +msgid "Path" +msgstr "Cale" + +msgid "Read-only" +msgstr "Doar citire" + +msgid "Share home-directories" +msgstr "Partajeaza directoarele proprii" + +msgid "Shared Directories" +msgstr "Directoare partajate" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Acesta este continutul fisierului '/etc/samba/smb.conf.template' din care se " +"genereaza configuratia samba. Valorile dintre liniuta verticala ('|') n-ar " +"trebui schimbate, ele iau valorile direct din tab-ul de \"Setari generale\"." + +msgid "Workgroup" +msgstr "Workgroup" diff --git a/feeds/luci/applications/luci-app-samba/po/ru/samba.po b/feeds/luci/applications/luci-app-samba/po/ru/samba.po new file mode 100644 index 0000000..82906e3 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/ru/samba.po @@ -0,0 +1,85 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: samba\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-08-15 13:48+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Allow guests" +msgstr "Разрешить гостевой вход" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Разрешить пользователям получать доступ к их домашним директориям через сеть" + +msgid "Allowed users" +msgstr "Разрешённые пользователи" + +msgid "Create mask" +msgstr "Создать маску" + +msgid "Description" +msgstr "Описание" + +msgid "Directory mask" +msgstr "Маска директории" + +msgid "Edit Template" +msgstr "Редактировать шаблон" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "Редактировать шаблон, используемый для генерации конфигурации samba." + +msgid "General Settings" +msgstr "Общие настройки" + +msgid "Hostname" +msgstr "Имя хоста" + +msgid "Mask for new directories" +msgstr "Маска для новых директорий" + +msgid "Mask for new files" +msgstr "Маска для новых файлов" + +msgid "Name" +msgstr "Имя" + +msgid "Network Shares" +msgstr "Сетевые ресурсы" + +msgid "Path" +msgstr "Путь" + +msgid "Read-only" +msgstr "Только для чтения" + +msgid "Share home-directories" +msgstr "Совместно использовать домашние директории" + +msgid "Shared Directories" +msgstr "Совместно используемые директории" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Это содержимое файла '/etc/samba/smb.conf.template', из которого " +"генерируется конфигурация samba. Значения, заключённые в символы \"|\", не " +"должны быть изменены. Они будут автоматически заменены на значения из " +"вкладки 'Общие настройки'." + +msgid "Workgroup" +msgstr "Рабочая группа" diff --git a/feeds/luci/applications/luci-app-samba/po/sk/samba.po b/feeds/luci/applications/luci-app-samba/po/sk/samba.po new file mode 100644 index 0000000..66ec9e0 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/sk/samba.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Allow guests" +msgstr "" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" + +msgid "Allowed users" +msgstr "" + +msgid "Create mask" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Directory mask" +msgstr "" + +msgid "Edit Template" +msgstr "" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Mask for new directories" +msgstr "" + +msgid "Mask for new files" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Shares" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Read-only" +msgstr "" + +msgid "Share home-directories" +msgstr "" + +msgid "Shared Directories" +msgstr "" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" + +msgid "Workgroup" +msgstr "" diff --git a/feeds/luci/applications/luci-app-samba/po/sv/samba.po b/feeds/luci/applications/luci-app-samba/po/sv/samba.po new file mode 100644 index 0000000..b83dec5 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/sv/samba.po @@ -0,0 +1,75 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Allow guests" +msgstr "Tillåt gäster" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "Tillåt systemanvändare att nå deras hem-mappar via nätverksdelningar" + +msgid "Allowed users" +msgstr "Tillåtna användare" + +msgid "Create mask" +msgstr "Skapa mask" + +msgid "Description" +msgstr "Beskrivning" + +msgid "Directory mask" +msgstr "Mask för mapp" + +msgid "Edit Template" +msgstr "Redigera mall" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" +"Redigera mallen som används för att generera konfigurationen för samba." + +msgid "General Settings" +msgstr "Generella inställningar" + +msgid "Hostname" +msgstr "Värdnamn" + +msgid "Mask for new directories" +msgstr "Mask för nya mappar" + +msgid "Mask for new files" +msgstr "Mask för nya filer" + +msgid "Name" +msgstr "Namn" + +msgid "Network Shares" +msgstr "Nätverksdelningar" + +msgid "Path" +msgstr "Genväg" + +msgid "Read-only" +msgstr "Endast läsbar" + +msgid "Share home-directories" +msgstr "Dela hem-mappar" + +msgid "Shared Directories" +msgstr "Delade mappar" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" + +msgid "Workgroup" +msgstr "Arbetsgrupp" diff --git a/feeds/luci/applications/luci-app-samba/po/templates/samba.pot b/feeds/luci/applications/luci-app-samba/po/templates/samba.pot new file mode 100644 index 0000000..d91400b --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/templates/samba.pot @@ -0,0 +1,66 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Allow guests" +msgstr "" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" + +msgid "Allowed users" +msgstr "" + +msgid "Create mask" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Directory mask" +msgstr "" + +msgid "Edit Template" +msgstr "" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Mask for new directories" +msgstr "" + +msgid "Mask for new files" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Shares" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Read-only" +msgstr "" + +msgid "Share home-directories" +msgstr "" + +msgid "Shared Directories" +msgstr "" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" + +msgid "Workgroup" +msgstr "" diff --git a/feeds/luci/applications/luci-app-samba/po/tr/samba.po b/feeds/luci/applications/luci-app-samba/po/tr/samba.po new file mode 100644 index 0000000..fda2f6e --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/tr/samba.po @@ -0,0 +1,73 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Allow guests" +msgstr "" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" + +msgid "Allowed users" +msgstr "" + +msgid "Create mask" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Directory mask" +msgstr "" + +msgid "Edit Template" +msgstr "" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Mask for new directories" +msgstr "" + +msgid "Mask for new files" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Network Shares" +msgstr "" + +msgid "Path" +msgstr "" + +msgid "Read-only" +msgstr "" + +msgid "Share home-directories" +msgstr "" + +msgid "Shared Directories" +msgstr "" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" + +msgid "Workgroup" +msgstr "" diff --git a/feeds/luci/applications/luci-app-samba/po/uk/samba.po b/feeds/luci/applications/luci-app-samba/po/uk/samba.po new file mode 100644 index 0000000..6f2a920 --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/uk/samba.po @@ -0,0 +1,84 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-18 20:35+0200\n" +"Last-Translator: YuriPet \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Allow guests" +msgstr "Дозволити гостьовий вхід" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Дозволити користувачам системи досягати своїх домашніх каталогів через " +"загальні мережеві ресурси" + +msgid "Allowed users" +msgstr "Дозволені користувачі" + +msgid "Create mask" +msgstr "Створити маску" + +msgid "Description" +msgstr "Опис" + +msgid "Directory mask" +msgstr "Маска каталогу" + +msgid "Edit Template" +msgstr "Редагувати шаблон" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" +"Редагувати шаблон, який використовується для створення конфігурації samba." + +msgid "General Settings" +msgstr "Загальні настройки" + +msgid "Hostname" +msgstr "Назва (ім'я) вузла" + +msgid "Mask for new directories" +msgstr "Маска для нових каталогів" + +msgid "Mask for new files" +msgstr "Маска для нових файлів" + +msgid "Name" +msgstr "Ім'я" + +msgid "Network Shares" +msgstr "Загальні мережеві ресурси" + +msgid "Path" +msgstr "Шлях" + +msgid "Read-only" +msgstr "Тільки читання" + +msgid "Share home-directories" +msgstr "Спільно використовувати домашні каталоги" + +msgid "Shared Directories" +msgstr "Загальні каталоги" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"Це вміст файлу '/etc/samba/smb.conf.template', з якого буде генеруватися " +"ваша конфігурація samba. Значення, укладені в символи \"вертикальна риска" +"\" (\"|\") не повинні змінюватися. Вони отримують свої значення з вкладки " +"\"Загальні налаштування\"." + +msgid "Workgroup" +msgstr "Робоча група" diff --git a/feeds/luci/applications/luci-app-samba/po/vi/samba.po b/feeds/luci/applications/luci-app-samba/po/vi/samba.po new file mode 100644 index 0000000..4e5638d --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/vi/samba.po @@ -0,0 +1,96 @@ +# samba.pot +# generated from ./applications/luci-samba/luasrc/i18n/samba.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:59+0200\n" +"PO-Revision-Date: 2009-08-13 03:54+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#, fuzzy +msgid "Allow guests" +msgstr "Cho phép khách" + +#, fuzzy +msgid "Allow system users to reach their home directories via network shares" +msgstr "" +"Những người sử dụng hệ thống có thể tiếp cận những thư mục tại nhà thông qua " +"mạng lưới chia sẻ trực tuyến." + +#, fuzzy +msgid "Allowed users" +msgstr "Người sử dụng được cho phép" + +#, fuzzy +msgid "Create mask" +msgstr "Tạo Mask" + +msgid "Description" +msgstr "Mô tả" + +#, fuzzy +msgid "Directory mask" +msgstr "Thư mục Mask" + +msgid "Edit Template" +msgstr "" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Hostname" +msgstr "tên máy chủ" + +msgid "Mask for new directories" +msgstr "Mask cho thư mục mới" + +msgid "Mask for new files" +msgstr "Mask cho tập tin mới" + +msgid "Name" +msgstr "" + +msgid "Network Shares" +msgstr "Mạng chia sẻ" + +msgid "Path" +msgstr "" + +#, fuzzy +msgid "Read-only" +msgstr "Chỉ đọc " + +msgid "Share home-directories" +msgstr "Chia sẻ danh bạ chính" + +msgid "Shared Directories" +msgstr "Thư mục chia sẻ" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" + +msgid "Workgroup" +msgstr "Nhóm làm việc " + +#~ msgid "Shared Directory" +#~ msgstr "Đã chia sẻ thư mục" + +#~ msgid "Physical Path" +#~ msgstr "Đường dẫn vật lý" + +#~ msgid "optional" +#~ msgstr "Tùy thích" diff --git a/feeds/luci/applications/luci-app-samba/po/zh-cn/samba.po b/feeds/luci/applications/luci-app-samba/po/zh-cn/samba.po new file mode 100644 index 0000000..4ff671b --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/zh-cn/samba.po @@ -0,0 +1,83 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-06-21 18:31+0200\n" +"Last-Translator: phantasm131 \n" +"Language-Team: QQ Group 75543259 \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Allow guests" +msgstr "允许匿名用户" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "允许系统用户通过网络共享访问他们的主目录" + +msgid "Allowed users" +msgstr "允许用户" + +msgid "Create mask" +msgstr "创建权限" + +msgid "Description" +msgstr "描述" + +msgid "Directory mask" +msgstr "目录权限" + +msgid "Edit Template" +msgstr "编辑模板" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "编辑用来生成samba设置的模板" + +msgid "General Settings" +msgstr "基本设置" + +msgid "Hostname" +msgstr "主机名" + +msgid "Mask for new directories" +msgstr "新目录权限" + +msgid "Mask for new files" +msgstr "新文件权限" + +msgid "Name" +msgstr "共享名" + +msgid "Network Shares" +msgstr "网络共享" + +msgid "Path" +msgstr "目录" + +msgid "Read-only" +msgstr "只读" + +msgid "Share home-directories" +msgstr "共享主目录" + +msgid "Shared Directories" +msgstr "共享目录" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "" +"创建samba设置的 \"/etc/samba/smb.conf.template\" 文件的内容。被通道符|包围的" +"值可在基本设置中进行配置" + +msgid "Workgroup" +msgstr "工作组" + +#~ msgid "Physical Path" +#~ msgstr "物理路径" diff --git a/feeds/luci/applications/luci-app-samba/po/zh-tw/samba.po b/feeds/luci/applications/luci-app-samba/po/zh-tw/samba.po new file mode 100644 index 0000000..6ec99ee --- /dev/null +++ b/feeds/luci/applications/luci-app-samba/po/zh-tw/samba.po @@ -0,0 +1,76 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-07 15:43+0200\n" +"Last-Translator: Ethan \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Allow guests" +msgstr "允許匿名使用者" + +msgid "Allow system users to reach their home directories via network shares" +msgstr "允許系統使用者透過網路分享家目錄" + +msgid "Allowed users" +msgstr "允許使用者" + +msgid "Create mask" +msgstr "建立權限" + +msgid "Description" +msgstr "描述" + +msgid "Directory mask" +msgstr "目錄權限" + +msgid "Edit Template" +msgstr "編輯樣版" + +msgid "Edit the template that is used for generating the samba configuration." +msgstr "編輯用來產生Samba設定的樣板" + +msgid "General Settings" +msgstr "基本設定" + +msgid "Hostname" +msgstr "主機名稱" + +msgid "Mask for new directories" +msgstr "新目錄權限" + +msgid "Mask for new files" +msgstr "新檔案權限" + +msgid "Name" +msgstr "共用名稱" + +msgid "Network Shares" +msgstr "網路分享" + +msgid "Path" +msgstr "路徑" + +msgid "Read-only" +msgstr "唯讀" + +msgid "Share home-directories" +msgstr "分享家目錄" + +msgid "Shared Directories" +msgstr "分享目錄" + +msgid "" +"This is the content of the file '/etc/samba/smb.conf.template' from which " +"your samba configuration will be generated. Values enclosed by pipe symbols " +"('|') should not be changed. They get their values from the 'General " +"Settings' tab." +msgstr "建立Samba設定的 \"/etc/samba/smb.conf.template\" 檔案內容。被('|')包圍的值可以在基本設定中進行設定" + +msgid "Workgroup" +msgstr "工作群組" diff --git a/feeds/luci/applications/luci-app-shadowsocks-libev/Makefile b/feeds/luci/applications/luci-app-shadowsocks-libev/Makefile new file mode 100644 index 0000000..848a5c8 --- /dev/null +++ b/feeds/luci/applications/luci-app-shadowsocks-libev/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for Shadowsocks-libev +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua b/feeds/luci/applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua new file mode 100644 index 0000000..ae96816 --- /dev/null +++ b/feeds/luci/applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua @@ -0,0 +1,12 @@ +-- Copyright 2015 Jian Chang +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.shadowsocks-libev", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/shadowsocks-libev") then + return + end + + entry({"admin", "services", "shadowsocks-libev"}, cbi("shadowsocks-libev"), _("ShadowSocks-libev"), 74).dependent = true +end diff --git a/feeds/luci/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua b/feeds/luci/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua new file mode 100644 index 0000000..76435e2 --- /dev/null +++ b/feeds/luci/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua @@ -0,0 +1,156 @@ +-- Copyright 2015 Jian Chang +-- Licensed to the public under the Apache License 2.0. + +local m, s, o, e, a + +if luci.sys.call("pidof ss-redir >/dev/null") == 0 then + m = Map("shadowsocks-libev", translate("ShadowSocks-libev"), translate("ShadowSocks-libev is running")) +else + m = Map("shadowsocks-libev", translate("ShadowSocks-libev"), translate("ShadowSocks-libev is not running")) +end + +e = { + "table", + "rc4", + "rc4-md5", + "aes-128-cfb", + "aes-192-cfb", + "aes-256-cfb", + "bf-cfb", + "camellia-128-cfb", + "camellia-192-cfb", + "camellia-256-cfb", + "cast5-cfb", + "des-cfb", + "idea-cfb", + "rc2-cfb", + "seed-cfb", + "salsa20", + "chacha20", +} + +-- Global Setting +s = m:section(TypedSection, "shadowsocks-libev", translate("Global Setting")) +s.anonymous = true + +o = s:option(Flag, "enable", translate("Enable")) +o.default = 1 +o.rmempty = false + +o = s:option(Value, "server", translate("Server Address")) +o.datatype = "ipaddr" +o.rmempty = false + +o = s:option(Value, "server_port", translate("Server Port")) +o.datatype = "port" +o.rmempty = false + +o = s:option(Value, "local_port", translate("Local Port")) +o.datatype = "port" +o.default = 1080 +o.rmempty = false + +o = s:option(Value, "timeout", translate("Connection Timeout")) +o.datatype = "uinteger" +o.default = 60 +o.rmempty = false + +o = s:option(Value, "password", translate("Password")) +o.password = true +o.rmempty = false + +o = s:option(ListValue, "encrypt_method", translate("Encrypt Method")) +for i,v in ipairs(e) do + o:value(v) +end +o.rmempty = false + +o = s:option(Value, "ignore_list", translate("Ignore List")) +o:value("/dev/null", translate("Disabled")) +o.default = "/dev/null" +o.rmempty = false + +-- UDP Relay +s = m:section(TypedSection, "shadowsocks-libev", translate("UDP Relay")) +s.anonymous = true + +o = s:option(ListValue, "udp_mode", translate("Relay Mode")) +o:value("0", translate("Disabled")) +o:value("1", translate("Enabled")) +o:value("2", translate("Custom")) +o.default = 0 +o.rmempty = false + +o = s:option(Value, "udp_server", translate("Server Address")) +o.datatype = "ipaddr" +o:depends("udp_mode", 2) + +o = s:option(Value, "udp_server_port", translate("Server Port")) +o.datatype = "port" +o:depends("udp_mode", 2) + +o = s:option(Value, "udp_local_port", translate("Local Port")) +o.datatype = "port" +o.default = 1081 +o:depends("udp_mode", 2) + +o = s:option(Value, "udp_timeout", translate("Connection Timeout")) +o.datatype = "uinteger" +o.default = 60 +o:depends("udp_mode", 2) + +o = s:option(Value, "udp_password", translate("Password")) +o.password = true +o:depends("udp_mode", 2) + +o = s:option(ListValue, "udp_encrypt_method", translate("Encrypt Method")) +for i,v in ipairs(e) do + o:value(v) +end +o:depends("udp_mode", 2) + +-- UDP Forward +s = m:section(TypedSection, "shadowsocks-libev", translate("UDP Forward")) +s.anonymous = true + +o = s:option(Flag, "tunnel_enable", translate("Enable")) +o.default = 1 +o.rmempty = false + +o = s:option(Value, "tunnel_port", translate("UDP Local Port")) +o.datatype = "port" +o.default = 5300 + +o = s:option(Value, "tunnel_forward", translate("Forwarding Tunnel")) +o.default = "8.8.4.4:53" + +-- Access Control +s = m:section(TypedSection, "shadowsocks-libev", translate("Access Control")) +s.anonymous = true + +s:tab("lan_ac", translate("LAN")) + +o = s:taboption("lan_ac", ListValue, "lan_ac_mode", translate("Access Control")) +o:value("0", translate("Disabled")) +o:value("1", translate("Allow listed only")) +o:value("2", translate("Allow all except listed")) +o.default = 0 +o.rmempty = false + +a = luci.sys.net.arptable() or {} + +o = s:taboption("lan_ac", DynamicList, "lan_ac_ip", translate("LAN IP List")) +o.datatype = "ipaddr" +for i,v in ipairs(a) do + o:value(v["IP address"]) +end + +s:tab("wan_ac", translate("WAN")) + +o = s:taboption("wan_ac", DynamicList, "wan_bp_ip", translate("Bypassed IP")) +o.datatype = "ip4addr" + +o = s:taboption("wan_ac", DynamicList, "wan_fw_ip", translate("Forwarded IP")) +o.datatype = "ip4addr" + +return m diff --git a/feeds/luci/applications/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po b/feeds/luci/applications/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po new file mode 100644 index 0000000..b0cf6d3 --- /dev/null +++ b/feeds/luci/applications/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po @@ -0,0 +1,136 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Access Control" +msgstr "" + +msgid "Allow all except listed" +msgstr "" + +msgid "Allow listed only" +msgstr "" + +msgid "Bypassed IP" +msgstr "" + +msgid "Connection Timeout" +msgstr "" + +msgid "Custom" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encrypt Method" +msgstr "" + +msgid "Forwarded IP" +msgstr "" + +msgid "Forwarding Tunnel" +msgstr "" + +msgid "Global Setting" +msgstr "" + +msgid "Ignore List" +msgstr "" + +msgid "LAN" +msgstr "" + +msgid "LAN IP List" +msgstr "" + +msgid "Local Port" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Relay Mode" +msgstr "" + +msgid "Server Address" +msgstr "" + +msgid "Server Port" +msgstr "" + +msgid "ShadowSocks-libev" +msgstr "" + +msgid "ShadowSocks-libev is not running" +msgstr "" + +msgid "ShadowSocks-libev is running" +msgstr "" + +msgid "UDP Forward" +msgstr "" + +msgid "UDP Local Port" +msgstr "" + +msgid "UDP Relay" +msgstr "" + +msgid "WAN" +msgstr "" + +#~ msgid "Broadcast on all interfaces" +#~ msgstr "Sänd i alla gränssnitt" + +#~ msgid "Choose the host to wake up or enter a custom MAC address to use" +#~ msgstr "" +#~ "Välj värden som ska väckas upp eller fyll i en anpassad MAC-adress att " +#~ "använda" + +#~ msgid "Host to wake up" +#~ msgstr "Värd som ska väckas upp" + +#~ msgid "Network interface to use" +#~ msgstr "Nätverksgränssnitt som ska användas" + +#~ msgid "" +#~ "Sometimes only one of the two tools works. If one fails, try the other one" +#~ msgstr "" +#~ "Ibland så fungerar bara en av de två verktygen. Prova med den andra om " +#~ "den första misslyckades" + +#~ msgid "Specifies the interface the WoL packet is sent on" +#~ msgstr "Anger gränssnittet som fjärrstartspaketet skickas med" + +#~ msgid "Starting WoL utility:" +#~ msgstr "Startar hjälpprogrammet för fjärrstyrning av uppstart:" + +#~ msgid "Wake on LAN" +#~ msgstr "Fjärrstyrning av uppstart" + +#~ msgid "" +#~ "Wake on LAN is a mechanism to remotely boot computers in the local " +#~ "network." +#~ msgstr "" +#~ "Fjärrstyrning av uppstart är en mekanism för att starta upp datorer via " +#~ "fjärrstyrning i det lokala nätverket." + +#~ msgid "Wake up host" +#~ msgstr "Väck upp värden" + +#~ msgid "WoL program" +#~ msgstr "Program för fjärrstart" diff --git a/feeds/luci/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot b/feeds/luci/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot new file mode 100644 index 0000000..81bbcb7 --- /dev/null +++ b/feeds/luci/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot @@ -0,0 +1,86 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Access Control" +msgstr "" + +msgid "Allow all except listed" +msgstr "" + +msgid "Allow listed only" +msgstr "" + +msgid "Bypassed IP" +msgstr "" + +msgid "Connection Timeout" +msgstr "" + +msgid "Custom" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encrypt Method" +msgstr "" + +msgid "Forwarded IP" +msgstr "" + +msgid "Forwarding Tunnel" +msgstr "" + +msgid "Global Setting" +msgstr "" + +msgid "Ignore List" +msgstr "" + +msgid "LAN" +msgstr "" + +msgid "LAN IP List" +msgstr "" + +msgid "Local Port" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Relay Mode" +msgstr "" + +msgid "Server Address" +msgstr "" + +msgid "Server Port" +msgstr "" + +msgid "ShadowSocks-libev" +msgstr "" + +msgid "ShadowSocks-libev is not running" +msgstr "" + +msgid "ShadowSocks-libev is running" +msgstr "" + +msgid "UDP Forward" +msgstr "" + +msgid "UDP Local Port" +msgstr "" + +msgid "UDP Relay" +msgstr "" + +msgid "WAN" +msgstr "" diff --git a/feeds/luci/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po b/feeds/luci/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po new file mode 100644 index 0000000..f86eee7 --- /dev/null +++ b/feeds/luci/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-11-12 14:12+0800\n" +"PO-Revision-Date: 2015-07-02 14:26+0800\n" +"Last-Translator: Jian Chang \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Access Control" +msgstr "访问控制" + +msgid "Allow all except listed" +msgstr "仅允许列表外" + +msgid "Allow listed only" +msgstr "仅允许列表内" + +msgid "Bypassed IP" +msgstr "被忽略的IP" + +msgid "Connection Timeout" +msgstr "连接超时" + +msgid "Custom" +msgstr "自定义" + +msgid "Disabled" +msgstr "已禁用" + +msgid "Enable" +msgstr "启用" + +msgid "Enabled" +msgstr "已启用" + +msgid "Encrypt Method" +msgstr "加密方式" + +msgid "Forwarded IP" +msgstr "走代理的IP" + +msgid "Forwarding Tunnel" +msgstr "UDP转发地址" + +msgid "Global Setting" +msgstr "全局设置" + +msgid "Ignore List" +msgstr "忽略列表" + +msgid "LAN" +msgstr "" + +msgid "LAN IP List" +msgstr "内网IP列表" + +msgid "Local Port" +msgstr "本地端口" + +msgid "Password" +msgstr "密码" + +msgid "Relay Mode" +msgstr "中继模式" + +msgid "Server Address" +msgstr "服务器地址" + +msgid "Server Port" +msgstr "服务器端口" + +msgid "ShadowSocks-libev" +msgstr "ShadowSocks-libev" + +msgid "ShadowSocks-libev is not running" +msgstr "ShadowSocks-libev 未运行" + +msgid "ShadowSocks-libev is running" +msgstr "ShadowSocks-libev 运行中" + +msgid "UDP Forward" +msgstr "UDP转发" + +msgid "UDP Local Port" +msgstr "UDP本地端口" + +msgid "UDP Relay" +msgstr "UDP中继" + +msgid "WAN" +msgstr "" diff --git a/feeds/luci/applications/luci-app-shadowsocks-libev/root/etc/uci-defaults/40_luci-shadowsocks-libev b/feeds/luci/applications/luci-app-shadowsocks-libev/root/etc/uci-defaults/40_luci-shadowsocks-libev new file mode 100644 index 0000000..6f30fa7 --- /dev/null +++ b/feeds/luci/applications/luci-app-shadowsocks-libev/root/etc/uci-defaults/40_luci-shadowsocks-libev @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@shadowsocks-libev[-1] + add ucitrack shadowsocks-libev + set ucitrack.@shadowsocks-libev[-1].init=shadowsocks-libev + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-shairplay/Makefile b/feeds/luci/applications/luci-app-shairplay/Makefile new file mode 100644 index 0000000..dcc0611 --- /dev/null +++ b/feeds/luci/applications/luci-app-shairplay/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for Shairplay +LUCI_DEPENDS:=+shairplay + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-shairplay/luasrc/controller/shairplay.lua b/feeds/luci/applications/luci-app-shairplay/luasrc/controller/shairplay.lua new file mode 100644 index 0000000..d322301 --- /dev/null +++ b/feeds/luci/applications/luci-app-shairplay/luasrc/controller/shairplay.lua @@ -0,0 +1,14 @@ +-- Copyright 2014 Álvaro Fernández Rojas +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.shairplay", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/shairplay") then + return + end + + local page = entry({"admin", "services", "shairplay"}, cbi("shairplay"), _("Shairplay")) + page.dependent = true + +end diff --git a/feeds/luci/applications/luci-app-shairplay/luasrc/model/cbi/shairplay.lua b/feeds/luci/applications/luci-app-shairplay/luasrc/model/cbi/shairplay.lua new file mode 100644 index 0000000..4e078d7 --- /dev/null +++ b/feeds/luci/applications/luci-app-shairplay/luasrc/model/cbi/shairplay.lua @@ -0,0 +1,65 @@ +-- Copyright 2014 Álvaro Fernández Rojas +-- Licensed to the public under the Apache License 2.0. + +m = Map("shairplay", "Shairplay", translate("Shairplay is a simple AirPlay server implementation, here you can configure the settings.")) + +s = m:section(TypedSection, "shairplay", "") +s.addremove = true +s.anonymous = false + +enable=s:option(Flag, "disabled", translate("Enabled")) +enable.enabled="0" +enable.disabled="1" +enable.default = "1" +enable.rmempty = false +respawn=s:option(Flag, "respawn", translate("Respawn")) +respawn.default = false + +apname = s:option(Value, "apname", translate("Airport Name")) +apname.rmempty = true + +port=s:option(Value, "port", translate("Port")) +port.rmempty = true +port.datatype = "port" + +pw = s:option(Value, "password", translate("Password")) +pw.rmempty = true +pw.password = true + +hwaddr=s:option(Value, "hwaddr", translate("HW Address")) +hwaddr.rmempty = true +hwaddr.datatype = "macaddr" + +ao_driver=s:option(ListValue, "ao_driver", translate("AO Driver")) +ao_driver:value("", translate("Default")) +ao_driver:value("alsa") +--ao_driver:value("alsa05") +--ao_driver:value("arts") +--ao_driver:value("esd") +--ao_driver:value("irix") +--ao_driver:value("nas") +ao_driver:value("oss") +--ao_driver:value("sun") + +ao_devicename=s:option(Value, "ao_devicename", translate("AO Device Name")) +ao_devicename.rmempty = true + +ao_deviceid = s:option(ListValue, "ao_deviceid", translate("AO Device ID")) +ao_deviceid.rmempty = true +ao_deviceid:value("", translate("Default")) +local pats = io.popen("find /proc/asound/ -type d -name 'card*' | sort") +if pats then + local l + while true do + l = pats:read("*l") + if not l then break end + + l = string.gsub(l, "/proc/asound/card", "") + if l then + ao_deviceid:value(l) + end + end + pats:close() +end + +return m diff --git a/feeds/luci/applications/luci-app-shairplay/po/ja/shairplay.po b/feeds/luci/applications/luci-app-shairplay/po/ja/shairplay.po new file mode 100644 index 0000000..07fa7be --- /dev/null +++ b/feeds/luci/applications/luci-app-shairplay/po/ja/shairplay.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2017-01-03 15:06+0900\n" +"Last-Translator: INAGAKI Hiroshi \n" +"Language-Team: \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"X-Poedit-Basepath: .\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "AO Device ID" +msgstr "オーディオ出力 デバイスID" + +msgid "AO Device Name" +msgstr "オーディオ出力 デバイス名" + +msgid "AO Driver" +msgstr "オーディオ出力 デバイスドライバー" + +msgid "Airport Name" +msgstr "Airport名" + +msgid "Default" +msgstr "デフォルト" + +msgid "Enabled" +msgstr "有効" + +msgid "HW Address" +msgstr "ハードウェア アドレス" + +msgid "Password" +msgstr "パスワード" + +msgid "Port" +msgstr "ポート" + +msgid "Respawn" +msgstr "リスポーン" + +msgid "Shairplay" +msgstr "" + +msgid "" +"Shairplay is a simple AirPlay server implementation, here you can configure " +"the settings." +msgstr "" +"Shairplayは、シンプルなAirPlay サーバー実装です。ここでは、設定を行うことがで" +"きます。" diff --git a/feeds/luci/applications/luci-app-shairplay/po/templates/shairplay.pot b/feeds/luci/applications/luci-app-shairplay/po/templates/shairplay.pot new file mode 100644 index 0000000..b3da99e --- /dev/null +++ b/feeds/luci/applications/luci-app-shairplay/po/templates/shairplay.pot @@ -0,0 +1,40 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "AO Device ID" +msgstr "" + +msgid "AO Device Name" +msgstr "" + +msgid "AO Driver" +msgstr "" + +msgid "Airport Name" +msgstr "" + +msgid "Default" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "HW Address" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Respawn" +msgstr "" + +msgid "Shairplay" +msgstr "" + +msgid "" +"Shairplay is a simple AirPlay server implementation, here you can configure " +"the settings." +msgstr "" diff --git a/feeds/luci/applications/luci-app-shairplay/root/etc/uci-defaults/40_luci-shairplay b/feeds/luci/applications/luci-app-shairplay/root/etc/uci-defaults/40_luci-shairplay new file mode 100644 index 0000000..efc8a89 --- /dev/null +++ b/feeds/luci/applications/luci-app-shairplay/root/etc/uci-defaults/40_luci-shairplay @@ -0,0 +1,12 @@ +#!/bin/sh + +# needed for "Save and Apply" to restart shairplay +uci -q batch <<-EOF >/dev/null + delete ucitrack.@shairplay[-1] + add ucitrack shairplay + set ucitrack.@shairplay[-1].init="shairplay" + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-shairport/Makefile b/feeds/luci/applications/luci-app-shairport/Makefile new file mode 100644 index 0000000..f174ef4 --- /dev/null +++ b/feeds/luci/applications/luci-app-shairport/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for Shairport +LUCI_DEPENDS:=+shairport + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-shairport/luasrc/controller/shairport.lua b/feeds/luci/applications/luci-app-shairport/luasrc/controller/shairport.lua new file mode 100644 index 0000000..b31b64e --- /dev/null +++ b/feeds/luci/applications/luci-app-shairport/luasrc/controller/shairport.lua @@ -0,0 +1,14 @@ +-- Copyright 2014 Álvaro Fernández Rojas +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.shairport", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/shairport") then + return + end + + local page = entry({"admin", "services", "shairport"}, cbi("shairport"), _("Shairport")) + page.dependent = true + +end diff --git a/feeds/luci/applications/luci-app-shairport/luasrc/model/cbi/shairport.lua b/feeds/luci/applications/luci-app-shairport/luasrc/model/cbi/shairport.lua new file mode 100644 index 0000000..d3c2a25 --- /dev/null +++ b/feeds/luci/applications/luci-app-shairport/luasrc/model/cbi/shairport.lua @@ -0,0 +1,161 @@ +-- Copyright 2014 Álvaro Fernández Rojas +-- Licensed to the public under the Apache License 2.0. + +m = Map("shairport", "Shairport", translate("Shairport is a simple AirPlay server implementation, here you can configure the settings.")) + +s = m:section(TypedSection, "shairport", "") +s.addremove = true +s.anonymous = false + +enable=s:option(Flag, "disabled", translate("Enabled")) +enable.enabled="0" +enable.disabled="1" +enable.default = "1" +enable.rmempty = false +respawn=s:option(Flag, "respawn", translate("Respawn")) +respawn.default = false + +bname = s:option(Value, "bname", translate("Airport Name")) +bname.rmempty = true + +pw = s:option(Value, "password", translate("Password")) +pw.rmempty = true +pw.password = true + +port=s:option(Value, "port", translate("Port")) +port.rmempty = true +port.datatype = "port" + +buffer=s:option(Value, "buffer", translate("Buffer fill")) +buffer.rmempty = true +buffer.datatype = "uinteger" + +log_file=s:option(Value, "log_file", translate("Log file")) +log_file.rmempty = true +--log_file.datatype = "file" + +err_file=s:option(Value, "err_file", translate("Error file")) +err_file.rmempty = true +--err_file.datatype = "file" + +meta_dir=s:option(Value, "meta_dir", translate("Metadata directory")) +meta_dir.rmempty = true +meta_dir.datatype = "directory" + +cmd_start=s:option(Value, "cmd_start", translate("Command when playback begins")) +cmd_start.rmempty = true + +cmd_stop=s:option(Value, "cmd_stop", translate("Command when playback ends")) +cmd_stop.rmempty = true + +cmd_wait=s:option(Flag, "cmd_wait", translate("Block while the commands run")) +cmd_wait.default = false + +mdns=s:option(ListValue, "mdns", translate("mDNS")) +mdns.rmempty = true +mdns:value("", translate("Default")) +mdns:value("avahi") +mdns:value("dns_sd") +mdns:value("external_avahi") +mdns:value("external_dns_sd") +mdns:value("tinysvcmdns") + +audio_output=s:option(ListValue, "audio_output", translate("Audio output")) +audio_output.rmempty = true +audio_output:value("", translate("Default")) +audio_output:value("alsa") +audio_output:value("ao") +audio_output:value("dummy") +audio_output:value("pulse") +audio_output:value("pipe") + +-- alsa output -- +output_dev=s:option(Value, "output_dev", translate("Output device")) +output_dev.rmempty = true +output_dev:depends("audio_output", "alsa") + +mixer_dev=s:option(Value, "mixer_dev", translate("Mixer device")) +mixer_dev.rmempty = true +mixer_dev:depends("audio_output", "alsa") + +mixer_type=s:option(ListValue, "mixer_type", translate("Mixer type")) +mixer_type.rmempty = true +mixer_type:value("", translate("Default")) +mixer_type:value("software") +mixer_type:value("hardware") +mixer_type:depends("audio_output", "alsa") + +mixer_control=s:option(Value, "mixer_control", translate("Mixer control")) +mixer_control.rmempty = true +mixer_control:depends("audio_output", "alsa") + +mixer_index = s:option(ListValue, "mixer_index", translate("Mixer index")) +mixer_index.rmempty = true +mixer_index:depends("audio_output", "alsa") +mixer_index:value("", translate("Default")) +local pats = io.popen("find /proc/asound/ -type d -name 'card*' | sort") +if pats then + local l + while true do + l = pats:read("*l") + if not l then break end + + l = string.gsub(l, "/proc/asound/card", "") + if l then + mixer_index:value(l) + end + end + pats:close() +end + +-- ao output -- +ao_driver=s:option(Value, "ao_driver", translate("AO driver")) +ao_driver.rmempty = true +ao_driver:depends("audio_output", "ao") + +ao_name=s:option(Value, "ao_name", translate("AO name")) +ao_name.rmempty = true +ao_name:depends("audio_output", "ao") + +ao_id = s:option(ListValue, "ao_id", translate("AO id")) +ao_id.rmempty = true +ao_id:depends("audio_output", "ao") +ao_id:value("", translate("Default")) +local pats = io.popen("find /proc/asound/ -type d -name 'card*' | sort") +if pats then + local l + while true do + l = pats:read("*l") + if not l then break end + + l = string.gsub(l, "/proc/asound/card", "") + if l then + ao_id:value(l) + end + end + pats:close() +end + +ao_options=s:option(Value, "ao_options", translate("AO options")) +ao_options.rmempty = true +ao_options:depends("audio_output", "ao") + +-- pipe output -- +output_fifo=s:option(Value, "output_fifo", translate("Output FIFO")) +output_fifo.rmempty = true +output_fifo:depends("audio_output", "pipe") + +-- pulse output -- +pulse_server=s:option(Value, "pulse_server", translate("Pulse server")) +pulse_server.rmempty = true +pulse_server:depends("audio_output", "pulse") + +pulse_sink=s:option(Value, "pulse_sink", translate("Pulse sink")) +pulse_sink.rmempty = true +pulse_sink:depends("audio_output", "pulse") + +pulse_appname=s:option(Value, "pulse_appname", translate("Pulse application name")) +pulse_appname.rmempty = true +pulse_appname:depends("audio_output", "pulse") + +return m diff --git a/feeds/luci/applications/luci-app-shairport/root/etc/uci-defaults/40_luci-shairport b/feeds/luci/applications/luci-app-shairport/root/etc/uci-defaults/40_luci-shairport new file mode 100644 index 0000000..be9412b --- /dev/null +++ b/feeds/luci/applications/luci-app-shairport/root/etc/uci-defaults/40_luci-shairport @@ -0,0 +1,12 @@ +#!/bin/sh + +# needed for "Save and Apply" to restart shairport +uci -q batch <<-EOF >/dev/null + delete ucitrack.@shairport[-1] + add ucitrack shairport + set ucitrack.@shairport[-1].init="shairport" + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-siitwizard/Makefile b/feeds/luci/applications/luci-app-siitwizard/Makefile new file mode 100644 index 0000000..e8a8e55 --- /dev/null +++ b/feeds/luci/applications/luci-app-siitwizard/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=SIIT IPv4-over-IPv6 configuration wizard +LUCI_DEPENDS:=+kmod-siit + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-siitwizard/luasrc/controller/siitwizard.lua b/feeds/luci/applications/luci-app-siitwizard/luasrc/controller/siitwizard.lua new file mode 100644 index 0000000..4d1c140 --- /dev/null +++ b/feeds/luci/applications/luci-app-siitwizard/luasrc/controller/siitwizard.lua @@ -0,0 +1,9 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module "luci.controller.siitwizard" + +function index() + entry({"admin", "network", "siitwizard"}, form("siitwizard"), "SIIT 4over6 assistent", 99) +end diff --git a/feeds/luci/applications/luci-app-siitwizard/luasrc/model/cbi/siitwizard.lua b/feeds/luci/applications/luci-app-siitwizard/luasrc/model/cbi/siitwizard.lua new file mode 100644 index 0000000..0d73832 --- /dev/null +++ b/feeds/luci/applications/luci-app-siitwizard/luasrc/model/cbi/siitwizard.lua @@ -0,0 +1,373 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008-2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local uci = require "luci.model.uci".cursor() +local bit = require "nixio".bit +local ip = require "luci.ip" + +-------------------- Init -------------------- + +-- +-- Find link-local address +-- +function find_ll() + local _, r + for _, r in ipairs(ip.routes({ family = 6, dest = "fe80::/64" })) do + if r.dest:higher("fe80:0:0:0:ff:fe00:0:0") then + return (r.dest - "fe80::") + end + end + return ip.IPv6("::") +end + +-- +-- Determine defaults +-- +local ula_prefix = uci:get("siit", "ipv6", "ula_prefix") or "fd00::" +local ula_global = uci:get("siit", "ipv6", "ula_global") or "00ca:ffee:babe::" -- = Freifunk +local ula_subnet = uci:get("siit", "ipv6", "ula_subnet") or "0000:0000:0000:4223::" -- = Berlin +local siit_prefix = uci:get("siit", "ipv6", "siit_prefix") or "::ffff:0000:0000" +local ipv4_pool = uci:get("siit", "ipv4", "pool") or "172.16.0.0/12" +local ipv4_netsz = uci:get("siit", "ipv4", "netsize") or "24" + +-- +-- Find IPv4 allocation pool +-- +local gv4_net = ip.IPv4(ipv4_pool) + +-- +-- Generate ULA +-- +local ula = ip.IPv6("::/64") + +for _, prefix in ipairs({ ula_prefix, ula_global, ula_subnet }) do + ula = ula:add(ip.IPv6(prefix)) +end + +ula = ula:add(find_ll()) + + +-------------------- View -------------------- +f = SimpleForm("siitwizward", "SIIT-Wizzard", + "This wizzard helps to setup SIIT (IPv4-over-IPv6) translation according to RFC2765.") + +f:field(DummyValue, "info_ula", "Mesh ULA address").value = ula:string() + +f:field(DummyValue, "ipv4_pool", "IPv4 allocation pool").value = + "%s (%i hosts)" %{ gv4_net:string(), 2 ^ ( 32 - gv4_net:prefix() ) - 2 } + +f:field(DummyValue, "ipv4_size", "IPv4 LAN network prefix").value = + "%i bit (%i hosts)" %{ ipv4_netsz, 2 ^ ( 32 - ipv4_netsz ) - 2 } + +mode = f:field(ListValue, "mode", "Operation mode") +mode:value("client", "Client") +mode:value("gateway", "Gateway") + +dev = f:field(ListValue, "device", "Wireless device") +uci:foreach("wireless", "wifi-device", + function(section) + dev:value(section[".name"]) + end) + +lanip = f:field(Value, "ipaddr", "LAN IPv4 subnet") +function lanip.formvalue(self, section) + local val = self.map:formvalue(self:cbid(section)) + local net = ip.IPv4("%s/%i" %{ val, ipv4_netsz }) + + if net then + if gv4_net:contains(net) then + if not net:minhost():equal(net:host()) then + self.error = { [section] = true } + f.errmessage = "IPv4 address is not the first host of " .. + "subnet, expected " .. net:minhost():string() + end + else + self.error = { [section] = true } + f.errmessage = "IPv4 address is not within the allocation pool" + end + else + self.error = { [section] = true } + f.errmessage = "Invalid IPv4 address given" + end + + return val +end + +dns = f:field(Value, "dns", "DNS server for LAN clients") +dns.value = "141.1.1.1" + +-------------------- Control -------------------- +function f.handle(self, state, data) + if state == FORM_VALID then + luci.http.redirect(luci.dispatcher.build_url("admin", "uci", "changes")) + return false + end + return true +end + +function mode.write(self, section, value) + + -- + -- Find LAN IPv4 range + -- + local lan_net = ip.IPv4( + ( lanip:formvalue(section) or "172.16.0.1" ) .. "/" .. ipv4_netsz + ) + + if not lan_net then return end + + -- + -- Find wifi interface, dns server and hostname + -- + local device = dev:formvalue(section) + local dns_server = dns:formvalue(section) or "141.1.1.1" + local hostname = "siit-" .. lan_net:host():string():gsub("%.","-") + + -- + -- Configure wifi device + -- + local wifi_device = dev:formvalue(section) + local wifi_essid = uci:get("siit", "wifi", "essid") or "6mesh.freifunk.net" + local wifi_bssid = uci:get("siit", "wifi", "bssid") or "02:ca:ff:ee:ba:be" + local wifi_channel = uci:get("siit", "wifi", "channel") or "1" + + -- nuke old device definition + uci:delete_all("wireless", "wifi-iface", + function(s) return s.device == wifi_device end ) + + uci:delete_all("network", "interface", + function(s) return s['.name'] == wifi_device end ) + + -- create wifi device definition + uci:tset("wireless", wifi_device, { + disabled = 0, + channel = wifi_channel, +-- txantenna = 1, +-- rxantenna = 1, +-- diversity = 0 + }) + + uci:section("wireless", "wifi-iface", nil, { + encryption = "none", + mode = "adhoc", + txpower = 10, + sw_merge = 1, + network = wifi_device, + device = wifi_device, + ssid = wifi_essid, + bssid = wifi_bssid, + }) + + -- + -- Gateway mode + -- + -- * wan port is dhcp, lan port is 172.23.1.1/24 + -- * siit0 gets a dummy address: 169.254.42.42 + -- * wl0 gets an ipv6 address, in this case the fdca:ffee:babe::1:1/64 + -- * we do a ::ffff:ffff:0/96 route into siit0, so everything from 6mesh goes into translation. + -- * an HNA6 of ::ffff:ffff:0:0/96 announces the mapped 0.0.0.0/0 ipv4 space. + -- * MTU on WAN, LAN down to 1400, ipv6 headers are slighly larger. + + if value == "gateway" then + + -- wan mtu + uci:set("network", "wan", "mtu", 1240) + + -- lan settings + uci:tset("network", "lan", { + mtu = 1240, + ipaddr = lan_net:host():string(), + netmask = lan_net:mask():string(), + proto = "static" + }) + + -- use full siit subnet + siit_route = ip.IPv6(siit_prefix .. "/96") + + -- v4 <-> siit route + uci:delete_all("network", "route", + function(s) return s.interface == "siit0" end) + + uci:section("network", "route", nil, { + interface = "siit0", + target = gv4_net:network():string(), + netmask = gv4_net:mask():string() + }) + + -- + -- Client mode + -- + -- * 172.23.2.1/24 on its lan, fdca:ffee:babe::1:2 on wl0 and the usual dummy address on siit0. + -- * we do a ::ffff:ffff:172.13.2.0/120 to siit0, because in this case, only traffic directed to clients needs to go into translation. + -- * same route as HNA6 announcement to catch the traffic out of the mesh. + -- * Also, MTU on LAN reduced to 1400. + + else + + -- lan settings + uci:tset("network", "lan", { + mtu = 1240, + ipaddr = lan_net:host():string(), + netmask = lan_net:mask():string() + }) + + -- derive siit subnet from lan config + siit_route = ip.IPv6( + siit_prefix .. "/" .. (96 + lan_net:prefix()) + ):add(lan_net[2]) + + -- ipv4 <-> siit route + uci:delete_all("network", "route", + function(s) return s.interface == "siit0" end) + + -- XXX: kind of a catch all, gv4_net would be better + -- but does not cover non-local v4 space + uci:section("network", "route", nil, { + interface = "siit0", + target = "0.0.0.0", + netmask = "0.0.0.0" + }) + end + + -- setup the firewall + uci:delete_all("firewall", "zone", + function(s) return ( + s['.name'] == "siit0" or s.name == "siit0" or + s.network == "siit0" or s['.name'] == wifi_device or + s.name == wifi_device or s.network == wifi_device + ) end) + + uci:delete_all("firewall", "forwarding", + function(s) return ( + s.src == wifi_device and s.dest == "siit0" or + s.dest == wifi_device and s.src == "siit0" or + s.src == "lan" and s.dest == "siit0" or + s.dest == "lan" and s.src == "siit0" + ) end) + + uci:section("firewall", "zone", "siit0", { + name = "siit0", + network = "siit0", + input = "ACCEPT", + output = "ACCEPT", + forward = "ACCEPT" + }) + + uci:section("firewall", "zone", wifi_device, { + name = wifi_device, + network = wifi_device, + input = "ACCEPT", + output = "ACCEPT", + forward = "ACCEPT" + }) + + uci:section("firewall", "forwarding", nil, { + src = wifi_device, + dest = "siit0" + }) + + uci:section("firewall", "forwarding", nil, { + src = "siit0", + dest = wifi_device + }) + + uci:section("firewall", "forwarding", nil, { + src = "lan", + dest = "siit0" + }) + + uci:section("firewall", "forwarding", nil, { + src = "siit0", + dest = "lan" + }) + + -- firewall include + uci:delete_all("firewall", "include", + function(s) return s.path == "/etc/firewall.user" end) + + uci:section("firewall", "include", nil, { + path = "/etc/firewall.user" + }) + + + -- siit0 interface + uci:delete_all("network", "interface", + function(s) return ( s.ifname == "siit0" ) end) + + uci:section("network", "interface", "siit0", { + ifname = "siit0", + proto = "none" + }) + + -- siit0 route + uci:delete_all("network", "route6", + function(s) return siit_route:contains(ip.IPv6(s.target)) end) + + uci:section("network", "route6", nil, { + interface = "siit0", + target = siit_route:string() + }) + + -- create wifi network interface + uci:section("network", "interface", wifi_device, { + proto = "static", + mtu = 1400, + ip6addr = ula:string() + }) + + -- nuke old olsrd interfaces + uci:delete_all("olsrd", "Interface", + function(s) return s.interface == wifi_device end) + + -- configure olsrd interface + uci:foreach("olsrd", "olsrd", + function(s) uci:set("olsrd", s['.name'], "IpVersion", 6) end) + + uci:section("olsrd", "Interface", nil, { + ignore = 0, + interface = wifi_device, + Ip6AddrType = "unique-local" + }) + + -- hna6 + uci:delete_all("olsrd", "Hna6", + function(s) return true end) + + uci:section("olsrd", "Hna6", nil, { + netaddr = siit_route:host():string(), + prefix = siit_route:prefix() + }) + + -- txtinfo v6 & olsrd nameservice + uci:foreach("olsrd", "LoadPlugin", + function(s) + if s.library == "olsrd_txtinfo.so.0.1" then + uci:set("olsrd", s['.name'], "accept", "::1") + elseif s.library == "olsrd_nameservice.so.0.3" then + uci:set("olsrd", s['.name'], "name", hostname) + end + end) + + -- lan dns + uci:tset("dhcp", "lan", { + dhcp_option = "6," .. dns_server, + start = bit.band(lan_net:minhost():add(1)[2][2], 0xFF), + limit = ( 2 ^ ( 32 - lan_net:prefix() ) ) - 3 + }) + + -- hostname + uci:foreach("system", "system", + function(s) + uci:set("system", s['.name'], "hostname", hostname) + end) + + uci:save("wireless") + uci:save("firewall") + uci:save("network") + uci:save("system") + uci:save("olsrd") + uci:save("dhcp") +end + +return f diff --git a/feeds/luci/applications/luci-app-siitwizard/root/etc/config/siit b/feeds/luci/applications/luci-app-siitwizard/root/etc/config/siit new file mode 100644 index 0000000..c594547 --- /dev/null +++ b/feeds/luci/applications/luci-app-siitwizard/root/etc/config/siit @@ -0,0 +1,14 @@ +config siit ipv4 + option pool "77.87.52.0/22" + option netsize "29" + +config siit ipv6 + option ula_prefix "fd00::" + option ula_global "00ca:ffee:babe::" + option ula_subnet "0000:0000:0000:dada::" + option siit_prefix "::ffff:0000:0000" + +config siit wifi + option essid "6mesh.freifunk.net" + option bssid "02:25:c3:ca:ff:ee" + option channel "1" diff --git a/feeds/luci/applications/luci-app-splash/Makefile b/feeds/luci/applications/luci-app-splash/Makefile new file mode 100644 index 0000000..5740aa5 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/Makefile @@ -0,0 +1,20 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Freifunk DHCP-Splash application +LUCI_DEPENDS:=+luci-lib-nixio +tc +kmod-sched +iptables-mod-nat-extra +iptables-mod-ipopt + +define Package/luci-app-splash/conffiles +/etc/config/luci_splash +/usr/lib/luci-splash/splashtext.html +/usr/lib/luci-splash/splashtextinclude.html +endef + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-splash/README b/feeds/luci/applications/luci-app-splash/README new file mode 100644 index 0000000..5a7af14 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/README @@ -0,0 +1,5 @@ + +* IPv6 support is only partial: + - will only work when used together with IPv4 (Dual stack) + - No bandwidth limiting + diff --git a/feeds/luci/applications/luci-app-splash/htdocs/cgi-bin/splash/splash.sh b/feeds/luci/applications/luci-app-splash/htdocs/cgi-bin/splash/splash.sh new file mode 100755 index 0000000..da8370d --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/htdocs/cgi-bin/splash/splash.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +$(uci -q get luci_splash.general.redirect_url) || { + touch /var/state/luci_splash_locations + touch /etc/config/luci_splash_locations + MAC=$(grep "$REMOTE_HOST" /proc/net/arp | awk '{print $4}') + uci -P /var/state set luci_splash_locations.${MAC//:/}=redirect + uci -P /var/state set luci_splash_locations.${MAC//:/}.location="http://${HTTP_HOST}${REQUEST_URI}" +} + +echo -en "Cache-Control: no-cache, max-age=0, no-store, must-revalidate\r\n" +echo -en "Pragma: no-cache\r\n" +echo -en "Expires: -1\r\n" +echo -en "Status: 307 Temporary Redirect\r\n" +echo -en "Location: http://$SERVER_ADDR/cgi-bin/luci/splash\r\n" +echo -en "\r\n" + +cat < + + + 100 + 0 + 1.0 + 12 + $SERVER_ADDR + http://$SERVER_ADDR/cgi-bin/luci/splash?wispr=1 + http://$SERVER_ADDR/ + + +EOT + + diff --git a/feeds/luci/applications/luci-app-splash/htdocs/luci/splash/index.html b/feeds/luci/applications/luci-app-splash/htdocs/luci/splash/index.html new file mode 100644 index 0000000..486409a --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/htdocs/luci/splash/index.html @@ -0,0 +1,10 @@ + + + + + + + +LuCI - Lua Configuration Interface + + diff --git a/feeds/luci/applications/luci-app-splash/luasrc/controller/splash/splash.lua b/feeds/luci/applications/luci-app-splash/luasrc/controller/splash/splash.lua new file mode 100644 index 0000000..13b8edc --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/luasrc/controller/splash/splash.lua @@ -0,0 +1,163 @@ +module("luci.controller.splash.splash", package.seeall) + +local uci = luci.model.uci.cursor() +local util = require "luci.util" + +function index() + entry({"admin", "services", "splash"}, cbi("splash/splash"), _("Client-Splash"), 90) + entry({"admin", "services", "splash", "splashtext" }, form("splash/splashtext"), _("Splashtext"), 10) + + local e + + e = node("splash") + e.target = call("action_dispatch") + + node("splash", "activate").target = call("action_activate") + node("splash", "splash").target = template("splash_splash/splash") + node("splash", "blocked").target = template("splash/blocked") + + entry({"admin", "status", "splash"}, post("action_status_admin"), _("Client-Splash")) + + local page = node("splash", "publicstatus") + page.target = call("action_status_public") + page.leaf = true +end + +function ip_to_mac(ip) + local ipc = require "luci.ip" + local i, n + + for i, n in ipairs(ipc.neighbors()) do + if n.mac and n.dest and n.dest:equal(ip) then + return n.mac + end + end +end + +function action_dispatch() + local uci = luci.model.uci.cursor_state() + local mac = ip_to_mac(luci.http.getenv("REMOTE_ADDR")) or "" + local access = false + + uci:foreach("luci_splash", "lease", function(s) + if s.mac and s.mac:lower() == mac then access = true end + end) + + uci:foreach("luci_splash", "whitelist", function(s) + if s.mac and s.mac:lower() == mac then access = true end + end) + + if #mac > 0 and access then + luci.http.redirect(luci.dispatcher.build_url()) + else + luci.http.redirect(luci.dispatcher.build_url("splash", "splash")) + end +end + +function blacklist() + leased_macs = { } + uci:foreach("luci_splash", "blacklist", + function(s) leased_macs[s.mac:lower()] = true + end) + return leased_macs +end + +function action_activate() + local ipc = require "luci.ip" + local mac = ip_to_mac(luci.http.getenv("REMOTE_ADDR") or "127.0.0.1") or "" + local uci_state = require "luci.model.uci".cursor_state() + local blacklisted = false + if mac and luci.http.formvalue("accept") then + uci:foreach("luci_splash", "blacklist", + function(s) if s.mac and s.mac:lower() == mac then blacklisted = true end + end) + if blacklisted then + luci.http.redirect(luci.dispatcher.build_url("splash" ,"blocked")) + else + local redirect_url = uci:get("luci_splash", "general", "redirect_url") + if not redirect_url then + redirect_url = uci_state:get("luci_splash_locations", mac:gsub(':', ''):lower(), "location") + end + if not redirect_url then + redirect_url = luci.model.uci.cursor():get("freifunk", "community", "homepage") or 'http://www.freifunk.net' + end + remove_redirect(mac:gsub(':', ''):lower()) + os.execute("luci-splash lease "..mac.." >/dev/null 2>&1") + luci.http.redirect(redirect_url) + end + else + luci.http.redirect(luci.dispatcher.build_url()) + end +end + +function action_status_admin() + local uci = luci.model.uci.cursor_state() + local macs = luci.http.formvaluetable("save") + + local changes = { + whitelist = { }, + blacklist = { }, + lease = { }, + remove = { } + } + + for key, _ in pairs(macs) do + local policy = luci.http.formvalue("policy.%s" % key) + local mac = luci.http.protocol.urldecode(key) + + if policy == "whitelist" or policy == "blacklist" then + changes[policy][#changes[policy]+1] = mac + elseif policy == "normal" then + changes["lease"][#changes["lease"]+1] = mac + elseif policy == "kicked" then + changes["remove"][#changes["remove"]+1] = mac + end + end + + if #changes.whitelist > 0 then + os.execute("luci-splash whitelist %s >/dev/null" + % table.concat(changes.whitelist)) + end + + if #changes.blacklist > 0 then + os.execute("luci-splash blacklist %s >/dev/null" + % table.concat(changes.blacklist)) + end + + if #changes.lease > 0 then + os.execute("luci-splash lease %s >/dev/null" + % table.concat(changes.lease)) + end + + if #changes.remove > 0 then + os.execute("luci-splash remove %s >/dev/null" + % table.concat(changes.remove)) + end + + luci.template.render("admin_status/splash", { is_admin = true }) +end + +function action_status_public() + luci.template.render("admin_status/splash", { is_admin = false }) +end + +function remove_redirect(mac) + local mac = mac:lower() + mac = mac:gsub(":", "") + local uci = require "luci.model.uci".cursor_state() + local redirects = uci:get_all("luci_splash_locations") + --uci:load("luci_splash_locations") + uci:revert("luci_splash_locations") + -- For all redirects + for k, v in pairs(redirects) do + if v[".type"] == "redirect" then + if v[".name"] ~= mac then + -- Rewrite state + uci:section("luci_splash_locations", "redirect", v[".name"], { + location = v.location + }) + end + end + end + uci:save("luci_splash_redirects") +end diff --git a/feeds/luci/applications/luci-app-splash/luasrc/model/cbi/splash/splash.lua b/feeds/luci/applications/luci-app-splash/luasrc/model/cbi/splash/splash.lua new file mode 100644 index 0000000..c09d2e0 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/luasrc/model/cbi/splash/splash.lua @@ -0,0 +1,79 @@ +-- Licensed to the public under the Apache License 2.0. + +require("luci.model.uci") + +m = Map("luci_splash", translate("Client-Splash"), translate("Client-Splash is a hotspot authentification system for wireless mesh networks.")) + +s = m:section(NamedSection, "general", "core", translate("General")) +s.addremove = false + +s:option(Value, "leasetime", translate("Clearance time"), translate("Clients that have accepted the splash are allowed to use the network for that many hours.")) +local redir = s:option(Value, "redirect_url", translate("Redirect target"), translate("Clients are redirected to this page after they have accepted the splash. If this is left empty they are redirected to the page they had requested.")) +redir.rmempty = true + +s:option(Value, "limit_up", translate("Upload limit"), translate("Clients upload speed is limited to this value (kbyte/s)")) +s:option(Value, "limit_down", translate("Download limit"), translate("Clients download speed is limited to this value (kbyte/s)")) + +s:option(DummyValue, "_tmp", "", + translate("Bandwidth limit for clients is only activated when both up- and download limit are set. " .. + "Use a value of 0 here to completely disable this limitation. Whitelisted clients are not limited.")) + +s = m:section(TypedSection, "iface", translate("Interfaces"), translate("Interfaces that are used for Splash.")) + +s.template = "cbi/tblsection" +s.addremove = true +s.anonymous = true + +local uci = luci.model.uci.cursor() + +zone = s:option(ListValue, "zone", translate("Firewall zone"), + translate("Splash rules are integrated in this firewall zone")) + +uci:foreach("firewall", "zone", + function (section) + zone:value(section.name) + end) + +iface = s:option(ListValue, "network", translate("Network"), + translate("Intercept client traffic on this Interface")) + +uci:foreach("network", "interface", + function (section) + if section[".name"] ~= "loopback" then + iface:value(section[".name"]) + end + end) + +uci:foreach("network", "alias", + function (section) + iface:value(section[".name"]) + end) + + +s = m:section(TypedSection, "whitelist", translate("Whitelist"), + translate("MAC addresses of whitelisted clients. These do not need to accept the splash and are not bandwidth limited.")) + +s.template = "cbi/tblsection" +s.addremove = true +s.anonymous = true +s:option(Value, "mac", translate ("MAC Address")) + + +s = m:section(TypedSection, "blacklist", translate("Blacklist"), + translate("MAC addresses in this list are blocked.")) + +s.template = "cbi/tblsection" +s.addremove = true +s.anonymous = true +s:option(Value, "mac", translate ("MAC Address")) + +s = m:section(TypedSection, "subnet", translate("Allowed hosts/subnets"), + translate("Destination hosts and networks that are excluded from splashing, i.e. they are always allowed.")) + +s.template = "cbi/tblsection" +s.addremove = true +s.anonymous = true +s:option(Value, "ipaddr", translate("IP Address")) +s:option(Value, "netmask", translate("Netmask"), translate("optional when using host addresses")).rmempty = true + +return m diff --git a/feeds/luci/applications/luci-app-splash/luasrc/model/cbi/splash/splashtext.lua b/feeds/luci/applications/luci-app-splash/luasrc/model/cbi/splash/splashtext.lua new file mode 100644 index 0000000..8ceffc8 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/luasrc/model/cbi/splash/splashtext.lua @@ -0,0 +1,57 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Copyright 2010 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" + +local splashtextfile = "/usr/lib/luci-splash/splashtext.html" +local splashtextinclude = "/usr/lib/luci-splash/splashtextinclude.html" + + +f = SimpleForm("splashtext", translate("Edit the complete splash text"), + translate("You can enter your own text that is displayed to clients here.
" .. + "It is possible to use the following markers: " .. + "###COMMUNITY###, ###COMMUNITY_URL###, ###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###.")) + +t = f:field(TextValue, "text") +t.rmempty = true +t.rows = 30 +function t.cfgvalue() + return fs.readfile(splashtextfile) or "" +end + +function f.handle(self, state, data) + if state == FORM_VALID then + if data.text then + fs.writefile(splashtextfile, data.text:gsub("\r\n", "\n")) + else + fs.unlink(splashtextfile) + end + end + return true +end + +g = SimpleForm("splashtextinclude", translate("Include your own text in the default splash"), + translate("As an alternative to editing the complete splash text you can also just include some custom text in the default splash page by entering it here.")) + +t = g:field(TextValue, "text") +t.rmempty = true +t.rows = 30 +function t.cfgvalue() + return fs.readfile(splashtextinclude) or "" +end + +function g.handle(self, state, data) + if state == FORM_VALID then + if data.text then + fs.writefile(splashtextinclude, data.text:gsub("\r\n", "\n")) + else + fs.unlink(splashtextinclude) + end + end + return true +end + + +return f, g diff --git a/feeds/luci/applications/luci-app-splash/luasrc/view/admin_status/splash.htm b/feeds/luci/applications/luci-app-splash/luasrc/view/admin_status/splash.htm new file mode 100644 index 0000000..3415c20 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/luasrc/view/admin_status/splash.htm @@ -0,0 +1,288 @@ +<%# + Copyright 2009 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%- + +local utl = require "luci.util" +local ipt = require "luci.sys.iptparser".IptParser() +local uci = require "luci.model.uci".cursor_state() +local wat = require "luci.tools.webadmin" +local ipc = require "luci.ip" +local fs = require "nixio.fs" + +local clients = { } +local leasetime = tonumber(uci:get("luci_splash", "general", "leasetime") or 1) * 60 * 60 +local leasefile = "/tmp/dhcp.leases" + +uci:foreach("dhcp", "dnsmasq", + function(s) + if s.leasefile then leasefile = s.leasefile end + end) + + +uci:foreach("luci_splash_leases", "lease", + function(s) + if s.start and s.mac then + clients[s.mac:lower()] = { + start = tonumber(s.start), + limit = ( tonumber(s.start) + leasetime ), + mac = s.mac:upper(), + ipaddr = s.ipaddr, + policy = "normal", + packets = 0, + bytes = 0, + } + end + end) + +for _, r in ipairs(ipt:find({table="nat", chain="luci_splash_leases"})) do + if r.options and #r.options >= 2 and r.options[1] == "MAC" then + if not clients[r.options[2]:lower()] then + clients[r.options[2]:lower()] = { + start = 0, + limit = 0, + mac = r.options[2]:upper(), + policy = ( r.target == "RETURN" ) and "whitelist" or "blacklist", + packets = 0, + bytes = 0 + } + end + end +end + +for mac, client in pairs(clients) do + client.bytes_in = 0 + client.bytes_out = 0 + client.packets_in = 0 + client.packets_out = 0 + + if client.ipaddr then + local rin = ipt:find({table="mangle", chain="luci_splash_mark_in", destination=client.ipaddr}) + local rout = ipt:find({table="mangle", chain="luci_splash_mark_out", options={"MAC", client.mac:upper()}}) + + if rin and #rin > 0 then + client.bytes_in = rin[1].bytes + client.packets_in = rin[1].packets + end + + if rout and #rout > 0 then + client.bytes_out = rout[1].bytes + client.packets_out = rout[1].packets + end + end +end + +uci:foreach("luci_splash", "whitelist", + function(s) + if s.mac and clients[s.mac:lower()] then + clients[s.mac:lower()].policy="whitelist" + end + end) + +uci:foreach("luci_splash", "blacklist", + function(s) + if s.mac and clients[s.mac:lower()] then + clients[s.mac:lower()].policy=(s.kicked and "kicked" or "blacklist") + end + end) + +if fs.access(leasefile) then + for l in io.lines(leasefile) do + local time, mac, ip, name = l:match("^(%d+) (%S+) (%S+) (%S+)") + if time and mac and ip then + local c = clients[mac:lower()] + if c then + c.ip = ip + c.hostname = ( name ~= "*" ) and name or nil + end + end + end +end + +for i, n in ipairs(ipc.neighbors({ family = 4 })) do + if n.mac and n.dest then + local c = clients[n.mac] + if c and not c.ip then + c.ip = n.dest:string() + end + end +end + +local function showmac(mac) + if not is_admin then + mac = mac:gsub("(%S%S:%S%S):%S%S:%S%S:(%S%S:%S%S)", "%1:XX:XX:%2") + end + return mac +end + +if luci.http.formvalue("status") == "1" then + local rv = {} + for _, c in utl.spairs(clients, + function(a,b) if clients[a].policy == clients[b].policy then + return (clients[a].start > clients[b].start) + else + return (clients[a].policy > clients[b].policy) + end + end) + do + if c.ip then + rv[#rv+1] = { + hostname = c.hostname or "?", + ip = c.ip or "?", + mac = showmac(c.mac) or "?", + timeleft = (c.limit >= os.time()) and wat.date_format(c.limit-os.time()) or (c.policy ~= "normal") and "-" or "expired", + trafficin = wat.byte_format(c.bytes_in) or "?", + trafficout = wat.byte_format(c.bytes_out) or "?", + policy = c.policy or "?" + } + end + end + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + return +end +-%> + + + +<%+header%> + + + + + +
+

<%:Client-Splash%>

+
+ <%:Active Clients%> +
+ <% if is_admin then %>
<% end %> + + + + + + + + + + + + + + <%- + local count = 0 + for _, c in utl.spairs(clients, + function(a,b) + if clients[a].policy == clients[b].policy then + return (clients[a].start > clients[b].start) + else + return (clients[a].policy > clients[b].policy) + end + end) + do + if c.ip then + count = count + 1 + -%> + + + + + + + + + <%- + end + end + if count == 0 then + -%> + + + + <%- end -%> + +
<%:Hostname%><%:IP Address%><%:MAC Address%><%:Time remaining%><%:Traffic in/out%><%:Policy%>
<%=c.hostname or "" .. translate("unknown") .. ""%><%=c.ip or "" .. translate("unknown") .. ""%><%=showmac(c.mac)%><%= + (c.limit >= os.time()) and wat.date_format(c.limit-os.time()) or + (c.policy ~= "normal") and "-" or "" .. translate("expired") .. "" + %><%=wat.byte_format(c.bytes_in)%> / <%=wat.byte_format(c.bytes_out)%> + <% if is_admin then %> + + + <% else %> + <%=c.policy%> + <% end %> +
+
<%:No clients connected%>
+
+ <% if is_admin then %>
<% end %> +
+
+
+ +<%+footer%> diff --git a/feeds/luci/applications/luci-app-splash/luasrc/view/splash/blocked.htm b/feeds/luci/applications/luci-app-splash/luasrc/view/splash/blocked.htm new file mode 100644 index 0000000..c27e2fa --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/luasrc/view/splash/blocked.htm @@ -0,0 +1,20 @@ +<%# + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<% +local contacturl = luci.dispatcher.build_url("freifunk", "contact") +%> + +<%+header%> + +

<%:Blocked%>

+ +

<%:Your access to this network has been blocked, most likely because you did something that our rules explicitly forbid.%>

+

<%:To ask for the reason why you have been blocked or ask for access again you can try to contact the owner of this access point:%> <%:Contact%>

+ +<%+footer%> + + + diff --git a/feeds/luci/applications/luci-app-splash/luasrc/view/splash/splash.htm b/feeds/luci/applications/luci-app-splash/luasrc/view/splash/splash.htm new file mode 100644 index 0000000..8d84463 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/luasrc/view/splash/splash.htm @@ -0,0 +1,134 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<% +local fs = require "nixio.fs" +local has_custom_splash = fs.access("/usr/lib/luci-splash/splashtext.html") +local has_custom_splashinclude = fs.access("/usr/lib/luci-splash/splashtextinclude.html") + +function expand (e, R) + return (string.gsub(e, "###([A-Z_]+)###", R)) +end + +local community, homepage, leasetime, limit_up, limit_down + +local contacturl = luci.dispatcher.build_url("freifunk", "contact") + +local c = luci.model.uci.cursor():get_all("freifunk", "community") +if c and c.name then + name = luci.model.uci.cursor():get('profile_' .. c.name, 'profile', 'name') + if name then + community = name + else + community = c.name + end +else + community = "Freifunk" +end + +if c and c.homepage then + homepage = c.homepage +else + homepage = "http://freifunk.net" +end + +local s = luci.model.uci.cursor():get_all("luci_splash", "general") +if s then + leasetime = s.leasetime or "" + limit_up = s.limit_up or nil + limit_down = s.limit_down or nil +end + +local limit_text = "" +if limit_up and limit_down then + limit_text = "

" .. translate("Your bandwidth is limited to") .. " " .. limit_down .. "/" .. limit_up .. + " " .. translate("KB/s (Download/Upload). You may be able to remove this limit by actively contributing " .. + "to this project.") .. "

" +end + +local contact = translate('Get in %s with the operator of this access point.') +contact = contact % ('' .. translatef('Contact') .. '') + +local accepttext = translate('By accepting these rules you can use this network for %s hour(s). After this time you need to accept these rules again.') +accepttext = accepttext % leasetime + + +if has_custom_splash then + local R = { + COMMUNITY = community, + COMMUNITY_URL = homepage, + LEASETIME = leasetime, + ACCEPT = tostring(translate("Accept")), + LIMIT = limit_text, + CONTACTURL = contacturl + } + local splashtext = expand(fs.readfile("/usr/lib/luci-splash/splashtext.html"), R) + %> + <%=splashtext%> + +<% else %> + +

<%:Welcome%>

+ +

<%:You are now connected to the free wireless mesh network%> <%=community%>. + <%:Please note that we are not an internet service provider but an experimental community network.%>

+

<%:Access to the internet might be possible nevertheless, because some activists of this project share their + private internet connections. These few connections are shared between all users. That means available bandwidth + is limited and because of this we ask you not to do any of the following:%>

+
    +
  • <%:use filesharing applications on this network%>
  • +
  • <%:waste bandwidth with unneccesary downloads or streams%>
  • +
  • <%:perform any kind of illegal activities%>
  • +
+
+ + <% if limit_up and limit_down then %> + <%=limit_text%> + <% end %> + +

<%:If you use this network on a regular basis we ask for your support:%>

+ + + <% + if has_custom_splashinclude then + local splashtextinclude = fs.readfile("/usr/lib/luci-splash/splashtextinclude.html") + %> + <%=splashtextinclude%> + <% end %> + +

<%:Usage Agreement%>

+

+ <%:The open and free wireless network of volunteers ("Operators") provides the necessary equipment and Internet connections ("Infrastructure") at their own expense.%> + <%:These Terms of Use govern the use of the network by its participants' computer, PDA, or similar device ("Devices") within the network.%> + <%:Access to the network is not guaranteed. It can be interrupted at any time without notice for any reason, for certain devices, and/or may be blocked for certain users.%> +

+ +

<%:Legally Prohibited Activities%>

+

<%:The participant agrees to not perform any action and refrain from acts which may violate the law or infringe upon the rights of third parties.%>

+ +

<%:Legally Prohibited content%>

+

<%:The participant agrees to not transfer content over the network which violates the law.%>

+ +

<%:Fair Use Policy%>

+

<%:The participant agrees to not use the network in any way which will harm the infrastructure, the network itself, its operators or other participants.%>

+ +

<%:Safety%>

+

<%:The network, like the Internet, is unencrypted and open. Each participant is responsible for the safety of their own connections and devices.%>

+ +

Disclaimer

+

<%:The operator claims no liability for loss of data, unauthorized access/damage to devices, or financial losses that participants may suffer from the use of the network.%>

+ +

<%=accepttext%>

+<% end %> + + + diff --git a/feeds/luci/applications/luci-app-splash/luasrc/view/splash_splash/index.htm b/feeds/luci/applications/luci-app-splash/luasrc/view/splash_splash/index.htm new file mode 100644 index 0000000..cbf37d5 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/luasrc/view/splash_splash/index.htm @@ -0,0 +1,8 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +<%+footer%> \ No newline at end of file diff --git a/feeds/luci/applications/luci-app-splash/luasrc/view/splash_splash/splash.htm b/feeds/luci/applications/luci-app-splash/luasrc/view/splash_splash/splash.htm new file mode 100644 index 0000000..c63ad0f --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/luasrc/view/splash_splash/splash.htm @@ -0,0 +1,17 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +<%+splash/splash%> + +
+

+ + +

+
+ +<%+footer%> diff --git a/feeds/luci/applications/luci-app-splash/po/ca/splash.po b/feeds/luci/applications/luci-app-splash/po/ca/splash.po new file mode 100644 index 0000000..3afef1a --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/ca/splash.po @@ -0,0 +1,330 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-06-01 23:10+0200\n" +"PO-Revision-Date: 2014-07-02 21:20+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Accept" +msgstr "Accepta" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" +"Accés a la xarxa no està garantit. Pot ser interromput en qualsevol moment " +"sense notificació per qualsevol motiu, en certs dispositius, i pot ser " +"bloquejat a certs usuaris." + +msgid "Active Clients" +msgstr "Clients actius" + +msgid "Allowed hosts/subnets" +msgstr "Hosts/subxarxes permets" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "Llista negra" + +msgid "Blocked" +msgstr "Bloquejat" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "Declina" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "Dona una mica de diners per a ajudar-nos a mantenir aquest project viu." + +msgid "Download limit" +msgstr "Límit de baixada" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "Política d'ús just" + +msgid "Firewall zone" +msgstr "Zona de tallafocs" + +msgid "General" +msgstr "General" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "Nom de host" + +msgid "IP Address" +msgstr "Adreça IP" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" +"Si opereu el vostre propi equip WiFi, utilitzeu canals distints dels " +"nostres." + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "Si utilitzeu aquesta xarxa regularment, us demanem el vostre suport:" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "Intercepta trànsit de clients en aquesta interfície" + +msgid "Interfaces" +msgstr "Interfícies" + +msgid "Interfaces that are used for Splash." +msgstr "interfícies que s'utilitzen pel Splash." + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "Activitats legalment prohibits" + +msgid "Legally Prohibited content" +msgstr "Contingut legalment prohibit" + +msgid "MAC Address" +msgstr "Adreça MAC" + +msgid "MAC addresses in this list are blocked." +msgstr "Les adreces MAC en aquesta llista estan bloquejades." + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "Màscara de xarxa" + +msgid "Network" +msgstr "Xarxa" + +msgid "No clients connected" +msgstr "Cap client connectat" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" +"Si us plau, noteu que no som proveïdor de servei de Internet sinó una xarxa " +"comunitària experimental." + +msgid "Policy" +msgstr "Política" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "Seguretat" + +msgid "Save" +msgstr "Desa" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" +"La xarxa, com a la Internet, no és xifrada i és oberta. Cada partícip és " +"responsable de la seguretat dels seus propis connexions i dispositius." + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" +"El partícip consent a no transferir contingut sobre la xarxa que violi la " +"llei." + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" +"El partícip consent a no utilitzar la xarxa de qualsevol manera que danyi la " +"infraestructura, la xarxa en si, els seus operadors o altres partícips." + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" +"Aquestes condicions d'ús governen l'ús de la xarxa pels ordinadors, " +"organitzadors personals o dispositius similars (\"Dispositius\") dels seus " +"partícips dins de la xarxa." + +msgid "Time remaining" +msgstr "Temps restant" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" +"Per demanar el motiu perquè s'us ha bloquejat o per demanar l'accés de nou, " +"podeu intentar contactar al propietari d'aquest punt d'accés:" + +msgid "Traffic in/out" +msgstr "Trànsit entrant/sortint" + +msgid "Upload limit" +msgstr "Límit de pujada" + +msgid "Usage Agreement" +msgstr "Acord d'ús" + +msgid "Welcome" +msgstr "Benvingut" + +msgid "Whitelist" +msgstr "Llista blanca" + +msgid "You are now connected to the free wireless mesh network" +msgstr "Ja esteu connectat a la xarxa en malla sense fil gratis" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" +"Podeu introduir aquí el vostre propi text que es mostra als clients.
Es " +"pot utilitzar els següents marcadors: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME### ###LIMIT### i ###ACCEPT###." + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" +"S'us ha bloquejat el accés a aquesta xarxa, probablement perquè heu fet " +"alguna cosa que les nostres regles explícitament prohibeixen." + +msgid "Your bandwidth is limited to" +msgstr "La vostra amplada de banda està limitat a" + +msgid "blacklisted" +msgstr "prohibit" + +msgid "expired" +msgstr "caducat" + +msgid "optional when using host addresses" +msgstr "opcional quan s'utilitza adreces de host" + +msgid "perform any kind of illegal activities" +msgstr "realitza qualsevol tipus d'activitat il·legal" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "bloquejat temporalment" + +msgid "unknown" +msgstr "desconegut" + +msgid "use filesharing applications on this network" +msgstr "utilitza aplicacions de compartició de fitxers en aquesta xarxa" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "malgasta l'amplada de banda amb baixades o corrents innecessaris" + +msgid "whitelisted" +msgstr "en llista blanca" diff --git a/feeds/luci/applications/luci-app-splash/po/cs/splash.po b/feeds/luci/applications/luci-app-splash/po/cs/splash.po new file mode 100644 index 0000000..671afd7 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/cs/splash.po @@ -0,0 +1,340 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-08-04 19:05+0200\n" +"Last-Translator: KubaCZ \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Accept" +msgstr "Přijmout" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" +"Přístup k Internetu může být možný, nicméně pouze proto, že někteří " +"aktivisté tohoto projektu sdílí jejich soukromé Internetové připojení. " +"Těchto několik spojení je sdíleno mezi všemi uživateli. Z toho plyne, že " +"dostupná šířka pásma je omezená a z tohoto důvodu vás žádáme, abyste " +"nedělali žádné z následujících věcí:" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "Aktivní klienti" + +msgid "Allowed hosts/subnets" +msgstr "Povolení hostitelé/podsítě" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" +"Kromě možnosti vytvořit celý vlastní text místo textu výše také můžete jen " +"jako doplněk připojit svůj text jeho napsáním sem." + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" +"Limit šířky pásma pro klienty je aktivován pouze v případě, že oba limity " +"(upload a download) jsou nastaveny. Hodnotou 0 úplně vypnete toto omezení. " +"Klienti na whitelistu nejsou omezeni." + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" +"Staňte se aktivním členem této komunity a přispějte provozováním vlastního " +"uzlu" + +msgid "Blacklist" +msgstr "Blacklist" + +msgid "Blocked" +msgstr "Zablokovaný" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +#, fuzzy +msgid "Client-Splash" +msgstr "Client-Splash" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "Rychlost stahování je pro klienty omezena na tuto hodnotu (kbyte/s)" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "Rychlost nahrávání je pro klienty omezena na tuto hodnotu (kbyte/s)" + +msgid "Contact" +msgstr "Kontakt" + +msgid "Decline" +msgstr "Odmítnout" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "Darováním peněz nám pomůžete udržet tento projekt naživu" + +msgid "Download limit" +msgstr "Limit stahování" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "Fair Use Policy" + +msgid "Firewall zone" +msgstr "Zóna firewallu" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "Hostname" + +msgid "IP Address" +msgstr "IP adresa" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "Rozhraní" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" +"KB/s (Stahování/Nahrávání). Aktivním přispíváním tomuto projektu můžete moci " +"odebrat tento limit." + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "MAC adresa" + +msgid "MAC addresses in this list are blocked." +msgstr "MAC adresy v tomto seznamu jsou blokovány" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" +"Mac adresy klientů na whitelistu. Tito nemusí přijímat splash a nejsou " +"omezeni šířkou pásma." + +msgid "Netmask" +msgstr "Síťová maska" + +msgid "Network" +msgstr "Síť" + +msgid "No clients connected" +msgstr "Žádní klienti nejsou připojeni" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" +"Vezměte prosím na vědomí, že nejsme žádní ISP, ale experimentální komunitní " +"síť." + +msgid "Policy" +msgstr "Politika" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "Bezpečnost" + +msgid "Save" +msgstr "Uložit" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "Zbývající čas" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" +"Pokud se chcete zeptat, proč jste byli zablokováni nebo jak získat zpět " +"přístup, můžete se pokusit kontaktovat vlastníka tohoto přístupového bodu:" + +msgid "Traffic in/out" +msgstr "Provoz dovnitř/ven" + +msgid "Upload limit" +msgstr "Limit nahrávání" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "Vítejte" + +msgid "Whitelist" +msgstr "Whitelist" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" +"Sem můžete vložit text, který se zobrazí klientům.
Můžete použít tyto " +"značky: ###COMMUNITY###, ###COMMUNITY_URL###, ###CONTACTURL###, " +"###LEASETIME###, ###LIMIT### and ###ACCEPT###." + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" +"Váš přístup do této sítě byl zablokován, nejspíše jste udělal něco, co naše " +"pravidla výslovně zakazují." + +msgid "Your bandwidth is limited to" +msgstr "Vaše šířka pásma je omezena na" + +msgid "blacklisted" +msgstr "na černé listině" + +msgid "expired" +msgstr "prošlý" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "provádět nějaký z druhů nelegálních činností" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "dočasně zablokován" + +msgid "unknown" +msgstr "neznámý" + +msgid "use filesharing applications on this network" +msgstr "používat aplikace na sdílení souborů v této síti" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "plýtvat šířkou pásma nepotřebným stahováním nebo streamy" + +msgid "whitelisted" +msgstr "na bílé listině" + +#~ msgid "By accepting these rules you can use this network for" +#~ msgstr "Přijmutím těchto pravidel můžete začít používat tuto síť pro" + +#~ msgid "hour(s). After this time you need to accept these rules again." +#~ msgstr "hodin. Po uplynutí této doby musíte přijmout pravidla znovu." + +#~ msgid "the owner of this access point." +#~ msgstr "vlastník tohoto přístupového bodu." diff --git a/feeds/luci/applications/luci-app-splash/po/de/splash.po b/feeds/luci/applications/luci-app-splash/po/de/splash.po new file mode 100644 index 0000000..8b1cd9a --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/de/splash.po @@ -0,0 +1,383 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2013-08-19 13:53+0200\n" +"Last-Translator: Manuel \n" +"Language-Team: \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Accept" +msgstr "Akzeptieren" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" +"Zugang zum Internet ist unter Umständen dennoch möglich, da einige " +"Teilnehmer dieses Netzes ihren eigenen Internetzugang teilen. Da alle Nutzer " +"sich diese wenigen Zugänge teilen müssen bitten wir darum, folgende " +"Aktivitäten zu unterlassen:" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" +"Der Zugang zum Netzwerk wird nicht garantiert. Er kann jederzeit und ohne " +"Angabe von Gründen unterbrochen oder für bestimmte Endgeräte und Teilnehmer " +"gesperrt werden." + +msgid "Active Clients" +msgstr "verbundene Clients" + +msgid "Allowed hosts/subnets" +msgstr "Erlaubte Rechner/Netzwerke" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" +"Als Alternative zum Bearbeiten des kompletten Splash-Textes (oben) kann auch " +"nur eigener Text in die Default-Splashseite eingebunden werden. Dazu im " +"folgenden Feld den eigenen Text eingeben." + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" +"Die Bandbreitenlimitierung für Clients wird nur aktiviert, wenn sowohl für " +"Up- als auch für Download Limits eingegeben wurden. Ein Wert von 0 " +"deaktiviert die Bandbreitenbeschränkung komplett. Rechner/Netze aus der " +"Whitelist werden nicht limitiert." + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" +"Werde ein aktives Mitglied unserer Community und hilf, indem du selber einen " +"Access Point betreibst." + +msgid "Blacklist" +msgstr "Blacklist " + +msgid "Blocked" +msgstr "Gesperrt" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" +"Durch das Akzeptieren dieser Regeln kannst du unser Netzwerk für %s Stunde" +"(n) benutzen. Danach wirst du aufgefordert diese Bedingungen erneut zu " +"akzeptieren." + +msgid "Clearance time" +msgstr "Freigabezeit" + +msgid "Client-Splash" +msgstr "Client-Splash" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" +"Client-Splash ist ein Hotspot-Authentifizierungssystem für Freifunk und " +"andere Meshnetzwerke." + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" +"Wird hier eine URL angegeben dann werden Clients zu dieser Seite " +"weitergeleitet nachdem sie die Nutzungsbedingungen akzeptiert haben. Wird " +"keine URL angegeben dann werden Clients zu der ursprünglich angeforderten " +"Seite weitergeleitet." + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" +"Downloadgeschwindigkeit von Clients auf diesen Wert limitieren (kbyte/s) " + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" +"Clients die den Splash akzeptiert haben dürfen das Netzwerk für so viele " +"Stunden benutzen." + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" +"Uploadgeschwindigkeit von Clients auf diesen Wert limitieren (kbyte/s) " + +msgid "Contact" +msgstr "Kontakt" + +msgid "Decline" +msgstr "Ablehnen" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" +"Ziel-Rechner und Ziel-Netzwerke die hier aufgeführt sind werden vom " +"Splashvorgang ausgenommen, d.h. sie können von Clients immer und ohne " +"Authentifizierung erreicht werden." + +msgid "Donate some money to help us keep this project alive." +msgstr "" +"Hilf durch eine Spende dieses Projekt aufrechzuerhalten oder weiter " +"auszubauen." + +msgid "Download limit" +msgstr "Downloadbegrenzung" + +msgid "Edit the complete splash text" +msgstr "Bearbeiten des kompletten Splash-Textes." + +msgid "Fair Use Policy" +msgstr "Fair Use Policy" + +msgid "Firewall zone" +msgstr "Firewallzone" + +msgid "General" +msgstr "Allgemein" + +msgid "Get in %s with the operator of this access point." +msgstr "Nimm %s mit dem Betreiber dieses Access Points auf." + +msgid "Hostname" +msgstr "Rechnername" + +msgid "IP Address" +msgstr "IP-Adresse" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "Betreibe deine eigenen WLAN-Geräte auf anderen Kanälen als wir." + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "Wenn du unser Netzwerk regelmässig benutzt dann hilf uns bitte, z.B.:" + +msgid "Include your own text in the default splash" +msgstr "Einbinden von eigenem Text in die Default-Splashseite" + +msgid "Intercept client traffic on this Interface" +msgstr "Clientverkehr auf dieser Schnittstelle abfangen" + +msgid "Interfaces" +msgstr "Schnittstellen" + +msgid "Interfaces that are used for Splash." +msgstr "Schnittstellen die für Splash benutzt werden." + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" +"KB/s (Download/Upload). Durch die aktive Teilnahme an unserem Netzwerks " +"kannst du dieses Bandbreitenlimit deaktivieren." + +msgid "Legally Prohibited Activities" +msgstr "Verbotene Handlungen" + +msgid "Legally Prohibited content" +msgstr "Verbotene Inhalte" + +msgid "MAC Address" +msgstr "MAC-Adresse" + +msgid "MAC addresses in this list are blocked." +msgstr "MAC-Adressen in dieser Liste werden geblockt." + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" +"MAC-Adressen von Clients in der Whitelist. Diese müssen den Splash nicht " +"akzeptieren und unterliegen keinen Bandbreitenbegrenzungen." + +msgid "Netmask" +msgstr "Netzmaske" + +msgid "Network" +msgstr "Netzwerk" + +msgid "No clients connected" +msgstr "Keine Clients verbunden." + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" +"Bitte sei dir darüber bewusst, dass wir kein Internetanbieter sondern ein " +"experimentelles Gemeinschaftsnetzwerk sind." + +msgid "Policy" +msgstr "Richtlinie" + +msgid "Redirect target" +msgstr "Ziel für Weiterleitung" + +msgid "Safety" +msgstr "Sicherheit" + +msgid "Save" +msgstr "Speichern" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "Splashregeln werden in diese Firewallzone eingegliedert" + +msgid "Splashtext" +msgstr "Splash-Text" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" +"Das Netzwerk ist, wie das Internet auch, unverschlüsselt und offen. Jeder " +"Teilnehmer ist selbst für die Sicherheit seiner Verbindungen und seiner " +"Endgeräte verantwortlich." + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" +"Das offene und freie drahtlose Netzwerk wird von Freiwilligen betrieben " +"(\"Betreiber\"), die die nötigen Geräte und Internet-Anschlüsse " +"(\"Infrastruktur\") auf eigene Kosten zur Verfügung stellen." + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" +"Die Betreiber lehnen jede Haftung für Datenverlust, unbefugten Zugriff auf " +"Endgeräte, Schäden an Endgeräten oder finanzielle Verluste, die ein " +"Teilnehmer durch die Nutzung des Netzwerks erleidet ab." + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" +"Der Teilnehmer verpflichtet sich, keine Handlungen vorzunehmen bzw. " +"Handlungen zu unterlassen, welche gesetzliche Bestimmungen oder die Rechte " +"Dritter verletzen." + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" +"Der Teilnehmer verpflichtet sich, keine Inhalte über das Netzwerk zu " +"übertragen, welche gegen geltendes Recht verstoßen." + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" +"Der Teilnehmer verpflichtet sich, das Netzwerk nicht in einer Weise zu " +"beanspruchen, welche die Infrastruktur, das Netzwerk selbst, dessen " +"Betreiber oder andere Teilnehmer beeinträchtigt." + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" +"Diese Nutzungsbestimmungen regeln die Inanspruchnahme des Netzwerks durch " +"die Teilnehmer, welche sich mittels Computer, Handheld o.ä (\"Endgerät\") " +"mit dem Netzwerk verbinden." + +msgid "Time remaining" +msgstr "Verbleibende Zeit" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" +"Um nach dem Grund der Sperrung zu fragen oder um deren Aufhebung zu bitten " +"wende dich an den Administrator dieses Access Points:" + +msgid "Traffic in/out" +msgstr "Ein-/Ausgehender Verkehr" + +msgid "Upload limit" +msgstr "Upload-Begrenzung" + +msgid "Usage Agreement" +msgstr "Nutzungsbestimmungen" + +msgid "Welcome" +msgstr "Willkommen" + +msgid "Whitelist" +msgstr "Whitelist" + +msgid "You are now connected to the free wireless mesh network" +msgstr "Du bist jetzt verbunden mit dem freien Funknetzwerk" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" +"Hier kann ein eigener Text eingegeben werden, der Clients angezeigt wird." +"
Folgende Marker können dabei verwendet werden: ###COMMUNITY###, " +"###COMMUNITY_URL###, ###CONTACTURL###, ###LEASETIME###, ###LIMIT### und " +"###ACCEPT###." + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" +"Der Zugang zu diesem Netzwerk wurde vom Administrator blockiert. Das kann " +"verschiedene Gründe haben, sehr wahrscheinlich hast du jedoch die Regeln " +"dieses Netzwerks nicht beachtet und dadurch Probleme verursacht." + +msgid "Your bandwidth is limited to" +msgstr "Deine Bandbreite ist limitiert auf" + +msgid "blacklisted" +msgstr "gesperrt" + +msgid "expired" +msgstr "abgelaufen" + +msgid "optional when using host addresses" +msgstr "Die Angabe ist optional wenn nur einzelne Rechner/IPs verwendet werden" + +msgid "perform any kind of illegal activities" +msgstr "Illegale Aktivitäten" + +msgid "splashed" +msgstr "gesplasht" + +msgid "temporarily blocked" +msgstr "Vorübergehend geblockt" + +msgid "unknown" +msgstr "Unbekannt" + +msgid "use filesharing applications on this network" +msgstr "Filesharing betreiben" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "Bandbreite durch unnötige Downloads oder Streams zu verschwenden." + +msgid "whitelisted" +msgstr "erlaubt" + +#~ msgid "" +#~ "Hosts and Networks that are listed here are excluded from splashing, i.e. " +#~ "they are always allowed." +#~ msgstr "" +#~ "Rechner und Netzwerke die hier aufgeführt sind werden vom Splashvorgang " +#~ "ausgenommen, d.h. sie dürfen das Netzwerk immer und ohne Authentifizierung " +#~ "benutzen." diff --git a/feeds/luci/applications/luci-app-splash/po/el/splash.po b/feeds/luci/applications/luci-app-splash/po/el/splash.po new file mode 100644 index 0000000..df90478 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/el/splash.po @@ -0,0 +1,307 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-18 15:31+0200\n" +"PO-Revision-Date: 2012-03-18 15:31+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "Διεύθυνση IP" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "Διεπαφές" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "Διεύθυνση MAC" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "Δίκτυο" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "Αποθήκευση" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/en/splash.po b/feeds/luci/applications/luci-app-splash/po/en/splash.po new file mode 100644 index 0000000..615be16 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/en/splash.po @@ -0,0 +1,292 @@ +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/es/splash.po b/feeds/luci/applications/luci-app-splash/po/es/splash.po new file mode 100644 index 0000000..836352e --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/es/splash.po @@ -0,0 +1,376 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-24 18:30+0200\n" +"PO-Revision-Date: 2014-06-15 13:17+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Accept" +msgstr "Aceptar" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" +"El acceso a internet puede ser posible, sin embargo, porque otros miembros " +"del proyecto comparten sus conexiones a internet privadas y estas pocas " +"conexiones se comparten entre todos los usuarios. Por este motivo el ancho " +"de banda está limitado y le pedimos que no haga:" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" +"No se puede garantizar el acceso a la red. Podría interrumpirse en cualquier " +"momento, sin aviso y por cualquier motivo, para ciertos dispositivos y/o es " +"posible bloquearlo para ciertos usuarios." + +msgid "Active Clients" +msgstr "Clientes activos" + +msgid "Allowed hosts/subnets" +msgstr "Máquinas y subredes permitidas" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" +"En vez de editar el splash entero puede introducir aquí un texto que se " +"mostrará en el splash por defecto." + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" +"La limitación de ancho de banda sólo se activa cuando se establecen tanto el " +"límite de subida como el de bajada. Ponga 0 para desactivarla. A los " +"clientes en lista blanca no se les limita." + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" +"Conviértase en un miembro activo de esta comunidad y ayude gestionando su " +"propio nodo" + +msgid "Blacklist" +msgstr "Lista negra" + +msgid "Blocked" +msgstr "Bloqueado" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" +"Aceptar estas reglas le permite usar esta red durante %s hora(s). Tras este " +"tiempo tendrá que aceptarlas de nuevo." + +msgid "Clearance time" +msgstr "Tiempo de autorización" + +msgid "Client-Splash" +msgstr "Cliente-Splash" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "Cliente-Splash es un sistema de autentificación para redes mesh." + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" +"Se redirigirá a los clientes a esta página tras haber aceptado el splash. Si " +"se deja vacío se les redirigirá a la página que habían pedido." + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "La velocidad de descarga de los clientes está limitada a (Kbytes/s)" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" +"Horas a las que se permitirá usar la red a los clientes que acepten la " +"presentación." + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "La velocidad de subida de los clientes está limitada a (Kbytes/s)" + +msgid "Contact" +msgstr "Contacto" + +msgid "Decline" +msgstr "Rechazar" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" +"Redes y hosts destino excluidos de splash, es decir, que siempre son " +"admitidos." + +msgid "Donate some money to help us keep this project alive." +msgstr "Haga una aportación para ayudarnos a mantener este proyecto vivo." + +msgid "Download limit" +msgstr "Límite de descarga" + +msgid "Edit the complete splash text" +msgstr "Editar el texto completo del splash" + +msgid "Fair Use Policy" +msgstr "Política de uso adecuado" + +msgid "Firewall zone" +msgstr "Zona del cortafuegos" + +msgid "General" +msgstr "General" + +msgid "Get in %s with the operator of this access point." +msgstr "Conecte %s con el operador de este punto de acceso." + +msgid "Hostname" +msgstr "Nombre de máquina" + +msgid "IP Address" +msgstr "Dirección IP" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "Si maneja su propio wi-fi use canales diferentes de los nuestros." + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "Si es usuario habitual de esta red le pedimos apoyo:" + +msgid "Include your own text in the default splash" +msgstr "Incluir su propio texto en el splash por defecto" + +msgid "Intercept client traffic on this Interface" +msgstr "Interceptar el tráfico cliente en esta interfaz" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interfaces that are used for Splash." +msgstr "Interfaces usados para Splash." + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" +"KB/s (Descarga/Subida). Puede evitar este límite contribuyendo activamente a " +"este proyecto." + +msgid "Legally Prohibited Activities" +msgstr "Actividades prohibidas por ley" + +msgid "Legally Prohibited content" +msgstr "Contenido prohibido por ley" + +msgid "MAC Address" +msgstr "Dirección MAC" + +msgid "MAC addresses in this list are blocked." +msgstr "Direcciones MAC bloqueadas." + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" +"Direcciones MAC de clientes en lista blanca. Estos no tendrán que aceptar la " +"presentación ni tendrán limitado el ancho de banda." + +msgid "Netmask" +msgstr "Máscara de red" + +msgid "Network" +msgstr "Red" + +msgid "No clients connected" +msgstr "Sin clientes conectados" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" +"Tenga presente que no somos un proveedor de acceso a internet sino una red " +"comunitaria experimental." + +msgid "Policy" +msgstr "Politica" + +msgid "Redirect target" +msgstr "Redirige objetivo" + +msgid "Safety" +msgstr "Seguridad" + +msgid "Save" +msgstr "Guardar" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "Zona del cortafuegos en la que está integradas las reglas del Splash" + +msgid "Splashtext" +msgstr "Mensaje de presentación" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" +"La red, como internet, no está encriptada y es abierta. Cada participante es " +"responsable de la seguridad de sus propias conexiones y dispositivos." + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" +"La red abierta y libre de voluntarios (\"operadores\") proporciona el equipo " +"necesario y conexiones a internet (\"infraestructura\") de su propio " +"bolsillo." + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" +"El operador no será responsable por la pérdida de datos, acceso/daño no " +"autorizado a dispositivos o pérdidas financieras que los participantes " +"pudiesen incurrir por el uso de la red." + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" +"El participante acepta no llevar a cabo ninguna acción y evitará acciones " +"que pudiese violar las leyes o infringir los derechos de terceros." + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" +"El participante acepta no transferir contenido que viole la ley por la red." + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" +"El participante acepta no usar la red de ninguna manera que dañe la " +"infraestructura, la propia red, sus operadores u otros participantes." + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" +"Estos términos cubren el uso de la red por los ordenadores de sus " +"participantes, PDAs o dispositivos similares." + +msgid "Time remaining" +msgstr "Tiempo restante" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" +"Para preguntar porqué se le ha bloqueado o pedir acceso de nuevo intente " +"contactar con el propietario de este punto de acceso:" + +msgid "Traffic in/out" +msgstr "Tráfico entrante/saliente" + +msgid "Upload limit" +msgstr "Límite de subida" + +msgid "Usage Agreement" +msgstr "Acuerdo de uso" + +msgid "Welcome" +msgstr "Bienvenido" + +msgid "Whitelist" +msgstr "Lista blanca" + +msgid "You are now connected to the free wireless mesh network" +msgstr "Se ha conectado a la red libre mesh inalámbrica" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" +"Introduzca aquí el texto que se mostrará a los clientes.
Es posible " +"usar las siguientes etiquetas: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### y ###ACCEPT###." + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" +"Se le ha bloqueado el acceso a esta red, probablemente porque hizo algo " +"prohibido explícitamente en sus reglas." + +msgid "Your bandwidth is limited to" +msgstr "Su ancho de banda está limitado a" + +msgid "blacklisted" +msgstr "en lista negra" + +msgid "expired" +msgstr "caducado" + +msgid "optional when using host addresses" +msgstr "opcional si usa direcciones de máquina" + +msgid "perform any kind of illegal activities" +msgstr "llevar a cabo cualquier tipo de actividades ilegales" + +msgid "splashed" +msgstr "Recibido" + +msgid "temporarily blocked" +msgstr "bloqueado temporalmente" + +msgid "unknown" +msgstr "desconocido" + +msgid "use filesharing applications on this network" +msgstr "usar aplicaciones de compartición de ficheros en esta red" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "malgastar ancho de banda con descargas innecesarias o multimedia" + +msgid "whitelisted" +msgstr "en lista blanca" + +#~ msgid "" +#~ "Hosts and Networks that are listed here are excluded from splashing, i.e. " +#~ "they are always allowed." +#~ msgstr "" +#~ "A estas máquinas y redes no se les mostrará la presentación y siempre serán " +#~ "bienvenidas." + +#~ msgid "By accepting these rules you can use this network for" +#~ msgstr "Si acepta estas reglas pordrá usar esta red para" + +#~ msgid "Edit Splash text" +#~ msgstr "Editar la página de bienvenida" + +#~ msgid "hour(s). After this time you need to accept these rules again." +#~ msgstr "hora/horas. Tras este tiempo deberá aceptar las reglas de nuevo." + +#~ msgid "the owner of this access point." +#~ msgstr "el propietario de este punto de acceso." diff --git a/feeds/luci/applications/luci-app-splash/po/fr/splash.po b/feeds/luci/applications/luci-app-splash/po/fr/splash.po new file mode 100644 index 0000000..e525ab3 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/fr/splash.po @@ -0,0 +1,337 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: Manuel Munz \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Accept" +msgstr "Accepter" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "Clients actifs" + +msgid "Allowed hosts/subnets" +msgstr "Hôtes/sous-réseaux autorisés" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" +"La limitation de bande-passante des clients est activée seulement quand les " +"limites montante et descendante sont données. Utilisez ici une valeur de 0 " +"pour complètement désactiver cette limitation. Les clients autorisés (liste-" +"blanche) ne sont pas limités." + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "interdire (liste-noire)" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "Durée d'autorisation" + +msgid "Client-Splash" +msgstr "Client-Splash" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" +"Client-Splash est un système d'authentification de HotSpot pour des réseaux " +"sans-fil maillés." + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" +"La vitesse de téléchargement des clients est limitée à cette valeur (en ko/s)" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" +"Les clients qui auront passé la page d'accueil seront autorisés à utiliser " +"le réseau pendant ce nombre d'heures donné." + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "La vitesse montante des clients sera limitée à cette valeur (en ko/s)" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "Refuser" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "Limite en télé-chargement" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "Zone du pare-feu" + +msgid "General" +msgstr "Général" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "Hôte" + +msgid "IP Address" +msgstr "Adresse IP" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "Intercepter le trafic-client sur cette interface" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interfaces that are used for Splash." +msgstr "Interfaces utilisés pour l'accueil." + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "Adresse MAC" + +msgid "MAC addresses in this list are blocked." +msgstr "Les adresses MAC de cette liste sont bloquées." + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" +"Adresses MAC des clients autorisés d'office. Ils n'ont pas à accepter la " +"page d'accueil et ne sont pas limités en bande-passante." + +msgid "Netmask" +msgstr "Masque" + +msgid "Network" +msgstr "Réseau" + +msgid "No clients connected" +msgstr "Aucun client connecté" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "Politique" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "Sauvegarder" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "Les règles du HotSpot sont intégrés dans cette zone du pare-feu" + +msgid "Splashtext" +msgstr "Texte de la page d'accueil" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "Temps restant" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "Trafic entrant/sortant" + +msgid "Upload limit" +msgstr "Limite du trafic montant" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "Liste-blanche" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "interdit (par liste-noire)" + +msgid "expired" +msgstr "terminé" + +msgid "optional when using host addresses" +msgstr "optionnel quand on utilise des adresses d'hôtes" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "À l'accueil" + +msgid "temporarily blocked" +msgstr "bloqué(s) temporairement" + +msgid "unknown" +msgstr "inconnu" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "autorisés par liste blanche" + +#~ msgid "" +#~ "Hosts and Networks that are listed here are excluded from splashing, i.e. " +#~ "they are always allowed." +#~ msgstr "" +#~ "Les hôtes et réseaux listés ici sont exclus de l'accueil du HotSpot, ils ne " +#~ "seront jamais autorisés." + +#~ msgid "Edit Splash text" +#~ msgstr "Modifier le texte de la page d'accueil" + +#~ msgid "" +#~ "You can change the text that is displayed to clients here.
It is " +#~ "possible to use the following markers: ###COMMUNITY###, " +#~ "###COMMUNITY_URL###, ###LEASETIME### and ###ACCEPT###.
Click here to " +#~ "test the splash page after you saved it." +#~ msgstr "" +#~ "Vous pouvez changer ici le texte qui sera présenté aux clients.
Il " +#~ "est possible d'y inclure les marqueurs suivants : ###COMMUNITY###, " +#~ "###COMMUNITY_URL###, ###LEASETIME### et ###ACCEPT###.
Cliquez ici tester la page d'accueil une fois celle-ci " +#~ "sauvegardée." diff --git a/feeds/luci/applications/luci-app-splash/po/he/splash.po b/feeds/luci/applications/luci-app-splash/po/he/splash.po new file mode 100644 index 0000000..bf7e2f0 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/he/splash.po @@ -0,0 +1,325 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-09-10 04:38+0200\n" +"PO-Revision-Date: 2012-09-10 04:58+0200\n" +"Last-Translator: Snoof \n" +"Language-Team: LANGUAGE \n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" +"החיבור לאינטרנט יכול להתאפשר בגלל שכמה פעילים של הפרוייקט משתפים את חיבור " +"האינטרנט האישי שלהם. אותם חיבורים מעטים משותפים בין כל המשתמשים. משמע רוחב " +"הפס הזמין מוגבל ולכן אנו מבקשים מכם לא לעשות את הדברים הבאים:" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "הפוך לחבר פעיל של הקהילה ועזור ע\"י תפעול נקודה של עצמך" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "חסומים" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "דחה" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "תרום כסף על מנת שנוכל לשמור על הפרוייקט הזה חי." + +msgid "Download limit" +msgstr "הגבלת הורדה" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "כללי" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "כתובת IP" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "אם הנך מפעיל מכשירי wifi של עצמך השתמש בערוצים שונים משלנו." + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "אם הנך משתמש ברשת זו על בסיס קבוע אנו מבקשים את תמיכתך:" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "ממשקים" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" +"KB/s (הורדה/העלאה). הנך יכול להוריד מגבלה זו ע\"י תרומה פעילה לפרוייקט זה." + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "כתובת MAC" + +msgid "MAC addresses in this list are blocked." +msgstr "כתובות MAC ברשימה זו הינם חסומים." + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "רשת" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "שים לב שאנו לא ספק אינטרנט אלא רשת חברתית נסיונית." + +msgid "Policy" +msgstr "מדיניות" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "שמור" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "זמן שנותר" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" +"על מנת לשאול לסיבה שבגגלה נחסמת או לבקש גישה מחדש הנך יכול לנסות ליצור קשר " +"עם הבעלים של נקודת גישה זו:" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "הגבלת העלאה" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "ברוכים הבאים" + +msgid "Whitelist" +msgstr "" + +#, fuzzy +msgid "You are now connected to the free wireless mesh network" +msgstr "הנך מחובר כעת לרשת האלחוטית החינמית" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" +"הגישה שלך לרשת זו נחסמה, ככל הנראה בגלל שעשית משהו שהחוקים שלנו אוסרים " +"במפורש." + +msgid "Your bandwidth is limited to" +msgstr "רוחב הפס שלך מוגבל ל" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "פג תוקף" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "בצע פעילות בלתי חוקית מכל סוג שהוא" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "חסום זמנית" + +msgid "unknown" +msgstr "לא ידוע" + +msgid "use filesharing applications on this network" +msgstr "השתמש בתוכנות לשיתוף קבצים ברשת זו." + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "לבזבז רוחב פס עם הורדות או שידורים מיותרים" + +msgid "whitelisted" +msgstr "" + +#~ msgid "By accepting these rules you can use this network for" +#~ msgstr "ע\"י הסכמתך לחוקים האלו הנך יכול להשתמש ברשת זו בשביל" + +#~ msgid "hour(s). After this time you need to accept these rules again." +#~ msgstr "שעה(ות). לאחר זמן זה תצטרך לקבל את החוקים האלו שוב." + +#~ msgid "the owner of this access point." +#~ msgstr "הבעלים של נקודת גישה זו." diff --git a/feeds/luci/applications/luci-app-splash/po/hu/splash.po b/feeds/luci/applications/luci-app-splash/po/hu/splash.po new file mode 100644 index 0000000..f2c7da1 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/hu/splash.po @@ -0,0 +1,303 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/it/splash.po b/feeds/luci/applications/luci-app-splash/po/it/splash.po new file mode 100644 index 0000000..8964b6c --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/it/splash.po @@ -0,0 +1,361 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-10 18:43+0200\n" +"PO-Revision-Date: 2013-02-10 19:08+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Accept" +msgstr "Accetta" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" +"L'accesso a Internet potrebbe essere possibile, perché alcuni attivisti di " +"questo progetto condividono le loro connessioni internet private​​. Queste " +"poche connessioni sono condivise tra tutti gli utenti. Ciò significa che la " +"larghezza di banda a disposizione è limitato e per questo vi chiediamo di " +"non fare una delle seguenti operazioni:" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "Attiva Clienti" + +msgid "Allowed hosts/subnets" +msgstr "Hosts/Sottoreti Consentite" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" +"Il limite della larghezza di banda per i clienti viene attivato solo quando " +"entrambi i limiti di upload e download sono impostati. Utilizzare un valore " +"pari a 0 qui per disattivare completamente questa limitazione. I client " +"inseriti nell'elenco dei consentiti non sono limitati." + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" +"Diventare un membro attivo di questa comunità e aiutaci nell'utilizzo del " +"proprio nodo" + +msgid "Blacklist" +msgstr "Lista Nera" + +msgid "Blocked" +msgstr "Bloccato" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "Spazio tempo" + +msgid "Client-Splash" +msgstr "Client-Splash" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" +"Client-Splash è un sistema di autenticazione hotspot per le reti mesh " +"wireless." + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "La velocità di download dei clienti è limitata a tale valore (kbyte/s)" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" +"I clienti che hanno accettato lo splash sono autorizzati ad utilizzare la " +"rete anche per molte ore." + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "La velocità di upload dei clienti è limitata a questo valore (kbyte/s)" + +msgid "Contact" +msgstr "Contatto" + +msgid "Decline" +msgstr "Rifiuta" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" +"Effettua una donazione per aiutare a mantenere in attività questo progetto." + +msgid "Download limit" +msgstr "Limite di download" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "Zona Firewall" + +msgid "General" +msgstr "Generale" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "Nome Host" + +msgid "IP Address" +msgstr "Indirizzo IP" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" +"Se si utilizza una propria apparecchiatura wifi utilizzare canali differenti " +"dalle nostre." + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" +"Se si utilizza questa rete su base regolare vi chiediamo il vostro sostegno:" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "Intercettare il traffico cliente su questa interfaccia" + +msgid "Interfaces" +msgstr "Interfacce" + +msgid "Interfaces that are used for Splash." +msgstr "Interfacce usate per lo Splash." + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" +"KB/s (Download/Upload). Si può essere in grado di rimuovere questo limite, " +"contribuendo attivamente a questo progetto." + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "Indirizzo MAC" + +msgid "MAC addresses in this list are blocked." +msgstr "gli indirizzi MAC in questo elenco sono bloccati." + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" +"Gli indirizzi MAC dei clienti dell'elenco consentito. Questi non hanno " +"bisogno di accettare lo splash e non hanno la larghezza di banda limitata." + +msgid "Netmask" +msgstr "Maschera Rete" + +msgid "Network" +msgstr "Rete" + +msgid "No clients connected" +msgstr "Nessun cliente connesso" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" +"Si prega di notare che non siamo un provider di servizi internet, ma una " +"rete di comunità sperimentale." + +msgid "Policy" +msgstr "Politica" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "Salva" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "Le regole Splash sono integrate in questa zona firewall" + +msgid "Splashtext" +msgstr "Splashtext" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "Tempo restante" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" +"Per richiedere il motivo per cui sono state bloccate o chiedere l'accesso di " +"nuovo si può provare a contattare il proprietario di questo punto di accesso:" + +msgid "Traffic in/out" +msgstr "Traffico ingresso/uscita" + +msgid "Upload limit" +msgstr "Limite di upload" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "Benvenuti" + +msgid "Whitelist" +msgstr "Elenco Consentiti" + +msgid "You are now connected to the free wireless mesh network" +msgstr "Ora si è connessi alla rete mesh wireless gratuita" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" +"È possibile inserire il proprio testo che viene visualizzato ai clienti qui " +"
È possibile utilizzare i seguenti marcatori.: ###COMMUNITY###, " +"###COMMUNITY_URL###, ###CONTACTURL###, ###LEASETIME###, ###LIMIT### and " +"###ACCEPT###." + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" +"L'accesso a questa rete è stata bloccata, molto probabilmente perché hai " +"fatto qualcosa che le nostre regole vietano espressamente." + +msgid "Your bandwidth is limited to" +msgstr "La tua larghezza di banda è limitata a" + +msgid "blacklisted" +msgstr "Lista Nera" + +msgid "expired" +msgstr "scaduto" + +msgid "optional when using host addresses" +msgstr "opzionale quando si utilizza indirizzi host" + +msgid "perform any kind of illegal activities" +msgstr "eseguire qualsiasi tipo di attività illegali" + +msgid "splashed" +msgstr "splashed" + +msgid "temporarily blocked" +msgstr "temporaneamente bloccato" + +msgid "unknown" +msgstr "sconosciuto" + +msgid "use filesharing applications on this network" +msgstr "utilizzare le applicazioni di filesharing su questa rete" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "sprecate banda con download o flussi inutili" + +msgid "whitelisted" +msgstr "Elenco contensiti" + +#~ msgid "" +#~ "Hosts and Networks that are listed here are excluded from splashing, i.e. " +#~ "they are always allowed." +#~ msgstr "" +#~ "Le reti e gli host che sono elencate qui sono esclusi dallo splashing, cio* " +#~ "sono sempre ammessi." + +#~ msgid "By accepting these rules you can use this network for" +#~ msgstr "Accettando queste regole è possibile utilizzare questa rete per" + +#~ msgid "Edit Splash text" +#~ msgstr "Modifica il testo Splash" + +#~ msgid "hour(s). After this time you need to accept these rules again." +#~ msgstr "" +#~ "ora(e). Trascorso questo tempo è necessario accettare queste regole di " +#~ "nuovo." + +#~ msgid "the owner of this access point." +#~ msgstr "il proprietario di questo punto di accesso." diff --git a/feeds/luci/applications/luci-app-splash/po/ja/splash.po b/feeds/luci/applications/luci-app-splash/po/ja/splash.po new file mode 100644 index 0000000..615be16 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/ja/splash.po @@ -0,0 +1,292 @@ +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/ms/splash.po b/feeds/luci/applications/luci-app-splash/po/ms/splash.po new file mode 100644 index 0000000..615be16 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/ms/splash.po @@ -0,0 +1,292 @@ +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/no/splash.po b/feeds/luci/applications/luci-app-splash/po/no/splash.po new file mode 100644 index 0000000..615be16 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/no/splash.po @@ -0,0 +1,292 @@ +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/pl/splash.po b/feeds/luci/applications/luci-app-splash/po/pl/splash.po new file mode 100644 index 0000000..6856884 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/pl/splash.po @@ -0,0 +1,385 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-24 06:17+0200\n" +"PO-Revision-Date: 2014-05-05 04:17+0200\n" +"Last-Translator: piosl \n" +"Language-Team: LANGUAGE \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Accept" +msgstr "Akceptuj" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" +"Dostęp do internetu może być mimo wszystko możliwy, ponieważ niektórzy " +"aktywiści tego projektu dzielą się swoimi prywatnymi łączami. Te kilka łącz " +"jest rozdzielanych między wszystkich użytkowników. Oznacza to, że transfer " +"jest ograniczony. Z tego powodu prosimy, abyś nie:" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" +"Dostęp do sieci nie jest gwarantowany. Może być przerwany w każdej chwili i " +"bez podawania jakiegokolwiek powodu, dla niektórych urządzeń i/lub " +"niektórych użytkowników." + +msgid "Active Clients" +msgstr "Aktywni klienci" + +msgid "Allowed hosts/subnets" +msgstr "Dozwolone hosty/podsieci" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" +"Jako alternatywę do edycji pełnego tekstu powitalnego możesz po prostu " +"zawrzeć własny tekst wpisując go tutaj." + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" +"Limit transferu dla klientów jest aktywny tylko jeśli aktywne są oba limity " +"- pobierania i wysyłania. Ustaw 0, aby całkowicie wyłączyć to ograniczenie. " +"Nie dotyczy ono klientów z białej listy." + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" +"Zostań aktywnym członkiem tej społeczności i pomóż, zakładając własny węzeł" + +msgid "Blacklist" +msgstr "Czarna lista" + +msgid "Blocked" +msgstr "Zablokowane" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" +"Akceptując te zasady można korzystać z tej sieci na %s godzin(y). Po tym " +"czasie należy zaakceptować te zasady ponownie." + +# z niemieckiego tłumaczenia +#, fuzzy +msgid "Clearance time" +msgstr "Czas wyzwalacza" + +msgid "Client-Splash" +msgstr "Splash kliencki" + +# nie ma słowa "autentykacja" - to brzydka kalka z angielskiego. +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" +"Klient Splash - sposób uwierzytelniania użytkowników dla sieci WiFi oparty o " +"wyświetlanie komunikatów." + +#, fuzzy +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" +"Klienci są przekierowywani do tej strony po tym, jak zaakceptują powitanie. " +"Jeśli to miejsce jest puste zostaną przekierowani do strony którą wybrali." + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "Prędkość pobierania dla klienta jest ograniczona do wartości (kb/s)" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "Klienci, którzy zaakceptowali okienko mogą korzystać z sieci przez." + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "Prędkość pobierania dla klienta jest ograniczona do wartości (kb/s)" + +msgid "Contact" +msgstr "Kontakt" + +msgid "Decline" +msgstr "Odrzuć" + +#, fuzzy +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" +"Hosty przeznaczenia i sieci, które są wykluczone z powitania, tzn. są zawsze " +"dozwolone." + +msgid "Donate some money to help us keep this project alive." +msgstr "Możesz zasposorować ten projekt aby utrzymać go przy życiu" + +msgid "Download limit" +msgstr "Limit ściągania" + +msgid "Edit the complete splash text" +msgstr "Edit the complete splash text" + +msgid "Fair Use Policy" +msgstr "Zasady dozwolonego użytku" + +msgid "Firewall zone" +msgstr "Strefa firewall" + +msgid "General" +msgstr "Ogólne" + +msgid "Get in %s with the operator of this access point." +msgstr "Uzyskaj %s z operatorem tego punktu dostępu." + +msgid "Hostname" +msgstr "Nazwa hosta" + +msgid "IP Address" +msgstr "Adres IP" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" +"Jeśli używasz własnych urządzeń WiFi korzystaj z innych kanałów niż nasze." + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "Jeśli korzystasz z tej sieci regularnie prosimy cię o wsparcie." + +msgid "Include your own text in the default splash" +msgstr "Zamieść własny tekst w miejscu domyślnego powitania" + +msgid "Intercept client traffic on this Interface" +msgstr "Przechwytuj ruchu klienta w tym interfejsie" + +msgid "Interfaces" +msgstr "Interfejs" + +msgid "Interfaces that are used for Splash." +msgstr "Interfejsy wykorzystywane przez komunikat (Splash)" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" +"KB/s (Download/Upload). Będziesz w stanie usunąć ten limit jeśli aktywnie " +"przyłączysz się do tego projektu." + +msgid "Legally Prohibited Activities" +msgstr "Działania zabronione prawnie" + +msgid "Legally Prohibited content" +msgstr "Treści zabronione prawnie" + +msgid "MAC Address" +msgstr "Adres MAC" + +msgid "MAC addresses in this list are blocked." +msgstr "Adresy MAC z tej listy są zablokowane." + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" +"Biała lista adresów MAC, wszyscy z tej listy nie muszą akceptować komunikatu " +"(Splash) i nie mają ograniczanego połączenia" + +msgid "Netmask" +msgstr "Maska sieci" + +msgid "Network" +msgstr "Sieć" + +msgid "No clients connected" +msgstr "Nie ma podłączonych klientów" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" +"Zwróć uwagę na to że nie jesteśmy providerem internetowym ale " +"eksperymentalną siecią" + +msgid "Policy" +msgstr "Zasady" + +msgid "Redirect target" +msgstr "przekierować cel" + +msgid "Safety" +msgstr "Bezpieczeństwo" + +msgid "Save" +msgstr "Zachowaj" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" +"Reguły komunikatu (Splash) są integrowane z ustawieniami firewalla tej strefy" + +msgid "Splashtext" +msgstr "Tekst komunikatu (Splash)" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" +"Sieci, takie jak Internet, są otwarte i nieszyfrowane. Każdy uczestnik jest " +"odpowiedzialny za bezpieczeństwo swoich połączeń i urządzeń." + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" +"Właściciel sieci nie ponosi odpowiedzialności za utratę danych, " +"nieautoryzowanego dostępu / uszkodzenia urządzeń lub strat finansowych, " +"które uczestnicy mogą ponieść podczas korzystania z sieci." + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" +"Uczestnik zobowiązuje się nie wykonywać żadnych działań, i powstrzymać się " +"od działań, które naruszają prawo lub naruszające prawa osób trzecich." + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" +"Uczestnik zobowiązuje się do nie przesyłania w sieci treści, które naruszają " +"prawo." + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" +"Uczestnik zobowiązuje się nie korzystać z sieci w sposób, który zagraża " +"infrastrukturze, samej sieci, jej podmiotom lub innym uczestnikom." + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" +"Niniejszy Regulamin reguluje wykorzystanie komputera w sieci przez swoich " +"uczestników, PDA, lub podobnego urządzenia (\"Urządzeń\") w ramach sieci." + +msgid "Time remaining" +msgstr "Pozostały czas" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" +"Aby poznać z jakiego powodu zostałeś zablokowany lub prosić o ponowne " +"odblokowanie możesz spróbować skontaktować się z właścicielem tego Access " +"Point'a:" + +msgid "Traffic in/out" +msgstr "Ruch do/od" + +msgid "Upload limit" +msgstr "Limit wysyłania" + +msgid "Usage Agreement" +msgstr "Umowa użytkowania" + +msgid "Welcome" +msgstr "Witamy" + +msgid "Whitelist" +msgstr "Biała lista" + +msgid "You are now connected to the free wireless mesh network" +msgstr "Jesteś teraz podłączony do darmowej sieci" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" +"Możesz umieścić tutaj własny tekst wyświetlany dla klientów.
" +"Dopuszczalne jest używanie następujących znaków: ###COMMUNITY###, " +"###COMMUNITY_URL###, ###CONTACTURL###, ###LEASETIME###, ###LIMIT### and " +"###ACCEPT###." + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" +"Twój dostęp do sieci został zablokowany, najprawdopodobniej dlatego że " +"wykonałeś jedną z akcji zabronionych przez nasze reguły." + +msgid "Your bandwidth is limited to" +msgstr "Twój transfer jest ograniczony do" + +msgid "blacklisted" +msgstr "czarna lista" + +msgid "expired" +msgstr "wygasło" + +msgid "optional when using host addresses" +msgstr "opcjonalne w przypadku używania adresów hostów" + +msgid "perform any kind of illegal activities" +msgstr "wykonywał którąkolwiek z zakazanych akcji" + +msgid "splashed" +msgstr "Powitanie" + +msgid "temporarily blocked" +msgstr "tymczasowo zablokowane" + +msgid "unknown" +msgstr "nieznane" + +# Zgaduję, że to jest wyświetlane tuż po komunikacie nr 2, więc tak powinno pasować. +msgid "use filesharing applications on this network" +msgstr "używał programów do dzielenia się plikami w tej sieci" + +# j.w. +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "marnował transfer na niepotrzebne pobieranie plików i strumieni" + +msgid "whitelisted" +msgstr "biała lista" + +#~ msgid "" +#~ "Hosts and Networks that are listed here are excluded from splashing, i.e. " +#~ "they are always allowed." +#~ msgstr "" +#~ "Hosty i sieci wylistowane tutaj są wyłączone z konieczności klikania " +#~ "komunikatu, zawsze mogą połączyć się do sieci." + +#~ msgid "By accepting these rules you can use this network for" +#~ msgstr "Akceptując te reguły możesz używać sieci do:" + +#~ msgid "Edit Splash text" +#~ msgstr "Edytuj tekst Komunikatu (Splash)" + +#~ msgid "hour(s). After this time you need to accept these rules again." +#~ msgstr "Czas po jakim musisz zaakceptować te reguły (w godzinach)" + +#~ msgid "the owner of this access point." +#~ msgstr "Właściciel tego Access Point'a" diff --git a/feeds/luci/applications/luci-app-splash/po/pt-br/splash.po b/feeds/luci/applications/luci-app-splash/po/pt-br/splash.po new file mode 100644 index 0000000..cbdc801 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/pt-br/splash.po @@ -0,0 +1,402 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-02 05:36+0200\n" +"PO-Revision-Date: 2014-06-21 19:10+0200\n" +"Last-Translator: Éder \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Accept" +msgstr "Aceitar" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" +"O acesso à internet, no entanto, pode ser possível porque alguns ativistas " +"deste projeto compartilham duas conexões privadas com a internet. Estas " +"poucas conexões são compartilhadas entre todos os usuários. Isto significa " +"que a banda disponível é limitada e, por este motivo, pedimos que você não " +"faça qualquer uma destas coisas:" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" +"O acesso à rede não é garantido. Ele pode ser interrompido a qualquer " +"momento sem aviso e por qualquer motivo, para alguns equipamentos e/ou pode " +"bloquear alguns usuários." + +msgid "Active Clients" +msgstr "Clientes Ativos" + +msgid "Allowed hosts/subnets" +msgstr "Subredes/equipamentos permitidos" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" +"Como uma alternativa a edição completa do texto do termo de uso, você pode " +"também entrar aqui algum texto personalizado para incluir na página padrão." + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" +"O limite da taxa de transferência somente é ativado quando ambos os limites, " +"para subir e baixar, estão definidos. Use o valor 0 para desabilitar " +"completamente esta limitação. Clientes na lista branca não são limitados." + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" +"Torne-se um membro ativo desta comunidade e ajude operando seu próprio nó." + +msgid "Blacklist" +msgstr "Lista negra" + +msgid "Blocked" +msgstr "Bloqueado" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" +"Aceitando estas regras, você pode usar esta rede por %s hora(s). Depois " +"deste prazo, você terá que aceitar estas regras novamente." + +msgid "Clearance time" +msgstr "Tempo de eliminação" + +msgid "Client-Splash" +msgstr "Client-Splash" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" +"Client-Splash é um sistema de autenticação de ponto de acesso para redes sem " +"fio em malha." + +# 20140621: edersg: tradução +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" +"Os clientes são redirecionados para esta página depois de terem aceitado a " +"*splash* Se esta for deixada em branco, eles são redirecionados para a " +"página que haviam solicitado." + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" +"A velocidade para baixar dos clientes é limitada por este valor (kbytes/s)" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" +"Os clientes que aceitarem o termo de uso estarão autorizados a usar a rede " +"por esta quantidade de horas." + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" +"A velocidade para subir dos clientes é limitada por este valor (kbytes/s)" + +msgid "Contact" +msgstr "Contato" + +msgid "Decline" +msgstr "Rejeitar" + +# 20140621: edersg: tradução +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" +"As redes e as máquinas de destino que são excluídas a partir da *splashing*, " +" são sempre permitidas." + +msgid "Donate some money to help us keep this project alive." +msgstr "Doar algum dinheiro para ajudar a manter este projeto vivo." + +msgid "Download limit" +msgstr "Limite para baixar" + +msgid "Edit the complete splash text" +msgstr "Edite todo o termo de uso" + +msgid "Fair Use Policy" +msgstr "Política de uso adequado" + +msgid "Firewall zone" +msgstr "Zona do Firewall" + +msgid "General" +msgstr "Geral" + +# Very strange text... Used at http://luci.subsignal.org/trac/browser/luci/trunk/applications/luci-splash/luasrc/view/splash/splash.htm:58 +msgid "Get in %s with the operator of this access point." +msgstr "Entre em %s com o operador deste ponto de acesso." + +msgid "Hostname" +msgstr "Nome do Equipamento" + +msgid "IP Address" +msgstr "Endereço IP" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" +"Se você opera seu próprio equipamento WiFi, use canais diferentes dos nossos." + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "Se você usa esta rede regularmente, nós pedimos a sua ajuda:" + +msgid "Include your own text in the default splash" +msgstr "Inclua seu próprio texto no termo de uso padrão" + +msgid "Intercept client traffic on this Interface" +msgstr "Interceptar o tráfego do cliente nesta interface" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interfaces that are used for Splash." +msgstr "Interfaces usadas pelo Splash." + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" +"KB/s (Baixando/Subindo). Você pode remover esta limitação contribuindo " +"ativamente para este projeto." + +msgid "Legally Prohibited Activities" +msgstr "Atividades Proibidas por Lei" + +msgid "Legally Prohibited content" +msgstr "Conteúdo Proibido por Lei" + +msgid "MAC Address" +msgstr "Endereço MAC" + +msgid "MAC addresses in this list are blocked." +msgstr "Os endereços MAC nesta lista serão bloqueados." + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" +"Endereços MAC dos clientes na lista branca. Estes não precisam aceitar o " +"termo de uso e não possuem limitação na sua taxa de transferência." + +msgid "Netmask" +msgstr "Máscara de Rede" + +msgid "Network" +msgstr "Rede" + +msgid "No clients connected" +msgstr "Nenhum cliente conectado" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" +"Observe que nós não somos um provedor de internet mas uma rede comunitária " +"experimental." + +msgid "Policy" +msgstr "Política" + +# 20140621: edersg: tradução +msgid "Redirect target" +msgstr "Redirecionar alvo" + +msgid "Safety" +msgstr "Segurança" + +msgid "Save" +msgstr "Salvar" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "As regras do Slapsh estão integradas a esta zona do firewall" + +msgid "Splashtext" +msgstr "Texto do termo de uso" + +# 20140621: edersg: tradução +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" +"Uma rede como a Internet não é criptografada e aberta. Cada usuário é " +"responsável pela segurança de suas próprias conexões e dispositivos." + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" +"A rede sem fio aberta e livre dos voluntários (\"Operadores\") provê o " +"equipamento necessário e conexão com a Internet (\"Infraestrutura\") do seu " +"próprio bolso." + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" +"O operador não se responsabiliza por perda de dados, acesso não autorizado " +"ou dano aos dispositivos, ou perdas financeiras que os participantes possam " +"sofrer pelo o uso da rede." + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" +"O participante concorda que não realizará nenhuma atividade e se absterá de " +"atos que possam violar a lei ou infringir os direitos de terceiros." + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" +"O participante concorda em não transferir conteúdo pela rede que viole a lei." + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" +"O participante concorda em não usar a rede de qualquer maneira que possa " +"prejudicar a infraestrutura, a própria rede, seus operadores ou outros " +"participantes." + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" +"Estes \"Termos de Uso\" regem o uso da rede por equipamentos dos " +"participantes em uso desta rede." + +msgid "Time remaining" +msgstr "Tempo restante" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" +"Para perguntar por qual razão você foi bloqueado ou para solicitar novamente " +"seu acesso, você pode tentar contatar o dono deste ponto de acesso:" + +msgid "Traffic in/out" +msgstr "Tráfego de entrada/saída" + +msgid "Upload limit" +msgstr "Limite de subida" + +msgid "Usage Agreement" +msgstr "Acordo de Uso" + +msgid "Welcome" +msgstr "Bem-vindo" + +msgid "Whitelist" +msgstr "Lista branca" + +msgid "You are now connected to the free wireless mesh network" +msgstr "Você está agora conectado à rede livre em malha sem fio" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" +"Vocẽ pode entrar aqui com seu próprio texto que será mostrado para os " +"clientes.
É possível usar os seguintes marcadores: ###COMMUNITY###, " +"###COMMUNITY_URL###, ###CONTACTURL###, ###LEASETIME###, ###LIMIT### and " +"###ACCEPT###." + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" +"Seu acesso para esta rede foi bloqueado, provavelmente porque você fez algo " +"que as regras explicitamente proibiam." + +msgid "Your bandwidth is limited to" +msgstr "Sua banda está limitada à" + +msgid "blacklisted" +msgstr "na lista negra" + +msgid "expired" +msgstr "expirado" + +msgid "optional when using host addresses" +msgstr "opcional quando é usado o endereço do equipamento" + +msgid "perform any kind of illegal activities" +msgstr "realizar qualquer tipo de atividades ilegais" + +msgid "splashed" +msgstr "termo mostrado" + +msgid "temporarily blocked" +msgstr "bloqueado temporariamente" + +msgid "unknown" +msgstr "desconhecido" + +msgid "use filesharing applications on this network" +msgstr "usar aplicativos de compartilhamento de arquivos nesta rede" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "usar banda com fluxos ou arquivos baixados não necessários" + +msgid "whitelisted" +msgstr "na lista branca" + +#~ msgid "" +#~ "Hosts and Networks that are listed here are excluded from splashing, i.e. " +#~ "they are always allowed." +#~ msgstr "" +#~ "Equipamentos ou Redes listadas aqui estarão excluídas do termo de uso. Eles " +#~ "estarão sempre autorizados." + +#~ msgid "By accepting these rules you can use this network for" +#~ msgstr "Aceitando estas regras, você pode usar esta rede para" + +#~ msgid "Edit Splash text" +#~ msgstr "Editar texto do termo de uso" + +#~ msgid "hour(s). After this time you need to accept these rules again." +#~ msgstr "" +#~ "horas(s). Depois deste tempo, você terá que aceitar as regras novamente." + +#~ msgid "the owner of this access point." +#~ msgstr "o dono deste ponto de acesso." + +#~ msgid "" +#~ "You can change the text that is displayed to clients here.
It is " +#~ "possible to use the following markers: ###COMMUNITY###, " +#~ "###COMMUNITY_URL###, ###LEASETIME### and ###ACCEPT###.
Click here to " +#~ "test the splash page after you saved it." +#~ msgstr "" +#~ "Aqui você pode mudar o texto do termo de uso que é mostrado aos clientes." +#~ "
É possível usar as seguintes marcações: ###COMMUNITY###, " +#~ "###COMMUNITY_URL###, ###LEASETIME### e ###ACCEPT###.
Clique aqui " +#~ "para testar a página de termo de uso depois " +#~ "que você salvá-la." diff --git a/feeds/luci/applications/luci-app-splash/po/pt/splash.po b/feeds/luci/applications/luci-app-splash/po/pt/splash.po new file mode 100644 index 0000000..05bee4f --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/pt/splash.po @@ -0,0 +1,309 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-05-31 22:29+0200\n" +"PO-Revision-Date: 2013-06-03 12:17+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Accept" +msgstr "Aceitar" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "Clientes Activos" + +msgid "Allowed hosts/subnets" +msgstr "Hosts/Subnets permitidos" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "Bloqueado" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "Aceitando estas regras só pode usar esta regra para" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "A velocidade de upload está limitado a (kbyte/s)" + +msgid "Contact" +msgstr "Contacto" + +msgid "Decline" +msgstr "Declinar" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "Doe algum dinheiro para nos ajudar a manter este projeto vivo." + +msgid "Download limit" +msgstr "Limite de Download" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "Zona de Firewall" + +msgid "General" +msgstr "Geral" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "Nome de Host" + +msgid "IP Address" +msgstr "Endereço IP" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" +"Se tem o seu próprio equipamento de rede wireless, use canais diferentes dos " +"nossos." + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "Endereço MAC" + +msgid "MAC addresses in this list are blocked." +msgstr "Endereços MAC nesta lista estão bloqueados." + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "Mascara de Rede" + +msgid "Network" +msgstr "Rede" + +msgid "No clients connected" +msgstr "Não há clientes ligados" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "Gravar" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "Limite de Upload" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "Bem-vindo" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "A largura de banda está limitada a" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "desconhecido" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/ro/splash.po b/feeds/luci/applications/luci-app-splash/po/ro/splash.po new file mode 100644 index 0000000..615be16 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/ro/splash.po @@ -0,0 +1,292 @@ +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/ru/splash.po b/feeds/luci/applications/luci-app-splash/po/ru/splash.po new file mode 100644 index 0000000..3f470db --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/ru/splash.po @@ -0,0 +1,362 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: splash\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-01-26 15:10+0200\n" +"PO-Revision-Date: 2013-11-13 18:52+0200\n" +"Last-Translator: Роман \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Accept" +msgstr "Принять" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" +"Доступ к интернету возможен благодаря некоторым активистам данного проекта, " +"которые делают общедоступным своё личное подключение к интернету. Эти " +"немногие подключения разделяются среди всех пользователей. Это означает, что " +"доступная пропускная способность ограничена и поэтому мы просим вас не " +"делать следующего:" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "Активные клиенты" + +msgid "Allowed hosts/subnets" +msgstr "Разрешённые хосты/подсети" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" +"Ограничение полосы для клиентов активируется только при указанных лимитах " +"нисходящего и восходящего каналов. Значение 0 полностью отключает " +"ограничение. Клиенты из \"белого\" списка не имеют ограничений." + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" +"Станьте активным участником данного сообщества и окажите содействие, " +"запустив свой узел сети" + +msgid "Blacklist" +msgstr "Чёрный список" + +msgid "Blocked" +msgstr "Заблокирован" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "Разрешённое время" + +msgid "Client-Splash" +msgstr "Client-Splash" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" +"Client-Splash - это система аутентификации точек доступа для беспроводных " +"ячеистых сетей." + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" +"Скорость нисходящего канала для клиентов ограничена этим значением (КБ/c)" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" +"Клиенты, принявшие приглашение splash-экрана, могут использовать сеть данное " +"количество часов." + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" +"Скорость восходящего канала для клиентов ограничена этим значением (КБ/c)" + +msgid "Contact" +msgstr "Связаться" + +msgid "Decline" +msgstr "Отклонить" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "Пожертвовать деньги на поддержку этого проекта." + +msgid "Download limit" +msgstr "Лимит загрузки" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "Политика добровольного использования" + +msgid "Firewall zone" +msgstr "Зона межсетевого экрана" + +msgid "General" +msgstr "Общие" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "Имя хоста" + +msgid "IP Address" +msgstr "IP-адрес" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" +"Если вы используете собственное оборудование Wi-Fi, используйте каналы, " +"отличающиеся от наших." + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "Если вы используете эту сеть регулярно, мы просим вашей поддержки:" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "Перехватывать клиентский трафик на этом интерфейсе" + +msgid "Interfaces" +msgstr "Интерфейсы" + +msgid "Interfaces that are used for Splash." +msgstr "Интерфейсы, используемые для Splash." + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" +"КБ/с (загрузка/отдача). Данное ограничение может быть снято при активном " +"участии в этом проекте." + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "Юридически запрещенный контент" + +msgid "MAC Address" +msgstr "MAC-адрес" + +msgid "MAC addresses in this list are blocked." +msgstr "MAC-адреса из этого списка заблокированы." + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" +"MAC-адреса клиентов из \"белого\" списка. Данные клиенты не имеют " +"ограничений пропускной способности." + +msgid "Netmask" +msgstr "Маска сети" + +msgid "Network" +msgstr "Сеть" + +msgid "No clients connected" +msgstr "Клиенты не подключены" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" +"Пожалуйста, обратите внимание, что мы не интернет-провайдер, а " +"экспериментальная сеть сообщества." + +msgid "Policy" +msgstr "Политика" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "Безопасный" + +msgid "Save" +msgstr "Сохранить" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "Правила Splash интегрированы в зону этого межсетевого экрана" + +msgid "Splashtext" +msgstr "Текст splash-экрана" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "Оставшееся время" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" +"Чтобы узнать причину, по которой вас заблокировали, или снова получить " +"доступ, свяжитесь с владельцем данной точки доступа:" + +msgid "Traffic in/out" +msgstr "Трафик вх/исх" + +msgid "Upload limit" +msgstr "Лимит отдачи" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "Добро пожаловать" + +msgid "Whitelist" +msgstr "\"Белый\" список" + +msgid "You are now connected to the free wireless mesh network" +msgstr "Теперь вы подключены к бесплатной беспроводной ячеистой сети" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" +"Здесь вы можете указать свой текст, который будет отображаться клиентам.
Возможно использовать следующие маркеры: ###COMMUNITY###, " +"###COMMUNITY_URL###, ###CONTACTURL###, ###LEASETIME###, ###LIMIT### and " +"###ACCEPT###." + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" +"Доступ к этой сети был заблокирован, скорее всего, потому, что вы сделали " +"что-то, что наши правила явно запрещают." + +msgid "Your bandwidth is limited to" +msgstr "Ваша полоса пропускания ограничена значением" + +msgid "blacklisted" +msgstr "в \"чёрном\" списке" + +msgid "expired" +msgstr "истёк" + +msgid "optional when using host addresses" +msgstr "опционально при использовании хост-адресов" + +msgid "perform any kind of illegal activities" +msgstr "выполнять любые незаконные действия" + +msgid "splashed" +msgstr "уже в splash" + +msgid "temporarily blocked" +msgstr "временно заблокирован" + +msgid "unknown" +msgstr "неизвестный" + +msgid "use filesharing applications on this network" +msgstr "использование файлообменных приложений в этой сети" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "тратить пропускную способность на ненужные загрузки или потоки" + +msgid "whitelisted" +msgstr "в \"белом\" списке" + +#~ msgid "" +#~ "Hosts and Networks that are listed here are excluded from splashing, i.e. " +#~ "they are always allowed." +#~ msgstr "" +#~ "Перечисленные хосты и сети не получают приглашения splash-экрана, т.е. они " +#~ "всегда разрешены." + +#~ msgid "By accepting these rules you can use this network for" +#~ msgstr "Принимая эти правила, вы можете использовать данную сеть для" + +#~ msgid "Edit Splash text" +#~ msgstr "Редактировать текст splash-экрана" + +#~ msgid "hour(s). After this time you need to accept these rules again." +#~ msgstr "" +#~ "час(ы). После указанного времени Вы должны вновь принять эти правила." + +# Здесь наверняка нужно склонить в другом падеже, надо смотреть по контексту +#~ msgid "the owner of this access point." +#~ msgstr "с владельцем этой точки доступа." diff --git a/feeds/luci/applications/luci-app-splash/po/sk/splash.po b/feeds/luci/applications/luci-app-splash/po/sk/splash.po new file mode 100644 index 0000000..e9dd448 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/sk/splash.po @@ -0,0 +1,303 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/sv/splash.po b/feeds/luci/applications/luci-app-splash/po/sv/splash.po new file mode 100644 index 0000000..055c67b --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/sv/splash.po @@ -0,0 +1,318 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Accept" +msgstr "Acceptera" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "Aktiva klienter" + +msgid "Allowed hosts/subnets" +msgstr "Tillåtna värdar/subnät" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "Svartlista" + +msgid "Blocked" +msgstr "Blockerad" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" +"Klienternas nerladdningshastighet är begränsad till det här värdet (kbyte/s)" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" +"Klienternas uppladdningshastighet är begränsad till det här värdet (kbyte/s)" + +msgid "Contact" +msgstr "Kontakt" + +msgid "Decline" +msgstr "Neka" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" +"Donera lite pengar för att hjälpa oss att hålla det här projektet vid liv." + +msgid "Download limit" +msgstr "Begränsning av nerladdning" + +msgid "Edit the complete splash text" +msgstr "Redigera den slutgiltiga splash-texten" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "Brandväggszon" + +msgid "General" +msgstr "Generell" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "Värdnamn" + +msgid "IP Address" +msgstr "IP-adress" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" +"Om du använder det här nätverket med jämna mellanrum så ber vi dig om hjälp:" + +msgid "Include your own text in the default splash" +msgstr "Inkludera din egna text i standard-splash" + +msgid "Intercept client traffic on this Interface" +msgstr "Fånga upp klientens trafik i det här Gränssnittet" + +msgid "Interfaces" +msgstr "Gränssnitt" + +msgid "Interfaces that are used for Splash." +msgstr "Gränssnitten som används för Splash." + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" +"KB/s (Nerladdning/Uppladdning). Du kan ha möjlighet att ta bort den här " +"begränsningen genom att aktivt bidra till det här projektet." + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "MAC-adress" + +msgid "MAC addresses in this list are blocked." +msgstr "MAC-adresser i den här listan blir blockerade." + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" +"MAC-adresser till vitlistade klienter. De här behöver inte acceptera splash " +"och har ingen bandbreddsbegränsning." + +msgid "Netmask" +msgstr "Nätmask" + +msgid "Network" +msgstr "Nätverk" + +msgid "No clients connected" +msgstr "Inga klienter anslutna" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" +"Vänligen lägg märke till att vi är inte en internet-leverantör utan ett " +"experimentiellt nätverk för gemenskap" + +msgid "Policy" +msgstr "Villkor" + +msgid "Redirect target" +msgstr "Omdirigera mål" + +msgid "Safety" +msgstr "Säkerhet" + +msgid "Save" +msgstr "Spara" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "Splash-regler är integrerade i den här brandväggszonen" + +msgid "Splashtext" +msgstr "Splash-text" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" +"Precis som internet så är det här nätverket utan kryptering och öppet. Varje " +"deltagare är ansvarig för säkerheten i deras egna anslutningar och enheter." + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "Återstående tid" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "In/ut-trafik" + +msgid "Upload limit" +msgstr "Gräns för uppladdningar" + +msgid "Usage Agreement" +msgstr "Användningsavtal" + +msgid "Welcome" +msgstr "Välkommen" + +msgid "Whitelist" +msgstr "Vitlista" + +msgid "You are now connected to the free wireless mesh network" +msgstr "Du är nu ansluten till det fria trådlösa mesh-nätverket" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" +"Du kan fylla i din egen text som visas här för klienterna.
/>Det är " +"möjligt att använda följande markörer: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### och ###ACCEPT###." + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "Din bandbredd är begränsas till" + +msgid "blacklisted" +msgstr "svartlistad" + +msgid "expired" +msgstr "slutade gälla" + +msgid "optional when using host addresses" +msgstr "valfritt vid användning av värdadresser" + +msgid "perform any kind of illegal activities" +msgstr "utför några slags olagliga aktiviteter" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "tillfälligt blockerad" + +msgid "unknown" +msgstr "okänd" + +msgid "use filesharing applications on this network" +msgstr "använd fildelningsapplikationer i det här nätverket" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "slösa bandbredd med onödiga nerladdningar eller strömmar" + +msgid "whitelisted" +msgstr "vitlistad" diff --git a/feeds/luci/applications/luci-app-splash/po/templates/splash.pot b/feeds/luci/applications/luci-app-splash/po/templates/splash.pot new file mode 100644 index 0000000..f29b736 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/templates/splash.pot @@ -0,0 +1,295 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/tr/splash.po b/feeds/luci/applications/luci-app-splash/po/tr/splash.po new file mode 100644 index 0000000..03fa7b3 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/tr/splash.po @@ -0,0 +1,303 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/uk/splash.po b/feeds/luci/applications/luci-app-splash/po/uk/splash.po new file mode 100644 index 0000000..2364c63 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/uk/splash.po @@ -0,0 +1,304 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/vi/splash.po b/feeds/luci/applications/luci-app-splash/po/vi/splash.po new file mode 100644 index 0000000..615be16 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/vi/splash.po @@ -0,0 +1,292 @@ +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/po/zh-cn/splash.po b/feeds/luci/applications/luci-app-splash/po/zh-cn/splash.po new file mode 100644 index 0000000..439b774 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/zh-cn/splash.po @@ -0,0 +1,321 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-06-28 08:58+0200\n" +"PO-Revision-Date: 2014-07-23 02:07+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: LANGUAGE \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Accept" +msgstr "接收" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "活动的客户端" + +msgid "Allowed hosts/subnets" +msgstr "允许的 主机/掩码" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" +"只有当 上传和下载的限制都设置的时候对客户端的带宽限制才会生效。在这里使用0 可" +"以完全禁用此限制。白名单客户端不受限制。" + +# Something wwrong? +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "成为这个社区的一个活跃成员并且运营你自己的节点以帮助别人。" + +msgid "Blacklist" +msgstr "黑名单" + +msgid "Blocked" +msgstr "锁定" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "清理时间" + +msgid "Client-Splash" +msgstr "客户端弹窗" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "Client-Splash是无线MESH网络的一个热点认证系统" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "客户端下载速度限制为此值(kbyte/s)" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "已接受Splash的客户端允许使用这个网络N小时" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "客户端上传速度限制为此值(kbyte/s)" + +msgid "Contact" +msgstr "联系" + +msgid "Decline" +msgstr "下降" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "捐助我们一些钱以帮助我们维护这个项目。" + +msgid "Download limit" +msgstr "下载限制" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "防火墙区域" + +msgid "General" +msgstr "概述" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "主机名" + +msgid "IP Address" +msgstr "IP地址" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "如果你操作你自有的wifi设备,使用与我们不同的频道" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "如果你经常使用这个网络,我们需要你的支持" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "在这个接口上拦截客户端通信流量" + +msgid "Interfaces" +msgstr "接口" + +msgid "Interfaces that are used for Splash." +msgstr "Splash使用的接口" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "法律禁止行为" + +msgid "Legally Prohibited content" +msgstr "法律禁止内容" + +msgid "MAC Address" +msgstr "MAC地址" + +msgid "MAC addresses in this list are blocked." +msgstr "在本列表中的MAC地址将被阻挡" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "白名单中的MAC地址,可不用接受splash,同时没有带宽限制。" + +msgid "Netmask" +msgstr "网络掩码" + +msgid "Network" +msgstr "网络" + +msgid "No clients connected" +msgstr "无客户端连接" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "我们不是ISP(互联网运行商),仅仅只是一个实验性的社区网络。" + +msgid "Policy" +msgstr "策略" + +msgid "Redirect target" +msgstr "重定向目标" + +msgid "Safety" +msgstr "安全" + +msgid "Save" +msgstr "保存" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "流量 入/出" + +msgid "Upload limit" +msgstr "上传限制" + +msgid "Usage Agreement" +msgstr "使用协议" + +msgid "Welcome" +msgstr "欢迎" + +msgid "Whitelist" +msgstr "白名单" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "你的带宽限制为" + +msgid "blacklisted" +msgstr "黑名单" + +msgid "expired" +msgstr "过期" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" + +#~ msgid "" +#~ "Hosts and Networks that are listed here are excluded from splashing, i.e. " +#~ "they are always allowed." +#~ msgstr "列在这里的主机和网络都排除在Splashing之外,例如:一直被允许访问。" + +#~ msgid "By accepting these rules you can use this network for" +#~ msgstr "接受这些条款以便使用这个网络" + +#~ msgid "Edit Splash text" +#~ msgstr "编辑Splash文本" diff --git a/feeds/luci/applications/luci-app-splash/po/zh-tw/splash.po b/feeds/luci/applications/luci-app-splash/po/zh-tw/splash.po new file mode 100644 index 0000000..1125abf --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/po/zh-tw/splash.po @@ -0,0 +1,302 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Accept" +msgstr "" + +msgid "" +"Access to the internet might be possible nevertheless, because some " +"activists of this project share their private internet connections. These " +"few connections are shared between all users. That means available bandwidth " +"is limited and because of this we ask you not to do any of the following:" +msgstr "" + +msgid "" +"Access to the network is not guaranteed. It can be interrupted at any time " +"without notice for any reason, for certain devices, and/or may be blocked " +"for certain users." +msgstr "" + +msgid "Active Clients" +msgstr "" + +msgid "Allowed hosts/subnets" +msgstr "" + +msgid "" +"As an alternative to editing the complete splash text you can also just " +"include some custom text in the default splash page by entering it here." +msgstr "" + +msgid "" +"Bandwidth limit for clients is only activated when both up- and download " +"limit are set. Use a value of 0 here to completely disable this limitation. " +"Whitelisted clients are not limited." +msgstr "" + +msgid "" +"Become an active member of this community and help by operating your own node" +msgstr "" + +msgid "Blacklist" +msgstr "" + +msgid "Blocked" +msgstr "" + +msgid "" +"By accepting these rules you can use this network for %s hour(s). After this " +"time you need to accept these rules again." +msgstr "" + +msgid "Clearance time" +msgstr "" + +msgid "Client-Splash" +msgstr "" + +msgid "" +"Client-Splash is a hotspot authentification system for wireless mesh " +"networks." +msgstr "" + +msgid "" +"Clients are redirected to this page after they have accepted the splash. If " +"this is left empty they are redirected to the page they had requested." +msgstr "" + +msgid "Clients download speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "" +"Clients that have accepted the splash are allowed to use the network for " +"that many hours." +msgstr "" + +msgid "Clients upload speed is limited to this value (kbyte/s)" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Decline" +msgstr "" + +msgid "" +"Destination hosts and networks that are excluded from splashing, i.e. they " +"are always allowed." +msgstr "" + +msgid "Donate some money to help us keep this project alive." +msgstr "" + +msgid "Download limit" +msgstr "" + +msgid "Edit the complete splash text" +msgstr "" + +msgid "Fair Use Policy" +msgstr "" + +msgid "Firewall zone" +msgstr "" + +msgid "General" +msgstr "" + +msgid "Get in %s with the operator of this access point." +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "" +"If you operate your own wifi equipment use channels different from ours." +msgstr "" + +msgid "If you use this network on a regular basis we ask for your support:" +msgstr "" + +msgid "Include your own text in the default splash" +msgstr "" + +msgid "Intercept client traffic on this Interface" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interfaces that are used for Splash." +msgstr "" + +msgid "" +"KB/s (Download/Upload). You may be able to remove this limit by actively " +"contributing to this project." +msgstr "" + +msgid "Legally Prohibited Activities" +msgstr "" + +msgid "Legally Prohibited content" +msgstr "" + +msgid "MAC Address" +msgstr "" + +msgid "MAC addresses in this list are blocked." +msgstr "" + +msgid "" +"MAC addresses of whitelisted clients. These do not need to accept the splash " +"and are not bandwidth limited." +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "No clients connected" +msgstr "" + +msgid "" +"Please note that we are not an internet service provider but an experimental " +"community network." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Redirect target" +msgstr "" + +msgid "Safety" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Splash rules are integrated in this firewall zone" +msgstr "" + +msgid "Splashtext" +msgstr "" + +msgid "" +"The network, like the Internet, is unencrypted and open. Each participant is " +"responsible for the safety of their own connections and devices." +msgstr "" + +msgid "" +"The open and free wireless network of volunteers (\"Operators\") provides " +"the necessary equipment and Internet connections (\"Infrastructure\") at " +"their own expense." +msgstr "" + +msgid "" +"The operator claims no liability for loss of data, unauthorized access/" +"damage to devices, or financial losses that participants may suffer from the " +"use of the network." +msgstr "" + +msgid "" +"The participant agrees to not perform any action and refrain from acts which " +"may violate the law or infringe upon the rights of third parties." +msgstr "" + +msgid "" +"The participant agrees to not transfer content over the network which " +"violates the law." +msgstr "" + +msgid "" +"The participant agrees to not use the network in any way which will harm the " +"infrastructure, the network itself, its operators or other participants." +msgstr "" + +msgid "" +"These Terms of Use govern the use of the network by its participants' " +"computer, PDA, or similar device (\"Devices\") within the network." +msgstr "" + +msgid "Time remaining" +msgstr "" + +msgid "" +"To ask for the reason why you have been blocked or ask for access again you " +"can try to contact the owner of this access point:" +msgstr "" + +msgid "Traffic in/out" +msgstr "" + +msgid "Upload limit" +msgstr "" + +msgid "Usage Agreement" +msgstr "" + +msgid "Welcome" +msgstr "" + +msgid "Whitelist" +msgstr "" + +msgid "You are now connected to the free wireless mesh network" +msgstr "" + +msgid "" +"You can enter your own text that is displayed to clients here.
It is " +"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, " +"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###." +msgstr "" + +msgid "" +"Your access to this network has been blocked, most likely because you did " +"something that our rules explicitly forbid." +msgstr "" + +msgid "Your bandwidth is limited to" +msgstr "" + +msgid "blacklisted" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "optional when using host addresses" +msgstr "" + +msgid "perform any kind of illegal activities" +msgstr "" + +msgid "splashed" +msgstr "" + +msgid "temporarily blocked" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "use filesharing applications on this network" +msgstr "" + +msgid "waste bandwidth with unneccesary downloads or streams" +msgstr "" + +msgid "whitelisted" +msgstr "" diff --git a/feeds/luci/applications/luci-app-splash/root/etc/config/luci_splash b/feeds/luci/applications/luci-app-splash/root/etc/config/luci_splash new file mode 100644 index 0000000..c4cfef5 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/root/etc/config/luci_splash @@ -0,0 +1,2 @@ +config core general + option leasetime 1 \ No newline at end of file diff --git a/feeds/luci/applications/luci-app-splash/root/etc/config/luci_splash_leases b/feeds/luci/applications/luci-app-splash/root/etc/config/luci_splash_leases new file mode 100644 index 0000000..6afdd90 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/root/etc/config/luci_splash_leases @@ -0,0 +1 @@ +# This file should always stay empty and is just needed to be able to use this config in /var/state! diff --git a/feeds/luci/applications/luci-app-splash/root/etc/hotplug.d/iface/25-splash b/feeds/luci/applications/luci-app-splash/root/etc/hotplug.d/iface/25-splash new file mode 100644 index 0000000..045e908 --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/root/etc/hotplug.d/iface/25-splash @@ -0,0 +1,17 @@ +#!/bin/sh + +[ "$ACTION" = ifup ] || exit 0 + +/etc/init.d/firewall enabled || exit 0 + +if [ -x /etc/init.d/luci_splash ]; then + restart_splash() { + local net="$1" + if [ "$INTERFACE" = "$net" ]; then + logger -t splash "Reloading splash firewall rules due to ifup of $INTERFACE ($DEVICE)" + /etc/init.d/luci_splash restart + fi + } + config_load luci_splash + config_foreach restart_splash iface +fi diff --git a/feeds/luci/applications/luci-app-splash/root/etc/init.d/luci_splash b/feeds/luci/applications/luci-app-splash/root/etc/init.d/luci_splash new file mode 100755 index 0000000..feefabd --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/root/etc/init.d/luci_splash @@ -0,0 +1,362 @@ +#!/bin/sh /etc/rc.common + +START=70 +EXTRA_COMMANDS=clear_leases +LIMIT_DOWN=0 +LIMIT_DOWN_BURST=0 +LIMIT_UP=0 +TC=/usr/sbin/tc +IPT=/usr/sbin/iptables +IPT6=/usr/sbin/ip6tables + +IPT_REPLAY=/var/run/luci_splash.iptlog +LOCK=/var/run/luci_splash.lock +[ -x $IPT6 ] && [ -f /proc/net/ipv6_route ] && HAS_IPV6=1 + +silent() { + "$@" 2>/dev/null +} + +ipt_log() { + $IPT -I "$@" + echo $IPT -D "$@" >> $IPT_REPLAY +} + +ipt6_log() { + [ "$HAS_IPV6" = 1 ] || return + $IPT6 -I "$@" + echo $IPT6 -D "$@" >> $IPT_REPLAY +} + + +iface_add() { + local cfg="$1" + + config_get zone "$cfg" zone + [ -n "$zone" ] || return 0 + + config_get net "$cfg" network + [ -n "$net" ] || return 0 + + config_get ifname "$net" ifname + [ -n "$ifname" ] || return 0 + + config_get ipaddr "$net" ipaddr + [ -n "$ipaddr" ] || return 0 + + config_get netmask "$net" netmask + [ -n "$netmask" ] || return 0 + + config_get ip6addr "$net" ip6addr + + config_get type "$net" type + + parentiface="$(uci -q get network.${net}.ifname)" + + [ -n "$parentiface" ] && [ ! "$type" = "bridge" ] && { + parentiface=${parentiface#@} + config_get parentproto "$parentiface" proto + config_get parentipaddr "$parentiface" ipaddr + config_get parentnetmask "$parentiface" netmask + } + + eval "$(ipcalc.sh $ipaddr $netmask)" + + logger -s -p info -t splash "Add $NETWORK/$PREFIX ($ifname) to splashed networks." + + ### Add interface specific chain entry rules + ipt_log "prerouting_${zone}_rule" -i "${ifname%:*}" -s "$NETWORK/$PREFIX" -j luci_splash_prerouting -t nat + ipt_log "forwarding_${zone}_rule" -i "${ifname%:*}" -s "$NETWORK/$PREFIX" -j luci_splash_forwarding -t filter + + if [ "$HAS_IPV6" = 1 ] && [ -n "$ip6addr" ]; then + ipt6_log "forwarding_${zone}_rule" -i "${ifname%:*}" -s "$ip6addr" -j luci_splash_forwarding -t filter + fi + + ### Allow traffic to the same subnet + $IPT -t nat -I luci_splash_prerouting -d "$ipaddr/${netmask:-32}" -j RETURN + $IPT -t filter -I luci_splash_forwarding -d "$ipaddr/${netmask:-32}" -j RETURN + + ### Allow traffic to the mesh subnet + [ "$parentproto" = "static" -a -n "$parentipaddr" ] && { + $IPT -t nat -I luci_splash_prerouting -d "$parentipaddr/${parentnetmask:-32}" -j RETURN + $IPT -t filter -I luci_splash_forwarding -d "$parentipaddr/${parentnetmask:-32}" -j RETURN + } + + qos_iface_add "$ifname" "$NETWORK" "$PREFIX" +} + +iface_del() { + config_get zone "$1" zone + [ -n "$zone" ] || return 0 + + config_get net "$1" network + [ -n "$net" ] || return 0 + + config_get ifname "$net" ifname + [ -n "$ifname" ] || return 0 + + # Clear interface specific rules + [ -s $IPT_REPLAY ] && { + logger -s -p info -t splash "Remove $ifname from splashed networks." + grep -- "-i ${ifname%:*}" $IPT_REPLAY | while read ln; do silent $ln; done + sed -ie "/-i ${ifname%:*}/d" $IPT_REPLAY + } + + qos_iface_del "$ifname" +} + +mac_add() { + config_get mac "$1" mac + append MACS "$mac" +} + +whitelist_add() { + config_get mac "$1" mac + iface=$2 + $TC filter add dev "$iface" parent ffff: protocol ip prio 1 u32 match ether src $mac police pass + $TC filter add dev "$iface" parent 1:0 protocol ip prio 1 u32 match ether dst $mac classid 1:1 +} + + +subnet_add() { + local cfg="$1" + + config_get ipaddr "$cfg" ipaddr + config_get netmask "$cfg" netmask + + [ -n "$ipaddr" ] && { + $IPT -t nat -I luci_splash_prerouting -d "$ipaddr/${netmask:-32}" -j RETURN + $IPT -t filter -I luci_splash_forwarding -d "$ipaddr/${netmask:-32}" -j RETURN + } +} + +qos_iface_add() { + local iface="$1" + local network="$2" + local prefix="$3" + + # 77 -> download root qdisc + # ffff -> upload root qdisc + + silent $TC qdisc del dev "$iface" root handle 1: + silent $TC class del dev "$iface" parent 1: classid 1:ffff + silent $TC class del dev "$iface" parent 1: classid 1:1 + silent $TC filter del dev "$iface" parent ffff: protocol ip prio 1 u32 + silent $TC filter del dev "$iface" parent ffff: protocol ip prio 2 u32 + silent $TC filter del dev "$iface" parent ffff: protocol ip prio 3 u32 + + if [ "$LIMIT_UP" -gt 0 -a "$LIMIT_DOWN" -gt 0 ]; then + # Setup qdiscs + $TC qdisc add dev "$iface" root handle 1: htb default 1 + silent $TC qdisc add dev "$iface" ingress + + # Default class - all clients which are not otherwise handled are put in that class + # and share that bandwidth. + $TC class add dev "$iface" parent 1: classid 1:ffff htb rate ${LIMIT_DOWN}kbit + + # default class and class for whitelisted clients = unlimited + $TC class add dev "$iface" parent 1: classid 1:1 htb rate 100mbit + + # All traffic to the dhcp subnet is put into the limited class + $TC filter add dev "$iface" parent 1:0 protocol ip prio 3 u32 match ip dst $network/$prefix classid 1:ffff + $TC qdisc add dev "$iface" parent 1:ffff sfq perturb 10 + $TC filter add dev "$iface" parent ffff: protocol ip prio 3 u32 match ip src $network/$prefix police rate ${LIMIT_UP}kbit mtu 6k burst 6k drop + + # classify packets by their iptables MARK set in luci_splash_mark_in (mangle table) + # every client gets his own class and so his own bandwidth limit + $TC filter add dev "$iface" parent 1:0 protocol ip prio 2 fw + + config_foreach whitelist_add whitelist $iface + fi +} + +qos_iface_del() { + local iface="$1" + silent $TC qdisc del dev "$iface" root handle 77: +} + +boot() { + ### Setup splash-relay + uci get uhttpd.splash 2>/dev/null || { +uci batch < $IPT_REPLAY + + ### Add interface independant prerouting rules + $IPT -t nat -A luci_splash_prerouting -j luci_splash_leases + $IPT -t nat -A luci_splash_leases -p udp --dport 53 -j REDIRECT --to-ports 53 + $IPT -t nat -A luci_splash_leases -p tcp --dport 80 -j REDIRECT --to-ports 8082 + + ### Add interface independant forwarding rules + $IPT -t filter -A luci_splash_forwarding -j luci_splash_filter + $IPT -t filter -A luci_splash_filter -p tcp -j REJECT --reject-with tcp-reset + $IPT -t filter -A luci_splash_filter -j REJECT --reject-with icmp-net-prohibited + + if [ "$HAS_IPV6" = 1 ]; then + $IPT6 -t filter -A luci_splash_forwarding -j luci_splash_filter + $IPT6 -t filter -A luci_splash_filter -p tcp -j REJECT --reject-with tcp-reset + $IPT6 -t filter -A luci_splash_filter -j REJECT --reject-with adm-prohibited + fi + + ### Add QoS chain + $IPT -t mangle -N luci_splash_mark_out + $IPT -t mangle -N luci_splash_mark_in + $IPT -t mangle -I PREROUTING -j luci_splash_mark_out + $IPT -t mangle -I POSTROUTING -j luci_splash_mark_in + + if [ "$HAS_IPV6" = 1 ]; then + $IPT6 -t mangle -N luci_splash_mark_out + $IPT6 -t mangle -N luci_splash_mark_in + $IPT6 -t mangle -I PREROUTING -j luci_splash_mark_out + $IPT6 -t mangle -I POSTROUTING -j luci_splash_mark_in + fi + + ### Build the main and portal rule + config_foreach iface_add iface + config_foreach subnet_add subnet + + ### Add the community homepage to the list of allowed destination subnets + hp=$(uci -q get freifunk.community.homepage) && { + chp=${hp#http*://} + chp=${chp%%/*} + $IPT -t nat -I luci_splash_prerouting -d "${chp}/32" -j RETURN + $IPT -t filter -I luci_splash_forwarding -d "${chp}/32" -j RETURN + } + + ### Find active mac addresses + MACS="" + + + config_foreach mac_add blacklist + config_foreach mac_add whitelist + + config_load luci_splash_leases + config_foreach mac_add lease + + ### Add crontab entry + test -f /etc/crontabs/root || touch /etc/crontabs/root + grep -q luci-splash /etc/crontabs/root || { + echo '*/5 * * * * /usr/sbin/luci-splash sync' >> /etc/crontabs/root + } + + lock -u $LOCK + + ### Populate iptables + [ -n "$MACS" ] && luci-splash add-rules $MACS +} + +stop() { + lock $LOCK + + include /lib/network + scan_interfaces + config_load luci_splash + + ### Clear interface rules + config_foreach iface_del iface + + silent $IPT -t mangle -D PREROUTING -j luci_splash_mark_out + silent $IPT -t mangle -D POSTROUTING -j luci_splash_mark_in + + if [ "$HAS_IPV6" = 1 ]; then + silent $IPT6 -t mangle -D PREROUTING -j luci_splash_mark_out + silent $IPT6 -t mangle -D POSTROUTING -j luci_splash_mark_in + fi + + ### Clear subchains + silent $IPT -t nat -F luci_splash_prerouting + silent $IPT -t nat -F luci_splash_leases + silent $IPT -t filter -F luci_splash_forwarding + silent $IPT -t filter -F luci_splash_filter + silent $IPT -t mangle -F luci_splash_mark_out + silent $IPT -t mangle -F luci_splash_mark_in + + if [ "$HAS_IPV6" = 1 ]; then + $IPT6 -t filter -F luci_splash_forwarding + $IPT6 -t filter -F luci_splash_filter + $IPT6 -t mangle -F luci_splash_mark_out + $IPT6 -t mangle -F luci_splash_mark_in + fi + + ### Delete subchains + silent $IPT -t nat -X luci_splash_prerouting + silent $IPT -t nat -X luci_splash_leases + silent $IPT -t filter -X luci_splash_forwarding + silent $IPT -t filter -X luci_splash_filter + silent $IPT -t mangle -X luci_splash_mark_out + silent $IPT -t mangle -X luci_splash_mark_in + if [ "$HAS_IPV6" = 1 ]; then + $IPT6 -t filter -X luci_splash_forwarding + $IPT6 -t filter -X luci_splash_filter + $IPT6 -t mangle -X luci_splash_mark_out + $IPT6 -t mangle -X luci_splash_mark_in + fi + sed -ie '/\/usr\/sbin\/luci-splash sync/d' /var/spool/cron/crontabs/root + + lock -u $LOCK +} + +clear_leases() { + ### Find active mac addresses + MACS="" + config_foreach mac_add lease + + ### Clear leases + [ -n "$MACS" ] && luci-splash remove $MACS +} + diff --git a/feeds/luci/applications/luci-app-splash/root/usr/sbin/luci-splash b/feeds/luci/applications/luci-app-splash/root/usr/sbin/luci-splash new file mode 100755 index 0000000..2870dbe --- /dev/null +++ b/feeds/luci/applications/luci-app-splash/root/usr/sbin/luci-splash @@ -0,0 +1,753 @@ +#!/usr/bin/lua + +utl = require "luci.util" +sys = require "luci.sys" +ipc = require "luci.ip" + + +-- Init state session +local uci = require "luci.model.uci".cursor_state() +local ipt = require "luci.sys.iptparser".IptParser() +local fs = require "nixio.fs" +local ip = require "luci.ip" + +local debug = false + +local has_ipv6 = fs.access("/proc/net/ipv6_route") and fs.access("/usr/sbin/ip6tables") + +function exec(cmd) + -- executes a cmd and gets its output + if debug then + local ret = sys.exec(cmd) + print('+ ' .. cmd) + if ret and ret ~= "" then + print(ret) + end + else + local ret = sys.exec(cmd .. " &> /dev/null") + end +end + +function call(cmd) + -- just calls a command + if debug then + print('+ ' .. cmd) + end + os.execute(cmd) +end + + +function lock() + call("lock /var/run/luci_splash.lock") +end + +function unlock() + call("lock -u /var/run/luci_splash.lock") +end + +function get_id(ip) + local o3, o4 = ip:match("[0-9]+%.[0-9]+%.([0-9]+)%.([0-9]+)") + if o3 and 04 then + return string.format("%02X%s", tonumber(o3), "") .. string.format("%02X%s", tonumber(o4), "") + else + return false + end +end + +function update_stats(leased, whitelisted, whitelisttotal, blacklisted, blacklisttotal) + local leases = uci:get_all("luci_splash_leases", "stats") + uci:delete("luci_splash_leases", "stats") + uci:section("luci_splash_leases", "stats", "stats", { + leases = leased or (leases and leases.leases) or 0, + whitelisttotal = whitelisttotal or (leased and leases.whitelisttotal) or 0, + whitelistonline = whitelisted or (leases and leases.whitelistonline) or 0, + blacklisttotal = blacklisttotal or (leases and leases.blacklisttotal) or 0, + blacklistonline = blacklisted or (leases and leases.blacklistonline) or 0, + }) + uci:save("luci_splash_leases") +end + + +function get_device_for_ip(ipaddr) + local dev + uci:foreach("network", "interface", function(s) + if s.ipaddr and s.netmask then + local network = ip.IPv4(s.ipaddr, s.netmask) + if network:contains(ip.IPv4(ipaddr)) then + -- this should be rewritten to luci functions if possible + dev = utl.trim(sys.exec(". /lib/functions/network.sh; network_get_device IFNAME '" .. s['.name'] .. "'; echo $IFNAME")) + end + end + end) + return dev +end + +function get_physdev(interface) + local dev + dev = utl.trim(sys.exec(". /lib/functions/network.sh; network_get_device IFNAME '" .. interface .. "'; echo $IFNAME")) + return dev +end + + + +function get_filter_handle(parent, direction, device, mac) + local input = utl.split(sys.exec('/usr/sbin/tc filter show dev ' .. device .. ' parent ' .. parent) or {}) + local tbl = {} + local handle + for k, v in pairs(input) do + handle = v:match('filter protocol ip pref %d+ u32 fh (%d*:%d*:%d*) order') or v:match('filter protocol all pref %d+ u32 fh (%d*:%d*:%d*) order') + if handle then + local mac, mac1, mac2, mac3, mac4, mac5, mac6 + if direction == 'src' then + mac1, mac2, mac3, mac4 = input[k+1]:match('match ([%a%d][%a%d])([%a%d][%a%d])([%a%d][%a%d])([%a%d][%a%d])/ffffffff') + mac5, mac6 = input[k+2]:match('match ([%a%d][%a%d])([%a%d][%a%d])0000/ffff0000') + else + mac1, mac2 = input[k+1]:match('match 0000([%a%d][%a%d])([%a%d][%a%d])/0000ffff') + mac3, mac4, mac5, mac6 = input[k+2]:match('match ([%a%d][%a%d])([%a%d][%a%d])([%a%d][%a%d])([%a%d][%a%d])/ffffffff') + end + if mac1 and mac2 and mac3 and mac4 and mac5 and mac6 then + mac = "%s:%s:%s:%s:%s:%s" % { mac1, mac2, mac3, mac4, mac5, mac6 } + tbl[mac] = handle + end + end + end + if tbl[mac] then + handle = tbl[mac] + end + return handle +end + +function macvalid(mac) + if mac and mac:match( + "^[a-fA-F0-9][a-fA-F0-9]:[a-fA-F0-9][a-fA-F0-9]:" .. + "[a-fA-F0-9][a-fA-F0-9]:[a-fA-F0-9][a-fA-F0-9]:" .. + "[a-fA-F0-9][a-fA-F0-9]:[a-fA-F0-9][a-fA-F0-9]$" + ) then + return true + end + + return false +end + +function ipvalid(ipaddr) + if ipaddr then + return ip.IPv4(ipaddr) and true or false + end + + return false +end + +function mac_to_ip(mac) + local ipaddr = nil + ipc.neighbors({ family = 4 }, function(n) + if n.mac == mac and n.dest then + ipaddr = n.dest:string() + end + end) + return ipaddr +end + +function mac_to_dev(mac) + local dev = nil + ipc.neighbors({ family = 4 }, function(n) + if n.mac == mac and n.dev then + dev = n.dev + end + end) + return dev +end + +function ip_to_mac(ip) + local mac = nil + ipc.neighbors({ family = 4 }, function(n) + if n.mac and n.dest and n.dest:equal(ip) then + mac = n.mac + end + end) + return mac +end + +function main(argv) + local cmd = table.remove(argv, 1) + local arg = argv[1] + + limit_up = (tonumber(uci:get("luci_splash", "general", "limit_up")) or 0) * 8 + limit_down = (tonumber(uci:get("luci_splash", "general", "limit_down")) or 0) * 8 + + if ( cmd == "lease" or cmd == "add-rules" or cmd == "remove" or + cmd == "whitelist" or cmd == "blacklist" or cmd == "status" ) and #argv > 0 + then + if not (macvalid(arg) or ipvalid(arg)) then + print("Invalid argument. The second argument must " .. + "be a valid IPv4 or Mac Address.") + os.exit(1) + end + + lock() + + local leased_macs = get_known_macs("lease") + local blacklist_macs = get_known_macs("blacklist") + local whitelist_macs = get_known_macs("whitelist") + + for i, adr in ipairs(argv) do + local mac = nil + if adr:find(":") then + mac = adr:lower() + else + mac = ip_to_mac(adr) + end + + if mac and cmd == "add-rules" then + if leased_macs[mac] then + add_lease(mac, true) + elseif blacklist_macs[mac] then + add_blacklist_rule(mac) + elseif whitelist_macs[mac] then + add_whitelist_rule(mac) + end + elseif mac and cmd == "status" then + print(leased_macs[mac] and "lease" + or whitelist_macs[mac] and "whitelist" + or blacklist_macs[mac] and "blacklist" + or "new") + elseif mac and ( cmd == "whitelist" or cmd == "blacklist" or cmd == "lease" ) then + if cmd ~= "lease" and leased_macs[mac] then + print("Removing %s from leases" % mac) + remove_lease(mac) + leased_macs[mac] = nil + end + + if cmd ~= "whitelist" and whitelist_macs[mac] then + if cmd == "lease" then + print('%s is whitelisted. Remove it before you can lease it.' % mac) + else + print("Removing %s from whitelist" % mac) + remove_whitelist(mac) + whitelist_macs[mac] = nil + end + end + + if cmd == "whitelist" and leased_macs[mac] then + print("Removing %s from leases" % mac) + remove_lease(mac) + leased_macs[mac] = nil + end + + if cmd ~= "blacklist" and blacklist_macs[mac] then + print("Removing %s from blacklist" % mac) + remove_blacklist(mac) + blacklist_macs[mac] = nil + end + + if cmd == "lease" and not leased_macs[mac] then + if not whitelist_macs[mac] then + print("Adding %s to leases" % mac) + add_lease(mac) + leased_macs[mac] = true + end + elseif cmd == "whitelist" and not whitelist_macs[mac] then + print("Adding %s to whitelist" % mac) + add_whitelist(mac) + whitelist_macs[mac] = true + elseif cmd == "blacklist" and not blacklist_macs[mac] then + print("Adding %s to blacklist" % mac) + add_blacklist(mac) + blacklist_macs[mac] = true + else + print("The mac %s is already %sed" %{ mac, cmd }) + end + elseif mac and cmd == "remove" then + if leased_macs[mac] then + print("Removing %s from leases" % mac) + remove_lease(mac) + leased_macs[mac] = nil + elseif whitelist_macs[mac] then + print("Removing %s from whitelist" % mac) + remove_whitelist(mac) + whitelist_macs[mac] = nil + elseif blacklist_macs[mac] then + print("Removing %s from blacklist" % mac) + remove_blacklist(mac) + blacklist_macs[mac] = nil + else + print("The mac %s is not known" % mac) + end + + else + print("Can not find mac for ip %s" % argv[i]) + end + end + unlock() + os.exit(0) + elseif cmd == "sync" then + sync() + os.exit(0) + elseif cmd == "list" then + list() + os.exit(0) + else + print("Usage:") + print("\n luci-splash list\n List connected, black- and whitelisted clients") + print("\n luci-splash sync\n Synchronize firewall rules and clear expired leases") + print("\n luci-splash lease \n Create a lease for the given address") + print("\n luci-splash blacklist \n Add given address to blacklist") + print("\n luci-splash whitelist \n Add given address to whitelist") + print("\n luci-splash remove \n Remove given address from the lease-, black- or whitelist") + print("") + + os.exit(1) + end +end + +-- Get a list of known mac addresses +function get_known_macs(list) + local leased_macs = { } + + if not list or list == "lease" then + uci:foreach("luci_splash_leases", "lease", function(s) + if s.mac then + leased_macs[s.mac:lower()] = true + end + end) + end + + if not list or list == "whitelist" then + uci:foreach("luci_splash", "whitelist", function(s) + if s.mac then + leased_macs[s.mac:lower()] = true + end + end) + end + + if not list or list == "blacklist" then + uci:foreach("luci_splash", "blacklist", function(s) + if s.mac then + leased_macs[s.mac:lower()] = true + end + end) + end + return leased_macs +end + + +-- Helper to delete iptables rules +function ipt_delete_all(args, comp, off) + off = off or { } + for i, r in ipairs(ipt:find(args)) do + if comp == nil or comp(r) then + off[r.table] = off[r.table] or { } + off[r.table][r.chain] = off[r.table][r.chain] or 0 + + exec("iptables -t %q -D %q %d 2>/dev/null" + %{ r.table, r.chain, r.index - off[r.table][r.chain] }) + + off[r.table][r.chain] = off[r.table][r.chain] + 1 + end + end +end + +function ipt6_delete_all(args, comp, off) + off = off or { } + for i, r in ipairs(ipt:find(args)) do + if comp == nil or comp(r) then + off[r.table] = off[r.table] or { } + off[r.table][r.chain] = off[r.table][r.chain] or 0 + + exec("ip6tables -t %q -D %q %d 2>/dev/null" + %{ r.table, r.chain, r.index - off[r.table][r.chain] }) + + off[r.table][r.chain] = off[r.table][r.chain] + 1 + end + end +end + + +-- Convert mac to uci-compatible section name +function convert_mac_to_secname(mac) + return string.gsub(mac, ":", "") +end + +-- Add a lease to state and invoke add_rule +function add_lease(mac, no_uci) + mac = mac:lower() + + -- Get current ip address + local ipaddr = mac_to_ip(mac) + + -- Add lease if there is an ip addr + if ipaddr then + local device = get_device_for_ip(ipaddr) + if not no_uci then + local leased = uci:get("luci_splash_leases", "stats", "leases") + if type(tonumber(leased)) == "number" then + update_stats(leased + 1, nil, nil, nil, nil) + end + + uci:section("luci_splash_leases", "lease", convert_mac_to_secname(mac), { + mac = mac, + ipaddr = ipaddr, + device = device, + limit_up = limit_up, + limit_down = limit_down, + start = os.time() + }) + uci:save("luci_splash_leases") + end + add_lease_rule(mac, ipaddr, device) + else + print("Found no active IP for %s, lease not added" % mac) + end +end + + +-- Remove a lease from state and invoke remove_rule +function remove_lease(mac) + mac = mac:lower() + + uci:delete_all("luci_splash_leases", "lease", + function(s) + if s.mac:lower() == mac then + + local leased = uci:get("luci_splash_leases", "stats", "leases") + if type(tonumber(leased)) == "number" and tonumber(leased) > 0 then + update_stats(leased - 1, nil, nil, nil, nil) + end + remove_lease_rule(mac, s.ipaddr, s.device, tonumber(s.limit_up), tonumber(s.limit_down)) + return true + end + return false + end) + + uci:save("luci_splash_leases") +end + + +-- Add a whitelist entry +function add_whitelist(mac) + uci:section("luci_splash", "whitelist", convert_mac_to_secname(mac), { mac = mac }) + uci:save("luci_splash") + uci:commit("luci_splash") + add_whitelist_rule(mac) +end + + +-- Add a blacklist entry +function add_blacklist(mac) + uci:section("luci_splash", "blacklist", convert_mac_to_secname(mac), { mac = mac }) + uci:save("luci_splash") + uci:commit("luci_splash") + add_blacklist_rule(mac) +end + + +-- Remove a whitelist entry +function remove_whitelist(mac) + mac = mac:lower() + uci:delete_all("luci_splash", "whitelist", + function(s) return not s.mac or s.mac:lower() == mac end) + uci:save("luci_splash") + uci:commit("luci_splash") + remove_lease_rule(mac) + remove_whitelist_tc(mac) +end + +function remove_whitelist_tc(mac) + uci:foreach("luci_splash", "iface", function(s) + local device = get_physdev(s['.name']) + if device and device ~= "" then + if debug then + print("Removing whitelist filters for %s interface %s." % {mac, device}) + end + local handle = get_filter_handle('ffff:', 'src', device, mac) + if handle then + exec('tc filter del dev "%s" parent ffff: protocol ip prio 1 handle %s u32' % { device, handle }) + else + print('Warning! Could not get a handle for %s parent :ffff on interface %s' % { mac, device }) + end + local handle = get_filter_handle('1:', 'dest', device, mac) + if handle then + exec('tc filter del dev "%s" parent 1:0 protocol ip prio 1 handle %s u32' % { device, handle }) + else + print('Warning! Could not get a handle for %s parent 1:0 on interface %s' % { mac, device }) + end + end + end) +end + +-- Remove a blacklist entry +function remove_blacklist(mac) + mac = mac:lower() + uci:delete_all("luci_splash", "blacklist", + function(s) return not s.mac or s.mac:lower() == mac end) + uci:save("luci_splash") + uci:commit("luci_splash") + remove_lease_rule(mac) +end + + +-- Add an iptables rule +function add_lease_rule(mac, ipaddr, device) + local id + if ipaddr then + id = get_id(ipaddr) + end + + exec("iptables -t mangle -I luci_splash_mark_out -m mac --mac-source %q -j RETURN" % mac) + + -- Mark incoming packets to a splashed host + -- for ipv4 - by iptables and destination + if id and device then + exec("iptables -t mangle -I luci_splash_mark_in -d %q -j MARK --set-mark 0x1%s -m comment --comment %s" % {ipaddr, id, mac:upper()}) + end + + --for ipv6: need to use the mac here + + if has_ipv6 then + exec("ip6tables -t mangle -I luci_splash_mark_out -m mac --mac-source %q -j MARK --set-mark 79" % mac) + if id and device and tonumber(limit_down) then + exec("tc filter add dev %s parent 1:0 protocol ipv6 prio 1 u32 match ether dst %s classid 1:%s" % {device, mac:lower(), id}) + end + end + + + if device and tonumber(limit_up) > 0 then + exec('tc filter add dev "%s" parent ffff: protocol all prio 2 u32 match ether src %s police rate %skbit mtu 6k burst 6k drop' % {device, mac, limit_up}) + end + + if id and device and tonumber(limit_down) > 0 then + exec("tc class add dev %s parent 1: classid 1:0x%s htb rate %skbit" % { device, id, limit_down }) + exec("tc qdisc add dev %s parent 1:%s sfq perturb 10" % { device, id }) + end + + exec("iptables -t filter -I luci_splash_filter -m mac --mac-source %q -j RETURN" % mac) + exec("iptables -t nat -I luci_splash_leases -m mac --mac-source %q -j RETURN" % mac) + if has_ipv6 then + exec("ip6tables -t filter -I luci_splash_filter -m mac --mac-source %q -j RETURN" % mac) + end +end + + +-- Remove lease, black- or whitelist rules +function remove_lease_rule(mac, ipaddr, device, limit_up, limit_down) + + local id + if ipaddr then + id = get_id(ipaddr) + end + + ipt:resync() + ipt_delete_all({table="mangle", chain="luci_splash_mark_in", options={"/*", mac:upper()}}) + ipt_delete_all({table="mangle", chain="luci_splash_mark_out", options={"MAC", mac:upper()}}) + ipt_delete_all({table="filter", chain="luci_splash_filter", options={"MAC", mac:upper()}}) + ipt_delete_all({table="nat", chain="luci_splash_leases", options={"MAC", mac:upper()}}) + if has_ipv6 then + ipt6_delete_all({table="mangle", chain="luci_splash_mark_out", options={"MAC", mac:upper()}}) + ipt6_delete_all({table="filter", chain="luci_splash_filter", options={"MAC", mac:upper()}}) + end + + if device and tonumber(limit_up) > 0 then + local handle = get_filter_handle('ffff:', 'src', device, mac) + if handle then + exec('tc filter del dev "%s" parent ffff: protocol all prio 2 handle %s u32 police rate %skbit mtu 6k burst 6k drop' % {device, handle, limit_up}) + else + print('Warning! Could not get a handle for %s parent :ffff on interface %s' % { mac, device }) + end + end + -- remove clients class + if device and id then + exec('tc class del dev "%s" classid 1:%s' % {device, id}) + exec('tc filter del dev "%s" parent 1:0 prio 1' % device) -- ipv6 rule + --exec('tc qdisc del dev "%s" parent 1:%s sfq perturb 10' % { device, id }) + end +end + + +-- Add whitelist rules +function add_whitelist_rule(mac) + exec("iptables -t filter -I luci_splash_filter -m mac --mac-source %q -j RETURN" % mac) + exec("iptables -t nat -I luci_splash_leases -m mac --mac-source %q -j RETURN" % mac) + if has_ipv6 then + exec("ip6tables -t filter -I luci_splash_filter -m mac --mac-source %q -j RETURN" % mac) + end + uci:foreach("luci_splash", "iface", function(s) + local device = get_physdev(s['.name']) + if device and device ~= "" then + exec('tc filter add dev "%s" parent ffff: protocol ip prio 1 u32 match ether src %s police pass' % { device, mac }) + exec('tc filter add dev "%s" parent 1:0 protocol ip prio 1 u32 match ether dst %s classid 1:1' % { device, mac }) + end + end) +end + + +-- Add blacklist rules +function add_blacklist_rule(mac) + exec("iptables -t filter -I luci_splash_filter -m mac --mac-source %q -j DROP" % mac) + if has_ipv6 then + exec("ip6tables -t filter -I luci_splash_filter -m mac --mac-source %q -j DROP" % mac) + end +end + + +-- Synchronise leases, remove abandoned rules +function sync() + lock() + + local time = os.time() + + -- Current leases in state files + local leases = uci:get_all("luci_splash_leases") + + -- Convert leasetime to seconds + local leasetime = tonumber(uci:get("luci_splash", "general", "leasetime")) * 3600 + + -- Clean state file + uci:load("luci_splash_leases") + uci:revert("luci_splash_leases") + + + local blackwhitelist = uci:get_all("luci_splash") + local whitelist_total = 0 + local whitelist_online = 0 + local blacklist_total = 0 + local blacklist_online = 0 + local leasecount = 0 + local leases_online = 0 + + -- For all leases + for k, v in pairs(leases) do + if v[".type"] == "lease" then + if os.difftime(time, tonumber(v.start)) > leasetime then + -- Remove expired + remove_lease_rule(v.mac, v.ipaddr, v.device, tonumber(v.limit_up), tonumber(v.limit_down)) + else + leasecount = leasecount + 1 + + -- only count leases_online for connected clients + if mac_to_ip(v.mac) then + leases_online = leases_online + 1 + end + + -- Rewrite state + uci:section("luci_splash_leases", "lease", convert_mac_to_secname(v.mac), { + mac = v.mac, + ipaddr = v.ipaddr, + device = v.device, + limit_up = limit_up, + limit_down = limit_down, + start = v.start + }) + end + end + end + + -- Whitelist, Blacklist + for _, s in utl.spairs(blackwhitelist, + function(a,b) return blackwhitelist[a][".type"] > blackwhitelist[b][".type"] end + ) do + if (s[".type"] == "whitelist") then + whitelist_total = whitelist_total + 1 + if s.mac then + local mac = s.mac:lower() + if mac_to_ip(mac) then + whitelist_online = whitelist_online + 1 + end + end + end + if (s[".type"] == "blacklist") then + blacklist_total = blacklist_total + 1 + if s.mac then + local mac = s.mac:lower() + if mac_to_ip(mac) then + blacklist_online = blacklist_online + 1 + end + end + end + end + + -- ToDo: + -- include a new field "leases_online" in stats to differ between active clients and leases: + -- update_stats(leasecount, leases_online, whitelist_online, whitelist_total, blacklist_online, blacklist_total) later: + update_stats(leases_online, whitelist_online, whitelist_total, blacklist_online, blacklist_total) + + uci:save("luci_splash_leases") + + -- Get the mac addresses of current leases + local macs = get_known_macs() + + ipt:resync() + + ipt_delete_all({table="filter", chain="luci_splash_filter", options={"MAC"}}, + function(r) return not macs[r.options[2]:lower()] end) + ipt_delete_all({table="nat", chain="luci_splash_leases", options={"MAC"}}, + function(r) return not macs[r.options[2]:lower()] end) + ipt_delete_all({table="mangle", chain="luci_splash_mark_out", options={"MAC", "MARK", "set"}}, + function(r) return not macs[r.options[2]:lower()] end) + ipt_delete_all({table="mangle", chain="luci_splash_mark_in", options={"/*", "MARK", "set"}}, + function(r) return not macs[r.options[2]:lower()] end) + + + if has_ipv6 then + ipt6_delete_all({table="filter", chain="luci_splash_filter", options={"MAC"}}, + function(r) return not macs[r.options[2]:lower()] end) + ipt6_delete_all({table="mangle", chain="luci_splash_mark_out", options={"MAC", "MARK", "set"}}, + function(r) return not macs[r.options[2]:lower()] end) + end + + unlock() +end + +-- Show client info +function list() + -- Find traffic usage + local function traffic(lease) + local traffic_in = 0 + local traffic_out = 0 + + local rin = ipt:find({table="mangle", chain="luci_splash_mark_in", destination=lease.ipaddr}) + local rout = ipt:find({table="mangle", chain="luci_splash_mark_out", options={"MAC", lease.mac:upper()}}) + + if rin and #rin > 0 then traffic_in = math.floor( rin[1].bytes / 1024) end + if rout and #rout > 0 then traffic_out = math.floor(rout[1].bytes / 1024) end + + return traffic_in, traffic_out + end + + -- Print listings + local leases = uci:get_all("luci_splash_leases") + local blackwhitelist = uci:get_all("luci_splash") + + print(string.format( + "%-17s %-15s %-9s %-4s %-7s %20s", + "MAC", "IP", "State", "Dur.", "Intf.", "Traffic down/up" + )) + + -- Leases + for _, s in pairs(leases) do + if s[".type"] == "lease" and s.mac then + local ti, to = traffic(s) + local mac = s.mac:lower() + print(string.format( + "%-17s %-15s %-9s %3dm %-7s %7dKB %7dKB", + mac, s.ipaddr, "leased", + math.floor(( os.time() - tonumber(s.start) ) / 60), + mac_to_dev(mac) or "?", ti, to + )) + end + end + + -- Whitelist, Blacklist + for _, s in utl.spairs(blackwhitelist, + function(a,b) return blackwhitelist[a][".type"] > blackwhitelist[b][".type"] end + ) do + if (s[".type"] == "whitelist" or s[".type"] == "blacklist") and s.mac then + local mac = s.mac:lower() + print(string.format( + "%-17s %-15s %-9s %4s %-7s %9s %9s", + mac, mac_to_ip(mac) or "?", s[".type"], + "- ", mac_to_dev(mac) or "?", "-", "-" + )) + end + end +end + +main(arg) diff --git a/feeds/luci/applications/luci-app-statistics/Makefile b/feeds/luci/applications/luci-app-statistics/Makefile new file mode 100644 index 0000000..008792a --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/Makefile @@ -0,0 +1,21 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Statistics Application +LUCI_DEPENDS:= \ + +collectd +rrdtool1 +collectd-mod-rrdtool +collectd-mod-iwinfo \ + +collectd-mod-cpu +collectd-mod-memory \ + +collectd-mod-interface +collectd-mod-load +collectd-mod-network + +define Package/luci-app-statistics/conffiles +/etc/config/luci_statistics +endef + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua b/feeds/luci/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua new file mode 100644 index 0000000..36c5554 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua @@ -0,0 +1,207 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Copyright 2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.luci_statistics.luci_statistics", package.seeall) + +function index() + + require("nixio.fs") + require("luci.util") + require("luci.statistics.datatree") + + -- override entry(): check for existance .so where is derived from the called path + function _entry( path, ... ) + local file = path[5] or path[4] + if nixio.fs.access( "/usr/lib/collectd/" .. file .. ".so" ) then + entry( path, ... ) + end + end + + local labels = { + s_output = _("Output plugins"), + s_general = _("General plugins"), + s_network = _("Network plugins"), + + conntrack = _("Conntrack"), + cpu = _("Processor"), + cpufreq = _("CPU Frequency"), + csv = _("CSV Output"), + df = _("Disk Space Usage"), + disk = _("Disk Usage"), + dns = _("DNS"), + email = _("Email"), + entropy = _("Entropy"), + exec = _("Exec"), + interface = _("Interfaces"), + iptables = _("Firewall"), + irq = _("Interrupts"), + iwinfo = _("Wireless"), + load = _("System Load"), + memory = _("Memory"), + netlink = _("Netlink"), + network = _("Network"), + nut = _("UPS"), + olsrd = _("OLSRd"), + openvpn = _("OpenVPN"), + ping = _("Ping"), + processes = _("Processes"), + rrdtool = _("RRDTool"), + sensors = _("Sensors"), + splash_leases = _("Splash Leases"), + tcpconns = _("TCP Connections"), + thermal = _("Thermal"), + unixsock = _("UnixSock"), + uptime = _("Uptime") + } + + -- our collectd menu + local collectd_menu = { + output = { "csv", "network", "rrdtool", "unixsock" }, + general = { "cpu", "cpufreq", "df", "disk", "email", + "entropy", "exec", "irq", "load", "memory", + "nut", "processes", "sensors", "thermal", "uptime" }, + network = { "conntrack", "dns", "interface", "iptables", + "netlink", "olsrd", "openvpn", "ping", + "splash_leases", "tcpconns", "iwinfo" } + } + + -- create toplevel menu nodes + local st = entry({"admin", "statistics"}, template("admin_statistics/index"), _("Statistics"), 80) + st.index = true + + entry({"admin", "statistics", "collectd"}, cbi("luci_statistics/collectd"), _("Setup"), 20).subindex = true + + + -- populate collectd plugin menu + local index = 1 + for section, plugins in luci.util.kspairs( collectd_menu ) do + local e = entry( + { "admin", "statistics", "collectd", section }, + firstchild(), labels["s_"..section], index * 10 + ) + + e.index = true + + for j, plugin in luci.util.vspairs( plugins ) do + _entry( + { "admin", "statistics", "collectd", section, plugin }, + cbi("luci_statistics/" .. plugin ), + labels[plugin], j * 10 + ) + end + + index = index + 1 + end + + -- output views + local page = entry( { "admin", "statistics", "graph" }, template("admin_statistics/index"), _("Graphs"), 10) + page.setuser = "nobody" + page.setgroup = "nogroup" + + local vars = luci.http.formvalue(nil, true) + local span = vars.timespan or nil + local host = vars.host or nil + + -- get rrd data tree + local tree = luci.statistics.datatree.Instance(host) + + local _, plugin, idx + for _, plugin, idx in luci.util.vspairs( tree:plugins() ) do + + -- get plugin instances + local instances = tree:plugin_instances( plugin ) + + -- plugin menu entry + entry( + { "admin", "statistics", "graph", plugin }, + call("statistics_render"), labels[plugin], idx + ).query = { timespan = span , host = host } + + -- if more then one instance is found then generate submenu + if #instances > 1 then + local _, inst, idx2 + for _, inst, idx2 in luci.util.vspairs(instances) do + -- instance menu entry + entry( + { "admin", "statistics", "graph", plugin, inst }, + call("statistics_render"), inst, idx2 + ).query = { timespan = span , host = host } + end + end + end +end + +function statistics_render() + + require("luci.statistics.rrdtool") + require("luci.template") + require("luci.model.uci") + + local vars = luci.http.formvalue() + local req = luci.dispatcher.context.request + local path = luci.dispatcher.context.path + local uci = luci.model.uci.cursor() + local spans = luci.util.split( uci:get( "luci_statistics", "collectd_rrdtool", "RRATimespans" ), "%s+", nil, true ) + local span = vars.timespan or uci:get( "luci_statistics", "rrdtool", "default_timespan" ) or spans[1] + local host = vars.host or uci:get( "luci_statistics", "collectd", "Hostname" ) or luci.sys.hostname() + local opts = { host = vars.host } + local graph = luci.statistics.rrdtool.Graph( luci.util.parse_units( span ), opts ) + local hosts = graph.tree:host_instances() + + local is_index = false + local i, p, inst, idx + + -- deliver image + if vars.img then + local l12 = require "luci.ltn12" + local png = io.open(graph.opts.imgpath .. "/" .. vars.img:gsub("%.+", "."), "r") + if png then + luci.http.prepare_content("image/png") + l12.pump.all(l12.source.file(png), luci.http.write) + end + return + end + + local plugin, instances + local images = { } + + -- find requested plugin and instance + for i, p in ipairs( luci.dispatcher.context.path ) do + if luci.dispatcher.context.path[i] == "graph" then + plugin = luci.dispatcher.context.path[i+1] + instances = { luci.dispatcher.context.path[i+2] } + end + end + + -- no instance requested, find all instances + if #instances == 0 then + --instances = { graph.tree:plugin_instances( plugin )[1] } + instances = graph.tree:plugin_instances( plugin ) + is_index = (#instances > 1) + + -- index instance requested + elseif instances[1] == "-" then + instances[1] = "" + is_index = true + end + + + -- render graphs + for i, inst in luci.util.vspairs( instances ) do + for i, img in luci.util.vspairs( graph:render( plugin, inst, is_index ) ) do + table.insert( images, graph:strippngpath( img ) ) + images[images[#images]] = inst + end + end + + luci.template.render( "public_statistics/graph", { + images = images, + plugin = plugin, + timespans = spans, + current_timespan = span, + hosts = hosts, + current_host = host, + is_index = is_index + } ) +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/collectd.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/collectd.lua new file mode 100644 index 0000000..663a3f1 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/collectd.lua @@ -0,0 +1,62 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require("luci.sys") + + +m = Map("luci_statistics", + translate("Collectd Settings"), + translate( + "Collectd is a small daemon for collecting data from " .. + "various sources through different plugins. On this page " .. + "you can change general settings for the collectd daemon." + )) + +-- general config section +s = m:section( NamedSection, "collectd", "luci_statistics" ) + +-- general.hostname (Hostname) +hostname = s:option( Value, "Hostname", translate("Hostname") ) +hostname.default = luci.sys.hostname() +hostname.optional = true + +-- general.basedir (BaseDir) +basedir = s:option( Value, "BaseDir", translate("Base Directory") ) +basedir.default = "/var/run/collectd" + +-- general.include (Include) +include = s:option( Value, "Include", translate("Directory for sub-configurations") ) +include.default = "/etc/collectd/conf.d/*.conf" + +-- general.plugindir (PluginDir) +plugindir = s:option( Value, "PluginDir", translate("Directory for collectd plugins") ) +plugindir.default = "/usr/lib/collectd/" + +-- general.pidfile (PIDFile) +pidfile = s:option( Value, "PIDFile", translate("Used PID file") ) +pidfile.default = "/var/run/collectd.pid" + +-- general.typesdb (TypesDB) +typesdb = s:option( Value, "TypesDB", translate("Datasets definition file") ) +typesdb.default = "/etc/collectd/types.db" + +-- general.interval (Interval) +interval = s:option( Value, "Interval", translate("Data collection interval"), translate("Seconds") ) +interval.default = 60 +interval.isnumber = true + +-- general.readthreads (ReadThreads) +readthreads = s:option( Value, "ReadThreads", translate("Number of threads for data collection") ) +readthreads.default = 5 +readthreads.isnumber = true + +-- general.fqdnlookup (FQDNLookup) +fqdnlookup = s:option( Flag, "FQDNLookup", translate("Try to lookup fully qualified hostname") ) +fqdnlookup.enabled = "true" +fqdnlookup.disabled = "false" +fqdnlookup.default = "false" +fqdnlookup.optional = true +fqdnlookup:depends( "Hostname", "" ) + + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/conntrack.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/conntrack.lua new file mode 100644 index 0000000..f89cdb1 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/conntrack.lua @@ -0,0 +1,21 @@ +--[[ + +Copyright 2011 Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 +]]-- + +m = Map("luci_statistics", + translate("Conntrack Plugin Configuration"), + translate("The conntrack plugin collects statistics about the number of tracked connections.")) + +s = m:section( NamedSection, "collectd_conntrack", "luci_statistics" ) + +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpu.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpu.lua new file mode 100644 index 0000000..ee3fd25 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpu.lua @@ -0,0 +1,15 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("CPU Plugin Configuration"), + translate("The cpu plugin collects basic statistics about the processor usage.")) + +-- collectd_cpu config section +s = m:section( NamedSection, "collectd_cpu", "luci_statistics" ) + +-- collectd_cpu.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpufreq.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpufreq.lua new file mode 100644 index 0000000..d111663 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpufreq.lua @@ -0,0 +1,14 @@ +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("CPU Frequency Plugin Configuration"), + translate("This plugin collects statistics about the processor frequency scaling.")) + +-- collectd_cpufreq config section +s = m:section( NamedSection, "collectd_cpufreq", "luci_statistics" ) + +-- collectd_cpufreq.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/csv.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/csv.lua new file mode 100644 index 0000000..ec45a67 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/csv.lua @@ -0,0 +1,29 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("CSV Plugin Configuration"), + translate( + "The csv plugin stores collected data in csv file format " .. + "for further processing by external programs." + )) + +-- collectd_csv config section +s = m:section( NamedSection, "collectd_csv", "luci_statistics" ) + +-- collectd_csv.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_csv.datadir (DataDir) +datadir = s:option( Value, "DataDir", translate("Storage directory for the csv files") ) +datadir.default = "127.0.0.1" +datadir:depends( "enable", 1 ) + +-- collectd_csv.storerates (StoreRates) +storerates = s:option( Flag, "StoreRates", translate("Store data values as rates instead of absolute values") ) +storerates.default = 0 +storerates:depends( "enable", 1 ) + +return m + diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/df.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/df.lua new file mode 100644 index 0000000..c6031fd --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/df.lua @@ -0,0 +1,41 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("DF Plugin Configuration"), + translate( + "The df plugin collects statistics about the disk space " .. + "usage on different devices, mount points or filesystem types." + )) + +-- collectd_df config section +s = m:section( NamedSection, "collectd_df", "luci_statistics" ) + +-- collectd_df.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_df.devices (Device) +devices = s:option( Value, "Devices", translate("Monitor devices") ) +devices.default = "/dev/mtdblock/4" +devices.optional = true +devices:depends( "enable", 1 ) + +-- collectd_df.mountpoints (MountPoint) +mountpoints = s:option( Value, "MountPoints", translate("Monitor mount points") ) +mountpoints.default = "/overlay" +mountpoints.optional = true +mountpoints:depends( "enable", 1 ) + +-- collectd_df.fstypes (FSType) +fstypes = s:option( Value, "FSTypes", translate("Monitor filesystem types") ) +fstypes.default = "tmpfs" +fstypes.optional = true +fstypes:depends( "enable", 1 ) + +-- collectd_df.ignoreselected (IgnoreSelected) +ignoreselected = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") ) +ignoreselected.default = 0 +ignoreselected:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/disk.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/disk.lua new file mode 100644 index 0000000..dc3d3fb --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/disk.lua @@ -0,0 +1,29 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("Disk Plugin Configuration"), + translate( + "The disk plugin collects detailled usage statistics " .. + "for selected partitions or whole disks." + )) + +-- collectd_disk config section +s = m:section( NamedSection, "collectd_disk", "luci_statistics" ) + +-- collectd_disk.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_disk.disks (Disk) +devices = s:option( Value, "Disks", translate("Monitor disks and partitions") ) +devices.default = "hda1 hdb" +devices.rmempty = true +devices:depends( "enable", 1 ) + +-- collectd_disk.ignoreselected (IgnoreSelected) +ignoreselected = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") ) +ignoreselected.default = 0 +ignoreselected:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/dns.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/dns.lua new file mode 100644 index 0000000..29b998b --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/dns.lua @@ -0,0 +1,36 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require("luci.sys") + + +m = Map("luci_statistics", + translate("DNS Plugin Configuration"), + translate( + "The dns plugin collects detailled statistics about dns " .. + "related traffic on selected interfaces." + )) + +-- collectd_dns config section +s = m:section( NamedSection, "collectd_dns", "luci_statistics" ) + +-- collectd_dns.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_dns.interfaces (Interface) +interfaces = s:option( MultiValue, "Interfaces", translate("Monitor interfaces") ) +interfaces.widget = "select" +interfaces.size = 5 +interfaces:depends( "enable", 1 ) +interfaces:value("any") +for k, v in pairs(luci.sys.net.devices()) do + interfaces:value(v) +end + +-- collectd_dns.ignoresources (IgnoreSource) +ignoresources = s:option( Value, "IgnoreSources", translate("Ignore source addresses") ) +ignoresources.default = "127.0.0.1" +ignoresources:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/email.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/email.lua new file mode 100644 index 0000000..e6ed439 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/email.lua @@ -0,0 +1,48 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("E-Mail Plugin Configuration"), + translate( + "The email plugin creates a unix socket which can be used " .. + "to transmit email-statistics to a running collectd daemon. " .. + "This plugin is primarily intended to be used in conjunction " .. + "with Mail::SpamAssasin::Plugin::Collectd but can be used in " .. + "other ways as well." + )) + +-- collectd_email config section +s = m:section( NamedSection, "collectd_email", "luci_statistics" ) + +-- collectd_email.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_email.socketfile (SocketFile) +socketfile = s:option( Value, "SocketFile", translate("Socket file") ) +socketfile.default = "/var/run/collect-email.sock" +socketfile:depends( "enable", 1 ) + +-- collectd_email.socketgroup (SocketGroup) +socketgroup = s:option( Value, "SocketGroup", translate("Socket group") ) +socketgroup.default = "nobody" +socketgroup.rmempty = true +socketgroup.optional = true +socketgroup:depends( "enable", 1 ) + +-- collectd_email.socketperms (SocketPerms) +socketperms = s:option( Value, "SocketPerms", translate("Socket permissions") ) +socketperms.default = "0770" +socketperms.rmempty = true +socketperms.optional = true +socketperms:depends( "enable", 1 ) + +-- collectd_email.maxconns (MaxConns) +maxconns = s:option( Value, "MaxConns", translate("Maximum allowed connections") ) +maxconns.default = 5 +maxconns.isinteger = true +maxconns.rmempty = true +maxconns.optional = true +maxconns:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/entropy.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/entropy.lua new file mode 100644 index 0000000..d18bf91 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/entropy.lua @@ -0,0 +1,14 @@ +-- Copyright 2015 Hannu Nyman +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("Entropy Plugin Configuration"), + translate("The entropy plugin collects statistics about the available entropy.")) + +s = m:section( NamedSection, "collectd_entropy", "luci_statistics" ) + +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +return m + diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/exec.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/exec.lua new file mode 100644 index 0000000..48e0ec2 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/exec.lua @@ -0,0 +1,77 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("Exec Plugin Configuration"), + translate( + "The exec plugin starts external commands to read values " .. + "from or to notify external processes when certain threshold " .. + "values have been reached." + )) + +-- collectd_exec config section +s = m:section( NamedSection, "collectd_exec", "luci_statistics" ) + +-- collectd_exec.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + + +-- collectd_exec_input config section (Exec directives) +exec = m:section( TypedSection, "collectd_exec_input", + translate("Add command for reading values"), + translate( + "Here you can define external commands which will be " .. + "started by collectd in order to read certain values. " .. + "The values will be read from stdout." + )) +exec.addremove = true +exec.anonymous = true + +-- collectd_exec_input.cmdline +exec_cmdline = exec:option( Value, "cmdline", translate("Script") ) +exec_cmdline.default = "/usr/bin/stat-dhcpusers" + +-- collectd_exec_input.cmdline +exec_cmduser = exec:option( Value, "cmduser", translate("User") ) +exec_cmduser.default = "nobody" +exec_cmduser.rmempty = true +exec_cmduser.optional = true + +-- collectd_exec_input.cmdline +exec_cmdgroup = exec:option( Value, "cmdgroup", translate("Group") ) +exec_cmdgroup.default = "nogroup" +exec_cmdgroup.rmempty = true +exec_cmdgroup.optional = true + + +-- collectd_exec_notify config section (NotifyExec directives) +notify = m:section( TypedSection, "collectd_exec_notify", + translate("Add notification command"), + translate( + "Here you can define external commands which will be " .. + "started by collectd when certain threshold values have " .. + "been reached. The values leading to invokation will be " .. + "feeded to the the called programs stdin." + )) +notify.addremove = true +notify.anonymous = true + +-- collectd_notify_input.cmdline +notify_cmdline = notify:option( Value, "cmdline", translate("Script") ) +notify_cmdline.default = "/usr/bin/stat-dhcpusers" + +-- collectd_notify_input.cmdline +notify_cmduser = notify:option( Value, "cmduser", translate("User") ) +notify_cmduser.default = "nobody" +notify_cmduser.rmempty = true +notify_cmduser.optional = true + +-- collectd_notify_input.cmdline +notify_cmdgroup = notify:option( Value, "cmdgroup", translate("Group") ) +notify_cmdgroup.default = "nogroup" +notify_cmdgroup.rmempty = true +notify_cmdgroup.optional = true + + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/interface.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/interface.lua new file mode 100644 index 0000000..752212f --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/interface.lua @@ -0,0 +1,35 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require("luci.sys") + + +m = Map("luci_statistics", + translate("Interface Plugin Configuration"), + translate( + "The interface plugin collects traffic statistics on " .. + "selected interfaces." + )) + +-- collectd_interface config section +s = m:section( NamedSection, "collectd_interface", "luci_statistics" ) + +-- collectd_interface.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_interface.interfaces (Interface) +interfaces = s:option( MultiValue, "Interfaces", translate("Monitor interfaces") ) +interfaces.widget = "select" +interfaces.size = 5 +interfaces:depends( "enable", 1 ) +for k, v in pairs(luci.sys.net.devices()) do + interfaces:value(v) +end + +-- collectd_interface.ignoreselected (IgnoreSelected) +ignoreselected = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") ) +ignoreselected.default = 0 +ignoreselected:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/iptables.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/iptables.lua new file mode 100644 index 0000000..aa46984 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/iptables.lua @@ -0,0 +1,120 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require("luci.sys.iptparser") + +ip = luci.sys.iptparser.IptParser() +chains = { } +targets = { } + +for i, rule in ipairs( ip:find() ) do + if rule.chain and rule.target then + chains[rule.chain] = true + targets[rule.target] = true + end +end + + +m = Map("luci_statistics", + translate("Iptables Plugin Configuration"), + translate( + "The iptables plugin will monitor selected firewall rules and " .. + "collect informations about processed bytes and packets per rule." + )) + +-- collectd_iptables config section +s = m:section( NamedSection, "collectd_iptables", "luci_statistics" ) + +-- collectd_iptables.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + + +-- collectd_iptables_match config section (Chain directives) +rule = m:section( TypedSection, "collectd_iptables_match", + translate("Add matching rule"), + translate( + "Here you can define various criteria by which the monitored " .. + "iptables rules are selected." + )) +rule.addremove = true +rule.anonymous = true + + +-- collectd_iptables_match.name +rule_table = rule:option( Value, "name", + translate("Name of the rule"), translate("max. 16 chars") ) + +-- collectd_iptables_match.table +rule_table = rule:option( ListValue, "table", translate("Table") ) +rule_table.default = "filter" +rule_table.rmempty = true +rule_table.optional = true +rule_table:value("") +rule_table:value("filter") +rule_table:value("nat") +rule_table:value("mangle") + + +-- collectd_iptables_match.chain +rule_chain = rule:option( ListValue, "chain", translate("Chain") ) +rule_chain.rmempty = true +rule_chain.optional = true +rule_chain:value("") + +for chain, void in pairs( chains ) do + rule_chain:value( chain ) +end + + +-- collectd_iptables_match.target +rule_target = rule:option( ListValue, "target", translate("Action (target)") ) +rule_target.rmempty = true +rule_target.optional = true +rule_target:value("") + +for target, void in pairs( targets ) do + rule_target:value( target ) +end + + +-- collectd_iptables_match.protocol +rule_protocol = rule:option( ListValue, "protocol", translate("Network protocol") ) +rule_protocol.rmempty = true +rule_protocol.optional = true +rule_protocol:value("") +rule_protocol:value("tcp") +rule_protocol:value("udp") +rule_protocol:value("icmp") + +-- collectd_iptables_match.source +rule_source = rule:option( Value, "source", translate("Source ip range") ) +rule_source.default = "0.0.0.0/0" +rule_source.rmempty = true +rule_source.optional = true + +-- collectd_iptables_match.destination +rule_destination = rule:option( Value, "destination", translate("Destination ip range") ) +rule_destination.default = "0.0.0.0/0" +rule_destination.rmempty = true +rule_destination.optional = true + +-- collectd_iptables_match.inputif +rule_inputif = rule:option( Value, "inputif", + translate("Incoming interface"), translate("e.g. br-lan") ) +rule_inputif.rmempty = true +rule_inputif.optional = true + +-- collectd_iptables_match.outputif +rule_outputif = rule:option( Value, "outputif", + translate("Outgoing interface"), translate("e.g. br-ff") ) +rule_outputif.rmempty = true +rule_outputif.optional = true + +-- collectd_iptables_match.options +rule_options = rule:option( Value, "options", + translate("Options"), translate("e.g. reject-with tcp-reset") ) +rule_options.rmempty = true +rule_options.optional = true + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/irq.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/irq.lua new file mode 100644 index 0000000..6a8c227 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/irq.lua @@ -0,0 +1,30 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("IRQ Plugin Configuration"), + translate( + "The irq plugin will monitor the rate of issues per second for " .. + "each selected interrupt. If no interrupt is selected then all " .. + "interrupts are monitored." + )) + +-- collectd_irq config section +s = m:section( NamedSection, "collectd_irq", "luci_statistics" ) + +-- collectd_irq.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_irq.irqs (Irq) +irqs = s:option( Value, "Irqs", translate("Monitor interrupts") ) +irqs.optional = true +irqs:depends( "enable", 1 ) + +-- collectd_irq.ignoreselected (IgnoreSelected) +ignoreselected = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") ) +ignoreselected.default = 0 +ignoreselected.optional = "true" +ignoreselected:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/iwinfo.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/iwinfo.lua new file mode 100644 index 0000000..20d9509 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/iwinfo.lua @@ -0,0 +1,26 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local m, s, o + +m = Map("luci_statistics", + translate("Wireless iwinfo Plugin Configuration"), + translate("The iwinfo plugin collects statistics about wireless signal strength, noise and quality.")) + +s = m:section(NamedSection, "collectd_iwinfo", "luci_statistics") + +o = s:option(Flag, "enable", translate("Enable this plugin")) +o.default = 0 + +o = s:option(Value, "Interfaces", translate("Monitor interfaces"), + translate("Leave unselected to automatically determine interfaces to monitor.")) +o.template = "cbi/network_ifacelist" +o.widget = "checkbox" +o.nocreate = true +o:depends("enable", 1) + +o = s:option(Flag, "IgnoreSelected", translate("Monitor all except specified")) +o.default = 0 +o:depends("enable", 1) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/load.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/load.lua new file mode 100644 index 0000000..6578291 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/load.lua @@ -0,0 +1,17 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("Load Plugin Configuration"), + translate( + "The load plugin collects statistics about the general system load." + )) + +-- collectd_wireless config section +s = m:section( NamedSection, "collectd_load", "luci_statistics" ) + +-- collectd_wireless.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/memory.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/memory.lua new file mode 100644 index 0000000..5510a5a --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/memory.lua @@ -0,0 +1,21 @@ +--[[ + +Copyright 2011 Manuel Munz + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 +]]-- + +m = Map("luci_statistics", + translate("Memory Plugin Configuration"), + translate("The memory plugin collects statistics about the memory usage.")) + +s = m:section( NamedSection, "collectd_memory", "luci_statistics" ) + +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/netlink.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/netlink.lua new file mode 100644 index 0000000..917abd0 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/netlink.lua @@ -0,0 +1,83 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require("luci.sys") + +local devices = luci.sys.net.devices() + + +m = Map("luci_statistics", + translate("Netlink Plugin Configuration"), + translate( + "The netlink plugin collects extended informations like " .. + "qdisc-, class- and filter-statistics for selected interfaces." + )) + +-- collectd_netlink config section +s = m:section( NamedSection, "collectd_netlink", "luci_statistics" ) + +-- collectd_netlink.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_netlink.interfaces (Interface) +interfaces = s:option( MultiValue, "Interfaces", translate("Basic monitoring") ) +interfaces.widget = "select" +interfaces.optional = true +interfaces.size = #devices + 1 +interfaces:depends( "enable", 1 ) +interfaces:value("") +for i, v in ipairs(devices) do + interfaces:value(v) +end + +-- collectd_netlink.verboseinterfaces (VerboseInterface) +verboseinterfaces = s:option( MultiValue, "VerboseInterfaces", translate("Verbose monitoring") ) +verboseinterfaces.widget = "select" +verboseinterfaces.optional = true +verboseinterfaces.size = #devices + 1 +verboseinterfaces:depends( "enable", 1 ) +verboseinterfaces:value("") +for i, v in ipairs(devices) do + verboseinterfaces:value(v) +end + +-- collectd_netlink.qdiscs (QDisc) +qdiscs = s:option( MultiValue, "QDiscs", translate("Qdisc monitoring") ) +qdiscs.widget = "select" +qdiscs.optional = true +qdiscs.size = #devices + 1 +qdiscs:depends( "enable", 1 ) +qdiscs:value("") +for i, v in ipairs(devices) do + qdiscs:value(v) +end + +-- collectd_netlink.classes (Class) +classes = s:option( MultiValue, "Classes", translate("Shaping class monitoring") ) +classes.widget = "select" +classes.optional = true +classes.size = #devices + 1 +classes:depends( "enable", 1 ) +classes:value("") +for i, v in ipairs(devices) do + classes:value(v) +end + +-- collectd_netlink.filters (Filter) +filters = s:option( MultiValue, "Filters", translate("Filter class monitoring") ) +filters.widget = "select" +filters.optional = true +filters.size = #devices + 1 +filters:depends( "enable", 1 ) +filters:value("") +for i, v in ipairs(devices) do + filters:value(v) +end + +-- collectd_netlink.ignoreselected (IgnoreSelected) +ignoreselected = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") ) +ignoreselected.default = 0 +ignoreselected:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/network.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/network.lua new file mode 100644 index 0000000..547badf --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/network.lua @@ -0,0 +1,85 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("Network Plugin Configuration"), + translate( + "The network plugin provides network based communication between " .. + "different collectd instances. Collectd can operate both in client " .. + "and server mode. In client mode locally collected data is " .. + "transferred to a collectd server instance, in server mode the " .. + "local instance receives data from other hosts." + )) + +-- collectd_network config section +s = m:section( NamedSection, "collectd_network", "luci_statistics" ) + +-- collectd_network.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + + +-- collectd_network_listen config section (Listen) +listen = m:section( TypedSection, "collectd_network_listen", + translate("Listener interfaces"), + translate( + "This section defines on which interfaces collectd will wait " .. + "for incoming connections." + )) +listen.addremove = true +listen.anonymous = true + +-- collectd_network_listen.host +listen_host = listen:option( Value, "host", translate("Listen host") ) +listen_host.default = "0.0.0.0" + +-- collectd_network_listen.port +listen_port = listen:option( Value, "port", translate("Listen port") ) +listen_port.default = 25826 +listen_port.isinteger = true +listen_port.optional = true + + +-- collectd_network_server config section (Server) +server = m:section( TypedSection, "collectd_network_server", + translate("server interfaces"), + translate( + "This section defines to which servers the locally collected " .. + "data is sent to." + )) +server.addremove = true +server.anonymous = true + +-- collectd_network_server.host +server_host = server:option( Value, "host", translate("Server host") ) +server_host.default = "0.0.0.0" + +-- collectd_network_server.port +server_port = server:option( Value, "port", translate("Server port") ) +server_port.default = 25826 +server_port.isinteger = true +server_port.optional = true + +-- collectd_network.timetolive (TimeToLive) +ttl = s:option( Value, "TimeToLive", translate("TTL for network packets") ) +ttl.default = 128 +ttl.isinteger = true +ttl.optional = true +ttl:depends( "enable", 1 ) + +-- collectd_network.forward (Forward) +forward = s:option( Flag, "Forward", translate("Forwarding between listen and server addresses") ) +forward.default = 0 +forward.optional = true +forward:depends( "enable", 1 ) + +-- collectd_network.cacheflush (CacheFlush) +cacheflush = s:option( Value, "CacheFlush", + translate("Cache flush interval"), translate("Seconds") ) +cacheflush.default = 86400 +cacheflush.isinteger = true +cacheflush.optional = true +cacheflush:depends( "enable", 1 ) + + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/nut.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/nut.lua new file mode 100644 index 0000000..03ec29e --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/nut.lua @@ -0,0 +1,17 @@ +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("UPS Plugin Configuration"), + translate("The NUT plugin reads information about Uninterruptible Power Supplies.")) + +s = m:section(NamedSection, "collectd_nut", "luci_statistics" ) + +enable = s:option(Flag, "enable", translate("Enable this plugin")) +enable.default = 0 + +host = s:option(Value, "UPS", translate("UPS"), translate("UPS name in NUT ups@host format")) +host.placeholder = "myupsname" +host.datatype = "string" +host.rmempty = true + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/olsrd.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/olsrd.lua new file mode 100644 index 0000000..950d7a7 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/olsrd.lua @@ -0,0 +1,45 @@ +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("OLSRd Plugin Configuration"), + translate("The OLSRd plugin reads information about meshed networks from the txtinfo plugin of OLSRd.")) + +s = m:section(NamedSection, "collectd_olsrd", "luci_statistics" ) + +enable = s:option(Flag, "enable", translate("Enable this plugin")) +enable.default = 0 + +host = s:option(Value, "Host", translate("Host"), translate("IP or hostname where to get the txtinfo output from")) +host.placeholder = "127.0.0.1" +host.datatype = "host(1)" +host.rmempty = true + +port = s:option(Value, "Port", translate("Port")) +port.placeholder = "2006" +port.datatype = "range(0,65535)" +port.rmempty = true +port.cast = "string" + +cl = s:option(ListValue, "CollectLinks", translate("CollectLinks"), + translate("Specifies what information to collect about links.")) +cl:value("No") +cl:value("Summary") +cl:value("Detail") +cl.default = "Detail" + +cr = s:option(ListValue, "CollectRoutes", translate("CollectRoutes"), + translate("Specifies what information to collect about routes.")) +cr:value("No") +cr:value("Summary") +cr:value("Detail") +cr.default = "Summary" + +ct = s:option(ListValue, "CollectTopology", translate("CollectTopology"), + translate("Specifies what information to collect about the global topology.")) +ct:value("No") +ct:value("Summary") +ct:value("Detail") +ct.default = "Summary" + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua new file mode 100644 index 0000000..193f044 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua @@ -0,0 +1,56 @@ +-- Copyright 2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require "luci.sys" + +local m, s, o + + +m = Map("luci_statistics", + translate("OpenVPN Plugin Configuration"), + translate("The OpenVPN plugin gathers information about the current vpn connection status.")) + +s = m:section( NamedSection, "collectd_openvpn", "luci_statistics" ) + + +o = s:option( Flag, "enable", translate("Enable this plugin") ) +o.default = "0" + + +o = s:option(Flag, "CollectIndividualUsers", translate("Generate a separate graph for each logged user")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(Flag, "CollectUserCount", translate("Aggregate number of connected users")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(Flag, "CollectCompression", translate("Gather compression statistics")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(Flag, "ImprovedNamingSchema", translate("Use improved naming schema")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(DynamicList, "StatusFile", translate("OpenVPN status files")) +o.rmempty = true +o:depends("enable", 1) + +local status_files = nixio.fs.glob("/var/run/openvpn.*.status") +if status_files then + local status_file + for status_file in status_files do + o:value(status_file) + end +end + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/ping.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/ping.lua new file mode 100644 index 0000000..3179da6 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/ping.lua @@ -0,0 +1,35 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("Ping Plugin Configuration"), + translate( + "The ping plugin will send icmp echo replies to selected " .. + "hosts and measure the roundtrip time for each host." + )) + +-- collectd_ping config section +s = m:section( NamedSection, "collectd_ping", "luci_statistics" ) + +-- collectd_ping.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_ping.hosts (Host) +hosts = s:option( Value, "Hosts", translate("Monitor hosts"), translate ("Add multiple hosts separated by space.")) +hosts.default = "127.0.0.1" +hosts:depends( "enable", 1 ) + +-- collectd_ping.ttl (TTL) +ttl = s:option( Value, "TTL", translate("TTL for ping packets") ) +ttl.isinteger = true +ttl.default = 128 +ttl:depends( "enable", 1 ) + +-- collectd_ping.interval (Interval) +interval = s:option( Value, "Interval", translate("Interval for pings"), translate ("Seconds") ) +interval.isinteger = true +interval.default = 30 +interval:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/processes.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/processes.lua new file mode 100644 index 0000000..4171a88 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/processes.lua @@ -0,0 +1,24 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("Processes Plugin Configuration"), + translate( + "The processes plugin collects informations like cpu time, " .. + "page faults and memory usage of selected processes." + )) + +-- collectd_processes config section +s = m:section( NamedSection, "collectd_processes", "luci_statistics" ) + +-- collectd_processes.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_processes.processes (Process) +processes = s:option( Value, "Processes", translate("Monitor processes"), + translate("Processes to monitor separated by space") ) +processes:depends( "enable", 1 ) +processes.default = "uhttpd dropbear dnsmasq" + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/rrdtool.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/rrdtool.lua new file mode 100644 index 0000000..f31fb20 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/rrdtool.lua @@ -0,0 +1,102 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("RRDTool Plugin Configuration"), + translate( + "The rrdtool plugin stores the collected data in rrd database " .. + "files, the foundation of the diagrams.

" .. + "Warning: Setting the wrong values will result in a very " .. + "high memory consumption in the temporary directory. " .. + "This can render the device unusable!" + )) + +-- collectd_rrdtool config section +s = m:section( NamedSection, "collectd_rrdtool", "luci_statistics" ) + +-- collectd_rrdtool.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 1 + +-- collectd_rrdtool.datadir (DataDir) +datadir = s:option( Value, "DataDir", translate("Storage directory") ) +datadir.default = "/tmp" +datadir.rmempty = true +datadir.optional = true +datadir:depends( "enable", 1 ) + +-- collectd_rrdtool.stepsize (StepSize) +stepsize = s:option( Value, "StepSize", + translate("RRD step interval"), translate("Seconds") ) +stepsize.default = 30 +stepsize.isinteger = true +stepsize.rmempty = true +stepsize.optional = true +stepsize:depends( "enable", 1 ) + +-- collectd_rrdtool.heartbeat (HeartBeat) +heartbeat = s:option( Value, "HeartBeat", + translate("RRD heart beat interval"), translate("Seconds") ) +heartbeat.default = 60 +heartbeat.isinteger = true +heartbeat.rmempty = true +heartbeat.optional = true +heartbeat:depends( "enable", 1 ) + +-- collectd_rrdtool.rrasingle (RRASingle) +rrasingle = s:option( Flag, "RRASingle", + translate("Only create average RRAs"), translate("reduces rrd size") ) +rrasingle.default = true +rrasingle:depends( "enable", 1 ) + +-- collectd_rrdtool.rramax (RRAMax) +rramax = s:option( Flag, "RRAMax", + translate("Show max values instead of averages"), + translate("Max values for a period can be used instead of averages when not using 'only average RRAs'") ) +rramax.default = false +rramax.rmempty = true +rramax:depends( "RRASingle", 0 ) + +-- collectd_rrdtool.rratimespans (RRATimespan) +rratimespans = s:option( Value, "RRATimespans", + translate("Stored timespans"), translate("seconds; multiple separated by space") ) +rratimespans.default = "600 86400 604800 2678400 31622400" +rratimespans.rmempty = true +rratimespans.optional = true +rratimespans:depends( "enable", 1 ) + +-- collectd_rrdtool.rrarows (RRARows) +rrarows = s:option( Value, "RRARows", translate("Rows per RRA") ) +rrarows.isinteger = true +rrarows.default = 100 +rrarows.rmempty = true +rrarows.optional = true +rrarows:depends( "enable", 1 ) + +-- collectd_rrdtool.xff (XFF) +xff = s:option( Value, "XFF", translate("RRD XFiles Factor") ) +xff.default = 0.1 +xff.isnumber = true +xff.rmempty = true +xff.optional = true +xff:depends( "enable", 1 ) + +-- collectd_rrdtool.cachetimeout (CacheTimeout) +cachetimeout = s:option( Value, "CacheTimeout", + translate("Cache collected data for"), translate("Seconds") ) +cachetimeout.isinteger = true +cachetimeout.default = 100 +cachetimeout.rmempty = true +cachetimeout.optional = true +cachetimeout:depends( "enable", 1 ) + +-- collectd_rrdtool.cacheflush (CacheFlush) +cacheflush = s:option( Value, "CacheFlush", + translate("Flush cache after"), translate("Seconds") ) +cacheflush.isinteger = true +cacheflush.default = 100 +cacheflush.rmempty = true +cacheflush.optional = true +cacheflush:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua new file mode 100644 index 0000000..77e36bf --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua @@ -0,0 +1,125 @@ +-- Copyright 2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require "luci.sys" + +local m, s, o +local sensor_types = { + ["12v"] = "voltage", + ["2.0v"] = "voltage", + ["2.5v"] = "voltage", + ["3.3v"] = "voltage", + ["5.0v"] = "voltage", + ["5v"] = "voltage", + ["ain1"] = "voltage", + ["ain2"] = "voltage", + ["cpu_temp"] = "temperature", + ["fan1"] = "fanspeed", + ["fan2"] = "fanspeed", + ["fan3"] = "fanspeed", + ["fan4"] = "fanspeed", + ["fan5"] = "fanspeed", + ["fan6"] = "fanspeed", + ["fan7"] = "fanspeed", + ["in0"] = "voltage", + ["in10"] = "voltage", + ["in2"] = "voltage", + ["in3"] = "voltage", + ["in4"] = "voltage", + ["in5"] = "voltage", + ["in6"] = "voltage", + ["in7"] = "voltage", + ["in8"] = "voltage", + ["in9"] = "voltage", + ["power1"] = "power", + ["remote_temp"] = "temperature", + ["temp1"] = "temperature", + ["temp2"] = "temperature", + ["temp3"] = "temperature", + ["temp4"] = "temperature", + ["temp5"] = "temperature", + ["temp6"] = "temperature", + ["temp7"] = "temperature", + ["temp"] = "temperature", + ["vccp1"] = "voltage", + ["vccp2"] = "voltage", + ["vdd"] = "voltage", + ["vid1"] = "voltage", + ["vid2"] = "voltage", + ["vid3"] = "voltage", + ["vid4"] = "voltage", + ["vid5"] = "voltage", + ["vid"] = "voltage", + ["vin1"] = "voltage", + ["vin2"] = "voltage", + ["vin3"] = "voltage", + ["vin4"] = "voltage", + ["volt12"] = "voltage", + ["volt5"] = "voltage", + ["voltbatt"] = "voltage", + ["vrm"] = "voltage" + +} + + +m = Map("luci_statistics", + translate("Sensors Plugin Configuration"), + translate("The sensors plugin uses the Linux Sensors framework to gather environmental statistics.")) + +s = m:section( NamedSection, "collectd_sensors", "luci_statistics" ) + + +o = s:option( Flag, "enable", translate("Enable this plugin") ) +o.default = 0 + + +o = s:option(Flag, "__all", translate("Monitor all sensors")) +o:depends("enable", 1) +o.default = 1 +o.write = function() end +o.cfgvalue = function(self, sid) + local v = self.map:get(sid, "Sensor") + if v == nil or (type(v) == "table" and #v == 0) or (type(v) == "string" and #v == 0) then + return "1" + end +end + + +o = s:option(MultiValue, "Sensor", translate("Sensor list"), translate("Hold Ctrl to select multiple items or to deselect entries.")) +o:depends({enable = 1, __all = "" }) +o.widget = "select" +o.rmempty = true +o.size = 0 + +local sensorcli = io.popen("/usr/sbin/sensors -u -A") +if sensorcli then + local bus, sensor + + while true do + local ln = sensorcli:read("*ln") + if not ln then + break + elseif ln:match("^[%w-]+$") then + bus = ln + elseif ln:match("^[%w-]+:$") then + sensor = ln:sub(0, -2):lower() + if bus and sensor_types[sensor] then + o:value("%s/%s-%s" %{ bus, sensor_types[sensor], sensor }) + o.size = o.size + 1 + end + elseif ln == "" then + bus = nil + sensor = nil + end + end + + sensorcli:close() +end + + +o = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") ) +o.default = 0 +o.rmempty = true +o:depends({ enable = 1, __all = "" }) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/splash_leases.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/splash_leases.lua new file mode 100644 index 0000000..4ddfacc --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/splash_leases.lua @@ -0,0 +1,14 @@ +-- Copyright 2013 Freifunk Augsburg / Michael Wendland +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("Splash Leases Plugin Configuration"), + translate("The splash leases plugin uses libuci to collect statistics about splash leases.")) + +s = m:section( NamedSection, "collectd_splash_leases", "luci_statistics" ) + +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 1 + +return m + diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/tcpconns.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/tcpconns.lua new file mode 100644 index 0000000..3c65018 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/tcpconns.lua @@ -0,0 +1,33 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("TCPConns Plugin Configuration"), + translate( + "The tcpconns plugin collects informations about open tcp " .. + "connections on selected ports." + )) + +-- collectd_tcpconns config section +s = m:section( NamedSection, "collectd_tcpconns", "luci_statistics" ) + +-- collectd_tcpconns.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_tcpconns.listeningports (ListeningPorts) +listeningports = s:option( Flag, "ListeningPorts", translate("Monitor all local listen ports") ) +listeningports.default = 1 +listeningports:depends( "enable", 1 ) + +-- collectd_tcpconns.localports (LocalPort) +localports = s:option( Value, "LocalPorts", translate("Monitor local ports") ) +localports.optional = true +localports:depends( "enable", 1 ) + +-- collectd_tcpconns.remoteports (RemotePort) +remoteports = s:option( Value, "RemotePorts", translate("Monitor remote ports") ) +remoteports.optional = true +remoteports:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/thermal.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/thermal.lua new file mode 100644 index 0000000..bdf41b7 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/thermal.lua @@ -0,0 +1,29 @@ +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("Thermal Plugin Configuration"), + translate("The thermal plugin will monitor temperature of the system. " .. + "Data is typically read from /sys/class/thermal/*/temp " .. + "( '*' denotes the thermal device to be read, e.g. thermal_zone1 )") + ) + +-- collectd_thermal config section +s = m:section( NamedSection, "collectd_thermal", "luci_statistics" ) + +-- collectd_thermal.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_thermal.tz (Device) +tz = s:option( Value, "Device", translate("Monitor device(s) / thermal zone(s)"), + translate("Empty value = monitor all") ) +tz.optional = true +tz:depends( "enable", 1 ) + +-- collectd_thermal.ignoreselected (IgnoreSelected) +ignoreselected = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") ) +ignoreselected.default = 0 +ignoreselected.optional = true +ignoreselected:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/unixsock.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/unixsock.lua new file mode 100644 index 0000000..be79543 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/unixsock.lua @@ -0,0 +1,37 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("Unixsock Plugin Configuration"), + translate( + "The unixsock plugin creates a unix socket which can be used " .. + "to read collected data from a running collectd instance." + )) + +-- collectd_unixsock config section +s = m:section( NamedSection, "collectd_unixsock", "luci_statistics" ) + +-- collectd_unixsock.enable +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +-- collectd_unixsock.socketfile (SocketFile) +socketfile = s:option( Value, "SocketFile" ) +socketfile.default = "/var/run/collect-query.socket" +socketfile:depends( "enable", 1 ) + +-- collectd_unixsock.socketgroup (SocketGroup) +socketgroup = s:option( Value, "SocketGroup" ) +socketgroup.default = "nobody" +socketgroup.rmempty = true +socketgroup.optional = true +socketgroup:depends( "enable", 1 ) + +-- collectd_unixsock.socketperms (SocketPerms) +socketperms = s:option( Value, "SocketPerms" ) +socketperms.default = "0770" +socketperms.rmempty = true +socketperms.optional = true +socketperms:depends( "enable", 1 ) + +return m diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/uptime.lua b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/uptime.lua new file mode 100644 index 0000000..3a6c464 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/uptime.lua @@ -0,0 +1,22 @@ +--[[ + +Copyright 2013 Thomas Endt + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 +]]-- + +m = Map("luci_statistics", + translate("Uptime Plugin Configuration"), + translate("The uptime plugin collects statistics about the uptime of the system.")) + +s = m:section( NamedSection, "collectd_uptime", "luci_statistics" ) + +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +return m + diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/datatree.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/datatree.lua new file mode 100644 index 0000000..806b054 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/datatree.lua @@ -0,0 +1,197 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.datatree", package.seeall) + +local util = require("luci.util") +local sys = require("luci.sys") +local fs = require("nixio.fs") +local uci = require("luci.model.uci").cursor() +local sections = uci:get_all("luci_statistics") + + +Instance = util.class() + +function Instance.__init__( self, host ) + self._host = host or sections.collectd.Hostname or sys.hostname() + self._libdir = sections.collectd.PluginDir or "/usr/lib/collectd" + self._rrddir = sections.collectd_rrdtool.DataDir or "/tmp/rrd" + + self._libdir = self._libdir:gsub("/$","") + self._rrddir = self._rrddir:gsub("/$","") + self._plugins = { } + + self:_scan() +end + +function Instance._mkpath( self, plugin, pinstance ) + local dir = self._rrddir .. "/" .. self._host + + if type(plugin) == "string" and plugin:len() > 0 then + dir = dir .. "/" .. plugin + + if type(pinstance) == "string" and pinstance:len() > 0 then + dir = dir .. "-" .. pinstance + end + end + + return dir +end + +function Instance._ls( self, ... ) + local ditr = fs.dir(self:_mkpath(...)) + if ditr then + local dirs = { } + while true do + local d = ditr() + if not d then break end + dirs[#dirs+1] = d + end + return dirs + end +end + +function Instance._notzero( self, table ) + for k in pairs(table) do + return true + end + + return false +end + +function Instance._scan( self ) + local dirs = self:_ls() + if not dirs then + return + end + +-- for i, plugin in ipairs( dirs ) do +-- if plugin:match("%w+.so") then +-- self._plugins[ plugin:gsub("%.so$", "") ] = { } +-- end +-- end + + for _, dir in ipairs(dirs) do + if dir ~= "." and dir ~= ".." and + fs.stat(self:_mkpath(dir)).type == "dir" + then + local plugin = dir:gsub("%-.+$", "") + if not self._plugins[plugin] then + self._plugins[plugin] = { } + end + end + end + + for plugin, instances in pairs( self._plugins ) do + + local dirs = self:_ls() + + if type(dirs) == "table" then + for i, dir in ipairs(dirs) do + if dir:find( plugin .. "%-" ) or dir == plugin then + local instance = "" + + if dir ~= plugin then + instance = dir:gsub( plugin .. "%-", "", 1 ) + end + + instances[instance] = { } + end + end + end + + for instance, data_instances in pairs( instances ) do + + dirs = self:_ls(plugin, instance) + + if type(dirs) == "table" then + for i, file in ipairs(dirs) do + if file:find("%.rrd") then + file = file:gsub("%.rrd","") + + local data_type + local data_instance + + if file:find("%-") then + data_type = file:gsub( "%-.+","" ) + data_instance = file:gsub( "[^%-]-%-", "", 1 ) + else + data_type = file + data_instance = "" + end + + if not data_instances[data_type] then + data_instances[data_type] = { data_instance } + else + table.insert( data_instances[data_type], data_instance ) + end + end + end + end + end + end +end + + +function Instance.plugins( self ) + local rv = { } + + for plugin, val in pairs( self._plugins ) do + if self:_notzero( val ) then + table.insert( rv, plugin ) + end + end + + return rv +end + +function Instance.plugin_instances( self, plugin ) + local rv = { } + + for instance, val in pairs( self._plugins[plugin] ) do + table.insert( rv, instance ) + end + + return rv +end + +function Instance.data_types( self, plugin, instance ) + local rv = { } + local p = self._plugins[plugin] + + if type(p) == "table" and type(p[instance]) == "table" then + for type, val in pairs(p[instance]) do + table.insert( rv, type ) + end + end + + return rv +end + +function Instance.data_instances( self, plugin, instance, dtype ) + local rv = { } + local p = self._plugins[plugin] + + if type(p) == "table" and type(p[instance]) == "table" and type(p[instance][dtype]) == "table" then + for i, instance in ipairs(p[instance][dtype]) do + table.insert( rv, instance ) + end + end + + return rv +end + +function Instance.host_instances( self ) + local hosts_path = fs.glob(self._rrddir..'/*') + local hosts = { } + + if hosts_path then + local path + for path in hosts_path do + hosts[#hosts+1] = fs.basename(path) + end + end + + return hosts +end + diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/i18n.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/i18n.lua new file mode 100644 index 0000000..7877e61 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/i18n.lua @@ -0,0 +1,80 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.i18n", package.seeall) + +require("luci.util") +require("luci.i18n") + + +Instance = luci.util.class() + + +function Instance.__init__( self, graph ) + self.i18n = luci.i18n + self.graph = graph +end + +function Instance._subst( self, str, val ) + str = str:gsub( "%%H", self.graph.opts.host or "" ) + str = str:gsub( "%%pn", val.plugin or "" ) + str = str:gsub( "%%pi", val.pinst or "" ) + str = str:gsub( "%%dt", val.dtype or "" ) + str = str:gsub( "%%di", val.dinst or "" ) + str = str:gsub( "%%ds", val.dsrc or "" ) + + return str +end + +function Instance.title( self, plugin, pinst, dtype, dinst, user_title ) + + local title = user_title or + "p=%s/pi=%s/dt=%s/di=%s" % { + plugin, + (pinst and #pinst > 0) and pinst or "(nil)", + (dtype and #dtype > 0) and dtype or "(nil)", + (dinst and #dinst > 0) and dinst or "(nil)" + } + + return self:_subst( title, { + plugin = plugin, + pinst = pinst, + dtype = dtype, + dinst = dinst + } ) + +end + +function Instance.label( self, plugin, pinst, dtype, dinst, user_label ) + + local label = user_label or + "dt=%s/di=%s" % { + (dtype and #dtype > 0) and dtype or "(nil)", + (dinst and #dinst > 0) and dinst or "(nil)" + } + + return self:_subst( label, { + plugin = plugin, + pinst = pinst, + dtype = dtype, + dinst = dinst + } ) + +end + +function Instance.ds( self, source ) + + local label = source.title or + "dt=%s/di=%s/ds=%s" % { + (source.type and #source.type > 0) and source.type or "(nil)", + (source.instance and #source.instance > 0) and source.instance or "(nil)", + (source.ds and #source.ds > 0) and source.ds or "(nil)" + } + + return self:_subst( label, { + dtype = source.type, + dinst = source.instance, + dsrc = source.ds + } ):gsub(":", "\\:") + +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua new file mode 100644 index 0000000..4e00e7f --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua @@ -0,0 +1,576 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool", package.seeall) + +require("luci.statistics.datatree") +require("luci.statistics.rrdtool.colors") +require("luci.statistics.i18n") +require("luci.model.uci") +require("luci.util") +require("luci.sys") + +local fs = require "nixio.fs" + + +Graph = luci.util.class() + +function Graph.__init__( self, timespan, opts ) + + opts = opts or { } + + local uci = luci.model.uci.cursor() + local sections = uci:get_all( "luci_statistics" ) + + -- options + opts.timespan = timespan or sections.rrdtool.default_timespan or 900 + opts.rrasingle = opts.rrasingle or ( sections.collectd_rrdtool.RRASingle == "1" ) + opts.rramax = opts.rramax or ( sections.collectd_rrdtool.RRAMax == "1" ) + opts.host = opts.host or sections.collectd.Hostname or luci.sys.hostname() + opts.width = opts.width or sections.rrdtool.image_width or 400 + opts.rrdpath = opts.rrdpath or sections.collectd_rrdtool.DataDir or "/tmp/rrd" + opts.imgpath = opts.imgpath or sections.rrdtool.image_path or "/tmp/rrdimg" + opts.rrdpath = opts.rrdpath:gsub("/$","") + opts.imgpath = opts.imgpath:gsub("/$","") + + -- helper classes + self.colors = luci.statistics.rrdtool.colors.Instance() + self.tree = luci.statistics.datatree.Instance(opts.host) + self.i18n = luci.statistics.i18n.Instance( self ) + + -- rrdtool default args + self.args = { + "-a", "PNG", + "-s", "NOW-" .. opts.timespan, + "-w", opts.width + } + + -- store options + self.opts = opts +end + +function Graph._mkpath( self, plugin, plugin_instance, dtype, dtype_instance ) + local t = self.opts.host .. "/" .. plugin + if type(plugin_instance) == "string" and plugin_instance:len() > 0 then + t = t .. "-" .. plugin_instance + end + t = t .. "/" .. dtype + if type(dtype_instance) == "string" and dtype_instance:len() > 0 then + t = t .. "-" .. dtype_instance + end + return t +end + +function Graph.mkrrdpath( self, ... ) + return string.format( "%s/%s.rrd", self.opts.rrdpath, self:_mkpath( ... ) ) +end + +function Graph.mkpngpath( self, ... ) + return string.format( "%s/%s.%i.png", self.opts.imgpath, self:_mkpath( ... ), self.opts.timespan ) +end + +function Graph.strippngpath( self, path ) + return path:sub( self.opts.imgpath:len() + 2 ) +end + +function Graph._forcelol( self, list ) + if type(list[1]) ~= "table" then + return( { list } ) + end + return( list ) +end + +function Graph._rrdtool( self, def, rrd ) + + -- prepare directory + local dir = def[1]:gsub("/[^/]+$","") + fs.mkdirr( dir ) + + -- construct commandline + local cmdline = "rrdtool graph" + + -- copy default arguments to def stack + for i, opt in ipairs(self.args) do + table.insert( def, 1 + i, opt ) + end + + -- construct commandline from def stack + for i, opt in ipairs(def) do + opt = opt .. "" -- force string + + if rrd then + opt = opt:gsub( "{file}", rrd ) + end + + if opt:match("[^%w]") then + cmdline = cmdline .. " '" .. opt .. "'" + else + cmdline = cmdline .. " " .. opt + end + end + + -- execute rrdtool + local rrdtool = io.popen( cmdline ) + rrdtool:close() +end + +function Graph._generic( self, opts, plugin, plugin_instance, dtype, index ) + + -- generated graph defs + local defs = { } + + -- internal state variables + local _args = { } + local _sources = { } + local _stack_neg = { } + local _stack_pos = { } + local _longest_name = 0 + local _has_totals = false + + -- some convenient aliases + local _ti = table.insert + local _sf = string.format + + -- local helper: append a string.format() formatted string to given table + function _tif( list, fmt, ... ) + table.insert( list, string.format( fmt, ... ) ) + end + + -- local helper: create definitions for min, max, avg and create *_nnl (not null) variable from avg + function __def(source) + + local inst = source.sname + local rrd = source.rrd + local ds = source.ds + + if not ds or ds:len() == 0 then ds = "value" end + + _tif( _args, "DEF:%s_avg_raw=%s:%s:AVERAGE", inst, rrd, ds ) + _tif( _args, "CDEF:%s_avg=%s_avg_raw,%s", inst, inst, source.transform_rpn ) + + if not self.opts.rrasingle then + _tif( _args, "DEF:%s_min_raw=%s:%s:MIN", inst, rrd, ds ) + _tif( _args, "CDEF:%s_min=%s_min_raw,%s", inst, inst, source.transform_rpn ) + _tif( _args, "DEF:%s_max_raw=%s:%s:MAX", inst, rrd, ds ) + _tif( _args, "CDEF:%s_max=%s_max_raw,%s", inst, inst, source.transform_rpn ) + end + + _tif( _args, "CDEF:%s_nnl=%s_avg,UN,0,%s_avg,IF", inst, inst, inst ) + end + + -- local helper: create cdefs depending on source options like flip and overlay + function __cdef(source) + + local prev + + -- find previous source, choose stack depending on flip state + if source.flip then + prev = _stack_neg[#_stack_neg] + else + prev = _stack_pos[#_stack_pos] + end + + -- is first source in stack or overlay source: source_stk = source_nnl + if not prev or source.overlay then + if self.opts.rrasingle or not self.opts.rramax then + -- create cdef statement for cumulative stack (no NaNs) and also + -- for display (preserving NaN where no points should be displayed) + _tif( _args, "CDEF:%s_stk=%s_nnl", source.sname, source.sname ) + _tif( _args, "CDEF:%s_plot=%s_avg", source.sname, source.sname ) + else + -- create cdef statement for cumulative stack (no NaNs) and also + -- for display (preserving NaN where no points should be displayed) + _tif( _args, "CDEF:%s_stk=%s_nnl", source.sname, source.sname ) + _tif( _args, "CDEF:%s_plot=%s_max", source.sname, source.sname ) + end + + -- is subsequent source without overlay: source_stk = source_nnl + previous_stk + else + if self.opts.rrasingle or not self.opts.rramax then + -- create cdef statement + _tif( _args, "CDEF:%s_stk=%s_nnl,%s_stk,+", source.sname, source.sname, prev ) + _tif( _args, "CDEF:%s_plot=%s_avg,%s_stk,+", source.sname, source.sname, prev ) + else + -- create cdef statement + _tif( _args, "CDEF:%s_stk=%s_nnl,%s_stk,+", source.sname, source.sname, prev ) + _tif( _args, "CDEF:%s_plot=%s_max,%s_stk,+", source.sname, source.sname, prev ) + end + end + + -- create multiply by minus one cdef if flip is enabled + if source.flip then + + -- create cdef statement: source_stk = source_stk * -1 + _tif( _args, "CDEF:%s_neg=%s_plot,-1,*", source.sname, source.sname ) + + -- push to negative stack if overlay is disabled + if not source.overlay then + _ti( _stack_neg, source.sname ) + end + + -- no flipping, push to positive stack if overlay is disabled + elseif not source.overlay then + + -- push to positive stack + _ti( _stack_pos, source.sname ) + end + + -- calculate total amount of data if requested + if source.total then + _tif( _args, + "CDEF:%s_avg_sample=%s_avg,UN,0,%s_avg,IF,sample_len,*", + source.sname, source.sname, source.sname + ) + + _tif( _args, + "CDEF:%s_avg_sum=PREV,UN,0,PREV,IF,%s_avg_sample,+", + source.sname, source.sname, source.sname + ) + end + end + + -- local helper: create cdefs required for calculating total values + function __cdef_totals() + if _has_totals then + _tif( _args, "CDEF:mytime=%s_avg,TIME,TIME,IF", _sources[1].sname ) + _ti( _args, "CDEF:sample_len_raw=mytime,PREV(mytime),-" ) + _ti( _args, "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF" ) + end + end + + -- local helper: create line and area statements + function __line(source) + + local line_color + local area_color + local legend + local var + + -- find colors: try source, then opts.colors; fall back to random color + if type(source.color) == "string" then + line_color = source.color + area_color = self.colors:from_string( line_color ) + elseif type(opts.colors[source.name:gsub("[^%w]","_")]) == "string" then + line_color = opts.colors[source.name:gsub("[^%w]","_")] + area_color = self.colors:from_string( line_color ) + else + area_color = self.colors:random() + line_color = self.colors:to_string( area_color ) + end + + -- derive area background color from line color + area_color = self.colors:to_string( self.colors:faded( area_color ) ) + + -- choose source_plot or source_neg variable depending on flip state + if source.flip then + var = "neg" + else + var = "plot" + end + + -- create legend + legend = _sf( "%-" .. _longest_name .. "s", source.title ) + + -- create area if not disabled + if not source.noarea then + _tif( _args, "AREA:%s_%s#%s", source.sname, var, area_color ) + end + + -- create line1 statement + _tif( _args, "LINE%d:%s_%s#%s:%s", + source.noarea and 2 or 1, + source.sname, var, line_color, legend ) + end + + -- local helper: create gprint statements + function __gprint(source) + + local numfmt = opts.number_format or "%6.1lf" + local totfmt = opts.totals_format or "%5.1lf%s" + + -- don't include MIN if rrasingle is enabled + if not self.opts.rrasingle then + _tif( _args, "GPRINT:%s_min:MIN:\tMin\\: %s", source.sname, numfmt ) + end + + -- always include AVERAGE + _tif( _args, "GPRINT:%s_avg:AVERAGE:\tAvg\\: %s", source.sname, numfmt ) + + -- don't include MAX if rrasingle is enabled + if not self.opts.rrasingle then + _tif( _args, "GPRINT:%s_max:MAX:\tMax\\: %s", source.sname, numfmt ) + end + + -- include total count if requested else include LAST + if source.total then + _tif( _args, "GPRINT:%s_avg_sum:LAST:(ca. %s Total)\\l", source.sname, totfmt ) + else + _tif( _args, "GPRINT:%s_avg:LAST:\tLast\\: %s\\l", source.sname, numfmt ) + end + end + + + -- + -- find all data sources + -- + + -- find data types + local data_types + + if dtype then + data_types = { dtype } + else + data_types = opts.data.types or { } + end + + if not ( dtype or opts.data.types ) then + if opts.data.instances then + for k, v in pairs(opts.data.instances) do + _ti( data_types, k ) + end + elseif opts.data.sources then + for k, v in pairs(opts.data.sources) do + _ti( data_types, k ) + end + end + end + + + -- iterate over data types + for i, dtype in ipairs(data_types) do + + -- find instances + + local data_instances + + if not opts.per_instance then + if type(opts.data.instances) == "table" and type(opts.data.instances[dtype]) == "table" then + data_instances = opts.data.instances[dtype] + else + data_instances = self.tree:data_instances( plugin, plugin_instance, dtype ) + end + end + + if type(data_instances) ~= "table" or #data_instances == 0 then data_instances = { "" } end + + + -- iterate over data instances + for i, dinst in ipairs(data_instances) do + + -- construct combined data type / instance name + local dname = dtype + + if dinst:len() > 0 then + dname = dname .. "_" .. dinst + end + + + -- find sources + local data_sources = { "value" } + + if type(opts.data.sources) == "table" then + if type(opts.data.sources[dname]) == "table" then + data_sources = opts.data.sources[dname] + elseif type(opts.data.sources[dtype]) == "table" then + data_sources = opts.data.sources[dtype] + end + end + + + -- iterate over data sources + for i, dsource in ipairs(data_sources) do + + local dsname = dtype .. "_" .. dinst:gsub("[^%w]","_") .. "_" .. dsource + local altname = dtype .. "__" .. dsource + + --assert(dtype ~= "ping", dsname .. " or " .. altname) + + -- find datasource options + local dopts = { } + + if type(opts.data.options) == "table" then + if type(opts.data.options[dsname]) == "table" then + dopts = opts.data.options[dsname] + elseif type(opts.data.options[altname]) == "table" then + dopts = opts.data.options[altname] + elseif type(opts.data.options[dname]) == "table" then + dopts = opts.data.options[dname] + elseif type(opts.data.options[dtype]) == "table" then + dopts = opts.data.options[dtype] + end + end + + + -- store values + _ti( _sources, { + rrd = dopts.rrd or self:mkrrdpath( plugin, plugin_instance, dtype, dinst ), + color = dopts.color or self.colors:to_string( self.colors:random() ), + flip = dopts.flip or false, + total = dopts.total or false, + overlay = dopts.overlay or false, + transform_rpn = dopts.transform_rpn or "0,+", + noarea = dopts.noarea or false, + title = dopts.title or nil, + weight = dopts.weight or nil, + ds = dsource, + type = dtype, + instance = dinst, + index = #_sources + 1, + sname = ( #_sources + 1 ) .. dtype + } ) + + + -- generate datasource title + _sources[#_sources].title = self.i18n:ds( _sources[#_sources] ) + + + -- find longest name ... + if _sources[#_sources].title:len() > _longest_name then + _longest_name = _sources[#_sources].title:len() + end + + + -- has totals? + if _sources[#_sources].total then + _has_totals = true + end + end + end + end + + + -- + -- construct diagrams + -- + + -- if per_instance is enabled then find all instances from the first datasource in diagram + -- if per_instance is disabled then use an empty pseudo instance and use model provided values + local instances = { "" } + + if opts.per_instance then + instances = self.tree:data_instances( plugin, plugin_instance, _sources[1].type ) + end + + + -- iterate over instances + for i, instance in ipairs(instances) do + + -- store title and vlabel + _ti( _args, "-t" ) + _ti( _args, self.i18n:title( plugin, plugin_instance, _sources[1].type, instance, opts.title ) ) + _ti( _args, "-v" ) + _ti( _args, self.i18n:label( plugin, plugin_instance, _sources[1].type, instance, opts.vlabel ) ) + if opts.y_max then + _ti ( _args, "-u" ) + _ti ( _args, opts.y_max ) + end + if opts.y_min then + _ti ( _args, "-l" ) + _ti ( _args, opts.y_min ) + end + if opts.units_exponent then + _ti ( _args, "-X" ) + _ti ( _args, opts.units_exponent ) + end + if opts.alt_autoscale then + _ti ( _args, "-A" ) + end + if opts.alt_autoscale_max then + _ti ( _args, "-M" ) + end + + -- store additional rrd options + if opts.rrdopts then + for i, o in ipairs(opts.rrdopts) do _ti( _args, o ) end + end + + -- sort sources + table.sort(_sources, function(a, b) + local x = a.weight or a.index or 0 + local y = b.weight or b.index or 0 + return x < y + end) + + -- create DEF statements for each instance + for i, source in ipairs(_sources) do + -- fixup properties for per instance mode... + if opts.per_instance then + source.instance = instance + source.rrd = self:mkrrdpath( plugin, plugin_instance, source.type, instance ) + end + + __def( source ) + end + + -- create CDEF required for calculating totals + __cdef_totals() + + -- create CDEF statements for each instance in reversed order + for i, source in ipairs(_sources) do + __cdef( _sources[1 + #_sources - i] ) + end + + -- create LINE1, AREA and GPRINT statements for each instance + for i, source in ipairs(_sources) do + __line( source ) + __gprint( source ) + end + + -- prepend image path to arg stack + _ti( _args, 1, self:mkpngpath( plugin, plugin_instance, index .. instance ) ) + + -- push arg stack to definition list + _ti( defs, _args ) + + -- reset stacks + _args = { } + _stack_pos = { } + _stack_neg = { } + end + + return defs +end + +function Graph.render( self, plugin, plugin_instance, is_index ) + + dtype_instances = dtype_instances or { "" } + local pngs = { } + + -- check for a whole graph handler + local plugin_def = "luci.statistics.rrdtool.definitions." .. plugin + local stat, def = pcall( require, plugin_def ) + + if stat and def and type(def.rrdargs) == "function" then + + -- temporary image matrix + local _images = { } + + -- get diagram definitions + for i, opts in ipairs( self:_forcelol( def.rrdargs( self, plugin, plugin_instance, nil, is_index ) ) ) do + if not is_index or not opts.detail then + _images[i] = { } + + -- get diagram definition instances + local diagrams = self:_generic( opts, plugin, plugin_instance, nil, i ) + + -- render all diagrams + for j, def in ipairs( diagrams ) do + -- remember image + _images[i][j] = def[1] + + -- exec + self:_rrdtool( def ) + end + end + end + + -- remember images - XXX: fixme (will cause probs with asymmetric data) + for y = 1, #_images[1] do + for x = 1, #_images do + table.insert( pngs, _images[x][y] ) + end + end + end + + return pngs +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/colors.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/colors.lua new file mode 100644 index 0000000..5b35dff --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/colors.lua @@ -0,0 +1,61 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.colors", package.seeall) + +require("luci.util") + + +Instance = luci.util.class() + +function Instance.from_string( self, s ) + return { + tonumber(s:sub(1,2), 16), + tonumber(s:sub(3,4), 16), + tonumber(s:sub(5,6), 16) + } +end + +function Instance.to_string( self, c ) + return string.format( + "%02x%02x%02x", + math.floor(c[1]), + math.floor(c[2]), + math.floor(c[3]) + ) +end + +function Instance.random( self ) + local r = math.random(255) + local g = math.random(255) + local min = 0 + local max = 255 + + if ( r + g ) < 255 then + min = 255 - r - g + else + max = 511 - r - g + end + + local b = min + math.floor( math.random() * ( max - min ) ) + + return { r, g, b } +end + +function Instance.faded( self, fg, opts ) + opts = opts or {} + opts.background = opts.background or { 255, 255, 255 } + opts.alpha = opts.alpha or 0.25 + + if type(opts.background) == "string" then + opts.background = _string_to_color(opts.background) + end + + local bg = opts.background + + return { + ( opts.alpha * fg[1] ) + ( ( 1.0 - opts.alpha ) * bg[1] ), + ( opts.alpha * fg[2] ) + ( ( 1.0 - opts.alpha ) * bg[2] ), + ( opts.alpha * fg[3] ) + ( ( 1.0 - opts.alpha ) * bg[3] ) + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/conntrack.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/conntrack.lua new file mode 100644 index 0000000..fbc4773 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/conntrack.lua @@ -0,0 +1,27 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.conntrack",package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + return { + title = "%H: Conntrack entries", + vlabel = "Count", + number_format = "%5.0lf", + data = { + -- collectd 5.5+: specify "" to exclude "max" instance + instances = { + conntrack = { "" } + }, + sources = { + conntrack = { "value" } + }, + options = { + conntrack = { + color = "0000ff", + title = "Tracked connections" + } + } + } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua new file mode 100644 index 0000000..ae0c0ce --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua @@ -0,0 +1,31 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.cpu",package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Processor usage on core #%pi", + y_min = "0", + alt_autoscale_max = true, + vlabel = "Percent", + number_format = "%5.1lf%%", + data = { + instances = { + cpu = { "user", "nice", "system", "softirq", "interrupt" } + }, + + options = { + cpu_idle = { color = "ffffff", title = "Idle" }, + cpu_nice = { color = "00e000", title = "Nice" }, + cpu_user = { color = "0000ff", title = "User" }, + cpu_wait = { color = "ffb000", title = "Wait" }, + cpu_system = { color = "ff0000", title = "System" }, + cpu_softirq = { color = "ff00ff", title = "Softirq" }, + cpu_interrupt = { color = "a000a0", title = "Interrupt" }, + cpu_steal = { color = "000000", title = "Steal" } + } + } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpufreq.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpufreq.lua new file mode 100644 index 0000000..25a72d2 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpufreq.lua @@ -0,0 +1,25 @@ +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.cpufreq",package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Processor frequency", + alt_autoscale = true, + vlabel = "Frequency (Hz)", + number_format = "%3.2lf%s", + data = { + sources = { + cpufreq = { "" } + }, + options = { + cpufreq_0 = { color = "ff0000", title = "Core 0", noarea=true, overlay=true }, + cpufreq_1 = { color = "0000ff", title = "Core 1", noarea=true, overlay=true }, + cpufreq_2 = { color = "00ff00", title = "Core 2", noarea=true, overlay=true }, + cpufreq_3 = { color = "00ffff", title = "Core 3", noarea=true, overlay=true } + } + } + } +end + diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/df.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/df.lua new file mode 100644 index 0000000..b5633c1 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/df.lua @@ -0,0 +1,39 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.df", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Disk space usage on %pi", + vlabel = "Bytes", + number_format = "%5.1lf%sB", + + data = { + instances = { + df_complex = { "free", "used", "reserved" } + }, + + options = { + df_complex_free = { + color = "00ff00", + overlay = false, + title = "free" + }, + + df_complex_used = { + color = "ff0000", + overlay = false, + title = "used" + }, + + df_complex_reserved = { + color = "0000ff", + overlay = false, + title = "reserved" + } + } + } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/disk.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/disk.lua new file mode 100644 index 0000000..8aabb7f --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/disk.lua @@ -0,0 +1,62 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.disk", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + return { + { + title = "%H: Disk I/O operations on %pi", + vlabel = "Operations/s", + number_format = "%5.1lf%sOp/s", + + data = { + types = { "disk_ops" }, + sources = { + disk_ops = { "read", "write" }, + }, + + options = { + disk_ops__read = { + title = "Reads", + color = "00ff00", + flip = false + }, + + disk_ops__write = { + title = "Writes", + color = "ff0000", + flip = true + } + } + } + }, + + { + title = "%H: Disk I/O bandwidth on %pi", + vlabel = "Bytes/s", + number_format = "%5.1lf%sB/s", + + detail = true, + + data = { + types = { "disk_octets" }, + sources = { + disk_octets = { "read", "write" } + }, + options = { + disk_octets__read = { + title = "Read", + color = "00ff00", + flip = false + }, + disk_octets__write = { + title = "Write", + color = "ff0000", + flip = true + } + } + } + } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/dns.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/dns.lua new file mode 100644 index 0000000..cf96d8f --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/dns.lua @@ -0,0 +1,71 @@ +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.dns", package.seeall) + +function rrdargs( graph, plugin, plugin_instance ) + + local traffic = { + title = "%H: DNS traffic", vlabel = "Bit/s", + + data = { + sources = { + dns_octets = { "queries", "responses" } + }, + + options = { + dns_octets__responses = { + total = true, + color = "00ff00", + title = "Responses" + }, + + dns_octets__queries = { + total = true, + color = "0000ff", + title = "Queries" + } + } + } + } + + local opcode_query = { + title = "%H: DNS Opcode Query", vlabel = "Queries/s", + data = { + instances = { dns_opcode = { "Query" } }, + options = { + dns_opcode_Query_value = { + total = true, + color = "0000ff", + title = "Queries/s" + }, + } + } + } + + local qtype = { + title = "%H: DNS QType", vlabel = "Queries/s", + data = { + sources = { dns_qtype = { "" } }, + options = { + dns_qtype_AAAA_ = { title = "AAAA", noarea = true, total = true }, + dns_qtype_A_ = { title = "A", noarea = true, total = true }, + dns_qtype_A6_ = { title = "A6", noarea = true, total = true }, + dns_qtype_TXT_ = { title = "TXT", noarea = true, total = true }, + dns_qtype_MX_ = { title = "MX", noarea = true, total = true }, + dns_qtype_NS_ = { title = "NS", noarea = true, total = true }, + dns_qtype_ANY_ = { title = "ANY", noarea = true, total = true }, + dns_qtype_CNAME_= { title = "CNAME", noarea = true, total = true }, + dns_qtype_SOA_ = { title = "SOA", noarea = true, total = true }, + dns_qtype_SRV_ = { title = "SRV", noarea = true, total = true }, + dns_qtype_PTR_ = { title = "PTR", noarea = true, total = true }, + dns_qtype_RP_ = { title = "RP", noarea = true, total = true }, + dns_qtype_MAILB_= { title = "MAILB", noarea = true, total = true }, + dns_qtype_IXFR_ = { title = "IXFR", noarea = true, total = true }, + dns_qtype_HINFO_= { title = "HINFO", noarea = true, total = true }, + }, + } + } + + return { traffic, opcode_query, qtype } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/entropy.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/entropy.lua new file mode 100644 index 0000000..3d30a70 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/entropy.lua @@ -0,0 +1,19 @@ +-- Copyright 2015 Hannu Nyman +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.entropy", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Available entropy", + vlabel = "bits", + number_format = "%4.0lf", + data = { + types = { "entropy" }, + options = { entropy = { title = "Entropy %di" } } + } + } + +end + diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua new file mode 100644 index 0000000..6f687d2 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua @@ -0,0 +1,109 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.interface", package.seeall) + +function rrdargs( graph, plugin, plugin_instance ) + + -- + -- traffic diagram + -- + local traffic = { + + -- draw this diagram for each plugin instance + per_instance = true, + title = "%H: Transfer on %pi", + vlabel = "Bytes/s", + + -- diagram data description + data = { + -- defined sources for data types, if ommitted assume a single DS named "value" (optional) + sources = { + if_octets = { "tx", "rx" } + }, + + -- special options for single data lines + options = { + if_octets__tx = { + total = true, -- report total amount of bytes + color = "00ff00", -- tx is green + title = "Bytes (TX)" + }, + + if_octets__rx = { + flip = true, -- flip rx line + total = true, -- report total amount of bytes + color = "0000ff", -- rx is blue + title = "Bytes (RX)" + } + } + } + } + + + -- + -- packet diagram + -- + local packets = { + + -- draw this diagram for each plugin instance + per_instance = true, + title = "%H: Packets on %pi", + vlabel = "Packets/s", + + -- diagram data description + data = { + -- data type order + types = { "if_packets", "if_errors" }, + + -- defined sources for data types + sources = { + if_packets = { "tx", "rx" }, + if_errors = { "tx", "rx" } + }, + + -- special options for single data lines + options = { + -- processed packets (tx DS) + if_packets__tx = { + weight = 1, + overlay = true, -- don't summarize + total = true, -- report total amount of bytes + color = "00ff00", -- processed tx is green + title = "Processed (TX)" + }, + + -- processed packets (rx DS) + if_packets__rx = { + weight = 2, + overlay = true, -- don't summarize + flip = true, -- flip rx line + total = true, -- report total amount of bytes + color = "0000ff", -- processed rx is blue + title = "Processed (RX)" + }, + + -- packet errors (tx DS) + if_errors__tx = { + weight = 0, + overlay = true, -- don't summarize + total = true, -- report total amount of packets + color = "ff5500", -- tx errors are orange + title = "Errors (TX)" + }, + + -- packet errors (rx DS) + if_errors__rx = { + weight = 3, + overlay = true, -- don't summarize + flip = true, -- flip rx line + total = true, -- report total amount of packets + color = "ff0000", -- rx errors are red + title = "Errors (RX)" + } + } + } + } + + return { traffic, packets } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iptables.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iptables.lua new file mode 100644 index 0000000..9790e0e --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iptables.lua @@ -0,0 +1,41 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.iptables", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + { + title = "%H: Firewall: Processed bytes in %pi", + vlabel = "Bytes/s", + number_format = "%5.0lf%sB/s", + totals_format = "%5.0lf%sB", + data = { + types = { "ipt_bytes" }, + options = { + ipt_bytes = { + total = true, + title = "%di" + } + } + } + }, + + { + title = "%H: Firewall: Processed packets in %pi", + vlabel = "Packets/s", + number_format = "%5.1lf P/s", + totals_format = "%5.0lf%s", + data = { + types = { "ipt_packets" }, + options = { + ipt_packets = { + total = true, + title = "%di" + } + } + } + } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/irq.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/irq.lua new file mode 100644 index 0000000..f61d0da --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/irq.lua @@ -0,0 +1,18 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.irq", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Interrupts", vlabel = "Issues/s", + number_format = "%5.0lf", data = { + types = { "irq" }, + options = { + irq = { title = "IRQ %di", noarea = true } + } + } + } + +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua new file mode 100644 index 0000000..194afd6 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua @@ -0,0 +1,92 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.iwinfo", package.seeall) + +function rrdargs( graph, plugin, plugin_instance ) + + -- + -- signal/noise diagram + -- + local snr = { + title = "%H: Signal and noise on %pi", + vlabel = "dBm", + number_format = "%5.1lf dBm", + data = { + types = { "signal_noise", "signal_power" }, + options = { + signal_power = { + title = "Signal", + overlay = true, + color = "0000ff" + }, + signal_noise = { + title = "Noise", + overlay = true, + color = "ff0000" + } + } + } + } + + + -- + -- signal quality diagram + -- + local quality = { + title = "%H: Signal quality on %pi", + vlabel = "Quality", + number_format = "%3.0lf", + data = { + types = { "signal_quality" }, + options = { + signal_quality = { + title = "Quality", + noarea = true, + color = "0000ff" + } + } + } + } + + + -- + -- phy rate diagram + -- + local bitrate = { + title = "%H: Average phy rate on %pi", + vlabel = "MBit/s", + number_format = "%5.1lf%sBit/s", + data = { + types = { "bitrate" }, + options = { + bitrate = { + title = "Rate", + color = "00ff00" + } + } + } + } + + -- + -- associated stations + -- + local stations = { + title = "%H: Associated stations on %pi", + vlabel = "Stations", + y_min = "0", + alt_autoscale_max = true, + number_format = "%3.0lf", + data = { + types = { "stations" }, + options = { + stations = { + title = "Stations", + color = "0000ff" + } + } + } + } + + return { snr, quality, bitrate, stations } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/load.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/load.lua new file mode 100644 index 0000000..ce762da --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/load.lua @@ -0,0 +1,24 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.load", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Load", vlabel = "Load", + y_min = "0", + units_exponent = "0", + number_format = "%5.2lf", data = { + sources = { + load = { "shortterm", "midterm", "longterm" } + }, + + options = { + load__shortterm = { color = "ff0000", title = "1 minute", noarea = true }, + load__midterm = { color = "ff6600", title = "5 minutes", noarea = true }, + load__longterm = { color = "ffaa00", title = "15 minutes", noarea = true } + } + } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/memory.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/memory.lua new file mode 100644 index 0000000..53d559c --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/memory.lua @@ -0,0 +1,35 @@ +--[[ + +(c) 2011 Manuel Munz + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 +]]-- + +module("luci.statistics.rrdtool.definitions.memory",package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Memory usage", + vlabel = "MB", + number_format = "%5.1lf%s", + y_min = "0", + alt_autoscale_max = true, + data = { + instances = { + memory = { "free", "buffered", "cached", "used" } + }, + + options = { + memory_buffered = { color = "0000ff", title = "Buffered" }, + memory_cached = { color = "ff00ff", title = "Cached" }, + memory_used = { color = "ff0000", title = "Used" }, + memory_free = { color = "00ff00", title = "Free" } + } + } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua new file mode 100644 index 0000000..7b6acf3 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua @@ -0,0 +1,211 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.netlink", package.seeall) + +function rrdargs( graph, plugin, plugin_instance ) + + -- + -- traffic diagram + -- + local traffic = { + title = "%H: Netlink - Transfer on %pi", + vlabel = "Bytes/s", + + -- diagram data description + data = { + -- defined sources for data types, if ommitted assume a single DS named "value" (optional) + sources = { + if_octets = { "tx", "rx" } + }, + + -- special options for single data lines + options = { + if_octets__tx = { + title = "Bytes (TX)", + total = true, -- report total amount of bytes + color = "00ff00" -- tx is green + }, + + if_octets__rx = { + title = "Bytes (RX)", + flip = true, -- flip rx line + total = true, -- report total amount of bytes + color = "0000ff" -- rx is blue + } + } + } + } + + + -- + -- packet diagram + -- + local packets = { + title = "%H: Netlink - Packets on %pi", + vlabel = "Packets/s", detail = true, + + -- diagram data description + data = { + -- data type order + types = { "if_packets", "if_dropped", "if_errors" }, + + -- defined sources for data types + sources = { + if_packets = { "tx", "rx" }, + if_dropped = { "tx", "rx" }, + if_errors = { "tx", "rx" } + }, + + -- special options for single data lines + options = { + -- processed packets (tx DS) + if_packets__tx = { + weight = 2, + title = "Total (TX)", + overlay = true, -- don't summarize + total = true, -- report total amount of bytes + color = "00ff00" -- processed tx is green + }, + + -- processed packets (rx DS) + if_packets__rx = { + weight = 3, + title = "Total (RX)", + overlay = true, -- don't summarize + flip = true, -- flip rx line + total = true, -- report total amount of bytes + color = "0000ff" -- processed rx is blue + }, + + -- dropped packets (tx DS) + if_dropped__tx = { + weight = 1, + title = "Dropped (TX)", + overlay = true, -- don't summarize + total = true, -- report total amount of bytes + color = "660055" -- dropped tx is ... dunno ;) + }, + + -- dropped packets (rx DS) + if_dropped__rx = { + weight = 4, + title = "Dropped (RX)", + overlay = true, -- don't summarize + flip = true, -- flip rx line + total = true, -- report total amount of bytes + color = "ff00ff" -- dropped rx is violett + }, + + -- packet errors (tx DS) + if_errors__tx = { + weight = 0, + title = "Errors (TX)", + overlay = true, -- don't summarize + total = true, -- report total amount of packets + color = "ff5500" -- tx errors are orange + }, + + -- packet errors (rx DS) + if_errors__rx = { + weight = 5, + title = "Errors (RX)", + overlay = true, -- don't summarize + flip = true, -- flip rx line + total = true, -- report total amount of packets + color = "ff0000" -- rx errors are red + } + } + } + } + + + -- + -- multicast diagram + -- + local multicast = { + title = "%H: Netlink - Multicast on %pi", + vlabel = "Packets/s", detail = true, + + -- diagram data description + data = { + -- data type order + types = { "if_multicast" }, + + -- special options for single data lines + options = { + -- multicast packets + if_multicast = { + title = "Packets", + total = true, -- report total amount of packets + color = "0000ff" -- multicast is blue + } + } + } + } + + + -- + -- collision diagram + -- + local collisions = { + title = "%H: Netlink - Collisions on %pi", + vlabel = "Collisions/s", detail = true, + + -- diagram data description + data = { + -- data type order + types = { "if_collisions" }, + + -- special options for single data lines + options = { + -- collision rate + if_collisions = { + title = "Collisions", + total = true, -- report total amount of packets + color = "ff0000" -- collsions are red + } + } + } + } + + + -- + -- error diagram + -- + local errors = { + title = "%H: Netlink - Errors on %pi", + vlabel = "Errors/s", detail = true, + + -- diagram data description + data = { + -- data type order + types = { "if_tx_errors", "if_rx_errors" }, + + -- data type instances + instances = { + if_tx_errors = { "aborted", "carrier", "fifo", "heartbeat", "window" }, + if_rx_errors = { "length", "missed", "over", "crc", "fifo", "frame" } + }, + + -- special options for single data lines + options = { + if_tx_errors_aborted_value = { total = true, color = "ffff00", title = "Aborted (TX)" }, + if_tx_errors_carrier_value = { total = true, color = "ffcc00", title = "Carrier (TX)" }, + if_tx_errors_fifo_value = { total = true, color = "ff9900", title = "Fifo (TX)" }, + if_tx_errors_heartbeat_value = { total = true, color = "ff6600", title = "Heartbeat (TX)" }, + if_tx_errors_window_value = { total = true, color = "ff3300", title = "Window (TX)" }, + + if_rx_errors_length_value = { flip = true, total = true, color = "ff0000", title = "Length (RX)" }, + if_rx_errors_missed_value = { flip = true, total = true, color = "ff0033", title = "Missed (RX)" }, + if_rx_errors_over_value = { flip = true, total = true, color = "ff0066", title = "Over (RX)" }, + if_rx_errors_crc_value = { flip = true, total = true, color = "ff0099", title = "CRC (RX)" }, + if_rx_errors_fifo_value = { flip = true, total = true, color = "ff00cc", title = "Fifo (RX)" }, + if_rx_errors_frame_value = { flip = true, total = true, color = "ff00ff", title = "Frame (RX)" } + } + } + } + + + return { traffic, packets, multicast, collisions, errors } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua new file mode 100644 index 0000000..dd93196 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua @@ -0,0 +1,117 @@ +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.nut",package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + local voltages = { + title = "%H: Voltages on UPS \"%pi\"", + vlabel = "V", + number_format = "%5.1lfV", + data = { + instances = { + voltage = { "battery", "input", "output" } + }, + + options = { + voltage_output = { color = "00e000", title = "Output voltage", noarea=true, overlay=true }, + voltage_battery = { color = "0000ff", title = "Battery voltage", noarea=true, overlay=true }, + voltage_input = { color = "ffb000", title = "Input voltage", noarea=true, overlay=true } + } + } + } + + local currents = { + title = "%H: Current on UPS \"%pi\"", + vlabel = "A", + number_format = "%5.3lfA", + data = { + instances = { + current = { "battery", "output" } + }, + + options = { + current_output = { color = "00e000", title = "Output current", noarea=true, overlay=true }, + current_battery = { color = "0000ff", title = "Battery current", noarea=true, overlay=true } + } + } + } + + local percentage = { + title = "%H: Battery charge/load on UPS \"%pi\"", + vlabel = "Percent", + y_min = "0", + y_max = "100", + number_format = "%5.1lf%%", + data = { + instances = { + percent = { "charge", "load" } + }, + options = { + percent_charge = { color = "00ff00", title = "Charge level" }, + percent_load = { color = "ff0000", title = "Load" } + } + } + } + + -- Note: This is in ISO8859-1 for rrdtool. Welcome to the 20th century. + local temperature = { + title = "%H: Battery temperature on UPS \"%pi\"", + vlabel = "\176C", + number_format = "%5.1lf\176C", + data = { + instances = { + temperature = "battery" + }, + + options = { + temperature_battery = { color = "ffb000", title = "Battery temperature" } + } + } + } + + local timeleft = { + title = "%H: Time left on UPS \"%pi\"", + vlabel = "Minutes", + number_format = "%.1lfm", + data = { + instances = { + timeleft = { "battery" } + }, + options = { + timeleft_battery = { color = "0000ff", title = "Time left", transform_rpn = "60,/", noarea=true } + } + } + } + + local power = { + title = "%H: Power on UPS \"%pi\"", + vlabel = "Power", + number_format = "%5.1lf%%", + data = { + instances = { + power = { "ups" } + }, + options = { + power_ups = { color = "00ff00", title = "Power level" } + } + } + } + + local frequencies = { + title = "%H: Frequencies on UPS \"%pi\"", + vlabel = "Hz", + number_format = "%5.1lfHz", + data = { + instances = { + frequency = { "input", "output" } + }, + + options = { + frequency_output = { color = "00e000", title = "Output frequency", noarea=true, overlay=true }, + frequency_input = { color = "ffb000", title = "Input frequency", noarea=true, overlay=true } + } + } + } + return { voltages, currents, percentage, temperature, timeleft, power, frequencies } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/olsrd.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/olsrd.lua new file mode 100644 index 0000000..a694695 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/olsrd.lua @@ -0,0 +1,136 @@ +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.olsrd", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + local g = { } + + if plugin_instance == "routes" then + + g[#g+1] = { + -- diagram data description + title = "%H: Total amount of OLSR routes", vlabel = "n", + number_format = "%5.0lf", data = { + types = { "routes" }, + options = { + routes = { + color = "ff0000", + title = "Total number of routes" + } + } + } + } + + g[#g+1] = { + title = "%H: Average route ETX", vlabel = "ETX", detail = true, + number_format = "%5.1lf",data = { + instances = { "average" }, -- falls es irgendwann mal welche pro ip gibt, wie bei links, dann werden die hier excludiert + types = { "route_etx" }, + options = { + route_etx = { + title = "Average route ETX" + } + } + } + } + + g[#g+1] = { + title = "%H: Average route metric", vlabel = "metric", detail = true, + number_format = "%5.1lf", data = { + instances = { "average" }, -- falls es irgendwann mal welche pro ip gibt, wie bei links, dann werden die hier excludiert + types = { "route_metric" }, + options = { + route_metric = { + title = "Average route metric" + } + } + } + } + + elseif plugin_instance == "links" then + + g[#g+1] = { + -- diagram data description + title = "%H: Total amount of OLSR neighbours", vlabel = "n", + number_format = "%5.0lf", data = { + instances = { "" }, + types = { "links" }, + options = { + links = { + color = "00ff00", + title = "Number of neighbours" + } + } + } + } + + local instances = graph.tree:data_instances(plugin, plugin_instance, "signal_quality") + table.sort(instances) + + -- define one diagram per host, containing the rx and lq values + local i + for i = 1, #instances, 2 do + local dsn1 = "signal_quality_%s_value" % instances[i]:gsub("[^%w]+", "_") + local dsn2 = "signal_quality_%s_value" % instances[i+1]:gsub("[^%w]+", "_") + local host = instances[i]:match("^[^%-]+%-([^%-]+)%-.+") + + g[#g+1] = { + title = "%H: Signal Quality" .. " (" .. (host or "avg") ..")", vlabel = "ETX", + number_format = "%5.2lf", detail = true, + data = { + types = { "signal_quality" }, + + instances = { + signal_quality = { instances[i], instances[i+1] }, + }, + + options = { + [dsn1] = { + color = "00ff00", + title = "LQ (%s)" % (host or "avg"), + }, + [dsn2] = { + color = "0000ff", + title = "NLQ (%s)" % (host or "avg"), + flip = true + } + } + } + } + end + + elseif plugin_instance == "topology" then + + g[#g+1] = { + title= "%H: Total amount of OLSR links", vlabel = "n", + number_format = "%5.0lf", data = { + instances = { "" }, + types = { "links" }, + options = { + links = { + color = "0000ff", + title = "Total number of links" + } + } + } + } + + g[#g+1] = { + title= "%H: Average signal quality", vlabel = "n", + number_format = "%5.2lf", detail = true, + data = { + instances = { "average" }, -- exclude possible per-ip stuff + types = { "signal_quality" }, + options = { + signal_quality = { + color = "0000ff", + title = "Average signal quality" + } + } + } + } + end + + return g +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua new file mode 100644 index 0000000..876e871 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua @@ -0,0 +1,48 @@ +-- Copyright 2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.openvpn", package.seeall) + +function rrdargs( graph, plugin, plugin_instance ) + local inst = plugin_instance:gsub("^openvpn%.(.+)%.status$", "%1") + + return { + { + title = "%%H: OpenVPN \"%s\" - Traffic" % inst, + vlabel = "Bytes/s", + data = { + instances = { + if_octets = { "traffic", "overhead" } + }, + sources = { + if_octets = { "tx", "rx" } + }, + options = { + if_octets_traffic_tx = { weight = 0, title = "Bytes (TX)", total = true, color = "00ff00" }, + if_octets_overhead_tx = { weight = 1, title = "Overhead (TX)", total = true, color = "ff9900" }, + if_octets_overhead_rx = { weight = 2, title = "Overhead (RX)", total = true, flip = true, color = "ff00ff" }, + if_octets_traffic_rx = { weight = 3, title = "Bytes (RX)", total = true, flip = true, color = "0000ff" } + } + } + }, + + { + title = "%%H: OpenVPN \"%s\" - Compression" % inst, + vlabel = "Bytes/s", + data = { + instances = { + compression = { "data_out", "data_in" } + }, + sources = { + compression = { "uncompressed", "compressed" } + }, + options = { + compression_data_out_uncompressed = { weight = 0, title = "Uncompressed (TX)", total = true, color = "00ff00" }, + compression_data_out_compressed = { weight = 1, title = "Compressed (TX)", total = true, color = "008800" }, + compression_data_in_compressed = { weight = 2, title = "Compressed (RX)", total = true, flip = true, color = "000088" }, + compression_data_in_uncompressed = { weight = 3, title = "Uncompressed (RX)", total = true, flip = true, color = "0000ff" } + } + } + } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/ping.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/ping.lua new file mode 100644 index 0000000..6ecdb5c --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/ping.lua @@ -0,0 +1,28 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.ping", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + return { + -- Ping roundtrip time + { title = "%H: ICMP Round Trip Time", + vlabel = "ms", + number_format = "%5.1lf ms", + data = { + sources = { ping = { "value" } }, + options = { ping__value = { + noarea = true, overlay = true, title = "%di" } } + } }, + + -- Ping droprate + { title = "%H: ICMP Drop Rate", + vlabel = "%", + number_format = "%5.2lf %%", + data = { + types = { "ping_droprate" }, + options = { ping_droprate = { + noarea = true, overlay = true, title = "%di" } } + } } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/processes.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/processes.lua new file mode 100644 index 0000000..d48441a --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/processes.lua @@ -0,0 +1,98 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.processes", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + { + title = "%H: Processes", + vlabel = "Processes/s", + data = { + instances = { + ps_state = { + "sleeping", "running", "paging", "blocked", "stopped", "zombies" + } + }, + + options = { + ps_state_sleeping = { color = "0000ff" }, + ps_state_running = { color = "008000" }, + ps_state_paging = { color = "ffff00" }, + ps_state_blocked = { color = "ff5000" }, + ps_state_stopped = { color = "555555" }, + ps_state_zombies = { color = "ff0000" } + } + } + }, + + { + title = "%H: CPU time used by %pi", + vlabel = "Jiffies", + data = { + sources = { + ps_cputime = { "syst", "user" } + }, + + options = { + ps_cputime__user = { + color = "0000ff", + overlay = true + }, + + ps_cputime__syst = { + color = "ff0000", + overlay = true + } + } + } + }, + + { + title = "%H: Threads and processes belonging to %pi", + vlabel = "Count", + detail = true, + data = { + sources = { + ps_count = { "threads", "processes" } + }, + + options = { + ps_count__threads = { color = "00ff00" }, + ps_count__processes = { color = "0000bb" } + } + } + }, + + { + title = "%H: Page faults in %pi", + vlabel = "Pagefaults", + detail = true, + data = { + sources = { + ps_pagefaults = { "minflt", "majflt" } + }, + + options = { + ps_pagefaults__minflt = { color = "ff0000" }, + ps_pagefaults__majflt = { color = "ff5500" } + } + } + }, + + { + title = "%H: Virtual memory size of %pi", + vlabel = "Bytes", + detail = true, + number_format = "%5.1lf%sB", + data = { + types = { "ps_rss" }, + + options = { + ps_rss = { color = "0000ff" } + } + } + } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua new file mode 100644 index 0000000..f8bddb9 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua @@ -0,0 +1,24 @@ +-- Copyright 2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.sensors", package.seeall) + +function rrdargs( graph, plugin, plugin_instance ) + return { + { + per_instance = true, + title = "%H: %pi - %di", + vlabel = "\176C", + number_format = "%4.1lf\176C", + data = { + types = { "temperature" }, + options = { + temperature__value = { + color = "ff0000", + title = "Temperature" + } + } + } + } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/splash_leases.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/splash_leases.lua new file mode 100644 index 0000000..65fba52 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/splash_leases.lua @@ -0,0 +1,27 @@ +-- Copyright 2013 Freifunk Augsburg / Michael Wendland +-- Licensed to the public under the Apache License 2.0. + + +module("luci.statistics.rrdtool.definitions.splash_leases", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Splash Leases", + vlabel = "Active Clients", + y_min = "0", + number_format = "%5.1lf", + data = { + sources = { + splash_leases = { "leased", "whitelisted", "blacklisted" } + }, + + options = { + splash_leases__leased = { color = "00CC00", title = "Leased", overlay = false }, + splash_leases__whitelisted = { color = "0000FF", title = "Whitelisted", overlay = false }, + splash_leases__blacklisted = { color = "FF0000", title = "Blacklisted", overlay = false } + } + } + } + +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/tcpconns.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/tcpconns.lua new file mode 100644 index 0000000..50a9470 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/tcpconns.lua @@ -0,0 +1,25 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.tcpconns", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + return { + title = "%H: TCP connections to port %pi", + vlabel = "Connections/s", + number_format = "%5.0lf", + data = { + types = { "tcp_connections" }, + instances = { + tcp_connections = { + "SYN_SENT", "SYN_RECV", "LISTEN", "ESTABLISHED", + "LAST_ACK", "TIME_WAIT", "CLOSING", "CLOSE_WAIT", + "CLOSED", "FIN_WAIT1", "FIN_WAIT2" + }, + options = { + load__ESTABLISHED = { title = "%di", noarea = true } + } + } + } + } +end diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/thermal.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/thermal.lua new file mode 100644 index 0000000..5322464 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/thermal.lua @@ -0,0 +1,20 @@ +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.thermal",package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Temperature of %pi", + alt_autoscale = true, + vlabel = "Celsius", + number_format = "%3.1lf%s", + data = { + types = { "temperature" }, + options = { + temperature = { color = "ff0000", title = "Temperature", noarea=true }, + } + } + } +end + diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/uptime.lua b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/uptime.lua new file mode 100644 index 0000000..077ec57 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/uptime.lua @@ -0,0 +1,27 @@ +--[[ + +Copyright 2013 Thomas Endt + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 +]]-- + +module("luci.statistics.rrdtool.definitions.uptime", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Uptime", vlabel = "seconds", + number_format = "%5.0lf%s", data = { + types = { "uptime" }, + options = { + uptime = { title = "Uptime %di", noarea = true } + } + } + } + +end + diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm b/feeds/luci/applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm new file mode 100644 index 0000000..3827199 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm @@ -0,0 +1,17 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Statistics%>

+ +

<%_The statistics package uses Collectd +to gather data and RRDtool to +render diagram images.%>

+ +

<%_You can install additional collectd-mod-* plugins to enable more statistics.%>

+ +<%+footer%> diff --git a/feeds/luci/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm b/feeds/luci/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm new file mode 100644 index 0000000..ebc78ba --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm @@ -0,0 +1,40 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Statistics%>

+ +
+ + + + +
+ +
+
+
+ +
+ <% for i, img in ipairs(images) do %> + <% if is_index then %><% end %> + + <% if is_index then %><% end %> +
+ <% end %> +
+ +<%+footer%> + diff --git a/feeds/luci/applications/luci-app-statistics/po/ca/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/ca/rrdtool.po new file mode 100644 index 0000000..7c03aad --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/ca/rrdtool.po @@ -0,0 +1,359 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 16:39+0200\n" +"PO-Revision-Date: 2009-05-27 01:49+0200\n" +"Last-Translator: Eduard Duran \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "%H: Wireless - Relació Senyal Soroll" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "dBm" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Nivell de soroll" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "Potència de senyal" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Wireless - Qualitat de senyal" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "n" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Qualitat de senyal" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "%H: Temps ICMP d'anada i tornada" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "ms" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "%di" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "%H: Tallafocs - Paquets processats" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "Paquets/s" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "Cadena \"%di\"" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "%H: Enllaç de xarxa - Transferència en %pi" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "Bytes/s" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "Bytes (%ds)" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "%H: Enllaç de xarxa - Paquets en %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "Paquets/s" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "Processats (%ds)" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "Descartats (%ds)" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "Errors (%ds)" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "%H: Enllaç de xarxa - Multicast en %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "Paquets/s" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "Paquets" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "%H: Enllaç de xarxa - Col·lisions en %pi" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "Col·lisions/s" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "Col·lisions" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "%H: Enllaç de xarxa - Errors on %pi" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "Errors/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "%di" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "%di" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "%H: Processos" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "Processos/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "%di" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "%H: Procés %pi - temps de cpu usat" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "Jiffies" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "sistema" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "usuari" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "%H: Procés %pi - threads i processos" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "Compte" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "%ds" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "%H: Procés %pi - errors de pàgina" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "Errors de pàgina" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "errors de pàgina" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "%H: Procés %pi - mida de memòria virtual" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "Bytes" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "memòria virtual" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "%H: Ús al Processador #%pi" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "%" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "%di" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "%H: Transferència a %di" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "Bytes/s" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "%H: Paquets a %di" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "Paquets/s" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "%H: Connexions TCP a Port %pi" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "Connexions/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "%di" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "%H: Ús de l'espai de disc a %di" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "Bytes" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "%ds" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "%ds" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "%H: Interrupcions" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "Temes/s" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "IRQ %di" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "%H: Càrrega de Sistema" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "Càrrega" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "1 min" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "5 min" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "15 min" diff --git a/feeds/luci/applications/luci-app-statistics/po/ca/statistics.po b/feeds/luci/applications/luci-app-statistics/po/ca/statistics.po new file mode 100644 index 0000000..fd3b6d1 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/ca/statistics.po @@ -0,0 +1,801 @@ +# statistics.pot +# generated from ./applications/luci-statistics/luasrc/i18n/statistics.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-08-07 20:11+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "Acció (objectiu)" + +msgid "Add command for reading values" +msgstr "Afegeix ordre per llegir valors" + +msgid "Add matching rule" +msgstr "Afegeix regla coincident" + +msgid "Add multiple hosts separated by space." +msgstr "Afegeix múltiples hosts separats per espai." + +msgid "Add notification command" +msgstr "Afegeix ordre de notificació" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Directori base" + +msgid "Basic monitoring" +msgstr "Monitoreig bàsic" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "Configuració del connector de CPU" + +msgid "CSV Output" +msgstr "Sortida CSV" + +msgid "CSV Plugin Configuration" +msgstr "Configuració del connector CSV" + +msgid "Cache collected data for" +msgstr "Emmagatzema en memòria cau les dades recollides de" + +msgid "Cache flush interval" +msgstr "Interval de neteja de memòria cau" + +msgid "Chain" +msgstr "Cadena" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "Configuració Collectd" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd és un petit dimoni per recollir dades de diverses fonts a través " +"dels connectors. En aquesta pàgina podeu canviar la configuració general del " +"dimoni Collectd." + +msgid "Conntrack" +msgstr "Conntrack" + +msgid "Conntrack Plugin Configuration" +msgstr "Configuració del connector Conntrack" + +msgid "DF Plugin Configuration" +msgstr "Configuració del connector DF" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "Configuració del connector DNS" + +msgid "Data collection interval" +msgstr "Interval de recol·lecció de dades" + +msgid "Datasets definition file" +msgstr "Fitxer de definició de dades" + +msgid "Destination ip range" +msgstr "Rang d'IP destí" + +msgid "Directory for collectd plugins" +msgstr "Directori pels connectors connectd" + +msgid "Directory for sub-configurations" +msgstr "Directori per sub-configuracions" + +msgid "Disk Plugin Configuration" +msgstr "Configuració del connector de disc" + +msgid "Disk Space Usage" +msgstr "Ús d'espai en disc" + +msgid "Disk Usage" +msgstr "Ús de disc" + +msgid "Display Host »" +msgstr "Mostra el host »" + +msgid "Display timespan »" +msgstr "Mostra l'hora" + +msgid "E-Mail Plugin Configuration" +msgstr "Configuració del connector d'adreça electrònica" + +msgid "Email" +msgstr "Adreça electrònica" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Activa aquest connector" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Configuració del connector exec" + +msgid "Filter class monitoring" +msgstr "Monitoreig de classe filter" + +msgid "Firewall" +msgstr "Tallafocs" + +msgid "Flush cache after" +msgstr "Neteja la memòria cau després de" + +msgid "Forwarding between listen and server addresses" +msgstr "Readreçant entre adreces que reben connexions i adreces de servidors" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Gràfics" + +msgid "Group" +msgstr "Grup" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Ací pots definir ordres externes que s'iniciaran pel collectd per llegir " +"certs valors. Els valors es llegiran des del stdout" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Ací pots definir ordres externes que s'iniciaran pel collectd quan s'aribi a " +"uns certs valors llindars. Els valors que condueixin a la invocació, " +"alimentaran als programes stdin" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Ací pots definir diversos criteris pels que es seleccionaran les regles " +"iptables monitoritzades ." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "Host" + +msgid "Hostname" +msgstr "Nom de host" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "Configuració de connector IRQ" + +msgid "Ignore source addresses" +msgstr "Ignora adreces origen" + +msgid "Incoming interface" +msgstr "Interfície entrant" + +msgid "Interface Plugin Configuration" +msgstr "Configuració de connector d'interfície" + +msgid "Interfaces" +msgstr "Interfícies" + +msgid "Interrupts" +msgstr "Interrupcions" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "Configuració del connector iptables" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "Màquina que rep connexions" + +msgid "Listen port" +msgstr "Port que rep connexions" + +msgid "Listener interfaces" +msgstr "Interfícies que reben connexions" + +msgid "Load Plugin Configuration" +msgstr "Configuració de connector de càrrega" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Connexions màximes permeses" + +msgid "Memory" +msgstr "Memòria" + +msgid "Memory Plugin Configuration" +msgstr "Configuració del connector de memòria" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "Monitoritza tots els ports locals que reben connexions" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Monitoritza dispositius" + +msgid "Monitor disks and partitions" +msgstr "Monitoritza els discs i les particions" + +msgid "Monitor filesystem types" +msgstr "Monitoritza els tipus de sistema de fitxers" + +msgid "Monitor hosts" +msgstr "Monitoritza màquines" + +msgid "Monitor interfaces" +msgstr "Monitoritza hosts" + +msgid "Monitor interrupts" +msgstr "Monitoritza interrupcions" + +msgid "Monitor local ports" +msgstr "Monitoritza els ports locals" + +msgid "Monitor mount points" +msgstr "Monitoritza punts de muntatge" + +msgid "Monitor processes" +msgstr "Monitoritza processos" + +msgid "Monitor remote ports" +msgstr "Monitoritza els ports remots" + +msgid "Name of the rule" +msgstr "Nom de la regla" + +msgid "Netlink" +msgstr "Enllaç de xarxa" + +msgid "Netlink Plugin Configuration" +msgstr "Configuració del connector d'enllaç de xarxa" + +msgid "Network" +msgstr "Xarxa" + +msgid "Network Plugin Configuration" +msgstr "Configuració del connector de xarxa" + +msgid "Network plugins" +msgstr "Connectors de xarxa" + +msgid "Network protocol" +msgstr "Protocol de xarxa" + +msgid "Number of threads for data collection" +msgstr "Número de fils de recol·lecció de dades" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "Configuració del connector OLSRd" + +msgid "Only create average RRAs" +msgstr "Crea només RRAs mitjans" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Opcions" + +msgid "Outgoing interface" +msgstr "Interfície sortint" + +msgid "Output plugins" +msgstr "Connectors de sortida" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Configuració del connector ping" + +msgid "Port" +msgstr "Port" + +msgid "Processes" +msgstr "Processos" + +msgid "Processes Plugin Configuration" +msgstr "Configuració del connector de processos" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "Processador" + +msgid "Qdisc monitoring" +msgstr "Monitoreig Qdisc" + +msgid "RRD XFiles Factor" +msgstr "Factor RRD XFiles" + +msgid "RRD heart beat interval" +msgstr "Interval de batec de cor RRD" + +msgid "RRD step interval" +msgstr "Interval de pas RRD" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "Configuració del connector RRDTool" + +msgid "Rows per RRA" +msgstr "Files per RRA" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "Segons" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Màquina servidor" + +msgid "Server port" +msgstr "Port del servidor" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "Monitoreig de classe shaping" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "Fitxer d'endoll" + +msgid "Socket group" +msgstr "Grup d'endoll" + +msgid "Socket permissions" +msgstr "Permisos d'endoll" + +msgid "Source ip range" +msgstr "Rang d'IP origen" + +msgid "Specifies what information to collect about links." +msgstr "Especifica què informació es recull sobre enllaços." + +msgid "Specifies what information to collect about routes." +msgstr "Especifica què informació es recull sobre rutes." + +msgid "Specifies what information to collect about the global topology." +msgstr "Especifica què informació es recull sobre la topologia global." + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "Estadístiques" + +msgid "Storage directory" +msgstr "Directori d'emmagatzematge" + +msgid "Storage directory for the csv files" +msgstr "Directori d'emmagatzematge dels fitxers CSV" + +msgid "Store data values as rates instead of absolute values" +msgstr "" +"Emmagatzema els valors de dades com a relacions en comptes de com a valors " +"absoluts" + +msgid "Stored timespans" +msgstr "Marques de temps emmagatzemades" + +msgid "System Load" +msgstr "Càrrega de sistema" + +msgid "TCP Connections" +msgstr "Connexions TCP" + +msgid "TCPConns Plugin Configuration" +msgstr "Configuració de connector TCPConns" + +msgid "TTL for network packets" +msgstr "TTL pels paquets de xarxa" + +msgid "TTL for ping packets" +msgstr "TTL per paquets ping" + +msgid "Table" +msgstr "Taula" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" +"El connector de cpu recull estadístiques bàsiques sobre l'ús del processador." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"El connector CSV desa les dades recollides en format CSV per ser processades " +"posteriorment per programes externs." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"El connector DF recull dades sobre l'ús d'espai en disc de diferents " +"dispositius, punts de muntatge i tipus de sistema de fitxers." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"El connector de disc recull estadístiques d'ús detallades per les particions " +"seleccionades o per tot el disc." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"El connector DNS recull estadístiques detallades sobre el tràfic DNS a les " +"interfícies seleccionades." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"El connector d'adreça electrònica crea un socket unix que es pot utilitzar " +"per transmetre estadístiques d'email a un dimoni collectd. Aquest connector " +"es fa servir en conjunció amb Mail::SpamAssassin::Plugin. Plugin::Collectd " +"també es pot utilitzar d'altres maneres." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"El connector exec inicia ordres externes per llegir valors des de o a " +"processos externs quan s'arriba a certs valors de llindar." + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" +"El connector d'interfície recull estadístiques de tràfic a les interfícies " +"seleccionades." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"El connector iptables monitoritzarà les regles de tallafocs seleccionades i " +"recollirà informacions sobre els bytes i paquests processats per regla." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"El connector IRQ monitoritzarà la taxa de qüestions per segon per cada " +"interrupció seleccionada. Si no se selecciona cap interrupció, es " +"monitoritzen totes les interrupcions." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" +"El connector iwinfo recull estadístiques sobre la força de senyal, soroll i " +"qualitat sense fil." + +msgid "The load plugin collects statistics about the general system load." +msgstr "" +"El connector de càrrega recull estadístiques sobre la càrrega de sistema " +"general." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "El connector de memòria recull estadístiques sobre l'ús de memòria." + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"El connector d'enllaç de xarxa recull informació extensa com estadístiques " +"de qdisc-, class- i filter- per les interfícies seleccionades." + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"El connector de xarxa proporciona comunicacions basades en xarxa entre " +"diferents instàncies de collectd. El collectd pot operar tan en mode " +"servidor com client. En el client mode les dades recollides localment es " +"transferiran a la instància del servidor de collectd, en el mode servidor la " +"instància rep dades de les altres màquines." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"El connector de ping enviarà ICMP Echo Replies a les màquines seleccionades " +"i mesurarà el temps d'anada i tornada en cada màquina." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"El connector de processor recollirà informacions com el temps de cpu, errors " +"de pàgina i ús de memòria dels processos seleccionats." + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"El connector RRDTool desa les dades recollides als fitxers de base de dades " +"RRD, la base dels diagrames.

Alerta: Establir els valors " +"incorrectes comportarà un consum molt alt de memòria al directori temporal. " +"Això pot inutilitzar el dispositiu!" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"El connector TCPConns recull informació sobre les connexions TCP obertes en " +"els ports seleccionats." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"El connector unixsock crea un socket Unix que es pot fer servir per llegir " +"dades recollides d'una instància collectd." + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"Aquesta secció defineix en quines interfícies el collectd rebrà connexions " +"entrants." + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" +"Aquesta secció defineix a quins servidors s'enviaran les dades recollides " +"localment." + +msgid "Try to lookup fully qualified hostname" +msgstr "Intenta resoldre el nom de màquina (fqdn)" + +msgid "UPS" +msgstr "UPS" + +msgid "UPS Plugin Configuration" +msgstr "Configuració del connector UPS" + +msgid "UPS name in NUT ups@host format" +msgstr "Nom UPS en format NUT ups@host" + +msgid "UnixSock" +msgstr "Sock Unix" + +msgid "Unixsock Plugin Configuration" +msgstr "Configuració de connector Unixsock" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Fitxer PID usat" + +msgid "User" +msgstr "Usuari" + +msgid "Verbose monitoring" +msgstr "Monitoreig detallat" + +msgid "Wireless" +msgstr "Wireless" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "p.e. br-ff" + +msgid "e.g. br-lan" +msgstr "p.e. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "p.e. reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "màx. 16 caràcters" + +msgid "reduces rrd size" +msgstr "redueix mida RRD" + +msgid "seconds; multiple separated by space" +msgstr "segons; múltiples separats per espais" + +msgid "server interfaces" +msgstr "interfícies de servidor" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Connectors de sistema" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "El paquet d'estadísitiques està basat en Collectd i utilitza l'eina RRD per renderitzar imatges de diagrama de les dades " +#~ "recoliildes." + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "El connector Wireless recull estadístiques sobre la potència del senyal " +#~ "sense fils, el soroll i la qualitat." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Configuració del connector Wireless" diff --git a/feeds/luci/applications/luci-app-statistics/po/cs/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/cs/rrdtool.po new file mode 100644 index 0000000..e6149ec --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/cs/rrdtool.po @@ -0,0 +1,359 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-12 20:35+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "Bezdrátová síť - Úroveň šumu" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "dBm" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Úroveň šumu" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "Síla signálu" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Wireless - kvalita signálu" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "n" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Kvalita signálu" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "%H: ICMP časy odezvy" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "ms" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "%di" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "%H: Firewall - zpracované pakety" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "Pakety/s" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "Řetěz \\\"%di\\\"" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "%H: Netlink - přenos na %pi" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "Bajty/s" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "Bajty (%ds)" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "%H: Netlink - pakety na %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "Pakety/s" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "Zpracováno (%ds)" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "Zahozeno (%ds)" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "Chyby (%ds)" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "%H: Netlink - multicast na %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "Pakety/s" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "Pakety" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "%H: Netlink - kolize na %pi" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "Kolize/s" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "Kolize" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "%H: Netlink - chyby na %pi" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "Chyby/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "%di" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "%di" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "%H: Procesy" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "Procesy/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "%di" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "%H: Proces %pi - čas využití CPU" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "Jiffies" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "systém" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "uživatel" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "%H: Proces %pi - vlákna a procesy" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "Počet" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "%ds" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "%H: Process %pi - chyby stránkování" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "Chyby stránkování" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "chyby stránkování" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "%H: Proces %pi - velikost virtuální paměti" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "Bajty" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "virtuální paměť" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "%H: Vytížení procesoru #%pi" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "%" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "%di" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "%H: Přenos na %di" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "Bajty/s" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "%H: Pakety na %di" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "Pakety/s" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "%H: TCP-spojení na portu %pi" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "Spojení/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "%di" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "%H: Využití diskového prostoru na %di" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "Bajty" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "%ds" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "%ds" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "%H: Přerušení" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "Problémy/s" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "IRQ %di" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "%H Zatížení systému" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "Zatížení" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "1 min" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "5 min" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "15 min" diff --git a/feeds/luci/applications/luci-app-statistics/po/cs/statistics.po b/feeds/luci/applications/luci-app-statistics/po/cs/statistics.po new file mode 100644 index 0000000..9678726 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/cs/statistics.po @@ -0,0 +1,815 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-21 17:44+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "Akce (cíl)" + +msgid "Add command for reading values" +msgstr "Přidat příkaz pro čtení hodnot" + +msgid "Add matching rule" +msgstr "Přidat pravidlo pro výběr" + +msgid "Add multiple hosts separated by space." +msgstr "Přidat více hostů, oddělených mezerou" + +msgid "Add notification command" +msgstr "Přidat příkaz pro upozornění" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Základní adresář" + +msgid "Basic monitoring" +msgstr "Základní sledování" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "Nastavení CPU pluginu" + +msgid "CSV Output" +msgstr "CSV výstup" + +msgid "CSV Plugin Configuration" +msgstr "Nastavení CSV pluginu" + +msgid "Cache collected data for" +msgstr "Mezipamět pro ukládání dat" + +msgid "Cache flush interval" +msgstr "Interval vyprazdňování mezipaměti" + +msgid "Chain" +msgstr "Řetěz" + +msgid "CollectLinks" +msgstr "CollectLinks" + +msgid "CollectRoutes" +msgstr "CollectRoutes" + +msgid "CollectTopology" +msgstr "CollectTopology" + +msgid "Collectd Settings" +msgstr "Nastavení Collectd" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd je malý daemon pro shromažďování dat z nejrůznějších zdrojů zkrz " +"rozdílné pluginy. Na této stránce můžete změnit obecná nastavení daemonu " +"collectd." + +msgid "Conntrack" +msgstr "Conntrack" + +msgid "Conntrack Plugin Configuration" +msgstr "Nastavení pluginu Conntrack" + +msgid "DF Plugin Configuration" +msgstr "Nastavení pluginu DF" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "Nastavení DNS pluginu" + +msgid "Data collection interval" +msgstr "Interval sběru dat" + +msgid "Datasets definition file" +msgstr "" + +msgid "Destination ip range" +msgstr "Rozsah cílových IP adres" + +msgid "Directory for collectd plugins" +msgstr "Adresář s pluginy pro collectd" + +msgid "Directory for sub-configurations" +msgstr "Adresář pro pod-nastavení" + +msgid "Disk Plugin Configuration" +msgstr "Nastavení Disk pluginu" + +msgid "Disk Space Usage" +msgstr "Využití místa na disku" + +msgid "Disk Usage" +msgstr "Využití disku" + +msgid "Display Host »" +msgstr "Zobrazit hostitele »" + +msgid "Display timespan »" +msgstr "Zobrazit časové rozpětí »" + +msgid "E-Mail Plugin Configuration" +msgstr "Nastavení E-Mail pluginu" + +msgid "Email" +msgstr "Email" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Povolit tento plugin" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Nastavení pluginu Exec" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Flush cache after" +msgstr "Vyprázdnit cache po" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Grafy" + +msgid "Group" +msgstr "Skupina" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Zde můžete nastavit externí příkazy, které budou spuštěny v tomto pořadí " +"daemonem collectd. Ze standardního výstupu příkazů vezme collectd potřebné " +"hodnoty." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Zde můžete definovat různá kritéria, podle kterých budou vybrána sledovaná " +"pravidla iptables." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "Hostitel" + +msgid "Hostname" +msgstr "Hostname" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "IP nebo hostname, odkud získat txtinfo výstup" + +msgid "IRQ Plugin Configuration" +msgstr "Nastavení IRQ pluginu" + +msgid "Ignore source addresses" +msgstr "Ignorovat zdrojové adresy" + +msgid "Incoming interface" +msgstr "Příchozí rozhraní" + +msgid "Interface Plugin Configuration" +msgstr "Nastavení Interface pluginu" + +msgid "Interfaces" +msgstr "Rozhraní" + +msgid "Interrupts" +msgstr "Přerušení" + +msgid "Interval for pings" +msgstr "Interval pro ping" + +msgid "Iptables Plugin Configuration" +msgstr "Nastavení Iptables pluginu" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" +"Pokud nic nevyberete, rozhraní pro monitoring budou určena automaticky." + +msgid "Listen host" +msgstr "Naslouchající hostitel" + +msgid "Listen port" +msgstr "Naslouchající port" + +msgid "Listener interfaces" +msgstr "Rozhraní naslouchajícího" + +msgid "Load Plugin Configuration" +msgstr "Načíst nastavení pluginů" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Maximální množství povolených spojení" + +msgid "Memory" +msgstr "Paměť" + +msgid "Memory Plugin Configuration" +msgstr "Nastavení pluginu Memory (Paměť)" + +msgid "Monitor all except specified" +msgstr "Sledovat vše kromě vybraných" + +msgid "Monitor all local listen ports" +msgstr "Monitorovat všechny naslouchající porty" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Sledovat zařízení" + +msgid "Monitor disks and partitions" +msgstr "Sledovat disky a oddíly" + +msgid "Monitor filesystem types" +msgstr "Sledovat typy souborových systémů" + +msgid "Monitor hosts" +msgstr "Sledovat hostitele" + +msgid "Monitor interfaces" +msgstr "Sledovat rozhraní" + +msgid "Monitor interrupts" +msgstr "Sledovat přerušení" + +msgid "Monitor local ports" +msgstr "Sledovat místní porty" + +msgid "Monitor mount points" +msgstr "Sledovat přípojné body" + +msgid "Monitor processes" +msgstr "Sledovat procesy" + +msgid "Monitor remote ports" +msgstr "Sledovat vzdálené porty" + +msgid "Name of the rule" +msgstr "Název pravidla" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "Nastavení pluginu Netlink" + +msgid "Network" +msgstr "Síť" + +msgid "Network Plugin Configuration" +msgstr "Nastavení pluginu Síť" + +msgid "Network plugins" +msgstr "Síťové pluginy" + +msgid "Network protocol" +msgstr "Síťový protokol" + +msgid "Number of threads for data collection" +msgstr "Počet vláken pro sběr dat" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "Nastavení pluginu OLSRd" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Možnosti" + +msgid "Outgoing interface" +msgstr "Odchozí rozhraní" + +msgid "Output plugins" +msgstr "Výstupní pluginy" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Nastavení pluginu Ping" + +msgid "Port" +msgstr "Port" + +msgid "Processes" +msgstr "Procesy" + +msgid "Processes Plugin Configuration" +msgstr "Nastavení pluginu Procesy" + +msgid "Processes to monitor separated by space" +msgstr "Sledované procesy (oddělte mezerou)" + +msgid "Processor" +msgstr "Procesor" + +msgid "Qdisc monitoring" +msgstr "Sledování Qdisc" + +#, fuzzy +msgid "RRD XFiles Factor" +msgstr "RRD XFiles Factor" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "Nastavení pluginu RRDTool" + +msgid "Rows per RRA" +msgstr "Řádky na jeden RRA" + +msgid "Script" +msgstr "Skript" + +msgid "Seconds" +msgstr "Sekundy" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Hostitel serveru" + +msgid "Server port" +msgstr "Port serveru" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "Soubor socketu" + +msgid "Socket group" +msgstr "Skupina socketů" + +msgid "Socket permissions" +msgstr "Oprávnění socketu" + +msgid "Source ip range" +msgstr "Rozsah zdrojových IP" + +msgid "Specifies what information to collect about links." +msgstr "Určuje, jaké informace sbírat o odkazech." + +msgid "Specifies what information to collect about routes." +msgstr "Určuje, jaké informace sbírat o cestách" + +msgid "Specifies what information to collect about the global topology." +msgstr "Určuje, jaké informace sbírat o globální topologii" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "Statistiky" + +msgid "Storage directory" +msgstr "Úložný adresář" + +msgid "Storage directory for the csv files" +msgstr "Úložný adresář pro soubory CSV" + +msgid "Store data values as rates instead of absolute values" +msgstr "Ukládat data jako poměrné hodnoty místo absolutních" + +msgid "Stored timespans" +msgstr "" + +msgid "System Load" +msgstr "Zatížení systému" + +msgid "TCP Connections" +msgstr "TCP spojení" + +msgid "TCPConns Plugin Configuration" +msgstr "Nastavení pluginu TCPConns" + +msgid "TTL for network packets" +msgstr "TTL pro síťové pakety" + +msgid "TTL for ping packets" +msgstr "TTL pro pakety pingu" + +msgid "Table" +msgstr "" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "Plugin Conntrack shromažďuje statistiky o počtu sledovaných spojení." + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "Plugin CPU shromažďuje základní statistiky o vytížení procesoru." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"Plugin CSV ukládá shromážděná data ve formátu CSV. Data mohou být později " +"zpracována externími programy." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"Plugin DF shromažďuje statistiky o využití diskového prostoru na různých " +"zařízeních, přípojných bodech nebo typech souborových systémů." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"Plugin Disk shromažďuje podrobné statistiky o využívání vybraného oddílu " +"nebo celého disku." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"Plugin DNS shromažďuje podrobné statistky o provozu, vztahující se k DNS, na " +"vybraných rozhraních." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"Plugin Email vytváří unixový socket, které může být využit pro odeslání " +"statistik o emailu běžícímu daemonu collectd. Plugin je primárně určen pro " +"použití ve spojení s Mail::SpamAssasin::Plugin::Collectd, ale stejně dobře " +"může být využit jinak." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" +"Plugin Interface shromažďuje statistiky o provozu na vybraných rozhraních." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"Plugin Iptables monitoruje vybraná pravidla firewallu a shromažďuje " +"informace o zpracovaných bajtech a paketech pro každé pravidlo." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"Plugin IRQ monitoruje množství požadavků na přerušení pro každé vybrané " +"přerušení. Pokud není vybráno žádné přerušení, jsou monitorována všechna." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" +"Plugin Iwinfo shromažďuje statistiky o síle, šumu a kvalitě bezdrátového " +"signálu." + +msgid "The load plugin collects statistics about the general system load." +msgstr "Plugin Load shromažďuje statistiky o obecné zátěži systému." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "Plugin Memory shromažďuje statistiky o využití paměti." + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"Plugin Netlink shromažďuje rozšířené informace jako statistiky qdisk, class " +"a filtru pro vybraná rozhraní." + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"Plugin Network poskytuje síťovou komunikaci mezi různými instancemi daemonu " +"collectd. Collectd může pracovat v režimu klienta i serveru. V režimu " +"klienta jsou lokálně shromažďovaná data odeslána instanci serveru, jako " +"server naopak collectd přijímá data z ostatních hostitelů." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"Plugin Ping bude odesílat ICMP echo odpovědi vybraným hostům a měřit " +"zpáteční čas pro každého hosta." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"Plugin Processes shromažďuje informace o procesorovém času, výpadcích " +"stránky a využití paměti vybranými programy." + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"Plugin Rrdtool ukládá shromažďená data v souborech databáze RRD.

Varování: Nastavení špatných hodnot bude mít za následek velkou " +"spotřebu paměti v dočasném adresáří. Zařízení ze tak může stát nepoužitelným!" +"" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"Plugin Tcpconns shromažďuje informace o otevřených TCP spojeních na " +"vybraných portech." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"Plugin Unixsock vytváří unixový socket, které může být využit pro čtení dat " +"z běžící instance collectd." + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"Tato sekce určuje, na kterých rozhraních bude collectd čekat na příchozí " +"spojení." + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "Tato sekce určuje, na které servery budou odeslána shromážděná data." + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "UPS" + +msgid "UPS Plugin Configuration" +msgstr "Konfigurace pluginu UPS" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Konfigurace pluginu Unixsock" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Použitý soubor PID (identifikátoru procesu)" + +msgid "User" +msgstr "Uživatel" + +msgid "Verbose monitoring" +msgstr "Podrobný monitoring" + +msgid "Wireless" +msgstr "Wireless" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "Nastavení pluginu Wireless Iwinfo" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "např. br-ff" + +msgid "e.g. br-lan" +msgstr "např. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "např. reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "max. 16 znaků" + +msgid "reduces rrd size" +msgstr "redukovaná velikost rrd" + +msgid "seconds; multiple separated by space" +msgstr "sekundy, více hodnot oddělených mezerou" + +msgid "server interfaces" +msgstr "rozhraní serveru" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Systémové pluginy" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "Balíček Statistiky je založen na Collectd a využívá RRD " +#~ "Tool pro kreslení diagramů z collectd." + +#~ msgid "Installed network plugins:" +#~ msgstr "Instalované síťové pluginy:" + +#~ msgid "Installed output plugins:" +#~ msgstr "Instalované výstupní pluginy:" + +#~ msgid "" +#~ "Network plugins are used to collect information about open tcp " +#~ "connections, interface traffic, iptables rules etc." +#~ msgstr "" +#~ "Síťové pluginy jsou používány pro shromažďování informací o otevřených " +#~ "tcp spojeních, provozu na rozhraní, pravidel iptables atd." + +#~ msgid "" +#~ "Output plugins provide different possibilities to store collected data. " +#~ "It is possible to enable multiple plugin at one, for example to store " +#~ "collected data in rrd databases and to transmit the data over the network " +#~ "to other collectd instances." +#~ msgstr "" +#~ "Výstupní pluginy poskytují různé možnosti ukládání sesbíraných dat. " +#~ "Plugin je možné v jeden okamžik povolit vícekrát , například pro ukládání " +#~ "dat do rrd databází a předávání dat po síti jiným instancím daemonu " +#~ "collectd." + +#~ msgid "" +#~ "System plugins collecting values about system state and ressource usage " +#~ "on the device.:" +#~ msgstr "" +#~ "Systémové pluginy, shromažďující hodnoty o systémovém stavu a zdrojích, " +#~ "používaných zařízením:" + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "Plugin Wireless shromažďuje statistiky o síle, šumu a kvalitě " +#~ "bezdrátového signálu." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Nastavení pluginu Wireless" diff --git a/feeds/luci/applications/luci-app-statistics/po/de/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/de/rrdtool.po new file mode 100644 index 0000000..390fd2e --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/de/rrdtool.po @@ -0,0 +1,357 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2009-05-19 00:33+0200\n" +"Last-Translator: Stefan Keks \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "%H: Drahtlos - Signal-Noise-Verhältnis" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "dBm" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Noise-Level" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "Signalstärke" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Drahtlos - Signalqualität" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "n" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Signalqualität" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "%H: ICMP Antwortzeiten" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "ms" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "%di" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "%H: Firewall - Verarbeitete Pakete" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "Pakete/s" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "Kette \"%di\"" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "%H: Netlink - Transfer auf %pi" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "Bytes/s" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "Bytes (%ds)" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "%H: Netlink - Pakete auf %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "Pakete/s" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "Verarbeitet (%ds)" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "Verworfen (%ds)" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "Fehler (%ds)" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "%H: Netlink - Multicast auf %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "Pakete/s" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "Pakete" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "%H: Netlink - Kollisionen auf %pi" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "Kollisionen/s" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "Kollisionen" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "%H: Netlink - Fehler auf %pi" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "Fehler/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "%di" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "%di" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "%H: Prozesse" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "Prozesse/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "%di" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "%H: Prozess %pi - Verbrauchte CPU Zeit" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "Jiffies" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "System" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "User" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "%H: Prozess %pi - Threads und Prozesse" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "Anzahl" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "%ds" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "%H: Prozess %pi - Speicherzugriffsfehler" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "Zugriffsfehler" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "Zugriffsfehler" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "%H: Process %pi - Virtueller Speicher" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "Bytes" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "virtueller Speicher" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "%H: Auslastung auf Prozessor #%pi" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "%" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "%di" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "%H: Transfer auf %di" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "Bytes/s" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "%H: Pakete auf %di" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "Pakete/s" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "%H: TCP-Verbindungen auf Port %pi" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "Verbindungen/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "%di" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "%H: Speicherverbrauch auf %di" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "Bytes" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "verfügbar" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "belegt " + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "%H: Interrupts" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "Aufrufe/s" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "IRQ %di" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "%H: Systemlast" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "Last" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "1 Minute" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "5 Minuten" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "15 Minuten" diff --git a/feeds/luci/applications/luci-app-statistics/po/de/statistics.po b/feeds/luci/applications/luci-app-statistics/po/de/statistics.po new file mode 100644 index 0000000..2923f05 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/de/statistics.po @@ -0,0 +1,837 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2013-01-28 22:20+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "Aktion (Ziel)" + +msgid "Add command for reading values" +msgstr "Kommando zum Werte einlesen hinzufügen" + +msgid "Add matching rule" +msgstr "Auswahlregel hinzufügen" + +msgid "Add multiple hosts separated by space." +msgstr "Mehrere Hosts durch Leerzeichen getrennt hinzufuegen" + +msgid "Add notification command" +msgstr "Benachrichtigungskommando hinzufügen" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Basisverzeichnis" + +msgid "Basic monitoring" +msgstr "Schnittstellen einfach überwachen" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "CPU Plugin Konfiguration" + +msgid "CSV Output" +msgstr "CSV Ausgabe" + +msgid "CSV Plugin Configuration" +msgstr "CSV Plugin Konfiguration" + +msgid "Cache collected data for" +msgstr "Zwischenspeicherzeit für gesammelte Daten" + +msgid "Cache flush interval" +msgstr "Cache-Leerungsintervall" + +msgid "Chain" +msgstr "Kette (Chain)" + +msgid "CollectLinks" +msgstr "Informationen über Links sammeln (CollectdLinks)" + +msgid "CollectRoutes" +msgstr "Informationen über Routen sammeln (CollectRoutes)" + +msgid "CollectTopology" +msgstr "Informationen über die Netzwerktopologie sammeln (CollectTopology)" + +msgid "Collectd Settings" +msgstr "Collectd Einstellungen" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd ist ein schlankes Dienstprogramm zum Sammeln von Systemdaten aus " +"verschiedenen Quellen mittels diverser Plugins. Auf dieser Seite können " +"generelle Einstellungen für den Collectd-Daemon vorgenommen werden." + +msgid "Conntrack" +msgstr "Conntrack" + +msgid "Conntrack Plugin Configuration" +msgstr "Conntrack Plugin Einstellungen" + +msgid "DF Plugin Configuration" +msgstr "DF Plugin Konfiguration" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "DNS Plugin Konfiguration" + +msgid "Data collection interval" +msgstr "Daten-Sammelintervall" + +msgid "Datasets definition file" +msgstr "Dataset-Definitionen" + +msgid "Destination ip range" +msgstr "Ziel-IP-Bereich" + +msgid "Directory for collectd plugins" +msgstr "Verzeichnis für Collectd-Plugins" + +msgid "Directory for sub-configurations" +msgstr "Verzeichnis für Unterkonfigurationen" + +msgid "Disk Plugin Configuration" +msgstr "Disk Plugin Konfiguration" + +msgid "Disk Space Usage" +msgstr "Plattenspeicher" + +msgid "Disk Usage" +msgstr "Plattenauslastung" + +msgid "Display Host »" +msgstr "Anzeigeserver" + +msgid "Display timespan »" +msgstr "Zeitspanne zeigen »" + +msgid "E-Mail Plugin Configuration" +msgstr "E-Mail Plugin Konfiguration" + +msgid "Email" +msgstr "Email" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Plugin aktivieren" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Exec Plugin Konfiguration" + +msgid "Filter class monitoring" +msgstr "Filterklassen überwachen" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Flush cache after" +msgstr "Leerungsintervall für Zwischenspeicher" + +msgid "Forwarding between listen and server addresses" +msgstr "Weiterleitung zwischen Listen- und Server-Adressen" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Diagramme" + +msgid "Group" +msgstr "Gruppe" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Hier können externe Kommandos definiert werden, welche durch Collectd " +"gestartet werden um Statistik-Werte einzulesen. Die Werte werden dabei vom " +"STDOUT des aufgerufenen Programmes gelesen." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Hier können externe Kommandos definiert werden, welche durch Collectd " +"gestartet werden sobald konfigurierte Grenzwerte erreicht werden. Die Werte " +"welche die Benachrichtigung ausgelöst haben werden dabei an den STDIN des " +"aufgerufenen Programmes übergeben." + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Hier werden die Kriterien festgelegt nach welchen die zu überwachenden " +"Firewall-Regeln ausgewählt werden." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "Host" + +msgid "Hostname" +msgstr "Hostname" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "IP-Adresse oder Hostname zum Abfragen der Txtinfo-Ausagabe" + +msgid "IRQ Plugin Configuration" +msgstr "IRQ Plugin Konfiguration" + +msgid "Ignore source addresses" +msgstr "Quelladressen ignorieren" + +msgid "Incoming interface" +msgstr "eingehende Schnittstelle" + +msgid "Interface Plugin Configuration" +msgstr "Interface Plugin Konfiguration" + +msgid "Interfaces" +msgstr "Schnittstellen" + +msgid "Interrupts" +msgstr "Interrupts" + +msgid "Interval for pings" +msgstr "Intervall zwischen den Pings" + +msgid "Iptables Plugin Configuration" +msgstr "Iptables Plugin Konfiguration" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" +"Nichts auswählen um die zu überwachende Schnittstelle automatisch zu " +"bestimmen" + +msgid "Listen host" +msgstr "Listen-Host" + +msgid "Listen port" +msgstr "Listen-Port" + +msgid "Listener interfaces" +msgstr "Listen-Schnittstelle" + +msgid "Load Plugin Configuration" +msgstr "Load Plugin Konfiguration" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Maximale Anzahl erlaubter Verbindungen" + +msgid "Memory" +msgstr "Memory" + +msgid "Memory Plugin Configuration" +msgstr "Memory-Plugin-Konfiguration" + +msgid "Monitor all except specified" +msgstr "Alle bis auf Angegebene überwachen" + +msgid "Monitor all local listen ports" +msgstr "Alle durch lokale Dienste genutzten Ports überwachen" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Geräte überwachen" + +msgid "Monitor disks and partitions" +msgstr "Geräte und Partitionen überwachen" + +msgid "Monitor filesystem types" +msgstr "Datesystemtypen überwachen" + +msgid "Monitor hosts" +msgstr "Hosts überwachen" + +msgid "Monitor interfaces" +msgstr "Schnittstellen überwachen" + +msgid "Monitor interrupts" +msgstr "Interrups überwachen" + +msgid "Monitor local ports" +msgstr "lokale Ports überwachen" + +msgid "Monitor mount points" +msgstr "Mount-Punkte überwachen" + +msgid "Monitor processes" +msgstr "Überwachte Prozesse" + +msgid "Monitor remote ports" +msgstr "entfernte Ports überwachen" + +msgid "Name of the rule" +msgstr "Name der Regel" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "Netlink Plugin Konfiguration" + +msgid "Network" +msgstr "Netzwerk" + +msgid "Network Plugin Configuration" +msgstr "Network Plugin Konfiguration" + +msgid "Network plugins" +msgstr "Netzwerkplugins" + +msgid "Network protocol" +msgstr "Netzwerkprotokoll" + +msgid "Number of threads for data collection" +msgstr "Anzahl paralleler Sammelprozesse" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "OLSRd-Plugin-Konfiguration" + +msgid "Only create average RRAs" +msgstr "Nur 'average' RRAs erzeugen" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Optionen" + +msgid "Outgoing interface" +msgstr "ausgehende Schnittstelle" + +msgid "Output plugins" +msgstr "Ausgabeplugins" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Ping Plugin Konfiguration" + +msgid "Port" +msgstr "Port" + +msgid "Processes" +msgstr "Prozesse" + +msgid "Processes Plugin Configuration" +msgstr "Prozess Plugin Konfiguration" + +msgid "Processes to monitor separated by space" +msgstr "Zu überwachende Prozesse (getrennt durch Leerzeichen)" + +msgid "Processor" +msgstr "Prozessor" + +msgid "Qdisc monitoring" +msgstr "Queue Discipline überwachen" + +msgid "RRD XFiles Factor" +msgstr "RRD XFiles Faktor" + +msgid "RRD heart beat interval" +msgstr "RRD Heartbeatintervall" + +msgid "RRD step interval" +msgstr "RRD Schrittintervall" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "RRDTool Plugin Konfiguration" + +msgid "Rows per RRA" +msgstr "Spalten pro RRA" + +msgid "Script" +msgstr "Skript" + +msgid "Seconds" +msgstr "Sekunden" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Server-Host" + +msgid "Server port" +msgstr "Server-Port" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "Shapingklassen überwachen" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "Socket-Datei" + +msgid "Socket group" +msgstr "Socket-Nutzergruppe" + +msgid "Socket permissions" +msgstr "Socket-Berechtigungen" + +msgid "Source ip range" +msgstr "Quell-IP-Bereich" + +msgid "Specifies what information to collect about links." +msgstr "Bestimmt die zu sammelnden Per-Link-Informationen." + +msgid "Specifies what information to collect about routes." +msgstr "Bestimmt die zu sammelnden Per-Route-Informationen." + +msgid "Specifies what information to collect about the global topology." +msgstr "Bestimmt die zu sammelnden Informationen der globalen Topologie." + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "Statistiken" + +msgid "Storage directory" +msgstr "Speicherverzeichnis" + +msgid "Storage directory for the csv files" +msgstr "Speicherverzeichnis für die CSV-Dateien" + +msgid "Store data values as rates instead of absolute values" +msgstr "Werte nicht absolut sondern als Raten speichern" + +msgid "Stored timespans" +msgstr "gespeicherte Zeitspannen" + +msgid "System Load" +msgstr "Systemlast" + +msgid "TCP Connections" +msgstr "TCP-Verbindungen" + +msgid "TCPConns Plugin Configuration" +msgstr "TCPConns Plugin Konfiguration" + +msgid "TTL for network packets" +msgstr "TTL für Netzwerkpakete" + +msgid "TTL for ping packets" +msgstr "TTL für Ping Pakete" + +msgid "Table" +msgstr "Tabelle" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" +"Das NUT-Plugin liest Informationen über Unterbrechungsfreie Stromversorgungen" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" +"Das OLSRd-Plugin liest Informationen über Meshnetzwerke aus der OLSR-Txtinfo-" +"Erweiterung." + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" +"Das Conntrack-Plugin sammelt Daten über die Anzahl der verfolgten " +"Verbindungen." + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" +"Das CPU-Plugin sammelt grundlegende Statistiken über die Prozessorauslastung." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"Das CSV-Plugin speichert die gesammelten Daten im CSV-Format, geeignet für " +"die Weiterverarbeitung durch externe Programme." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"Das DF-Plugin sammelt Statistiken über den Speicherverbrauch auf " +"verschiedenen Geräten, Mount-Punkten oder Dateisystemtypen." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"Das Disk-Plugin sammelt detaillierte Statistiken über die Auslastung auf " +"ausgewählten Festplatten und Partitionen." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"Das DNS-Plugin sammelt detaillierte Statistiken über DNS-bezogenen Verkehr " +"auf ausgewählten Schnittstellen." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"Das E-Mail Plugin erstellt einen Unix-Socket welcher benutzt werden kann um " +"E-Mail-Statistiken an den laufenden Collectd-Daemon zu übermitteln. Dieses " +"Plugin ist primär für die Verwendung zusammen mit Mail::SpamAssasin::Plugin::" +"Collectd gedacht, kann aber auch anderweitig verwendet werden." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"Das Exec-Plugin startet externe Kommandos um Werte einzulesen oder um " +"Benachrichtigungen auszulösen falls bestimmte Grenzwerte erreicht werden." + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" +"Das Interface-Plugin sammelt allgemeine Verkehrsstatistiken auf ausgewählten " +"Schnittstellen." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"Das Iptables-Plugin überwacht ausgewählte Firewall-Regeln und sammelt Werte " +"über die Anzahl der verarbeiteten Pakete und Bytes." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"Das IRQ-Plugin überwacht die Anzahl der Aufrufe pro Sekunde für jeden " +"ausgewählten Interrupt. Wird kein Interrupt ausgewählt überwacht das Plugin " +"alle im System vorhandenen Interrupts." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" +"Das iwinfo-Plugin sammelt Statistiken über die WLAN-Signalstärke, den " +"Rauschpegel und die Signalqualität." + +msgid "The load plugin collects statistics about the general system load." +msgstr "Das Load-Plugin sammelt Informationen über die allgemeine Systemlast." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" +"Das memory-Plugin sammelt Statistiken über die RAM-Auslastung des Systems." + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"Das Netlink-Plugin sammelt erweiterte QoS-Informationen wie QDisc-, Class- " +"und Filter-Statistiken auf ausgewählten Schnittstellen." + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"Das Network-Plugin ermöglicht die netzwerkgestützte Kommunikation zwischen " +"verschiedenen Collectd-Instanzen. Collectd kann gleichzeitig im Server- und " +"Client-Modus betrieben werden. Im Client-Modus werden lokal gesammelte Daten " +"an einen Collectd-Server übermittelt, im Server-Modus empfängt die lokale " +"Instanz Daten von anderen Installationen." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"Das Ping-Plugin sendet ICMP-Echo-Requests an ausgewählte Hosts und misst die " +"Antwortzeiten für jede Adresse." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"Das Prozess-Plugin sammelt Statistiken über Prozess-Zeit, Speicher-Fehler " +"und Speicher-Verbrauch ausgewählter Prozesse" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"Das RRDTool-Plugin speichert die gesammelten Daten in sogenannten RRD-" +"Datenbanken, der Grundlage für die Diagramm-Bilder.

Warnung: Falsche Werte resultieren in einem sehr hohen " +"Speicherverbrauch im temporären Verzeichnis. Das kann das Gerät unbrauchbar " +"machen, da Systemspeicher für den regulären Betrieb fehlt!" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"Das TCPConns-Plugin sammelt Informationen über offene TCP-Verbindungen auf " +"ausgewählten Ports." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"Das Unixsock-Plugin erstellt einen Unix-Socket über welchen gesammelte Werte " +"aus der laufenden Collectd-Instanz ausgelesen werden können." + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"Diese Sektion legt fest auf welchen Schnittstellen Collectd auf eingehende " +"Verbindungen wartet." + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" +"Diese Sektion legt fest zu welchen Collectd-Servern die lokal gesammelten " +"Daten gesendet werden." + +msgid "Try to lookup fully qualified hostname" +msgstr "automatisch vollen Hostnamen herausfinden" + +msgid "UPS" +msgstr "USV" + +msgid "UPS Plugin Configuration" +msgstr "Einstellungen des USV-Plugins" + +msgid "UPS name in NUT ups@host format" +msgstr "Name der USV in NUT im Format usv@host " + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Unixsock Plugin Konfiguration" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Pfad zu PID-Datei" + +msgid "User" +msgstr "Nutzer" + +msgid "Verbose monitoring" +msgstr "Schnittstellen detailliert überwachen" + +msgid "Wireless" +msgstr "Drahtlos" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "Wireless-iwinfo Plugin Konfiguration" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "z.B. br-ff" + +msgid "e.g. br-lan" +msgstr "z.B. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "z.B. reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "max. 16 Buchstaben" + +msgid "reduces rrd size" +msgstr "reduziert die RRD Größe" + +msgid "seconds; multiple separated by space" +msgstr "mehrere mit Leerzeichen trennen" + +msgid "server interfaces" +msgstr "Server-Schnittstellen" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Systemplugins" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "Das Statistik-Paket basiert auf Collectd und nutzt RRD " +#~ "Tool um die gesammelten Daten in Diagramme zu rendern." + +#~ msgid "Installed network plugins:" +#~ msgstr "Installierte Netzwerk-Plugins:" + +#~ msgid "Installed output plugins:" +#~ msgstr "Installierte Ausgabe-Plugins:" + +#~ msgid "" +#~ "Network plugins are used to collect information about open tcp " +#~ "connections, interface traffic, iptables rules etc." +#~ msgstr "" +#~ "Netzwerkplugins werden benutzt um Informationen über offene TCP-" +#~ "Verbindungen, Datenverkehr/Volumen, Iptables/Firewall Regeln etc. zu " +#~ "sammeln" + +#~ msgid "" +#~ "Output plugins provide different possibilities to store collected data. " +#~ "It is possible to enable multiple plugin at one, for example to store " +#~ "collected data in rrd databases and to transmit the data over the network " +#~ "to other collectd instances." +#~ msgstr "" +#~ "Ausgabeplugins ermöglichen es gesammelte Daten zu speichern. Mehrere " +#~ "Plugins können gleichzeitig aktiviert werden, z.B. um Daten in RRD-" +#~ "Datenbanken zu speichern und gleichzeitig über das Netzwerk an andere " +#~ "Collectd-Instanzen zu versenden." + +#~ msgid "" +#~ "System plugins collecting values about system state and ressource usage " +#~ "on the device.:" +#~ msgstr "" +#~ "Systemplugins sammeln Daten zum Systemzustand und den Ressoursenbedarf " +#~ "des Gerätes" + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "Das Wireless-Plugin sammelt Statistiken über die drahtlose Signalstärke, " +#~ "den Störpegel und die Signalqualität." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Wireless Plugin Konfiguration" diff --git a/feeds/luci/applications/luci-app-statistics/po/el/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/el/rrdtool.po new file mode 100644 index 0000000..1d81166 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/el/rrdtool.po @@ -0,0 +1,358 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-28 02:08+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/el/statistics.po b/feeds/luci/applications/luci-app-statistics/po/el/statistics.po new file mode 100644 index 0000000..379d443 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/el/statistics.po @@ -0,0 +1,733 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-03-18 15:32+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Action (target)" +msgstr "" + +msgid "Add command for reading values" +msgstr "" + +msgid "Add matching rule" +msgstr "" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "" + +msgid "Aggregate number of connected users" +msgstr "" + +#, fuzzy +msgid "Base Directory" +msgstr "Κατάλογος βάσης" + +msgid "Basic monitoring" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "" + +msgid "CSV Output" +msgstr "Έξοδος CSV" + +msgid "CSV Plugin Configuration" +msgstr "" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "Ρυθμίσεις Collectd" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Το Collectd είναι ένας μικρός δαίμονας για τη συλλογή δεδομένων από διάφορες " +"πηγές μέσω διάφορων προσθέτων. Σε αυτή τη σελίδα μπορείτε να αλλάξετε τις " +"γενικές ρυθμίσεις του δαίμονα collectd." + +msgid "Conntrack" +msgstr "Conntrack" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "" + +msgid "Data collection interval" +msgstr "Περίοδος συλλογής δεδομένων" + +msgid "Datasets definition file" +msgstr "Αρχείο ορισμού συνόλων δεδομένων" + +msgid "Destination ip range" +msgstr "" + +msgid "Directory for collectd plugins" +msgstr "Κατάλογος για πρόσθετα collectd" + +#, fuzzy +msgid "Directory for sub-configurations" +msgstr "Κατάλογος υπο-ρυθμίσεων" + +msgid "Disk Plugin Configuration" +msgstr "" + +msgid "Disk Space Usage" +msgstr "Χρήση Χώρου στον δίσκο" + +msgid "Disk Usage" +msgstr "Χρήση Δίσκου" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "Εμφάνιση χρονικού εύρους »" + +msgid "E-Mail Plugin Configuration" +msgstr "" + +msgid "Email" +msgstr "Ηλ. Ταχυδρομείο" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "Τείχος προστασίας" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Γραφήματα" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "Όνομα υπολογιστή" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "" + +msgid "Ignore source addresses" +msgstr "" + +msgid "Incoming interface" +msgstr "" + +msgid "Interface Plugin Configuration" +msgstr "" + +msgid "Interfaces" +msgstr "Διεπαφές" + +msgid "Interrupts" +msgstr "Διακοπές" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "" + +msgid "Memory" +msgstr "Μνήμη" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "" + +msgid "Monitor disks and partitions" +msgstr "" + +msgid "Monitor filesystem types" +msgstr "" + +msgid "Monitor hosts" +msgstr "" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "" + +msgid "Monitor local ports" +msgstr "" + +msgid "Monitor mount points" +msgstr "" + +msgid "Monitor processes" +msgstr "" + +msgid "Monitor remote ports" +msgstr "" + +msgid "Name of the rule" +msgstr "Όνομα κανόνα" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "" + +msgid "Network" +msgstr "Δίκτυο" + +msgid "Network Plugin Configuration" +msgstr "" + +msgid "Network plugins" +msgstr "Πρόσθετα δικτύου" + +msgid "Network protocol" +msgstr "" + +msgid "Number of threads for data collection" +msgstr "Αριθμός νημάτων για τη συλλογή δεδομένων" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Outgoing interface" +msgstr "" + +msgid "Output plugins" +msgstr "Πρόσθετα εξόδου" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "Διεργασίες" + +msgid "Processes Plugin Configuration" +msgstr "" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "Επεξεργαστής" + +msgid "Qdisc monitoring" +msgstr "" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "Δευτερόλεπτα" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "Στατιστικά" + +msgid "Storage directory" +msgstr "" + +msgid "Storage directory for the csv files" +msgstr "" + +msgid "Store data values as rates instead of absolute values" +msgstr "" + +msgid "Stored timespans" +msgstr "" + +msgid "System Load" +msgstr "Φόρτος Συστήματος" + +msgid "TCP Connections" +msgstr "Συνδέσεις TCP" + +msgid "TCPConns Plugin Configuration" +msgstr "" + +msgid "TTL for network packets" +msgstr "" + +msgid "TTL for ping packets" +msgstr "" + +msgid "Table" +msgstr "Πίνακας" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Αρχείο PID σε χρήση" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "" + +msgid "Wireless" +msgstr "Ασύρματο" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "π.χ. br-ff" + +msgid "e.g. br-lan" +msgstr "π.χ. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "" + +msgid "max. 16 chars" +msgstr "" + +msgid "reduces rrd size" +msgstr "" + +msgid "seconds; multiple separated by space" +msgstr "" + +msgid "server interfaces" +msgstr "" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Πρόσθετα συστήματος" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "Το πακέτο στατιστικών βασίζεται στο Collectd και χρησιμοποιεί το RRD Tool για να σχεδιάσει διαγράμματα από τα συλλεγόμενα " +#~ "δεδομένα." diff --git a/feeds/luci/applications/luci-app-statistics/po/en/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/en/rrdtool.po new file mode 100644 index 0000000..d780144 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/en/rrdtool.po @@ -0,0 +1,358 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "%H: Wireless - Signal Noise Ratio" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "dBm" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Noise Level" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "Signal Strength" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Wireless - Signal Quality" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "n" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Signal Quality" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "%H: ICMP Roundtrip Times" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "ms" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "%di" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "%H: Firewall - Processed Packets" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "Packets/s" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "Chain \"%di\"" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "%H: Netlink - Transfer on %pi" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "Bytes/s" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "Bytes (%ds)" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "%H: Netlink - Packets on %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "Packets/s" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "Processed (%ds)" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "Dropped (%ds)" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "Errors (%ds)" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "%H: Netlink - Multicast on %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "Packets/s" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "Packets" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "%H: Netlink - Collisions on %pi" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "Collisions/s" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "Collisions" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "%H: Netlink - Errors on %pi" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "Errors/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "%di" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "%di" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "%H: Processes" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "Processes/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "%di" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "%H: Process %pi - used cpu time" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "Jiffies" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "system" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "user" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "%H: Process %pi - threads and processes" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "Count" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "%ds" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "%H: Process %pi - page faults" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "Pagefaults" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "page faults" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "%H: Process %pi - virtual memory size" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "Bytes" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "virtual memory" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "%H: Usage on Processor #%pi" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "%" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "%di" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "%H: Transfer on %di" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "Bytes/s" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "%H: Packets on %di" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "Packets/s" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "%H: TCP-Connections to Port %pi" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "Connections/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "%di" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "%H: Disk Space Usage on %di" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "Bytes" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "%ds" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "%ds" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "%H: Interrupts" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "Issues/s" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "IRQ %di" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "%H: System Load" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "Load" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "1 min" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "5 min" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "15 min" diff --git a/feeds/luci/applications/luci-app-statistics/po/en/statistics.po b/feeds/luci/applications/luci-app-statistics/po/en/statistics.po new file mode 100644 index 0000000..aa956de --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/en/statistics.po @@ -0,0 +1,787 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:35+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "Action (target)" +msgstr "Action (target)" + +msgid "Add command for reading values" +msgstr "Add command for reading values" + +msgid "Add matching rule" +msgstr "Add matching rule" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "Add notification command" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Base Directory" + +msgid "Basic monitoring" +msgstr "Basic monitoring" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "CPU Plugin Configuration" + +msgid "CSV Output" +msgstr "CSV Output" + +msgid "CSV Plugin Configuration" +msgstr "CSV Plugin Configuration" + +msgid "Cache collected data for" +msgstr "Cache collected data for" + +msgid "Cache flush interval" +msgstr "Cache flush interval" + +msgid "Chain" +msgstr "Chain" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "Collectd Settings" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "DF Plugin Configuration" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "DNS Plugin Configuration" + +msgid "Data collection interval" +msgstr "Data collection interval" + +msgid "Datasets definition file" +msgstr "Datasets definition file" + +msgid "Destination ip range" +msgstr "Destination ip range" + +msgid "Directory for collectd plugins" +msgstr "Directory for collectd plugins" + +msgid "Directory for sub-configurations" +msgstr "Directory for sub-configurations" + +msgid "Disk Plugin Configuration" +msgstr "Disk Plugin Configuration" + +msgid "Disk Space Usage" +msgstr "Disk Space Usage" + +msgid "Disk Usage" +msgstr "Disk Usage" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "Display timespan »" + +msgid "E-Mail Plugin Configuration" +msgstr "E-Mail Plugin Configuration" + +msgid "Email" +msgstr "Email" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Enable this plugin" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Exec Plugin Configuration" + +msgid "Filter class monitoring" +msgstr "Filter class monitoring" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Flush cache after" +msgstr "Flush cache after" + +msgid "Forwarding between listen and server addresses" +msgstr "Forwarding between listen and server addresses" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Graphs" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "Hostname" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "IRQ Plugin Configuration" + +msgid "Ignore source addresses" +msgstr "Ignore source addresses" + +msgid "Incoming interface" +msgstr "Incoming interface" + +msgid "Interface Plugin Configuration" +msgstr "Interface Plugin Configuration" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interrupts" +msgstr "Interrupts" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "Iptables Plugin Configuration" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "Listen host" + +msgid "Listen port" +msgstr "Listen port" + +msgid "Listener interfaces" +msgstr "Listener interfaces" + +msgid "Load Plugin Configuration" +msgstr "Load Plugin Configuration" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Maximum allowed connections" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "Monitor all local listen ports" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Monitor devices" + +msgid "Monitor disks and partitions" +msgstr "Monitor disks and partitions" + +msgid "Monitor filesystem types" +msgstr "Monitor filesystem types" + +msgid "Monitor hosts" +msgstr "Monitor hosts" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "Monitor interrupts" + +msgid "Monitor local ports" +msgstr "Monitor local ports" + +msgid "Monitor mount points" +msgstr "Monitor mount points" + +msgid "Monitor processes" +msgstr "Monitor processes" + +msgid "Monitor remote ports" +msgstr "Monitor remote ports" + +msgid "Name of the rule" +msgstr "Name of the rule" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "Netlink Plugin Configuration" + +msgid "Network" +msgstr "Network" + +msgid "Network Plugin Configuration" +msgstr "Network Plugin Configuration" + +msgid "Network plugins" +msgstr "Network plugins" + +msgid "Network protocol" +msgstr "Network protocol" + +msgid "Number of threads for data collection" +msgstr "Number of threads for data collection" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "Only create average RRAs" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Options" + +msgid "Outgoing interface" +msgstr "Outgoing interface" + +msgid "Output plugins" +msgstr "Output plugins" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Ping Plugin Configuration" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "Processes" + +msgid "Processes Plugin Configuration" +msgstr "Processes Plugin Configuration" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "Processor" + +msgid "Qdisc monitoring" +msgstr "Qdisc monitoring" + +msgid "RRD XFiles Factor" +msgstr "RRD XFiles Factor" + +msgid "RRD heart beat interval" +msgstr "RRD heart beat interval" + +msgid "RRD step interval" +msgstr "RRD step interval" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "RRDTool Plugin Configuration" + +msgid "Rows per RRA" +msgstr "Rows per RRA" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "Seconds" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Server host" + +msgid "Server port" +msgstr "Server port" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "Shaping class monitoring" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "Source ip range" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "Storage directory" + +msgid "Storage directory for the csv files" +msgstr "Storage directory for the csv files" + +msgid "Store data values as rates instead of absolute values" +msgstr "Store data values as rates instead of absolute values" + +msgid "Stored timespans" +msgstr "Stored timespans" + +msgid "System Load" +msgstr "System Load" + +msgid "TCP Connections" +msgstr "TCP Connections" + +msgid "TCPConns Plugin Configuration" +msgstr "TCPConns Plugin Configuration" + +msgid "TTL for network packets" +msgstr "TTL for network packets" + +msgid "TTL for ping packets" +msgstr "TTL for ping packets" + +msgid "Table" +msgstr "Table" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "The cpu plugin collects basic statistics about the processor usage." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" +"The interface plugin collects traffic statistics on selected interfaces." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "The load plugin collects statistics about the general system load." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" +"This section defines to which servers the locally collected data is sent to." + +msgid "Try to lookup fully qualified hostname" +msgstr "Try to lookup fully qualified hostname" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Unixsock Plugin Configuration" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Used PID file" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "Verbose monitoring" + +msgid "Wireless" +msgstr "Wireless" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "e.g. br-ff" + +msgid "e.g. br-lan" +msgstr "e.g. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "e.g. reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "max. 16 chars" + +msgid "reduces rrd size" +msgstr "reduces rrd size" + +msgid "seconds; multiple separated by space" +msgstr "seconds; multiple separated by space" + +msgid "server interfaces" +msgstr "server interfaces" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "System plugins" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Wireless Plugin Configuration" diff --git a/feeds/luci/applications/luci-app-statistics/po/es/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/es/rrdtool.po new file mode 100644 index 0000000..3cf27a2 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/es/rrdtool.po @@ -0,0 +1,360 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-04-16 01:53+0200\n" +"Last-Translator: Jose \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "%H: Wireless - Relación señal/ruido" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "dBm" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Nivel de Ruido" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "Fuerza de la señal" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Wireless - Calidad de la señal" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "n" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Calidad de señal" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "%H: Tiempo de respuesta ICMP" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "ms" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "%di" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "%H: Firewall - Paquetes Procesados" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "Paquetes/s" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "Cadena \\\"%di\\\"" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "%H: Netlink - Traslado en %pi" + +# Bytes/s +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "Bytes/s" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "Bytes (%ds)" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "%H: Netlink - Paquetes en %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "Paquetes/s" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "Procesado (%ds)" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "Descartados (%ds)" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "Errores (%ds)" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "%H: Netlink - Multicast en %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "Paquetes/s" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "Paquetes" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "%H: Netlink - Colisiones en %pi" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "Colisiones/s" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "Colisiones" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "%H: Netlink - Errores en %pi" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "Errores/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "%di" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "%di" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "%H: Procesos" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "Procesos/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "%di" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "%H: Proceso %pi -tiempo de cpu utilizado" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "Jiffies" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "sistema" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "usuario" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "%H: Procesos %pi - Hilos y procesos" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "contar" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "%ds" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "%H: Procesos %pi - página de errores" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "Pagina de errores" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "Página de errores" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "%H: Proceso %pi - tamaño de la memoria virtual" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "Bytes" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "Memoria Virtual" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "%H: Uso en el procesador #%pi" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "%" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "%di" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "%H: Transferencia en %di" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "Bytes/s" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "%H: Paquetes en %di" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "Paquetes/s" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "%H: Conexiones TCP en el Puerto %pi" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "Conexiones/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "%di" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "%H: Uso de espacio de disco en %di" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "Bytes" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "%ds" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "%ds" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "%H: Interrupciones" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "cuestiones/s" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "IRQ %di" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "%H: Carga de sistema" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "Carga" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "1 minuto" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "5 minutos" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "15 minutos" diff --git a/feeds/luci/applications/luci-app-statistics/po/es/statistics.po b/feeds/luci/applications/luci-app-statistics/po/es/statistics.po new file mode 100644 index 0000000..ef186b1 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/es/statistics.po @@ -0,0 +1,847 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-12-12 20:19+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "Acción (objetivo)" + +msgid "Add command for reading values" +msgstr "Añadir comando para leer valores" + +msgid "Add matching rule" +msgstr "Añadir regla" + +msgid "Add multiple hosts separated by space." +msgstr "Añadir múltiples máquinas separadas por espacio." + +msgid "Add notification command" +msgstr "Añadir comando de notificación" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Directorio Base" + +msgid "Basic monitoring" +msgstr "Monitorización básica" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "Configuración del plugin de CPU" + +msgid "CSV Output" +msgstr "Salida CSV" + +msgid "CSV Plugin Configuration" +msgstr "Configuración del plugin de CSV" + +msgid "Cache collected data for" +msgstr "Almacenar datos recogidos para" + +msgid "Cache flush interval" +msgstr "Intervalo de limpieza del caché" + +msgid "Chain" +msgstr "Cadena" + +msgid "CollectLinks" +msgstr "Enlaces" + +msgid "CollectRoutes" +msgstr "Rutas" + +msgid "CollectTopology" +msgstr "Topología" + +msgid "Collectd Settings" +msgstr "Configuración de Collectd" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd is un demonio para la recolección de datos desde varias fuentes a " +"través de la utilización de diferentes plugins. Aquí puede cambiar la " +"configuración general del demonio que maneja collectd." + +msgid "Conntrack" +msgstr "Seguimiento" + +msgid "Conntrack Plugin Configuration" +msgstr "Configuración del seguimiento" + +msgid "DF Plugin Configuration" +msgstr "Configuración del plugin DF" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "Configuración del plugin DNS" + +msgid "Data collection interval" +msgstr "Intervalo de recolección de datos" + +msgid "Datasets definition file" +msgstr "Archivo de definición de conjunto de datos" + +msgid "Destination ip range" +msgstr "Rango IP de destino" + +msgid "Directory for collectd plugins" +msgstr "Directorio para los plugins de collectd" + +msgid "Directory for sub-configurations" +msgstr "Directorio para las sub-configuraciones" + +msgid "Disk Plugin Configuration" +msgstr "Configuración del plugin Disco" + +msgid "Disk Space Usage" +msgstr "Espacio en disco ocupado" + +msgid "Disk Usage" +msgstr "Disco ocupado" + +msgid "Display Host »" +msgstr "Mostrar máquina »" + +msgid "Display timespan »" +msgstr "Mostrar lapso de tiempo »" + +msgid "E-Mail Plugin Configuration" +msgstr "Configuración del plugin email" + +msgid "Email" +msgstr "Correo electrónico" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Activar este plugin" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Configuración del plugin Exec" + +msgid "Filter class monitoring" +msgstr "Monitorización del filtro de clases" + +msgid "Firewall" +msgstr "Cortafuegos" + +msgid "Flush cache after" +msgstr "Vaciar caché tras" + +msgid "Forwarding between listen and server addresses" +msgstr "Retransmitir entre las direcciones de escucha y servidor" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Gráficas" + +msgid "Group" +msgstr "Grupo" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Aquí puede definir los comandos externos que iniciará collectd para leer " +"ciertos valores. Los valores se leen desde la salida estándar (stdout)." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Aquí puede definir los comandos externos que iniciará collectd cuando se " +"alcancen ciertos valores umbral." + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Aquí puede definir varios criterios de selección de reglas de iptables " +"monitorizadas." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "Máquina" + +msgid "Hostname" +msgstr "Nombre de máquina" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "IP o nombre de máquina desde la que obtener la salida de txtinfo" + +msgid "IRQ Plugin Configuration" +msgstr "Configuración del plugin IRQ" + +msgid "Ignore source addresses" +msgstr "Ignorar direcciones de origen" + +msgid "Incoming interface" +msgstr "Interfaz de entrada" + +msgid "Interface Plugin Configuration" +msgstr "Configuración del interfaz de plugins" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interrupts" +msgstr "Interrupciones" + +msgid "Interval for pings" +msgstr "Intervalo entre pings" + +msgid "Iptables Plugin Configuration" +msgstr "Configuración del plugin Iptables" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "No marcar para determinar automáticamente que interfaces monitorizar." + +msgid "Listen host" +msgstr "Máquina de escucha" + +msgid "Listen port" +msgstr "Puerto de escucha" + +msgid "Listener interfaces" +msgstr "Interfaces para escuchar" + +msgid "Load Plugin Configuration" +msgstr "Configuración del plugin de carga" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Máximo número de conexiones" + +msgid "Memory" +msgstr "Memoria" + +msgid "Memory Plugin Configuration" +msgstr "Configuración del plugin Memoria" + +msgid "Monitor all except specified" +msgstr "Monitorizar todos menos los especificados" + +msgid "Monitor all local listen ports" +msgstr "Monitorizar todos los puertos de escucha locales" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Dispositivos a monitonizar" + +msgid "Monitor disks and partitions" +msgstr "Monitorizar discos y particiones" + +msgid "Monitor filesystem types" +msgstr "Monitorizar tipos de sistema de archivos" + +msgid "Monitor hosts" +msgstr "Monitorizar máquinas" + +msgid "Monitor interfaces" +msgstr "Monitorizar interfaces" + +msgid "Monitor interrupts" +msgstr "Monitorizar interrupciones" + +msgid "Monitor local ports" +msgstr "Monitorizar puertos locales" + +msgid "Monitor mount points" +msgstr "Monitorizar puntos de montaje" + +msgid "Monitor processes" +msgstr "Monitorizar procesos" + +msgid "Monitor remote ports" +msgstr "Monitorizar puertos remotos" + +msgid "Name of the rule" +msgstr "Nombre de la regla" + +msgid "Netlink" +msgstr "Enlace de red" + +msgid "Netlink Plugin Configuration" +msgstr "Configuración del plugin \"enlace de red\"" + +msgid "Network" +msgstr "Red" + +msgid "Network Plugin Configuration" +msgstr "Configuración del plugin \"Red\"" + +msgid "Network plugins" +msgstr "Plugins de red" + +msgid "Network protocol" +msgstr "Protocolo de red" + +msgid "Number of threads for data collection" +msgstr "Número de hilos para recolección de datos" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "Configuración del plugin \"OLSRd\"" + +msgid "Only create average RRAs" +msgstr "Crear sólo RRAs medias" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Opciones" + +msgid "Outgoing interface" +msgstr "Interfaz de salida" + +msgid "Output plugins" +msgstr "Plugins de salida" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Configuración del plugin \"Ping\"" + +msgid "Port" +msgstr "Puerto" + +msgid "Processes" +msgstr "Procesos" + +msgid "Processes Plugin Configuration" +msgstr "Configuración del plugin \"Procesos\"" + +msgid "Processes to monitor separated by space" +msgstr "Procesos a monitorizar (separados por espacios)" + +msgid "Processor" +msgstr "Procesador" + +msgid "Qdisc monitoring" +msgstr "Monitorización Qdisc" + +msgid "RRD XFiles Factor" +msgstr "Factor XFiles RRD" + +msgid "RRD heart beat interval" +msgstr "Intervalo de pulso RRD" + +msgid "RRD step interval" +msgstr "Intervalo de paso RRD" + +msgid "RRDTool" +msgstr "Herramienta RRD" + +msgid "RRDTool Plugin Configuration" +msgstr "Configuración del plugin \"Herramienta RRD\"" + +msgid "Rows per RRA" +msgstr "Filas por RRA" + +msgid "Script" +msgstr "Guión" + +msgid "Seconds" +msgstr "Segundos" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Máquina servidor" + +msgid "Server port" +msgstr "Puerto servidor" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "Monitorización de la clase shaping" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "Fichero de sockets" + +msgid "Socket group" +msgstr "Grupo socket" + +msgid "Socket permissions" +msgstr "Permisos para socket" + +msgid "Source ip range" +msgstr "Rango de direcciones IP origen" + +msgid "Specifies what information to collect about links." +msgstr "Especifica qué información recolectar sobre enlaces." + +msgid "Specifies what information to collect about routes." +msgstr "Especifica qué información recolectar sobre rutas." + +msgid "Specifies what information to collect about the global topology." +msgstr "Especifica qué información recolectar sobre la topología global." + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "Estadísticas" + +msgid "Storage directory" +msgstr "Directorio de guardado" + +msgid "Storage directory for the csv files" +msgstr "Directorio para guardar archivos csv" + +msgid "Store data values as rates instead of absolute values" +msgstr "Guardar datos como ratios en vez de valores absolutos" + +msgid "Stored timespans" +msgstr "Intervalos almacenados" + +msgid "System Load" +msgstr "Carga del sistema" + +msgid "TCP Connections" +msgstr "Conexiones TCP" + +msgid "TCPConns Plugin Configuration" +msgstr "Configuración del plugin \"Conexiones TCP\"" + +msgid "TTL for network packets" +msgstr "TTL para paquetes de red" + +msgid "TTL for ping packets" +msgstr "TTL para paquetes de ping" + +msgid "Table" +msgstr "Tabla" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" +"El plugin NUT obtiene información sobre Sistemas de Alimentación " +"Ininterrumpida." + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" +"El plugin OLSRd lee información sobre redes distribuidas desde el plugin " +"txtinfo de OLSRd." + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" +"El plugin \"Seguimiento\" recoge estadísticas sobre el número de conexiones " +"analizadas." + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" +"El plugin \"CPU\" recolecta estadísticas básicas acerca del uso del " +"procesador." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"El plugin \"CSV\" almacena los datos recolectados en un archivo con formato " +"csv para su procesado posterior con programas de terceros." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"El plugin \"DF\" recolecta estadísticas acerca del uso del espacio en disco " +"en diferentes dispositivos, puntos de montaje y tipos de sistema de archivos." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"El plugin \"Disco\" recolecta estadísticas detallada acerca de su " +"utilización para las particiones seleccionadas o bien el disco completo." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"El plugin \"DNS\" recolecta estadísticas detalladas acerca del trafico DNS " +"en las interfaces seleccionadas." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"El plugin \"eMail\" crea un socket de unix (unix-socket) que puede " +"utilizarse para transmitir estadísticas de email a un demonio collectd en " +"ejecución. Este plugin fue desarrollado, en primer instancia, para ser " +"utilizado en conjunto con Mail::SpamAssasin::Plugin::Collectd pero puede " +"utilizarse de diferentes formas." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"El plugin \"Exec\" inicia comandos externos para leer valores o notificar a " +"procesos externos cuando determinados valores se alcanzan." + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" +"El plugin \"Interface\" recoge estadísticas de tráfico en las interfaces " +"seleccionadas." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"El plugin \"Iptables\" monitoriza las reglas seleccionadas del cortafuegos y " +"recoge información de bytes y paquetes procesados por cada regla." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"El plugin IRQ monitorizará las activaciones por segundo de cada interrupción " +"elegida. Si no se selecciona ninguna se monitorizarán todas." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" +"El plugin \"iwinfo\" recolecta estadísticas sobre la potencia de la señal " +"inalámbrica, ruido y calidad." + +msgid "The load plugin collects statistics about the general system load." +msgstr "" +"El plugin \"carga\" recoge estadísticas sobre la carga general del sistema." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "El plugin \"memoria\" recoge estadísticas sobre el uso de memoria." + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"El plugin \"netlink\" recoge informaciones extendidas como estadísticas " +"qdisc-, clase- y filtro- para las interfaces seleccionadas." + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"El plugin \"red\" proporciona comunicación entre diferentes instancias de " +"collectd. Collectd puede operar tanto en modo cliente como en modo servidor. " +"En modo cliente la información recogida se envía a una instancia que se " +"encuentre en modo servidor. En modo servidor la instancia recibe datos de " +"otras máquinas." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"El plugin \"ping\" enviará ecos ICMP a las máquinas elegifas para medir el " +"tiempo de viaje para cada host." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"El plugin \"procesos\" recoge información como tiempo de CPU, fallos de " +"página y uso de memoria de los procesos elegidos." + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"El plugin \"rrdtool\" almacena datos en ficheros de bb.dd. RRD que son la " +"base para los diagramas.

¡Ojo: Configurar valores " +"incorrectos puede hacer que se use mucho espacio en el directorio temporal y " +"puede hacer que el dispositivo funcione mal!" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"El plugin \"tcpconns\" recoge información de conexiones TCP abiertas en los " +"puertos seleccionados." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"El plugin \"unixsock\" crea un socket UNIX que se puede usar para leer los " +"datos recogidos por una instancia collectd." + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"Esta sección define sobre qué interfaces collectd esperará conexiones " +"entrantes." + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" +"Esta sección define a qué servidores se envían los datos recolectados " +"localmente." + +msgid "Try to lookup fully qualified hostname" +msgstr "Intenta resolver el nombre de máquina cualificado" + +msgid "UPS" +msgstr "SAI" + +msgid "UPS Plugin Configuration" +msgstr "Configuración del plugin SAI" + +msgid "UPS name in NUT ups@host format" +msgstr "Nombre del SAI en el formato de NUT sai@máquina" + +msgid "UnixSock" +msgstr "Socket UNIX" + +msgid "Unixsock Plugin Configuration" +msgstr "Configuración del plugin \"UnixSock\"" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Archivo PID utilizado" + +msgid "User" +msgstr "Usuario" + +msgid "Verbose monitoring" +msgstr "Monitorización detallada" + +msgid "Wireless" +msgstr "Red inalámbrica" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "Configuración plugin \"Wireless iwinfo\"" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "p.e. br-ff" + +msgid "e.g. br-lan" +msgstr "p.e. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "p.e. reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "16 caracteres máximo" + +msgid "reduces rrd size" +msgstr "reduce el tamaño RRD" + +msgid "seconds; multiple separated by space" +msgstr "segundos (varios separados por espacio)" + +msgid "server interfaces" +msgstr "interfaces servidores" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Plugins del sistema" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "El paquete \"estadísticas\" está basado en Collectd y utiliza RRD Tool para dibujar gráficos con los datos recogidos." + +#~ msgid "Installed network plugins:" +#~ msgstr "Plugins de red instalados:" + +#~ msgid "Installed output plugins:" +#~ msgstr "Plugins de salida instalados:" + +#~ msgid "" +#~ "Network plugins are used to collect information about open tcp " +#~ "connections, interface traffic, iptables rules etc." +#~ msgstr "" +#~ "Los plugins de red se usan para recolectar información sobre conexiones " +#~ "TCP, tráfico en los interfaces, reglas de iptables, etc." + +#~ msgid "" +#~ "Output plugins provide different possibilities to store collected data. " +#~ "It is possible to enable multiple plugin at one, for example to store " +#~ "collected data in rrd databases and to transmit the data over the network " +#~ "to other collectd instances." +#~ msgstr "" +#~ "Los plugins de salida ofrecen varias posibilidades para almacenar los " +#~ "datos. Es posible activar varios plugins a la vez, por ejemplo para " +#~ "almacenar datos recolectados en bases de datos RRD y para transmitir los " +#~ "datos sobre la red a otras instancias de collectd." + +#~ msgid "" +#~ "System plugins collecting values about system state and ressource usage " +#~ "on the device.:" +#~ msgstr "" +#~ "Los plugins del sistema recolectan valores sobre el estado y el uso de " +#~ "recursos del dispositivo.:" + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "El plugin \"inalámbrico\" recoge estadísticas sobre fuerza de la señal, " +#~ "ruido y calidad." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Configuración del plugin \"Wireless\"" + +#~ msgid "Filepath of the unix socket" +#~ msgstr "Ruta de archivo para el socket de unix" + +#~ msgid "Group ownership of the unix socket" +#~ msgstr "Grupo (dueño) del socket de unix " + +#~ msgid "group name" +#~ msgstr "nombre del grupo" + +#~ msgid "File permissions of the unix socket" +#~ msgstr "Permisos de archivos del socket de unix" + +#~ msgid "octal" +#~ msgstr "octal" diff --git a/feeds/luci/applications/luci-app-statistics/po/fr/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/fr/rrdtool.po new file mode 100644 index 0000000..95545db --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/fr/rrdtool.po @@ -0,0 +1,358 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/fr/statistics.po b/feeds/luci/applications/luci-app-statistics/po/fr/statistics.po new file mode 100644 index 0000000..cacc64a --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/fr/statistics.po @@ -0,0 +1,795 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2011-11-23 22:32+0200\n" +"Last-Translator: fredb \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Action (target)" +msgstr "Action (cible)" + +msgid "Add command for reading values" +msgstr "Ajoute une commande pour lire des valeurs" + +msgid "Add matching rule" +msgstr "Ajouter une règle à surveiller" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "Ajoute une commande de notification" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Répertoire de base" + +msgid "Basic monitoring" +msgstr "Surveillance de base" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "Configuration du greffon sur le CPU" + +msgid "CSV Output" +msgstr "Sortie au format CSV" + +msgid "CSV Plugin Configuration" +msgstr "Configuration du greffon CSV" + +msgid "Cache collected data for" +msgstr "Mettre en cache les données collectées pendant" + +msgid "Cache flush interval" +msgstr "Intervalle de vidange du cache" + +msgid "Chain" +msgstr "Chaîne" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "Paramètres Collectd" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd est un petit démon collectant des données de sources variées à " +"travers différents greffons. Sur ce page, vous pouvez modifier les " +"paramètres généraux de ce démon collectd." + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "Configuration du greffon DF" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "Configuration du greffon DNS" + +msgid "Data collection interval" +msgstr "Période de récupération des données" + +msgid "Datasets definition file" +msgstr "Fichier de définition des lots de données" + +msgid "Destination ip range" +msgstr "plage réseau de destination" + +msgid "Directory for collectd plugins" +msgstr "Répertoire pour les greffons Collectd" + +msgid "Directory for sub-configurations" +msgstr "Répertoire pour les sous-configurations" + +msgid "Disk Plugin Configuration" +msgstr "Configuration du greffon Disque" + +msgid "Disk Space Usage" +msgstr "Utilisation de l'espace-disque" + +msgid "Disk Usage" +msgstr "Espace-disque" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "Période affichée »" + +msgid "E-Mail Plugin Configuration" +msgstr "Configuration du greffon des courriels" + +msgid "Email" +msgstr "Courriel" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Activer ce greffon" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Configuration du greffon Exec" + +msgid "Filter class monitoring" +msgstr "Surveillance des filtres" + +msgid "Firewall" +msgstr "Pare-feu" + +msgid "Flush cache after" +msgstr "Vidanger le cache après" + +msgid "Forwarding between listen and server addresses" +msgstr "Transfert entre les adresses en écoute et du serveur" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Graphiques" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Vous pouvez définir ici des commandes externes qui seront démarrées par " +"collectd pour lire certaines valeurs. Ces valeurs seront lisibles depuis " +"stdout." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Vous pouvez définir ici des commandes externes qui seront démarrées par " +"collectd quand certaines valeurs-seuil seront atteintes. Les valeurs " +"induisant ces démarrages seront fournies aux commandes externes via stdin." + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Vous pouvez définir ici les critères variés pour sélectionner les règles " +"iptables à surveiller." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "Nom de l'hôte" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "Configuration du greffon IRQ" + +msgid "Ignore source addresses" +msgstr "Ignorer les adresses-source" + +msgid "Incoming interface" +msgstr "Interface entrante" + +msgid "Interface Plugin Configuration" +msgstr "Configuration du greffon des Interfaces" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interrupts" +msgstr "Interruptions" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "Configuration du greffon IPtables" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "Hôte en écoute" + +msgid "Listen port" +msgstr "Port en écoute" + +msgid "Listener interfaces" +msgstr "Interfaces en écoute" + +msgid "Load Plugin Configuration" +msgstr "Configuration du greffon de charge-système" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Nb de Connexions autorisées au maximum" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "Surveiller tous les ports en écoute locaux" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Périphériques à surveiller" + +msgid "Monitor disks and partitions" +msgstr "Disques et partitions à surveiller" + +msgid "Monitor filesystem types" +msgstr "types de systèmes de fichier à surveiller" + +msgid "Monitor hosts" +msgstr "Hôtes à surveiller" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "Surveiller les interruptions" + +msgid "Monitor local ports" +msgstr "Surveiller les ports locaux" + +msgid "Monitor mount points" +msgstr "Points de montage à surveiller" + +msgid "Monitor processes" +msgstr "Processus à surveiller" + +msgid "Monitor remote ports" +msgstr "Surveiller les ports destinataires" + +msgid "Name of the rule" +msgstr "Nom de la règle" + +msgid "Netlink" +msgstr "" + +msgid "Netlink Plugin Configuration" +msgstr "Configuration du greffon du lien-réseau" + +msgid "Network" +msgstr "Réseau" + +msgid "Network Plugin Configuration" +msgstr "Configuration du greffon réseau" + +msgid "Network plugins" +msgstr "Greffons liés au réseau" + +msgid "Network protocol" +msgstr "Protocole réseau" + +msgid "Number of threads for data collection" +msgstr "Nombre de fils pour la récupération des données" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "Créer seulement des RRAs moyens" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Options" + +msgid "Outgoing interface" +msgstr "Interface sortante" + +msgid "Output plugins" +msgstr "Greffons liés aux résultats" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Configuration du greffon Ping" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "Processus" + +msgid "Processes Plugin Configuration" +msgstr "Configuration du greffon des processus" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "Processeur" + +msgid "Qdisc monitoring" +msgstr "Surveillance Qdisc" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "Intervalle de la pulsation RRD" + +msgid "RRD step interval" +msgstr "Intervalle d'avancement RRD" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "Configuration du greffon RRDTool" + +msgid "Rows per RRA" +msgstr "Lignes par RRA" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "Secondes" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Hôte du serveur" + +msgid "Server port" +msgstr "Port du serveur" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "Surveillance liées à la priorité" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "plage réseau source" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "Répertoire de stockage" + +msgid "Storage directory for the csv files" +msgstr "Répertoire de stockage pour les fichiers CSV" + +msgid "Store data values as rates instead of absolute values" +msgstr "Stocke les données sous forme de taux plutôt que de valeurs absolues" + +msgid "Stored timespans" +msgstr "Durée de la période enregistrée" + +msgid "System Load" +msgstr "Charge-système" + +msgid "TCP Connections" +msgstr "Connexions TCP" + +msgid "TCPConns Plugin Configuration" +msgstr "Configuration du plugin des connexions TCP" + +msgid "TTL for network packets" +msgstr "TTL des paquets-réseau" + +msgid "TTL for ping packets" +msgstr "TTL des paquets ping" + +msgid "Table" +msgstr "Table" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "Le greffon sur le CPU récupère des données sur l'usage du processeur." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"Le greffon CSV stocke les données collectées dans des fichiers au format CSV " +"pour être traités ultérieurement par des programmes externes." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"Le plugin DF récupère des données sur l'utilisation de l'espace-disque sur " +"différents périphériques, points de montage ou types de systèmes de fichiers." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"Le greffon Disque récupère des informations détaillées sur des disques ou " +"partitions sélectionnées." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"Le greffon DNS récupère des données détaillées à propos du trafic lié au DNS " +"sur des interfaces sélectionnées." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"Le greffon des courriels crée une socket UNIX qui peut être utilisée pour " +"transmettre des données sur les courriels à un démon collectd en fonction. " +"Ce greffon est d'abord destiné à être utilisé avec Mail::SpamAssasin::" +"Plugin::Collectd mais peut être utilisé d'autres manières également." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"Le greffon Exec lance des commandes externes pour lire des valeurs ou " +"notifie des processus externes quand certains seuils ont été atteints." + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" +"Ce greffon des interfaces collecte des statistiques de trafic sur les " +"interfaces sélectionnées." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"Le greffon IPtables surveillera des règles de pare-feu sélectionnées et " +"collectera des informations sur les octets et paquets IP traités par chaque " +"règle." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"Le greffon IRG surveillera le taux d'apparitions par seconde de chaque " +"interruption sélectionnée. Si aucune interruption n'est sélectionnée, toutes " +"sont surveillées." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" +"Le greffon de charge-système collecte des données sur la charge générale du " +"système." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"Le greffon de lien-réseau récupère sur les interfaces sélectionnées des " +"informations avancées liées à la QOS, aux classes et au filtrage." + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"Le greffon réseau fournit des communications-réseau entre différentes " +"instances collectd : ce programme peut fonctionner à la fois comme client et " +"serveur. En mode client, les données collectées localement sont transférées " +"à un serveur, en mode serveur, l'instance collectd locale reçoit des " +"informations d'autres hôtes." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"Le greffon ping envoie des paquets ICMP « echo reply » aux hôtes définis et " +"mesure le temps d'aller-retour avec chacun." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"Le greffon des processus récupère des informations comme le temps CPU, les " +"défauts de page et l'utilisation mémoire des processus définis." + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"Le greffon RRDTool stocke les informations récupérées dans des fichiers de " +"base de données RRD, sur lesquels s'appuient la génération de graphes.

Attention : Un mauvais paramètrage peut entraîner une très " +"grande consommation mémoire dans le répertoire temporaire, qui peut rendre " +"le matériel inutilisable !" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"Le greffon des connexions TCP récupère des informations sur les ouvertures " +"de connexions TCP sur les ports spécifiés." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"Cette section définit sur quelles interfaces collectd écoutera des " +"connexions entrantes." + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" +"Cette section définit à quels serveurs sont envoyées les données collectées " +"localement." + +msgid "Try to lookup fully qualified hostname" +msgstr "Tente de récupérer des noms d'hôtes complètement qualifiés" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "Socket Unix" + +msgid "Unixsock Plugin Configuration" +msgstr "Configuration du greffon de socket Unix" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Fichier PID utilisé" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "Surveillance verbeuse" + +msgid "Wireless" +msgstr "Sans-fil" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "p.ex. br-ff" + +msgid "e.g. br-lan" +msgstr "p.ex. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "p.ex. reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "Max. 16 caractères" + +msgid "reduces rrd size" +msgstr "Diminuer la taille RRD" + +msgid "seconds; multiple separated by space" +msgstr "En secondes ; séparer différentes valeurs par des espaces" + +msgid "server interfaces" +msgstr "Interfaces du serveur" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Greffons liés au système" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "Ce paquet d'outils statistiques s'appuie sur le logiciel Collectd et utilise RRD Tool pour calculer les graphes issus des " +#~ "données collectées." + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "Le greffon sans-fil récupère des informations sur la puissance du signal " +#~ "wifi, sa qualité et sur le bruit." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Configuration du greffon sans-fil" diff --git a/feeds/luci/applications/luci-app-statistics/po/he/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/he/rrdtool.po new file mode 100644 index 0000000..32b74f7 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/he/rrdtool.po @@ -0,0 +1,356 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/he/statistics.po b/feeds/luci/applications/luci-app-statistics/po/he/statistics.po new file mode 100644 index 0000000..0f876e6 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/he/statistics.po @@ -0,0 +1,712 @@ +# statistics.pot +# generated from ./applications/luci-statistics/luasrc/i18n/statistics.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-10 04:59+0200\n" +"Last-Translator: Snoof \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "" + +msgid "Add command for reading values" +msgstr "הוסף פקודה לקריאת נתונים" + +msgid "Add matching rule" +msgstr "" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "" + +msgid "Basic monitoring" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "" + +msgid "CSV Output" +msgstr "" + +msgid "CSV Plugin Configuration" +msgstr "" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS Plugin Configuration" +msgstr "" + +msgid "Data collection interval" +msgstr "" + +msgid "Datasets definition file" +msgstr "" + +msgid "Destination ip range" +msgstr "" + +msgid "Directory for collectd plugins" +msgstr "" + +msgid "Directory for sub-configurations" +msgstr "" + +msgid "Disk Plugin Configuration" +msgstr "" + +msgid "Disk Space Usage" +msgstr "" + +msgid "Disk Usage" +msgstr "" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "" + +msgid "E-Mail Plugin Configuration" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "" + +msgid "Exec Plugin Configuration" +msgstr "" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "" + +msgid "Ignore source addresses" +msgstr "" + +msgid "Incoming interface" +msgstr "" + +msgid "Interface Plugin Configuration" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interrupts" +msgstr "" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "" + +msgid "Monitor disks and partitions" +msgstr "" + +msgid "Monitor filesystem types" +msgstr "" + +msgid "Monitor hosts" +msgstr "" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "" + +msgid "Monitor local ports" +msgstr "" + +msgid "Monitor mount points" +msgstr "" + +msgid "Monitor processes" +msgstr "" + +msgid "Monitor remote ports" +msgstr "" + +msgid "Name of the rule" +msgstr "" + +msgid "Netlink" +msgstr "" + +msgid "Netlink Plugin Configuration" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Plugin Configuration" +msgstr "" + +msgid "Network plugins" +msgstr "" + +msgid "Network protocol" +msgstr "" + +msgid "Number of threads for data collection" +msgstr "" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Outgoing interface" +msgstr "" + +msgid "Output plugins" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Ping Plugin Configuration" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Processes Plugin Configuration" +msgstr "" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Qdisc monitoring" +msgstr "" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "" + +msgid "RRDTool Plugin Configuration" +msgstr "" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "" + +msgid "Storage directory for the csv files" +msgstr "" + +msgid "Store data values as rates instead of absolute values" +msgstr "" + +msgid "Stored timespans" +msgstr "" + +msgid "System Load" +msgstr "" + +msgid "TCP Connections" +msgstr "" + +msgid "TCPConns Plugin Configuration" +msgstr "" + +msgid "TTL for network packets" +msgstr "" + +msgid "TTL for ping packets" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "" + +msgid "Unixsock Plugin Configuration" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "" + +msgid "e.g. br-lan" +msgstr "" + +msgid "e.g. reject-with tcp-reset" +msgstr "" + +msgid "max. 16 chars" +msgstr "" + +msgid "reduces rrd size" +msgstr "" + +msgid "seconds; multiple separated by space" +msgstr "" + +msgid "server interfaces" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/hu/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/hu/rrdtool.po new file mode 100644 index 0000000..582c939 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/hu/rrdtool.po @@ -0,0 +1,359 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-01 10:38+0200\n" +"Last-Translator: juhosg \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "%H: Vezetéknélküli - Jel-zaj arány" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "dBm" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Zajszint" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "Jelerősség" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Vezetéknélküli - Jel minőség" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "n" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Jelminőség" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "%H: ICMP oda-vissza idő" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "ms" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "%di" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "%H: Tűzfal - feldolgozott csomagok" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "csomag/másodperc" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "Lánc \\\"%di\\\"" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "%H: Netlink - %pi forgalma" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "bájt/másodperc" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "bájtok (%ds)" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "%H: Netlink - %pi csomagjai" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "csomag/másodperc" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "feldolgozva (%ds)" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "eldobva (%ds)" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "hibák (%ds)" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "%H: Netlink - multicast %pi-n" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "csomag/másodperc" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "csomagok" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "%H: Netlink - ütközések %pi-n" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "ütközés/másodperc" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "Ütközések" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "%H: Netlink - hibák %pi-n" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "hiba/másodperc" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "%di" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "%di" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "%H: Folyamatok" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "folyamat/másodperc" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "%di" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "%H: Folyamat %pi - processzor idő" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "jiffie-k" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "rendszer" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "felhasználó" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "%H: Folyamat %pi - szálak és folyamatok" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "darab" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "%ds" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "%H: Folyamat %pi - laphibák" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "Laphibák" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "laphibák" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "%H: Folymat %pi - virtuális memória mérete" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "Bájtok" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "virtuális memória" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "%H: %pi processzor kihasználtsága" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "%" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "%di" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "%H: %di forgalma" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "bájt/másodperc" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "%H: %di csomagjai" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "csomag/másodperc" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "%H: TCP kapcsolatok a %pi portra" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "kapcsolat/másodperc" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "%di" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "%H: lemezterület felhasználás %di-n" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "bájt" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "%ds" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "%ds" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "%H: megszakítások" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "darab/másodperc" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "IRQ %di" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "%H: Rendszer terhelés" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "Terhelés" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "1 perc" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "5 perc" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "15 perc" diff --git a/feeds/luci/applications/luci-app-statistics/po/hu/statistics.po b/feeds/luci/applications/luci-app-statistics/po/hu/statistics.po new file mode 100644 index 0000000..78dfd60 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/hu/statistics.po @@ -0,0 +1,819 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-01-31 18:58+0200\n" +"Last-Translator: Sixtus \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "Tevékenység (cél)" + +msgid "Add command for reading values" +msgstr "Érték olvasására szolgáló parancs hozzáadása" + +msgid "Add matching rule" +msgstr "Szabály hozzáadása" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "Értesítési parancs hozzáadása" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Alapkönyvtár" + +msgid "Basic monitoring" +msgstr "Általános figyelés" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "CPU bővítmény beállítása" + +msgid "CSV Output" +msgstr "CSV kimenet" + +msgid "CSV Plugin Configuration" +msgstr "CSV bővítmény konfigurálása" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "Gyorsítótár ürítési időköz" + +msgid "Chain" +msgstr "Lánc" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "Collectd beállítások" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"A collectd változatos forrásokból különféle bővítményeken keresztül történő " +"adatgyűjtésre szolgáló kisméretű démon. Ezen az oldalon módosíthatja a " +"collectd démon általános beállításait." + +msgid "Conntrack" +msgstr "Conntrack" + +msgid "Conntrack Plugin Configuration" +msgstr "Conntrack bővítmény beállítása" + +msgid "DF Plugin Configuration" +msgstr "DF bővítmény beállítása" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "DNS bővítmény beállítása" + +msgid "Data collection interval" +msgstr "Adatgyűjtési időszak" + +msgid "Datasets definition file" +msgstr "Adatkészlet leíró fálj" + +msgid "Destination ip range" +msgstr "Cél IP tartomány" + +msgid "Directory for collectd plugins" +msgstr "Öszegyűjtött plug-in-ek könyvtára" + +msgid "Directory for sub-configurations" +msgstr "Al-beállítások könyvtára" + +msgid "Disk Plugin Configuration" +msgstr "Lemez bővítmény beállítása" + +msgid "Disk Space Usage" +msgstr "Felhasznált lemezterület" + +msgid "Disk Usage" +msgstr "Lemezhasználat" + +msgid "Display Host »" +msgstr "Host mutatása »" + +msgid "Display timespan »" +msgstr "Időszak megjelenítése »" + +msgid "E-Mail Plugin Configuration" +msgstr "E-Mail bővítmény beállítása" + +msgid "Email" +msgstr "E-mail" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Bővítmény engedélyezése" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Exec bővítmény beállítása" + +msgid "Filter class monitoring" +msgstr "Szűrő osztály figyelése" + +msgid "Firewall" +msgstr "Tűzfal" + +msgid "Flush cache after" +msgstr "Gyorsítótár ürítése ezután:" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Grafikonok" + +msgid "Group" +msgstr "Csoport" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Itt megadhatók külső parancsok amelyek a collectd által lesznek futtatva " +"bizonyos értékeke beolvasására. Az értékek a szabványos kimenetről lesznek " +"beolvasva." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Itt megadhatók külső parancsok amelyek a collectd által lesznek futtatva " +"amikor bizonyos küszbértékek elérésre kerülnek. A hívást kiváltó értékek a " +"meghívott programok szabványos bemenetére lesznek küldve." + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Itt addhatók meg különböző feltételek, amelyek alapján a megfigyelt iptables " +"szabályok kiválasztásra kerülnek." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "Gép" + +msgid "Hostname" +msgstr "Gépnév" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" +"Annak a gépnek a neve vagy IP címe ahonnan a txtinfo kimenete származik" + +msgid "IRQ Plugin Configuration" +msgstr "IRQ bővítmény beállítása" + +msgid "Ignore source addresses" +msgstr "Forrás címek figyelmen kívül hagyása" + +msgid "Incoming interface" +msgstr "Bejövő interfész" + +msgid "Interface Plugin Configuration" +msgstr "Interfész bővítmény beállítása" + +msgid "Interfaces" +msgstr "Interfészek" + +msgid "Interrupts" +msgstr "Megszakítások" + +msgid "Interval for pings" +msgstr "Ping-ek közötti idő" + +msgid "Iptables Plugin Configuration" +msgstr "Iptables bővítmény beállítása" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" +"Bejelölés nélkül a figyelendő iterfészek automatikusan kerülnek " +"kiválasztásra." + +msgid "Listen host" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "Terhelés bővítmény beállítása" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Megengedett kapcsolatok maximális száma" + +msgid "Memory" +msgstr "Memória" + +msgid "Memory Plugin Configuration" +msgstr "Memória bővítmény beállítása" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Eszközök figyelése" + +msgid "Monitor disks and partitions" +msgstr "Lemezek és partíciók figyelése" + +msgid "Monitor filesystem types" +msgstr "Fájlrendszer típusok figyelése" + +msgid "Monitor hosts" +msgstr "Gépek figyelése" + +msgid "Monitor interfaces" +msgstr "Interfészek figyelése" + +msgid "Monitor interrupts" +msgstr "Megszakítások figyelése" + +msgid "Monitor local ports" +msgstr "Helyi portok figyelése" + +msgid "Monitor mount points" +msgstr "Csatolási pontok figyelése" + +msgid "Monitor processes" +msgstr "Folyamatok figyelése" + +msgid "Monitor remote ports" +msgstr "Távoli portok figyelése" + +msgid "Name of the rule" +msgstr "A szabály neve" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "Netlink bővítmény beállítása" + +msgid "Network" +msgstr "Hálózat" + +msgid "Network Plugin Configuration" +msgstr "Hálózat bővítmény beállítása" + +msgid "Network plugins" +msgstr "Hálózati bővítmények" + +msgid "Network protocol" +msgstr "Hálózati protokoll" + +msgid "Number of threads for data collection" +msgstr "Az adatgyűjtő szálak száma" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "OLSRd bővítmény beállítása" + +msgid "Only create average RRAs" +msgstr "Csak átlag RRA-k létrehozása" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Lehetőségek" + +msgid "Outgoing interface" +msgstr "Kimenő interfész" + +msgid "Output plugins" +msgstr "Kimeneti bővítmények" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Ping bővítmény beállítása" + +msgid "Port" +msgstr "Port" + +msgid "Processes" +msgstr "Folyamatok" + +msgid "Processes Plugin Configuration" +msgstr "Folyamatok bővítmény beállítása" + +msgid "Processes to monitor separated by space" +msgstr "Figyelendő folyamatok szóközzel elválasztva" + +msgid "Processor" +msgstr "Processzor" + +msgid "Qdisc monitoring" +msgstr "Qdisc figyelés" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "RRDTool bővítmény beállítása" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "Parancsfájl" + +msgid "Seconds" +msgstr "másodperc" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Kiszolgáló gép" + +msgid "Server port" +msgstr "Kiszolgáló port" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "Socket fájlok" + +msgid "Socket group" +msgstr "Socket csoport" + +msgid "Socket permissions" +msgstr "Socket jogosultságok" + +msgid "Source ip range" +msgstr "Forrás IP tartomány" + +msgid "Specifies what information to collect about links." +msgstr "" +"Azt határozza meg, hogy az kapcsolatokról milyen információkat kell gyűjteni." + +msgid "Specifies what information to collect about routes." +msgstr "" +"Azt határozza meg, hogy az útvonalakról milyen információkat kell gyűjteni." + +msgid "Specifies what information to collect about the global topology." +msgstr "" +"Azt határozza meg, hogy a globális topológiáról milyen információkat kell " +"gyűjteni." + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "Statisztikák" + +msgid "Storage directory" +msgstr "Tárolási könyvtár" + +msgid "Storage directory for the csv files" +msgstr "A csv fájlok tárolási könyvtára" + +msgid "Store data values as rates instead of absolute values" +msgstr "Az adatok arányként történő tárolása abszolút értékek helyett" + +msgid "Stored timespans" +msgstr "Tárolt időszakok" + +msgid "System Load" +msgstr "Rendszerterhelés" + +msgid "TCP Connections" +msgstr "TCP kapcsolatok" + +msgid "TCPConns Plugin Configuration" +msgstr "TCPConns bővítény beállítása" + +msgid "TTL for network packets" +msgstr "TTL a hálózati csomagokhoz" + +msgid "TTL for ping packets" +msgstr "TTL a ping csomagokhoz" + +msgid "Table" +msgstr "Táblázat" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "A NUT bővítmény a szünetmentes tápokról ad információkat." + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" +"Az OLSRd bővítmény a összekapcsolt hálózatokról olvas információkat az OLSRd " +"txttinfo bővítményén keresztül." + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" +"A conntrack bővítmény a nyomon követett kapcsolatok számáról gyűjt " +"statisztikákat." + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" +"A processzor bővítmény a processzorhasználatról gyűjt alapvető " +"statisztikákat." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"A csv bővítmény segítségével az összegyűjtött adatok csv formátumú fájlba " +"menthetők külső programmal történő további feldolgozás céljára." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"A df bővítmény a lemezterület használatáról gyűjt statisztikákat különböző " +"eszközökön, csatolási pontokon vagy fájlrendszereken." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"A lemez bővítmény részletes használati statisztikákat készít a kiválasztott " +"paticiókhoz vagy teljes lemezekhez." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"A DNS bővítmény részletes adatokat gyűjt a kiválasztott interfészek DNS-hez " +"tartozó forgalmáról." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"Az email bővítmény egy unix socket-et hoz létre amely lehetővé teszi email-" +"statisztikáknak a továbbítását egy futó collect démonhoz. A bővítmény " +"elsősorban a Mail::SpamAssasin::Plugin::Collectd bővítménnyel együtt történő " +"használatra szolgál, de egyéb módokon is használható." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"Az exec bővítmény külső parancsokat indít értékek olvasására vagy külső " +"folyamatok értesítésére bizonyos küszöbértékek elérése esetén." + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" +"Az interface bővítmény forgalmi statisztikákat gyűjt a kiválasztott " +"interfészekről." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"Az iptables bővítmény kiválasztott tűzfal szabályok alapján információt " +"gyűjt a szabályonként feldolgozott bájtokról és csomagokról." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" +"A load bővítmény az általános rendszzer terhelésről gyűjt statisztikákat." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "A memória bővítmény a memórahasználatról gyűjt információkat." + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"A ping bővítmény ICMP echo kéréseket küld a kiválasztott gépekre és méri az " +"oda-vissza eltelt időt minden gép esetében." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"A tcpconns bővítmény a kiválasztott portokon lévő TCP kapcsolatokról gyűjt " +"információkat." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"A unixsock bővítmény létrehoz egy unix socket-et melyen keresztül " +"kiolvashatók az összegyűjtött adatok egy futó collectd-ből. " + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" +"Ez a szakasz határozza meg, hogy a helyileg összegyűjtött adatokat melyik " +"kiszolgálókra kell továbbítani." + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "UnixSock bővítmény beállítása" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Használt PID fájl" + +msgid "User" +msgstr "Felhasználó" + +msgid "Verbose monitoring" +msgstr "" + +msgid "Wireless" +msgstr "Vezeték nélküli" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "iwinfo vezeték nélküli bővítmény beállítása" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "pl. br-ff" + +msgid "e.g. br-lan" +msgstr "pl. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "pl. reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "max. 16 karakter" + +msgid "reduces rrd size" +msgstr "csökkenti az rrd adatbázis méretét" + +msgid "seconds; multiple separated by space" +msgstr "másodpercek; több szóközzel elválasztott érték is megadható" + +msgid "server interfaces" +msgstr "kiszolgáló interfész" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Rendszer bővítmények" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "A statisztikai csomag a collectd segédprogramon alapul és az RRD Tool segédprogramot használja a grafikonok " +#~ "elkészítésére az összegyűjtött adatokból." + +#~ msgid "Installed network plugins:" +#~ msgstr "Telepített hálózati bővítmények:" + +#~ msgid "Installed output plugins:" +#~ msgstr "Telepített kimeneti bővítmények:" + +#~ msgid "" +#~ "Network plugins are used to collect information about open tcp " +#~ "connections, interface traffic, iptables rules etc." +#~ msgstr "" +#~ "A hálózati bővítmények nyitott TCP kapcsolatok, interfész forgalom, " +#~ "iptables szabályok és ehhez hasonló információk gyűjtésére használhatók." + +#~ msgid "" +#~ "Output plugins provide different possibilities to store collected data. " +#~ "It is possible to enable multiple plugin at one, for example to store " +#~ "collected data in rrd databases and to transmit the data over the network " +#~ "to other collectd instances." +#~ msgstr "" +#~ "A kimeneti bővítmények különféle lehetőségeket biztosítanak az " +#~ "összegyűjtött adatok tárolásához. Lehetőség van többféle bővítmény " +#~ "egyidejű engedélyezésére, például az összegyűjtött adatok RRD " +#~ "adatbázisban történő tárolására és egyidejűleg hálózaton keresztül másik " +#~ "collectd példányhoz való továbbítására." + +#~ msgid "" +#~ "System plugins collecting values about system state and ressource usage " +#~ "on the device.:" +#~ msgstr "" +#~ "A rendszer bővítmények a rendszer állapotáról és az erőforrások " +#~ "használatáról gyűjtenek adatokat az eszközön." + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "A vezetéknélküli bővítmény vezetéknélküli jelerősségről, zajról és " +#~ "minőségről gyűjt információkat." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Vezetéknélküli bővítmény beállítása" diff --git a/feeds/luci/applications/luci-app-statistics/po/it/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/it/rrdtool.po new file mode 100644 index 0000000..8ae4472 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/it/rrdtool.po @@ -0,0 +1,359 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-02-03 14:50+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "stat_dg_title_wireless__signal_noise" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "stat_dg_label_wireless__signal_noise" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "stat_ds_signal_noise" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "stat_ds_signal_power" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "stat_dg_title_wireless__signal_quality" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "stat_dg_label_wireless__signal_quality" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "stat_ds_signal_quality" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "stat_dg_title_ping" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "stat_dg_label_ping" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "stat_ds_ping" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "stat_dg_title_iptables__ipt_packets" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "stat_dg_label_iptables__ipt_packets" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "stat_ds_ipt_packets" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "stat_dg_title_netlink__if_octets" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "stat_dg_label_netlink__if_octets" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "stat_ds_if_octets" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "stat_dg_title_netlink__if_packets" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "stat_dg_label_netlink__if_packets" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "stat_ds_if_packets" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "stat_ds_if_dropped" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "stat_ds_if_errors" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "stat_dg_title_netlink__if_multicast" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "stat_dg_label_netlink__if_multicast" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "stat_ds_if_multicast" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "stat_dg_title_netlink__if_collisions" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "stat_dg_label_netlink__if_collisions" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "stat_ds_if_collisions" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "stat_dg_title_netlink__if_tx_errors" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "stat_dg_label_netlink__if_tx_errors" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "stat_ds_if_tx_errors" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "stat_ds_if_rx_errors" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "stat_dg_title_processes" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "stat_dg_label_processes" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "stat_ds_ps_state" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "stat_dg_title_processes__ps_cputime" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "stat_dg_label_processes__ps_cputime" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "stat_ds_ps_cputime__syst" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "stat_ds_ps_cputime__user" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "stat_dg_title_processes__ps_count" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "stat_dg_label_processes__ps_count" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "stat_ds_ps_count" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "stat_dg_title_processes__ps_pagefaults" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "stat_dg_label_processes__ps_pagefaults" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "stat_ds_ps_pagefaults" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "stat_dg_title_processes__ps_rss" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "stat_dg_label_processes__ps_rss" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "stat_ds_ps_rss" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "stat_dg_title_cpu" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "stat_dg_label_cpu" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "stat_ds_cpu" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "stat_dg_title_interface__if_octets" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "stat_dg_label_interface__if_octets" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "stat_dg_title_interface__if_packets" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "stat_dg_label_interface__if_packets" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "stat_dg_title_tcpconns" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "stat_dg_label_tcpconns" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "stat_ds_tcp_connections" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "stat_dg_title_df" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "stat_dg_label_df" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "stat_ds_df__free" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "stat_ds_df__used" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "stat_dg_title_irq" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "stat_dg_label_irq" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "stat_ds_irq" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "stat_dg_title_load" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "stat_dg_label_load" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "stat_ds_load__shortterm" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "stat_ds_load__midterm" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "stat_ds_load__longterm" diff --git a/feeds/luci/applications/luci-app-statistics/po/it/statistics.po b/feeds/luci/applications/luci-app-statistics/po/it/statistics.po new file mode 100644 index 0000000..eb1a3cb --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/it/statistics.po @@ -0,0 +1,722 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2014-08-05 11:41+0200\n" +"Last-Translator: morganfw \n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "Azione (destinazione)" + +msgid "Add command for reading values" +msgstr "" + +msgid "Add matching rule" +msgstr "" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "" + +msgid "Basic monitoring" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "" + +msgid "CSV Output" +msgstr "" + +msgid "CSV Plugin Configuration" +msgstr "" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd è un piccolo demone usato per raccogliere dati da varie fonti " +"grazie a diversi plugin. Su questa pagina puoi cambiare le opzioni generali " +"del demone collectd." + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS Plugin Configuration" +msgstr "" + +msgid "Data collection interval" +msgstr "" + +msgid "Datasets definition file" +msgstr "" + +msgid "Destination ip range" +msgstr "" + +msgid "Directory for collectd plugins" +msgstr "" + +msgid "Directory for sub-configurations" +msgstr "" + +msgid "Disk Plugin Configuration" +msgstr "" + +msgid "Disk Space Usage" +msgstr "" + +msgid "Disk Usage" +msgstr "" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "" + +msgid "E-Mail Plugin Configuration" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Abilita questo plugin" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "" + +msgid "Exec Plugin Configuration" +msgstr "" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Group" +msgstr "Gruppo" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Qui puoi definire un comando che sarà avviato da collectd per leggere dei " +"valori. Il valore sarà letto dallo stdout." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Qui puoi definire un comando che sarà avviato da collectd quando un certo " +"valore soglia sia raggiunto. Il valore in questione sarà passato al comando " +"incovato come stdin." + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "" + +msgid "Ignore source addresses" +msgstr "" + +msgid "Incoming interface" +msgstr "" + +msgid "Interface Plugin Configuration" +msgstr "" + +msgid "Interfaces" +msgstr "Interfacce" + +msgid "Interrupts" +msgstr "" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" +"Lasciare deselezionato per determinare automaticamente l'interfaccia da " +"monitorare." + +msgid "Listen host" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "" + +msgid "Monitor disks and partitions" +msgstr "" + +msgid "Monitor filesystem types" +msgstr "" + +msgid "Monitor hosts" +msgstr "" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "" + +msgid "Monitor local ports" +msgstr "" + +msgid "Monitor mount points" +msgstr "" + +msgid "Monitor processes" +msgstr "" + +msgid "Monitor remote ports" +msgstr "" + +msgid "Name of the rule" +msgstr "" + +msgid "Netlink" +msgstr "" + +msgid "Netlink Plugin Configuration" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Plugin Configuration" +msgstr "" + +msgid "Network plugins" +msgstr "" + +msgid "Network protocol" +msgstr "" + +msgid "Number of threads for data collection" +msgstr "" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Outgoing interface" +msgstr "" + +msgid "Output plugins" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Ping Plugin Configuration" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Processes Plugin Configuration" +msgstr "" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Qdisc monitoring" +msgstr "" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "" + +msgid "RRDTool Plugin Configuration" +msgstr "" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "" + +msgid "Storage directory for the csv files" +msgstr "" + +msgid "Store data values as rates instead of absolute values" +msgstr "" + +msgid "Stored timespans" +msgstr "" + +msgid "System Load" +msgstr "" + +msgid "TCP Connections" +msgstr "" + +msgid "TCPConns Plugin Configuration" +msgstr "" + +msgid "TTL for network packets" +msgstr "" + +msgid "TTL for ping packets" +msgstr "" + +msgid "Table" +msgstr "Tabella" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "" + +msgid "Unixsock Plugin Configuration" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "" + +msgid "e.g. br-lan" +msgstr "" + +msgid "e.g. reject-with tcp-reset" +msgstr "" + +msgid "max. 16 chars" +msgstr "" + +msgid "reduces rrd size" +msgstr "" + +msgid "seconds; multiple separated by space" +msgstr "" + +msgid "server interfaces" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/ja/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/ja/rrdtool.po new file mode 100644 index 0000000..95545db --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/ja/rrdtool.po @@ -0,0 +1,358 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/ja/statistics.po b/feeds/luci/applications/luci-app-statistics/po/ja/statistics.po new file mode 100644 index 0000000..218712b --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/ja/statistics.po @@ -0,0 +1,782 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2016-12-23 15:07+0900\n" +"Last-Translator: INAGAKI Hiroshi \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" + +msgid "Action (target)" +msgstr "アクション(対象)" + +msgid "Add command for reading values" +msgstr "値読み取りコマンドの追加" + +msgid "Add matching rule" +msgstr "マッチング規則の追加" + +msgid "Add multiple hosts separated by space." +msgstr "スペースで区切られた複数のホストを追加します。" + +msgid "Add notification command" +msgstr "通知コマンドの追加" + +msgid "Aggregate number of connected users" +msgstr "接続ユーザー数の総計" + +msgid "Base Directory" +msgstr "ベース・ディレクトリ" + +msgid "Basic monitoring" +msgstr "基本モニタリング" + +msgid "CPU Frequency" +msgstr "CPU 周波数" + +msgid "CPU Frequency Plugin Configuration" +msgstr "CPU 周波数プラグイン設定" + +msgid "CPU Plugin Configuration" +msgstr "CPU プラグイン設定" + +msgid "CSV Output" +msgstr "CSV 出力" + +msgid "CSV Plugin Configuration" +msgstr "CSV プラグイン設定" + +msgid "Cache collected data for" +msgstr "収集されたデータをキャッシュする" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "チェイン" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "Collectd 設定" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd は、様々なソースから別々のプラグインを通してデータを収集する軽量デー" +"モンです。" + +msgid "Conntrack" +msgstr "Conntrack" + +msgid "Conntrack Plugin Configuration" +msgstr "Conntrack プラグイン設定" + +msgid "DF Plugin Configuration" +msgstr "DF プラグイン設定" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "DNS プラグイン設定" + +msgid "Data collection interval" +msgstr "データの収集間隔" + +msgid "Datasets definition file" +msgstr "データベース定義ファイル" + +msgid "Destination ip range" +msgstr "対象IPの範囲" + +msgid "Directory for collectd plugins" +msgstr "collectd プラグインディレクトリ" + +msgid "Directory for sub-configurations" +msgstr "サブ設定ディレクトリ" + +msgid "Disk Plugin Configuration" +msgstr "ディスクプラグイン設定" + +msgid "Disk Space Usage" +msgstr "ディスクスペース使用量" + +msgid "Disk Usage" +msgstr "ディスクの使用" + +msgid "Display Host »" +msgstr "ホストを表示 »" + +msgid "Display timespan »" +msgstr "時間帯表示 »" + +msgid "E-Mail Plugin Configuration" +msgstr "E-メールプラグイン設定" + +msgid "Email" +msgstr "Eメール" + +msgid "Empty value = monitor all" +msgstr "空の値 = 全てをモニターする" + +msgid "Enable this plugin" +msgstr "プラグイン設定を有効にする" + +msgid "Entropy" +msgstr "エントロピー" + +msgid "Entropy Plugin Configuration" +msgstr "エントロピー プラグイン設定" + +msgid "Exec" +msgstr "" + +msgid "Exec Plugin Configuration" +msgstr "Exec プラグイン設定" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "ファイアウォール" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "一般プラグイン" + +msgid "Generate a separate graph for each logged user" +msgstr "ログインユーザーごとの分離されたグラフを生成します。" + +msgid "Graphs" +msgstr "グラフ" + +msgid "Group" +msgstr "グループ" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"ここでは、特定の値を読み込むためにcollectによって順番に開始される外部コマンド" +"を設定することができます。値は標準出力から読み込まれます。" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"ここでは、特定の閾値に到達したときにcollectによって開始される外部コマンドを設" +"定することができます。呼び出しにつながる値は、呼び出されたプログラムの標準入" +"力に送られます。" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"ここでは、モニターするiptable規則が選択される様々な基準を設定することができま" +"す。" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "複数の項目を選択または解除するには、Ctrlキーを押したままにします。" + +msgid "Host" +msgstr "ホスト" + +msgid "Hostname" +msgstr "ホスト名" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "IRQ プラグイン設定" + +msgid "Ignore source addresses" +msgstr "" + +msgid "Incoming interface" +msgstr "着信インターフェース" + +msgid "Interface Plugin Configuration" +msgstr "インターフェース プラグイン設定" + +msgid "Interfaces" +msgstr "インターフェース" + +msgid "Interrupts" +msgstr "割込み" + +msgid "Interval for pings" +msgstr "ping間隔" + +msgid "Iptables Plugin Configuration" +msgstr "Iptables プラグイン設定" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" +"モニターするインターフェースを自動的に決定するには、未選択のままにします。" + +msgid "Listen host" +msgstr "待ち受けホスト" + +msgid "Listen port" +msgstr "待ち受けポート" + +msgid "Listener interfaces" +msgstr "待ち受けインターフェース" + +msgid "Load Plugin Configuration" +msgstr "負荷プラグイン設定" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" +"'RRAの平均のみ' を使用しないとき、平均値の代わりに一定期間の最大値を使用でき" +"ます。" + +msgid "Maximum allowed connections" +msgstr "許可された最大接続数" + +msgid "Memory" +msgstr "メモリー" + +msgid "Memory Plugin Configuration" +msgstr "メモリー プラグイン設定" + +msgid "Monitor all except specified" +msgstr "設定値以外の全てのインターフェースをモニターする" + +msgid "Monitor all local listen ports" +msgstr "ローカルの全待ち受けポートをモニターする" + +msgid "Monitor all sensors" +msgstr "全てのセンサーをモニターする" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "デバイスをモニターする" + +msgid "Monitor disks and partitions" +msgstr "ディスクとパーティションをモニターする" + +msgid "Monitor filesystem types" +msgstr "ファイルシステム タイプをモニターする" + +msgid "Monitor hosts" +msgstr "ホストをモニターする" + +msgid "Monitor interfaces" +msgstr "モニターするインターフェースの設定" + +msgid "Monitor interrupts" +msgstr "割込みをモニターする" + +msgid "Monitor local ports" +msgstr "ローカルのポートをモニターする" + +msgid "Monitor mount points" +msgstr "マウントポイントをモニターする" + +msgid "Monitor processes" +msgstr "プロセスをモニターする" + +msgid "Monitor remote ports" +msgstr "リモートのポートをモニターする" + +msgid "Name of the rule" +msgstr "ルール名" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "Netlink プラグイン設定" + +msgid "Network" +msgstr "ネットワーク" + +msgid "Network Plugin Configuration" +msgstr "ネットワークプラグイン設定" + +msgid "Network plugins" +msgstr "ネットワークプラグイン" + +msgid "Network protocol" +msgstr "ネットワークプロトコル" + +msgid "Number of threads for data collection" +msgstr "データ収集用スレッド数" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "OLSRd プラグイン設定" + +msgid "Only create average RRAs" +msgstr "平均値のRRAsのみ作成する" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN Plugin Configuration" +msgstr "OpenVPN プラグイン設定" + +msgid "OpenVPN status files" +msgstr "OpenVPN ステータスファイル" + +msgid "Options" +msgstr "オプション" + +msgid "Outgoing interface" +msgstr "送信インターフェース" + +msgid "Output plugins" +msgstr "出力プラグイン" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Ping プラグイン設定" + +msgid "Port" +msgstr "ポート" + +msgid "Processes" +msgstr "プロセス" + +msgid "Processes Plugin Configuration" +msgstr "プロセス プラグイン設定" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "プロセッサー" + +msgid "Qdisc monitoring" +msgstr "Qdisc モニタリング" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "RRD ハートビート間隔" + +msgid "RRD step interval" +msgstr "RRD stepインターバル" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "RRDTool プラグイン設定" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "スクリプト" + +msgid "Seconds" +msgstr "秒" + +msgid "Sensor list" +msgstr "センサー一覧" + +msgid "Sensors" +msgstr "センサー" + +msgid "Sensors Plugin Configuration" +msgstr "センサー プラグイン設定" + +msgid "Server host" +msgstr "サーバー ホスト" + +msgid "Server port" +msgstr "サーバー ポート" + +msgid "Setup" +msgstr "設定" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "平均値の代わりに最大値を表示する" + +msgid "Socket file" +msgstr "ソケット ファイル" + +msgid "Socket group" +msgstr "ソケット グループ" + +msgid "Socket permissions" +msgstr "ソケット パーミッション" + +msgid "Source ip range" +msgstr "ソースIPの範囲" + +msgid "Specifies what information to collect about links." +msgstr "リンクについて、どのような情報を収集するか設定します。" + +msgid "Specifies what information to collect about routes." +msgstr "ルートについて、どのような情報を収集するか設定します。" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "統計" + +msgid "Storage directory" +msgstr "保存先ディレクトリ" + +msgid "Storage directory for the csv files" +msgstr "CSVファイルの保存先ディレクトリ" + +msgid "Store data values as rates instead of absolute values" +msgstr "データ値を絶対値の代わりにレートとして保存します。" + +msgid "Stored timespans" +msgstr "保存する期間の範囲" + +msgid "System Load" +msgstr "システム負荷" + +msgid "TCP Connections" +msgstr "TCP 接続" + +msgid "TCPConns Plugin Configuration" +msgstr "TCP接続プラグイン設定" + +msgid "TTL for network packets" +msgstr "ネットワークパケットのTTL" + +msgid "TTL for ping packets" +msgstr "pingパケットのTTL" + +msgid "Table" +msgstr "テーブル" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "NUT プラグインは、無停電電源装置についての情報を読み取ります。" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" +"OpenVPN プラグインは、現在のVPN接続ステータスについての情報を収集します。" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "Conntrack プラグインは、追跡された接続の数についての統計を収集します。" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "CPU プラグインは、プロセッサー使用についての基本的な統計を収集します。" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"CSV プラグインは、外部プログラムがさらに利用するために、収集されたデータをCSV" +"ファイル形式で保存します。" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"df プラグインは、個別のデバイスまたはマウントポイント、ファイルシステム形式の" +"ディスク使用量についての統計を収集します。" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"ディスク プラグインは、選択されたパーティションまたはディスク全体の詳細な使用" +"統計を収集します。" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"DNS プラグインは、選択されたインターフェースでのDNSに関連したトラフィックにつ" +"いての詳細な統計を収集します。" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"Eメール プラグインは、実行中のcollectd デーモンへの電子メール統計の送信に利用" +"可能なUNIX ソケットを作成するプラグインです。このプラグインは、メール、" +"SpamAssasin、プラグイン、Collectdを一緒に使うことを主に意図していますが、ほか" +"の方法にも同様に使用することができます。" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" +"エントロピー プラグインは、利用可能なエントロピーについての統計を収集します。" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"Exec プラグインは、特定の閾値に到達したときに外部プロセスから値の読み込み、も" +"しくは外部プロセスへ通知する外部コマンドを開始します。" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" +"インターフェースプラグインは、選択したインターフェースのトラフィックの統計情" +"報を収集します。" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"iptables プラグインは、選択されたファイアウォール規をモニターし、規則ごとの処" +"理されたバイト数とパケット数についての情報を収集します。" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"IRQ プラグインは、選択された割り込みごとに1秒当たりの発行レートをモニターしま" +"す。選択された割り込みが無い場合、すべての割り込みがモニターされます。" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" +"iwinfo プラグインは、無線信号強度、ノイズ、クオリティ情報を収集します。" + +msgid "The load plugin collects statistics about the general system load." +msgstr "負荷プラグインは、システム負荷の統計情報を収集します。" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "メモリー プラグインは、メモリー使用についての統計を収集します。" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"Netlink プラグインは、選択されたインターフェースの qdisc- や class- 、filter-" +"statistics のような拡張的な情報を収集します。" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"ネットワークプラグインは、異なるcollectd間のネットワークベースの通信を提供し" +"ます。collectdは、クライアントモードとサーバーモードの両方で動作することがで" +"きます。クライアントモードでは、ローカルの収集データはcollectdサーバーに転送" +"され、サーバーモードではローカルのインスタンスは他のホストからデータを受信し" +"ます。" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"ping プラグインは、ICMP Echo Replyを選択されたホストに送信し、各ホストとの往" +"復時間を計測します。" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"プロセス プラグインは、選択されたプロセスのCPU時間やページフォルト、メモリー" +"使用率のような情報を収集します。" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"rrdtool プラグインは、収集したデータをrrd データベースファイルに保存します。" +"これが統計図の基礎です。

警告: 間違った値を設定すると、一" +"時的なディレクトリによってメモリー消費量が非常に高くなります。これはデバイス" +"を使用不能にする可能性があります!" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" +"センサー プラグインは、環境統計の収集に Linux センサーフレームワークを使用し" +"ます。" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" +"statistics パッケージは、データの収集にCollectdを、統計図のレンダリングにRRDtoolを使用します。" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "サーマル プラグインは、システムの温度をモニターします。" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"unixsock プラグインは、実行中のcollectd インスタンスから収集データの読み取り" +"に使用可能なUNIX ソケットを作成します。" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "稼働時間 プラグインは、システムの稼働時間についての統計を収集します。" + +msgid "Thermal" +msgstr "サーマル" + +msgid "Thermal Plugin Configuration" +msgstr "サーマル プラグイン設定" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" +"このプラグインは、プロセッサー周波数スケーリングについての統計を収集します。" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"このセクションでは、collectdが着信接続を待ち受けるインターフェースを設定しま" +"す。" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" +"このセクションでは、ローカルに収集されたデータを送信するサーバーを設定しま" +"す。" + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "UPS" + +msgid "UPS Plugin Configuration" +msgstr "UPS プラグイン設定" + +msgid "UPS name in NUT ups@host format" +msgstr "ups@host 形式のNUT内のUPS名" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Unixsock プラグイン設定" + +msgid "Uptime" +msgstr "稼働時間" + +msgid "Uptime Plugin Configuration" +msgstr "稼働時間プラグイン設定" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "使用するPIDファイルの保存場所" + +msgid "User" +msgstr "ユーザー" + +msgid "Verbose monitoring" +msgstr "詳細モニタリング" + +msgid "Wireless" +msgstr "無線" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "無線LAN iwinfo プラグイン設定" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" +"追加の collectd-mod-* プラグインをインストールすることで、より多くの統計を有" +"効にできます。" + +msgid "e.g. br-ff" +msgstr "例: br-ff" + +msgid "e.g. br-lan" +msgstr "例: br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "例: reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "最大16文字" + +msgid "reduces rrd size" +msgstr "rrdファイルのサイズを小さくします。" + +msgid "seconds; multiple separated by space" +msgstr "" + +msgid "server interfaces" +msgstr "サーバー インターフェース" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "システムプラグイン" diff --git a/feeds/luci/applications/luci-app-statistics/po/ms/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/ms/rrdtool.po new file mode 100644 index 0000000..1f81fc6 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/ms/rrdtool.po @@ -0,0 +1,355 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/ms/statistics.po b/feeds/luci/applications/luci-app-statistics/po/ms/statistics.po new file mode 100644 index 0000000..a18826f --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/ms/statistics.po @@ -0,0 +1,709 @@ +# statistics.pot +# generated from ./applications/luci-statistics/luasrc/i18n/statistics.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Action (target)" +msgstr "" + +msgid "Add command for reading values" +msgstr "" + +msgid "Add matching rule" +msgstr "" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "" + +msgid "Basic monitoring" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "" + +msgid "CSV Output" +msgstr "" + +msgid "CSV Plugin Configuration" +msgstr "" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS Plugin Configuration" +msgstr "" + +msgid "Data collection interval" +msgstr "" + +msgid "Datasets definition file" +msgstr "" + +msgid "Destination ip range" +msgstr "" + +msgid "Directory for collectd plugins" +msgstr "" + +msgid "Directory for sub-configurations" +msgstr "" + +msgid "Disk Plugin Configuration" +msgstr "" + +msgid "Disk Space Usage" +msgstr "" + +msgid "Disk Usage" +msgstr "" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "" + +msgid "E-Mail Plugin Configuration" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "" + +msgid "Exec Plugin Configuration" +msgstr "" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "" + +msgid "Ignore source addresses" +msgstr "" + +msgid "Incoming interface" +msgstr "" + +msgid "Interface Plugin Configuration" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interrupts" +msgstr "" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "" + +msgid "Monitor disks and partitions" +msgstr "" + +msgid "Monitor filesystem types" +msgstr "" + +msgid "Monitor hosts" +msgstr "" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "" + +msgid "Monitor local ports" +msgstr "" + +msgid "Monitor mount points" +msgstr "" + +msgid "Monitor processes" +msgstr "" + +msgid "Monitor remote ports" +msgstr "" + +msgid "Name of the rule" +msgstr "" + +msgid "Netlink" +msgstr "" + +msgid "Netlink Plugin Configuration" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Plugin Configuration" +msgstr "" + +msgid "Network plugins" +msgstr "" + +msgid "Network protocol" +msgstr "" + +msgid "Number of threads for data collection" +msgstr "" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Outgoing interface" +msgstr "" + +msgid "Output plugins" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Ping Plugin Configuration" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Processes Plugin Configuration" +msgstr "" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Qdisc monitoring" +msgstr "" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "" + +msgid "RRDTool Plugin Configuration" +msgstr "" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "" + +msgid "Storage directory for the csv files" +msgstr "" + +msgid "Store data values as rates instead of absolute values" +msgstr "" + +msgid "Stored timespans" +msgstr "" + +msgid "System Load" +msgstr "" + +msgid "TCP Connections" +msgstr "" + +msgid "TCPConns Plugin Configuration" +msgstr "" + +msgid "TTL for network packets" +msgstr "" + +msgid "TTL for ping packets" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "" + +msgid "Unixsock Plugin Configuration" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "" + +msgid "e.g. br-lan" +msgstr "" + +msgid "e.g. reject-with tcp-reset" +msgstr "" + +msgid "max. 16 chars" +msgstr "" + +msgid "reduces rrd size" +msgstr "" + +msgid "seconds; multiple separated by space" +msgstr "" + +msgid "server interfaces" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/no/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/no/rrdtool.po new file mode 100644 index 0000000..d336ec3 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/no/rrdtool.po @@ -0,0 +1,354 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2013-03-25 14:24+0200\n" +"Last-Translator: protx \n" +"Language: no\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "%H: Trådløs - Signal Støy Forhold" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "dBm" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Støy Nivå" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "Signal Styrke" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Trådløs - Signal Kvalitet" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "n" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Signal Kvalitet" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "%H: ICMP Rundtur Antall" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "ms" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "%di" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "%H: Brannmur - Pakker Behandlet" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "Pakker/Sek" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "Lenke \\\"%di\\\"" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "%H: Netlink - Overført på %pi" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "Bytes/Sek" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "Bytes (%ds)" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "%H: Netlink - Pakker på %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "Pakker/Sek" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "Behandlet (%ds)" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "Droppet (%ds)" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "Feil (%ds)" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "%H: Netlink - Multicast på %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "Pakker/Sek" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "Pakker" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "%H: Netlink - Kollisjoner på %pi" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "Kollisjoner/Sek" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "Kollisjoner" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "%H: Netlink - Feil på %pi" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "Feil/Sek" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "%di" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "%di" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "%H: Prosesser" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "Prosesser/Sek" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "%di" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "%H: Prosesser %pi - brukt cpu tid" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "Jiffier" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "system" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "bruker" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "%H: Prosess %pi - tråder og prosesser" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "Telle" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "%ds" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "%H: Prosess %pi - sidefeil" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "Sidefeil" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "side feil" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "%H: Prosess %pi - virtuelt minne størrelse" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "Bytes" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "virtuelt minne" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "%H: Bruk av prosessor #%pi" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "%" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "%di" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "%H: Overført på %di" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "Bytes/Sek" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "%H: Pakker på %di" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "Pakker/Sek" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "%H: TCP-tilkoblinger på port %pi" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "Tilkoblinger/Sek" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "%di" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "%H: Disk forbruk på %di" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "Bytes" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "%ds" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "%ds" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "%H: Avbrudd" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "Problemer/Sek" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "IRQ %di" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "%H: System Belastning" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "Belastning" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "1 min" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "5 min" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "15 min" diff --git a/feeds/luci/applications/luci-app-statistics/po/no/statistics.po b/feeds/luci/applications/luci-app-statistics/po/no/statistics.po new file mode 100644 index 0000000..2072cbf --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/no/statistics.po @@ -0,0 +1,806 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Action (target)" +msgstr "Handling (mål)" + +msgid "Add command for reading values" +msgstr "Legg til kommando for lesing av verdier" + +msgid "Add matching rule" +msgstr "Legg til matchende regel" + +msgid "Add multiple hosts separated by space." +msgstr "Legg til flere verter adskilt med mellomrom." + +msgid "Add notification command" +msgstr "Legg til varsling kommando" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Hoved Katalog" + +msgid "Basic monitoring" +msgstr "Enkel overvåking" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "CPU plugin konfigurasjon" + +msgid "CSV Output" +msgstr "CSV Utdata" + +msgid "CSV Plugin Configuration" +msgstr "CSV plugin konfigurasjon" + +msgid "Cache collected data for" +msgstr "Hurtigbufre innsamlede data for" + +msgid "Cache flush interval" +msgstr "Intervall for tømming av hurtigbuffer" + +msgid "Chain" +msgstr "Lenke" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "Collectd Innstillinger" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd er en liten daemon for innsamling av data fra ulike kilder gjennom " +"ulike plugins. På denne siden kan du endre generelle innstillinger for " +"collectd daemon." + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "DF plugin konfigurasjon" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "DNS plugin konfigurasjon" + +msgid "Data collection interval" +msgstr "Datainnsamling intervall" + +msgid "Datasets definition file" +msgstr "Datasett definisjonsfil" + +msgid "Destination ip range" +msgstr "Destinasjon ip område" + +msgid "Directory for collectd plugins" +msgstr "Katalog for collectd plugins" + +msgid "Directory for sub-configurations" +msgstr "Katalog for sub-konfigurasjoner" + +msgid "Disk Plugin Configuration" +msgstr "Disk plugin konfigurasjon" + +msgid "Disk Space Usage" +msgstr "Disk Forbruk" + +msgid "Disk Usage" +msgstr "Disk Anvendelse" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "Vis tidsperiode »" + +msgid "E-Mail Plugin Configuration" +msgstr "E-Post plugin konfigurasjon" + +msgid "Email" +msgstr "Epost" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Aktiver denne plugin" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Program" + +msgid "Exec Plugin Configuration" +msgstr "Program plugin konfigurasjon" + +msgid "Filter class monitoring" +msgstr "Filter class overvåking" + +msgid "Firewall" +msgstr "Brannmur" + +msgid "Flush cache after" +msgstr "Tømme hurtigbufferen etter" + +msgid "Forwarding between listen and server addresses" +msgstr "Videresending mellom lyttende og server adresser" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Grafer" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Her kan du definere eksterne kommandoer som blir startet av collectd for å " +"lese enkelte verdier. Verdiene skal leses fra stdout." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Her kan du definere eksterne kommandoer som blir startet av collectd når " +"visse grenseverdier er blitt nådd. Verdiene som fører til aktivering vil bli " +"overført til det påkallede programs stdin." + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "Her kan du definere kriterier for reglene som overvåker iptables." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "Vertsnavn" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "IRQ plugin konfigurasjon" + +msgid "Ignore source addresses" +msgstr "Ignorer kilde adresser" + +msgid "Incoming interface" +msgstr "Innkommende grensesnitt" + +msgid "Interface Plugin Configuration" +msgstr "Grensesnitt plugin konfigurasjon" + +msgid "Interfaces" +msgstr "Grensesnitt" + +msgid "Interrupts" +msgstr "Avbrudd" + +msgid "Interval for pings" +msgstr "Intervall ping" + +msgid "Iptables Plugin Configuration" +msgstr "Iptable plugin konfigurasjon" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "Lyttende vert" + +msgid "Listen port" +msgstr "Lyttende port" + +msgid "Listener interfaces" +msgstr "Lyttende grensesnitt" + +msgid "Load Plugin Configuration" +msgstr "Belastning plugin konfigurasjon" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Maksimum tillatte tilkoblinger" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "Overvåk alle lokale lyttende porter" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Overvåk enheter" + +msgid "Monitor disks and partitions" +msgstr "Overvåk disker og partisjoner" + +msgid "Monitor filesystem types" +msgstr "Overvåk filsystem typer" + +msgid "Monitor hosts" +msgstr "Overvåk verter" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "Overvåk avbrudd" + +msgid "Monitor local ports" +msgstr "Overvåk lokale porter" + +msgid "Monitor mount points" +msgstr "Overvåk monterings punkter" + +msgid "Monitor processes" +msgstr "Overvåk prosesser" + +msgid "Monitor remote ports" +msgstr "Overvåk eksterne porter" + +msgid "Name of the rule" +msgstr "Navnet på regelen" + +msgid "Netlink" +msgstr "Nettlink" + +msgid "Netlink Plugin Configuration" +msgstr "Netlink plugin konfigurasjon" + +msgid "Network" +msgstr "Nettverk" + +msgid "Network Plugin Configuration" +msgstr "Nettverks plugin konfigurasjon" + +msgid "Network plugins" +msgstr "Nettverks plugin" + +msgid "Network protocol" +msgstr "Nettverks protokoll" + +msgid "Number of threads for data collection" +msgstr "Antall tråder for datainnsamling" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "Lag kun gjennomsnittlige RRAs" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Alternativer" + +msgid "Outgoing interface" +msgstr "Utgående grensesnitt" + +msgid "Output plugins" +msgstr "Utdata Plugin" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Ping plugin konfigurasjon" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "Prosesser" + +msgid "Processes Plugin Configuration" +msgstr "Prosess plugin konfigurasjon" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "Prosessor" + +msgid "Qdisc monitoring" +msgstr "Qdisc overvåking" + +msgid "RRD XFiles Factor" +msgstr "RRD XFiles Faktor" + +msgid "RRD heart beat interval" +msgstr "RRD \"heartbeat\" intervall" + +msgid "RRD step interval" +msgstr "RRD steg intervall" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "RRDTool plugin konfigursjon" + +msgid "Rows per RRA" +msgstr "Rader per RRA" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "Sekunder" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Server vert" + +msgid "Server port" +msgstr "Server port" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "Shaping class overvåking" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "Kilde ip område" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "Statistikk" + +msgid "Storage directory" +msgstr "Lagrings katalog" + +msgid "Storage directory for the csv files" +msgstr "Katalog for lagring av CSV filer" + +msgid "Store data values as rates instead of absolute values" +msgstr "Lagre dataverdier som rater i stedet for absolutte verdier" + +msgid "Stored timespans" +msgstr "Lagrede tidsperioder" + +msgid "System Load" +msgstr "System Belastning" + +msgid "TCP Connections" +msgstr "TCP Forbindelser" + +msgid "TCPConns Plugin Configuration" +msgstr "TCPConns plugin konfigurasjon" + +msgid "TTL for network packets" +msgstr "TTL for nettverkspakker" + +msgid "TTL for ping packets" +msgstr "TTL for ping pakker" + +msgid "Table" +msgstr "Tabell" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "CPU plugin samler grunnleggende statistikk om prosessor bruk." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"CSV plugin lagrer de innsamlede dataene i CSV format for videre bearbeiding " +"av eksterne programmer." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"DF plugin samler statistikk om disker på forskjellige enheter, monterings " +"punkter eller filsystem typer." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"Disk plugin samler detaljert brukerstatistikk for utvalgte partisjoner og " +"hele disker." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"DNS pluging samler detaljert statistikk om DNS relatert trafikk på utvalgte " +"grensesnitt." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"E-Post plugin skaper en unix socket som kan brukes til å sende e-post " +"statistikk til en kjørende collectd daemon. Denne plugin er primært ment å " +"bli brukt i forbindelse med Mail::SpamAssasin::Plugin::Collectd men kan også " +"brukes på andre måter." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"Program plugin starter eksterne kommandoer for å lese verdier fra de, eller " +"for å varsle eksterne prosesser når visse grenseverdier er blitt nådd." + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "Grensesnitt plugin samler trafikk statistikk på utvalgte grensesnitt." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"Iptables plugin vil overvåke utvalgte brannmurregler og samle informasjon om " +"bearbeidet data per regel." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"IRQ plugin vil overvåke hastigheten på forespørsler per sekund for hver " +"valgte avbrudd. Hvis ingen avbrudd er valgt vil alle avbrudd bli overvåket." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "Belastning plugin samler statistikk systemets belastning." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"Netlink plugin samler utvidet informasjon som qdisc-, klasse- og filter-" +"statistikk for utvalgte grensesnitt." + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"Nettverk plugin gir nettverk basert kommunikasjon mellom ulike collectd " +"forekomster. Collectd kan operere i både klient og server modus. I " +"klientmodus blir lokalt innsamlede data overført til en collectd server. I " +"server modus mottar enheten data fra andre klienter." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"Ping plugin sender icmp echo svar til utvalgte verter og måle tiden en " +"rundtur tar for hver vert." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"Prosess plugin samler informasjon som f.eks. CPU tid, sidefeil og minnebruk " +"for utvalgte prosesser." + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"RRDTool plugin lagrer innsamlede data i rrd databasefiler som er grunnlaget " +"for diagrammene.

Advarsel: Innsetting av feile verdier " +"vil kunne resultere i et svært høyt minneforbruk i den midlertidige " +"katalogen (temp). Dette kan gjøre enheten ubrukelig!" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"Tcpconns plugin samler informasjon om åpne TCP tilkoblinger på utvalgte " +"porter." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"Unixsock plugin skaper en unix socket som kan brukes til å lese innsamlet " +"data fra collectd prosess." + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"Denne seksjonen definerer hvilke grensesnitt collectd vil lytte på for " +"innkommende tilkoblinger." + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" +"Denne seksjonen definerer hvilke servere de lokalt innsamlede data blir " +"sendt til." + +msgid "Try to lookup fully qualified hostname" +msgstr "Prøv å søk etter fullstendig vertsnavn" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Unixsock plugin konfigurasjon" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Brukt PID fil" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "Detaljert overvåking" + +msgid "Wireless" +msgstr "Trådløs" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "f.eks. br-ff" + +msgid "e.g. br-lan" +msgstr "f.eks. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "f.eks. forkast med tcp-reset" + +msgid "max. 16 chars" +msgstr "maks. 16 tegn" + +msgid "reduces rrd size" +msgstr "reduserer RRD størrelse" + +msgid "seconds; multiple separated by space" +msgstr "sekunder; flere adskilt med mellomrom" + +msgid "server interfaces" +msgstr "Server grensesnitt" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "System plugins" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "Statistikk pakken er basert på Collectd og bruker RRD " +#~ "Tool for å tegne diagram bilder fra innsamlede data." + +#~ msgid "Installed network plugins:" +#~ msgstr "Installerte nettverks plugin:" + +#~ msgid "Installed output plugins:" +#~ msgstr "Installerte utdata plugin:" + +#~ msgid "" +#~ "Network plugins are used to collect information about open tcp " +#~ "connections, interface traffic, iptables rules etc." +#~ msgstr "" +#~ "Nettverks plugin er brukt til å samle inn informasjon om åpne tcp " +#~ "koblinger, trafikk over grensesnitt, iptables regler osv." + +#~ msgid "" +#~ "Output plugins provide different possibilities to store collected data. " +#~ "It is possible to enable multiple plugin at one, for example to store " +#~ "collected data in rrd databases and to transmit the data over the network " +#~ "to other collectd instances." +#~ msgstr "" +#~ "Utdata plugins gir ulike muligheter til å lagre innsamlede data. Det er " +#~ "mulig å aktivere flere pluginer på en, for eksempel for å lagre " +#~ "innsamlede data i RRD databaser og å overføre data over nettverket til " +#~ "andre collectd forekomster." + +#~ msgid "" +#~ "System plugins collecting values about system state and ressource usage " +#~ "on the device.:" +#~ msgstr "" +#~ "System plugins samler verdier om systemets tilstand og ressurs-bruk.:" + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "Trådløs plugin samler statistikk om trådløs signalstyrke, støy og " +#~ "kvalitet." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Trådløs plugin konfigurasjon" diff --git a/feeds/luci/applications/luci-app-statistics/po/pl/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/pl/rrdtool.po new file mode 100644 index 0000000..bf451ec --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/pl/rrdtool.po @@ -0,0 +1,360 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-08-31 11:06+0200\n" +"Last-Translator: Staszek \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "%H: Sieć bezprzewodowa - Poziom Szumów" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "dBm" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Poziom szumów" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "Moc sygnału" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Sieć bezprzewodowa - Jakość sygnału" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "n" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Jakość sygnału" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "%H: ICMP - Czasy odpowiedzi" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "ms" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "%di" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "%H: Firewall - Przetworzone pakiety" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "Pakiety/s" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "Łańcuch \"%di\"" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "%H: Netlink - Transfer przez %pi" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "Bajty/s" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "Bajtów (%ds)" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "%H: Netlink - Pakiety na %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "Pakiety/s" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "Przetworzone (%ds)" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "Odrzucone (%ds)" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "Błędy (%ds)" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "%H: Netlink - Multicasty na %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "Pakiety/s" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "Pakiety" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "%H: Netlink - Kolizje na %pi" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "Kolizje/s" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "Kolizje" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "%H: Netlink - Błędy na %pi" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "Błędy/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "%di" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "%di" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "%H: Procesy" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "Procesy/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "%di" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "%H: Proces %pi - użyty czas Procesora" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "Jiffies" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "system" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "użytkownik" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "%H: Proces %pi - wątki i procesy" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "Liczba" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "%ds" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "%H: Proces %pi - błędy stronnicowania" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "Błędy stronnicowania" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "błędy stronnicowania" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "%H: Proces %pi - rozmiar pamięci wirtualnej" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "Bajtów" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "pamięć wirtualna" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "%H: Użycie Procesora #%pi" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "%" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "%di" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "%H: Transfer na %di" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "Bajtów/s" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "%H: Pakietów na %di" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "Pakietów/s" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "%H: TCP-połączeń na port %pi" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "Połączeń/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "%di" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "%H: Użycie przestrzeni dyskowej na %di" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "Bajtów" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "%ds" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "%ds" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "%H: Przerwania" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "Problem(y)" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "IRQ %di" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "%H: Obciążenie Systemu" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "Obciążenie" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "1 min" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "5 min" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "15 min" diff --git a/feeds/luci/applications/luci-app-statistics/po/pl/statistics.po b/feeds/luci/applications/luci-app-statistics/po/pl/statistics.po new file mode 100644 index 0000000..ea8fc81 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/pl/statistics.po @@ -0,0 +1,825 @@ +# statistics.pot +# generated from ./applications/luci-statistics/luasrc/i18n/statistics.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-02 19:52+0200\n" +"Last-Translator: obsy \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "Akcja (cel)" + +msgid "Add command for reading values" +msgstr "Dodaj polecenie do odczytywania wartości" + +msgid "Add matching rule" +msgstr "Dodaj pasującą regułę" + +msgid "Add multiple hosts separated by space." +msgstr "Dodaj wiele hostów rozdzielonych spacjami." + +msgid "Add notification command" +msgstr "Dodaj komendę powiadamiającą" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Główny katalog" + +msgid "Basic monitoring" +msgstr "Podstawowy monitoring" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "Konfiguracja CPU" + +msgid "CSV Output" +msgstr "Wyjście CSV" + +msgid "CSV Plugin Configuration" +msgstr "Konfiguracja CSV" + +msgid "Cache collected data for" +msgstr "Ciasteczka zbierane dla" + +msgid "Cache flush interval" +msgstr "Odstępy czyszczenia cache" + +msgid "Chain" +msgstr "Łańcuch" + +msgid "CollectLinks" +msgstr "CollectLinks" + +msgid "CollectRoutes" +msgstr "CollectRoutes" + +msgid "CollectTopology" +msgstr "CollectTopology" + +msgid "Collectd Settings" +msgstr "Ustawienia Collectd" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd to mały deomon do zbieranie danych z różnych źródeł za pomocą " +"różnych wtyczek. Na tej stronie można zmienić ogólne ustawienia demona " +"collectd." + +msgid "Conntrack" +msgstr "Conntrack" + +msgid "Conntrack Plugin Configuration" +msgstr "Konfiguracja wtyczki Conntrack" + +msgid "DF Plugin Configuration" +msgstr "Konfiguracja wtyczki DF" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "Konfiguracja wtyczki DNS" + +msgid "Data collection interval" +msgstr "Odstępy zbierania danych" + +msgid "Datasets definition file" +msgstr "Zdefiniowany plik ustawień" + +msgid "Destination ip range" +msgstr "Zakres docelowych adresów IP" + +msgid "Directory for collectd plugins" +msgstr "Katalog wtyczek collectd" + +msgid "Directory for sub-configurations" +msgstr "Katalog podkonfiguracji" + +msgid "Disk Plugin Configuration" +msgstr "Konfiguracja wtyczki dysk" + +msgid "Disk Space Usage" +msgstr "Zużycie przestrzeni dyskowej" + +msgid "Disk Usage" +msgstr "Użycie dysku" + +msgid "Display Host »" +msgstr "Wyświetl Host >" + +msgid "Display timespan »" +msgstr "Przedział czasu wyświetlania »" + +msgid "E-Mail Plugin Configuration" +msgstr "Konfiguracja wtyczki E-mail" + +msgid "Email" +msgstr "E-mail" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Włącz tę wtyczkę" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Konfiguracja wtyczki Exec" + +msgid "Filter class monitoring" +msgstr "Monitorowanie filtra klas" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Flush cache after" +msgstr "Opróżnić cache po" + +msgid "Forwarding between listen and server addresses" +msgstr "Przekazać przez słuchacza na adres serwera" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Wykresy" + +msgid "Group" +msgstr "Grupa" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Tutaj można zdefiniować zewnętrzne komendy, które będą włączane przez " +"collectd, by odczytać konkretne wartości. Będą one odczytywane z stdout." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Tutaj można zdefiniować zewnętrzne komendy, które będą włączane przez " +"collectd, kiedy zostaną osiągnięte konkretne wartości progowe. Wartości " +"powodujące włączenie będą wysyłane do programów przez stdin." + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Tutaj można zdefiniować różne kryteria według których wybierane są " +"monitorowane reguły iptables." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "Host" + +msgid "Hostname" +msgstr "Nazwa hosta" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "Numer IP lub nazwa hosta jako wyjście txtinfo" + +msgid "IRQ Plugin Configuration" +msgstr "Konfiguracja wtyczki IRQ" + +msgid "Ignore source addresses" +msgstr "Ignoruj adresy źródłowe" + +msgid "Incoming interface" +msgstr "Interfejs przychodzący" + +msgid "Interface Plugin Configuration" +msgstr "Konfiguracja wtyczki Interfejs" + +msgid "Interfaces" +msgstr "Interfejsy" + +msgid "Interrupts" +msgstr "Przerwania" + +msgid "Interval for pings" +msgstr "Odstępy dla pingów" + +msgid "Iptables Plugin Configuration" +msgstr "Konfiguracja wtyczki iptables" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" +"Pozostaw niezaznaczone do automatycznego określenia interfejsu do " +"monitorowania." + +msgid "Listen host" +msgstr "Nasłuchuj host" + +msgid "Listen port" +msgstr "Nasłuchuj port" + +msgid "Listener interfaces" +msgstr "Interfejsy nasłuchującego" + +msgid "Load Plugin Configuration" +msgstr "Konfiguracja wtyczki Obciążenie" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Maksymalna ilość połączeń" + +msgid "Memory" +msgstr "Pamięć" + +msgid "Memory Plugin Configuration" +msgstr "Konfiguracja wtyczki Pamięć" + +msgid "Monitor all except specified" +msgstr "Monitoruj wszystko oprócz podanych" + +msgid "Monitor all local listen ports" +msgstr "Monitoruj wszystkie lokalne otwarte porty" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Monitoruj urządzenia" + +msgid "Monitor disks and partitions" +msgstr "Monitoruj dyski i partycje" + +msgid "Monitor filesystem types" +msgstr "Monitoruj system plików" + +msgid "Monitor hosts" +msgstr "Monitoruj hosty" + +msgid "Monitor interfaces" +msgstr "Monitoruj interfejsy" + +msgid "Monitor interrupts" +msgstr "Monitoruj przerwania" + +msgid "Monitor local ports" +msgstr "Monitoruj porty lokalne" + +msgid "Monitor mount points" +msgstr "Monitoruj punkty zamontowania" + +msgid "Monitor processes" +msgstr "Monitoruj procesy" + +msgid "Monitor remote ports" +msgstr "Monitoruj porty zdalne" + +msgid "Name of the rule" +msgstr "Nazwa tej reguły" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "Konfiguracja wtyczki Netlink" + +msgid "Network" +msgstr "Sieć" + +msgid "Network Plugin Configuration" +msgstr "Konfiguracja wtyczki Sieć" + +msgid "Network plugins" +msgstr "Wtyczki sieciowe" + +msgid "Network protocol" +msgstr "Protokoły sieciowe" + +msgid "Number of threads for data collection" +msgstr "Liczba wątków do zbierania danych" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "Konfiguracja wtyczki OLSRd" + +msgid "Only create average RRAs" +msgstr "Twórz tylko średnie archiwa RRA" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Opcje" + +msgid "Outgoing interface" +msgstr "Interfejs wychodzący" + +msgid "Output plugins" +msgstr "Pluginy wyjścia" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Konfiguracja wtyczki Ping" + +msgid "Port" +msgstr "Port" + +msgid "Processes" +msgstr "Procesy" + +msgid "Processes Plugin Configuration" +msgstr "Konfiguracja wtyczki Procesy" + +msgid "Processes to monitor separated by space" +msgstr "Monitorowane procesy oddzielone spacją" + +msgid "Processor" +msgstr "Procesor" + +msgid "Qdisc monitoring" +msgstr "Monitorowanie Qdisc" + +msgid "RRD XFiles Factor" +msgstr "RRD XFiles Factor" + +msgid "RRD heart beat interval" +msgstr "RRD heart beat interval" + +msgid "RRD step interval" +msgstr "RRD Krok interval" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "Konfiguracja wtyczki RRDTool" + +msgid "Rows per RRA" +msgstr "Wierszy w archiwum RRA" + +msgid "Script" +msgstr "Skrypt" + +msgid "Seconds" +msgstr "Sekundy" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Host serwer" + +msgid "Server port" +msgstr "Port serwera" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "Shaping Klasa Monitoring" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "Plik Gniazdo" + +msgid "Socket group" +msgstr "Gniazdo Grupy" + +msgid "Socket permissions" +msgstr "Uprawnienia Gniazda" + +msgid "Source ip range" +msgstr "Zakres źródłowych adresów ip" + +msgid "Specifies what information to collect about links." +msgstr "Określa jakie informacje zbierać o linkach." + +msgid "Specifies what information to collect about routes." +msgstr "Określa jakie informacje zbierać o trasach." + +msgid "Specifies what information to collect about the global topology." +msgstr "Określa jakie informacje zbierać o globalnej topologii." + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "Statystyki" + +msgid "Storage directory" +msgstr "Katalog przechowywania" + +msgid "Storage directory for the csv files" +msgstr "Katalog przechowywania plików csv" + +msgid "Store data values as rates instead of absolute values" +msgstr "" +"Przechowuj wartości danych jako wskaźniki zamiast wartości bezwzględnych" + +msgid "Stored timespans" +msgstr "Przechowywane okresy czasu" + +msgid "System Load" +msgstr "Obciążenie systemu" + +msgid "TCP Connections" +msgstr "Połączenia TCP" + +msgid "TCPConns Plugin Configuration" +msgstr "Konfiguracja wtyczki Połączenia TCP" + +msgid "TTL for network packets" +msgstr "TTL dla pakietów sieciowych" + +msgid "TTL for ping packets" +msgstr "TTL dla pakietów ping" + +msgid "Table" +msgstr "Tabela" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "Wtyczka Nut Informuje o Nie przerywalnym Zasilaniu" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" +"Wtyczka OLSRd odczytuje informacje o sieciach mesh z wtyczki txtinfo dla " +"OLSRd." + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "Wtyczka Conntrack zbiera statystyki o liczbie śledzonych połączeń." + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "Wtyczka CPU zbiera podstawowe statystyki o użyciu procesora" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"Wtyczka CSV gromadzi zebrane dane w formacie plików csv do dalszej obróbki " +"przez zewnętrzne programy." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"Wtyczka \"df\" zbiera statystyki dotyczące wykorzystania miejsca na różnych " +"urządzenia, dyskach i systemach plików." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"Wtyczka \"disk\" zbiera szczegółowe informacje z poszczególnych partycji lub " +"całych dysków." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"Wtyczka \"dns\" zbiera statystyki odnośnie ruchu DNS dla wybranych " +"interfejsów." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"Wtyczka Email Tworzy gniazdo w unix do transmisji statystyki-poczty do " +"demona collectd. This plugin is primarily intended to be used in conjunction " +"with Mail::SpamAssasin::Plugin::Collectd but can be used in other ways as " +"well." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"Wtyczka Exec startuje zewnętzną komendę do czytnika values z lub do procesu " +"zewnętrznego powiadomienia gdy wartość została zmieniona" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "Wtyczka \"interface\" zbiera statystyki z wybranych interfejsów." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"Wtyczka \"iptables\" monitoruje wybrane reguły firewalla i zbiera statystyki " +"o procesach, bajtach i pakietach przypadających na daną regułę." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"Wtyczka \"irq\" monitoruje liczbę przerwań na sekundę dla każdego wybranego " +"przerwania. Jeśli nie wybrano żadnego przerwania, monitoruje wszystkie." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" +"Wtyczka \"iwinfo\" zbiera statystyki o sygnale, zakłóceniach i jakości sieci " +"WiFi." + +msgid "The load plugin collects statistics about the general system load." +msgstr "Wtyczka \"load\" zbiera statystyki o ogólnych obciążeniu systemu." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "Wtyczka \"memory\" zbiera statystyki dotyczące wykorzystania pamięci." + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"Wtyczki netlink zbiera rozszerzone informacje statystyk z qdisc-, klasa- i " +"filter- dla wybranych interfejsów." + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"Wtyczka zapewnia podstawową komunikacje między różnymi instancjami collectd. " +"Collectd może pracować zarówno w trybie klienta i serwera. W trybie klienta " +"lokalnie zebrane dane przenosi się do instancji serwera collectd, w trybie " +"serwera lokalnego instancja odbiera dane z innych komputerów." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"Wtyczka \"ping\" wysyła komunikaty icmp i nasłuchuje odpowiedzi z wybranych " +"hostów oraz mierzy czasy odpowiedzi zwrotnych dla każdego z nich." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"Wtyczki processes zbiera informacje o czasie procesora, błędach strony i " +"pamięci wybranych procesów." + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"Wtyczki rrdtool przechowuje zebrane dane w plikach RRD, które są " +"wykorzystywane do tworzenia diagramów.

Ostrzeżenie:. " +"Ustawianie błędnej wartości może spowodować bardzo wysokie zużycie pamięci w " +"katalogu tymczasowym. Może to sprawić, że urządzenie nie będzie nadawało się " +"do użytku! " + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"Wtyczka \"tcpconns\" zbiera informacje o otwartych połączeniach tcp dla " +"wybranych portów." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"Wtyczka unixsock tworzy socket unix, który może być używany do odczytu " +"danych zebranych z bieżącej instancji collectd." + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"Sekcja ta definiuje interfejsy na którym collectd będzie czekać na " +"połączenia przychodzące." + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "Ta sekcja określa do jakich serwerów zebrane dane zostaną wysłane." + +msgid "Try to lookup fully qualified hostname" +msgstr "Spróbuj znaleźć pełną nazwę hosta" + +msgid "UPS" +msgstr "UPS" + +msgid "UPS Plugin Configuration" +msgstr "Plugin Konfiguracji UPS" + +msgid "UPS name in NUT ups@host format" +msgstr "Format nazwa UPS w NUT ups@host" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Konfiguracja wtyczki UnixSock" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Używany plik PID" + +msgid "User" +msgstr "Użytkownik" + +msgid "Verbose monitoring" +msgstr "Pełny monitoring" + +msgid "Wireless" +msgstr "WiFi" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "Konfiguracja bezprzewodowego pluginu iwinfo" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "np. br-ff" + +msgid "e.g. br-lan" +msgstr "np. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "np. reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "max. 16 znaków" + +msgid "reduces rrd size" +msgstr "zmniejsza rozmiar RRD" + +msgid "seconds; multiple separated by space" +msgstr "sekundy; wielokrotnie oddzielone spacją" + +msgid "server interfaces" +msgstr "interfejsy serwera" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Wtyczki systemowe" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "Statystyki bazuja na Collectd oraz wykorzystują RRD Tool do generowania diagramów i wykresów z zebranych danych." + +#~ msgid "Installed network plugins:" +#~ msgstr "Zainstalowane wtyczki sieciowe:" + +#~ msgid "Installed output plugins:" +#~ msgstr "Zainstalowane wtyczki wyjścia:" + +#~ msgid "" +#~ "Network plugins are used to collect information about open tcp " +#~ "connections, interface traffic, iptables rules etc." +#~ msgstr "" +#~ "Wtyczki sieciowe służą do zbierania informacji o otwartych połączeniach " +#~ "TCP, ruchu sieciowym na danym interfejsie, regułach iptables itp." + +#~ msgid "" +#~ "Output plugins provide different possibilities to store collected data. " +#~ "It is possible to enable multiple plugin at one, for example to store " +#~ "collected data in rrd databases and to transmit the data over the network " +#~ "to other collectd instances." +#~ msgstr "" +#~ "Pluginy wyjścia dostarczają różnych możliwości przechowywania " +#~ "zgromadzonych danych. Można włączyć wiele pluginów naraz, na przykład " +#~ "przechowywać dane w bazach danych RRD i wysyłać je do innych instancji " +#~ "collectd w sieci." + +#~ msgid "" +#~ "System plugins collecting values about system state and ressource usage " +#~ "on the device.:" +#~ msgstr "" +#~ "Wtyczki systemowe zbierają wartości o stanie systemu i użyciu zasobów " +#~ "urządzenia.:" + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "Wtyczka \"wireless\" zbiera dane o sile sygnału, zakłóceniach i jakości " +#~ "WiFi." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "konfiguracja wtyczki WiFi" diff --git a/feeds/luci/applications/luci-app-statistics/po/pt-br/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/pt-br/rrdtool.po new file mode 100644 index 0000000..510b4a8 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/pt-br/rrdtool.po @@ -0,0 +1,359 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2011-10-11 21:17+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "%H: Wireless - Relação Sinal/Ruido" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "dBm" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Nivel de Ruído" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "Força do Sinal" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Wireless - Qualidade do Sinal" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "n" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Qualidade do Sinal" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "%H: Tempo de resposta ICMP" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "ms" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "%di" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "%H: Firewall - Pacotes Processados" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "Pacote/s" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "Cadeia \"%di\"" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "%H: Netlink - Transferência na %pi" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "Bytes/s" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "Bytes (%ds)" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "%H: Netlink - Pacotes na %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "Packets/s" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "Processado (%ds)" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "Descartados (%ds)" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "Erros (%ds)" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "%H: Netlink - Multicast na %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "Pacote/s" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "Pacotes" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "%H: Netlink - Colisões na %pi" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "Colisão(es)" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "Colisões" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "%H: Netlink - Erros na %pi" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "Erro/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "%di" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "%di" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "%H: Processos" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "Processo/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "%di" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "%H: Processo %pi - tempo usado da cpu" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "Jiffies" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "sistema" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "usuário" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "%H: Processo %pi - threads e processos" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "Contagem" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "%ds" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "%H: Processo %pi - pagina de erros" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "Pagina de erros" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "pagina de erros" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "%H: Processo %pi - tamanho da memória virtual" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "Bytes" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "memória virtual" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "%H: Usado no Processado #%pi" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "%" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "%di" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "%H: Transferência na %di" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "Bytes/s" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "%H: Pacotes na %di" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "Pacote/s" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "%H: Ligações TCP na Porta %pi" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "Ligação(ões)" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "%di" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "%H: Utilização de Espaço em Disco em %di" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "Bytes" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "%ds" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "%ds" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "%H: Interrupções" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "Erro/s" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "IRQ %di" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "%H: Carga do Sistema" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "Carga" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "1 min" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "5 min" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "15 min" diff --git a/feeds/luci/applications/luci-app-statistics/po/pt-br/statistics.po b/feeds/luci/applications/luci-app-statistics/po/pt-br/statistics.po new file mode 100644 index 0000000..3b3590f --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/pt-br/statistics.po @@ -0,0 +1,833 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2014-03-15 22:12+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "Ação (destino)" + +msgid "Add command for reading values" +msgstr "Adicionar comando para leitura de valores" + +msgid "Add matching rule" +msgstr "Adicionar regra" + +msgid "Add multiple hosts separated by space." +msgstr "Adicione múltiplos equipamentos separados por espaço." + +msgid "Add notification command" +msgstr "Adicionar o comando de notificação" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Diretório Base" + +msgid "Basic monitoring" +msgstr "Monitoramento básico" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "Configuração do plugin CPU" + +msgid "CSV Output" +msgstr "Saida CSV" + +msgid "CSV Plugin Configuration" +msgstr "Configuração do plugin CSV" + +msgid "Cache collected data for" +msgstr "Cache dos dados coletados" + +msgid "Cache flush interval" +msgstr "Intervalo de limpeza do cache" + +msgid "Chain" +msgstr "Cadeia" + +msgid "CollectLinks" +msgstr "Coleção de Links" + +msgid "CollectRoutes" +msgstr "Coleção de Rotas" + +msgid "CollectTopology" +msgstr "Coleção de Topologias" + +msgid "Collectd Settings" +msgstr "Configurações do Coletadas" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd é um pequeno daemon que coleta dados de várias fontes através de " +"diferentes plugins. Nesta página você pode alterar as configurações gerais " +"do daemon collectd." + +msgid "Conntrack" +msgstr "Conntrack" + +msgid "Conntrack Plugin Configuration" +msgstr "Configuração do Plugin do Conntrack" + +msgid "DF Plugin Configuration" +msgstr "Configuração do plugin DF" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "Configuração do plugin DNS" + +msgid "Data collection interval" +msgstr "Intervalo da coleta de dados" + +msgid "Datasets definition file" +msgstr "Arquivo com a definição de dados" + +msgid "Destination ip range" +msgstr "Faixa IP de destino" + +msgid "Directory for collectd plugins" +msgstr "Diretório para os plugins do collectd" + +msgid "Directory for sub-configurations" +msgstr "Diretório para sub-configurações" + +msgid "Disk Plugin Configuration" +msgstr "Configuração do plugin Disco" + +msgid "Disk Space Usage" +msgstr "Utilização de espaço em disco" + +msgid "Disk Usage" +msgstr "Utilização do Disco" + +msgid "Display Host »" +msgstr "Mostrar Host" + +msgid "Display timespan »" +msgstr "Mostrar intervalo »" + +msgid "E-Mail Plugin Configuration" +msgstr "Configuração do plugin E-Mail" + +msgid "Email" +msgstr "Email" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Habilitar este plugin" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Configuração do plugin Exec" + +msgid "Filter class monitoring" +msgstr "Monitoramento das Classes de Filtros" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Flush cache after" +msgstr "Limpar cache após" + +msgid "Forwarding between listen and server addresses" +msgstr "" +"Encaminhamento entre o endereço de escuta e os endereços dos servidores" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Gráficos" + +msgid "Group" +msgstr "Grupo" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Aqui você pode definir comandos externos que serão iniciados pelo collectd a " +"fim de ler determinados valores. Os valores serão lidos a partir do stdout." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Aqui você pode definir os comandos externos que serão iniciados pelo " +"collectd quando determinados valores limite forem atingidos. Os valores " +"passados ao comando serão enviados para o stdin." + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Aqui você pode definir diversos critérios para as regras iptables " +"selecionadas serem monitoradas." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "Equipamento" + +msgid "Hostname" +msgstr "Hostname" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "Endereço IP ou nome do equipamento de onde obter a saída do txtinfo" + +msgid "IRQ Plugin Configuration" +msgstr "Configuração do plugin IRQ" + +msgid "Ignore source addresses" +msgstr "Ignorar endereços de origem" + +msgid "Incoming interface" +msgstr "Interface de entrada" + +msgid "Interface Plugin Configuration" +msgstr "Configuração do plugin Interface" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interrupts" +msgstr "Interrupções" + +msgid "Interval for pings" +msgstr "Intervalo para pings" + +msgid "Iptables Plugin Configuration" +msgstr "Configuração do plugin Iptables" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" +"Deixe não selecionado para determinar automaticamente a interface a ser " +"monitorada" + +msgid "Listen host" +msgstr "Endereço de escuta do Host" + +msgid "Listen port" +msgstr "Porta de escuta" + +msgid "Listener interfaces" +msgstr "Escutar na(s) interface(s)" + +msgid "Load Plugin Configuration" +msgstr "Configuração do plugin carga" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Máximo de conexões permitidas" + +msgid "Memory" +msgstr "Memória" + +msgid "Memory Plugin Configuration" +msgstr "Configuração do Plugin da Memória" + +msgid "Monitor all except specified" +msgstr "Monitore tudo exceto se especificado" + +msgid "Monitor all local listen ports" +msgstr "Monitorar todas as portas locais" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Monitorar dispositivos" + +msgid "Monitor disks and partitions" +msgstr "Monitoras discos e partições" + +msgid "Monitor filesystem types" +msgstr "Monitorar tipos de sistemas de arquivos" + +msgid "Monitor hosts" +msgstr "Monitorar os equipamentos" + +msgid "Monitor interfaces" +msgstr "Monitorar interfaces" + +msgid "Monitor interrupts" +msgstr "Monitorar interrupções" + +msgid "Monitor local ports" +msgstr "Monitorar as portas locais" + +msgid "Monitor mount points" +msgstr "Monitorar pontos de montagem" + +msgid "Monitor processes" +msgstr "Monitorar processos" + +msgid "Monitor remote ports" +msgstr "Monitorar portas remotas" + +msgid "Name of the rule" +msgstr "Nome da regra" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "Configuração do plugin Netlink" + +msgid "Network" +msgstr "Rede" + +msgid "Network Plugin Configuration" +msgstr "Configuração do plugin Rede" + +msgid "Network plugins" +msgstr "Plugins de rede" + +msgid "Network protocol" +msgstr "Protocolo de rede" + +msgid "Number of threads for data collection" +msgstr "Número de threads para o coletor de dados" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "Configuração do Plugin OLSRd" + +msgid "Only create average RRAs" +msgstr "Somente criar RRAs de média" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Opções" + +msgid "Outgoing interface" +msgstr "Interface de saída" + +msgid "Output plugins" +msgstr "Plugins de saída" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Configuração do plugin Ping" + +msgid "Port" +msgstr "Porta" + +msgid "Processes" +msgstr "Processos" + +msgid "Processes Plugin Configuration" +msgstr "Configuração do plugin Processos" + +msgid "Processes to monitor separated by space" +msgstr "Processos para monitorar, separado por espaços" + +msgid "Processor" +msgstr "Processador" + +msgid "Qdisc monitoring" +msgstr "Monitoramento do Qdisc" + +msgid "RRD XFiles Factor" +msgstr "Fator RRD XFiles" + +msgid "RRD heart beat interval" +msgstr "Intervalo entre duas atualizações" + +msgid "RRD step interval" +msgstr "Intervalo de atualização" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "Configuração do plugin RRDTool" + +msgid "Rows per RRA" +msgstr "Linhas por RRA" + +msgid "Script" +msgstr "Script" + +msgid "Seconds" +msgstr "Segundos" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Endereço do servidor" + +msgid "Server port" +msgstr "Porta do servidor" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "Monitoramento das Classes de Shaping" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "Arquivo do socket" + +msgid "Socket group" +msgstr "Grupo do socket" + +msgid "Socket permissions" +msgstr "Permissões do socket" + +msgid "Source ip range" +msgstr "Faixa de IP de origem" + +msgid "Specifies what information to collect about links." +msgstr "Especifica quais informações serão coletadas sobre os enlaces." + +msgid "Specifies what information to collect about routes." +msgstr "Especifica quais informações serão coletadas sobre as rotas." + +msgid "Specifies what information to collect about the global topology." +msgstr "Especifica quais informações serão coletadas sobre a topologia global." + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "Estatística" + +msgid "Storage directory" +msgstr "Diretório de armazenamento" + +msgid "Storage directory for the csv files" +msgstr "Diretório para armazenamento dos arquivos csv" + +msgid "Store data values as rates instead of absolute values" +msgstr "Armazenar os valores dos dados como taxas em vez de valores absolutos" + +msgid "Stored timespans" +msgstr "Intervalos armazenados" + +msgid "System Load" +msgstr "Carga do Sistema" + +msgid "TCP Connections" +msgstr "Conexões TCP" + +msgid "TCPConns Plugin Configuration" +msgstr "Configuração do plugin TCPConns" + +msgid "TTL for network packets" +msgstr "TTL para os pacotes de rede" + +msgid "TTL for ping packets" +msgstr "TTL para os pacotes do ping" + +msgid "Table" +msgstr "Tabela" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "O plugin NUT lê informações sobre Fontes de alimentação ininterruptas." + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" +"O plugin OLSRd lê informações sobre redes em malha (mesh) a partir do plugin " +"txtinfo do OLSRd." + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" +"O plugin do conntrack coleta estatísticas sobre o número de conexões " +"rastreadas." + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" +"O plugin cpu coleta as estatísticas básicas sobre o uso do processador." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"O plugin csv armazena os dados coletados em um arquivo no formato csv para " +"um futuro processamento por outros programas." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"O plugin df coleta estatísticas sobre a utilização de espaço em disco em " +"diferentes dispositivos, pontos de montagem ou tipos de sistemas de arquivos." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"O plugin disco coleta estatísticas de uso detalhadas das partições " +"selecionadas ou discos inteiros." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"O plugin dns coleta estatísticas detalhadas sobre o tráfego do dns nas " +"interfaces selecionadas." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"O plugin de email cria um socket unix que pode ser usado para transmitir " +"estatísticas de email para o collectd. Este plugin é essencialmente " +"destinado a ser utilizado em conjunto com o plugin Mail::SpamAssasin::" +"Plugin::Collectd mas pode ser utilizado de outras maneiras também." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"O plugin exec inicia comandos externos para leitura de valores ou notificar " +"processos externos quando um determinado valor limite for atingido." + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" +"O plugin interface plugin coleta estatísticas sobre o tráfego das interfaces " +"selecionadas." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"O plugin iptables irá monitorar as regras de firewall selecionadas e coletar " +"informações sobre pacotes e bytes processados pela regra." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"O plugin irq irá monitorar a taxa de ocorrências por segundo de cada " +"interrupção selecionada. Se nenhuma interrupção for selecionada então todas " +"as interrupções serão monitoradas." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" +"O plugin iwinfo coleta estatísticas sobre a força, ruído e qualidade do " +"sinal da rede sem fio." + +msgid "The load plugin collects statistics about the general system load." +msgstr "O plugin de carga coleta estatísticas gerais sobre a carga do sistema." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "O plugin de memória coleta estatísticas sobre o uso da memória." + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"O plugin Netlink coleta informações detalhadas como qdisc-, classe- e " +"estatísticas de filtro das interfaces selecionadas." + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"O plugin rede fornece informações de rede baseadas na comunicação entre as " +"diferentes instâncias do collectd. O Collectd pode operar tanto no modo " +"cliente quanto no modo servidor. No modo cliente os dados coletados " +"localmente são transferidos para um servidor collectd. No modo de servidor, " +"o servidor local recebe os dados de outros servidores." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"O plugin ping irá enviar pacotes ICMP to tipo echo aos equipamentos " +"selecionados e medir o tempo de resposta para cada equipamento." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"O plugin de processos coleta informações como o tempo da cpu, falha de " +"página e uso de memória dos processos selecionados." + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"O plugin rrdtool armazena os dados coletados no arquivo de banco de dados " +"rrd.

Aviso: A má configuração desses valores, resultará " +"em um valor muito elevado no consumo de memória no diretório temporário. " +"Isso pode tornar o equipamento inutilizável!" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"O plugin tcpconns coleta informações sobre as conexões TCP abertas das " +"portas selecionadas." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"O plugin unixsock cria um socket unix, que pode ser usado para ler os dados " +"coletados a partir de uma collectd em execução." + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"Esta seção define em quais interfaces o collectd irá aguardar para receber " +"conexões." + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" +"Esta seção define para qual servidor os dados coletados localmente serão " +"enviados." + +msgid "Try to lookup fully qualified hostname" +msgstr "Tentar encontrar o nome completo do equipamento (FQDN)" + +msgid "UPS" +msgstr "UPS (no-breaks)" + +msgid "UPS Plugin Configuration" +msgstr "Plugin de configuração UPS" + +msgid "UPS name in NUT ups@host format" +msgstr "Nome do UPS no NUT em formato ups@equipamento" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Configuração do plugin Unixsock" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Arquivo PID usado" + +msgid "User" +msgstr "usuário" + +msgid "Verbose monitoring" +msgstr "Monitoramento no modo detalhado" + +msgid "Wireless" +msgstr "Rede Sem Fio (Wireless)" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "Configuração do Plugin iwinfo da Rede Sem Fio (Wireless)" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "ex: br-ff" + +msgid "e.g. br-lan" +msgstr "ex: br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "ex: rejeitar-com tcp-reset" + +msgid "max. 16 chars" +msgstr "máx. 16 caracteres" + +msgid "reduces rrd size" +msgstr "reduzir o tamanho do rrd" + +msgid "seconds; multiple separated by space" +msgstr "segundos; vários valores, separar com espaço" + +msgid "server interfaces" +msgstr "interfaces do servidor" + +#~ msgid "Collectd" +#~ msgstr "Coletar" + +#~ msgid "System plugins" +#~ msgstr "Plugins de sistema" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "As estatísticas são baseadas no Collectd e é utilizado o RRD Tool para renderização das imagens a partir dos dados " +#~ "coletados." + +#~ msgid "Installed network plugins:" +#~ msgstr "Plugins de rede instalados:" + +#~ msgid "Installed output plugins:" +#~ msgstr "Plugins de saída instalados:" + +#~ msgid "" +#~ "Network plugins are used to collect information about open tcp " +#~ "connections, interface traffic, iptables rules etc." +#~ msgstr "" +#~ "Os plugins de rede são utilizados para coletar informações sobre conexões " +#~ "tcp abertas, tráfego da interface, regras do iptables, etc." + +#~ msgid "" +#~ "Output plugins provide different possibilities to store collected data. " +#~ "It is possible to enable multiple plugin at one, for example to store " +#~ "collected data in rrd databases and to transmit the data over the network " +#~ "to other collectd instances." +#~ msgstr "" +#~ "Os plugins de saída proveem diferentes possibilidades para armazenar os " +#~ "dados coletados. É possível habilitar diversos plugin para, por exemplo, " +#~ "coletar dados em bancos de dados rrd e transmitir os dados através da " +#~ "rede para outro serviço collectd." + +#~ msgid "" +#~ "System plugins collecting values about system state and ressource usage " +#~ "on the device.:" +#~ msgstr "" +#~ "Plugins do sistema coletando valores sobre o estado do sistema e uso dos " +#~ "recursos neste dispositivo.:" + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "O plugin wireless coleta estatísticas sobre o nível de sinal wireless, o " +#~ "ruído e qualidade." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Configuração do Plugin da Rede Sem Fio (Wireless)" diff --git a/feeds/luci/applications/luci-app-statistics/po/pt/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/pt/rrdtool.po new file mode 100644 index 0000000..6abbaf7 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/pt/rrdtool.po @@ -0,0 +1,359 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-06-02 21:10+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "%H: Wireless - Relação Sinal/Ruido" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "dBm" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Nivel de Ruido" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "Forca do Sinal" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Wireless - Qualidade do Sinal" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "n" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Qualidade do Sinal" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "%H: Tempo de resposta ICMP" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "ms" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "%di" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "%H: Firewall - Pacotes Processados" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "Pacote/s" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "Cadeia \"%di\"" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "%H: Netlink - Transferencia na %pi" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "Bytes/s" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "Bytes (%ds)" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "%H: Netlink - Pacotes na %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "Packets/s" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "Processado (%ds)" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "Dropado (%ds)" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "Erros (%ds)" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "%H: Netlink - Multicast na %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "Pacote/s" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "Pacotes" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "%H: Netlink - Colisoes na %pi" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "Colisao(es)" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "Colisoes" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "%H: Netlink - Erros na %pi" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "Erro/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "%di" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "%di" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "%H: Processos" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "Processo/s" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "%di" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "%H: Processo %pi - tempo usado da cpu" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "Jiffies" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "sistema" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "utilizador" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "%H: Processo %pi - threads e processos" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "Contagem" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "%ds" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "%H: Prcesso %pi - pagina de erros" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "Pagina de erros" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "pagina de erros" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "%H: Processo %pi - tamanho da memoria virtual" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "Bytes" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "memoria virtual" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "%H: Usado no Processado #%pi" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "%" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "%di" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "%H: Transferencia na %di" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "Bytes/s" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "%H: Pacotes na %di" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "Pacote/s" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "%H: Ligações TCP na Porta %pi" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "Ligação(ões)" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "%di" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "%H: Utilizacao de Espaco em Disco em %di" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "Bytes" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "%ds" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "%ds" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "%H: Interrupcoes" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "Erro/s" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "IRQ %di" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "%H: Carga do Sistema" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "Carga" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "1 min" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "5 min" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "15 min" diff --git a/feeds/luci/applications/luci-app-statistics/po/pt/statistics.po b/feeds/luci/applications/luci-app-statistics/po/pt/statistics.po new file mode 100644 index 0000000..f30bf90 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/pt/statistics.po @@ -0,0 +1,795 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-06-01 00:10+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "Ação (destino)" + +msgid "Add command for reading values" +msgstr "Adicionar comando para leitura de valores" + +msgid "Add matching rule" +msgstr "Adicionar regra" + +msgid "Add multiple hosts separated by space." +msgstr "Adicionar hosts múltiplos separados por espaço." + +msgid "Add notification command" +msgstr "Adicionar o comando de notificação" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Diretório Base" + +msgid "Basic monitoring" +msgstr "Monitoramento básico" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "Configuração do plugin CPU" + +msgid "CSV Output" +msgstr "Formato CSV" + +msgid "CSV Plugin Configuration" +msgstr "Configuração do plugin CSV" + +msgid "Cache collected data for" +msgstr "Cache dos dados coletados" + +msgid "Cache flush interval" +msgstr "Intervalo de limpeza do cache" + +msgid "Chain" +msgstr "Cadeia" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "Configurações do Collectd" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd é um pequeno daemon que coleta dados de várias fontes através de " +"diferentes plugins. Nesta página você pode alterar as configurações gerais " +"do daemon collectd." + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "Configuração do plugin DF" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "Configuração do plugin DNS" + +msgid "Data collection interval" +msgstr "Intervalo da coleta de dados" + +msgid "Datasets definition file" +msgstr "Arquivo com a definição de dados" + +msgid "Destination ip range" +msgstr "IP de destino" + +msgid "Directory for collectd plugins" +msgstr "Diretório para os plugins do collectd" + +msgid "Directory for sub-configurations" +msgstr "Diretório para sub-configurações" + +msgid "Disk Plugin Configuration" +msgstr "Configuração do plugin Disco" + +msgid "Disk Space Usage" +msgstr "Utilização de espaço em disco" + +msgid "Disk Usage" +msgstr "Utilização do Disco" + +msgid "Display Host »" +msgstr "Mostrar Host »" + +msgid "Display timespan »" +msgstr "Mostrar intervalo »" + +msgid "E-Mail Plugin Configuration" +msgstr "Configuração do plugin E-Mail" + +msgid "Email" +msgstr "Email" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Habilitar este plugin" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Configuração do plugin Exec" + +msgid "Filter class monitoring" +msgstr "Monitoramento das Classes de Filtros" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Flush cache after" +msgstr "Limpar cache após" + +msgid "Forwarding between listen and server addresses" +msgstr "Transmissão entre o endereço de escuta e dos servidores" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Gráficos" + +msgid "Group" +msgstr "grupo" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Aqui pode definir comandos externos que serão iniciados pelo collectd a fim " +"de ler determinados valores. Os valores serão lidos a partir do stdout." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Aqui pode definir os comandos externos que serão iniciados pelo collectd " +"quando determinados valores limite forem atingidos. Os valores passados ao " +"comando serão enviados para o stdin." + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Aqui você pode definir diversos critérios para as regras iptables " +"selecionadas serem monitoradas." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "Hostname" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "Configuração do plugin IRQ" + +msgid "Ignore source addresses" +msgstr "Ignorar endereços de origem" + +msgid "Incoming interface" +msgstr "Interface de entrada" + +msgid "Interface Plugin Configuration" +msgstr "Configuração do plugin Interface" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interrupts" +msgstr "Interrupções" + +msgid "Interval for pings" +msgstr "Intervalo dos pings" + +msgid "Iptables Plugin Configuration" +msgstr "Configuração do plugin Iptables" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" +"Deixar desmarcada para determinar automaticamente as interfaces a " +"monitorizar." + +msgid "Listen host" +msgstr "Endereço de escuta do Host" + +msgid "Listen port" +msgstr "Porta de escuta" + +msgid "Listener interfaces" +msgstr "Escutar na(s) interface(s)" + +msgid "Load Plugin Configuration" +msgstr "Configuração do plugin carga" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Máximo de conexões permitidas" + +msgid "Memory" +msgstr "Memória" + +msgid "Memory Plugin Configuration" +msgstr "Configuração do Plugin de Memória" + +msgid "Monitor all except specified" +msgstr "Monitorizar tudo excepto os especificados" + +msgid "Monitor all local listen ports" +msgstr "Monitorar todas as portas locais" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Monitorar dispositivos" + +msgid "Monitor disks and partitions" +msgstr "Monitoras discos e partições" + +msgid "Monitor filesystem types" +msgstr "Monitorar tipos de sistemas de arquivos" + +msgid "Monitor hosts" +msgstr "Monitorar os hosts" + +msgid "Monitor interfaces" +msgstr "Monitorizar interfaces" + +msgid "Monitor interrupts" +msgstr "Monitorar interrupções" + +msgid "Monitor local ports" +msgstr "Monitorar as portas locais" + +msgid "Monitor mount points" +msgstr "Monitorar pontos de montagem" + +msgid "Monitor processes" +msgstr "Monitorar processos" + +msgid "Monitor remote ports" +msgstr "Monitorar portas remotas" + +msgid "Name of the rule" +msgstr "Nome da regra" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "Configuração do plugin Netlink" + +msgid "Network" +msgstr "Rede" + +msgid "Network Plugin Configuration" +msgstr "Configuração do plugin Rede" + +msgid "Network plugins" +msgstr "Plugins de rede" + +msgid "Network protocol" +msgstr "Protocolo de rede" + +msgid "Number of threads for data collection" +msgstr "Número de threads para o coletor de dados" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "Somente criar RRAs de média" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Opções" + +msgid "Outgoing interface" +msgstr "Interface de saída" + +msgid "Output plugins" +msgstr "Plugins de saída" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Configuração do plugin Ping" + +msgid "Port" +msgstr "Porta" + +msgid "Processes" +msgstr "Processos" + +msgid "Processes Plugin Configuration" +msgstr "Configuração do plugin Processos" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "Processador" + +msgid "Qdisc monitoring" +msgstr "Monitoramento do Qdisc" + +msgid "RRD XFiles Factor" +msgstr "Arquivos RRD XFiles Factor" + +msgid "RRD heart beat interval" +msgstr "Intervalo entre duas atualizações" + +msgid "RRD step interval" +msgstr "Intervalo de atualização" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "Configuração do plugin RRDTool" + +msgid "Rows per RRA" +msgstr "Linhas por RRA" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "Segundos" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "IP/Hostname do servidor" + +msgid "Server port" +msgstr "Porta do servidor" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "Monitoramento das Classes de Shaping" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "IP de origem" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "Diretório de armazenamento" + +msgid "Storage directory for the csv files" +msgstr "Diretório para armazenamento dos arquivos csv" + +msgid "Store data values as rates instead of absolute values" +msgstr "Armazenar os valores dos dados como taxas em vez de valores absolutos" + +msgid "Stored timespans" +msgstr "Intervalos armazenados" + +msgid "System Load" +msgstr "Carga do Sistema" + +msgid "TCP Connections" +msgstr "Conexões TCP" + +msgid "TCPConns Plugin Configuration" +msgstr "Configuração do plugin TCPConns" + +msgid "TTL for network packets" +msgstr "TTL para os pacotes de rede" + +msgid "TTL for ping packets" +msgstr "TTL para os pacotes do ping" + +msgid "Table" +msgstr "Tabela" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" +"O plugin cpu coleta as estatísticas básicas sobre o uso do processador." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"O plugin csv armazena os dados coletados em um arquivo no formato csv para " +"um futuro processamento por outros programas." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"O plugin df coleta estatísticas sobre a utilização de espaço em disco em " +"diferentes dispositivos, pontos de montagem ou tipos de sistemas de arquivos." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"O plugin disco coleta estatísticas de uso detalhadas das partições " +"selecionadas ou discos inteiros." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"O plugin dns coleta estatísticas detalhadas sobre o tráfego do dns nas " +"interfaces selecionadas." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"O plugin de email cria um socket unix que pode ser usado para transmitir " +"estatísticas de email o daemon collectd. Este plugin é essencialmente " +"destinado a ser utilizado em conjunto com o plugin Mail::SpamAssasin::" +"Plugin::Collectd mas pode ser utilizado de outras maneiras também." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"O plugin exec inicia comandos externos para leitura de valores ou notificar " +"processos externos quando um determinado valor limite for atingido." + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" +"O plugin interface plugin coleta estatísticas sobre o tráfego das interfaces " +"selecionadas." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"O plugin iptables irá monitorar as regras de firewall selecionadas e coletar " +"informações sobre pacotes e bytes processados pela regra." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"O plugin irq irá monitorar a taxa de erros por segundo de cada interrupção " +"selecionada. Se nenhuma interrupção for selecionada então todas as " +"interrupções serão monitoradas." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "O plugin carga coleta estatísticas gerais sobre a carga do sistema." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"O plugin Netlink coleta informações detalhadas como qdisc-, classe- e filtro " +"de estatísticas das interfaces selecionadas." + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"O plugin rede fornece informações de rede baseadas na comunicação entre as " +"diferentes instâncias do collectd. O Collectd pode operar tanto no modo " +"cliente quanto no modo servidor. No modo cliente os dados coletados " +"localmente são transferidos para um servidor collectd, no modo de servidor a " +"instância local recebe dados de outros hosts." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"O plugin ping irá enviar pacotes ICMP to tipo echo aos hosts selecionados e " +"medir o tempo de resposta para cada host." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"O plugin processo coleta informações como o tempo da cpu, página falhas e " +"uso de memória dos processos selecionados." + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"O plugin rrdtool armazena os dados coletados no arquivo de banco de dados " +"rrd.

Aviso: A má configuração desses valores, resultará " +"em um valor muito elevado no consumo de memória no diretório temporário. " +"Isso pode tornar o equipamento inutilizável!" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"O plugin tcpconns coleta informações sobre as conexões TCP abertas das " +"portas selecionadas." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"O plugin unixsock cria um socket unix, que pode ser usado para ler os dados " +"coletados a partir de uma instância do collectd." + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"Esta seção define em quais interfaces o collectd irá aguardar para receber " +"conexões." + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" +"Esta seção define para qual servidor os dados coletados localmente serão " +"enviados." + +msgid "Try to lookup fully qualified hostname" +msgstr "Tentar encontrar o nome do host completo (FQDN)" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Configuração do plugin Unixsock" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Arquivo PID usado" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "Monitoramento no modo verbose" + +msgid "Wireless" +msgstr "Wireless" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "ex. br-ff" + +msgid "e.g. br-lan" +msgstr "ex. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "ex. rejeitar-com tcp-reset" + +msgid "max. 16 chars" +msgstr "max. 16 caract." + +msgid "reduces rrd size" +msgstr "reduzir o tamanho do rrd" + +msgid "seconds; multiple separated by space" +msgstr "segundos; vários valores, separar com espaço" + +msgid "server interfaces" +msgstr "Interfaces do servidor" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Plugis de Sistema" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "As estatísticas são baseadas no Collectd e é utilizado o RRD Tool para renderização das imagens à partir dos dados " +#~ "coletados." + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "O plugin wireless coleta estatísticas sobre o nível de sinal wireless, o " +#~ "ruído e qualidade." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Configuração do plugin Wireless" diff --git a/feeds/luci/applications/luci-app-statistics/po/ro/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/ro/rrdtool.po new file mode 100644 index 0000000..9878759 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/ro/rrdtool.po @@ -0,0 +1,360 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-29 17:25+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Nivel zgomot" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Wireless - Calitate semnal" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Calitate semnal" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/ro/statistics.po b/feeds/luci/applications/luci-app-statistics/po/ro/statistics.po new file mode 100644 index 0000000..0c52e32 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/ro/statistics.po @@ -0,0 +1,724 @@ +# statistics.pot +# generated from ./applications/luci-statistics/luasrc/i18n/statistics.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-07 17:27+0200\n" +"Last-Translator: Daniel \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Action (target)" +msgstr "" + +msgid "Add command for reading values" +msgstr "" + +msgid "Add matching rule" +msgstr "" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Directorul de baza" + +msgid "Basic monitoring" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "Configurarea pluginului CPU" + +msgid "CSV Output" +msgstr "Afisarea CSV" + +msgid "CSV Plugin Configuration" +msgstr "Configurarea pluginului CVS" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "Setarile Collectd" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd e un serviciu mic pentru colectarea de date din diferite surse prin " +"diferite pluginuri. In aceasta pagina poti schimba setarile generale pentru " +"Collectd." + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "" + +msgid "Data collection interval" +msgstr "Intervalul de colectare date" + +msgid "Datasets definition file" +msgstr "Fisierul de definitii dataseturi" + +msgid "Destination ip range" +msgstr "" + +msgid "Directory for collectd plugins" +msgstr "Directorul pentru pluginurile collectd" + +msgid "Directory for sub-configurations" +msgstr "Directorul pentru sub-configuratii" + +msgid "Disk Plugin Configuration" +msgstr "" + +msgid "Disk Space Usage" +msgstr "Utilizarea spatiului pe disc" + +msgid "Disk Usage" +msgstr "Utilizarea discului" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "" + +msgid "E-Mail Plugin Configuration" +msgstr "" + +msgid "Email" +msgstr "Email" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Grafice" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "Numele de host" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "" + +msgid "Ignore source addresses" +msgstr "" + +msgid "Incoming interface" +msgstr "" + +msgid "Interface Plugin Configuration" +msgstr "" + +msgid "Interfaces" +msgstr "Interfete" + +msgid "Interrupts" +msgstr "Intreruperi" + +msgid "Interval for pings" +msgstr "Interval pentru ping" + +msgid "Iptables Plugin Configuration" +msgstr "" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "" + +msgid "Monitor disks and partitions" +msgstr "" + +msgid "Monitor filesystem types" +msgstr "" + +msgid "Monitor hosts" +msgstr "" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "" + +msgid "Monitor local ports" +msgstr "" + +msgid "Monitor mount points" +msgstr "" + +msgid "Monitor processes" +msgstr "" + +msgid "Monitor remote ports" +msgstr "" + +msgid "Name of the rule" +msgstr "" + +msgid "Netlink" +msgstr "Legatura de retea" + +msgid "Netlink Plugin Configuration" +msgstr "" + +msgid "Network" +msgstr "Retea" + +msgid "Network Plugin Configuration" +msgstr "" + +msgid "Network plugins" +msgstr "Pluginuri de retea" + +msgid "Network protocol" +msgstr "" + +msgid "Number of threads for data collection" +msgstr "Numarul de threaduri pentru colectarea datelor" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Outgoing interface" +msgstr "" + +msgid "Output plugins" +msgstr "Pluginuri de iesire" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "Procese" + +msgid "Processes Plugin Configuration" +msgstr "" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "Procesor" + +msgid "Qdisc monitoring" +msgstr "" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "Secunde" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "" + +msgid "Storage directory for the csv files" +msgstr "" + +msgid "Store data values as rates instead of absolute values" +msgstr "" + +msgid "Stored timespans" +msgstr "" + +msgid "System Load" +msgstr "Incarcarea de sistem" + +msgid "TCP Connections" +msgstr "Conexiuni TCP" + +msgid "TCPConns Plugin Configuration" +msgstr "" + +msgid "TTL for network packets" +msgstr "" + +msgid "TTL for ping packets" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" +"Pluginul pentru CPU colecteaza statistici de baza despre utilizarea " +"procesorului." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" + +msgid "Try to lookup fully qualified hostname" +msgstr "Incearca sa rezolvi numele de domeniu complet" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Fisierul pentru PID folosit" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "" + +msgid "Wireless" +msgstr "Wireless" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "" + +msgid "e.g. br-lan" +msgstr "" + +msgid "e.g. reject-with tcp-reset" +msgstr "" + +msgid "max. 16 chars" +msgstr "" + +msgid "reduces rrd size" +msgstr "" + +msgid "seconds; multiple separated by space" +msgstr "" + +msgid "server interfaces" +msgstr "" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Pluginuri de sistem" diff --git a/feeds/luci/applications/luci-app-statistics/po/ru/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/ru/rrdtool.po new file mode 100644 index 0000000..a63a850 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/ru/rrdtool.po @@ -0,0 +1,360 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-03-26 15:36+0200\n" +"Last-Translator: Anonymous Pootle User\n" +"Language-Team: LANGUAGE \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "%H: Беспроводная связь - отношение сигнал/шум" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "дБм" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "Уровень шума" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "Мощность сигнала" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "%H: Беспроводная связь - качество сигнала" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "n" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "Качество сигнала" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "%H: Сквозное время ICMP" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "мс" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "%di" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "%H: Межсетевой экран - обработанные пакеты" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "пакет/c" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "\"%di\"" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "%H: Netlink - передача на %pi" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "байт/c" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "Байт (%ds)" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "%H: Netlink - пакеты на %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "пакет/c" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "Обработано (%ds)" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "Исключено (%ds)" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "Ошибок (%ds)" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "%H: Netlink - групповые пакеты на %pi" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "пакет/с" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "Пакеты" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "%H: Netlink - коллизии на %pi" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "коллиз/сек" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "Коллизии" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "%H: Netlink - Ошибки на %pi" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "ошибок/c" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "%di" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "%di" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "%H: Процессы" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "Процессов/с" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "%di" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "%H: Процесс %pi - время ЦП" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "Jiffies" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "система" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "пользователь" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "%H: Процесс %pi - потоков и процессов" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "Количество" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "%ds" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "%H: Процесс %pi - ошибки страниц" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "Ошибки страниц" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "ошибки страниц" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "%H: Процесс %pi - размер виртуальной памяти" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "Байт" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "виртуальная память" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "%H: Использование ЦП #%pi" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "%" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "%di" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "%H: Передача на %di" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "байт/c" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "%H: Пакетов на %di" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "пакетов/c" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "%H: TCP соединений на порт %pi " + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "соединений/с" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "%di" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "%H: Использование дискового пространства на %di" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "Байт" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "%ds" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "%ds" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "%H: прерывания" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "запросов/с" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "IRQ %di" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "%H: Загрузка системы" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "Загрузка" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "1 мин." + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "5 мин." + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "15 мин." diff --git a/feeds/luci/applications/luci-app-statistics/po/ru/statistics.po b/feeds/luci/applications/luci-app-statistics/po/ru/statistics.po new file mode 100644 index 0000000..d1dddbb --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/ru/statistics.po @@ -0,0 +1,824 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: statistics\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-12-05 17:11+0200\n" +"Last-Translator: Dmitri <4glitch@gmail.com>\n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Action (target)" +msgstr "Действие (цель)" + +msgid "Add command for reading values" +msgstr "Добавить команду для чтения значений" + +msgid "Add matching rule" +msgstr "Добавить правило выборки" + +msgid "Add multiple hosts separated by space." +msgstr "Добавить несколько хостов, разделённых пробелом" + +msgid "Add notification command" +msgstr "Добавить команду уведомления" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Базовая директория" + +msgid "Basic monitoring" +msgstr "Базовая статистика" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "Конфигурация модуля CPU" + +msgid "CSV Output" +msgstr "Вывод в CSV" + +msgid "CSV Plugin Configuration" +msgstr "Конфигурация модуля CSV" + +msgid "Cache collected data for" +msgstr "Кэшировать собранную статистику в течение" + +msgid "Cache flush interval" +msgstr "Интервал сброса кэша" + +msgid "Chain" +msgstr "Цепочка" + +msgid "CollectLinks" +msgstr "Сбор информации о соединениях (CollectLinks)" + +msgid "CollectRoutes" +msgstr "Сбор информации о маршрутах (CollectRoutes)" + +msgid "CollectTopology" +msgstr "Сбор информации о топологии (CollectTopology)" + +msgid "Collectd Settings" +msgstr "Настройки Collectd" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd - это сервис для сбора данных с разных модулей. На этой странице вы " +"можете изменить настройки Сollectd." + +msgid "Conntrack" +msgstr "Отслеживание подключения (Conntrack)" + +msgid "Conntrack Plugin Configuration" +msgstr "Настройка плагина Conntrack" + +msgid "DF Plugin Configuration" +msgstr "Конфигурация модуля DF" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "Конфигурация модуля DNS" + +msgid "Data collection interval" +msgstr "Интервал сбора данных" + +msgid "Datasets definition file" +msgstr "Файл с определением набора данных" + +msgid "Destination ip range" +msgstr "Диапазон IP-адресов назначения" + +msgid "Directory for collectd plugins" +msgstr "Директория с модулями collectd" + +msgid "Directory for sub-configurations" +msgstr "Директория конфигураций" + +msgid "Disk Plugin Configuration" +msgstr "Конфигурация модуля Disk" + +msgid "Disk Space Usage" +msgstr "Использование диска" + +msgid "Disk Usage" +msgstr "Использование диска" + +msgid "Display Host »" +msgstr "Показать узел »" + +msgid "Display timespan »" +msgstr "Показать за промежуток »" + +msgid "E-Mail Plugin Configuration" +msgstr "Конфигурация модуля E-Mail" + +msgid "Email" +msgstr "E-mail" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Включить этот модуль" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Конфигурация модуля Exec" + +#, fuzzy +msgid "Filter class monitoring" +msgstr "Мониторинг классов фильтров" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Flush cache after" +msgstr "Сбросить кэш после" + +msgid "Forwarding between listen and server addresses" +msgstr "Перенаправление между локальным адресом и адресом сервера" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Графики" + +msgid "Group" +msgstr "Группа" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Здесь вы можете определить внешние команды, которые будут выполнены для " +"чтения определённых значений. Значения будут считаны со стандартного вывода." + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Здесь вы можете определить внешние команды, которые будут выполнены, когда " +"значения достигнут определённого порога. Значения будут переданы на " +"стандартный ввод вызванным программам." + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Здесь вы можете указать различные критерии, по которым будут выбраны правила " +"для сбора статистики." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "Хост" + +msgid "Hostname" +msgstr "Имя хоста" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "IP-адрес или имя хоста, с которых получать текстовый вывод" + +msgid "IRQ Plugin Configuration" +msgstr "Конфигурация модуля IRQ" + +msgid "Ignore source addresses" +msgstr "Игнорировать адреса-источники" + +msgid "Incoming interface" +msgstr "Входящий интерфейс" + +msgid "Interface Plugin Configuration" +msgstr "Конфигурация модуля Interface" + +msgid "Interfaces" +msgstr "Интерфейсы" + +msgid "Interrupts" +msgstr "Прерывания" + +msgid "Interval for pings" +msgstr "Интервал для ping-запросов" + +msgid "Iptables Plugin Configuration" +msgstr "Конфигурация модуля Iptables" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" +"Оставьте невыбранным для автоматического определения интерфейсов для " +"мониторинга." + +msgid "Listen host" +msgstr "Хост" + +msgid "Listen port" +msgstr "Порт" + +msgid "Listener interfaces" +msgstr "Использовать интерфейсы" + +msgid "Load Plugin Configuration" +msgstr "Конфигурация модуля Load" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Максимальное число соединений" + +msgid "Memory" +msgstr "Память" + +msgid "Memory Plugin Configuration" +msgstr "Конфигурация модуля Memory" + +msgid "Monitor all except specified" +msgstr "Собирать статистику со всех, кроме указанных" + +msgid "Monitor all local listen ports" +msgstr "Собирать статистику со всех портов, ожидающих соединения" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Собирать статистику с устройств" + +msgid "Monitor disks and partitions" +msgstr "Собирать статистику с дисков и разделов" + +msgid "Monitor filesystem types" +msgstr "Собирать статистику с файловых систем" + +msgid "Monitor hosts" +msgstr "Собирать статистику с хостов" + +msgid "Monitor interfaces" +msgstr "Собирать статистику с интерфейсов" + +msgid "Monitor interrupts" +msgstr "Собирать статистику по прерываниям" + +msgid "Monitor local ports" +msgstr "Собирать статистику с локальных портов" + +msgid "Monitor mount points" +msgstr "Собирать статистику с точек монтирования" + +msgid "Monitor processes" +msgstr "Собирать статистику с процессов" + +msgid "Monitor remote ports" +msgstr "Собирать статистику с удалённых портов" + +msgid "Name of the rule" +msgstr "Название правила" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "Конфигурация модуля Netlink" + +msgid "Network" +msgstr "Network" + +msgid "Network Plugin Configuration" +msgstr "Конфигурация модуля Network" + +msgid "Network plugins" +msgstr "Сетевые модули" + +msgid "Network protocol" +msgstr "Сетевой протокол" + +msgid "Number of threads for data collection" +msgstr "Количество потоков сбора данных" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "Настройка плагина OLSRd" + +msgid "Only create average RRAs" +msgstr "Создавать только средние RRA" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Опции" + +msgid "Outgoing interface" +msgstr "Исходящий интерфейс" + +msgid "Output plugins" +msgstr "Модули вывода" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Конфигурация модуля Ping" + +msgid "Port" +msgstr "Порт" + +msgid "Processes" +msgstr "Процессы" + +msgid "Processes Plugin Configuration" +msgstr "Конфигурация модуля Processes" + +msgid "Processes to monitor separated by space" +msgstr "Процессы для мониторинга (разделённые пробелом)" + +msgid "Processor" +msgstr "Processor" + +msgid "Qdisc monitoring" +msgstr "Мониторинг Qdisc" + +#, fuzzy +msgid "RRD XFiles Factor" +msgstr "Фактор XFiles RRD" + +#, fuzzy +msgid "RRD heart beat interval" +msgstr "Интервал heartbeat RRD" + +msgid "RRD step interval" +msgstr "Интервал шага RRD" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "Конфигурация модуля RRDTool" + +msgid "Rows per RRA" +msgstr "Количество строк в RRA" + +msgid "Script" +msgstr "Скрипт" + +msgid "Seconds" +msgstr "Секунды" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Хост сервера" + +msgid "Server port" +msgstr "Порт сервера" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "Мониторинг классов шейпинга" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "Файл сокета" + +msgid "Socket group" +msgstr "Группа сокета" + +msgid "Socket permissions" +msgstr "Права доступа сокета" + +msgid "Source ip range" +msgstr "Диапазон IP-адресов источника" + +msgid "Specifies what information to collect about links." +msgstr "Указывает, какую информацию собирать о соединениях." + +msgid "Specifies what information to collect about routes." +msgstr "Указывает, какую информацию собирать о маршрутах." + +msgid "Specifies what information to collect about the global topology." +msgstr "Указывает, какую информацию собирать о глобальной топологии." + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "Статистика" + +msgid "Storage directory" +msgstr "Директория с данными" + +msgid "Storage directory for the csv files" +msgstr "Директория для CSV-файлов" + +msgid "Store data values as rates instead of absolute values" +msgstr "Хранить данные в виде коэффициентов вместо абсолютных значений" + +msgid "Stored timespans" +msgstr "Сохранённые промежутки времени" + +msgid "System Load" +msgstr "Загрузка системы" + +msgid "TCP Connections" +msgstr "TCPConns" + +msgid "TCPConns Plugin Configuration" +msgstr "Конфигурация модуля TCPConns" + +msgid "TTL for network packets" +msgstr "TTL для сетевых пакетов" + +msgid "TTL for ping packets" +msgstr "TTL для ping-пакетов" + +msgid "Table" +msgstr "Таблица" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" +"Модуль OLSRd считывает информацию о узловых сетях с модуля txtinfo OLSRd." + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" +"Модуль Conntrack собирает статистику о количестве отслеживаемых соединений." + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "Модуль CPU собирает статистику по использованию процессора." + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"Модуль CSV позволяет сохранить статистику в формате CSV для последующей " +"обработки." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"Модуль DF собирает статистику о доступном пространстве на различных " +"устройствах, точках монтирования или файловых системах." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"Модуль Disk собирает подробную статистику для выбранных разделов или дисков." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +"Модуль DNS собирает подробную статистику о DNS-трафике на выбранных " +"интерфейсах." + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"Модуль E-mail создает Unix-сокет, который может быть использован для " +"передачи статистики эл. почты работающему сервису collectd. В основном, этот " +"модуль предназначен для использования вместе с Mail::SpamAssasin::Plugin::" +"Collectd." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"Модуль Exec выполняет внешнюю команду в случае, когда определённые значения " +"достигают заданного порога." + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "Модуль Interface собирает статистику на выбранных сетевых интерфейсах." + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"Модуль Iptables собирает статистику с определённых правил межсетевого экрана." + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"Модуль IRQ собирает статистику по выбранным прерываниям. Если ни одно " +"прерывание не выбрано, сбор статистики будет проводиться по всем прерываниям." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" +"Модуль Iwinfo собирает статистику о беспроводном сигнале, шуме и качестве." + +msgid "The load plugin collects statistics about the general system load." +msgstr "Модуль Load собирает статистику о загрузке системы." + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "Модуль Memory собирает статистику об использовании памяти." + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"Модуль Netlink собирает расширенную статистику с выбранных интерфейсов." + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"Модуль Network предоставляет возможность сетевого обмена данными между " +"разными сервисами collectd. Collectd может работать в режиме сервера или " +"клиента. В режиме клиента, локальная статистика передается collectd-серверу, " +"в режиме сервера collectd собирает статистику с удалённых хостов." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"Модуль Ping посылает ICMP-запросы выбранным хостам и измеряет время отклика." + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"Модуль Processes собирает статистику для выбранных процессов об " +"использовании ЦП, ошибках обращения к страницам памяти, использовании памяти." + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"Модуль Rrdtool сохраняет статистику в формате rrd для последующего " +"построения диаграмм.

Внимание: установка неверных " +"параметров может привезти к высокому потреблению памяти во временной " +"директории. Это, в свою очередь, может привести к отказу устройства!" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"Модуль TCPConns собирает информацию об открытых TCP-соединениях на выбранных " +"портах." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"Модуль UnixSock создает Unix-сокет, который может быть использован для " +"получения статистики от работающего сервиса collectd." + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"Эта секция определяет интерфейсы, на которых collectd будет обрабатывать " +"входящие соединения." + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" +"Эта секция определяет серверы, на которые будет передаваться локальная " +"статистика." + +msgid "Try to lookup fully qualified hostname" +msgstr "Пытаться определять имя хоста" + +msgid "UPS" +msgstr "ИБП" + +msgid "UPS Plugin Configuration" +msgstr "Настройка плагина ИБП" + +#, fuzzy +msgid "UPS name in NUT ups@host format" +msgstr "Имя ИБП в ups@host NUT-формате" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Конфигурация модуля UnixSock" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Используемый PID-файл" + +msgid "User" +msgstr "Пользователь" + +msgid "Verbose monitoring" +msgstr "Расширенная статистика" + +msgid "Wireless" +msgstr "Wireless" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "Конфигурация модуля Iwinfo" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "напр. br-ff" + +msgid "e.g. br-lan" +msgstr "напр. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "напр. reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "не более 16 символов" + +msgid "reduces rrd size" +msgstr "уменьшает размер rrd" + +#, fuzzy +msgid "seconds; multiple separated by space" +msgstr "секунды; разделяются пробелом" + +msgid "server interfaces" +msgstr "интерфейсы сервера" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Системные модули" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "Данная статистика основана на программе Collectd и использует RRD Tool для построения диаграмм." + +#~ msgid "Installed network plugins:" +#~ msgstr "Установленные сетевые модули:" + +#~ msgid "Installed output plugins:" +#~ msgstr "Установленные модули вывода:" + +#~ msgid "" +#~ "Network plugins are used to collect information about open tcp " +#~ "connections, interface traffic, iptables rules etc." +#~ msgstr "" +#~ "Сетевые модули используются для сбора информации об открытых TCP-" +#~ "соединениях, трафике, правилах iptables и т.п." + +#~ msgid "" +#~ "Output plugins provide different possibilities to store collected data. " +#~ "It is possible to enable multiple plugin at one, for example to store " +#~ "collected data in rrd databases and to transmit the data over the network " +#~ "to other collectd instances." +#~ msgstr "" +#~ "Модули вывода обеспечивают различные варианты сохранения собранных " +#~ "данных. Можно включить несколько модулей, например, чтобы сохранить " +#~ "собранные данные в базе данных RRD и передать их по сети другим " +#~ "инстанциям collectd." + +#~ msgid "" +#~ "System plugins collecting values about system state and ressource usage " +#~ "on the device.:" +#~ msgstr "" +#~ "Системные модули, собирающие данные о состоянии системы и использовании " +#~ "ресурсов устройства:" + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "Модуль Wireless собирает статистику о силе, шуме и качестве сигнала." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Конфигурация модуля Wireless" diff --git a/feeds/luci/applications/luci-app-statistics/po/sk/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/sk/rrdtool.po new file mode 100644 index 0000000..fd3781f --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/sk/rrdtool.po @@ -0,0 +1,356 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Content-Type: text/plain; charset=ASCII\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/sk/statistics.po b/feeds/luci/applications/luci-app-statistics/po/sk/statistics.po new file mode 100644 index 0000000..6b0caa6 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/sk/statistics.po @@ -0,0 +1,707 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Action (target)" +msgstr "" + +msgid "Add command for reading values" +msgstr "" + +msgid "Add matching rule" +msgstr "" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "" + +msgid "Basic monitoring" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "" + +msgid "CSV Output" +msgstr "" + +msgid "CSV Plugin Configuration" +msgstr "" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS Plugin Configuration" +msgstr "" + +msgid "Data collection interval" +msgstr "" + +msgid "Datasets definition file" +msgstr "" + +msgid "Destination ip range" +msgstr "" + +msgid "Directory for collectd plugins" +msgstr "" + +msgid "Directory for sub-configurations" +msgstr "" + +msgid "Disk Plugin Configuration" +msgstr "" + +msgid "Disk Space Usage" +msgstr "" + +msgid "Disk Usage" +msgstr "" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "" + +msgid "E-Mail Plugin Configuration" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "" + +msgid "Exec Plugin Configuration" +msgstr "" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "" + +msgid "Ignore source addresses" +msgstr "" + +msgid "Incoming interface" +msgstr "" + +msgid "Interface Plugin Configuration" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interrupts" +msgstr "" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "" + +msgid "Monitor disks and partitions" +msgstr "" + +msgid "Monitor filesystem types" +msgstr "" + +msgid "Monitor hosts" +msgstr "" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "" + +msgid "Monitor local ports" +msgstr "" + +msgid "Monitor mount points" +msgstr "" + +msgid "Monitor processes" +msgstr "" + +msgid "Monitor remote ports" +msgstr "" + +msgid "Name of the rule" +msgstr "" + +msgid "Netlink" +msgstr "" + +msgid "Netlink Plugin Configuration" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Plugin Configuration" +msgstr "" + +msgid "Network plugins" +msgstr "" + +msgid "Network protocol" +msgstr "" + +msgid "Number of threads for data collection" +msgstr "" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Outgoing interface" +msgstr "" + +msgid "Output plugins" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Ping Plugin Configuration" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Processes Plugin Configuration" +msgstr "" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Qdisc monitoring" +msgstr "" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "" + +msgid "RRDTool Plugin Configuration" +msgstr "" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "" + +msgid "Storage directory for the csv files" +msgstr "" + +msgid "Store data values as rates instead of absolute values" +msgstr "" + +msgid "Stored timespans" +msgstr "" + +msgid "System Load" +msgstr "" + +msgid "TCP Connections" +msgstr "" + +msgid "TCPConns Plugin Configuration" +msgstr "" + +msgid "TTL for network packets" +msgstr "" + +msgid "TTL for ping packets" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "" + +msgid "Unixsock Plugin Configuration" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "" + +msgid "e.g. br-lan" +msgstr "" + +msgid "e.g. reject-with tcp-reset" +msgstr "" + +msgid "max. 16 chars" +msgstr "" + +msgid "reduces rrd size" +msgstr "" + +msgid "seconds; multiple separated by space" +msgstr "" + +msgid "server interfaces" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/sv/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/sv/rrdtool.po new file mode 100644 index 0000000..580c9f3 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/sv/rrdtool.po @@ -0,0 +1,357 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Content-Type: text/plain; charset=ASCII\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/sv/statistics.po b/feeds/luci/applications/luci-app-statistics/po/sv/statistics.po new file mode 100644 index 0000000..035d940 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/sv/statistics.po @@ -0,0 +1,714 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Action (target)" +msgstr "" + +msgid "Add command for reading values" +msgstr "Lägg till kommando för läsning av värden" + +msgid "Add matching rule" +msgstr "Lägg till en matchande regel" + +msgid "Add multiple hosts separated by space." +msgstr "Lägg till flertalet värdar separerade av mellanslag." + +msgid "Add notification command" +msgstr "Lägg till aviseringskommando" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Basmapp" + +msgid "Basic monitoring" +msgstr "Standardövervakning" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "" + +msgid "CSV Output" +msgstr "CSV-utmatning" + +msgid "CSV Plugin Configuration" +msgstr "" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "Kedja" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "Inställningar för Collectd" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd är en liten demon för insamling av data från olika källor via olika " +"insticksprogam. På den här sidan så kan du ändra generella inställningar för " +"collectd-demonen." + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet DF" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet DNS" + +msgid "Data collection interval" +msgstr "Intervall för insamling av data" + +msgid "Datasets definition file" +msgstr "" + +msgid "Destination ip range" +msgstr "" + +msgid "Directory for collectd plugins" +msgstr "Mapp för collectd's insticksprogram" + +msgid "Directory for sub-configurations" +msgstr "Mapp för under-konfigurationer" + +msgid "Disk Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet Disk" + +msgid "Disk Space Usage" +msgstr "Användning av diskutrymme" + +msgid "Disk Usage" +msgstr "Användning av disk" + +msgid "Display Host »" +msgstr "Visa värd »" + +msgid "Display timespan »" +msgstr "Visa tidsspann »" + +msgid "E-Mail Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet E-post" + +msgid "Email" +msgstr "E-post" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Aktivera det här insticksprogrammet" + +msgid "Entropy" +msgstr "Entropi" + +msgid "Entropy Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet Entropi" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet Exec" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "Brandvägg" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "Vidarebefordring mellan lyssning och server-adressen" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "Generall insticksprogram" + +msgid "Generate a separate graph for each logged user" +msgstr "Generera en separat graf för varje loggade användare" + +msgid "Graphs" +msgstr "Grafer" + +msgid "Group" +msgstr "Grupp" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" +"Håll ner Ctrl för att välja flera poster eller för att inte välja poster." + +msgid "Host" +msgstr "Värd" + +msgid "Hostname" +msgstr "Värdnamn" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet IRQ" + +msgid "Ignore source addresses" +msgstr "Ignorera källadresser" + +msgid "Incoming interface" +msgstr "Inkommande gränssnitt" + +msgid "Interface Plugin Configuration" +msgstr "Konfiguration av insticksprogrammets gränssnitt" + +msgid "Interfaces" +msgstr "Gränssnitt" + +msgid "Interrupts" +msgstr "Avbrott" + +msgid "Interval for pings" +msgstr "Intervaller för pingningar" + +msgid "Iptables Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet Iptabels" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "Värd för lyssning" + +msgid "Listen port" +msgstr "Lyssningsport" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet Load" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Maximalt tillåtna anslutningar" + +msgid "Memory" +msgstr "Minne" + +msgid "Memory Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet Memory" + +msgid "Monitor all except specified" +msgstr "Övervaka alla förutom specificerat" + +msgid "Monitor all local listen ports" +msgstr "Övervaka alla lokala lyssningsportar" + +msgid "Monitor all sensors" +msgstr "Övervaka alla sensorer" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Övervaka enheter" + +msgid "Monitor disks and partitions" +msgstr "Övervaka hårddiskar och partitioner" + +msgid "Monitor filesystem types" +msgstr "Övervaka filsystemtyper" + +msgid "Monitor hosts" +msgstr "Övervaka värdar" + +msgid "Monitor interfaces" +msgstr "Övervaka gränssnitt" + +msgid "Monitor interrupts" +msgstr "Övervaka avbrott" + +msgid "Monitor local ports" +msgstr "Övervaka lokala portar" + +msgid "Monitor mount points" +msgstr "Övervaka monteringspunkter" + +msgid "Monitor processes" +msgstr "Övervaka processer" + +msgid "Monitor remote ports" +msgstr "Övervaka fjärrportar" + +msgid "Name of the rule" +msgstr "Regelns namn" + +msgid "Netlink" +msgstr "Nätlänk" + +msgid "Netlink Plugin Configuration" +msgstr "" + +msgid "Network" +msgstr "Nätverk" + +msgid "Network Plugin Configuration" +msgstr "" + +msgid "Network plugins" +msgstr "Insticksprogram för nätverket" + +msgid "Network protocol" +msgstr "Nätverksprotokoll" + +msgid "Number of threads for data collection" +msgstr "Antalet trådar för insamling av data" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "OpenVPN" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "Statusfiler för OpenVPN" + +msgid "Options" +msgstr "Alternativ" + +msgid "Outgoing interface" +msgstr "Utgående gränssnitt" + +msgid "Output plugins" +msgstr "Insticksprogram för utmatning" + +msgid "Ping" +msgstr "Pinga" + +msgid "Ping Plugin Configuration" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Processes" +msgstr "Processer" + +msgid "Processes Plugin Configuration" +msgstr "" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "Processor" + +msgid "Qdisc monitoring" +msgstr "Övervakning av Qdisc" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "" + +msgid "Rows per RRA" +msgstr "Rader per RRA" + +msgid "Script" +msgstr "Skript" + +msgid "Seconds" +msgstr "Sekunder" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "Sensorer" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Värd-server" + +msgid "Server port" +msgstr "Server-port" + +msgid "Setup" +msgstr "Installera" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "Socketfil" + +msgid "Socket group" +msgstr "Socketgrupp" + +msgid "Socket permissions" +msgstr "Tillstånd för socket" + +msgid "Source ip range" +msgstr "" + +msgid "Specifies what information to collect about links." +msgstr "Anger vilken information som ska samlas in om länkar." + +msgid "Specifies what information to collect about routes." +msgstr "Anger vilken information som ska samlas in om rutter" + +msgid "Specifies what information to collect about the global topology." +msgstr "Anger vilken information som ska samlas in om den globala topologin." + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "Statistik" + +msgid "Storage directory" +msgstr "Lagringsmapp" + +msgid "Storage directory for the csv files" +msgstr "Lagringsmapp för csv-filerna" + +msgid "Store data values as rates instead of absolute values" +msgstr "" + +msgid "Stored timespans" +msgstr "Lagrade tidsspann" + +msgid "System Load" +msgstr "Belastning av systemet" + +msgid "TCP Connections" +msgstr "TCP-anslutningar" + +msgid "TCPConns Plugin Configuration" +msgstr "" + +msgid "TTL for network packets" +msgstr "TTL för nätverkspaket" + +msgid "TTL for ping packets" +msgstr "TTL för ping-paket" + +msgid "Table" +msgstr "Tabell" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" + +msgid "Try to lookup fully qualified hostname" +msgstr "Försök att kolla upp fullständigt kvalificerade värdnamn" + +msgid "UPS" +msgstr "UPS" + +msgid "UPS Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet UPS" + +msgid "UPS name in NUT ups@host format" +msgstr "UPS-namnet i NUT ups@värd-format" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet UnixSock" + +msgid "Uptime" +msgstr "Upptid" + +msgid "Uptime Plugin Configuration" +msgstr "Konfiguration av insticksprogrammet Upptid" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Använd PID-fil" + +msgid "User" +msgstr "Användare" + +msgid "Verbose monitoring" +msgstr "Detaljerad övervakning" + +msgid "Wireless" +msgstr "Trådlöst" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" +"Du kan installera ytterligare collectd-mod* insticksprogram för att aktivera " +"mer statistik." + +msgid "e.g. br-ff" +msgstr "t.ex br-ff" + +msgid "e.g. br-lan" +msgstr "t.ex br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "t.ex reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "maxmialt 16 tecken" + +msgid "reduces rrd size" +msgstr "reducerar storlek på rrd" + +msgid "seconds; multiple separated by space" +msgstr "sekunder; flertalet åtskillda med mellanrum" + +msgid "server interfaces" +msgstr "gränssnitt för servern" diff --git a/feeds/luci/applications/luci-app-statistics/po/templates/rrdtool.pot b/feeds/luci/applications/luci-app-statistics/po/templates/rrdtool.pot new file mode 100644 index 0000000..0a105ec --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/templates/rrdtool.pot @@ -0,0 +1,349 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "Content-Type: text/plain; charset=ISO-8859-1" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/templates/statistics.pot b/feeds/luci/applications/luci-app-statistics/po/templates/statistics.pot new file mode 100644 index 0000000..8f6fecc --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/templates/statistics.pot @@ -0,0 +1,700 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Action (target)" +msgstr "" + +msgid "Add command for reading values" +msgstr "" + +msgid "Add matching rule" +msgstr "" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "" + +msgid "Basic monitoring" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "" + +msgid "CSV Output" +msgstr "" + +msgid "CSV Plugin Configuration" +msgstr "" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS Plugin Configuration" +msgstr "" + +msgid "Data collection interval" +msgstr "" + +msgid "Datasets definition file" +msgstr "" + +msgid "Destination ip range" +msgstr "" + +msgid "Directory for collectd plugins" +msgstr "" + +msgid "Directory for sub-configurations" +msgstr "" + +msgid "Disk Plugin Configuration" +msgstr "" + +msgid "Disk Space Usage" +msgstr "" + +msgid "Disk Usage" +msgstr "" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "" + +msgid "E-Mail Plugin Configuration" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "" + +msgid "Exec Plugin Configuration" +msgstr "" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "" + +msgid "Ignore source addresses" +msgstr "" + +msgid "Incoming interface" +msgstr "" + +msgid "Interface Plugin Configuration" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interrupts" +msgstr "" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "" + +msgid "Monitor disks and partitions" +msgstr "" + +msgid "Monitor filesystem types" +msgstr "" + +msgid "Monitor hosts" +msgstr "" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "" + +msgid "Monitor local ports" +msgstr "" + +msgid "Monitor mount points" +msgstr "" + +msgid "Monitor processes" +msgstr "" + +msgid "Monitor remote ports" +msgstr "" + +msgid "Name of the rule" +msgstr "" + +msgid "Netlink" +msgstr "" + +msgid "Netlink Plugin Configuration" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Plugin Configuration" +msgstr "" + +msgid "Network plugins" +msgstr "" + +msgid "Network protocol" +msgstr "" + +msgid "Number of threads for data collection" +msgstr "" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Outgoing interface" +msgstr "" + +msgid "Output plugins" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Ping Plugin Configuration" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Processes Plugin Configuration" +msgstr "" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Qdisc monitoring" +msgstr "" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "" + +msgid "RRDTool Plugin Configuration" +msgstr "" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "" + +msgid "Storage directory for the csv files" +msgstr "" + +msgid "Store data values as rates instead of absolute values" +msgstr "" + +msgid "Stored timespans" +msgstr "" + +msgid "System Load" +msgstr "" + +msgid "TCP Connections" +msgstr "" + +msgid "TCPConns Plugin Configuration" +msgstr "" + +msgid "TTL for network packets" +msgstr "" + +msgid "TTL for ping packets" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "" + +msgid "Unixsock Plugin Configuration" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "" + +msgid "e.g. br-lan" +msgstr "" + +msgid "e.g. reject-with tcp-reset" +msgstr "" + +msgid "max. 16 chars" +msgstr "" + +msgid "reduces rrd size" +msgstr "" + +msgid "seconds; multiple separated by space" +msgstr "" + +msgid "server interfaces" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/tr/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/tr/rrdtool.po new file mode 100644 index 0000000..cb2187b --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/tr/rrdtool.po @@ -0,0 +1,356 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/tr/statistics.po b/feeds/luci/applications/luci-app-statistics/po/tr/statistics.po new file mode 100644 index 0000000..0f0bc45 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/tr/statistics.po @@ -0,0 +1,708 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Action (target)" +msgstr "" + +msgid "Add command for reading values" +msgstr "" + +msgid "Add matching rule" +msgstr "" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "" + +msgid "Basic monitoring" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "" + +msgid "CSV Output" +msgstr "" + +msgid "CSV Plugin Configuration" +msgstr "" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS Plugin Configuration" +msgstr "" + +msgid "Data collection interval" +msgstr "" + +msgid "Datasets definition file" +msgstr "" + +msgid "Destination ip range" +msgstr "" + +msgid "Directory for collectd plugins" +msgstr "" + +msgid "Directory for sub-configurations" +msgstr "" + +msgid "Disk Plugin Configuration" +msgstr "" + +msgid "Disk Space Usage" +msgstr "" + +msgid "Disk Usage" +msgstr "" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "" + +msgid "E-Mail Plugin Configuration" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "" + +msgid "Exec Plugin Configuration" +msgstr "" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "" + +msgid "Ignore source addresses" +msgstr "" + +msgid "Incoming interface" +msgstr "" + +msgid "Interface Plugin Configuration" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interrupts" +msgstr "" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "" + +msgid "Monitor disks and partitions" +msgstr "" + +msgid "Monitor filesystem types" +msgstr "" + +msgid "Monitor hosts" +msgstr "" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "" + +msgid "Monitor local ports" +msgstr "" + +msgid "Monitor mount points" +msgstr "" + +msgid "Monitor processes" +msgstr "" + +msgid "Monitor remote ports" +msgstr "" + +msgid "Name of the rule" +msgstr "" + +msgid "Netlink" +msgstr "" + +msgid "Netlink Plugin Configuration" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Plugin Configuration" +msgstr "" + +msgid "Network plugins" +msgstr "" + +msgid "Network protocol" +msgstr "" + +msgid "Number of threads for data collection" +msgstr "" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Outgoing interface" +msgstr "" + +msgid "Output plugins" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Ping Plugin Configuration" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Processes Plugin Configuration" +msgstr "" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Qdisc monitoring" +msgstr "" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "" + +msgid "RRDTool Plugin Configuration" +msgstr "" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "" + +msgid "Storage directory for the csv files" +msgstr "" + +msgid "Store data values as rates instead of absolute values" +msgstr "" + +msgid "Stored timespans" +msgstr "" + +msgid "System Load" +msgstr "" + +msgid "TCP Connections" +msgstr "" + +msgid "TCPConns Plugin Configuration" +msgstr "" + +msgid "TTL for network packets" +msgstr "" + +msgid "TTL for ping packets" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "" + +msgid "Unixsock Plugin Configuration" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "" + +msgid "e.g. br-lan" +msgstr "" + +msgid "e.g. reject-with tcp-reset" +msgstr "" + +msgid "max. 16 chars" +msgstr "" + +msgid "reduces rrd size" +msgstr "" + +msgid "seconds; multiple separated by space" +msgstr "" + +msgid "server interfaces" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/uk/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/uk/rrdtool.po new file mode 100644 index 0000000..5a535f1 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/uk/rrdtool.po @@ -0,0 +1,357 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/uk/statistics.po b/feeds/luci/applications/luci-app-statistics/po/uk/statistics.po new file mode 100644 index 0000000..ca82efe --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/uk/statistics.po @@ -0,0 +1,713 @@ +# statistics.pot +# generated from ./applications/luci-statistics/luasrc/i18n/statistics.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-03-12 23:50+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "" + +msgid "Add command for reading values" +msgstr "" + +msgid "Add matching rule" +msgstr "" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "" + +msgid "Basic monitoring" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "" + +msgid "CSV Output" +msgstr "" + +msgid "CSV Plugin Configuration" +msgstr "" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "" + +msgid "Data collection interval" +msgstr "" + +msgid "Datasets definition file" +msgstr "" + +msgid "Destination ip range" +msgstr "" + +msgid "Directory for collectd plugins" +msgstr "" + +msgid "Directory for sub-configurations" +msgstr "" + +msgid "Disk Plugin Configuration" +msgstr "" + +msgid "Disk Space Usage" +msgstr "" + +msgid "Disk Usage" +msgstr "" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "" + +msgid "E-Mail Plugin Configuration" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "" + +msgid "Exec Plugin Configuration" +msgstr "" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "" + +msgid "Ignore source addresses" +msgstr "" + +msgid "Incoming interface" +msgstr "" + +msgid "Interface Plugin Configuration" +msgstr "" + +msgid "Interfaces" +msgstr "Інтерфейси" + +msgid "Interrupts" +msgstr "" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "" + +msgid "Monitor disks and partitions" +msgstr "" + +msgid "Monitor filesystem types" +msgstr "" + +msgid "Monitor hosts" +msgstr "" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "" + +msgid "Monitor local ports" +msgstr "" + +msgid "Monitor mount points" +msgstr "" + +msgid "Monitor processes" +msgstr "" + +msgid "Monitor remote ports" +msgstr "" + +msgid "Name of the rule" +msgstr "" + +msgid "Netlink" +msgstr "" + +msgid "Netlink Plugin Configuration" +msgstr "" + +msgid "Network" +msgstr "Мережа" + +msgid "Network Plugin Configuration" +msgstr "" + +msgid "Network plugins" +msgstr "" + +msgid "Network protocol" +msgstr "Мережевий протокол" + +msgid "Number of threads for data collection" +msgstr "" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Outgoing interface" +msgstr "" + +msgid "Output plugins" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Ping Plugin Configuration" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Processes Plugin Configuration" +msgstr "" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Qdisc monitoring" +msgstr "" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "" + +msgid "RRDTool Plugin Configuration" +msgstr "" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "" + +msgid "Storage directory for the csv files" +msgstr "" + +msgid "Store data values as rates instead of absolute values" +msgstr "" + +msgid "Stored timespans" +msgstr "" + +msgid "System Load" +msgstr "" + +msgid "TCP Connections" +msgstr "" + +msgid "TCPConns Plugin Configuration" +msgstr "" + +msgid "TTL for network packets" +msgstr "" + +msgid "TTL for ping packets" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "" + +msgid "Unixsock Plugin Configuration" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "" + +msgid "User" +msgstr "Користувач" + +msgid "Verbose monitoring" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "" + +msgid "e.g. br-lan" +msgstr "" + +msgid "e.g. reject-with tcp-reset" +msgstr "" + +msgid "max. 16 chars" +msgstr "" + +msgid "reduces rrd size" +msgstr "" + +msgid "seconds; multiple separated by space" +msgstr "" + +msgid "server interfaces" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/vi/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/vi/rrdtool.po new file mode 100644 index 0000000..ca94cf8 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/vi/rrdtool.po @@ -0,0 +1,524 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:59+0200\n" +"PO-Revision-Date: 2009-08-13 14:45+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" + +#~ msgid "%H: Wireless - Signal Noise Ratio" +#~ msgstr "%H: Wireless - Signal Noise Ratio" + +#~ msgid "dBm" +#~ msgstr "dBm" + +#~ msgid "Noise Level" +#~ msgstr "Noise Level" + +#~ msgid "Signal Strength" +#~ msgstr "Độ mạnh của tín hiệu" + +#~ msgid "%H: Wireless - Signal Quality" +#~ msgstr "%H: Wireless -Chất lượng tín hiệu" + +#~ msgid "n" +#~ msgstr "n" + +#~ msgid "Signal Quality" +#~ msgstr "Chất lượng tín hiệu " + +#~ msgid "%H: ICMP Roundtrip Times" +#~ msgstr "%H: ICMP thời gian đi một vòng" + +#~ msgid "ms" +#~ msgstr "ms" + +#~ msgid "%H: Firewall - Processed Packets" +#~ msgstr "%H: Firewall - Gói đã xử lý" + +#~ msgid "Chain \"%di\"" +#~ msgstr "Chuỗi \"%di\"" + +#~ msgid "%H: Netlink - Transfer on %pi" +#~ msgstr "%H: Netlink - chuyển về %pi" + +#~ msgid "Bytes (%ds)" +#~ msgstr "Bytes (%ds)" + +#~ msgid "%H: Netlink - Packets on %pi" +#~ msgstr "%H: Netlink - Đóng gói trên %pi" + +#~ msgid "Processed (%ds)" +#~ msgstr "Đã xử lý (%ds)" + +#~ msgid "Dropped (%ds)" +#~ msgstr "" +#~ "Dropped \n" +#~ " \n" +#~ " \n" +#~ "(%ds)" + +#~ msgid "Errors (%ds)" +#~ msgstr "" +#~ "Lỗi \n" +#~ " \n" +#~ " \n" +#~ " \n" +#~ "(%ds)" + +#~ msgid "%H: Netlink - Multicast on %pi" +#~ msgstr "%H: Netlink - Multicast on %pi" + +#~ msgid "Packets" +#~ msgstr "Gói" + +#~ msgid "%H: Netlink - Collisions on %pi" +#~ msgstr "%H: Netlink - Collisions on %pi" + +#~ msgid "Collisions/s" +#~ msgstr "Collisions/s" + +#~ msgid "Collisions" +#~ msgstr "Collisions" + +#~ msgid "%H: Netlink - Errors on %pi" +#~ msgstr "%H: Netlink - lỗi trên %pi" + +#~ msgid "Errors/s" +#~ msgstr "Lỗi" + +#~ msgid "%H: Processes" +#~ msgstr "%H: Quá trình" + +#~ msgid "Processes/s" +#~ msgstr "Quy trình" + +#~ msgid "%H: Process %pi - used cpu time" +#~ msgstr "%H: Quá trình %pi - thời gian cpu đã sử dụng" + +#~ msgid "Jiffies" +#~ msgstr "Jiffies" + +#~ msgid "System" +#~ msgstr "Hệ thống" + +#~ msgid "user" +#~ msgstr "Người dùng" + +#~ msgid "%H: Process %pi - threads and processes" +#~ msgstr "%H: quá trình %pi - các luồng và quá trình" + +#~ msgid "Count" +#~ msgstr "Đếm" + +#~ msgid "%H: Process %pi - page faults" +#~ msgstr "%H: quá trình %pi - lỗi trang" + +#~ msgid "Pagefaults" +#~ msgstr "Pagefaults" + +#~ msgid "page faults" +#~ msgstr "page faults" + +#~ msgid "%H: Process %pi - virtual memory size" +#~ msgstr "%H: quá trình %pi - dung lượng bộ nhớ ảo " + +#~ msgid "virtual memory" +#~ msgstr "Bộ nhớ ảo" + +#~ msgid "%H: Usage on Processor #%pi" +#~ msgstr "%H: sử dụng trên bộ xử lý #%pi" + +#~ msgid "%" +#~ msgstr "%" + +#~ msgid "%H: Transfer on %di" +#~ msgstr "%H: Chuyển tải trên %di" + +#~ msgid "%H: Packets on %di" +#~ msgstr "%H: Gói trên %di" + +#~ msgid "%H: TCP-Connections to Port %pi" +#~ msgstr "%H: TCP-kết nối tới cổng %pi" + +#~ msgid "Connections/s" +#~ msgstr "Kết nối" + +#~ msgid "%H: Disk Space Usage on %di" +#~ msgstr "%H: sử dụng không gian trên đĩa ở %di" + +#~ msgid "%H: Interrupts" +#~ msgstr "%H: Cắt ngang" + +#~ msgid "Issues/s" +#~ msgstr "Vấn đề" + +#~ msgid "IRQ %di" +#~ msgstr "IRQ %di" + +#~ msgid "%H: System Load" +#~ msgstr "%H: Tải hệ thống" + +#~ msgid "Load" +#~ msgstr "Tải" + +#~ msgid "1 min" +#~ msgstr "1 phút" + +#~ msgid "5 min" +#~ msgstr "5 phút" + +#~ msgid "15 min" +#~ msgstr "15 phút" diff --git a/feeds/luci/applications/luci-app-statistics/po/vi/statistics.po b/feeds/luci/applications/luci-app-statistics/po/vi/statistics.po new file mode 100644 index 0000000..f6d54bc --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/vi/statistics.po @@ -0,0 +1,791 @@ +# statistics.pot +# generated from ./applications/luci-statistics/luasrc/i18n/statistics.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:58+0200\n" +"PO-Revision-Date: 2009-08-16 05:50+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "Action (target)" +msgstr "Action (target)" + +msgid "Add command for reading values" +msgstr "Thêm lệnh cho giá trị đang đọc" + +msgid "Add matching rule" +msgstr "Thêm matching rule" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "Thêm lệnh thông báo" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "Thư mục Cơ sở" + +msgid "Basic monitoring" +msgstr "Monitoring căn bản" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "Cấu hình Plugin CPU" + +msgid "CSV Output" +msgstr "CSV Output" + +msgid "CSV Plugin Configuration" +msgstr "Cấu hình CSV plugin" + +msgid "Cache collected data for" +msgstr "Cache collected data cho" + +msgid "Cache flush interval" +msgstr "Cache flush interval" + +msgid "Chain" +msgstr "Chain" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "Những cài đặt collectd" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd là một daemon nhỏ để thu thập dữ liệu từ nhiều nguồn thông qua các " +"plugins khác nhau. Trên trang này, bạn có thể thay đổi cài đặt tổng quát cho " +"cai collectd daemon. " + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "Cấu hình DF plugin" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "Cấu hình DNS plugin" + +msgid "Data collection interval" +msgstr "Khoảng thu thập dữ liệu" + +msgid "Datasets definition file" +msgstr "Tập tin định nghĩa cơ sở dữ liệu" + +msgid "Destination ip range" +msgstr "Điểm đến ip range" + +msgid "Directory for collectd plugins" +msgstr "Danh mục cho collectd plugins" + +msgid "Directory for sub-configurations" +msgstr "Danh mục cho sub-configurations" + +msgid "Disk Plugin Configuration" +msgstr "Cấu hình disk plugin" + +msgid "Disk Space Usage" +msgstr "Khoảng trống trên đĩa" + +msgid "Disk Usage" +msgstr "Disk Usage" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "Display timespan" + +msgid "E-Mail Plugin Configuration" +msgstr "Cấu hình e-mail plugin" + +msgid "Email" +msgstr "Email" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "Kích hoạt plugin này" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Cấu hình Exec Plugin" + +msgid "Filter class monitoring" +msgstr "Filter class monitoring" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Flush cache after" +msgstr "Flush cache sau khi" + +msgid "Forwarding between listen and server addresses" +msgstr "chuyển tiếp giữa listen và địa chỉ server" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "Graphs" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"Ở đây bạn có thể định nghĩa các lệnh bên ngoài mà sẽ khởi động bằng collectd " +"để đọc những giá trị nhất định. Những giá trị sẽ được đọc từ stdout" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"Ở đây bạn có thể định nghĩa các lệnh bên ngoài cái mà bắt đầu bằng collectd " +"khi những giá trị threshold nhất định được tiếp cận. Những giá trị dẫn tới " +"invokation sẽ được feed tới một chương trình gọi là stdin" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" +"Ở đây bạn có thể định nghĩa những tiêu chuẩn khác nhau để monitor iptables " +"rules được chọn." + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "Tên host" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "Cấu hình IRQ Plugin " + +msgid "Ignore source addresses" +msgstr "Lờ đi những địa chỉ nguồn" + +msgid "Incoming interface" +msgstr "Giao diện đang tới" + +msgid "Interface Plugin Configuration" +msgstr "Cấu hình giao diện plugin" + +msgid "Interfaces" +msgstr "Giao diện" + +msgid "Interrupts" +msgstr "Cắt ngang" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "cấu hình Iptables Plugin " + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "Listen host" + +msgid "Listen port" +msgstr "Listen port" + +msgid "Listener interfaces" +msgstr "Giao diện listener" + +msgid "Load Plugin Configuration" +msgstr "Tải cấu hình plugin" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "Tối đã kết nối cho phép" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "Monitor tất cả local listen port" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "Monitor devices" + +msgid "Monitor disks and partitions" +msgstr "Kiểm soát đĩa và phân vùng" + +msgid "Monitor filesystem types" +msgstr "Kiểm soát loại filesystem" + +msgid "Monitor hosts" +msgstr "Monitor hosts" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "Monitor interrupts" + +msgid "Monitor local ports" +msgstr "Monitor cổng địa phương" + +msgid "Monitor mount points" +msgstr "Monitor mount points" + +msgid "Monitor processes" +msgstr "Monitor processes" + +msgid "Monitor remote ports" +msgstr "Monitor remote ports" + +msgid "Name of the rule" +msgstr "Tên của rule" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "Cấu hình Netlink Plugin " + +msgid "Network" +msgstr "Network" + +msgid "Network Plugin Configuration" +msgstr "Cấu hình network plugin" + +msgid "Network plugins" +msgstr "Network plugins" + +msgid "Network protocol" +msgstr "Network protocol" + +msgid "Number of threads for data collection" +msgstr "Số lượng các chủ đề để thu thập dữ liệu" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "Chỉ tạo trung bình RRAs" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "Tùy chọn" + +msgid "Outgoing interface" +msgstr "Giao diện ra ngoài" + +msgid "Output plugins" +msgstr "Output plugins" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Cấu hình Ping plugin" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "Quá trình xử lý" + +msgid "Processes Plugin Configuration" +msgstr "Cấu hình processes plugin" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "Bộ xử lý" + +msgid "Qdisc monitoring" +msgstr "Qdisc monitoring" + +msgid "RRD XFiles Factor" +msgstr "Yếu tố RRD XFiles" + +msgid "RRD heart beat interval" +msgstr "RRD heart beat interval" + +msgid "RRD step interval" +msgstr "RRD step interval" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "Cấu hình RRDTool Plugin " + +msgid "Rows per RRA" +msgstr "Rows per RRA" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "Giây" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "Server host" + +msgid "Server port" +msgstr "Server port" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "Shaping class monitoring" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "Nguồn ip range" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "Thư mục lưu trữ" + +msgid "Storage directory for the csv files" +msgstr "Thư mục lưu trữ cho nhưng tập tin csv" + +msgid "Store data values as rates instead of absolute values" +msgstr "Những giá trị dữ liệu lưu trữ như một tỉ lệ thay vì giá trị tuyệt đối" + +msgid "Stored timespans" +msgstr "Lưu timspans" + +msgid "System Load" +msgstr "System Load" + +msgid "TCP Connections" +msgstr "Kết nối TCP" + +msgid "TCPConns Plugin Configuration" +msgstr "Cấu hình TCPConns Plugin " + +msgid "TTL for network packets" +msgstr "TTL cho gói mạng" + +msgid "TTL for ping packets" +msgstr "TTl cho gói ping" + +msgid "Table" +msgstr "Table" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "CPU plugin thu thập số liệu thống kê cơ bản về sử dụng bộ việc xử lý" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" +"CSV plugin stores thu thập dữ liệu trong tập tin định dạng csv để tiến hành " +"xử lý bằng các chương trình bên ngoài." + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" +"df plugin thu thập số liệu thông kế về khoảng trống trên đĩa trên những " +"thiết bị khác, mount points hoặc những loại filesystem." + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" +"Disk plugin thu thập số liệu thống kê chi tiết về cách sử dụng cho những " +"phân vùng lựa chọn hoặc toàn bộ đĩa." + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" +" dns plugin thu thập những thông kê chi tiết về dns liên quan đến lưu thông " +"trên những giao diện được chọn. " + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"Email plugin tạo ra một unix socket mà có thể dùng để truyền thông kê e-mail " +"tới một collectd daemon đang chạy. Cái plugin này chủ yếu được dùng với " +"Mail::SpamAssasin::Plugin::Collectd nhưng cũng có thể dùng trong những cách " +"khác." + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"Exec plugin bắt đầu những lệnh bên ngoài để đọc những giá trị từ hoặc tới " +"những quá trình xử lý thông báo bên ngoài khi giá trị của một threshold nhất " +"định được tiếp cận " + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" +"Giao diện plugin thu thập những thống kê lưu thông trên những giao diện được " +"chọn" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" +"iptables plugin sẽ monitor những cái firewall rules được chọn và thu thập " +"thông tin về bytes xử lý và gói trên rule. " + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"irq plugin sẽ monitor tỉ lệ vấn đề trên giây cho những interrupt được chọn. " +"Nếu không có interrupt được chọn thi tất cả các interrupt sẽ được monitor. " +"for each selected interrupt. If no interrupt is selected then all interrupts " +"are monitored." + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "Plugin tải thu thập thông kê về tổng quát system load" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" +"Netlink plugin thu thập những thông tin mở rộng như qdisc-, class- and " +"filter-statistics cho những giao diện được chọn" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"Network plugin cung cấp network dựa trên giao tiếp giữa những collectd " +"instances khác nhau. Collectd có thể vận hành trên cả 2 chế độ client và " +"server. Trong kiểu chế độ client tập hợp ngày tháng địa phương được chuyển " +"tới một collectd server instance, trong chế độ server, instance địa phương " +"nhận dữ liệu từ những host khác." + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" +"ping plugin sẽ gửi icmp echo trả lời tới những host được chọn và đo thời " +"gian vận hành qua lại cho từng host" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" +"Processes plugin thu thập thông tin như cpu time, page faults và memory " +"usage của từng processes được chọn. " + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"The rrdtool plugin lưu những dữ liệu thu thập trong rrd database files, cơ " +"sở của biểu đồ.

Cảnh báo: Đặt sai giá trị sẽ tiêu hao bộ " +"nhớ rất nhiều trong một thư mục tạm thời. Điều này có thể làm thiết bị không " +"sử dụng được" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" +"Tcpconns plugin thu thập thông tin về open tcp kết nối trên những cổng được " +"chọn." + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" +"Unixsock plugin tạo một unix socket mà có thể dùng để đọc dữ liệu thu thập " +"từ một collectd instance đang vận hành. " + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" +"Section này định nghĩa trên giao diện collectd sẽ đợi những kết nối đang tới" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "Section này định nghĩa servers thu thập dữ liệu địa phương để gửi đi" + +msgid "Try to lookup fully qualified hostname" +msgstr "Thử tra cứu những tên host đủ điều kiện" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Cấu hình Unixsock Plugin " + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "Tập tin PID đã sử dụng" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "Verbose monitoring" + +msgid "Wireless" +msgstr "Mạng không dây" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "e.g. br-ff" + +msgid "e.g. br-lan" +msgstr "e.g. br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "e.g. reject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "max. 16 chars" + +msgid "reduces rrd size" +msgstr "Giảm rrd size" + +msgid "seconds; multiple separated by space" +msgstr "giây; nhiều phân tách bởi khoảng trống" + +msgid "server interfaces" +msgstr "giao diện server" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "System plugins" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "Gói thống kê dựa trên Collectd and uses RRD " +#~ "Tool vẽ lại sơ đồ hình ảnh từ dữ liệu thu thập ." + +#~ msgid "" +#~ "The wireless plugin collects statistics about wireless signal strength, " +#~ "noise and quality." +#~ msgstr "" +#~ "Cấu hình wireless plugin thu thập thống kê về độ mạnh của tín hiệu " +#~ "wireless, noise và chất lượng." + +#~ msgid "Wireless Plugin Configuration" +#~ msgstr "Cấu hình Wireless Plugin " diff --git a/feeds/luci/applications/luci-app-statistics/po/zh-cn/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/zh-cn/rrdtool.po new file mode 100644 index 0000000..4e6ee4b --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/zh-cn/rrdtool.po @@ -0,0 +1,359 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-23 02:08+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "无线信号噪音" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "信噪比" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "信号噪音" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "信号强度" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "无线信号质量" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "无线信号质量" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "信号质量" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "ping" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "响应" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "ping" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "iptables包" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/zh-cn/statistics.po b/feeds/luci/applications/luci-app-statistics/po/zh-cn/statistics.po new file mode 100644 index 0000000..0c8775f --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/zh-cn/statistics.po @@ -0,0 +1,748 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-06-13 15:04+0200\n" +"Last-Translator: phantasm131 \n" +"Language-Team: LANGUAGE \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Action (target)" +msgstr "动作(目标)" + +msgid "Add command for reading values" +msgstr "添加命令读取数据" + +msgid "Add matching rule" +msgstr "新增匹配规则" + +msgid "Add multiple hosts separated by space." +msgstr "使用空格分隔多个主机" + +msgid "Add notification command" +msgstr "新增通知命令" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "基本目录" + +msgid "Basic monitoring" +msgstr "基本监控" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "CPU插件配置" + +msgid "CSV Output" +msgstr "CSV输出" + +msgid "CSV Plugin Configuration" +msgstr "CSV插件配置" + +msgid "Cache collected data for" +msgstr "收集缓存数据" + +msgid "Cache flush interval" +msgstr "缓存清空间隙" + +msgid "Chain" +msgstr "链" + +msgid "CollectLinks" +msgstr "收集链接" + +msgid "CollectRoutes" +msgstr "收集路由" + +msgid "CollectTopology" +msgstr "收集拓扑" + +msgid "Collectd Settings" +msgstr "Collectd设置" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" +"Collectd是一个通过不同插件用于收集各种源数据的小型守护程序。在此页面中,您可" +"以更改Collectd守护进程常规设置。" + +msgid "Conntrack" +msgstr "Conntrack" + +msgid "Conntrack Plugin Configuration" +msgstr "Conntrack插件设置" + +msgid "DF Plugin Configuration" +msgstr "DF插件设置" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS Plugin Configuration" +msgstr "DNS插件设置" + +msgid "Data collection interval" +msgstr "数据收集间隙" + +msgid "Datasets definition file" +msgstr "数据集定义文件" + +msgid "Destination ip range" +msgstr "目标IP区间" + +msgid "Directory for collectd plugins" +msgstr "Collectd插件目录" + +msgid "Directory for sub-configurations" +msgstr "子配置目录" + +msgid "Disk Plugin Configuration" +msgstr "Disk插件配置" + +msgid "Disk Space Usage" +msgstr "磁盘空间使用情况" + +msgid "Disk Usage" +msgstr "磁盘使用情况" + +msgid "Display Host »" +msgstr "显示主机" + +msgid "Display timespan »" +msgstr "显示时间段" + +msgid "E-Mail Plugin Configuration" +msgstr "E-Mail插件配置" + +msgid "Email" +msgstr "电子邮件" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "启用该插件" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "Exec" + +msgid "Exec Plugin Configuration" +msgstr "Exec插件配置" + +msgid "Filter class monitoring" +msgstr "Filter类监测" + +msgid "Firewall" +msgstr "防火墙" + +msgid "Flush cache after" +msgstr "清空缓存后" + +msgid "Forwarding between listen and server addresses" +msgstr "转发监听服务器和应用服务器之间数据" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "图表" + +msgid "Group" +msgstr "组" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" +"在这里,你可以定义外部命令,Collectd将启动命令来获取某些值,将获取的值从标准" +"输出端口输出。" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" +"在这里,你可以定义外部命令,当Collectd达到一定阈值时,将启动命令。阀值将会作" +"为命令的标准输入。" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "在这里,你可以定义各种监控iptables规则临界值。" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "主机" + +msgid "Hostname" +msgstr "主机名" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "获取txtinfo输出的IP地址或主机名" + +msgid "IRQ Plugin Configuration" +msgstr "IRQ插件配置" + +msgid "Ignore source addresses" +msgstr "忽略源地址" + +msgid "Incoming interface" +msgstr "入接口" + +msgid "Interface Plugin Configuration" +msgstr "Interface插件配置" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Interrupts" +msgstr "中断" + +msgid "Interval for pings" +msgstr "ping间隙" + +msgid "Iptables Plugin Configuration" +msgstr "Iptables插件配置" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "自动保留对未选中接口的监控。" + +msgid "Listen host" +msgstr "监听主机" + +msgid "Listen port" +msgstr "监听端口" + +msgid "Listener interfaces" +msgstr "监听接口" + +msgid "Load Plugin Configuration" +msgstr "Load插件配置" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "最大允许连接数" + +msgid "Memory" +msgstr "内存" + +msgid "Memory Plugin Configuration" +msgstr "内存插件配置" + +msgid "Monitor all except specified" +msgstr "监测所有(除特别注明外)" + +msgid "Monitor all local listen ports" +msgstr "监测所有本地监听端口" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "监测设备" + +msgid "Monitor disks and partitions" +msgstr "监测磁盘和分区" + +msgid "Monitor filesystem types" +msgstr "监测文件系统类型" + +msgid "Monitor hosts" +msgstr "监测主机" + +msgid "Monitor interfaces" +msgstr "监测接口" + +msgid "Monitor interrupts" +msgstr "监测中断" + +msgid "Monitor local ports" +msgstr "监测本地端口" + +msgid "Monitor mount points" +msgstr "监测挂载点" + +msgid "Monitor processes" +msgstr "监测进程" + +msgid "Monitor remote ports" +msgstr "监测远程端口" + +msgid "Name of the rule" +msgstr "规则名" + +msgid "Netlink" +msgstr "Netlink" + +msgid "Netlink Plugin Configuration" +msgstr "Netlink插件配置" + +msgid "Network" +msgstr "Network" + +msgid "Network Plugin Configuration" +msgstr "Network插件配置" + +msgid "Network plugins" +msgstr "Network插件" + +msgid "Network protocol" +msgstr "Network协议" + +msgid "Number of threads for data collection" +msgstr "收集程序使用线程数" + +msgid "OLSRd" +msgstr "OLSRd" + +msgid "OLSRd Plugin Configuration" +msgstr "OLSRd插件配置" + +msgid "Only create average RRAs" +msgstr "仅创建平均RRAs" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "选项" + +msgid "Outgoing interface" +msgstr "出接口" + +msgid "Output plugins" +msgstr "Output插件" + +msgid "Ping" +msgstr "Ping" + +msgid "Ping Plugin Configuration" +msgstr "Ping插件配置" + +msgid "Port" +msgstr "端口" + +msgid "Processes" +msgstr "进程" + +msgid "Processes Plugin Configuration" +msgstr "进程插件配置" + +msgid "Processes to monitor separated by space" +msgstr "过程监控,用空格隔开" + +msgid "Processor" +msgstr "处理器" + +msgid "Qdisc monitoring" +msgstr "Qdisc监测" + +msgid "RRD XFiles Factor" +msgstr "RRD XFiles因子" + +msgid "RRD heart beat interval" +msgstr "RRD心跳间隙" + +msgid "RRD step interval" +msgstr "RRD区间间隙" + +msgid "RRDTool" +msgstr "RRDTool" + +msgid "RRDTool Plugin Configuration" +msgstr "RRDTool插件配置" + +msgid "Rows per RRA" +msgstr "行/RRA" + +msgid "Script" +msgstr "脚本" + +msgid "Seconds" +msgstr "秒" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "服务器主机" + +msgid "Server port" +msgstr "服务器端口" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "整形类监控" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "套接字文件" + +msgid "Socket group" +msgstr "套接字组" + +msgid "Socket permissions" +msgstr "套接字权限" + +msgid "Source ip range" +msgstr "源IP区间" + +msgid "Specifies what information to collect about links." +msgstr "收集指定链接相关信息。" + +msgid "Specifies what information to collect about routes." +msgstr "收集指定路由相关信息。" + +msgid "Specifies what information to collect about the global topology." +msgstr "收集指定拓扑相关信息。" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "统计" + +msgid "Storage directory" +msgstr "存储目录" + +msgid "Storage directory for the csv files" +msgstr "csv存储目录" + +msgid "Store data values as rates instead of absolute values" +msgstr "存储数据值变化量而不是绝对值" + +msgid "Stored timespans" +msgstr "存储时间跨度" + +msgid "System Load" +msgstr "系统加载" + +msgid "TCP Connections" +msgstr "TCP连接数" + +msgid "TCPConns Plugin Configuration" +msgstr "TCPConns插件配置" + +msgid "TTL for network packets" +msgstr "网络包TTL" + +msgid "TTL for ping packets" +msgstr "ping包TTL" + +msgid "Table" +msgstr "表" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "NUT插件读取UPS信息。" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "OLSRd插件通过txtinfo获取meshed网络信息。" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "conntrack插件获取连接数信息。" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "cpu插件获取处理器相关信息。" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "csv插件用于存储数据,以方便其他程序处理数据。" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "df插件收集磁盘空间使用情况,挂载点及文件系统相关信息。" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "disk插件收集磁盘分区使用情况及相关信息。" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "dns插件收集dns数据流相关信息。" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" +"邮件插件创建一个unix套接字用于为Collectd守护进程发送统计信息到电子邮件系统。" +"这个插件主要目的是结合使用Mail::SpamAssasin::Pulgin::Collectd,但可以用在其他" +"方面。" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" +"exec插件,用于当某些监控值已到达阈值时,启动外部命令读值或通知外部程序。" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "Interface插件,用于收集选定接口的数据包的统计信息。" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "iptables插件,将监测选定防火墙规则和收集关于每个规则处理的数据包信息。" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" +"irq插件,用于监控选定中断的每秒钟产生的中断数。如果没有中断被选中,则表示对所" +"有中断进行监测。" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "iwinfo插件,收集无线信号强度、噪声和质量的统计信息。" + +msgid "The load plugin collects statistics about the general system load." +msgstr "load插件,收集常规系统加载统计信息。" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "memory插件,收集关于内存使用情况的统计信息。" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "netlink插件,收集为选定接口qdisc-、class-和filter- 的扩展数据。" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" +"network插件,提供了基于网络的不同Collectd实例。Collectd可以工作在客户端和服务" +"器两个模式。在客户端模式下收集本地信息,然后转移到一个Collectd服务器实例中,在" +"服务器模式将从其他主机收集信息。" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "ping插件,将发送icmp echo replies到选定主机来测量每台主机的响应时间。" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "processes插件,收集选定进程的cpu时间、页面错误和内存使用信息。" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" +"rrdtool插件,将收集数据以图表的形式储存在RRD数据库文件中。

警告:错误的参数设置,将导致非常高的临时内存消耗。这可能会使设备无法" +"使用!" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "tcpconns插件,收集选定端口TCP连接信息。" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "unixsock插件,创建一个unix套接字可用于读取Collectd实例的收集信息。" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "定义Collectd将监听哪个接口来传入连接收集数据。" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "定义本地收集数据被发送到哪台Collected服务器。" + +msgid "Try to lookup fully qualified hostname" +msgstr "尝试解析主机全域名" + +msgid "UPS" +msgstr "UPS" + +msgid "UPS Plugin Configuration" +msgstr "UPS插件配置" + +msgid "UPS name in NUT ups@host format" +msgstr "UPS名使用NUT(Network UPS Tools)格式:ups@host" + +msgid "UnixSock" +msgstr "UnixSock" + +msgid "Unixsock Plugin Configuration" +msgstr "Unixsock插件配置" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "正在使用的PID文件" + +msgid "User" +msgstr "用户" + +msgid "Verbose monitoring" +msgstr "详细监测" + +msgid "Wireless" +msgstr "无线" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "无线iwinfo插件配置" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "例如:br-ff" + +msgid "e.g. br-lan" +msgstr "例如:br-lan" + +msgid "e.g. reject-with tcp-reset" +msgstr "例如:eject-with tcp-reset" + +msgid "max. 16 chars" +msgstr "最长16个字符" + +msgid "reduces rrd size" +msgstr "减少rrd大小" + +msgid "seconds; multiple separated by space" +msgstr "秒数;多个使用空格分隔" + +msgid "server interfaces" +msgstr "服务器接口" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "系统插件" + +#~ msgid "" +#~ "The statistics package is based on Collectd and uses RRD Tool to render diagram images from collected data." +#~ msgstr "" +#~ "统计软件包是基于Collectd," +#~ "并使用RRD工具来渲染图表,用" +#~ "于收集数据。" + +#~ msgid "group name" +#~ msgstr "群名称" diff --git a/feeds/luci/applications/luci-app-statistics/po/zh-tw/rrdtool.po b/feeds/luci/applications/luci-app-statistics/po/zh-tw/rrdtool.po new file mode 100644 index 0000000..9245260 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/zh-tw/rrdtool.po @@ -0,0 +1,355 @@ +# rrdtool.pot +# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua +msgid "" +msgstr "" +"Content-Type: text/plain; charset=ASCII\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" + +#. %H: Wireless - Signal Noise Ratio +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1 +msgid "stat_dg_title_wireless__signal_noise" +msgstr "" + +#. dBm +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2 +msgid "stat_dg_label_wireless__signal_noise" +msgstr "" + +#. Noise Level +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3 +msgid "stat_ds_signal_noise" +msgstr "" + +#. Signal Strength +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4 +msgid "stat_ds_signal_power" +msgstr "" + +#. %H: Wireless - Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5 +msgid "stat_dg_title_wireless__signal_quality" +msgstr "" + +#. n +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6 +msgid "stat_dg_label_wireless__signal_quality" +msgstr "" + +#. Signal Quality +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7 +msgid "stat_ds_signal_quality" +msgstr "" + +#. %H: ICMP Roundtrip Times +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8 +msgid "stat_dg_title_ping" +msgstr "" + +#. ms +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9 +msgid "stat_dg_label_ping" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10 +msgid "stat_ds_ping" +msgstr "" + +#. %H: Firewall - Processed Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11 +msgid "stat_dg_title_iptables__ipt_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12 +msgid "stat_dg_label_iptables__ipt_packets" +msgstr "" + +#. Chain \"%di\" +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13 +msgid "stat_ds_ipt_packets" +msgstr "" + +#. %H: Netlink - Transfer on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14 +msgid "stat_dg_title_netlink__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15 +msgid "stat_dg_label_netlink__if_octets" +msgstr "" + +#. Bytes (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16 +msgid "stat_ds_if_octets" +msgstr "" + +#. %H: Netlink - Packets on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17 +msgid "stat_dg_title_netlink__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18 +msgid "stat_dg_label_netlink__if_packets" +msgstr "" + +#. Processed (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19 +msgid "stat_ds_if_packets" +msgstr "" + +#. Dropped (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20 +msgid "stat_ds_if_dropped" +msgstr "" + +#. Errors (%ds) +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21 +msgid "stat_ds_if_errors" +msgstr "" + +#. %H: Netlink - Multicast on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22 +msgid "stat_dg_title_netlink__if_multicast" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23 +msgid "stat_dg_label_netlink__if_multicast" +msgstr "" + +#. Packets +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24 +msgid "stat_ds_if_multicast" +msgstr "" + +#. %H: Netlink - Collisions on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25 +msgid "stat_dg_title_netlink__if_collisions" +msgstr "" + +#. Collisions/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26 +msgid "stat_dg_label_netlink__if_collisions" +msgstr "" + +#. Collisions +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27 +msgid "stat_ds_if_collisions" +msgstr "" + +#. %H: Netlink - Errors on %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28 +msgid "stat_dg_title_netlink__if_tx_errors" +msgstr "" + +#. Errors/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29 +msgid "stat_dg_label_netlink__if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30 +msgid "stat_ds_if_tx_errors" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31 +msgid "stat_ds_if_rx_errors" +msgstr "" + +#. %H: Processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32 +msgid "stat_dg_title_processes" +msgstr "" + +#. Processes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33 +msgid "stat_dg_label_processes" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34 +msgid "stat_ds_ps_state" +msgstr "" + +#. %H: Process %pi - used cpu time +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35 +msgid "stat_dg_title_processes__ps_cputime" +msgstr "" + +#. Jiffies +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36 +msgid "stat_dg_label_processes__ps_cputime" +msgstr "" + +#. system +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37 +msgid "stat_ds_ps_cputime__syst" +msgstr "" + +#. user +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38 +msgid "stat_ds_ps_cputime__user" +msgstr "" + +#. %H: Process %pi - threads and processes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39 +msgid "stat_dg_title_processes__ps_count" +msgstr "" + +#. Count +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40 +msgid "stat_dg_label_processes__ps_count" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41 +msgid "stat_ds_ps_count" +msgstr "" + +#. %H: Process %pi - page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42 +msgid "stat_dg_title_processes__ps_pagefaults" +msgstr "" + +#. Pagefaults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43 +msgid "stat_dg_label_processes__ps_pagefaults" +msgstr "" + +#. page faults +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44 +msgid "stat_ds_ps_pagefaults" +msgstr "" + +#. %H: Process %pi - virtual memory size +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45 +msgid "stat_dg_title_processes__ps_rss" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46 +msgid "stat_dg_label_processes__ps_rss" +msgstr "" + +#. virtual memory +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47 +msgid "stat_ds_ps_rss" +msgstr "" + +#. %H: Usage on Processor #%pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48 +msgid "stat_dg_title_cpu" +msgstr "" + +#. % +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49 +msgid "stat_dg_label_cpu" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50 +msgid "stat_ds_cpu" +msgstr "" + +#. %H: Transfer on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51 +msgid "stat_dg_title_interface__if_octets" +msgstr "" + +#. Bytes/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52 +msgid "stat_dg_label_interface__if_octets" +msgstr "" + +#. %H: Packets on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53 +msgid "stat_dg_title_interface__if_packets" +msgstr "" + +#. Packets/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54 +msgid "stat_dg_label_interface__if_packets" +msgstr "" + +#. %H: TCP-Connections to Port %pi +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55 +msgid "stat_dg_title_tcpconns" +msgstr "" + +#. Connections/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56 +msgid "stat_dg_label_tcpconns" +msgstr "" + +#. %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57 +msgid "stat_ds_tcp_connections" +msgstr "" + +#. %H: Disk Space Usage on %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58 +msgid "stat_dg_title_df" +msgstr "" + +#. Bytes +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59 +msgid "stat_dg_label_df" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60 +msgid "stat_ds_df__free" +msgstr "" + +#. %ds +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61 +msgid "stat_ds_df__used" +msgstr "" + +#. %H: Interrupts +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62 +msgid "stat_dg_title_irq" +msgstr "" + +#. Issues/s +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63 +msgid "stat_dg_label_irq" +msgstr "" + +#. IRQ %di +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64 +msgid "stat_ds_irq" +msgstr "" + +#. %H: System Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65 +msgid "stat_dg_title_load" +msgstr "" + +#. Load +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66 +msgid "stat_dg_label_load" +msgstr "" + +#. 1 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67 +msgid "stat_ds_load__shortterm" +msgstr "" + +#. 5 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68 +msgid "stat_ds_load__midterm" +msgstr "" + +#. 15 min +#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69 +msgid "stat_ds_load__longterm" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/po/zh-tw/statistics.po b/feeds/luci/applications/luci-app-statistics/po/zh-tw/statistics.po new file mode 100644 index 0000000..404092b --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/po/zh-tw/statistics.po @@ -0,0 +1,706 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Action (target)" +msgstr "" + +msgid "Add command for reading values" +msgstr "" + +msgid "Add matching rule" +msgstr "" + +msgid "Add multiple hosts separated by space." +msgstr "" + +msgid "Add notification command" +msgstr "" + +msgid "Aggregate number of connected users" +msgstr "" + +msgid "Base Directory" +msgstr "" + +msgid "Basic monitoring" +msgstr "" + +msgid "CPU Frequency" +msgstr "" + +msgid "CPU Frequency Plugin Configuration" +msgstr "" + +msgid "CPU Plugin Configuration" +msgstr "" + +msgid "CSV Output" +msgstr "" + +msgid "CSV Plugin Configuration" +msgstr "" + +msgid "Cache collected data for" +msgstr "" + +msgid "Cache flush interval" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "CollectLinks" +msgstr "" + +msgid "CollectRoutes" +msgstr "" + +msgid "CollectTopology" +msgstr "" + +msgid "Collectd Settings" +msgstr "" + +msgid "" +"Collectd is a small daemon for collecting data from various sources through " +"different plugins. On this page you can change general settings for the " +"collectd daemon." +msgstr "" + +msgid "Conntrack" +msgstr "" + +msgid "Conntrack Plugin Configuration" +msgstr "" + +msgid "DF Plugin Configuration" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS Plugin Configuration" +msgstr "" + +msgid "Data collection interval" +msgstr "" + +msgid "Datasets definition file" +msgstr "" + +msgid "Destination ip range" +msgstr "" + +msgid "Directory for collectd plugins" +msgstr "" + +msgid "Directory for sub-configurations" +msgstr "" + +msgid "Disk Plugin Configuration" +msgstr "" + +msgid "Disk Space Usage" +msgstr "" + +msgid "Disk Usage" +msgstr "" + +msgid "Display Host »" +msgstr "" + +msgid "Display timespan »" +msgstr "" + +msgid "E-Mail Plugin Configuration" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "Empty value = monitor all" +msgstr "" + +msgid "Enable this plugin" +msgstr "" + +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + +msgid "Exec" +msgstr "" + +msgid "Exec Plugin Configuration" +msgstr "" + +msgid "Filter class monitoring" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Flush cache after" +msgstr "" + +msgid "Forwarding between listen and server addresses" +msgstr "" + +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd in " +"order to read certain values. The values will be read from stdout." +msgstr "" + +msgid "" +"Here you can define external commands which will be started by collectd when " +"certain threshold values have been reached. The values leading to invokation " +"will be feeded to the the called programs stdin." +msgstr "" + +msgid "" +"Here you can define various criteria by which the monitored iptables rules " +"are selected." +msgstr "" + +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IP or hostname where to get the txtinfo output from" +msgstr "" + +msgid "IRQ Plugin Configuration" +msgstr "" + +msgid "Ignore source addresses" +msgstr "" + +msgid "Incoming interface" +msgstr "" + +msgid "Interface Plugin Configuration" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Interrupts" +msgstr "" + +msgid "Interval for pings" +msgstr "" + +msgid "Iptables Plugin Configuration" +msgstr "" + +msgid "Leave unselected to automatically determine interfaces to monitor." +msgstr "" + +msgid "Listen host" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Listener interfaces" +msgstr "" + +msgid "Load Plugin Configuration" +msgstr "" + +msgid "" +"Max values for a period can be used instead of averages when not using 'only " +"average RRAs'" +msgstr "" + +msgid "Maximum allowed connections" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory Plugin Configuration" +msgstr "" + +msgid "Monitor all except specified" +msgstr "" + +msgid "Monitor all local listen ports" +msgstr "" + +msgid "Monitor all sensors" +msgstr "" + +msgid "Monitor device(s) / thermal zone(s)" +msgstr "" + +msgid "Monitor devices" +msgstr "" + +msgid "Monitor disks and partitions" +msgstr "" + +msgid "Monitor filesystem types" +msgstr "" + +msgid "Monitor hosts" +msgstr "" + +msgid "Monitor interfaces" +msgstr "" + +msgid "Monitor interrupts" +msgstr "" + +msgid "Monitor local ports" +msgstr "" + +msgid "Monitor mount points" +msgstr "" + +msgid "Monitor processes" +msgstr "" + +msgid "Monitor remote ports" +msgstr "" + +msgid "Name of the rule" +msgstr "" + +msgid "Netlink" +msgstr "" + +msgid "Netlink Plugin Configuration" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Plugin Configuration" +msgstr "" + +msgid "Network plugins" +msgstr "" + +msgid "Network protocol" +msgstr "" + +msgid "Number of threads for data collection" +msgstr "" + +msgid "OLSRd" +msgstr "" + +msgid "OLSRd Plugin Configuration" +msgstr "" + +msgid "Only create average RRAs" +msgstr "" + +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Outgoing interface" +msgstr "" + +msgid "Output plugins" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Ping Plugin Configuration" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Processes Plugin Configuration" +msgstr "" + +msgid "Processes to monitor separated by space" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Qdisc monitoring" +msgstr "" + +msgid "RRD XFiles Factor" +msgstr "" + +msgid "RRD heart beat interval" +msgstr "" + +msgid "RRD step interval" +msgstr "" + +msgid "RRDTool" +msgstr "" + +msgid "RRDTool Plugin Configuration" +msgstr "" + +msgid "Rows per RRA" +msgstr "" + +msgid "Script" +msgstr "" + +msgid "Seconds" +msgstr "" + +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + +msgid "Server host" +msgstr "" + +msgid "Server port" +msgstr "" + +msgid "Setup" +msgstr "" + +msgid "Shaping class monitoring" +msgstr "" + +msgid "Show max values instead of averages" +msgstr "" + +msgid "Socket file" +msgstr "" + +msgid "Socket group" +msgstr "" + +msgid "Socket permissions" +msgstr "" + +msgid "Source ip range" +msgstr "" + +msgid "Specifies what information to collect about links." +msgstr "" + +msgid "Specifies what information to collect about routes." +msgstr "" + +msgid "Specifies what information to collect about the global topology." +msgstr "" + +msgid "Splash Leases" +msgstr "" + +msgid "Splash Leases Plugin Configuration" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Storage directory" +msgstr "" + +msgid "Storage directory for the csv files" +msgstr "" + +msgid "Store data values as rates instead of absolute values" +msgstr "" + +msgid "Stored timespans" +msgstr "" + +msgid "System Load" +msgstr "" + +msgid "TCP Connections" +msgstr "" + +msgid "TCPConns Plugin Configuration" +msgstr "" + +msgid "TTL for network packets" +msgstr "" + +msgid "TTL for ping packets" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "The NUT plugin reads information about Uninterruptible Power Supplies." +msgstr "" + +msgid "" +"The OLSRd plugin reads information about meshed networks from the txtinfo " +"plugin of OLSRd." +msgstr "" + +msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" +"The conntrack plugin collects statistics about the number of tracked " +"connections." +msgstr "" + +msgid "The cpu plugin collects basic statistics about the processor usage." +msgstr "" + +msgid "" +"The csv plugin stores collected data in csv file format for further " +"processing by external programs." +msgstr "" + +msgid "" +"The df plugin collects statistics about the disk space usage on different " +"devices, mount points or filesystem types." +msgstr "" + +msgid "" +"The disk plugin collects detailled usage statistics for selected partitions " +"or whole disks." +msgstr "" + +msgid "" +"The dns plugin collects detailled statistics about dns related traffic on " +"selected interfaces." +msgstr "" + +msgid "" +"The email plugin creates a unix socket which can be used to transmit email-" +"statistics to a running collectd daemon. This plugin is primarily intended " +"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " +"be used in other ways as well." +msgstr "" + +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + +msgid "" +"The exec plugin starts external commands to read values from or to notify " +"external processes when certain threshold values have been reached." +msgstr "" + +msgid "" +"The interface plugin collects traffic statistics on selected interfaces." +msgstr "" + +msgid "" +"The iptables plugin will monitor selected firewall rules and collect " +"informations about processed bytes and packets per rule." +msgstr "" + +msgid "" +"The irq plugin will monitor the rate of issues per second for each selected " +"interrupt. If no interrupt is selected then all interrupts are monitored." +msgstr "" + +msgid "" +"The iwinfo plugin collects statistics about wireless signal strength, noise " +"and quality." +msgstr "" + +msgid "The load plugin collects statistics about the general system load." +msgstr "" + +msgid "The memory plugin collects statistics about the memory usage." +msgstr "" + +msgid "" +"The netlink plugin collects extended informations like qdisc-, class- and " +"filter-statistics for selected interfaces." +msgstr "" + +msgid "" +"The network plugin provides network based communication between different " +"collectd instances. Collectd can operate both in client and server mode. In " +"client mode locally collected data is transferred to a collectd server " +"instance, in server mode the local instance receives data from other hosts." +msgstr "" + +msgid "" +"The ping plugin will send icmp echo replies to selected hosts and measure " +"the roundtrip time for each host." +msgstr "" + +msgid "" +"The processes plugin collects informations like cpu time, page faults and " +"memory usage of selected processes." +msgstr "" + +msgid "" +"The rrdtool plugin stores the collected data in rrd database files, the " +"foundation of the diagrams.

Warning: Setting the wrong " +"values will result in a very high memory consumption in the temporary " +"directory. This can render the device unusable!" +msgstr "" + +msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" +"The splash leases plugin uses libuci to collect statistics about splash " +"leases." +msgstr "" + +msgid "" +"The statistics package uses Collectd " +"to gather data and RRDtool to " +"render diagram images." +msgstr "" + +msgid "" +"The tcpconns plugin collects informations about open tcp connections on " +"selected ports." +msgstr "" + +msgid "" +"The thermal plugin will monitor temperature of the system. Data is typically " +"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be " +"read, e.g. thermal_zone1 )" +msgstr "" + +msgid "" +"The unixsock plugin creates a unix socket which can be used to read " +"collected data from a running collectd instance." +msgstr "" + +msgid "The uptime plugin collects statistics about the uptime of the system." +msgstr "" + +msgid "Thermal" +msgstr "" + +msgid "Thermal Plugin Configuration" +msgstr "" + +msgid "This plugin collects statistics about the processor frequency scaling." +msgstr "" + +msgid "" +"This section defines on which interfaces collectd will wait for incoming " +"connections." +msgstr "" + +msgid "" +"This section defines to which servers the locally collected data is sent to." +msgstr "" + +msgid "Try to lookup fully qualified hostname" +msgstr "" + +msgid "UPS" +msgstr "" + +msgid "UPS Plugin Configuration" +msgstr "" + +msgid "UPS name in NUT ups@host format" +msgstr "" + +msgid "UnixSock" +msgstr "" + +msgid "Unixsock Plugin Configuration" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Uptime Plugin Configuration" +msgstr "" + +msgid "Use improved naming schema" +msgstr "" + +msgid "Used PID file" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Verbose monitoring" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless iwinfo Plugin Configuration" +msgstr "" + +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + +msgid "e.g. br-ff" +msgstr "" + +msgid "e.g. br-lan" +msgstr "" + +msgid "e.g. reject-with tcp-reset" +msgstr "" + +msgid "max. 16 chars" +msgstr "" + +msgid "reduces rrd size" +msgstr "" + +msgid "seconds; multiple separated by space" +msgstr "" + +msgid "server interfaces" +msgstr "" diff --git a/feeds/luci/applications/luci-app-statistics/root/etc/config/luci_statistics b/feeds/luci/applications/luci-app-statistics/root/etc/config/luci_statistics new file mode 100644 index 0000000..774a838 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/root/etc/config/luci_statistics @@ -0,0 +1,164 @@ +# general settings + +config statistics 'collectd' + option BaseDir '/var/run/collectd' + option Include '/etc/collectd/conf.d' + option PIDFile '/var/run/collectd.pid' + option PluginDir '/usr/lib/collectd' + option TypesDB '/usr/share/collectd/types.db' + option Interval '30' + option ReadThreads '2' + +config statistics 'rrdtool' + option default_timespan '1hour' + option image_width '600' + option image_path '/tmp/rrdimg' + +# output plugins + +config statistics 'collectd_rrdtool' + option enable '1' + option DataDir '/tmp/rrd' + option RRARows '100' + option RRASingle '1' + option RRATimespans '1hour 1day 1week 1month 1year' + +config statistics 'collectd_csv' + option enable '0' + option StoreRates '0' + option DataDir '/tmp' + +config statistics 'collectd_email' + option enable '0' + option SocketFile '/var/run/collectd/email.sock' + option SocketGroup 'nogroup' + +config statistics 'collectd_logfile' + option enable '0' + option LogLevel 'notice' + option File '/var/log/collectd.log' + option Timestamp '1' + +config statistics 'collectd_network' + option enable '0' + +config statistics 'collectd_unixsock' + option enable '0' + option SocketFile '/var/run/collectd/query.sock' + option SocketGroup 'nogroup' + +# input plugins + +config statistics 'collectd_conntrack' + option enable '0' + +config statistics 'collectd_cpu' + option enable '1' + +config statistics 'collectd_cpufreq' + option enable '0' + +config statistics 'collectd_df' + option enable '0' + option Devices '/dev/mtdblock/4' + option MountPoints '/jffs' + option FSTypes 'tmpfs' + option IgnoreSelected '0' + +config statistics 'collectd_disk' + option enable '0' + option Disks 'hda1 hdb' + option IgnoreSelected '0' + +config statistics 'collectd_dns' + option enable '0' + option Interfaces 'br-lan' + option IgnoreSources '127.0.0.1' + +config statistics 'collectd_entropy' + option enable '0' + +config statistics 'collectd_exec' + option enable '0' + +config statistics 'collectd_interface' + option enable '1' + option Interfaces 'br-lan' + option IgnoreSelected '0' + +config statistics 'collectd_iptables' + option enable '0' + +config collectd_iptables_match + option table 'nat' + option chain 'luci_fw_postrouting' + option target 'MASQUERADE' + option source '192.168.1.0/24' + option outputif 'br-ff' + option name 'LAN-Clients traffic' + +config collectd_iptables_match + option chain 'luci_fw_postrouting' + option table 'nat' + option target 'MASQUERADE' + option source '10.61.230.0/24' + option outputif 'br-ff' + option name 'WLAN-Clients traffic' + +config statistics 'collectd_irq' + option enable '0' + option Irqs '2 3 4 7' + +config statistics 'collectd_iwinfo' + option enable '1' + +config statistics 'collectd_load' + option enable '1' + +config statistics 'collectd_memory' + option enable '1' + +config statistics 'collectd_netlink' + option enable '0' + option IgnoreSelected '0' + option VerboseInterfaces 'br-lan' + option QDiscs 'br-lan' + +config statistics 'collectd_nut' + option enable '0' + option UPS 'myupsname' + +config statistics 'collectd_olsrd' + option enable '0' + option Port '2006' + option Host '127.0.0.1' + +config statistics 'collectd_ping' + option enable '0' + option TTL '127' + option Interval '30' + option Hosts '127.0.0.1' + +config statistics 'collectd_processes' + option enable '0' + option Processes 'uhttpd dnsmasq dropbear' + +config statistics 'collectd_sensors' + option enable '0' + +config statistics 'collectd_splash_leases' + option enable '0' + +config statistics 'collectd_tcpconns' + option enable '0' + option ListeningPorts '0' + option LocalPorts '22 80' + +config statistics 'collectd_thermal' + option enable '0' + option IgnoreSelected '0' + option Device '' + +config statistics 'collectd_uptime' + option enable '0' + diff --git a/feeds/luci/applications/luci-app-statistics/root/etc/init.d/luci_statistics b/feeds/luci/applications/luci-app-statistics/root/etc/init.d/luci_statistics new file mode 100755 index 0000000..ab75b69 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/root/etc/init.d/luci_statistics @@ -0,0 +1,25 @@ +#!/bin/sh /etc/rc.common +START=79 + +start() { + ### replace shipped config with symlink + mkdir -p /var/etc + if [ ! -L /etc/collectd.conf ]; then + test -f /etc/collectd.conf && mv /etc/collectd.conf /etc/collectd.conf.bak + ln -s /var/etc/collectd.conf /etc/collectd.conf + fi + + ### create config + /usr/bin/stat-genconfig > /var/etc/collectd.conf + + ### workaround broken permissions on /tmp + chmod 1777 /tmp +} + +restart() { + ### regenerate config / prepare environment + start + + ### restart collectd + /etc/init.d/collectd restart +} diff --git a/feeds/luci/applications/luci-app-statistics/root/etc/uci-defaults/40_luci-statistics b/feeds/luci/applications/luci-app-statistics/root/etc/uci-defaults/40_luci-statistics new file mode 100755 index 0000000..28e3529 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/root/etc/uci-defaults/40_luci-statistics @@ -0,0 +1,16 @@ +#!/bin/sh + +# register commit handler +uci -q batch <<-EOF >/dev/null + delete ucitrack.@luci_statistics[-1] + add ucitrack luci_statistics + set ucitrack.@luci_statistics[-1].init=luci_statistics + commit ucitrack +EOF + +# symlink for busybox httpd +[ -x /usr/sbin/httpd ] && [ ! -h /www/rrdimg ] && \ + ln -s /tmp/rrdimg /www/rrdimg + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-statistics/root/usr/bin/stat-genconfig b/feeds/luci/applications/luci-app-statistics/root/usr/bin/stat-genconfig new file mode 100755 index 0000000..df9af15 --- /dev/null +++ b/feeds/luci/applications/luci-app-statistics/root/usr/bin/stat-genconfig @@ -0,0 +1,468 @@ +#!/usr/bin/lua + +--[[ + +Luci statistics - collectd configuration generator +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + + +require("luci.model.uci") +require("luci.sys.iptparser") +require("luci.util") + +local ipt = luci.sys.iptparser.IptParser() +local uci = luci.model.uci.cursor() +local sections = uci:get_all( "luci_statistics" ) + + +function print(...) + nixio.stdout:write(...) + nixio.stdout:write("\n") +end + +function section( plugin ) + + local config = sections[ "collectd_" .. plugin ] or sections["collectd"] + + if type(config) == "table" and ( plugin == "collectd" or config.enable == "1" ) then + + local params = "" + + if type( plugins[plugin] ) == "function" then + params = plugins[plugin]( config ) + else + params = config_generic( config, plugins[plugin][1], plugins[plugin][2], plugins[plugin][3], plugin == "collectd" ) + end + + + if plugin ~= "collectd" then + print( "LoadPlugin " .. plugin ) + + if params:len() > 0 then + print( "\n" .. params .. "\n" ) + else + print( "" ) + end + else + print( params .. "\n" ) + end + end +end + +function config_generic( c, singles, bools, lists, nopad ) + local str = "" + + if type(c) == "table" then + + if type(singles) == "table" then + for i, key in ipairs( singles ) do + if preprocess[key] then + c[key] = preprocess[key](c[key]) + end + + str = str .. _string( c[key], key, nopad ) + end + end + + if type(bools) == "table" then + for i, key in ipairs( bools ) do + if preprocess[key] then + c[key] = preprocess[key](c[key]) + end + + str = str .. _bool( c[key], key, nopad ) + end + end + + if type(lists) == "table" then + str = str .. _list_expand( c, lists, nopad ) + end + end + + return str +end + +function config_exec( c ) + local str = "" + + for s in pairs(sections) do + for key, type in pairs({ Exec="collectd_exec_input", NotificationExec="collectd_exec_notify" }) do + if sections[s][".type"] == type then + + cmd = sections[s].cmdline + + if cmd then + cmd = cmd:gsub("^%s+", ""):gsub("%s+$", "") + user = sections[s].cmduser or "nobody" + group = sections[s].cmdgroup + + str = str .. "\t" .. key .. ' "' .. + user .. ( group and ":" .. group or "" ) .. '" "' .. + cmd:gsub('%s+', '" "') .. '"\n' + end + end + end + end + + return str +end + +function config_iptables( c ) + local str = "" + + for s in pairs(sections) do + if sections[s][".type"] == "collectd_iptables_match" then + + search = { } + + for i, k in ipairs( { + "table", "chain", "target", "protocol", "source", "destination", + "inputif", "outputif", "options" + } ) do + v = sections[s][k] + + if type(v) == "string" then + if k == "options" then v = luci.util.split( v, "%s+", nil, true ) end + search[k] = v + end + end + + for i, rule in ipairs( ipt:find( search ) ) do + + name = sections[s].name:gsub( "%s+", "_" ) + if i > 1 then name = name .. "_(" .. i .. ")" end + + str = str .. "\tChain " .. rule.table .. " " .. rule.chain .. " " .. rule.index .. ' "' .. name .. "\"\n" + end + end + end + + return str +end + +function config_network( c ) + local str = "" + + for s in pairs(sections) do + for key, type in pairs({ Listen="collectd_network_listen", Server="collectd_network_server" }) do + if sections[s][".type"] == type then + + host = sections[s].host + port = sections[s].port + + if host then + if port then + str = str .. "\t" .. key .. " \"" .. host .. "\" \"" .. port .. "\"\n" + else + str = str .. "\t" .. key .. " \"" .. host .. "\"\n" + end + end + end + end + end + + return str .. _string( c["TimeToLive"], "TimeToLive" ) + .. _string( c["CacheFlush"], "CacheFlush" ) + .. _bool( c["Forward"], "Forward" ) +end + + +function _list_expand( c, l, nopad ) + local str = "" + + for i, n in ipairs(l) do + if c[n] then + if preprocess[n] then + c[n] = preprocess[n](c[n]) + end + + if n:find("(%w+)ses") then + k = n:gsub("(%w+)ses$", "%1s") + else + k = n:gsub("(%w+)s$", "%1") + end + + str = str .. _expand( c[n], k, nopad ) + end + end + + return str +end + +function _expand( s, n, nopad ) + local str = "" + + if type(s) == "string" then + for i, v in ipairs( luci.util.split( s, "%s+", nil, true ) ) do + str = str .. _string( v, n, nopad ) + end + elseif type(s) == "table" then + for i, v in ipairs(s) do + str = str .. _string( v, n, nopad ) + end + end + + return str +end + +function _bool( s, n, nopad ) + + local str = "" + local pad = "" + if not nopad then pad = "\t" end + + if s and s == "1" then + str = pad .. n .. " true" + else + str = pad .. n .. " false" + end + + return str .. "\n" +end + +function _string( s, n, nopad ) + + local str = "" + local pad = "" + if not nopad then pad = "\t" end + + if s then + if s:find("[^%d]") or n == "Port" then + if not s:find("[^%w]") and n ~= "Port" then + str = pad .. n .. " " .. luci.util.trim(s) + else + str = pad .. n .. ' "' .. luci.util.trim(s) .. '"' + end + else + str = pad .. n .. " " .. luci.util.trim(s) + end + + str = str .. "\n" + end + + return str +end + + +plugins = { + collectd = { + { "BaseDir", "Include", "PIDFile", "PluginDir", "TypesDB", "Interval", "ReadThreads", "Hostname" }, + { }, + { } + }, + + conntrack = { + { }, + { }, + { } + }, + + cpu = { + { }, + { }, + { } + }, + + cpufreq = { + { }, + { }, + { } + }, + + csv = { + { "DataDir" }, + { "StoreRates" }, + { } + }, + + df = { + { }, + { "IgnoreSelected" }, + { "Devices", "MountPoints", "FSTypes" } + }, + + disk = { + { }, + { "IgnoreSelected" }, + { "Disks" } + }, + + dns = { + { }, + { }, + { "Interfaces", "IgnoreSources" } + }, + + email = { + { "SocketFile", "SocketGroup", "SocketPerms", "MaxConns" }, + { }, + { } + }, + + entropy = { + { }, + { }, + { } + }, + + exec = config_exec, + + interface = { + { }, + { "IgnoreSelected" }, + { "Interfaces" } + }, + + iptables = config_iptables, + + irq = { + { }, + { "IgnoreSelected" }, + { "Irqs" } + }, + + iwinfo = { + { }, + { "IgnoreSelected" }, + { "Interfaces" } + }, + + load = { + { }, + { }, + { } + }, + + logfile = { + { "LogLevel", "File" }, + { "Timestamp" }, + { } + }, + + madwifi = { + { "WatchSet" }, + { }, + { "Interfaces", "WatchAdds" } + }, + + memory = { + { }, + { }, + { } + }, + + netlink = { + { }, + { "IgnoreSelected" }, + { "Interfaces", "VerboseInterfaces", "QDiscs", "Classes", "Filters" } + }, + + network = config_network, + + nut = { + { "UPS" }, + { }, + { } + }, + + olsrd = { + { "Host", "Port", "CollectLinks","CollectRoutes","CollectTopology"}, + { }, + { } + }, + + openvpn = { + { }, + { "CollectIndividualUsers", "CollectUserCount", "CollectCompression", "ImprovedNamingSchema" }, + { "StatusFile" } + }, + + ping = { + { "TTL", "Interval" }, + { }, + { "Hosts" } + }, + + processes = { + { }, + { }, + { "Processes" } + }, + + rrdtool = { + { "DataDir", "StepSize", "HeartBeat", "RRARows", "XFF", "CacheFlush", "CacheTimeout" }, + { "RRASingle" }, + { "RRATimespans" } + }, + + sensors = { + { }, + { "IgnoreSelected" }, + { "Sensor" } + }, + + splash_leases = { + { }, + { }, + { } + }, + + tcpconns = { + { }, + { "ListeningPorts" }, + { "LocalPorts", "RemotePorts" } + }, + + thermal = { + { }, + { "IgnoreSelected" }, + { "Device" } + }, + + unixsock = { + { "SocketFile", "SocketGroup", "SocketPerms" }, + { }, + { } + }, + + uptime = { + { }, + { }, + { } + }, + + wireless = { + { }, + { }, + { } + }, +} + +preprocess = { + RRATimespans = function(val) + local rv = { } + for time in val:gmatch("[^%s]+") do + table.insert( rv, luci.util.parse_units(time) ) + end + return table.concat(rv, " ") + end +} + + +section("collectd") + +for plugin in pairs(plugins) do + if plugin ~= "collectd" then + section( plugin ) + end +end diff --git a/feeds/luci/applications/luci-app-tinyproxy/Makefile b/feeds/luci/applications/luci-app-tinyproxy/Makefile new file mode 100644 index 0000000..02751b8 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Tinyproxy - HTTP(S)-Proxy configuration +LUCI_DEPENDS:=+tinyproxy + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-tinyproxy/luasrc/controller/tinyproxy.lua b/feeds/luci/applications/luci-app-tinyproxy/luasrc/controller/tinyproxy.lua new file mode 100644 index 0000000..cf7e974 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/luasrc/controller/tinyproxy.lua @@ -0,0 +1,15 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.tinyproxy", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/tinyproxy") then + return + end + + entry({"admin", "services", "tinyproxy"}, alias("admin", "services", "tinyproxy", "config"), _("Tinyproxy")) + entry({"admin", "services", "tinyproxy", "status"}, template("tinyproxy_status"), _("Status")) + entry({"admin", "services", "tinyproxy", "config"}, cbi("tinyproxy"), _("Configuration")) +end diff --git a/feeds/luci/applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua b/feeds/luci/applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua new file mode 100644 index 0000000..11f34fb --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua @@ -0,0 +1,240 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008-2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("tinyproxy", translate("Tinyproxy"), + translate("Tinyproxy is a small and fast non-caching HTTP(S)-Proxy")) + +s = m:section(TypedSection, "tinyproxy", translate("Server Settings")) +s.anonymous = true + +s:tab("general", translate("General settings")) +s:tab("privacy", translate("Privacy settings")) +s:tab("filter", translate("Filtering and ACLs")) +s:tab("limits", translate("Server limits")) + + +o = s:taboption("general", Flag, "enabled", translate("Enable Tinyproxy server")) +o.rmempty = false + +function o.write(self, section, value) + if value == "1" then + luci.sys.init.enable("tinyproxy") + else + luci.sys.init.disable("tinyproxy") + end + + return Flag.write(self, section, value) +end + + +o = s:taboption("general", Value, "Port", translate("Listen port"), + translate("Specifies the HTTP port Tinyproxy is listening on for requests")) + +o.optional = true +o.datatype = "port" +o.placeholder = 8888 + + +o = s:taboption("general", Value, "Listen", translate("Listen address"), + translate("Specifies the addresses Tinyproxy is listening on for requests")) + +o.optional = true +o.datatype = "ipaddr" +o.placeholder = "0.0.0.0" + + +o = s:taboption("general", Value, "Bind", translate("Bind address"), + translate("Specifies the address Tinyproxy binds to for outbound forwarded requests")) + +o.optional = true +o.datatype = "ipaddr" +o.placeholder = "0.0.0.0" + + +o = s:taboption("general", Value, "DefaultErrorFile", translate("Error page"), + translate("HTML template file to serve when HTTP errors occur")) + +o.optional = true +o.default = "/usr/share/tinyproxy/default.html" + + +o = s:taboption("general", Value, "StatFile", translate("Statistics page"), + translate("HTML template file to serve for stat host requests")) + +o.optional = true +o.default = "/usr/share/tinyproxy/stats.html" + + +o = s:taboption("general", Flag, "Syslog", translate("Use syslog"), + translate("Writes log messages to syslog instead of a log file")) + + +o = s:taboption("general", Value, "LogFile", translate("Log file"), + translate("Log file to use for dumping messages")) + +o.default = "/var/log/tinyproxy.log" +o:depends("Syslog", "") + + +o = s:taboption("general", ListValue, "LogLevel", translate("Log level"), + translate("Logging verbosity of the Tinyproxy process")) + +o:value("Critical") +o:value("Error") +o:value("Warning") +o:value("Notice") +o:value("Connect") +o:value("Info") + + +o = s:taboption("general", Value, "User", translate("User"), + translate("Specifies the user name the Tinyproxy process is running as")) + +o.default = "nobody" + + +o = s:taboption("general", Value, "Group", translate("Group"), + translate("Specifies the group name the Tinyproxy process is running as")) + +o.default = "nogroup" + + +-- +-- Privacy +-- + +o = s:taboption("privacy", Flag, "XTinyproxy", translate("X-Tinyproxy header"), + translate("Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded requests")) + + +o = s:taboption("privacy", Value, "ViaProxyName", translate("Via hostname"), + translate("Specifies the Tinyproxy hostname to use in the Via HTTP header")) + +o.placeholder = "tinyproxy" +o.datatype = "hostname" + + +s:taboption("privacy", DynamicList, "Anonymous", translate("Header whitelist"), + translate("Specifies HTTP header names which are allowed to pass-through, all others are discarded. Leave empty to disable header filtering")) + + +-- +-- Filter +-- + +o = s:taboption("filter", DynamicList, "Allow", translate("Allowed clients"), + translate("List of IP addresses or ranges which are allowed to use the proxy server")) + +o.placeholder = "0.0.0.0" +o.datatype = "ipaddr" + + +o = s:taboption("filter", DynamicList, "ConnectPort", translate("Allowed connect ports"), + translate("List of allowed ports for the CONNECT method. A single value \"0\" allows all ports")) + +o.placeholder = 0 +o.datatype = "port" + + +s:taboption("filter", FileUpload, "Filter", translate("Filter file"), + translate("Plaintext file with URLs or domains to filter. One entry per line")) + + +s:taboption("filter", Flag, "FilterURLs", translate("Filter by URLs"), + translate("By default, filtering is done based on domain names. Enable this to match against URLs instead")) + + +s:taboption("filter", Flag, "FilterExtended", translate("Filter by RegExp"), + translate("By default, basic POSIX expressions are used for filtering. Enable this to activate extended regular expressions")) + + + s:taboption("filter", Flag, "FilterCaseSensitive", translate("Filter case-sensitive"), + translate("By default, filter strings are treated as case-insensitive. Enable this to make the matching case-sensitive")) + + +s:taboption("filter", Flag, "FilterDefaultDeny", translate("Default deny"), + translate("By default, the filter rules act as blacklist. Enable this option to only allow matched URLs or domain names")) + + +-- +-- Limits +-- + +o = s:taboption("limits", Value, "Timeout", translate("Connection timeout"), + translate("Maximum number of seconds an inactive connection is held open")) + +o.optional = true +o.datatype = "uinteger" +o.default = 600 + + +o = s:taboption("limits", Value, "MaxClients", translate("Max. clients"), + translate("Maximum allowed number of concurrently connected clients")) + +o.datatype = "uinteger" +o.default = 10 + + +o = s:taboption("limits", Value, "MinSpareServers", translate("Min. spare servers"), + translate("Minimum number of prepared idle processes")) + +o.datatype = "uinteger" +o.default = 5 + + +o = s:taboption("limits", Value, "MaxSpareServers", translate("Max. spare servers"), + translate("Maximum number of prepared idle processes")) + +o.datatype = "uinteger" +o.default = 10 + + +o = s:taboption("limits", Value, "StartServers", translate("Start spare servers"), + translate("Number of idle processes to start when launching Tinyproxy")) + +o.datatype = "uinteger" +o.default = 5 + + +o = s:taboption("limits", Value, "MaxRequestsPerChild", translate("Max. requests per server"), + translate("Maximum allowed number of requests per process. If it is exeeded, the process is restarted. Zero means unlimited.")) + +o.datatype = "uinteger" +o.default = 0 + + +-- +-- Upstream +-- + +s = m:section(TypedSection, "upstream", translate("Upstream Proxies"), + translate("Upstream proxy rules define proxy servers to use when accessing certain IP addresses or domains.")) + +s.anonymous = true +s.addremove = true + + +t = s:option(ListValue, "type", translate("Policy"), + translate("Via proxy routes requests to the given target via the specifed upstream proxy, Reject access disables any upstream proxy for the target")) + +t:value("proxy", translate("Via proxy")) +t:value("reject", translate("Reject access")) + + +ta = s:option(Value, "target", translate("Target host"), + translate("Can be either an IP address or range, a domain name or \".\" for any host without domain")) + +ta.rmempty = true +ta.placeholder = "0.0.0.0/0" +ta.datatype = "host(1)" + + +v = s:option(Value, "via", translate("Via proxy"), + translate("Specifies the upstream proxy to use for accessing the target host. Format is address:port")) + +v:depends({type="proxy"}) +v.placeholder = "10.0.0.1:8080" +v.datatype = "ip4addrport" + +return m diff --git a/feeds/luci/applications/luci-app-tinyproxy/luasrc/view/tinyproxy_status.htm b/feeds/luci/applications/luci-app-tinyproxy/luasrc/view/tinyproxy_status.htm new file mode 100644 index 0000000..d43a887 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/luasrc/view/tinyproxy_status.htm @@ -0,0 +1,50 @@ +<% + +if luci.http.formvalue("frame") == "1" then + local uci = require "luci.model.uci".cursor() + local addr = "127.0.0.1" + local port = "8888" + + uci:foreach("tinyproxy", "tinyproxy", + function(s) + addr = s.StatHost or addr + port = s.Port or port + return false + end) + + local data = false + local wget = io.popen("wget -qO- http://%s:%s" % { addr, port }) + if wget then + while true do + local l = wget:read("*l") + if not l then + break + end + + luci.http.write(l) + data = true + end + + wget:close() + end + + if not data then + luci.http.write(translate("Failed to retrieve statistics from url:")) + luci.http.write(" http://%s:%s" % { addr, port }) + end + + return +end + +-%> + +<%+header%> + +
+

<%:Tinyproxy Status%>

+
+ +
+
+ +<%+footer%> diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/ca/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/ca/tinyproxy.po new file mode 100644 index 0000000..69cd99e --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/ca/tinyproxy.po @@ -0,0 +1,339 @@ +# tinyproxy.pot +# generated from ./applications/luci-tinyproxy/luasrc/i18n/tinyproxy.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-07-18 00:04+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "Clients permesos" + +msgid "Allowed connect ports" +msgstr "Ports de connexió permesos" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "Configuració" + +msgid "Connection timeout" +msgstr "Temps d'espera de connexió" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "Habilita el servidor Tinyproxy" + +msgid "Error page" +msgstr "Pàgina d'error" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "Filtra per expressió regular" + +msgid "Filter by URLs" +msgstr "Filtra per adreça" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "Fitxer de filtració" + +msgid "Filtering and ACLs" +msgstr "Filtració i ACLs" + +msgid "General settings" +msgstr "Ajusts generals" + +msgid "Group" +msgstr "Grup" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "Llista blanca de capçaleres" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" +"Llista d'adreces IP o rangs dels quals es permeten utilitzar el servidor " +"intermediari" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" +"Llista de ports permesos per al mètode CONNECT. El valor solter \"0\" permet " +"tots els ports" + +msgid "Listen address" +msgstr "Adreça d'escolta" + +msgid "Listen port" +msgstr "Port d'escolta" + +msgid "Log file" +msgstr "Fitxer de registre" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "Nivell de registre" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "Màx servidors spare" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "Mín servidors spare" + +msgid "Minimum number of prepared idle processes" +msgstr "Nombre mínim de processos ociosos preparats" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "Nombre de processos ociosos que iniciar al iniciar el Tinyproxy" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "Política" + +msgid "Privacy settings" +msgstr "Ajusts de privacitat" + +msgid "Reject access" +msgstr "Rebutja accés" + +msgid "Server Settings" +msgstr "Ajusts de servidor" + +msgid "Server limits" +msgstr "Límits de servidor" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "Pàgina d'estadístiques" + +msgid "Status" +msgstr "Estat" + +msgid "Target host" +msgstr "Màquina destí" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "Estat de Tinyproxy" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy és un proxy HTTP no caché petit i ràpid" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "Utilitza el syslog" + +msgid "User" +msgstr "Usuari" + +msgid "Via hostname" +msgstr "Via nom de host" + +msgid "Via proxy" +msgstr "Via proxy" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" +"Escriu els missatges de registre al syslog en lloc d'un fitxer de registre" + +msgid "X-Tinyproxy header" +msgstr "Capçalera X-Tinyproxy" + +#~ msgid "Allow access from" +#~ msgstr "Permet l'accés des de" + +#~ msgid "Allowed headers for anonymous proxy" +#~ msgstr "Capçaleres permeses pel proxy anònim" + +#~ msgid "Bind outgoing traffic to address" +#~ msgstr "Vincula el tràfic sortint a l'adreça" + +#~ msgid "Ports allowed for CONNECT method" +#~ msgstr "Ports permesos pel mètode CONNECT" + +#~ msgid "0 = disabled, empty = all" +#~ msgstr "0 = desactivats, buit = tots" + +#~ msgid "Error document" +#~ msgstr "Document d'error" + +#~ msgid "Filter list" +#~ msgstr "Llista de filtre" + +#~ msgid "Case sensitive filters" +#~ msgstr "Filtres distingint majúscules i minúscules" + +#~ msgid "Filter list is a whitelist" +#~ msgstr "La llista de filtre és una llista blanca" + +#~ msgid "Extended regular expression filters" +#~ msgstr "Filtres d'expressions regulars exteses" + +#~ msgid "Filter URLs instead of domains" +#~ msgstr "Filtra URLs en comptes de dominis" + +#~ msgid "Listen on address" +#~ msgstr "Escolta a l'adreça" + +#~ msgid "Logfile" +#~ msgstr "Fitxer de registre" + +#~ msgid "Maximum number of clients" +#~ msgstr "Màxim número de clients" + +#~ msgid "Maximum requests per thread" +#~ msgstr "Màximes peticions per fil" + +#~ msgid "Spare servers to start with" +#~ msgstr "Servidors spare amb els que començar" + +#~ msgid "Statistic document" +#~ msgstr "Document estadístic" + +#~ msgid "Write to syslog" +#~ msgstr "Escriu al syslog" + +#~ msgid "Connection Timeout" +#~ msgstr "Temps d'espera excedit" + +#~ msgid "Value of Via-Header" +#~ msgstr "Valor de Via-Header" + +#~ msgid "Include client IP" +#~ msgstr "Inclou client IP" + +#~ msgid "Upstream Control" +#~ msgstr "Control de pujada" + +#~ msgid "Type" +#~ msgstr "Tipus" + +#~ msgid "Upstream Proxy" +#~ msgstr "Proxy de pujada" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/cs/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/cs/tinyproxy.po new file mode 100644 index 0000000..2a2cbdc --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/cs/tinyproxy.po @@ -0,0 +1,258 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-12 20:14+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "Konfigurace" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "Povolit server Tinyproxy" + +msgid "Error page" +msgstr "Chybová stránka" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "Filtrovat podle RegExp" + +msgid "Filter by URLs" +msgstr "Filtrovat podle URL adres" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "Obecné nastavení" + +msgid "Group" +msgstr "Skupina" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "Max. klientů" + +msgid "Max. requests per server" +msgstr "Max. žádostí na server" + +msgid "Max. spare servers" +msgstr "Max. záložních serverů" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "Min. záložních serverů" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "Politika" + +msgid "Privacy settings" +msgstr "Nastavení soukromí" + +msgid "Reject access" +msgstr "Odepřít přístup" + +msgid "Server Settings" +msgstr "Nastavení serveru" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "Stránka statistik" + +msgid "Status" +msgstr "Stav" + +msgid "Target host" +msgstr "Cílový hostitel" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "Stav Tinyproxy" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy je malý a rychlý necachující HTTP(S)-Proxy server" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "Použít syslog" + +msgid "User" +msgstr "Uživatel" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "X-Tinyproxy hlavička" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/de/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/de/tinyproxy.po new file mode 100644 index 0000000..d444872 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/de/tinyproxy.po @@ -0,0 +1,373 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2012-11-28 10:52+0200\n" +"Last-Translator: dunkelschunkel \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" +"Via Proxy leitet Anfragen an das gegebene Ziel über den angegebenen " +"Upstream-Proxy, Zugriff verweigern deaktiviert jegliche Proxies für " +"das Ziel" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" +"Fügt eine \"X-Tinyproxy\" HTTP-Headerzeile mit der Client Adresse in " +"weitergeleitete Anfragen ein" + +msgid "Allowed clients" +msgstr "Erlaubte Clients" + +msgid "Allowed connect ports" +msgstr "Erlaubte Verbindungsports" + +msgid "Bind address" +msgstr "Serveradresse" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" +"Standardmäßig werden einfache POSIX Ausdrücke für die Filterung genutzt, " +"diese Option aktiviert erweiterte reguläre Ausdrücke" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" +"Standardmäßig spielt die Groß- und Kleinschreibung bei der Filterung keine " +"Rolle, diese Option aktiviert die Unterscheidung von Groß- und " +"Kleinschreibung" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" +"Standardmäßig basiert die Filterung auf Domainnamen, diese Option aktiviert " +"das Filtern gegen die volle URL" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" +"Standardmäßig fungieren die Filterregeln als Blacklist, diese Option kehrt " +"diese in eine Whitelist um und lässt nur treffende URLs oder Domains zu" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" +"Kann entweder eine IP-Adresse, ein Domain-Name oder \".\" für jegliche Hosts " +"sein" + +msgid "Configuration" +msgstr "Konfiguration" + +msgid "Connection timeout" +msgstr "Verbindungstimeout" + +msgid "Default deny" +msgstr "Standardmäßig verbieten" + +msgid "Enable Tinyproxy server" +msgstr "Tinyproxy Server aktivieren" + +msgid "Error page" +msgstr "Fehlerseite" + +msgid "Failed to retrieve statistics from url:" +msgstr "Empfangen der Statiken von URL fehlgeschlagen" + +msgid "Filter by RegExp" +msgstr "Filtern nach RegExp" + +msgid "Filter by URLs" +msgstr "Filtern nach URLs" + +msgid "Filter case-sensitive" +msgstr "Filtern nach Groß-/Kleinschreibung" + +msgid "Filter file" +msgstr "Filterdatei" + +msgid "Filtering and ACLs" +msgstr "Filterung und Zugriffsregeln" + +msgid "General settings" +msgstr "Allgemeine Einstellungen" + +msgid "Group" +msgstr "Gruppe" + +msgid "HTML template file to serve for stat host requests" +msgstr "HTML-Vorlage für Statistikseiten" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "HTML-Vorlage für Fehlerseiten" + +msgid "Header whitelist" +msgstr "Headerzeilen-Whitelist" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" +"Liste von IP-Adressen oder Netzbereichen welche diesen Server nutzen dürfen" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" +"Liste erlaubter Ports für \"CONNECT\" Anfragen. Ein einzelner Wert \"0\" " +"erlaubt alle Ports" + +msgid "Listen address" +msgstr "Serveradresse" + +msgid "Listen port" +msgstr "Serverport" + +msgid "Log file" +msgstr "Protokolldatei" + +msgid "Log file to use for dumping messages" +msgstr "Gibt die Datei an, in welche Protokollausgaben geschrieben werden" + +msgid "Log level" +msgstr "Protokolllevel" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "Umfang der Tinyproxy Protokollmeldungen" + +msgid "Max. clients" +msgstr "Max. Clients" + +msgid "Max. requests per server" +msgstr "Max. Anfragen pro Server" + +msgid "Max. spare servers" +msgstr "Max. Prozesszahl" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "Maximal erlaubte Anzahl gleichzeitig verbundener Clients" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" +"Maximal erlaubte Anzahl an Anfragen pro Prozess. Wenn diese erreicht wird, " +"startet der Prozess neu. Null bedeutet unlimitiert." + +msgid "Maximum number of prepared idle processes" +msgstr "Maximale Anzahl an vorgehaltenen Leerlaufprozessen" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" +"Maximale Anzahl an Sekunden, die eine etablierte, inaktive Verbindung offen " +"gehalten wird" + +msgid "Min. spare servers" +msgstr "Min. Prozesszahl" + +msgid "Minimum number of prepared idle processes" +msgstr "Minimale Anzahl an vorgehaltenen Leerlaufprozessen" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "Anzahl zu erzeugender Leerlaufprozesse beim Start von Tinyproxy" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" +"Klartextdatei mit zu filternden URLs oder Domains. Ein Eintrag pro Zeile." + +msgid "Policy" +msgstr "Verfahrensweise" + +msgid "Privacy settings" +msgstr "Privatsphäre" + +msgid "Reject access" +msgstr "Verbiete Zugriff" + +msgid "Server Settings" +msgstr "Servereinstellungen" + +msgid "Server limits" +msgstr "Serverlimits" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" +"Spezifiziert Headerzeilen welche durch den Proxyserver durchgereicht werden " +"dürfen, alle anderen werden entfernt. Leer lassen um den Filter zu " +"deaktivieren" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "Konfiguriert den Port an welchem Tinyproxy auf Anfragen wartet" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" +"Konfiguriert den Hostname, welchen Tinyproxy in die \"Via\" Headerzeile " +"schreibt" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" +"Konfiguriert die lokale IP-Adresse welche Tinyproxy für ausgehende, " +"weitergeleitete Anfragen benutzt" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" +"Konfiguriert die IP-Adressen auf welchen Tinyproxy Anfragen entgegen nimmt" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" +"Spezifiziert den UNIX-Gruppennamen mit welchem der Tinyproxy Prozess läuft" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" +"Spezifiziert den Upstream-Proxy über welchen auf den Zielhost zugegriffen " +"wird. Das Format ist IP-Adresse:Port" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" +"Spezifiziert den UNIX-Nutzernamen mit welchem der Tinyproxy Prozess läuft" + +msgid "Start spare servers" +msgstr "Starte Leerlaufserver" + +msgid "Statistics page" +msgstr "Statistikseite" + +msgid "Status" +msgstr "Status" + +msgid "Target host" +msgstr "Zielhost" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "Status Tinyproxy" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" +"Tinyproxy ist ein schlanker HTTP(S)-Proxy ohne eigenen Zwischenspeicher" + +msgid "Upstream Proxies" +msgstr "Upstream-Proxies" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" +"Upstream-Proxy-Regeln definieren Proxy-Server welche immer dann genutzt " +"werden wenn bestimmte IP-Adressen oder Domains angefragt werden." + +msgid "Use syslog" +msgstr "Nutze den Systemprotokolldienst" + +msgid "User" +msgstr "Benutzername" + +msgid "Via hostname" +msgstr "\"Via\" Hostname" + +msgid "Via proxy" +msgstr "Zwischenproxy" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" +"Schreibt Protokolleinträge an den Protokolldienst statt in eine separate " +"Protokolldatei." + +msgid "X-Tinyproxy header" +msgstr "X-Tinyproxy Headerzeile" + +#~ msgid "Allow access from" +#~ msgstr "Proxyzugang erlauben von" + +#~ msgid "Allowed headers for anonymous proxy" +#~ msgstr "Erlaube Header für anonymen Proxy" + +#~ msgid "Bind outgoing traffic to address" +#~ msgstr "Ausgehendenden Verkehr an Adresse binden" + +#~ msgid "Ports allowed for CONNECT method" +#~ msgstr "Ports für CONNECT-Methode" + +#~ msgid "0 = disabled, empty = all" +#~ msgstr "0 = deaktiviert, leer = alle" + +#~ msgid "Error document" +#~ msgstr "Fehlerseite" + +#~ msgid "Filter list" +#~ msgstr "Filterliste" + +#~ msgid "Case sensitive filters" +#~ msgstr "Filter unterscheiden Groß-/Kleinschreibung" + +#~ msgid "Filter list is a whitelist" +#~ msgstr "Filterliste ist eine Whitelist" + +#~ msgid "Extended regular expression filters" +#~ msgstr "Erweiterte reguläre Ausdrücke für Filter" + +#~ msgid "Filter URLs instead of domains" +#~ msgstr "Filtere URLs statt Domains" + +#~ msgid "Listen on address" +#~ msgstr "An Adresse binden" + +#~ msgid "Logfile" +#~ msgstr "Protokolldatei" + +#~ msgid "Maximum number of clients" +#~ msgstr "Maximale Anzahl an Clients" + +#~ msgid "Maximum requests per thread" +#~ msgstr "Maximale Anfragen pro Prozess" + +#~ msgid "Spare servers to start with" +#~ msgstr "Anfängliche Prozesszahl" + +#~ msgid "Statistic document" +#~ msgstr "Statistikseite" + +#~ msgid "Write to syslog" +#~ msgstr "In Systemprotokoll schreiben" + +#~ msgid "Connection Timeout" +#~ msgstr "Verbindungstimeout" + +#~ msgid "Value of Via-Header" +#~ msgstr "Wert des Via-Headers" + +#~ msgid "Include client IP" +#~ msgstr "Client-IP übertragen" + +#~ msgid "Upstream Control" +#~ msgstr "Zugangskontrolle" + +#~ msgid "Type" +#~ msgstr "Methode" + +#~ msgid "Upstream Proxy" +#~ msgstr "Zugangsproxy" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/el/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/el/tinyproxy.po new file mode 100644 index 0000000..718424e --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/el/tinyproxy.po @@ -0,0 +1,283 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-28 02:08+0200\n" +"PO-Revision-Date: 2012-03-18 16:25+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" +"Το μέσω proxy δρομολογεί αιτήσεις προς τον συγκεκριμένο προορισμό " +"μέσω του καθοριζόμενου διαμεσολαβητή ανωτέρου επιπέδου, Το απόρριψη " +"πρόσβασης απενεργοποιεί τη χρήση διαμεσολαβητή ανωτέρου επιπέδου για το " +"συγκεκριμένο προορισμό" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" +"Προσθέτει μια κεφαλίδα HTTP \"X-Tinyproxy\" με τη διεύθυνση IP του πελάτη " +"στις προωθούμενες αιτήσεις" + +msgid "Allowed clients" +msgstr "Επιτρεπόμενοι πελάτες" + +msgid "Allowed connect ports" +msgstr "Επιτρεπόμενες θύρες σύνδεσης" + +#, fuzzy +msgid "Bind address" +msgstr "Διεύθυνση στην οποία ακούει η υπηρεσία" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" +"Προεπιλεγμένα, χρησιμοποιούνται απλές κανονικές εκφράσεις POSIX για το " +"φιλτράρισμα. Ενεργοποιήστε αυτή την επιλογή για να χρησιμοποιούνται " +"εκτεταμένες κανονικές εκφράσεις" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" +"Προεπιλεγμένα, το φιλτράρισμα με συμβολοσειρές γίνεται χωρίς διάκριση πεζών " +"κεφαλαίων. Ενεργοποιήστε αυτή την επιλογή για να γίνεται διάκριση πεζών " +"κεφαλαίων" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" +"Προεπιλεγμένα, το φιλτράρισμα γίνεται βάσει του ονόματος τομέα. " +"Ενεργοποιήστε αυτή την επιλογή για να γίνεται βάσει URL" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" +"Προεπιλεγμένα, οι κανόνες φιλτραρίσματος λειτουργούν ως μαύρη λίστα. " +"Ενεργοποιήστε αυτή την επιλογή ώστε να επιτρέπονται μόνο τα ονόματα τομέα ή " +"URLs που ταιριάζουν" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" +"Μπορεί να είναι μια IP διεύθυνση ή εύρος, ένα όνομα τομέα ή \".\" για " +"οποιοδήποτε σύστημα χωρίς όνομα τομέα" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "Χρονικό όριο σύνδεσης" + +msgid "Default deny" +msgstr "Άρνηση προεπιλεγμένα" + +msgid "Enable Tinyproxy server" +msgstr "Ενεργοποίηση διαμεσολαβητή Tinyproxy" + +msgid "Error page" +msgstr "Σελίδα σφάλματος" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "Φιλτράρισμα με Κανονικές Εκφράσεις" + +msgid "Filter by URLs" +msgstr "Φιλτράρισμα με URL" + +msgid "Filter case-sensitive" +msgstr "Φιλτράρισμα με διάκριση πεζών/κεφαλαίων" + +msgid "Filter file" +msgstr "Αρχείο φίλτρων" + +msgid "Filtering and ACLs" +msgstr "Φιλτράρισμα και λίστες ελέγχου πρόσβασης" + +msgid "General settings" +msgstr "Γενικές ρυθμίσεις" + +msgid "Group" +msgstr "Ομάδα" + +msgid "HTML template file to serve for stat host requests" +msgstr "" +"Αρχείο προτύπου HTML που στέλνεται σε αιτήσεις για στατιστικά του συστήματος" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "Αρχείο προτύπου HTML που στέλνεται όταν προκύπτουν σφάλματα HTML" + +msgid "Header whitelist" +msgstr "Λευκή λίστα κεφαλίδων" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" +"Λίστα διευθύνσεων IP ή εύρη αυτών στις οποίες επιτρέπεται η χρήση του " +"διαμεσολαβητή" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/en/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/en/tinyproxy.po new file mode 100644 index 0000000..4650f3e --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/en/tinyproxy.po @@ -0,0 +1,331 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:35+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "Log level" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "Max. spare servers" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "Min. spare servers" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "Reject access" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "Target host" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "Via proxy" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" + +#~ msgid "Allow access from" +#~ msgstr "Allow access from" + +#~ msgid "Allowed headers for anonymous proxy" +#~ msgstr "Allowed headers for anonymous proxy" + +#~ msgid "Bind outgoing traffic to address" +#~ msgstr "Bind outgoing traffic to address" + +#~ msgid "Ports allowed for CONNECT method" +#~ msgstr "Ports allowed for CONNECT method" + +#~ msgid "0 = disabled, empty = all" +#~ msgstr "0 = disabled, empty = all" + +#~ msgid "Error document" +#~ msgstr "Error document" + +#~ msgid "Filter list" +#~ msgstr "Filter list" + +#~ msgid "Case sensitive filters" +#~ msgstr "Case sensitive filters" + +#~ msgid "Filter list is a whitelist" +#~ msgstr "Filter list is a whitelist" + +#~ msgid "Extended regular expression filters" +#~ msgstr "Extended regular expression filters" + +#~ msgid "Filter URLs instead of domains" +#~ msgstr "Filter URLs instead of domains" + +#~ msgid "Listen on address" +#~ msgstr "Listen on address" + +#~ msgid "Logfile" +#~ msgstr "Logfile" + +#~ msgid "Maximum number of clients" +#~ msgstr "Maximum number of clients" + +#~ msgid "Maximum requests per thread" +#~ msgstr "Maximum requests per thread" + +#~ msgid "Spare servers to start with" +#~ msgstr "Spare servers to start with" + +#~ msgid "Statistic document" +#~ msgstr "Statistic document" + +#~ msgid "Write to syslog" +#~ msgstr "Write to syslog" + +#~ msgid "Connection Timeout" +#~ msgstr "Connection Timeout" + +#~ msgid "Value of Via-Header" +#~ msgstr "Value of Via-Header" + +#~ msgid "Include client IP" +#~ msgstr "Include client IP" + +#~ msgid "Upstream Control" +#~ msgstr "Upstream Control" + +#~ msgid "Type" +#~ msgstr "Type" + +#~ msgid "Upstream Proxy" +#~ msgstr "Upstream Proxy" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/es/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/es/tinyproxy.po new file mode 100644 index 0000000..c9faff1 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/es/tinyproxy.po @@ -0,0 +1,354 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-10-07 15:08+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" +"Vía proxy enruta las peticiones al destino vía el proxy superior " +"especificado, Rechazar acceso desactiva cualquier proxy superior al " +"destino" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" +"Añade una cabecera HTTP con \"X-Tinyproxy\" con la dirección IP del cliente " +"a las peticiones retransmitidas" + +msgid "Allowed clients" +msgstr "Clientes permitidos" + +msgid "Allowed connect ports" +msgstr "Puertos permitidos" + +msgid "Bind address" +msgstr "Dirección de asociación" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" +"Expresiones regulares extendidas. Por defecto se filtra con expresiones " +"regulares POSIX básicas" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "Distinguir mayúsculas y minúsculas" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "Comparar con URLs. Por defecto el filtro se basa en nombres de dominio" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" +"Tratar el fichero de filtro como una lista de máquinas a permitir. Por " +"defecto actúa como una lista negra" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" +"Puede ser un rango de IPs, un nombre de dominio o \".\" para cualquier " +"máquina sin dominio" + +msgid "Configuration" +msgstr "Configuración" + +msgid "Connection timeout" +msgstr "Espera de conexión" + +msgid "Default deny" +msgstr "Denegar por defecto" + +msgid "Enable Tinyproxy server" +msgstr "Activar el servidor Tinyproxy" + +msgid "Error page" +msgstr "Página de error" + +msgid "Failed to retrieve statistics from url:" +msgstr "No se han podido obtener estadísticas de:" + +msgid "Filter by RegExp" +msgstr "Filtrar por RegExp" + +msgid "Filter by URLs" +msgstr "Filtrar por URLs" + +msgid "Filter case-sensitive" +msgstr "Distinguir entre mayúsculas y minúsculas" + +msgid "Filter file" +msgstr "Fichero de filtro" + +msgid "Filtering and ACLs" +msgstr "Filtrado y ACLs" + +msgid "General settings" +msgstr "Configuración general" + +msgid "Group" +msgstr "Grupo" + +msgid "HTML template file to serve for stat host requests" +msgstr "" +"FIchero con la plantilla HTML a usar para las peticiones de estadísticas" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "Fichero con la plantilla HTTP a usar cuando ocurra algún error" + +msgid "Header whitelist" +msgstr "Cabeceras autorizadas" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "Direcciones IP o rangos a los que se permite usar el servidor proxy" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" +"Lista de puertos permitidos al método CONNECT. Use 0 para todos los puertos" + +msgid "Listen address" +msgstr "Dirección de escucha" + +msgid "Listen port" +msgstr "Puerto de escucha" + +msgid "Log file" +msgstr "Registro" + +msgid "Log file to use for dumping messages" +msgstr "Fichero de volcado de mensajes" + +msgid "Log level" +msgstr "Nivel de registro" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "Nivel de registro del proceso Tinyproxy" + +msgid "Max. clients" +msgstr "Clientes máximos" + +msgid "Max. requests per server" +msgstr "Peticiones máximas por servidor" + +msgid "Max. spare servers" +msgstr "Procesos servidores máximos" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "Máximo de clientes conectados simultáneamente" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" +"Peticiones máximas por proceso. Si se supera el proceso es arrancado de " +"nuevo. Para ilimitados indique 0." + +msgid "Maximum number of prepared idle processes" +msgstr "Máximo de procesos inactivos" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "Segundos máximos que se tiene una conexión inactiva abierta" + +msgid "Min. spare servers" +msgstr "Procesos servidores mínimos" + +msgid "Minimum number of prepared idle processes" +msgstr "Mínimo de procesos inactivos" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "Procesos inactivos a arrancar cuando se lanza Tinyproxy" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "Fichero plano con URLs o dominios a filtrar. Uno por línea" + +msgid "Policy" +msgstr "Política" + +msgid "Privacy settings" +msgstr "Configuración de privacidad" + +msgid "Reject access" +msgstr "Rechazar acceso" + +msgid "Server Settings" +msgstr "Configuración del servidor" + +msgid "Server limits" +msgstr "Límites del servidor" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" +"Nombres de cabeceras HTTP que se dejan pasar. el resto se descartan. Deje en " +"blanco para desactivar el filtrado de cabeceras" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "Puerto de escucha de peticiones" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "Nombre de máquina a usar en la cabecera HTTP \"Via\"" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" +"Dirección a la que se asocia Tinyproxy para peticiones de traspaso salientes" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "Direcciones de escucha de peticiones" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "Nombre de grupo en el que se ejecuta el proceso Tinyproxy" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" +"Proxy superior a usar para llegar a la máquina destino. El formato es " +"dirección_puerto" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "Nombre de usuario con en el que se ejecuta el proceso Tinyproxy" + +msgid "Start spare servers" +msgstr "Arrancar servidores libres" + +msgid "Statistics page" +msgstr "Estadísticas" + +msgid "Status" +msgstr "Estado" + +msgid "Target host" +msgstr "Máquina destino" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "Estado de Tinyproxy" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy es un proxy sin cache HTTP/HTTPS pequeño y rápido" + +msgid "Upstream Proxies" +msgstr "Proxies superiores" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" +"Las reglas de proxy superior definen qué servidores usar cuando se accede a " +"ciertas direcciones IP o dominios." + +msgid "Use syslog" +msgstr "Usar SysLog" + +msgid "User" +msgstr "Usuario" + +msgid "Via hostname" +msgstr "Nombre de máquina en \"Via\"" + +msgid "Via proxy" +msgstr "Via proxy" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "Escribe los mensajes de registro en SysLog en vez de en un fichero" + +msgid "X-Tinyproxy header" +msgstr "Cabecera X-Tinyproxy" + +#~ msgid "Allow access from" +#~ msgstr "Permitir acceso desde" + +#~ msgid "Allowed headers for anonymous proxy" +#~ msgstr "Encabezados permitidos de proxies anónimos" + +#~ msgid "Bind outgoing traffic to address" +#~ msgstr "Ligar tráfico de salida a la dirección" + +#~ msgid "Ports allowed for CONNECT method" +#~ msgstr "Puertos permitidos para el método CONNECT" + +#~ msgid "0 = disabled, empty = all" +#~ msgstr "0 = Deshabilitado, vacío = todos" + +#~ msgid "Error document" +#~ msgstr "Error en documento" + +#~ msgid "Filter list" +#~ msgstr "Lista de filtros" + +#~ msgid "Case sensitive filters" +#~ msgstr "Filtros de mayúsculas y minúsculas " + +#~ msgid "Filter list is a whitelist" +#~ msgstr "La Lista de Filtros es una lista blanca" + +#~ msgid "Extended regular expression filters" +#~ msgstr "Filtros extendido para expresiones regulares" + +#~ msgid "Filter URLs instead of domains" +#~ msgstr "Filtrar URLs en vez de dominios" + +#~ msgid "Listen on address" +#~ msgstr "Escuchar en dirección" + +#~ msgid "Logfile" +#~ msgstr "Logfile" + +#~ msgid "Maximum number of clients" +#~ msgstr "Número máximo de clientes" + +#~ msgid "Maximum requests per thread" +#~ msgstr "Máximas peticiones por hilo" + +#~ msgid "Spare servers to start with" +#~ msgstr "Spare servers to start with" + +#~ msgid "Statistic document" +#~ msgstr "Documento de estadística" + +#~ msgid "Write to syslog" +#~ msgstr "Escribir al syslog" + +#~ msgid "Connection Timeout" +#~ msgstr "Tiempo agotado para la conexión" + +#~ msgid "Value of Via-Header" +#~ msgstr "Valor para Via-Header" + +#~ msgid "Include client IP" +#~ msgstr "Incluir IP del cliente" + +#~ msgid "Upstream Control" +#~ msgstr "Control de subida (upstream)" + +#~ msgid "Type" +#~ msgstr "Tipo" + +#~ msgid "Upstream Proxy" +#~ msgstr "Proxy de subida (upstream)" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/fr/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/fr/tinyproxy.po new file mode 100644 index 0000000..d359442 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/fr/tinyproxy.po @@ -0,0 +1,372 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-01-26 12:52+0200\n" +"Last-Translator: kyas \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" +"Via proxy route les requêtes vers la cible donnée via le mandataire " +"amont donné, Reject access interdit tout mandataire amont comme " +"cible" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" +"Ajoute un en-tête HTTP \"X-Tinyproxy\" avec l'adresse IP du client aux " +"requêtes retransmises" + +msgid "Allowed clients" +msgstr "Clients autorisés" + +msgid "Allowed connect ports" +msgstr "Ports de connexion autorisés" + +msgid "Bind address" +msgstr "Adresse en écoute" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" +"Par défaut, le filtrage utilise des expressions POSIX basiques. Activez-ceci " +"pour permettre l'utilisation d'expressions régulières étendues" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" +"Par défaut, les chaînes de caractères des filtres sont utilisées sans faire " +"attention à leurs casses. Activez-ceci pour les rendre sensible à la casse " +"des caractères" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" +"Par défaut, le filtrage s'effectue sur les noms de domaines. Activez-ceci " +"pour l'appliquer plutôt aux URLs" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" +"Par défaut, les règles de filtrages décrivent ce qui doit être interdit. " +"Activez cette option pour n'autoriser que les noms de domaines ou URLs qui " +"correspondent aux règles" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" +"Ce peut être soit une adresse ou une gamme d'adresses IP, un nom de domaine, " +"ou \".\" pour n'importe quel nom d'hôte sans domaine" + +msgid "Configuration" +msgstr "Configuration" + +msgid "Connection timeout" +msgstr "Délai de connexion" + +msgid "Default deny" +msgstr "Interdit par défaut" + +msgid "Enable Tinyproxy server" +msgstr "Activer le serveur Tinyproxy" + +msgid "Error page" +msgstr "Page d'erreur" + +msgid "Failed to retrieve statistics from url:" +msgstr "Impossible de récupérer les statistiques de l'URL:" + +msgid "Filter by RegExp" +msgstr "Filtrage par RegExp" + +msgid "Filter by URLs" +msgstr "Filtrage par URLs" + +msgid "Filter case-sensitive" +msgstr "Filtrage sensible à la casse" + +msgid "Filter file" +msgstr "Fichier des filtres" + +msgid "Filtering and ACLs" +msgstr "Filtrage et ACLs" + +msgid "General settings" +msgstr "Paramètres généraux" + +msgid "Group" +msgstr "Groupe" + +msgid "HTML template file to serve for stat host requests" +msgstr "" +"Modèle de fichier HTML à utiliser pour les requêtes de statistiques des hôtes" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "Modèle de fichier HTML à utiliser quand une erreur HTTP survient" + +msgid "Header whitelist" +msgstr "Liste des en-têtes autorisés" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" +"Liste des adresses IP ou gammes d'adresses IP autorisées à utiliser le " +"serveur mandataire" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" +"Liste des ports autorisés pour la méthode CONNECT. Une valeur \"0\" unique " +"autorises tous les ports" + +msgid "Listen address" +msgstr "Adresse en écoute" + +msgid "Listen port" +msgstr "Port en écoute" + +msgid "Log file" +msgstr "Fichier journal" + +msgid "Log file to use for dumping messages" +msgstr "Fichier-journal utilisé pour y copier les messages" + +msgid "Log level" +msgstr "Niveau de log" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "Verbosité du journal du processus Tinyproxy" + +msgid "Max. clients" +msgstr "Nombre max. de clients" + +msgid "Max. requests per server" +msgstr "Nombre max. de requêtes par serveur" + +msgid "Max. spare servers" +msgstr "Nombre Maximum de processus serveur" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "Nombre max autorisé de clients connectés en même temps" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" +"Nombre maximum autorisé de requêtes par processus. S'il est dépassé, le " +"processus est relancé. Un zéro désactive cette limite." + +msgid "Maximum number of prepared idle processes" +msgstr "Nombre maximum de processus lancés, prêts à traiter des requêtes" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" +"Une connexion inactive est maintenue ouverte pendant cette durée maximum (en " +"secondes)" + +msgid "Min. spare servers" +msgstr "Nombre Minimum de processus serveur" + +msgid "Minimum number of prepared idle processes" +msgstr "Nombre minimum de processus lancés, prêts à traiter des requêtes" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" +"Nombre de processus lancés en sus, prêts à traiter des requêtes, au " +"démarrage de Tinyproxy" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" +"Fichier-texte contenant les URLs ou noms de domaines à filtrer, un par ligne" + +msgid "Policy" +msgstr "Action" + +msgid "Privacy settings" +msgstr "Paramètres de confidentialité" + +msgid "Reject access" +msgstr "Refuser l'accès" + +msgid "Server Settings" +msgstr "Paramètres du serveur" + +msgid "Server limits" +msgstr "Limites du serveur" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" +"Indique les noms des entêtes HTTP qui sont autorisées à transiter, tous les " +"autres seront retirés. Laisser vide pour désactiver le filtrage des entêtes" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "Indique le port HTTP où Tinyproxy est en écoute de requêtes" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" +"Indique le nom d'hôte que Tinyproxy utilisera dans l'entête HTTP « Via »" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" +"Décrit l'adresse que Tinyproxy utilisera pour les requêtes retransmises à " +"l'extérieur" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "Indique les adresses où Tinyproxy est en écoute de requêtes" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" +"Indique le nom de groupe sous lequel les processus Tinyproxy fonctionnent" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" +"Indique un mandataire amont à utiliser pour atteindre l'hôte cible. Le " +"format est adresse:port" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" +"Indique le nom d'utilisateur sous lequel les processus Tinyproxy fonctionnent" + +msgid "Start spare servers" +msgstr "Serveurs en surplus au démarrage" + +msgid "Statistics page" +msgstr "Page de statistiques" + +msgid "Status" +msgstr "Statut" + +msgid "Target host" +msgstr "Hôte de destination" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "Statut Tinyproxy" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" + +msgid "Upstream Proxies" +msgstr "Mandataires amont" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" +"Les règles de mandataires amont définissent les serveurs mandataire à " +"utiliser pour l'accès à certaines adresses IP ou domaines." + +msgid "Use syslog" +msgstr "Utiliser syslog" + +msgid "User" +msgstr "Utilisateur" + +msgid "Via hostname" +msgstr "nom d'hôte « Via »" + +msgid "Via proxy" +msgstr "Via proxy" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "Envoyer les messages à syslog plutôt que dans un fichier-journal" + +msgid "X-Tinyproxy header" +msgstr "Entête X-Tinyproxy" + +#~ msgid "Allow access from" +#~ msgstr "Allow access from" + +#~ msgid "Allowed headers for anonymous proxy" +#~ msgstr "Allowed headers for anonymous proxy" + +#~ msgid "Bind outgoing traffic to address" +#~ msgstr "Lier le trafic sortant à l'adresse ip" + +#~ msgid "Ports allowed for CONNECT method" +#~ msgstr "Ports allowed for CONNECT method" + +#~ msgid "0 = disabled, empty = all" +#~ msgstr "0 = disabled, empty = all" + +#~ msgid "Error document" +#~ msgstr "Fichier d'erreur" + +#~ msgid "Filter list" +#~ msgstr "Liste de filtres" + +#~ msgid "Case sensitive filters" +#~ msgstr "Case sensitive filters" + +#~ msgid "Filter list is a whitelist" +#~ msgstr "Filter list is a whitelist" + +#~ msgid "Extended regular expression filters" +#~ msgstr "Extended regular expression filters" + +#~ msgid "Filter URLs instead of domains" +#~ msgstr "Filter URLs instead of domains" + +#~ msgid "Listen on address" +#~ msgstr "Listen on address" + +#~ msgid "Logfile" +#~ msgstr "Chemin du fichier de log" + +#~ msgid "Maximum number of clients" +#~ msgstr "Nombre maximum de clients" + +#~ msgid "Maximum requests per thread" +#~ msgstr "Maximum de connexion par processus" + +#~ msgid "Spare servers to start with" +#~ msgstr "Nombre de processus serveur lancés au demarrage" + +#~ msgid "Statistic document" +#~ msgstr "Fichier de statistiques" + +#~ msgid "Write to syslog" +#~ msgstr "Écrire dans le journal système (Syslog)" + +#~ msgid "Connection Timeout" +#~ msgstr "Délai de connexion" + +#~ msgid "Value of Via-Header" +#~ msgstr "Valeur de l'entête \"VIA\" utilisée comme nom d'hôte" + +#~ msgid "Include client IP" +#~ msgstr "Inclure l'ip du client" + +#~ msgid "Upstream Control" +#~ msgstr "Upstream Control" + +#~ msgid "Type" +#~ msgstr "Type" + +#~ msgid "Upstream Proxy" +#~ msgstr "Proxy" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/he/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/he/tinyproxy.po new file mode 100644 index 0000000..5c4dddd --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/he/tinyproxy.po @@ -0,0 +1,255 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/hu/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/hu/tinyproxy.po new file mode 100644 index 0000000..5c4dddd --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/hu/tinyproxy.po @@ -0,0 +1,255 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/it/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/it/tinyproxy.po new file mode 100644 index 0000000..34528c1 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/it/tinyproxy.po @@ -0,0 +1,265 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-12-15 19:29+0200\n" +"Last-Translator: claudyus \n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" +"Aggiungi una intestazione http \"X-Tinyproxy\" contenente l'IP del client a " +"cui forwardare la richiesta" + +msgid "Allowed clients" +msgstr "Client permessi" + +msgid "Allowed connect ports" +msgstr "Porte di connessione permesse" + +msgid "Bind address" +msgstr "Bind Address" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" +"Di default, il filto è basato sul nome di dominio. Abilita questa opzione " +"per effettuare il match con URL" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "Configurazione" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "Abilita il server Tinyproxy" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "Impossibile recuperare le statistiche dall'url:" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" +"Lista di indirizzi IP o range di indirizzi a cui è permesso l'uso del proxy" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "Numero massimo di client simultanei permessi" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/ja/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/ja/tinyproxy.po new file mode 100644 index 0000000..03ea890 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/ja/tinyproxy.po @@ -0,0 +1,280 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2011-10-05 17:53+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" +"転送するリクエストのHTTPヘッダに\"X-Tinyproxy\"及びクライアントIPアドレスを追" +"加します。" + +msgid "Allowed clients" +msgstr "接続を許可するクライアント" + +msgid "Allowed connect ports" +msgstr "接続を許可するポート番号" + +msgid "Bind address" +msgstr "バインドするIPアドレス" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" +"標準では、基本的なPOSIX正規表現がフィルタリングに使用されますが、このオプショ" +"ンが有効に設定されている場合、拡張版のPOSIX正規表現が用いられます。" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" +"標準では、フィルターの文字列は大文字小文字を区別しませんが、このオプションが" +"有効に設定されている場合、区別してフィルタリングを行います。" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" +"標準では、ドメイン名を使用してフィルタリングを行いますが、このオプションが有" +"効に設定されている場合、代わりにURLに対してフィルタリングを行います。" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" +"標準では、フィルタリング・ルールはブラックリストとして動作しますが、このオプ" +"ションが有効に設定されている場合、URLまたはドメイン名が一致した場合のみ、接続" +"が許可されます。" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "接続タイムアウト" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "Tinyproxy サーバーを有効にする" + +msgid "Error page" +msgstr "エラーページ" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "正規表現フィルタリング" + +msgid "Filter by URLs" +msgstr "URL フィルタリング" + +msgid "Filter case-sensitive" +msgstr "大文字小文字を区別してフィルタリング" + +msgid "Filter file" +msgstr "フィルタファイル" + +msgid "Filtering and ACLs" +msgstr "フィルタリングとアクセス制御" + +msgid "General settings" +msgstr "基本設定" + +msgid "Group" +msgstr "グループ" + +msgid "HTML template file to serve for stat host requests" +msgstr "リクエスト数を表示するHTMLテンプレートファイル" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "HTTPエラー時に表示するHTMLテンプレートファイル" + +msgid "Header whitelist" +msgstr "ヘッダー・ホワイトリスト" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "プロキシサーバーの使用を許可するIPアドレスリストです。" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" +"プロキシサーバーから接続可能なポートリストです。\"0\"を設定した場合、すべての" +"ポートを許可します。" + +msgid "Listen address" +msgstr "待受アドレス" + +msgid "Listen port" +msgstr "待受ポート" + +msgid "Log file" +msgstr "ログファイル" + +msgid "Log file to use for dumping messages" +msgstr "メッセージを書き込むログファイルを指定します。" + +msgid "Log level" +msgstr "ログレベル" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "Tinyproxyプロセスのログの詳細度を設定" + +msgid "Max. clients" +msgstr "最大クライアント数" + +msgid "Max. requests per server" +msgstr "サーバー毎の最大リクエスト数" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" +"プロセス毎の許可される最大リクエスト数を設定します。設定値を超えた場合、プロ" +"セスを再起動します。0を入力すると、無制限に設定されます。" + +msgid "Maximum number of prepared idle processes" +msgstr "アイドル状態で準備するプロセスの最大数" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "アイドル状態で準備するプロセスの最小数" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "ポリシー" + +msgid "Privacy settings" +msgstr "プライバシー設定" + +msgid "Reject access" +msgstr "アクセス拒否" + +msgid "Server Settings" +msgstr "サーバー設定" + +msgid "Server limits" +msgstr "サーバー制限設定" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "リクエストに対して、Tinyproxyが待ち受けるHTTPポートを設定します" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "リクエストに対して、Tinyproxyが待ち受けるアドレスを設定します。" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "Tinyproxyを実行するグループを設定します" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" +"特定のホストにアクセスする際に使用する、上位のプロキシサーバーを設定します。" +"書式は アドレス:ポート です。" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "Tinyproxyを実行するユーザーを設定します" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "宛先ホスト" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" +"Tinyproxyは、軽量で高速なキャッシュを行わないHTTP(S)-プロキシサーバーです。" + +msgid "Upstream Proxies" +msgstr "上位のプロキシサーバー" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" +"特定のIPアドレスやドメインに接続する場合に、上位のプロキシサーバーを使用する" +"ように設定することができます。" + +msgid "Use syslog" +msgstr "Syslogを使用する" + +msgid "User" +msgstr "ユーザー" + +msgid "Via hostname" +msgstr "経由するホスト名" + +msgid "Via proxy" +msgstr "経由するプロキシ" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "ログファイルの代わりにsyslogへメッセージを記録します" + +msgid "X-Tinyproxy header" +msgstr "X-Tinyproxy ヘッダー" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/ms/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/ms/tinyproxy.po new file mode 100644 index 0000000..08ed7dc --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/ms/tinyproxy.po @@ -0,0 +1,254 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/no/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/no/tinyproxy.po new file mode 100644 index 0000000..5c4dddd --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/no/tinyproxy.po @@ -0,0 +1,255 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/pl/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/pl/tinyproxy.po new file mode 100644 index 0000000..8e3bfc7 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/pl/tinyproxy.po @@ -0,0 +1,292 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-04 11:50+0200\n" +"Last-Translator: Staszek \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" +"Przez proxy kieruje żądania do danego celu przez określone " +"\"upstream proxy\", Odrzuć dostęp wyłącza jakiekolwiek \"upstream " +"proxy\" dla danego celu." + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" +"Dodaje nagłówek http \"X-Tinyproxy\" z adresem IP klienta do przekazywanych " +"żądań" + +msgid "Allowed clients" +msgstr "Akceptowane klienty" + +msgid "Allowed connect ports" +msgstr "Akceptowane porty połączenia" + +msgid "Bind address" +msgstr "zwiąż adres" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" +"Domyślnie do filtrowania używane są podstawowe wyrażenia POSIX. Włącz tę " +"opcję, aby aktywować rozszerzone wyrażenia regularne." + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" +"Domyślnie ciągi filtrowania traktowane są jako wrażliwe na wielkość liter. " +"Włącz tę opcję, aby dopasowania były wrażliwe na wielkości liter." + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" +"Domyślnie filtrowanie jest wykonywane w oparciu o nazwy domen. Włącz tę " +"opcję, aby zamiast tego używać URL-i." + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" +"Domyślnie, reguły filtra działają jako czarna lista. Zaznacz tę opcję, aby " +"zezwalać wyłącznie na pasujące URL-e lub nazwy domen." + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" +"Może być adresem lub zakresem adresów IP, nazwą domeny lub \".\" dla " +"dowolnego hosta bez domeny." + +msgid "Configuration" +msgstr "Konfiguracja" + +msgid "Connection timeout" +msgstr "Limit czasu połączenia" + +msgid "Default deny" +msgstr "Domyślnie blokuj" + +msgid "Enable Tinyproxy server" +msgstr "Włącz serwer Tinyproxy" + +msgid "Error page" +msgstr "Strona błędu" + +msgid "Failed to retrieve statistics from url:" +msgstr "Nieudane pobieranie statystyk z URL-a:" + +msgid "Filter by RegExp" +msgstr "Filtruj z użyciem rozszerzonych wyrażeń regularnych" + +msgid "Filter by URLs" +msgstr "Filtruj po adresach URL" + +msgid "Filter case-sensitive" +msgstr "Filtr wrażliwy na wielkość liter" + +msgid "Filter file" +msgstr "Plik z filtrami" + +msgid "Filtering and ACLs" +msgstr "Filtrowanie i Listy kontroli dostępu" + +msgid "General settings" +msgstr "Ustawienia ogólne" + +msgid "Group" +msgstr "Grupa" + +msgid "HTML template file to serve for stat host requests" +msgstr "Plik szablonu HTML używany do prezentacji statystyk" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "Plik szablonu HTML używany do prezentacji komunikatów błędu" + +# Zgaduję, że to ma coś wspólnego z nagłówkami zapytań - stąd takie tłumaczenie. +msgid "Header whitelist" +msgstr "Biała lista nagłówków" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" +"Lista adresów IP lub zakresów, które są dopuszczone do korzystania z serwera " +"proxy" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" +"Lista dozwolonych portów dla metody CONNECT. Pojedyncza wartość \"0\" " +"pozwala użyć wszystkich portów" + +msgid "Listen address" +msgstr "Nasłuchiwany adres" + +msgid "Listen port" +msgstr "Nasłuchiwany port" + +msgid "Log file" +msgstr "Plik logowania" + +msgid "Log file to use for dumping messages" +msgstr "Plik logowania zrzucanych wiadomości" + +msgid "Log level" +msgstr "Poziom logowania" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "Szczegółowość logowania procesów Tinyproxy" + +msgid "Max. clients" +msgstr "Maks. klientów" + +msgid "Max. requests per server" +msgstr "Maks. żądań na serwer" + +msgid "Max. spare servers" +msgstr "Maks. uruchomionych serwerów" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "Maksymalna dopuszczalna liczba jednocześnie podłączonych klientów" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" +"Maksymalna dopuszczalna liczba żądań na proces. Jeśli zostanie przekroczona, " +"proces zostanie ponownie uruchomiony. Zero oznacza bez limitu." + +msgid "Maximum number of prepared idle processes" +msgstr "Maksymalna liczba przygotowanych bezczynnych procesów" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" +"Maksymalna liczba sekund dla podtrzymywania otwartego nieaktywnego połączenie" + +msgid "Min. spare servers" +msgstr "Min. liczba zapasowych serwerów" + +msgid "Minimum number of prepared idle processes" +msgstr "Minimalna liczba przygotowanych bezczynnych procesów" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" +"Liczba bezczynnych procesów do włączenia podczas uruchamiania Tinyproxy" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" +"Plik tekstowy z URL-ami lub domenami do filtowania. Jeden wpis na linię." + +msgid "Policy" +msgstr "Polityka" + +msgid "Privacy settings" +msgstr "Ustawienia prywatności" + +msgid "Reject access" +msgstr "Odmów dostępu" + +msgid "Server Settings" +msgstr "Ustawienia serwera" + +msgid "Server limits" +msgstr "Limity serwera" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" +"Określa nazwy nagłówków HTTP, które mogą zostać przesłane dalej. Pozostałe " +"będą odrzucone. Pozostaw puste, aby wyłączyć filtrowanie nagłówków." + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "Określa port, na którym Tinyproxy będzie oczekiwać żądań HTTP." + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "Określa nazwę hosta używaną przez Tinyproxy w nagłówku HTTP \"Via\"." + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" +"Określ adres, z którym zostanie powiązane Tinyproxy dla wychodzących " +"przekazywanych żądań" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "Określa adresy, z których Tinyproxy oczekuje żądań." + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "Określ nazwę grupy, pod jaką będzie pracował proces Tinyproxy" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" +"Określ serwer proxy typu upstream, który ma zostać użyty w przypadku dostępu " +"do hosta docelowego. Format to adres:port" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "Określ nazwę użytkownika, pod jaką będzie pracował proces Tinyproxy" + +msgid "Start spare servers" +msgstr "Uruchamiane serwery zapasowe" + +msgid "Statistics page" +msgstr "Strona statystyk" + +msgid "Status" +msgstr "Status" + +msgid "Target host" +msgstr "Host docelowy" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "Status serwera Tinyproxy" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy to mały i szybki niecacheujący serwer proxy HTTP(S)" + +msgid "Upstream Proxies" +msgstr "Serwery proxy typu upstream" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" +"Reguły serwerów proxy typu upstream definiują serwery proxy, które mają " +"zostać użyte w przypadku dostępu do określonych adresów IP lub domen." + +msgid "Use syslog" +msgstr "Użyj sysloga" + +msgid "User" +msgstr "Użytkownik" + +msgid "Via hostname" +msgstr "Nazwa hosta via" + +msgid "Via proxy" +msgstr "Proxy via" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "Zapisuje komunikaty do sysloga zamiast pliku dziennika" + +msgid "X-Tinyproxy header" +msgstr "Nagłówek X-Tinyproxy" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/pt-br/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/pt-br/tinyproxy.po new file mode 100644 index 0000000..ef7ffda --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/pt-br/tinyproxy.po @@ -0,0 +1,367 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-09-16 02:38+0200\n" +"Last-Translator: Julio Cezar \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" +"Via proxy encaminha as requisições para um dado destino através do " +"proxy superior especificado, Rejeitar acesso desabilita qualquer " +"proxy superior para o alvo" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" +"Adiciona no cabeçalho do HTTP o campo \"X-Tinyproxy\" com o endereço IP do " +"cliente para encaminhar a requisição" + +msgid "Allowed clients" +msgstr "Clientes permitidos" + +msgid "Allowed connect ports" +msgstr "Portas de conexão permitidas" + +msgid "Bind address" +msgstr "Endereço de saída" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" +"Por padrão, os filtros usam expressões POSIX básicas. Habilite esta opção " +"para usar expressões regulares extendidas" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" +"Por padrão, as regras são tratadas como insensíveis a caixa. Habilite esta " +"opção para diferenciar maiúsculas e minúsculas" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" +"Por padrão, a filtragem é feita baseada nos domínios. Habilite esta opção " +"para, ao invés disto, casar com URLs" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" +"Por padrão, as regras de filtragem atuam como uma lista negra. Habilite esta " +"opção para somente permitir URLs ou domínios que casem" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" +"Pode ser tanto um como uma faixa de endereços IP, um nome de dompínio ou \"." +"\" para qualquer computador sem domínio" + +msgid "Configuration" +msgstr "Configuração" + +msgid "Connection timeout" +msgstr "Tempo limite de conexão" + +msgid "Default deny" +msgstr "Nege por padrão" + +msgid "Enable Tinyproxy server" +msgstr "Habilitar o servidor Tinyproxy" + +msgid "Error page" +msgstr "Página de erro" + +msgid "Failed to retrieve statistics from url:" +msgstr "Falhou ao tentar obter estatísticas da URL:" + +msgid "Filter by RegExp" +msgstr "Filtrar por Expressão Regular" + +msgid "Filter by URLs" +msgstr "Filtrar por URLs" + +msgid "Filter case-sensitive" +msgstr "Diferenciar maiúsculo/minúsculo no filtro" + +msgid "Filter file" +msgstr "Arquivo de filtro" + +msgid "Filtering and ACLs" +msgstr "Filtragem e ACLs" + +msgid "General settings" +msgstr "Configurações gerais" + +msgid "Group" +msgstr "Grupo" + +msgid "HTML template file to serve for stat host requests" +msgstr "" +"Modelo de arquivo HTML para servir para requisições de estado do computador" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "Modelo de arquivo HTML para servir quando ocorrer error HTTP" + +msgid "Header whitelist" +msgstr "Lista branca do cabeçalho" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" +"Lista ou faixa de endereços IP a quem é permitido o uso do servidor proxy" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" +"List as portas que podem utilizar o método CONNECT. Um valor \"0\" único " +"permitirá todas as portas" + +msgid "Listen address" +msgstr "Endereço de escuta" + +msgid "Listen port" +msgstr "Porta de escuta" + +msgid "Log file" +msgstr "Arquivo de registro" + +msgid "Log file to use for dumping messages" +msgstr "Arquivo de registro usado para despejar as mensagens" + +msgid "Log level" +msgstr "Nível do registro" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "Detalhamento dos registors do Tinyproxy" + +msgid "Max. clients" +msgstr "Número máximo de clientes" + +msgid "Max. requests per server" +msgstr "Numero máximo de requisições por servidor" + +msgid "Max. spare servers" +msgstr "Max. servidores sobressalentes" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "Numero máximo permitido de cliente conectados concorrentemente" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" +"Numero máximo de requisições permitidas por processo. Se este limite é " +"excedido, o processo é redisparado. Zero significa ilimitado." + +msgid "Maximum number of prepared idle processes" +msgstr "Número máximo de processos em espera preparados" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "Número máximo de segundos que uma conexão inativa é mantida aberta" + +msgid "Min. spare servers" +msgstr "Número mínimo de servidores sobressalentes" + +msgid "Minimum number of prepared idle processes" +msgstr "Número mínimo de processos em espera preparados" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "Número de processos em espera iniciado quando o Tinyproxy é disparado" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" +"Arquivo de texto simples com as URLs ou os domínios para filtrar. Uma " +"entrada por linha" + +msgid "Policy" +msgstr "Política" + +msgid "Privacy settings" +msgstr "Configurações de privacidade" + +msgid "Reject access" +msgstr "Rejeitar acesso" + +msgid "Server Settings" +msgstr "Configurações do Servidor" + +msgid "Server limits" +msgstr "Limites do servidor" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" +"Especifica os nomes dos cabeçalhos HTTP que serão permitidos. Todos os " +"demais serão descartados. Deixe em branco para desabilitar a filtragem de " +"cabeçalho" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "Especifica a porta na qual o Tinyproxy escutará pelas requisições" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" +"Especifica o nome do computador que o Tinyproxy usará no cabeçalho HTTP" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" +"Especifica o endereço que o Tinyproxy utilizará para encaminhar as " +"requisições" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "Especifica o endereço no qual o Tinyproxy escutará pelas requisições" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "Especifica o nome do grupo com o qual o processo do Tinyproxy rodará" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" +"Especifica o proxy superior para usar quando acessar o alvo. Formato é " +"address:port" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "Especifica o nome do usuário com o qual o processo do Tinyproxy rodará" + +msgid "Start spare servers" +msgstr "Dispare servidores de espera" + +msgid "Statistics page" +msgstr "Página de estatística" + +msgid "Status" +msgstr "Estado" + +msgid "Target host" +msgstr "Host de destino" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "Estado do Tinyproxy" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy é um pequeno e rápido Proxy-HTTP(S) sem suporte a cache" + +msgid "Upstream Proxies" +msgstr "Proxies superiores" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" +"As regras do proxy superior define os servidores de proxy para uso quando " +"certos endereços IP ou domínios forem acessados." + +msgid "Use syslog" +msgstr "Use o syslog" + +msgid "User" +msgstr "Usuário" + +msgid "Via hostname" +msgstr "Via nome do computador" + +msgid "Via proxy" +msgstr "Via proxy" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" +"Escreve as mensagens de registros para o syslog ao invéz do arquivo de " +"registro" + +msgid "X-Tinyproxy header" +msgstr "Cabeçalho do X-Tinyproxy" + +#~ msgid "Allow access from" +#~ msgstr "Permitir acesso de" + +#~ msgid "Allowed headers for anonymous proxy" +#~ msgstr "Cabeçalhos permitidos para proxy anônimo" + +#~ msgid "Bind outgoing traffic to address" +#~ msgstr "Associar o tráfego de saída ao endereço" + +#~ msgid "Ports allowed for CONNECT method" +#~ msgstr "Portas permitidas para o método CONNECT " + +#~ msgid "0 = disabled, empty = all" +#~ msgstr "0 = desativado, vazio = todas" + +#~ msgid "Error document" +#~ msgstr "Documento de erro" + +#~ msgid "Filter list" +#~ msgstr "Lista de filtros" + +#~ msgid "Case sensitive filters" +#~ msgstr "Filtros \"case sensitive\"" + +#~ msgid "Filter list is a whitelist" +#~ msgstr "A lista de filtros é uma lista branca" + +#~ msgid "Extended regular expression filters" +#~ msgstr "Filtros com suporte à expressões regulares" + +#~ msgid "Filter URLs instead of domains" +#~ msgstr "Filtrar URLs em vez de domínios" + +#~ msgid "Listen on address" +#~ msgstr "Escutar no endereço" + +#~ msgid "Logfile" +#~ msgstr "Arquivo de log" + +#~ msgid "Maximum number of clients" +#~ msgstr "Número máximo de clientes" + +#~ msgid "Maximum requests per thread" +#~ msgstr "Máximo de solicitações por thread" + +#~ msgid "Spare servers to start with" +#~ msgstr "Servidores sobressalentes iniciar com" + +#~ msgid "Statistic document" +#~ msgstr "Documento de estatísticas" + +#~ msgid "Write to syslog" +#~ msgstr "Escrever para syslog" + +#~ msgid "Connection Timeout" +#~ msgstr "Timeout de conexão" + +#~ msgid "Value of Via-Header" +#~ msgstr "Valor do cabeçalho \"Via-Header\"" + +#~ msgid "Include client IP" +#~ msgstr "Incluir o IP do cliente" + +#~ msgid "Upstream Control" +#~ msgstr "Controle de Upstream" + +#~ msgid "Type" +#~ msgstr "Tipo" + +#~ msgid "Upstream Proxy" +#~ msgstr "Proxy para Upstream" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/pt/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/pt/tinyproxy.po new file mode 100644 index 0000000..833a7fa --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/pt/tinyproxy.po @@ -0,0 +1,334 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-05-31 23:38+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "Clientes permitidos" + +msgid "Allowed connect ports" +msgstr "Portas onde é permitido ligar" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "Configuração" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "Ativar servidor Tinyproxy" + +msgid "Error page" +msgstr "Página de erro" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "Definições globais" + +msgid "Group" +msgstr "Grupo" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "Endereço de escuta" + +msgid "Listen port" +msgstr "Porta de escuta" + +msgid "Log file" +msgstr "Ficheiro de log" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "Nível do log" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "Max. servidores sobressalentes" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "Min. servidores sobressalentes" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "Política" + +msgid "Privacy settings" +msgstr "Definições de Privacidade" + +msgid "Reject access" +msgstr "Rejeitar o acesso" + +msgid "Server Settings" +msgstr "Definições do Servidor" + +msgid "Server limits" +msgstr "Limites do servidor" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" +"Especifica o nome do grupo que através do qual o processo do Tinyproxy é " +"executado" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "Iniciar servidores suplentes" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "Estado" + +msgid "Target host" +msgstr "Host de destino" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "Estado do Tinyproxy" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy é um pequeno e rápido Proxy-HTTP(S) sem suporte à cache" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "Usar o syslog" + +msgid "User" +msgstr "Utilizador" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "Via proxy" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "Escreve as mensagens para o syslog ao invés do ficheiro de log" + +msgid "X-Tinyproxy header" +msgstr "" + +#~ msgid "Allow access from" +#~ msgstr "Permitir acesso de" + +#~ msgid "Allowed headers for anonymous proxy" +#~ msgstr "Cabeçalhos permitidos para proxy anônimo" + +#~ msgid "Bind outgoing traffic to address" +#~ msgstr "Associar o tráfego de saída ao endereço" + +#~ msgid "Ports allowed for CONNECT method" +#~ msgstr "Portas permitidas para o método CONNECT " + +#~ msgid "0 = disabled, empty = all" +#~ msgstr "0 = desativado, vazio = todas" + +#~ msgid "Error document" +#~ msgstr "Documento de erro" + +#~ msgid "Filter list" +#~ msgstr "Lista de filtros" + +#~ msgid "Case sensitive filters" +#~ msgstr "Filtros \"case sensitive\"" + +#~ msgid "Filter list is a whitelist" +#~ msgstr "A lista de filtros é uma lista branca" + +#~ msgid "Extended regular expression filters" +#~ msgstr "Filtros com suporte à expressões regulares" + +#~ msgid "Filter URLs instead of domains" +#~ msgstr "Filtrar URLs em vez de domínios" + +#~ msgid "Listen on address" +#~ msgstr "Escutar no endereço" + +#~ msgid "Logfile" +#~ msgstr "Arquivo de log" + +#~ msgid "Maximum number of clients" +#~ msgstr "Número máximo de clientes" + +#~ msgid "Maximum requests per thread" +#~ msgstr "Máximo de solicitações por thread" + +#~ msgid "Spare servers to start with" +#~ msgstr "Servidores sobressalentes iniciar com" + +#~ msgid "Statistic document" +#~ msgstr "Documento de estatísticas" + +#~ msgid "Write to syslog" +#~ msgstr "Escrever para syslog" + +#~ msgid "Connection Timeout" +#~ msgstr "Timeout de conexão" + +#~ msgid "Value of Via-Header" +#~ msgstr "Valor do cabeçalho \"Via-Header\"" + +#~ msgid "Include client IP" +#~ msgstr "Incluir o IP do cliente" + +#~ msgid "Upstream Control" +#~ msgstr "Controle de Upstream" + +#~ msgid "Type" +#~ msgstr "Tipo" + +#~ msgid "Upstream Proxy" +#~ msgstr "Proxy para Upstream" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/ro/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/ro/tinyproxy.po new file mode 100644 index 0000000..799fecb --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/ro/tinyproxy.po @@ -0,0 +1,256 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/ru/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/ru/tinyproxy.po new file mode 100644 index 0000000..f9a3c23 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/ru/tinyproxy.po @@ -0,0 +1,294 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: tinyproxy\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-08-15 20:24+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" +"Через прокси перенаправляет запросы на заданные узлы через " +"указанный прокси, Отклонять доступ отключает использование прокси " +"для всех узлов" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" +"Добавляет HTTP-заголовок \"X-Tinyproxy\" с IP-адресом клиента ко всем " +"перенаправленным запросам" + +msgid "Allowed clients" +msgstr "Разрешённые клиенты" + +msgid "Allowed connect ports" +msgstr "Разрешённые порты подключения" + +msgid "Bind address" +msgstr "Адрес привязки" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" +"Разрешить использование расширенных регулярных выражений для фильтрации. По " +"умолчанию, используются базовые POSIX-выражения" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" +"По умолчанию, строки фильтрации регистро-независимы. Включите эту опцию, " +"чтобы сделать сравнение регистро-зависимым" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" +"По умолчанию, фильтрация выполняется на основе имени домена. Включите эту " +"опцию, чтобы фильтровать при помощи URL" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" +"По умолчанию, фильтрация работает в режиме чёрного списка. Включите эту " +"опцию, чтобы разрешить только опредёленные URL или доменные имена" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" +"Может быть IP-адресом, диапазоном, именем домена или \".\" для любого хоста " +"без домена" + +msgid "Configuration" +msgstr "Конфигурация" + +msgid "Connection timeout" +msgstr "Таймаут соединения" + +msgid "Default deny" +msgstr "Запретить по умолчанию" + +msgid "Enable Tinyproxy server" +msgstr "Включить сервер Tinyproxy" + +msgid "Error page" +msgstr "Страница ошибки" + +msgid "Failed to retrieve statistics from url:" +msgstr "Ошибка получения статистики по URL:" + +msgid "Filter by RegExp" +msgstr "Фильтровать при помощи регулярных выражений" + +msgid "Filter by URLs" +msgstr "Фильтровать по URL" + +msgid "Filter case-sensitive" +msgstr "Фильтровать с учётом регистра" + +msgid "Filter file" +msgstr "Файл фильтрации" + +msgid "Filtering and ACLs" +msgstr "Фильтрация и ACL" + +msgid "General settings" +msgstr "Общие настройки" + +msgid "Group" +msgstr "Группа" + +msgid "HTML template file to serve for stat host requests" +msgstr "HTML-шаблон для статистики хостов" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "HTML-шаблон для вывода ошибок HTTP" + +msgid "Header whitelist" +msgstr "Белый список заголовков" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" +"Список или диапазон IP-адресов, которым разрешено использовать прокси-сервер" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" +"Список разрешённых портов для метода CONNECT. Значение \"0\" разрешает все " +"порты" + +msgid "Listen address" +msgstr "Адрес" + +msgid "Listen port" +msgstr "Порт" + +msgid "Log file" +msgstr "Файл журналирования" + +msgid "Log file to use for dumping messages" +msgstr "Файл для записи сообщений" + +msgid "Log level" +msgstr "Уровень журналирования" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "Уровень подробности журналирования процесса Tinyproxy" + +msgid "Max. clients" +msgstr "Макс. кол-во клиентов" + +msgid "Max. requests per server" +msgstr "Макс. кол-во запросов на сервер" + +msgid "Max. spare servers" +msgstr "Макс. кол-во серверов ожидания" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "Максимально допустимое количество одновременно подключенных клиентов" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" +"Максимально допустимое количество запросов на процесс. Если превышено, " +"процесс будет перезапущен. Ноль отключает данное ограничение." + +msgid "Maximum number of prepared idle processes" +msgstr "Максимальное количество готовых к обработке процессов" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" +"Максимальное количество секунд, в течение которых неактивное соединение " +"остаётся открытым" + +msgid "Min. spare servers" +msgstr "Мин. кол-во серверов ожидания" + +msgid "Minimum number of prepared idle processes" +msgstr "Минимальное количество готовых к обработке процессов" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "Количество готовых к обработке процессов при старте Tinyproxy" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "Файл с URL или доменами для фильтрации. Одна запись на строку" + +msgid "Policy" +msgstr "Политика" + +msgid "Privacy settings" +msgstr "Настройки конфиденциальности" + +msgid "Reject access" +msgstr "Отклонять доступ" + +msgid "Server Settings" +msgstr "Настройки сервера" + +msgid "Server limits" +msgstr "Ограничения сервера" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" +"Определяет HTTP-заголовки, которым разрешено проходить через прокси. " +"Оставьте пустым, чтобы не фильтровать заголовки" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "Определяет порт HTTP, на котором Tinyproxy ожидает запросы" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" +"Определяет имя хоста Tinyproxy, которое будет использовано в HTTP-заголовке " +"Via" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" +"Определяет адрес, к которому привязывается Tinyproxy для отправки исходящих " +"запросов" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "Определяет адрес, на котором Tinyproxy ожидает запросы" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "Определяет имя группы, в которой работает Tinyproxy" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" +"Определяет прокси восходящего канала для доступа к хосту в формате " +"адрес:порт" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "Определяет пользователя, от имени которого работает Tinyproxy" + +msgid "Start spare servers" +msgstr "Запустить указанное количество готовых к обработке процессов" + +msgid "Statistics page" +msgstr "Страница статистики" + +msgid "Status" +msgstr "Состояние" + +msgid "Target host" +msgstr "Хост назначения" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "Состояние Tinyproxy" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy - быстрый HTTP(S)-прокси, не использующий кэш" + +msgid "Upstream Proxies" +msgstr "Прокси для исходящего трафика" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" +"Прокси для исходящего трафика при обращении к определённым IP-адресам или " +"доменам." + +msgid "Use syslog" +msgstr "Использовать системный журнал" + +msgid "User" +msgstr "Пользователь" + +msgid "Via hostname" +msgstr "Имя хоста Via" + +msgid "Via proxy" +msgstr "Через прокси" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "Записывать сообщения журнала в системный журнал вместо файла" + +msgid "X-Tinyproxy header" +msgstr "Заголовок X-Tinyproxy" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/sk/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/sk/tinyproxy.po new file mode 100644 index 0000000..128c71d --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/sk/tinyproxy.po @@ -0,0 +1,255 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/sv/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/sv/tinyproxy.po new file mode 100644 index 0000000..d49df60 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/sv/tinyproxy.po @@ -0,0 +1,275 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" +"Via proxy-rutternas förfrågningar till det givna målet via den " +"angivna uppströmsproxyn, Neka åtkomst inaktiverar någon " +"uppströmsproxy för det målet" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" +"Lägger till en \"X-Tinyproxy\" HTTP-header med klientens IP-adress till " +"vidarebefordrade förfrågningar" + +msgid "Allowed clients" +msgstr "Tillåtna klienter" + +msgid "Allowed connect ports" +msgstr "Tillåtna portar för anslutning" + +msgid "Bind address" +msgstr "Bindningsadress" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" +"Huvudsakliga POSIX-uttryck används för filtrering. Aktivera det här för att " +"aktivera ordinarie förlängda uttryck" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" +"Filtrens strängar behandlas som skriftlägeskänsliga. Aktivera det här för " +"att göra matchningen skriftlägeskänslig" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" +"Filtrering görs baserat på domännamn som standard. Aktivera det här för att " +"matcha mot URL:er istället" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" +"Filterreglerna agerar som en svartlista som standard. Aktivera det här " +"alternativet för att endast tillåta matchade URL:er eller domännamn" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" +"Kan antingen vara en IP-adress eller räckvidd, ett domännamn eller \".\" för " +"någon värd utan en domän" + +msgid "Configuration" +msgstr "Konfiguration" + +msgid "Connection timeout" +msgstr "Tidsgräns för anslutning" + +msgid "Default deny" +msgstr "Neka som standard" + +msgid "Enable Tinyproxy server" +msgstr "Aktivera Tinyproxy-server" + +msgid "Error page" +msgstr "Fel-sida" + +msgid "Failed to retrieve statistics from url:" +msgstr "Misslyckades med att ta emot statistik från url:" + +msgid "Filter by RegExp" +msgstr "Filtrera efter RegExp" + +msgid "Filter by URLs" +msgstr "Filtrera efter URL:er" + +msgid "Filter case-sensitive" +msgstr "Filtrera skriftlägeskänslig" + +msgid "Filter file" +msgstr "Filtrera fil" + +msgid "Filtering and ACLs" +msgstr "Filtrering och ACL:er" + +msgid "General settings" +msgstr "Generella inställningar" + +msgid "Group" +msgstr "Grupp" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "Lyssningsadress" + +msgid "Listen port" +msgstr "Lyssningsport" + +msgid "Log file" +msgstr "Loggfil" + +msgid "Log file to use for dumping messages" +msgstr "Loggfil som ska användas för dumpningsmeddelanden" + +msgid "Log level" +msgstr "Loggnivå" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "Maximalt antalet klienter" + +msgid "Max. requests per server" +msgstr "Maximalt antalet förfrågningar per server" + +msgid "Max. spare servers" +msgstr "Maximalt antalet reserv-servrar" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "Maximalt antal sekunder som en inaktiv anslutning hålls öppen" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "Villkor" + +msgid "Privacy settings" +msgstr "Integritetsinställningar" + +msgid "Reject access" +msgstr "Neka åtkomst" + +msgid "Server Settings" +msgstr "Server-inställningar" + +msgid "Server limits" +msgstr "Gräns för server" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "Anger HTTP-porten som Tinyproxy lyssnar med efter förfrågningar" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" +"Anger adressen som Tinyproxy binder till för utgående vidarebefordrade " +"förfrågningar" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "Anger adresserna som Tinyproxy lyssnar på efter förfrågningar" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "Anger gruppnamnet som Tinyproxy-processen körs som" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" +"Anger uppström-proxyn att använda för åtkomst till målvärden. Formatet är " +"adress:port" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "Anger användarnamnet som Tinyproxy-processen körs som" + +msgid "Start spare servers" +msgstr "Starta reserv-servrar" + +msgid "Statistics page" +msgstr "Sida för statistik" + +msgid "Status" +msgstr "Status" + +msgid "Target host" +msgstr "Målvärd" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "Status för Tinyproxy" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy är en liten och snabb icke-cachande HTTP(S)-proxy" + +msgid "Upstream Proxies" +msgstr "Proxy-servrar uppströms" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "Använd systemlogg" + +msgid "User" +msgstr "Användare" + +msgid "Via hostname" +msgstr "Via värdnamn" + +msgid "Via proxy" +msgstr "Via proxy-server" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "Skriver loggmeddelanden till systemloggen istället för en logg-fil" + +msgid "X-Tinyproxy header" +msgstr "Header för X-Tinyproxy" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/templates/tinyproxy.pot b/feeds/luci/applications/luci-app-tinyproxy/po/templates/tinyproxy.pot new file mode 100644 index 0000000..712fad9 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/templates/tinyproxy.pot @@ -0,0 +1,248 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/tr/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/tr/tinyproxy.po new file mode 100644 index 0000000..a7af49d --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/tr/tinyproxy.po @@ -0,0 +1,255 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/uk/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/uk/tinyproxy.po new file mode 100644 index 0000000..2e268ba --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/uk/tinyproxy.po @@ -0,0 +1,256 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/vi/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/vi/tinyproxy.po new file mode 100644 index 0000000..6c825f5 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/vi/tinyproxy.po @@ -0,0 +1,332 @@ +# tinyproxy.pot +# generated from ./applications/luci-tinyproxy/luasrc/i18n/tinyproxy.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:58+0200\n" +"PO-Revision-Date: 2009-08-13 03:36+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "Log level" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "Tối đa spare servers" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "Tối thiểu spare servers" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "Từ chối truy cập " + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "Host mục tiêu" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy là một proxy nhỏ và nhanh không-cạc HTTP(S)" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "Via proxy" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" + +#~ msgid "Allow access from" +#~ msgstr "Cho phép truy cập từ" + +#~ msgid "Allowed headers for anonymous proxy" +#~ msgstr "Cho phép headers cho anonymous proxy" + +#~ msgid "Bind outgoing traffic to address" +#~ msgstr "Blind lưu lượng truy cập ngoài vào địa chỉ" + +#~ msgid "Ports allowed for CONNECT method" +#~ msgstr "Cổng cho phép phương pháp CONNECT" + +#~ msgid "0 = disabled, empty = all" +#~ msgstr "0=vô hiệu hóa, rỗng = tất cả" + +#~ msgid "Error document" +#~ msgstr "Tài liệu lỗi" + +#~ msgid "Filter list" +#~ msgstr "Lọc list" + +#~ msgid "Case sensitive filters" +#~ msgstr "Lọc phím nhạy cảm" + +#~ msgid "Filter list is a whitelist" +#~ msgstr "Lọc list là một whitelist" + +#~ msgid "Extended regular expression filters" +#~ msgstr "Mở rộng các bộ lọc thường xuyên biểu" + +#~ msgid "Filter URLs instead of domains" +#~ msgstr "Lọc URLs thay domain" + +#~ msgid "Listen on address" +#~ msgstr "Nghe trên địa chỉ" + +#~ msgid "Logfile" +#~ msgstr "Logfile" + +#~ msgid "Maximum number of clients" +#~ msgstr "Tối đa số lượng khách hàng" + +#~ msgid "Maximum requests per thread" +#~ msgstr "Tối đa yêu cầu trên thread" + +#~ msgid "Spare servers to start with" +#~ msgstr "Spare servers bắt đầu với" + +#~ msgid "Statistic document" +#~ msgstr "Tài liệu thống kê" + +#~ msgid "Write to syslog" +#~ msgstr "viết tới syslog" + +#~ msgid "Connection Timeout" +#~ msgstr "Kết nối hết hiệu lực" + +#~ msgid "Value of Via-Header" +#~ msgstr "Giá trị của Via-Header" + +#~ msgid "Include client IP" +#~ msgstr "Bao gồm IP của khách hàng" + +#~ msgid "Upstream Control" +#~ msgstr "Điều khiển Upstream " + +#~ msgid "Type" +#~ msgstr "Loại " + +#~ msgid "Upstream Proxy" +#~ msgstr "Upstream Proxy" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/zh-cn/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/zh-cn/tinyproxy.po new file mode 100644 index 0000000..828e952 --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/zh-cn/tinyproxy.po @@ -0,0 +1,262 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-10 19:43+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" +"通过代理允许给定的对象经过指定的上行代理的路由请求。拒绝代理 禁用对象的任何上行代理。" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "转发请求时增加了一个客户机IP地址和“X-Tinyproxy“HTTP头" + +msgid "Allowed clients" +msgstr "授权客户端" + +msgid "Allowed connect ports" +msgstr "允许的连接端口" + +msgid "Bind address" +msgstr "绑定地址" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" +"默认情况下,使用基本的POSIX表达式作为滤规则。启用这个以使用正规表达式代替之。" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "默认情况下,过滤规则是不区分大小写的。启用它则转为区分大小写。" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "默认情况下,过滤器只匹配域名。启用它以匹配URL。" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" +"默认情况下,过滤规则将以黑名单形式匹配。启用它将仅允许过滤规则里的URL或域名。" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "可以是IP地址或者范围,也可以是域名或者以\".\"代表任意主机" + +msgid "Configuration" +msgstr "配置" + +msgid "Connection timeout" +msgstr "连接超时时间" + +msgid "Default deny" +msgstr "默认拒绝" + +msgid "Enable Tinyproxy server" +msgstr "启用Tinyproxy" + +msgid "Error page" +msgstr "错误页面" + +msgid "Failed to retrieve statistics from url:" +msgstr "从url未能检索统计信息" + +msgid "Filter by RegExp" +msgstr "正则表达式过滤器" + +msgid "Filter by URLs" +msgstr "基于URL的过滤器" + +msgid "Filter case-sensitive" +msgstr "过滤器大小写敏感" + +msgid "Filter file" +msgstr "过滤器文件" + +msgid "Filtering and ACLs" +msgstr "过滤规则和访问控制列表" + +msgid "General settings" +msgstr "基本设置" + +msgid "Group" +msgstr "运行组" + +msgid "HTML template file to serve for stat host requests" +msgstr "为统计主机HTML模板文件" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "HTTP出错页面HTML模板" + +msgid "Header whitelist" +msgstr "头白名单" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "允许访问代理服务器的IP或IP段列表" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "允许CONNECT方法连接的端口列表,0代表所有端口。" + +msgid "Listen address" +msgstr "服务地址" + +msgid "Listen port" +msgstr "服务端口" + +msgid "Log file" +msgstr "日志文件" + +msgid "Log file to use for dumping messages" +msgstr "用于消息转储的日志文件" + +msgid "Log level" +msgstr "记录等级" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "冗长的Tinyproxy过程日志" + +msgid "Max. clients" +msgstr "最大客户端数" + +msgid "Max. requests per server" +msgstr "单进程最大请求数" + +msgid "Max. spare servers" +msgstr "最多备用服务器" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "允许同时连接的最大客户端数量" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "单个进程允许的最多请求数,超过这个值,进程将重启。0表示不限制。" + +msgid "Maximum number of prepared idle processes" +msgstr "备用进程数的最大值" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "活动连接保持打开的最长秒数" + +msgid "Min. spare servers" +msgstr "最少备用服务器" + +msgid "Minimum number of prepared idle processes" +msgstr "备用进程数的最小值" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "启动Tinyproxy时开启的进程数" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "用于过滤器的文本,包含URL或者域名,每行一条。" + +msgid "Policy" +msgstr "策略" + +msgid "Privacy settings" +msgstr "策略设置" + +msgid "Reject access" +msgstr "拒绝访问" + +msgid "Server Settings" +msgstr "服务器设置" + +msgid "Server limits" +msgstr "服务器限制" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "指定HTTP报头名称可直通的,其它将被丢弃。保留空,禁用头过滤" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "Tinyproxy正在侦听请求的指定HTTP端口" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "通过HTTP头使用指定Tinyproxy主机名" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "指定服务器向外转发请求时所使用的地址" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "指定服务器接收代理请求所使用的地址" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "指定Tinyproxy进程所属组" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "指定上级代理. 格式 IP地址:端口" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "指定Tinyproxy进程所属用户" + +msgid "Start spare servers" +msgstr "启动备用服务器" + +msgid "Statistics page" +msgstr "统计页面" + +msgid "Status" +msgstr "状态" + +msgid "Target host" +msgstr "目标主机" + +msgid "Tinyproxy" +msgstr "Tinyproxy" + +msgid "Tinyproxy Status" +msgstr "Tinyproxy状态" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "Tinyproxy是一个轻量级无缓存机制的高速HTTP(S)代理服务器" + +msgid "Upstream Proxies" +msgstr "上级代理" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "当访问特定IP地址或域名时,使用外出代理规则定义的代理服务器。" + +msgid "Use syslog" +msgstr "使用系统日志服务" + +msgid "User" +msgstr "运行用户" + +msgid "Via hostname" +msgstr "通过主机名" + +msgid "Via proxy" +msgstr "通过代理" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "将日志写入系统日志以代替指定的日志文件" + +msgid "X-Tinyproxy header" +msgstr "X-Tinyproxy头" diff --git a/feeds/luci/applications/luci-app-tinyproxy/po/zh-tw/tinyproxy.po b/feeds/luci/applications/luci-app-tinyproxy/po/zh-tw/tinyproxy.po new file mode 100644 index 0000000..849fcde --- /dev/null +++ b/feeds/luci/applications/luci-app-tinyproxy/po/zh-tw/tinyproxy.po @@ -0,0 +1,254 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "" +"Via proxy routes requests to the given target via the specifed " +"upstream proxy, Reject access disables any upstream proxy for the " +"target" +msgstr "" + +msgid "" +"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded " +"requests" +msgstr "" + +msgid "Allowed clients" +msgstr "" + +msgid "Allowed connect ports" +msgstr "" + +msgid "Bind address" +msgstr "" + +msgid "" +"By default, basic POSIX expressions are used for filtering. Enable this to " +"activate extended regular expressions" +msgstr "" + +msgid "" +"By default, filter strings are treated as case-insensitive. Enable this to " +"make the matching case-sensitive" +msgstr "" + +msgid "" +"By default, filtering is done based on domain names. Enable this to match " +"against URLs instead" +msgstr "" + +msgid "" +"By default, the filter rules act as blacklist. Enable this option to only " +"allow matched URLs or domain names" +msgstr "" + +msgid "" +"Can be either an IP address or range, a domain name or \".\" for any host " +"without domain" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Connection timeout" +msgstr "" + +msgid "Default deny" +msgstr "" + +msgid "Enable Tinyproxy server" +msgstr "" + +msgid "Error page" +msgstr "" + +msgid "Failed to retrieve statistics from url:" +msgstr "" + +msgid "Filter by RegExp" +msgstr "" + +msgid "Filter by URLs" +msgstr "" + +msgid "Filter case-sensitive" +msgstr "" + +msgid "Filter file" +msgstr "" + +msgid "Filtering and ACLs" +msgstr "" + +msgid "General settings" +msgstr "" + +msgid "Group" +msgstr "" + +msgid "HTML template file to serve for stat host requests" +msgstr "" + +msgid "HTML template file to serve when HTTP errors occur" +msgstr "" + +msgid "Header whitelist" +msgstr "" + +msgid "" +"List of IP addresses or ranges which are allowed to use the proxy server" +msgstr "" + +msgid "" +"List of allowed ports for the CONNECT method. A single value \"0\" allows " +"all ports" +msgstr "" + +msgid "Listen address" +msgstr "" + +msgid "Listen port" +msgstr "" + +msgid "Log file" +msgstr "" + +msgid "Log file to use for dumping messages" +msgstr "" + +msgid "Log level" +msgstr "" + +msgid "Logging verbosity of the Tinyproxy process" +msgstr "" + +msgid "Max. clients" +msgstr "" + +msgid "Max. requests per server" +msgstr "" + +msgid "Max. spare servers" +msgstr "" + +msgid "Maximum allowed number of concurrently connected clients" +msgstr "" + +msgid "" +"Maximum allowed number of requests per process. If it is exeeded, the " +"process is restarted. Zero means unlimited." +msgstr "" + +msgid "Maximum number of prepared idle processes" +msgstr "" + +msgid "Maximum number of seconds an inactive connection is held open" +msgstr "" + +msgid "Min. spare servers" +msgstr "" + +msgid "Minimum number of prepared idle processes" +msgstr "" + +msgid "Number of idle processes to start when launching Tinyproxy" +msgstr "" + +msgid "Plaintext file with URLs or domains to filter. One entry per line" +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Privacy settings" +msgstr "" + +msgid "Reject access" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server limits" +msgstr "" + +msgid "" +"Specifies HTTP header names which are allowed to pass-through, all others " +"are discarded. Leave empty to disable header filtering" +msgstr "" + +msgid "Specifies the HTTP port Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header" +msgstr "" + +msgid "" +"Specifies the address Tinyproxy binds to for outbound forwarded requests" +msgstr "" + +msgid "Specifies the addresses Tinyproxy is listening on for requests" +msgstr "" + +msgid "Specifies the group name the Tinyproxy process is running as" +msgstr "" + +msgid "" +"Specifies the upstream proxy to use for accessing the target host. Format is " +"address:port" +msgstr "" + +msgid "Specifies the user name the Tinyproxy process is running as" +msgstr "" + +msgid "Start spare servers" +msgstr "" + +msgid "Statistics page" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Target host" +msgstr "" + +msgid "Tinyproxy" +msgstr "" + +msgid "Tinyproxy Status" +msgstr "" + +msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy" +msgstr "" + +msgid "Upstream Proxies" +msgstr "" + +msgid "" +"Upstream proxy rules define proxy servers to use when accessing certain IP " +"addresses or domains." +msgstr "" + +msgid "Use syslog" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Via hostname" +msgstr "" + +msgid "Via proxy" +msgstr "" + +msgid "Writes log messages to syslog instead of a log file" +msgstr "" + +msgid "X-Tinyproxy header" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/Makefile b/feeds/luci/applications/luci-app-transmission/Makefile new file mode 100644 index 0000000..668c731 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2016 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for Transmission +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-transmission/luasrc/controller/transmission.lua b/feeds/luci/applications/luci-app-transmission/luasrc/controller/transmission.lua new file mode 100644 index 0000000..b54b92b --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/luasrc/controller/transmission.lua @@ -0,0 +1,14 @@ +-- Copyright 2012 Gabor Varga +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.transmission", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/transmission") then + return + end + + local page = entry({"admin", "services", "transmission"}, cbi("transmission"), _("Transmission")) + page.dependent = true + +end diff --git a/feeds/luci/applications/luci-app-transmission/luasrc/model/cbi/transmission.lua b/feeds/luci/applications/luci-app-transmission/luasrc/model/cbi/transmission.lua new file mode 100644 index 0000000..ec19f47 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/luasrc/model/cbi/transmission.lua @@ -0,0 +1,220 @@ +-- Copyright 2012 Gabor Varga +-- Licensed to the public under the Apache License 2.0. + +require("luci.sys") +require("luci.util") +require("luci.model.ipkg") + +local uci = require "luci.model.uci".cursor() +local trport = uci:get_first("transmission", "transmission", "rpc_port") or 9091 +local running = (luci.sys.call("pidof transmission-daemon > /dev/null") == 0) +local webinstalled = luci.model.ipkg.installed("transmission-web") +local button = "" +if running and webinstalled then + button = "      " +end + +m = Map("transmission", "Transmission", translate("Transmission daemon is a simple bittorrent client, here you can configure the settings.") .. button) + +s=m:section(TypedSection, "transmission", translate("Global settings")) +s.addremove=false +s.anonymous=true + +enable=s:option(Flag, "enabled", translate("Enabled")) +enable.rmempty=false +config_dir=s:option(Value, "config_dir", translate("Config file directory")) +user=s:option(ListValue, "user", translate("Run daemon as user")) +local p_user +for _, p_user in luci.util.vspairs(luci.util.split(luci.sys.exec("cat /etc/passwd | cut -f 1 -d :"))) do + user:value(p_user) +end +cache_size_mb=s:option(Value, "cache_size_mb", translate("Cache size in MB")) + +bandwidth=m:section(TypedSection, "transmission", translate("Bandwidth settings")) +bandwidth.anonymous=true +alt_speed_enabled=bandwidth:option(Flag, "alt_speed_enabled", translate("Alternative speed enabled")) +alt_speed_enabled.enabled="true" +alt_speed_enabled.disabled="false" +alt_speed_down=bandwidth:option(Value, "alt_speed_down", translate("Alternative download speed"), "KB/s") +alt_speed_down:depends("alt_speed_enabled", "true") +alt_speed_up=bandwidth:option(Value, "alt_speed_up", translate("Alternative upload speed"), "KB/s") +alt_speed_up:depends("alt_speed_enabled", "true") +speed_limit_down_enabled=bandwidth:option(Flag, "speed_limit_down_enabled", translate("Speed limit down enabled")) +speed_limit_down_enabled.enabled="true" +speed_limit_down_enabled.disabled="false" +speed_limit_down=bandwidth:option(Value, "speed_limit_down", translate("Speed limit down"), "KB/s") +speed_limit_down:depends("speed_limit_down_enabled", "true") +speed_limit_up_enabled=bandwidth:option(Flag, "speed_limit_up_enabled", translate("Speed limit up enabled")) +speed_limit_up_enabled.enabled="true" +speed_limit_up_enabled.disabled="false" +speed_limit_up=bandwidth:option(Value, "speed_limit_up", translate("Speed limit up"), "KB/s") +speed_limit_up:depends("speed_limit_up_enabled", "true") +upload_slots_per_torrent=bandwidth:option(Value, "upload_slots_per_torrent", translate("Upload slots per torrent")) + +blocklists=m:section(TypedSection, "transmission", translate("Blocklists")) +blocklists.anonymous=true +blocklist_enabled=blocklists:option(Flag, "blocklist_enabled", translate("Block list enabled")) +blocklist_enabled.enabled="true" +blocklist_enabled.disabled="false" +blocklist_url=blocklists:option(Value, "blocklist_url", translate("Blocklist URL")) +blocklist_url:depends("blocklist_enabled", "true") + +fileslocations=m:section(TypedSection, "transmission", translate("Files and Locations")) +fileslocations.anonymous=true +download_dir=fileslocations:option(Value, "download_dir", translate("Download directory")) +incomplete_dir_enabled=fileslocations:option(Flag, "incomplete_dir_enabled", translate("Incomplete directory enabled")) +incomplete_dir_enabled.enabled="true" +incomplete_dir_enabled.disabled="false" +incomplete_dir=fileslocations:option(Value, "incomplete_dir", translate("Incomplete directory")) +incomplete_dir:depends("incomplete_dir_enabled", "true") +preallocation=fileslocations:option(ListValue, "preallocation", translate("preallocation")) +preallocation:value("0", translate("Off")) +preallocation:value("1", translate("Fast")) +preallocation:value("2", translate("Full")) +prefetch_enabled=fileslocations:option(Flag, "prefetch_enabled", translate("Prefetch enabled")) +rename_partial_files=fileslocations:option(Flag, "rename_partial_files", translate("Rename partial files")) +rename_partial_files.enableid="true" +rename_partial_files.disabled="false" +start_added_torrents=fileslocations:option(Flag, "start_added_torrents", translate("Automatically start added torrents")) +start_added_torrents.enabled="true" +start_added_torrents.disabled="false" +trash_original_torrent_files=fileslocations:option(Flag, "trash_original_torrent_files", translate("Trash original torrent files")) +trash_original_torrent_files.enabled="true" +trash_original_torrent_files.disabled="false" +umask=fileslocations:option(Value, "umask", "umask") +watch_dir_enabled=fileslocations:option(Flag, "watch_dir_enabled", translate("Enable watch directory")) +watch_dir_enabled.enabled="true" +watch_dir_enabled.disabled="false" +watch_dir=fileslocations:option(Value, "watch_dir", translate("Watch directory")) +watch_dir:depends("watch_dir_enabled", "true") + +misc=m:section(TypedSection, "transmission", translate("Miscellaneous")) +misc.anonymous=true +dht_enabled=misc:option(Flag, "dht_enabled", translate("DHT enabled")) +dht_enabled.enabled="true" +dht_enabled.disabled="false" +encryption=misc:option(ListValue, "encryption", translate("Encryption")) +encryption:value("0", translate("Off")) +encryption:value("1", translate("Preferred")) +encryption:value("2", translate("Forced")) +lazy_bitfield_enabled=misc:option(Flag, "lazy_bitfield_enabled", translate("Lazy bitfield enabled")) +lazy_bitfield_enabled.enabled="true" +lazy_bitfield_enabled.disabled="false" +lpd_enabled=misc:option(Flag, "lpd_enabled", translate("LPD enabled")) +lpd_enabled.enabled="true" +lpd_enabled.disabled="false" +message_level=misc:option(ListValue, "message_level", translate("Message level")) +message_level:value("0", translate("None")) +message_level:value("1", translate("Error")) +message_level:value("2", translate("Info")) +message_level:value("3", translate("Debug")) +pex_enabled=misc:option(Flag, "pex_enabled", translate("PEX enabled")) +pex_enabled.enabled="true" +pex_enabled.disabled="false" +script_torrent_done_enabled=misc:option(Flag, "script_torrent_done_enabled", translate("Script torrent done enabled")) +script_torrent_done_enabled.enabled="true" +script_torrent_done_enabled.disabled="false" +script_torrent_done_filename=misc:option(Value, "script_torrent_done_filename", translate("Script torrent done filename")) +script_torrent_done_filename:depends("script_torrent_done_enabled", "true") +idle_seeding_limit_enabled=misc:option(Flag, "idle_seeding_limit_enabled", translate("Idle seeding limit enabled")) +idle_seeding_limit_enabled.enabled="true" +idle_seeding_limit_enabled.disabled="false" +idle_seeding_limit=misc:option(Value, "idle_seeding_limit", translate("Idle seeding limit")) +idle_seeding_limit:depends("idle_seeding_limit_enabled", "true") +utp_enabled=misc:option(Flag, "utp_enabled", translate("uTP enabled")) +utp_enabled.enabled="true" +utp_enabled.disabled="false" + +peers=m:section(TypedSection, "transmission", translate("Peer settings")) +peers.anonymous=true +bind_address_ipv4=peers:option(Value, "bind_address_ipv4", translate("Binding address IPv4")) +bind_address_ipv4.default="0.0.0.0" +bind_address_ipv6=peers:option(Value, "bind_address_ipv6", translate("Binding address IPv6")) +bind_address_ipv6.default="::" +peer_congestion_algorithm=peers:option(Value, "peer_congestion_algorithm", translate("Peer congestion algorithm")) +peer_limit_global=peers:option(Value, "peer_limit_global", translate("Global peer limit")) +peer_limit_per_torrent=peers:option(Value, "peer_limit_per_torrent", translate("Peer limit per torrent")) +peer_socket_tos=peers:option(Value, "peer_socket_tos", translate("Peer socket tos")) + +peerport=m:section(TypedSection, "transmission", translate("Peer Port settings")) +peerport.anonymous=true +peer_port=peerport:option(Value, "peer_port", translate("Peer port")) +peer_port_random_on_start=peerport:option(Flag, "peer_port_random_on_start", translate("Peer port random on start")) +peer_port_random_on_start.enabled="true" +peer_port_random_on_start.disabled="false" +peer_port_random_high=peerport:option(Value, "peer_port_random_high", translate("Peer port random high")) +peer_port_random_high:depends("peer_port_random_on_start", "true") +peer_port_random_low=peerport:option(Value, "peer_port_random_low", translate("Peer port random low")) +peer_port_random_low:depends("peer_port_random_on_start", "true") +port_forwarding_enabled=peerport:option(Flag, "port_forwarding_enabled", translate("Port forwarding enabled")) +port_forwarding_enabled.enabled="true" +port_forwarding_enabled.disabled="false" + +rpc=m:section(TypedSection, "transmission", translate("RPC settings")) +rpc.anonymous=true +rpc_enabled=rpc:option(Flag, "rpc_enabled", translate("RPC enabled")) +rpc_enabled.enabled="true" +rpc_enabled.disabled="false" +rpc_port=rpc:option(Value, "rpc_port", translate("RPC port")) +rpc_port:depends("rpc_enabled", "true") +rpc_bind_address=rpc:option(Value, "rpc_bind_address", translate("RPC bind address")) +rpc_bind_address:depends("rpc_enabled", "true") +rpc_url=rpc:option(Value, "rpc_url", translate("RPC URL")) +rpc_url:depends("rpc_enabled", "true") +rpc_whitelist_enabled=rpc:option(Flag, "rpc_whitelist_enabled", translate("RPC whitelist enabled")) +rpc_whitelist_enabled.enabled="true" +rpc_whitelist_enabled.disabled="false" +rpc_whitelist_enabled:depends("rpc_enabled", "true") +rpc_whitelist=rpc:option(Value, "rpc_whitelist", translate("RPC whitelist")) +rpc_whitelist:depends("rpc_whitelist_enabled", "true") +rpc_authentication_required=rpc:option(Flag, "rpc_authentication_required", translate("RPC authentication required")) +rpc_authentication_required.enabled="true" +rpc_authentication_required.disabled="false" +rpc_authentication_required:depends("rpc_enabled", "true") +rpc_username=rpc:option(Value, "rpc_username", translate("RPC username")) +rpc_username:depends("rpc_authentication_required", "true") +rpc_password=rpc:option(Value, "rpc_password", translate("RPC password")) +rpc_password:depends("rpc_authentication_required", "true") +rpc_password.password = true + +scheduling=m:section(TypedSection, "transmission", translate("Scheduling")) +scheduling.anonymous=true +alt_speed_time_enabled=scheduling:option(Flag, "alt_speed_time_enabled", translate("Alternative speed timing enabled")) +alt_speed_time_enabled.enabled="true" +alt_speed_time_enabled.disabled="false" +alt_speed_time_enabled.default="false" +alt_speed_time_enabled:depends("alt_speed_enabled", "true") +alt_speed_time_day=scheduling:option(Value, "alt_speed_time_day", translate("Alternative speed time day"), translate("Number/bitfield. Start with 0, then for each day you want the scheduler enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - 8, Thursday - 16, Friday - 32, Saturday - 64")) +alt_speed_time_day:depends("alt_speed_time_enabled", "true") +alt_speed_time_begin=scheduling:option(Value, "alt_speed_time_begin", translate("Alternative speed time begin"), translate("in minutes from midnight")) +alt_speed_time_begin:depends("alt_speed_time_enabled", "true") +alt_speed_time_end=scheduling:option(Value, "alt_speed_time_end", translate("Alternative speed time end"), translate("in minutes from midnight")) +alt_speed_time_end:depends("alt_speed_time_enabled", "true") +ratio_limit_enabled=scheduling:option(Flag, "ratio_limit_enabled", translate("Ratio limit enabled")) +ratio_limit_enabled.enabled="true" +ratio_limit_enabled.disabled="false" +ratio_limit=scheduling:option(Value, "ratio_limit", translate("Ratio limit")) +ratio_limit:depends("ratio_limit_enabled", "true") + +queueing=m:section(TypedSection, "transmission", translate("Queueing")) +queueing.anonymous=true +download_queue_enabled=queueing:option(Flag, "download_queue_enabled", translate("Download queue enabled")) +download_queue_enabled.enabled="true" +download_queue_enabled.disabled="false" +download_queue_size=queueing:option(Value, "download_queue_size", translate("Download queue size")) +download_queue_size:depends("download_queue_enabled", "true") +queue_stalled_enabled=queueing:option(Flag, "queue_stalled_enabled", translate("Queue stalled enabled")) +queue_stalled_enabled.enabled="true" +queue_stalled_enabled.disabled="false" +queue_stalled_minutes=queueing:option(Value, "queue_stalled_minutes", translate("Queue stalled minutes")) +queue_stalled_minutes:depends("queue_stalled_enabled", "true") +seed_queue_enabled=queueing:option(Flag, "seed_queue_enabled", translate("Seed queue enabled")) +seed_queue_enabled.enabled="true" +seed_queue_enabled.disabled="false" +seed_queue_size=queueing:option(Value, "seed_queue_size", translate("Seed queue size")) +seed_queue_size:depends("seed_queue_enabled", "true") +scrape_paused_torrents_enabled=queueing:option(Flag, "scrape_paused_torrents_enabled", translate("Scrape paused torrents enabled")) +scrape_paused_torrents_enabled.enabled="true" +scrape_paused_torrents_enabled.disabled="false" + +return m diff --git a/feeds/luci/applications/luci-app-transmission/po/ca/transmission.po b/feeds/luci/applications/luci-app-transmission/po/ca/transmission.po new file mode 100644 index 0000000..2498393 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/ca/transmission.po @@ -0,0 +1,297 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-06-01 23:27+0200\n" +"PO-Revision-Date: 2014-07-17 23:50+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "Velocitat de baixada alternativa" + +msgid "Alternative speed enabled" +msgstr "Velocitat alternativa habilitada" + +msgid "Alternative speed time begin" +msgstr "Hora inicial de velocitat alternativa" + +msgid "Alternative speed time day" +msgstr "Dia de velocitat alternativa" + +msgid "Alternative speed time end" +msgstr "Hora final de velocitat alternativa" + +msgid "Alternative speed timing enabled" +msgstr "Temporització de velocitat alternativa habilitada" + +msgid "Alternative upload speed" +msgstr "Velocitat de pujada alternativa" + +msgid "Automatically start added torrents" +msgstr "Comença automàticament els torrents afegits" + +msgid "Bandwidth settings" +msgstr "Ajusts d'amplada de banda" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "Llista de bloqueig habilitada" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "Llistes de bloqueig" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "Directori de fitxer de configuració" + +msgid "DHT enabled" +msgstr "DHT habilitat" + +msgid "Debug" +msgstr "Depuració" + +msgid "Download directory" +msgstr "Directori de baixada" + +msgid "Download queue enabled" +msgstr "Cua de baixada habilitada" + +msgid "Download queue size" +msgstr "Mida de cua de baixada" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "Habilitat" + +msgid "Encryption" +msgstr "Xifració" + +msgid "Error" +msgstr "Error" + +msgid "Fast" +msgstr "Ràpid" + +msgid "Files and Locations" +msgstr "Fitxers i ubicacions" + +msgid "Forced" +msgstr "Forçat" + +msgid "Full" +msgstr "Ple" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "Ajusts globals" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "Directori incomplet" + +msgid "Incomplete directory enabled" +msgstr "Directori incomplet habilitat" + +msgid "Info" +msgstr "Informació" + +msgid "LPD enabled" +msgstr "LPD habilitat" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "Miscel·lani" + +msgid "None" +msgstr "Cap" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "Desactivat" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "PEX habilitat" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "Preferit" + +msgid "Prefetch enabled" +msgstr "Precarrega habilitada" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "Autenticació RPC requerida" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "RPC habilitat" + +msgid "RPC password" +msgstr "Contrasenya RPC" + +msgid "RPC port" +msgstr "Port RPC" + +msgid "RPC settings" +msgstr "Ajusts RPC" + +msgid "RPC username" +msgstr "Nom d'usuari RPC" + +msgid "RPC whitelist" +msgstr "Llista blanca RPC" + +msgid "RPC whitelist enabled" +msgstr "Llista blanca RPC habilitada" + +msgid "Ratio limit" +msgstr "Límit de ràtio" + +msgid "Ratio limit enabled" +msgstr "Límit de ràtio habilitat" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "Executa el dimoni com l'usuari" + +msgid "Scheduling" +msgstr "Programació" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "Transmission" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" +"El dimoni Transmission és un client de bittorrent senzill, aquí podeu " +"configurar els ajusts." + +msgid "Trash original torrent files" +msgstr "Suprimeix els fitxers de torrent originals" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "Directori que vigilar" + +msgid "in minutes from midnight" +msgstr "en minuts des de la mitjanit" + +msgid "preallocation" +msgstr "preassignació" + +msgid "uTP enabled" +msgstr "uTP habilitat" diff --git a/feeds/luci/applications/luci-app-transmission/po/cs/transmission.po b/feeds/luci/applications/luci-app-transmission/po/cs/transmission.po new file mode 100644 index 0000000..b6166ec --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/cs/transmission.po @@ -0,0 +1,295 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-06 17:54+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "Alternativní rychlost download" + +msgid "Alternative speed enabled" +msgstr "Povolit alternativní rychlost" + +msgid "Alternative speed time begin" +msgstr "Začátek doby alternativní rychlosti" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "Konec doby alternativní rychlosti" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "Alternativní rychlost uploadu" + +msgid "Automatically start added torrents" +msgstr "Automaticky začít stahovat nové torrenty" + +msgid "Bandwidth settings" +msgstr "Nastavení přenosové rychlosti" + +msgid "Binding address IPv4" +msgstr "Svázání s IPv4 adresou" + +msgid "Binding address IPv6" +msgstr "Svázání s IPv6 adresou" + +msgid "Block list enabled" +msgstr "Povolit černou listinu" + +msgid "Blocklist URL" +msgstr "URL černé listiny" + +msgid "Blocklists" +msgstr "Černé listiny" + +msgid "Cache size in MB" +msgstr "Velikost mezipaměti v MB" + +msgid "Config file directory" +msgstr "Složka pro uložení konfiguračního souboru" + +msgid "DHT enabled" +msgstr "Povolit DHT" + +msgid "Debug" +msgstr "Debug" + +msgid "Download directory" +msgstr "Adresář pro stahované" + +msgid "Download queue enabled" +msgstr "Povolit stahovací frontu" + +msgid "Download queue size" +msgstr "Velikost stahovací fronty" + +msgid "Enable watch directory" +msgstr "Povolit sledování složky" + +msgid "Enabled" +msgstr "Povolit" + +msgid "Encryption" +msgstr "Šifrování" + +msgid "Error" +msgstr "Chyba" + +msgid "Fast" +msgstr "Rychlá" + +msgid "Files and Locations" +msgstr "Soubory a umístění" + +msgid "Forced" +msgstr "Vynucené" + +msgid "Full" +msgstr "Plná" + +msgid "Global peer limit" +msgstr "Globální peer limit" + +msgid "Global settings" +msgstr "Globální nastavení" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "Složka pro nedokončená stahování" + +msgid "Incomplete directory enabled" +msgstr "Povolit složku pro nedokončená stahování" + +msgid "Info" +msgstr "Info" + +msgid "LPD enabled" +msgstr "Povolit LPD" + +msgid "Lazy bitfield enabled" +msgstr "Povolit lazy bitfield" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "Ostatní" + +msgid "None" +msgstr "Žádný" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "Vypnuta" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "Povolit PEX" + +msgid "Peer Port settings" +msgstr "Nastavení peer portu" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "Peer limit na torrent" + +msgid "Peer port" +msgstr "Peer port" + +msgid "Peer port random high" +msgstr "Peer port náhodný nejvyšší" + +msgid "Peer port random low" +msgstr "Peer port náhodný nejnižší" + +msgid "Peer port random on start" +msgstr "Náhodný peer port při startu" + +msgid "Peer settings" +msgstr "Nastavení peer" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "Povolit port forwarding" + +msgid "Preferred" +msgstr "Preferované" + +msgid "Prefetch enabled" +msgstr "Povolit přednačítání" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "RPC URL" + +msgid "RPC authentication required" +msgstr "RPC ověřování vyžadováno" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "Povolit RPC" + +msgid "RPC password" +msgstr "RPC heslo" + +msgid "RPC port" +msgstr "RPC port" + +msgid "RPC settings" +msgstr "Nastavení RPC" + +msgid "RPC username" +msgstr "Uživatelské jméno RPC" + +msgid "RPC whitelist" +msgstr "RPC whitelist" + +msgid "RPC whitelist enabled" +msgstr "Povolit RPC whitelist" + +msgid "Ratio limit" +msgstr "Ratio limit" + +msgid "Ratio limit enabled" +msgstr "Povolit ratio limit" + +msgid "Rename partial files" +msgstr "Přejmenovat dílčí soubory" + +msgid "Run daemon as user" +msgstr "Spustit daemona jako uživatel" + +msgid "Scheduling" +msgstr "Plánování" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "Povolit seed frontu" + +msgid "Seed queue size" +msgstr "Velikost seed fronty" + +msgid "Speed limit down" +msgstr "Rychlostní limit downloadu" + +msgid "Speed limit down enabled" +msgstr "Povolit rychlostní limit downloadu" + +msgid "Speed limit up" +msgstr "Rychlostní limit uploadu" + +msgid "Speed limit up enabled" +msgstr "Povolit rychlostní limit uploadu" + +msgid "Transmission" +msgstr "Transmission" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" +"Transmission daemon je jednoduchý BitTorrent klient, zde můžete provést jeho " +"nastavení." + +msgid "Trash original torrent files" +msgstr "Odstranit původní torrent soubory" + +msgid "Upload slots per torrent" +msgstr "Upload sloty na torrent" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "v minutách od půlnoci" + +msgid "preallocation" +msgstr "prealokace" + +msgid "uTP enabled" +msgstr "Povolit uTP" diff --git a/feeds/luci/applications/luci-app-transmission/po/de/transmission.po b/feeds/luci/applications/luci-app-transmission/po/de/transmission.po new file mode 100644 index 0000000..4b665ff --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/de/transmission.po @@ -0,0 +1,300 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-07-17 15:08+0200\n" +"PO-Revision-Date: 2013-01-28 23:03+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "Alternative Download-Geschwindigkeit" + +msgid "Alternative speed enabled" +msgstr "Alternative Geschwindigkeit aktivieren" + +msgid "Alternative speed time begin" +msgstr "Zeit für Beginn der alternativen Geschwindigkeit" + +msgid "Alternative speed time day" +msgstr "Tag für alternative Geschwindigkeit" + +msgid "Alternative speed time end" +msgstr "Zeit für Ende der alternativen Geschwindigkeit" + +msgid "Alternative speed timing enabled" +msgstr "Zeiteinstellung für alternative Geschwindigkeit eingeschaltet" + +msgid "Alternative upload speed" +msgstr "Alternative Upload-Geschwindigkeit" + +msgid "Automatically start added torrents" +msgstr "Hinzugefügte Torrents automatisch starten" + +msgid "Bandwidth settings" +msgstr "Bandbreiten-Einstellungen" + +msgid "Binding address IPv4" +msgstr "IPv4-Adressbindung" + +msgid "Binding address IPv6" +msgstr "IPv6-Adressbindung" + +msgid "Block list enabled" +msgstr "Blockier-Liste eingeschaltet" + +msgid "Blocklist URL" +msgstr "URL für Blockier-Liste" + +msgid "Blocklists" +msgstr "Blockier-Listen" + +msgid "Cache size in MB" +msgstr "Cache-Größe in MB" + +msgid "Config file directory" +msgstr "Verzeichnis für Konfigurationsdatei" + +msgid "DHT enabled" +msgstr "DHT eingeschaltet" + +msgid "Debug" +msgstr "Debug" + +msgid "Download directory" +msgstr "Verzeichnis für Downloads" + +msgid "Download queue enabled" +msgstr "Download-Warteschlange eingeschaltet" + +msgid "Download queue size" +msgstr "Größe der Download-Warteschlange" + +msgid "Enable watch directory" +msgstr "Verzeichnisüberprüfung eingeschaltet" + +msgid "Enabled" +msgstr "Eingeschaltet" + +msgid "Encryption" +msgstr "Verschlüsselung" + +msgid "Error" +msgstr "Fehler" + +msgid "Fast" +msgstr "Schnell" + +msgid "Files and Locations" +msgstr "Dateien und Orte" + +msgid "Forced" +msgstr "Erzwungen" + +msgid "Full" +msgstr "Voll" + +msgid "Global peer limit" +msgstr "Allgemeines Peer-Limit" + +msgid "Global settings" +msgstr "Allgemeine Einstellungen" + +msgid "Idle seeding limit" +msgstr "Begrenzung für Seeding im Idle-Zustand" + +msgid "Idle seeding limit enabled" +msgstr "Begrenzung für Seeding im Idle-Zustand eingeschaltet" + +msgid "Incomplete directory" +msgstr "unvollständiges Verzeichnis" + +msgid "Incomplete directory enabled" +msgstr "unvollständiges Verzeichnis eingeschaltet" + +msgid "Info" +msgstr "Info" + +msgid "LPD enabled" +msgstr "LPD eingeschaltet" + +msgid "Lazy bitfield enabled" +msgstr "Lazy-Bitfield eingeschaltet" + +msgid "Message level" +msgstr "Nachrichten-Ebene" + +msgid "Miscellaneous" +msgstr "Verschiedenes" + +msgid "None" +msgstr "Keines" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" +"Zahl/Bitfeld. Starte mit 0, für jeden Tag, an dem die Zeitplanung aktiv sein " +"soll, füge einen Wert hinzu. Sonntag - 1, Montag - 2, Dienstag - 4, " +"Mittwoch - 8, Donnerstag - 16, Freitag - 32, Samstag - 64" + +msgid "Off" +msgstr "Aus" + +msgid "Open Web Interface" +msgstr "Offenes Web-Interface" + +msgid "PEX enabled" +msgstr "PEX aktiv" + +msgid "Peer Port settings" +msgstr "Einstellungen für Peer-Port" + +msgid "Peer congestion algorithm" +msgstr "Algorithmus für Peer-Überlastungen" + +msgid "Peer limit per torrent" +msgstr "Peer-Begrenzung pro Torrent" + +msgid "Peer port" +msgstr "Peer-Port" + +msgid "Peer port random high" +msgstr "Peer-Port: hohe Zufallszahl" + +msgid "Peer port random low" +msgstr "Peer-Port: niedrige Zufallszahl" + +msgid "Peer port random on start" +msgstr "Zufälliger Peer-Port beim Start" + +msgid "Peer settings" +msgstr "Peer-Einstellungen" + +msgid "Peer socket tos" +msgstr "Peer-Socket-TOS" + +msgid "Port forwarding enabled" +msgstr "Port-Weiterleitung aktiv" + +msgid "Preferred" +msgstr "Bevorzugt" + +msgid "Prefetch enabled" +msgstr "Prefetch aktiv" + +msgid "Queue stalled enabled" +msgstr "Warteschlangen-Halt aktiv" + +msgid "Queue stalled minutes" +msgstr "Warteschlangen-Halt in Minuten" + +msgid "Queueing" +msgstr "in Warteschlange stellen" + +msgid "RPC URL" +msgstr "RPC-URL" + +msgid "RPC authentication required" +msgstr "RPC-Anmeldung erforderlich" + +msgid "RPC bind address" +msgstr "RPC-Adressbindung" + +msgid "RPC enabled" +msgstr "RPC eingeschaltet" + +msgid "RPC password" +msgstr "RPC-Passwort" + +msgid "RPC port" +msgstr "RPC-Port" + +msgid "RPC settings" +msgstr "RPC-Einstellungen" + +msgid "RPC username" +msgstr "RPC-Benutzername" + +msgid "RPC whitelist" +msgstr "RPC-Einschlussliste" + +msgid "RPC whitelist enabled" +msgstr "RPC-Einschlussliste aktiv" + +msgid "Ratio limit" +msgstr "Ratio-Begrenzung" + +msgid "Ratio limit enabled" +msgstr "Ratio-Begrenzung aktiv" + +msgid "Rename partial files" +msgstr "Teildateien umbenennen" + +msgid "Run daemon as user" +msgstr "Den Daemon als Benutzer starten" + +msgid "Scheduling" +msgstr "Zeitplanung" + +msgid "Scrape paused torrents enabled" +msgstr "Pausierte Torrents beschneiden" + +msgid "Script torrent done enabled" +msgstr "Skript nach Abschluss eines Torrents aktiv" + +msgid "Script torrent done filename" +msgstr "Skript nach Abschluss eines Torrents: Dateiname" + +msgid "Seed queue enabled" +msgstr "Seed-Warteschlange aktiv" + +msgid "Seed queue size" +msgstr "Größe der Seed-Warteschlange" + +msgid "Speed limit down" +msgstr "Geschwindigkeitsbegrenzung Down" + +msgid "Speed limit down enabled" +msgstr "Geschwindigkeitsbegrenzung Down aktiv" + +msgid "Speed limit up" +msgstr "Geschwindigkeitsbegrenzung Up" + +msgid "Speed limit up enabled" +msgstr "Geschwindigkeitsbegrenzung Up aktiv" + +msgid "Transmission" +msgstr "Übertragung" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" +"Der Transmission-Daemon ist ein einfacher Bittorent-Client. Hier können Sie " +"ihn einstellen." + +msgid "Trash original torrent files" +msgstr "Originale Torrent-Dateien verwerfen" + +msgid "Upload slots per torrent" +msgstr "Upload-Plätze pro Torrent" + +msgid "Watch directory" +msgstr "Überwachtes Verzeichnis" + +msgid "in minutes from midnight" +msgstr "in Minuten ab Mitternacht" + +msgid "preallocation" +msgstr "Vorbelegung" + +msgid "uTP enabled" +msgstr "uTP eingeschaltet" diff --git a/feeds/luci/applications/luci-app-transmission/po/el/transmission.po b/feeds/luci/applications/luci-app-transmission/po/el/transmission.po new file mode 100644 index 0000000..3125fc2 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/el/transmission.po @@ -0,0 +1,280 @@ +msgid "Alternative download speed" +msgstr "" + +msgid "Alternative speed enabled" +msgstr "" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Forced" +msgstr "" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/en/transmission.po b/feeds/luci/applications/luci-app-transmission/po/en/transmission.po new file mode 100644 index 0000000..3125fc2 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/en/transmission.po @@ -0,0 +1,280 @@ +msgid "Alternative download speed" +msgstr "" + +msgid "Alternative speed enabled" +msgstr "" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Forced" +msgstr "" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/es/transmission.po b/feeds/luci/applications/luci-app-transmission/po/es/transmission.po new file mode 100644 index 0000000..9eeb2fb --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/es/transmission.po @@ -0,0 +1,299 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-21 22:06+0200\n" +"PO-Revision-Date: 2012-08-26 10:47+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "Velocidad de descarga alternativa" + +msgid "Alternative speed enabled" +msgstr "Velocidad alternativa activada" + +msgid "Alternative speed time begin" +msgstr "Hora de inicio de la velocidad alternativa" + +msgid "Alternative speed time day" +msgstr "Día de la velocidad alternativa" + +msgid "Alternative speed time end" +msgstr "Hora de fin de la velocidad alternativa" + +msgid "Alternative speed timing enabled" +msgstr "Temporización alternativa de la velocidad activada" + +msgid "Alternative upload speed" +msgstr "Velocidad de subida alternativa" + +msgid "Automatically start added torrents" +msgstr "Arrancar automáticamente los torrents al añadirlos" + +msgid "Bandwidth settings" +msgstr "Configuración del ancho de banda" + +msgid "Binding address IPv4" +msgstr "Dirección IPv4 a asociar" + +msgid "Binding address IPv6" +msgstr "Dirección IPv6 a asociar" + +msgid "Block list enabled" +msgstr "Lista de bloques activada" + +msgid "Blocklist URL" +msgstr "URL de la lista de bloques" + +msgid "Blocklists" +msgstr "Listas de bloques" + +msgid "Cache size in MB" +msgstr "Tamaño de la caché en MB" + +msgid "Config file directory" +msgstr "Directorio del fichero de configuración" + +msgid "DHT enabled" +msgstr "DHT activado" + +msgid "Debug" +msgstr "Depurar" + +msgid "Download directory" +msgstr "Directorio de descargas" + +msgid "Download queue enabled" +msgstr "Cola de descargas activada" + +msgid "Download queue size" +msgstr "Tamaño de la cola de descargas" + +msgid "Enable watch directory" +msgstr "Activar directorio a observar" + +msgid "Enabled" +msgstr "Activado" + +msgid "Encryption" +msgstr "Encriptado" + +msgid "Error" +msgstr "Error" + +msgid "Fast" +msgstr "Rápido" + +msgid "Files and Locations" +msgstr "Ficheros y posiciones" + +msgid "Forced" +msgstr "Forzado" + +msgid "Full" +msgstr "Lleno" + +msgid "Global peer limit" +msgstr "Límite global de máquinas" + +msgid "Global settings" +msgstr "Configuración global" + +msgid "Idle seeding limit" +msgstr "Límite de sembrado en vacío" + +msgid "Idle seeding limit enabled" +msgstr "Límite de sembrado en vacío activado" + +msgid "Incomplete directory" +msgstr "Directorio incompleto" + +msgid "Incomplete directory enabled" +msgstr "Directorio incompleto activado" + +msgid "Info" +msgstr "Información" + +msgid "LPD enabled" +msgstr "LPD activado" + +msgid "Lazy bitfield enabled" +msgstr "Lazy bitfield activado" + +msgid "Message level" +msgstr "Nivel de mensajes" + +msgid "Miscellaneous" +msgstr "Varios" + +msgid "None" +msgstr "Ninguno" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" +"Número/en bits. Empiece con 0 y por cada día que quiera que se active el " +"programados sume: Para domingo - 1, lunes - 2, martes - 4, miércoles - 8, " +"jueves - 16, viernes - 32, sábado - 64" + +msgid "Off" +msgstr "Apagado" + +msgid "Open Web Interface" +msgstr "Interfaz de red abierta" + +msgid "PEX enabled" +msgstr "PEX activado" + +msgid "Peer Port settings" +msgstr "Configuración de puertos" + +msgid "Peer congestion algorithm" +msgstr "Algoritmo de congestión" + +msgid "Peer limit per torrent" +msgstr "Límite por torrent" + +msgid "Peer port" +msgstr "Puerto" + +msgid "Peer port random high" +msgstr "Puerto más alto" + +msgid "Peer port random low" +msgstr "Puerto más bajo" + +msgid "Peer port random on start" +msgstr "Puerto aleatorio al arrancar" + +msgid "Peer settings" +msgstr "Configuración de peer" + +msgid "Peer socket tos" +msgstr "Peer socket tos" + +msgid "Port forwarding enabled" +msgstr "Traspaso de puertos activado" + +msgid "Preferred" +msgstr "Preferente" + +msgid "Prefetch enabled" +msgstr "Activar prefetch" + +msgid "Queue stalled enabled" +msgstr "Activar bloqueo de cola" + +msgid "Queue stalled minutes" +msgstr "Minutos de bloqueo de cola" + +msgid "Queueing" +msgstr "Colas" + +msgid "RPC URL" +msgstr "URL RPC" + +msgid "RPC authentication required" +msgstr "Autentificación RPC obligatoria" + +msgid "RPC bind address" +msgstr "Dirección de asociación RPC" + +msgid "RPC enabled" +msgstr "RPC activado" + +msgid "RPC password" +msgstr "Contraseña RPC" + +msgid "RPC port" +msgstr "Puerto RPC" + +msgid "RPC settings" +msgstr "Configuración RPC" + +msgid "RPC username" +msgstr "Nombre de usuario RPC" + +msgid "RPC whitelist" +msgstr "Lista blanca RPC" + +msgid "RPC whitelist enabled" +msgstr "Activar listas blancas RPC" + +msgid "Ratio limit" +msgstr "Límite de ratio" + +msgid "Ratio limit enabled" +msgstr "Límite de ratio activado" + +msgid "Rename partial files" +msgstr "Renombrar ficheros parciales" + +msgid "Run daemon as user" +msgstr "Ejecutar demonio como usuario" + +msgid "Scheduling" +msgstr "Programación" + +msgid "Scrape paused torrents enabled" +msgstr "Activar scrape de torrents en pausa" + +msgid "Script torrent done enabled" +msgstr "Activar script de fin de torrent" + +msgid "Script torrent done filename" +msgstr "Nombre de fichero del script" + +msgid "Seed queue enabled" +msgstr "Cola de seed activada" + +msgid "Seed queue size" +msgstr "Tamaño máximo de la cola de seed" + +msgid "Speed limit down" +msgstr "Velocidad mínima" + +msgid "Speed limit down enabled" +msgstr "Velocidad mínima activada" + +msgid "Speed limit up" +msgstr "Velocidad máxima" + +msgid "Speed limit up enabled" +msgstr "Velocidad máxima activada" + +msgid "Transmission" +msgstr "Transmission" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" +"Configuración. El demonio Transmission es un cliente de bittorrent simple." + +msgid "Trash original torrent files" +msgstr "Eliminar los ficheros torrent originales" + +msgid "Upload slots per torrent" +msgstr "Ranuras de subida por torrent" + +msgid "Watch directory" +msgstr "Directorio a vigilar" + +msgid "in minutes from midnight" +msgstr "en minutos para la media noche" + +msgid "preallocation" +msgstr "precolocación" + +msgid "uTP enabled" +msgstr "uTP activado" diff --git a/feeds/luci/applications/luci-app-transmission/po/fr/transmission.po b/feeds/luci/applications/luci-app-transmission/po/fr/transmission.po new file mode 100644 index 0000000..3125fc2 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/fr/transmission.po @@ -0,0 +1,280 @@ +msgid "Alternative download speed" +msgstr "" + +msgid "Alternative speed enabled" +msgstr "" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Forced" +msgstr "" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/he/transmission.po b/feeds/luci/applications/luci-app-transmission/po/he/transmission.po new file mode 100644 index 0000000..3125fc2 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/he/transmission.po @@ -0,0 +1,280 @@ +msgid "Alternative download speed" +msgstr "" + +msgid "Alternative speed enabled" +msgstr "" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Forced" +msgstr "" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/hu/transmission.po b/feeds/luci/applications/luci-app-transmission/po/hu/transmission.po new file mode 100644 index 0000000..040f838 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/hu/transmission.po @@ -0,0 +1,300 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-17 20:30+0200\n" +"PO-Revision-Date: 2012-04-26 14:30+0200\n" +"Last-Translator: Gyula \n" +"Language-Team: LANGUAGE \n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Alternative download speed" +msgstr "Alternatív letöltési sebesség" + +msgid "Alternative speed enabled" +msgstr "Alternatív sebesség engedélyezve" + +msgid "Alternative speed time begin" +msgstr "Alternatív sebesség kezdő időpont" + +msgid "Alternative speed time day" +msgstr "Alternatív sebesség napok" + +msgid "Alternative speed time end" +msgstr "Alternatív sebesség záró időpont" + +msgid "Alternative speed timing enabled" +msgstr "Alternatív sebesség időzítés engedélyezve" + +msgid "Alternative upload speed" +msgstr "Alternatív feltöltési sebesség" + +msgid "Automatically start added torrents" +msgstr "Hozzáadott torrentek automatikus indítása" + +msgid "Bandwidth settings" +msgstr "Sávszélesség beállítások" + +msgid "Binding address IPv4" +msgstr "Rögzített IPv4 cím" + +msgid "Binding address IPv6" +msgstr "Rögzített IPv6 cím" + +msgid "Block list enabled" +msgstr "Tiltólista engedélyezés" + +msgid "Blocklist URL" +msgstr "Tiltólista URL" + +msgid "Blocklists" +msgstr "Tiltólista" + +msgid "Cache size in MB" +msgstr "Puffer méret (MB)" + +msgid "Config file directory" +msgstr "Beállítási fájl könyvtára" + +msgid "DHT enabled" +msgstr "DHT engedélyezve" + +msgid "Debug" +msgstr "Nyomkövetés" + +msgid "Download directory" +msgstr "Letöltési könyvtár" + +msgid "Download queue enabled" +msgstr "Letöltési sor engedélyezve" + +msgid "Download queue size" +msgstr "Letöltési sor mérete" + +msgid "Enable watch directory" +msgstr "Figyelt könyvtár(aut. indítás)" + +msgid "Enabled" +msgstr "Engedélyezve" + +msgid "Encryption" +msgstr "Titkosítás" + +msgid "Error" +msgstr "Hiba" + +msgid "Fast" +msgstr "Gyors" + +msgid "Files and Locations" +msgstr "Fájlok és helyek" + +msgid "Forced" +msgstr "Erőltetve" + +msgid "Full" +msgstr "Teljes" + +msgid "Global peer limit" +msgstr "Globális partnerkorlát" + +msgid "Global settings" +msgstr "Globális beálllítások" + +msgid "Idle seeding limit" +msgstr "Üresjárati seedkorlát" + +msgid "Idle seeding limit enabled" +msgstr "Üresjárati seedkorlát engedélyezése" + +msgid "Incomplete directory" +msgstr "Befejezetlen fájlok mappája" + +msgid "Incomplete directory enabled" +msgstr "Befejezetlen fájlok mappájának engedélyezése" + +msgid "Info" +msgstr "Infó" + +msgid "LPD enabled" +msgstr "LPD engedélyezése" + +msgid "Lazy bitfield enabled" +msgstr "Lazy bitfield engedélyezése" + +msgid "Message level" +msgstr "Naplózási szint" + +msgid "Miscellaneous" +msgstr "Egyéb" + +msgid "None" +msgstr "Nincs" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" +"Szám/bitmező. Kezdj 0-val, és minden napnál, amikor az ütemezőt be akarod " +"kapcsolni, adj hozzá egy értéket. Vasárnap - 1, Hétfő - 2, Kedd - 4, Szerda " +"- 8, Csütörtök - 16, Péntek - 32, Szombat - 64" + +msgid "Off" +msgstr "Ki" + +msgid "Open Web Interface" +msgstr "Webes felület megnyitása" + +msgid "PEX enabled" +msgstr "PEX engedélyezése" + +msgid "Peer Port settings" +msgstr "Partner port beállítások" + +msgid "Peer congestion algorithm" +msgstr "Partner torlódási algoritmus" + +msgid "Peer limit per torrent" +msgstr "Torrentenkénti partnerkorlát" + +msgid "Peer port" +msgstr "Partner port" + +msgid "Peer port random high" +msgstr "Véletlenszerű magas partner port" + +msgid "Peer port random low" +msgstr "Véletlenszerű alacsony partner port" + +msgid "Peer port random on start" +msgstr "Véletlenszerű partner port induláskor" + +msgid "Peer settings" +msgstr "Partner beállítások" + +msgid "Peer socket tos" +msgstr "Partner szolgáltatás típus" + +msgid "Port forwarding enabled" +msgstr "Portátirányítás engedélyezése" + +msgid "Preferred" +msgstr "Előnyben részesített" + +msgid "Prefetch enabled" +msgstr "Előtöltés engedélyezése" + +msgid "Queue stalled enabled" +msgstr "Elakadt sor engedélyezése" + +msgid "Queue stalled minutes" +msgstr "Elakadás időtartama" + +msgid "Queueing" +msgstr "Sorbaállítás" + +msgid "RPC URL" +msgstr "RPC URL" + +msgid "RPC authentication required" +msgstr "RPC azonosítás megkövetelése" + +msgid "RPC bind address" +msgstr "RPC cím rögzítése" + +msgid "RPC enabled" +msgstr "RPC engedélyezése" + +msgid "RPC password" +msgstr "RPC jelszó" + +msgid "RPC port" +msgstr "RPC port" + +msgid "RPC settings" +msgstr "RPC beállítások" + +msgid "RPC username" +msgstr "RPC felhasználónév" + +msgid "RPC whitelist" +msgstr "RPC fehérlista" + +msgid "RPC whitelist enabled" +msgstr "RPC fehérlista engedélyezése" + +msgid "Ratio limit" +msgstr "Aránykorlát" + +msgid "Ratio limit enabled" +msgstr "Aránykorlát engedélyezése" + +msgid "Rename partial files" +msgstr "Félkész fájlok átnevezése" + +msgid "Run daemon as user" +msgstr "Daemon indítása, mint" + +msgid "Scheduling" +msgstr "Ütemezés" + +msgid "Scrape paused torrents enabled" +msgstr "Álló torrentek adatainak lekérdezése" + +msgid "Script torrent done enabled" +msgstr "Letöltés utáni script engedélyezése" + +msgid "Script torrent done filename" +msgstr "Letöltés utáni script fájlneve" + +msgid "Seed queue enabled" +msgstr "Feltöltési sor engedélyezése" + +msgid "Seed queue size" +msgstr "Feltöltési sor mérete" + +msgid "Speed limit down" +msgstr "Letöltési korlát" + +msgid "Speed limit down enabled" +msgstr "Letöltési korlát engedélyezése" + +msgid "Speed limit up" +msgstr "Feltöltési korlát" + +msgid "Speed limit up enabled" +msgstr "Feltöltési korlát engedélyezése" + +msgid "Transmission" +msgstr "Transmission" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" +"A Transmission daemon egy egyszerű bittorrent kliens, itt módosíthatod a " +"beállításait." + +msgid "Trash original torrent files" +msgstr "Eredeti torrent fájlok eldobása" + +msgid "Upload slots per torrent" +msgstr "Feltöltési szálak torrentenként" + +msgid "Watch directory" +msgstr "Figyelt könyvtár" + +msgid "in minutes from midnight" +msgstr "percek száma éjféltől" + +msgid "preallocation" +msgstr "előre lefoglalás" + +msgid "uTP enabled" +msgstr "uTP engedélyezése" diff --git a/feeds/luci/applications/luci-app-transmission/po/it/transmission.po b/feeds/luci/applications/luci-app-transmission/po/it/transmission.po new file mode 100644 index 0000000..1008fad --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/it/transmission.po @@ -0,0 +1,295 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-09 21:28+0200\n" +"PO-Revision-Date: 2013-02-09 21:30+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "Velocità di download alternativo" + +msgid "Alternative speed enabled" +msgstr "Velocità alternativa attivata" + +msgid "Alternative speed time begin" +msgstr "Tempo di velocità alternativa inizio" + +msgid "Alternative speed time day" +msgstr "Tempo di velocità alternativa giorno" + +msgid "Alternative speed time end" +msgstr "Tempo di velocità alternativa fine" + +msgid "Alternative speed timing enabled" +msgstr "Periodo di velocità alternativa attiva" + +msgid "Alternative upload speed" +msgstr "Velocità alternativa di upload" + +msgid "Automatically start added torrents" +msgstr "Avvia automaticamente i torrent aggiunti" + +msgid "Bandwidth settings" +msgstr "Impostazioni larghezza della banda" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Forced" +msgstr "" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/ja/transmission.po b/feeds/luci/applications/luci-app-transmission/po/ja/transmission.po new file mode 100644 index 0000000..dded650 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/ja/transmission.po @@ -0,0 +1,295 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-18 11:15+0200\n" +"PO-Revision-Date: 2013-10-05 17:17+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "一時的な下り速度制限" + +msgid "Alternative speed enabled" +msgstr "一時的な速度制限機能を有効にする" + +msgid "Alternative speed time begin" +msgstr "一時的な速度制限 開始時間" + +msgid "Alternative speed time day" +msgstr "一時的な速度制限 制限日" + +msgid "Alternative speed time end" +msgstr "一時的な速度制限 終了時間" + +msgid "Alternative speed timing enabled" +msgstr "一時的な速度制限のスケジューリング機能を有効にする" + +msgid "Alternative upload speed" +msgstr "一時的な上り速度制限" + +msgid "Automatically start added torrents" +msgstr "追加されたtorrent は自動的に開始する" + +msgid "Bandwidth settings" +msgstr "帯域設定" + +msgid "Binding address IPv4" +msgstr "バインドするIPv4 アドレス" + +msgid "Binding address IPv6" +msgstr "バインドするIPv6 アドレス" + +msgid "Block list enabled" +msgstr "ブロックリストを有効にする" + +msgid "Blocklist URL" +msgstr "ブロックリスト URL" + +msgid "Blocklists" +msgstr "ブロックリスト" + +msgid "Cache size in MB" +msgstr "キャッシュサイズ (MB)" + +msgid "Config file directory" +msgstr "コンフィグファイル・ディレクトリ" + +msgid "DHT enabled" +msgstr "DHTを有効にする" + +msgid "Debug" +msgstr "デバッグ情報" + +msgid "Download directory" +msgstr "ダウンロード先のディレクトリ" + +msgid "Download queue enabled" +msgstr "ダウンロード・キュー機能を有効にする" + +msgid "Download queue size" +msgstr "ダウンロード・キューのサイズ" + +msgid "Enable watch directory" +msgstr "ディレクトリ監視機能を有効にする" + +msgid "Enabled" +msgstr "サービスを有効にする" + +msgid "Encryption" +msgstr "暗号化" + +msgid "Error" +msgstr "エラー情報" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "ファイルおよびロケーション設定" + +msgid "Forced" +msgstr "強制する" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "全体の最大ピア数" + +msgid "Global settings" +msgstr "グローバル設定" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "情報" + +msgid "LPD enabled" +msgstr "LPD を有効にする" + +msgid "Lazy bitfield enabled" +msgstr "Lazy bitfield を有効にする" + +msgid "Message level" +msgstr "メッセージレベル" + +msgid "Miscellaneous" +msgstr "詳細設定" + +msgid "None" +msgstr "なし" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "使用しない" + +msgid "Open Web Interface" +msgstr "WEBブラウザで開く" + +msgid "PEX enabled" +msgstr "PEX を有効にする" + +msgid "Peer Port settings" +msgstr "ピアポート設定" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "torrent 毎の最大ピア数" + +msgid "Peer port" +msgstr "ピアポート" + +msgid "Peer port random high" +msgstr "ポートをランダムに選択する際の上限値" + +msgid "Peer port random low" +msgstr "ポートをランダムに選択する際の下限値" + +msgid "Peer port random on start" +msgstr "サービススタート時にポートをランダムに選択する" + +msgid "Peer settings" +msgstr "ピア設定" + +msgid "Peer socket tos" +msgstr "ピアソケットのTOS" + +msgid "Port forwarding enabled" +msgstr "ポート転送を有効にする" + +msgid "Preferred" +msgstr "優先する" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "キューイング設定" + +msgid "RPC URL" +msgstr "RPC URL" + +msgid "RPC authentication required" +msgstr "RPC 認証機能を有効にする" + +msgid "RPC bind address" +msgstr "RPC バインドアドレス" + +msgid "RPC enabled" +msgstr "RPC機能を有効にする" + +msgid "RPC password" +msgstr "RPC パスワード" + +msgid "RPC port" +msgstr "RPC ポート" + +msgid "RPC settings" +msgstr "RPC 設定" + +msgid "RPC username" +msgstr "RPC ユーザー名" + +msgid "RPC whitelist" +msgstr "RPC ホワイトリスト" + +msgid "RPC whitelist enabled" +msgstr "RPC ホワイトリスト機能を有効にする" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "デーモンのユーザー権限設定" + +msgid "Scheduling" +msgstr "スケジューラ設定" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "torrent 完了時にスクリプトを実行する" + +msgid "Script torrent done filename" +msgstr "torrent 完了時に実行するスクリプト・ファイルパス" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "下り速度制限" + +msgid "Speed limit down enabled" +msgstr "下り速度制限機能を有効にする" + +msgid "Speed limit up" +msgstr "上り速度制限" + +msgid "Speed limit up enabled" +msgstr "上り速度制限機能を有効にする" + +msgid "Transmission" +msgstr "Transmission" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "Transmissionは、シンプルなbittorrentクライアントです。" + +msgid "Trash original torrent files" +msgstr "オリジナルのtorrent ファイルをゴミ箱に移動する" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "監視するディレクトリ" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "uTP を有効にする" diff --git a/feeds/luci/applications/luci-app-transmission/po/ms/transmission.po b/feeds/luci/applications/luci-app-transmission/po/ms/transmission.po new file mode 100644 index 0000000..3125fc2 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/ms/transmission.po @@ -0,0 +1,280 @@ +msgid "Alternative download speed" +msgstr "" + +msgid "Alternative speed enabled" +msgstr "" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Forced" +msgstr "" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/no/transmission.po b/feeds/luci/applications/luci-app-transmission/po/no/transmission.po new file mode 100644 index 0000000..cb86841 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/no/transmission.po @@ -0,0 +1,298 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-03-25 21:10+0200\n" +"PO-Revision-Date: 2013-04-05 09:10+0200\n" +"Last-Translator: protx \n" +"Language-Team: LANGUAGE \n" +"Language: no\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "Alternativ nedlastingshastighet" + +msgid "Alternative speed enabled" +msgstr "Alternativ hastighet aktivert" + +msgid "Alternative speed time begin" +msgstr "Alternativ hastighet start tid" + +msgid "Alternative speed time day" +msgstr "Alternativ hastighet tid på dagen" + +msgid "Alternative speed time end" +msgstr "Alternativ hastighet tid når ferdig" + +msgid "Alternative speed timing enabled" +msgstr "Alternativ hastighet tidspunkt aktivert" + +msgid "Alternative upload speed" +msgstr "Alternativ opplastingshastighet" + +msgid "Automatically start added torrents" +msgstr "Start automatisk torrents som legges til" + +msgid "Bandwidth settings" +msgstr "Båndbredde innstillinger" + +msgid "Binding address IPv4" +msgstr "Bindinger IPv4 adresse" + +msgid "Binding address IPv6" +msgstr "Bindinger IPv6 adresse" + +msgid "Block list enabled" +msgstr "Blokkeringsliste aktivert" + +msgid "Blocklist URL" +msgstr "Blokkeringsliste URL" + +msgid "Blocklists" +msgstr "Blokkeringsliste" + +msgid "Cache size in MB" +msgstr "Bufferstørrelse i MB" + +msgid "Config file directory" +msgstr "Mappe for konfigurasjonsfil" + +msgid "DHT enabled" +msgstr "DHT aktivert" + +msgid "Debug" +msgstr "Feilsøking" + +msgid "Download directory" +msgstr "Nedlastingsmappe" + +msgid "Download queue enabled" +msgstr "Nedlastingkø aktivert" + +msgid "Download queue size" +msgstr "Nedlastingkø størrelse" + +msgid "Enable watch directory" +msgstr "Aktiver overvåking av torrent mappe" + +msgid "Enabled" +msgstr "Aktivert" + +msgid "Encryption" +msgstr "Kryptering" + +msgid "Error" +msgstr "Feil" + +msgid "Fast" +msgstr "Rask" + +msgid "Files and Locations" +msgstr "Filer og plasseringer" + +msgid "Forced" +msgstr "Tvunget" + +msgid "Full" +msgstr "Full" + +msgid "Global peer limit" +msgstr "Global peer grense" + +msgid "Global settings" +msgstr "Globale innstillinger" + +msgid "Idle seeding limit" +msgstr "Inaktiv seeding grense" + +msgid "Idle seeding limit enabled" +msgstr "Inaktiv seeding grense aktivert" + +msgid "Incomplete directory" +msgstr "Ufullstendig mappe" + +msgid "Incomplete directory enabled" +msgstr "Ufullstendig mappe aktivert" + +msgid "Info" +msgstr "Info" + +msgid "LPD enabled" +msgstr "LPD aktivert" + +msgid "Lazy bitfield enabled" +msgstr "Lazy bitfield aktivert" + +msgid "Message level" +msgstr "Nivå for meldinger" + +msgid "Miscellaneous" +msgstr "Diverse" + +msgid "None" +msgstr "Ingen" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" +"Nummer/bitfield. Start med 0, og for hver dag en vil at planleggeren skal " +"være aktivert legger en til en verdi. For Søndag - 1, Mandag - 2, Tirsdag - " +"4, Onsdag - 8, Torsdag - 16, Fredag - 32, Lørdag - 64" + +msgid "Off" +msgstr "Av" + +msgid "Open Web Interface" +msgstr "Åpne webgrensesnitt" + +msgid "PEX enabled" +msgstr "PEX aktivert" + +msgid "Peer Port settings" +msgstr "Peer port innstillinger" + +msgid "Peer congestion algorithm" +msgstr "Peer congestion algoritme" + +msgid "Peer limit per torrent" +msgstr "Peer grense per torrent" + +msgid "Peer port" +msgstr "Peer port" + +msgid "Peer port random high" +msgstr "Peer port tilfeldig høy" + +msgid "Peer port random low" +msgstr "Peer port tilfeldig lav" + +msgid "Peer port random on start" +msgstr "Peer port tilfeldig ved start" + +msgid "Peer settings" +msgstr "Peer innstillinger" + +msgid "Peer socket tos" +msgstr "Peer tilslutning tos" + +msgid "Port forwarding enabled" +msgstr "Port videresending aktivert" + +msgid "Preferred" +msgstr "Prioritert" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/pl/transmission.po b/feeds/luci/applications/luci-app-transmission/po/pl/transmission.po new file mode 100644 index 0000000..f010d56 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/pl/transmission.po @@ -0,0 +1,302 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-19 21:20+0200\n" +"PO-Revision-Date: 2014-02-25 18:13+0200\n" +"Last-Translator: TheTranslator2238 \n" +"Language-Team: LANGUAGE \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "Alternatywna prędkość pobierania" + +msgid "Alternative speed enabled" +msgstr "Prędkość alternatywna włączona" + +msgid "Alternative speed time begin" +msgstr "Godzina włączenia prędkości alternatywnej" + +msgid "Alternative speed time day" +msgstr "Dzień prędkości alternatywnej" + +msgid "Alternative speed time end" +msgstr "Godzina wyłączenia prędkości alternatywnej" + +msgid "Alternative speed timing enabled" +msgstr "Włączanie prędkości alternatywnej w podanym czasie" + +msgid "Alternative upload speed" +msgstr "Alternatywna prędkość wysyłania" + +msgid "Automatically start added torrents" +msgstr "Automatyczne rozpoczęcie pobierania nowych torrentów" + +msgid "Bandwidth settings" +msgstr "Ustawienia przepustowości" + +msgid "Binding address IPv4" +msgstr "Przypisanie adresu IPv4" + +msgid "Binding address IPv6" +msgstr "Przypisanie adresu IPv6" + +msgid "Block list enabled" +msgstr "Lista blokowania włączona" + +msgid "Blocklist URL" +msgstr "URL listy blokowania" + +msgid "Blocklists" +msgstr "Listy blokowania" + +msgid "Cache size in MB" +msgstr "Wielkość cache w MB" + +msgid "Config file directory" +msgstr "Katalog z plikiem konfiguracyjnym" + +msgid "DHT enabled" +msgstr "DHT włączone" + +msgid "Debug" +msgstr "Debug" + +msgid "Download directory" +msgstr "Katalog pobierania" + +msgid "Download queue enabled" +msgstr "Kolejka pobierania włączona" + +msgid "Download queue size" +msgstr "Rozmiar kolejki pobierania" + +msgid "Enable watch directory" +msgstr "Włącz folder obserwowany" + +msgid "Enabled" +msgstr "Włączone" + +msgid "Encryption" +msgstr "Szyfrowanie" + +msgid "Error" +msgstr "Błąd" + +msgid "Fast" +msgstr "Szybko" + +msgid "Files and Locations" +msgstr "Pliki i położenia" + +msgid "Forced" +msgstr "Wymuszone" + +msgid "Full" +msgstr "Pełne" + +msgid "Global peer limit" +msgstr "Globalny limit peerów" + +msgid "Global settings" +msgstr "Ustawienia globalne" + +msgid "Idle seeding limit" +msgstr "Limit przesyłu w bezczynności" + +msgid "Idle seeding limit enabled" +msgstr "Włączony limit transferu podczas bezczynności" + +msgid "Incomplete directory" +msgstr "Niekompletny katalog" + +msgid "Incomplete directory enabled" +msgstr "Opcja \"Niekompletny katalog\" włączona" + +msgid "Info" +msgstr "Info" + +msgid "LPD enabled" +msgstr "LPD włączone" + +msgid "Lazy bitfield enabled" +msgstr "Lazy bitfield włączone" + +msgid "Message level" +msgstr "Poziom komunikatów" + +msgid "Miscellaneous" +msgstr "Różności" + +msgid "None" +msgstr "Żaden" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" +"Liczba/pole bitowe. Zaczyna się od 0, następnie dla każdego dnia dla jakiego " +"chcesz włączyć harmonogram dodaj odpowiednią wartość. Niedziela - 1, " +"Poniedziałek - 2, Wtorek - 4, Środa - 8, Czwartek - 16, Piątek - 32, sobota " +"- 64." + +msgid "Off" +msgstr "Wyłączone" + +msgid "Open Web Interface" +msgstr "Otwórz interfejs Web" + +msgid "PEX enabled" +msgstr "PEX włączony" + +msgid "Peer Port settings" +msgstr "Ustawienia portu peer" + +msgid "Peer congestion algorithm" +msgstr "Algorytm przeciążenia peer" + +msgid "Peer limit per torrent" +msgstr "Limit peer'a dla torrenta" + +msgid "Peer port" +msgstr "Port peer" + +msgid "Peer port random high" +msgstr "Maksymalny port peer`a" + +msgid "Peer port random low" +msgstr "Minimalny port peer`a" + +msgid "Peer port random on start" +msgstr "Losowy port peer`a przy starcie" + +msgid "Peer settings" +msgstr "Ustawienia peer" + +msgid "Peer socket tos" +msgstr "Typ gniazda TOS peer`a" + +msgid "Port forwarding enabled" +msgstr "Przekazywanie portów włączone" + +msgid "Preferred" +msgstr "Preferowany" + +msgid "Prefetch enabled" +msgstr "Pobieranie wstępne włączone" + +msgid "Queue stalled enabled" +msgstr "Blokada kolejki włączona" + +msgid "Queue stalled minutes" +msgstr "Blokada kolejki w min." + +msgid "Queueing" +msgstr "Kolejkowanie" + +msgid "RPC URL" +msgstr "Adres URL RPC" + +msgid "RPC authentication required" +msgstr "Wymagana autoryzacja RPC" + +msgid "RPC bind address" +msgstr "Adres węzła RPC" + +msgid "RPC enabled" +msgstr "RPC włączone" + +msgid "RPC password" +msgstr "Hasło RPC" + +msgid "RPC port" +msgstr "Port RPC" + +msgid "RPC settings" +msgstr "Ustawienia RPC" + +msgid "RPC username" +msgstr "Nazwa użytkownika RPC" + +msgid "RPC whitelist" +msgstr "Biała lista RPC" + +msgid "RPC whitelist enabled" +msgstr "Biała lista RPC włączona" + +msgid "Ratio limit" +msgstr "Dopuszczalna wartość" + +msgid "Ratio limit enabled" +msgstr "Dopuszczalna wartość włączona" + +msgid "Rename partial files" +msgstr "Zmień nazwy plików częściowych" + +msgid "Run daemon as user" +msgstr "Włączaj demona jako użytkownik" + +msgid "Scheduling" +msgstr "Harmonogramowanie" + +msgid "Scrape paused torrents enabled" +msgstr "Zdzieranie wstrzymanych torentów włączone" + +msgid "Script torrent done enabled" +msgstr "Włączenie wykonywania skryptu po zakończeniu pobierania" + +msgid "Script torrent done filename" +msgstr "Nazwa skryptu wykonywanego po zakończeniu pobierania" + +msgid "Seed queue enabled" +msgstr "Kolejkowanie Seed'ów włączone" + +msgid "Seed queue size" +msgstr "Rozmiar kolejki Seed'ów" + +msgid "Speed limit down" +msgstr "Limit prędkości pobierania" + +msgid "Speed limit down enabled" +msgstr "Limit prędkości pobierania włączony" + +msgid "Speed limit up" +msgstr "Limit prędkości wysyłania" + +msgid "Speed limit up enabled" +msgstr "Limit prędkości wysyłania włączony" + +msgid "Transmission" +msgstr "Transmission" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" +"Demon Transmission jest prostym klientem BitTorrent. Tutaj możesz zmienić " +"jego ustawienia." + +msgid "Trash original torrent files" +msgstr "Usuń oryginalne pliki torrent" + +msgid "Upload slots per torrent" +msgstr "Liczba połączeń na plik torrent - wysyłanie" + +msgid "Watch directory" +msgstr "Obserwowany folder" + +msgid "in minutes from midnight" +msgstr "w minutach od północy" + +msgid "preallocation" +msgstr "prealokacja" + +msgid "uTP enabled" +msgstr "uTP włączone" diff --git a/feeds/luci/applications/luci-app-transmission/po/pt-br/transmission.po b/feeds/luci/applications/luci-app-transmission/po/pt-br/transmission.po new file mode 100644 index 0000000..82ba6a4 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/pt-br/transmission.po @@ -0,0 +1,300 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-07-06 16:27+0200\n" +"PO-Revision-Date: 2013-04-06 22:58+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "Velocidade alternativa para baixar" + +msgid "Alternative speed enabled" +msgstr "Velocidade alternativa ativada" + +msgid "Alternative speed time begin" +msgstr "Hora de início da velocidade alternativa" + +msgid "Alternative speed time day" +msgstr "Dia da velocidade alternativa" + +msgid "Alternative speed time end" +msgstr "Hora final da velocidade alternativa" + +msgid "Alternative speed timing enabled" +msgstr "Temporização da velocidade alternativa habilitada" + +msgid "Alternative upload speed" +msgstr "Velocidade de subida alternativa" + +msgid "Automatically start added torrents" +msgstr "Iniciar automaticamente os torrents adicionados" + +msgid "Bandwidth settings" +msgstr "Configurações da velocidade do enlace" + +msgid "Binding address IPv4" +msgstr "Endereço de escuta IPv4" + +msgid "Binding address IPv6" +msgstr "Endereço de escuta IPv6" + +msgid "Block list enabled" +msgstr "Lista de Bloqueios habilitada" + +msgid "Blocklist URL" +msgstr "URL da lista de bloqueio" + +msgid "Blocklists" +msgstr "Lista de Bloqueio" + +msgid "Cache size in MB" +msgstr "Tamanho em MB do cache" + +msgid "Config file directory" +msgstr "Diretório dos arquivos de configuração" + +msgid "DHT enabled" +msgstr "DHT habilitado" + +msgid "Debug" +msgstr "Depuração" + +msgid "Download directory" +msgstr "Diretório de arquivos baixados" + +msgid "Download queue enabled" +msgstr "Fila para baixar habilitada" + +msgid "Download queue size" +msgstr "Tamanho da fila para baixar" + +msgid "Enable watch directory" +msgstr "Habilitar monitoramento de diretório" + +msgid "Enabled" +msgstr "Habilitar" + +msgid "Encryption" +msgstr "Cifragem" + +msgid "Error" +msgstr "Erro" + +msgid "Fast" +msgstr "Rápido" + +msgid "Files and Locations" +msgstr "Arquivos e Locais" + +msgid "Forced" +msgstr "Forçado" + +msgid "Full" +msgstr "Cheio" + +msgid "Global peer limit" +msgstr "Limite global de parceiros conectados" + +msgid "Global settings" +msgstr "Configurações Globais" + +msgid "Idle seeding limit" +msgstr "Limite para parar de semear se ocioso" + +msgid "Idle seeding limit enabled" +msgstr "Habilitar limite para parar de semear se ocioso" + +msgid "Incomplete directory" +msgstr "Diretório de incompletos" + +msgid "Incomplete directory enabled" +msgstr "Ativado diretório para arquivos incompletos" + +msgid "Info" +msgstr "Informação" + +msgid "LPD enabled" +msgstr "LPD habilitado" + +msgid "Lazy bitfield enabled" +msgstr "Envio de campo de bits incompletos habilitado" + +msgid "Message level" +msgstr "Nível de mensagens" + +msgid "Miscellaneous" +msgstr "Diversos" + +msgid "None" +msgstr "Nada" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" +"Número/Campo de bits. Comece com 0 e, então, para cada dia você quer o " +"agendador habilitado, adicione um valor. Para domingo - 1, segunda-feira - " +"2, terça-feira - 4, quarta-feira - 8, quinta-feira - 16, sexta-feira - 32, " +"Sábado - 64" + +msgid "Off" +msgstr "Desligado" + +msgid "Open Web Interface" +msgstr "Abrir interface Web" + +msgid "PEX enabled" +msgstr "PEX habilitado" + +msgid "Peer Port settings" +msgstr "Configuração de porta do parceiro" + +msgid "Peer congestion algorithm" +msgstr "Algoritmo de congestionamento dos parceiro" + +msgid "Peer limit per torrent" +msgstr "Limite de torrents por parceiro" + +msgid "Peer port" +msgstr "Porta do parceiro" + +msgid "Peer port random high" +msgstr "Limite superior da porta aleatória do parceiro" + +msgid "Peer port random low" +msgstr "Limite inferior da porta aleatória do parceiro" + +msgid "Peer port random on start" +msgstr "Porta aleatória inicial do parceiro" + +msgid "Peer settings" +msgstr "Configuração do parceiro" + +msgid "Peer socket tos" +msgstr "TOS da conexão do parceiro" + +msgid "Port forwarding enabled" +msgstr "Encaminhamento de porta ativado" + +msgid "Preferred" +msgstr "Preferencial" + +msgid "Prefetch enabled" +msgstr "Adiantamento de leitura de disco habilitado" + +msgid "Queue stalled enabled" +msgstr "Parada de fila habilitada" + +msgid "Queue stalled minutes" +msgstr "Parada de fila em minutos" + +msgid "Queueing" +msgstr "Filas" + +msgid "RPC URL" +msgstr "RPC URL" + +msgid "RPC authentication required" +msgstr "RPC requer autenticação" + +msgid "RPC bind address" +msgstr "Endereço de escuta do RPC" + +msgid "RPC enabled" +msgstr "RPC habilitado" + +msgid "RPC password" +msgstr "Senha do RPC" + +msgid "RPC port" +msgstr "Porta do RPC" + +msgid "RPC settings" +msgstr "Configuração do RPC" + +msgid "RPC username" +msgstr "Nome do usuario do RPC" + +msgid "RPC whitelist" +msgstr "Lista branca do RPC" + +msgid "RPC whitelist enabled" +msgstr "Lista branca do RPC habilitada" + +msgid "Ratio limit" +msgstr "Limite da relação" + +msgid "Ratio limit enabled" +msgstr "Limite da relação habilitado" + +msgid "Rename partial files" +msgstr "Renomear arquivos parciais" + +msgid "Run daemon as user" +msgstr "Executar serviço como usuário" + +msgid "Scheduling" +msgstr "Agendamento" + +msgid "Scrape paused torrents enabled" +msgstr "Busca de informações de torrents pausados ​​habilitada" + +msgid "Script torrent done enabled" +msgstr "Script de conclusão de torrent habilitado" + +msgid "Script torrent done filename" +msgstr "Nome do arquivo do script de conclusão de torrent" + +msgid "Seed queue enabled" +msgstr "Fila de semeadura habilitada" + +msgid "Seed queue size" +msgstr "Tamanho da fila de semeadura" + +msgid "Speed limit down" +msgstr "Limite inferior de velocidade" + +msgid "Speed limit down enabled" +msgstr "Limite inferior de velocidade habilitado" + +msgid "Speed limit up" +msgstr "Limite superior de velocidade" + +msgid "Speed limit up enabled" +msgstr "Limite superior de velocidade habilitado" + +msgid "Transmission" +msgstr "Transmission" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" +"O Transmission é um cliente BitTorrent simples, aqui você pode configurá-lo." + +msgid "Trash original torrent files" +msgstr "Apague os arquivos torrent originais" + +msgid "Upload slots per torrent" +msgstr "Vagas para conexão de envio por torrent" + +msgid "Watch directory" +msgstr "Monitorar diretório" + +msgid "in minutes from midnight" +msgstr "em minutos a partir da meia-noite" + +msgid "preallocation" +msgstr "pré-alocação" + +msgid "uTP enabled" +msgstr "uTP habilitado" diff --git a/feeds/luci/applications/luci-app-transmission/po/pt/transmission.po b/feeds/luci/applications/luci-app-transmission/po/pt/transmission.po new file mode 100644 index 0000000..512ca97 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/pt/transmission.po @@ -0,0 +1,297 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-05-31 23:40+0200\n" +"PO-Revision-Date: 2013-05-31 23:47+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "Velocidade de download alternativa" + +msgid "Alternative speed enabled" +msgstr "Velocidade alternativa activada" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "Definições de largura de banda" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "Directório do ficheiro de configuração" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "Depurar" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "Encriptação" + +msgid "Error" +msgstr "Erro" + +msgid "Fast" +msgstr "Rápido" + +msgid "Files and Locations" +msgstr "Ficheiros e Localizações" + +msgid "Forced" +msgstr "Forçado" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "Info" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "Nenhum" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "Desligado" + +msgid "Open Web Interface" +msgstr "Abrir Interface Web" + +msgid "PEX enabled" +msgstr "PEX ativado" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "URL RPC" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "RPC ativado" + +msgid "RPC password" +msgstr "Password RPC" + +msgid "RPC port" +msgstr "Porta RPC" + +msgid "RPC settings" +msgstr "Definições RPC" + +msgid "RPC username" +msgstr "Utilizador RPC" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "Executar serviço como" + +msgid "Scheduling" +msgstr "Agendamento" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" +"Transmission é um client simples de bittorrent, aqui pode configurar as " +"definições." + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/ro/transmission.po b/feeds/luci/applications/luci-app-transmission/po/ro/transmission.po new file mode 100644 index 0000000..8e0fc7d --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/ro/transmission.po @@ -0,0 +1,296 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-09-25 19:17+0200\n" +"PO-Revision-Date: 2014-06-28 19:26+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: LANGUAGE \n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "Viteză de download alternativă" + +msgid "Alternative speed enabled" +msgstr "Viteză alternativă activată" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "Viteza de upload alternativa" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "Setari latime de banda" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "Activat" + +msgid "Encryption" +msgstr "Criptare" + +msgid "Error" +msgstr "Eroare" + +msgid "Fast" +msgstr "Rapid" + +msgid "Files and Locations" +msgstr "Fişiere şi Locaţii" + +msgid "Forced" +msgstr "Forţat" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "Setari globale" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "Informatii" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "Preferat" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/ru/transmission.po b/feeds/luci/applications/luci-app-transmission/po/ru/transmission.po new file mode 100644 index 0000000..fac9510 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/ru/transmission.po @@ -0,0 +1,306 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: transmission\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-08-15 17:35+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Alternative download speed" +msgstr "Альтернативная скорость загрузки" + +msgid "Alternative speed enabled" +msgstr "Альтернативная скорость включена" + +msgid "Alternative speed time begin" +msgstr "Время начала альтернативной скорости" + +msgid "Alternative speed time day" +msgstr "День альтернативной скорости" + +msgid "Alternative speed time end" +msgstr "Время окончания альтернативной скорости" + +msgid "Alternative speed timing enabled" +msgstr "Расписание альтернативной скорости включено" + +msgid "Alternative upload speed" +msgstr "Альтернативная скорость отдачи" + +msgid "Automatically start added torrents" +msgstr "Автоматически запускать добавленные торренты" + +msgid "Bandwidth settings" +msgstr "Настройки скорости" + +msgid "Binding address IPv4" +msgstr "Привязанный адрес IPv4" + +msgid "Binding address IPv6" +msgstr "Привязанный адрес IPv6" + +msgid "Block list enabled" +msgstr "Список блокировок включен" + +msgid "Blocklist URL" +msgstr "URL списка блокировок" + +msgid "Blocklists" +msgstr "Списки блокировок" + +msgid "Cache size in MB" +msgstr "Размер кэша (МБ)" + +msgid "Config file directory" +msgstr "Папка файла конфигурации" + +msgid "DHT enabled" +msgstr "DHT включен" + +msgid "Debug" +msgstr "Отладка" + +msgid "Download directory" +msgstr "Папка для загрузок" + +msgid "Download queue enabled" +msgstr "Очередь загрузок включена" + +msgid "Download queue size" +msgstr "Размер очереди загрузок" + +msgid "Enable watch directory" +msgstr "Включить папку поиска" + +msgid "Enabled" +msgstr "Включено" + +msgid "Encryption" +msgstr "Шифрование" + +msgid "Error" +msgstr "Ошибка" + +msgid "Fast" +msgstr "Быстрый" + +msgid "Files and Locations" +msgstr "Файлы и пути" + +msgid "Forced" +msgstr "Принудительно" + +msgid "Full" +msgstr "Полный" + +msgid "Global peer limit" +msgstr "Глобальный лимит пиров" + +msgid "Global settings" +msgstr "Общие настройки" + +msgid "Idle seeding limit" +msgstr "Ограничение времени сидирования" + +msgid "Idle seeding limit enabled" +msgstr "Ограничение времени сидирования включено" + +msgid "Incomplete directory" +msgstr "Папка для не полностью загруженых файлов" + +msgid "Incomplete directory enabled" +msgstr "Папка для не полностью загруженых файлов включена" + +msgid "Info" +msgstr "Информация" + +msgid "LPD enabled" +msgstr "LPD включено" + +#, fuzzy +msgid "Lazy bitfield enabled" +msgstr "Lazy bitfield включен" + +msgid "Message level" +msgstr "Уровень сообщений" + +msgid "Miscellaneous" +msgstr "Прочее" + +msgid "None" +msgstr "Отсутствует" + +#, fuzzy +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" +"Номер/битовое поле. Начните с 0, затем для каждого дня, в который вы хотите " +"включить планировщик, добавьте значение. Для воскресенья - 1, понедельника - " +"2, вторника - 4, среды - 8, четверга - 16, пятницы - 32, субботы - 64." + +msgid "Off" +msgstr "Выключено" + +msgid "Open Web Interface" +msgstr "Открыть веб-интерфейс" + +msgid "PEX enabled" +msgstr "PEX включен" + +msgid "Peer Port settings" +msgstr "Настройки порта пира" + +msgid "Peer congestion algorithm" +msgstr "Алгоритм перегрузки пиров" + +msgid "Peer limit per torrent" +msgstr "Ограничение пиров на торрент" + +msgid "Peer port" +msgstr "Порт пира" + +msgid "Peer port random high" +msgstr "Наибольший случайный порт пира" + +msgid "Peer port random low" +msgstr "Наименьший случайный порт пира" + +msgid "Peer port random on start" +msgstr "Случайный порт пира при запуске" + +msgid "Peer settings" +msgstr "Настройки пира" + +msgid "Peer socket tos" +msgstr "Значение ToS сокета пира" + +msgid "Port forwarding enabled" +msgstr "Перенаправление портов включено" + +msgid "Preferred" +msgstr "Предпочитаемо" + +msgid "Prefetch enabled" +msgstr "Предвыборка включена" + +#, fuzzy +msgid "Queue stalled enabled" +msgstr "Приостановка очереди включена" + +#, fuzzy +msgid "Queue stalled minutes" +msgstr "Приостановка очереди (мин.)" + +msgid "Queueing" +msgstr "Обслуживание" + +msgid "RPC URL" +msgstr "URL RPC" + +msgid "RPC authentication required" +msgstr "Аутентификация RPC" + +msgid "RPC bind address" +msgstr "RPC-адрес" + +msgid "RPC enabled" +msgstr "RPC включен" + +msgid "RPC password" +msgstr "Пароль RPC" + +msgid "RPC port" +msgstr "Порт RPC" + +msgid "RPC settings" +msgstr "Настройки RPC" + +msgid "RPC username" +msgstr "Имя пользователя RPC" + +msgid "RPC whitelist" +msgstr "\"Белый\" список RPC" + +msgid "RPC whitelist enabled" +msgstr "\"Белый\" список RPC включен" + +msgid "Ratio limit" +msgstr "Коэффициент отдачи" + +msgid "Ratio limit enabled" +msgstr "Коэффициент отдачи включен" + +msgid "Rename partial files" +msgstr "Переименовывать незавершённые файлы" + +msgid "Run daemon as user" +msgstr "Запустить демон от пользователя" + +msgid "Scheduling" +msgstr "Планирование" + +msgid "Scrape paused torrents enabled" +msgstr "Производить scrape-запросы у приостановленных торрентов" + +msgid "Script torrent done enabled" +msgstr "Запуск скрипта после загрузки торрента включён" + +msgid "Script torrent done filename" +msgstr "Скрипт завершения загрузки" + +msgid "Seed queue enabled" +msgstr "Очередь сидов включена" + +msgid "Seed queue size" +msgstr "Размер очереди сидирования" + +msgid "Speed limit down" +msgstr "Лимит скорости загрузки" + +msgid "Speed limit down enabled" +msgstr "Лимит скорости загрузки включен" + +msgid "Speed limit up" +msgstr "Лимит скорости отдачи" + +msgid "Speed limit up enabled" +msgstr "Лимит скорости отдачи включен" + +msgid "Transmission" +msgstr "Transmission" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" +"Transmission - простой bittorrent-клиент. Здесь Вы можете настроить " +"параметры." + +msgid "Trash original torrent files" +msgstr "Удалить торрент-файлы" + +msgid "Upload slots per torrent" +msgstr "Кол-во слотов отдачи на торрент" + +msgid "Watch directory" +msgstr "Папка поиска" + +msgid "in minutes from midnight" +msgstr "в минутах от полуночи" + +msgid "preallocation" +msgstr "предраспределение" + +msgid "uTP enabled" +msgstr "uTP включен" diff --git a/feeds/luci/applications/luci-app-transmission/po/sk/transmission.po b/feeds/luci/applications/luci-app-transmission/po/sk/transmission.po new file mode 100644 index 0000000..4b4c3af --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/sk/transmission.po @@ -0,0 +1,290 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Alternative download speed" +msgstr "" + +msgid "Alternative speed enabled" +msgstr "" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Forced" +msgstr "" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/sv/transmission.po b/feeds/luci/applications/luci-app-transmission/po/sv/transmission.po new file mode 100644 index 0000000..324bdab --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/sv/transmission.po @@ -0,0 +1,293 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Alternative download speed" +msgstr "Alternativ nerladdningshastighet" + +msgid "Alternative speed enabled" +msgstr "Alternativ hastighet aktiverat" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "Alternativ uppladdningshastighet" + +msgid "Automatically start added torrents" +msgstr "Starta tillagda torrents automatiskt" + +msgid "Bandwidth settings" +msgstr "Inställningar för bandbredd" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "Blockeringslista aktiverad" + +msgid "Blocklist URL" +msgstr "Blockeringslistans URL" + +msgid "Blocklists" +msgstr "Blockeringslistor" + +msgid "Cache size in MB" +msgstr "Storlek på cache i MB" + +msgid "Config file directory" +msgstr "Ställ in fil-mapp" + +msgid "DHT enabled" +msgstr "DHT aktiverat" + +msgid "Debug" +msgstr "Felsök" + +msgid "Download directory" +msgstr "Nerladdningsmapp" + +msgid "Download queue enabled" +msgstr "Nerladdnings-kö aktiverad" + +msgid "Download queue size" +msgstr "Storlek på nerladdningskön" + +msgid "Enable watch directory" +msgstr "Aktivera övervakningsmapp" + +msgid "Enabled" +msgstr "Aktiverad" + +msgid "Encryption" +msgstr "Kryptering" + +msgid "Error" +msgstr "Fel" + +msgid "Fast" +msgstr "Snabb" + +msgid "Files and Locations" +msgstr "Filer och Platser" + +msgid "Forced" +msgstr "Tvingad" + +msgid "Full" +msgstr "Fullständig" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "Globala inställningar" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "Ej komplett mapp" + +msgid "Incomplete directory enabled" +msgstr "Ej komplett mapp aktiverad" + +msgid "Info" +msgstr "Info" + +msgid "LPD enabled" +msgstr "LPD aktiverat" + +msgid "Lazy bitfield enabled" +msgstr "Lazy bitfield aktiverat" + +msgid "Message level" +msgstr "Meddelandenivå" + +msgid "Miscellaneous" +msgstr "Diverse" + +msgid "None" +msgstr "Ingen" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "Av" + +msgid "Open Web Interface" +msgstr "Öppna webbgränssnittet" + +msgid "PEX enabled" +msgstr "PEX aktiverat" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "Föredraget" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "Köar" + +msgid "RPC URL" +msgstr "URL för RPC" + +msgid "RPC authentication required" +msgstr "RPC-autentisering krävs" + +msgid "RPC bind address" +msgstr "Bindningsadress för RPC" + +msgid "RPC enabled" +msgstr "RPC aktiverat" + +msgid "RPC password" +msgstr "Lösenord för RPC" + +msgid "RPC port" +msgstr "Port för RPC" + +msgid "RPC settings" +msgstr "Inställningar för RPC" + +msgid "RPC username" +msgstr "Användarnamn för RPC" + +msgid "RPC whitelist" +msgstr "Vitlista för RPC" + +msgid "RPC whitelist enabled" +msgstr "Vitlistan för RPC aktiverad" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "Döp om icke fullständiga filer" + +msgid "Run daemon as user" +msgstr "Kör demonen som en användare" + +msgid "Scheduling" +msgstr "Schemaläggning" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "Transmission" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" +"Transmission-demonen är en enkel bittorrent-klient och här kan du ställa in " +"inställningarna." + +msgid "Trash original torrent files" +msgstr "Släng de ordinarie torrent-filerna i papperskorgen" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "Övervaka mapp" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "uTP aktiverat" diff --git a/feeds/luci/applications/luci-app-transmission/po/templates/transmission.pot b/feeds/luci/applications/luci-app-transmission/po/templates/transmission.pot new file mode 100644 index 0000000..5892abc --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/templates/transmission.pot @@ -0,0 +1,283 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Alternative download speed" +msgstr "" + +msgid "Alternative speed enabled" +msgstr "" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Forced" +msgstr "" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/tr/transmission.po b/feeds/luci/applications/luci-app-transmission/po/tr/transmission.po new file mode 100644 index 0000000..5a4df01 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/tr/transmission.po @@ -0,0 +1,290 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Alternative download speed" +msgstr "" + +msgid "Alternative speed enabled" +msgstr "" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Forced" +msgstr "" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/uk/transmission.po b/feeds/luci/applications/luci-app-transmission/po/uk/transmission.po new file mode 100644 index 0000000..1736934 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/uk/transmission.po @@ -0,0 +1,296 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-08-13 16:16+0200\n" +"PO-Revision-Date: 2013-08-13 16:17+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: LANGUAGE \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "Альтернативна швидкість завантаження" + +msgid "Alternative speed enabled" +msgstr "Альтернативна швидкість увімкнути" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Forced" +msgstr "" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/vi/transmission.po b/feeds/luci/applications/luci-app-transmission/po/vi/transmission.po new file mode 100644 index 0000000..3125fc2 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/vi/transmission.po @@ -0,0 +1,280 @@ +msgid "Alternative download speed" +msgstr "" + +msgid "Alternative speed enabled" +msgstr "" + +msgid "Alternative speed time begin" +msgstr "" + +msgid "Alternative speed time day" +msgstr "" + +msgid "Alternative speed time end" +msgstr "" + +msgid "Alternative speed timing enabled" +msgstr "" + +msgid "Alternative upload speed" +msgstr "" + +msgid "Automatically start added torrents" +msgstr "" + +msgid "Bandwidth settings" +msgstr "" + +msgid "Binding address IPv4" +msgstr "" + +msgid "Binding address IPv6" +msgstr "" + +msgid "Block list enabled" +msgstr "" + +msgid "Blocklist URL" +msgstr "" + +msgid "Blocklists" +msgstr "" + +msgid "Cache size in MB" +msgstr "" + +msgid "Config file directory" +msgstr "" + +msgid "DHT enabled" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Download directory" +msgstr "" + +msgid "Download queue enabled" +msgstr "" + +msgid "Download queue size" +msgstr "" + +msgid "Enable watch directory" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Fast" +msgstr "" + +msgid "Files and Locations" +msgstr "" + +msgid "Forced" +msgstr "" + +msgid "Full" +msgstr "" + +msgid "Global peer limit" +msgstr "" + +msgid "Global settings" +msgstr "" + +msgid "Idle seeding limit" +msgstr "" + +msgid "Idle seeding limit enabled" +msgstr "" + +msgid "Incomplete directory" +msgstr "" + +msgid "Incomplete directory enabled" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "LPD enabled" +msgstr "" + +msgid "Lazy bitfield enabled" +msgstr "" + +msgid "Message level" +msgstr "" + +msgid "Miscellaneous" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" + +msgid "Off" +msgstr "" + +msgid "Open Web Interface" +msgstr "" + +msgid "PEX enabled" +msgstr "" + +msgid "Peer Port settings" +msgstr "" + +msgid "Peer congestion algorithm" +msgstr "" + +msgid "Peer limit per torrent" +msgstr "" + +msgid "Peer port" +msgstr "" + +msgid "Peer port random high" +msgstr "" + +msgid "Peer port random low" +msgstr "" + +msgid "Peer port random on start" +msgstr "" + +msgid "Peer settings" +msgstr "" + +msgid "Peer socket tos" +msgstr "" + +msgid "Port forwarding enabled" +msgstr "" + +msgid "Preferred" +msgstr "" + +msgid "Prefetch enabled" +msgstr "" + +msgid "Queue stalled enabled" +msgstr "" + +msgid "Queue stalled minutes" +msgstr "" + +msgid "Queueing" +msgstr "" + +msgid "RPC URL" +msgstr "" + +msgid "RPC authentication required" +msgstr "" + +msgid "RPC bind address" +msgstr "" + +msgid "RPC enabled" +msgstr "" + +msgid "RPC password" +msgstr "" + +msgid "RPC port" +msgstr "" + +msgid "RPC settings" +msgstr "" + +msgid "RPC username" +msgstr "" + +msgid "RPC whitelist" +msgstr "" + +msgid "RPC whitelist enabled" +msgstr "" + +msgid "Ratio limit" +msgstr "" + +msgid "Ratio limit enabled" +msgstr "" + +msgid "Rename partial files" +msgstr "" + +msgid "Run daemon as user" +msgstr "" + +msgid "Scheduling" +msgstr "" + +msgid "Scrape paused torrents enabled" +msgstr "" + +msgid "Script torrent done enabled" +msgstr "" + +msgid "Script torrent done filename" +msgstr "" + +msgid "Seed queue enabled" +msgstr "" + +msgid "Seed queue size" +msgstr "" + +msgid "Speed limit down" +msgstr "" + +msgid "Speed limit down enabled" +msgstr "" + +msgid "Speed limit up" +msgstr "" + +msgid "Speed limit up enabled" +msgstr "" + +msgid "Transmission" +msgstr "" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "" + +msgid "Trash original torrent files" +msgstr "" + +msgid "Upload slots per torrent" +msgstr "" + +msgid "Watch directory" +msgstr "" + +msgid "in minutes from midnight" +msgstr "" + +msgid "preallocation" +msgstr "" + +msgid "uTP enabled" +msgstr "" diff --git a/feeds/luci/applications/luci-app-transmission/po/zh-cn/transmission.po b/feeds/luci/applications/luci-app-transmission/po/zh-cn/transmission.po new file mode 100644 index 0000000..9dd3491 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/zh-cn/transmission.po @@ -0,0 +1,295 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-10-08 14:06+0200\n" +"PO-Revision-Date: 2014-06-15 04:57+0200\n" +"Last-Translator: phantasm131 \n" +"Language-Team: LANGUAGE \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "临时下载限速" + +msgid "Alternative speed enabled" +msgstr "启用临时限速" + +msgid "Alternative speed time begin" +msgstr "计划限速始于" + +msgid "Alternative speed time day" +msgstr "计划限速日期" + +msgid "Alternative speed time end" +msgstr "计划限速止于" + +msgid "Alternative speed timing enabled" +msgstr "启用计划限速" + +msgid "Alternative upload speed" +msgstr "临时上传速度" + +msgid "Automatically start added torrents" +msgstr "种子自动下载" + +msgid "Bandwidth settings" +msgstr "带宽配置" + +msgid "Binding address IPv4" +msgstr "绑定IPv4地址" + +msgid "Binding address IPv6" +msgstr "绑定IPv6地址" + +msgid "Block list enabled" +msgstr "启用阻止列表" + +msgid "Blocklist URL" +msgstr "URL阻止清单" + +msgid "Blocklists" +msgstr "阻止清单" + +msgid "Cache size in MB" +msgstr "缓存大小(MB)" + +msgid "Config file directory" +msgstr "配置文件的目录" + +msgid "DHT enabled" +msgstr "启用DHT" + +msgid "Debug" +msgstr "调试" + +msgid "Download directory" +msgstr "下载目录" + +msgid "Download queue enabled" +msgstr "启用下载队列" + +msgid "Download queue size" +msgstr "下载队列大小" + +msgid "Enable watch directory" +msgstr "启用种子轮询目录" + +msgid "Enabled" +msgstr "启用" + +msgid "Encryption" +msgstr "加密" + +msgid "Error" +msgstr "错误" + +msgid "Fast" +msgstr "快速" + +msgid "Files and Locations" +msgstr "文件和位置" + +msgid "Forced" +msgstr "强制" + +msgid "Full" +msgstr "全分配" + +msgid "Global peer limit" +msgstr "全局Peer限制" + +msgid "Global settings" +msgstr "全局设置" + +msgid "Idle seeding limit" +msgstr "空闲做种限时" + +msgid "Idle seeding limit enabled" +msgstr "启用空闲做种时间" + +msgid "Incomplete directory" +msgstr "未完成目录" + +msgid "Incomplete directory enabled" +msgstr "启用未完成目录" + +msgid "Info" +msgstr "信息" + +msgid "LPD enabled" +msgstr "启用LPD" + +msgid "Lazy bitfield enabled" +msgstr "启用位段延迟" + +msgid "Message level" +msgstr "消息级别" + +msgid "Miscellaneous" +msgstr "其他参数" + +msgid "None" +msgstr "空" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "生效日期是对应日期的算术加和值。对应关系:周日-1、周一-2、周二-4、周三-8、周四-16、周五-32、周六-64。" + +msgid "Off" +msgstr "关闭" + +msgid "Open Web Interface" +msgstr "Web管理界面" + +msgid "PEX enabled" +msgstr "启用PEX" + +msgid "Peer Port settings" +msgstr "Peer端口设置" + +msgid "Peer congestion algorithm" +msgstr "Peer拥塞算法" + +msgid "Peer limit per torrent" +msgstr "每个种子Peer限制数" + +msgid "Peer port" +msgstr "Peer端口" + +msgid "Peer port random high" +msgstr "Peer随机端口最大值" + +msgid "Peer port random low" +msgstr "Peer随机端口最小值" + +msgid "Peer port random on start" +msgstr "Peer端口随机" + +msgid "Peer settings" +msgstr "Peer设置" + +msgid "Peer socket tos" +msgstr "Peer套接字tos值" + +msgid "Port forwarding enabled" +msgstr "启用端口转发" + +msgid "Preferred" +msgstr "优先" + +msgid "Prefetch enabled" +msgstr "启用预取缓存" + +msgid "Queue stalled enabled" +msgstr "启用队列暂停" + +msgid "Queue stalled minutes" +msgstr "队列暂停分钟" + +msgid "Queueing" +msgstr "队列" + +msgid "RPC URL" +msgstr "RPC URL" + +msgid "RPC authentication required" +msgstr "PRC授权验证" + +msgid "RPC bind address" +msgstr "RPC绑定地址" + +msgid "RPC enabled" +msgstr "启用PRC" + +msgid "RPC password" +msgstr "RPC密码" + +msgid "RPC port" +msgstr "RPC端口" + +msgid "RPC settings" +msgstr "RPC配置" + +msgid "RPC username" +msgstr "RPC用户名" + +msgid "RPC whitelist" +msgstr "RPC白名单" + +msgid "RPC whitelist enabled" +msgstr "启用RPC白名单" + +msgid "Ratio limit" +msgstr "分享率限值" + +msgid "Ratio limit enabled" +msgstr "启用分享率限制" + +msgid "Rename partial files" +msgstr "重命名未完成文件" + +msgid "Run daemon as user" +msgstr "用户组" + +msgid "Scheduling" +msgstr "计划任务" + +msgid "Scrape paused torrents enabled" +msgstr "忽略暂停的种子" + +msgid "Script torrent done enabled" +msgstr "种子完成时运行脚本" + +msgid "Script torrent done filename" +msgstr "脚本文件名" + +msgid "Seed queue enabled" +msgstr "启用做种队列" + +msgid "Seed queue size" +msgstr "做种队列大小" + +msgid "Speed limit down" +msgstr "下载限速" + +msgid "Speed limit down enabled" +msgstr "启用下载限速" + +msgid "Speed limit up" +msgstr "上传限速" + +msgid "Speed limit up enabled" +msgstr "启用上传限速" + +msgid "Transmission" +msgstr "Transmission" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "Transmission是个简单易用的BT/PT客户端。" + +msgid "Trash original torrent files" +msgstr "删除种子源文件" + +msgid "Upload slots per torrent" +msgstr "每个种子上传连接数" + +msgid "Watch directory" +msgstr "轮询种子目录" + +msgid "in minutes from midnight" +msgstr "从晚上00:00起的分钟数,限速到临时速度" + +msgid "preallocation" +msgstr "磁盘预分配策略" + +msgid "uTP enabled" +msgstr "启用uTP" diff --git a/feeds/luci/applications/luci-app-transmission/po/zh-tw/transmission.po b/feeds/luci/applications/luci-app-transmission/po/zh-tw/transmission.po new file mode 100644 index 0000000..78da18d --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/po/zh-tw/transmission.po @@ -0,0 +1,295 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-16 23:11+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Alternative download speed" +msgstr "P2P代抓下載速度" + +msgid "Alternative speed enabled" +msgstr "P2P代抓速度啟用" + +msgid "Alternative speed time begin" +msgstr "P2P代抓起始時間" + +msgid "Alternative speed time day" +msgstr "P2P代抓起每日時間" + +msgid "Alternative speed time end" +msgstr "P2P代抓結束時間" + +msgid "Alternative speed timing enabled" +msgstr "P2P代抓週期機制啟用" + +msgid "Alternative upload speed" +msgstr "P2P代抓上傳速度" + +msgid "Automatically start added torrents" +msgstr "當增加種子後自動開始下載" + +msgid "Bandwidth settings" +msgstr "流量設定" + +msgid "Binding address IPv4" +msgstr "綁定的IPv4位置" + +msgid "Binding address IPv6" +msgstr "綁定的IPv6位置" + +msgid "Block list enabled" +msgstr "啟用封鎖列表" + +msgid "Blocklist URL" +msgstr "封鎖URL" + +msgid "Blocklists" +msgstr "封鎖列表" + +msgid "Cache size in MB" +msgstr "快取大小(MB)" + +msgid "Config file directory" +msgstr "設定檔目錄" + +msgid "DHT enabled" +msgstr "DHT啟用" + +msgid "Debug" +msgstr "偵錯" + +msgid "Download directory" +msgstr "下載目錄" + +msgid "Download queue enabled" +msgstr "啟用下載隊列" + +msgid "Download queue size" +msgstr "下載隊列大小" + +msgid "Enable watch directory" +msgstr "啟用觀看目錄" + +msgid "Enabled" +msgstr "啟用" + +msgid "Encryption" +msgstr "加密" + +msgid "Error" +msgstr "錯誤" + +msgid "Fast" +msgstr "快速" + +msgid "Files and Locations" +msgstr "檔案和位置" + +msgid "Forced" +msgstr "強制" + +msgid "Full" +msgstr "全速" + +msgid "Global peer limit" +msgstr "一般連接限制" + +msgid "Global settings" +msgstr "一般設定" + +msgid "Idle seeding limit" +msgstr "閒置作種限制" + +msgid "Idle seeding limit enabled" +msgstr "閒置作種限制機制啟用" + +msgid "Incomplete directory" +msgstr "不完整的目錄路徑" + +msgid "Incomplete directory enabled" +msgstr "不完整的目錄置放區機制啟用" + +msgid "Info" +msgstr "資訊" + +msgid "LPD enabled" +msgstr "LPD啟用" + +msgid "Lazy bitfield enabled" +msgstr "防ISP懶散悠閒抓法啟用" + +msgid "Message level" +msgstr "訊息等級" + +msgid "Miscellaneous" +msgstr "雜項" + +msgid "None" +msgstr "None" + +msgid "" +"Number/bitfield. Start with 0, then for each day you want the scheduler " +"enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - " +"8, Thursday - 16, Friday - 32, Saturday - 64" +msgstr "" +"數字/欄位. 由0開始,每日你若要啟用排程,就加上新數值. 星期日 -1, 星期一 -2, 星期二 -4, 星期三 -8, 星期四-16, " +"星期五-32星期六 -64" + +msgid "Off" +msgstr "關閉" + +msgid "Open Web Interface" +msgstr "開啟Web介面" + +msgid "PEX enabled" +msgstr "啟用PEX" + +msgid "Peer Port settings" +msgstr "P2P節點埠號設定" + +msgid "Peer congestion algorithm" +msgstr "P2P節點堵塞演算法" + +msgid "Peer limit per torrent" +msgstr "P2P節點每個種子的限制" + +msgid "Peer port" +msgstr "P2P節點埠號" + +msgid "Peer port random high" +msgstr "P2P節點較高隨機埠號" + +msgid "Peer port random low" +msgstr "P2P節點較低隨機埠號" + +msgid "Peer port random on start" +msgstr "一開始就啟用P2P節點隨機埠" + +msgid "Peer settings" +msgstr "埠號設定" + +msgid "Peer socket tos" +msgstr "P2P節點優先IP插槽" + +msgid "Port forwarding enabled" +msgstr "埠轉發啟用" + +msgid "Preferred" +msgstr "首選" + +msgid "Prefetch enabled" +msgstr "預選啟用" + +msgid "Queue stalled enabled" +msgstr "隊列停滯啟用" + +msgid "Queue stalled minutes" +msgstr "隊列停滯分鐘" + +msgid "Queueing" +msgstr "排隊中" + +msgid "RPC URL" +msgstr "遠端調用網址" + +msgid "RPC authentication required" +msgstr "遠端調用需要驗證" + +msgid "RPC bind address" +msgstr "遠端調用綁定位址" + +msgid "RPC enabled" +msgstr "遠端調用功能啟用" + +msgid "RPC password" +msgstr "遠端調用密碼" + +msgid "RPC port" +msgstr "遠端調用埠號" + +msgid "RPC settings" +msgstr "遠端調用設定" + +msgid "RPC username" +msgstr "遠端調用用戶名稱" + +msgid "RPC whitelist" +msgstr "遠端調用白名單" + +msgid "RPC whitelist enabled" +msgstr "啟用遠端調用白名單" + +msgid "Ratio limit" +msgstr "比率限制" + +msgid "Ratio limit enabled" +msgstr "啟用比率限制" + +msgid "Rename partial files" +msgstr "不完整檔案更名" + +msgid "Run daemon as user" +msgstr "像用戶使用一樣常駐" + +msgid "Scheduling" +msgstr "排程" + +msgid "Scrape paused torrents enabled" +msgstr "下載暫停開始做種" + +msgid "Script torrent done enabled" +msgstr "作種腳本啟用" + +msgid "Script torrent done filename" +msgstr "作種腳本檔名" + +msgid "Seed queue enabled" +msgstr "啟用作種隊列" + +msgid "Seed queue size" +msgstr "作種隊列大小" + +msgid "Speed limit down" +msgstr "下載速度限制" + +msgid "Speed limit down enabled" +msgstr "啟用下載速度限制" + +msgid "Speed limit up" +msgstr "上傳速度限制" + +msgid "Speed limit up enabled" +msgstr "啟用上傳速度限制" + +msgid "Transmission" +msgstr "傳輸任務" + +msgid "" +"Transmission daemon is a simple bittorrent client, here you can configure " +"the settings." +msgstr "傳輸任務常駐是一個簡單的bittorrent用戶端程式, 這裡你可以配置設定" + +msgid "Trash original torrent files" +msgstr "丟棄來源種子檔" + +msgid "Upload slots per torrent" +msgstr "每個種子的上傳插槽數" + +msgid "Watch directory" +msgstr "監看目錄" + +msgid "in minutes from midnight" +msgstr "從午夜算起用分表示" + +msgid "preallocation" +msgstr "預先分配" + +msgid "uTP enabled" +msgstr "啟用uTP" diff --git a/feeds/luci/applications/luci-app-transmission/root/etc/uci-defaults/40_luci-transmission b/feeds/luci/applications/luci-app-transmission/root/etc/uci-defaults/40_luci-transmission new file mode 100644 index 0000000..456e8b8 --- /dev/null +++ b/feeds/luci/applications/luci-app-transmission/root/etc/uci-defaults/40_luci-transmission @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@tranmsmission[-1] + add ucitrack transmission + set ucitrack.@transmission[-1].init=transmission + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-travelmate/Makefile b/feeds/luci/applications/luci-app-travelmate/Makefile new file mode 100644 index 0000000..f4b1b0a --- /dev/null +++ b/feeds/luci/applications/luci-app-travelmate/Makefile @@ -0,0 +1,13 @@ +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for Travelmate +LUCI_DEPENDS:=+travelmate +LUCI_PKGARCH:=all + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-travelmate/luasrc/controller/travelmate.lua b/feeds/luci/applications/luci-app-travelmate/luasrc/controller/travelmate.lua new file mode 100644 index 0000000..27c19c4 --- /dev/null +++ b/feeds/luci/applications/luci-app-travelmate/luasrc/controller/travelmate.lua @@ -0,0 +1,11 @@ +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.travelmate", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/travelmate") then + return + end + + entry({"admin", "services", "travelmate"}, cbi("travelmate"), _("Travelmate"), 60) +end diff --git a/feeds/luci/applications/luci-app-travelmate/luasrc/model/cbi/travelmate.lua b/feeds/luci/applications/luci-app-travelmate/luasrc/model/cbi/travelmate.lua new file mode 100644 index 0000000..fa44d4b --- /dev/null +++ b/feeds/luci/applications/luci-app-travelmate/luasrc/model/cbi/travelmate.lua @@ -0,0 +1,53 @@ +-- Licensed to the public under the Apache License 2.0. + +m = Map("travelmate", translate("Travelmate"), + translate("Configuration of the Travelmate package to enable travel router functionality. ") .. [[

]] .. + translate("Brief advice: Create a wwan interface, configure it to use dhcp and " .. + "add it to the wan zone in firewall. Create the wifi interfaces to be used ('client' mode, " .. + "assigned to wwan network, left as disabled). Travelmate will try " .. + "to connect to the known wifi client interfaces in the defined order. ") .. + [[]] + .. translate("Link to detailed advice") + .. [[]] ) + +-- General options + +s = m:section(NamedSection, "global", "travelmate", translate("Global options")) + +o = s:option(Flag, "trm_enabled", translate("Enable Travelmate")) +o.rmempty = false +o.default = 0 + +o = s:option(Value, "trm_maxwait", translate("Max. timeout in seconds for wlan interface reload"), + translate("Default 20, range 10-60")) +o.rmempty = false +o.default = 20 +o.datatype = "range(10,60)" + +o = s:option(Value, "trm_maxretry", translate("Max. number of connection retries to an uplink"), + translate("Default 3, range 1-10")) +o.rmempty = false +o.default = 3 +o.datatype = "range(1,10)" + +-- Extra options + +e = m:section(NamedSection, "global", "travelmate", translate("Extra options")) + +a = e:option(Flag, "trm_debug", translate("Debug logging")) +a.rmempty = true +a.default = a.disabled + +a = e:option(Value, "trm_iface", translate("Restrict reload trigger to certain interface(s)"), + translate("Space separated list of wwan interfaces that trigger reload action. To disable reload trigger set it to 'false'. Default: empty")) +a.rmempty = true +a.default = "" +a.datatype = "uciname" + +a = e:option(Flag, "trm_iw", translate("Use iw for scanning"), + translate("Disable this if you want to use iwinfo instead of iw")) +a.rmempty = true +a.default = a.enabled + +return m + diff --git a/feeds/luci/applications/luci-app-travelmate/po/ja/travelmate.po b/feeds/luci/applications/luci-app-travelmate/po/ja/travelmate.po new file mode 100644 index 0000000..de1acee --- /dev/null +++ b/feeds/luci/applications/luci-app-travelmate/po/ja/travelmate.po @@ -0,0 +1,91 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Last-Translator: INAGAKI Hiroshi \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ja\n" + +msgid "" +"Brief advice: Create a wwan interface, configure it to use dhcp and add it " +"to the wan zone in firewall. Create the wifi interfaces to be used ('client' " +"mode, assigned to wwan network, left as disabled). Travelmate will try to " +"connect to the known wifi client interfaces in the defined order." +msgstr "" +"簡単な解説: 予めWWANインターフェースを作成し、DHCPを使用するよう構成してファ" +"イアウォールのWANゾーンに追加します。また、使用される無線インターフェースを作" +"成しておきます(\"クライアント\" モード、WWANに割り当て、無効状態)。" +"Travelmateは、登録されている順序で既知の無線クライアント インターフェースへの" +"接続を試行します。" + +msgid "" +"Configuration of the Travelmate package to enable travel router " +"functionality." +msgstr "トラベル ルータ機能を有効にする、Travelmate パッケージの設定です。" + +msgid "Debug logging" +msgstr "デバッグ ログ" + +msgid "Default 20, range 10-60" +msgstr "既定値 20、範囲 10 - 60" + +msgid "Default 3, range 1-10" +msgstr "既定値 3、範囲 1 - 10" + +msgid "Disable this if you want to use iwinfo instead of iw" +msgstr "iw の代わりに iwinfo を使用したい場合、この設定を無効にします。" + +msgid "Enable Travelmate" +msgstr "Travelmateの有効化" + +msgid "Extra options" +msgstr "拡張オプション" + +msgid "Global options" +msgstr "全般オプション" + +msgid "Link to detailed advice" +msgstr "詳細な解説へのリンク" + +msgid "Max. number of connection retries to an uplink" +msgstr "確立までの接続試行回数" + +msgid "Max. timeout in seconds for wlan interface reload" +msgstr "無線LANインターフェース リロード時の最大待機時間(秒)" + +msgid "Restrict reload trigger to certain interface(s)" +msgstr "リロード トリガを特定のインターフェースに限定する" + +msgid "" +"Space separated list of wwan interfaces that trigger reload action. To " +"disable reload trigger set it to 'false'. Default: empty" +msgstr "" +"リロード動作のトリガとなる、スペースで区切られたWWAN インターフェースのリスト" +"です。リロードのトリガを無効にするには、'false' を設定します。既定値:(空)" + +msgid "Travelmate" +msgstr "Travelmate" + +msgid "Use iw for scanning" +msgstr "スキャンに iw を使用する" + +#~ msgid "Default 3, range 0-10. Set to 0 to allow unlimited retries" +#~ msgstr "既定値 3、範囲 0 - 10。再試行回数を制限しない場合、0 に設定します。" + +#~ msgid "Default 30, range 5-60" +#~ msgstr "既定値 30、範囲 5 - 60" + +#~ msgid "Default: empty = use all radios." +#~ msgstr "デフォルト:(空)= 全ての無線を使用" + +#~ msgid "Loop timeout in seconds for wlan monitoring" +#~ msgstr "無線LAN モニターのループ タイムアウト(秒)" + +#~ msgid "Use only one radio, e.g. 'radio0'" +#~ msgstr "単一の無線のみ使用する 例: 'radio0'" diff --git a/feeds/luci/applications/luci-app-travelmate/po/templates/travelmate.pot b/feeds/luci/applications/luci-app-travelmate/po/templates/travelmate.pot new file mode 100644 index 0000000..2062819 --- /dev/null +++ b/feeds/luci/applications/luci-app-travelmate/po/templates/travelmate.pot @@ -0,0 +1,58 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "" +"Brief advice: Create a wwan interface, configure it to use dhcp and add it " +"to the wan zone in firewall. Create the wifi interfaces to be used ('client' " +"mode, assigned to wwan network, left as disabled). Travelmate will try to " +"connect to the known wifi client interfaces in the defined order." +msgstr "" + +msgid "" +"Configuration of the Travelmate package to enable travel router " +"functionality." +msgstr "" + +msgid "Debug logging" +msgstr "" + +msgid "Default 20, range 10-60" +msgstr "" + +msgid "Default 3, range 1-10" +msgstr "" + +msgid "Disable this if you want to use iwinfo instead of iw" +msgstr "" + +msgid "Enable Travelmate" +msgstr "" + +msgid "Extra options" +msgstr "" + +msgid "Global options" +msgstr "" + +msgid "Link to detailed advice" +msgstr "" + +msgid "Max. number of connection retries to an uplink" +msgstr "" + +msgid "Max. timeout in seconds for wlan interface reload" +msgstr "" + +msgid "Restrict reload trigger to certain interface(s)" +msgstr "" + +msgid "" +"Space separated list of wwan interfaces that trigger reload action. To " +"disable reload trigger set it to 'false'. Default: empty" +msgstr "" + +msgid "Travelmate" +msgstr "" + +msgid "Use iw for scanning" +msgstr "" diff --git a/feeds/luci/applications/luci-app-travelmate/root/etc/uci-defaults/40_luci-travelmate b/feeds/luci/applications/luci-app-travelmate/root/etc/uci-defaults/40_luci-travelmate new file mode 100755 index 0000000..f767677 --- /dev/null +++ b/feeds/luci/applications/luci-app-travelmate/root/etc/uci-defaults/40_luci-travelmate @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@travelmate[-1] + add ucitrack travelmate + set ucitrack.@travelmate[-1].init=travelmate + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-udpxy/Makefile b/feeds/luci/applications/luci-app-udpxy/Makefile new file mode 100644 index 0000000..cb8f179 --- /dev/null +++ b/feeds/luci/applications/luci-app-udpxy/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for udpxy +LUCI_DEPENDS:=+udpxy + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-udpxy/luasrc/controller/udpxy.lua b/feeds/luci/applications/luci-app-udpxy/luasrc/controller/udpxy.lua new file mode 100644 index 0000000..36a40dd --- /dev/null +++ b/feeds/luci/applications/luci-app-udpxy/luasrc/controller/udpxy.lua @@ -0,0 +1,14 @@ +-- Copyright 2014 Álvaro Fernández Rojas +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.udpxy", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/udpxy") then + return + end + + local page = entry({"admin", "services", "udpxy"}, cbi("udpxy"), _("udpxy")) + page.dependent = true + +end diff --git a/feeds/luci/applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua b/feeds/luci/applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua new file mode 100644 index 0000000..d823da0 --- /dev/null +++ b/feeds/luci/applications/luci-app-udpxy/luasrc/model/cbi/udpxy.lua @@ -0,0 +1,63 @@ +-- Copyright 2014 Álvaro Fernández Rojas +-- Licensed to the public under the Apache License 2.0. + +m = Map("udpxy", "udpxy", translate("udpxy is a UDP-to-HTTP multicast traffic relay daemon, here you can configure the settings.")) + +s = m:section(TypedSection, "udpxy", "") +s.addremove = true +s.anonymous = false + +enable=s:option(Flag, "disabled", translate("Enabled")) +enable.enabled="0" +enable.disabled="1" +enable.default = "1" +enable.rmempty = false +respawn=s:option(Flag, "respawn", translate("Respawn")) +respawn.default = false + +verbose=s:option(Flag, "verbose", translate("Verbose")) +verbose.default = false + +status=s:option(Flag, "status", translate("Status")) + +bind=s:option(Value, "bind", translate("Bind IP/Interface")) +bind.rmempty = true +bind.datatype = "or(ipaddr, network)" + +port=s:option(Value, "port", translate("Port")) +port.rmempty = true +port.datatype = "port" + +source=s:option(Value, "source", translate("Source IP/Interface")) +source.rmempty = true +source.datatype = "or(ipaddr, network)" + +max_clients=s:option(Value, "max_clients", translate("Max clients")) +max_clients.rmempty = true +max_clients.datatype = "range(1, 5000)" + +log_file=s:option(Value, "log_file", translate("Log file")) +log_file.rmempty = true +--log_file.datatype = "file" + +buffer_size=s:option(Value, "buffer_size", translate("Buffer size")) +buffer_size.rmempty = true +buffer_size.datatype = "range(4096,2097152)" + +buffer_messages=s:option(Value, "buffer_messages", translate("Buffer messages")) +buffer_messages.rmempty = true +buffer_messages.datatype = "or(-1, and(min(1), uinteger))" + +buffer_time=s:option(Value, "buffer_time", translate("Buffer time")) +buffer_time.rmempty = true +buffer_time.datatype = "or(-1, and(min(1), uinteger))" + +nice_increment=s:option(Value, "nice_increment", translate("Nice increment")) +nice_increment.rmempty = true +nice_increment.datatype = "or(and(max(-1), integer),and(min(1), integer))" + +mcsub_renew=s:option(Value, "mcsub_renew", translate("Multicast subscription renew")) +mcsub_renew.rmempty = true +mcsub_renew.datatype = "or(0, range(30, 64000))" + +return m diff --git a/feeds/luci/applications/luci-app-udpxy/root/etc/uci-defaults/40_luci-udpxy b/feeds/luci/applications/luci-app-udpxy/root/etc/uci-defaults/40_luci-udpxy new file mode 100644 index 0000000..e93c078 --- /dev/null +++ b/feeds/luci/applications/luci-app-udpxy/root/etc/uci-defaults/40_luci-udpxy @@ -0,0 +1,12 @@ +#!/bin/sh + +# needed for "Save and Apply" to restart udpxy +uci -q batch <<-EOF >/dev/null + delete ucitrack.@udpxy[-1] + add ucitrack udpxy + set ucitrack.@udpxy[-1].init="udpxy" + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-uhttpd/Makefile b/feeds/luci/applications/luci-app-uhttpd/Makefile new file mode 100644 index 0000000..9a2cf46 --- /dev/null +++ b/feeds/luci/applications/luci-app-uhttpd/Makefile @@ -0,0 +1,28 @@ +# +# Copyright (C) 2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=uHTTPd Webserver Configuration +LUCI_DEPENDS:=+uhttpd +LUCI_PKGARCH:=all + +PKG_NAME:=luci-app-uhttpd +PKG_VERSION:=1.0.0 +PKG_RELEASE:=1 +PKG_LICENSE:=Apache-2.0 +PKG_MAINTAINER:=Daniel Dickinson + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +LUA_TARGET:=source + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-uhttpd/luasrc/controller/uhttpd/uhttpd.lua b/feeds/luci/applications/luci-app-uhttpd/luasrc/controller/uhttpd/uhttpd.lua new file mode 100644 index 0000000..2e80dd6 --- /dev/null +++ b/feeds/luci/applications/luci-app-uhttpd/luasrc/controller/uhttpd/uhttpd.lua @@ -0,0 +1,17 @@ +-- Copyright 2015 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.uhttpd.uhttpd", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/uhttpd") then + return + end + + local page + + page = entry({"admin", "services", "uhttpd"}, cbi("uhttpd/uhttpd"), _("uHTTPd")) + page.leaf = true + +end + diff --git a/feeds/luci/applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua b/feeds/luci/applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua new file mode 100644 index 0000000..03821ad --- /dev/null +++ b/feeds/luci/applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua @@ -0,0 +1,227 @@ +-- Copyright 2015 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +local fs = require("nixio.fs") + +local m = Map("uhttpd", translate("uHTTPd"), + translate("A lightweight single-threaded HTTP(S) server")) + +local ucs = m:section(TypedSection, "uhttpd", "") +ucs.addremove = true +ucs.anonymous = false + +local lhttp = nil +local lhttps = nil +local cert_file = nil +local key_file = nil + +ucs:tab("general", translate("General Settings")) +ucs:tab("server", translate("Full Web Server Settings"), translate("For settings primarily geared to serving more than the web UI")) +ucs:tab("advanced", translate("Advanced Settings"), translate("Settings which are either rarely needed or which affect serving the WebUI")) + +lhttp = ucs:taboption("general", DynamicList, "listen_http", translate("HTTP listeners (address:port)"), translate("Bind to specific interface:port (by specifying interface address")) +lhttp.datatype = "list(ipaddrport(1))" + +function lhttp.validate(self, value, section) + local have_https_listener = false + local have_http_listener = false + if lhttp and lhttp:formvalue(section) and (#(lhttp:formvalue(section)) > 0) then + for k, v in pairs(lhttp:formvalue(section)) do + if v and (v ~= "") then + have_http_listener = true + break + end + end + end + if lhttps and lhttps:formvalue(section) and (#(lhttps:formvalue(section)) > 0) then + for k, v in pairs(lhttps:formvalue(section)) do + if v and (v ~= "") then + have_https_listener = true + break + end + end + end + if not (have_http_listener or have_https_listener) then + return nil, "must listen on at list one address:port" + end + return DynamicList.validate(self, value, section) +end + +lhttps = ucs:taboption("general", DynamicList, "listen_https", translate("HTTPS listener (address:port)"), translate("Bind to specific interface:port (by specifying interface address")) +lhttps.datatype = "list(ipaddrport(1))" +lhttps:depends("cert") +lhttps:depends("key") + +function lhttps.validate(self, value, section) + local have_https_listener = false + local have_http_listener = false + if lhttps and lhttps:formvalue(section) and (#(lhttps:formvalue(section)) > 0) then + for k, v in pairs(lhttps:formvalue(section)) do + if v and (v ~= "") then + have_https_listener = true + break + end + end + if have_https_listener and ((not cert_file) or (not cert_file:formvalue(section)) or (cert_file:formvalue(section) == "")) then + return nil, "must have certificate when using https" + end + if have_https_listener and ((not key_file) or (not key_file:formvalue(section)) or (key_file:formvalue(section) == "")) then + return nil, "must have key when using https" + end + end + if lhttp and (lhttp:formvalue(section)) and (#lhttp:formvalue(section) > 0) then + for k, v in pairs(lhttp:formvalue(section)) do + if v and (v ~= "") then + have_http_listener = true + break + end + end + end + if not (have_http_listener or have_https_listener) then + return nil, "must listen on at list one address:port" + end + return DynamicList.validate(self, value, section) +end + +o = ucs:taboption("general", Flag, "redirect_https", translate("Redirect all HTTP to HTTPS")) +o.default = o.enabled +o.rmempty = false + +o = ucs:taboption("general", Flag, "rfc1918_filter", translate("Ignore private IPs on public interface"), translate("Prevent access from private (RFC1918) IPs on an interface if it has an public IP address")) +o.default = o.enabled +o.rmempty = false + +cert_file = ucs:taboption("general", FileUpload, "cert", translate("HTTPS Certificate (DER Encoded)")) + +key_file = ucs:taboption("general", FileUpload, "key", translate("HTTPS Private Key (DER Encoded)")) + +o = ucs:taboption("general", Button, "remove_old", translate("Remove old certificate and key"), + translate("uHTTPd will generate a new self-signed certificate using the configuration shown below.")) +o.inputstyle = "remove" + +function o.write(self, section) + if cert_file:cfgvalue(section) and fs.access(cert_file:cfgvalue(section)) then fs.unlink(cert_file:cfgvalue(section)) end + if key_file:cfgvalue(section) and fs.access(key_file:cfgvalue(section)) then fs.unlink(key_file:cfgvalue(section)) end + luci.sys.call("/etc/init.d/uhttpd restart") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "uhttpd")) +end + +o = ucs:taboption("general", Button, "remove_conf", translate("Remove configuration for certificate and key"), + translate("This permanently deletes the cert, key, and configuration to use same.")) +o.inputstyle = "remove" + +function o.write(self, section) + if cert_file:cfgvalue(section) and fs.access(cert_file:cfgvalue(section)) then fs.unlink(cert_file:cfgvalue(section)) end + if key_file:cfgvalue(section) and fs.access(key_file:cfgvalue(section)) then fs.unlink(key_file:cfgvalue(section)) end + self.map:del(section, "cert") + self.map:del(section, "key") + self.map:del(section, "listen_https") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "uhttpd")) +end + +o = ucs:taboption("server", DynamicList, "index_page", translate("Index page(s)"), translate("E.g specify with index.html and index.php when using PHP")) +o.optional = true +o.placeholder = "index.html" + +o = ucs:taboption("server", DynamicList, "interpreter", translate("CGI filetype handler"), translate("Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/usr/bin/php-cgi')")) +o.optional = true + +o = ucs:taboption("server", Flag, "no_symlinks", translate("Do not follow symlinks outside document root")) +o.optional = true + +o = ucs:taboption("server", Flag, "no_dirlists", translate("Do not generate directory listings.")) +o.default = o.disabled + +o = ucs:taboption("server", DynamicList, "alias", translate("Aliases"), translate("(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)")) +o.optional = true + +o = ucs:taboption("server", Value, "realm", translate("Realm for Basic Auth")) +o.optional = true +o.placeholder = luci.sys.hostname() or "OpenWrt" + +local httpconfig = ucs:taboption("server", Value, "config", translate("Config file (e.g. for credentials for Basic Auth)"), translate("Will not use HTTP authentication if not present")) +httpconfig.optional = true + +o = ucs:taboption("server", Value, "error_page", translate("404 Error"), translate("Virtual URL or CGI script to display on status '404 Not Found'. Must begin with '/'")) +o.optional = true + +o = ucs:taboption("advanced", Value, "home", translate("Document root"), + translate("Base directory for files to be served")) +o.default = "/www" +o.datatype = "directory" + +o = ucs:taboption("advanced", Value, "cgi_prefix", translate("Path prefix for CGI scripts"), translate("CGI is disabled if not present.")) +o.optional = true + +o = ucs:taboption("advanced", Value, "lua_prefix", translate("Virtual path prefix for Lua scripts")) +o.placeholder = "/lua" +o.optional = true + +o = ucs:taboption("advanced", Value, "lua_handler", translate("Full real path to handler for Lua scripts"), translate("Embedded Lua interpreter is disabled if not present.")) +o.optional = true + +o = ucs:taboption("advanced", Value, "ubus_prefix", translate("Virtual path prefix for ubus via JSON-RPC integration"), translate("ubus integration is disabled if not present")) +o.optional = true + +o = ucs:taboption("advanced", Value, "ubus_socket", translate("Override path for ubus socket")) +o.optional = true + +o = ucs:taboption("advanced", Flag, "ubus_cors", translate("Enable JSON-RPC Cross-Origin Resource Support")) +o.default = o.disabled +o.optional = true + +o = ucs:taboption("advanced", Flag, "no_ubusauth", translate("Disable JSON-RPC authorization via ubus session API")) +o.optional= true +o.default = o.disabled + +o = ucs:taboption("advanced", Value, "script_timeout", translate("Maximum wait time for Lua, CGI, or ubus execution")) +o.placeholder = 60 +o.datatype = "uinteger" +o.optional = true + +o = ucs:taboption("advanced", Value, "network_timeout", translate("Maximum wait time for network activity")) +o.placeholder = 30 +o.datatype = "uinteger" +o.optional = true + +o = ucs:taboption("advanced", Value, "http_keepalive", translate("Connection reuse")) +o.placeholder = 20 +o.datatype = "uinteger" +o.optional = true + +o = ucs:taboption("advanced", Value, "tcp_keepalive", translate("TCP Keepalive")) +o.optional = true +o.datatype = "uinteger" +o.default = 1 + +o = ucs:taboption("advanced", Value, "max_connections", translate("Maximum number of connections")) +o.optional = true +o.datatype = "uinteger" + +o = ucs:taboption("advanced", Value, "max_requests", translate("Maximum number of script requests")) +o.optional = true +o.datatype = "uinteger" + +local s = m:section(NamedSection, "px5g", "cert", translate("uHTTPd Self-signed Certificate Parameters")) + +o = s:option(Value, "days", translate("Valid for # of Days")) +o.default = 730 +o.datatype = "uinteger" + +o = s:option(Value, "bits", translate("Length of key in bits")) +o.default = 1024 +o.datatype = "min(1024)" + +o = s:option(Value, "commonname", translate("Server Hostname"), translate("a.k.a CommonName")) +o.default = luci.sys.hostname() + +o = s:option(Value, "country", translate("Country")) +o.default = "ZZ" + +o = s:option(Value, "state", translate("State")) +o.default = "Unknown" + +o = s:option(Value, "location", translate("Location")) +o.default = "Somewhere" + +return m diff --git a/feeds/luci/applications/luci-app-uhttpd/po/ja/uhttpd.po b/feeds/luci/applications/luci-app-uhttpd/po/ja/uhttpd.po new file mode 100644 index 0000000..5729034 --- /dev/null +++ b/feeds/luci/applications/luci-app-uhttpd/po/ja/uhttpd.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2017-01-01 18:11+0900\n" +"Last-Translator: INAGAKI Hiroshi \n" +"Language-Team: \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"X-Poedit-Basepath: .\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "" +"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)" +msgstr "" +"(/old/path=/new/path) または (just /old/path which becomes /cgi-prefix/old/" +"path)" + +msgid "404 Error" +msgstr "404 エラー" + +msgid "A lightweight single-threaded HTTP(S) server" +msgstr "軽量なシングル スレッド HTTP(S) サーバーです。" + +msgid "Advanced Settings" +msgstr "詳細設定" + +msgid "Aliases" +msgstr "エイリアス" + +msgid "Base directory for files to be served" +msgstr "サーバーがホストするファイルのベースディレクトリです。" + +msgid "Bind to specific interface:port (by specifying interface address" +msgstr "" +"インターフェースのアドレスを使用して、特定のインターフェースとポートに関連付" +"けます。" + +msgid "CGI filetype handler" +msgstr "CGIファイル形式 ハンドラー" + +msgid "CGI is disabled if not present." +msgstr "指定しない場合、CGIは無効になります。" + +msgid "Config file (e.g. for credentials for Basic Auth)" +msgstr "設定ファイル(例: 基本認証用の資格情報)" + +msgid "Connection reuse" +msgstr "接続の再使用" + +msgid "Country" +msgstr "国" + +msgid "Disable JSON-RPC authorization via ubus session API" +msgstr "ubus セッションAPI経由のJSON-RPC認証を無効にする" + +msgid "Do not follow symlinks outside document root" +msgstr "ドキュメント ルート外へのシンボリックリンクを追随しない" + +msgid "Do not generate directory listings." +msgstr "ディレクトリの待ち受けを生成しない" + +msgid "Document root" +msgstr "ドキュメント ルート" + +msgid "E.g specify with index.html and index.php when using PHP" +msgstr "index.html や、PHPを使用しているときは index.php を設定します。" + +msgid "Embedded Lua interpreter is disabled if not present." +msgstr "指定しない場合、組込みLua インタープリタは無効になります。" + +msgid "Enable JSON-RPC Cross-Origin Resource Support" +msgstr "" + +msgid "For settings primarily geared to serving more than the web UI" +msgstr "主に、Web UI以上のものを提供することを対象とした設定です。" + +msgid "Full Web Server Settings" +msgstr "完全なWebサーバー設定" + +msgid "Full real path to handler for Lua scripts" +msgstr "Lua スクリプトへの絶対パス" + +msgid "General Settings" +msgstr "一般設定" + +msgid "HTTP listeners (address:port)" +msgstr "HTTP 待ち受け(アドレス:ポート)" + +msgid "HTTPS Certificate (DER Encoded)" +msgstr "HTTPS 証明書(DER エンコード)" + +msgid "HTTPS Private Key (DER Encoded)" +msgstr "HTTPS 秘密鍵(DER エンコード)" + +msgid "HTTPS listener (address:port)" +msgstr "HTTPS 待ち受け(アドレス:ポート)" + +msgid "Ignore private IPs on public interface" +msgstr "公開側インターフェースでのプライベートIPを無視する" + +msgid "Index page(s)" +msgstr "インデックス ページ" + +msgid "" +"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/" +"usr/bin/php-cgi')" +msgstr "" +"ファイル拡張子に関連付けるインタープリタです。('suffix=handler'、例: '.php=/" +"usr/bin/php-cgi')" + +msgid "Length of key in bits" +msgstr "鍵のビット数" + +msgid "Location" +msgstr "場所" + +msgid "Maximum number of connections" +msgstr "最大接続数" + +msgid "Maximum number of script requests" +msgstr "スクリプトの最大リクエスト数" + +msgid "Maximum wait time for Lua, CGI, or ubus execution" +msgstr "LuaやCGI、ubus実行の最大待機時間" + +msgid "Maximum wait time for network activity" +msgstr "ネットワークアクティビティの最大待機時間" + +msgid "Override path for ubus socket" +msgstr "ubus ソケットのパスを上書きする" + +msgid "Path prefix for CGI scripts" +msgstr "CGI スクリプトのパスプレフィクス" + +msgid "" +"Prevent access from private (RFC1918) IPs on an interface if it has an " +"public IP address" +msgstr "" +"グローバル IPアドレスを持つインターフェースでは、プライベート IP (RFC1918) か" +"らのアクセスをブロックします。" + +msgid "Realm for Basic Auth" +msgstr "基本認証の領域名" + +msgid "Redirect all HTTP to HTTPS" +msgstr "全てのHTTPをHTTPSにリダイレクトする" + +msgid "Remove configuration for certificate and key" +msgstr "証明書と鍵の設定を削除する" + +msgid "Remove old certificate and key" +msgstr "古い証明書と鍵を削除する" + +msgid "Server Hostname" +msgstr "サーバー ホスト名" + +msgid "" +"Settings which are either rarely needed or which affect serving the WebUI" +msgstr "まれに必要とされる設定、またはWeb UIに影響する設定です。" + +msgid "State" +msgstr "ステータス" + +msgid "TCP Keepalive" +msgstr "TCP キープアライブ" + +msgid "This permanently deletes the cert, key, and configuration to use same." +msgstr "" + +msgid "Valid for # of Days" +msgstr "有効日数" + +msgid "" +"Virtual URL or CGI script to display on status '404 Not Found'. Must begin " +"with '/'" +msgstr "" + +msgid "Virtual path prefix for Lua scripts" +msgstr "Lua スクリプトへの仮想パスプレフィクス" + +msgid "Virtual path prefix for ubus via JSON-RPC integration" +msgstr "" + +msgid "Will not use HTTP authentication if not present" +msgstr "指定しない場合、HTTP 認証は使用されません。" + +msgid "a.k.a CommonName" +msgstr "共通名" + +msgid "uHTTPd" +msgstr "uHTTPd" + +msgid "uHTTPd Self-signed Certificate Parameters" +msgstr "uHTTPd 自己署名証明書 パラメーター" + +msgid "" +"uHTTPd will generate a new self-signed certificate using the configuration " +"shown below." +msgstr "uHTTPd は、以下に表示した設定で新しい自己署名証明書を生成します。" + +msgid "ubus integration is disabled if not present" +msgstr "" + +#~ msgid "" +#~ "Virtual URL or CGI script to display on status '404 Not Found'. Must " +#~ "begin with '/'" +#~ msgstr "" +#~ "'404 Not Found' ステータスを表示する、仮想URLまたはCGIスクリプトです。'/' " +#~ "から始まる必要があります。" diff --git a/feeds/luci/applications/luci-app-uhttpd/po/templates/uhttpd.pot b/feeds/luci/applications/luci-app-uhttpd/po/templates/uhttpd.pot new file mode 100644 index 0000000..5503450 --- /dev/null +++ b/feeds/luci/applications/luci-app-uhttpd/po/templates/uhttpd.pot @@ -0,0 +1,186 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "" +"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)" +msgstr "" + +msgid "404 Error" +msgstr "" + +msgid "A lightweight single-threaded HTTP(S) server" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Aliases" +msgstr "" + +msgid "Base directory for files to be served" +msgstr "" + +msgid "Bind to specific interface:port (by specifying interface address" +msgstr "" + +msgid "CGI filetype handler" +msgstr "" + +msgid "CGI is disabled if not present." +msgstr "" + +msgid "Config file (e.g. for credentials for Basic Auth)" +msgstr "" + +msgid "Connection reuse" +msgstr "" + +msgid "Country" +msgstr "" + +msgid "Disable JSON-RPC authorization via ubus session API" +msgstr "" + +msgid "Do not follow symlinks outside document root" +msgstr "" + +msgid "Do not generate directory listings." +msgstr "" + +msgid "Document root" +msgstr "" + +msgid "E.g specify with index.html and index.php when using PHP" +msgstr "" + +msgid "Embedded Lua interpreter is disabled if not present." +msgstr "" + +msgid "Enable JSON-RPC Cross-Origin Resource Support" +msgstr "" + +msgid "For settings primarily geared to serving more than the web UI" +msgstr "" + +msgid "Full Web Server Settings" +msgstr "" + +msgid "Full real path to handler for Lua scripts" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "HTTP listeners (address:port)" +msgstr "" + +msgid "HTTPS Certificate (DER Encoded)" +msgstr "" + +msgid "HTTPS Private Key (DER Encoded)" +msgstr "" + +msgid "HTTPS listener (address:port)" +msgstr "" + +msgid "Ignore private IPs on public interface" +msgstr "" + +msgid "Index page(s)" +msgstr "" + +msgid "" +"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/" +"usr/bin/php-cgi')" +msgstr "" + +msgid "Length of key in bits" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Maximum number of connections" +msgstr "" + +msgid "Maximum number of script requests" +msgstr "" + +msgid "Maximum wait time for Lua, CGI, or ubus execution" +msgstr "" + +msgid "Maximum wait time for network activity" +msgstr "" + +msgid "Override path for ubus socket" +msgstr "" + +msgid "Path prefix for CGI scripts" +msgstr "" + +msgid "" +"Prevent access from private (RFC1918) IPs on an interface if it has an " +"public IP address" +msgstr "" + +msgid "Realm for Basic Auth" +msgstr "" + +msgid "Redirect all HTTP to HTTPS" +msgstr "" + +msgid "Remove configuration for certificate and key" +msgstr "" + +msgid "Remove old certificate and key" +msgstr "" + +msgid "Server Hostname" +msgstr "" + +msgid "" +"Settings which are either rarely needed or which affect serving the WebUI" +msgstr "" + +msgid "State" +msgstr "" + +msgid "TCP Keepalive" +msgstr "" + +msgid "This permanently deletes the cert, key, and configuration to use same." +msgstr "" + +msgid "Valid for # of Days" +msgstr "" + +msgid "" +"Virtual URL or CGI script to display on status '404 Not Found'. Must begin " +"with '/'" +msgstr "" + +msgid "Virtual path prefix for Lua scripts" +msgstr "" + +msgid "Virtual path prefix for ubus via JSON-RPC integration" +msgstr "" + +msgid "Will not use HTTP authentication if not present" +msgstr "" + +msgid "a.k.a CommonName" +msgstr "" + +msgid "uHTTPd" +msgstr "" + +msgid "uHTTPd Self-signed Certificate Parameters" +msgstr "" + +msgid "" +"uHTTPd will generate a new self-signed certificate using the configuration " +"shown below." +msgstr "" + +msgid "ubus integration is disabled if not present" +msgstr "" diff --git a/feeds/luci/applications/luci-app-unbound/Makefile b/feeds/luci/applications/luci-app-unbound/Makefile new file mode 100644 index 0000000..6d953e1 --- /dev/null +++ b/feeds/luci/applications/luci-app-unbound/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Unbound Recursive DNS Resolver Configuration +LUCI_DEPENDS:=+unbound + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-unbound/luasrc/controller/unbound.lua b/feeds/luci/applications/luci-app-unbound/luasrc/controller/unbound.lua new file mode 100644 index 0000000..0a5abc5 --- /dev/null +++ b/feeds/luci/applications/luci-app-unbound/luasrc/controller/unbound.lua @@ -0,0 +1,17 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.unbound", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/unbound") then + return + end + + local page + + page = entry({"admin", "services", "unbound"}, cbi("unbound"), _("Recursive DNS")) + page.dependent = true +end + diff --git a/feeds/luci/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua b/feeds/luci/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua new file mode 100644 index 0000000..6d876c2 --- /dev/null +++ b/feeds/luci/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua @@ -0,0 +1,135 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2016 Eric Luehrsen +-- Copyright 2016 Dan Luedtke +-- Licensed to the public under the Apache License 2.0. + +m = Map("unbound", translate("Recursive DNS"), + translate("Unbound is a validating, recursive, and caching DNS resolver.")) + +s = m:section(TypedSection, "unbound", translate("Unbound Settings")) +s.addremove = false +s.anonymous = true + +s:tab("service", translate("Unbound Service")) +s:tab("resource", translate("Unbound Resources")) +s:tab("dnsmasq", translate("Dnsmasq Link")) + +--Enable Unbound + +e = s:taboption("service", Flag, "enabled", translate("Enable Unbound:"), + translate("Enable the initialization scripts for Unbound")) +e.rmempty = false + +function e.cfgvalue(self, section) + return luci.sys.init.enabled("unbound") and self.enabled or self.disabled +end + +function e.write(self, section, value) + if value == "1" then + luci.sys.init.enable("unbound") + luci.sys.call("/etc/init.d/unbound start >/dev/null") + else + luci.sys.call("/etc/init.d/unbound stop >/dev/null") + luci.sys.init.disable("unbound") + end + + return Flag.write(self, section, value) +end + +--Service Tab + +mcf = s:taboption("service", Flag, "manual_conf", translate("Manual Conf:"), + translate("Skip UCI and use /etc/unbound/unbound.conf")) +mcf.rmempty = false + +lsv = s:taboption("service", Flag, "localservice", translate("Local Service:"), + translate("Accept queries only from local subnets")) +lsv.rmempty = false + +qry = s:taboption("service", Flag, "query_minimize", translate("Query Minimize:"), + translate("Break down query components for small added privacy")) +qry.rmempty = false + +rlh = s:taboption("service", Flag, "rebind_localhost", translate("Block Localhost Rebind:"), + translate("Prevent upstream response of 127.0.0.0/8")) +rlh.rmempty = false + +rpv = s:taboption("service", Flag, "rebind_protection", translate("Block Private Rebind:"), + translate("Prevent upstream response of RFC1918 ranges")) +rpv.rmempty = false + +vld = s:taboption("service", Flag, "validator", translate("Enable DNSSEC:"), + translate("Enable the DNSSEC validator module")) +vld.rmempty = false + +nvd = s:taboption("service", Flag, "validator_ntp", translate("DNSSEC NTP Fix:"), + translate("Break the loop where DNSSEC needs NTP and NTP needs DNS")) +nvd.rmempty = false + +eds = s:taboption("service", Value, "edns_size", translate("EDNS Size:"), + translate("Limit extended DNS packet size")) +eds.datatype = "and(uinteger,min(512),max(4096))" +eds.rmempty = false + +prt = s:taboption("service", Value, "listen_port", translate("Listening Port:"), + translate("Choose Unbounds listening port")) +prt.datatype = "port" +prt.rmempty = false + +tlm = s:taboption("service", Value, "ttl_min", translate("TTL Minimum:"), + translate("Prevent excessively short cache periods")) +tlm.datatype = "and(uinteger,min(0),max(600))" +tlm.rmempty = false + +d64 = s:taboption("service", Flag, "dns64", translate("Enable DNS64:"), + translate("Enable the DNS64 module")) +d64.rmempty = false + +pfx = s:taboption("service", Value, "dns64_prefix", translate("DNS64 Prefix:"), + translate("Prefix for generated DNS64 addresses")) +pfx.datatype = "ip6addr" +pfx.placeholder = "64:ff9b::/96" +pfx.optional = true +pfx:depends({ dns64 = "1" }) + +--Resource Tuning Tab + +rsn = s:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"), + translate("Recursion activity affects memory growth and CPU load")) +rsn:value("aggressive", translate("Aggressive")) +rsn:value("default", translate("Default")) +rsn:value("passive", translate("Passive")) +rsn.rmempty = false + +rsc = s:taboption("resource", ListValue, "resource", translate("Memory Resource:"), + translate("Use menu System/Processes to observe any memory growth")) +rsc:value("large", translate("Large")) +rsc:value("medium", translate("Medium")) +rsc:value("small", translate("Small")) +rsc:value("tiny", translate("Tiny")) +rsc.rmempty = false + +age = s:taboption("resource", Value, "root_age", translate("Root DSKEY Age:"), + translate("Limit days between RFC5011 to reduce flash writes")) +age.datatype = "and(uinteger,min(1),max(99))" +age:value("14", "14") +age:value("28", "28 ("..translate("default")..")") +age:value("45", "45") +age:value("90", "90") +age:value("99", "99 ("..translate("never")..")") + +--Dnsmasq Link Tab + +dld = s:taboption("dnsmasq", Flag, "dnsmasq_link_dns", translate("Link dnsmasq:"), + translate("Forward queries to dnsmasq for local clients")) +dld.rmempty = false + +dgn = s:taboption("dnsmasq", Flag, "dnsmsaq_gate_name", translate("Local Gateway Name:"), + translate("Also query dnsmasq for this hosts outbound gateway")) +dgn.rmempty = false + +--TODO: Read only repective dnsmasq options and inform user of link requirements. +--TODO: dnsmasq needs to not reference resolve-file and get off port 53. + +return m + diff --git a/feeds/luci/applications/luci-app-upnp/Makefile b/feeds/luci/applications/luci-app-upnp/Makefile new file mode 100644 index 0000000..324e3e2 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Universal Plug & Play configuration module +LUCI_DEPENDS:=+miniupnpd + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-upnp/luasrc/controller/upnp.lua b/feeds/luci/applications/luci-app-upnp/luasrc/controller/upnp.lua new file mode 100644 index 0000000..c60b7c4 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/luasrc/controller/upnp.lua @@ -0,0 +1,74 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.upnp", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/upnpd") then + return + end + + local page + + page = entry({"admin", "services", "upnp"}, cbi("upnp/upnp"), _("UPnP")) + page.dependent = true + + entry({"admin", "services", "upnp", "status"}, call("act_status")).leaf = true + entry({"admin", "services", "upnp", "delete"}, post("act_delete")).leaf = true +end + +function act_status() + local ipt = io.popen("iptables --line-numbers -t nat -xnvL MINIUPNPD 2>/dev/null") + if ipt then + local fwd = { } + while true do + local ln = ipt:read("*l") + if not ln then + break + elseif ln:match("^%d+") then + local num, proto, extport, intaddr, intport = + ln:match("^(%d+).-([a-z]+).-dpt:(%d+) to:(%S-):(%d+)") + + if num and proto and extport and intaddr and intport then + num = tonumber(num) + extport = tonumber(extport) + intport = tonumber(intport) + + fwd[#fwd+1] = { + num = num, + proto = proto:upper(), + extport = extport, + intaddr = intaddr, + intport = intport + } + end + end + end + + ipt:close() + + luci.http.prepare_content("application/json") + luci.http.write_json(fwd) + end +end + +function act_delete(num) + local idx = tonumber(num) + local uci = luci.model.uci.cursor() + + if idx and idx > 0 then + luci.sys.call("iptables -t filter -D MINIUPNPD %d 2>/dev/null" % idx) + luci.sys.call("iptables -t nat -D MINIUPNPD %d 2>/dev/null" % idx) + + local lease_file = uci:get("upnpd", "config", "upnp_lease_file") + if lease_file and nixio.fs.access(lease_file) then + luci.sys.call("sed -i -e '%dd' %q" %{ idx, lease_file }) + end + + luci.http.status(200, "OK") + return + end + + luci.http.status(400, "Bad request") +end diff --git a/feeds/luci/applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua b/feeds/luci/applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua new file mode 100644 index 0000000..f1bb450 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua @@ -0,0 +1,103 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008-2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("upnpd", luci.util.pcdata(translate("Universal Plug & Play")), + translate("UPnP allows clients in the local network to automatically configure the router.")) + +m:section(SimpleSection).template = "upnp_status" + +s = m:section(NamedSection, "config", "upnpd", translate("MiniUPnP settings")) +s.addremove = false +s:tab("general", translate("General Settings")) +s:tab("advanced", translate("Advanced Settings")) + +e = s:taboption("general", Flag, "_init", translate("Start UPnP and NAT-PMP service")) +e.rmempty = false + +function e.cfgvalue(self, section) + return luci.sys.init.enabled("miniupnpd") and self.enabled or self.disabled +end + +function e.write(self, section, value) + if value == "1" then + luci.sys.call("/etc/init.d/miniupnpd enable >/dev/null") + luci.sys.call("/etc/init.d/miniupnpd start >/dev/null") + else + luci.sys.call("/etc/init.d/miniupnpd stop >/dev/null") + luci.sys.call("/etc/init.d/miniupnpd disable >/dev/null") + end +end + +s:taboption("general", Flag, "enable_upnp", translate("Enable UPnP functionality")).default = "1" +s:taboption("general", Flag, "enable_natpmp", translate("Enable NAT-PMP functionality")).default = "1" + +s:taboption("general", Flag, "secure_mode", translate("Enable secure mode"), + translate("Allow adding forwards only to requesting ip addresses")).default = "1" + +s:taboption("general", Flag, "log_output", translate("Enable additional logging"), + translate("Puts extra debugging information into the system log")) + +s:taboption("general", Value, "download", translate("Downlink"), + translate("Value in KByte/s, informational only")).rmempty = true + +s:taboption("general", Value, "upload", translate("Uplink"), + translate("Value in KByte/s, informational only")).rmempty = true + +port = s:taboption("general", Value, "port", translate("Port")) +port.datatype = "port" +port.default = 5000 + + +s:taboption("advanced", Flag, "system_uptime", translate("Report system instead of daemon uptime")).default = "1" + +s:taboption("advanced", Value, "uuid", translate("Device UUID")) +s:taboption("advanced", Value, "serial_number", translate("Announced serial number")) +s:taboption("advanced", Value, "model_number", translate("Announced model number")) + +ni = s:taboption("advanced", Value, "notify_interval", translate("Notify interval")) +ni.datatype = "uinteger" +ni.placeholder = 30 + +ct = s:taboption("advanced", Value, "clean_ruleset_threshold", translate("Clean rules threshold")) +ct.datatype = "uinteger" +ct.placeholder = 20 + +ci = s:taboption("advanced", Value, "clean_ruleset_interval", translate("Clean rules interval")) +ci.datatype = "uinteger" +ci.placeholder = 600 + +pu = s:taboption("advanced", Value, "presentation_url", translate("Presentation URL")) +pu.placeholder = "http://192.168.1.1/" + +lf = s:taboption("advanced", Value, "upnp_lease_file", translate("UPnP lease file")) +lf.placeholder = "/var/log/upnp.leases" + + +s2 = m:section(TypedSection, "perm_rule", translate("MiniUPnP ACLs"), + translate("ACLs specify which external ports may be redirected to which internal addresses and ports")) + +s2.template = "cbi/tblsection" +s2.sortable = true +s2.anonymous = true +s2.addremove = true + +s2:option(Value, "comment", translate("Comment")) + +ep = s2:option(Value, "ext_ports", translate("External ports")) +ep.datatype = "portrange" +ep.placeholder = "0-65535" + +ia = s2:option(Value, "int_addr", translate("Internal addresses")) +ia.datatype = "ip4addr" +ia.placeholder = "0.0.0.0/0" + +ip = s2:option(Value, "int_ports", translate("Internal ports")) +ip.datatype = "portrange" +ip.placeholder = "0-65535" + +ac = s2:option(ListValue, "action", translate("Action")) +ac:value("allow") +ac:value("deny") + +return m diff --git a/feeds/luci/applications/luci-app-upnp/luasrc/view/admin_status/index/upnp.htm b/feeds/luci/applications/luci-app-upnp/luasrc/view/admin_status/index/upnp.htm new file mode 100644 index 0000000..d0c2e2e --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/luasrc/view/admin_status/index/upnp.htm @@ -0,0 +1 @@ +<%+upnp_status%> diff --git a/feeds/luci/applications/luci-app-upnp/luasrc/view/upnp_status.htm b/feeds/luci/applications/luci-app-upnp/luasrc/view/upnp_status.htm new file mode 100644 index 0000000..e358dcd --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/luasrc/view/upnp_status.htm @@ -0,0 +1,67 @@ + + +
+ <%:Active UPnP Redirects%> + + + + + + + + + + + +
<%:Protocol%><%:External Port%><%:Client Address%><%:Client Port%> 

<%:Collecting data...%>
+
diff --git a/feeds/luci/applications/luci-app-upnp/po/ca/upnp.po b/feeds/luci/applications/luci-app-upnp/po/ca/upnp.po new file mode 100644 index 0000000..bb9f88f --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/ca/upnp.po @@ -0,0 +1,167 @@ +# upnp.pot +# generated from ./applications/luci-upnp/luasrc/i18n/upnp.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-07-01 08:38+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"Els ACL especifiquen quins ports externs es poden redirigir a quines adreces " +"i ports interns" + +msgid "Action" +msgstr "Acció" + +msgid "Active UPnP Redirects" +msgstr "Redireccions UPnP actives" + +msgid "Advanced Settings" +msgstr "Ajusts avançats" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "Permet que s'afegeixin redireccions només a les adreces IP peticionant" + +msgid "Announced model number" +msgstr "Número de model anunciat" + +msgid "Announced serial number" +msgstr "Número de sèrie anunciat" + +msgid "Clean rules interval" +msgstr "Interval de neteja de regles" + +msgid "Clean rules threshold" +msgstr "Llindar de neteja de regles" + +msgid "Client Address" +msgstr "Adreça de client" + +msgid "Client Port" +msgstr "Port de client" + +msgid "Collecting data..." +msgstr "Recollint dades..." + +msgid "Comment" +msgstr "Comentari" + +msgid "Delete Redirect" +msgstr "Suprimeix la redirecció" + +msgid "Device UUID" +msgstr "UUID de dispositiu" + +msgid "Downlink" +msgstr "Enllaç de baixada" + +msgid "Enable NAT-PMP functionality" +msgstr "Habilita la funcionalitat NAT-PMP" + +msgid "Enable UPnP functionality" +msgstr "Habilita la funcionalitat UPnP" + +msgid "Enable additional logging" +msgstr "Habilita el registre addicional" + +msgid "Enable secure mode" +msgstr "Habilita mode segur" + +msgid "External Port" +msgstr "Port extern" + +msgid "External ports" +msgstr "Ports externs" + +msgid "General Settings" +msgstr "Ajusts generals" + +msgid "Internal addresses" +msgstr "Adreces internes" + +msgid "Internal ports" +msgstr "Ports interns" + +msgid "MiniUPnP ACLs" +msgstr "ACLs de MiniUPnP" + +msgid "MiniUPnP settings" +msgstr "Ajusts de MiniUPnP" + +msgid "Notify interval" +msgstr "Interval de notificació" + +msgid "Port" +msgstr "Port" + +msgid "Presentation URL" +msgstr "" + +msgid "Protocol" +msgstr "Protocol" + +msgid "Puts extra debugging information into the system log" +msgstr "Posa informació extra de depuració en el registre de sistema" + +msgid "Report system instead of daemon uptime" +msgstr "Reporta el temps actiu del sistema en lloc del del dimoni" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Inicia el servei UPnP i NAP-PMP" + +msgid "There are no active redirects." +msgstr "No hi ha redireccions actives." + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP permet als clients de la xarxa local configurar automàticament el " +"router." + +msgid "UPnP lease file" +msgstr "Fitxer d'arrendament UPnP" + +msgid "Universal Plug & Play" +msgstr "Universal Plug & Play" + +msgid "Uplink" +msgstr "Enllaç de pujada" + +msgid "Value in KByte/s, informational only" +msgstr "Valor en KByte/s, només per informació" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnP permet als clients de la xarxa local configurar automàticament el " +#~ "router." + +#~ msgid "enable" +#~ msgstr "habilita" + +#~ msgid "Log output" +#~ msgstr "Registra la sortida" + +#~ msgid "" +#~ "UPNP should only be enabled if absolutely necessary as it can result in " +#~ "high security risks for your network." +#~ msgstr "" +#~ "Només s'hauria d'activar l'UPnP si és absolutament necessari, ja que en " +#~ "poden resultar alts riscos de seguretat a la teva xarxa." diff --git a/feeds/luci/applications/luci-app-upnp/po/cs/upnp.po b/feeds/luci/applications/luci-app-upnp/po/cs/upnp.po new file mode 100644 index 0000000..3cefdcc --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/cs/upnp.po @@ -0,0 +1,150 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-29 21:54+0200\n" +"Last-Translator: Astran \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"ACL stanovují, které vnější porty by měly být přesměrovány na které vnitřní " +"adresy a porty" + +msgid "Action" +msgstr "Akce" + +msgid "Active UPnP Redirects" +msgstr "Aktivní přesměrování UPnP" + +msgid "Advanced Settings" +msgstr "Pokročilé nastavení" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "Povolit přesměrování pouze na dotazující ip adresy" + +msgid "Announced model number" +msgstr "Oznámené číslo modelu" + +msgid "Announced serial number" +msgstr "Oznámené sériové číslo" + +msgid "Clean rules interval" +msgstr "Interval čištění pravidel" + +msgid "Clean rules threshold" +msgstr "Práh čištění pravidel" + +msgid "Client Address" +msgstr "Adresa klienta" + +msgid "Client Port" +msgstr "Port klienta" + +msgid "Collecting data..." +msgstr "Probíhá sběr dat.." + +msgid "Comment" +msgstr "Komentář" + +msgid "Delete Redirect" +msgstr "Odstranit přesměrování" + +msgid "Device UUID" +msgstr "UUID zařízení" + +msgid "Downlink" +msgstr "Downlink" + +msgid "Enable NAT-PMP functionality" +msgstr "Povolit funkčnost NAT-PMP" + +msgid "Enable UPnP functionality" +msgstr "Povolit funkčnost UPnP" + +msgid "Enable additional logging" +msgstr "Povolit přídavné logování" + +msgid "Enable secure mode" +msgstr "Povolit bezpečný režim" + +msgid "External Port" +msgstr "Vnější port" + +msgid "External ports" +msgstr "Vnější porty" + +msgid "General Settings" +msgstr "Obecné nastavení" + +msgid "Internal addresses" +msgstr "Vnitřní adresy" + +msgid "Internal ports" +msgstr "Vnitřní porty" + +msgid "MiniUPnP ACLs" +msgstr "MiniUPnP ACL listy" + +msgid "MiniUPnP settings" +msgstr "Nastavení MiniUPnP" + +msgid "Notify interval" +msgstr "Interval oznamování" + +msgid "Port" +msgstr "Port" + +msgid "Presentation URL" +msgstr "Prezentace URL" + +msgid "Protocol" +msgstr "Protokol" + +msgid "Puts extra debugging information into the system log" +msgstr "Vypisovat extra ladící informace do systémového záznamu" + +msgid "Report system instead of daemon uptime" +msgstr "Hlásit uptime systému namísto uptime daemonu" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Spustit službu UPnP a NAT-PMP" + +msgid "There are no active redirects." +msgstr "Nejsou zde žádná aktivní přesměrování" + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP umožňuje klientům v místní síti automaticky nakonfigurovat router." + +msgid "UPnP lease file" +msgstr "Soubor UPnP výpůjček" + +msgid "Universal Plug & Play" +msgstr "Univerzální Plug & Play" + +msgid "Uplink" +msgstr "Uplink" + +msgid "Value in KByte/s, informational only" +msgstr "Pouze informační hodnoty (v KByte/s)" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "UPnP umožňuje klientům v místní síti automaticky nakonfigurovat router." + +#~ msgid "enable" +#~ msgstr "povolit" diff --git a/feeds/luci/applications/luci-app-upnp/po/de/upnp.po b/feeds/luci/applications/luci-app-upnp/po/de/upnp.po new file mode 100644 index 0000000..fe6532d --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/de/upnp.po @@ -0,0 +1,171 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2012-11-28 10:45+0200\n" +"Last-Translator: dunkelschunkel \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"ACLs definieren, welche externen Ports zu welchen internen Adressen und " +"Ports weitergeleitet werden dürfen" + +msgid "Action" +msgstr "Aktion" + +msgid "Active UPnP Redirects" +msgstr "Aktive UPnP-Weiterleitungen" + +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "Nur Weiterleitungen zurück zum anfordernden Client zulassen" + +msgid "Announced model number" +msgstr "Angekündigte Modellnummer" + +msgid "Announced serial number" +msgstr "Angekündigte Seriennummer" + +msgid "Clean rules interval" +msgstr "Aufräumintervall für Weiterleitungen" + +msgid "Clean rules threshold" +msgstr "Aufräumschwellenwert für Weiterleitungen" + +msgid "Client Address" +msgstr "Clientadresse" + +msgid "Client Port" +msgstr "Clientport" + +msgid "Collecting data..." +msgstr "Sammle Daten..." + +msgid "Comment" +msgstr "Kommentar" + +msgid "Delete Redirect" +msgstr "Weiterleitung löschen" + +msgid "Device UUID" +msgstr "Geräte-UUID" + +msgid "Downlink" +msgstr "Downlink" + +msgid "Enable NAT-PMP functionality" +msgstr "NAT-PMP Funktionalität aktivieren" + +msgid "Enable UPnP functionality" +msgstr "UPnP Funktionalität aktivieren" + +msgid "Enable additional logging" +msgstr "Erweiterte Protokollierung aktivieren" + +msgid "Enable secure mode" +msgstr "Sicheren Modus aktivieren" + +msgid "External Port" +msgstr "Externer Port" + +msgid "External ports" +msgstr "Externe Ports" + +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +msgid "Internal addresses" +msgstr "Interne Adressen" + +msgid "Internal ports" +msgstr "Interne Ports" + +msgid "MiniUPnP ACLs" +msgstr "MiniUPnP ACLs" + +msgid "MiniUPnP settings" +msgstr "MiniUPnP-Einstellungen" + +msgid "Notify interval" +msgstr "Benachrichtigungsintervall" + +msgid "Port" +msgstr "Port" + +msgid "Presentation URL" +msgstr "Präsentations-URL" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Puts extra debugging information into the system log" +msgstr "Schreibt zusätzliche Debug-Informationen in das Systemprotokoll" + +msgid "Report system instead of daemon uptime" +msgstr "Systemlaufzeit statt Prozesslaufzeit melden" + +msgid "Start UPnP and NAT-PMP service" +msgstr "UPnP und NAT-PMP Dienst starten" + +msgid "There are no active redirects." +msgstr "Es gibt keine aktiven Weiterleitungen." + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP erlaubt es Clients im lokalen Netzwerk automatisch Port-Weiterleitungen " +"auf diesem Router einzurichten." + +msgid "UPnP lease file" +msgstr "UPnP Lease-Datei" + +msgid "Universal Plug & Play" +msgstr "Universal Plug & Play" + +msgid "Uplink" +msgstr "Uplink" + +msgid "Value in KByte/s, informational only" +msgstr "Wert in Kilobyte/s, nur informativ" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnP ermöglicht die automatische Konfiguration des Routers durch Clients im " +#~ "lokalen Netzwerk." + +#~ msgid "enable" +#~ msgstr "aktivieren" + +#~ msgid "Enable NAT-PMP" +#~ msgstr "NAT-PMP aktivieren" + +#~ msgid "Enable UPnP Service" +#~ msgstr "UPnP Service aktivieren" + +#~ msgid "Log output" +#~ msgstr "Ausgabe protokollieren" + +#~ msgid "" +#~ "UPNP should only be enabled if absolutely necessary as it can result in " +#~ "high security risks for your network." +#~ msgstr "" +#~ "UPNP sollte nur wenn unbedingt nötig aktiviert werden, da es ein " +#~ "Sicherheitsrisiko für das Netzwerk darstellen kann." diff --git a/feeds/luci/applications/luci-app-upnp/po/el/upnp.po b/feeds/luci/applications/luci-app-upnp/po/el/upnp.po new file mode 100644 index 0000000..8b4fa0c --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/el/upnp.po @@ -0,0 +1,140 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-28 02:08+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Active UPnP Redirects" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" + +msgid "Announced model number" +msgstr "" + +msgid "Announced serial number" +msgstr "" + +msgid "Clean rules interval" +msgstr "" + +msgid "Clean rules threshold" +msgstr "" + +msgid "Client Address" +msgstr "" + +msgid "Client Port" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Delete Redirect" +msgstr "" + +msgid "Device UUID" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Enable NAT-PMP functionality" +msgstr "" + +msgid "Enable UPnP functionality" +msgstr "" + +msgid "Enable additional logging" +msgstr "" + +msgid "Enable secure mode" +msgstr "" + +msgid "External Port" +msgstr "" + +msgid "External ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Internal addresses" +msgstr "" + +msgid "Internal ports" +msgstr "" + +msgid "MiniUPnP ACLs" +msgstr "" + +msgid "MiniUPnP settings" +msgstr "" + +msgid "Notify interval" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Presentation URL" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Puts extra debugging information into the system log" +msgstr "" + +msgid "Report system instead of daemon uptime" +msgstr "" + +msgid "Start UPnP and NAT-PMP service" +msgstr "" + +msgid "There are no active redirects." +msgstr "" + +msgid "UPnP" +msgstr "" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" + +msgid "UPnP lease file" +msgstr "" + +msgid "Universal Plug & Play" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Value in KByte/s, informational only" +msgstr "" diff --git a/feeds/luci/applications/luci-app-upnp/po/en/upnp.po b/feeds/luci/applications/luci-app-upnp/po/en/upnp.po new file mode 100644 index 0000000..215b34c --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/en/upnp.po @@ -0,0 +1,157 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Active UPnP Redirects" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" + +msgid "Announced model number" +msgstr "" + +msgid "Announced serial number" +msgstr "" + +msgid "Clean rules interval" +msgstr "" + +msgid "Clean rules threshold" +msgstr "" + +msgid "Client Address" +msgstr "" + +msgid "Client Port" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Delete Redirect" +msgstr "" + +msgid "Device UUID" +msgstr "" + +msgid "Downlink" +msgstr "Downlink" + +msgid "Enable NAT-PMP functionality" +msgstr "" + +msgid "Enable UPnP functionality" +msgstr "" + +msgid "Enable additional logging" +msgstr "" + +msgid "Enable secure mode" +msgstr "Enable secure mode" + +msgid "External Port" +msgstr "" + +msgid "External ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Internal addresses" +msgstr "" + +msgid "Internal ports" +msgstr "" + +msgid "MiniUPnP ACLs" +msgstr "" + +msgid "MiniUPnP settings" +msgstr "" + +msgid "Notify interval" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Presentation URL" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Puts extra debugging information into the system log" +msgstr "" + +msgid "Report system instead of daemon uptime" +msgstr "" + +msgid "Start UPnP and NAT-PMP service" +msgstr "" + +msgid "There are no active redirects." +msgstr "" + +msgid "UPnP" +msgstr "" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" + +msgid "UPnP lease file" +msgstr "" + +msgid "Universal Plug & Play" +msgstr "Universal Plug & Play" + +msgid "Uplink" +msgstr "Uplink" + +msgid "Value in KByte/s, informational only" +msgstr "" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." + +#~ msgid "Log output" +#~ msgstr "Log output" + +#~ msgid "" +#~ "UPNP should only be enabled if absolutely necessary as it can result in " +#~ "high security risks for your network." +#~ msgstr "" +#~ "UPNP should only be enabled if absolutely necessary as it can result in " +#~ "high security risks for your network." diff --git a/feeds/luci/applications/luci-app-upnp/po/es/upnp.po b/feeds/luci/applications/luci-app-upnp/po/es/upnp.po new file mode 100644 index 0000000..91e1393 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/es/upnp.po @@ -0,0 +1,165 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-10-07 16:11+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"Los ACL especifican qué puertos externos pueden ser redirigidos hacia qué " +"direcciones y puertos internas" + +msgid "Action" +msgstr "Acción" + +msgid "Active UPnP Redirects" +msgstr "Redirecciones UPnP activas" + +msgid "Advanced Settings" +msgstr "Configuración avanzada" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "Permitir añadir redirecciones sólo a IPs que lo soliciten" + +msgid "Announced model number" +msgstr "Número de modelo declarado" + +msgid "Announced serial number" +msgstr "Número de serie declarado" + +msgid "Clean rules interval" +msgstr "Intervalo de borrado de reglas" + +msgid "Clean rules threshold" +msgstr "Umbral de borrado de reglas" + +msgid "Client Address" +msgstr "Dirección del cliente" + +msgid "Client Port" +msgstr "Puerto del cliente" + +msgid "Collecting data..." +msgstr "Un momento..." + +msgid "Comment" +msgstr "Comentario" + +msgid "Delete Redirect" +msgstr "Borrar redirección" + +msgid "Device UUID" +msgstr "UUID del dispositivo" + +msgid "Downlink" +msgstr "Enlace para bajada" + +msgid "Enable NAT-PMP functionality" +msgstr "Activar la funcionalidad NAT-PMP" + +msgid "Enable UPnP functionality" +msgstr "Activar la funcionalidad UPnP" + +msgid "Enable additional logging" +msgstr "Activar registro adicional" + +msgid "Enable secure mode" +msgstr "Habilitar modo seguro" + +msgid "External Port" +msgstr "Puerto externo" + +msgid "External ports" +msgstr "Puertos externos" + +msgid "General Settings" +msgstr "Configuración general" + +msgid "Internal addresses" +msgstr "Direcciones internas" + +msgid "Internal ports" +msgstr "Puertos internos" + +msgid "MiniUPnP ACLs" +msgstr "ACLs MiniUPnP" + +msgid "MiniUPnP settings" +msgstr "Configuración MiniUPnP" + +msgid "Notify interval" +msgstr "Intervalo de notificación" + +msgid "Port" +msgstr "Puerto" + +msgid "Presentation URL" +msgstr "URL de presentación" + +msgid "Protocol" +msgstr "Protocolo" + +msgid "Puts extra debugging information into the system log" +msgstr "Escribir información de depuración extra en el registro del sistema" + +msgid "Report system instead of daemon uptime" +msgstr "Informar del tiempo activo del sistema en vez de el del demonio" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Arrancar servicio UPnP y NAT-PMP" + +msgid "There are no active redirects." +msgstr "Sin redirecciones activas." + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP permite que los puestos de la red local configuren automáticamente el " +"router." + +msgid "UPnP lease file" +msgstr "Tiempo de cesión UPnP" + +msgid "Universal Plug & Play" +msgstr "Plug & Play universal" + +msgid "Uplink" +msgstr "Enlace de subida" + +msgid "Value in KByte/s, informational only" +msgstr "Valor en KBytes/s (sólo informativo)" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnP permite que los puestos de la red local configuren automáticamente el " +#~ "router." + +#~ msgid "enable" +#~ msgstr "activar" + +#~ msgid "Log output" +#~ msgstr "Loguear salida" + +#~ msgid "" +#~ "UPNP should only be enabled if absolutely necessary as it can result in " +#~ "high security risks for your network." +#~ msgstr "" +#~ "UPNP sólo deberia habilitarse si es abasolutamente necesario ya que puede " +#~ "comprometer la seguridad de su red." diff --git a/feeds/luci/applications/luci-app-upnp/po/fr/upnp.po b/feeds/luci/applications/luci-app-upnp/po/fr/upnp.po new file mode 100644 index 0000000..4390d0f --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/fr/upnp.po @@ -0,0 +1,158 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-11-06 16:09+0200\n" +"Last-Translator: hogsim \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"Les ACLs définissent quels ports externes peuvent être redirigés, vers " +"quelles adresses et ports internes" + +msgid "Action" +msgstr "Action" + +msgid "Active UPnP Redirects" +msgstr "Redirections UPnP actives" + +msgid "Advanced Settings" +msgstr "Paramètres avancés" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" +"Permet d'ajouter des redirections seulement vers les adresses IP qui font " +"des demandes" + +msgid "Announced model number" +msgstr "Numéro de modèle déclaré" + +msgid "Announced serial number" +msgstr "Numéro de série déclaré" + +msgid "Clean rules interval" +msgstr "Intervalle des règles de nettoyage" + +msgid "Clean rules threshold" +msgstr "Niveau des règles de nettoyage" + +msgid "Client Address" +msgstr "Adresse du client" + +msgid "Client Port" +msgstr "Port du client" + +msgid "Collecting data..." +msgstr "Récupération des données…" + +msgid "Comment" +msgstr "Commentaire" + +msgid "Delete Redirect" +msgstr "Détruire la redirection" + +msgid "Device UUID" +msgstr "UUID du périphérique" + +msgid "Downlink" +msgstr "Lien descendant" + +msgid "Enable NAT-PMP functionality" +msgstr "Activer la fonctionnalité NAT-PMP" + +msgid "Enable UPnP functionality" +msgstr "Activer la fonctionnalité UPnP" + +msgid "Enable additional logging" +msgstr "Activer la journalisation additionnelle" + +msgid "Enable secure mode" +msgstr "Activer le mode sécurisé" + +msgid "External Port" +msgstr "Port externe" + +msgid "External ports" +msgstr "Ports externes" + +msgid "General Settings" +msgstr "Paramètres généraux" + +msgid "Internal addresses" +msgstr "Adresses internes" + +msgid "Internal ports" +msgstr "Ports internes" + +msgid "MiniUPnP ACLs" +msgstr "ACLs MiniUPnP" + +msgid "MiniUPnP settings" +msgstr "Paramètres MiniUPnP" + +msgid "Notify interval" +msgstr "Intervalle de notification" + +msgid "Port" +msgstr "Port" + +msgid "Presentation URL" +msgstr "URL de présentation" + +msgid "Protocol" +msgstr "Protocole" + +msgid "Puts extra debugging information into the system log" +msgstr "Rajoute des informations de debug dans le journal-système" + +msgid "Report system instead of daemon uptime" +msgstr "" +"Indiquer la durée de fonctionnement du système plutôt que celle du démon UPnP" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Démarrer les services UPnP et NAT-PMP" + +msgid "There are no active redirects." +msgstr "Il n'y a pas de redirections actives." + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP permet à des clients du réseau local de configurer automatiquement le " +"routeur." + +msgid "UPnP lease file" +msgstr "Fichier des baux UPnP" + +msgid "Universal Plug & Play" +msgstr "Universal Plug & Play" + +msgid "Uplink" +msgstr "Lien remontant" + +msgid "Value in KByte/s, informational only" +msgstr "Valeur en Ko/s, pour information seulement" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnP permet à des clients du réseau local de configurer automatiquement le " +#~ "routeur." + +#~ msgid "enable" +#~ msgstr "activer" diff --git a/feeds/luci/applications/luci-app-upnp/po/he/upnp.po b/feeds/luci/applications/luci-app-upnp/po/he/upnp.po new file mode 100644 index 0000000..6e4d1f1 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/he/upnp.po @@ -0,0 +1,136 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Active UPnP Redirects" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" + +msgid "Announced model number" +msgstr "" + +msgid "Announced serial number" +msgstr "" + +msgid "Clean rules interval" +msgstr "" + +msgid "Clean rules threshold" +msgstr "" + +msgid "Client Address" +msgstr "" + +msgid "Client Port" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Delete Redirect" +msgstr "" + +msgid "Device UUID" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Enable NAT-PMP functionality" +msgstr "" + +msgid "Enable UPnP functionality" +msgstr "" + +msgid "Enable additional logging" +msgstr "" + +msgid "Enable secure mode" +msgstr "" + +msgid "External Port" +msgstr "" + +msgid "External ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Internal addresses" +msgstr "" + +msgid "Internal ports" +msgstr "" + +msgid "MiniUPnP ACLs" +msgstr "" + +msgid "MiniUPnP settings" +msgstr "" + +msgid "Notify interval" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Presentation URL" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Puts extra debugging information into the system log" +msgstr "" + +msgid "Report system instead of daemon uptime" +msgstr "" + +msgid "Start UPnP and NAT-PMP service" +msgstr "" + +msgid "There are no active redirects." +msgstr "" + +msgid "UPnP" +msgstr "" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" + +msgid "UPnP lease file" +msgstr "" + +msgid "Universal Plug & Play" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Value in KByte/s, informational only" +msgstr "" diff --git a/feeds/luci/applications/luci-app-upnp/po/hu/upnp.po b/feeds/luci/applications/luci-app-upnp/po/hu/upnp.po new file mode 100644 index 0000000..c5a2c26 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/hu/upnp.po @@ -0,0 +1,155 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-31 18:32+0200\n" +"Last-Translator: juhosg \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"Az ACL-ek határozzák meg, hogy melyik külső portok melyik belső portokra és " +"címekre kerülhetnek továbbításra" + +msgid "Action" +msgstr "Művelet" + +msgid "Active UPnP Redirects" +msgstr "Aktív UPnP átirányítások" + +msgid "Advanced Settings" +msgstr "Haladó beállítások" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" +"Kizárólag a kérést küldő IP címre történő továbbítás hozzáadásának " +"engedélyezése" + +msgid "Announced model number" +msgstr "Közzétett modelszám" + +msgid "Announced serial number" +msgstr "Közzétett sorozatszám" + +msgid "Clean rules interval" +msgstr "Szabály törlési időköz" + +msgid "Clean rules threshold" +msgstr "Szabály törlési küszöbérték" + +msgid "Client Address" +msgstr "Ügyfél cím" + +msgid "Client Port" +msgstr "Ügyfél port" + +msgid "Collecting data..." +msgstr "Adatok összegyűjtése..." + +msgid "Comment" +msgstr "Megjegyzés" + +msgid "Delete Redirect" +msgstr "Átirányítás törlése" + +msgid "Device UUID" +msgstr "Eszköz UUID" + +msgid "Downlink" +msgstr "Letöltés" + +msgid "Enable NAT-PMP functionality" +msgstr "NAT-PMP funkció engedélyezése" + +msgid "Enable UPnP functionality" +msgstr "UPnP funkció engedélyezése" + +msgid "Enable additional logging" +msgstr "További naplózás engedélyezése" + +msgid "Enable secure mode" +msgstr "Biztonságos mód engedélyezése" + +msgid "External Port" +msgstr "Külső port" + +msgid "External ports" +msgstr "Külső portok" + +msgid "General Settings" +msgstr "Általános beállítások" + +msgid "Internal addresses" +msgstr "Belső címek" + +msgid "Internal ports" +msgstr "Belső portok" + +msgid "MiniUPnP ACLs" +msgstr "MiniUPnP ACL-ek" + +msgid "MiniUPnP settings" +msgstr "MiniUPnP beállítások" + +msgid "Notify interval" +msgstr "Értesítési időköz" + +msgid "Port" +msgstr "Port" + +msgid "Presentation URL" +msgstr "Bemutatkozó URL" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Puts extra debugging information into the system log" +msgstr "További nyomkövetési információk írása a rendszernaplóba." + +msgid "Report system instead of daemon uptime" +msgstr "A démon helyett a rendszer működési idejét jeleníti meg" + +msgid "Start UPnP and NAT-PMP service" +msgstr "UPnP és NAT-PMP szolgáltatás elindítása" + +msgid "There are no active redirects." +msgstr "Nincsenek aktív átírányítások." + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"Az UPnP lehetővé teszi a hálózatban lévő ügyfelek számára hogy automatikusan " +"beállítsák a routert." + +msgid "UPnP lease file" +msgstr "UPnP bérlet fájl" + +msgid "Universal Plug & Play" +msgstr "Univerzális Plug and Play" + +msgid "Uplink" +msgstr "Feltöltés" + +msgid "Value in KByte/s, informational only" +msgstr "Érték KByte/s-ban, csak tájékoztató jellegű" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "Az UPnP lehetővé teszi a hálózatban lévő ügyfelek számára hogy automatikusan " +#~ "beállítsák a routert." + +#~ msgid "enable" +#~ msgstr "engedélyezés" diff --git a/feeds/luci/applications/luci-app-upnp/po/it/upnp.po b/feeds/luci/applications/luci-app-upnp/po/it/upnp.po new file mode 100644 index 0000000..9ef09ea --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/it/upnp.po @@ -0,0 +1,155 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-02-03 13:52+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"Le ACL specificano quali porte esterne possono essere redirezionate agli " +"indirizzi interni e porte." + +msgid "Action" +msgstr "Azione" + +msgid "Active UPnP Redirects" +msgstr "Attiva reindirizzamento UPnP" + +msgid "Advanced Settings" +msgstr "Opzioni Avanzate" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "Permetti l'aggiunta della mappatura solo agli indirizzi IP richiedenti" + +msgid "Announced model number" +msgstr "Numero di modello annunciato" + +msgid "Announced serial number" +msgstr "Numero seriale annunciato" + +msgid "Clean rules interval" +msgstr "Cancella le regole" + +msgid "Clean rules threshold" +msgstr "Pulisci le regole degli eventi" + +msgid "Client Address" +msgstr "Indirizzo IP" + +msgid "Client Port" +msgstr "Porta" + +msgid "Collecting data..." +msgstr "Raccolgo i dati..." + +msgid "Comment" +msgstr "Descrizione" + +msgid "Delete Redirect" +msgstr "Cancella Mappatura" + +msgid "Device UUID" +msgstr "UUID del dispositivo" + +msgid "Downlink" +msgstr "Downlink" + +msgid "Enable NAT-PMP functionality" +msgstr "Abilita il protocollo NAT-PMP" + +msgid "Enable UPnP functionality" +msgstr "Abilita il protocollo UPnP" + +msgid "Enable additional logging" +msgstr "Abilita log addizionale" + +msgid "Enable secure mode" +msgstr "Abilita la modalità sicura" + +msgid "External Port" +msgstr "Porta Esterna" + +msgid "External ports" +msgstr "Porte Esterne" + +msgid "General Settings" +msgstr "Opzioni Generali" + +msgid "Internal addresses" +msgstr "Indirizzi Interni" + +msgid "Internal ports" +msgstr "Porte Interne" + +msgid "MiniUPnP ACLs" +msgstr "MiniUPnP ACLs" + +msgid "MiniUPnP settings" +msgstr "Opzioni di MiniUPnP" + +msgid "Notify interval" +msgstr "Intervello di notifica" + +msgid "Port" +msgstr "Porta" + +msgid "Presentation URL" +msgstr "URL di presentazione" + +msgid "Protocol" +msgstr "Protocollo" + +msgid "Puts extra debugging information into the system log" +msgstr "Scrivi nel log di sistema le informazioni di extra debugging" + +msgid "Report system instead of daemon uptime" +msgstr "Mostra l'uptime del sistema invece del demone" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Avvia il servizo UPnP e NAT-PMP" + +msgid "There are no active redirects." +msgstr "Non ci sono mappature attive." + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP permette ai dispositivi nella rete locale di configurare " +"automaticamente il router." + +msgid "UPnP lease file" +msgstr "UPnP lease file" + +msgid "Universal Plug & Play" +msgstr "Universal Plug & Play" + +msgid "Uplink" +msgstr "Uplink" + +msgid "Value in KByte/s, informational only" +msgstr "Valori in KByte/s, (informativo)" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnP permette ai dispositivi nella rete locale di configurare " +#~ "automaticamente il router." + +#~ msgid "enable" +#~ msgstr "abilita" diff --git a/feeds/luci/applications/luci-app-upnp/po/ja/upnp.po b/feeds/luci/applications/luci-app-upnp/po/ja/upnp.po new file mode 100644 index 0000000..f0aff73 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/ja/upnp.po @@ -0,0 +1,162 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2016-12-24 19:55+0900\n" +"Last-Translator: INAGAKI Hiroshi \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"アクセス制御リスト(ACL) は、どの外部ポートからどの内部アドレス及びポートへリ" +"ダイレクトするかを設定します。" + +msgid "Action" +msgstr "動作" + +msgid "Active UPnP Redirects" +msgstr "稼働中のUPnPリダイレクト" + +msgid "Advanced Settings" +msgstr "詳細設定" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "要求元IPアドレスへの転送のみ、追加を許可します。" + +msgid "Announced model number" +msgstr "通知するモデル番号" + +msgid "Announced serial number" +msgstr "通知するシリアル番号" + +msgid "Clean rules interval" +msgstr "ルール消去間隔" + +msgid "Clean rules threshold" +msgstr "ルール消去しきい値" + +msgid "Client Address" +msgstr "クライアント・アドレス" + +msgid "Client Port" +msgstr "クライアント・ポート" + +msgid "Collecting data..." +msgstr "データ収集中です..." + +msgid "Comment" +msgstr "コメント" + +msgid "Delete Redirect" +msgstr "リダイレクトを削除" + +msgid "Device UUID" +msgstr "デバイス UUID" + +msgid "Downlink" +msgstr "ダウンリンク" + +msgid "Enable NAT-PMP functionality" +msgstr "NAT-PMP機能を有効にする" + +msgid "Enable UPnP functionality" +msgstr "UPnP機能を有効にする" + +msgid "Enable additional logging" +msgstr "ログ機能を有効にする" + +msgid "Enable secure mode" +msgstr "セキュアモードを有効にする" + +msgid "External Port" +msgstr "外部ポート" + +msgid "External ports" +msgstr "外部ポート" + +msgid "General Settings" +msgstr "一般設定" + +msgid "Internal addresses" +msgstr "内部アドレス" + +msgid "Internal ports" +msgstr "内部ポート" + +msgid "MiniUPnP ACLs" +msgstr "MiniUPnP アクセス制御リスト (ACL)" + +msgid "MiniUPnP settings" +msgstr "MiniUPnP 設定" + +msgid "Notify interval" +msgstr "通知間隔" + +msgid "Port" +msgstr "ポート" + +msgid "Presentation URL" +msgstr "プレゼンテーション URL" + +msgid "Protocol" +msgstr "プロトコル" + +msgid "Puts extra debugging information into the system log" +msgstr "追加のデバッグ情報をシステムログへ挿入する" + +msgid "Report system instead of daemon uptime" +msgstr "サービスの起動時間の代わりにシステムの起動時間を使用する" + +msgid "Start UPnP and NAT-PMP service" +msgstr "UPnP及びNAT-PMPサービスを開始する" + +msgid "There are no active redirects." +msgstr "有効なリダイレクトはありません。" + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnPを使用することで、ローカルネットワーク内のクライアントが自動的にルータを" +"構成することができます。" + +msgid "UPnP lease file" +msgstr "UPnP リースファイル" + +msgid "Universal Plug & Play" +msgstr "ユニバーサル プラグ & プレイ" + +msgid "Uplink" +msgstr "アップリンク" + +msgid "Value in KByte/s, informational only" +msgstr "クライアントへの情報提供のみに使用される、KByte/sの値です。" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnPを使用することで、ローカルネットワーク内のクライアントが自動的にルータ" +#~ "を構成することができます。" + +#~ msgid "enable" +#~ msgstr "有効" + +#~ msgid "" +#~ "UPNP should only be enabled if absolutely necessary as it can result in " +#~ "high security risks for your network." +#~ msgstr "" +#~ "UPnPはあなたの使用するネットワークに対して、セキュリティリスクが生じる可能" +#~ "性があるため、必要な場合のみ有効にしてください。" diff --git a/feeds/luci/applications/luci-app-upnp/po/ms/upnp.po b/feeds/luci/applications/luci-app-upnp/po/ms/upnp.po new file mode 100644 index 0000000..b4dce32 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/ms/upnp.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Active UPnP Redirects" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" + +msgid "Announced model number" +msgstr "" + +msgid "Announced serial number" +msgstr "" + +msgid "Clean rules interval" +msgstr "" + +msgid "Clean rules threshold" +msgstr "" + +msgid "Client Address" +msgstr "" + +msgid "Client Port" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Delete Redirect" +msgstr "" + +msgid "Device UUID" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Enable NAT-PMP functionality" +msgstr "" + +msgid "Enable UPnP functionality" +msgstr "" + +msgid "Enable additional logging" +msgstr "" + +msgid "Enable secure mode" +msgstr "" + +msgid "External Port" +msgstr "" + +msgid "External ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Internal addresses" +msgstr "" + +msgid "Internal ports" +msgstr "" + +msgid "MiniUPnP ACLs" +msgstr "" + +msgid "MiniUPnP settings" +msgstr "" + +msgid "Notify interval" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Presentation URL" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Puts extra debugging information into the system log" +msgstr "" + +msgid "Report system instead of daemon uptime" +msgstr "" + +msgid "Start UPnP and NAT-PMP service" +msgstr "" + +msgid "There are no active redirects." +msgstr "" + +msgid "UPnP" +msgstr "" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" + +msgid "UPnP lease file" +msgstr "" + +msgid "Universal Plug & Play" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Value in KByte/s, informational only" +msgstr "" diff --git a/feeds/luci/applications/luci-app-upnp/po/no/upnp.po b/feeds/luci/applications/luci-app-upnp/po/no/upnp.po new file mode 100644 index 0000000..d528aa5 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/no/upnp.po @@ -0,0 +1,146 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"ACL angir hvilke eksterne porter som kan bli viderekoblet, og til hvilke " +"interne adresser og porter." + +msgid "Action" +msgstr "Handling" + +msgid "Active UPnP Redirects" +msgstr "Aktive UPnP Viderekoblinger" + +msgid "Advanced Settings" +msgstr "Avanserte Innstillinger" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "Tillat videkobling kun til IP adresser som ber om det" + +msgid "Announced model number" +msgstr "Annonsert modellnummer" + +msgid "Announced serial number" +msgstr "Annonsert serienummer" + +msgid "Clean rules interval" +msgstr "Nullstill UPnP Viderekoblinger intervall" + +msgid "Clean rules threshold" +msgstr "Nullstill UPnP terskel" + +msgid "Client Address" +msgstr "Klient adresse" + +msgid "Client Port" +msgstr "Klient port" + +msgid "Collecting data..." +msgstr "Henter data..." + +msgid "Comment" +msgstr "Kommentar" + +msgid "Delete Redirect" +msgstr "Fjern Viderekobling" + +msgid "Device UUID" +msgstr "Enhet UUID" + +msgid "Downlink" +msgstr "Nedlinje" + +msgid "Enable NAT-PMP functionality" +msgstr "Aktiver NAT-PMP funksjonalitet" + +msgid "Enable UPnP functionality" +msgstr "Aktiver UPnP funksjonalitet" + +msgid "Enable additional logging" +msgstr "Aktiver tilleggs logging" + +msgid "Enable secure mode" +msgstr "Aktiver sikker modus" + +msgid "External Port" +msgstr "Ekstern port" + +msgid "External ports" +msgstr "Eksterne porter" + +msgid "General Settings" +msgstr "Generelle Innstillinger" + +msgid "Internal addresses" +msgstr "Interne adresser" + +msgid "Internal ports" +msgstr "Interne porter" + +msgid "MiniUPnP ACLs" +msgstr "MiniUPnP ACL'er" + +msgid "MiniUPnP settings" +msgstr "MiniUPnP Innstillinger" + +msgid "Notify interval" +msgstr "Informasjons intervall" + +msgid "Port" +msgstr "Port" + +msgid "Presentation URL" +msgstr "Presentasjon URL" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Puts extra debugging information into the system log" +msgstr "Setter ekstra debugging informasjon i systemloggen" + +msgid "Report system instead of daemon uptime" +msgstr "Rapporter systemets oppetid istedenfor daemon oppetid" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Start UPnP og NAT-PMP tjenesten" + +msgid "There are no active redirects." +msgstr "Det finnes ingen aktive viderekoblinger" + +msgid "UPnP" +msgstr "" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP gjør at klientene i det lokale nettverket automatisk kan konfigurere " +"ruteren." + +msgid "UPnP lease file" +msgstr "UPnP leie fil" + +msgid "Universal Plug & Play" +msgstr "Universal Plug & Play" + +msgid "Uplink" +msgstr "Opplinje" + +msgid "Value in KByte/s, informational only" +msgstr "Verdi i KByte/sek, kun for informasjon" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnP gjør at klientene i det lokale nettverket automatisk kan konfigurere " +#~ "ruteren." + +#~ msgid "enable" +#~ msgstr "Aktiver" diff --git a/feeds/luci/applications/luci-app-upnp/po/pl/upnp.po b/feeds/luci/applications/luci-app-upnp/po/pl/upnp.po new file mode 100644 index 0000000..ab78180 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/pl/upnp.po @@ -0,0 +1,153 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-02 19:28+0200\n" +"Last-Translator: obsy \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"Listy kontroli dostępu (ang. ACL) określają jakie porty mogą być " +"przekierowane do jakich wewnętrznych adresów i portów" + +msgid "Action" +msgstr "Akcja" + +msgid "Active UPnP Redirects" +msgstr "Aktywne przekierowania UPnP" + +msgid "Advanced Settings" +msgstr "Ustawienia zaawansowane" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "Zezwól na dodawanie przekierowań tylko do odpytujących adresów IP" + +msgid "Announced model number" +msgstr "Rozgłaszany nr modelu" + +msgid "Announced serial number" +msgstr "rozgłaszany nr seryjny" + +msgid "Clean rules interval" +msgstr "Interwał czyszczenia reguł" + +msgid "Clean rules threshold" +msgstr "Próg czyszczenia reguł" + +msgid "Client Address" +msgstr "Adres klienta" + +msgid "Client Port" +msgstr "Port klienta" + +msgid "Collecting data..." +msgstr "Zbieranie danych..." + +msgid "Comment" +msgstr "Komentarz" + +msgid "Delete Redirect" +msgstr "Usuń przekierowanie" + +msgid "Device UUID" +msgstr "UUID urządzenia" + +msgid "Downlink" +msgstr "Downlink" + +msgid "Enable NAT-PMP functionality" +msgstr "Włącz funkcjonalność NAT-PMP" + +msgid "Enable UPnP functionality" +msgstr "Włącz funkcjonalność UPnP" + +msgid "Enable additional logging" +msgstr "Włącz rozszerzone raportowanie" + +msgid "Enable secure mode" +msgstr "Włącz tryb bezpieczny" + +msgid "External Port" +msgstr "Port zewnętrzny" + +msgid "External ports" +msgstr "Porty zewnętrzne" + +msgid "General Settings" +msgstr "Ustawienia główne" + +msgid "Internal addresses" +msgstr "Adresy wewnętrzne" + +msgid "Internal ports" +msgstr "Porty wewnętrzne" + +msgid "MiniUPnP ACLs" +msgstr "Listy kontroli dostępu MiniUPnP" + +msgid "MiniUPnP settings" +msgstr "Ustawienia MiniUPnP" + +msgid "Notify interval" +msgstr "Interwał powiadamiania" + +msgid "Port" +msgstr "Port" + +msgid "Presentation URL" +msgstr "Przedstawiany URL" + +msgid "Protocol" +msgstr "Protokół" + +msgid "Puts extra debugging information into the system log" +msgstr "Dodaje dodatkowe informacje debugowania do loga systemowego" + +msgid "Report system instead of daemon uptime" +msgstr "Zgłaszaj czas pracy systemu zamiast czas pracy usługi" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Uruchom usługi UPnP i NAT-PMP" + +msgid "There are no active redirects." +msgstr "Nie ma aktywnych przekierowań" + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP umożliwia klientom w sieci lokalnej automatyczne konfigurowanie routera." + +msgid "UPnP lease file" +msgstr "Plik dzierżawy UPnP" + +msgid "Universal Plug & Play" +msgstr "Universal Plug & Play" + +msgid "Uplink" +msgstr "Uplink" + +msgid "Value in KByte/s, informational only" +msgstr "Wartość w KBajt/s, tylko informacyjnie" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnP umożliwia klientom w sieci lokalnej automatyczne konfigurowanie " +#~ "routera." + +#~ msgid "enable" +#~ msgstr "enable" diff --git a/feeds/luci/applications/luci-app-upnp/po/pt-br/upnp.po b/feeds/luci/applications/luci-app-upnp/po/pt-br/upnp.po new file mode 100644 index 0000000..c16aa11 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/pt-br/upnp.po @@ -0,0 +1,166 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2011-10-18 22:17+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"ACLs especificam quais portas externas podem ser redirecionadas para quais " +"endereços e portas internos" + +msgid "Action" +msgstr "Ação" + +msgid "Active UPnP Redirects" +msgstr "Redirecionamentos UPnP Ativos" + +msgid "Advanced Settings" +msgstr "Configurações Avançadas" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" +"Permite adicionar encaminhamento apenas para o endereço IP requisitante" + +msgid "Announced model number" +msgstr "Número do modelo anunciado" + +msgid "Announced serial number" +msgstr "Número serial anunciado" + +msgid "Clean rules interval" +msgstr "Intervalo de limpeza das regras" + +msgid "Clean rules threshold" +msgstr "Limiar de limpeza das regras" + +msgid "Client Address" +msgstr "Endereço do cliente" + +msgid "Client Port" +msgstr "Porta do Cliente" + +msgid "Collecting data..." +msgstr "Coletando dados..." + +msgid "Comment" +msgstr "Comentário" + +msgid "Delete Redirect" +msgstr "Apague o Redirecionamento" + +msgid "Device UUID" +msgstr "UUID do Dispositivo" + +msgid "Downlink" +msgstr "Velocidade de recebimento do enlace (downlink)" + +msgid "Enable NAT-PMP functionality" +msgstr "Habilite a função NAT-PMP" + +msgid "Enable UPnP functionality" +msgstr "Habilite a função UPnP" + +msgid "Enable additional logging" +msgstr "Habilite registros adicionais" + +msgid "Enable secure mode" +msgstr "Habilite modo seguro" + +msgid "External Port" +msgstr "Porta Externa" + +msgid "External ports" +msgstr "Portas Externas" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "Internal addresses" +msgstr "Endereços internos" + +msgid "Internal ports" +msgstr "Portas internas" + +msgid "MiniUPnP ACLs" +msgstr "ACLs do MiniUPnP" + +msgid "MiniUPnP settings" +msgstr "Configurações do MiniUPnP" + +msgid "Notify interval" +msgstr "Intervalo de notificação" + +msgid "Port" +msgstr "Porta" + +msgid "Presentation URL" +msgstr "URL de apresentação" + +msgid "Protocol" +msgstr "Protocolo" + +msgid "Puts extra debugging information into the system log" +msgstr "Envie informações extra de depuração ao registro do sistema" + +msgid "Report system instead of daemon uptime" +msgstr "Informe o tempo de vida do sistema ao invés do tempo do processo" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Dispare os serviços de UPnP e NAT-PMP" + +msgid "There are no active redirects." +msgstr "Não existe redirecionamentos ativos." + +msgid "UPnP" +msgstr "" +"UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP permite os clientes da rede local configurem automaticamente o roteador." + +msgid "UPnP lease file" +msgstr "Arquivo de concessão do UPnP" + +msgid "Universal Plug & Play" +msgstr "Plug & Play Universal" + +msgid "Uplink" +msgstr "Velocidade de envio do enlace (uplink)" + +msgid "Value in KByte/s, informational only" +msgstr "Valores em KByte/s, apenas informativas" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnP permite os clientes da rede local configurem automaticamente o " +#~ "roteador." + +#~ msgid "enable" +#~ msgstr "habilitar" + +#~ msgid "Log output" +#~ msgstr "Log de saída" + +#~ msgid "" +#~ "UPNP should only be enabled if absolutely necessary as it can result in " +#~ "high security risks for your network." +#~ msgstr "" +#~ "O UPNP deve ser ativado apenas se for absolutamente necessário, pois ele " +#~ "pode resultar em elevados riscos de segurança para sua rede." diff --git a/feeds/luci/applications/luci-app-upnp/po/pt/upnp.po b/feeds/luci/applications/luci-app-upnp/po/pt/upnp.po new file mode 100644 index 0000000..1d001b6 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/pt/upnp.po @@ -0,0 +1,157 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Active UPnP Redirects" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" + +msgid "Announced model number" +msgstr "" + +msgid "Announced serial number" +msgstr "" + +msgid "Clean rules interval" +msgstr "" + +msgid "Clean rules threshold" +msgstr "" + +msgid "Client Address" +msgstr "" + +msgid "Client Port" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Delete Redirect" +msgstr "" + +msgid "Device UUID" +msgstr "" + +msgid "Downlink" +msgstr "Link para download" + +msgid "Enable NAT-PMP functionality" +msgstr "" + +msgid "Enable UPnP functionality" +msgstr "" + +msgid "Enable additional logging" +msgstr "" + +msgid "Enable secure mode" +msgstr "Enable secure mode" + +msgid "External Port" +msgstr "" + +msgid "External ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Internal addresses" +msgstr "" + +msgid "Internal ports" +msgstr "" + +msgid "MiniUPnP ACLs" +msgstr "" + +msgid "MiniUPnP settings" +msgstr "" + +msgid "Notify interval" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Presentation URL" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Puts extra debugging information into the system log" +msgstr "" + +msgid "Report system instead of daemon uptime" +msgstr "" + +msgid "Start UPnP and NAT-PMP service" +msgstr "" + +msgid "There are no active redirects." +msgstr "" + +msgid "UPnP" +msgstr "" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" + +msgid "UPnP lease file" +msgstr "" + +msgid "Universal Plug & Play" +msgstr "Plug & Play Universal" + +msgid "Uplink" +msgstr "Link para Upload" + +msgid "Value in KByte/s, informational only" +msgstr "" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPNP permite os clientes da rede local automaticamente configurar o " +#~ "roteador." + +#~ msgid "Log output" +#~ msgstr "Log de saída" + +#~ msgid "" +#~ "UPNP should only be enabled if absolutely necessary as it can result in " +#~ "high security risks for your network." +#~ msgstr "" +#~ "O UPNP deve ser ativado apenas se for absolutamente necessário, pois ele " +#~ "pode resultar em elevados riscos de segurança para sua rede." diff --git a/feeds/luci/applications/luci-app-upnp/po/ro/upnp.po b/feeds/luci/applications/luci-app-upnp/po/ro/upnp.po new file mode 100644 index 0000000..f9c9500 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/ro/upnp.po @@ -0,0 +1,152 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-09-25 19:15+0200\n" +"Last-Translator: Mihai \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"ACL-urile specifica porturile externe care pot fi redirectate si spre ce " +"adrese si porturi interne" + +msgid "Action" +msgstr "Actiune" + +msgid "Active UPnP Redirects" +msgstr "Redirecturi active UPnP" + +msgid "Advanced Settings" +msgstr "Setari avansate" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "Permite adaugarea forward-urilor doar catre adresele ip solicitante" + +msgid "Announced model number" +msgstr "Numar de model anuntat" + +msgid "Announced serial number" +msgstr "Numar serial anuntat" + +msgid "Clean rules interval" +msgstr "Intervalul de curatare reguli" + +msgid "Clean rules threshold" +msgstr "Limita de curatare reguli" + +msgid "Client Address" +msgstr "Adresa client" + +msgid "Client Port" +msgstr "Port client" + +msgid "Collecting data..." +msgstr "Colecteaza date.." + +msgid "Comment" +msgstr "Comentariu" + +msgid "Delete Redirect" +msgstr "Sterge redirect" + +msgid "Device UUID" +msgstr "UUID al dispozitivului" + +msgid "Downlink" +msgstr "Downlink" + +msgid "Enable NAT-PMP functionality" +msgstr "Activeaza functionalitatea NAT-PMP" + +msgid "Enable UPnP functionality" +msgstr "Activeaza functionalitatea UPnP" + +msgid "Enable additional logging" +msgstr "Activeaza log-area aditionala" + +msgid "Enable secure mode" +msgstr "Activeaza modul securizat" + +msgid "External Port" +msgstr "Port extern" + +msgid "External ports" +msgstr "Porturi externe" + +msgid "General Settings" +msgstr "Setari generale" + +msgid "Internal addresses" +msgstr "Adrese interne" + +msgid "Internal ports" +msgstr "Porturi interne" + +msgid "MiniUPnP ACLs" +msgstr "Liste de acces mini UPnP" + +msgid "MiniUPnP settings" +msgstr "Setari mini UPnP" + +msgid "Notify interval" +msgstr "Interval de notificare" + +msgid "Port" +msgstr "Port" + +msgid "Presentation URL" +msgstr "Adresa de prezentare" + +msgid "Protocol" +msgstr "Protocol" + +msgid "Puts extra debugging information into the system log" +msgstr "Pune informatii utile suplimentare in log-ul de sistem" + +msgid "Report system instead of daemon uptime" +msgstr "Raporteaza timpul de functionare de sistem in loc de serviciu" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Porneste UPnP si serviciul NAT-PMP" + +msgid "There are no active redirects." +msgstr "Nu exista redirecturi active." + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPNP permite clientulor din reteaua locala sa configureze automat routerul." + +msgid "UPnP lease file" +msgstr "Fisierul de conexiuni UPnP" + +msgid "Universal Plug & Play" +msgstr "Universal Plug & Play" + +msgid "Uplink" +msgstr "Uplink" + +msgid "Value in KByte/s, informational only" +msgstr "Valorea in KOcteti/s , doar informational" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPNP permite clientulor din reteaua locala sa configureze automat routerul." + +#~ msgid "enable" +#~ msgstr "activeaza" diff --git a/feeds/luci/applications/luci-app-upnp/po/ru/upnp.po b/feeds/luci/applications/luci-app-upnp/po/ru/upnp.po new file mode 100644 index 0000000..30b94ce --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/ru/upnp.po @@ -0,0 +1,158 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: upnp\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-08-15 15:20+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"Список доступа определяет, какие внешние порты могут быть перенаправлены на " +"внутренние адреса и порты" + +msgid "Action" +msgstr "Действие" + +msgid "Active UPnP Redirects" +msgstr "Активные UPnP-переадресации" + +msgid "Advanced Settings" +msgstr "Расширенные настройки" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "Разрешить перенаправление только для запрашивающих IP-адресов" + +msgid "Announced model number" +msgstr "Номер модели" + +msgid "Announced serial number" +msgstr "Серийный номер" + +msgid "Clean rules interval" +msgstr "Интервал очистки правил" + +msgid "Clean rules threshold" +msgstr "Порог очистки правил" + +msgid "Client Address" +msgstr "Адрес клиента" + +msgid "Client Port" +msgstr "Порт клиента" + +msgid "Collecting data..." +msgstr "Сбор данных..." + +msgid "Comment" +msgstr "Комментарий" + +msgid "Delete Redirect" +msgstr "Удалить переадресацию" + +msgid "Device UUID" +msgstr "UUID устройства" + +msgid "Downlink" +msgstr "Нисходящий канал" + +msgid "Enable NAT-PMP functionality" +msgstr "Включить NAT-PMP" + +msgid "Enable UPnP functionality" +msgstr "Включить UPnP" + +msgid "Enable additional logging" +msgstr "Включить дополнительное журналирование" + +msgid "Enable secure mode" +msgstr "Использовать защищённый режим" + +msgid "External Port" +msgstr "Внешний порт" + +msgid "External ports" +msgstr "Внешние порты" + +msgid "General Settings" +msgstr "Общие настройки" + +msgid "Internal addresses" +msgstr "Внутренние адреса" + +msgid "Internal ports" +msgstr "Внутренние порты" + +msgid "MiniUPnP ACLs" +msgstr "Список доступа MiniUPnP" + +msgid "MiniUPnP settings" +msgstr "Настройки MiniUPnP" + +msgid "Notify interval" +msgstr "Интервал уведомления" + +msgid "Port" +msgstr "Порт" + +msgid "Presentation URL" +msgstr "URL представления" + +msgid "Protocol" +msgstr "Протокол" + +msgid "Puts extra debugging information into the system log" +msgstr "Добавлять дополнительную отладочную информацию в системный журнал" + +msgid "Report system instead of daemon uptime" +msgstr "Сообщать время работы системы вместо сервиса" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Запустить службы UPnP и NAT-PMP" + +msgid "There are no active redirects." +msgstr "Активные переадресации отсутствуют." + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP позволяет клиентам в локальной сети автоматически настраивать " +"маршрутизатор." + +msgid "UPnP lease file" +msgstr "Файл аренды UPnP" + +msgid "Universal Plug & Play" +msgstr "Universal Plug & Play" + +msgid "Uplink" +msgstr "Восходящий канал" + +msgid "Value in KByte/s, informational only" +msgstr "Значение в КБ/с, только для информации" + +# Used in upnpmini.lua, which is marked broken, thus can be removed +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnP позволяет клиентам в локальной сети автоматически настраивать " +#~ "маршрутизатор." + +#~ msgid "enable" +#~ msgstr "включить" diff --git a/feeds/luci/applications/luci-app-upnp/po/sk/upnp.po b/feeds/luci/applications/luci-app-upnp/po/sk/upnp.po new file mode 100644 index 0000000..c725333 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/sk/upnp.po @@ -0,0 +1,136 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Active UPnP Redirects" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" + +msgid "Announced model number" +msgstr "" + +msgid "Announced serial number" +msgstr "" + +msgid "Clean rules interval" +msgstr "" + +msgid "Clean rules threshold" +msgstr "" + +msgid "Client Address" +msgstr "" + +msgid "Client Port" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Delete Redirect" +msgstr "" + +msgid "Device UUID" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Enable NAT-PMP functionality" +msgstr "" + +msgid "Enable UPnP functionality" +msgstr "" + +msgid "Enable additional logging" +msgstr "" + +msgid "Enable secure mode" +msgstr "" + +msgid "External Port" +msgstr "" + +msgid "External ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Internal addresses" +msgstr "" + +msgid "Internal ports" +msgstr "" + +msgid "MiniUPnP ACLs" +msgstr "" + +msgid "MiniUPnP settings" +msgstr "" + +msgid "Notify interval" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Presentation URL" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Puts extra debugging information into the system log" +msgstr "" + +msgid "Report system instead of daemon uptime" +msgstr "" + +msgid "Start UPnP and NAT-PMP service" +msgstr "" + +msgid "There are no active redirects." +msgstr "" + +msgid "UPnP" +msgstr "" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" + +msgid "UPnP lease file" +msgstr "" + +msgid "Universal Plug & Play" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Value in KByte/s, informational only" +msgstr "" diff --git a/feeds/luci/applications/luci-app-upnp/po/sv/upnp.po b/feeds/luci/applications/luci-app-upnp/po/sv/upnp.po new file mode 100644 index 0000000..29e987e --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/sv/upnp.po @@ -0,0 +1,141 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"ACL:er anger vilka externa portar som ska omdirigeras till vilka interna " +"adresser och portar" + +msgid "Action" +msgstr "Handling" + +msgid "Active UPnP Redirects" +msgstr "Aktivera UPnP-omdirigeringar" + +msgid "Advanced Settings" +msgstr "Avancerade inställningar" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" + +msgid "Announced model number" +msgstr "Aviserat modellnummer" + +msgid "Announced serial number" +msgstr "Aviserat serienummer" + +msgid "Clean rules interval" +msgstr "" + +msgid "Clean rules threshold" +msgstr "" + +msgid "Client Address" +msgstr "Klient-adress" + +msgid "Client Port" +msgstr "Klient-port" + +msgid "Collecting data..." +msgstr "Samlar in data..." + +msgid "Comment" +msgstr "Kommentar" + +msgid "Delete Redirect" +msgstr "Ta bort omdirigering" + +msgid "Device UUID" +msgstr "Enhetens UUID" + +msgid "Downlink" +msgstr "Nerlänk" + +msgid "Enable NAT-PMP functionality" +msgstr "Aktivera NAT-PMP-funktionalitet" + +msgid "Enable UPnP functionality" +msgstr "Aktivera UPnP-funktionalitet" + +msgid "Enable additional logging" +msgstr "Aktivera ytterligare loggning" + +msgid "Enable secure mode" +msgstr "Aktivera säkert läge" + +msgid "External Port" +msgstr "Extern port" + +msgid "External ports" +msgstr "Externa portar" + +msgid "General Settings" +msgstr "Generella inställningar" + +msgid "Internal addresses" +msgstr "Interna adresser" + +msgid "Internal ports" +msgstr "Interna portar" + +msgid "MiniUPnP ACLs" +msgstr "ACL:er för MiniUPnP" + +msgid "MiniUPnP settings" +msgstr "Inställningar för MiniUPnP" + +msgid "Notify interval" +msgstr "Intervall för avisering" + +msgid "Port" +msgstr "Port" + +msgid "Presentation URL" +msgstr "Presentationens URL" + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Puts extra debugging information into the system log" +msgstr "Lägger extra felsökningsinformation till system-loggen" + +msgid "Report system instead of daemon uptime" +msgstr "Rapportera systemet iställer för demonens upptid" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Starta UPnP och NAT-PMP-tjänsten" + +msgid "There are no active redirects." +msgstr "Det finns inga aktiva omdirigeringar" + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP tillåter klienter i det lokala nätverket att automatiskt ställa in " +"routern." + +msgid "UPnP lease file" +msgstr "Hyr-fil för UPnP" + +msgid "Universal Plug & Play" +msgstr "Universiell Plug & Play" + +msgid "Uplink" +msgstr "Upplänk" + +msgid "Value in KByte/s, informational only" +msgstr "Värde i KByte/s, endast informell" diff --git a/feeds/luci/applications/luci-app-upnp/po/templates/upnp.pot b/feeds/luci/applications/luci-app-upnp/po/templates/upnp.pot new file mode 100644 index 0000000..ae390c4 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/templates/upnp.pot @@ -0,0 +1,129 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Active UPnP Redirects" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" + +msgid "Announced model number" +msgstr "" + +msgid "Announced serial number" +msgstr "" + +msgid "Clean rules interval" +msgstr "" + +msgid "Clean rules threshold" +msgstr "" + +msgid "Client Address" +msgstr "" + +msgid "Client Port" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Delete Redirect" +msgstr "" + +msgid "Device UUID" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Enable NAT-PMP functionality" +msgstr "" + +msgid "Enable UPnP functionality" +msgstr "" + +msgid "Enable additional logging" +msgstr "" + +msgid "Enable secure mode" +msgstr "" + +msgid "External Port" +msgstr "" + +msgid "External ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Internal addresses" +msgstr "" + +msgid "Internal ports" +msgstr "" + +msgid "MiniUPnP ACLs" +msgstr "" + +msgid "MiniUPnP settings" +msgstr "" + +msgid "Notify interval" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Presentation URL" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Puts extra debugging information into the system log" +msgstr "" + +msgid "Report system instead of daemon uptime" +msgstr "" + +msgid "Start UPnP and NAT-PMP service" +msgstr "" + +msgid "There are no active redirects." +msgstr "" + +msgid "UPnP" +msgstr "" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" + +msgid "UPnP lease file" +msgstr "" + +msgid "Universal Plug & Play" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Value in KByte/s, informational only" +msgstr "" diff --git a/feeds/luci/applications/luci-app-upnp/po/tr/upnp.po b/feeds/luci/applications/luci-app-upnp/po/tr/upnp.po new file mode 100644 index 0000000..cff3be2 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/tr/upnp.po @@ -0,0 +1,136 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Active UPnP Redirects" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" + +msgid "Announced model number" +msgstr "" + +msgid "Announced serial number" +msgstr "" + +msgid "Clean rules interval" +msgstr "" + +msgid "Clean rules threshold" +msgstr "" + +msgid "Client Address" +msgstr "" + +msgid "Client Port" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Delete Redirect" +msgstr "" + +msgid "Device UUID" +msgstr "" + +msgid "Downlink" +msgstr "" + +msgid "Enable NAT-PMP functionality" +msgstr "" + +msgid "Enable UPnP functionality" +msgstr "" + +msgid "Enable additional logging" +msgstr "" + +msgid "Enable secure mode" +msgstr "" + +msgid "External Port" +msgstr "" + +msgid "External ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Internal addresses" +msgstr "" + +msgid "Internal ports" +msgstr "" + +msgid "MiniUPnP ACLs" +msgstr "" + +msgid "MiniUPnP settings" +msgstr "" + +msgid "Notify interval" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Presentation URL" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Puts extra debugging information into the system log" +msgstr "" + +msgid "Report system instead of daemon uptime" +msgstr "" + +msgid "Start UPnP and NAT-PMP service" +msgstr "" + +msgid "There are no active redirects." +msgstr "" + +msgid "UPnP" +msgstr "" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" + +msgid "UPnP lease file" +msgstr "" + +msgid "Universal Plug & Play" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Value in KByte/s, informational only" +msgstr "" diff --git a/feeds/luci/applications/luci-app-upnp/po/uk/upnp.po b/feeds/luci/applications/luci-app-upnp/po/uk/upnp.po new file mode 100644 index 0000000..93afd22 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/uk/upnp.po @@ -0,0 +1,155 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-05-26 19:26+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" +"Список кнтролю доступу визначає, які зовнішні порти можуть бути " +"переспрямовані на які внутрішні адреси й порти" + +msgid "Action" +msgstr "Дія" + +msgid "Active UPnP Redirects" +msgstr "Активні переспрямування UPnP" + +msgid "Advanced Settings" +msgstr "Додаткові параметри" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" +"Дозволити додавання переспрямування тільки для IP-адрес, що надсилають запити" + +msgid "Announced model number" +msgstr "Оголошуваний номер моделі" + +msgid "Announced serial number" +msgstr "Оголошуваний серійний номер" + +msgid "Clean rules interval" +msgstr "Інтервал очищення правил" + +msgid "Clean rules threshold" +msgstr "Поріг очищення правил" + +msgid "Client Address" +msgstr "Адреса клієнта" + +msgid "Client Port" +msgstr "Порт клієнта" + +msgid "Collecting data..." +msgstr "Збирання даних..." + +msgid "Comment" +msgstr "Коментар" + +msgid "Delete Redirect" +msgstr "Видалити переспрямування" + +msgid "Device UUID" +msgstr "UUID пристрою" + +msgid "Downlink" +msgstr "Низхідний канал" + +msgid "Enable NAT-PMP functionality" +msgstr "Увімкнути функцію NAT-PMP" + +msgid "Enable UPnP functionality" +msgstr "Увімкнути функцію UPnP" + +msgid "Enable additional logging" +msgstr "Увімкнути додаткове журналювання" + +msgid "Enable secure mode" +msgstr "Увімкнути захищений режим" + +msgid "External Port" +msgstr "Зовнішній порт" + +msgid "External ports" +msgstr "Зовнішні порти" + +msgid "General Settings" +msgstr "Загальні настройки" + +msgid "Internal addresses" +msgstr "Внутрішні адреси" + +msgid "Internal ports" +msgstr "Внутрішні порти" + +msgid "MiniUPnP ACLs" +msgstr "Список контролю доступу MiniUPnP" + +msgid "MiniUPnP settings" +msgstr "Настройки MiniUPnP" + +msgid "Notify interval" +msgstr "Інтервал сповіщення" + +msgid "Port" +msgstr "Порт" + +msgid "Presentation URL" +msgstr "URL представляння" + +msgid "Protocol" +msgstr "Протокол" + +msgid "Puts extra debugging information into the system log" +msgstr "Включати додаткові відомості для налагодження до системного журналу" + +msgid "Report system instead of daemon uptime" +msgstr "Повідомляти час безвідмовної роботи системи, а не сервісу" + +msgid "Start UPnP and NAT-PMP service" +msgstr "Запускати служби UPnP та NAT-PMP" + +msgid "There are no active redirects." +msgstr "Немає активних переспрямувань" + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" +"UPnP надає клієнтам у локальній мережі змогу автоматично настроювати " +"маршрутизатор." + +msgid "UPnP lease file" +msgstr "Файл оренд UPnP" + +msgid "Universal Plug & Play" +msgstr "Universal Plug & Play" + +msgid "Uplink" +msgstr "Висхідний канал" + +msgid "Value in KByte/s, informational only" +msgstr "Значення (КБ/с) тільки для інформації" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnP надає клієнтам у локальній мережі змогу автоматично настроювати " +#~ "маршрутизатор." + +#~ msgid "enable" +#~ msgstr "Увімкнути" diff --git a/feeds/luci/applications/luci-app-upnp/po/vi/upnp.po b/feeds/luci/applications/luci-app-upnp/po/vi/upnp.po new file mode 100644 index 0000000..5f95499 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/vi/upnp.po @@ -0,0 +1,158 @@ +# upnp.pot +# generated from ./applications/luci-upnp/luasrc/i18n/upnp.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:59+0200\n" +"PO-Revision-Date: 2009-08-13 04:00+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Active UPnP Redirects" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "" + +msgid "Announced model number" +msgstr "" + +msgid "Announced serial number" +msgstr "" + +msgid "Clean rules interval" +msgstr "" + +msgid "Clean rules threshold" +msgstr "" + +msgid "Client Address" +msgstr "" + +msgid "Client Port" +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Comment" +msgstr "" + +msgid "Delete Redirect" +msgstr "" + +msgid "Device UUID" +msgstr "" + +msgid "Downlink" +msgstr "Downlink" + +msgid "Enable NAT-PMP functionality" +msgstr "" + +msgid "Enable UPnP functionality" +msgstr "" + +msgid "Enable additional logging" +msgstr "" + +msgid "Enable secure mode" +msgstr "Kích hoạt chế độ an toàn" + +msgid "External Port" +msgstr "" + +msgid "External ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "Internal addresses" +msgstr "" + +msgid "Internal ports" +msgstr "" + +msgid "MiniUPnP ACLs" +msgstr "" + +msgid "MiniUPnP settings" +msgstr "" + +msgid "Notify interval" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Presentation URL" +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Puts extra debugging information into the system log" +msgstr "" + +msgid "Report system instead of daemon uptime" +msgstr "" + +msgid "Start UPnP and NAT-PMP service" +msgstr "" + +msgid "There are no active redirects." +msgstr "" + +msgid "UPnP" +msgstr "" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "" + +msgid "UPnP lease file" +msgstr "" + +msgid "Universal Plug & Play" +msgstr "Universal Plug & Play" + +msgid "Uplink" +msgstr "Uplink" + +msgid "Value in KByte/s, informational only" +msgstr "" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPNP cho phép đối tượng trong mạng địa phương tự động định dạng bộ định " +#~ "tuyến" + +#~ msgid "Log output" +#~ msgstr "Log output" + +#~ msgid "" +#~ "UPNP should only be enabled if absolutely necessary as it can result in " +#~ "high security risks for your network." +#~ msgstr "" +#~ "Chỉ nên kích hoạt UPNP khi thật cần thiết vì nó có thể gây nguy hiểm cho " +#~ "mạng lưới" diff --git a/feeds/luci/applications/luci-app-upnp/po/zh-cn/upnp.po b/feeds/luci/applications/luci-app-upnp/po/zh-cn/upnp.po new file mode 100644 index 0000000..693bbc1 --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/zh-cn/upnp.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-09-03 18:02+0200\n" +"Last-Translator: nKsyn \n" +"Language-Team: QQ Group 75543259 \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "指定外部端口的ACL可能会被重定向至某些内部地址及端口" + +msgid "Action" +msgstr "动作" + +msgid "Active UPnP Redirects" +msgstr "活动的UPnP重定向" + +msgid "Advanced Settings" +msgstr "高级设置" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "允许添加只转发给请求的IP地址(当启用时,UPnP的客户可以只转发到其IP)" + +msgid "Announced model number" +msgstr "公布的型号" + +msgid "Announced serial number" +msgstr "公布的序列号" + +msgid "Clean rules interval" +msgstr "定时自动清除无效规则" + +msgid "Clean rules threshold" +msgstr "启动时清除端口转发" + +msgid "Client Address" +msgstr "客户端地址" + +msgid "Client Port" +msgstr "客户端端口" + +msgid "Collecting data..." +msgstr "正在收集数据" + +msgid "Comment" +msgstr "备注" + +msgid "Delete Redirect" +msgstr "删除转发规则" + +msgid "Device UUID" +msgstr "设备UUID" + +msgid "Downlink" +msgstr "下行速率" + +msgid "Enable NAT-PMP functionality" +msgstr "启用NAT-PMP功能" + +msgid "Enable UPnP functionality" +msgstr "启用UPnP功能" + +msgid "Enable additional logging" +msgstr "启用额外的日志记录" + +msgid "Enable secure mode" +msgstr "启用安全模式" + +msgid "External Port" +msgstr "外部端口" + +msgid "External ports" +msgstr "外部端口" + +msgid "General Settings" +msgstr "一般设置" + +msgid "Internal addresses" +msgstr "内部地址" + +msgid "Internal ports" +msgstr "内部端口" + +msgid "MiniUPnP ACLs" +msgstr "MiniUPnP的ACL" + +msgid "MiniUPnP settings" +msgstr "MiniUPnP设置" + +msgid "Notify interval" +msgstr "警报间隔" + +msgid "Port" +msgstr "端口" + +msgid "Presentation URL" +msgstr "显示URL" + +msgid "Protocol" +msgstr "协议" + +msgid "Puts extra debugging information into the system log" +msgstr "提取额外的调试信息至系统日志" + +msgid "Report system instead of daemon uptime" +msgstr "用系统运行时间代替进程运行时间" + +msgid "Start UPnP and NAT-PMP service" +msgstr "启动UPnP与NAT-PMP服务" + +msgid "There are no active redirects." +msgstr "没有活动的重定向" + +msgid "UPnP" +msgstr "UPnP" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "UPnP允许局域网内客户端自动设置路由上的端口转发。" + +msgid "UPnP lease file" +msgstr "UPnP租约文件" + +msgid "Universal Plug & Play" +msgstr "通用即插即用(UPnP)" + +msgid "Uplink" +msgstr "上行速率" + +msgid "Value in KByte/s, informational only" +msgstr "值为KByte/s,仅供参考" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "UPnP允许局域网内客户端自动设置路由上的端口转发。" + +#~ msgid "enable" +#~ msgstr "启用" diff --git a/feeds/luci/applications/luci-app-upnp/po/zh-tw/upnp.po b/feeds/luci/applications/luci-app-upnp/po/zh-tw/upnp.po new file mode 100644 index 0000000..dde94ae --- /dev/null +++ b/feeds/luci/applications/luci-app-upnp/po/zh-tw/upnp.po @@ -0,0 +1,147 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 11:40+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "" +"ACLs specify which external ports may be redirected to which internal " +"addresses and ports" +msgstr "ACL存取控制清單, 就是指定某些外部埠可以從導到內部位址和埠號" + +msgid "Action" +msgstr "啓用" + +msgid "Active UPnP Redirects" +msgstr "啓用UPnP從導" + +msgid "Advanced Settings" +msgstr "進階設定" + +msgid "Allow adding forwards only to requesting ip addresses" +msgstr "只允許請求的IP位址新增從導機制" + +msgid "Announced model number" +msgstr "已宣告模組號碼" + +msgid "Announced serial number" +msgstr "已宣告序號" + +msgid "Clean rules interval" +msgstr "清除規則間隔" + +msgid "Clean rules threshold" +msgstr "清除規則門檻" + +msgid "Client Address" +msgstr "用戶端位址" + +msgid "Client Port" +msgstr "用戶端埠號" + +msgid "Collecting data..." +msgstr "收集數據中..." + +msgid "Comment" +msgstr "評論" + +msgid "Delete Redirect" +msgstr "刪除從導" + +msgid "Device UUID" +msgstr "設備UUID獨立識別碼" + +msgid "Downlink" +msgstr "下載" + +msgid "Enable NAT-PMP functionality" +msgstr "啓用蘋果NAT-PMP傳輸埠對應通訊協定功能" + +msgid "Enable UPnP functionality" +msgstr "啓用UPnP通用序列埠功能" + +msgid "Enable additional logging" +msgstr "啓用額外記錄" + +msgid "Enable secure mode" +msgstr "啓用安全模式" + +msgid "External Port" +msgstr "外部埠號" + +msgid "External ports" +msgstr "外部埠號範圍" + +msgid "General Settings" +msgstr "一般設定" + +msgid "Internal addresses" +msgstr "內部位址" + +msgid "Internal ports" +msgstr "內部埠號" + +msgid "MiniUPnP ACLs" +msgstr "小型UPnP存取控制清單" + +msgid "MiniUPnP settings" +msgstr "小型UPnP存取控制清單設定" + +msgid "Notify interval" +msgstr "提醒間隔" + +msgid "Port" +msgstr "埠號" + +msgid "Presentation URL" +msgstr "介紹URL連結" + +msgid "Protocol" +msgstr "協議" + +msgid "Puts extra debugging information into the system log" +msgstr "把額外的除錯資訊放入系統log計錄中" + +msgid "Report system instead of daemon uptime" +msgstr "報表系統取代常駐更新時間" + +msgid "Start UPnP and NAT-PMP service" +msgstr "啓用UPnP跟NAT-PMP服務" + +msgid "There are no active redirects." +msgstr "目前無作用中的從導" + +msgid "UPnP" +msgstr "UPNP通用序列埠協定" + +msgid "" +"UPnP allows clients in the local network to automatically configure the " +"router." +msgstr "開放本地用戶端自動設定路由器UPNP機制" + +msgid "UPnP lease file" +msgstr "UPnP租賃文件" + +msgid "Universal Plug & Play" +msgstr "通用序列埠隨插隨用" + +msgid "Uplink" +msgstr "上傳" + +msgid "Value in KByte/s, informational only" +msgstr "僅採用 KByte/s值單位表示" + +#~ msgid "" +#~ "UPNP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "開放本地用戶端自動設定路由器UPNP機制" + +#~ msgid "enable" +#~ msgstr "啓用" diff --git a/feeds/luci/applications/luci-app-ushare/Makefile b/feeds/luci/applications/luci-app-ushare/Makefile new file mode 100644 index 0000000..5c0974c --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=uShare - UPnP A/V & DLNA Media Server +LUCI_DEPENDS:=+ushare @BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-ushare/luasrc/controller/ushare.lua b/feeds/luci/applications/luci-app-ushare/luasrc/controller/ushare.lua new file mode 100644 index 0000000..c811773 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/luasrc/controller/ushare.lua @@ -0,0 +1,15 @@ +-- Copyright 2008 Yanira +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.ushare", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/ushare") then + return + end + + local page + + page = entry({"admin", "services", "ushare"}, cbi("ushare"), _("uShare"), 60) + page.dependent = true +end diff --git a/feeds/luci/applications/luci-app-ushare/luasrc/model/cbi/ushare.lua b/feeds/luci/applications/luci-app-ushare/luasrc/model/cbi/ushare.lua new file mode 100644 index 0000000..0c2d1f0 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/luasrc/model/cbi/ushare.lua @@ -0,0 +1,30 @@ +-- Copyright 2008 Yanira +-- Licensed to the public under the Apache License 2.0. + +m = Map("ushare", translate("uShare"), + luci.util.pcdata(translate("uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server component that provides UPnP media devices with information on available multimedia files."))) + +s = m:section(TypedSection, "ushare", translate("Settings")) +s.addremove = false +s.anonymous = true + +s:option(Flag, "enabled", translate("Enable")) + +s:option(Value, "username", translate("Username")) + +s:option(Value, "servername", translate("Servername")) + +dif = s:option( Value, "interface", translate("Interface")) +for _, nif in ipairs(luci.sys.net.devices()) do + if nif ~= "lo" then dif:value(nif) end +end + +s:option(DynamicList, "content_directories", translate("Content directories")) + +s:option(Flag, "disable_webif", translate("Disable webinterface")) + +s:option(Flag, "disable_telnet", translate("Disable telnet console")) + +s:option(Value, "options", translate("Options")) + +return m diff --git a/feeds/luci/applications/luci-app-ushare/po/ca/ushare.po b/feeds/luci/applications/luci-app-ushare/po/ca/ushare.po new file mode 100644 index 0000000..9d64596 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/ca/ushare.po @@ -0,0 +1,55 @@ +# ushare.pot +# generated from ./applications/luci-ushare/luasrc/i18n/ushare.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-07-01 08:29+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Directoris de contingut" + +msgid "Disable telnet console" +msgstr "Inhabilita la consola telnet" + +msgid "Disable webinterface" +msgstr "Inhabilita la interfície web" + +msgid "Enable" +msgstr "Habilita" + +msgid "Interface" +msgstr "Interfície" + +msgid "Options" +msgstr "Opcions" + +msgid "Servername" +msgstr "Nom de servidor" + +msgid "Settings" +msgstr "Configuració" + +msgid "Username" +msgstr "Nom d'usuari" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"El uShare és un servidor de mitjans UPnP (TM) A/V i DLNA. Implementa el " +"component servidor que proveeix els dispositius de mitjans UPnP amb " +"informació sobre els fitxers de multimèdia disponibles." diff --git a/feeds/luci/applications/luci-app-ushare/po/cs/ushare.po b/feeds/luci/applications/luci-app-ushare/po/cs/ushare.po new file mode 100644 index 0000000..d908e91 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/cs/ushare.po @@ -0,0 +1,53 @@ +# ushare.pot +# generated from ./applications/luci-ushare/luasrc/i18n/ushare.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-29 21:49+0200\n" +"Last-Translator: Astran \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Složky s obsahem" + +msgid "Disable telnet console" +msgstr "Zakázat telnet konzoli" + +msgid "Disable webinterface" +msgstr "Zakázat webové rozhraní" + +msgid "Enable" +msgstr "Povolit" + +msgid "Interface" +msgstr "Rozhraní" + +msgid "Options" +msgstr "Možnosti" + +msgid "Servername" +msgstr "Název serveru" + +msgid "Settings" +msgstr "Nastavení" + +msgid "Username" +msgstr "Uživatelské jméno" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"uShare je UPnP (TM) A/V & DLNA Media Server. Implementuje součást serveru, " +"který poskytuje UPnP mediální zařízení s informacemi o dostupných " +"multimediálních souborech." diff --git a/feeds/luci/applications/luci-app-ushare/po/de/ushare.po b/feeds/luci/applications/luci-app-ushare/po/de/ushare.po new file mode 100644 index 0000000..d7d7e22 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/de/ushare.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2013-01-28 22:32+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Freigabeverzeichnisse" + +msgid "Disable telnet console" +msgstr "Telnet-Konsole deaktivieren" + +msgid "Disable webinterface" +msgstr "Webinterface deaktivieren" + +msgid "Enable" +msgstr "Aktivieren" + +msgid "Interface" +msgstr "Schnittstelle" + +msgid "Options" +msgstr "Optionen" + +msgid "Servername" +msgstr "Servername" + +msgid "Settings" +msgstr "Einstellungen" + +msgid "Username" +msgstr "Benutzername" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"uShare ist ein uPNP(TM) A/V & DLNA - basierender Medien-Server. Es " +"implementiert die Serverkomponente, welche uPNP-Geräten Informationen über " +"verfügbare Mediendateien bereitstellt." diff --git a/feeds/luci/applications/luci-app-ushare/po/el/ushare.po b/feeds/luci/applications/luci-app-ushare/po/el/ushare.po new file mode 100644 index 0000000..331c8a0 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/el/ushare.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-28 02:08+0200\n" +"PO-Revision-Date: 2010-06-30 17:26+0200\n" +"Last-Translator: Vasilis Tsiligiannis \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "Content directories" +msgstr "Φάκελοι περιεχομένου" + +msgid "Disable telnet console" +msgstr "Απενεργοποίηση τερματικού telnet" + +msgid "Disable webinterface" +msgstr "Απενεργοποίηση διεπαφής web" + +msgid "Enable" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Options" +msgstr "Επιλογές" + +msgid "Servername" +msgstr "Όνομα εξυπηρετητή" + +msgid "Settings" +msgstr "Ρυθμίσεις" + +msgid "Username" +msgstr "" + +msgid "uShare" +msgstr "" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" diff --git a/feeds/luci/applications/luci-app-ushare/po/en/ushare.po b/feeds/luci/applications/luci-app-ushare/po/en/ushare.po new file mode 100644 index 0000000..5e5d65f --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/en/ushare.po @@ -0,0 +1,49 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "Content directories" +msgstr "Content directories" + +msgid "Disable telnet console" +msgstr "Disable telnet console" + +msgid "Disable webinterface" +msgstr "Disable webinterface" + +msgid "Enable" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Options" +msgstr "Options" + +msgid "Servername" +msgstr "Servername" + +msgid "Settings" +msgstr "Settings" + +msgid "Username" +msgstr "" + +msgid "uShare" +msgstr "" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" diff --git a/feeds/luci/applications/luci-app-ushare/po/es/ushare.po b/feeds/luci/applications/luci-app-ushare/po/es/ushare.po new file mode 100644 index 0000000..e8422b9 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/es/ushare.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-08-25 09:23+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Directorios de contenido" + +msgid "Disable telnet console" +msgstr "Inhabilitar consola telnet" + +msgid "Disable webinterface" +msgstr "Inhabilitar interfaz web" + +msgid "Enable" +msgstr "Activar" + +msgid "Interface" +msgstr "Interfaz" + +msgid "Options" +msgstr "Opciones" + +msgid "Servername" +msgstr "Nombre para el servidor" + +msgid "Settings" +msgstr "Configuración" + +msgid "Username" +msgstr "Nombre de usuario" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"uShare es un servidor UPnP (TM) A/V y DLNA. Implementa el componente del " +"servidor que proporciona a los dispositivos UPnP la información disponible " +"en los ficheros multimedia." diff --git a/feeds/luci/applications/luci-app-ushare/po/fr/ushare.po b/feeds/luci/applications/luci-app-ushare/po/fr/ushare.po new file mode 100644 index 0000000..e2e917d --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/fr/ushare.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-08-06 13:57+0200\n" +"Last-Translator: st \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Répertoires de contenus" + +msgid "Disable telnet console" +msgstr "Désactiver la console Telnet" + +msgid "Disable webinterface" +msgstr "Désactiver l'interface web" + +msgid "Enable" +msgstr "Activer" + +msgid "Interface" +msgstr "Interface" + +msgid "Options" +msgstr "Options" + +msgid "Servername" +msgstr "Nom du serveur" + +msgid "Settings" +msgstr "Paramètres" + +msgid "Username" +msgstr "Nom d'utilisateur" + +msgid "uShare" +msgstr "" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" diff --git a/feeds/luci/applications/luci-app-ushare/po/he/ushare.po b/feeds/luci/applications/luci-app-ushare/po/he/ushare.po new file mode 100644 index 0000000..4858a9a --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/he/ushare.po @@ -0,0 +1,52 @@ +# ushare.pot +# generated from ./applications/luci-ushare/luasrc/i18n/ushare.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-06-24 18:47+0200\n" +"Last-Translator: GiladL \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Content directories" +msgstr "ספריות תוכן" + +# האם לכתוב טלנט באנגלית (telenet) או בתעתיק עברי (טלנט)? +msgid "Disable telnet console" +msgstr "השבת קונסולת telnet" + +msgid "Disable webinterface" +msgstr "השבת מנשק רשת" + +msgid "Enable" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Options" +msgstr "אפשרויות" + +msgid "Servername" +msgstr "שם שרת" + +msgid "Settings" +msgstr "הגדרות" + +msgid "Username" +msgstr "" + +# זה שם של תוכנה ולא צריך לתרגם אותו +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" diff --git a/feeds/luci/applications/luci-app-ushare/po/hu/ushare.po b/feeds/luci/applications/luci-app-ushare/po/hu/ushare.po new file mode 100644 index 0000000..6efa521 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/hu/ushare.po @@ -0,0 +1,53 @@ +# ushare.pot +# generated from ./applications/luci-ushare/luasrc/i18n/ushare.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-13 18:29+0200\n" +"Last-Translator: Gábor \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Megosztott könyvtárak" + +msgid "Disable telnet console" +msgstr "Telnet-konzol tiltása" + +msgid "Disable webinterface" +msgstr "Web felület tiltása" + +msgid "Enable" +msgstr "Engedélyezés" + +msgid "Interface" +msgstr "Interfész" + +msgid "Options" +msgstr "Opciók" + +msgid "Servername" +msgstr "Szerver név" + +msgid "Settings" +msgstr "Beállítások" + +msgid "Username" +msgstr "Felhasználónév" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"Az uShare egy UPnP (TM) A/V & DLNA média szerver. A szerver komponenst " +"valósítja meg, amely információt szolgáltat az elérhető multimédia fájlokról " +"az uPnP média eszközök számára." diff --git a/feeds/luci/applications/luci-app-ushare/po/it/ushare.po b/feeds/luci/applications/luci-app-ushare/po/it/ushare.po new file mode 100644 index 0000000..5837a11 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/it/ushare.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-02-03 14:03+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Percorso dei contenuti" + +msgid "Disable telnet console" +msgstr "Disabilita console telnet" + +msgid "Disable webinterface" +msgstr "Disabilita l'interfaccia web" + +msgid "Enable" +msgstr "Attiva" + +msgid "Interface" +msgstr "Interfaccia" + +msgid "Options" +msgstr "Opzioni" + +msgid "Servername" +msgstr "Nome del server" + +msgid "Settings" +msgstr "Impostazioni" + +msgid "Username" +msgstr "Nome Utente" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"uShare è un Server Multimediale UPnP (TM) A / V e DLNA. Implementa il " +"componente server che fornisce ai dispositivi multimediali UPnP, le " +"informazioni su file multimediali disponibili." diff --git a/feeds/luci/applications/luci-app-ushare/po/ja/ushare.po b/feeds/luci/applications/luci-app-ushare/po/ja/ushare.po new file mode 100644 index 0000000..a217ece --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/ja/ushare.po @@ -0,0 +1,52 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-05-04 14:28+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "コンテンツディレクトリ" + +msgid "Disable telnet console" +msgstr "telnelコンソールを無効にする" + +msgid "Disable webinterface" +msgstr "Webインターフェースを無効にする" + +msgid "Enable" +msgstr "サービスを有効にする" + +msgid "Interface" +msgstr "インターフェース" + +msgid "Options" +msgstr "オプション" + +msgid "Servername" +msgstr "サーバー名" + +msgid "Settings" +msgstr "設定" + +msgid "Username" +msgstr "ユーザー名" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"uShareはUPnP (TM) A/V および DLNA " +"メディアサーバーであり、UPnPメディアデバイスに対してマルチメディア・ファイル情報を提供するサーバー・コンポーネント機能を実装しています。" diff --git a/feeds/luci/applications/luci-app-ushare/po/ms/ushare.po b/feeds/luci/applications/luci-app-ushare/po/ms/ushare.po new file mode 100644 index 0000000..40b24f2 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/ms/ushare.po @@ -0,0 +1,46 @@ +# ushare.pot +# generated from ./applications/luci-ushare/luasrc/i18n/ushare.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Content directories" +msgstr "" + +msgid "Disable telnet console" +msgstr "" + +msgid "Disable webinterface" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Servername" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "uShare" +msgstr "" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" diff --git a/feeds/luci/applications/luci-app-ushare/po/no/ushare.po b/feeds/luci/applications/luci-app-ushare/po/no/ushare.po new file mode 100644 index 0000000..321d29e --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/no/ushare.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Content directories" +msgstr "Innholdskataloger" + +msgid "Disable telnet console" +msgstr "Deaktiver telnet konsoll" + +msgid "Disable webinterface" +msgstr "Deaktiver webgrensesnitt" + +msgid "Enable" +msgstr "Aktiver" + +msgid "Interface" +msgstr "Grensesnitt" + +msgid "Options" +msgstr "Alternativer" + +msgid "Servername" +msgstr "Servernavn" + +msgid "Settings" +msgstr "Innstillinger" + +msgid "Username" +msgstr "Brukernavn" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" + +#~ msgid "ushare_desc" +#~ msgstr "UPnP A/V og DLNA Media Server for Linux." diff --git a/feeds/luci/applications/luci-app-ushare/po/pl/ushare.po b/feeds/luci/applications/luci-app-ushare/po/pl/ushare.po new file mode 100644 index 0000000..2a26404 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/pl/ushare.po @@ -0,0 +1,54 @@ +# ushare.pot +# generated from ./applications/luci-ushare/luasrc/i18n/ushare.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-08 13:18+0200\n" +"Last-Translator: Staszek \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Katalogi zawartości" + +msgid "Disable telnet console" +msgstr "Wyłącz konsolę telnet" + +msgid "Disable webinterface" +msgstr "Wyłącz interfejs web" + +msgid "Enable" +msgstr "Włącz" + +msgid "Interface" +msgstr "Interfejs" + +msgid "Options" +msgstr "Opcje" + +msgid "Servername" +msgstr "Nazwa serwera" + +msgid "Settings" +msgstr "Ustawienia" + +msgid "Username" +msgstr "Użytkownik" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"uShare jest serwerem mediów UPnP (TM) i DLNA. Implementuje serwer, który " +"udostępnia urządzenia medialne UPnP z informacjami na temat dostępnych " +"plików multimedialnych." diff --git a/feeds/luci/applications/luci-app-ushare/po/pt-br/ushare.po b/feeds/luci/applications/luci-app-ushare/po/pt-br/ushare.po new file mode 100644 index 0000000..5fc872e --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/pt-br/ushare.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2012-09-26 23:09+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Diretórios de conteúdo" + +msgid "Disable telnet console" +msgstr "Desativar console telnet" + +msgid "Disable webinterface" +msgstr "Desativar interface web" + +msgid "Enable" +msgstr "Habilitar" + +msgid "Interface" +msgstr "Interface" + +msgid "Options" +msgstr "Opções" + +msgid "Servername" +msgstr "Nome do servidor" + +msgid "Settings" +msgstr "Configurações" + +msgid "Username" +msgstr "Nome do usuário" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"uShare é um Servidor de Mídia DLNA & UPnP (TM) A/V. Implementa o componente " +"do servidor que provê aos dispositivos de mídia UPnP informações sobre os " +"arquivos multimídias disponíveis." diff --git a/feeds/luci/applications/luci-app-ushare/po/pt/ushare.po b/feeds/luci/applications/luci-app-ushare/po/pt/ushare.po new file mode 100644 index 0000000..795a963 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/pt/ushare.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-06-03 23:32+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Diretórios de conteúdo" + +msgid "Disable telnet console" +msgstr "Desativar console telnet" + +msgid "Disable webinterface" +msgstr "Desativar interface web" + +msgid "Enable" +msgstr "Ativar" + +msgid "Interface" +msgstr "Interface" + +msgid "Options" +msgstr "Opções" + +msgid "Servername" +msgstr "Nome do servidor" + +msgid "Settings" +msgstr "Configurações" + +msgid "Username" +msgstr "Nome Utilizador" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"O uShare é um Servidor Multimédia UPnP (TM) A/V & DLNA. Implementa o " +"componente de servidor que fornece aos dispositivos multimédia UPnP " +"informações sobre os ficheiros disponiveis." diff --git a/feeds/luci/applications/luci-app-ushare/po/ro/ushare.po b/feeds/luci/applications/luci-app-ushare/po/ro/ushare.po new file mode 100644 index 0000000..3c99754 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/ro/ushare.po @@ -0,0 +1,51 @@ +# ushare.pot +# generated from ./applications/luci-ushare/luasrc/i18n/ushare.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-29 20:03+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Conţinut directoare" + +msgid "Disable telnet console" +msgstr "Dezactiveaza consola telnet" + +msgid "Disable webinterface" +msgstr "Dezactiveaza interfata web" + +msgid "Enable" +msgstr "Activează" + +msgid "Interface" +msgstr "Interfaţă" + +msgid "Options" +msgstr "Optiuni" + +msgid "Servername" +msgstr "Numele serverului" + +msgid "Settings" +msgstr "Setari" + +msgid "Username" +msgstr "Utilizator" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" diff --git a/feeds/luci/applications/luci-app-ushare/po/ru/ushare.po b/feeds/luci/applications/luci-app-ushare/po/ru/ushare.po new file mode 100644 index 0000000..ac08e94 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/ru/ushare.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: ushare\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-08-15 11:29+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Content directories" +msgstr "Директории с содержимым" + +msgid "Disable telnet console" +msgstr "Выключить telnet-консоль" + +msgid "Disable webinterface" +msgstr "Выключить веб-интерфейс" + +msgid "Enable" +msgstr "Включить" + +msgid "Interface" +msgstr "Интерфейс" + +msgid "Options" +msgstr "Опции" + +msgid "Servername" +msgstr "Имя сервера" + +msgid "Settings" +msgstr "Настройки" + +msgid "Username" +msgstr "Имя пользователя" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"uShare - это UPnP (TM) A/V DLNA медиа-сервер, который предоставляет " +"мультимедийным устройствам информацию о доступных медиа-файлах." diff --git a/feeds/luci/applications/luci-app-ushare/po/sk/ushare.po b/feeds/luci/applications/luci-app-ushare/po/sk/ushare.po new file mode 100644 index 0000000..4c9022b --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/sk/ushare.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Content directories" +msgstr "" + +msgid "Disable telnet console" +msgstr "" + +msgid "Disable webinterface" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Servername" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "uShare" +msgstr "" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" diff --git a/feeds/luci/applications/luci-app-ushare/po/sv/ushare.po b/feeds/luci/applications/luci-app-ushare/po/sv/ushare.po new file mode 100644 index 0000000..7528484 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/sv/ushare.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Content directories" +msgstr "" + +msgid "Disable telnet console" +msgstr "" + +msgid "Disable webinterface" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Servername" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "uShare" +msgstr "" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" + +#~ msgid "" +#~ "ACLs specify which external ports may be redirected to which internal " +#~ "addresses and ports" +#~ msgstr "" +#~ "ACL:er anger vilka externa portar som ska omdirigeras till vilka interna " +#~ "adresser och portar" + +#~ msgid "Action" +#~ msgstr "Handling" + +#~ msgid "Active UPnP Redirects" +#~ msgstr "Aktivera UPnP-omdirigeringar" + +#~ msgid "Advanced Settings" +#~ msgstr "Avancerade inställningar" + +#~ msgid "Announced model number" +#~ msgstr "Aviserat modellnummer" + +#~ msgid "Announced serial number" +#~ msgstr "Aviserat serienummer" + +#~ msgid "Client Address" +#~ msgstr "Klient-adress" + +#~ msgid "Client Port" +#~ msgstr "Klient-port" + +#~ msgid "Collecting data..." +#~ msgstr "Samlar in data..." + +#~ msgid "Comment" +#~ msgstr "Kommentar" + +#~ msgid "Delete Redirect" +#~ msgstr "Ta bort omdirigering" + +#~ msgid "Device UUID" +#~ msgstr "Enhetens UUID" + +#~ msgid "Downlink" +#~ msgstr "Nerlänk" + +#~ msgid "Enable NAT-PMP functionality" +#~ msgstr "Aktivera NAT-PMP-funktionalitet" + +#~ msgid "Enable UPnP functionality" +#~ msgstr "Aktivera UPnP-funktionalitet" + +#~ msgid "Enable additional logging" +#~ msgstr "Aktivera ytterligare loggning" + +#~ msgid "Enable secure mode" +#~ msgstr "Aktivera säkert läge" + +#~ msgid "External Port" +#~ msgstr "Extern port" + +#~ msgid "External ports" +#~ msgstr "Externa portar" + +#~ msgid "General Settings" +#~ msgstr "Generella inställningar" + +#~ msgid "Internal addresses" +#~ msgstr "Interna adresser" + +#~ msgid "Internal ports" +#~ msgstr "Interna portar" + +#~ msgid "MiniUPnP ACLs" +#~ msgstr "ACL:er för MiniUPnP" + +#~ msgid "MiniUPnP settings" +#~ msgstr "Inställningar för MiniUPnP" + +#~ msgid "Notify interval" +#~ msgstr "Intervall för avisering" + +#~ msgid "Port" +#~ msgstr "Port" + +#~ msgid "Presentation URL" +#~ msgstr "Presentationens URL" + +#~ msgid "Protocol" +#~ msgstr "Protokoll" + +#~ msgid "Puts extra debugging information into the system log" +#~ msgstr "Lägger extra felsökningsinformation till system-loggen" + +#~ msgid "Report system instead of daemon uptime" +#~ msgstr "Rapportera systemet iställer för demonens upptid" + +#~ msgid "Start UPnP and NAT-PMP service" +#~ msgstr "Starta UPnP och NAT-PMP-tjänsten" + +#~ msgid "There are no active redirects." +#~ msgstr "Det finns inga aktiva omdirigeringar" + +#~ msgid "UPnP" +#~ msgstr "UPnP" + +#~ msgid "" +#~ "UPnP allows clients in the local network to automatically configure the " +#~ "router." +#~ msgstr "" +#~ "UPnP tillåter klienter i det lokala nätverket att automatiskt ställa in " +#~ "routern." + +#~ msgid "UPnP lease file" +#~ msgstr "Hyr-fil för UPnP" + +#~ msgid "Universal Plug & Play" +#~ msgstr "Universiell Plug & Play" + +#~ msgid "Uplink" +#~ msgstr "Upplänk" + +#~ msgid "Value in KByte/s, informational only" +#~ msgstr "Värde i KByte/s, endast informell" diff --git a/feeds/luci/applications/luci-app-ushare/po/templates/ushare.pot b/feeds/luci/applications/luci-app-ushare/po/templates/ushare.pot new file mode 100644 index 0000000..7e4dbc1 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/templates/ushare.pot @@ -0,0 +1,38 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Content directories" +msgstr "" + +msgid "Disable telnet console" +msgstr "" + +msgid "Disable webinterface" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Servername" +msgstr "" + +msgid "Settings" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "uShare" +msgstr "" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" diff --git a/feeds/luci/applications/luci-app-ushare/po/tr/ushare.po b/feeds/luci/applications/luci-app-ushare/po/tr/ushare.po new file mode 100644 index 0000000..c905c57 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/tr/ushare.po @@ -0,0 +1,50 @@ +# ushare.pot +# generated from ./applications/luci-ushare/luasrc/i18n/ushare.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-10-11 22:33+0200\n" +"Last-Translator: vincenzo \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "İçerik Dizinleri" + +msgid "Disable telnet console" +msgstr "Telnet Konsolunu Kapatma" + +msgid "Disable webinterface" +msgstr "Web Arayüzünü Kapatma" + +msgid "Enable" +msgstr "Aktif Hale Getir" + +msgid "Interface" +msgstr "Arayüz" + +msgid "Options" +msgstr "Seçenekler" + +msgid "Servername" +msgstr "Sunucuadı" + +msgid "Settings" +msgstr "Ayarlar" + +msgid "Username" +msgstr "Kullanıcıadı" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" diff --git a/feeds/luci/applications/luci-app-ushare/po/uk/ushare.po b/feeds/luci/applications/luci-app-ushare/po/uk/ushare.po new file mode 100644 index 0000000..d79f896 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/uk/ushare.po @@ -0,0 +1,53 @@ +# ushare.pot +# generated from ./applications/luci-ushare/luasrc/i18n/ushare.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-05-26 18:43+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "Каталоги даних" + +msgid "Disable telnet console" +msgstr "Вимкнути консоль Telnet" + +msgid "Disable webinterface" +msgstr "Вимкнути веб-інтерфейс" + +msgid "Enable" +msgstr "Увімкнути" + +msgid "Interface" +msgstr "Інтерфейс" + +msgid "Options" +msgstr "Опції" + +msgid "Servername" +msgstr "Ім'я сервера" + +msgid "Settings" +msgstr "Настройки" + +msgid "Username" +msgstr "Ім'я користувача" + +msgid "uShare" +msgstr "uShare" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"uShare є UPnP (TM) A/V DLNA медіа-сервером, який надає UPnP медіа-пристроям " +"інформацію про наявні мультимедійні файли." diff --git a/feeds/luci/applications/luci-app-ushare/po/vi/ushare.po b/feeds/luci/applications/luci-app-ushare/po/vi/ushare.po new file mode 100644 index 0000000..20e5df7 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/vi/ushare.po @@ -0,0 +1,50 @@ +# ushare.pot +# generated from ./applications/luci-ushare/luasrc/i18n/ushare.en.lua +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:59+0200\n" +"PO-Revision-Date: 2009-08-13 04:01+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "Content directories" +msgstr "Danh bạ nội dung " + +msgid "Disable telnet console" +msgstr "Vô hiệu hóa khiển telnet" + +msgid "Disable webinterface" +msgstr "Vô hiệu hóa giao diện web" + +msgid "Enable" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Options" +msgstr "Lựa chọn " + +msgid "Servername" +msgstr "tên máy chủ" + +msgid "Settings" +msgstr "Cài đặt" + +msgid "Username" +msgstr "" + +msgid "uShare" +msgstr "" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" diff --git a/feeds/luci/applications/luci-app-ushare/po/zh-cn/ushare.po b/feeds/luci/applications/luci-app-ushare/po/zh-cn/ushare.po new file mode 100644 index 0000000..f426526 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/zh-cn/ushare.po @@ -0,0 +1,52 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2012-09-18 16:26+0200\n" +"Last-Translator: nKsyn \n" +"Language-Team: QQ Group 75543259\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "目录" + +msgid "Disable telnet console" +msgstr "关闭telnet管理" + +msgid "Disable webinterface" +msgstr "关闭界面管理" + +msgid "Enable" +msgstr "启用" + +msgid "Interface" +msgstr "网络接口" + +msgid "Options" +msgstr "选项" + +msgid "Servername" +msgstr "服务器名" + +msgid "Settings" +msgstr "设置" + +msgid "Username" +msgstr "用户名" + +msgid "uShare" +msgstr "UPNP流媒体服务" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "" +"uShare是一个UPnP(TM) A/V和DLNA媒体服务器。可以将多媒体文件共享到支持UPnP的设" +"备上。" diff --git a/feeds/luci/applications/luci-app-ushare/po/zh-tw/ushare.po b/feeds/luci/applications/luci-app-ushare/po/zh-tw/ushare.po new file mode 100644 index 0000000..eba6677 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/po/zh-tw/ushare.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-10 12:32+0200\n" +"Last-Translator: mp607 \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Content directories" +msgstr "目錄" + +msgid "Disable telnet console" +msgstr "關閉telnet管理" + +msgid "Disable webinterface" +msgstr "關閉網路介面管理" + +msgid "Enable" +msgstr "啟用" + +msgid "Interface" +msgstr "網路介面" + +msgid "Options" +msgstr "選項" + +msgid "Servername" +msgstr "伺服器名稱" + +msgid "Settings" +msgstr "設定" + +msgid "Username" +msgstr "使用者名稱" + +msgid "uShare" +msgstr "UPnP多媒體服務" + +msgid "" +"uShare is a UPnP (TM) A/V & DLNA Media Server. It implements the server " +"component that provides UPnP media devices with information on available " +"multimedia files." +msgstr "uShare是一個UPnP (TM) A/V & DLNA多媒體伺服器。可以將多媒體檔案共用分享到支援UPnP的裝置上" diff --git a/feeds/luci/applications/luci-app-ushare/root/etc/uci-defaults/40_luci-ushare b/feeds/luci/applications/luci-app-ushare/root/etc/uci-defaults/40_luci-ushare new file mode 100755 index 0000000..8bcb6e4 --- /dev/null +++ b/feeds/luci/applications/luci-app-ushare/root/etc/uci-defaults/40_luci-ushare @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@ushare[-1] + add ucitrack ushare + set ucitrack.@ushare[-1].init=ushare + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-vnstat/Makefile b/feeds/luci/applications/luci-app-vnstat/Makefile new file mode 100644 index 0000000..6d98610 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for VnStat +LUCI_DEPENDS:=+vnstat +vnstati + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-vnstat/luasrc/controller/vnstat.lua b/feeds/luci/applications/luci-app-vnstat/luasrc/controller/vnstat.lua new file mode 100644 index 0000000..3871fa2 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/luasrc/controller/vnstat.lua @@ -0,0 +1,11 @@ +module("luci.controller.vnstat", package.seeall) + +function index() + entry({"admin", "status", "vnstat"}, alias("admin", "status", "vnstat", "graphs"), _("VnStat Traffic Monitor"), 90) + entry({"admin", "status", "vnstat", "graphs"}, template("vnstat"), _("Graphs"), 1) + entry({"admin", "status", "vnstat", "config"}, cbi("vnstat"), _("Configuration"), 2) + + entry({"mini", "network", "vnstat"}, alias("mini", "network", "vnstat", "graphs"), _("VnStat Traffic Monitor"), 90) + entry({"mini", "network", "vnstat", "graphs"}, template("vnstat"), _("Graphs"), 1) + entry({"mini", "network", "vnstat", "config"}, cbi("vnstat"), _("Configuration"), 2) +end diff --git a/feeds/luci/applications/luci-app-vnstat/luasrc/model/cbi/vnstat.lua b/feeds/luci/applications/luci-app-vnstat/luasrc/model/cbi/vnstat.lua new file mode 100644 index 0000000..c60c649 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/luasrc/model/cbi/vnstat.lua @@ -0,0 +1,82 @@ +-- Copyright 2010-2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local utl = require "luci.util" +local sys = require "luci.sys" +local fs = require "nixio.fs" +local nw = require "luci.model.network" + +local dbdir, line + +for line in io.lines("/etc/vnstat.conf") do + dbdir = line:match("^%s*DatabaseDir%s+[\"'](%S-)[\"']") + if dbdir then break end +end + +dbdir = dbdir or "/var/lib/vnstat" + + +m = Map("vnstat", translate("VnStat"), + translate("VnStat is a network traffic monitor for Linux that keeps a log of network traffic for the selected interface(s).")) + +m.submit = translate("Restart VnStat") +m.reset = false + +nw.init(luci.model.uci.cursor_state()) + +local ifaces = { } +local enabled = { } +local iface + +if fs.access(dbdir) then + for iface in fs.dir(dbdir) do + if iface:sub(1,1) ~= '.' then + ifaces[iface] = iface + enabled[iface] = iface + end + end +end + +for _, iface in ipairs(sys.net.devices()) do + ifaces[iface] = iface +end + + +local s = m:section(TypedSection, "vnstat") +s.anonymous = true +s.addremove = false + +mon_ifaces = s:option(Value, "interface", translate("Monitor selected interfaces")) +mon_ifaces.template = "cbi/network_ifacelist" +mon_ifaces.widget = "checkbox" +mon_ifaces.cast = "table" +mon_ifaces.noinactive = true +mon_ifaces.nocreate = true + +function mon_ifaces.write(self, section, val) + local i + local s = { } + + if val then + for _, i in ipairs(type(val) == "table" and val or { val }) do + s[i] = true + end + end + + for i, _ in pairs(ifaces) do + if not s[i] then + fs.unlink(dbdir .. "/" .. i) + fs.unlink(dbdir .. "/." .. i) + end + end + + if next(s) then + m.uci:set_list("vnstat", section, "interface", utl.keys(s)) + else + m.uci:delete("vnstat", section, "interface") + end +end + +mon_ifaces.remove = mon_ifaces.write + +return m diff --git a/feeds/luci/applications/luci-app-vnstat/luasrc/view/vnstat.htm b/feeds/luci/applications/luci-app-vnstat/luasrc/view/vnstat.htm new file mode 100644 index 0000000..2b8d9ff --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/luasrc/view/vnstat.htm @@ -0,0 +1,101 @@ +<%# + Copyright 2010 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%- + +local fs = require "nixio.fs" +local sys = require "luci.sys" +local utl = require "luci.util" + +local param = luci.http.formvalue + +local iface = param("iface") +local style = param("style") + +style = (style and #style > 0) and style or "s" + + +-- +-- render image +-- +if iface then + style = style:gsub("[^%w]", "") + iface = iface:gsub("[^%w%.%-%_]", "") + + luci.http.prepare_content("image/png") + + local png = io.popen("vnstati -i '%s' '-%s' -o -" % { iface, style }) + luci.http.write(png:read("*a")) + png:close() + + return + +-- +-- update database +-- +else + sys.call("vnstat -u >/dev/null 2>/dev/null") +end + + +-- +-- find databases +-- +local dbdir, line + +for line in io.lines("/etc/vnstat.conf") do + dbdir = line:match("^%s*DatabaseDir%s+[\"'](%S-)[\"']") + if dbdir then break end +end + +dbdir = dbdir or "/var/lib/vnstat" + +-%> + +<%+header%> + +

<%:VnStat Graphs%>

+ +
+ + + + + +
+ +


+ +
+<% + empty = true + ifdir = fs.dir(dbdir) + + if ifdir then + for iface in ifdir do + if iface:sub(1,1) ~= "." then + empty = false +%> + +

+<% + end + end + end +%> + +<% if empty then %> +

<%:No database has been set up yet. Go to the VnStat configuration and enable monitoring for one or more interfaces.%>

+<% end %> + +
+ +<%+footer%> diff --git a/feeds/luci/applications/luci-app-vnstat/po/ca/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/ca/vnstat.po new file mode 100644 index 0000000..536228e --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/ca/vnstat.po @@ -0,0 +1,65 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-09 07:13+0200\n" +"Last-Translator: Alex \n" +"Language-Team: German\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configuration" +msgstr "Configuració" + +msgid "Daily traffic" +msgstr "Trànsit diari" + +msgid "Graphs" +msgstr "Gràfics" + +msgid "Hourly traffic" +msgstr "Trànsit per hora" + +msgid "Monitor selected interfaces" +msgstr "Vigila les interfícies seleccionades" + +msgid "Monthly traffic" +msgstr "Trànsit mensual" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Encara no s'ha configurat cap base de dades. Aneu a la configuració del " +"VnStat i habilita la vigila de una o més interfícies." + +msgid "Restart VnStat" +msgstr "Reinicia el VnStat" + +msgid "Summary display" +msgstr "Mostra de resum" + +msgid "Top 10 display" +msgstr "Mostra dels 10 principals" + +msgid "Update »" +msgstr "Actualitza »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Gràfics de VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Monitor de trànsit VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"El VnStat és un monitor de trànsit de xarxa pel Linux que manté un registre " +"del trànsit de xarxa de les interfícies seleccionades." diff --git a/feeds/luci/applications/luci-app-vnstat/po/cs/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/cs/vnstat.po new file mode 100644 index 0000000..4818374 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/cs/vnstat.po @@ -0,0 +1,64 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Configuration" +msgstr "Konfigurace" + +msgid "Daily traffic" +msgstr "Denní přenos" + +msgid "Graphs" +msgstr "Grafy" + +msgid "Hourly traffic" +msgstr "Hodinový přenos" + +msgid "Monitor selected interfaces" +msgstr "Sledovat vybraná zařízení" + +msgid "Monthly traffic" +msgstr "Měsíční přenos" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Zatím nebyla nastavena žádná databáze. Přejděte na konfiguraci VnStatu a " +"povolnet sledování jednoho nebo více zařízení." + +msgid "Restart VnStat" +msgstr "Restartovat VnStat" + +msgid "Summary display" +msgstr "Souhrn" + +msgid "Top 10 display" +msgstr "Top 10" + +msgid "Update »" +msgstr "Aktualizovat »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Grafy VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Sledování přenosu VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStat je nástroj pro sledování přenosů dat pro Linux, který ukládá " +"informace o síťovém provozu na vybraných zařízeních." + +#~ msgid "The VnStat service has been restarted." +#~ msgstr "Služba VnStat byla restartována" diff --git a/feeds/luci/applications/luci-app-vnstat/po/de/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/de/vnstat.po new file mode 100644 index 0000000..aab7494 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/de/vnstat.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2010-11-16 21:06+0100\n" +"Last-Translator: Jo-Philipp Wich \n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Configuration" +msgstr "Konfiguration" + +msgid "Daily traffic" +msgstr "Täglicher Verkehr" + +msgid "Graphs" +msgstr "Diagramme" + +msgid "Hourly traffic" +msgstr "Stündlicher Verkehr" + +msgid "Monitor selected interfaces" +msgstr "Überwachte Schnittstellen" + +msgid "Monthly traffic" +msgstr "Monatlicher Verkehr" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Es ist noch keine Datenbank eingerichtet. Navigieren Sie zur VnStat " +"Konfiguration und aktivieren Sie die Überwachung einer oder mehrerer " +"Schnittstellen." + +msgid "Restart VnStat" +msgstr "VnStat neu starten" + +msgid "Summary display" +msgstr "Übersicht" + +msgid "Top 10 display" +msgstr "Top 10 Anzeige" + +msgid "Update »" +msgstr "Aktualisieren »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "VnStat Diagramme" + +msgid "VnStat Traffic Monitor" +msgstr "VnStat Trafficüberwachung" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStat ist ein Überwachungsprogramm für Netwerkverkehr unter Linux. Das " +"Programm protokolliert das Verkehrsvolumen auf ausgewählten Schnittstellen." + +#~ msgid "The VnStat service has been restarted." +#~ msgstr "Der VnStat Dienst wurde neu gestartet." diff --git a/feeds/luci/applications/luci-app-vnstat/po/el/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/el/vnstat.po new file mode 100644 index 0000000..04590ea --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/el/vnstat.po @@ -0,0 +1,59 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2010-11-16 20:54+0100\n" +"Last-Translator: \n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Configuration" +msgstr "" + +msgid "Daily traffic" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Hourly traffic" +msgstr "" + +msgid "Monitor selected interfaces" +msgstr "" + +msgid "Monthly traffic" +msgstr "" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" + +msgid "Restart VnStat" +msgstr "" + +msgid "Summary display" +msgstr "" + +msgid "Top 10 display" +msgstr "" + +msgid "Update »" +msgstr "" + +msgid "VnStat" +msgstr "" + +msgid "VnStat Graphs" +msgstr "" + +msgid "VnStat Traffic Monitor" +msgstr "" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" diff --git a/feeds/luci/applications/luci-app-vnstat/po/en/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/en/vnstat.po new file mode 100644 index 0000000..04590ea --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/en/vnstat.po @@ -0,0 +1,59 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2010-11-16 20:54+0100\n" +"Last-Translator: \n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Configuration" +msgstr "" + +msgid "Daily traffic" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Hourly traffic" +msgstr "" + +msgid "Monitor selected interfaces" +msgstr "" + +msgid "Monthly traffic" +msgstr "" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" + +msgid "Restart VnStat" +msgstr "" + +msgid "Summary display" +msgstr "" + +msgid "Top 10 display" +msgstr "" + +msgid "Update »" +msgstr "" + +msgid "VnStat" +msgstr "" + +msgid "VnStat Graphs" +msgstr "" + +msgid "VnStat Traffic Monitor" +msgstr "" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" diff --git a/feeds/luci/applications/luci-app-vnstat/po/es/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/es/vnstat.po new file mode 100644 index 0000000..b91e1bb --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/es/vnstat.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-10-07 15:08+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: German\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configuration" +msgstr "Configuración" + +msgid "Daily traffic" +msgstr "Tráfico diario" + +msgid "Graphs" +msgstr "Gráficas" + +msgid "Hourly traffic" +msgstr "Tráfico por horas" + +msgid "Monitor selected interfaces" +msgstr "Monitorizar las interfaces seleccionadas" + +msgid "Monthly traffic" +msgstr "Tráfico mensual" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Todavía no se ha configurado ninguna base de datos. Vaya a la configuración " +"de VnStat y habilite la monitorización para una o más interfaces." + +msgid "Restart VnStat" +msgstr "Rearrancar VnStat" + +msgid "Summary display" +msgstr "Mostrar Resumen" + +msgid "Top 10 display" +msgstr "Mostrar Top 10" + +msgid "Update »" +msgstr "Actualizar »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Graficas de VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Monitor de trafico de VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStat es un monitor de tráfico de red para Linux que mantiene un registro " +"del trafico de red de la interfaz o interfaces seleccionadas." + +#~ msgid "The VnStat service has been restarted." +#~ msgstr "El servicio VnStat ha sido reiniciado" diff --git a/feeds/luci/applications/luci-app-vnstat/po/fr/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/fr/vnstat.po new file mode 100644 index 0000000..23b644a --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/fr/vnstat.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-11-23 22:33+0200\n" +"Last-Translator: fredb \n" +"Language-Team: German\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Configuration" +msgstr "Configuration" + +msgid "Daily traffic" +msgstr "Trafic quotidien" + +msgid "Graphs" +msgstr "Graphes" + +msgid "Hourly traffic" +msgstr "Trafic horaire" + +msgid "Monitor selected interfaces" +msgstr "Surveiller les interfaces sélectionnées" + +msgid "Monthly traffic" +msgstr "Trafic mensuel" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Aucun enregistrement n'a encore été configuré. Allez dans la configuration " +"de VnStat et activez la surveillance d'une ou plusieurs interface(s)." + +msgid "Restart VnStat" +msgstr "Redémarrer VnStat" + +msgid "Summary display" +msgstr "Résumé" + +msgid "Top 10 display" +msgstr "Top 10" + +msgid "Update »" +msgstr "Mise à jour »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Graphiques VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Surveillance du trafic VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStat est un outil de surveillance du réseau pour Linux qui garde un " +"journal du trafic du ou des interface(s) sélectionnée(s)." + +#~ msgid "The VnStat service has been restarted." +#~ msgstr "Le service VnStat a été redémarré." diff --git a/feeds/luci/applications/luci-app-vnstat/po/he/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/he/vnstat.po new file mode 100644 index 0000000..f0ef3a7 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/he/vnstat.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Configuration" +msgstr "" + +msgid "Daily traffic" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Hourly traffic" +msgstr "" + +msgid "Monitor selected interfaces" +msgstr "" + +msgid "Monthly traffic" +msgstr "" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" + +msgid "Restart VnStat" +msgstr "" + +msgid "Summary display" +msgstr "" + +msgid "Top 10 display" +msgstr "" + +msgid "Update »" +msgstr "" + +msgid "VnStat" +msgstr "" + +msgid "VnStat Graphs" +msgstr "" + +msgid "VnStat Traffic Monitor" +msgstr "" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" diff --git a/feeds/luci/applications/luci-app-vnstat/po/hu/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/hu/vnstat.po new file mode 100644 index 0000000..b198c5d --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/hu/vnstat.po @@ -0,0 +1,65 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Configuration" +msgstr "Beállítások" + +msgid "Daily traffic" +msgstr "Napi forgalom" + +msgid "Graphs" +msgstr "Grafikonok" + +msgid "Hourly traffic" +msgstr "Óránkénti forgalom" + +msgid "Monitor selected interfaces" +msgstr "Kiválasztott interfészek figyelése" + +msgid "Monthly traffic" +msgstr "Havi forgalom" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Adatbázis még nem lett beállítva. Engedélyezze egy vagy több interfész " +"figyelését a VnStat beállításoknál." + +msgid "Restart VnStat" +msgstr "VnStat újraíndítása" + +msgid "Summary display" +msgstr "Összefoglaló nézet" + +msgid "Top 10 display" +msgstr "Top 10 nézet" + +msgid "Update »" +msgstr "Frissítés »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "VnStat grafikonok" + +msgid "VnStat Traffic Monitor" +msgstr "VnStat Forgalom Figyelő" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStat egy hálózati forgalom figyelő alkalmazás Linux alá ami naplózza a " +"kiválasztott interfész(ek) hálózati forgalmát." + +#~ msgid "The VnStat service has been restarted." +#~ msgstr "A VnStat szolgáltatás újra lett índítva." diff --git a/feeds/luci/applications/luci-app-vnstat/po/it/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/it/vnstat.po new file mode 100644 index 0000000..8cc6e5b --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/it/vnstat.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-05-17 22:00+0200\n" +"Last-Translator: coatto87 \n" +"Language-Team: German\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Configuration" +msgstr "Configurazione" + +msgid "Daily traffic" +msgstr "Traffico giornaliero" + +msgid "Graphs" +msgstr "Grafici" + +msgid "Hourly traffic" +msgstr "Traffico orario" + +msgid "Monitor selected interfaces" +msgstr "Monitora le interfacce selezionate" + +msgid "Monthly traffic" +msgstr "Traffico mensile" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Non è ancora stato configurato un database. Vai nella configurazione di " +"VnStat e abilita il monitoraggio per una o più interfacce." + +msgid "Restart VnStat" +msgstr "Riavvia VnStat" + +msgid "Summary display" +msgstr "Riassunto" + +msgid "Top 10 display" +msgstr "Top 10 display" + +msgid "Update »" +msgstr "Aggiorna" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Grafici VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Monitor del traffico VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStat è un monitor del traffico di rete per Linux che scrive un log per le " +"interfacce selezionate." + +#~ msgid "The VnStat service has been restarted." +#~ msgstr "Il servizio VnStat è stato riavviato." diff --git a/feeds/luci/applications/luci-app-vnstat/po/ja/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/ja/vnstat.po new file mode 100644 index 0000000..8708c6f --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/ja/vnstat.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-08-19 06:15+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: German\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Configuration" +msgstr "設定" + +msgid "Daily traffic" +msgstr "1日周期のトラフィック" + +msgid "Graphs" +msgstr "グラフ" + +msgid "Hourly traffic" +msgstr "1時間周期のトラフィック" + +msgid "Monitor selected interfaces" +msgstr "モニターするインターフェースを選択" + +msgid "Monthly traffic" +msgstr "1月周期のトラフィック" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"データベースが設定されていません。VnStat設定ページへ移動し、1つ以上のイン" +"ターフェースのモニタリングを有効にしてください。" + +msgid "Restart VnStat" +msgstr "VnStatを再起動" + +msgid "Summary display" +msgstr "サマリーを表示" + +msgid "Top 10 display" +msgstr "トップ10を表示" + +msgid "Update »" +msgstr "更新 »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "VnStat グラフ" + +msgid "VnStat Traffic Monitor" +msgstr "VnStatトラフィックモニタ" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStatは選択したインタフェースのネットワークトラフィックをロギングするLinuxの" +"トラフィックモニターです。" + +#~ msgid "The VnStat service has been restarted." +#~ msgstr "VnStatサービスは再起動しました。" diff --git a/feeds/luci/applications/luci-app-vnstat/po/ms/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/ms/vnstat.po new file mode 100644 index 0000000..04590ea --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/ms/vnstat.po @@ -0,0 +1,59 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2010-11-16 20:54+0100\n" +"Last-Translator: \n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Configuration" +msgstr "" + +msgid "Daily traffic" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Hourly traffic" +msgstr "" + +msgid "Monitor selected interfaces" +msgstr "" + +msgid "Monthly traffic" +msgstr "" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" + +msgid "Restart VnStat" +msgstr "" + +msgid "Summary display" +msgstr "" + +msgid "Top 10 display" +msgstr "" + +msgid "Update »" +msgstr "" + +msgid "VnStat" +msgstr "" + +msgid "VnStat Graphs" +msgstr "" + +msgid "VnStat Traffic Monitor" +msgstr "" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" diff --git a/feeds/luci/applications/luci-app-vnstat/po/no/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/no/vnstat.po new file mode 100644 index 0000000..c1e94d2 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/no/vnstat.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Configuration" +msgstr "Konfigurasjon" + +msgid "Daily traffic" +msgstr "Trafikk hver dag" + +msgid "Graphs" +msgstr "Grafer" + +msgid "Hourly traffic" +msgstr "Trafikk hver time" + +msgid "Monitor selected interfaces" +msgstr "Overvåk valgte grensesnitt" + +msgid "Monthly traffic" +msgstr "Trafikk hver måned" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Ingen database har blitt satt opp ennå. Gå til VnStat konfigurasjonen og " +"aktiver overvåking for ett eller flere grensesnitt." + +msgid "Restart VnStat" +msgstr "Omstart VnStat" + +msgid "Summary display" +msgstr "Visning av sammendrag" + +msgid "Top 10 display" +msgstr "Top 10 visning" + +msgid "Update »" +msgstr "Oppdater »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "VnStat Grafer" + +msgid "VnStat Traffic Monitor" +msgstr "VnStat Trafikk Monitor" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStat er en nettverks trafikk monitor for Linux som loggfører " +"nettverks trafikk for de valgte grensesnitt." diff --git a/feeds/luci/applications/luci-app-vnstat/po/pl/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/pl/vnstat.po new file mode 100644 index 0000000..5b0d8b0 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/pl/vnstat.po @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-09-20 12:21+0200\n" +"Last-Translator: Michał \n" +"Language-Team: German\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Configuration" +msgstr "Konfiguracja" + +msgid "Daily traffic" +msgstr "Obciążenie dzienne" + +msgid "Graphs" +msgstr "Wykresy" + +msgid "Hourly traffic" +msgstr "Obciążenie godzinowe" + +msgid "Monitor selected interfaces" +msgstr "Monitoruj wybrane interfejsy" + +msgid "Monthly traffic" +msgstr "Obciążenie miesięczne" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Nie ustawiono żadnej bazy danych. Idź do konfiguracji VnStat i włącz " +"monitorowanie dla jednego lub więcej interfejsów." + +msgid "Restart VnStat" +msgstr "Restartuj VnStat" + +msgid "Summary display" +msgstr "Podsumowanie" + +msgid "Top 10 display" +msgstr "TOP 10" + +msgid "Update »" +msgstr "Aktualizuj »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Wykresy VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Monitor obciążenia VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStat to aplikacja monitorująca ruch sieciowy w Linuxie, który utrzymuje " +"loga ruchu sieciowego dla określonych interfejsów." + +#~ msgid "The VnStat service has been restarted." +#~ msgstr "Usługa VnStat została uruchomiona ponownie." diff --git a/feeds/luci/applications/luci-app-vnstat/po/pt-br/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/pt-br/vnstat.po new file mode 100644 index 0000000..47cf09a --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/pt-br/vnstat.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-11 21:02+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: German\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Configuration" +msgstr "Configuração" + +msgid "Daily traffic" +msgstr "Tráfego diário" + +msgid "Graphs" +msgstr "Gráficos" + +msgid "Hourly traffic" +msgstr "Tráfego horário" + +msgid "Monitor selected interfaces" +msgstr "Monitore as interfaces selecionadas" + +msgid "Monthly traffic" +msgstr "Tráfego mensal" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Ainda nenhum banco de dados foi definido. Vá para a configuração do VnStat " +"ehabilite o monitoramento para um ou mais interfaces." + +msgid "Restart VnStat" +msgstr "Reiniciar VnStat" + +msgid "Summary display" +msgstr "Tela de resumo" + +msgid "Top 10 display" +msgstr "Tela dos 10 mais" + +msgid "Update »" +msgstr "Atualizar »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Gráficos VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Monitor de Tráfego VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStat é um monitor de tráfego de rede para Linux que mantém um registro do " +"tráfego para a(s) interface(s) selecionada(s)." + +#~ msgid "The VnStat service has been restarted." +#~ msgstr "O serviço VnStat foi reiniciado." diff --git a/feeds/luci/applications/luci-app-vnstat/po/pt/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/pt/vnstat.po new file mode 100644 index 0000000..7297890 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/pt/vnstat.po @@ -0,0 +1,65 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-05-31 16:25+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: German\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configuration" +msgstr "Configuração" + +msgid "Daily traffic" +msgstr "Tráfego Diário" + +msgid "Graphs" +msgstr "Gráficos" + +msgid "Hourly traffic" +msgstr "Tráfego por hora" + +msgid "Monitor selected interfaces" +msgstr "Monitorizar as interfaces selecionadas" + +msgid "Monthly traffic" +msgstr "Tráfego mensal" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Ainda não foi configurada uma base de dados. Vá até à configuração do VnStat " +"e ative a monitorização para uma ou mais interfaces." + +msgid "Restart VnStat" +msgstr "Reiniciar VnStat" + +msgid "Summary display" +msgstr "Mostrar resumo" + +msgid "Top 10 display" +msgstr "Mostrar Top 10" + +msgid "Update »" +msgstr "Atualizar »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Gráficos VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Monitor de Tráfego VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"O VnStat é um monitor de tráfego para Linux que mantêm um registo do tráfego " +"para as interface (s) selecionadas." diff --git a/feeds/luci/applications/luci-app-vnstat/po/ro/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/ro/vnstat.po new file mode 100644 index 0000000..093182b --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/ro/vnstat.po @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-07 16:01+0200\n" +"Last-Translator: Daniel \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Configuration" +msgstr "Configurare" + +msgid "Daily traffic" +msgstr "Trafic zilnic" + +msgid "Graphs" +msgstr "Grafice" + +msgid "Hourly traffic" +msgstr "Trafic la fiecare ora" + +msgid "Monitor selected interfaces" +msgstr "Monitorizeaza interfetele selectate" + +msgid "Monthly traffic" +msgstr "Trafic lunar" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Nu a fost setata nici o baza de date. La configurarea VnStat se poate activa " +"monitoriza pentru una sau mai multe interfete." + +msgid "Restart VnStat" +msgstr "Restarteaza VnStat" + +msgid "Summary display" +msgstr "Afiseaza sumarul" + +msgid "Top 10 display" +msgstr "Afiseaza top 10" + +msgid "Update »" +msgstr "Updateaza »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Graficele VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Monitorul de trafic VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"Vnstat este un monitor de retea ce pastreaza detalii legate de traficul pe " +"interfetele selectate." + +#~ msgid "The VnStat service has been restarted." +#~ msgstr "Serviciul VnStat a fost restartat." diff --git a/feeds/luci/applications/luci-app-vnstat/po/ru/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/ru/vnstat.po new file mode 100644 index 0000000..5254ca1 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/ru/vnstat.po @@ -0,0 +1,71 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: vnstat\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-08-15 11:48+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Configuration" +msgstr "Конфигурация" + +msgid "Daily traffic" +msgstr "Трафик за день" + +msgid "Graphs" +msgstr "Графики" + +msgid "Hourly traffic" +msgstr "Трафик за час" + +msgid "Monitor selected interfaces" +msgstr "Собирать статистику на выбранных интерфейсах" + +msgid "Monthly traffic" +msgstr "Трафик за месяц" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"База данных не настроена. Перейдите в конфигурацию и укажите интерфейсы для " +"сбора статистики." + +msgid "Restart VnStat" +msgstr "Перезапустить VnStat" + +msgid "Summary display" +msgstr "Сводная статистика" + +msgid "Top 10 display" +msgstr "Последние 10" + +msgid "Update »" +msgstr "Обновить »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Графики VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Монитор трафика VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStat - монитор сетевого трафика для Linux, собирающий статистику по " +"выбранным интерфейсам." + +#~ msgid "The VnStat service has been restarted." +#~ msgstr "VnStat сервис перезапущен." diff --git a/feeds/luci/applications/luci-app-vnstat/po/sk/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/sk/vnstat.po new file mode 100644 index 0000000..5926ecf --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/sk/vnstat.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Configuration" +msgstr "" + +msgid "Daily traffic" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Hourly traffic" +msgstr "" + +msgid "Monitor selected interfaces" +msgstr "" + +msgid "Monthly traffic" +msgstr "" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" + +msgid "Restart VnStat" +msgstr "" + +msgid "Summary display" +msgstr "" + +msgid "Top 10 display" +msgstr "" + +msgid "Update »" +msgstr "" + +msgid "VnStat" +msgstr "" + +msgid "VnStat Graphs" +msgstr "" + +msgid "VnStat Traffic Monitor" +msgstr "" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" diff --git a/feeds/luci/applications/luci-app-vnstat/po/sv/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/sv/vnstat.po new file mode 100644 index 0000000..30f2cef --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/sv/vnstat.po @@ -0,0 +1,61 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Configuration" +msgstr "Konfiguration" + +msgid "Daily traffic" +msgstr "Daglig traffik" + +msgid "Graphs" +msgstr "Grafer" + +msgid "Hourly traffic" +msgstr "Trafik per timma" + +msgid "Monitor selected interfaces" +msgstr "Bevaka valda gränssnitt" + +msgid "Monthly traffic" +msgstr "Trafik per månad" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Det har inte ställts in någon databas ännu. Gå till VnStat-konfigurationen " +"och aktivera övervakning av en eller fler gränssnitt." + +msgid "Restart VnStat" +msgstr "Starta om VnStat" + +msgid "Summary display" +msgstr "" + +msgid "Top 10 display" +msgstr "" + +msgid "Update »" +msgstr "Uppdatera »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Grafer för VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Trafik-bevakare för VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" diff --git a/feeds/luci/applications/luci-app-vnstat/po/templates/vnstat.pot b/feeds/luci/applications/luci-app-vnstat/po/templates/vnstat.pot new file mode 100644 index 0000000..4dccf05 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/templates/vnstat.pot @@ -0,0 +1,51 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Configuration" +msgstr "" + +msgid "Daily traffic" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Hourly traffic" +msgstr "" + +msgid "Monitor selected interfaces" +msgstr "" + +msgid "Monthly traffic" +msgstr "" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" + +msgid "Restart VnStat" +msgstr "" + +msgid "Summary display" +msgstr "" + +msgid "Top 10 display" +msgstr "" + +msgid "Update »" +msgstr "" + +msgid "VnStat" +msgstr "" + +msgid "VnStat Graphs" +msgstr "" + +msgid "VnStat Traffic Monitor" +msgstr "" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" diff --git a/feeds/luci/applications/luci-app-vnstat/po/tr/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/tr/vnstat.po new file mode 100644 index 0000000..5e001c9 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/tr/vnstat.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Configuration" +msgstr "" + +msgid "Daily traffic" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Hourly traffic" +msgstr "" + +msgid "Monitor selected interfaces" +msgstr "" + +msgid "Monthly traffic" +msgstr "" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" + +msgid "Restart VnStat" +msgstr "" + +msgid "Summary display" +msgstr "" + +msgid "Top 10 display" +msgstr "" + +msgid "Update »" +msgstr "" + +msgid "VnStat" +msgstr "" + +msgid "VnStat Graphs" +msgstr "" + +msgid "VnStat Traffic Monitor" +msgstr "" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" diff --git a/feeds/luci/applications/luci-app-vnstat/po/uk/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/uk/vnstat.po new file mode 100644 index 0000000..5f9d257 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/uk/vnstat.po @@ -0,0 +1,67 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-13 15:33+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configuration" +msgstr "Конфігурація" + +msgid "Daily traffic" +msgstr "Список щоденного трафіку" + +msgid "Graphs" +msgstr "Графіки" + +msgid "Hourly traffic" +msgstr "Список погодинного трафіку" + +msgid "Monitor selected interfaces" +msgstr "Моніторинг обраних інтерфейсів" + +msgid "Monthly traffic" +msgstr "Список щомісячного трафіку" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" +"Не була створена база даних. Перейдіть до вкладки конфігурації VnStat та " +"увімкніть моніторинг для одного або декількох інтерфейсів." + +msgid "Restart VnStat" +msgstr "Перезапуск VnStat" + +#, fuzzy +msgid "Summary display" +msgstr "Загальна таблиця" + +msgid "Top 10 display" +msgstr "Список Топ-10" + +msgid "Update »" +msgstr "Оновлення »" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "Графіки VnStat" + +msgid "VnStat Traffic Monitor" +msgstr "Моніторінг трафіку VnStat" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" +"VnStat - монітор мережного трафіку для Linux, який веде журнал мережевого " +"трафіку для обраного інтерфейсу або декількох інтерфейсів." diff --git a/feeds/luci/applications/luci-app-vnstat/po/vi/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/vi/vnstat.po new file mode 100644 index 0000000..0303835 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/vi/vnstat.po @@ -0,0 +1,59 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2010-11-16 20:55+0100\n" +"Last-Translator: \n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Configuration" +msgstr "" + +msgid "Daily traffic" +msgstr "" + +msgid "Graphs" +msgstr "" + +msgid "Hourly traffic" +msgstr "" + +msgid "Monitor selected interfaces" +msgstr "" + +msgid "Monthly traffic" +msgstr "" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "" + +msgid "Restart VnStat" +msgstr "" + +msgid "Summary display" +msgstr "" + +msgid "Top 10 display" +msgstr "" + +msgid "Update »" +msgstr "" + +msgid "VnStat" +msgstr "" + +msgid "VnStat Graphs" +msgstr "" + +msgid "VnStat Traffic Monitor" +msgstr "" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "" diff --git a/feeds/luci/applications/luci-app-vnstat/po/zh-cn/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/zh-cn/vnstat.po new file mode 100644 index 0000000..68e4905 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/zh-cn/vnstat.po @@ -0,0 +1,61 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-08 14:05+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: German\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configuration" +msgstr "配置" + +msgid "Daily traffic" +msgstr "流量日报" + +msgid "Graphs" +msgstr "图表" + +msgid "Hourly traffic" +msgstr "流量时报" + +msgid "Monitor selected interfaces" +msgstr "监控选择的接口" + +msgid "Monthly traffic" +msgstr "流量月报" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "没有创建统计数据。 去VnStat配置,并启动监控一个或多个接口。" + +msgid "Restart VnStat" +msgstr "重置VnStat" + +msgid "Summary display" +msgstr "摘要显示" + +msgid "Top 10 display" +msgstr "显示前10" + +msgid "Update »" +msgstr "更新" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "VnStat图表" + +msgid "VnStat Traffic Monitor" +msgstr "VNStat流量监控" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr "vnstat是一个网络流量监控器,用于Linux保留所选接口的网络流量日志。" diff --git a/feeds/luci/applications/luci-app-vnstat/po/zh-tw/vnstat.po b/feeds/luci/applications/luci-app-vnstat/po/zh-tw/vnstat.po new file mode 100644 index 0000000..261747a --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/po/zh-tw/vnstat.po @@ -0,0 +1,61 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 10:52+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Configuration" +msgstr "設定" + +msgid "Daily traffic" +msgstr "每日流量" + +msgid "Graphs" +msgstr "圖表" + +msgid "Hourly traffic" +msgstr "每小時流量" + +msgid "Monitor selected interfaces" +msgstr "監控選到的介面" + +msgid "Monthly traffic" +msgstr "每月流量" + +msgid "" +"No database has been set up yet. Go to the VnStat configuration and enable " +"monitoring for one or more interfaces." +msgstr "尚無任何資料庫被設定. 進入VnStat針對某一個或多個介面設定並啟用監視." + +msgid "Restart VnStat" +msgstr "從新啟動 VnStat" + +msgid "Summary display" +msgstr "顯示概要" + +msgid "Top 10 display" +msgstr "顯示前10名" + +msgid "Update »" +msgstr "更新" + +msgid "VnStat" +msgstr "VnStat" + +msgid "VnStat Graphs" +msgstr "VnStat圖表" + +msgid "VnStat Traffic Monitor" +msgstr "VnStat流量監視" + +msgid "" +"VnStat is a network traffic monitor for Linux that keeps a log of network " +"traffic for the selected interface(s)." +msgstr " VnStat是一個針對Linux上的網路流量監視可達到保存特定介面的流量紀錄" diff --git a/feeds/luci/applications/luci-app-vnstat/root/etc/uci-defaults/40_luci-vnstat b/feeds/luci/applications/luci-app-vnstat/root/etc/uci-defaults/40_luci-vnstat new file mode 100755 index 0000000..fa204b3 --- /dev/null +++ b/feeds/luci/applications/luci-app-vnstat/root/etc/uci-defaults/40_luci-vnstat @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@vnstat[-1] + add ucitrack vnstat + set ucitrack.@vnstat[-1].init=vnstat + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-voice-core/Makefile b/feeds/luci/applications/luci-app-voice-core/Makefile new file mode 100644 index 0000000..32c476c --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Voice Software (Core) +LUCI_DEPENDS:=@BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-voice-core/luasrc/controller/luci_voice.lua b/feeds/luci/applications/luci-app-voice-core/luasrc/controller/luci_voice.lua new file mode 100644 index 0000000..b37018d --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/luasrc/controller/luci_voice.lua @@ -0,0 +1,21 @@ +-- Copyright 2009 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.luci_voice", package.seeall) + +function index() + local e + + e = entry({"admin", "voice"}, template("luci_voice/index") , _("Voice"), 90) + e.index = true + + e = entry({"mini", "voice"}, template("luci_voice/index"), _("Voice"), 90) + e.index = true + + e = entry({"mini", "voice", "phones"}, template("luci_voice/phone_index"), _("Phones"), 90) + e.index = true + + e = entry({"admin", "voice", "phones"}, template("luci_voice/phone_index"), _("Phones"), 90) + e.index = true + +end diff --git a/feeds/luci/applications/luci-app-voice-core/luasrc/view/luci_voice/index.htm b/feeds/luci/applications/luci-app-voice-core/luasrc/view/luci_voice/index.htm new file mode 100644 index 0000000..e14862e --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/luasrc/view/luci_voice/index.htm @@ -0,0 +1,16 @@ +<%# + Copyright 2009 Daniel Dickinson + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

Voice

+

Here you can control OpenWRT voice-related settings and see + voice-related information from OpenWRT

+

In particular Asterisk configuration and information is displayed + here, as well as diagnostics that specifically apply to voice but are + not general networking diagnostics (e.g. includes SIP device scans, but not + ping tests). Includes PSTN phones as well as VoIP and possibly + non-telephony related options. +

+<%+footer%> diff --git a/feeds/luci/applications/luci-app-voice-core/luasrc/view/luci_voice/phone_index.htm b/feeds/luci/applications/luci-app-voice-core/luasrc/view/luci_voice/phone_index.htm new file mode 100644 index 0000000..c4466cb --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/luasrc/view/luci_voice/phone_index.htm @@ -0,0 +1,12 @@ +<%# + Copyright 2009 Daniel Dickinson + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

Phones

+

Here you can control phone configuration and information in OpenWRT

+

You can control the setup of phone clients and servers and see + information such as diagnostics related to phone devices from this menu. +

+<%+footer%> diff --git a/feeds/luci/applications/luci-app-voice-core/po/ca/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/ca/voice_core.po new file mode 100644 index 0000000..0686209 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/ca/voice_core.po @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-29 01:58+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Telèfons" + +msgid "Voice" +msgstr "Veu" diff --git a/feeds/luci/applications/luci-app-voice-core/po/cs/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/cs/voice_core.po new file mode 100644 index 0000000..e4eae35 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/cs/voice_core.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-29 21:47+0200\n" +"Last-Translator: Astran \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Telefony" + +msgid "Voice" +msgstr "Hlas" + +#~ msgid "l_v_adminphones" +#~ msgstr "Telefony" diff --git a/feeds/luci/applications/luci-app-voice-core/po/de/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/de/voice_core.po new file mode 100644 index 0000000..2a03b63 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/de/voice_core.po @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-28 22:20+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Telefone" + +msgid "Voice" +msgstr "Sprache" diff --git a/feeds/luci/applications/luci-app-voice-core/po/el/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/el/voice_core.po new file mode 100644 index 0000000..01abb41 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/el/voice_core.po @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-02-16 19:15+0200\n" +"Last-Translator: Jinxcat \n" +"Language-Team: none\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Phones" +msgstr "Τηλέφωνα" + +msgid "Voice" +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-core/po/en/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/en/voice_core.po new file mode 100644 index 0000000..297f873 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/en/voice_core.po @@ -0,0 +1,23 @@ +# Voice Core. +# Copyright (C) 2009 Daniel Dickinson +# Daniel Dickinson , 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2009-07-16 22:19-0400\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Phones" +msgstr "Phones" + +msgid "Voice" +msgstr "" + +#~ msgid "l_v_adminphones" +#~ msgstr "Phones" diff --git a/feeds/luci/applications/luci-app-voice-core/po/es/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/es/voice_core.po new file mode 100644 index 0000000..74e2c23 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/es/voice_core.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-07-28 23:17+0200\n" +"Last-Translator: Daniel \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Teléfonos" + +msgid "Voice" +msgstr "Voz" + +#~ msgid "l_v_adminphones" +#~ msgstr "l_v_adminphones" diff --git a/feeds/luci/applications/luci-app-voice-core/po/fr/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/fr/voice_core.po new file mode 100644 index 0000000..71ef062 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/fr/voice_core.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-11-06 16:09+0200\n" +"Last-Translator: hogsim \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Téléphones" + +msgid "Voice" +msgstr "Voix" + +#~ msgid "l_v_adminphones" +#~ msgstr "Téléphones" diff --git a/feeds/luci/applications/luci-app-voice-core/po/he/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/he/voice_core.po new file mode 100644 index 0000000..74440e3 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/he/voice_core.po @@ -0,0 +1,22 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-10 03:44+0200\n" +"Last-Translator: Snoof \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "טלפונים" + +msgid "Voice" +msgstr "קול" + +# מה בדיוק מתרגמים כאן? אם זה phones אז התרגום הוא טלפונים. אם זה l_v_adminphones אז זה מונח טכני וצריך להשאיר אותו ללא שינוי +#~ msgid "l_v_adminphones" +#~ msgstr "טלפונים" diff --git a/feeds/luci/applications/luci-app-voice-core/po/hu/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/hu/voice_core.po new file mode 100644 index 0000000..07eaa14 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/hu/voice_core.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-01 09:34+0200\n" +"Last-Translator: juhosg \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Phones" +msgstr "Telefonok" + +msgid "Voice" +msgstr "Hang" + +#~ msgid "l_v_adminphones" +#~ msgstr "l_v_adminphones" diff --git a/feeds/luci/applications/luci-app-voice-core/po/it/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/it/voice_core.po new file mode 100644 index 0000000..4d22ff0 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/it/voice_core.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-02-03 14:00+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Telefoni" + +msgid "Voice" +msgstr "Voce" + +#~ msgid "l_v_adminphones" +#~ msgstr "l_v_adminphones" diff --git a/feeds/luci/applications/luci-app-voice-core/po/ja/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/ja/voice_core.po new file mode 100644 index 0000000..c7e60e2 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/ja/voice_core.po @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Phones" +msgstr "電話" + +msgid "Voice" +msgstr "" + +#~ msgid "l_v_adminphones" +#~ msgstr "l_v_adminphones" diff --git a/feeds/luci/applications/luci-app-voice-core/po/ms/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/ms/voice_core.po new file mode 100644 index 0000000..a866bec --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/ms/voice_core.po @@ -0,0 +1,14 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Phones" +msgstr "" + +msgid "Voice" +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-core/po/no/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/no/voice_core.po new file mode 100644 index 0000000..a0149da --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/no/voice_core.po @@ -0,0 +1,14 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Phones" +msgstr "Telefoner" + +msgid "Voice" +msgstr "Voice" + +#~ msgid "l_v_adminphones" +#~ msgstr "Admin Telefoner" diff --git a/feeds/luci/applications/luci-app-voice-core/po/pl/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/pl/voice_core.po new file mode 100644 index 0000000..39950f8 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/pl/voice_core.po @@ -0,0 +1,22 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-08-24 07:03+0200\n" +"Last-Translator: goodgod261 \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Telefony" + +msgid "Voice" +msgstr "Głos" + +#~ msgid "l_v_adminphones" +#~ msgstr "l_v_adminphones" diff --git a/feeds/luci/applications/luci-app-voice-core/po/pt-br/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/pt-br/voice_core.po new file mode 100644 index 0000000..18cab72 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/pt-br/voice_core.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-07-05 06:44+0200\n" +"Last-Translator: rafaelff1 \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Telefones" + +msgid "Voice" +msgstr "Voz" + +#~ msgid "l_v_adminphones" +#~ msgstr "l_v_adminphones" diff --git a/feeds/luci/applications/luci-app-voice-core/po/pt/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/pt/voice_core.po new file mode 100644 index 0000000..07d6093 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/pt/voice_core.po @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-05-01 00:34+0200\n" +"Last-Translator: pedromrgoncalves \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Telefones" + +msgid "Voice" +msgstr "Voz" diff --git a/feeds/luci/applications/luci-app-voice-core/po/ro/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/ro/voice_core.po new file mode 100644 index 0000000..1776a51 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/ro/voice_core.po @@ -0,0 +1,22 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-09-25 19:14+0200\n" +"Last-Translator: Mihai \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Telefoane" + +msgid "Voice" +msgstr "Voce" + +#~ msgid "l_v_adminphones" +#~ msgstr "l_v_adminphones" diff --git a/feeds/luci/applications/luci-app-voice-core/po/ru/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/ru/voice_core.po new file mode 100644 index 0000000..b6631df --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/ru/voice_core.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: voice_core\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-08-15 11:23+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Phones" +msgstr "Телефоны" + +msgid "Voice" +msgstr "Голос" + +#~ msgid "l_v_adminphones" +#~ msgstr "l_v_adminphones" diff --git a/feeds/luci/applications/luci-app-voice-core/po/sk/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/sk/voice_core.po new file mode 100644 index 0000000..9c30581 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/sk/voice_core.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Phones" +msgstr "" + +msgid "Voice" +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-core/po/sv/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/sv/voice_core.po new file mode 100644 index 0000000..803726a --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/sv/voice_core.po @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-04-28 06:14+0200\n" +"Last-Translator: Umeaboy \n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Telefoner" + +msgid "Voice" +msgstr "Röst" diff --git a/feeds/luci/applications/luci-app-voice-core/po/templates/voice_core.pot b/feeds/luci/applications/luci-app-voice-core/po/templates/voice_core.pot new file mode 100644 index 0000000..64c93eb --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/templates/voice_core.pot @@ -0,0 +1,8 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Phones" +msgstr "" + +msgid "Voice" +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-core/po/tr/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/tr/voice_core.po new file mode 100644 index 0000000..642538e --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/tr/voice_core.po @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-10-11 22:25+0200\n" +"Last-Translator: vincenzo \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Telefonlar" + +msgid "Voice" +msgstr "Ses" diff --git a/feeds/luci/applications/luci-app-voice-core/po/uk/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/uk/voice_core.po new file mode 100644 index 0000000..4886d72 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/uk/voice_core.po @@ -0,0 +1,22 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-12-29 12:56+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "Телефони" + +msgid "Voice" +msgstr "Голос" + +#~ msgid "l_v_adminphones" +#~ msgstr "l_v_adminphones" diff --git a/feeds/luci/applications/luci-app-voice-core/po/vi/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/vi/voice_core.po new file mode 100644 index 0000000..3e45434 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/vi/voice_core.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Phones" +msgstr "" + +msgid "Voice" +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-core/po/zh-cn/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/zh-cn/voice_core.po new file mode 100644 index 0000000..0978889 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/zh-cn/voice_core.po @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-08 13:41+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "话机" + +msgid "Voice" +msgstr "语音" diff --git a/feeds/luci/applications/luci-app-voice-core/po/zh-tw/voice_core.po b/feeds/luci/applications/luci-app-voice-core/po/zh-tw/voice_core.po new file mode 100644 index 0000000..e1bbf7a --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-core/po/zh-tw/voice_core.po @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 10:41+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Phones" +msgstr "電話" + +msgid "Voice" +msgstr "語音" diff --git a/feeds/luci/applications/luci-app-voice-diag/Makefile b/feeds/luci/applications/luci-app-voice-diag/Makefile new file mode 100644 index 0000000..2d47918 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Voice Software (Diagnostics) +LUCI_DEPENDS:=+luci-app-diag-devinfo @BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-voice-diag/luasrc/controller/luci_voice/luci_voice_diag.lua b/feeds/luci/applications/luci-app-voice-diag/luasrc/controller/luci_voice/luci_voice_diag.lua new file mode 100644 index 0000000..16a79d9 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/luasrc/controller/luci_voice/luci_voice_diag.lua @@ -0,0 +1,12 @@ +-- Copyright 2009 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.luci_voice.luci_voice_diag", package.seeall) + +function index() + local e + + e = entry({"admin", "voice", "diag"}, template("luci_voice/diag_index"), _("Diagnostics"), 90) + e.index = true + e.dependent = true +end diff --git a/feeds/luci/applications/luci-app-voice-diag/luasrc/view/luci_voice/diag_index.htm b/feeds/luci/applications/luci-app-voice-diag/luasrc/view/luci_voice/diag_index.htm new file mode 100644 index 0000000..e324fab --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/luasrc/view/luci_voice/diag_index.htm @@ -0,0 +1,10 @@ +<%# + Copyright 2009 Daniel Dickinson + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

<%:Diagnostics%>

+

<%:Under this menu are options that allow you to configure and perform tests on the voice operations of your system. These are known as diagnostics.%>

+

<%:The diagnostics available on your device depend on the modules that you have installed.%>

+<%+footer%> diff --git a/feeds/luci/applications/luci-app-voice-diag/po/ca/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/ca/voice_diag.po new file mode 100644 index 0000000..0396100 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/ca/voice_diag.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-29 02:00+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Diagnostics" +msgstr "Diagnòstics" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Els diagnòstics disponibles en el vostre dispositiu depenen dels mòduls que " +"teniu instal·lats." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"En aquest menú estan opcions que us permeten configurar i realitzar proves " +"en les operacions de veu del vostre sistema. Aquestes es coneixen com " +"diagnòstics." diff --git a/feeds/luci/applications/luci-app-voice-diag/po/cs/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/cs/voice_diag.po new file mode 100644 index 0000000..4939d20 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/cs/voice_diag.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Diagnostics" +msgstr "Diagnostika" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Diagnostiky, dostupné na vašem zařízení, závisí na modulech, které máte " +"nainstalovány." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"Pod tímto menu se nachází možnosti, které vám umožní nastavovat a provádět " +"testy hlasových operací vašeho systému. Tyto jsou známy pod názvem " +"diagnostika." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "Diagnostika" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/de/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/de/voice_diag.po new file mode 100644 index 0000000..f60dc08 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/de/voice_diag.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-09-08 15:21+0200\n" +"Last-Translator: Manuel \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Diagnostics" +msgstr "Diagnose" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Welche Diagnosetools auf diesem System verfügbar sind hängt davon ab, welche " +"Module installiert sind." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"Unter diesem Menüpunkt können Diagnosetools für sprachbezogene Dienste " +"konfiguriert und ausgeführt werden." diff --git a/feeds/luci/applications/luci-app-voice-diag/po/el/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/el/voice_diag.po new file mode 100644 index 0000000..4ff4f86 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/el/voice_diag.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-03-18 17:15+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: none\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Diagnostics" +msgstr "Διαγνωστικά" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Τα διαγνωστικά που είναι διαθέσιμα για την συσκευή σας, εξαρτώνται από τα " +"αρθρώματα που έχετε εγκατεστημένα." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"Κάτω από αυτό το μενού βρίσκονται επιλογές που σας επιτρέπουν να " +"παραμετροποιήσετε και να πραγματοποιήσετε δοκιμές στις φωνητικές λειτουργίες " +"του συστήματός σας. Είναι γνωστές ως διαγνωστικά." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "l_v_d_admindiag" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/en/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/en/voice_diag.po new file mode 100644 index 0000000..12bb459 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/en/voice_diag.po @@ -0,0 +1,34 @@ +# Voice Diagnostics. +# Copyright (C) 2009 Daniel Dickinson +# Daniel Dickinson , 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2009-07-16 22:26-0400\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Diagnostics" +msgstr "Diagnostics" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"The diagnostics available on your device depend on the modules that you have " +"installed." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "Diagnostics" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/es/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/es/voice_diag.po new file mode 100644 index 0000000..f2f4da2 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/es/voice_diag.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-16 00:58+0200\n" +"Last-Translator: Jose \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Diagnostics" +msgstr "Diagnósticos" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Los tipos de diagnósticos disponibles en el dispositivo dependen de los " +"módulos que ha instalado." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"En este menú hay opciones que permite realizar pruebas de configuración y " +"funcionamiento de las operaciones de voz en su sistema. Estas opciones se " +"conocen como diagósticos." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "l_v_d_admindiag" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/fr/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/fr/voice_diag.po new file mode 100644 index 0000000..c550f06 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/fr/voice_diag.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-01-15 07:08+0200\n" +"Last-Translator: desillu \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Diagnostics" +msgstr "Diagnostics" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Les diagnostics disponibles pour votre périphérique dépendent des modules " +"que vous avez installé." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"Ce menu contient des options vous permettant de configurer et lancer des " +"tests sur les fonctions vocales de votre système. Ils sont nommés " +"diagnostics." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "l_v_d_admindiag" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/he/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/he/voice_diag.po new file mode 100644 index 0000000..3cd1c9f --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/he/voice_diag.po @@ -0,0 +1,22 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/hu/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/hu/voice_diag.po new file mode 100644 index 0000000..79d2379 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/hu/voice_diag.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Diagnostics" +msgstr "Diagnosztika" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Az eszközön elérhető diagnosztikai lehetőségek a telepített összetevőktől " +"függenek." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"Ez alatt a menüpont alatt olyan lehetőségek vannak, amelyek lehetővé teszik, " +"hogy beállítsa és tesztelje az eszköz hangrendszerének a működését. Ezek " +"diagnosztikaként ismertek." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "l_v_d_admindiag" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/it/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/it/voice_diag.po new file mode 100644 index 0000000..620aedf --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/it/voice_diag.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-02-03 14:13+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Diagnostics" +msgstr "Diagnostiche" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Le funzioni di diagnostica disponibili sul dispositivo dipendono i moduli " +"che sono stati installati." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"In questo menu ci sono delle opzioni che consentono di configurare ed " +"eseguire test sulle operazioni vocali del sistema. Questi sono noti come " +"diagnostica." diff --git a/feeds/luci/applications/luci-app-voice-diag/po/ja/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/ja/voice_diag.po new file mode 100644 index 0000000..715f411 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/ja/voice_diag.po @@ -0,0 +1,22 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/ms/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/ms/voice_diag.po new file mode 100644 index 0000000..bf65c14 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/ms/voice_diag.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/no/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/no/voice_diag.po new file mode 100644 index 0000000..de7aaf2 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/no/voice_diag.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Diagnostics" +msgstr "Diagnostikk" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Diagnostikk tilgjengelig på denne enheten avhenger av hvilken moduler som er " +"installert." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"Under denne meny finner du instillinger som gjør det mulig å konfigurere og " +"utføre 'Voice' operasjoner på systemet ditt. Dette er kjent som diagnostikk." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "Administrasjon Diagnostikk" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/pl/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/pl/voice_diag.po new file mode 100644 index 0000000..cb19e22 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/pl/voice_diag.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-09-20 12:16+0200\n" +"Last-Translator: Michał \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Diagnostics" +msgstr "Diagnostyka" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Diagnostyka dostępna na Twoim urządzeniu zależna jest od zainstalowanych " +"modułów." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"To menu zawiera opcje pozwalające na konfiguracje i testowanie operacji " +"głosowych w Twoim systemie. Opcje te nazwamy Diagnostyką." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "l_v_d_admindiag" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/pt-br/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/pt-br/voice_diag.po new file mode 100644 index 0000000..c5d426d --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/pt-br/voice_diag.po @@ -0,0 +1,32 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-11 20:31+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Diagnostics" +msgstr "Diagnósticos" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Os diagnósticos disponíveis em seu dispositivo dependem dos módulos que você " +"instalou." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"Neste menu existem opções que permite a configuração e execução de testes " +"nas operações de voz em seu sistema. Estas são conhecidas como diagósticos." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "l_v_d_admindiag" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/pt/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/pt/voice_diag.po new file mode 100644 index 0000000..5162c84 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/pt/voice_diag.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-06-01 00:00+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Diagnostics" +msgstr "Diagnósticos" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Os diagnósticos disponiveis no dispositivo dependem dos módulos que tem " +"instalados." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"Neste menu há opções que lhe permitem configurar e executar testes nas " +"operações de voz do seu sistema. Estes são conhecidos como diagnósticos." diff --git a/feeds/luci/applications/luci-app-voice-diag/po/ro/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/ro/voice_diag.po new file mode 100644 index 0000000..e6ee682 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/ro/voice_diag.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2011-10-07 16:50+0200\n" +"Last-Translator: Daniel \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Diagnostics" +msgstr "Diagnosticuri" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Diagnosticurile disponibile pe dispozitivul tau depind de modulele instalate." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"In acest menu sunt optiuni care-ti permit sa configurezi si sa testezi " +"diferite operatiuni de voce pe sistemul tau. Acestea sunt denumite " +"diagnostice." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "l_v_d_admindiag" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/ru/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/ru/voice_diag.po new file mode 100644 index 0000000..5c98de0 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/ru/voice_diag.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: voice_diag\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-08-15 11:22+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Diagnostics" +msgstr "Диагностика" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "Доступные виды диагностики зависят от установленных модулей." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"В данном меню содержатся опции, которые позволяют вам протестировать " +"голосовые службы вашей системы. Это известно как \"диагностика\"." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "l_v_d_admindiag" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/sk/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/sk/voice_diag.po new file mode 100644 index 0000000..874e11f --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/sk/voice_diag.po @@ -0,0 +1,22 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/sv/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/sv/voice_diag.po new file mode 100644 index 0000000..4f99757 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/sv/voice_diag.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Diagnostics" +msgstr "Diagnostik" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Den tillgängliga diagnostiken i din enhet är beroende av modulerna som du " +"har installerat." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"Under den här menyn så finns det alternativ som gör att du kan ställa in och " +"utföra tester på röstverksamheten i ditt system. Dessa kallas diagnostik." diff --git a/feeds/luci/applications/luci-app-voice-diag/po/templates/voice_diag.pot b/feeds/luci/applications/luci-app-voice-diag/po/templates/voice_diag.pot new file mode 100644 index 0000000..ba28b45 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/templates/voice_diag.pot @@ -0,0 +1,15 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/tr/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/tr/voice_diag.po new file mode 100644 index 0000000..715f411 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/tr/voice_diag.po @@ -0,0 +1,22 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/uk/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/uk/voice_diag.po new file mode 100644 index 0000000..60c55ba --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/uk/voice_diag.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-28 22:05+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Diagnostics" +msgstr "Діагностика" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" +"Доступність засобів діагностики визначається модулями, які ви встановили." + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" +"Це меню містить опції, які дають вам змогу сконфігурувати й виконати " +"тестування голосових функцій вашої системи. Інша їх назва - засоби " +"діагностики." + +#~ msgid "l_v_d_admindiag" +#~ msgstr "l_v_d_admindiag" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/vi/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/vi/voice_diag.po new file mode 100644 index 0000000..715f411 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/vi/voice_diag.po @@ -0,0 +1,22 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Diagnostics" +msgstr "" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "" + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/zh-cn/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/zh-cn/voice_diag.po new file mode 100644 index 0000000..4bad894 --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/zh-cn/voice_diag.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-08 13:50+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Diagnostics" +msgstr "检测" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "检测您已在设备上安装的模块。" + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "菜单下的选项,允许您配置和执行语音相关的测试。这些动作称为检测。" diff --git a/feeds/luci/applications/luci-app-voice-diag/po/zh-tw/voice_diag.po b/feeds/luci/applications/luci-app-voice-diag/po/zh-tw/voice_diag.po new file mode 100644 index 0000000..5207a8b --- /dev/null +++ b/feeds/luci/applications/luci-app-voice-diag/po/zh-tw/voice_diag.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 10:45+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Diagnostics" +msgstr "診斷" + +msgid "" +"The diagnostics available on your device depend on the modules that you have " +"installed." +msgstr "能否診斷你的設備端看你已安裝的模組" + +msgid "" +"Under this menu are options that allow you to configure and perform tests on " +"the voice operations of your system. These are known as diagnostics." +msgstr "選單下有選項讓你能夠設定並執行測試你系統上的語音操作. 這些都是已知的診斷方法" diff --git a/feeds/luci/applications/luci-app-watchcat/Makefile b/feeds/luci/applications/luci-app-watchcat/Makefile new file mode 100644 index 0000000..7ad86c8 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for Watchcat +LUCI_DEPENDS:=+watchcat + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-watchcat/luasrc/controller/watchcat.lua b/feeds/luci/applications/luci-app-watchcat/luasrc/controller/watchcat.lua new file mode 100644 index 0000000..27d5b74 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/luasrc/controller/watchcat.lua @@ -0,0 +1,11 @@ +-- Copyright 2012 Christian Gagneraud +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.watchcat", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/system") then + return + end + entry({"admin", "services", "watchcat"}, cbi("watchcat/watchcat"), _("Watchcat"), 90) +end diff --git a/feeds/luci/applications/luci-app-watchcat/luasrc/model/cbi/watchcat/watchcat.lua b/feeds/luci/applications/luci-app-watchcat/luasrc/model/cbi/watchcat/watchcat.lua new file mode 100644 index 0000000..f64370b --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/luasrc/model/cbi/watchcat/watchcat.lua @@ -0,0 +1,53 @@ +-- Copyright 2012 Christian Gagneraud +-- Licensed to the public under the Apache License 2.0. + +m = Map("system", + translate("Watchcat"), + translate("Watchcat allows configuring a periodic reboot when the " .. + "Internet connection has been lost for a certain period of time." + )) + +s = m:section(TypedSection, "watchcat") +s.anonymous = true +s.addremove = true + +mode = s:option(ListValue, "mode", + translate("Operating mode")) +mode.default = "allways" +mode:value("ping", "Reboot on internet connection lost") +mode:value("allways", "Periodic reboot") + +forcedelay = s:option(Value, "forcedelay", + translate("Forced reboot delay"), + translate("When rebooting the system, the watchcat will trigger a soft reboot. " .. + "Entering a non zero value here will trigger a delayed hard reboot " .. + "if the soft reboot fails. Enter a number of seconds to enable, " .. + "use 0 to disable")) +forcedelay.datatype = "uinteger" +forcedelay.default = "0" + +period = s:option(Value, "period", + translate("Period"), + translate("In periodic mode, it defines the reboot period. " .. + "In internet mode, it defines the longest period of " .. + "time without internet access before a reboot is engaged." .. + "Default unit is seconds, you can use the " .. + "suffix 'm' for minutes, 'h' for hours or 'd' " .. + "for days")) + +pinghost = s:option(Value, "pinghosts", + translate("Ping host"), + translate("Host address to ping")) +pinghost.datatype = "host(1)" +pinghost.default = "8.8.8.8" +pinghost:depends({mode="ping"}) + +pingperiod = s:option(Value, "pingperiod", + translate("Ping period"), + translate("How often to check internet connection. " .. + "Default unit is seconds, you can you use the " .. + "suffix 'm' for minutes, 'h' for hours or 'd' " .. + "for days")) +pingperiod:depends({mode="ping"}) + +return m diff --git a/feeds/luci/applications/luci-app-watchcat/po/ca/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/ca/watchcat.po new file mode 100644 index 0000000..36e6405 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/ca/watchcat.po @@ -0,0 +1,71 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-07-01 05:59+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Forced reboot delay" +msgstr "Retard de reinici forçat" + +msgid "Host address to ping" +msgstr "Adreça de host per al ping" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"Quan sovint que es comprova la connexió a Internet. La unitat per defecte es " +"el segon, podeu utilitzar el sufix 'm' per minuts, 'h' per hores o 'd' per " +"dies." + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"En mode periòdic, defineix el període de reinici. En mode de Internet, " +"defineix el període més llarg sense accés al Internet abans que un reinici " +"es comença. La unitat per defecte es el segon, podeu podeu utilitzar el " +"sufix 'm' per minuts, 'h' per hores o 'd' per dies." + +msgid "Operating mode" +msgstr "Mode d'operació" + +msgid "Period" +msgstr "Període" + +msgid "Ping host" +msgstr "Host de ping" + +msgid "Ping period" +msgstr "Període de ping" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"El Watchcat permet la configuració d'un reinici periòdic o un reinici quan " +"la connexió d'Internet ha estat perdut fa un cert període de temps." + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"Al reiniciar el sistema, el Watchcat causarà un reinici suau. Introduïu un " +"valor diferent de zero causarà un reinici dur retardat si el reinici suau " +"falla. Introduïu un nombre de segons per a habilitar, utilitzeu 0 per a " +"inhabilitar." diff --git a/feeds/luci/applications/luci-app-watchcat/po/cs/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/cs/watchcat.po new file mode 100644 index 0000000..1bfd435 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/cs/watchcat.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-24 15:54+0200\n" +"Last-Translator: awm1 \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Forced reboot delay" +msgstr "Prodleva nuceného restartu" + +msgid "Host address to ping" +msgstr "Adresa zařízení, vůči kterému bude testování připojení (ping)" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"Perioda testování připojení; výchozí časovou jednotkou jsou sekundy, avšak " +"použitím přípony \"m\" lze určit minuty, pomocí \"h\" hodiny a \"d\" dny" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"Pokud je nastaven periodický režim práce, tak tato hodnota vyjadřuje " +"interval opakování restartu. V 'internetovém' režimu práce hodnota vyjadřuje " +"nejdelší možnou dobu, po kterou smí být zařízení bez připojení k internetu, " +"resp. nastavenému testovacímu zařízení - po jejím uplynutí je proveden " +"automaticky reset. Výchozí jednotkou jsou sekundy, pomocí přípony \"m\" lze " +"nastavit minuty, pomocí \"h\" hodiny a prostřednictvím \"d\" dny" + +msgid "Operating mode" +msgstr "Pracovní režim" + +msgid "Period" +msgstr "Perioda" + +msgid "Ping host" +msgstr "Cílové zařízení příkazu ping" + +msgid "Ping period" +msgstr "Interval opakování testu ping" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"Nástroj Watchcat umožňuje nastavit periodický interval restartu zařízení a/" +"nebo provést restart i tehdy, když dojde ke ztrátě připojení k internetu/" +"danému zařízení po stanovenou dobu" + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"Pokud je nutno restartovat systém, provede Watchcat \"měkký\" restart " +"(hodnota 0); zadáním nenulové hodnoty nastavíte interval (v sekundách), za " +"který program provede \"tvrdý\" restart, pokud \"měkký\" selže." diff --git a/feeds/luci/applications/luci-app-watchcat/po/de/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/de/watchcat.po new file mode 100644 index 0000000..1bbc6d5 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/de/watchcat.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-28 22:40+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Forced reboot delay" +msgstr "Erzwungenen Neustart verzögern um" + +msgid "Host address to ping" +msgstr "Anzupingende Host-Adresse" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"Wie oft soll die Internetverbindung überprüft werden. Standart-Einheit in " +"Sekunden, kann aber durch angehängtes 'm' in Minuten, 'h' in Stunden und 'd' " +"in Tage geändert werden." + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"Im periodischen Modus gibt er die Zeitdauer für einen Neustart an. Im " +"Internet-Modus gibt er die längste Zeitdauer ohne Internetzugang an, nach " +"der ein Neustart durchgeführt wird. Voreingestellte Einheit ist Sekunden, " +"Sie können aber die Endungen 'm' für Minuten, 'h' für Stunden und 'd' für " +"Tage benutzen." + +msgid "Operating mode" +msgstr "Betriebsart" + +msgid "Period" +msgstr "Periode" + +msgid "Ping host" +msgstr "Ping-Host" + +msgid "Ping period" +msgstr "Ping-Zeitdauer" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"Watchcat erlaubt die Einstellung eines automatischen Neustarts, wenn die " +"Internetverbindung eine bestimmte Zeitlang ausgefallen ist." + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"Bei einem Neustart des Systems wird Watchcat einen Warmstart auslösen, wird " +"hier ein Wert ungleich Null eingegeben, wird ein Kaltstart ausgelöst, sollte " +"der Warmstart fehlschlagen. Geben Sie eine Zahl in Sekunden zur Aktivierung " +"an, 0 schaltet diese Funktion aus." diff --git a/feeds/luci/applications/luci-app-watchcat/po/el/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/el/watchcat.po new file mode 100644 index 0000000..4aa0c6b --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/el/watchcat.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Forced reboot delay" +msgstr "" + +msgid "Host address to ping" +msgstr "" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "" + +msgid "Period" +msgstr "" + +msgid "Ping host" +msgstr "" + +msgid "Ping period" +msgstr "" + +msgid "Watchcat" +msgstr "" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/en/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/en/watchcat.po new file mode 100644 index 0000000..0f9099c --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/en/watchcat.po @@ -0,0 +1,66 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Forced reboot delay" +msgstr "Forced reboot delay" + +msgid "Host address to ping" +msgstr "Host address to ping" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" + +msgid "Operating mode" +msgstr "Operating mode" + +msgid "Period" +msgstr "Period" + +msgid "Ping host" +msgstr "Ping host" + +msgid "Ping period" +msgstr "Ping period" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"Watchcat allows to configure a periodic reboot and/or when internet " +"connection has been lost for a certain period of time." + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"When rebooting the system the watchcat will trigger a soft reboot, Entering " +"a non zero value here, will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" diff --git a/feeds/luci/applications/luci-app-watchcat/po/es/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/es/watchcat.po new file mode 100644 index 0000000..c1f58fe --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/es/watchcat.po @@ -0,0 +1,68 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-08-23 23:07+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Forced reboot delay" +msgstr "Espera para forzar reinicio" + +msgid "Host address to ping" +msgstr "Dirección de máquina a la que hacer ping" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"Cada cuánto comprobar la conexión a internet. Por defecto son segundos, pero " +"puede añadir 'm' para minutos, 'h' para horas o 'd' para días" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"En modo periódico define el período de rearranque. En modo internet define " +"el mayor período de tiempo sin acceso a internet antes de provocar un " +"reinicio. Por defecto son segundos, pero puede añadir 'm' para minutos, 'h' " +"para horas o 'd' para días" + +msgid "Operating mode" +msgstr "Modo de operar" + +msgid "Period" +msgstr "Período" + +msgid "Ping host" +msgstr "Máquina a la que hacer ping" + +msgid "Ping period" +msgstr "Período de ping" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"Watchcat permite configurar un reinicio periódico si la conexión a internet " +"si pierde durante un cierto tiempo." + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"Watchcat provocará por defecto un reinicio suave. Poniendo un valor mayor " +"que cero se provocará un reinicio completo si el anterior ha fallado" diff --git a/feeds/luci/applications/luci-app-watchcat/po/fr/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/fr/watchcat.po new file mode 100644 index 0000000..23af469 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/fr/watchcat.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Forced reboot delay" +msgstr "" + +msgid "Host address to ping" +msgstr "" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "" + +msgid "Period" +msgstr "" + +msgid "Ping host" +msgstr "" + +msgid "Ping period" +msgstr "" + +msgid "Watchcat" +msgstr "" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/he/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/he/watchcat.po new file mode 100644 index 0000000..4aa0c6b --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/he/watchcat.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Forced reboot delay" +msgstr "" + +msgid "Host address to ping" +msgstr "" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "" + +msgid "Period" +msgstr "" + +msgid "Ping host" +msgstr "" + +msgid "Ping period" +msgstr "" + +msgid "Watchcat" +msgstr "" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/hu/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/hu/watchcat.po new file mode 100644 index 0000000..253eb77 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/hu/watchcat.po @@ -0,0 +1,64 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-01-31 18:09+0200\n" +"Last-Translator: Sixtus \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Forced reboot delay" +msgstr "Kényszerített újraindítás késleltetése" + +#, fuzzy +msgid "Host address to ping" +msgstr "Pingelendő szerver címe" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"Internet kapcsolat ellenőrzésének gyakorisága. Alapértelmezett egység a " +"másodperc, percekhez használd az 'm', órákhoz a 'h', vagy napokhoz a 'd' " +"utótagot." + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"Periodikus üzemmódban ez határozza meg az újraindítás gyakoriságát. Internet " +"üzemmódban meghatározza a leghosszabb időt újraindításig, amikor nincs " +"internet kapcsolat. Alapértelmezett egység a másodperc, percekhez használd " +"az 'm', órákhoz a 'h', vagy napokhoz a 'd' utótagot." + +msgid "Operating mode" +msgstr "Üzemmód" + +msgid "Period" +msgstr "Periódus" + +msgid "Ping host" +msgstr "Ping címe" + +msgid "Ping period" +msgstr "Pingelések közti idő" + +msgid "Watchcat" +msgstr "" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/it/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/it/watchcat.po new file mode 100644 index 0000000..0acdd18 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/it/watchcat.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-02-03 14:12+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Forced reboot delay" +msgstr "Ritardo riavvio forzato" + +msgid "Host address to ping" +msgstr "Indirizzo dell'host da pingare" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"Ogni quanto si vuole controllare la connessione. Di default espresso in " +"secondi, puoi usare il sufisso 'm' per i minuti, 'h' per le ore o 'd' per i " +"giorni" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"In modalità periodica, definisce il periodo di riavvio. In modalità " +"internet, definisce il più lungo periodo del tempo senza connessione " +"internet prima di un riavvio è pianificato. L'unità predefinita è in " +"secondi, si può usare il suffisso 'm' per i minuti, 'h' per le ore o 'd' per " +"i giorni." + +msgid "Operating mode" +msgstr "Modalità" + +msgid "Period" +msgstr "Periodo" + +msgid "Ping host" +msgstr "Ping host" + +msgid "Ping period" +msgstr "Periodo del Ping" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"Watchcat ti permette di configurare un riavvio periodico quando la " +"connessione a internet è stata persa per un certo periodo." + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"Quando watchcat vuole riavviare il sistema usa un soft reboot, immetendo un " +"valore diverso da 0 in questo campo il proverà un hard reboot se il soft " +"reboot fallisce. Inserire un numero espresso in secondi per abilitare, usa 0 " +"per disabilitare" diff --git a/feeds/luci/applications/luci-app-watchcat/po/ja/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/ja/watchcat.po new file mode 100644 index 0000000..1ae0eb4 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/ja/watchcat.po @@ -0,0 +1,70 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-10-06 17:09+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Forced reboot delay" +msgstr "強制再起動ディレイ時間" + +msgid "Host address to ping" +msgstr "ping を実行する宛先を設定してください。" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"どの程度の間隔でインターネット接続をチェックするか設定します。標準の単位は秒" +"ですが、'm'を接尾に付けると分、'h'を付けると時、'd'を付けると日数に設定されま" +"す。" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"定期動作モードの場合、再起動する周期を設定します。インターネットモードの場" +"合、インターネット接続が切断状態にある許容する期間を設定します。標準の単位は" +"秒ですが、'm'を接尾に付けると分、'h'を付けると時、'd'を付けると日数に設定され" +"ます。" + +msgid "Operating mode" +msgstr "動作モード" + +msgid "Period" +msgstr "周期" + +msgid "Ping host" +msgstr "Ping 宛先ホスト" + +msgid "Ping period" +msgstr "Ping 間隔" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"Watchcatでは、定期的な再起動や、インターネット接続が一定期間切断された際の再" +"起動を行うような設定が可能です。" + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"再起動時にwatchcatはソフトウェアリセットを実行しますが、0以外の値を設定した場" +"合、ソフトウェアリセットが失敗した際に設定された秒数後にハードウェアリセット" +"を行います。0を設定した場合は無効になります。" diff --git a/feeds/luci/applications/luci-app-watchcat/po/ms/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/ms/watchcat.po new file mode 100644 index 0000000..0da283c --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/ms/watchcat.po @@ -0,0 +1,52 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Forced reboot delay" +msgstr "" + +msgid "Host address to ping" +msgstr "" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "" + +msgid "Period" +msgstr "" + +msgid "Ping host" +msgstr "" + +msgid "Ping period" +msgstr "" + +msgid "Watchcat" +msgstr "" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/no/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/no/watchcat.po new file mode 100644 index 0000000..4aa0c6b --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/no/watchcat.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Forced reboot delay" +msgstr "" + +msgid "Host address to ping" +msgstr "" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "" + +msgid "Period" +msgstr "" + +msgid "Ping host" +msgstr "" + +msgid "Ping period" +msgstr "" + +msgid "Watchcat" +msgstr "" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/pl/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/pl/watchcat.po new file mode 100644 index 0000000..ebb67ee --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/pl/watchcat.po @@ -0,0 +1,71 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-21 02:13+0200\n" +"Last-Translator: Tomecki \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Forced reboot delay" +msgstr "Wymuszone opóźnienie restartu" + +msgid "Host address to ping" +msgstr "Adres hosta do pingowania" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"Jak często sprawdzać połączenie internetowe. Domyślną jednostką jest " +"sekunda, można także użyć 'm' dla minut, 'h' dla godzin lub 'd' dla dni" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"W trybie okresowym, określa to restart. W trybie internetowym, określa " +"najdłuższy okres czasu bez dostępu do internetu przed restartem. Domyślną " +"jednostką jest sekunda, można także użyć 'm' dla minut, 'h' dla godzin lub " +"'d' dla dni" + +msgid "Operating mode" +msgstr "Tryb pracy" + +msgid "Period" +msgstr "Okres" + +msgid "Ping host" +msgstr "Host do pingowania" + +msgid "Ping period" +msgstr "Czas pomiędzy wysyłaniem pingów" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"Watchcat pozwala na skonfigurowanie okresowych restartów, jeśli połączenie " +"internetowe zostanie utracone na określony czas." + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"Restart routera Watchcat wykonuje za pomocą tzw. \"miękkiego restartu\". " +"Wpisując tutaj wartość niezerową, wymusimy \"twardy restart\" jeśli \"miękki " +"restart\" się nie powiedzie. Podaj czas w sekundach lub wpisz 0 (zero) aby " +"wyłączyć restarty." diff --git a/feeds/luci/applications/luci-app-watchcat/po/pt-br/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/pt-br/watchcat.po new file mode 100644 index 0000000..fe97036 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/pt-br/watchcat.po @@ -0,0 +1,71 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-03-29 23:20+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Forced reboot delay" +msgstr "Atraso para reinício forçado" + +msgid "Host address to ping" +msgstr "Endereço do equipamento para efetuar o PING" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"Com qual frequência deve verificar a conexão com a Internet. A unidade " +"padrão é segundos, mas você pode usar o sufixo 'm' para minutos, 'h' para " +"horas ou 'd' para dias" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"No modo periódico, é definido o período para se reiniciar. No modo Internet, " +"é definido o maior período de tempo sem acesso à Internet até que uma " +"reiniciação é realizada. A unidade padrão é segundos, mas você pode usar o " +"sufixo 'm' para minutos, 'h' para horas ou 'd' para dias." + +msgid "Operating mode" +msgstr "Modo de Operação" + +msgid "Period" +msgstr "Período" + +msgid "Ping host" +msgstr "Pingar Máquina" + +msgid "Ping period" +msgstr "Período de ping" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"Watchcat permite que se configure um período para reiniciar e/ou quando a " +"conexão com à Internet foi perdida por um ser período de tempo." + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"Ao se reiniciar o sistema, watchcat acionará uma reiniciação suave. Ao se " +"inserir um valor diferente de zero aqui, será acionado uma reiniciação " +"forçada se a reiniciação suave falhar. Insira um número de segundos para " +"habilitar, use 0 para desabilitar." diff --git a/feeds/luci/applications/luci-app-watchcat/po/pt/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/pt/watchcat.po new file mode 100644 index 0000000..f939dc9 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/pt/watchcat.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-06-01 00:02+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Forced reboot delay" +msgstr "" + +msgid "Host address to ping" +msgstr "" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "Modo de operação" + +msgid "Period" +msgstr "Periodo" + +msgid "Ping host" +msgstr "Pingar host" + +msgid "Ping period" +msgstr "Periodo de ping" + +msgid "Watchcat" +msgstr "Watchcat" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/ro/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/ro/watchcat.po new file mode 100644 index 0000000..cda0911 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/ro/watchcat.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-28 19:23+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Forced reboot delay" +msgstr "" + +msgid "Host address to ping" +msgstr "" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "" + +msgid "Period" +msgstr "Perioadă" + +msgid "Ping host" +msgstr "" + +msgid "Ping period" +msgstr "" + +msgid "Watchcat" +msgstr "" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/ru/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/ru/watchcat.po new file mode 100644 index 0000000..83b95e2 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/ru/watchcat.po @@ -0,0 +1,74 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: watchcat\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Forced reboot delay" +msgstr "Задержка принудительной перезагрузки" + +msgid "Host address to ping" +msgstr "Адрес хоста для опроса" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"Как часто проверять интернет-соединение. По умолчанию значение в секундах, " +"вы можете использовать суффикс 'm' для указания минут, 'h' - часов, 'd' - " +"дней" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"В периодическом режиме, данная настройка определяет период перезагрузки. В " +"интернет-режиме, данная настройка определяет максимальный период времени без " +"доступа в интернет, после которого устройство перезагружается. По умолчанию " +"значение в секундах, вы можете использовать суффикс 'm' для указания минут, " +"'h' - часов, 'd' - дней" + +msgid "Operating mode" +msgstr "Режим работы" + +msgid "Period" +msgstr "Период" + +msgid "Ping host" +msgstr "Хост опроса" + +msgid "Ping period" +msgstr "Период опроса" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"Watchcat позволяет настроить периодическую перезагрузку устройства и/или " +"перезагрузку при потере интернет-соединения на определённое время." + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"При необходимости перезагрузке системы, watchcat вызовет программную " +"перезагрузку. При установке ненулевого значения, будет выполнена отложенная " +"аппаратная перезагрузка при неудачной программной. Установите количество " +"секунд для отложенной аппаратной перезагрузки или значение 0 для программной." diff --git a/feeds/luci/applications/luci-app-watchcat/po/sk/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/sk/watchcat.po new file mode 100644 index 0000000..2ff7de9 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/sk/watchcat.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Forced reboot delay" +msgstr "" + +msgid "Host address to ping" +msgstr "" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "" + +msgid "Period" +msgstr "" + +msgid "Ping host" +msgstr "" + +msgid "Ping period" +msgstr "" + +msgid "Watchcat" +msgstr "" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/sv/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/sv/watchcat.po new file mode 100644 index 0000000..0b811bc --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/sv/watchcat.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Forced reboot delay" +msgstr "Fördröjning av påtvingad omstart" + +msgid "Host address to ping" +msgstr "Värdadress att pinga" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "" + +msgid "Period" +msgstr "Period" + +msgid "Ping host" +msgstr "Pinga värd" + +msgid "Ping period" +msgstr "" + +msgid "Watchcat" +msgstr "Watchcat" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/templates/watchcat.pot b/feeds/luci/applications/luci-app-watchcat/po/templates/watchcat.pot new file mode 100644 index 0000000..490ec5c --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/templates/watchcat.pot @@ -0,0 +1,46 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Forced reboot delay" +msgstr "" + +msgid "Host address to ping" +msgstr "" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "" + +msgid "Period" +msgstr "" + +msgid "Ping host" +msgstr "" + +msgid "Ping period" +msgstr "" + +msgid "Watchcat" +msgstr "" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/tr/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/tr/watchcat.po new file mode 100644 index 0000000..633e7fb --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/tr/watchcat.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Forced reboot delay" +msgstr "" + +msgid "Host address to ping" +msgstr "" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "" + +msgid "Period" +msgstr "" + +msgid "Ping host" +msgstr "" + +msgid "Ping period" +msgstr "" + +msgid "Watchcat" +msgstr "" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/uk/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/uk/watchcat.po new file mode 100644 index 0000000..a7c2dd8 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/uk/watchcat.po @@ -0,0 +1,61 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-08-13 16:53+0200\n" +"Last-Translator: zubr_139 \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +#, fuzzy +msgid "Forced reboot delay" +msgstr "Затримка примусового перезавантаження" + +msgid "Host address to ping" +msgstr "Адреса сервера для перевірки зв'язку" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "Режим роботи" + +msgid "Period" +msgstr "Період" + +msgid "Ping host" +msgstr "Пінг вузла" + +msgid "Ping period" +msgstr "Період пінгів" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"Watchcat дозволяє налаштувати періодичні перезавантаження і/або коли " +"підключення до інтернету було втрачено протягом певного періоду часу." + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/vi/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/vi/watchcat.po new file mode 100644 index 0000000..633e7fb --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/vi/watchcat.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Forced reboot delay" +msgstr "" + +msgid "Host address to ping" +msgstr "" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" + +msgid "Operating mode" +msgstr "" + +msgid "Period" +msgstr "" + +msgid "Ping host" +msgstr "" + +msgid "Ping period" +msgstr "" + +msgid "Watchcat" +msgstr "" + +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" + +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" diff --git a/feeds/luci/applications/luci-app-watchcat/po/zh-cn/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/zh-cn/watchcat.po new file mode 100644 index 0000000..991fc48 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/zh-cn/watchcat.po @@ -0,0 +1,65 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-09-24 18:18+0200\n" +"Last-Translator: shanliren \n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Forced reboot delay" +msgstr "强制重启延时" + +msgid "Host address to ping" +msgstr "ping主机地址" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"检测网络连接的频率。默认单位为秒,你可以使用'm'作为后缀表示分钟,‘h’表示小" +"时‘d’表示天。" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"在周期模式,此处定义了重启的周期。在联网模式,这个表示没有网络连接情况下到执" +"行重启的最长时间间隔。默认单位为秒,你可以使用'm'作为后缀表示分钟,‘h’表示小" +"时‘d’表示天。" + +msgid "Operating mode" +msgstr "操作模式" + +msgid "Period" +msgstr "周期" + +msgid "Ping host" +msgstr "ping主机" + +msgid "Ping period" +msgstr "ping周期" + +msgid "Watchcat" +msgstr "WatchCat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "WatchCat允许设置周期性的重启 和/或者 当网络连接断开达规定时间。" + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"当重启系统的时候WatchCat将会触发一个软重启,在这里输入一个非0的值,如果软重启" +"失败将会触发一个延迟的硬重启。输入秒数启用,输入0禁止功能。" diff --git a/feeds/luci/applications/luci-app-watchcat/po/zh-tw/watchcat.po b/feeds/luci/applications/luci-app-watchcat/po/zh-tw/watchcat.po new file mode 100644 index 0000000..b4e52bb --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/po/zh-tw/watchcat.po @@ -0,0 +1,66 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 12:00+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Forced reboot delay" +msgstr "強制重啟延遲" + +msgid "Host address to ping" +msgstr "要Ping的主機位址" + +msgid "" +"How often to check internet connection. Default unit is seconds, you can you " +"use the suffix 'm' for minutes, 'h' for hours or 'd' for days" +msgstr "" +"多久檢查一次網際網路連線. 預設單位值是秒, 可以採用單位後綴表示, \"m\"表示分" +"鐘, \"h\"表示小時, \"d\"代表天數" + +msgid "" +"In periodic mode, it defines the reboot period. In internet mode, it defines " +"the longest period of time without internet access before a reboot is " +"engaged.Default unit is seconds, you can use the suffix 'm' for minutes, 'h' " +"for hours or 'd' for days" +msgstr "" +"Watchcat的定期模式,它將定義重開週期. 在網際網路模式,它將定義在重開被訂製若無" +"Internet存取時採用較長時間週期 .預設單位為秒數,可以採用單位後綴表示, \"m\"表" +"示分鐘, \"h\"表示小時, \"d\"代表天數" + +msgid "Operating mode" +msgstr "操作模式" + +msgid "Period" +msgstr "週期" + +msgid "Ping host" +msgstr "Ping主機" + +msgid "Ping period" +msgstr "Ping週期" + +msgid "Watchcat" +msgstr "Watchcat" + +#, fuzzy +msgid "" +"Watchcat allows configuring a periodic reboot when the Internet connection " +"has been lost for a certain period of time." +msgstr "" +"Watchcat允許定期重啓並且/或者當網際網路連線斷掉時經過某段時間週期後重啓" + +#, fuzzy +msgid "" +"When rebooting the system, the watchcat will trigger a soft reboot. Entering " +"a non zero value here will trigger a delayed hard reboot if the soft reboot " +"fails. Enter a number of seconds to enable, use 0 to disable" +msgstr "" +"重開系統時watchcat將會觸發軟重開, 如果軟重開失敗, 打入0以外的數字,將會觸發硬" +"重開延遲 . 打入秒數來啟用這功能,用0表示功能關閉" diff --git a/feeds/luci/applications/luci-app-watchcat/root/etc/uci-defaults/40_luci-watchcat b/feeds/luci/applications/luci-app-watchcat/root/etc/uci-defaults/40_luci-watchcat new file mode 100644 index 0000000..8cdb8c7 --- /dev/null +++ b/feeds/luci/applications/luci-app-watchcat/root/etc/uci-defaults/40_luci-watchcat @@ -0,0 +1,10 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + add ucitrack system + set ucitrack.@system[-1].init=watchcat + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/applications/luci-app-wifischedule/Makefile b/feeds/luci/applications/luci-app-wifischedule/Makefile new file mode 100644 index 0000000..1708562 --- /dev/null +++ b/feeds/luci/applications/luci-app-wifischedule/Makefile @@ -0,0 +1,22 @@ +# Copyright (c) 2016, prpl Foundation +# +# Permission to use, copy, modify, and/or distribute this software for any purpose with or without +# fee is hereby granted, provided that the above copyright notice and this permission notice appear +# in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE +# FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# Author: Nils Koenig + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Turns WiFi on and off according to a schedule +LUCI_DEPENDS:=+wifischedule + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-wifischedule/README.md b/feeds/luci/applications/luci-app-wifischedule/README.md new file mode 100644 index 0000000..591abb1 --- /dev/null +++ b/feeds/luci/applications/luci-app-wifischedule/README.md @@ -0,0 +1,86 @@ +# wifischedule +Turns WiFi on and off according to a schedule on an openwrt router + +## Components +* wifischedule: Shell script that creates cron jobs based on configuration provided in UCI and does all the other logic of enabling and disabling wifi with the use of `/sbin/wifi` and `/usr/bin/iwinfo`. Can be used standalone. +* luci-app-wifischedule: LUCI frontend for creating the UCI configuration and triggering the actions. Depends on wifischedule. + + +## Use cases +You can create user-defined events when to enable or disable WiFi. +There are various use cases why you would like to do so: + +1. Reduce power consumption and therefore reduce CO2 emissions. +2. Reduce emitted electromagnatic radiation. +3. Force busincess hours when WiFi is available. + +Regarding 1: Please note, that you need to unload the wireless driver modules in order to get the most effect of saving power. +In my test scenario only disabling WiFi saves about ~0.4 Watt, unloading the modules removes another ~0.4 Watt. + +Regarding 2: Think of a wireless accesspoint e.g. in your bedrom, kids room where you want to remove the ammount of radiation emitted. + +Regarding 3: E.g. in a company, why would wireless need to be enabled weekends if no one is there working? +Or think of an accesspoint in your kids room when you want the youngsters to sleep after 10 pm instead of facebooking... + +## Configuration +You can create an arbitrary number of schedule events. Please note that there is on sanity check done wheather the start / stop times overlap or make sense. +If start and stop time are equal, this leads to disabling the WiFi at the given time. + +Logging if enabled is done to the file `/var/log/wifi_schedule.log` and can be reviewed through the "View Logfile" tab. +The cron jobs created can be reviewed through the "View Cron Jobs" tab. + +Please note that the "Unload Modules" function is currently considered as experimental. You can manually add / remove modules in the text field. +The button "Determine Modules Automatically" tries to make a best guess determining regarding the driver module and its dependencies. +When un-/loading the modules, there is a certain number of retries (`module_load`) performed. + +The option "Force disabling wifi even if stations associated" does what it says - when activated it simply shuts down WiFi. +When unchecked, its checked every `recheck_interval` minutes if there are still stations associated. Once the stations disconnect, WiFi is disabled. + +Please note, that the parameters `module_load` and `recheck_interval` are only accessible through uci. + +## UCI Configuration `wifi_schedule` +UCI configuration file: `/etc/config/wifi_schedule`: + +``` +config global + option logging '0' + option enabled '0' + option recheck_interval '10' + option modules_retries '10' + +config entry 'Businesshours' + option enabled '0' + option daysofweek 'Monday Tuesday Wednesday Thursday Friday' + option starttime '06:00' + option stoptime '22:00' + option forcewifidown '0' + +config entry 'Weekend' + option enabled '0' + option daysofweek 'Saturday Sunday' + option starttime '00:00' + option stoptime '00:00' + option forcewifidown '1' +``` + +## Script: `wifi_schedule.sh` +This is the script that does the work. Make your changes to the UCI config file: `/etc/config/wifi_schedule` + +Then call the script as follows in order to get the necessary cron jobs created: + +`wifi_schedule.sh cron` + +All commands: + +``` +wifi_schedule.sh cron|start|stop|forcestop|recheck|getmodules|savemodules|help + + cron: Create cronjob entries. + start: Start wifi. + stop: Stop wifi gracefully, i.e. check if there are stations associated and if so keep retrying. + forcestop: Stop wifi immediately. + recheck: Recheck if wifi can be disabled now. + getmodules: Returns a list of modules used by the wireless driver(s) + savemodules: Saves a list of automatic determined modules to UCI + help: This description. +``` diff --git a/feeds/luci/applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua b/feeds/luci/applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua new file mode 100644 index 0000000..261cf36 --- /dev/null +++ b/feeds/luci/applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua @@ -0,0 +1,42 @@ +-- Copyright (c) 2016, prpl Foundation +-- +-- Permission to use, copy, modify, and/or distribute this software for any purpose with or without +-- fee is hereby granted, provided that the above copyright notice and this permission notice appear +-- in all copies. +-- +-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE +-- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE +-- FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +-- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +-- ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-- +-- Author: Nils Koenig + +module("luci.controller.wifischedule.wifi_schedule", package.seeall) + +local fs = require "nixio.fs" +local sys = require "luci.sys" +local template = require "luci.template" +local i18n = require "luci.i18n" + +function index() + if not nixio.fs.access("/etc/config/wifi_schedule") then + return + end + entry({"admin", "services", "wifi_schedule"}, firstchild(), _("Wifi Schedule"), 60).dependent=false + entry({"admin", "services", "wifi_schedule", "tab_from_cbi"}, cbi("wifischedule/wifi_schedule"), _("Schedule"), 1) + entry({"admin", "services", "wifi_schedule", "wifi_schedule"}, call("wifi_schedule_log"), _("View Logfile"), 2) + entry({"admin", "services", "wifi_schedule", "cronjob"}, call("view_crontab"), _("View Cron Jobs"), 3) +end + +function wifi_schedule_log() + local logfile = fs.readfile("/tmp/log/wifi_schedule.log") or "" + template.render("wifischedule/file_viewer", + {title = i18n.translate("Wifi Schedule Logfile"), content = logfile}) +end + +function view_crontab() + local crontab = fs.readfile("/etc/crontabs/root") or "" + template.render("wifischedule/file_viewer", + {title = i18n.translate("Cron Jobs"), content = crontab}) +end diff --git a/feeds/luci/applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua b/feeds/luci/applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua new file mode 100644 index 0000000..1d30121 --- /dev/null +++ b/feeds/luci/applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua @@ -0,0 +1,249 @@ +-- Copyright (c) 2016, prpl Foundation +-- +-- Permission to use, copy, modify, and/or distribute this software for any purpose with or without +-- fee is hereby granted, provided that the above copyright notice and this permission notice appear +-- in all copies. +-- +-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE +-- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE +-- FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +-- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +-- ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +-- +-- Author: Nils Koenig + +local fs = require "nixio.fs" +local sys = require "luci.sys" + +function time_validator(self, value, desc) + if value ~= nil then + h_str, m_str = string.match(value, "^(%d%d?):(%d%d?)$") + h = tonumber(h_str) + m = tonumber(m_str) + if ( h ~= nil and + h >= 0 and + h <= 23 and + m ~= nil and + m >= 0 and + m <= 59) then + return value + end + end + return nil, translatef("The value %s is invalid", desc) +end + +-- ------------------------------------------------------------------------------------------------- + +-- BEGIN Map +m = Map("wifi_schedule", translate("Wifi Schedule"), translate("Defines a schedule when to turn on and off wifi.")) +function m.on_commit(self) + sys.exec("/usr/bin/wifi_schedule.sh cron") +end +-- END Map + +-- BEGIN Global Section +global_section = m:section(TypedSection, "global", translate("Global Settings")) +global_section.optional = false +global_section.rmempty = false +global_section.anonymous = true +-- END Section + +-- BEGIN Global Enable Checkbox +global_enable = global_section:option(Flag, "enabled", translate("Enable Wifi Schedule")) +global_enable.optional = false +global_enable.rmempty = false + +function global_enable.validate(self, value, global_section) + if value == "1" then + if ( fs.access("/sbin/wifi") and + fs.access("/usr/bin/wifi_schedule.sh") )then + return value + else + return nil, translate("Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi") + end + else + return "0" + end +end +-- END Global Enable Checkbox + +-- BEGIN Global Logging Checkbox +global_logging = global_section:option(Flag, "logging", translate("Enable logging")) +global_logging.optional = false +global_logging.rmempty = false +global_logging.default = 0 +-- END Global Enable Checkbox + +-- BEGIN Global Activate WiFi Button +enable_wifi = global_section:option(Button, "enable_wifi", translate("Activate wifi")) +function enable_wifi.write() + sys.exec("/usr/bin/wifi_schedule.sh start manual") +end +-- END Global Activate Wifi Button + +-- BEGIN Global Disable WiFi Gracefully Button +disable_wifi_gracefully = global_section:option(Button, "disable_wifi_gracefully", translate("Disable wifi gracefully")) +function disable_wifi_gracefully.write() + sys.exec("/usr/bin/wifi_schedule.sh stop manual") +end +-- END Global Disable Wifi Gracefully Button + +-- BEGIN Disable WiFi Forced Button +disable_wifi_forced = global_section:option(Button, "disable_wifi_forced", translate("Disabled wifi forced")) +function disable_wifi_forced.write() + sys.exec("/usr/bin/wifi_schedule.sh forcestop manual") +end +-- END Global Disable WiFi Forced Button + +-- BEGIN Global Unload Modules Checkbox +global_unload_modules = global_section:option(Flag, "unload_modules", translate("Unload Modules (experimental; saves more power)")) +global_unload_modules.optional = false +global_unload_modules.rmempty = false +global_unload_modules.default = 0 +-- END Global Unload Modules Checkbox + + +-- BEGIN Modules +modules = global_section:option(TextValue, "modules", "") +modules:depends("unload_modules", global_unload_modules.enabled); +modules.wrap = "off" +modules.rows = 10 + +function modules.cfgvalue(self, section) + mod = uci.get("wifi_schedule", section, "modules") + if mod == nil then + mod = "" + end + return mod:gsub(" ", "\r\n") +end + +function modules.write(self, section, value) + if value then + value_list = value:gsub("\r\n", " ") + ListValue.write(self, section, value_list) + uci.set("wifi_schedule", section, "modules", value_list) + end +end +-- END Modules + +-- BEGIN Determine Modules +determine_modules = global_section:option(Button, "determine_modules", translate("Determine Modules Automatically")) +determine_modules:depends("unload_modules", global_unload_modules.enabled); +function determine_modules.write(self, section) + output = sys.exec("/usr/bin/wifi_schedule.sh getmodules") + modules:write(section, output) +end +-- END Determine Modules + +-- BEGIN Section +d = m:section(TypedSection, "entry", translate("Schedule events")) +d.addremove = true +--d.anonymous = true +-- END Section + +-- BEGIN Enable Checkbox +c = d:option(Flag, "enabled", translate("Enable")) +c.optional = false +c.rmempty = false +-- END Enable Checkbox + +-- BEGIN Day(s) of Week +dow = d:option(MultiValue, "daysofweek", translate("Day(s) of Week")) +dow.optional = false +dow.rmempty = false +dow:value("Monday", translate("Monday")) +dow:value("Tuesday", translate("Tuesday")) +dow:value("Wednesday", translate("Wednesday")) +dow:value("Thursday", translate("Thursday")) +dow:value("Friday", translate("Friday")) +dow:value("Saturday", translate("Saturday")) +dow:value("Sunday", translate("Sunday")) +-- END Day(s) of Weel + +-- BEGIN Start Wifi Dropdown +starttime = d:option(Value, "starttime", translate("Start WiFi")) +starttime.optional = false +starttime.rmempty = false +starttime:value("00:00") +starttime:value("01:00") +starttime:value("02:00") +starttime:value("03:00") +starttime:value("04:00") +starttime:value("05:00") +starttime:value("06:00") +starttime:value("07:00") +starttime:value("08:00") +starttime:value("09:00") +starttime:value("10:00") +starttime:value("11:00") +starttime:value("12:00") +starttime:value("13:00") +starttime:value("14:00") +starttime:value("15:00") +starttime:value("16:00") +starttime:value("17:00") +starttime:value("18:00") +starttime:value("19:00") +starttime:value("20:00") +starttime:value("21:00") +starttime:value("22:00") +starttime:value("23:00") + +function starttime.validate(self, value, d) + return time_validator(self, value, translate("Start Time")) +end +-- END Start Wifi Dropdown + +-- BEGIN Stop Wifi Dropdown +stoptime = d:option(Value, "stoptime", translate("Stop WiFi")) +stoptime.optional = false +stoptime.rmempty = false +stoptime:value("00:00") +stoptime:value("01:00") +stoptime:value("02:00") +stoptime:value("03:00") +stoptime:value("04:00") +stoptime:value("05:00") +stoptime:value("06:00") +stoptime:value("07:00") +stoptime:value("08:00") +stoptime:value("09:00") +stoptime:value("10:00") +stoptime:value("11:00") +stoptime:value("12:00") +stoptime:value("13:00") +stoptime:value("14:00") +stoptime:value("15:00") +stoptime:value("16:00") +stoptime:value("17:00") +stoptime:value("18:00") +stoptime:value("19:00") +stoptime:value("20:00") +stoptime:value("21:00") +stoptime:value("22:00") +stoptime:value("23:00") + +function stoptime.validate(self, value, d) + return time_validator(self, value, translate("Stop Time")) +end +-- END Stop Wifi Dropdown + +-- BEGIN Force Wifi Stop Checkbox +force_wifi = d:option(Flag, "forcewifidown", translate("Force disabling wifi even if stations associated")) +force_wifi.default = false +force_wifi.rmempty = false + +function force_wifi.validate(self, value, d) + if value == "0" then + if fs.access("/usr/bin/iwinfo") then + return value + else + return nil, translate("Could not find required programm /usr/bin/iwinfo") + end + else + return "1" + end +end +-- END Force Wifi Checkbox + +return m diff --git a/feeds/luci/applications/luci-app-wifischedule/luasrc/view/wifischedule/file_viewer.htm b/feeds/luci/applications/luci-app-wifischedule/luasrc/view/wifischedule/file_viewer.htm new file mode 100644 index 0000000..f67a2be --- /dev/null +++ b/feeds/luci/applications/luci-app-wifischedule/luasrc/view/wifischedule/file_viewer.htm @@ -0,0 +1,22 @@ +<%# +Copyright (c) 2016, prpl Foundation + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without +fee is hereby granted, provided that the above copyright notice and this permission notice appear +in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE +FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Author: Nils Koenig +-%> + +<%+header%> +

<%=title%>

+
+ +
+<%+footer%> diff --git a/feeds/luci/applications/luci-app-wifischedule/po/ja/wifischedule.po b/feeds/luci/applications/luci-app-wifischedule/po/ja/wifischedule.po new file mode 100644 index 0000000..3bc7864 --- /dev/null +++ b/feeds/luci/applications/luci-app-wifischedule/po/ja/wifischedule.po @@ -0,0 +1,112 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: INAGAKI Hiroshi \n" +"Language-Team: \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Activate wifi" +msgstr "WiFiのアクティブ化" + +msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi" +msgstr "必須の /usr/bin/wifi_schedule.sh または /sbin/wifi が見つかりませんでした。" + +msgid "Could not find required programm /usr/bin/iwinfo" +msgstr "必須のプログラム /usr/bin/iwinfo が見つかりませんでした。" + +msgid "Cron Jobs" +msgstr "Cronジョブ" + +msgid "Day(s) of Week" +msgstr "曜日" + +msgid "Defines a schedule when to turn on and off wifi." +msgstr "WiFiのオンとオフを切り替えるスケジュールを設定します。" + +msgid "Determine Modules Automatically" +msgstr "モジュールを自動的に決定する" + +msgid "Disable wifi gracefully" +msgstr "WiFiの通常終了" + +msgid "Disabled wifi forced" +msgstr "WiFiの強制終了" + +msgid "Enable" +msgstr "有効" + +msgid "Enable Wifi Schedule" +msgstr "WiFi スケジュールの有効化" + +msgid "Enable logging" +msgstr "ログの有効化" + +msgid "Force disabling wifi even if stations associated" +msgstr "ステーションが関連付けられていてもWiFiを強制終了する" + +msgid "Friday" +msgstr "金曜日" + +msgid "Global Settings" +msgstr "全体設定" + +msgid "Monday" +msgstr "月曜日" + +msgid "Saturday" +msgstr "土曜日" + +msgid "Schedule" +msgstr "スケジュール" + +msgid "Schedule events" +msgstr "実行スケジュール" + +msgid "Start Time" +msgstr "開始時刻" + +msgid "Start WiFi" +msgstr "WiFiの開始" + +msgid "Stop Time" +msgstr "停止時刻" + +msgid "Stop WiFi" +msgstr "WiFiの停止" + +msgid "Sunday" +msgstr "日曜日" + +msgid "The value %s is invalid" +msgstr "%s の値が無効です" + +msgid "Thursday" +msgstr "木曜日" + +msgid "Tuesday" +msgstr "火曜日" + +msgid "Unload Modules (experimental; saves more power)" +msgstr "モジュールのアンロード(実験的、より省電力)" + +msgid "View Cron Jobs" +msgstr "Cronジョブの確認" + +msgid "View Logfile" +msgstr "ログファイルの確認" + +msgid "Wednesday" +msgstr "水曜日" + +msgid "Wifi Schedule" +msgstr "WiFi スケジュール" + +msgid "Wifi Schedule Logfile" +msgstr "WiFiスケジュール ログファイル" diff --git a/feeds/luci/applications/luci-app-wifischedule/po/templates/wifischedule.pot b/feeds/luci/applications/luci-app-wifischedule/po/templates/wifischedule.pot new file mode 100644 index 0000000..639c432 --- /dev/null +++ b/feeds/luci/applications/luci-app-wifischedule/po/templates/wifischedule.pot @@ -0,0 +1,101 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Activate wifi" +msgstr "" + +msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi" +msgstr "" + +msgid "Could not find required programm /usr/bin/iwinfo" +msgstr "" + +msgid "Cron Jobs" +msgstr "" + +msgid "Day(s) of Week" +msgstr "" + +msgid "Defines a schedule when to turn on and off wifi." +msgstr "" + +msgid "Determine Modules Automatically" +msgstr "" + +msgid "Disable wifi gracefully" +msgstr "" + +msgid "Disabled wifi forced" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable Wifi Schedule" +msgstr "" + +msgid "Enable logging" +msgstr "" + +msgid "Force disabling wifi even if stations associated" +msgstr "" + +msgid "Friday" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Monday" +msgstr "" + +msgid "Saturday" +msgstr "" + +msgid "Schedule" +msgstr "" + +msgid "Schedule events" +msgstr "" + +msgid "Start Time" +msgstr "" + +msgid "Start WiFi" +msgstr "" + +msgid "Stop Time" +msgstr "" + +msgid "Stop WiFi" +msgstr "" + +msgid "Sunday" +msgstr "" + +msgid "The value %s is invalid" +msgstr "" + +msgid "Thursday" +msgstr "" + +msgid "Tuesday" +msgstr "" + +msgid "Unload Modules (experimental; saves more power)" +msgstr "" + +msgid "View Cron Jobs" +msgstr "" + +msgid "View Logfile" +msgstr "" + +msgid "Wednesday" +msgstr "" + +msgid "Wifi Schedule" +msgstr "" + +msgid "Wifi Schedule Logfile" +msgstr "" diff --git a/feeds/luci/applications/luci-app-wifischedule/po/zh-cn/wifischedule.po b/feeds/luci/applications/luci-app-wifischedule/po/zh-cn/wifischedule.po new file mode 100644 index 0000000..ab3a8d0 --- /dev/null +++ b/feeds/luci/applications/luci-app-wifischedule/po/zh-cn/wifischedule.po @@ -0,0 +1,101 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" + +msgid "Activate wifi" +msgstr "激活 WiFi" + +msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi" +msgstr "无法找到必需的 /usr/bin/wifi_schedule.sh 或 /sbin/wifi" + +msgid "Could not find required programm /usr/bin/iwinfo" +msgstr "无法找到必需程序:/usr/bin/iwinfo" + +msgid "Cron Jobs" +msgstr "计划任务" + +msgid "Day(s) of Week" +msgstr "星期" + +msgid "Defines a schedule when to turn on and off wifi." +msgstr "定义自动打开和关闭 WiFi 的计划表" + +msgid "Determine Modules Automatically" +msgstr "自动确定模块" + +msgid "Disable wifi gracefully" +msgstr "正常关闭 WiFi" + +msgid "Disabled wifi forced" +msgstr "强制关闭 WiFi" + +msgid "Enable" +msgstr "启用" + +msgid "Enable Wifi Schedule" +msgstr "启用 WiFi 计划" + +msgid "Enable logging" +msgstr "启用日志" + +msgid "Force disabling wifi even if stations associated" +msgstr "即使有设备连接也强制关闭 WiFi" + +msgid "Friday" +msgstr "星期五" + +msgid "Global Settings" +msgstr "全局设置" + +msgid "Monday" +msgstr "星期一" + +msgid "Saturday" +msgstr "星期六" + +msgid "Schedule" +msgstr "计划表" + +msgid "Schedule events" +msgstr "计划事件" + +msgid "Start Time" +msgstr "启动时间" + +msgid "Start WiFi" +msgstr "启动 WiFi" + +msgid "Stop Time" +msgstr "关闭时间" + +msgid "Stop WiFi" +msgstr "关闭 WiFi" + +msgid "Sunday" +msgstr "星期日" + +msgid "The value %s is invalid" +msgstr "%s 的值无效" + +msgid "Thursday" +msgstr "星期四" + +msgid "Tuesday" +msgstr "星期二" + +msgid "Unload Modules (experimental; saves more power)" +msgstr "卸载模块(实验性的,节省更多电量)" + +msgid "View Cron Jobs" +msgstr "查看计划任务" + +msgid "View Logfile" +msgstr "查看日志文件" + +msgid "Wednesday" +msgstr "星期三" + +msgid "Wifi Schedule" +msgstr "WiFi 计划" + +msgid "Wifi Schedule Logfile" +msgstr "WiFi 计划日志文件" diff --git a/feeds/luci/applications/luci-app-wol/Makefile b/feeds/luci/applications/luci-app-wol/Makefile new file mode 100644 index 0000000..d935ee9 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for Wake-on-LAN +LUCI_DEPENDS:=+etherwake + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-wol/luasrc/controller/wol.lua b/feeds/luci/applications/luci-app-wol/luasrc/controller/wol.lua new file mode 100644 index 0000000..73a9594 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/luasrc/controller/wol.lua @@ -0,0 +1,6 @@ +module("luci.controller.wol", package.seeall) + +function index() + entry({"admin", "network", "wol"}, cbi("wol"), _("Wake on LAN"), 90) + entry({"mini", "network", "wol"}, cbi("wol"), _("Wake on LAN"), 90) +end diff --git a/feeds/luci/applications/luci-app-wol/luasrc/model/cbi/wol.lua b/feeds/luci/applications/luci-app-wol/luasrc/model/cbi/wol.lua new file mode 100644 index 0000000..e87cac3 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/luasrc/model/cbi/wol.lua @@ -0,0 +1,94 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local sys = require "luci.sys" +local fs = require "nixio.fs" + +m = SimpleForm("wol", translate("Wake on LAN"), + translate("Wake on LAN is a mechanism to remotely boot computers in the local network.")) + +m.submit = translate("Wake up host") +m.reset = false + + +local has_ewk = fs.access("/usr/bin/etherwake") +local has_wol = fs.access("/usr/bin/wol") + + +s = m:section(SimpleSection) + +if has_ewk and has_wol then + bin = s:option(ListValue, "binary", translate("WoL program"), + translate("Sometimes only one of the two tools works. If one fails, try the other one")) + + bin:value("/usr/bin/etherwake", "Etherwake") + bin:value("/usr/bin/wol", "WoL") +end + +if has_ewk then + iface = s:option(ListValue, "iface", translate("Network interface to use"), + translate("Specifies the interface the WoL packet is sent on")) + + if has_wol then + iface:depends("binary", "/usr/bin/etherwake") + end + + iface:value("", translate("Broadcast on all interfaces")) + + for _, e in ipairs(sys.net.devices()) do + if e ~= "lo" then iface:value(e) end + end +end + + +host = s:option(Value, "mac", translate("Host to wake up"), + translate("Choose the host to wake up or enter a custom MAC address to use")) + +sys.net.mac_hints(function(mac, name) + host:value(mac, "%s (%s)" %{ mac, name }) +end) + + +function host.write(self, s, val) + local host = luci.http.formvalue("cbid.wol.1.mac") + if host and #host > 0 and host:match("^[a-fA-F0-9:]+$") then + local cmd + local util = luci.http.formvalue("cbid.wol.1.binary") or ( + has_ewk and "/usr/bin/etherwake" or "/usr/bin/wol" + ) + + if util == "/usr/bin/etherwake" then + local iface = luci.http.formvalue("cbid.wol.1.iface") + cmd = "%s -D%s %q" %{ + util, (iface ~= "" and " -i %q" % iface or ""), host + } + else + cmd = "%s -v %q" %{ util, host } + end + + local msg = "

%s

%s

" %{ + translate("Starting WoL utility:"), cmd + } + + local p = io.popen(cmd .. " 2>&1") + if p then + while true do + local l = p:read("*l") + if l then + if #l > 100 then l = l:sub(1, 100) .. "..." end + msg = msg .. l .. "
" + else + break + end + end + p:close() + end + + msg = msg .. "

" + + m.message = msg + end +end + + +return m diff --git a/feeds/luci/applications/luci-app-wol/po/ca/wol.po b/feeds/luci/applications/luci-app-wol/po/ca/wol.po new file mode 100644 index 0000000..42f7cf7 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/ca/wol.po @@ -0,0 +1,58 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2014-07-01 06:15+0200\n" +"Last-Translator: Alex \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Broadcast on all interfaces" +msgstr "Difon en totes les interfícies" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" +"Trieu el host per a despertar o introduïu una adreça MAC personalitzada per " +"a utilitzar" + +msgid "Host to wake up" +msgstr "Host per a despertar" + +msgid "Network interface to use" +msgstr "Interfície de xarxa per a utilitzar" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"A vegades, només una de les dues eines funciona. Si un dels falla, prova la " +"altra." + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Especifica la interfície en que s'envia el paquet WoL" + +msgid "Starting WoL utility:" +msgstr "Iniciant la utilitat WoL:" + +msgid "Wake on LAN" +msgstr "Despert en LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Despert en LAN és un mecanisme per a iniciar remotament ordinadors en la " +"xarxa local." + +msgid "Wake up host" +msgstr "Desperta al host" + +msgid "WoL program" +msgstr "Programa WoL" diff --git a/feeds/luci/applications/luci-app-wol/po/cs/wol.po b/feeds/luci/applications/luci-app-wol/po/cs/wol.po new file mode 100644 index 0000000..6ee7f67 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/cs/wol.po @@ -0,0 +1,55 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2014-05-12 11:17+0200\n" +"Last-Translator: sairon \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Broadcast on all interfaces" +msgstr "Vysílat broadcastem na všech rozhraních" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "Vyberte zařízení, které má být probuzeno, nebo zadejte jeho MAC adresu" + +msgid "Host to wake up" +msgstr "Adresa zařízení, které má být probuzeno" + +msgid "Network interface to use" +msgstr "Použité síťové rozhraní" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Může se stát, že pro dané cílové zařízení bude fungovat pouze jeden z " +"programů. Pokud první selže, vyzkoušejte další." + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Zde se nastaví síťové rozhraní, přes které budou zasílány WoL packety." + +msgid "Starting WoL utility:" +msgstr "Spouštím nástroj WoL:" + +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Funkce \"Wake on LAN\" umožňuje vzdáleně spouštět počítače v místní síti." + +msgid "Wake up host" +msgstr "Probudit zařízení" + +msgid "WoL program" +msgstr "Program provádějící WoL" diff --git a/feeds/luci/applications/luci-app-wol/po/de/wol.po b/feeds/luci/applications/luci-app-wol/po/de/wol.po new file mode 100644 index 0000000..52940ef --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/de/wol.po @@ -0,0 +1,58 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2011-06-11 01:37+0200\n" +"Last-Translator: Jo-Philipp \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Broadcast on all interfaces" +msgstr "Auf allen Schnittstellen senden" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" +"Zu startenden Rechner selektieren oder benutzerdefinierte MAC-Adresse angeben" + +msgid "Host to wake up" +msgstr "Anzuschaltender Rechner" + +msgid "Network interface to use" +msgstr "Verwendete Schnittstelle" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Manchmal funktioniert nur eines der beiden Programme. Wenn eines " +"fehlschlägt, versuchen Sie das Andere." + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "" +"Selektiert die Netzwerkschnittstelle auf der das WoL-Paket versendet wird" + +msgid "Starting WoL utility:" +msgstr "Starte WoL-Programm:" + +msgid "Wake on LAN" +msgstr "Wake-on-LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Wake-on-LAN ist ein Mechanismus um Geräte im lokalen Netzwerk ferngesteuert " +"anzuschalten." + +msgid "Wake up host" +msgstr "Rechner anschalten" + +msgid "WoL program" +msgstr "WoL-Programm" diff --git a/feeds/luci/applications/luci-app-wol/po/el/wol.po b/feeds/luci/applications/luci-app-wol/po/el/wol.po new file mode 100644 index 0000000..cb7c3b9 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/el/wol.po @@ -0,0 +1,49 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2010-04-19 00:29+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Broadcast on all interfaces" +msgstr "" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" + +msgid "Host to wake up" +msgstr "" + +msgid "Network interface to use" +msgstr "" + +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "" + +msgid "Starting WoL utility:" +msgstr "" + +msgid "Wake on LAN" +msgstr "" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" + +msgid "Wake up host" +msgstr "" + +msgid "WoL program" +msgstr "" diff --git a/feeds/luci/applications/luci-app-wol/po/en/wol.po b/feeds/luci/applications/luci-app-wol/po/en/wol.po new file mode 100644 index 0000000..48c7302 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/en/wol.po @@ -0,0 +1,50 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Broadcast on all interfaces" +msgstr "Broadcast on all interfaces" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "Choose the host to wake up or enter a custom MAC address to use" + +msgid "Host to wake up" +msgstr "Host to wake up" + +msgid "Network interface to use" +msgstr "Network interface to use" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Sometimes only one of both tools work. If one of fails, try the other one" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Specifies the interface the WoL packet is sent on" + +msgid "Starting WoL utility:" +msgstr "Starting WoL utility:" + +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." + +msgid "Wake up host" +msgstr "Wake up host" + +msgid "WoL program" +msgstr "WoL program" diff --git a/feeds/luci/applications/luci-app-wol/po/es/wol.po b/feeds/luci/applications/luci-app-wol/po/es/wol.po new file mode 100644 index 0000000..f5bcf6b --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/es/wol.po @@ -0,0 +1,57 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2012-08-22 21:41+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Broadcast on all interfaces" +msgstr "Propagar en todas las interfaces" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "Elija la máquina a despertar o introduzca su dirección MAC" + +msgid "Host to wake up" +msgstr "Máquina a despertar" + +msgid "Network interface to use" +msgstr "Interfaz de red a utilizar" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"A veces, sólo se inicia una de las dos herramientas. Si una falla, intente " +"con la otra" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Especifica la interfaz donde se envían los paquetes WoL" + +msgid "Starting WoL utility:" +msgstr "Iniciando utilidad WoL:" + +# Wake on LAN es un término habitualmente utilizado en el español para referirse a esa misma función de encendido remoto a través de la red +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Wake on LAN permite arrancar ordenadores conectados en una red local de " +"forma remota." + +msgid "Wake up host" +msgstr "Despertar máquina" + +msgid "WoL program" +msgstr "Programa WoL" diff --git a/feeds/luci/applications/luci-app-wol/po/fr/wol.po b/feeds/luci/applications/luci-app-wol/po/fr/wol.po new file mode 100644 index 0000000..0bed86d --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/fr/wol.po @@ -0,0 +1,57 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2011-11-23 22:22+0200\n" +"Last-Translator: fredb \n" +"Language-Team: French\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Broadcast on all interfaces" +msgstr "Émettre sur toutes les interfaces" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "Choisir l'hôte à réveiller ou entrer une adresse MAC à utiliser" + +msgid "Host to wake up" +msgstr "Hôte à réveiller" + +msgid "Network interface to use" +msgstr "Interface réseau à utiliser" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Parfois seul un des deux outils fonctionne. Si l'un échoue, essayez l'autre" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "" +"Spécifie l'interface sur laquelle le paquet WoL est envoyé" + +msgid "Starting WoL utility:" +msgstr "Démarrer l'utilitaire WoL :" + +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Wake on LAN est un mécanisme pour démarrer à distance les ordinateurs du " +"réseau local." + +msgid "Wake up host" +msgstr "Réveiller l'hôte" + +msgid "WoL program" +msgstr "Programme WoL" diff --git a/feeds/luci/applications/luci-app-wol/po/he/wol.po b/feeds/luci/applications/luci-app-wol/po/he/wol.po new file mode 100644 index 0000000..cb7c3b9 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/he/wol.po @@ -0,0 +1,49 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2010-04-19 00:29+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Broadcast on all interfaces" +msgstr "" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" + +msgid "Host to wake up" +msgstr "" + +msgid "Network interface to use" +msgstr "" + +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "" + +msgid "Starting WoL utility:" +msgstr "" + +msgid "Wake on LAN" +msgstr "" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" + +msgid "Wake up host" +msgstr "" + +msgid "WoL program" +msgstr "" diff --git a/feeds/luci/applications/luci-app-wol/po/hu/wol.po b/feeds/luci/applications/luci-app-wol/po/hu/wol.po new file mode 100644 index 0000000..f47191c --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/hu/wol.po @@ -0,0 +1,59 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2012-04-06 10:42+0200\n" +"Last-Translator: juhosg \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Broadcast on all interfaces" +msgstr "Szórás az összes interfészen" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" +"Válassza ki a felélesztendő gépet, vagy adja meg a haszálandó egyedi MAC " +"címet" + +msgid "Host to wake up" +msgstr "Felélesztendő gép" + +msgid "Network interface to use" +msgstr "Használandó interfész" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Néha csak az egyik eszköz működik. Ha valamelyik nem működik, próbálja ki a " +"másikat." + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "" +"Megadja azt az interfészt amelyiken keresztül a WoL csomag kiküldésre kerül" + +msgid "Starting WoL utility:" +msgstr "WoL segédprogram elindítása:" + +msgid "Wake on LAN" +msgstr "Felélesztés hálózaton keresztül" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"A felélesztés hálózaton keresztül a helyi hálózatban lévő számítógépek " +"távoli elindítására szolgáló módszer." + +msgid "Wake up host" +msgstr "Gép felélesztése" + +msgid "WoL program" +msgstr "WoL program" diff --git a/feeds/luci/applications/luci-app-wol/po/it/wol.po b/feeds/luci/applications/luci-app-wol/po/it/wol.po new file mode 100644 index 0000000..63ac0d8 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/it/wol.po @@ -0,0 +1,56 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2013-02-03 14:01+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Broadcast on all interfaces" +msgstr "Broadcast su tutte le interfaccie" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "Scegli l'host da \"svegliare\" o inserisci il MAC address da usare" + +msgid "Host to wake up" +msgstr "Host da \"svegliare\"" + +msgid "Network interface to use" +msgstr "Interfacci di rete da usare" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Avvolte solo uno dei due tools funziona. Se uno fallisce, tenta di usare il " +"secondo" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Secifica l'interfaccia su cui il pacchetto \"magico\" WoL è inviato" + +msgid "Starting WoL utility:" +msgstr "Avvia l'utility WoL:" + +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Wake on LAN è un meccanismo che ti permette di avviare da remoto un computer " +"collegato alla LAN." + +msgid "Wake up host" +msgstr "Sveglia Host" + +msgid "WoL program" +msgstr "Programma WoL" diff --git a/feeds/luci/applications/luci-app-wol/po/ja/wol.po b/feeds/luci/applications/luci-app-wol/po/ja/wol.po new file mode 100644 index 0000000..c18b831 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/ja/wol.po @@ -0,0 +1,56 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2013-10-06 17:12+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: none\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Broadcast on all interfaces" +msgstr "全てのインターフェースへブロードキャスト" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "起動するホストのMACアドレスを選択または入力してください" + +msgid "Host to wake up" +msgstr "起動するホストを指定" + +msgid "Network interface to use" +msgstr "使用するネットワークインターフェース" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"片方のツールのみが動作する場合があるため、片方が失敗する場合は別のツールを試" +"してみてください。" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "WoLパケットを送信するインタフェースを指定" + +msgid "Starting WoL utility:" +msgstr "WoLユーティリティを起動:" + +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Wake on LANはローカルネットワーク内のコンピュータを遠隔で起動させることができ" +"る機能です。" + +msgid "Wake up host" +msgstr "ホストを起動" + +msgid "WoL program" +msgstr "WoLプログラム" diff --git a/feeds/luci/applications/luci-app-wol/po/ms/wol.po b/feeds/luci/applications/luci-app-wol/po/ms/wol.po new file mode 100644 index 0000000..74380f2 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/ms/wol.po @@ -0,0 +1,48 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2010-04-19 00:29+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Broadcast on all interfaces" +msgstr "" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" + +msgid "Host to wake up" +msgstr "" + +msgid "Network interface to use" +msgstr "" + +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "" + +msgid "Starting WoL utility:" +msgstr "" + +msgid "Wake on LAN" +msgstr "" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" + +msgid "Wake up host" +msgstr "" + +msgid "WoL program" +msgstr "" diff --git a/feeds/luci/applications/luci-app-wol/po/no/wol.po b/feeds/luci/applications/luci-app-wol/po/no/wol.po new file mode 100644 index 0000000..2f0a8ad --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/no/wol.po @@ -0,0 +1,47 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Broadcast on all interfaces" +msgstr "Send på alle grensesnitt" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" +"Velg hvilken vert som skal startes opp, eller angi en MAC adresse som skal " +"brukes" + +msgid "Host to wake up" +msgstr "Vert som skal startes opp" + +msgid "Network interface to use" +msgstr "Nettverksgrensesnitt" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Noen ganger virker bare ett av disse verktøyene. Hvis ett av de ikke lykkes " +"med å starte opp verten kan du prøve det andre." + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Angir grensesnittet som WoL pakken blir sendt ut på" + +msgid "Starting WoL utility:" +msgstr "Starter WoL:" + +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Wake on LAN er en mekanisme for å starte opp datamaskiner i det lokale " +"nettverket." + +msgid "Wake up host" +msgstr "Start vert" + +msgid "WoL program" +msgstr "WoL programm" diff --git a/feeds/luci/applications/luci-app-wol/po/pl/wol.po b/feeds/luci/applications/luci-app-wol/po/pl/wol.po new file mode 100644 index 0000000..c599b9e --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/pl/wol.po @@ -0,0 +1,57 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2011-08-25 19:04+0200\n" +"Last-Translator: Staszek \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Broadcast on all interfaces" +msgstr "Rozgłaszaj na wszystkie interfejsy" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "Wybierz hosta z listy lub podaj adres MAC maszyny do wybudzenia" + +msgid "Host to wake up" +msgstr "Host do wybudzenia" + +msgid "Network interface to use" +msgstr "Użyty interfejs sieciowy" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Czasem działa tylko jedno z narzędzi. Jeżeli jedno z nich nie zadziała, " +"proszę użyć drugiego." + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Definiuje interfejs, na który będzie wysłany pakiet WoL" + +msgid "Starting WoL utility:" +msgstr "Uruchamianie narzędzia WoL:" + +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"\"Wake on LAN\" to mechanizm służący do zdalnego włączania komputerów w " +"sieci lokalnej." + +msgid "Wake up host" +msgstr "Wybudź hosta" + +msgid "WoL program" +msgstr "Narzędzie WoL" diff --git a/feeds/luci/applications/luci-app-wol/po/pt-br/wol.po b/feeds/luci/applications/luci-app-wol/po/pt-br/wol.po new file mode 100644 index 0000000..6a21a85 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/pt-br/wol.po @@ -0,0 +1,56 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2011-10-11 20:31+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Broadcast on all interfaces" +msgstr "Broadcast em todas as interfaces" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "Escolha o computador para acordar ou entre com um endereço MAC" + +msgid "Host to wake up" +msgstr "Computador para acordar" + +msgid "Network interface to use" +msgstr "Interfaces de rede para usar" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Algumas vezes, somente uma das ferramentas funciona. Se uma delas falhar, " +"tente a outra" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Especifica a interface para onde os pacotes de WoL serão enviados" + +msgid "Starting WoL utility:" +msgstr "Iniciando utilitário WoL:" + +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Wake on LAN é um mecanismo para acordar/ligar remotamente computadores na " +"rede local." + +msgid "Wake up host" +msgstr "Acorda um computador" + +msgid "WoL program" +msgstr "Programa WoL" diff --git a/feeds/luci/applications/luci-app-wol/po/pt/wol.po b/feeds/luci/applications/luci-app-wol/po/pt/wol.po new file mode 100644 index 0000000..540e543 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/pt/wol.po @@ -0,0 +1,54 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2013-05-30 22:54+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Broadcast on all interfaces" +msgstr "Broadcast em todas as interfaces" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "Escolha ao host a acordar ou escreva um MAC personalizado a ser usado" + +msgid "Host to wake up" +msgstr "Host a acordar" + +msgid "Network interface to use" +msgstr "Interface de rede a usar" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "Às vezes só uma das ferramentas funciona. Se uma falhar, tente a outra" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Especifica a interface pela qual é enviado o pacota WoL" + +msgid "Starting WoL utility:" +msgstr "A iniciar a ferramenta WoL" + +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Wake on LAN é um mecanismo para remotamente iniciar computadores numa rede " +"local." + +msgid "Wake up host" +msgstr "Acordar host" + +msgid "WoL program" +msgstr "Programa de WoL" diff --git a/feeds/luci/applications/luci-app-wol/po/ro/wol.po b/feeds/luci/applications/luci-app-wol/po/ro/wol.po new file mode 100644 index 0000000..154a3f9 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/ro/wol.po @@ -0,0 +1,57 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2011-10-07 16:47+0200\n" +"Last-Translator: Daniel \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Broadcast on all interfaces" +msgstr "Broadcast pe toate interfetele" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "Alege statie pentru \"trezire\" sau introdu o adresa MAC de folosit" + +msgid "Host to wake up" +msgstr "Statie pentru \"trezire\"" + +msgid "Network interface to use" +msgstr "Interfata de retea pentru utilizare" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Uneori doar una dintre metode functioneaza. Daca se intampla, incearc-o pe " +"cealalta" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Specifica interfata prin care pachetele WoL sunt trimise" + +msgid "Starting WoL utility:" +msgstr "Pornire utilitar WoL:" + +msgid "Wake on LAN" +msgstr "Activarea pe LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Activarea pe LAN e un mecanism pentru a porni de la distanta computere de pe " +"retea." + +msgid "Wake up host" +msgstr "Statie de \"trezire\"" + +msgid "WoL program" +msgstr "Program WoL" diff --git a/feeds/luci/applications/luci-app-wol/po/ru/wol.po b/feeds/luci/applications/luci-app-wol/po/ru/wol.po new file mode 100644 index 0000000..9a84366 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/ru/wol.po @@ -0,0 +1,59 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: LuCI: wol\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2012-08-15 12:07+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Broadcast on all interfaces" +msgstr "Использовать широковещательную передачу на все интерфейсы" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "Выберите хост, который необходимо разбудить, или введите его MAC-адрес" + +msgid "Host to wake up" +msgstr "Хост, который необходимо разбудить" + +msgid "Network interface to use" +msgstr "Используемый сетевой интерфейс" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Иногда только одна из двух утилит работает. В случае ошибки, попробуйте " +"использовать другую" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Определяет интерфейс, по которому будут посланы пакеты WoL" + +msgid "Starting WoL utility:" +msgstr "Запуск WoL утилиты:" + +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Пробуждение по LAN (Wake on LAN, WoL) - технология, позволяющая удалённо " +"«разбудить» (включить) компьютер посредством отправки через локальную сеть " +"специальным образом сформированного пакета данных." + +msgid "Wake up host" +msgstr "Разбудить хост" + +msgid "WoL program" +msgstr "Программа WoL" diff --git a/feeds/luci/applications/luci-app-wol/po/sk/wol.po b/feeds/luci/applications/luci-app-wol/po/sk/wol.po new file mode 100644 index 0000000..eea59eb --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/sk/wol.po @@ -0,0 +1,44 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Broadcast on all interfaces" +msgstr "" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" + +msgid "Host to wake up" +msgstr "" + +msgid "Network interface to use" +msgstr "" + +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "" + +msgid "Starting WoL utility:" +msgstr "" + +msgid "Wake on LAN" +msgstr "" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" + +msgid "Wake up host" +msgstr "" + +msgid "WoL program" +msgstr "" diff --git a/feeds/luci/applications/luci-app-wol/po/sv/wol.po b/feeds/luci/applications/luci-app-wol/po/sv/wol.po new file mode 100644 index 0000000..f08f727 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/sv/wol.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Broadcast on all interfaces" +msgstr "Sänd i alla gränssnitt" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" +"Välj värden som ska väckas upp eller fyll i en anpassad MAC-adress att " +"använda" + +msgid "Host to wake up" +msgstr "Värd som ska väckas upp" + +msgid "Network interface to use" +msgstr "Nätverksgränssnitt som ska användas" + +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Ibland så fungerar bara en av de två verktygen. Prova med den andra om den " +"första misslyckades" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Anger gränssnittet som fjärrstartspaketet skickas med" + +msgid "Starting WoL utility:" +msgstr "Startar hjälpprogrammet för fjärrstyrning av uppstart:" + +msgid "Wake on LAN" +msgstr "Fjärrstyrning av uppstart" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Fjärrstyrning av uppstart är en mekanism för att starta upp datorer via " +"fjärrstyrning i det lokala nätverket." + +msgid "Wake up host" +msgstr "Väck upp värden" + +msgid "WoL program" +msgstr "Program för fjärrstart" diff --git a/feeds/luci/applications/luci-app-wol/po/templates/wol.pot b/feeds/luci/applications/luci-app-wol/po/templates/wol.pot new file mode 100644 index 0000000..1305c53 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/templates/wol.pot @@ -0,0 +1,37 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Broadcast on all interfaces" +msgstr "" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" + +msgid "Host to wake up" +msgstr "" + +msgid "Network interface to use" +msgstr "" + +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "" + +msgid "Starting WoL utility:" +msgstr "" + +msgid "Wake on LAN" +msgstr "" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" + +msgid "Wake up host" +msgstr "" + +msgid "WoL program" +msgstr "" diff --git a/feeds/luci/applications/luci-app-wol/po/tr/wol.po b/feeds/luci/applications/luci-app-wol/po/tr/wol.po new file mode 100644 index 0000000..9be6934 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/tr/wol.po @@ -0,0 +1,49 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2010-04-19 00:29+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Broadcast on all interfaces" +msgstr "" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" + +msgid "Host to wake up" +msgstr "" + +msgid "Network interface to use" +msgstr "" + +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "" + +msgid "Starting WoL utility:" +msgstr "" + +msgid "Wake on LAN" +msgstr "" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" + +msgid "Wake up host" +msgstr "" + +msgid "WoL program" +msgstr "" diff --git a/feeds/luci/applications/luci-app-wol/po/uk/wol.po b/feeds/luci/applications/luci-app-wol/po/uk/wol.po new file mode 100644 index 0000000..c09d144 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/uk/wol.po @@ -0,0 +1,59 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2013-05-26 19:00+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Broadcast on all interfaces" +msgstr "Широкомовна трансляція на всіх інтерфейсах" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" +"Виберіть комп'ютер, який необхідно розбудити або введіть користувацьку MAC-" +"адресу" + +msgid "Host to wake up" +msgstr "Комп'ютер, який необхідно розбудити" + +msgid "Network interface to use" +msgstr "Використовувати мережевий інтерфейс" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" +"Іноді працює тільки одна з цих двох утиліт. Якщо одна з них не працює, " +"спробуйте іншу." + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "Визначає інтерфейс, яким буде надіслано пакет WoL" + +msgid "Starting WoL utility:" +msgstr "Запуск утиліти WoL:" + +msgid "Wake on LAN" +msgstr "Wake on LAN" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" +"Пробудження через LAN (Wake on LAN) є технологією, що дає змогу віддалено " +"\"будити\" (вмикати) комп'ютери у локальній мережі." + +msgid "Wake up host" +msgstr "Розбудити комп'ютер" + +msgid "WoL program" +msgstr "Программа WoL" diff --git a/feeds/luci/applications/luci-app-wol/po/vi/wol.po b/feeds/luci/applications/luci-app-wol/po/vi/wol.po new file mode 100644 index 0000000..9be6934 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/vi/wol.po @@ -0,0 +1,49 @@ +# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2010-04-19 00:29+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Broadcast on all interfaces" +msgstr "" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "" + +msgid "Host to wake up" +msgstr "" + +msgid "Network interface to use" +msgstr "" + +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "" + +msgid "Starting WoL utility:" +msgstr "" + +msgid "Wake on LAN" +msgstr "" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "" + +msgid "Wake up host" +msgstr "" + +msgid "WoL program" +msgstr "" diff --git a/feeds/luci/applications/luci-app-wol/po/zh-cn/wol.po b/feeds/luci/applications/luci-app-wol/po/zh-cn/wol.po new file mode 100644 index 0000000..6d9cc72 --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/zh-cn/wol.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-19 00:29+0200\n" +"PO-Revision-Date: 2012-06-21 17:52+0200\n" +"Last-Translator: phantasm131 \n" +"Language-Team: QQ Group 75543259 \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Broadcast on all interfaces" +msgstr "向所有接口广播" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "选择要唤醒的主机或者输入自定义mac地址" + +msgid "Host to wake up" +msgstr "选择要唤醒的主机" + +msgid "Network interface to use" +msgstr "选择使用的网络接口" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "有时只有一个工具生效。如果其中一个失效,请尝试另一个" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "限定网络唤醒数据包将被发送到的接口" + +msgid "Starting WoL utility:" +msgstr "正在启动网络唤醒工具" + +msgid "Wake on LAN" +msgstr "网络唤醒" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "网络唤醒提供了从远程启动本地网络内计算机的机制。" + +msgid "Wake up host" +msgstr "唤醒主机" + +msgid "WoL program" +msgstr "网络唤醒程序" diff --git a/feeds/luci/applications/luci-app-wol/po/zh-tw/wol.po b/feeds/luci/applications/luci-app-wol/po/zh-tw/wol.po new file mode 100644 index 0000000..ee290ec --- /dev/null +++ b/feeds/luci/applications/luci-app-wol/po/zh-tw/wol.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 10:25+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Broadcast on all interfaces" +msgstr "廣播到所有介面" + +msgid "Choose the host to wake up or enter a custom MAC address to use" +msgstr "叫醒訂選的主機或者打入特定的MAC位址以便使用" + +msgid "Host to wake up" +msgstr "要喚醒主機清單" + +msgid "Network interface to use" +msgstr "使用的網路介面" + +#, fuzzy +msgid "" +"Sometimes only one of the two tools works. If one fails, try the other one" +msgstr "某些時候全部工具裡面只有一個發生作用,試試另外一個" + +msgid "Specifies the interface the WoL packet is sent on" +msgstr "指定WoL喚醒封包將傳到哪個介面" + +msgid "Starting WoL utility:" +msgstr "啟用喚醒工具:" + +msgid "Wake on LAN" +msgstr "LAN區網喚醒" + +msgid "" +"Wake on LAN is a mechanism to remotely boot computers in the local network." +msgstr "Wol就是在本地網路中針對遠端開機電腦喚醒的機制" + +msgid "Wake up host" +msgstr "喚醒主機" + +msgid "WoL program" +msgstr "Wol喚醒程式" diff --git a/feeds/luci/applications/luci-app-wshaper/Makefile b/feeds/luci/applications/luci-app-wshaper/Makefile new file mode 100644 index 0000000..63e63ab --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for wshaper +LUCI_DEPENDS:=+wshaper + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/applications/luci-app-wshaper/luasrc/controller/wshaper.lua b/feeds/luci/applications/luci-app-wshaper/luasrc/controller/wshaper.lua new file mode 100644 index 0000000..2d0fe48 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/luasrc/controller/wshaper.lua @@ -0,0 +1,9 @@ +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +module "luci.controller.wshaper" + +function index() + entry({"admin", "network", "wshaper"}, cbi("wshaper"), _("Wondershaper"), 80) +end + diff --git a/feeds/luci/applications/luci-app-wshaper/luasrc/model/cbi/wshaper.lua b/feeds/luci/applications/luci-app-wshaper/luasrc/model/cbi/wshaper.lua new file mode 100644 index 0000000..6bd0255 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/luasrc/model/cbi/wshaper.lua @@ -0,0 +1,46 @@ +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +require("luci.tools.webadmin") + +m = Map("wshaper", translate("Wondershaper"), + translate("Wondershaper shapes traffic to ensure low latencies for interactive traffic even when your " .. + "internet connection is highly saturated.")) + +s = m:section(NamedSection, "settings", "wshaper", translate("Wondershaper settings")) +s.anonymous = true + +network = s:option(ListValue, "network", translate("Interface")) +luci.tools.webadmin.cbi_add_networks(network) + +uplink = s:option(Value, "uplink", translate("Uplink"), translate("Upstream bandwidth in kbit/s")) +uplink.optional = false +uplink.datatype = "uinteger" +uplink.default = "240" + +uplink = s:option(Value, "downlink", translate("Downlink"), translate("Downstream bandwidth in kbit/s")) +uplink.optional = false +uplink.datatype = "uinteger" +uplink.default = "200" + +nopriohostsrc = s:option(DynamicList, "nopriohostsrc", translate("Low priority hosts (Source)"), translate("Host or Network in CIDR notation.")) +nopriohostsrc.optional = true +nopriohostsrc.datatype = ipaddr +nopriohostsrc.placeholder = "10.0.0.1/32" + +nopriohostdst = s:option(DynamicList, "nopriohostdst", translate("Low priority hosts (Destination)"), translate("Host or Network in CIDR notation.")) +nopriohostdst.optional = true +nopriohostdst.datatype = ipaddr +nopriohostdst.placeholder = "10.0.0.1/32" + +noprioportsrc = s:option(DynamicList, "noprioportsrc", translate("Low priority source ports")) +noprioportsrc.optional = true +noprioportsrc.datatype = "range(0,65535)" +noprioportsrc.placeholder = "21" + +noprioportdst = s:option(DynamicList, "noprioportdst", translate("Low priority destination ports")) +noprioportdst.optional = true +noprioportdst.datatype = "range(0,65535)" +noprioportdst.placeholder = "21" + +return m diff --git a/feeds/luci/applications/luci-app-wshaper/po/ca/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/ca/wshaper.po new file mode 100644 index 0000000..2560383 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/ca/wshaper.po @@ -0,0 +1,59 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-06-01 22:51+0200\n" +"PO-Revision-Date: 2014-07-01 03:51+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Downlink" +msgstr "Enllaç descendent" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Amplada de banda descendent en kbit/s" + +msgid "Host or Network in CIDR notation." +msgstr "Host o xarxa en notació CIDR." + +msgid "Interface" +msgstr "Interfície" + +msgid "Low priority destination ports" +msgstr "Ports de destí de baixa prioritat" + +msgid "Low priority hosts (Destination)" +msgstr "Hosts de baixa prioritat (destí)" + +msgid "Low priority hosts (Source)" +msgstr "Hosts de baixa prioritat (origen)" + +msgid "Low priority source ports" +msgstr "Ports d'origen de baixa prioritat" + +msgid "Uplink" +msgstr "Enllaç ascendent" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Amplada de banda ascendent en kbit/s" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Ajusts del Wondershaper" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"Wondershapter afaiçona el trànsit per assegurar latències baixes per a " +"trànsit interactiu encara que la vostra connexió de Internet estigui " +"altament saturada." diff --git a/feeds/luci/applications/luci-app-wshaper/po/cs/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/cs/wshaper.po new file mode 100644 index 0000000..bca6c4e --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/cs/wshaper.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-24 15:20+0200\n" +"Last-Translator: awm1 \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Downlink" +msgstr "Příchozí rychlost" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Rychlost stahování dat v kbit/s" + +msgid "Host or Network in CIDR notation." +msgstr "Adresa počítače nebo sítě v CIDR notaci." + +msgid "Interface" +msgstr "Síťové rozhraní" + +msgid "Low priority destination ports" +msgstr "Cílové porty s nízkou prioritou" + +msgid "Low priority hosts (Destination)" +msgstr "Adresy cílových počítačů s nízkou prioritou" + +msgid "Low priority hosts (Source)" +msgstr "Adresy zdrojových počítačů s nízkou prioritou" + +msgid "Low priority source ports" +msgstr "Zdrojové porty s nízkou prioritou" + +msgid "Uplink" +msgstr "Odchozí rychlost" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Rychlost odesílání dat v kbit/s" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Nastavení skriptu Wondershaper" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"Úkolem skriptu Wondershaper je řízení provozu na daném síťovém rozhraní. " +"Snaží se zajistit nízké přenosové zpoždění pro \"interaktivní\" síťový " +"provoz (např. SSH), a to především v okamžicích, kdy ostatní síťový provoz " +"zahltí linku." diff --git a/feeds/luci/applications/luci-app-wshaper/po/de/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/de/wshaper.po new file mode 100644 index 0000000..39dd617 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/de/wshaper.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2011-10-18 12:28+0200\n" +"Last-Translator: Manuel \n" +"Language-Team: \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Downlink" +msgstr "Download" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Download Bandbreite in kbit/s" + +msgid "Host or Network in CIDR notation." +msgstr "Rechner oder Netzwerk in CIDR Schreibweise" + +msgid "Interface" +msgstr "Schnittstelle" + +msgid "Low priority destination ports" +msgstr "Zielports mit niedriger Priorität" + +msgid "Low priority hosts (Destination)" +msgstr "Zielrechner mit nideriger Priorität" + +msgid "Low priority hosts (Source)" +msgstr "Quellrechner mit neidriger Priorität" + +msgid "Low priority source ports" +msgstr "Quellports mit niedriger Priorität" + +msgid "Uplink" +msgstr "Upload" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Upload Bandbreite in kbit/s" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Wondershaper Einstellungen" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"Wondershaper ermöglicht mit Hilfe von Traffic Shaping niedrige Latenzzeiten " +"für interaktiven Internetverkehr selbst wenn die Internetverbindung extrem " +"ausgelastet ist." diff --git a/feeds/luci/applications/luci-app-wshaper/po/el/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/el/wshaper.po new file mode 100644 index 0000000..6d2f092 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/el/wshaper.po @@ -0,0 +1,55 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-18 17:10+0200\n" +"PO-Revision-Date: 2012-03-18 17:10+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Downlink" +msgstr "" + +msgid "Downstream bandwidth in kbit/s" +msgstr "" + +msgid "Host or Network in CIDR notation." +msgstr "" + +msgid "Interface" +msgstr "Διεπαφή" + +msgid "Low priority destination ports" +msgstr "" + +msgid "Low priority hosts (Destination)" +msgstr "" + +msgid "Low priority hosts (Source)" +msgstr "" + +msgid "Low priority source ports" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Upstream bandwidth in kbit/s" +msgstr "" + +msgid "Wondershaper" +msgstr "" + +msgid "Wondershaper settings" +msgstr "" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" diff --git a/feeds/luci/applications/luci-app-wshaper/po/en/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/en/wshaper.po new file mode 100644 index 0000000..b685839 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/en/wshaper.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Project-Id-Version: LuCI\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en\n" +"X-Generator: Poedit 1.6.10\n" + +msgid "Downlink" +msgstr "" + +msgid "Downstream bandwidth in kbit/s" +msgstr "" + +msgid "Host or Network in CIDR notation." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Low priority destination ports" +msgstr "" + +msgid "Low priority hosts (Destination)" +msgstr "" + +msgid "Low priority hosts (Source)" +msgstr "" + +msgid "Low priority source ports" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Upstream bandwidth in kbit/s" +msgstr "" + +msgid "Wondershaper" +msgstr "" + +msgid "Wondershaper settings" +msgstr "" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" diff --git a/feeds/luci/applications/luci-app-wshaper/po/es/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/es/wshaper.po new file mode 100644 index 0000000..f562760 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/es/wshaper.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-16 01:00+0200\n" +"PO-Revision-Date: 2012-09-03 18:57+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Downlink" +msgstr "Enlace de bajada" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Ancho de banda de bajada en Kbit/s" + +msgid "Host or Network in CIDR notation." +msgstr "Máquina o red en notación CIDR." + +msgid "Interface" +msgstr "Interfaz" + +msgid "Low priority destination ports" +msgstr "Puertos de destino de prioridad baja" + +msgid "Low priority hosts (Destination)" +msgstr "Máquinas de prioridad baja (destino)" + +msgid "Low priority hosts (Source)" +msgstr "Máquinas de prioridad baja (origen)" + +msgid "Low priority source ports" +msgstr "Puertos de origen de prioridad baja" + +msgid "Uplink" +msgstr "Enlace de salida" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Ancho de banda de subida en Kbit/s" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Configuración de Wondershaper" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"Wondershaper modela el tráfico para asegurar latencias bajas al tráfico " +"interactivo incluso cuando la conexión a Internet esté muy saturada." diff --git a/feeds/luci/applications/luci-app-wshaper/po/fr/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/fr/wshaper.po new file mode 100644 index 0000000..2fc9f53 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/fr/wshaper.po @@ -0,0 +1,62 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Project-Id-Version: LuCI\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"X-Generator: Poedit 1.6.10\n" + +msgid "Downlink" +msgstr "Lien descendant (télé-chargement)" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Bande-passante descendante en kbit/s" + +msgid "Host or Network in CIDR notation." +msgstr "Hôte ou réseau en notation CIDR." + +msgid "Interface" +msgstr "Interface" + +msgid "Low priority destination ports" +msgstr "Ports-cible à faible priorité" + +msgid "Low priority hosts (Destination)" +msgstr "Hôtes-cible à faible priorité" + +msgid "Low priority hosts (Source)" +msgstr "Hôtes-source à faible priorité" + +msgid "Low priority source ports" +msgstr "Ports-source à faible priorité" + +msgid "Uplink" +msgstr "Lien montant (envois)" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Bande-passante montante en kbit/s" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Paramètres Wondershaper" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" + +#~ msgid "" +#~ "Wondershaper uses traffic shaping to ensure low latencies for interactive " +#~ "traffic even when your internet connection is highly saturated." +#~ msgstr "" +#~ "Wondershaper gère la priorités entre les flux pour assurer une faible " +#~ "latence au trafic interactif même quand votre connexion Internet est très " +#~ "chargée." diff --git a/feeds/luci/applications/luci-app-wshaper/po/he/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/he/wshaper.po new file mode 100644 index 0000000..f03d5df --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/he/wshaper.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Project-Id-Version: LuCI\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"X-Generator: Poedit 1.6.10\n" + +msgid "Downlink" +msgstr "" + +msgid "Downstream bandwidth in kbit/s" +msgstr "" + +msgid "Host or Network in CIDR notation." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Low priority destination ports" +msgstr "" + +msgid "Low priority hosts (Destination)" +msgstr "" + +msgid "Low priority hosts (Source)" +msgstr "" + +msgid "Low priority source ports" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Upstream bandwidth in kbit/s" +msgstr "" + +msgid "Wondershaper" +msgstr "" + +msgid "Wondershaper settings" +msgstr "" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" diff --git a/feeds/luci/applications/luci-app-wshaper/po/hu/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/hu/wshaper.po new file mode 100644 index 0000000..2377fa5 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/hu/wshaper.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Downlink" +msgstr "Letöltés" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Letöltési sebesség kbit/másodberc-ben" + +msgid "Host or Network in CIDR notation." +msgstr "Gép vagy hálózat (CIDR jelöléssel)" + +msgid "Interface" +msgstr "Interfész" + +msgid "Low priority destination ports" +msgstr "Alacsony prioritású cél portok" + +msgid "Low priority hosts (Destination)" +msgstr "Alacson prioritású cél gépek" + +msgid "Low priority hosts (Source)" +msgstr "Alacsony prioritású forrás gépek" + +msgid "Low priority source ports" +msgstr "Alacson prioritású forrás portok" + +msgid "Uplink" +msgstr "Feltöltés" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Feltöltési sebesség kbit/másodperc-ben" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Wondershaper beállítások" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"A Wondershaper 'traffic shaping'-et használatával biztosítja az interaktív " +"forgalom alacsony késleletetését még akkor is ha az internet kapcsolat " +"erősen leterhelt." diff --git a/feeds/luci/applications/luci-app-wshaper/po/it/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/it/wshaper.po new file mode 100644 index 0000000..6a72c7e --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/it/wshaper.po @@ -0,0 +1,59 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-01-28 01:36+0200\n" +"PO-Revision-Date: 2013-02-03 14:07+0200\n" +"Last-Translator: Francesco <3gasas@gmail.com>\n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Downlink" +msgstr "Collegamento discendente" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Larghezza di banda in downstream in kbit/s" + +msgid "Host or Network in CIDR notation." +msgstr "Host o rete in notazione CIDR." + +msgid "Interface" +msgstr "Interfaccia" + +msgid "Low priority destination ports" +msgstr "Porte di destinazione a bassa priorità" + +msgid "Low priority hosts (Destination)" +msgstr "Hosts a bassa priorità (Destinazione)" + +msgid "Low priority hosts (Source)" +msgstr "Hosts a bassa priorità (Fonte)" + +msgid "Low priority source ports" +msgstr "Porte sorgenti a bassa priorità" + +msgid "Uplink" +msgstr "Uplink" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Larghezza di banda in upstream in kbit/s" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Impostazioni Wondershaper" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"WonderShaper usa la regolazione del traffico per garantire bassa latenza per " +"il traffico interattivo anche quando la connessione a Internet è molto " +"satura." diff --git a/feeds/luci/applications/luci-app-wshaper/po/ja/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/ja/wshaper.po new file mode 100644 index 0000000..d58476c --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/ja/wshaper.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-03-17 18:28+0200\n" +"PO-Revision-Date: 2012-03-18 09:07+0200\n" +"Last-Translator: Kentaro \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Downlink" +msgstr "下りリンク" + +msgid "Downstream bandwidth in kbit/s" +msgstr "下りリンク帯域 (kbit/sec)" + +msgid "Host or Network in CIDR notation." +msgstr "ホスト名またはCIDR表記のネットワークアドレス" + +msgid "Interface" +msgstr "インターフェース" + +msgid "Low priority destination ports" +msgstr "低優先度の宛先ポート" + +msgid "Low priority hosts (Destination)" +msgstr "低優先度の宛先ホスト" + +msgid "Low priority hosts (Source)" +msgstr "低優先度の送信元ホスト" + +msgid "Low priority source ports" +msgstr "低優先度の送信元ポート" + +msgid "Uplink" +msgstr "上りリンク" + +msgid "Upstream bandwidth in kbit/s" +msgstr "上りリンク帯域 (kbit/sec)" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Wondershaper 設定" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"Wondweshaperは、インターネット接続が飽和状態の場合でも、低いレイテンシ・円滑" +"な通信を実現するためにトラフィック・シェーピングを行います。" diff --git a/feeds/luci/applications/luci-app-wshaper/po/ms/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/ms/wshaper.po new file mode 100644 index 0000000..ede1386 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/ms/wshaper.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Plural-Forms: nplurals=1; plural=0;\n" +"Project-Id-Version: LuCI\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"X-Generator: Poedit 1.6.10\n" + +msgid "Downlink" +msgstr "" + +msgid "Downstream bandwidth in kbit/s" +msgstr "" + +msgid "Host or Network in CIDR notation." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Low priority destination ports" +msgstr "" + +msgid "Low priority hosts (Destination)" +msgstr "" + +msgid "Low priority hosts (Source)" +msgstr "" + +msgid "Low priority source ports" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Upstream bandwidth in kbit/s" +msgstr "" + +msgid "Wondershaper" +msgstr "" + +msgid "Wondershaper settings" +msgstr "" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" diff --git a/feeds/luci/applications/luci-app-wshaper/po/no/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/no/wshaper.po new file mode 100644 index 0000000..1b1ab32 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/no/wshaper.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Language: nn\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Project-Id-Version: LuCI\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.6.10\n" + +msgid "Downlink" +msgstr "" + +msgid "Downstream bandwidth in kbit/s" +msgstr "" + +msgid "Host or Network in CIDR notation." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Low priority destination ports" +msgstr "" + +msgid "Low priority hosts (Destination)" +msgstr "" + +msgid "Low priority hosts (Source)" +msgstr "" + +msgid "Low priority source ports" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Upstream bandwidth in kbit/s" +msgstr "" + +msgid "Wondershaper" +msgstr "" + +msgid "Wondershaper settings" +msgstr "" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" diff --git a/feeds/luci/applications/luci-app-wshaper/po/pl/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/pl/wshaper.po new file mode 100644 index 0000000..a85bf00 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/pl/wshaper.po @@ -0,0 +1,59 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-04-14 14:15+0200\n" +"PO-Revision-Date: 2012-04-14 17:21+0200\n" +"Last-Translator: Tomecki \n" +"Language-Team: LANGUAGE \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Downlink" +msgstr "Downlink" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Przepustowość pobierania w kbit/s" + +msgid "Host or Network in CIDR notation." +msgstr "Adres hosta lub adres sieci w notacji CIDR" + +msgid "Interface" +msgstr "Interfejs" + +msgid "Low priority destination ports" +msgstr "Porty docelowe o niskim priorytecie" + +msgid "Low priority hosts (Destination)" +msgstr "Hosty docelowe o niskim priorytecie" + +msgid "Low priority hosts (Source)" +msgstr "Hosty źródłowe o niskim priorytecie" + +msgid "Low priority source ports" +msgstr "Porty źródłowe o niskim priorytecie" + +msgid "Uplink" +msgstr "Uplink" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Przepustowość wysyłania w kbit/s" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Ustawienia Wondershaper" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"Wondershaper wykorzystuje kształtowanie ruchu aby zapewnić niskie opóźnienia " +"nawet wtedy, gdy Twoje połączenie internetowe jest wysycone." diff --git a/feeds/luci/applications/luci-app-wshaper/po/pt-br/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/pt-br/wshaper.po new file mode 100644 index 0000000..f973ebb --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/pt-br/wshaper.po @@ -0,0 +1,59 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-10-18 19:32+0200\n" +"PO-Revision-Date: 2011-10-18 19:39+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "Downlink" +msgstr "Velocidade para baixar (downlink)" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Taxa de transferência para baixar em kbit/s" + +msgid "Host or Network in CIDR notation." +msgstr "Equipamento ou Rede na notação CIDR." + +msgid "Interface" +msgstr "Interface" + +msgid "Low priority destination ports" +msgstr "Portas de destino de baixa prioridade" + +msgid "Low priority hosts (Destination)" +msgstr "Equipamentos de baixa prioridade (Destino)" + +msgid "Low priority hosts (Source)" +msgstr "Equipamentos de baixa prioridade (Origem)" + +msgid "Low priority source ports" +msgstr "Portas de origem de baixa prioridade" + +msgid "Uplink" +msgstr "Velocidade para subir (uplink)" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Taxa de transferência para subir em kbit/s" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Configuração do Wondershaper" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"Wondershaper usa o controle de tráfego para garantir baixa latência para " +"tráfego interativo mesmo quando sua conexão com a internet está extremamente " +"saturada." diff --git a/feeds/luci/applications/luci-app-wshaper/po/pt/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/pt/wshaper.po new file mode 100644 index 0000000..96a7be8 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/pt/wshaper.po @@ -0,0 +1,55 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-05-31 12:13+0200\n" +"PO-Revision-Date: 2013-05-31 12:15+0200\n" +"Last-Translator: joao.f.vieira \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Downlink" +msgstr "" + +msgid "Downstream bandwidth in kbit/s" +msgstr "" + +msgid "Host or Network in CIDR notation." +msgstr "" + +msgid "Interface" +msgstr "Interface" + +msgid "Low priority destination ports" +msgstr "Porta de destino com baixa prioridade" + +msgid "Low priority hosts (Destination)" +msgstr "Hosts com baixa prioridade (Destino)" + +msgid "Low priority hosts (Source)" +msgstr "Hosts com baixa prioridade (Origem)" + +msgid "Low priority source ports" +msgstr "Portas de origem com baixa prioridade" + +msgid "Uplink" +msgstr "" + +msgid "Upstream bandwidth in kbit/s" +msgstr "" + +msgid "Wondershaper" +msgstr "" + +msgid "Wondershaper settings" +msgstr "" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" diff --git a/feeds/luci/applications/luci-app-wshaper/po/ro/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/ro/wshaper.po new file mode 100644 index 0000000..d2569f6 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/ro/wshaper.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-06-28 18:45+0200\n" +"PO-Revision-Date: 2014-06-28 18:46+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: LANGUAGE \n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Downlink" +msgstr "" + +msgid "Downstream bandwidth in kbit/s" +msgstr "" + +msgid "Host or Network in CIDR notation." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Low priority destination ports" +msgstr "" + +msgid "Low priority hosts (Destination)" +msgstr "" + +msgid "Low priority hosts (Source)" +msgstr "" + +msgid "Low priority source ports" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Upstream bandwidth in kbit/s" +msgstr "" + +msgid "Wondershaper" +msgstr "" + +msgid "Wondershaper settings" +msgstr "" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" diff --git a/feeds/luci/applications/luci-app-wshaper/po/ru/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/ru/wshaper.po new file mode 100644 index 0000000..1984aac --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/ru/wshaper.po @@ -0,0 +1,61 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: wsharper\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-01-26 15:09+0200\n" +"PO-Revision-Date: 2012-08-15 11:53+0300\n" +"Last-Translator: Roman A. aka BasicXP \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.4\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "Downlink" +msgstr "Нисходящий канал" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Ширина полосы пропускания прямого канала (кбит/с)" + +msgid "Host or Network in CIDR notation." +msgstr "Хост или сеть в нотации CIDR." + +msgid "Interface" +msgstr "Интерфейс" + +msgid "Low priority destination ports" +msgstr "Низкоприоритетные порты назначения" + +msgid "Low priority hosts (Destination)" +msgstr "Низкоприоритетные хосты назначения" + +msgid "Low priority hosts (Source)" +msgstr "Низкоприоритетные хосты источника" + +msgid "Low priority source ports" +msgstr "Низкоприоритетные порты источника" + +msgid "Uplink" +msgstr "Восходящий канал" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Пропускная способность обратного канала (кбит/c)" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Установки Wondershaper" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"Wondershaper использует формирование трафика для обеспечения низких задержек " +"интерактивного трафика даже в случае высокой загруженности интернет-" +"соединения." diff --git a/feeds/luci/applications/luci-app-wshaper/po/sk/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/sk/wshaper.po new file mode 100644 index 0000000..4e03aa8 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/sk/wshaper.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Downlink" +msgstr "" + +msgid "Downstream bandwidth in kbit/s" +msgstr "" + +msgid "Host or Network in CIDR notation." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Low priority destination ports" +msgstr "" + +msgid "Low priority hosts (Destination)" +msgstr "" + +msgid "Low priority hosts (Source)" +msgstr "" + +msgid "Low priority source ports" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Upstream bandwidth in kbit/s" +msgstr "" + +msgid "Wondershaper" +msgstr "" + +msgid "Wondershaper settings" +msgstr "" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" diff --git a/feeds/luci/applications/luci-app-wshaper/po/sv/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/sv/wshaper.po new file mode 100644 index 0000000..4f0fc53 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/sv/wshaper.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Downlink" +msgstr "Nerladdningslänk" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Nerströms bandbredd i kbit/s" + +msgid "Host or Network in CIDR notation." +msgstr "Värd eller Nätverk i CIDR-noteringen" + +msgid "Interface" +msgstr "Gränssnitt" + +msgid "Low priority destination ports" +msgstr "Destinations-portar med låg prioritet" + +msgid "Low priority hosts (Destination)" +msgstr "Värdar med låg prioritet (Destination)" + +msgid "Low priority hosts (Source)" +msgstr "Värdar med låg prioritet (Källa)" + +msgid "Low priority source ports" +msgstr "Käll-portar med låg prioritet" + +msgid "Uplink" +msgstr "Uppladdningslänk" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Bandbredd uppströms i kbit/s" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Inställningar för Wondershaper" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"Wondershaper formar trafiken för att säkerställa låga latenser för " +"interaktiv trafik även när din internetanslutning är mättad som mest." diff --git a/feeds/luci/applications/luci-app-wshaper/po/templates/wshaper.pot b/feeds/luci/applications/luci-app-wshaper/po/templates/wshaper.pot new file mode 100644 index 0000000..42de011 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/templates/wshaper.pot @@ -0,0 +1,43 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Downlink" +msgstr "" + +msgid "Downstream bandwidth in kbit/s" +msgstr "" + +msgid "Host or Network in CIDR notation." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Low priority destination ports" +msgstr "" + +msgid "Low priority hosts (Destination)" +msgstr "" + +msgid "Low priority hosts (Source)" +msgstr "" + +msgid "Low priority source ports" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Upstream bandwidth in kbit/s" +msgstr "" + +msgid "Wondershaper" +msgstr "" + +msgid "Wondershaper settings" +msgstr "" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" diff --git a/feeds/luci/applications/luci-app-wshaper/po/tr/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/tr/wshaper.po new file mode 100644 index 0000000..7c0acb0 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/tr/wshaper.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Downlink" +msgstr "" + +msgid "Downstream bandwidth in kbit/s" +msgstr "" + +msgid "Host or Network in CIDR notation." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Low priority destination ports" +msgstr "" + +msgid "Low priority hosts (Destination)" +msgstr "" + +msgid "Low priority hosts (Source)" +msgstr "" + +msgid "Low priority source ports" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Upstream bandwidth in kbit/s" +msgstr "" + +msgid "Wondershaper" +msgstr "" + +msgid "Wondershaper settings" +msgstr "" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" diff --git a/feeds/luci/applications/luci-app-wshaper/po/uk/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/uk/wshaper.po new file mode 100644 index 0000000..94d20df --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/uk/wshaper.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2012-04-28 21:54+0200\n" +"Last-Translator: Yurii \n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Downlink" +msgstr "Прямий канал" + +msgid "Downstream bandwidth in kbit/s" +msgstr "Ширина смуги пропускання прямого каналу (кбіт/с)" + +msgid "Host or Network in CIDR notation." +msgstr "Вузол або мережа в нотації CIDR." + +msgid "Interface" +msgstr "Інтерфейс" + +msgid "Low priority destination ports" +msgstr "Низькопріоритетні порти призначення" + +msgid "Low priority hosts (Destination)" +msgstr "Низькопріоритетні вузли призначення" + +msgid "Low priority hosts (Source)" +msgstr "Низькопріоритетні вузли джерела" + +msgid "Low priority source ports" +msgstr "Низькопріоритетні порти джерела" + +msgid "Uplink" +msgstr "Зворотній канал" + +msgid "Upstream bandwidth in kbit/s" +msgstr "Ширина смуги пропускання зворотного каналу (кбіт/c)" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Налаштування Wondershaper" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"Wondershaper використовує формування трафіку для забезпечення низької " +"затримки інтерактивного трафіку, навіть якщо ваше з'єднання з інтернетом " +"дуже насичене." diff --git a/feeds/luci/applications/luci-app-wshaper/po/vi/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/vi/wshaper.po new file mode 100644 index 0000000..e0b8e53 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/vi/wshaper.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Plural-Forms: nplurals=1; plural=0;\n" +"Project-Id-Version: LuCI\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"X-Generator: Poedit 1.6.10\n" + +msgid "Downlink" +msgstr "" + +msgid "Downstream bandwidth in kbit/s" +msgstr "" + +msgid "Host or Network in CIDR notation." +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Low priority destination ports" +msgstr "" + +msgid "Low priority hosts (Destination)" +msgstr "" + +msgid "Low priority hosts (Source)" +msgstr "" + +msgid "Low priority source ports" +msgstr "" + +msgid "Uplink" +msgstr "" + +msgid "Upstream bandwidth in kbit/s" +msgstr "" + +msgid "Wondershaper" +msgstr "" + +msgid "Wondershaper settings" +msgstr "" + +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" diff --git a/feeds/luci/applications/luci-app-wshaper/po/zh-cn/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/zh-cn/wshaper.po new file mode 100644 index 0000000..a35ccd0 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/zh-cn/wshaper.po @@ -0,0 +1,58 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-11-03 08:25+0200\n" +"PO-Revision-Date: 2013-10-10 20:15+0200\n" +"Last-Translator: Tanyingyu \n" +"Language-Team: LANGUAGE \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Downlink" +msgstr "下载链接" + +msgid "Downstream bandwidth in kbit/s" +msgstr "下载带宽kbit/s" + +msgid "Host or Network in CIDR notation." +msgstr "主机或网络的CIDR标记。" + +msgid "Interface" +msgstr "端口" + +msgid "Low priority destination ports" +msgstr "低优先级目标端口" + +msgid "Low priority hosts (Destination)" +msgstr "低优先级目标主机" + +msgid "Low priority hosts (Source)" +msgstr "低优先级源主机" + +msgid "Low priority source ports" +msgstr "低优先级源端口" + +msgid "Uplink" +msgstr "上联" + +msgid "Upstream bandwidth in kbit/s" +msgstr "上行带宽kbit/s" + +msgid "Wondershaper" +msgstr "Wondershaper" + +msgid "Wondershaper settings" +msgstr "Wondershaper设置" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"Wondershaper通过流量匹配,确保低延时的交互数据包,甚至当你的互联网连接是高度饱" +"和。" diff --git a/feeds/luci/applications/luci-app-wshaper/po/zh-tw/wshaper.po b/feeds/luci/applications/luci-app-wshaper/po/zh-tw/wshaper.po new file mode 100644 index 0000000..1814825 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/po/zh-tw/wshaper.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-14 12:40+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Downlink" +msgstr "下載" + +msgid "Downstream bandwidth in kbit/s" +msgstr "以 kbit/s表示的下載頻寬" + +msgid "Host or Network in CIDR notation." +msgstr "CIDR無類別域間路由中的主機或網路" + +msgid "Interface" +msgstr "介面" + +msgid "Low priority destination ports" +msgstr "低優先權目地埠號" + +msgid "Low priority hosts (Destination)" +msgstr "低優先權主機(目的地)" + +msgid "Low priority hosts (Source)" +msgstr "低優先權主機(來源)" + +msgid "Low priority source ports" +msgstr "低優先權來源埠號" + +msgid "Uplink" +msgstr "上傳" + +msgid "Upstream bandwidth in kbit/s" +msgstr "以kbit/s表示的上傳頻寬" + +msgid "Wondershaper" +msgstr "Wondershaper頻寬管理" + +msgid "Wondershaper settings" +msgstr "Wondershaper設定值" + +#, fuzzy +msgid "" +"Wondershaper shapes traffic to ensure low latencies for interactive traffic " +"even when your internet connection is highly saturated." +msgstr "" +"既使你的網路連線達到高飽和, Wondershaper採用流量銳化塑形以針對未知的流量保證" +"低延遲" diff --git a/feeds/luci/applications/luci-app-wshaper/root/etc/uci-defaults/40_wshaper b/feeds/luci/applications/luci-app-wshaper/root/etc/uci-defaults/40_wshaper new file mode 100644 index 0000000..918dff2 --- /dev/null +++ b/feeds/luci/applications/luci-app-wshaper/root/etc/uci-defaults/40_wshaper @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@wshaper[-1] + set ucitrack.wshaper="wshaper" + set ucitrack.wshaper.exec='/etc/init.d/wshaper start' + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/feeds/luci/build/i18n-init.sh b/feeds/luci/build/i18n-init.sh new file mode 100755 index 0000000..b20fbc3 --- /dev/null +++ b/feeds/luci/build/i18n-init.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +PATTERN=$1 +SCM= + +[ -d .svn ] && SCM="svn" +git=$( which git 2>/dev/null ) +[ "$git" ] && "$git" status >/dev/null && SCM="git" + +[ -z "$SCM" ] && { + echo "Unsupported SCM tool" >&2 + exit 1 +} + +[ -z "$PATTERN" ] && PATTERN="*.pot" + +for lang in $(cd po; echo ?? ??_??); do + for file in $(cd po/templates; echo $PATTERN); do + if [ -f po/templates/$file -a ! -f "po/$lang/${file%.pot}.po" ]; then + msginit --no-translator -l "$lang" -i "po/templates/$file" -o "po/$lang/${file%.pot}.po" + $SCM add "po/$lang/${file%.pot}.po" + fi + done +done diff --git a/feeds/luci/build/i18n-po2lua.pl b/feeds/luci/build/i18n-po2lua.pl new file mode 100755 index 0000000..5129055 --- /dev/null +++ b/feeds/luci/build/i18n-po2lua.pl @@ -0,0 +1,27 @@ +#!/usr/bin/perl + +@ARGV == 2 || die "Usage: $0 \n"; + +my $source_dir = shift @ARGV; +my $target_dir = shift @ARGV; + +if( ! -d $target_dir ) +{ + system('mkdir', '-p', $target_dir); +} + +if( open F, "find $source_dir -type f -name '*.po' |" ) +{ + while( chomp( my $file = readline F ) ) + { + my ( $lang, $basename ) = $file =~ m{.+/(\w+)/([^/]+)\.po$}; + $lang = lc $lang; + $lang =~ s/_/-/g; + + printf "Generating %-40s ", "$target_dir/$basename.$lang.lmo"; + system("./build/po2lmo", $file, "$target_dir/$basename.$lang.lmo"); + print ( -f "$target_dir/$basename.$lang.lmo" ? "done\n" : "empty\n" ); + } + + close F; +} diff --git a/feeds/luci/build/i18n-scan.pl b/feeds/luci/build/i18n-scan.pl new file mode 100755 index 0000000..899d90d --- /dev/null +++ b/feeds/luci/build/i18n-scan.pl @@ -0,0 +1,128 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Text::Balanced qw(extract_bracketed extract_delimited extract_tagged); + +@ARGV >= 1 || die "Usage: $0 \n"; + + +my %stringtable; + +sub dec_lua_str +{ + my $s = shift; + $s =~ s/[\s\n]+/ /g; + $s =~ s/\\n/\n/g; + $s =~ s/\\t/\t/g; + $s =~ s/\\(.)/$1/g; + $s =~ s/^ //; + $s =~ s/ $//; + return $s; +} + +sub dec_tpl_str +{ + my $s = shift; + $s =~ s/-$//; + $s =~ s/[\s\n]+/ /g; + $s =~ s/^ //; + $s =~ s/ $//; + $s =~ s/\\/\\\\/g; + return $s; +} + + +if( open F, "find @ARGV -type f '(' -name '*.htm' -o -name '*.lua' ')' |" ) +{ + while( defined( my $file = readline F ) ) + { + chomp $file; + + if( open S, "< $file" ) + { + local $/ = undef; + my $raw = ; + close S; + + + my $text = $raw; + + while( $text =~ s/ ^ .*? (?:translate|translatef|i18n|_) [\n\s]* \( /(/sgx ) + { + ( my $code, $text ) = extract_bracketed($text, q{('")}); + + $code =~ s/\\\n/ /g; + $code =~ s/^\([\n\s]*//; + $code =~ s/[\n\s]*\)$//; + + my $res = ""; + my $sub = ""; + + if( $code =~ /^['"]/ ) + { + while( defined $sub ) + { + ( $sub, $code ) = extract_delimited($code, q{'"}, q{\s*(?:\.\.\s*)?}); + + if( defined $sub && length($sub) > 2 ) + { + $res .= substr $sub, 1, length($sub) - 2; + } + else + { + undef $sub; + } + } + } + elsif( $code =~ /^(\[=*\[)/ ) + { + my $stag = quotemeta $1; + my $etag = $stag; + $etag =~ s/\[/]/g; + + ( $res ) = extract_tagged($code, $stag, $etag); + + $res =~ s/^$stag//; + $res =~ s/$etag$//; + } + + $res = dec_lua_str($res); + $stringtable{$res}++ if $res; + } + + + $text = $raw; + + while( $text =~ s/ ^ .*? <% -? [:_] /<%/sgx ) + { + ( my $code, $text ) = extract_tagged($text, '<%', '%>'); + + if( defined $code ) + { + $code = dec_tpl_str(substr $code, 2, length($code) - 4); + $stringtable{$code}++; + } + } + } + } + + close F; +} + + +if( open C, "| msgcat -" ) +{ + printf C "msgid \"\"\nmsgstr \"Content-Type: text/plain; charset=UTF-8\"\n\n"; + + foreach my $key ( sort keys %stringtable ) + { + if( length $key ) + { + $key =~ s/"/\\"/g; + printf C "msgid \"%s\"\nmsgstr \"\"\n\n", $key; + } + } + + close C; +} diff --git a/feeds/luci/build/i18n-sync.sh b/feeds/luci/build/i18n-sync.sh new file mode 100755 index 0000000..d4f9666 --- /dev/null +++ b/feeds/luci/build/i18n-sync.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +[ -d ./build ] || { + echo "Execute as ./build/i18n-sync.sh" >&2 + exit 1 +} + +./build/mkbasepot.sh + +find . -name '*.pot' -and -not -name base.pot -and -not -name rrdtool.pot | \ + while read path; do + dir="${path%/po/templates/*}" + echo -n "Updating ${path#./} ... " + ./build/i18n-scan.pl "$dir" > "$path" + echo "done" + done + +./build/i18n-update.pl diff --git a/feeds/luci/build/i18n-update.pl b/feeds/luci/build/i18n-update.pl new file mode 100755 index 0000000..c82b4fe --- /dev/null +++ b/feeds/luci/build/i18n-update.pl @@ -0,0 +1,83 @@ +#!/usr/bin/perl + +@ARGV <= 2 || die "Usage: $0 [] []\n"; + +my $source = shift @ARGV; +my $pattern = shift @ARGV || '*.po'; + +sub read_header +{ + my $file = shift || return; + local $/; + + open P, "< $file" || die "open(): $!"; + my $data = readline P; + close P; + + $data =~ / + ^ ( + msgid \s "" \n + msgstr \s "" \n + (?: " [^\n]+ " \n )+ + \n ) + /mx; + + return $1; +} + +sub write_header +{ + my $file = shift || return; + my $head = shift || return; + local $/; + + open P, "< $file" || die "open(): $!"; + my $data = readline P; + close P; + + $data =~ s/ + ^ ( + msgid \s "" \n + msgstr \s "" \n + (?: " [^\n]+ " \n )+ + \n ) + /$head/mx; + + open P, "> $file" || die "open(): $!"; + print P $data; + close P; +} + +my @dirs; + +if( ! $source ) +{ + @dirs = glob("./*/*/po/"); +} +else +{ + @dirs = ( $source ); +} + +foreach my $dir (@dirs) +{ + if( open F, "find $dir -type f -name '$pattern' |" ) + { + while( chomp( my $file = readline F ) ) + { + my ( $basename ) = $file =~ m{.+/([^/]+)\.po$}; + + if( -f "$dir/templates/$basename.pot" ) + { + my $head = read_header($file); + + printf "Updating %-40s", $file; + system("msgmerge", "-U", "-N", $file, "$dir/templates/$basename.pot"); + + write_header($file, $head); + } + } + + close F; + } +} diff --git a/feeds/luci/build/luadoc/doc.lua b/feeds/luci/build/luadoc/doc.lua new file mode 100755 index 0000000..383dde2 --- /dev/null +++ b/feeds/luci/build/luadoc/doc.lua @@ -0,0 +1,126 @@ +#!/usr/bin/env lua +------------------------------------------------------------------------------- +-- LuaDoc launcher. +-- @release $Id: luadoc.lua.in,v 1.1 2008/02/17 06:42:51 jasonsantos Exp $ +------------------------------------------------------------------------------- + +--local source = debug.getinfo(1).source or "" +--local mypath = source:match("@(.+)/[^/]+") + +--package.path = package.path .. ";" .. mypath .. "/?.lua;" .. mypath .. "/?/init.lua" + +require "luadoc.init" + +------------------------------------------------------------------------------- +-- Print version number. + +local function print_version () + print (string.format("%s\n%s\n%s", + luadoc._VERSION, + luadoc._DESCRIPTION, + luadoc._COPYRIGHT)) +end + +------------------------------------------------------------------------------- +-- Print usage message. + +local function print_help () + print ("Usage: "..arg[0]..[[ [options|files] +Generate documentation from files. Available options are: + -d path output directory path + -t path template directory path + -h, --help print this help and exit + --noindexpage do not generate global index page + --nofiles do not generate documentation for files + --nomodules do not generate documentation for modules + --doclet doclet_module doclet module to generate output + --taglet taglet_module taglet module to parse input code + -q, --quiet suppress all normal output + -v, --version print version information]]) +end + +local function off_messages (arg, i, options) + options.verbose = nil +end + +------------------------------------------------------------------------------- +-- Process options. TODO: use getopts. +-- @class table +-- @name OPTIONS + +local OPTIONS = { + d = function (arg, i, options) + local dir = arg[i+1] + if string.sub (dir, -2) ~= "/" then + dir = dir..'/' + end + options.output_dir = dir + return 1 + end, + t = function (arg, i, options) + local dir = arg[i+1] + if string.sub (dir, -2) ~= "/" then + dir = dir..'/' + end + options.template_dir = dir + return 1 + end, + h = print_help, + help = print_help, + q = off_messages, + quiet = off_messages, + v = print_version, + version = print_version, + doclet = function (arg, i, options) + options.doclet = arg[i+1] + return 1 + end, + taglet = function (arg, i, options) + options.taglet = arg[i+1] + return 1 + end, +} + +------------------------------------------------------------------------------- + +local function process_options (arg) + local files = {} + local options = require "luadoc.config" + local i = 1 + while i <= #arg do + local argi = arg[i] + if string.sub (argi, 1, 1) ~= '-' then + table.insert (files, argi) + else + local opt = string.sub (argi, 2) + if string.sub (opt, 1, 1) == '-' then + opt = string.gsub (opt, "%-", "") + end + if OPTIONS[opt] then + if OPTIONS[opt] (arg, i, options) then + i = i + 1 + end + else + options[opt] = 1 + end + end + i = i+1 + end + return files, options +end + +------------------------------------------------------------------------------- +-- Main function. Process command-line parameters and call luadoc processor. + +function main (arg) + -- Process options + local argc = #arg + if argc < 1 then + print_help () + return + end + local files, options = process_options (arg) + return luadoc.main(files, options) +end + +main(arg) diff --git a/feeds/luci/build/luadoc/luadoc/config.lua b/feeds/luci/build/luadoc/luadoc/config.lua new file mode 100644 index 0000000..9e4b9de --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/config.lua @@ -0,0 +1,34 @@ +------------------------------------------------------------------------------- +-- LuaDoc configuration file. This file contains the default options for +-- luadoc operation. These options can be overriden by the command line tool +-- @see luadoc.print_help +-- @release $Id: config.lua,v 1.6 2007/04/18 14:28:39 tomas Exp $ +------------------------------------------------------------------------------- + +module "luadoc.config" + +------------------------------------------------------------------------------- +-- Default options +-- @class table +-- @name default_options +-- @field output_dir default output directory for generated documentation, used +-- by several doclets +-- @field taglet parser used to analyze source code input +-- @field doclet documentation generator +-- @field template_dir directory with documentation templates, used by the html +-- doclet +-- @field verbose command line tool configuration to output processing +-- information + +local default_options = { + output_dir = "", + taglet = "luadoc.taglet.standard", + doclet = "luadoc.doclet.html", + -- TODO: find a way to define doclet specific options + template_dir = "luadoc/doclet/html/", + nomodules = false, + nofiles = false, + verbose = true, +} + +return default_options diff --git a/feeds/luci/build/luadoc/luadoc/doclet/debug.lua b/feeds/luci/build/luadoc/luadoc/doclet/debug.lua new file mode 100644 index 0000000..0b75f84 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/debug.lua @@ -0,0 +1,46 @@ +----------------------------------------------------------------- +-- LuaDoc debugging facilities. +-- @release $Id: debug.lua,v 1.3 2007/04/18 14:28:39 tomas Exp $ +----------------------------------------------------------------- + +module "luadoc.doclet.debug" + +function printline() + print(string.rep('-', 79)) +end + +----------------------------------------------------------------- +-- Print debug information about document +-- @param doc Table with the structured documentation. + +function start (doc) + print("Files:") + for _, filepath in ipairs(doc.files) do + print('\t', filepath) + end + printline() + + print("Modules:") + for _, modulename in ipairs(doc.modules) do + print('\t', modulename) + end + printline() + + for i, v in pairs(doc.files) do + print('\t', i, v) + end + printline() + for i, v in pairs(doc.files[doc.files[1]]) do + print(i, v) + end + + printline() + for i, v in pairs(doc.files[doc.files[1]].doc[1]) do + print(i, v) + end + printline() + print("Params") + for i, v in pairs(doc.files[doc.files[1]].doc[1].param) do + print(i, v) + end +end diff --git a/feeds/luci/build/luadoc/luadoc/doclet/formatter.lua b/feeds/luci/build/luadoc/luadoc/doclet/formatter.lua new file mode 100644 index 0000000..2d72538 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/formatter.lua @@ -0,0 +1,84 @@ +------------------------------------------------------------------------------- +-- Doclet to format source code according to LuaDoc standard tags. This doclet +-- (re)write .lua files adding missing standard tags. Texts are formatted to +-- 80 columns and function parameters are added based on code analysis. +-- +-- @release $Id: formatter.lua,v 1.5 2007/04/18 14:28:39 tomas Exp $ +------------------------------------------------------------------------------- + +local util = require "luadoc.util" +local assert, ipairs, pairs, type = assert, ipairs, pairs, type +local string = require"string" +local table = require"table" + +module "luadoc.doclet.formatter" + +options = { + output_dir = "./", +} + +------------------------------------------------------------------------------- +-- Assembly the output filename for an input file. +-- TODO: change the name of this function +function out_file (filename) + local h = filename + h = options.output_dir..h + return h +end + +------------------------------------------------------------------------------- +-- Generate a new lua file for each input lua file. If the user does not +-- specify a different output directory input files will be rewritten. +-- @param doc documentation table + +function start (doc) + local todo = "" + + -- Process files + for i, file_doc in ipairs(doc.files) do + -- assembly the filename + local filename = out_file(file_doc.name) + luadoc.logger:info(string.format("generating file `%s'", filename)) + + -- TODO: confirm file overwrite + local f = posix.open(filename, "w") + assert(f, string.format("could not open `%s' for writing", filename)) + + for _, block in ipairs(file_doc.doc) do + + -- write reorganized comments + f:write(string.rep("-", 80).."\n") + + -- description + f:write(util.comment(util.wrap(block.description, 77))) + f:write("\n") + + if block.class == "function" then + -- parameters + table.foreachi(block.param, function (_, param_name) + f:write(util.comment(util.wrap(string.format("@param %s %s", param_name, block.param[param_name] or todo), 77))) + f:write("\n") + end) + + -- return + if type(block.ret) == "table" then + table.foreachi(block.ret, function (_, ret) + f:write(util.comment(util.wrap(string.format("@return %s", ret), 77)).."\n") + end) + else + f:write(util.comment(util.wrap(string.format("@return %s", block.ret or todo), 77)).."\n") + end + end + + -- TODO: usage + -- TODO: see + + -- write code + for _, line in ipairs(block.code) do + f:write(line.."\n") + end + end + + f:close() + end +end diff --git a/feeds/luci/build/luadoc/luadoc/doclet/html.lua b/feeds/luci/build/luadoc/luadoc/doclet/html.lua new file mode 100644 index 0000000..e77fb74 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/html.lua @@ -0,0 +1,275 @@ +------------------------------------------------------------------------------- +-- Doclet that generates HTML output. This doclet generates a set of html files +-- based on a group of templates. The main templates are: +--
    +--
  • index.lp: index of modules and files;
  • +--
  • file.lp: documentation for a lua file;
  • +--
  • module.lp: documentation for a lua module;
  • +--
  • function.lp: documentation for a lua function. This is a +-- sub-template used by the others.
  • +--
+-- +-- @release $Id: html.lua,v 1.29 2007/12/21 17:50:48 tomas Exp $ +------------------------------------------------------------------------------- + +local assert, getfenv, ipairs, loadstring, pairs, setfenv, tostring, tonumber, type = assert, getfenv, ipairs, loadstring, pairs, setfenv, tostring, tonumber, type +local io = require"io" +local posix = require "nixio.fs" +local lp = require "luadoc.lp" +local luadoc = require"luadoc" +local package = package +local string = require"string" +local table = require"table" + +module "luadoc.doclet.html" + +------------------------------------------------------------------------------- +-- Looks for a file `name' in given path. Removed from compat-5.1 +-- @param path String with the path. +-- @param name String with the name to look for. +-- @return String with the complete path of the file found +-- or nil in case the file is not found. + +local function search (path, name) + for c in string.gfind(path, "[^;]+") do + c = string.gsub(c, "%?", name) + local f = io.open(c) + if f then -- file exist? + f:close() + return c + end + end + return nil -- file not found +end + +------------------------------------------------------------------------------- +-- Include the result of a lp template into the current stream. + +function include (template, env) + -- template_dir is relative to package.path + local templatepath = options.template_dir .. template + + -- search using package.path (modified to search .lp instead of .lua + local search_path = string.gsub(package.path, "%.lua", "") + local templatepath = search(search_path, templatepath) + assert(templatepath, string.format("template `%s' not found", template)) + + env = env or {} + env.table = table + env.io = io + env.lp = lp + env.ipairs = ipairs + env.tonumber = tonumber + env.tostring = tostring + env.type = type + env.luadoc = luadoc + env.options = options + + return lp.include(templatepath, env) +end + +------------------------------------------------------------------------------- +-- Returns a link to a html file, appending "../" to the link to make it right. +-- @param html Name of the html file to link to +-- @return link to the html file + +function link (html, from) + local h = html + from = from or "" + string.gsub(from, "/", function () h = "../" .. h end) + return h +end + +------------------------------------------------------------------------------- +-- Returns the name of the html file to be generated from a module. +-- Files with "lua" or "luadoc" extensions are replaced by "html" extension. +-- @param modulename Name of the module to be processed, may be a .lua file or +-- a .luadoc file. +-- @return name of the generated html file for the module + +function module_link (modulename, doc, from) + -- TODO: replace "." by "/" to create directories? + -- TODO: how to deal with module names with "/"? + assert(modulename) + assert(doc) + from = from or "" + + if doc.modules[modulename] == nil then +-- logger:error(string.format("unresolved reference to module `%s'", modulename)) + return + end + + local href = "modules/" .. modulename .. ".html" + string.gsub(from, "/", function () href = "../" .. href end) + return href +end + +------------------------------------------------------------------------------- +-- Returns the name of the html file to be generated from a lua(doc) file. +-- Files with "lua" or "luadoc" extensions are replaced by "html" extension. +-- @param to Name of the file to be processed, may be a .lua file or +-- a .luadoc file. +-- @param from path of where am I, based on this we append ..'s to the +-- beginning of path +-- @return name of the generated html file + +function file_link (to, from) + assert(to) + from = from or "" + + local href = to + href = string.gsub(href, "lua$", "html") + href = string.gsub(href, "luadoc$", "html") + href = "files/" .. href + string.gsub(from, "/", function () href = "../" .. href end) + return href +end + +------------------------------------------------------------------------------- +-- Returns a link to a function or to a table +-- @param fname name of the function or table to link to. +-- @param doc documentation table +-- @param kind String specying the kinf of element to link ("functions" or "tables"). + +function link_to (fname, doc, module_doc, file_doc, from, kind) + assert(fname) + assert(doc) + from = from or "" + kind = kind or "functions" + + if file_doc then + for _, func_name in pairs(file_doc[kind]) do + if func_name == fname then + return file_link(file_doc.name, from) .. "#" .. fname + end + end + end + + if module_doc and module_doc[kind] then + for func_name, tbl in pairs(module_doc[kind]) do + if func_name == fname then + return "#" .. fname + end + end + end + + local _, _, modulename, fname = string.find(fname, "^(.-)[%.%:]?([^%.%:]*)$") + assert(fname) + + -- if fname does not specify a module, use the module_doc + if string.len(modulename) == 0 and module_doc then + modulename = module_doc.name + end + + local module_doc = doc.modules[modulename] + if not module_doc then +-- logger:error(string.format("unresolved reference to function `%s': module `%s' not found", fname, modulename)) + return + end + + for _, func_name in pairs(module_doc[kind]) do + if func_name == fname then + return module_link(modulename, doc, from) .. "#" .. fname + end + end + +-- logger:error(string.format("unresolved reference to function `%s' of module `%s'", fname, modulename)) +end + +------------------------------------------------------------------------------- +-- Make a link to a file, module or function + +function symbol_link (symbol, doc, module_doc, file_doc, from) + assert(symbol) + assert(doc) + + local href = +-- file_link(symbol, from) or + module_link(symbol, doc, from) or + link_to(symbol, doc, module_doc, file_doc, from, "functions") or + link_to(symbol, doc, module_doc, file_doc, from, "tables") + + if not href then + logger:error(string.format("unresolved reference to symbol `%s'", symbol)) + end + + return href or "" +end + +------------------------------------------------------------------------------- +-- Assembly the output filename for an input file. +-- TODO: change the name of this function +function out_file (filename) + local h = filename + h = string.gsub(h, "lua$", "html") + h = string.gsub(h, "luadoc$", "html") + h = "files/" .. h +-- h = options.output_dir .. string.gsub (h, "^.-([%w_]+%.html)$", "%1") + h = options.output_dir .. h + return h +end + +------------------------------------------------------------------------------- +-- Assembly the output filename for a module. +-- TODO: change the name of this function +function out_module (modulename) + local h = modulename .. ".html" + h = "modules/" .. h + h = options.output_dir .. h + return h +end + +----------------------------------------------------------------- +-- Generate the output. +-- @param doc Table with the structured documentation. + +function start (doc) + -- Generate index file + if (#doc.files > 0 or #doc.modules > 0) and (not options.noindexpage) then + local filename = options.output_dir.."index.html" + logger:info(string.format("generating file `%s'", filename)) + local f = posix.open(filename, "w") + assert(f, string.format("could not open `%s' for writing", filename)) + io.output(f) + include("index.lp", { doc = doc }) + f:close() + end + + -- Process modules + if not options.nomodules then + for _, modulename in ipairs(doc.modules) do + local module_doc = doc.modules[modulename] + -- assembly the filename + local filename = out_module(modulename) + logger:info(string.format("generating file `%s'", filename)) + + local f = posix.open(filename, "w") + assert(f, string.format("could not open `%s' for writing", filename)) + io.output(f) + include("module.lp", { doc = doc, module_doc = module_doc }) + f:close() + end + end + + -- Process files + if not options.nofiles then + for _, filepath in ipairs(doc.files) do + local file_doc = doc.files[filepath] + -- assembly the filename + local filename = out_file(file_doc.name) + logger:info(string.format("generating file `%s'", filename)) + + local f = posix.open(filename, "w") + assert(f, string.format("could not open `%s' for writing", filename)) + io.output(f) + include("file.lp", { doc = doc, file_doc = file_doc} ) + f:close() + end + end + + -- copy extra files + local f = posix.open(options.output_dir.."luadoc.css", "w") + io.output(f) + include("luadoc.css") + f:close() +end diff --git a/feeds/luci/build/luadoc/luadoc/doclet/html/constant.lp b/feeds/luci/build/luadoc/luadoc/doclet/html/constant.lp new file mode 100644 index 0000000..2e35392 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/html/constant.lp @@ -0,0 +1,28 @@ +<% +if module_doc then + from = "modules/"..module_doc.name +elseif file_doc then + from = "files/.."..file_doc.name +else + from = "" +end +%> + +
<%=const.private and "local " or ""%><%=const.name:gsub(".+%.","")%>
+
+<%=const.description or ""%> + +<%if type(const.see) == "string" then %> +

See also:

+ <%=const.see%> +<%elseif type(const.see) == "table" and #const.see > 0 then %> +

See also:

+ +
diff --git a/feeds/luci/build/luadoc/luadoc/doclet/html/file.lp b/feeds/luci/build/luadoc/luadoc/doclet/html/file.lp new file mode 100644 index 0000000..68f4864 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/html/file.lp @@ -0,0 +1,112 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

File <%=file_doc.name%>

+ +<%if file_doc.description then%> +

<%=file_doc.description%>

+<%end%> +<%if file_doc.author then%> +

<%= #file_doc.author>1 and "Authors" or "Author" %>: + +<%for _, author in ipairs(file_doc.author) do%> + +<%end%> +
<%= author %>
+

+<%end%> +<%if file_doc.copyright then%> +

Copyright ©<%=file_doc.copyright%>

+<%end%> +<%if file_doc.release then%> +

Release: <%=file_doc.release%>

+<%end%> + +<%if #file_doc.functions > 0 then%> +

Functions

+ +<%for _, func_name in ipairs(file_doc.functions) do + local func_data = file_doc.functions[func_name]%> + + + + +<%end%> +
<%=func_data.private and "local " or ""%><%=func_name%> (<%=table.concat(func_data.param or {}, ", ")%>)<%=func_data.summary%>
+<%end%> + + +<%if #file_doc.tables > 0 then%> +

Tables

+ +<%for _, tab_name in ipairs(file_doc.tables) do%> + + + + +<%end%> +
<%=tab_name%><%=file_doc.tables[tab_name].summary%>
+<%end%> + + +
+
+ + + +<%if #file_doc.functions > 0 then%> +

Functions

+
+<%for _, func_name in ipairs(file_doc.functions) do%> +<%=luadoc.doclet.html.include("function.lp", { doc=doc, file_doc=file_doc, func=file_doc.functions[func_name] })%> +<%end%> +
+<%end%> + + +<%if #file_doc.tables > 0 then%> +

Tables

+
+<%for _, tab_name in ipairs(file_doc.tables) do%> +<%=luadoc.doclet.html.include("table.lp", { doc=doc, file_doc=file_doc, tab=file_doc.tables[tab_name] })%> +<%end%> +
+<%end%> + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/build/luadoc/luadoc/doclet/html/function.lp b/feeds/luci/build/luadoc/luadoc/doclet/html/function.lp new file mode 100644 index 0000000..29d403e --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/html/function.lp @@ -0,0 +1,64 @@ +<% +if module_doc then + from = "modules/"..module_doc.name +elseif file_doc then + from = "files/.."..file_doc.name +else + from = "" +end +%> + +
<%=func.private and "local " or ""%><%=func.printname%> (<%=table.concat(func.param or {}, ", ")%>)
+
+<%=func.description or ""%> + +<%if type(func.param) == "table" and #func.param > 0 then%> +

Parameters

+
    + <%for p = 1, #func.param do%> +
  • + <%=func.param[p]%>: <%=func.param[func.param[p]] or ""%> +
  • + <%end%> +
+<%end%> + + +<%if type(func.usage) == "string" then%> +

Usage:

+<%=func.usage%> +<%elseif type(func.usage) == "table" then%> +

Usage

+
    + <%for _, usage in ipairs(func.usage) do%> +
  • <%= usage %> + <%end%> +
+<%end%> + +<%if type(func.ret) == "string" then%> +

Return value:

+<%=func.ret%> +<%elseif type(func.ret) == "table" then%> +

Return values:

+
    + <%for _, ret in ipairs(func.ret) do%> +
  1. <%= ret %> + <%end%> +
+<%end%> + +<%if type(func.see) == "string" then %> +

See also:

+ <%=func.see%> +<%elseif type(func.see) == "table" and #func.see > 0 then %> +

See also:

+ +<%end%> +
diff --git a/feeds/luci/build/luadoc/luadoc/doclet/html/index.lp b/feeds/luci/build/luadoc/luadoc/doclet/html/index.lp new file mode 100644 index 0000000..b4b9f5c --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/html/index.lp @@ -0,0 +1,67 @@ + + + + Reference + " type="text/css" /> + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ + +<%if not options.nomodules and #doc.modules > 0 then%> +

Modules

+ + +<%for _, modulename in ipairs(doc.modules) do%> + + + + +<%end%> +
<%=modulename%><%=doc.modules[modulename].summary%>
+<%end%> + + + +<%if not options.nofiles and #doc.files > 0 then%> +

Files

+ + +<%for _, filepath in ipairs(doc.files) do%> + + + + +<%end%> +
<%=filepath%>
+<%end%> + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/build/luadoc/luadoc/doclet/html/luadoc.css b/feeds/luci/build/luadoc/luadoc/doclet/html/luadoc.css new file mode 100644 index 0000000..f9f9749 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/html/luadoc.css @@ -0,0 +1,285 @@ +body { + margin-left: 1em; + margin-right: 1em; + font-family: arial, helvetica, geneva, sans-serif; + background-color:#ffffff; margin:0px; +} + +code { + font-family: "Andale Mono", monospace; +} + +tt { + font-family: "Andale Mono", monospace; +} + +body, td, th { font-size: 11pt; } + +h1, h2, h3, h4 { margin-left: 0em; } + +textarea, pre, tt { font-size:10pt; } +body, td, th { color:#000000; } +small { font-size:0.85em; } +h1 { font-size:1.5em; } +h2 { font-size:1.25em; } +h3 { font-size:1.15em; } +h4 { font-size:1.06em; } + +a:link { font-weight:bold; color: #004080; text-decoration: none; } +a:visited { font-weight:bold; color: #006699; text-decoration: none; } +a:link:hover { text-decoration:underline; } +hr { color:#cccccc } +img { border-width: 0px; } + + +h3 { padding: 1em 0 0.5em; } + +p { margin-left: 1em; } + +p.name { + font-family: "Andale Mono", monospace; + padding-top: 1em; + margin-left: 0em; +} + +blockquote { margin-left: 3em; } + +pre.example { + background-color: rgb(245, 245, 245); + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-right-style: solid; + border-bottom-style: solid; + border-left-style: solid; + border-top-color: silver; + border-right-color: silver; + border-bottom-color: silver; + border-left-color: silver; + padding: 1em; + margin-left: 1em; + margin-right: 1em; + font-family: "Andale Mono", monospace; + font-size: smaller; +} + + +hr { + margin-left: 0em; + background: #00007f; + border: 0px; + height: 1px; +} + +ul { list-style-type: disc; } + +table.index { border: 1px #00007f; } +table.index td { text-align: left; vertical-align: top; } +table.index ul { padding-top: 0em; margin-top: 0em; } + +table { + border: 1px solid black; + border-collapse: collapse; + margin: 1em auto; +} +th { + border: 1px solid black; + padding: 0.5em; +} +td { + border: 1px solid black; + padding: 0.5em; +} +div.header, div.footer { margin-left: 0em; } + +#container +{ + margin-left: 1em; + margin-right: 1em; + background-color: #f0f0f0; +} + +#product +{ + text-align: center; + border-bottom: 1px solid #cccccc; + background-color: #ffffff; +} + +#product big { + font-size: 2em; +} + +#product_logo +{ +} + +#product_name +{ +} + +#product_description +{ +} + +#main +{ + background-color: #f0f0f0; + border-left: 2px solid #cccccc; +} + +#navigation +{ + float: left; + width: 18em; + margin: 0; + vertical-align: top; + background-color: #f0f0f0; + overflow:visible; +} + +#navigation h1 { + background-color:#e7e7e7; + font-size:1.1em; + color:#000000; + text-align:left; + margin:0px; + padding:0.2em; + border-top:1px solid #dddddd; + border-bottom:1px solid #dddddd; +} + +#navigation ul +{ + font-size:1em; + list-style-type: none; + padding: 0; + margin: 1px; +} + +#navigation li +{ + text-indent: -1em; + margin: 0em 0em 0em 0.5em; + display: block; + padding: 3px 0px 0px 12px; +} + +#navigation li li a +{ + padding: 0px 3px 0px -1em; +} + +#content +{ + margin-left: 18em; + padding: 1em; + border-left: 2px solid #cccccc; + border-right: 2px solid #cccccc; + background-color: #ffffff; +} + +#about +{ + clear: both; + margin: 0; + padding: 5px; + border-top: 2px solid #cccccc; + background-color: #ffffff; +} + +@media print { + body { + font: 12pt "Times New Roman", "TimeNR", Times, serif; + } + a { font-weight:bold; color: #004080; text-decoration: underline; } + + #main { background-color: #ffffff; border-left: 0px; } + #container { margin-left: 2%; margin-right: 2%; background-color: #ffffff; } + + #content { margin-left: 0px; padding: 1em; border-left: 0px; border-right: 0px; background-color: #ffffff; } + + #navigation { display: none; + } + pre.example { + font-family: "Andale Mono", monospace; + font-size: 10pt; + page-break-inside: avoid; + } +} + +table.module_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.module_list td.name { background-color: #f0f0f0; } +table.module_list td.summary { width: 100%; } + +table.file_list +{ + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.file_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.file_list td.name { background-color: #f0f0f0; } +table.file_list td.summary { width: 100%; } + + +table.function_list +{ + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.function_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.function_list td.name { background-color: #f0f0f0; } +table.function_list td.summary { width: 100%; } + + +table.table_list +{ + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.table_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.table_list td.name { background-color: #f0f0f0; } +table.table_list td.summary { width: 100%; } + +dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;} +dl.function dd {padding: 0.5em 0;} +dl.function h3 {margin: 0; font-size: medium;} + +dl.table dt {border-top: 1px solid #ccc; padding-top: 1em;} +dl.table dd {padding-bottom: 1em;} +dl.table h3 {padding: 0; margin: 0; font-size: medium;} + +#TODO: make module_list, file_list, function_list, table_list inherit from a list + diff --git a/feeds/luci/build/luadoc/luadoc/doclet/html/menu.lp b/feeds/luci/build/luadoc/luadoc/doclet/html/menu.lp new file mode 100644 index 0000000..0fe3652 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/html/menu.lp @@ -0,0 +1,55 @@ +<% +if module_doc then + from = "modules/"..module_doc.name +elseif file_doc then + from = "files/.."..file_doc.name +else + from = "" +end +%> + +

LuaDoc

+
    + <%if not module_doc and not file_doc then%> +
  • Index
  • + <%else%> +
  • ">Index
  • + <%end%> +
+ + + +<%if not options.nomodules and #doc.modules > 0 then%> +

Modules

+
    +<%for _, modulename in ipairs(doc.modules) do + if module_doc and module_doc.name == modulename then%> +
  • <%=modulename%>
  • + <%else%> +
  • + <%=modulename%> +
  • +<% end +end%> +
+<%end%> + + + +<%if not options.nofiles and #doc.files > 0 then%> +

Files

+
    +<%for _, filepath in ipairs(doc.files) do + if file_doc and file_doc.name == filepath then%> +
  • <%=filepath%>
  • + <%else%> +
  • + <%=filepath%> +
  • +<% end +end%> +
+<%end%> + + + diff --git a/feeds/luci/build/luadoc/luadoc/doclet/html/module.lp b/feeds/luci/build/luadoc/luadoc/doclet/html/module.lp new file mode 100644 index 0000000..0798c1b --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/html/module.lp @@ -0,0 +1,155 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

<%=( oop and "Object Instance" or "Class" )%> <%=module_doc.name%>

+ +

<%=module_doc.description%>

+<%if module_doc.author then%> +

<%= #module_doc.author>1 and "Authors" or "Author" %>: + +<%for _, author in ipairs(module_doc.author) do%> + +<%end%> +
<%= author %>
+

+<%end%> +<%if module_doc.copyright then%> +

Copyright© <%=module_doc.copyright%>

+<%end%> +<%if module_doc.release then%> +

Release: <%=module_doc.release%>

+<%end%> + +<%if #module_doc.constants > 0 then %> +

Constants

+ +<%for _, const_name in ipairs(module_doc.constants) do + local const_data = module_doc.constants[const_name]%> + + + + +<%end%> +
<%=const_data.private and "local " or ""%><%=(const_name:gsub(".+%.",""))%><%=const_data.summary%>
+<%end%> + +<% local funcs = { }; if #module_doc.functions > 0 then %> +

Functions

+ +<% +for _, func_name in ipairs(module_doc.functions) do + funcs[#funcs+1] = func_name +end + +table.sort(funcs, function(a, b) + local func_data_a = module_doc.functions[a] + local func_data_b = module_doc.functions[b] + local x = func_data_a.sort or a + local y = func_data_b.sort or b + return x < y +end) + +for _, func_name in ipairs(funcs) do + local func_data = module_doc.functions[func_name] + + func_data.printname = func_name:gsub("^%d+#", "") + if oop then + func_data.printname = func_data.printname:gsub("%.", ":") + else + func_data.printname = func_data.printname:gsub("^.+%.", "") + end +%> + + + + +<%end%> +
<%=func_data.private and "local " or ""%><%=func_data.printname%> (<%=table.concat(module_doc.functions[func_name].param or {}, ", ")%>)<%=module_doc.functions[func_name].summary%>
+<%end%> + + +<% local tabs = { }; if #module_doc.tables > 0 then%> +

Tables

+ +<% +for _, tab_name in ipairs(module_doc.tables) do + tabs[#tabs+1] = tab_name +end + +table.sort(tabs, function(a, b) + local tab_data_a = module_doc.tables[a] + local tab_data_b = module_doc.tables[b] + local x = tab_data_a.sort or a + local y = tab_data_b.sort or b + return x < y +end) + +for _, tab_name in ipairs(tabs) do +%> + + + + +<%end%> +
<%=tab_name%><%=module_doc.tables[tab_name].summary%>
+<%end%> + + +
+
+ +<%if #module_doc.functions > 0 then%> +

Functions

+
+<%for _, func_name in ipairs(funcs) do%> +<%=luadoc.doclet.html.include("function.lp", { doc=doc, module_doc=module_doc, func=module_doc.functions[func_name], oop=oop })%> +<%end%> +
+<%end%> + +<%if #module_doc.tables > 0 then%> +

Tables

+
+<%for _, tab_name in ipairs(tabs) do%> +<%=luadoc.doclet.html.include("table.lp", { doc=doc, module_doc=module_doc, tab=module_doc.tables[tab_name] })%> +<%end%> +
+<%end%> + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/build/luadoc/luadoc/doclet/html/table.lp b/feeds/luci/build/luadoc/luadoc/doclet/html/table.lp new file mode 100644 index 0000000..5cd0239 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/html/table.lp @@ -0,0 +1,15 @@ +
<%=tab.name%>
+
<%=tab.description%> + +<%if type(tab.field) == "table" and #tab.field > 0 then%> +Fields +
    + <%for p = 1, #tab.field do%> +
  • + <%=tab.field[p]%>: <%=tab.field[tab.field[p]] or ""%> +
  • + <%end%> +
+<%end%> + +
diff --git a/feeds/luci/build/luadoc/luadoc/doclet/raw.lua b/feeds/luci/build/luadoc/luadoc/doclet/raw.lua new file mode 100644 index 0000000..1e880b8 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/doclet/raw.lua @@ -0,0 +1,12 @@ +----------------------------------------------------------------- +-- @release $Id: raw.lua,v 1.5 2007/04/18 14:28:39 tomas Exp $ +----------------------------------------------------------------- + +module "luadoc.doclet.raw" + +----------------------------------------------------------------- +-- Generate the output. +-- @param doc Table with the structured documentation. + +function start (doc) +end diff --git a/feeds/luci/build/luadoc/luadoc/init.lua b/feeds/luci/build/luadoc/luadoc/init.lua new file mode 100644 index 0000000..649515d --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/init.lua @@ -0,0 +1,50 @@ +------------------------------------------------------------------------------- +-- LuaDoc main function. +-- @release $Id: init.lua,v 1.4 2008/02/17 06:42:51 jasonsantos Exp $ +------------------------------------------------------------------------------- + +local require = require + +local util = require "luadoc.util" + +logger = {} + +module ("luadoc") + +------------------------------------------------------------------------------- +-- LuaDoc version number. + +_COPYRIGHT = "Copyright (c) 2003-2007 The Kepler Project" +_DESCRIPTION = "Documentation Generator Tool for the Lua language" +_VERSION = "LuaDoc 3.0.1" + +------------------------------------------------------------------------------- +-- Main function +-- @see luadoc.doclet.html, luadoc.doclet.formatter, luadoc.doclet.raw +-- @see luadoc.taglet.standard + +function main (files, options) + logger = util.loadlogengine(options) + + -- load config file + if options.config ~= nil then + -- load specified config file + dofile(options.config) + else + -- load default config file + require("luadoc.config") + end + + local taglet = require(options.taglet) + local doclet = require(options.doclet) + + -- analyze input + taglet.options = options + taglet.logger = logger + local doc = taglet.start(files) + + -- generate output + doclet.options = options + doclet.logger = logger + doclet.start(doc) +end diff --git a/feeds/luci/build/luadoc/luadoc/lp.lua b/feeds/luci/build/luadoc/luadoc/lp.lua new file mode 100644 index 0000000..adf84f9 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/lp.lua @@ -0,0 +1,130 @@ +---------------------------------------------------------------------------- +-- Lua Pages Template Preprocessor. +-- +-- @release $Id: lp.lua,v 1.7 2007/04/18 14:28:39 tomas Exp $ +---------------------------------------------------------------------------- + +local assert, error, getfenv, loadstring, setfenv = assert, error, getfenv, loadstring, setfenv +local find, format, gsub, strsub = string.find, string.format, string.gsub, string.sub +local concat, tinsert = table.concat, table.insert +local open = io.open + +module (...) + +---------------------------------------------------------------------------- +-- function to do output +local outfunc = "io.write" +-- accepts the old expression field: `$| |$' +local compatmode = true + +-- +-- Builds a piece of Lua code which outputs the (part of the) given string. +-- @param s String. +-- @param i Number with the initial position in the string. +-- @param f Number with the final position in the string (default == -1). +-- @return String with the correspondent Lua code which outputs the part of the string. +-- +local function out (s, i, f) + s = strsub(s, i, f or -1) + if s == "" then return s end + -- we could use `%q' here, but this way we have better control + s = gsub(s, "([\\\n\'])", "\\%1") + -- substitute '\r' by '\'+'r' and let `loadstring' reconstruct it + s = gsub(s, "\r", "\\r") + return format(" %s('%s'); ", outfunc, s) +end + + +---------------------------------------------------------------------------- +-- Translate the template to Lua code. +-- @param s String to translate. +-- @return String with translated code. +---------------------------------------------------------------------------- +function translate (s) + if compatmode then + s = gsub(s, "$|(.-)|%$", "") + s = gsub(s, "", "") + end + s = gsub(s, "<%%(.-)%%>", "") + local res = {} + local start = 1 -- start of untranslated part in `s' + while true do + local ip, fp, target, exp, code = find(s, "<%?(%w*)[ \t]*(=?)(.-)%?>", start) + if not ip then break end + tinsert(res, out(s, start, ip-1)) + if target ~= "" and target ~= "lua" then + -- not for Lua; pass whole instruction to the output + tinsert(res, out(s, ip, fp)) + else + if exp == "=" then -- expression? + tinsert(res, format(" %s(%s);", outfunc, code)) + else -- command + tinsert(res, format(" %s ", code)) + end + end + start = fp + 1 + end + tinsert(res, out(s, start)) + return concat(res) +end + + +---------------------------------------------------------------------------- +-- Defines the name of the output function. +-- @param f String with the name of the function which produces output. + +function setoutfunc (f) + outfunc = f +end + +---------------------------------------------------------------------------- +-- Turns on or off the compatibility with old CGILua 3.X behavior. +-- @param c Boolean indicating if the compatibility mode should be used. + +function setcompatmode (c) + compatmode = c +end + +---------------------------------------------------------------------------- +-- Internal compilation cache. + +local cache = {} + +---------------------------------------------------------------------------- +-- Translates a template into a Lua function. +-- Does NOT execute the resulting function. +-- Uses a cache of templates. +-- @param string String with the template to be translated. +-- @param chunkname String with the name of the chunk, for debugging purposes. +-- @return Function with the resulting translation. + +function compile (string, chunkname) + local f, err = cache[string] + if f then return f end + f, err = loadstring (translate (string), chunkname) + if not f then error (err, 3) end + cache[string] = f + return f +end + +---------------------------------------------------------------------------- +-- Translates and executes a template in a given file. +-- The translation creates a Lua function which will be executed in an +-- optionally given environment. +-- @param filename String with the name of the file containing the template. +-- @param env Table with the environment to run the resulting function. + +function include (filename, env) + -- read the whole contents of the file + local fh = assert (open (filename)) + local src = fh:read("*a") + fh:close() + -- translates the file into a function + local prog = compile (src, '@'..filename) + local _env + if env then + _env = getfenv (prog) + setfenv (prog, env) + end + prog () +end diff --git a/feeds/luci/build/luadoc/luadoc/taglet/standard.lua b/feeds/luci/build/luadoc/luadoc/taglet/standard.lua new file mode 100644 index 0000000..ef925f8 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/taglet/standard.lua @@ -0,0 +1,567 @@ +------------------------------------------------------------------------------- +-- @release $Id: standard.lua,v 1.39 2007/12/21 17:50:48 tomas Exp $ +------------------------------------------------------------------------------- + +local assert, pairs, tostring, type = assert, pairs, tostring, type +local io = require "io" +local posix = require "nixio.fs" +local luadoc = require "luadoc" +local util = require "luadoc.util" +local tags = require "luadoc.taglet.standard.tags" +local string = require "string" +local table = require "table" + +module 'luadoc.taglet.standard' + +------------------------------------------------------------------------------- +-- Creates an iterator for an array base on a class type. +-- @param t array to iterate over +-- @param class name of the class to iterate over + +function class_iterator (t, class) + return function () + local i = 1 + return function () + while t[i] and t[i].class ~= class do + i = i + 1 + end + local v = t[i] + i = i + 1 + return v + end + end +end + +-- Patterns for function recognition +local identifiers_list_pattern = "%s*(.-)%s*" +local identifier_pattern = "[^%(%s]+" +local function_patterns = { + "^()%s*function%s*("..identifier_pattern..")%s*%("..identifiers_list_pattern.."%)", + "^%s*(local%s)%s*function%s*("..identifier_pattern..")%s*%("..identifiers_list_pattern.."%)", + "^()%s*("..identifier_pattern..")%s*%=%s*function%s*%("..identifiers_list_pattern.."%)", +} + +------------------------------------------------------------------------------- +-- Checks if the line contains a function definition +-- @param line string with line text +-- @return function information or nil if no function definition found + +local function check_function (line) + line = util.trim(line) + + local info = table.foreachi(function_patterns, function (_, pattern) + local r, _, l, id, param = string.find(line, pattern) + if r ~= nil then + return { + name = id, + private = (l == "local"), + param = { } --util.split("%s*,%s*", param), + } + end + end) + + -- TODO: remove these assert's? + if info ~= nil then + assert(info.name, "function name undefined") + assert(info.param, string.format("undefined parameter list for function `%s'", info.name)) + end + + return info +end + +------------------------------------------------------------------------------- +-- Checks if the line contains a module definition. +-- @param line string with line text +-- @param currentmodule module already found, if any +-- @return the name of the defined module, or nil if there is no module +-- definition + +local function check_module (line, currentmodule) + line = util.trim(line) + + -- module"x.y" + -- module'x.y' + -- module[[x.y]] + -- module("x.y") + -- module('x.y') + -- module([[x.y]]) + -- module(...) + + local r, _, modulename = string.find(line, "^module%s*[%s\"'(%[]+([^,\"')%]]+)") + if r then + -- found module definition + logger:debug(string.format("found module `%s'", modulename)) + return modulename + end + return currentmodule +end + +-- Patterns for constant recognition +local constant_patterns = { + "^()%s*([A-Z][A-Z0-9_]*)%s*=", + "^%s*(local%s)%s*([A-Z][A-Z0-9_]*)%s*=", +} + +------------------------------------------------------------------------------- +-- Checks if the line contains a constant definition +-- @param line string with line text +-- @return constant information or nil if no constant definition found + +local function check_constant (line) + line = util.trim(line) + + local info = table.foreachi(constant_patterns, function (_, pattern) + local r, _, l, id = string.find(line, pattern) + if r ~= nil then + return { + name = id, + private = (l == "local"), + } + end + end) + + -- TODO: remove these assert's? + if info ~= nil then + assert(info.name, "constant name undefined") + end + + return info +end + +------------------------------------------------------------------------------- +-- Extracts summary information from a description. The first sentence of each +-- doc comment should be a summary sentence, containing a concise but complete +-- description of the item. It is important to write crisp and informative +-- initial sentences that can stand on their own +-- @param description text with item description +-- @return summary string or nil if description is nil + +local function parse_summary (description) + -- summary is never nil... + description = description or "" + + -- append an " " at the end to make the pattern work in all cases + description = description.." " + + -- read until the first period followed by a space or tab + local summary = string.match(description, "(.-%.)[%s\t]") + + -- if pattern did not find the first sentence, summary is the whole description + summary = summary or description + + return summary +end + +------------------------------------------------------------------------------- +-- @param f file handle +-- @param line current line being parsed +-- @param modulename module already found, if any +-- @return current line +-- @return code block +-- @return modulename if found + +local function parse_code (f, line, modulename) + local code = {} + while line ~= nil do + if string.find(line, "^[\t ]*%-%-%-") then + -- reached another luadoc block, end this parsing + return line, code, modulename + else + -- look for a module definition + modulename = check_module(line, modulename) + + table.insert(code, line) + line = f:read() + end + end + -- reached end of file + return line, code, modulename +end + +------------------------------------------------------------------------------- +-- Parses the information inside a block comment +-- @param block block with comment field +-- @return block parameter + +local function parse_comment (block, first_line, modulename) + + -- get the first non-empty line of code + local code = table.foreachi(block.code, function(_, line) + if not util.line_empty(line) then + -- `local' declarations are ignored in two cases: + -- when the `nolocals' option is turned on; and + -- when the first block of a file is parsed (this is + -- necessary to avoid confusion between the top + -- local declarations and the `module' definition. + if (options.nolocals or first_line) and line:find"^%s*local" then + return + end + return line + end + end) + + -- parse first line of code + if code ~= nil then + local func_info = check_function(code) + local module_name = check_module(code) + local const_info = check_constant(code) + if func_info then + block.class = "function" + block.name = func_info.name + block.param = func_info.param + block.private = func_info.private + elseif const_info then + block.class = "constant" + block.name = const_info.name + block.private = const_info.private + elseif module_name then + block.class = "module" + block.name = module_name + block.param = {} + else + block.param = {} + end + else + -- TODO: comment without any code. Does this means we are dealing + -- with a file comment? + end + + -- parse @ tags + local currenttag = "description" + local currenttext + + table.foreachi(block.comment, function (_, line) + line = util.trim_comment(line) + + local r, _, tag, text = string.find(line, "@([_%w%.]+)%s+(.*)") + if r ~= nil then + -- found new tag, add previous one, and start a new one + -- TODO: what to do with invalid tags? issue an error? or log a warning? + tags.handle(currenttag, block, currenttext) + + currenttag = tag + currenttext = text + else + currenttext = util.concat(currenttext, "\n" .. line) + assert(string.sub(currenttext, 1, 1) ~= " ", string.format("`%s', `%s'", currenttext, line)) + end + end) + tags.handle(currenttag, block, currenttext) + + -- extracts summary information from the description + block.summary = parse_summary(block.description) + assert(string.sub(block.description, 1, 1) ~= " ", string.format("`%s'", block.description)) + + if block.name and block.class == "module" then + modulename = block.name + end + + return block, modulename +end + +------------------------------------------------------------------------------- +-- Parses a block of comment, started with ---. Read until the next block of +-- comment. +-- @param f file handle +-- @param line being parsed +-- @param modulename module already found, if any +-- @return line +-- @return block parsed +-- @return modulename if found + +local function parse_block (f, line, modulename, first) + local multiline = not not (line and line:match("%[%[")) + local block = { + comment = {}, + code = {}, + } + + while line ~= nil do + if (multiline == true and string.find(line, "%]%]") ~= nil) or + (multiline == false and string.find(line, "^[\t ]*%-%-") == nil) then + -- reached end of comment, read the code below it + -- TODO: allow empty lines + line, block.code, modulename = parse_code(f, line, modulename) + + -- parse information in block comment + block, modulename = parse_comment(block, first, modulename) + + return line, block, modulename + else + table.insert(block.comment, line) + line = f:read() + end + end + -- reached end of file + + -- parse information in block comment + block, modulename = parse_comment(block, first, modulename) + + return line, block, modulename +end + +------------------------------------------------------------------------------- +-- Parses a file documented following luadoc format. +-- @param filepath full path of file to parse +-- @param doc table with documentation +-- @return table with documentation + +function parse_file (filepath, doc, handle, prev_line, prev_block, prev_modname) + local blocks = { prev_block } + local modulename = prev_modname + + -- read each line + local f = handle or io.open(filepath, "r") + local i = 1 + local line = prev_line or f:read() + local first = true + while line ~= nil do + + if string.find(line, "^[\t ]*%-%-%-") then + -- reached a luadoc block + local block, newmodname + line, block, newmodname = parse_block(f, line, modulename, first) + + if modulename and newmodname and newmodname ~= modulename then + doc = parse_file( nil, doc, f, line, block, newmodname ) + else + table.insert(blocks, block) + modulename = newmodname + end + else + -- look for a module definition + local newmodname = check_module(line, modulename) + + if modulename and newmodname and newmodname ~= modulename then + parse_file( nil, doc, f ) + else + modulename = newmodname + end + + -- TODO: keep beginning of file somewhere + + line = f:read() + end + first = false + i = i + 1 + end + + if not handle then + f:close() + end + + if filepath then + -- store blocks in file hierarchy + assert(doc.files[filepath] == nil, string.format("doc for file `%s' already defined", filepath)) + table.insert(doc.files, filepath) + doc.files[filepath] = { + type = "file", + name = filepath, + doc = blocks, + -- functions = class_iterator(blocks, "function"), + -- tables = class_iterator(blocks, "table"), + } + -- + local first = doc.files[filepath].doc[1] + if first and modulename then + doc.files[filepath].author = first.author + doc.files[filepath].copyright = first.copyright + doc.files[filepath].description = first.description + doc.files[filepath].release = first.release + doc.files[filepath].summary = first.summary + end + end + + -- if module definition is found, store in module hierarchy + if modulename ~= nil then + if modulename == "..." then + assert( filepath, "Can't determine name for virtual module from filepatch" ) + modulename = string.gsub (filepath, "%.lua$", "") + modulename = string.gsub (modulename, "/", ".") + end + if doc.modules[modulename] ~= nil then + -- module is already defined, just add the blocks + table.foreachi(blocks, function (_, v) + table.insert(doc.modules[modulename].doc, v) + end) + else + -- TODO: put this in a different module + table.insert(doc.modules, modulename) + doc.modules[modulename] = { + type = "module", + name = modulename, + doc = blocks, +-- functions = class_iterator(blocks, "function"), +-- tables = class_iterator(blocks, "table"), + author = first and first.author, + copyright = first and first.copyright, + description = "", + release = first and first.release, + summary = "", + } + + -- find module description + for m in class_iterator(blocks, "module")() do + doc.modules[modulename].description = util.concat( + doc.modules[modulename].description, + m.description) + doc.modules[modulename].summary = util.concat( + doc.modules[modulename].summary, + m.summary) + if m.author then + doc.modules[modulename].author = m.author + end + if m.copyright then + doc.modules[modulename].copyright = m.copyright + end + if m.release then + doc.modules[modulename].release = m.release + end + if m.name then + doc.modules[modulename].name = m.name + end + end + doc.modules[modulename].description = doc.modules[modulename].description or (first and first.description) or "" + doc.modules[modulename].summary = doc.modules[modulename].summary or (first and first.summary) or "" + end + + -- make functions table + doc.modules[modulename].functions = {} + for f in class_iterator(blocks, "function")() do + if f and f.name then + table.insert(doc.modules[modulename].functions, f.name) + doc.modules[modulename].functions[f.name] = f + end + end + + -- make tables table + doc.modules[modulename].tables = {} + for t in class_iterator(blocks, "table")() do + if t and t.name then + table.insert(doc.modules[modulename].tables, t.name) + doc.modules[modulename].tables[t.name] = t + end + end + + -- make constants table + doc.modules[modulename].constants = {} + for c in class_iterator(blocks, "constant")() do + if c and c.name then + table.insert(doc.modules[modulename].constants, c.name) + doc.modules[modulename].constants[c.name] = c + end + end + end + + if filepath then + -- make functions table + doc.files[filepath].functions = {} + for f in class_iterator(blocks, "function")() do + if f and f.name then + table.insert(doc.files[filepath].functions, f.name) + doc.files[filepath].functions[f.name] = f + end + end + + -- make tables table + doc.files[filepath].tables = {} + for t in class_iterator(blocks, "table")() do + if t and t.name then + table.insert(doc.files[filepath].tables, t.name) + doc.files[filepath].tables[t.name] = t + end + end + end + + return doc +end + +------------------------------------------------------------------------------- +-- Checks if the file is terminated by ".lua" or ".luadoc" and calls the +-- function that does the actual parsing +-- @param filepath full path of the file to parse +-- @param doc table with documentation +-- @return table with documentation +-- @see parse_file + +function file (filepath, doc) + local patterns = { "%.lua$", "%.luadoc$" } + local valid = table.foreachi(patterns, function (_, pattern) + if string.find(filepath, pattern) ~= nil then + return true + end + end) + + if valid then + logger:info(string.format("processing file `%s'", filepath)) + doc = parse_file(filepath, doc) + end + + return doc +end + +------------------------------------------------------------------------------- +-- Recursively iterates through a directory, parsing each file +-- @param path directory to search +-- @param doc table with documentation +-- @return table with documentation + +function directory (path, doc) + for f in posix.dir(path) do + local fullpath = path .. "/" .. f + local attr = posix.stat(fullpath) + assert(attr, string.format("error stating file `%s'", fullpath)) + + if attr.type == "reg" then + doc = file(fullpath, doc) + elseif attr.type == "dir" and f ~= "." and f ~= ".." then + doc = directory(fullpath, doc) + end + end + return doc +end + +-- Recursively sorts the documentation table +local function recsort (tab) + table.sort (tab) + -- sort list of functions by name alphabetically + for f, doc in pairs(tab) do + if doc.functions then + table.sort(doc.functions) + end + if doc.tables then + table.sort(doc.tables) + end + end +end + +------------------------------------------------------------------------------- + +function start (files, doc) + assert(files, "file list not specified") + + -- Create an empty document, or use the given one + doc = doc or { + files = {}, + modules = {}, + } + assert(doc.files, "undefined `files' field") + assert(doc.modules, "undefined `modules' field") + + table.foreachi(files, function (_, path) + local attr = posix.stat(path) + assert(attr, string.format("error stating path `%s'", path)) + + if attr.type == "reg" then + doc = file(path, doc) + elseif attr.type == "dir" then + doc = directory(path, doc) + end + end) + + -- order arrays alphabetically + recsort(doc.files) + recsort(doc.modules) + + return doc +end diff --git a/feeds/luci/build/luadoc/luadoc/taglet/standard/tags.lua b/feeds/luci/build/luadoc/luadoc/taglet/standard/tags.lua new file mode 100644 index 0000000..b46d685 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/taglet/standard/tags.lua @@ -0,0 +1,191 @@ +------------------------------------------------------------------------------- +-- Handlers for several tags +-- @release $Id: tags.lua,v 1.8 2007/09/05 12:39:09 tomas Exp $ +------------------------------------------------------------------------------- + +local luadoc = require "luadoc" +local util = require "luadoc.util" +local string = require "string" +local table = require "table" +local assert, type, tostring, tonumber = assert, type, tostring, tonumber + +module "luadoc.taglet.standard.tags" + +------------------------------------------------------------------------------- + +local function author (tag, block, text) + block[tag] = block[tag] or {} + if not text then + luadoc.logger:warn("author `name' not defined [["..text.."]]: skipping") + return + end + table.insert (block[tag], text) +end + +------------------------------------------------------------------------------- +-- Set the class of a comment block. Classes can be "module", "function", +-- "table". The first two classes are automatic, extracted from the source code + +local function class (tag, block, text) + block[tag] = text +end + +------------------------------------------------------------------------------- + +local function cstyle (tag, block, text) + block[tag] = text +end + +------------------------------------------------------------------------------- + +local function sort (tag, block, text) + block[tag] = tonumber(text) or 0 +end + +------------------------------------------------------------------------------- + +local function copyright (tag, block, text) + block[tag] = text +end + +------------------------------------------------------------------------------- + +local function description (tag, block, text) + block[tag] = text +end + +------------------------------------------------------------------------------- + +local function field (tag, block, text) + if block["class"] ~= "table" then + luadoc.logger:warn("documenting `field' for block that is not a `table'") + end + block[tag] = block[tag] or {} + + local _, _, name, desc = string.find(text, "^([_%w%.]+)%s+(.*)") + assert(name, "field name not defined") + + table.insert(block[tag], name) + block[tag][name] = desc +end + +------------------------------------------------------------------------------- +-- Set the name of the comment block. If the block already has a name, issue +-- an error and do not change the previous value + +local function name (tag, block, text) + if block[tag] and block[tag] ~= text then + luadoc.logger:error(string.format("block name conflict: `%s' -> `%s'", block[tag], text)) + end + + block[tag] = text +end + +------------------------------------------------------------------------------- +-- Processes a parameter documentation. +-- @param tag String with the name of the tag (it must be "param" always). +-- @param block Table with previous information about the block. +-- @param text String with the current line being processed. + +local function param (tag, block, text) + block[tag] = block[tag] or {} + -- TODO: make this pattern more flexible, accepting empty descriptions + local _, _, name, desc = string.find(text, "^([_%w%.]+)%s+(.*)") + if not name then + luadoc.logger:warn("parameter `name' not defined [["..text.."]]: skipping") + return + end + local i = table.foreachi(block[tag], function (i, v) + if v == name then + return i + end + end) + if i == nil then + luadoc.logger:warn(string.format("documenting undefined parameter `%s'", name)) + table.insert(block[tag], name) + end + block[tag][name] = desc +end + +------------------------------------------------------------------------------- + +local function release (tag, block, text) + block[tag] = text +end + +------------------------------------------------------------------------------- + +local function ret (tag, block, text) + tag = "ret" + if type(block[tag]) == "string" then + block[tag] = { block[tag], text } + elseif type(block[tag]) == "table" then + table.insert(block[tag], text) + else + block[tag] = text + end +end + +------------------------------------------------------------------------------- +-- @see ret + +local function see (tag, block, text) + -- see is always an array + block[tag] = block[tag] or {} + + -- remove trailing "." + text = string.gsub(text, "(.*)%.$", "%1") + + local s = util.split("%s*,%s*", text) + + table.foreachi(s, function (_, v) + table.insert(block[tag], v) + end) +end + +------------------------------------------------------------------------------- +-- @see ret + +local function usage (tag, block, text) + if type(block[tag]) == "string" then + block[tag] = { block[tag], text } + elseif type(block[tag]) == "table" then + table.insert(block[tag], text) + else + block[tag] = text + end +end + +------------------------------------------------------------------------------- + +local handlers = {} +handlers["author"] = author +handlers["class"] = class +handlers["cstyle"] = cstyle +handlers["copyright"] = copyright +handlers["description"] = description +handlers["field"] = field +handlers["name"] = name +handlers["param"] = param +handlers["release"] = release +handlers["return"] = ret +handlers["see"] = see +handlers["sort"] = sort +handlers["usage"] = usage + +------------------------------------------------------------------------------- + +function handle (tag, block, text) + if not handlers[tag] then + luadoc.logger:error(string.format("undefined handler for tag `%s'", tag)) + return + end + + if text then + text = text:gsub("`([^\n]-)`", "%1") + text = text:gsub("`(.-)`", "
%1
") + end + +-- assert(handlers[tag], string.format("undefined handler for tag `%s'", tag)) + return handlers[tag](tag, block, text) +end diff --git a/feeds/luci/build/luadoc/luadoc/util.lua b/feeds/luci/build/luadoc/luadoc/util.lua new file mode 100644 index 0000000..7e9cac6 --- /dev/null +++ b/feeds/luci/build/luadoc/luadoc/util.lua @@ -0,0 +1,201 @@ +------------------------------------------------------------------------------- +-- General utilities. +-- @release $Id: util.lua,v 1.16 2008/02/17 06:42:51 jasonsantos Exp $ +------------------------------------------------------------------------------- + +local posix = require "nixio.fs" +local type, table, string, io, assert, tostring, setmetatable, pcall = type, table, string, io, assert, tostring, setmetatable, pcall + +------------------------------------------------------------------------------- +-- Module with several utilities that could not fit in a specific module + +module "luadoc.util" + +------------------------------------------------------------------------------- +-- Removes spaces from the beginning and end of a given string +-- @param s string to be trimmed +-- @return trimmed string + +function trim (s) + return (string.gsub(s, "^%s*(.-)%s*$", "%1")) +end + +------------------------------------------------------------------------------- +-- Removes spaces from the beginning and end of a given string, considering the +-- string is inside a lua comment. +-- @param s string to be trimmed +-- @return trimmed string +-- @see trim +-- @see string.gsub + +function trim_comment (s) + s = string.gsub(s, "^%s*%-%-+%[%[(.*)$", "%1") + s = string.gsub(s, "^%s*%-%-+(.*)$", "%1") + return s +end + +------------------------------------------------------------------------------- +-- Checks if a given line is empty +-- @param line string with a line +-- @return true if line is empty, false otherwise + +function line_empty (line) + return (string.len(trim(line)) == 0) +end + +------------------------------------------------------------------------------- +-- Appends two string, but if the first one is nil, use to second one +-- @param str1 first string, can be nil +-- @param str2 second string +-- @return str1 .. " " .. str2, or str2 if str1 is nil + +function concat (str1, str2) + if str1 == nil or string.len(str1) == 0 then + return str2 + else + return str1 .. " " .. str2 + end +end + +------------------------------------------------------------------------------- +-- Split text into a list consisting of the strings in text, +-- separated by strings matching delim (which may be a pattern). +-- @param delim if delim is "" then action is the same as %s+ except that +-- field 1 may be preceded by leading whitespace +-- @usage split(",%s*", "Anna, Bob, Charlie,Dolores") +-- @usage split(""," x y") gives {"x","y"} +-- @usage split("%s+"," x y") gives {"", "x","y"} +-- @return array with strings +-- @see table.concat + +function split(delim, text) + local list = {} + if string.len(text) > 0 then + delim = delim or "" + local pos = 1 + -- if delim matches empty string then it would give an endless loop + if string.find("", delim, 1) and delim ~= "" then + error("delim matches empty string!") + end + local first, last + while 1 do + if delim ~= "" then + first, last = string.find(text, delim, pos) + else + first, last = string.find(text, "%s+", pos) + if first == 1 then + pos = last+1 + first, last = string.find(text, "%s+", pos) + end + end + if first then -- found? + table.insert(list, string.sub(text, pos, first-1)) + pos = last+1 + else + table.insert(list, string.sub(text, pos)) + break + end + end + end + return list +end + +------------------------------------------------------------------------------- +-- Comments a paragraph. +-- @param text text to comment with "--", may contain several lines +-- @return commented text + +function comment (text) + text = string.gsub(text, "\n", "\n-- ") + return "-- " .. text +end + +------------------------------------------------------------------------------- +-- Wrap a string into a paragraph. +-- @param s string to wrap +-- @param w width to wrap to [80] +-- @param i1 indent of first line [0] +-- @param i2 indent of subsequent lines [0] +-- @return wrapped paragraph + +function wrap(s, w, i1, i2) + w = w or 80 + i1 = i1 or 0 + i2 = i2 or 0 + assert(i1 < w and i2 < w, "the indents must be less than the line width") + s = string.rep(" ", i1) .. s + local lstart, len = 1, string.len(s) + while len - lstart > w do + local i = lstart + w + while i > lstart and string.sub(s, i, i) ~= " " do i = i - 1 end + local j = i + while j > lstart and string.sub(s, j, j) == " " do j = j - 1 end + s = string.sub(s, 1, j) .. "\n" .. string.rep(" ", i2) .. + string.sub(s, i + 1, -1) + local change = i2 + 1 - (i - j) + lstart = j + change + len = len + change + end + return s +end + +------------------------------------------------------------------------------- +-- Opens a file, creating the directories if necessary +-- @param filename full path of the file to open (or create) +-- @param mode mode of opening +-- @return file handle + +function posix.open (filename, mode) + local f = io.open(filename, mode) + if f == nil then + filename = string.gsub(filename, "\\", "/") + local dir = "" + for d in string.gfind(filename, ".-/") do + dir = dir .. d + posix.mkdir(dir) + end + f = io.open(filename, mode) + end + return f +end + + +---------------------------------------------------------------------------------- +-- Creates a Logger with LuaLogging, if present. Otherwise, creates a mock logger. +-- @param options a table with options for the logging mechanism +-- @return logger object that will implement log methods + +function loadlogengine(options) + local logenabled = pcall(function() + require "logging" + require "logging.console" + end) + + local logging = logenabled and logging + + if logenabled then + if options.filelog then + logger = logging.file("luadoc.log") -- use this to get a file log + else + logger = logging.console("[%level] %message\n") + end + + if options.verbose then + logger:setLevel(logging.INFO) + else + logger:setLevel(logging.WARN) + end + + else + noop = {__index=function(...) + return function(...) + -- noop + end + end} + + logger = {} + setmetatable(logger, noop) + end + + return logger +end diff --git a/feeds/luci/build/makedocs.sh b/feeds/luci/build/makedocs.sh new file mode 100755 index 0000000..955c58c --- /dev/null +++ b/feeds/luci/build/makedocs.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +topdir=$(pwd) + +[ -f "$topdir/build/makedocs.sh" -a -n "$1" ] || { + echo "Please execute as ./build/makedocs.sh [output directory]" >&2 + exit 1 +} + +outdir=$(readlink -f "$1") + +mkdir -p "$outdir" || { + echo "Unable to mkdir '$outdir'" >&2 + exit 1 +} + +( + cd "$topdir/build/luadoc/" + find "$topdir/libs/" "$topdir/modules/" -type f -name '*.lua' -or -name '*.luadoc' | \ + xargs grep -l '@return' | xargs ./doc.lua --no-files -d "$outdir" +) diff --git a/feeds/luci/build/mkbasepot.sh b/feeds/luci/build/mkbasepot.sh new file mode 100755 index 0000000..7f07514 --- /dev/null +++ b/feeds/luci/build/mkbasepot.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +[ -d ./build ] || { + echo "Please execute as ./build/mkbasepot.sh" >&2 + exit 1 +} + +echo -n "Updating modules/luci-base/po/templates/base.pot ... " + +./build/i18n-scan.pl \ + modules/luci-base/ modules/luci-mod-admin-full/ \ + protocols/ themes/ \ +> modules/luci-base/po/templates/base.pot + +echo "done" diff --git a/feeds/luci/build/mkrevision.sh b/feeds/luci/build/mkrevision.sh new file mode 100755 index 0000000..02b7fa3 --- /dev/null +++ b/feeds/luci/build/mkrevision.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +TOPDIR="${0%mkrevision.sh}" + +[ -d "$TOPDIR/../build" ] || { + echo "Please execute as ./build/mkrevision.sh" >&2 + exit 1 +} + +( + cd "$TOPDIR" + if svn info >/dev/null 2>/dev/null; then + revision="svn-r$(LC_ALL=C svn info | sed -ne 's/^Revision: //p')" + elif git log -1 >/dev/null 2>/dev/null; then + revision="svn-r$(LC_ALL=C git log -1 | sed -ne 's/.*git-svn-id: .*@\([0-9]\+\) .*/\1/p')" + if [ "$revision" = "svn-r" ]; then + set -- $(git log -1 --format="%ct %h") + secs="$(($1 % 86400))" + yday="$(date --utc --date="@$1" "+%y.%j")" + revision="$(printf 'git-%s.%05d-%s' "$yday" "$secs" "$2")" + fi + else + revision="unknown" + fi + + echo "$revision" +) diff --git a/feeds/luci/build/zoneinfo2lua.pl b/feeds/luci/build/zoneinfo2lua.pl new file mode 100755 index 0000000..d3f0403 --- /dev/null +++ b/feeds/luci/build/zoneinfo2lua.pl @@ -0,0 +1,149 @@ +#!/usr/bin/perl +# zoneinfo2lua.pl - Make Lua module from /usr/share/zoneinfo +# Execute from within root of Luci feed, usually feeds/luci +# $Id$ + +use strict; + +my %TZ; + +my $tzdin = $ARGV[0] || "/usr/share/zoneinfo"; +my $tzdout = $ARGV[1] || "./modules/luci-base/luasrc/sys/zoneinfo"; + +local $/ = "\012"; +open( ZTAB, "< $tzdin/zone.tab" ) || die "open($tzdin/zone.tab): $!"; + +while( ! eof ZTAB ) { + chomp( my $line = readline ZTAB ); + next if $line =~ /^#/ || $line =~ /^\s+$/; + + my ( undef, undef, $zone, @comment ) = split /\s+/, $line; + + printf STDERR "%-40s", $zone; + + if( open ZONE, "< $tzdin/$zone" ) { + seek ZONE, -2, 2; + + while( tell(ZONE) > 0 ) { + read ZONE, my $char, 1; + ( $char eq "\012" ) ? last : seek ZONE, -2, 1; + } + + chomp( my $tz = readline ZONE ); + print STDERR ( $tz || "(no tzinfo found)" ), "\n"; + close ZONE; + + if( $tz ) { + $zone =~ s/_/ /g; + $TZ{$zone} = $tz; + } + } + else + { + print STDERR "open($tzdin/$zone): $!\n"; + } +} + +close ZTAB; + + +open(O, "> $tzdout/tzdata.lua") || die "open($tzdout/tzdata.lua): $!\n"; + +print STDERR "Writing time zones to $tzdout/tzdata.lua ... "; +print O < $tzdout/tzoffset.lua") || die "open($tzdout/tzoffset.lua): $!\n"; + +print STDERR "Writing time offsets to $tzdout/tzoffset.lua ... "; +print O < +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TYPE:=col +LUCI_BASENAME:=light + +LUCI_TITLE:=Minimum package set using only admin mini and the standard theme +LUCI_DEPENDS:=+uhttpd +luci-mod-admin-mini +luci-theme-openwrt @BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/collections/luci-ssl-openssl/Makefile b/feeds/luci/collections/luci-ssl-openssl/Makefile new file mode 100644 index 0000000..b5f4b09 --- /dev/null +++ b/feeds/luci/collections/luci-ssl-openssl/Makefile @@ -0,0 +1,21 @@ +# +# Copyright (C) 2016 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TYPE:=col +LUCI_BASENAME:=ssl-openssl + +LUCI_TITLE:=LuCI with HTTPS support (OpenSSL as SSL backend) +LUCI_DESCRIPTION:=LuCI with OpenSSL as the SSL backend (libustream-openssl). \ + Note: px5g still requires libmbedtls (in LEDE) or libpolarssl (in Openwrt). \ + In LEDE it is also possible to replace px5g with openssl-util as uhttpd can \ + also generate keys with openssl commandline tools if px5g is not installed. +LUCI_DEPENDS:=+luci +libustream-openssl +px5g + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/collections/luci-ssl/Makefile b/feeds/luci/collections/luci-ssl/Makefile new file mode 100644 index 0000000..8fb8ff4 --- /dev/null +++ b/feeds/luci/collections/luci-ssl/Makefile @@ -0,0 +1,17 @@ +# +# Copyright (C) 2008-2016 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TYPE:=col +LUCI_BASENAME:=ssl + +LUCI_TITLE:=LuCI with HTTPS support (mbedTLS as SSL backend) +LUCI_DEPENDS:=+luci +libustream-mbedtls +px5g + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/collections/luci/Makefile b/feeds/luci/collections/luci/Makefile new file mode 100644 index 0000000..4625c95 --- /dev/null +++ b/feeds/luci/collections/luci/Makefile @@ -0,0 +1,19 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TYPE:=col +LUCI_BASENAME:=luci + +LUCI_TITLE:=Standard OpenWrt set including full admin with ppp support and the default Bootstrap theme +LUCI_DEPENDS:= \ + +uhttpd +uhttpd-mod-ubus +luci-mod-admin-full +luci-theme-bootstrap \ + +luci-app-firewall +luci-proto-ppp +libiwinfo-lua +IPV6:luci-proto-ipv6 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/contrib/package/Makefile b/feeds/luci/contrib/package/Makefile new file mode 100644 index 0000000..f7fac77 --- /dev/null +++ b/feeds/luci/contrib/package/Makefile @@ -0,0 +1,2 @@ +include ../../build/config.mk +include ../../build/module.mk diff --git a/feeds/luci/contrib/package/community-profiles/Makefile b/feeds/luci/contrib/package/community-profiles/Makefile new file mode 100644 index 0000000..1992b7c --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/Makefile @@ -0,0 +1,39 @@ +# Copyright (C) 2011 Manuel Munz +# This is free software, licensed under the Apache 2.0 license. + +include $(TOPDIR)/rules.mk + +PKG_NAME:=community-profiles +PKG_RELEASE:=2 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/community-profiles + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=9. Freifunk + TITLE:=Community profiles + DEPENDS:=freifunk-common +endef + +define Package/community-profiles/description + These community profiles set defaults for various free network/freifunk communities and are used by wizards like ffwizard and meshwizard. +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/community-profiles/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,community-profiles)) diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_Freifunk b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_Freifunk new file mode 100644 index 0000000..b8f445a --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_Freifunk @@ -0,0 +1,10 @@ +config 'community' 'profile' + option 'name' 'Freifunk' + option 'homepage' 'http://freifunk.net' + option 'ssid' 'www.freifunk.net' + option 'splash_network' '10.104.0.0/16' + option 'latitude' '52.000' + option 'longitude' '10.000' + option 'splash_prefix' '28' + option 'mesh_network' '10.0.0.0/8' + diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_altmark b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_altmark new file mode 100644 index 0000000..20d51b2 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_altmark @@ -0,0 +1,56 @@ +config 'community' 'profile' + option 'name' 'Freifunk Altmark' + option 'homepage' 'http://altmark.freifunk.net' + option 'ssid' 'altmark.freifunk.net' + option 'mesh_network' '10.59.0.0/16' + option 'latitude' '52.885' + option 'longitude' '11.15' + option 'suffix' 'olsr.altmark.freifunk.net' + option 'vap' '1' + option 'adhoc_dhcp_when_vap' '0' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.255' + + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + option '40' '02:40:CA:FF:EE:EE' + +config 'defaults' 'wifi_device' + option 'country' 'DE' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' + +config 'defaults' 'olsrd' + option 'LinkQualityAlgorithm' 'etx_ff' + + +config widget 'customindex' + option enabled '1' + option width '50%' + option paddingright '5%' + option template 'html' + +config widget 'rssffl' + option enabled '1' + option max '10' + option cache '3600' + option width '100%' + option title 'Freifunk Blog' + option template 'iframe' + option url 'http://freifunk.net' + +config widget 'rssbundesweit' + option cache '3600' + option width '50%' + option title 'bundesweiter Freifunk Blog' + option template 'rssfeed' + option enabled '1' + option max '10' + option url 'http://blog.freifunk.net/rss.xml' + +config widget 'clear1' + option template 'clear' + option enabled '1' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_arig_arad b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_arig_arad new file mode 100644 index 0000000..55d012f --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_arig_arad @@ -0,0 +1,22 @@ +config 'community' 'profile' + option 'name' 'arig Arad' + option 'homepage' 'http://arig.org.il' + option 'ssid' 'arig.org.il' + option 'latitude' '31.26' + option 'longitude' '35.21' + option 'splash_prefix' '28' + option 'suffix' 'arig' + option 'mesh_network' '10.81.8.0/22' + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + option '13' '13:CA:FF:EE:BA:BE' + +config 'defaults' 'wifi_device' + option 'channel' '13' + option 'country' 'IL' + option 'beacon_int' '5000' + option 'distance' '1500' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_arig_neot_semadar b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_arig_neot_semadar new file mode 100644 index 0000000..062b18e --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_arig_neot_semadar @@ -0,0 +1,22 @@ +config 'community' 'profile' + option 'name' 'arig Neot Semadar' + option 'homepage' 'http://www.neot-semadar.com' + option 'ssid' 'arig.org.il' + option 'latitude' '30.05' + option 'longitude' '35.02' + option 'splash_prefix' '272' + option 'suffix' 'arig' + option 'mesh_network' '10.81.12.0/22' + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + option '13' '13:CA:FF:EE:BA:BE' + +config 'defaults' 'wifi_device' + option 'channel' '13' + option 'country' 'IL' + option 'beacon_int' '5000' + option 'distance' '1500' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_arig_tel-aviv b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_arig_tel-aviv new file mode 100644 index 0000000..fe7df22 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_arig_tel-aviv @@ -0,0 +1,22 @@ +config 'community' 'profile' + option 'name' 'arig Tel Aviv' + option 'homepage' 'http://arig.org.il' + option 'ssid' 'arig.org.il' + option 'latitude' '32.056' + option 'longitude' '34.772' + option 'splash_prefix' '28' + option 'suffix' 'arig' + option 'mesh_network' '10.81.0.0/21' + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + option '13' '13:CA:FF:EE:BA:BE' + +config 'defaults' 'wifi_device' + option 'channel' '13' + option 'country' 'IL' + option 'beacon_int' '5000' + option 'distance' '1500' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_augsburg b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_augsburg new file mode 100644 index 0000000..4ab82cf --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_augsburg @@ -0,0 +1,64 @@ +config 'community' 'profile' + option 'name' 'Freifunk Augsburg' + option 'homepage' 'http://augsburg.freifunk.net' + option 'ssid' 'augsburg.freifunk.net' + option 'mesh_network' '10.11.0.0/18' + option 'splash_network' '10.104.0.0/16' + option 'latitude' '48.37071' + option 'longitude' '10.89475' + option 'suffix' 'ffa' + option 'splash_prefix' '27' + option 'vap' '1' + option adhoc_dhcp_when_vap '1' + option 'ipv6' '1' + option 'ipv6_config' 'auto-ipv6-fromv4' + option 'ipv6_prefix' 'fdca:ffee:ffa::/48' + #option 'extrapackages' '' + +config 'defaults' 'interface' + option 'netmask' '255.255.192.0' + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + +config 'defaults' 'luci_splash' + option 'limit_up' '40' + option 'limit_down' '120' + option 'leasetime' '8' + +config widget 'customindex' + option enabled '1' + option width '50%' + option paddingright '5%' + option template 'html' + +config widget 'rssffa' + option enabled '1' + option max '10' + option cache '3600' + option width '50%' + option title 'Freifunk Augsburg Blog' + option template 'rssfeed' + option url 'http://augsburg.freifunk.net/blog?type=100' + +config widget 'rssaugsburg' + option cache '3600' + option width '50%' + option title 'Augsburger Blogs' + option template 'rssfeed' + option enabled '1' + option max '10' + option url 'http://wgaugsburg.de/augsburg/rss20.xml' + +config widget 'search' + option template 'search' + option title 'Search' + option enabled '1' + option width '50%' + list engine 'Google|http://www.google.de/search?q=' + list engine 'Freifunk Augsburg|http://www.google.de/search?q=site:augsburg.freifunk.net+' + list engine 'Freifunk Wiki|http://wiki.freifunk.net/index.php?search=' + +config widget 'clear1' + option template 'clear' + option enabled '1' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_bayreuth b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_bayreuth new file mode 100644 index 0000000..90fccbd --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_bayreuth @@ -0,0 +1,20 @@ +config 'community' 'profile' + option 'name' 'Freifunk Bayreuth' + option 'homepage' 'http://bayreuth.freifunk.net' + option 'ssid' 'bayreuth.freifunk.net' + option 'mesh_network' '10.195.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'latitude' '49.945812' + option 'longitude' '11.575045' + option 'suffix' 'ffbt' + option 'splash_prefix' '28' + +config 'defaults' 'interface' + option 'netmask' '255.255.192.0' + +config 'defaults' 'wifi_device' + option 'channel' '4' + +config 'defaults' 'wifi_iface' + option 'bssid' '42:CA:FF:EE:BA:BE' + diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_bergischesland b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_bergischesland new file mode 100644 index 0000000..0de4543 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_bergischesland @@ -0,0 +1,15 @@ +config 'community' 'profile' + option 'name' 'Piratenfreifunk Bergisches Land' + option 'homepage' 'http://www.piraten-bergisches-land.de' + option 'ssid' 'PiratenfunkBL' + option 'mesh_network' '10.3.0.0/16' + option 'splash_network' '192.168.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '51.26849' + option 'longitude' '7.19476' + +config 'defaults' 'wifi_device' + option 'channel' '11' + +config 'defaults' 'wifi_iface' + option 'bssid' '02:40:00:42:42:42' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_berlin b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_berlin new file mode 100644 index 0000000..1bfc8ed --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_berlin @@ -0,0 +1,39 @@ +config 'community' 'profile' + option 'name' 'Freifunk Berlin' + option 'homepage' 'http://berlin.freifunk.net' + option 'ssid' 'berlin.freifunk.net' + option 'ssid_scheme' 'addchannelbefore' + option 'mesh_network' '104.0.0.0/8' + option 'splash_network' '10.104.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '52.52075' + option 'longitude' '13.40948' + option 'owm_api' 'http://util.berlin.freifunk.net' + +config 'defaults' 'wifi_device' + option 'channel' '13' + +config 'defaults' 'wifi_device_5' + option 'channel' '36' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' + +config 'defaults' 'wifi_iface_5' + option 'mcast_rate' '12000' + +config 'defaults' 'bssidscheme' + option '10' '02:CA:FF:EE:BA:BE' + option '13' 'D2:CA:FF:EE:BA:BE' + option '36' '02:36:CA:FF:EE:EE' + +config 'defaults' 'ssidscheme' + option '13' 'intern-ch13.freifunk.net' + option '36' 'intern-ch36.freifunk.net' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.255' + option 'dns' '85.214.20.141 213.73.91.35 194.150.168.168 2001:4ce8::53 2001:910:800::12' + +config 'dhcp' 'dhcp' + option leasetime '5m' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_carbodebit b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_carbodebit new file mode 100644 index 0000000..0b263f9 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_carbodebit @@ -0,0 +1,23 @@ +config 'community' 'profile' + option 'name' 'carbodebit' + option 'homepage' 'http://carbodebit.net' + option 'ssid' 'VHDCARBES' + option 'mesh_network' '10.72.1.0/24' + option 'latitude' '43.633683' + option 'longitude' '2.160894' + +config 'defaults' 'wifi_iface' + option 'bssid' 'DE:78:70:E4:FA:B8' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.0' + option 'dns' '10.70.1.1 213.190.64.170 213.190.64.166' + +config 'defaults' 'wifi_device' + option 'channel' '11' + option 'country' 'FR' + option 'distance' '2000' + +config 'defaults' 'bssidscheme' + option 'all' 'DE:78:70:E4:FA:B8' + diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_cottbus b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_cottbus new file mode 100644 index 0000000..6f395a1 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_cottbus @@ -0,0 +1,37 @@ +config 'community' 'profile' + option 'name' 'Freifunk Cottbus' + option 'homepage' 'http://cottbus.freifunk.net' + option 'ssid' 'cottbus.freifunk.net' + option 'ssid_scheme' 'ssidonly' + option 'mesh_network' '10.35.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '51.757689' + option 'longitude' '13.40948' + +config 'defaults' 'wifi_device' + option 'channel' '13' + +config 'defaults' 'wifi_device_5' + option 'channel' '36' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' + +config 'defaults' 'wifi_iface_5' + option 'mcast_rate' '12000' + +config 'defaults' 'bssidscheme' + option '13' 'D2:CA:FF:EE:BA:BE' + option '36' '02:36:CA:FF:EE:EE' + +config 'defaults' 'ssidscheme' + option '13' 'intern-ch13.cottbus.freifunk.net' + option '36' 'intern-ch36.cottbus.freifunk.net' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.255' + option 'dns' '85.214.20.141 213.73.91.35 194.150.168.168 2001:4ce8::53 2001:910:800::12' + +config 'dhcp' 'dhcp' + option 'leasetime' '5m' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_demo b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_demo new file mode 100644 index 0000000..c11a74f --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_demo @@ -0,0 +1,21 @@ +config 'community' 'profile' + option 'name' 'Freifunk Demo' + option 'homepage' 'http://www.freifunk.net' + option 'ssid' 'demo.freifunk.net' + option 'mesh_network' '10.11.12.0/24' + option 'latitude' '51.163375' + option 'longitude' '10.447683' + option 'suffix' 'ff' + option 'vap' '1' + option adhoc_dhcp_when_vap '1' + option 'ipv6' '1' + option 'ipv6_config' 'auto-ipv6-fromv4' + option 'ipv6_prefix' 'fdca:ffff:ffff::/48' + #option 'extrapackages' '' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.0' + +config 'defaults' 'luci_splash' + option 'limit_up' '50' + option 'limit_down' '200' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_duesseldorf b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_duesseldorf new file mode 100644 index 0000000..cb36aab --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_duesseldorf @@ -0,0 +1,15 @@ +config 'community' 'profile' + option 'name' 'Freifunk Duesseldorf' + option 'homepage' 'http://freifunk-duesseldorf.de' + option 'ssid' 'duesseldorf.freifunk.net' + option 'mesh_network' '10.40.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '51.217812' + option 'longitude' '6.761564' + +config 'defaults' 'wifi_device' + option 'channel' '3' + +config 'defaults' 'wifi_iface' + option 'bssid' '02:CA:FF:EE:BA:BE' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_erfurt b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_erfurt new file mode 100644 index 0000000..dba31a0 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_erfurt @@ -0,0 +1,48 @@ +config 'community' 'profile' + option 'name' 'Freifunk Erfurt' + option 'homepage' 'http://erfurt.freifunk.net' + option 'ssid' 'erfurt.freifunk.net' + option 'mesh_network' '10.99.0.0/16' + option 'latitude' '50.9768' + option 'longitude' '11.02367' + option 'suffix' 'olsr.erfurt.freifunk.net' + option 'vap' '1' + option 'adhoc_dhcp_when_vap' '0' + +config 'defaults' 'interface' + option 'netmask' '255.255.0.0' + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + +config 'defaults' 'olsrd' + option 'LinkQualityAlgorithm' 'etx_ff' + + +config widget 'customindex' + option enabled '1' + option width '50%' + option paddingright '5%' + option template 'html' + +config widget 'rssffl' + option enabled '1' + option max '10' + option cache '3600' + option width '100%' + option title 'Freifunk Blog' + option template 'iframe' + option url 'http://freifunk.net' + +config widget 'rssbundesweit' + option cache '3600' + option width '50%' + option title 'bundesweiter Freifunk Blog' + option template 'rssfeed' + option enabled '1' + option max '10' + option url 'http://blog.freifunk.net/rss.xml' + +config widget 'clear1' + option template 'clear' + option enabled '1' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_evernet b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_evernet new file mode 100644 index 0000000..0545360 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_evernet @@ -0,0 +1,25 @@ +config 'community' 'profile' + option 'name' 'Freifunk Evernet eG' + option 'homepage' 'http://www.evernet-eg.de' + option 'ssid' 'evernet.freifunk.net' + option 'mesh_network' '10.0.0.0/8' + option 'latitude' '51.15692062509162' + option 'longitude' '10.716041922569275' + option 'suffix' 'evernet' + +config 'defaults' 'interface' + option 'netmask' '255.0.0.0' + +config 'defaults' 'bssidscheme' + option 'all' '02:CA:FF:EE:BA:BE' + +config 'defaults' 'wifi_device' + option 'channel' '13' + option 'country' 'DE' + option 'txpower' '19' + option 'beacon_int' '5000' + option 'distance' '1500' + option 'noscan' '0' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_freiburg b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_freiburg new file mode 100644 index 0000000..eee3d6a --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_freiburg @@ -0,0 +1,45 @@ +config 'community' 'profile' + option 'name' 'Freifunk Freiburg' + option 'homepage' 'http://freiburg.freifunk.net' + option 'ssid' '02:CA:FF:EE:BA:BE' + option 'mesh_network' '10.60.0.0/16' + option 'latitude' '47.994841' + option 'longitude' '7.849772' + option 'suffix' 'olsr.freiburg.freifunk.net' + option 'vap' '1' + option 'adhoc_dhcp_when_vap' '0' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.255' + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + option '40' '02:40:CA:FF:EE:EE' + +config 'defaults' 'wifi_device' + option 'country' 'DE' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' + +config 'defaults' 'olsrd' + option 'LinkQualityAlgorithm' 'etx_ff' + +config widget 'customindex' + option enabled '1' + option width '50%' + option paddingright '5%' + option template 'html' + +config widget 'rssbundesweit' + option cache '3600' + option width '50%' + option title 'bundesweiter Freifunk Blog' + option template 'rssfeed' + option enabled '1' + option max '10' + option url 'http://blog.freifunk.net/rss.xml' + +config widget 'clear1' + option template 'clear' + option enabled '1' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_gadow b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_gadow new file mode 100644 index 0000000..bc4a203 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_gadow @@ -0,0 +1,23 @@ +config 'community' 'profile' + option 'name' 'Freifunk Gadow' + option 'homepage' 'http://gadow.freifunk.net' + option 'ssid' 'gadow.freifunk.net' + option 'mesh_network' '10.61.0.0/16' + option 'latitude' '53.11' + option 'longitude' '12.61' + option 'vap' '1' + option 'adhoc_dhcp_when_vap' '0' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.255' + + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + option '40' '02:40:CA:FF:EE:EE' + +config 'defaults' 'wifi_device' + option 'country' 'DE' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_guifibages b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_guifibages new file mode 100644 index 0000000..a0fc4fc --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_guifibages @@ -0,0 +1,19 @@ +config 'community' 'profile' + option 'name' 'Guifi Bages' + option 'homepage' 'http://guifi.net/PlaBages' + option 'ssid' 'guifibages' + option 'mesh_network' '10.224.3.0/16' + option 'splash_network' '10.104.0.0/16' + option 'theme' 'luci-theme-freifunk-generic' + option 'latitude' '41.718437' + option 'longitude' '1.826477' + option 'suffix' 'guifibages.cat' + option 'splash_prefix' '27' + option 'extrapackages' 'luci-app-olsr-viz luci-i18n-catalan' + +config 'defaults' 'interface' + option 'netmask' '255.255.0.0' + +config 'defaults' 'bssidscheme' + option 'all' '12:34:56:78:9a:bc' + diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_halle b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_halle new file mode 100644 index 0000000..30d0e8f --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_halle @@ -0,0 +1,71 @@ +config 'community' 'profile' + option 'name' 'Freifunk Halle' + option 'homepage' 'http://freifunk-halle.org' + option 'ssid' 'halle.freifunk.net' + option 'mesh_network' '10.62.0.0/16' + option 'splash_network' '6.0.0.0/8' + option 'splash_prefix' '27' + option 'latitude' '51.47911' + option 'longitude' '11.96901' + option 'adhoc_dhcp_when_vap' '0' + option 'suffix' 'ffhal' + option 'vap' '1' + option 'batman' '1' + +config 'defaults' 'wifi_device' + option 'channel' '13' + option 'country' 'DE' + +config 'defaults' 'bssidscheme' + option 'all' '02:CA:FF:EE:BA:BE' + +config 'defaults' 'luci_splash' + option 'redirect_url' 'http://freifunk-halle.org/willkommen.php' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.255' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' + +config 'defaults' 'dhcp' + option 'leasetime' '5m' + +config 'defaults' 'olsrd' + option 'AllowNoInt' 'yes' + option 'FIBMetric' 'flat' + option 'Pollrate' '0.025' + option 'TcRedundancy' '2' + option 'NatThreshold' '0.75' + option 'LinkQualityAlgorithm' 'etx_ff' + option 'LinkQualityFishEye' '1' + option 'Willingness' '3' + +config 'defaults' 'olsr_interface' + option 'Ip4Broadcast' '255.255.255.255' + option 'HelloInterval' '5.0' + option 'HelloValidityTime' '125.0' + option 'TcInterval' '3.0' + option 'TcValidityTime' '375.0' + option 'MidInterval' '25.0' + option 'MidValidityTime' '375.0' + option 'HnaInterval' '25.0' + option 'HnaValidityTime' '375.0' + +config widget 'rsshalle' + option cache '3600' + option width '50%' + option title 'neuste Foreneinträge in Halle' + option template 'rssfeed' + option enabled '1' + option max '5' + option url 'http://www.freifunk-halle.org/rss.php' + +config widget 'rssbundesweit' + option cache '3600' + option width '50%' + option title 'bundesweiter Freifunk Blog' + option template 'rssfeed' + option enabled '1' + option max '10' + option url 'http://blog.freifunk.net/rss.xml' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_hameln b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_hameln new file mode 100644 index 0000000..f305b59 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_hameln @@ -0,0 +1,15 @@ +config 'community' 'profile' + option 'name' 'Hameln' + option 'homepage' 'http://freifunk-hameln.de' + option 'ssid' 'hameln.freifunk.net' + option 'suffix' 'ffhm' + option 'latitude' '52.1030706' + option 'longitude' '9.3514778' + option 'mesh_network' '10.31.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'splash_prefix' '27' + option 'vap' '1' + option adhoc_dhcp_when_vap '1' + +config 'defaults' 'interface' + option 'netmask' '255.255.0.0' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_hannover b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_hannover new file mode 100644 index 0000000..008b6c7 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_hannover @@ -0,0 +1,12 @@ +config 'community' 'profile' + option 'name' 'Freifunk Hannover' + option 'homepage' 'http://hannover.freifunk.net' + option 'ssid' 'hannover.freifunk.net' + option 'mesh_network' '10.2.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '52.38427' + option 'longitude' '9.74359' + +config 'defaults' 'wifi_iface' + option 'bssid' 'CA:FF:EE:CA:FF:EE' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_hooge b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_hooge new file mode 100644 index 0000000..62f6fa9 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_hooge @@ -0,0 +1,22 @@ +config 'community' 'profile' + option 'name' 'Freifunk Hooge' + option 'homepage' 'http://hooge.freifunk.net' + option 'ssid' 'hooge.freifunk.net' + option 'mesh_network' '10.11.128.0/24' + option 'splash_network' '10.104.0.0/16' + option 'latitude' '54.572161' + option 'longitude' '8.559551' + option 'suffix' 'hooge' + option 'splash_prefix' '27' + option 'vap' '1' + option 'extrapackages' '' + list 'owm_api' 'http://api.openwifimap.net' + list 'owm_api' 'http://owmapi.pberg.freifunk.net' + option 'mapserver' 'http://openwifimap.net/' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.0' + +config 'defaults' 'luci_splash' + option 'limit_up' '20' + option 'limit_down' '50' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_kiberpipa b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_kiberpipa new file mode 100644 index 0000000..c2a96e4 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_kiberpipa @@ -0,0 +1,15 @@ +config 'community' 'profile' + option 'name' 'Kiberpipa.net' + option 'homepage' 'http://www.kiberpipa.net' + option 'ssid' 'open.kiberpipa.net' + option 'mesh_network' '10.14.0.0/16' + option 'splash_network' '10.14.128.0/17' + option 'splash_prefix' '27' + option 'latitude' '46.05063' + option 'longitude' '14.50402' + +config 'defaults' 'wifi_device' + option 'channel' '8' + +config 'defaults' 'interface' + option 'dns' '10.14.0.1 208.67.222.220 208.67.220.222' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_kyritz b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_kyritz new file mode 100644 index 0000000..f97e79f --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_kyritz @@ -0,0 +1,57 @@ +config 'community' 'profile' + option 'name' 'Freifunk Kyritz' + option 'homepage' 'http://kyritz.freifunk.net' + option 'ssid' 'mesh.freifunk.net' + option 'mesh_network' '104.59.0.0/16' + option 'latitude' '52.94' + option 'longitude' '12.4' + option 'suffix' 'olsr.kyritz.freifunk.net' + option 'vap' '1' + option 'adhoc_dhcp_when_vap' '0' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.255' + + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + option '40' '02:40:CA:FF:EE:EE' + +config 'defaults' 'wifi_device' + option 'country' 'DE' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' + + +config 'defaults' 'olsrd' + option 'LinkQualityAlgorithm' 'etx_ff' + + +config widget 'customindex' + option enabled '1' + option width '50%' + option paddingright '5%' + option template 'html' + +config widget 'rssffl' + option enabled '1' + option max '10' + option cache '3600' + option width '100%' + option title 'Freifunk Blog' + option template 'iframe' + option url 'http://freifunk.net' + +config widget 'rssbundesweit' + option cache '3600' + option width '50%' + option title 'bundesweiter Freifunk Blog' + option template 'rssfeed' + option enabled '1' + option max '10' + option url 'http://blog.freifunk.net/rss.xml' + +config widget 'clear1' + option template 'clear' + option enabled '1' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_l59 b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_l59 new file mode 100644 index 0000000..5e6f472 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_l59 @@ -0,0 +1,25 @@ +config 'community' 'profile' + option 'name' 'Freifunk L59' + option 'homepage' 'http://freifunk.net' + option 'ssid' 'freifunk.net' + option 'mesh_network' '10.59.0.0/16' + option 'splash_network' '6.59.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '52.26337' + option 'longitude' '10.52103' + option 'vap' '1' + option 'adhoc_dhcp_when_vap' '0' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.255' + + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + option '40' '02:40:CA:FF:EE:EE' + +config 'defaults' 'wifi_device' + option 'country' 'DE' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_leipzig b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_leipzig new file mode 100644 index 0000000..671f3e8 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_leipzig @@ -0,0 +1,55 @@ +config 'community' 'profile' + option 'name' 'Freifunk Leipzig' + option 'homepage' 'http://leipzig.freifunk.net' + option 'ssid' 'leipzig.freifunk.net' + option 'mesh_network' '10.61.0.0/16' + option 'latitude' '51.33348' + option 'longitude' '12.40297' + option 'suffix' 'olsr.leipzig.freifunk.net' + option 'vap' '1' + option 'adhoc_dhcp_when_vap' '0' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.255' + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + option '40' '02:40:CA:FF:EE:EE' + +config 'defaults' 'wifi_device' + option 'country' 'DE' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' + +config 'defaults' 'olsrd' + option 'LinkQualityAlgorithm' 'etx_ff' + + +config widget 'customindex' + option enabled '1' + option width '50%' + option paddingright '5%' + option template 'html' + +config widget 'rssffl' + option enabled '1' + option max '10' + option cache '3600' + option width '100%' + option title 'Freifunk Leipzig Blog' + option template 'iframe' + option url 'http://leipzig.freifunk.net' + +config widget 'rssbundesweit' + option cache '3600' + option width '50%' + option title 'bundesweiter Freifunk Blog' + option template 'rssfeed' + option enabled '1' + option max '10' + option url 'http://blog.freifunk.net/rss.xml' + +config widget 'clear1' + option template 'clear' + option enabled '1' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_marburg b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_marburg new file mode 100644 index 0000000..18cff80 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_marburg @@ -0,0 +1,12 @@ +config 'community' 'profile' + option 'name' 'Freifunk Marburg' + option 'homepage' ' http://marburg.freifunk.de' + option 'ssid' 'marburg.freifunk.net' + option 'mesh_network' '10.128.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'splash_prefix' '29' + option 'latitude' '49.63939' + option 'longitude' '8.633718' + +config 'defaults' 'interface' + option 'dns' '8.8.8.8 212.204.49.83' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_oldenburg b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_oldenburg new file mode 100644 index 0000000..e967fdb --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_oldenburg @@ -0,0 +1,15 @@ +config 'community' 'profile' + option 'name' 'Freifunk Oldenburg' + option 'homepage' 'http://oldenburg.freifunk.net' + option 'ssid' 'oldenburg.freifunk.net' + option 'mesh_network' '10.18.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '53.14083' + option 'longitude' '8.21314' + +config 'defaults' 'wifi_device' + option 'channel' '6' + +config 'defaults' 'wifi_iface' + option 'bssid' '02:CA:FF:EE:BA:BE' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_openwireless_bern b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_openwireless_bern new file mode 100644 index 0000000..810ad8f --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_openwireless_bern @@ -0,0 +1,18 @@ +config 'community' 'profile' + option 'name' 'Openwireless Bern' + option 'homepage' 'http://bern.openwireless.ch/' + option 'ssid' 'www.openwireless.ch' + option 'mesh_network' '10.247.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '50.814788' + option 'longitude' '8.769239' + +config 'defaults' 'interface' + option 'dns' '208.67.222.222 208.67.220.220' + +config 'defaults' 'wifi_device' + option 'channel' '10' + option 'country' '756' + + diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_piraten_dresden b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_piraten_dresden new file mode 100644 index 0000000..2af0e31 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_piraten_dresden @@ -0,0 +1,12 @@ +config 'community' 'profile' + option 'name' 'Piratenfreifunk Dresden' + option 'homepage' 'http://www.piraten-sachsen.de/' + option 'ssid' 'dresden.freifunk.net' + option 'mesh_network' '10.12.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '51.05081' + option 'longitude' '13.73420' + +config 'defaults' 'wifi_device' + option 'channel' '1' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_potsdam b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_potsdam new file mode 100644 index 0000000..c15624a --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_potsdam @@ -0,0 +1,19 @@ +config 'community' 'profile' + option 'name' 'Freifunk Potsdam' + option 'homepage' 'http://potsdam.freifunk.net' + option 'ssid' 'www.freifunk-potsdam.de' + option 'mesh_network' '10.22.0.0/16' + option 'splash_network' '192.168.22.0/24' + option 'splash_prefix' '24' + option 'latitude' '52.39349' + option 'longitude' '13.06489' + +config 'defaults' 'wifi_device' + option 'channel' '5' + +config 'defaults' 'bssidscheme' + option '5' '02:CA:FF:EE:BA:BE' + +config 'defaults' 'interface' + option 'dns' '85.214.20.141 213.73.91.35 194.150.168.168' + diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_reihen b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_reihen new file mode 100644 index 0000000..a05d6a2 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_reihen @@ -0,0 +1,25 @@ +config 'community' 'profile' + option 'name' 'Freifunk Reihen' + option 'homepage' 'http://freifunk.reihen.de' + option 'ssid' 'freifunk.reihen.de' + option 'mesh_network' '172.23.0.0/16' + option 'splash_network' '172.23.26.0/29' + option 'latitude' '49.21' + option 'longitude' '8.91' + option 'splash_prefix' '29' + +config 'defaults' 'interface' + option 'netmask' '255.255.0.0' + option 'dns' '172.23.25.204 172.23.31.237 141.1.1.1' + +config 'defaults' 'wifi_device' + option 'channel' '13' + option 'bssid' '02:07:04:08:08:09' + +config 'defaults' 'bssidscheme' + option '13' '02:07:04:08:08:09' + option '36' '02:36:CA:FF:EE:EE' + +config 'defaults' 'ssidscheme' + option '13' 'ch13.freifunk.net' + option '36' 'ch36.freifunk.net' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_rosbach b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_rosbach new file mode 100644 index 0000000..4444f70 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_rosbach @@ -0,0 +1,15 @@ +config 'community' 'profile' + option 'name' 'Freifunk Rosbach' + option 'homepage' 'freifunk-rosbach.de' + option 'ssid' 'rosbach.freifunk.net' + option 'mesh_network' '10.212.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '50.18' + option 'longitude' '8.42' + +config 'defaults' 'wifi_device' + option 'channel' '13' + +config 'defaults' 'wifi_iface' + option 'bssid' 'D2:CA:FF:EE:BA:BE' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_schwarzach b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_schwarzach new file mode 100644 index 0000000..c973ca0 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_schwarzach @@ -0,0 +1,12 @@ +config 'community' 'profile' + option 'name' 'Freifunk Schwarzach' + option 'homepage' 'http://schwarzach.freifunk.net' + option 'ssid' 'schwarzach.freifunk.net' + option 'mesh_network' '10.81.0.0/20' + option 'splash_network' '10.104.0.0/16' + option 'latitude' '49.373' + option 'longitude' '8.983' + option 'splash_prefix' '27' + +config 'defaults' 'interface' + option 'netmask' '255.255.240.0' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_stuttgart b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_stuttgart new file mode 100644 index 0000000..28d60d8 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_stuttgart @@ -0,0 +1,13 @@ +config 'community' 'profile' + option 'name' 'Freifunk Stuttgart' + option 'homepage' 'http://freifunk-stuttgart.de' + option 'ssid' 'Freifunk Stuttgart' + option 'mesh_network' '172.21.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'latitude' '48' + option 'longitude' '9' + option 'splash_prefix' '27' + +config 'defaults' 'wifi_device' + option 'channel' '5' + option 'bssid' '52:CA:FF:EE:BA:BE' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_tulumlibre b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_tulumlibre new file mode 100644 index 0000000..ecc6f9b --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_tulumlibre @@ -0,0 +1,10 @@ +config 'community' 'profile' + option 'name' 'tulumlibre' + option 'ssid' 'tulumlibre' + option 'mesh_network' '10.39.128.0/18' + option 'latitude' '20.2106708' + option 'longitude' '-87.4629471' + option 'splash_prefix' '28' + +config 'defaults' 'interface' + option 'dns' '213.73.91.35 216.87.84.211' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_vogtland b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_vogtland new file mode 100644 index 0000000..8baeec6 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_vogtland @@ -0,0 +1,23 @@ +config 'community' 'profile' + option 'name' 'Freifunk Vogtland' + option 'homepage' 'http://wiki.freifunk.net/Freifunk_Vogtland' + option 'ssid' 'vogtland.freifunk.net' + option 'mesh_network' '10.204.0.0/16' + option 'splash_network' '6.204.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '53.11' + option 'longitude' '12.61' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.255' + + +config 'defaults' 'bssidscheme' + option '1' '02:CA:FF:EE:BA:BE' + option '40' '02:40:CA:FF:EE:EE' + +config 'defaults' 'wifi_device' + option 'country' 'DE' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_weil b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_weil new file mode 100644 index 0000000..ddba1f3 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_weil @@ -0,0 +1,23 @@ +config 'community' 'profile' + option 'name' 'Freifunk Weil am Rhein' + option 'homepage' 'http://weil-am-rhein.freifunk.net' + option 'ssid' 'mesh.freifunk.net' + option 'mesh_network' '10.119.0.0/18' + option 'latitude' '47.6056' + option 'longitude' '7.6083' + option 'suffix' 'ffwr' + option 'vap' '1' + option 'adhoc_dhcp_when_vap' '0' + list 'owm_api' 'http://api.openwifimap.net' + list 'owm_api' 'http://owmapi.pberg.freifunk.net' + option 'mapserver' 'http://openwifimap.net/' + +config 'defaults' 'interface' + option 'netmask' '255.255.192.0' + +config 'defaults' 'wifi_device' + option 'country' 'DE' + option 'channel' '10' + +config 'defaults' 'luci_splash' + option 'leasetime' '24' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_weimar b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_weimar new file mode 100644 index 0000000..65938e7 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_weimar @@ -0,0 +1,10 @@ +config 'community' 'profile' + option 'name' 'Weimarnetz e.V.' + option 'homepage' 'http://www.weimarnetz.de' + option 'ssid' 'weimarnetz' + option 'mesh_network' '10.63.0.0/16' + option 'latitude' '50.989530' + option 'longitude' '11.338675' + +config 'defaults' 'interface' + option 'dns' '217.11.48.200 217.11.49.200 8.8.8.8' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_weinstadt b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_weinstadt new file mode 100644 index 0000000..49a42fa --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_weinstadt @@ -0,0 +1,19 @@ +config 'community' 'profile' + option 'name' 'Freifunk Weinstadt' + option 'homepage' 'http://freifunk-weinstadt.de' + option 'ssid' 'freifunk-weinstadt' + option 'mesh_network' '172.21.0.0/16' + option 'splash_network' '172.21.85.0/30' + option 'latitude' '48.81' + option 'longitude' '9.39' + option 'splash_prefix' '30' + +config 'defaults' 'wifi_device' + option 'channel' '13' + option 'bssid' '02:07:01:03:08:04' + +config 'defaults' 'bssidscheme' + option '13' '02:07:01:03:08:04' + +config 'defaults' 'interface' + option 'dns' '172.21.77.4 172.21.84.235 141.1.1.1' diff --git a/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_wlanljubljana b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_wlanljubljana new file mode 100644 index 0000000..eeefbd2 --- /dev/null +++ b/feeds/luci/contrib/package/community-profiles/files/etc/config/profile_wlanljubljana @@ -0,0 +1,15 @@ +config 'community' 'profile' + option 'name' 'wlan ljubljana' + option 'homepage' 'http://wlan-lj.net' + option 'ssid' 'open.wlan-lj.net' + option 'mesh_network' '10.254.0.0/16' + option 'splash_network' '10.254.120.0/21' + option 'splash_prefix' '27' + option 'latitude' '46.05063' + option 'longitude' '14.50402' + +config 'defaults' 'wifi_device' + option 'channel' '8' + +config 'defaults' 'interface' + option 'dns' '10.254.0.1 10.254.0.2' diff --git a/feeds/luci/contrib/package/freifunk-common/Makefile b/feeds/luci/contrib/package/freifunk-common/Makefile new file mode 100644 index 0000000..d9bbd99 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-common/Makefile @@ -0,0 +1,42 @@ +# Copyright (C) 2011 Manuel Munz +# This is free software, licensed under the Apache 2.0 license. + +include $(TOPDIR)/rules.mk + +PKG_NAME:=freifunk-common +PKG_RELEASE:=2 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/freifunk-common + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=9. Freifunk + TITLE:=Freifunk common files +endef + +define Package/freifunk-common/description + Common files and scripts that are needed to run free wireless mesh networks. +endef + +define Package/luci-mod-freifunk/conffiles +/etc/config/freifunk +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/freifunk-common/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,freifunk-common)) diff --git a/feeds/luci/contrib/package/freifunk-common/files/etc/config/freifunk b/feeds/luci/contrib/package/freifunk-common/files/etc/config/freifunk new file mode 100644 index 0000000..9a46f05 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-common/files/etc/config/freifunk @@ -0,0 +1,126 @@ +package 'freifunk' + +config 'public' 'contact' + option 'nickname' '' + option 'name' '' + option 'mail' '' + option 'phone' '' + option 'note' '' + +config 'public' 'community' + option 'name' 'Freifunk' + option 'homepage' 'http://freifunk.net' + +config 'fw_zone' 'zone_freifunk' + option 'name' 'freifunk' + option 'input' 'REJECT' + option 'forward' 'REJECT' + option 'output' 'ACCEPT' + +config 'fw_rule' 'fficmp' + option 'src' 'freifunk' + option 'target' 'ACCEPT' + option 'proto' 'icmp' + +config 'fw_rule' 'ffhttp' + option 'src' 'freifunk' + option 'target' 'ACCEPT' + option 'proto' 'tcp' + option 'dest_port' '80' + +config 'fw_rule' 'ffhttps' + option 'src' 'freifunk' + option 'target' 'ACCEPT' + option 'proto' 'tcp' + option 'dest_port' '443' + +config 'fw_rule' 'ffssh' + option 'src' 'freifunk' + option 'target' 'ACCEPT' + option 'proto' 'tcp' + option 'dest_port' '22' + +config 'fw_rule' 'ffolsr' + option 'src' 'freifunk' + option 'target' 'ACCEPT' + option 'proto' 'udp' + option 'dest_port' '698' + +config 'fw_rule' 'ffwprobe' + option 'src' 'freifunk' + option 'target' 'ACCEPT' + option 'proto' 'tcp' + option 'dest_port' '17990' + +config 'fw_rule' 'ffdns' + option 'dest_port' '53' + option 'src' 'freifunk' + option 'target' 'ACCEPT' + option 'proto' 'udp' + +config 'fw_rule' 'ffdhcp' + option 'src_port' '68' + option 'src' 'freifunk' + option 'target' 'ACCEPT' + option 'dest_port' '67' + option 'proto' 'udp' + option 'leasetime' '30m' + +config 'fw_rule' 'ffsplash' + option 'dest_port' '8082' + option 'src' 'freifunk' + option 'target' 'ACCEPT' + option 'proto' 'tcp' + +config 'fw_forwarding' 'lanfffwd' + option 'src' 'lan' + option 'dest' 'freifunk' + +config 'fw_forwarding' 'ffwanfwd' + option 'src' 'freifunk' + option 'dest' 'wan' + +config 'fw_forwarding' 'fffwd' + option 'src' 'freifunk' + option 'dest' 'freifunk' + +config 'include' 'freifunk' + option 'path' '/etc/firewall.freifunk' + +config 'defaults' 'system' + option 'zonename' 'Europe/Berlin' + option 'timezone' 'CET-1CEST,M3.5.0,M10.5.0/3' + +config 'defaults' 'wifi_device' + option 'channel' '1' + option 'diversity' '1' + option 'disabled' '0' + option 'country' 'DE' + option 'distance' '1000' + +config 'defaults' 'wifi_iface' + option 'mode' 'adhoc' + option 'encryption' 'none' + option 'bssid' '12:CA:FF:EE:BA:BE' + option 'mcast_rate' '6000' + +config 'defaults' 'madwifi_wifi_iface' + option 'bgscan' '0' + option 'sw_merge' '1' + option 'probereq' '1' + option 'mcast_rate' '5500' + +config 'defaults' 'interface' + option 'netmask' '255.255.0.0' + option 'dns' '8.8.8.8 212.204.49.83 141.1.1.1' + +config 'defaults' 'alias' + option 'netmask' '255.255.255.0' + +config 'defaults' 'dhcp' + option 'leasetime' '30m' + option 'start' '2' + option 'force' '1' + +config 'defaults' 'olsr_interfacedefaults' + option 'Ip4Broadcast' '255.255.255.255' diff --git a/feeds/luci/contrib/package/freifunk-common/files/etc/init.d/freifunk b/feeds/luci/contrib/package/freifunk-common/files/etc/init.d/freifunk new file mode 100755 index 0000000..dbe648a --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-common/files/etc/init.d/freifunk @@ -0,0 +1,25 @@ +#!/bin/sh /etc/rc.common +# Freifunk Init +# $Id$ + +START=99 + +boot() { + test -f /etc/crontabs/root || touch /etc/crontabs/root + + grep -q 'killall -HUP dnsmasq' /etc/crontabs/root || { + echo "*/5 * * * * killall -HUP dnsmasq" >> /etc/crontabs/root + } + + grep -q '/usr/sbin/ff_olsr_watchdog' /etc/crontabs/root || { + echo "*/5 * * * * /usr/sbin/ff_olsr_watchdog" >> /etc/crontabs/root + } + + [ -d /etc/rc.local.d ] && { + for file in /etc/rc.local.d/*; do + test -f "$file" && . "$file" + done + } + + /etc/init.d/cron restart & +} diff --git a/feeds/luci/contrib/package/freifunk-common/files/etc/rc.local.d/01-config-migration b/feeds/luci/contrib/package/freifunk-common/files/etc/rc.local.d/01-config-migration new file mode 100644 index 0000000..11f1ad6 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-common/files/etc/rc.local.d/01-config-migration @@ -0,0 +1,51 @@ +# Fixup various configurations to remove quirks +# from former versions. + +_log() { + logger -t "Config Migration" "$1" +} + +_uci() { + uci ${2:+-c $2} get "$1" 2>/dev/null +} + + +# Splash redirector had a wrong virtual url match +# which resulted in "No such handler" + +[ "$(_uci lucid.splashredir.virtual)" == "/" ] && { + _log "Fix splash redirector configuration" + uci set lucid.splashredir.virtual='' + uci commit lucid + /etc/init.d/lucid restart +} + + +# Newer OLSR versions have the MinTCVtime hack active, +# ensure proper timings or olsrd won't start + +FIX=0 +for i in 0 1 2 3 4; do + [ -z "$(_uci olsrd.@Interface[$i].TcInterval)" ] && \ + [ -z "$(_uci olsrd.@Interface[$i].TcValidityTime)" ] || { + uci delete olsrd.@Interface[$i].TcInterval + uci delete olsrd.@Interface[$i].TcValidityTime + FIX=1 + } +done + +[ "$FIX" == 1 ] && { + _log "Fix olsrd configuration for MinTCVTime hack" + uci commit olsrd + /etc/init.d/olsrd restart +} + + +# Ensure that the community definitions are in the +# new format + +[ -z "$(_uci freifunk.leipzig.mesh_network)" ] && \ +[ -n "$(_uci freifunk.leipzig.mesh_network /rom/etc/config)" ] && { + _log "Converting freifunk configuration to new format" + cp /rom/etc/config/freifunk /etc/config/freifunk +} diff --git a/feeds/luci/contrib/package/freifunk-common/files/etc/uci-defaults/freifunk b/feeds/luci/contrib/package/freifunk-common/files/etc/uci-defaults/freifunk new file mode 100644 index 0000000..fe6586c --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-common/files/etc/uci-defaults/freifunk @@ -0,0 +1,2 @@ +uci set uhttpd.main.rfc1918_filter=0 +uci commit uhttpd diff --git a/feeds/luci/contrib/package/freifunk-common/files/usr/bin/ffdzero b/feeds/luci/contrib/package/freifunk-common/files/usr/bin/ffdzero new file mode 100755 index 0000000..24e8c2e --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-common/files/usr/bin/ffdzero @@ -0,0 +1,10 @@ +#!/bin/sh + +test "$1" = "-h" && echo -e "Usage:\n\t$0 -h\n\t$0 [ { ip | hostname } ]" >&2 && exit 1 + +host="${1:-leipzig.freifunk.net}" + +wget -O /dev/null http://$host/cgi-bin-dev-zero.bin +test "$?" = "1" && wget -O /dev/null http://$host/cgi-bin/dev-zero.bin +test "$?" = "1" && wget -O /dev/null http://$host/cgi-bin/luci/freifunk/status/zeroes +test "$?" = "1" && echo "$host: no zero download found..." && exit 1 diff --git a/feeds/luci/contrib/package/freifunk-common/files/usr/bin/neigh.sh b/feeds/luci/contrib/package/freifunk-common/files/usr/bin/neigh.sh new file mode 100755 index 0000000..468ed7a --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-common/files/usr/bin/neigh.sh @@ -0,0 +1,103 @@ +#!/bin/sh + +. /usr/share/libubox/jshn.sh + +hostsfile_getname() +{ + local config="$1" + local i=0 + local value file + + while value="$( uci -q get $config.@LoadPlugin[$i].library )"; do { + case "$value" in + 'olsrd_nameservice.so.'*) + file="$( uci -q get $config.@LoadPlugin[$i].hosts_file )" + break + ;; + esac + + i=$(( i + 1 )) + } done + + echo "${file:-/var/run/hosts_olsr}" +} + +read_hostnames() +{ + local file_list=" $( hostsfile_getname 'olsrd' ) $(hostsfile_getname 'olsrd6' ) " + local line ip hostname file file_list_uniq + + for file in $file_list; do { + case " $file_list_uniq " in + *" $file "*) + ;; + *) + file_list_uniq="$file_list_uniq $file" + ;; + esac + } done + + for file in $file_list_uniq; do { + [ -e "$file" ] || continue + + while read -r line; do { + case "$line" in + [0-9]*) + # 2001:bf7:820:901::1 stuttgarter-core.olsr # myself + # 10.63.160.161 AlexLaterne # 10.63.160.161 + set -f + set +f -- $line + ip="$1" + hostname="$2" + + # global vars, e.g. + # IP_1_2_3_4='foo' or IP_2001_bf7_820_901__1='bar' + eval IP_${ip//[.:]/_}="$hostname" + ;; + esac + } done <"$file" + } done +} + +read_hostnames + +VARS='localIP:Local remoteIP:Remote validityTime:vTime linkQuality:LQ' +VARS="$VARS neighborLinkQuality:NLQ linkCost:Cost remoteHostname:Host" + +for HOST in '127.0.0.1' '::1';do + json_init + json_load "$( echo /links | nc $HOST 9090 | sed -n '/^[}{ ]/p' )" # remove header/non-json + + if json_is_a links array;then + json_select links + for v in ${VARS};do + eval _${v%:*}=0 + done + for j in 0 1;do + case ${j} in 1) + for v in ${VARS};do + eval printf \"%-\${_${v%:*}}s \" ${v#*:} + done + echo + ;;esac + i=1;while json_is_a ${i} object;do + json_select ${i} + json_get_vars $(for v in ${VARS};do echo ${v%:*};done) + case ${j} in 0) + for v in ${VARS};do + eval "test \${_${v%:*}} -lt \${#${v%:*}} && _${v%:*}=\${#${v%:*}}" + done + ;;*) + for v in ${VARS};do + eval printf \"%-\${_${v%:*}}s \" \$${v%:*} + eval remoteHostname="\$IP_${remoteIP//[.:]/_}" + done + echo + ;;esac + json_select .. + i=$(( i + 1 )) + done + done + fi + echo +done diff --git a/feeds/luci/contrib/package/freifunk-common/files/usr/bin/watch.sh b/feeds/luci/contrib/package/freifunk-common/files/usr/bin/watch.sh new file mode 100755 index 0000000..728526b --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-common/files/usr/bin/watch.sh @@ -0,0 +1,11 @@ +#!/bin/sh +command="$1" +interval="$2"; [ -z "$interval" ] && interval=1 + +if [ -z $command ]; then + echo 'Usage: watch.sh "command [options]" [interval], e.g. watch "ifconfig ath0" 2' + echo 'interval is optional and defaults to 1' + exit 1 +fi + +while true; do clear; $command; sleep $interval; done diff --git a/feeds/luci/contrib/package/freifunk-common/files/usr/sbin/ff_olsr_watchdog b/feeds/luci/contrib/package/freifunk-common/files/usr/sbin/ff_olsr_watchdog new file mode 100755 index 0000000..069f4c3 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-common/files/usr/sbin/ff_olsr_watchdog @@ -0,0 +1,29 @@ +#!/usr/bin/lua + +require "os" +require "io" +require "uci" +local fs = require "nixio.fs" + +if fs.access("/var/run/olsrd.pid") or fs.access("/var/run/olsrd4.pid") then + local stamp, intv + local x = uci.cursor() + + x:foreach("olsrd", "LoadPlugin", + function(s) + if s.library == "olsrd_watchdog.so.0.1" then + intv = tonumber(s.interval) + stamp = s.file + end + end) + + if intv and fs.access(stamp) then + local systime = os.time() + local wdgtime = tonumber(io.lines(stamp)()) + + if not wdgtime or ( systime - wdgtime ) > ( intv * 2 ) then + os.execute("logger -t 'OLSR watchdog' 'Process died - restarting!'") + os.execute("/etc/init.d/olsrd restart") + end + end +end diff --git a/feeds/luci/contrib/package/freifunk-firewall/Makefile b/feeds/luci/contrib/package/freifunk-firewall/Makefile new file mode 100644 index 0000000..b9d328c --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-firewall/Makefile @@ -0,0 +1,53 @@ +# +# Copyright (C) 2009 Jo-Philipp Wich +# +# This is free software, licensed under the Apache 2.0 license. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=freifunk-firewall +PKG_RELEASE:=3 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/freifunk-firewall + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=9. Freifunk + TITLE:=Freifunk Firewall Addon + DEPENDS:=+firewall +endef + +define Package/freifunk-firewall/description + Various firewall extensions for Freifunk. Includes NAT fixes and advanced settings. +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/freifunk-firewall/postinst +#!/bin/sh +[ -n "$${IPKG_INSTROOT}" ] || { + if ! grep -q /etc/firewall.freifunk /etc/config/firewall; then + uci add firewall include >/dev/null + uci set firewall.@include[-1].path=/etc/firewall.freifunk + uci commit firewall + fi +} +endef + +define Package/freifunk-firewall/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,freifunk-firewall)) diff --git a/feeds/luci/contrib/package/freifunk-firewall/files/etc/firewall.freifunk b/feeds/luci/contrib/package/freifunk-firewall/files/etc/firewall.freifunk new file mode 100644 index 0000000..d2805f6 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-firewall/files/etc/firewall.freifunk @@ -0,0 +1,40 @@ +#!/bin/sh +# Freifunk Firewall addons + +. /lib/functions.sh + +# +# Apply advanced settings +# +apply_advanced() { + local tcp_ecn + local tcp_window_scaling + local accept_redirects + local accept_source_route + + config_get_bool tcp_ecn $1 tcp_ecn 1 + config_get_bool tcp_window_scaling $1 tcp_window_scaling 1 + config_get_bool accept_redirects $1 accept_redirects 0 + config_get_bool accept_source_route $1 accept_source_route 0 + + logger -t firewall.freifunk "tcp_ecn is $tcp_ecn" + logger -t firewall.freifunk "tcp_window_scaling is $tcp_window_scaling" + logger -t firewall.freifunk "accept_redirects is $accept_redirects" + logger -t firewall.freifunk "accept_source_route is $accept_source_route" + + sysctl -w net.ipv4.tcp_ecn=$tcp_ecn >/dev/null + sysctl -w net.ipv4.tcp_window_scaling=$tcp_window_scaling >/dev/null + + for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do + echo $accept_redirects > $f + done + + for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do + echo $accept_source_route > $f + done +} + +config_foreach apply_advanced advanced + +[ -x /etc/init.d/freifunk-p2pblock ] && /etc/init.d/freifunk-p2pblock enabled && \ + ( sleep 3; /etc/init.d/freifunk-p2pblock restart )& diff --git a/feeds/luci/contrib/package/freifunk-firewall/files/etc/hotplug.d/firewall/23-restricted-wan b/feeds/luci/contrib/package/freifunk-firewall/files/etc/hotplug.d/firewall/23-restricted-wan new file mode 100644 index 0000000..e71c852 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-firewall/files/etc/hotplug.d/firewall/23-restricted-wan @@ -0,0 +1,65 @@ +#!/bin/sh + +clear_restricted_gw() +{ + local state="$1" + local iface + local ifname + local subnet + + config_get iface "$state" iface + + if [ "$iface" = "$INTERFACE" ]; then + config_get ifname "$state" ifname + config_get subnet "$state" subnet + + logger -t firewall.freifunk "removing local restriction to the network connected to $ifname ($iface)" + iptables -D forwarding_freifunk_rule -o $ifname -d $subnet -j REJECT --reject-with icmp-host-prohibited + uci_revert_state firewall "$state" + fi +} + +get_enabled() +{ + local name + config_get name "$1" name + + if [ "$name" = "$ZONE" ]; then + config_get_bool local_restrict "$1" local_restrict + fi +} + +if [ "$ACTION" = add ]; then + local enabled + local subnet + + . /lib/functions/network.sh + + network_find_wan wan + + [ "$INTERFACE" = "$wan" ] || return 0 + + network_get_subnet subnet $INTERFACE + + if [ -n "$subnet" ]; then + config_load firewall + + local_restrict=0 + config_foreach get_enabled zone + + if [ "$local_restrict" = 1 ]; then + logger -t firewall.freifunk "restricting local access to the network connected to $INTERFACE ($DEVICE)" + iptables -I forwarding_freifunk_rule -o $DEVICE -d $subnet -j REJECT --reject-with icmp-host-prohibited + local state="restricted_gw_${INTERFACE}" + uci_set_state firewall "$state" "" restricted_gw_state + uci_set_state firewall "$state" iface "$INTERFACE" + uci_set_state firewall "$state" ifname "$DEVICE" + uci_set_state firewall "$state" subnet "$subnet" + fi + fi + +elif [ "$ACTION" = remove ]; then + config_load firewall + config_foreach clear_restricted_gw restricted_gw_state +fi + diff --git a/feeds/luci/contrib/package/freifunk-gwcheck/Makefile b/feeds/luci/contrib/package/freifunk-gwcheck/Makefile new file mode 100644 index 0000000..6c2affe --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-gwcheck/Makefile @@ -0,0 +1,40 @@ +# Copyright (C) 2011 Manuel Munz +# This is free software, licensed under the Apache 2.0 license. + +include $(TOPDIR)/rules.mk + +PKG_NAME:=freifunk-gwcheck +PKG_RELEASE:=4 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/freifunk-gwcheck + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=9. Freifunk + TITLE:=Freifunk gateway check script + DEPENDS:=firewall +ip +iptables-mod-ipopt +olsrd-mod-dyn-gw-plain +endef + +define Package/freifunk-gwcheck/description + This script periodically checks if internet is available via your own gateway. If it detects that it is broken, then the defaultroute is removed from the main table and temporarilly placed in table gw-check until your internet works again. Config file is /etc/config/freifunk-gwcheck. +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/freifunk-gwcheck/install + $(CP) ./files/* $(1)/ + $(CP) ./root/* $(1)/ +endef + +$(eval $(call BuildPackage,freifunk-gwcheck)) diff --git a/feeds/luci/contrib/package/freifunk-gwcheck/files/etc/config/freifunk-gwcheck b/feeds/luci/contrib/package/freifunk-gwcheck/files/etc/config/freifunk-gwcheck new file mode 100644 index 0000000..b174dd6 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-gwcheck/files/etc/config/freifunk-gwcheck @@ -0,0 +1,5 @@ +config 'gwcheck' 'hosts' + list 'host' 'augsburg.freifunk.net' + list 'host' 'vpn4.leipzig.freifunk.net' + list 'host' 'luci.subsignal.org' + list 'host' 'bbb-vpn.berlin.freifunk.net' diff --git a/feeds/luci/contrib/package/freifunk-gwcheck/files/usr/sbin/ff_olsr_test_gw.sh b/feeds/luci/contrib/package/freifunk-gwcheck/files/usr/sbin/ff_olsr_test_gw.sh new file mode 100755 index 0000000..b86b668 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-gwcheck/files/usr/sbin/ff_olsr_test_gw.sh @@ -0,0 +1,132 @@ +#!/bin/sh +# Copyright 2013 Manuel Munz +# Licensed under the GNU General Public License (GPL) v3 +# This script monitors the local internet gateway + +. /lib/functions.sh +. /lib/functions/network.sh +. /usr/share/libubox/jshn.sh + +# exit if dyngw_plain is not enabled or RtTable is not (254 or unset) +config_load olsrd + +check_dyngw_plain() +{ + local cfg="$1" + config_get library "$cfg" library + if [ "${library#olsrd_dyn_gw_plain}" != "$library" ]; then + config_get ignore "$cfg" ignore + config_get RtTable "$cfg" RtTable + if [ "$ignore" != "1" ] && [ -z "$RtTable" -o "$RtTable" = "254" ]; then + exit=0 + fi + fi +} + +exit=1 +config_foreach check_dyngw_plain LoadPlugin +[ "$exit" = "1" ] && exit 1 + +#Exit if this script is already running +pid="$(pidof ff_olsr_test_gw.sh)" +if [ ${#pid} -gt 5 ]; then + logger -p debug -t gwcheck "Gateway check script is already running, exit now" + exit 1 +fi + +# exit if there is no defaultroute with metric=0 in main or gw-check table. +defroutemain="$(ip route show |grep default |grep -v metric)" +defroutegwcheck="$(ip route show table gw-check |grep default |grep -v metric)" +if [ -z "$defroutegwcheck" -a -z "$defroutemain" ]; then + exit 1 +fi + +# get and shuffle list of testservers +testserver="$(uci -q get freifunk-gwcheck.hosts.host)" +[ -z "$testserver" ] && echo "No testservers found, exit" && exit + +testserver="$(for t in $testserver; do echo $t; done | awk 'BEGIN { + srand(); +} +{ + l[NR] = $0; +} + +END { + for (i = 1; i <= NR; i++) { + n = int(rand() * (NR - i + 1)) + i; + print l[n]; + l[n] = l[i]; + } +}')" + +check_internet() { + for t in $testserver; do + local test + test=$(wget -q http://$t/conntest.html -O -| grep "Internet_works") + if [ "$test" == "Internet_works" ]; then + echo 0 + break + else + logger -p debug -t gw-check "Could not fetch http://$t/conntest.html" + fi + done +} + +resolve() { + echo "$(nslookup $1 2>/dev/null |grep 'Address' |grep -v '127.0.0.1' |awk '{ print $3 }')" +} + +get_dnsservers() { + # this gets all dns servers for the interface which has the default route + + dns="" + if [ ! -x /bin/ubus ]; then + # ubus not present (versions before Attitude): fallback to get these from /var/state/network. + # We always assume that wan is the default route interface here + dns="$(grep network.wan.resolv_dns /var/state/network | cut -d "=" -f 2)" + else + network_find_wan wan + network_get_dnsserver dns $wan + fi +} + +iw=$(check_internet) + +if [ "$iw" == 0 ]; then + # Internet available again, restore default route and remove ip rules + if [ -n "$defroutegwcheck" ]; then + ip route add $defroutegwcheck + ip route del $defroutegwcheck table gw-check + for host in $testserver; do + ips="$(resolve $host)" + for ip in $ips; do + [ -n "$(ip rule show | grep "to $ip lookup gw-check")" ] && ip rule del to $ip table gw-check + done + done + get_dnsservers + for d in $dns; do + [ -n "$(ip rule show | grep "to $d lookup gw-check")" ] && ip rule del to $d table gw-check + done + logger -p err -t gw-check "Internet is available again, default route restored ( $defroutegwcheck)" + fi + +else + # Check failed. Move default route to table gw-check and setup ip rules. + if [ -z "$(ip rule show | grep gw-check)" -a -n "$defroutemain" ]; then + ip route add $defroutemain table gw-check + ip route del $defroutemain + logger -p err -t gw-check "Internet is not available, default route deactivated ( $defroutemain)" + fi + for host in $testserver; do + ips="$(resolve $host)" + for ip in $ips; do + [ -z "$(ip rule show | grep "to $ip lookup gw-check")" ] && ip rule add to $ip table gw-check + done + done + get_dnsservers + for d in $dns; do + [ -z "$(ip rule show | grep "to $d lookup gw-check")" ] && ip rule add to $d table gw-check + done + logger -p err -t gw-check "Check your internet connection!" +fi diff --git a/feeds/luci/contrib/package/freifunk-gwcheck/root/etc/uci-defaults/50_freifunk-gwcheck b/feeds/luci/contrib/package/freifunk-gwcheck/root/etc/uci-defaults/50_freifunk-gwcheck new file mode 100644 index 0000000..33b1b99 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-gwcheck/root/etc/uci-defaults/50_freifunk-gwcheck @@ -0,0 +1,7 @@ +#!/bin/sh +tables="/etc/iproute2/rt_tables" +test -d /etc/iproute2/ || mkdir -p /etc/iproute2/ +grep -q "gw-check" $tables || echo "200 gw-check" >> $tables +test -f /etc/crontabs/root || touch /etc/crontabs/root +grep -q "ff_olsr_test_gw.sh" /etc/crontabs/root || echo "* * * * * /usr/sbin/ff_olsr_test_gw.sh" >> /etc/crontabs/root +/etc/init.d/cron restart diff --git a/feeds/luci/contrib/package/freifunk-mapupdate/Makefile b/feeds/luci/contrib/package/freifunk-mapupdate/Makefile new file mode 100644 index 0000000..a9281ca --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-mapupdate/Makefile @@ -0,0 +1,39 @@ +# Copyright (C) 2011 Manuel Munz +# This is free software, licensed under the Apache 2.0 license. + +include $(TOPDIR)/rules.mk + +PKG_NAME:=freifunk-mapupdate +PKG_RELEASE:=1 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/freifunk-mapupdate + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=9. Freifunk + TITLE:=Update script for freifunkmap + DEPENDS:=+olsrd-mod-nameservice +endef + +define Package/freifunk-mapupdate/description + This script updates the freifunkmap (also known as the global map, see http://map.berlin.freifunk.net) every hour. Config file is /etc/config/freifunk-mapupdate. +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/freifunk-mapupdate/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,freifunk-mapupdate)) diff --git a/feeds/luci/contrib/package/freifunk-mapupdate/files/etc/config/freifunk-mapupdate b/feeds/luci/contrib/package/freifunk-mapupdate/files/etc/config/freifunk-mapupdate new file mode 100644 index 0000000..7e98f95 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-mapupdate/files/etc/config/freifunk-mapupdate @@ -0,0 +1,3 @@ +config 'mapupdate' 'mapupdate' + option 'enabled' '1' + option 'mapserver' 'http://map.berlin.freifunk.net/freifunkmap.php' diff --git a/feeds/luci/contrib/package/freifunk-mapupdate/files/usr/sbin/ff_mapupdate.sh b/feeds/luci/contrib/package/freifunk-mapupdate/files/usr/sbin/ff_mapupdate.sh new file mode 100755 index 0000000..40a077f --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-mapupdate/files/usr/sbin/ff_mapupdate.sh @@ -0,0 +1,59 @@ +#!/bin/sh + +if [ ! "$(uci -q get freifunk-mapupdate.mapupdate.enabled)" == 1 ]; then + exit 1 +fi + +MAPSERVER="$(uci -q get freifunk-mapupdate.mapupdate.mapserver)" +[ -z "$MAPSERVER" ] && logger -t "freifunk-mapupdate:" "No mapserver configured" && exit 1 + +#check if nameservice plugin is installed and enabled, else exit +nslib=`uci show olsrd |grep olsrd_nameservice.so |awk {' FS="."; print $1"."$2 '}` +if [ -n "$nslib" ]; then + LATLONFILE="$(uci -q get $nslib.latlon_file)" + if [ -z "$LATLONFILE" ]; then + LATLONFILE="/var/run/latlon.js" + fi + if [ ! -p "$LATLONFILE" ]; then + logger -t "freifunk-mapupdate:" "latlon_file not found."; exit 1 + fi +else + logger -t "freifunk-mapupdate:" "nameservice plugin not found in olsrd config." + exit 1 +fi + +HOSTNAME="$(uci show system |grep hostname |cut -d "=" -f 2)" +HF_INFO="" + +# Get info for myself +SELF=$(cat $LATLONFILE |grep ^Self | sed -e 's/Self(//' -e 's/);//' -e "s/'//g") +OLSR_IP="$(echo $SELF |awk '{ FS=",";print $1 }')" +LOCATION="$(uci show system |grep .location |cut -d "=" -f 2)" +[ -n "$LOCATION" ] && NOTE="$LOCATION
" +FFNOTE="$(uci -q get freifunk.contact.note)" +[ -n "$FFNOTE" ] && NOTE="$NOTE $FFNOTE" +NOTE="

$HOSTNAME

$NOTE" +NOTE=`echo -e "$NOTE" | sed -e 's/\ /%20/g' -e 's/&/%26/g' -e 's/"/%22/g'` + +UPDATESTRING="$(echo $SELF |awk '{ FS=",";print $2 }'), $(echo $SELF |awk '{ FS=",";print $3 }')" + +# write our coordinates to mygooglemapscoords.txt to make Freifunk Firmware happy +echo "$UPDATESTRING" > /tmp/mygooglemapscoords.txt +[ ! -L /www/mygooglemapscoords.txt ] && ln -s /tmp/mygooglemapscoords.txt /www/mygooglemapscoords.txt + +# get neighbor Info (lat, lon, lq) +while read line; do + NEIGHUPD="$(echo $line |awk '{ FS=","; print $6 }'), $(echo $line |awk '{ FS=","; print $7 }'), $(echo $line |awk '{ FS=",";print $4 }')" + UPDATESTRING="${UPDATESTRING}, ${NEIGHUPD}" +done << EOF +`grep "PLink('$OLSR_IP" $LATLONFILE | sed -e 's/PLink(//' -e 's/);//' -e "s/'//g"` +EOF + +# Send UPDATESTRING +UPDATE=`echo -e "$UPDATESTRING" | sed s/\ /%20/g` +result="$(wget "$MAPSERVER?update=$UPDATE&updateiv=3600&olsrip=$OLSR_IP¬e=${NOTE}${HF_INFO}" -qO -)" + +if [ ! "$result" == "success update" ]; then + logger -t "freifunk-mapupdate:" "Update failed: $result" +fi + diff --git a/feeds/luci/contrib/package/freifunk-mapupdate/root/etc/uci-defaults/50_freifunk-mapupdate b/feeds/luci/contrib/package/freifunk-mapupdate/root/etc/uci-defaults/50_freifunk-mapupdate new file mode 100644 index 0000000..dee7f1b --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-mapupdate/root/etc/uci-defaults/50_freifunk-mapupdate @@ -0,0 +1,6 @@ +#!/bin/sh +test -f /etc/crontabs/root || touch /etc/crontabs/root +SEED="$( dd if=/dev/urandom bs=2 count=1 2>&- | hexdump | if read line; then echo 0x${line#* }; fi )" +MIN="$(( $SEED % 59 ))" +grep -q "ff_mapupdate.sh" /etc/crontabs/root || echo "$MIN * * * * /usr/sbin/ff_mapupdate.sh" >> /etc/crontabs/root +/etc/init.d/cron restart diff --git a/feeds/luci/contrib/package/freifunk-p2pblock/Makefile b/feeds/luci/contrib/package/freifunk-p2pblock/Makefile new file mode 100644 index 0000000..df7bd9b --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-p2pblock/Makefile @@ -0,0 +1,48 @@ +# +# Copyright (C) 2009 Andreas Seidler +# Copyright (C) 2012 Jo-Philipp Wich +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=freifunk-p2pblock +PKG_RELEASE:=3 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/freifunk-p2pblock + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=9. Freifunk + TITLE:=Freifunk p2pblock Addon + DEPENDS:=+iptables-mod-filter +iptables-mod-ipp2p +l7-protocols +iptables-mod-conntrack-extra @BROKEN +endef + +define Package/freifunk-p2pblock/description + Simple Addon for Freifunk which use iptables layer7-, ipp2p- and recent-modules + to block p2p/filesharing traffic +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/freifunk-p2pblock/install + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/freifunk-p2pblock.init $(1)/etc/init.d/freifunk-p2pblock + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_DATA) ./files/freifunk-p2pblock.config $(1)/etc/config/freifunk_p2pblock +endef + +$(eval $(call BuildPackage,freifunk-p2pblock)) diff --git a/feeds/luci/contrib/package/freifunk-p2pblock/files/freifunk-p2pblock.config b/feeds/luci/contrib/package/freifunk-p2pblock/files/freifunk-p2pblock.config new file mode 100644 index 0000000..291260e --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-p2pblock/files/freifunk-p2pblock.config @@ -0,0 +1,6 @@ +config 'settings' 'p2pblock' + option 'portrange' '1024:65535' + option 'layer7' 'edonkey bittorrent fasttrack' + option 'ipp2p' 'edk dc kazaa gnu bit ares soul winmx apple' + option 'blocktime' '60' + option 'whitelist' '' diff --git a/feeds/luci/contrib/package/freifunk-p2pblock/files/freifunk-p2pblock.init b/feeds/luci/contrib/package/freifunk-p2pblock/files/freifunk-p2pblock.init new file mode 100644 index 0000000..5ca60c8 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-p2pblock/files/freifunk-p2pblock.init @@ -0,0 +1,95 @@ +#!/bin/sh /etc/rc.common + +START=82 +ME="freifunk-p2pblock" +LOCK='/var/run/p2pblock.lock' + +# helper-scripts +ipt_add() { + logger -t "$ME" "set 'iptables -I $1'" + iptables -I $1 + echo "iptables -D $1" >> $LOCK +} + +start() { + /etc/init.d/freifunk-p2pblock enabled || return + + if [ ! -s "$LOCK" ]; then + logger -s -t "$ME" 'starting p2pblock...' + + config_load network + config_get wan wan ifname + + if [ -n "$wan" ]; then + config_load freifunk_p2pblock + config_get layer7 p2pblock layer7 + config_get ipp2p p2pblock ipp2p + config_get portrange p2pblock portrange + config_get blocktime p2pblock blocktime + config_get whitelist p2pblock whitelist + + # load modules + insmod ipt_ipp2p 2>&- + insmod ipt_layer7 2>&- + insmod ipt_recent ip_list_tot=400 ip_pkt_list_tot=3 2>&- + + # create new p2p-chain + iptables -N p2pblock + # pipe all incoming FORWARD with source-/destination-port 1024-65535 throu p2p-chain + ipt_add "FORWARD -i $wan -p tcp --sport $portrange --dport $portrange -j p2pblock" + ipt_add "FORWARD -i $wan -p udp --sport $portrange --dport $portrange -j p2pblock" + + # if p2p-traffic blocked 3 packages to a destination ip then block all traffic within the next 180 sec (port 1024-65535) + ipt_add "p2pblock -m recent --rdest --rcheck --name P2PBLOCK --seconds $blocktime --hitcount 3 -j DROP" + ipt_add "p2pblock -m recent --rdest --rcheck --name P2PBLOCK --seconds $blocktime --hitcount 3 -m limit --limit 1/minute -j LOG --log-prefix P2PBLOCK-DROP:" + + # create layer7-rules + for proto in $layer7; do + ipt_add "p2pblock -m layer7 --l7proto $proto -m recent --rdest --set --name P2PBLOCK" + ipt_add "p2pblock -m layer7 --l7proto $proto -m limit --limit 1/minute -j LOG --log-prefix P2PBLOCK-seen-$proto:" + done + + # create ipp2p-rules + for proto in $ipp2p; do + ipt_add "p2pblock -m ipp2p --$proto -m recent --rdest --set --name P2PBLOCK" + ipt_add "p2pblock -m ipp2p --$proto -m limit --limit 1/minute -j LOG --log-prefix P2PBLOCK-seen-$proto:" + done + + # insert whitelisted ips + for ip in $whitelist; do + ipt_add "p2pblock -d $ip -j RETURN" + done + + logger -s -t "$ME" 'Done.'; return 0 + else + logger -s -t "$ME" 'No wan interface present.'; return 0 + fi + else + logger -s -t "$ME" 'WARNING! already running - Aborting!'; return 2 + fi +} + +stop() { + if [ -s "$LOCK" ]; then + logger -s -t "$ME" 'stopping p2pblock...' + + # unset all rules in $LOCK-file + cat $LOCK | sed -ne '1!G;h;$p' | while read line; do + logger -t "$ME" "unset $line" + while eval $line 2>&-; do :; done + done; : > "$LOCK" + + # flush and delete the p2p-chain + iptables -F p2pblock + iptables -X p2pblock + logger -s -t "$ME" 'Done.'; return 0 + + else + logger -s -t "$ME" 'WARNING! not running - Aborting!'; return 2 + + fi +} + +restart() { + stop; sleep 1; start +} diff --git a/feeds/luci/contrib/package/freifunk-policyrouting/Makefile b/feeds/luci/contrib/package/freifunk-policyrouting/Makefile new file mode 100644 index 0000000..a9301ce --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-policyrouting/Makefile @@ -0,0 +1,47 @@ +# Copyright (C) 2011 Manuel Munz +# This is free software, licensed under the Apache 2.0 license. + +include $(TOPDIR)/rules.mk + +PKG_NAME:=freifunk-policyrouting +PKG_RELEASE:=6 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/freifunk-policyrouting + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=9. Freifunk + TITLE:=Freifunk policy routing addon + DEPENDS:=+ip +endef + +define Package/freifunk-policyrouting/description + Allows you to send your own traffic via your own default gateway while sending traffic received from the mesh to a gateway in the mesh. +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/freifunk-policyrouting/install + $(CP) ./files/* $(1)/ +endef + +define Package/freifunk-policyrouting/postinst +#!/bin/sh +[ -n "$${IPKG_INSTROOT}" ] || { + /etc/init.d/freifunk-policyrouting enabled || /etc/init.d/freifunk-policyrouting enable + exit 0 +} +endef + +$(eval $(call BuildPackage,freifunk-policyrouting)) diff --git a/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting b/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting new file mode 100644 index 0000000..3dd2998 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting @@ -0,0 +1,7 @@ + +config 'settings' 'pr' + option 'enable' '0' + option 'strict' '1' + option 'fallback' '1' + option 'zones' '' + diff --git a/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting b/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting new file mode 100644 index 0000000..327e879 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting @@ -0,0 +1,104 @@ +#!/bin/sh + +. /lib/functions.sh +. /lib/functions/network.sh + +proto="4" +[ -f /proc/net/ipv6_route ] && proto="4 6" + +config_load freifunk-policyrouting +config_get enable pr enable +config_get fallback pr fallback +config_get strict pr strict +config_get zones pr zones + +if [ "$ACTION" = "ifup" ] && [ "$enable" = "1" ]; then + network_get_subnet net $INTERFACE + network_get_subnet6 net6 $INTERFACE + network_get_physdev dev $INTERFACE + + if [ "$net" != "" -a -n "$dev" ]; then + eval $(/bin/ipcalc.sh $net) + if [ "$PREFIX" != "0" -a "$NETWORK" != "127.0.0.0" ]; then + if [ ! "$(ip r s t localnets |grep "$NETWORK/$PREFIX dev")" ]; then + cmd="ip r a $NETWORK/$PREFIX dev $dev table localnets" + $cmd + if [ "$?" = 0 ]; then + logger -s -t policyrouting "Add route: $cmd" + else + logger -s -t policyrouting "Error! Could not add route: $cmd" + fi + fi + + fi + + if [ -n "$net6" ]; then + cmd="ip -6 r a $net6 dev $dev table localnets" + $cmd 2>&1 > /dev/null + if [ "$?" = 0 ]; then + logger -s -t policyrouting "Add route: $cmd (IPv6)" + fi + + fi + + networks="" + for z in $zones; do + network_zone="$(uci -q get firewall.zone_${z}.network)" + if [ -z "$network_zone" ]; then + network_zone="$z" + fi + networks="$networks $network_zone" + done + for n in $networks; do + if [ "$INTERFACE" = "$n" ]; then + for p in $proto; do + if [ ! "$(ip -$p ru s | grep "from all iif $dev lookup olsr-default")" ]; then + ip -$p rule add dev "$dev" lookup olsr-default prio 20000 + if [ "$strict" != 0 ]; then + ip -$p rule add dev "$dev" unreachable prio 20001 + fi + if [ "$?" = 0 ]; then + logger -s -t policyrouting "Use mesh gateway for interface $dev (IPv$p)" + if [ -z "$(uci -P /var/state get freifunk-policyrouting.${INTERFACE})" ]; then + uci -P /var/state set freifunk-policyrouting.${INTERFACE}="state" + fi + uci -P /var/state set freifunk-policyrouting.${INTERFACE}.device="$dev" + else + logger -s -t policyrouting "Error: Could not add rule: dev "$dev" lookup olsr-default prio 20000 (IPv$p)" + fi + fi + done + fi + done + fi + +fi + +if [ "$ACTION" = "ifdown" ]; then + dev="$(uci -q -P /var/state get freifunk-policyrouting.${INTERFACE}.device)" + if [ -n "$dev" ]; then + networks="" + for z in $zones; do + network_zone="$(uci -q get firewall.zone_${z}.network)" + if [ -z "$network_zone" ]; then + network_zone="$z" + fi + networks="$networks $network_zone" + done + for n in $networks; do + if [ "$INTERFACE" = "$n" ]; then + for p in $proto; do + if [ "$(ip -$p ru s | grep "from all iif $dev lookup olsr-default")" ]; then + ip -$p rule del dev "$dev" lookup olsr-default prio 20000 + ip -$p rule del dev "$dev" unreachable prio 20001 + if [ "$?" = 0 ]; then + logger -s -t policyrouting "Remove rule: dev "$dev" lookup olsr-default prio 20000 (IPv$p)" + else + logger -s -t policyrouting "Error! Could not remove rule: dev "$dev" lookup olsr-default prio 20000 (IPv$p)" + fi + fi + done + fi + done + fi +fi diff --git a/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/init.d/freifunk-policyrouting b/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/init.d/freifunk-policyrouting new file mode 100755 index 0000000..4c91724 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/init.d/freifunk-policyrouting @@ -0,0 +1,172 @@ +#!/bin/sh /etc/rc.common + +START=15 +. /lib/functions/network.sh +. /lib/functions.sh + +proto="4" +[ -f /proc/net/ipv6_route ] && proto="4 6" +[ -f /etc/config/olsrd ] && cfgs="olsrd" +[ -f /etc/config/olsrd6 ] && cfgs="$cfgs olsrd6" + +config_load freifunk-policyrouting +config_get enable pr enable +config_get fallback pr fallback +config_get zones pr zones + + +olsrd_rmtables() { + for cfg in $cfgs; do + # Remove custom routing tables from olsrd + if [ "`uci -q get $cfg.@olsrd[0].RtTable`" == "111" ] || [ "`uci -q get $cfg.@olsrd[0].RtTableDefault`" == "112" ]; then + uci delete $cfg.@olsrd[0].RtTable + uci delete $cfg.@olsrd[0].RtTableDefault + uci commit + fi + done +} + +olsrd_intalltables() { + for cfg in $cfgs; do + if [ ! "`uci -q get $cfg.@olsrd[0].RtTable`" == "111" ] || [ ! "`uci -q get $cfg.@olsrd[0].RtTableDefault`" == "112" ]; then + uci set $cfg.@olsrd[0].RtTable='111' + uci set $cfg.@olsrd[0].RtTableDefault='112' + uci commit $cfg + /etc/init.d/$cfg restart 2&> /dev/null + fi + done +} + +rt_tables() { + tables="/etc/iproute2/rt_tables" + if [ -z "`grep "110" $tables`" ]; then + echo "110 localnets" >> $tables + fi + if [ -z "`grep "111" $tables`" ]; then + echo "111 olsr" >> $tables + fi + if [ -z "`grep "112" $tables`" ]; then + echo "112 olsr-default" >> $tables + fi + +} + +handle_disable_dyngw() { + local cfg="$1" + local olsrd_cfg="$2" + config_get library "$cfg" library + case "$library" in + olsrd_dyn_gw_plain*) + config_get RtTable "$cfg" RtTable + if [ -z "$RtTable" ] || [ "$RtTable" = "254" ]; then + config_set "$cfg" ignore '1' + uci set $olsrd_cfg.$cfg.ignore="1" + uci commit $olsrd_cfg + logger -s -t policyrouting -p info "dyngw_plain plugin disabled." + fi + ;; + olsrd_dyn_gw.so*) + logger -s -t policyrouting -p info "$cfg" + uci set $olsrd_cfg.$cfg.ignore="1" + uci commit $olsrd_cfg + logger -s -t policyrouting -p info "dyngw plugin disabled." + ;; + esac +} + +disable_dyngw() { + for olsrd_cfg in $cfgs; do + config_load $olsrd_cfg + config_foreach handle_disable_dyngw LoadPlugin $olsrd_cfg + done +} + +restart_services() { + logger -s -t policyrouting -p info "Restarting services" + /etc/init.d/network restart 2&> /dev/null + for cfg in $cfgs; do + /etc/init.d/$cfg restart 2&> /dev/null + done +} + +boot() { + if [ "$enable" = "1" ]; then + [ -d /var/state ] || mkdir -p /var/state + touch /var/state/freifunk-policyrouting + start noservicerestart + else + olsrd_rmtables + fi +} + +add_lookup_rule() { + name=${1/-/_} + lookup=$2 + prio=$3 + + if [ -z "$name" -o -z "$lookup" -o -z "$prio" ]; then + logger -s -t policyrouting "Missing parameters for add_rule!" + else + for p in $proto; do + if [ "$p" = "6" ]; then + rule="rule6" + else + rule="rule" + fi + + uci batch <<- EOF + set network.${name}ipv${p}="$rule" + set network.${name}ipv${p}.lookup="$lookup" + set network.${name}ipv${p}.priority="$prio" + EOF + done + fi +} + +del_lookup_rule() { + name=${1/-/_} + for p in $proto; do + uci -q delete network.${name}ipv${p} + done +} + +start() { + if [ $enable = "1" ]; then + logger -s -t policyrouting "Starting policy routing." + rt_tables + olsrd_intalltables + disable_dyngw + + add_lookup_rule olsr olsr 1000 + add_lookup_rule localnets localnets 2000 + + if [ "$fallback" = 1 ]; then + add_lookup_rule olsr-default olsr-default 100000 + fi + fi + uci commit network + if [ ! "$1" = "noservicerestart" ]; then + restart_services + fi +} + +stop() { + logger -s -t policyrouting "Stopping policy routing" + olsrd_rmtables + del_lookup_rule olsr-default + del_lookup_rule olsr + del_lookup_rule localnets + uci commit network + restart_services + echo "Hint: To completely disable freifunk-policyrouting set enable=0 in /etc/config/freifunk-policyrouting." +} + +restart() { + logger -s -t policyrouting "Restarting policy routing" + olsrd_rmtables + del_lookup_rule olsr-default + del_lookup_rule olsr + del_lookup_rule localnets + uci commit network + start +} diff --git a/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/uci-defaults/freifunk-policyrouting b/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/uci-defaults/freifunk-policyrouting new file mode 100644 index 0000000..a1e6310 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-policyrouting/files/etc/uci-defaults/freifunk-policyrouting @@ -0,0 +1,7 @@ +#!/bin/sh +uci batch <<-EOF + add ucitrack freifunk-policyrouting + add_list ucitrack.@freifunk-policyrouting[-1].exec="/etc/init.d/freifunk-policyrouting restart" + commit ucitrack +EOF + diff --git a/feeds/luci/contrib/package/freifunk-watchdog/Makefile b/feeds/luci/contrib/package/freifunk-watchdog/Makefile new file mode 100644 index 0000000..c720c25 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-watchdog/Makefile @@ -0,0 +1,55 @@ +# +# Copyright (C) 2009-2012 Jo-Philipp Wich +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=freifunk-watchdog +PKG_RELEASE:=8 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) +PKG_BUILD_DEPENDS := uci + +include $(INCLUDE_DIR)/package.mk + +define Package/freifunk-watchdog + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=9. Freifunk + TITLE:=Freifunk Ad-Hoc watchdog daemon + DEPENDS:=libuci +endef + +define Package/freifunk-watchdog/description + A watchdog daemon that monitors wireless interfaces to ensure the correct bssid and channel. + The process will initiate a wireless restart as soon as it detects a bssid or channel mismatch. +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) + $(CP) ./src/* $(PKG_BUILD_DIR)/ +endef + +define Build/Configure +endef + +define Build/Compile + $(MAKE) -C $(PKG_BUILD_DIR) \ + CC="$(TARGET_CC)" \ + CFLAGS="$(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include" \ + LDFLAGS="$(TARGET_LDFLAGS)" +endef + +define Package/freifunk-watchdog/install + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/freifunk-watchdog.init $(1)/etc/init.d/freifunk-watchdog + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_CONF) ./files/freifunk-watchdog.config $(1)/etc/config/freifunk-watchdog + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/ffwatchd $(1)/usr/sbin/ +endef + +$(eval $(call BuildPackage,freifunk-watchdog)) diff --git a/feeds/luci/contrib/package/freifunk-watchdog/files/freifunk-watchdog.config b/feeds/luci/contrib/package/freifunk-watchdog/files/freifunk-watchdog.config new file mode 100644 index 0000000..b6e6543 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-watchdog/files/freifunk-watchdog.config @@ -0,0 +1,7 @@ +config process + option process 'dropbear' + option initscript '/etc/init.d/dropbear' + +config process + option process 'crond' + option initscript '/etc/init.d/cron' diff --git a/feeds/luci/contrib/package/freifunk-watchdog/files/freifunk-watchdog.init b/feeds/luci/contrib/package/freifunk-watchdog/files/freifunk-watchdog.init new file mode 100755 index 0000000..d6ede09 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-watchdog/files/freifunk-watchdog.init @@ -0,0 +1,39 @@ +#!/bin/sh /etc/rc.common + +START=99 +PID=/var/run/ffwatchd.pid +BIN=/usr/sbin/ffwatchd + +boot() +{ + # If watchdog service is enabled, install cronjob, create device node and start daemon + if /etc/init.d/freifunk-watchdog enabled 2>/dev/null; then + if ! grep -q "$BIN" /etc/crontabs/root 2>/dev/null; then + echo "* * * * * $BIN running || /etc/init.d/freifunk-watchdog restart" >> /etc/crontabs/root + fi + + mknod /dev/watchdog c 10 130 + + start + + # If service is disabled, find and remove related cronjob + elif grep -q "$BIN" /etc/crontabs/root 2>/dev/null; then + sed -i -e "\\'$BIN'd" /etc/crontabs/root + fi +} + +start() +{ + start-stop-daemon -q -b -m -p $PID -x $BIN -S +} + +stop() +{ + start-stop-daemon -q -p $PID -x $BIN -K + + if ! /etc/init.d/freifunk-watchdog enabled; then + if grep -q "$BIN" /etc/crontabs/root 2>/dev/null; then + sed -i -e "\\'$BIN'd" /etc/crontabs/root + fi + fi +} diff --git a/feeds/luci/contrib/package/freifunk-watchdog/src/Makefile b/feeds/luci/contrib/package/freifunk-watchdog/src/Makefile new file mode 100644 index 0000000..e049ebc --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-watchdog/src/Makefile @@ -0,0 +1,12 @@ +WD_BINARY:=ffwatchd +WD_CFLAGS:=$(CFLAGS) -c -DBINARY=\"$(WD_BINARY)\" +WD_LDFLAGS:=$(LDFLAGS) -lm -luci + +watchdog: + $(CC) $(WD_CFLAGS) -o ucix.o ucix.c + $(CC) $(WD_CFLAGS) -o watchdog.o watchdog.c + $(CC) $(WD_LDFLAGS) -o $(WD_BINARY) watchdog.o ucix.o + +clean: + rm -f *~ $(WD_BINARY) *.o + diff --git a/feeds/luci/contrib/package/freifunk-watchdog/src/ucix.c b/feeds/luci/contrib/package/freifunk-watchdog/src/ucix.c new file mode 100644 index 0000000..f2f69fc --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-watchdog/src/ucix.c @@ -0,0 +1,102 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + * + * Copyright (C) 2008 John Crispin + * + * Changed by Jo-Philipp Wich + */ + +#include +#include + +#include +#include +#include "ucix.h" + +static struct uci_ptr ptr; + +static inline int ucix_get_ptr(struct uci_context *ctx, const char *p, const char *s, const char *o, const char *t) +{ + memset(&ptr, 0, sizeof(ptr)); + ptr.package = p; + ptr.section = s; + ptr.option = o; + ptr.value = t; + return uci_lookup_ptr(ctx, &ptr, NULL, true); +} + +struct uci_context* ucix_init(const char *config_file) +{ + struct uci_context *ctx = uci_alloc_context(); +#ifdef uci_to_delta + uci_add_delta_path(ctx, "/var/state"); +#else + uci_add_history_path(ctx, "/var/state"); +#endif + if(uci_load(ctx, config_file, NULL) != UCI_OK) + { + return NULL; + } + return ctx; +} + +void ucix_cleanup(struct uci_context *ctx) +{ + uci_free_context(ctx); +} + +const char* ucix_get_option(struct uci_context *ctx, const char *p, const char *s, const char *o) +{ + struct uci_element *e = NULL; + const char *value = NULL; + if(ucix_get_ptr(ctx, p, s, o, NULL)) + return NULL; + if (!(ptr.flags & UCI_LOOKUP_COMPLETE)) + return NULL; + e = ptr.last; + switch (e->type) + { + case UCI_TYPE_SECTION: + value = uci_to_section(e)->type; + break; + case UCI_TYPE_OPTION: + switch(ptr.o->type) { + case UCI_TYPE_STRING: + value = ptr.o->v.string; + break; + default: + value = NULL; + break; + } + break; + default: + return 0; + } + + return value; +} + +void ucix_for_each_section_type(struct uci_context *ctx, + const char *p, const char *t, + void (*cb)(const char*, void*), void *priv) +{ + struct uci_element *e; + if(ucix_get_ptr(ctx, p, NULL, NULL, NULL)) + return; + uci_foreach_element(&ptr.p->sections, e) + if (!strcmp(t, uci_to_section(e)->type)) + cb(e->name, priv); +} + diff --git a/feeds/luci/contrib/package/freifunk-watchdog/src/ucix.h b/feeds/luci/contrib/package/freifunk-watchdog/src/ucix.h new file mode 100644 index 0000000..b1f5ec3 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-watchdog/src/ucix.h @@ -0,0 +1,29 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + * + * Copyright (C) 2008 John Crispin + */ + +#ifndef _UCI_H__ +#define _UCI_H__ +struct uci_context* ucix_init(const char *config_file); + +void ucix_for_each_section_type(struct uci_context *ctx, + const char *p, const char *t, + void (*cb)(const char*, void*), void *priv); + +const char* ucix_get_option(struct uci_context *ctx, + const char *p, const char *s, const char *o); +#endif diff --git a/feeds/luci/contrib/package/freifunk-watchdog/src/watchdog.c b/feeds/luci/contrib/package/freifunk-watchdog/src/watchdog.c new file mode 100644 index 0000000..f546985 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-watchdog/src/watchdog.c @@ -0,0 +1,527 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + * + * Copyright (C) 2009 Jo-Philipp Wich + */ + +#include "watchdog.h" + +/* Global watchdog fd, required by signal handler */ +int wdfd = -1; + +/* Handle finished childs */ +static void sigchld_handler(int sig) +{ + pid_t pid; + + while( (pid = waitpid(-1, NULL, WNOHANG)) > 0 ) + syslog(LOG_INFO, "Child returned (pid %d)", pid); +} + +/* Watchdog shutdown helper */ +static void shutdown_watchdog(int sig) +{ + static const char wshutdown = WATCH_SHUTDOWN; + + if( wdfd > -1 ) + { + syslog(LOG_INFO, "Stopping watchdog timer"); + write(wdfd, &wshutdown, 1); + close(wdfd); + wdfd = -1; + } + + exit(0); +} + +/* Get BSSID of given interface */ +static int iw_get_bssid(int iwfd, const char *ifname, char *bssid) +{ + struct iwreq iwrq; + + if( iw_ioctl(iwfd, ifname, SIOCGIWAP, &iwrq) >= 0 ) + { + unsigned char *addr = (unsigned char *)iwrq.u.ap_addr.sa_data; + + sprintf(bssid, "%02X:%02X:%02X:%02X:%02X:%02X", + addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); + + return 0; + } + + return -1; +} + +/* Get channel of given interface */ +static int iw_get_channel(int iwfd, const char *ifname, int *channel) +{ + int i; + char buffer[sizeof(struct iw_range)]; + double cur_freq, cmp_freq; + struct iwreq iwrq; + struct iw_range *range; + + memset(buffer, 0, sizeof(buffer)); + + iwrq.u.data.pointer = (char *)buffer; + iwrq.u.data.length = sizeof(buffer); + iwrq.u.data.flags = 0; + + if( iw_ioctl(iwfd, ifname, SIOCGIWRANGE, &iwrq) < 0) + { + *channel = -1; + return -1; + } + + range = (struct iw_range *)buffer; + + if( iw_ioctl(iwfd, ifname, SIOCGIWFREQ, &iwrq) >= 0 ) + { + cur_freq = ((double)iwrq.u.freq.m) * pow(10, iwrq.u.freq.e); + if( cur_freq < 1000.00 ) + { + *channel = (int)cur_freq; + return 0; + } + + for(i = 0; i < range->num_frequency; i++) + { + cmp_freq = ((double)range->freq[i].m) * pow(10, range->freq[i].e); + if( cmp_freq == cur_freq ) + { + *channel = (int)range->freq[i].i; + return 0; + } + } + } + + *channel = -1; + return -1; +} + +/* Get the (first) pid of given process name */ +static int find_process(const char *name) +{ + int pid = -1; + int file; + char buffer[128]; + char cmpname[128]; + DIR *dir; + struct dirent *entry; + + if( (dir = opendir("/proc")) != NULL ) + { + snprintf(cmpname, sizeof(cmpname), "Name:\t%s\n", name); + + while( (entry = readdir(dir)) != NULL ) + { + if( !strcmp(entry->d_name, "..") || !isdigit(*entry->d_name) ) + continue; + + sprintf(buffer, "/proc/%s/status", entry->d_name); + if( (file = open(buffer, O_RDONLY)) > -1 ) + { + read(file, buffer, sizeof(buffer)); + close(file); + + if( strstr(buffer, cmpname) == buffer ) + { + pid = atoi(entry->d_name); + + /* Skip myself ... */ + if( pid == getpid() ) + pid = -1; + else + break; + } + } + } + + closedir(dir); + return pid; + } + + syslog(LOG_CRIT, "Unable to open /proc: %s", + strerror(errno)); + + return -1; +} + +/* Get the 5 minute load average */ +static double find_loadavg(void) +{ + int fd; + char buffer[10]; + double load = 0.00; + + if( (fd = open("/proc/loadavg", O_RDONLY)) > -1 ) + { + if( read(fd, buffer, sizeof(buffer)) == sizeof(buffer) ) + load = atof(&buffer[5]); + + close(fd); + } + + return load; +} + +/* Check if given uci file was updated */ +static int check_uci_update(const char *config, time_t *mtime) +{ + struct stat s; + char path[128]; + + snprintf(path, sizeof(path), "/var/state/%s", config); + if( stat(path, &s) > -1 ) + { + if( (*mtime == 0) || (s.st_mtime > *mtime) ) + { + *mtime = s.st_mtime; + return 1; + } + } + + return 0; +} + +/* Add tuple */ +static void load_wifi_uci_add_iface(const char *section, struct uci_wifi_iface_itr_ctx *itr) +{ + wifi_tuple_t *t; + const char *ucitmp; + int val = 0; + + ucitmp = ucix_get_option(itr->ctx, "wireless", section, "mode"); + if( ucitmp && !strncmp(ucitmp, "adhoc", 5) ) + { + if( (t = (wifi_tuple_t *)malloc(sizeof(wifi_tuple_t))) != NULL ) + { + ucitmp = ucix_get_option(itr->ctx, "wireless", section, "ifname"); + if(ucitmp) + { + strncpy(t->ifname, ucitmp, sizeof(t->ifname)); + val++; + } + + ucitmp = ucix_get_option(itr->ctx, "wireless", section, "bssid"); + if(ucitmp) + { + strncpy(t->bssid, ucitmp, sizeof(t->bssid)); + val++; + } + + ucitmp = ucix_get_option(itr->ctx, "wireless", section, "device"); + if(ucitmp) + { + ucitmp = ucix_get_option(itr->ctx, "wireless", ucitmp, "channel"); + if(ucitmp) + { + t->channel = atoi(ucitmp); + val++; + } + } + + if( val == 3 ) + { + syslog(LOG_INFO, "Monitoring %s: bssid=%s channel=%d", + t->ifname, t->bssid, t->channel); + + t->next = itr->list; + itr->list = t; + } + else + { + free(t); + } + } + } +} + +/* Load config */ +static wifi_tuple_t * load_wifi_uci(wifi_tuple_t *ifs, time_t *modtime) +{ + struct uci_context *ctx; + struct uci_wifi_iface_itr_ctx itr; + wifi_tuple_t *cur, *next; + + if( check_uci_update("wireless", modtime) ) + { + syslog(LOG_INFO, "Wireless config changed, reloading"); + + if( (ctx = ucix_init("wireless")) != NULL ) + { + if( ifs != NULL ) + { + for(cur = ifs; cur; cur = next) + { + next = cur->next; + free(cur); + } + } + + itr.list = NULL; + itr.ctx = ctx; + + ucix_for_each_section_type(ctx, "wireless", "wifi-iface", + (void *)load_wifi_uci_add_iface, &itr); + + return itr.list; + } + } + + return ifs; +} + +/* Add tuple */ +static void load_watchdog_uci_add_process(const char *section, struct uci_process_itr_ctx *itr) +{ + process_tuple_t *t; + const char *ucitmp; + int val = 0; + + if( (t = (process_tuple_t *)malloc(sizeof(process_tuple_t))) != NULL ) + { + t->restart = 0; + + ucitmp = ucix_get_option(itr->ctx, "freifunk-watchdog", section, "process"); + if(ucitmp) + { + strncpy(t->process, ucitmp, sizeof(t->process)); + val++; + } + + ucitmp = ucix_get_option(itr->ctx, "freifunk-watchdog", section, "initscript"); + if(ucitmp) + { + strncpy(t->initscript, ucitmp, sizeof(t->initscript)); + val++; + } + + if( val == 2 ) + { + syslog(LOG_INFO, "Monitoring %s: initscript=%s", + t->process, t->initscript); + + t->next = itr->list; + itr->list = t; + } + else + { + free(t); + } + } +} + +/* Load config */ +static process_tuple_t * load_watchdog_uci(process_tuple_t *procs) +{ + struct uci_context *ctx; + struct uci_process_itr_ctx itr; + process_tuple_t *cur, *next; + + syslog(LOG_INFO, "Loading watchdog config"); + + if( (ctx = ucix_init("freifunk-watchdog")) != NULL ) + { + if( procs != NULL ) + { + for(cur = procs; cur; cur = next) + { + next = cur->next; + free(cur); + } + } + + itr.list = NULL; + itr.ctx = ctx; + + ucix_for_each_section_type(ctx, "freifunk-watchdog", "process", + (void *)load_watchdog_uci_add_process, &itr); + + return itr.list; + } + + return procs; +} + +/* Daemon implementation */ +static int do_daemon(void) +{ + static int wdtrigger = 1; + static int wdtimeout = BASE_INTERVAL * 2; + static const char wdkeepalive = WATCH_KEEPALIVE; + + int iwfd; + int channel; + char bssid[18]; + struct sigaction sa; + + wifi_tuple_t *ifs = NULL, *curr_if; + process_tuple_t *procs = NULL, *curr_proc; + time_t wireless_modtime = 0; + + int action_intv = 0; + int restart_wifi = 0; + int loadavg_panic = 0; + + openlog(SYSLOG_IDENT, 0, LOG_DAEMON); + memset(&sa, 0, sizeof(sa)); + + if( (iwfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1 ) + { + syslog(LOG_ERR, "Can not open wireless control socket: %s", + strerror(errno)); + + return 1; + } + + if( (wdfd = open(WATCH_DEVICE, O_WRONLY)) > -1 ) + { + syslog(LOG_INFO, "Opened %s - polling every %i seconds", + WATCH_DEVICE, BASE_INTERVAL); + + /* Install signal handler to halt watchdog on shutdown */ + sa.sa_handler = shutdown_watchdog; + sa.sa_flags = SA_NOCLDWAIT | SA_RESTART; + sigaction(SIGHUP, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + sigaction(SIGPIPE, &sa, NULL); + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGUSR1, &sa, NULL); + sigaction(SIGUSR2, &sa, NULL); + + /* Set watchdog timeout to twice the interval */ + ioctl(wdfd, WDIOC_SETTIMEOUT, &wdtimeout); + } + + /* Install signal handler to reap childs */ + sa.sa_handler = sigchld_handler; + sa.sa_flags = 0; + sigaction(SIGCHLD, &sa, NULL); + + /* Load watchdog configuration only once */ + procs = load_watchdog_uci(procs); + + while( 1 ) + { + /* Check/increment action interval */ + if( ++action_intv >= ACTION_INTERVAL ) + { + /* Reset action interval */ + action_intv = 0; + + /* Check average load */ + if( find_loadavg() >= LOAD_TRESHOLD ) + loadavg_panic++; + else + loadavg_panic = 0; + + /* Check wireless interfaces */ + ifs = load_wifi_uci(ifs, &wireless_modtime); + for( curr_if = ifs; curr_if; curr_if = curr_if->next ) + { + /* Get current channel and bssid */ + if( (iw_get_bssid(iwfd, curr_if->ifname, bssid) == 0) && + (iw_get_channel(iwfd, curr_if->ifname, &channel) == 0) ) + { + /* Check BSSID */ + if( strcasecmp(bssid, curr_if->bssid) != 0 ) + { + syslog(LOG_WARNING, "BSSID mismatch on %s: current=%s wanted=%s", + curr_if->ifname, bssid, curr_if->bssid); + + restart_wifi++; + } + + /* Check channel */ + else if( channel != curr_if->channel ) + { + syslog(LOG_WARNING, "Channel mismatch on %s: current=%d wanted=%d", + curr_if->ifname, channel, curr_if->channel); + + restart_wifi++; + } + } + else + { + syslog(LOG_WARNING, "Requested interface %s not present", curr_if->ifname); + } + } + + /* Check processes */ + for( curr_proc = procs; curr_proc; curr_proc = curr_proc->next ) + { + if( find_process(curr_proc->process) < 0 ) + curr_proc->restart++; + else + curr_proc->restart = 0; + + /* Process restart required? */ + if( curr_proc->restart >= HYSTERESIS ) + { + curr_proc->restart = 0; + syslog(LOG_WARNING, "The %s process died, restarting", curr_proc->process); + EXEC(PROC_ACTION); + } + } + + + /* Wifi restart required? */ + if( restart_wifi >= HYSTERESIS ) + { + restart_wifi = 0; + syslog(LOG_WARNING, "Channel or BSSID mismatch on wireless interface, restarting"); + EXEC(WIFI_ACTION); + } + + /* Is there a load problem? */ + if( loadavg_panic >= HYSTERESIS ) + { + syslog(LOG_EMERG, "Critical system load level, triggering reset!"); + + /* Try watchdog, fall back to reboot */ + if( wdfd > -1 ) + ioctl(wdfd, WDIOC_SETTIMEOUT, &wdtrigger); + else + EXEC(LOAD_ACTION); + } + } + + + /* Reset watchdog timer */ + if( wdfd > -1 ) + write(wdfd, &wdkeepalive, 1); + + sleep(BASE_INTERVAL); + } + + shutdown_watchdog(0); + closelog(); + + return 0; +} + + +int main(int argc, char *argv[]) +{ + /* Check if watchdog is running ... */ + if( (argc > 1) && (strcmp(argv[1], "running") == 0) ) + { + return (find_process(BINARY) == -1); + } + + /* Start daemon */ + return do_daemon(); +} diff --git a/feeds/luci/contrib/package/freifunk-watchdog/src/watchdog.h b/feeds/luci/contrib/package/freifunk-watchdog/src/watchdog.h new file mode 100644 index 0000000..6f2382d --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-watchdog/src/watchdog.h @@ -0,0 +1,142 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + * + * Copyright (C) 2009 Jo-Philipp Wich + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ucix.h" +#include "wireless.22.h" + + +/* Watchdog poll interval */ +#define BASE_INTERVAL 5 + +/* Action interval (N * BASE_INTERVAL) */ +#define ACTION_INTERVAL 6 + +/* Hysteresis */ +#define HYSTERESIS 3 + +/* How to call myself in the logs */ +#define SYSLOG_IDENT "Freifunk Watchdog" + +/* Process error action */ +#define PROC_ACTION curr_proc->initscript, curr_proc->initscript, "restart" + +/* Wifi error action */ +#define WIFI_ACTION "/sbin/wifi", "/sbin/wifi" + +/* Watchdog device */ +#define WATCH_DEVICE "/dev/watchdog" +#define WATCH_SHUTDOWN 'V' +#define WATCH_KEEPALIVE '\0' + +/* System load error action and treshold */ +#define LOAD_TRESHOLD 15.00 +#define LOAD_ACTION "/sbin/reboot", "/sbin/reboot" + +/* Fallback binary name (passed by makefile) */ +#ifndef BINARY +#define BINARY "ffwatchd" +#endif + + +/* ifname/bssid/channel tuples */ +struct wifi_tuple { + char ifname[16]; + char bssid[18]; + int channel; + struct wifi_tuple *next; +}; + +/* structure to hold tuple-list and uci context during iteration */ +struct uci_wifi_iface_itr_ctx { + struct wifi_tuple *list; + struct uci_context *ctx; +}; + +typedef struct wifi_tuple wifi_tuple_t; + + +/* process name/exec tuples */ +struct process_tuple { + char process[PATH_MAX + 1]; + char initscript[PATH_MAX + 1]; + int restart; + struct process_tuple *next; +}; + +/* structure to hold tuple-list and uci context during iteration */ +struct uci_process_itr_ctx { + struct process_tuple *list; + struct uci_context *ctx; +}; + +typedef struct process_tuple process_tuple_t; + + +/* ioctl() helper (stolen from iwlib) */ +static inline int +iw_ioctl(int skfd, /* Socket to the kernel */ + const char * ifname, /* Device name */ + int request, /* WE ID */ + struct iwreq * pwrq) /* Fixed part of the request */ +{ + /* Set device name */ + strncpy(pwrq->ifr_ifrn.ifrn_name, ifname, 16); + + /* Do the request */ + return(ioctl(skfd, request, pwrq)); +} + +/* fork() & execl() helper */ +#define EXEC(x) \ + do { \ + switch(fork()) \ + { \ + case -1: \ + syslog(LOG_CRIT, "Unable to fork child: %s", \ + strerror(errno)); \ + break; \ + \ + case 0: \ + execl(x, NULL); \ + syslog(LOG_CRIT, "Unable to execute action: %s", \ + strerror(errno)); \ + return 1; \ + } \ + } while(0) + diff --git a/feeds/luci/contrib/package/freifunk-watchdog/src/wireless.22.h b/feeds/luci/contrib/package/freifunk-watchdog/src/wireless.22.h new file mode 100644 index 0000000..1d19243 --- /dev/null +++ b/feeds/luci/contrib/package/freifunk-watchdog/src/wireless.22.h @@ -0,0 +1,1139 @@ +/* + * This file define a set of standard wireless extensions + * + * Version : 22 16.3.07 + * + * Authors : Jean Tourrilhes - HPL - + * Copyright (c) 1997-2007 Jean Tourrilhes, All Rights Reserved. + */ + +#ifndef _LINUX_WIRELESS_H +#define _LINUX_WIRELESS_H + +/************************** DOCUMENTATION **************************/ +/* + * Initial APIs (1996 -> onward) : + * ----------------------------- + * Basically, the wireless extensions are for now a set of standard ioctl + * call + /proc/net/wireless + * + * The entry /proc/net/wireless give statistics and information on the + * driver. + * This is better than having each driver having its entry because + * its centralised and we may remove the driver module safely. + * + * Ioctl are used to configure the driver and issue commands. This is + * better than command line options of insmod because we may want to + * change dynamically (while the driver is running) some parameters. + * + * The ioctl mechanimsm are copied from standard devices ioctl. + * We have the list of command plus a structure descibing the + * data exchanged... + * Note that to add these ioctl, I was obliged to modify : + * # net/core/dev.c (two place + add include) + * # net/ipv4/af_inet.c (one place + add include) + * + * /proc/net/wireless is a copy of /proc/net/dev. + * We have a structure for data passed from the driver to /proc/net/wireless + * Too add this, I've modified : + * # net/core/dev.c (two other places) + * # include/linux/netdevice.h (one place) + * # include/linux/proc_fs.h (one place) + * + * New driver API (2002 -> onward) : + * ------------------------------- + * This file is only concerned with the user space API and common definitions. + * The new driver API is defined and documented in : + * # include/net/iw_handler.h + * + * Note as well that /proc/net/wireless implementation has now moved in : + * # net/core/wireless.c + * + * Wireless Events (2002 -> onward) : + * -------------------------------- + * Events are defined at the end of this file, and implemented in : + * # net/core/wireless.c + * + * Other comments : + * -------------- + * Do not add here things that are redundant with other mechanisms + * (drivers init, ifconfig, /proc/net/dev, ...) and with are not + * wireless specific. + * + * These wireless extensions are not magic : each driver has to provide + * support for them... + * + * IMPORTANT NOTE : As everything in the kernel, this is very much a + * work in progress. Contact me if you have ideas of improvements... + */ + +/***************************** INCLUDES *****************************/ + +/* This header is used in user-space, therefore need to be sanitised + * for that purpose. Those includes are usually not compatible with glibc. + * To know which includes to use in user-space, check iwlib.h. */ +#ifdef __KERNEL__ +#include /* for "caddr_t" et al */ +#include /* for "struct sockaddr" et al */ +#include /* for IFNAMSIZ and co... */ +#endif /* __KERNEL__ */ + +/***************************** VERSION *****************************/ +/* + * This constant is used to know the availability of the wireless + * extensions and to know which version of wireless extensions it is + * (there is some stuff that will be added in the future...) + * I just plan to increment with each new version. + */ +#define WIRELESS_EXT 22 + +/* + * Changes : + * + * V2 to V3 + * -------- + * Alan Cox start some incompatibles changes. I've integrated a bit more. + * - Encryption renamed to Encode to avoid US regulation problems + * - Frequency changed from float to struct to avoid problems on old 386 + * + * V3 to V4 + * -------- + * - Add sensitivity + * + * V4 to V5 + * -------- + * - Missing encoding definitions in range + * - Access points stuff + * + * V5 to V6 + * -------- + * - 802.11 support (ESSID ioctls) + * + * V6 to V7 + * -------- + * - define IW_ESSID_MAX_SIZE and IW_MAX_AP + * + * V7 to V8 + * -------- + * - Changed my e-mail address + * - More 802.11 support (nickname, rate, rts, frag) + * - List index in frequencies + * + * V8 to V9 + * -------- + * - Support for 'mode of operation' (ad-hoc, managed...) + * - Support for unicast and multicast power saving + * - Change encoding to support larger tokens (>64 bits) + * - Updated iw_params (disable, flags) and use it for NWID + * - Extracted iw_point from iwreq for clarity + * + * V9 to V10 + * --------- + * - Add PM capability to range structure + * - Add PM modifier : MAX/MIN/RELATIVE + * - Add encoding option : IW_ENCODE_NOKEY + * - Add TxPower ioctls (work like TxRate) + * + * V10 to V11 + * ---------- + * - Add WE version in range (help backward/forward compatibility) + * - Add retry ioctls (work like PM) + * + * V11 to V12 + * ---------- + * - Add SIOCSIWSTATS to get /proc/net/wireless programatically + * - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space + * - Add new statistics (frag, retry, beacon) + * - Add average quality (for user space calibration) + * + * V12 to V13 + * ---------- + * - Document creation of new driver API. + * - Extract union iwreq_data from struct iwreq (for new driver API). + * - Rename SIOCSIWNAME as SIOCSIWCOMMIT + * + * V13 to V14 + * ---------- + * - Wireless Events support : define struct iw_event + * - Define additional specific event numbers + * - Add "addr" and "param" fields in union iwreq_data + * - AP scanning stuff (SIOCSIWSCAN and friends) + * + * V14 to V15 + * ---------- + * - Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg + * - Make struct iw_freq signed (both m & e), add explicit padding + * - Add IWEVCUSTOM for driver specific event/scanning token + * - Add IW_MAX_GET_SPY for driver returning a lot of addresses + * - Add IW_TXPOW_RANGE for range of Tx Powers + * - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points + * - Add IW_MODE_MONITOR for passive monitor + * + * V15 to V16 + * ---------- + * - Increase the number of bitrates in iw_range to 32 (for 802.11g) + * - Increase the number of frequencies in iw_range to 32 (for 802.11b+a) + * - Reshuffle struct iw_range for increases, add filler + * - Increase IW_MAX_AP to 64 for driver returning a lot of addresses + * - Remove IW_MAX_GET_SPY because conflict with enhanced spy support + * - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy" + * - Add IW_ENCODE_TEMP and iw_range->encoding_login_index + * + * V16 to V17 + * ---------- + * - Add flags to frequency -> auto/fixed + * - Document (struct iw_quality *)->updated, add new flags (INVALID) + * - Wireless Event capability in struct iw_range + * - Add support for relative TxPower (yick !) + * + * V17 to V18 (From Jouni Malinen ) + * ---------- + * - Add support for WPA/WPA2 + * - Add extended encoding configuration (SIOCSIWENCODEEXT and + * SIOCGIWENCODEEXT) + * - Add SIOCSIWGENIE/SIOCGIWGENIE + * - Add SIOCSIWMLME + * - Add SIOCSIWPMKSA + * - Add struct iw_range bit field for supported encoding capabilities + * - Add optional scan request parameters for SIOCSIWSCAN + * - Add SIOCSIWAUTH/SIOCGIWAUTH for setting authentication and WPA + * related parameters (extensible up to 4096 parameter values) + * - Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE, + * IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND + * + * V18 to V19 + * ---------- + * - Remove (struct iw_point *)->pointer from events and streams + * - Remove header includes to help user space + * - Increase IW_ENCODING_TOKEN_MAX from 32 to 64 + * - Add IW_QUAL_ALL_UPDATED and IW_QUAL_ALL_INVALID macros + * - Add explicit flag to tell stats are in dBm : IW_QUAL_DBM + * - Add IW_IOCTL_IDX() and IW_EVENT_IDX() macros + * + * V19 to V20 + * ---------- + * - RtNetlink requests support (SET/GET) + * + * V20 to V21 + * ---------- + * - Remove (struct net_device *)->get_wireless_stats() + * - Change length in ESSID and NICK to strlen() instead of strlen()+1 + * - Add IW_RETRY_SHORT/IW_RETRY_LONG retry modifiers + * - Power/Retry relative values no longer * 100000 + * - Add explicit flag to tell stats are in 802.11k RCPI : IW_QUAL_RCPI + * + * V21 to V22 + * ---------- + * - Prevent leaking of kernel space in stream on 64 bits. + */ + +/**************************** CONSTANTS ****************************/ + +/* -------------------------- IOCTL LIST -------------------------- */ + +/* Wireless Identification */ +#define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */ +#define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */ +/* SIOCGIWNAME is used to verify the presence of Wireless Extensions. + * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"... + * Don't put the name of your driver there, it's useless. */ + +/* Basic operations */ +#define SIOCSIWNWID 0x8B02 /* set network id (pre-802.11) */ +#define SIOCGIWNWID 0x8B03 /* get network id (the cell) */ +#define SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */ +#define SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */ +#define SIOCSIWMODE 0x8B06 /* set operation mode */ +#define SIOCGIWMODE 0x8B07 /* get operation mode */ +#define SIOCSIWSENS 0x8B08 /* set sensitivity (dBm) */ +#define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */ + +/* Informative stuff */ +#define SIOCSIWRANGE 0x8B0A /* Unused */ +#define SIOCGIWRANGE 0x8B0B /* Get range of parameters */ +#define SIOCSIWPRIV 0x8B0C /* Unused */ +#define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */ +#define SIOCSIWSTATS 0x8B0E /* Unused */ +#define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */ +/* SIOCGIWSTATS is strictly used between user space and the kernel, and + * is never passed to the driver (i.e. the driver will never see it). */ + +/* Spy support (statistics per MAC address - used for Mobile IP support) */ +#define SIOCSIWSPY 0x8B10 /* set spy addresses */ +#define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */ +#define SIOCSIWTHRSPY 0x8B12 /* set spy threshold (spy event) */ +#define SIOCGIWTHRSPY 0x8B13 /* get spy threshold */ + +/* Access Point manipulation */ +#define SIOCSIWAP 0x8B14 /* set access point MAC addresses */ +#define SIOCGIWAP 0x8B15 /* get access point MAC addresses */ +#define SIOCGIWAPLIST 0x8B17 /* Deprecated in favor of scanning */ +#define SIOCSIWSCAN 0x8B18 /* trigger scanning (list cells) */ +#define SIOCGIWSCAN 0x8B19 /* get scanning results */ + +/* 802.11 specific support */ +#define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */ +#define SIOCGIWESSID 0x8B1B /* get ESSID */ +#define SIOCSIWNICKN 0x8B1C /* set node name/nickname */ +#define SIOCGIWNICKN 0x8B1D /* get node name/nickname */ +/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit + * within the 'iwreq' structure, so we need to use the 'data' member to + * point to a string in user space, like it is done for RANGE... */ + +/* Other parameters useful in 802.11 and some other devices */ +#define SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */ +#define SIOCGIWRATE 0x8B21 /* get default bit rate (bps) */ +#define SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */ +#define SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */ +#define SIOCSIWFRAG 0x8B24 /* set fragmentation thr (bytes) */ +#define SIOCGIWFRAG 0x8B25 /* get fragmentation thr (bytes) */ +#define SIOCSIWTXPOW 0x8B26 /* set transmit power (dBm) */ +#define SIOCGIWTXPOW 0x8B27 /* get transmit power (dBm) */ +#define SIOCSIWRETRY 0x8B28 /* set retry limits and lifetime */ +#define SIOCGIWRETRY 0x8B29 /* get retry limits and lifetime */ + +/* Encoding stuff (scrambling, hardware security, WEP...) */ +#define SIOCSIWENCODE 0x8B2A /* set encoding token & mode */ +#define SIOCGIWENCODE 0x8B2B /* get encoding token & mode */ +/* Power saving stuff (power management, unicast and multicast) */ +#define SIOCSIWPOWER 0x8B2C /* set Power Management settings */ +#define SIOCGIWPOWER 0x8B2D /* get Power Management settings */ +/* Modulation bitmask */ +#define SIOCSIWMODUL 0x8B2E /* set Modulations settings */ +#define SIOCGIWMODUL 0x8B2F /* get Modulations settings */ + +/* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM). + * This ioctl uses struct iw_point and data buffer that includes IE id and len + * fields. More than one IE may be included in the request. Setting the generic + * IE to empty buffer (len=0) removes the generic IE from the driver. Drivers + * are allowed to generate their own WPA/RSN IEs, but in these cases, drivers + * are required to report the used IE as a wireless event, e.g., when + * associating with an AP. */ +#define SIOCSIWGENIE 0x8B30 /* set generic IE */ +#define SIOCGIWGENIE 0x8B31 /* get generic IE */ + +/* WPA : IEEE 802.11 MLME requests */ +#define SIOCSIWMLME 0x8B16 /* request MLME operation; uses + * struct iw_mlme */ +/* WPA : Authentication mode parameters */ +#define SIOCSIWAUTH 0x8B32 /* set authentication mode params */ +#define SIOCGIWAUTH 0x8B33 /* get authentication mode params */ + +/* WPA : Extended version of encoding configuration */ +#define SIOCSIWENCODEEXT 0x8B34 /* set encoding token & mode */ +#define SIOCGIWENCODEEXT 0x8B35 /* get encoding token & mode */ + +/* WPA2 : PMKSA cache management */ +#define SIOCSIWPMKSA 0x8B36 /* PMKSA cache operation */ + +/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */ + +/* These 32 ioctl are wireless device private, for 16 commands. + * Each driver is free to use them for whatever purpose it chooses, + * however the driver *must* export the description of those ioctls + * with SIOCGIWPRIV and *must* use arguments as defined below. + * If you don't follow those rules, DaveM is going to hate you (reason : + * it make mixed 32/64bit operation impossible). + */ +#define SIOCIWFIRSTPRIV 0x8BE0 +#define SIOCIWLASTPRIV 0x8BFF +/* Previously, we were using SIOCDEVPRIVATE, but we now have our + * separate range because of collisions with other tools such as + * 'mii-tool'. + * We now have 32 commands, so a bit more space ;-). + * Also, all 'even' commands are only usable by root and don't return the + * content of ifr/iwr to user (but you are not obliged to use the set/get + * convention, just use every other two command). More details in iwpriv.c. + * And I repeat : you are not forced to use them with iwpriv, but you + * must be compliant with it. + */ + +/* ------------------------- IOCTL STUFF ------------------------- */ + +/* The first and the last (range) */ +#define SIOCIWFIRST 0x8B00 +#define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */ +#define IW_IOCTL_IDX(cmd) ((cmd) - SIOCIWFIRST) + +/* Odd : get (world access), even : set (root access) */ +#define IW_IS_SET(cmd) (!((cmd) & 0x1)) +#define IW_IS_GET(cmd) ((cmd) & 0x1) + +/* ----------------------- WIRELESS EVENTS ----------------------- */ +/* Those are *NOT* ioctls, do not issue request on them !!! */ +/* Most events use the same identifier as ioctl requests */ + +#define IWEVTXDROP 0x8C00 /* Packet dropped to excessive retry */ +#define IWEVQUAL 0x8C01 /* Quality part of statistics (scan) */ +#define IWEVCUSTOM 0x8C02 /* Driver specific ascii string */ +#define IWEVREGISTERED 0x8C03 /* Discovered a new node (AP mode) */ +#define IWEVEXPIRED 0x8C04 /* Expired a node (AP mode) */ +#define IWEVGENIE 0x8C05 /* Generic IE (WPA, RSN, WMM, ..) + * (scan results); This includes id and + * length fields. One IWEVGENIE may + * contain more than one IE. Scan + * results may contain one or more + * IWEVGENIE events. */ +#define IWEVMICHAELMICFAILURE 0x8C06 /* Michael MIC failure + * (struct iw_michaelmicfailure) + */ +#define IWEVASSOCREQIE 0x8C07 /* IEs used in (Re)Association Request. + * The data includes id and length + * fields and may contain more than one + * IE. This event is required in + * Managed mode if the driver + * generates its own WPA/RSN IE. This + * should be sent just before + * IWEVREGISTERED event for the + * association. */ +#define IWEVASSOCRESPIE 0x8C08 /* IEs used in (Re)Association + * Response. The data includes id and + * length fields and may contain more + * than one IE. This may be sent + * between IWEVASSOCREQIE and + * IWEVREGISTERED events for the + * association. */ +#define IWEVPMKIDCAND 0x8C09 /* PMKID candidate for RSN + * pre-authentication + * (struct iw_pmkid_cand) */ + +#define IWEVFIRST 0x8C00 +#define IW_EVENT_IDX(cmd) ((cmd) - IWEVFIRST) + +/* ------------------------- PRIVATE INFO ------------------------- */ +/* + * The following is used with SIOCGIWPRIV. It allow a driver to define + * the interface (name, type of data) for its private ioctl. + * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV + */ + +#define IW_PRIV_TYPE_MASK 0x7000 /* Type of arguments */ +#define IW_PRIV_TYPE_NONE 0x0000 +#define IW_PRIV_TYPE_BYTE 0x1000 /* Char as number */ +#define IW_PRIV_TYPE_CHAR 0x2000 /* Char as character */ +#define IW_PRIV_TYPE_INT 0x4000 /* 32 bits int */ +#define IW_PRIV_TYPE_FLOAT 0x5000 /* struct iw_freq */ +#define IW_PRIV_TYPE_ADDR 0x6000 /* struct sockaddr */ + +#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed number of args */ + +#define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */ + +/* + * Note : if the number of args is fixed and the size < 16 octets, + * instead of passing a pointer we will put args in the iwreq struct... + */ + +/* ----------------------- OTHER CONSTANTS ----------------------- */ + +/* Maximum frequencies in the range struct */ +#define IW_MAX_FREQUENCIES 32 +/* Note : if you have something like 80 frequencies, + * don't increase this constant and don't fill the frequency list. + * The user will be able to set by channel anyway... */ + +/* Maximum bit rates in the range struct */ +#define IW_MAX_BITRATES 32 + +/* Maximum tx powers in the range struct */ +#define IW_MAX_TXPOWER 8 +/* Note : if you more than 8 TXPowers, just set the max and min or + * a few of them in the struct iw_range. */ + +/* Maximum of address that you may set with SPY */ +#define IW_MAX_SPY 8 + +/* Maximum of address that you may get in the + list of access points in range */ +#define IW_MAX_AP 64 + +/* Maximum size of the ESSID and NICKN strings */ +#define IW_ESSID_MAX_SIZE 32 + +/* Modes of operation */ +#define IW_MODE_AUTO 0 /* Let the driver decides */ +#define IW_MODE_ADHOC 1 /* Single cell network */ +#define IW_MODE_INFRA 2 /* Multi cell network, roaming, ... */ +#define IW_MODE_MASTER 3 /* Synchronisation master or Access Point */ +#define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */ +#define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */ +#define IW_MODE_MONITOR 6 /* Passive monitor (listen only) */ + +/* Statistics flags (bitmask in updated) */ +#define IW_QUAL_QUAL_UPDATED 0x01 /* Value was updated since last read */ +#define IW_QUAL_LEVEL_UPDATED 0x02 +#define IW_QUAL_NOISE_UPDATED 0x04 +#define IW_QUAL_ALL_UPDATED 0x07 +#define IW_QUAL_DBM 0x08 /* Level + Noise are dBm */ +#define IW_QUAL_QUAL_INVALID 0x10 /* Driver doesn't provide value */ +#define IW_QUAL_LEVEL_INVALID 0x20 +#define IW_QUAL_NOISE_INVALID 0x40 +#define IW_QUAL_RCPI 0x80 /* Level + Noise are 802.11k RCPI */ +#define IW_QUAL_ALL_INVALID 0x70 + +/* Frequency flags */ +#define IW_FREQ_AUTO 0x00 /* Let the driver decides */ +#define IW_FREQ_FIXED 0x01 /* Force a specific value */ + +/* Maximum number of size of encoding token available + * they are listed in the range structure */ +#define IW_MAX_ENCODING_SIZES 8 + +/* Maximum size of the encoding token in bytes */ +#define IW_ENCODING_TOKEN_MAX 64 /* 512 bits (for now) */ + +/* Flags for encoding (along with the token) */ +#define IW_ENCODE_INDEX 0x00FF /* Token index (if needed) */ +#define IW_ENCODE_FLAGS 0xFF00 /* Flags defined below */ +#define IW_ENCODE_MODE 0xF000 /* Modes defined below */ +#define IW_ENCODE_DISABLED 0x8000 /* Encoding disabled */ +#define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */ +#define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */ +#define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */ +#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */ +#define IW_ENCODE_TEMP 0x0400 /* Temporary key */ + +/* Power management flags available (along with the value, if any) */ +#define IW_POWER_ON 0x0000 /* No details... */ +#define IW_POWER_TYPE 0xF000 /* Type of parameter */ +#define IW_POWER_PERIOD 0x1000 /* Value is a period/duration of */ +#define IW_POWER_TIMEOUT 0x2000 /* Value is a timeout (to go asleep) */ +#define IW_POWER_SAVING 0x4000 /* Value is relative (how aggressive)*/ +#define IW_POWER_MODE 0x0F00 /* Power Management mode */ +#define IW_POWER_UNICAST_R 0x0100 /* Receive only unicast messages */ +#define IW_POWER_MULTICAST_R 0x0200 /* Receive only multicast messages */ +#define IW_POWER_ALL_R 0x0300 /* Receive all messages though PM */ +#define IW_POWER_FORCE_S 0x0400 /* Force PM procedure for sending unicast */ +#define IW_POWER_REPEATER 0x0800 /* Repeat broadcast messages in PM period */ +#define IW_POWER_MODIFIER 0x000F /* Modify a parameter */ +#define IW_POWER_MIN 0x0001 /* Value is a minimum */ +#define IW_POWER_MAX 0x0002 /* Value is a maximum */ +#define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */ + +/* Transmit Power flags available */ +#define IW_TXPOW_TYPE 0x00FF /* Type of value */ +#define IW_TXPOW_DBM 0x0000 /* Value is in dBm */ +#define IW_TXPOW_MWATT 0x0001 /* Value is in mW */ +#define IW_TXPOW_RELATIVE 0x0002 /* Value is in arbitrary units */ +#define IW_TXPOW_RANGE 0x1000 /* Range of value between min/max */ + +/* Retry limits and lifetime flags available */ +#define IW_RETRY_ON 0x0000 /* No details... */ +#define IW_RETRY_TYPE 0xF000 /* Type of parameter */ +#define IW_RETRY_LIMIT 0x1000 /* Maximum number of retries*/ +#define IW_RETRY_LIFETIME 0x2000 /* Maximum duration of retries in us */ +#define IW_RETRY_MODIFIER 0x00FF /* Modify a parameter */ +#define IW_RETRY_MIN 0x0001 /* Value is a minimum */ +#define IW_RETRY_MAX 0x0002 /* Value is a maximum */ +#define IW_RETRY_RELATIVE 0x0004 /* Value is not in seconds/ms/us */ +#define IW_RETRY_SHORT 0x0010 /* Value is for short packets */ +#define IW_RETRY_LONG 0x0020 /* Value is for long packets */ + +/* Scanning request flags */ +#define IW_SCAN_DEFAULT 0x0000 /* Default scan of the driver */ +#define IW_SCAN_ALL_ESSID 0x0001 /* Scan all ESSIDs */ +#define IW_SCAN_THIS_ESSID 0x0002 /* Scan only this ESSID */ +#define IW_SCAN_ALL_FREQ 0x0004 /* Scan all Frequencies */ +#define IW_SCAN_THIS_FREQ 0x0008 /* Scan only this Frequency */ +#define IW_SCAN_ALL_MODE 0x0010 /* Scan all Modes */ +#define IW_SCAN_THIS_MODE 0x0020 /* Scan only this Mode */ +#define IW_SCAN_ALL_RATE 0x0040 /* Scan all Bit-Rates */ +#define IW_SCAN_THIS_RATE 0x0080 /* Scan only this Bit-Rate */ +/* struct iw_scan_req scan_type */ +#define IW_SCAN_TYPE_ACTIVE 0 +#define IW_SCAN_TYPE_PASSIVE 1 +/* Maximum size of returned data */ +#define IW_SCAN_MAX_DATA 4096 /* In bytes */ + +/* Max number of char in custom event - use multiple of them if needed */ +#define IW_CUSTOM_MAX 256 /* In bytes */ + +/* Generic information element */ +#define IW_GENERIC_IE_MAX 1024 + +/* MLME requests (SIOCSIWMLME / struct iw_mlme) */ +#define IW_MLME_DEAUTH 0 +#define IW_MLME_DISASSOC 1 +#define IW_MLME_AUTH 2 +#define IW_MLME_ASSOC 3 + +/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */ +#define IW_AUTH_INDEX 0x0FFF +#define IW_AUTH_FLAGS 0xF000 +/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095) + * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the + * parameter that is being set/get to; value will be read/written to + * struct iw_param value field) */ +#define IW_AUTH_WPA_VERSION 0 +#define IW_AUTH_CIPHER_PAIRWISE 1 +#define IW_AUTH_CIPHER_GROUP 2 +#define IW_AUTH_KEY_MGMT 3 +#define IW_AUTH_TKIP_COUNTERMEASURES 4 +#define IW_AUTH_DROP_UNENCRYPTED 5 +#define IW_AUTH_80211_AUTH_ALG 6 +#define IW_AUTH_WPA_ENABLED 7 +#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8 +#define IW_AUTH_ROAMING_CONTROL 9 +#define IW_AUTH_PRIVACY_INVOKED 10 + +/* IW_AUTH_WPA_VERSION values (bit field) */ +#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001 +#define IW_AUTH_WPA_VERSION_WPA 0x00000002 +#define IW_AUTH_WPA_VERSION_WPA2 0x00000004 + +/* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */ +#define IW_AUTH_CIPHER_NONE 0x00000001 +#define IW_AUTH_CIPHER_WEP40 0x00000002 +#define IW_AUTH_CIPHER_TKIP 0x00000004 +#define IW_AUTH_CIPHER_CCMP 0x00000008 +#define IW_AUTH_CIPHER_WEP104 0x00000010 + +/* IW_AUTH_KEY_MGMT values (bit field) */ +#define IW_AUTH_KEY_MGMT_802_1X 1 +#define IW_AUTH_KEY_MGMT_PSK 2 + +/* IW_AUTH_80211_AUTH_ALG values (bit field) */ +#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001 +#define IW_AUTH_ALG_SHARED_KEY 0x00000002 +#define IW_AUTH_ALG_LEAP 0x00000004 + +/* IW_AUTH_ROAMING_CONTROL values */ +#define IW_AUTH_ROAMING_ENABLE 0 /* driver/firmware based roaming */ +#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming + * control */ + +/* SIOCSIWENCODEEXT definitions */ +#define IW_ENCODE_SEQ_MAX_SIZE 8 +/* struct iw_encode_ext ->alg */ +#define IW_ENCODE_ALG_NONE 0 +#define IW_ENCODE_ALG_WEP 1 +#define IW_ENCODE_ALG_TKIP 2 +#define IW_ENCODE_ALG_CCMP 3 +/* struct iw_encode_ext ->ext_flags */ +#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001 +#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002 +#define IW_ENCODE_EXT_GROUP_KEY 0x00000004 +#define IW_ENCODE_EXT_SET_TX_KEY 0x00000008 + +/* IWEVMICHAELMICFAILURE : struct iw_michaelmicfailure ->flags */ +#define IW_MICFAILURE_KEY_ID 0x00000003 /* Key ID 0..3 */ +#define IW_MICFAILURE_GROUP 0x00000004 +#define IW_MICFAILURE_PAIRWISE 0x00000008 +#define IW_MICFAILURE_STAKEY 0x00000010 +#define IW_MICFAILURE_COUNT 0x00000060 /* 1 or 2 (0 = count not supported) + */ + +/* Bit field values for enc_capa in struct iw_range */ +#define IW_ENC_CAPA_WPA 0x00000001 +#define IW_ENC_CAPA_WPA2 0x00000002 +#define IW_ENC_CAPA_CIPHER_TKIP 0x00000004 +#define IW_ENC_CAPA_CIPHER_CCMP 0x00000008 + +/* Event capability macros - in (struct iw_range *)->event_capa + * Because we have more than 32 possible events, we use an array of + * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */ +#define IW_EVENT_CAPA_BASE(cmd) ((cmd >= SIOCIWFIRSTPRIV) ? \ + (cmd - SIOCIWFIRSTPRIV + 0x60) : \ + (cmd - SIOCSIWCOMMIT)) +#define IW_EVENT_CAPA_INDEX(cmd) (IW_EVENT_CAPA_BASE(cmd) >> 5) +#define IW_EVENT_CAPA_MASK(cmd) (1 << (IW_EVENT_CAPA_BASE(cmd) & 0x1F)) +/* Event capability constants - event autogenerated by the kernel + * This list is valid for most 802.11 devices, customise as needed... */ +#define IW_EVENT_CAPA_K_0 (IW_EVENT_CAPA_MASK(0x8B04) | \ + IW_EVENT_CAPA_MASK(0x8B06) | \ + IW_EVENT_CAPA_MASK(0x8B1A)) +#define IW_EVENT_CAPA_K_1 (IW_EVENT_CAPA_MASK(0x8B2A)) +/* "Easy" macro to set events in iw_range (less efficient) */ +#define IW_EVENT_CAPA_SET(event_capa, cmd) (event_capa[IW_EVENT_CAPA_INDEX(cmd)] |= IW_EVENT_CAPA_MASK(cmd)) +#define IW_EVENT_CAPA_SET_KERNEL(event_capa) {event_capa[0] |= IW_EVENT_CAPA_K_0; event_capa[1] |= IW_EVENT_CAPA_K_1; } + +/* Modulations bitmasks */ +#define IW_MODUL_ALL 0x00000000 /* Everything supported */ +#define IW_MODUL_FH 0x00000001 /* Frequency Hopping */ +#define IW_MODUL_DS 0x00000002 /* Original Direct Sequence */ +#define IW_MODUL_CCK 0x00000004 /* 802.11b : 5.5 + 11 Mb/s */ +#define IW_MODUL_11B (IW_MODUL_DS | IW_MODUL_CCK) +#define IW_MODUL_PBCC 0x00000008 /* TI : 5.5 + 11 + 22 Mb/s */ +#define IW_MODUL_OFDM_A 0x00000010 /* 802.11a : 54 Mb/s */ +#define IW_MODUL_11A (IW_MODUL_OFDM_A) +#define IW_MODUL_11AB (IW_MODUL_11B | IW_MODUL_11A) +#define IW_MODUL_OFDM_G 0x00000020 /* 802.11g : 54 Mb/s */ +#define IW_MODUL_11G (IW_MODUL_11B | IW_MODUL_OFDM_G) +#define IW_MODUL_11AG (IW_MODUL_11G | IW_MODUL_11A) +#define IW_MODUL_TURBO 0x00000040 /* ATH : bonding, 108 Mb/s */ +/* In here we should define MIMO stuff. Later... */ +#define IW_MODUL_CUSTOM 0x40000000 /* Driver specific */ + +/* Bitrate flags available */ +#define IW_BITRATE_TYPE 0x00FF /* Type of value */ +#define IW_BITRATE_UNICAST 0x0001 /* Maximum/Fixed unicast bitrate */ +#define IW_BITRATE_BROADCAST 0x0002 /* Fixed broadcast bitrate */ + +/****************************** TYPES ******************************/ + +/* --------------------------- SUBTYPES --------------------------- */ +/* + * Generic format for most parameters that fit in an int + */ +struct iw_param +{ + int32_t value; /* The value of the parameter itself */ + uint8_t fixed; /* Hardware should not use auto select */ + uint8_t disabled; /* Disable the feature */ + uint16_t flags; /* Various specifc flags (if any) */ +}; + +/* + * For all data larger than 16 octets, we need to use a + * pointer to memory allocated in user space. + */ +struct iw_point +{ + void *pointer; /* Pointer to the data (in user space) */ + uint16_t length; /* number of fields or size in bytes */ + uint16_t flags; /* Optional params */ +}; + +/* + * A frequency + * For numbers lower than 10^9, we encode the number in 'm' and + * set 'e' to 0 + * For number greater than 10^9, we divide it by the lowest power + * of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')... + * The power of 10 is in 'e', the result of the division is in 'm'. + */ +struct iw_freq +{ + int32_t m; /* Mantissa */ + int16_t e; /* Exponent */ + uint8_t i; /* List index (when in range struct) */ + uint8_t flags; /* Flags (fixed/auto) */ +}; + +/* + * Quality of the link + */ +struct iw_quality +{ + uint8_t qual; /* link quality (%retries, SNR, + %missed beacons or better...) */ + uint8_t level; /* signal level (dBm) */ + uint8_t noise; /* noise level (dBm) */ + uint8_t updated; /* Flags to know if updated */ +}; + +/* + * Packet discarded in the wireless adapter due to + * "wireless" specific problems... + * Note : the list of counter and statistics in net_device_stats + * is already pretty exhaustive, and you should use that first. + * This is only additional stats... + */ +struct iw_discarded +{ + uint32_t nwid; /* Rx : Wrong nwid/essid */ + uint32_t code; /* Rx : Unable to code/decode (WEP) */ + uint32_t fragment; /* Rx : Can't perform MAC reassembly */ + uint32_t retries; /* Tx : Max MAC retries num reached */ + uint32_t misc; /* Others cases */ +}; + +/* + * Packet/Time period missed in the wireless adapter due to + * "wireless" specific problems... + */ +struct iw_missed +{ + uint32_t beacon; /* Missed beacons/superframe */ +}; + +/* + * Quality range (for spy threshold) + */ +struct iw_thrspy +{ + struct sockaddr addr; /* Source address (hw/mac) */ + struct iw_quality qual; /* Quality of the link */ + struct iw_quality low; /* Low threshold */ + struct iw_quality high; /* High threshold */ +}; + +/* + * Optional data for scan request + * + * Note: these optional parameters are controlling parameters for the + * scanning behavior, these do not apply to getting scan results + * (SIOCGIWSCAN). Drivers are expected to keep a local BSS table and + * provide a merged results with all BSSes even if the previous scan + * request limited scanning to a subset, e.g., by specifying an SSID. + * Especially, scan results are required to include an entry for the + * current BSS if the driver is in Managed mode and associated with an AP. + */ +struct iw_scan_req +{ + uint8_t scan_type; /* IW_SCAN_TYPE_{ACTIVE,PASSIVE} */ + uint8_t essid_len; + uint8_t num_channels; /* num entries in channel_list; + * 0 = scan all allowed channels */ + uint8_t flags; /* reserved as padding; use zero, this may + * be used in the future for adding flags + * to request different scan behavior */ + struct sockaddr bssid; /* ff:ff:ff:ff:ff:ff for broadcast BSSID or + * individual address of a specific BSS */ + + /* + * Use this ESSID if IW_SCAN_THIS_ESSID flag is used instead of using + * the current ESSID. This allows scan requests for specific ESSID + * without having to change the current ESSID and potentially breaking + * the current association. + */ + uint8_t essid[IW_ESSID_MAX_SIZE]; + + /* + * Optional parameters for changing the default scanning behavior. + * These are based on the MLME-SCAN.request from IEEE Std 802.11. + * TU is 1.024 ms. If these are set to 0, driver is expected to use + * reasonable default values. min_channel_time defines the time that + * will be used to wait for the first reply on each channel. If no + * replies are received, next channel will be scanned after this. If + * replies are received, total time waited on the channel is defined by + * max_channel_time. + */ + uint32_t min_channel_time; /* in TU */ + uint32_t max_channel_time; /* in TU */ + + struct iw_freq channel_list[IW_MAX_FREQUENCIES]; +}; + +/* ------------------------- WPA SUPPORT ------------------------- */ + +/* + * Extended data structure for get/set encoding (this is used with + * SIOCSIWENCODEEXT/SIOCGIWENCODEEXT. struct iw_point and IW_ENCODE_* + * flags are used in the same way as with SIOCSIWENCODE/SIOCGIWENCODE and + * only the data contents changes (key data -> this structure, including + * key data). + * + * If the new key is the first group key, it will be set as the default + * TX key. Otherwise, default TX key index is only changed if + * IW_ENCODE_EXT_SET_TX_KEY flag is set. + * + * Key will be changed with SIOCSIWENCODEEXT in all cases except for + * special "change TX key index" operation which is indicated by setting + * key_len = 0 and ext_flags |= IW_ENCODE_EXT_SET_TX_KEY. + * + * tx_seq/rx_seq are only used when respective + * IW_ENCODE_EXT_{TX,RX}_SEQ_VALID flag is set in ext_flags. Normal + * TKIP/CCMP operation is to set RX seq with SIOCSIWENCODEEXT and start + * TX seq from zero whenever key is changed. SIOCGIWENCODEEXT is normally + * used only by an Authenticator (AP or an IBSS station) to get the + * current TX sequence number. Using TX_SEQ_VALID for SIOCSIWENCODEEXT and + * RX_SEQ_VALID for SIOCGIWENCODEEXT are optional, but can be useful for + * debugging/testing. + */ +struct iw_encode_ext +{ + uint32_t ext_flags; /* IW_ENCODE_EXT_* */ + uint8_t tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ + uint8_t rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ + struct sockaddr addr; /* ff:ff:ff:ff:ff:ff for broadcast/multicast + * (group) keys or unicast address for + * individual keys */ + uint16_t alg; /* IW_ENCODE_ALG_* */ + uint16_t key_len; + uint8_t key[0]; +}; + +/* SIOCSIWMLME data */ +struct iw_mlme +{ + uint16_t cmd; /* IW_MLME_* */ + uint16_t reason_code; + struct sockaddr addr; +}; + +/* SIOCSIWPMKSA data */ +#define IW_PMKSA_ADD 1 +#define IW_PMKSA_REMOVE 2 +#define IW_PMKSA_FLUSH 3 + +#define IW_PMKID_LEN 16 + +struct iw_pmksa +{ + uint32_t cmd; /* IW_PMKSA_* */ + struct sockaddr bssid; + uint8_t pmkid[IW_PMKID_LEN]; +}; + +/* IWEVMICHAELMICFAILURE data */ +struct iw_michaelmicfailure +{ + uint32_t flags; + struct sockaddr src_addr; + uint8_t tsc[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ +}; + +/* IWEVPMKIDCAND data */ +#define IW_PMKID_CAND_PREAUTH 0x00000001 /* RNS pre-authentication enabled */ +struct iw_pmkid_cand +{ + uint32_t flags; /* IW_PMKID_CAND_* */ + uint32_t index; /* the smaller the index, the higher the + * priority */ + struct sockaddr bssid; +}; + +/* ------------------------ WIRELESS STATS ------------------------ */ +/* + * Wireless statistics (used for /proc/net/wireless) + */ +struct iw_statistics +{ + uint16_t status; /* Status + * - device dependent for now */ + + struct iw_quality qual; /* Quality of the link + * (instant/mean/max) */ + struct iw_discarded discard; /* Packet discarded counts */ + struct iw_missed miss; /* Packet missed counts */ +}; + +/* ------------------------ IOCTL REQUEST ------------------------ */ +/* + * This structure defines the payload of an ioctl, and is used + * below. + * + * Note that this structure should fit on the memory footprint + * of iwreq (which is the same as ifreq), which mean a max size of + * 16 octets = 128 bits. Warning, pointers might be 64 bits wide... + * You should check this when increasing the structures defined + * above in this file... + */ +union iwreq_data +{ + /* Config - generic */ + char name[16]; + /* Name : used to verify the presence of wireless extensions. + * Name of the protocol/provider... */ + + struct iw_point essid; /* Extended network name */ + struct iw_param nwid; /* network id (or domain - the cell) */ + struct iw_freq freq; /* frequency or channel : + * 0-1000 = channel + * > 1000 = frequency in Hz */ + + struct iw_param sens; /* signal level threshold */ + struct iw_param bitrate; /* default bit rate */ + struct iw_param txpower; /* default transmit power */ + struct iw_param rts; /* RTS threshold threshold */ + struct iw_param frag; /* Fragmentation threshold */ + uint32_t mode; /* Operation mode */ + struct iw_param retry; /* Retry limits & lifetime */ + + struct iw_point encoding; /* Encoding stuff : tokens */ + struct iw_param power; /* PM duration/timeout */ + struct iw_quality qual; /* Quality part of statistics */ + + struct sockaddr ap_addr; /* Access point address */ + struct sockaddr addr; /* Destination address (hw/mac) */ + + struct iw_param param; /* Other small parameters */ + struct iw_point data; /* Other large parameters */ +}; + +/* + * The structure to exchange data for ioctl. + * This structure is the same as 'struct ifreq', but (re)defined for + * convenience... + * Do I need to remind you about structure size (32 octets) ? + */ +struct iwreq +{ + union + { + char ifrn_name[16]; /* if name, e.g. "eth0" */ + } ifr_ifrn; + + /* Data part (defined just above) */ + union iwreq_data u; +}; + +/* -------------------------- IOCTL DATA -------------------------- */ +/* + * For those ioctl which want to exchange mode data that what could + * fit in the above structure... + */ + +/* + * Range of parameters + */ + +struct iw_range +{ + /* Informative stuff (to choose between different interface) */ + uint32_t throughput; /* To give an idea... */ + /* In theory this value should be the maximum benchmarked + * TCP/IP throughput, because with most of these devices the + * bit rate is meaningless (overhead an co) to estimate how + * fast the connection will go and pick the fastest one. + * I suggest people to play with Netperf or any benchmark... + */ + + /* NWID (or domain id) */ + uint32_t min_nwid; /* Minimal NWID we are able to set */ + uint32_t max_nwid; /* Maximal NWID we are able to set */ + + /* Old Frequency (backward compat - moved lower ) */ + uint16_t old_num_channels; + uint8_t old_num_frequency; + + /* Wireless event capability bitmasks */ + uint32_t event_capa[6]; + + /* signal level threshold range */ + int32_t sensitivity; + + /* Quality of link & SNR stuff */ + /* Quality range (link, level, noise) + * If the quality is absolute, it will be in the range [0 ; max_qual], + * if the quality is dBm, it will be in the range [max_qual ; 0]. + * Don't forget that we use 8 bit arithmetics... */ + struct iw_quality max_qual; /* Quality of the link */ + /* This should contain the average/typical values of the quality + * indicator. This should be the threshold between a "good" and + * a "bad" link (example : monitor going from green to orange). + * Currently, user space apps like quality monitors don't have any + * way to calibrate the measurement. With this, they can split + * the range between 0 and max_qual in different quality level + * (using a geometric subdivision centered on the average). + * I expect that people doing the user space apps will feedback + * us on which value we need to put in each driver... */ + struct iw_quality avg_qual; /* Quality of the link */ + + /* Rates */ + uint8_t num_bitrates; /* Number of entries in the list */ + int32_t bitrate[IW_MAX_BITRATES]; /* list, in bps */ + + /* RTS threshold */ + int32_t min_rts; /* Minimal RTS threshold */ + int32_t max_rts; /* Maximal RTS threshold */ + + /* Frag threshold */ + int32_t min_frag; /* Minimal frag threshold */ + int32_t max_frag; /* Maximal frag threshold */ + + /* Power Management duration & timeout */ + int32_t min_pmp; /* Minimal PM period */ + int32_t max_pmp; /* Maximal PM period */ + int32_t min_pmt; /* Minimal PM timeout */ + int32_t max_pmt; /* Maximal PM timeout */ + uint16_t pmp_flags; /* How to decode max/min PM period */ + uint16_t pmt_flags; /* How to decode max/min PM timeout */ + uint16_t pm_capa; /* What PM options are supported */ + + /* Encoder stuff */ + uint16_t encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */ + uint8_t num_encoding_sizes; /* Number of entry in the list */ + uint8_t max_encoding_tokens; /* Max number of tokens */ + /* For drivers that need a "login/passwd" form */ + uint8_t encoding_login_index; /* token index for login token */ + + /* Transmit power */ + uint16_t txpower_capa; /* What options are supported */ + uint8_t num_txpower; /* Number of entries in the list */ + int32_t txpower[IW_MAX_TXPOWER]; /* list, in bps */ + + /* Wireless Extension version info */ + uint8_t we_version_compiled; /* Must be WIRELESS_EXT */ + uint8_t we_version_source; /* Last update of source */ + + /* Retry limits and lifetime */ + uint16_t retry_capa; /* What retry options are supported */ + uint16_t retry_flags; /* How to decode max/min retry limit */ + uint16_t r_time_flags; /* How to decode max/min retry life */ + int32_t min_retry; /* Minimal number of retries */ + int32_t max_retry; /* Maximal number of retries */ + int32_t min_r_time; /* Minimal retry lifetime */ + int32_t max_r_time; /* Maximal retry lifetime */ + + /* Frequency */ + uint16_t num_channels; /* Number of channels [0; num - 1] */ + uint8_t num_frequency; /* Number of entry in the list */ + struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */ + /* Note : this frequency list doesn't need to fit channel numbers, + * because each entry contain its channel index */ + + uint32_t enc_capa; /* IW_ENC_CAPA_* bit field */ + + /* More power management stuff */ + int32_t min_pms; /* Minimal PM saving */ + int32_t max_pms; /* Maximal PM saving */ + uint16_t pms_flags; /* How to decode max/min PM saving */ + + /* All available modulations for driver (hw may support less) */ + int32_t modul_capa; /* IW_MODUL_* bit field */ + + /* More bitrate stuff */ + uint32_t bitrate_capa; /* Types of bitrates supported */ +}; + +/* + * Private ioctl interface information + */ + +struct iw_priv_args +{ + uint32_t cmd; /* Number of the ioctl to issue */ + uint16_t set_args; /* Type and number of args */ + uint16_t get_args; /* Type and number of args */ + char name[16]; /* Name of the extension */ +}; + +/* ----------------------- WIRELESS EVENTS ----------------------- */ +/* + * Wireless events are carried through the rtnetlink socket to user + * space. They are encapsulated in the IFLA_WIRELESS field of + * a RTM_NEWLINK message. + */ + +/* + * A Wireless Event. Contains basically the same data as the ioctl... + */ +struct iw_event +{ + uint16_t len; /* Real lenght of this stuff */ + uint16_t cmd; /* Wireless IOCTL */ + union iwreq_data u; /* IOCTL fixed payload */ +}; + +/* Size of the Event prefix (including padding and alignement junk) */ +#define IW_EV_LCP_LEN (sizeof(struct iw_event) - sizeof(union iwreq_data)) +/* Size of the various events */ +#define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ) +#define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(uint32_t)) +#define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq)) +#define IW_EV_PARAM_LEN (IW_EV_LCP_LEN + sizeof(struct iw_param)) +#define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr)) +#define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality)) + +/* iw_point events are special. First, the payload (extra data) come at + * the end of the event, so they are bigger than IW_EV_POINT_LEN. Second, + * we omit the pointer, so start at an offset. */ +#define IW_EV_POINT_OFF (((char *) &(((struct iw_point *) NULL)->length)) - \ + (char *) NULL) +#define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point) - \ + IW_EV_POINT_OFF) + +/* Size of the Event prefix when packed in stream */ +#define IW_EV_LCP_PK_LEN (4) +/* Size of the various events when packed in stream */ +#define IW_EV_CHAR_PK_LEN (IW_EV_LCP_PK_LEN + IFNAMSIZ) +#define IW_EV_UINT_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(uint32_t)) +#define IW_EV_FREQ_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct iw_freq)) +#define IW_EV_PARAM_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct iw_param)) +#define IW_EV_ADDR_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct sockaddr)) +#define IW_EV_QUAL_PK_LEN (IW_EV_LCP_PK_LEN + sizeof(struct iw_quality)) +#define IW_EV_POINT_PK_LEN (IW_EV_LCP_LEN + 4) + +#endif /* _LINUX_WIRELESS_H */ diff --git a/feeds/luci/contrib/package/meshwizard/Makefile b/feeds/luci/contrib/package/meshwizard/Makefile new file mode 100644 index 0000000..9ac5a06 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/Makefile @@ -0,0 +1,39 @@ +# Copyright (C) 2011 Manuel Munz +# This is free software, licensed under the Apache 2.0 license. + +include $(TOPDIR)/rules.mk + +PKG_NAME:=meshwizard +PKG_RELEASE:=0.3.2 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/meshwizard + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=9. Freifunk + TITLE:=Shell script based wizard for Mesh networks + DEPENDS:=+firewall +endef + +define Package/meshwizard/description + A shellscript based wizard to simplify the setup of a typical mesh node (e.g. for Freifunk.net) +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/meshwizard/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,meshwizard)) diff --git a/feeds/luci/contrib/package/meshwizard/files/etc/config/meshwizard b/feeds/luci/contrib/package/meshwizard/files/etc/config/meshwizard new file mode 100644 index 0000000..a60b0cc --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/etc/config/meshwizard @@ -0,0 +1,7 @@ +config 'netconfig' 'netconfig' + +config 'general' 'general' + option 'sharenet' '0' + option 'local_restrict' '1' + option 'cleanup' '1' + diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/functions.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/functions.sh new file mode 100644 index 0000000..b0f6cb2 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/functions.sh @@ -0,0 +1,118 @@ +uci_remove_list_element() { + local option="$1" + local value="$2" + local list="$(uci get $option)" + local elem + + uci delete $option + for elem in $list; do + if [ "$elem" != "$value" ]; then + uci add_list $option=$elem + fi + done +} + +# string_contains(string, substring) +# +# Returns 0 if the specified string contains the specified substring, +# otherwise returns 1. +string_contains() { + string="$1" + substring="$2" + if test "${string#*$substring}" != "$string" + then + return 0 # $substring is in $string + else + return 1 # $substring is not in $string + fi +} + +# Takes 2 arguments +# $1 = text to be displayed in the output for this section +# $2 = section (optional) +uci_commitverbose() { + echo "+ $1" + uci changes $2 | while read line; do + echo " $line" + done + uci commit $2 +} + +set_defaults() { + for def in $(env |grep "^$1" | sed 's/ /_/g'); do + option="${def/$1/}" + a="$(echo $option |cut -d '=' -f1)" + b="$(echo $option |cut -d '=' -f2-)" + b="${b//_/ }" + string_contains "$a" "_LENGTH" && continue + string_contains "$a" "_ITEM" && { + # special threatment for lists. use add_list and remove the + # item index (_ITEMx). + uci add_list $2.${a//_ITEM[0-9]*/}="$b" + } || { + uci set $2.$a="$b" + } + done +} + +# 3 arguments: 1=config name 2=oldname 3=newname +section_rename() { + uci -q rename $1.$2=$3 && msg_rename $1.$2 $1.$3 || msg_rename_error $1.$2 $1.$3 +} + +msg_missing_value() { + echo -e " \033[1mWarning:\033[0m Configuration option for $2 is missing in $1." +} + +msg_success() { + echo " Finished." +} + +msg_error() { + echo " \033[1mError: \033[0mThere was a problem." +} + +msg_rename() { + echo " Renamed unnamed section $1 to $2." +} + +msg_rename_error() { + echo " \033[1mWarning:\033[0m Could not rename $1 to $2." +} + + +restore_factory_defaults() { + echo "+ Restore default config as requested with cleanup=1" + cp -f /rom/etc/config/* /etc/config/ + rm /etc/config/wireless + wifi detect > /etc/config/wireless + rm /etc/config/network + if [ -f /etc/init.d/defconfig ]; then + # legacy (AA) + /etc/init.d/defconfig start + [ -f /rom/etc/uci-defaults/network ] && sh /rom/etc/uci-defaults/network + else + sh /rom/etc/uci-defaults/02_network + fi +} + +is_in_list() { + # checks if an item is in a list + local list="$1" + local item="$2" + for word in $list; do + [ $word = "$item" ] && return 0 + done + return 1 +} + +add_to_list() { + local list="$1" + local item="$2" + is_in_list "$list" "$item" && echo $list + if [ -z "$list" ]; then + echo "$item" + else + echo "$list $item" + fi +} diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/check-range-in-range.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/check-range-in-range.sh new file mode 100755 index 0000000..c889c55 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/check-range-in-range.sh @@ -0,0 +1,31 @@ +#!/bin/sh +# Checks whether a netrange is inside another netrange, returns 1 if true +# Takes two arguments: $1: net from which we want to know if it is inside $2 +# nets need to be given in CIDR notation + +dir=$(dirname $0) + +awk -f $dir/common.awk -f - $* <= network2) { + if (network <= broadcast2) { + if (broadcast <= broadcast2) { + print "1" + } + } + } +} +EOF diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/common.awk b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/common.awk new file mode 100644 index 0000000..5b03d06 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/common.awk @@ -0,0 +1,20 @@ +function bitcount(c) { + c=and(rshift(c, 1),0x55555555)+and(c,0x55555555) + c=and(rshift(c, 2),0x33333333)+and(c,0x33333333) + c=and(rshift(c, 4),0x0f0f0f0f)+and(c,0x0f0f0f0f) + c=and(rshift(c, 8),0x00ff00ff)+and(c,0x00ff00ff) + c=and(rshift(c,16),0x0000ffff)+and(c,0x0000ffff) + return c +} + +function ip2int(ip) { + for (ret=0,n=split(ip,a,"\."),x=1;x<=n;x++) ret=or(lshift(ret,8),a[x]) + return ret +} + +function int2ip(ip,ret,x) { + ret=and(ip,255) + ip=rshift(ip,8) + for(;x<3;ret=and(ip,255)"."ret,ip=rshift(ip,8),x++); + return ret +} diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/gen_auto-ipv6-dhcpv6-ip.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/gen_auto-ipv6-dhcpv6-ip.sh new file mode 100755 index 0000000..9eca11b --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/gen_auto-ipv6-dhcpv6-ip.sh @@ -0,0 +1,16 @@ +#!/bin/sh +netrenamed=$1 + +PREFIX="$(echo $ipv6_prefix| cut -d "/" -f 1| sed 's/::/:/')" + +# Get the devices mac address +device="$(uci -p/var/state -q get network.$1.ifname)" +if [ -n "$device" ]; then + MAC="$(ifconfig $netrenamed |grep HWaddr | awk '{ print $5 '})" +else + MAC="$(cat /sys/class/net/$1/address)" + IPV6_UNIQ="$(echo $MAC | awk -F: '{ print $1$2":"$3$4":"$5$6 }')" +fi + +echo "${PREFIX}${IPV6_UNIQ}:1" + diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/gen_bssid.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/gen_bssid.sh new file mode 100755 index 0000000..efe101f --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/gen_bssid.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# create essid from channel, takes two args: +# $1 = channel (integer) +# $2 = community (optional) +channel=$1 +community=$2 + +. /lib/functions.sh + + +# Try to get BSSID from profile first +config_load profile_$community +config_get bssid bssidscheme $channel +if [ -z "$bssid" ]; then + config_get bssid bssidscheme "all" +fi + +if [ -z "$bssid" ]; then + case $channel in + [1-9]) + bssid="$(printf "%X\n" $channel)2:CA:FF:EE:BA:BE" + ;; + 1[0-4]) + bssid="$(printf "%X\n" $channel)2:CA:FF:EE:BA:BE" + ;; + [3-9][0-9]) + bssid="02:$channel:CA:FF:EE:EE" + ;; + 1[0-9][0-9]) + bssid="${channel/1/12:}:CA:FF:EE:EE" + ;; + *) bssid="02:CA:FF:EE:BA:BE" + ;; + esac +fi +echo $bssid diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/gen_dhcp_ip.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/gen_dhcp_ip.sh new file mode 100755 index 0000000..e559166 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/gen_dhcp_ip.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# generates a dhcp-ip and netrange from a given ip/subnet +# takes 2 arguments: +# $1: Ip Address (of the Interface for which we want to generate an ip) + +echo "$1" | awk 'BEGIN { FS = "." } ; { print "6."$3"."$4".1" }' diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/initial_config.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/initial_config.sh new file mode 100755 index 0000000..c1e5522 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/initial_config.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# This is only run once (usually after flashing an image from the imagebuilder) +# It sets up the initial config for this node. + +. /lib/functions.sh +. $dir/functions.sh + +config_load system + +# Rename system config +handle_system() { + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename system $1 system + fi +} +config_foreach handle_system system + +if [ -n "$(uci -q get meshwizard.community)" ]; then + set_defaults "community_" freifunk.community + uci -q delete meshwizard.community +fi + +[ -n "$profile_homepage" ] && uci set freifunk.community.homepage="$profile_homepage" + +[ -n "$profile_mapserver" ] && { + uci -q delete freifunk.community.mapserver + for m in $profile_mapserver; do + uci add_list freifunk.community.mapserver="$m" + done +} + +uci_commitverbose "Setup community" freifunk + +if [ -n "$(uci -q get meshwizard.contact)" ]; then + set_defaults "contact_" freifunk.contact + uci -q delete meshwizard.contact && uci_commitverbose "Setup contact" freifunk +fi + +if [ "$has_luci" == TRUE ]; then + set_defaults "luci_main_" luci.main + uci -q delete meshwizard.luci_main && uci_commitverbose "Setup luci" luci +fi diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/ipcalc-cidr.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/ipcalc-cidr.sh new file mode 100755 index 0000000..6d7a1fb --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/ipcalc-cidr.sh @@ -0,0 +1,42 @@ +#!/bin/sh +dir=$(dirname $0) +awk -f $dir/common.awk -f - $* <limit) end=limit + + print "IP="int2ip(ipaddr) + print "NETMASK="int2ip(netmask) + print "BROADCAST="int2ip(broadcast) + print "NETWORK="int2ip(network) + print "NEXTNET="int2ip(broadcast + 1) + print "PREFIX="32-bitcount(compl(netmask)) + + # range calculations: + # ipcalc + + if (ARGC > 3) { + print "START="int2ip(start) + print "END="int2ip(end) + } +} +EOF diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/read_defaults.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/read_defaults.sh new file mode 100755 index 0000000..b6ffb62 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/read_defaults.sh @@ -0,0 +1,61 @@ +#!/bin/sh +# These functions read the settings we need for configuration of the router + +read_defaults() { + # read default values from the 3 relevant config files and export them + # into the environment. Later loaded configs overwrite earlier ones. The + # The ordering here is from most generic to most specific: + # freifunk (most generic defaults) + # profile_* (community defaults) + # nodes custom config from meshwizard config file + + local community="$1" + + config_cb() { + local type="$1" + local name="$2" + local allowed_section_types="widget" + local allowed_section_names=" + system + wifi_device + wifi_iface + interface + alias + dhcp + olsr_interface + olsr_interfacedefaults + profile + zone_freifunk + include + luci_splash + ipv6 + luci_main + contact + community + wan + lan + general + ipv6 + qos + " + + if [ "$type" = "widget" ]; then + widgets=$(add_to_list "$widgets" "$name") + fi + + if ([ -n "$name" ] && is_in_list "$allowed_section_names" $name) \ + || is_in_list "$allowed_section_types" $type ; then + option_cb() { + local option="$1" + local value="$2" + export "${CONFIG_SECTION}_${option}"="$value" + } + else + option_cb() { return; } + fi + } + config_load freifunk + config_load profile_${community} + config_load meshwizard + export widgets="$widgets" +} diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/rename-wifi.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/rename-wifi.sh new file mode 100755 index 0000000..e9139ed --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/rename-wifi.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# This script renames IB_wifi_ interface names into real interface names used on this system. +# E.g. wireless.IB_wifi0 would become wireless.wifi0 on madwifi and wireless.radio0 on mac80211 + +. $dir/functions.sh + +posIB=-1 + +IBwifis="$(uci show meshwizard.netconfig | grep 'IB_' | sed 's/meshwizard.netconfig\.\(IB_wifi.*\)_.*/\1/' |uniq)" +[ -z "$(echo $IBwifis |grep IB_wifi)" ] && exit + +for w in $IBwifis; do + posIB=$(( $posIB + 1 )) + export IB_wifi$posIB="$w" +done + +pos=0 +syswifis="$(uci show wireless |grep wifi-device | sed 's/wireless\.\(.*\)=.*/\1/' |uniq)" + +for s in $syswifis; do + export syswifi$pos="$s" + pos=$(( $pos + 1 )) +done + +for i in `seq 0 $posIB`; do + IBwifi=$(eval echo \$IB_wifi$i) + syswifi=$(eval echo \$syswifi$i) + + if [ -n "$syswifi" ]; then + case $IBwifi in + IB_wifi* ) + # replace IB_wifi_* with actual wifi interface names, delete old ones first + uci show meshwizard.netconfig | grep $IBwifi | while read line; do + oldline=$(echo $line | cut -d "=" -f 1) + uci set $oldline="" + newline=$(echo $line |sed -e "s/$IBwifi/$syswifi/g" -e "s/'//g") + uci set $newline + done + ;; + esac + unset IBwifi + unset syswifi + fi +done + +uci_commitverbose "Renaming wifi-devices in /etc/config/meshwizard" meshwizard diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_auto-ipv6-interface.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_auto-ipv6-interface.sh new file mode 100755 index 0000000..adf3429 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_auto-ipv6-interface.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +net=$1 +. $dir/functions.sh + +ra="$(uci -q get meshwizard.netconfig.${net}_ipv6ra)" +uci set autoipv6.${netrenamed}="interface" +if [ -n "$ra" ]; then + uci set autoipv6.${netrenamed}.ra=1 +fi + +uci_commitverbose "Setup auto-ipv6 for interface $netrenamed" autoipv6 diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_auto-ipv6.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_auto-ipv6.sh new file mode 100755 index 0000000..8e3f015 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_auto-ipv6.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +. $dir/functions.sh + +if [ "$ipv6_config" = "auto-ipv6-fromv4" ]; then + mode="fromv4" +else + mode="random" +fi + +uci set autoipv6.olsr_node.enabled=1 +uci set autoipv6.olsr_node.mode="$mode" +uci_commitverbose "Setup auto-ipv6" autoipv6 + +uci set network.wan.accept_ra=0 +uci_commitverbose "Do not accept ra's on wan when using auto-ipv6" network + diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_dhcp.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_dhcp.sh new file mode 100755 index 0000000..8cce831 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_dhcp.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# Sets up the dhcp part of dnsmasq + +. /lib/functions.sh +. $dir/functions.sh + +net="$1" +vap="$(uci -q get meshwizard.netconfig.${net}_vap)" + +handle_dnsmasq() { + config_get interface "$1" interface + if [ "$interface" == "${netrenamed}dhcp" ]; then + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename dhcp $1 ${netrenamed}dhcp + fi + fi +} +config_load dhcp +config_foreach handle_dnsmasq dhcp + +[ "$net" == "lan" ] && uci -q delete dhcp.lan + +if [ "$supports_vap" = 1 -a "$vap" = 1 ]; then + uci batch <<- EOF + set dhcp.${netrenamed}dhcp="dhcp" + set dhcp.${netrenamed}dhcp.ignore="0" + set dhcp.${netrenamed}dhcp.interface="${netrenamed}dhcp" + EOF + set_defaults "dhcp_" dhcp.${netrenamed}dhcp +fi + +ahdhcp_when_vap="$(uci get profile_$community.profile.adhoc_dhcp_when_vap)" +if [ "$supports_vap" = 0 ] || \ + [ "$supports_vap" = 1 -a "$vap" = 1 -a "$ahdhcp_when_vap" = 1 ] || \ + [ "$lan_is_olsr" = "1" -a "$lan_dhcp" = 1 ]; then + uci batch <<- EOF + set dhcp.${netrenamed}ahdhcp="dhcp" + set dhcp.${netrenamed}ahdhcp.ignore="0" + set dhcp.${netrenamed}ahdhcp.interface="${netrenamed}ahdhcp" + EOF +fi +set_defaults "dhcp_" dhcp.${netrenamed}ahdhcp + +uci_commitverbose "Setup DHCP for $netrenamed" dhcp + + diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_dnsmasq.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_dnsmasq.sh new file mode 100755 index 0000000..9297f91 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_dnsmasq.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +. /lib/functions.sh +. $dir/functions.sh + +# Set dnsmasq config +handle_dhcp() { + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename dhcp $1 dnsmasq + fi +} + +config_load dhcp +config_foreach handle_dhcp dnsmasq + +uci batch << EOF + set dhcp.dnsmasq.local="/$profile_suffix/" + set dhcp.dnsmasq.domain="$profile_suffix" +EOF + +config_get addnhosts dnsmasq addnhosts +if [ -z "${addnhosts/\var\/etc\/hosts.olsr/}" ]; then + uci add_list dhcp.dnsmasq.addnhosts="/var/etc/hosts.olsr" + if [ "$ipv6_enabled" = 1 ]; then + uci add_list dhcp.dnsmasq.addnhosts="/var/etc/hosts.olsr.ipv6" + fi +fi + +uci_commitverbose "Setup dnsmasq" dhcp diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_firewall.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_firewall.sh new file mode 100755 index 0000000..154b2b6 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_firewall.sh @@ -0,0 +1,145 @@ +#!/bin/sh +# Add "freifunk" firewall zone +# If wan/lan is used for olsr then remove these networks from wan/lan zones +# Also setup rules defined in /etc/config/freifunk and /etc/config/profile_ + +. /lib/functions.sh +. $dir/functions.sh + +wan_is_olsr=$(uci -q get meshwizard.netconfig.wan_config) + +config_load firewall + +# Rename firewall zone for freifunk if unnamed +# If wan is used for olsr then set network for the firewall zone wan to ' ' to remove the wan interface from it, else add local restrict to it +# If lan is used for olsr then set network for the firewall zone lan to ' ' to remove the lan interface from it + +handle_fwzone() { + config_get name "$1" name + config_get network "$1" network + + if [ "$name" == "freifunk" ]; then + # rename section if unnamed + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename firewall $1 zone_freifunk + fi + fi + + if [ "$name" == "wan" ]; then + if [ "$wan_is_olsr" == 1 ]; then + uci set firewall.$1.network=' ' && uci_commitverbose "WAN is used for olsr, removed the wan interface from zone wan" firewall + else + uci set firewall.$1.local_restrict=1 && uci_commitverbose "Enable local_restrict for zone wan" firewall + fi + fi + + if [ "$name" == "lan" ] && [ "$lan_is_olsr" == "1" ]; then + uci set firewall.$1.network=' ' && uci_commitverbose "LAN is used for olsr, removed the lan interface from zone lan" firewall + fi +} + +config_foreach handle_fwzone zone + +uci batch << EOF + set firewall.zone_freifunk="zone" + set firewall.zone_freifunk.name="freifunk" + set firewall.zone_freifunk.input="$zone_freifunk_input" + set firewall.zone_freifunk.forward="$zone_freifunk_forward" + set firewall.zone_freifunk.output="$zone_freifunk_output" +EOF + +uci_commitverbose "Setup firewall zones" firewall + +# Usually we need to setup masquerading for lan, except lan is an olsr interface or has an olsr hna-entry + +handle_interface() { + config_get interface "$1" interface + if [ "$interface" == "lan" ]; then + no_masq_lan=1 + fi +} +config_load olsrd +config_foreach handle_interface Interface + +LANIP="$(uci -q get network.lan.ipaddr)" +if [ -n "$LANIP" ]; then + handle_hna() { + config_get netaddr "$1" netaddr + if [ "$LANIP" == "$netaddr" ]; then + no_masq_lan=1 + fi + } + config_foreach handle_hna Hna4 +fi + +currms=$(uci -q get firewall.zone_freifunk.masq_src) +if [ ! "$no_masq_lan" == "1" ] && [ ! "$(uci -q get meshwizard.netconfig.lan_config)" == 1 ]; then + uci set firewall.zone_freifunk.masq="1" + [ -z "$(echo $currms |grep lan)" ] && uci add_list firewall.zone_freifunk.masq_src="lan" +fi + + +# Rules, Forwardings, advanced config and includes from freifunk and +# profile_$community config files. + +add_fw_rules() { + config_cb() { + local type="$1" + local name="$2" + local allowed_section_types="advanced include fw_rule fw_forwarding" + if is_in_list "$allowed_section_types" $type ; then + uci set firewall.${name}="${type/fw_/}" + option_cb() { + local option="$1" + local value="$2" + uci set firewall.${CONFIG_SECTION}.${option}="$value" + } + else + option_cb() { return; } + fi + } + config_load freifunk + config_load profile_${community} +} +add_fw_rules + + +# If we use auto-ipv6-dhcp then allow 547/udp on the freifunk zone +if [ "$ipv6_config" = "auto-ipv6-dhcpv6" ]; then + uci batch <<- EOF + set firewall.dhcpv6=rule + set firewall.dhcpv6.src=freifunk + set firewall.dhcpv6.target=ACCEPT + set firewall.dhcpv6.dest_port=547 + set firewall.dhcpv6.proto=udp + EOF +fi + +# Firewall rules to allow incoming ssh and web if enabled + +if [ "$wan_allowssh" == 1 ]; then + uci batch <<- EOF + set firewall.wanssh=rule + set firewall.wanssh.src=wan + set firewall.wanssh.target=ACCEPT + set firewall.wanssh.proto=tcp + set firewall.wanssh.dest_port=22 + EOF +fi + +if [ "$wan_allowweb" == 1 ]; then + uci batch <<- EOF + set firewall.wanweb=rule + set firewall.wanweb.src=wan + set firewall.wanweb.target=ACCEPT + set firewall.wanweb.proto=tcp + set firewall.wanweb.dest_port=80 + set firewall.wanwebhttps=rule + set firewall.wanwebhttps.src=wan + set firewall.wanwebhttps.target=ACCEPT + set firewall.wanwebhttps.proto=tcp + set firewall.wanwebhttps.dest_port=443 + EOF +fi + +uci_commitverbose "Setup rules, forwardings, advanced config and includes." firewall diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_firewall_interface.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_firewall_interface.sh new file mode 100755 index 0000000..8ca5d3b --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_firewall_interface.sh @@ -0,0 +1,111 @@ +#!/bin/sh +# This will add $net to the zone firewall (and remove it from other zones where it is referenced) +# It will also setup rules defined in /etc/config/freifunk and /etc/config/profile_ +# Arg $1 = $net + +net=$1 +. /lib/functions.sh +. $dir/functions.sh +config_load firewall + +# Get some variables +type="$(uci -q get wireless.$net.type)" +vap="$(uci -q get meshwizard.netconfig.$net\_vap)" +wan_is_olsr=$(uci -q get meshwizard.netconfig.wan_config) + +# Delete old firewall zone for freifunk +handle_fwzone() { + config_get name "$1" name + config_get network "$1" network + + if [ "$2" == "zoneconf" ]; then + if [ "$name" == "freifunk" ]; then + # rename section if unnamed + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename firewall $1 zone_freifunk + fi + else + if [ ! "$name" == "freifunk" ] && [ -n "$netrenamed" -a -n "$(echo $network | grep $netrenamed)" ]; then + echo " Removed $netrenamed from firewall zone $name." + network_new=$(echo $network | sed -e 's/'$netrenamed'//' -e 's/^ //' -e 's/ / /' -e 's/ $//') + uci set firewall.$1.network="$network_new" + fi + fi + fi +} + +config_foreach handle_fwzone zone zoneconf + +# Add $netrenamed and if needed ${netrenamed}dhcp to the "freifunk" zone +config_get network zone_freifunk network + +# remove ${netrenamed}dhcp from networks list +[ -n "$network" -a -n "$net" ] && network="${network/${netrenamed}dhcp/}" +network=$(echo $network) # Removes leading and trailing whitespaces + +[ -n "$netrenamed" ] && [ -z "$(echo $network | grep $netrenamed)" ] && network="$network $netrenamed" + +if [ "$supports_vap" == "1" -a "$vap" == 1 ]; then + [ -n "$netrenamed" ] && [ "$network" == "${network/${netrenamed}dhcp/}" ] && network="$network ${netrenamed}dhcp" +fi + +uci set firewall.zone_freifunk.network="$network" + +uci_commitverbose "Add '$netrenamed' to freifunk firewall zone" firewall + +currms=$(uci -q get firewall.zone_freifunk.masq_src) + +# If interfaces are outside of the mesh network they should be natted + +if [ "$vap" == 1 ]; then + # Get dhcprange and meshnet for the dhcp interface + if_ip="$(uci -q get network.${netrenamed}dhcp.ipaddr)" + if_mask="$(uci -q get network.${netrenamed}dhcp.netmask)" + + [ -n "$if_ip" -a "$if_mask" ] && export $(ipcalc.sh $if_ip $if_mask) + [ -n "$NETWORK" -a "$PREFIX" ] && dhcprange="$NETWORK/$PREFIX" + + if [ -n "$dhcprange" ]; then + meshnet="$(uci get profile_$community.profile.mesh_network)" + # check if the dhcprange is inside meshnet + dhcpinmesh="$($dir/helpers/check-range-in-range.sh $dhcprange $meshnet)" + if [ "$dhcpinmesh" == 1 ]; then + # needed or splash will not work + if [ "$has_luci_splash" == TRUE ]; then + uci set firewall.zone_freifunk.contrack="1" + fi + else + uci set firewall.zone_freifunk.masq=1 + [ -z "$(echo $currms |grep ${netrenamed}dhcp)" ] && uci add_list firewall.zone_freifunk.masq_src="${netrenamed}dhcp" + fi + fi +fi + +# Get dhcprange and meshnet for the adhoc dhcp interface +if_ip="$(uci -q get network.${netrenamed}ahdhcp.ipaddr)" +if_mask="$(uci -q get network.${netrenamed}ahdhcp.netmask)" + +[ -n "$if_ip" -a "$if_mask" ] && export $(ipcalc.sh $if_ip $if_mask) +[ -n "$NETWORK" -a "$PREFIX" ] && dhcprangeah="$NETWORK/$PREFIX" + +if [ -n "$dhcprangeah" ]; then + meshnet="$(uci get profile_$community.profile.mesh_network)" + # check if the dhcprange is inside meshnet + dhcpinmesh="$($dir/helpers/check-range-in-range.sh $dhcprangeah $meshnet)" + if [ "$dhcpinmesh" == 1 ]; then + # needed or splash will not work + if [ "$has_luci_splash" == TRUE ]; then + uci set firewall.zone_freifunk.contrack="1" + fi + else + uci set firewall.zone_freifunk.masq=1 + [ -z "$(echo $currms |grep ${netrenamed}ahdhcp)" ] && uci add_list firewall.zone_freifunk.masq_src="${netrenamed}ahdhcp" + fi +fi + + +for i in IP NETMASK BROADCAST NETWORK PREFIX; do + unset $i +done + +uci_commitverbose "Setup masquerading rules for '$netrenamed'" firewall diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_lan_ipv6.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_lan_ipv6.sh new file mode 100755 index 0000000..1b4f9b1 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_lan_ipv6.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +[ ! "$(uci -q get network.lan)" == "interface" ] && exit + +. /lib/functions.sh +. $dir/functions.sh + +# Setup IPv6 for the lan interface + +ip6addr="" +if [ "$ipv6_config" = "auto-ipv6-dhcpv6" ]; then + # get lan mac + device="$(uci -p/var/state -q get network.lan.ifname)" + if [ -n "device" ]; then + ip6addr="$($dir/helpers/gen_auto-ipv6-dhcpv6-ip.sh $device)" + fi + uci set network.lan.ip6addr="${ip6addr}/112" +fi + +uci_commitverbose "Setup ipv6 address for lan" network diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_lan_static.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_lan_static.sh new file mode 100755 index 0000000..172dcf1 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_lan_static.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# Setup static interface settings for lan if lan is not an olsr interface + +[ ! "$(uci -q get network.lan)" == "interface" ] && exit + +. /lib/functions.sh +. $dir/functions.sh + +uci batch << EOF + set network.lan.proto='$lan_proto' + set network.lan.ipaddr='$lan_ip4addr' + set network.lan.netmask='$lan_netmask' +EOF + +uci_commitverbose "Setup static ip settings for lan" network + +uci delete meshwizard.lan && uci commit meshwizard diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_network.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_network.sh new file mode 100755 index 0000000..3ad977e --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_network.sh @@ -0,0 +1,142 @@ +# setup entry in /etc/config/network for a interface +# Argument $1: network interface + +net="$1" +. /lib/functions.sh +. $dir/functions.sh + +# Setup a (new) interface section for $net + +ipaddr=$(uci -q get meshwizard.netconfig.$net\_ip4addr) +ip6addr=$(uci -q get meshwizard.netconfig.$net\_ip6addr) +[ -z "$ipaddr" ] && msg_missing_value meshwizard $net\_ip4addr + +netmask=$(uci -q get meshwizard.netconfig.$net\_netmask) +[ -z "$netmask" ] && netmask="$interface_netmask" +[ -z "$netmask" ] && netmask="255.255.0.0" + +uci set network.$netrenamed="interface" +set_defaults "interface_" network.$netrenamed + +uci batch << EOF + set network.$netrenamed.proto="static" + set network.$netrenamed.ipaddr="$ipaddr" + set network.$netrenamed.netmask="$netmask" +EOF + +if [ "$netrenamed" = "lan" ]; then + # remove the bridge if the interface is used for olsr + # since this script is only run in this case, no need + # to check for lan_proto = "olsr" currently. + uci -q delete network.lan.type +fi + +# Setup IPv6 for the interface +if [ "$ipv6_enabled" = 1 ]; then + if [ "$ipv6_config" = "auto-ipv6-dhcpv6" ]; then + ip6addr="$($dir/helpers/gen_auto-ipv6-dhcpv6-ip.sh $netrenamed)" + uci set network.$netrenamed.ip6addr="${ip6addr}/112" + fi + if [ "$ipv6_config" = "static" ] && [ -n "$ip6addr" ]; then + uci set network.$netrenamed.ip6addr="$ip6addr" + fi +fi + +uci_commitverbose "Setup interface $netrenamed" network + +# setup dhcp alias/interface + +net_dhcp=$(uci -q get meshwizard.netconfig.${net}_dhcp) +if [ "$net_dhcp" == 1 ]; then + + # Load meshwizard_settings + dhcprange="$(uci -q get meshwizard.netconfig.${net}_dhcprange)" + interface_ip="$(uci -q get meshwizard.netconfig.${net}_ip4addr)" + vap=$(uci -q get meshwizard.netconfig.${net}_vap) + + # Rename config + handle_dhcpalias() { + config_get interface "$1" interface + if [ "$interface" == "$netrenamed" ]; then + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename network $1 ${netrenamed}dhcp + fi + fi + } + config_load network + config_foreach handle_dhcpalias interface + + # Get IP/netmask and start-ip for $net dhcp + # If no dhcprange is given in /etc/config/meshwizard we autogenerate one + + if [ -z "$dhcprange" ]; then + dhcprange="$($dir/helpers/gen_dhcp_ip.sh $interface_ip)/24" + uci set meshwizard.netconfig.${net}_dhcprange="$dhcprange" + fi + + # If we use VAP and also offer dhcp on the adhoc interface then cut the dhcp + # range in two halves. one for the adhoc, one for the managed VAP interface + ahdhcp_when_vap="$(uci get profile_$community.profile.adhoc_dhcp_when_vap)" + + if [ "$supports_vap" = 1 -a "$vap" = 1 -a "$ahdhcp_when_vap" = 1 ]; then + # VAPs are enabled for this interface, supported and we want to + # also use DHCP on the adhoc interface + network=${dhcprange%%/*} + mask=${dhcprange##*/} + # Divide network size by adding 1 to the netmask + mask=$(($mask + 1)) + # Get first ip and netmask for the adhoc dhcp network + eval $(sh $dir/helpers/ipcalc-cidr.sh ${network}/${mask} 1 0) + STARTADHOC=$START + NETMASKADHOC=$NETMASK + # Get first ip and netmask for the managed dhcp network + eval $(sh $dir/helpers/ipcalc-cidr.sh ${NEXTNET}/${mask} 1 0) + STARTVAP=$START + NETMASKVAP=$NETMASK + # Add dhcp interface + uci batch <<- EOF + set network.${netrenamed}dhcp=interface + set network.${netrenamed}dhcp.proto=static + set network.${netrenamed}dhcp.ipaddr="$STARTVAP" + set network.${netrenamed}dhcp.netmask="$NETMASKVAP" + EOF + uci_commitverbose "Setup interface for ${netrenamed}dhcp" network + else + eval $(sh $dir/helpers/ipcalc-cidr.sh $dhcprange 1 0) + STARTADHOC=$START + NETMASKADHOC=$NETMASK + fi + if [ "$supports_vap" = 1 -a "$vap" = 1 -a "$ahdhcp_when_vap" != 1 ]; then + # vaps are enabled and supported and we do not use DHCP on adhoc + # Add dhcp interface + uci batch <<- EOF + set network.${netrenamed}dhcp=interface + set network.${netrenamed}dhcp.proto=static + set network.${netrenamed}dhcp.ipaddr="$STARTADHOC" + set network.${netrenamed}dhcp.netmask="$NETMASKADHOC" + EOF + uci_commitverbose "Setup interface for ${netrenamed}dhcp" network + fi + + + # Setup alias for $net adhoc interface + if [ "$supports_vap" = 0 ] || \ + [ "$vap" = 0 ] || \ + [ "$supports_vap" = 1 -a "$vap" = 1 -a "$ahdhcp_when_vap" = 1 ] || \ + [ "$lan_is_olsr" = "1" ]; then + # setup an alias interface for the main interface to use as a network for clients + # when one of the following conditions is met + # * vaps are not supported + # * or not enabled + # * or they are supported and enabled but we also want to use DHCP on the adhoc interface + # * or this is the lan interface and it is used for olsrd (and dhcp is enabled) + uci batch <<- EOF + set network.${netrenamed}ahdhcp=interface + set network.${netrenamed}ahdhcp.ifname="@${netrenamed}" + set network.${netrenamed}ahdhcp.proto=static + set network.${netrenamed}ahdhcp.ipaddr="$STARTADHOC" + set network.${netrenamed}ahdhcp.netmask="$NETMASKADHOC" + EOF + uci_commitverbose "Setup interface for ${netrenamed}ahdhcp" network + fi +fi diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_olsrd.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_olsrd.sh new file mode 100755 index 0000000..01a9387 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_olsrd.sh @@ -0,0 +1,160 @@ +#!/bin/sh +# Sets up olsrd + +. /lib/functions.sh +. $dir/functions.sh + +protocols="4" +if [ "$ipv6_enabled" = 1 ] && [ "$has_ipv6" == "1" ]; then + protocols="4 6" +fi + +clean_config() { + # Clean the config, remove interface wlan + handle_interface() { + config_get interface "$1" interface + if [ "$interface" = "wlan" ]; then + uci delete $cfg.$1 + fi + } + config_foreach handle_interface Interface +} + +rename_olsrd() { + #Rename olsrd basic settings + handle_olsrd() { + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename $cfg $1 olsrd + fi + } + config_foreach handle_olsrd olsrd +} + +rename_interface_defaults() { + # Rename interface defaults + handle_interfacedefaults() { + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename $cfg $1 InterfaceDefaults + fi + } + config_foreach handle_interfacedefaults InterfaceDefaults +} + +cleanup_plugins() { + # Rename nameservice, dyngw and httpinfo plugins + handle_plugin() { + config_get library "$1" library + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + new="$(echo $library | cut -d '.' -f 1)" + section_rename $cfg "$1" "$new" + fi + } + config_foreach handle_plugin LoadPlugin + uci -q delete $cfg.olsrd_httpinfo + uci -q delete $cfg.olsrd_dyn_gw +} + +setup_nameservice() { + # Setup nameservice plugin + if [ -n "$profile_suffix" ]; then + suffix=".$profile_suffix" + else + suffix=".olsr" + fi + local llfile="/var/run/latlon.js" + local hosts="/var/etc/hosts.olsr" + local services="/var/run/services_olsr" + + if [ "$proto" = "6" ]; then + local llfile="/var/run/latlon.js.ipv6" + local hosts="/var/etc/hosts.olsr.ipv6" + local services="/var/run/services_olsr.ipv6" + fi + + uci batch <<- EOF + set $cfg.olsrd_nameservice=LoadPlugin + set $cfg.olsrd_nameservice.library="olsrd_nameservice.so.0.3" + set $cfg.olsrd_nameservice.latlon_file="$llfile" + set $cfg.olsrd_nameservice.hosts_file="$hosts" + set $cfg.olsrd_nameservice.sighup_pid_file="/var/run/dnsmasq.pid" + set $cfg.olsrd_nameservice.services_file="$services" + set $cfg.olsrd_nameservice.suffix="$suffix" + EOF + + uci_commitverbose "Setup olsr nameservice plugin" $cfg +} + +setup_dyngw_plain() { + # Setup dyngw_plain + # If Sharing of Internet is enabled then enable dyngw_plain plugin + + if [ "$general_sharenet" == 1 ]; then + uci set $cfg.dyngw_plain=LoadPlugin + uci set $cfg.dyngw_plain.ignore=0 + uci set $cfg.dyngw_plain.library="olsrd_dyn_gw_plain.so.0.4" + uci_commitverbose "Setup olsrd_dyngw_plain plugin" $cfg + fi + +} + +setup_watchdog() { + # Setup watchdog + local watchdogfile="/var/run/olsrd.watchdog" + if [ "$proto" = "6" ]; then + watchdogfile="/var/run/olsrd.watchdog.ipv6" + fi + + uci batch <<- EOF + set $cfg.olsrd_watchdog=LoadPlugin + set $cfg.olsrd_watchdog.library="olsrd_watchdog.so.0.1" + set $cfg.olsrd_watchdog.file="$watchdogfile" + set $cfg.olsrd_watchdog.interval=30 + EOF + uci_commitverbose "Setup olsr watchdog plugin" $cfg + +} + +setup_jsoninfo() { + proto="$1" + uci batch <<- EOF + set $cfg.olsrd_jsoninfo=LoadPlugin + set $cfg.olsrd_jsoninfo.library="olsrd_jsoninfo.so.0.0" + EOF + if [ "$proto" = "6" ]; then + uci set $cfg.olsrd_jsoninfo.ipv6only='1' + fi + uci_commitverbose "Setup olsr jsoninfo plugin" $cfg +} + +setup_txtinfo() { + proto="$1" + uci batch <<- EOF + set $cfg.olsrd_txtinfo=LoadPlugin + set $cfg.olsrd_txtinfo.library="olsrd_txtinfo.so.0.1" + EOF + if [ "$proto" = "6" ]; then + uci set $cfg.olsrd_txtinfo.ipv6only='1' + fi + uci_commitverbose "Setup olsr txtinfo plugin" $cfg +} + + +for proto in $protocols; do + cfg="olsrd" + [ "$proto" == "6" ] && cfg="olsrd6" + config_load $cfg + clean_config + rename_olsrd + cleanup_plugins + + uci set $cfg.olsrd.IpVersion="$proto" + uci set $cfg.InterfaceDefaults=InterfaceDefaults + set_defaults "olsr_interfacedefaults_" $cfg.InterfaceDefaults + uci_commitverbose "Cleanup olsrd config" $cfg + + setup_nameservice + setup_dyngw_plain + setup_watchdog + setup_jsoninfo $proto + setup_txtinfo $proto +done diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_olsrd_interface.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_olsrd_interface.sh new file mode 100755 index 0000000..59f99bd --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_olsrd_interface.sh @@ -0,0 +1,76 @@ +#!/bin/sh +# Sets up olsrd interfaces +# arg $1 = net + +net=$1 + +. /lib/functions.sh +. $dir/functions.sh + +protocols="4" +if [ "$ipv6_enabled" = 1 ] && [ "$has_ipv6" == "1" ]; then + protocols="4 6" +fi + +for proto in $protocols; do + + cfg="olsrd" + [ "$proto" == "6" ] && cfg="olsrd6" + + # Rename interface for $netrenamed + handle_interface() { + config_get interface "$1" Interface + if [ "$interface" == "$netrenamed" ]; then + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename $cfg $1 $netrenamed + fi + fi + } + + config_foreach handle_interface Interface + + # Setup new interface for $netrenamed + + uci set $cfg.$netrenamed=Interface + set_defaults "olsr_interface_" $cfg.$net + uci set $cfg.$netrenamed.interface="$netrenamed" + + uci_commitverbose "Setup olsr interface for $netrenamed." $cfg + + if [ "$proto" = "4" ]; then + # If dhcp-network is inside the mesh_network then add HNA for it + + dhcprange=$(uci -q get meshwizard.netconfig.$net\_dhcprange) + uci -q delete $cfg.${netrenamed}clients + + if [ -n "$dhcprange" ]; then + meshnet="$(uci get profile_$community.profile.mesh_network)" + dhcpinmesh="$($dir/helpers/check-range-in-range.sh $dhcprange $meshnet)" + + if [ "$dhcpinmesh" == 1 ] && [ -n "$meshnet" ]; then + uci set $cfg.${netrenamed}clients="Hna4" + eval $(sh $dir/helpers/ipcalc-cidr.sh $dhcprange) + uci set $cfg.${netrenamed}clients.netaddr="$NETWORK" + uci set $cfg.${netrenamed}clients.netmask="$NETMASK" + uci_commitverbose "Setup HNA for network $dhcprange" $cfg + fi + fi + fi + + if [ "$proto" = "6" ]; then + # Set Hna entry for ipv6 net for static ipv6 config + uci -q delete $cfg.${netrenamed}static + if [ "$ipv6_config" = "static" ]; then + v6range="$(uci -q get meshwizard.netconfig.$net\_ip6addr)" + v6net="$(echo $v6range | cut -d '/' -f 1)" + v6mask="$(echo $v6range | cut -d '/' -f 2)" + if [ -n "$v6net" ] && [ -n "$v6mask" ]; then + uci set $cfg.${netrenamed}static="Hna6" + uci set $cfg.${netrenamed}static.netaddr="$v6net" + uci set $cfg.${netrenamed}static.prefix="$v6mask" + uci_commitverbose "Setup HNA for network $v6range" $cfg + fi + fi + fi + +done \ No newline at end of file diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_policyrouting.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_policyrouting.sh new file mode 100755 index 0000000..f898bd6 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_policyrouting.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +. $dir/functions.sh + +uci batch << EOF + set freifunk-policyrouting.pr.enable=1 + set freifunk-policyrouting.pr.strict=1 + set freifunk-policyrouting.pr.zones="freifunk" +EOF + +uci_commitverbose "Setup policyrouting" freifunk-policyrouting diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_qos.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_qos.sh new file mode 100755 index 0000000..25884b3 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_qos.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# sets up qos-scripts for the wan interface + +. /lib/functions.sh +. $dir/functions.sh + +if [ ! -f /etc/config/qos ]; then + echo "NOT setting up QOS because /etc/config/qos-scripts was not found" +else + uci batch <<- EOF + set qos.wan.enabled=1 + set qos.wan.upload=$wan_up + set qos.wan.download=$wan_down + EOF + uci_commitverbose "Setup QOS on WAN interface." qos + +fi diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_splash.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_splash.sh new file mode 100755 index 0000000..3c3e6a3 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_splash.sh @@ -0,0 +1,54 @@ +#!/bin/sh +# Setup_splash, takes 1 argument: 1=net + +. /lib/functions.sh +. $dir/functions.sh + +net=$1 +vap=$(uci -q get meshwizard.netconfig.${net}_vap) + +if [ ! "$has_luci_splash" == TRUE ]; then + echo " Luci Splash is not installed, skipping setup of it." + exit +fi + +set_defaults "luci_splash_" luci_splash.general +uci_commitverbose "Setup general splash settings" luci_splash + +dhcprange=$(uci -q get meshwizard.netconfig.$net\_dhcprange) + +splash_net_add() { + uci batch <<- EOF + set luci_splash.$1="iface" + set luci_splash.$1.network="$1" + set luci_splash.$1.zone="freifunk" + EOF +} + +if [ "$(uci -q get meshwizard.netconfig.$net\_dhcp)" = 1 ] && [ -n "$dhcprange" ]; then + handle_splash() { + config_get network "$1" network + if [ "$network" == "${netrenamed}dhcp" ]; then + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename luci_splash $1 ${netrenamed}dhcp + fi + fi + } + config_load luci_splash + config_foreach handle_splash iface + + if [ "$supports_vap" = 1 -a "$vap" = 1 ]; then + splash_net_add ${netrenamed}dhcp + uci_commitverbose "Setup dhcpsplash for ${netrenamed}dhcp" luci_splash + fi + + ahdhcp_when_vap="$(uci get profile_$community.profile.adhoc_dhcp_when_vap)" + if [ "$supports_vap" = 0 ] || \ + [ "$supports_vap" = 1 -a "$vap" = 1 -a "$ahdhcp_when_vap" = 1 ] || \ + [ "$lan_dhcp" = 1 ]; then + splash_net_add ${netrenamed}ahdhcp + uci_commitverbose "Setup dhcpsplash for ${netrenamed}ahdhcp" luci_splash + fi + /etc/init.d/luci_splash enable +fi + diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_ssh.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_ssh.sh new file mode 100755 index 0000000..38b331e --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_ssh.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# Setup ssh. At this point only used to store pubkeys. + +[ ! "$(uci -q get meshwizard.ssh)" == "system" ] && exit + +. /lib/functions.sh +. $dir/functions.sh +authorized="/etc/dropbear/authorized_keys" + + +config_load meshwizard + +i=0 +handle_pubkeys() { + local k="$1" + ( [ -f "$authorized" ] && grep -q "$k" $authorized) || { + echo "$k" >> $authorized + i=`expr $i + 1` + } +} + +config_list_foreach ssh pubkey handle_pubkeys + +uci delete meshwizard.ssh +uci_commitverbose "Added $i pubkeys to authorized_keys" meshwizard + diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_system.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_system.sh new file mode 100755 index 0000000..e9ce953 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_system.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +. $dir/functions.sh + +set_defaults "system_" system.system +uci -q delete meshwizard.system && uci commit meshwizard +uci_commitverbose "System config" system diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_uhttpd.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_uhttpd.sh new file mode 100755 index 0000000..b25a175 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_uhttpd.sh @@ -0,0 +1,11 @@ +#!/bin/sh +. $dir/functions.sh +if [ "$ipv6_enabled" = "1" ]; then + uci batch <<- EOF + set uhttpd.main.listen_http="80" + set uhttpd.main.listen_https="443" + EOF +fi + +uci_commitverbose "Setup uhttpd" uhttpd + diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wan_dhcp.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wan_dhcp.sh new file mode 100755 index 0000000..91fc1d8 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wan_dhcp.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# Setup dhcp interface settings for wan. This is the OpenWrt default, +# so all we need to do here is to delete wan from meshwizard after setup. +# Also disallow ra on wan if ipv6 is enabled + +[ ! "$(uci -q get network.wan)" == "interface" ] && exit + +. /lib/functions.sh +. $dir/functions.sh + +if [ "$ipv6_enabled" = "1" ]; then + uci set network.wan.accept_ra='0' + uci_commitverbose "Do not accept ra on wan interface" network +fi + + +uci delete meshwizard.wan && uci commit meshwizard + diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wan_static.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wan_static.sh new file mode 100755 index 0000000..570470a --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wan_static.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# Setup static interface settings for wan if wan is not an olsr interface + +[ ! "$(uci -q get network.wan)" == "interface" ] && exit + +. /lib/functions.sh +. $dir/functions.sh + +uci batch << EOF +set network.wan.proto='$wan_proto' +set network.wan.ipaddr='$wan_ip4addr' +set network.wan.netmask='$wan_netmask' +set network.wan.gateway='$wan_gateway' +set network.wan.dns='$wan_dns' +EOF + +uci_commitverbose "Setup static ip settings for wan" network + +uci delete meshwizard.wan && uci commit meshwizard + diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_widgets.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_widgets.sh new file mode 100755 index 0000000..288252f --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_widgets.sh @@ -0,0 +1,14 @@ +#!/bin/sh +. /lib/functions.sh + . $dir/functions.sh + +if [ -n "$widgets" ]; then + [ ! -f "/etc/config/freifunk-widgets" ] && touch /etc/config/freifunk-widgets + for w in $widgets; do + uci set freifunk-widgets.${w}=widget + set_defaults "${w}_" freifunk-widgets.${w} + uci delete profile_$community.${w} + done + uci commit profile_$community + uci_commitverbose "Added widget config." freifunk-widgets +fi diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wifi.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wifi.sh new file mode 100755 index 0000000..41feb86 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wifi.sh @@ -0,0 +1,85 @@ +#!/bin/sh +# sets up a wifi interface for meshing +# Arguments: $1 = network interface + +net="$1" +. /lib/functions.sh +. $dir/functions.sh + +##### wifi-device ##### + +# Get the type before we delete the wifi-device +config_load wireless +config_get type $net type + +# Rename wifi-device for $net + +handle_wifidevice() { + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename wireless $1 $net + fi +} +config_foreach handle_wifidevice wifi-device + +# create new wifi-device for $net +uci set wireless.${net}=wifi-device + +# get and set wifi-device defaults +set_defaults "wifi_device_" wireless.${net} + +channel="$(uci -q get meshwizard.netconfig.$net\_channel)" + +if [ -z "$channel" -o "$channel" == "default" ]; then + channel=$wifi_device_channel +fi + +uci batch << EOF + set wireless.${net}.type="$type" + set wireless.${net}.channel="$channel" +EOF + +uci_commitverbose "Setup wifi device for $netrenamed" wireless + +##### wifi iface + +# Rename wifi-iface for $net +handle_interface() { + config_get device "$1" device + if [ "$device" == "$net" ]; then + if [ -z "${1/cfg[0-9a-fA-F]*/}" ]; then + section_rename wireless $1 ${net}_iface + fi + fi +} +config_foreach handle_interface wifi-iface + +# create new wifi-device for $net +uci set wireless.$net\_iface=wifi-iface + +# create new wifi-iface for $net from defaults +set_defaults "wifi_iface_" wireless.$net\_iface + +# overwrite some settings for type atheros (madwifi) +if [ "$type" = "atheros" ]; then + set_defaults "madwifi_wifi_iface_" wireless.${net} +fi + +# overwrite defaults +bssid="$($dir/helpers/gen_bssid.sh $channel $community)" + +ssid="$profile_ssid" +if [ "$profile_ssid_scheme" == "addchannel" ]; then + ssid="$ssid - ch$channel" +elif [ "$profile_ssid_scheme" == "addchannelbefore" ]; then + ssid="ch$channel.$ssid" +fi + +uci batch << EOF + set wireless.$net\_iface.device="${net}" + set wireless.$net\_iface.network="$netrenamed" + set wireless.$net\_iface.ssid="$ssid" + set wireless.$net\_iface.bssid="$bssid" +EOF + +uci_commitverbose "Setup wifi interface for $netrenamed" wireless + diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wifi_vap.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wifi_vap.sh new file mode 100755 index 0000000..df58ad7 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wifi_vap.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# sets up a wifi interface for meshing +# Arguments: $1 = network interface + +net="$1" +. /lib/functions.sh +. $dir/functions.sh + +## Setup a VAP interface in AP Mode +ip4addr="$(uci get meshwizard.netconfig.$net\_ip4addr)" +vap="$(uci -q get meshwizard.netconfig.$net\_vap)" + +if [ "$supports_vap" == 1 -a "$vap" == 1 ]; then + uci batch <<- EOF + set wireless.$net\_iface_dhcp="wifi-iface" + set wireless.$net\_iface_dhcp.device="$net" + set wireless.$net\_iface_dhcp.mode="ap" + set wireless.$net\_iface_dhcp.encryption="none" + set wireless.$net\_iface_dhcp.network="${netrenamed}dhcp" + set wireless.$net\_iface_dhcp.ssid="Freifunk-$ip4addr" + EOF + uci_commitverbose "Setup VAP interface for $netrenamed" wireless +fi diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/supports_vap.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/supports_vap.sh new file mode 100755 index 0000000..0585ab5 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/supports_vap.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# checks if a given device can be used for a VAP interface (1 adhoc + 1 ap) +dev="$1" +type="$2" + + +if [ -z "$dev" -o -z "$type" ]; then + exit 1 +fi + +if [ "$type" = "atheros" ]; then + exit 0 +elif [ "$type" = "mac80211" ]; then + # not hostapd[-mini], no VAP + if [ ! -x /usr/sbin/hostapd ]; then + echo "WARNING: hostapd[-mini] is required to be able to use VAP with mac80211." + exit 1 + fi + # get driver in use + netindex="$(echo $dev |sed 's/[a-zA-z]*//')" + if [ -d /sys/class/net/wlan${netindex}/device/driver/module ]; then + driver="$(basename $(ls -l /sys/class/net/wlan${netindex}/device/driver/module | sed -ne 's/.* -> //p'))" + if [ "$driver" = "ath9k" -o "$driver" = "ath5k" ]; then + exit 0 + else + exit 1 + fi + else + exit 1 + fi +else + exit 1 +fi + diff --git a/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/wizard.sh b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/wizard.sh new file mode 100755 index 0000000..4504738 --- /dev/null +++ b/feeds/luci/contrib/package/meshwizard/files/usr/bin/meshwizard/wizard.sh @@ -0,0 +1,147 @@ +#!/bin/sh + +# This collection of scripts will take settings from /etc/config/meshwizard, /etc/config/freifunk +# and /etc/config/profile_ and setup the router to participate in wireless mesh networks + +# Copyright 2011 Manuel Munz + +# Licensed under the Apache License, Version 2.0 (the "License") +# You may not use this file except in compliance with the License. +# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +echo " +/* Meshwizard 0.3.1 */ +" + +# config +export dir="/usr/bin/meshwizard" + +. /lib/functions.sh +. $dir/functions.sh +. $dir/helpers/read_defaults.sh +[ -f /proc/net/ipv6_route ] && export has_ipv6=1 + +# Check which packages we have installed +export has_luci=FALSE +opkg list_installed |grep luci-mod-admin > /dev/null && export has_luci=TRUE +export has_luci_splash=FALSE +opkg list_installed |grep luci-app-splash > /dev/null && export has_luci_splash=TRUE + +# Check whether we want to cleanup/restore uci config before setting new options +cleanup=$(uci -q get meshwizard.general.cleanup) +[ "$cleanup" == 1 ] && restore_factory_defaults + +# Rename wifi interfaces +$dir/helpers/rename-wifi.sh + +export lan_is_olsr="$(uci -q get meshwizard.netconfig.lan_config)" + +# Get community +community="$(uci -q get meshwizard.community.name || uci -q get freifunk.community.name)" +[ -z "$community" ] && echo "Error: Community is not set in /etc/config/freifunk, aborting now." && exit 1 +export community="$community" + +# we need a list of widgets later on. It will be populated in read_defaults.sh +widgets="" + +# Get a list of networks we need to setup +networks=$(uci show meshwizard.netconfig | grep -v "netconfig=" | sed -e 's/meshwizard.netconfig\.\(.*\)\_.*/\1/' |sort|uniq) +export networks +[ -z "$networks" ] && echo "Error: No networks to setup could be found in /etc/config/meshwizard, aborting now." && exit 1 + +# Read defaults and node config +read_defaults $community + +# Do config +$dir/helpers/initial_config.sh +$dir/helpers/setup_dnsmasq.sh +$dir/helpers/setup_system.sh +$dir/helpers/setup_olsrd.sh +$dir/helpers/setup_firewall.sh +$dir/helpers/setup_ssh.sh +$dir/helpers/setup_uhttpd.sh +$dir/helpers/setup_widgets.sh + +if [ "$wan_proto" == "static" ] && [ -n "$wan_ip4addr" ] && [ -n "$wan_netmask" ]; then + $dir/helpers/setup_wan_static.sh +fi + +if [ "$wan_proto" == "dhcp" ]; then + $dir/helpers/setup_wan_dhcp.sh +fi + +if [ -n "$wan_down" -a -n "$wan_up" ]; then + $dir/helpers/setup_qos.sh +fi + +if [ "$lan_proto" == "static" ] && [ -n "$lan_ip4addr" ] && [ -n "$lan_netmask" ]; then + $dir/helpers/setup_lan_static.sh +fi + +if [ "$ipv6_enabled" == 1 ] && [ "$has_ipv6" = 1 ]; then + $dir/helpers/setup_lan_ipv6.sh + # Setup auto-ipv6 + if [ -n "$(echo "$ipv6_config" |grep auto-ipv6)" ]; then + $dir/helpers/setup_auto-ipv6.sh + fi +fi + +# Setup policyrouting if internet sharing is disabled and wan is not used for olsrd +# Always disable it first to make sure its disabled when the user decied to share his internet +uci set freifunk-policyrouting.pr.enable=0 +if [ ! "$general_sharenet" == 1 ] && [ ! "$(uci -q get meshwizard.netconfig.wan_proto)" == "olsr" ]; then + $dir/helpers/setup_policyrouting.sh +fi + +# Configure found networks +for net in $networks; do + # radioX devices need to be renamed + netrenamed="${net/radio/wireless}" + export netrenamed + + if [ ! "$net" == "wan" ] && [ ! "$net" == "lan" ]; then + $dir/helpers/setup_wifi.sh $net + # check if this net supports vap + /sbin/wifi # wifi needs to be up for the check + export supports_vap="0" + type="$(uci -q get wireless.$net.type)" + [ -n "$type" ] && $dir/helpers/supports_vap.sh $net $type && export supports_vap=1 + if [ "$supports_vap" = 1 ]; then + $dir/helpers/setup_wifi_vap.sh $net + fi + fi + + $dir/helpers/setup_network.sh $net + + $dir/helpers/setup_olsrd_interface.sh $net + + net_dhcp=$(uci -q get meshwizard.netconfig.${net}_dhcp) + export ${net}_dhcp=$net_dhcp + + if [ "$net" = "lan" ] && [ "$lan_is_olsr" = "1" ]; then + uci -q set dhcp.lan.ignore="1" + uci_commitverbose "Disable DHCP on LAN because it is an olsr interface." dhcp + fi + + if [ "$net_dhcp" == 1 ]; then + $dir/helpers/setup_dhcp.sh $net + fi + + $dir/helpers/setup_splash.sh $net + $dir/helpers/setup_firewall_interface.sh $net + + if [ -n "$(echo "$ipv6_config" |grep auto-ipv6)" ]; then + $dir/helpers/setup_auto-ipv6-interface.sh $net + fi +done + +##### postinstall script + +[ -f /etc/rc.local.meshkitpostinstall ] && /etc/rc.local.meshkitpostinstall + + +##### Reboot the router (because simply restarting services gave errors) + +echo "+ The wizard has finished and the router will reboot now." + +reboot diff --git a/feeds/luci/contrib/package/remote-update/Makefile b/feeds/luci/contrib/package/remote-update/Makefile new file mode 100644 index 0000000..4f8b3a5 --- /dev/null +++ b/feeds/luci/contrib/package/remote-update/Makefile @@ -0,0 +1,43 @@ +# +# Copyright (C) 2009 Jo-Philipp Wich +# +# This is free software, licensed under the Apache 2.0 license. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=remote-update +PKG_RELEASE:=4 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/remote-update + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=9. Freifunk + TITLE:=Freifunk remote update utility. + DEPENDS:=@TARGET_atheros||@TARGET_ar71xx||@TARGET_brcm_2_4 +endef + +define Package/remote-update/description + The freifunk remote-update utility uses sysupgrade to reflash the currently + running firmware while keeping most of the existing configuratio. +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/remote-update/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,remote-update)) diff --git a/feeds/luci/contrib/package/remote-update/files/usr/sbin/remote-update b/feeds/luci/contrib/package/remote-update/files/usr/sbin/remote-update new file mode 100755 index 0000000..6e45e48 --- /dev/null +++ b/feeds/luci/contrib/package/remote-update/files/usr/sbin/remote-update @@ -0,0 +1,306 @@ +#!/bin/sh + +local tempfile=/tmp/remote-upgrade.img +local D2='\([0-9]\{2\}\)' +local D4='\([0-9]\{4\}\)' +local NL=' +' + +find_architecture() +{ + local ifs="$IFS"; IFS="-" + set -- $(opkg list_installed kernel) + IFS="$ifs" + + echo "$3" +} + +find_image() +{ + case "$1" in + atheros) + echo "openwrt-atheros-combined.squashfs.img" + ;; + ar71xx) + echo "openwrt-ar71xx-combined.squashfs.img" + ;; + brcm) + echo "openwrt-brcm-2.4-squashfs.trx" + ;; + esac +} + +check_image() +{ + local file; for file in /lib/upgrade/*.sh; do . $file; done + if platform_check_image "$1" >/dev/null 2>/dev/null; then + return 0 + fi + return 1 +} + +find_remote_checksum() +{ + wget -qO- ${1%/*}/md5sums 2>/dev/null | \ + sed -ne '/'$2'/ { s/ .*//p }' +} + +find_local_checksum() +{ + set -- $(md5sum "$tempfile") + echo $1 +} + +find_remote_info() +{ + wget -qO- "${1%/*}/VERSION.txt" 2>/dev/null +} + +find_remote_version() +{ + find_remote_info "$1" | \ + sed -ne "s!.*$D4/$D2/$D2 $D2:$D2.*!\\1\\2\\3\\4\\5!p;t" +} + +find_local_version() +{ + if [ -f /rom/etc/banner ]; then + sed -ne "s!.*$D4/$D2/$D2 $D2:$D2.*!\\1\\2\\3\\4\\5!p;t" \ + /rom/etc/banner + else + date +"%Y%m%d%H%M" -r /bin/sh + fi +} + +stop_service() +{ + [ -x /etc/init.d/$1 ] && { + echo -n "Stopping service $1 ... " + /etc/init.d/$1 stop >/dev/null 2>/dev/null + echo "done" + } +} + +do_wait() +{ + if [ ${1:-0} -gt 0 ]; then + echo -n "${2:-Waiting} " + for i in $(seq 1 $1); do + printf "%-2dseconds" $(($1-$i)) + sleep 1 + echo -en "\b\b\b\b\b\b\b\b\b" + done + echo "${NL}" + fi +} + +version_compare() +{ + local v1="$1" + local v2="$2" + + while [ -n "$v1" -o -n "$v2" ]; do + if [ -z "${v2:0:4}" -o "${v1:0:4}" -gt "${v2:0:4}" ]; then + return 1 + elif [ -z "${v1:0:4}" -o "${v1:0:4}" -lt "${v2:0:4}" ]; then + return 2 + fi + + v1="${v1:4}" + v2="${v2:4}" + done + + return 0 +} + +usage() +{ + cat <] -c + remote-update [-v] [-y] [-u ] -w + remote-update [-d] [-n] [-v] [-y] [-s ] [-u ] + +Actions: + -h Display this help message and exit. + -c Check for firmware update and exit. + -w Fetch image and exit, do not perform flash write. + +Options: + -d Do not detach from terminal. + -n Do not backup configuration. + -v Skip verification of downloaded image. + -y Assume defaults for all questions. + + -s + Sleep given amount of seconds before starting flash write. + If ommitted and '-y' is not used, 5 seconds are assumed. + + -u + Fetch firmware image from given url. A file "md5sums" is expected + in the same remote directory. If there is no such file, use -v to + suppress verification. + +EOT + + exit 1 +} + + +while getopts "s:u:cdnvwyh" flag; do + case $flag in + s) sleeptime="$OPTARG";; + u) updateurl="$OPTARG";; + c) checkupdate=1;; + d) nodetach=1;; + n) nobackup=1;; + v) noverify=1;; + w) noflash=1;; + y) noquestions=1;; + *) usage;; + esac +done + + +local image_url="$updateurl" +local image_name="${image_url##*/}" + +[ -z "$image_url" ] && { + local arch=$(find_architecture) + local image=$(find_image "$arch") + local repo=$(uci get freifunk.upgrade.repository 2>/dev/null) + repo=${repo:-$(uci get system.upgrade.repository 2>/dev/null)} + + [ -z "$arch" ] && { + echo "Can not determine the current architecture." + exit 1 + } + + [ -z "$repo" ] && { + echo "No repository configured in 'system.upgrade.repository'." + echo "Use the '-u' flag to specify an image location." + exit 1 + } + + [ -z "$image" ] && { + echo "No suitable image for the '$arch' architecture." + echo "Your platform is not supported." + exit 1 + } + + echo "Architecture: $arch" + echo "Repository: $repo" + + image_name="$image" + image_url="${repo%/}/$arch/$image" +} + + +if [ "$checkupdate" = 1 ]; then + local v1=$(find_local_version) + local v2=$(find_remote_version "$image_url") + + [ -n "$v1" -a -n "$v2" ] && { + version_compare "$v1" "$v2" + [ $? == 2 ] && { + echo "Update available!${NL}Local: $v1${NL}Remote: $v2${NL}--" + find_remote_info "$image_url" + exit 0 + } || { + echo "Local version $v1 is up to date" + exit 2 + } + } || { + echo "No remote time stamp found." + exit 1 + } +else + if [ "$noquestions" != 1 ]; then + echo -n "${NL}About to download $image_name. Continue? [y] " + read answer + case "$answer" in + [nN]) exit 1;; + esac + fi + + echo -n "Downloading $image_name ... " + rm -f $tempfile + wget -qO $tempfile "$image_url" 2>/dev/null + [ $? == 0 ] && echo done || { + echo failed + rm -f $tempfile + exit 1 + } + + if [ "$noverify" != 1 ]; then + echo -n "Verifying $image_name ... " + + local md5_remote=$(find_remote_checksum "$image_url" "$image_name") + local md5_local=$(find_local_checksum) + + check_image "$tempfile" + local image_ok=$? + + if [ $image_ok = 0 -a -n "$md5_remote" -a -n "$md5_local" -a "$md5_remote" = "$md5_local" ]; then + echo "done" + else + if [ $image_ok != 0 ]; then + echo "unsupported image type" + else + echo "checksum mismatch! (local:${md5_local:-(none)} remote:${md5_remote:-(none)})" + fi + + local answer=n + if [ "$noquestions" != 1 ]; then + echo -n "${NL}Verification failed. Continue anyway? [n] " + read answer + fi + + case "$answer" in + [yYjJ]*) : ;; + *) + echo "Aborting." + rm -f $tempfile + exit 1 + ;; + esac + fi + fi + + if [ "$noflash" != 1 ]; then + if [ -f "$tempfile" ]; then + if [ "$noquestions" == 1 ]; then + do_wait ${sleeptime:-5} "${NL}About to start flashing, hit to abort!${NL}${NL}Starting in" + else + if [ -z "$nobackup" ]; then + echo -n "${NL}Keep configuration files? [y] " + read answer + case "$answer" in + [nN]) nobackup=1;; + esac + fi + + echo -n "${NL}About to start flashing!${NL}Hit to continue or to abort.${NL}" + read answer + fi + + for s in lucid collectd; do stop_service $s; done + + if [ "$nodetach" != 1 ]; then + echo -n "Starting sysupgrade in background ... " + /bin/busybox start-stop-daemon -S -b -x /sbin/sysupgrade -- ${nobackup:+-n} "$tempfile" + echo "done" + else + echo "Executing sysupgrade ... " + exec /sbin/sysupgrade ${nobackup:+-n} "$tempfile" + fi + else + echo "No upgrade image found!" + exit 1 + fi + else + echo "Image saved in '$tempfile'" + fi +fi diff --git a/feeds/luci/documentation/CBI.md b/feeds/luci/documentation/CBI.md new file mode 100644 index 0000000..e937fe6 --- /dev/null +++ b/feeds/luci/documentation/CBI.md @@ -0,0 +1,246 @@ + +# CBI models +are Lua files describing the structure of an UCI config file and the resulting HTML form to be evaluated by the CBI parser.
+All CBI model files must return an object of type **luci.cbi.Map**.
+For a commented example of a CBI model, see the [Writing Modules tutorial](ModulesHowTo.md#cbimodels). + +The scope of a CBI model file is automatically extended by the contents of the module **luci.cbi** and the _translate_ function from **luci.i18n** + +This Reference covers **the basics** of the CBI system. + + +## class Map (_config, title, description_) +This is the root object of the model. + +* **config:** configuration filename to be mapped, see [UCI documentation](http://wiki.openwrt.org/doc/uci) and the files in /etc/config +* **title:** title shown in the UI +* **description:** description shown in the UI + +#### function :section (_sectionclass_, ...) +Creates a new section +* **sectionclass**: a class object of the section +* _additional parameters passed to the constructor of the section class_ + +---- + +## class NamedSection (_name, type, title, description_) +An object describing an UCI section selected by the name.
+To instantiate use: `Map:section(NamedSection, "name", "type", "title", "description")` + +* **name:** UCI section name +* **type:** UCI section type +* **title:** The title shown in the UI +* **description:** description shown in the UI + +#### function :option(_optionclass_, ...) +Creates a new option +* **optionclass:** a class object of the section +* _additional parameters passed to the constructor of the option class_ + +#### property .addremove = false +Allows the user to remove and recreate the configuration section. + +#### property .dynamic = false +Marks this section as dynamic. Dynamic sections can contain an undefinded number of completely userdefined options. + +#### property .optional = true +Parse optional options + +---- + +## class TypedSection (_type, title, description_) +An object describing a group of UCI sections selected by their type.
+To instantiate use: `Map:section(TypedSection, "type", "title", "description")` +* **type:** UCI section type +* **title:** The title shown in the UI +* **description:** description shown in the UI + +#### function :option(_optionclass_, ...) +Creates a new option + **optionclass:** a class object of the section + _additional parameters passed to the constructor of the option class_ + +#### function :depends(_key, value_) +Only select those sections where _key == value_
+If you call this function several times the dependencies will be linked with **"or"** + +#### function .filter(_self, section_) -abstract- +You can override this function to filter certain sections that will not be parsed. +The filter function will be called for every section that should be parsed and returns **nil** for sections that should be filtered. For all other sections it should return the section name as given in the second parameter. + +#### property .addremove = false +Allows the user to remove and recreate the configuration section + +#### property .dynamic = false +Marks this section as dynamic. Dynamic sections can contain an undefinded number of completely userdefined options. + +#### property .optional = true +Parse optional options + +#### property .anonymous = false +Do not show UCI section names + +---- + +## class Value (_option, title, description_) +An object describing an option in a section of a UCI File. Creates a standard text field in the formular.
+To instantiate use: `NamedSection:option(Value, "option", "title", "description")`
+ or `TypedSection:option(Value, "option", "title", "description")` +* **option:** UCI option name +* **title:** The title shown in the UI +* **description:** description shown in the UI + +#### function :depends(key, value) +Only show this option field if another option _key_ is set to _value_ in the same section.
+If you call this function several times the dependencies will be linked with **"or"** + +#### function :value(key, value) +Convert this text field into a combobox if possible and add a selection option. + +#### property .default = nil +The default value + +#### property .maxlength = nil +The maximum inputlength (of chars) of the value + +#### property .optional = false +Marks this option as optional, implies .rmempty = true + +#### property .rmempty = true +Removes this option from the configuration file when the user enters an empty value + +#### property .size = nil +The maximum number of chars displayed by form field + +---- + +## class ListValue (_option, title, description_) +An object describing an option in a section of a UCI File.
+Creates a list box or list of radio (for selecting one of many choices) in the formular.
+To instantiate use: `NamedSection:option(ListValue, "option", "title", "description")`
+or `TypedSection:option(ListValue, "option", "title", "description")` +* **option:** UCI option name +* **title:** The title shown in the UI +* **description:** description shown in the UI + +#### function :depends(key, value) +Only show this option field if another option _key_ is set to _value_ in the same section.
+If you call this function several times the dependencies will be linked with **"or"** + +#### function :value(_key, value_) +Adds an entry to the selection list + +#### property .widget = "select" +**"select"** shows a selction list, **"radio"** shows a list of radio buttons inside form + +#### property .default = nil +The default value + +#### property .optional = false +Marks this option as optional, implies .rmempty = true + +#### property .rmempty = true +Removes this option from the configuration file when the user enters an empty value + +#### property .size = nil +The size of the form field + +---- + +## class Flag (_option, title, description_) +An object describing an option with two possible values in a section of a UCI File.
+Creates a checkbox field in the formular.
+To instantiate use: `NamedSection:option(Flag, "option", ""title", "description")`
+ or `TypedSection:option(Flag, "option", "title", "description")` +* **option:** UCI option name +* **title:** The title shown in the UI +* **description:** description shown in the UI + +#### function :depends (_key, value_) +Only show this option field if another option _key_ is set to _value_ in the same section.
+If you call this function several times the dependencies will be linked with **"or"** + +#### property .default = nil +The default value + +#### property .disabled = 0 +the value that should be set if the checkbox is unchecked + +#### property .enabled = 1 +the value that should be set if the checkbox is checked + +#### property .optional = false +Marks this option as optional, implies .rmempty = true + +#### property .rmempty = true +Removes this option from the configuration file when the user enters an empty value + +---- + +## class MultiValue (_option'', ''title'', ''description_) +An object describing an option in a section of a UCI File.
+Creates a list of checkboxed or a multiselectable list as form fields.
+To instantiate use: `NamedSection:option(MultiValue, "option", ""title", "description")`
+ or `TypedSection:option(MultiValue, "option", "title", "description")` +* **option:** UCI option name +* **title:** The title shown in the UI +* **description:** description shown in the UI + +#### function :depends (_key, value_) +Only show this option field if another option _key_ is set to _value_ in the same section.
+If you call this function several times the dependencies will be linked with **"or"** + +#### function :value(_key, value_) +Adds an entry to the list + +#### property .widget = "checkbox" +**"select"** shows a selction list, **"checkbox"** shows a list of checkboxes inside form + +#### property .delimiter = " " +The string which will be used to delimit the values inside stored option + +#### property .default = nil +The default value + +#### property .optional = false +Marks this option as optional, implies .rmempty = true + +#### property .rmempty = true +Removes this option from the configuration file when the user enters an empty value + +#### property .size = nil +The size of the form field (only used if property _.widget = "select"_) + +---- + +## class StaticList (_option, title, description_) +Similar to the MultiValue, but stores selected Values into a UCI list instead of a character-separated option. + +---- + +## class DynamicList (_option, title, description_) +A extensible list of user-defined values. Stores Values into a UCI list + +---- + +## class DummyValue (_option, title, description_) +Creates a readonly text in the form. !It writes no data to UCI!
+To instantiate use: `NamedSection:option(DummyValue, "option", ""title", "description")`
+ or `TypedSection:option(DummyValue, "option", "title", "description")` +* **option:** UCI option name +* **title:** The title shown in the UI +* **description:** description shown in the UI + +#### property :depends (_key, value_) +Only show this option field if another option _key_ is set to _value_ in the same section.
+If you call this function several times the dependencies will be linked with **"or"** + +---- + +## class TextValue (_option, title, description_) +An object describing a multi-line textbox in a section in a non-UCI form. + +---- + +## class Button (_option, title, description_) +An object describing a Button in a section in a non-UCI form. diff --git a/feeds/luci/documentation/JsonRpcHowTo.md b/feeds/luci/documentation/JsonRpcHowTo.md new file mode 100644 index 0000000..76d61f8 --- /dev/null +++ b/feeds/luci/documentation/JsonRpcHowTo.md @@ -0,0 +1,66 @@ +LuCI provides some of its libraries to external applications through a JSON-RPC API. +This Howto shows how to use it and provides information about available functions. + + +# Basics +LuCI comes with an efficient JSON De-/Encoder together with a JSON-RPC-Server which implements the *JSON-RPC 1.0_' and 2.0 (partly) specifications. The LuCI JSON-RPC server offers several independent APIs. Therefore you have to use '_different URLs for every exported library*. +Assuming your LuCI-Installation can be reached through */cgi-bin/luci_' any exported library can be reached via '''/cgi-bin/luci/rpc/''LIBRARY_*. + + +# Authentication +Most exported libraries will require a valid authentication to be called with. If you get an *HTTP 403 Forbidden_' status code you are probably missing a valid authentication token. To get such a token you have to call the function '''login''' of the RPC-Library '''auth'''. Following our example from above this login function would be provided at '_/cgi-bin/luci/rpc/auth*. The function accepts 2 parameters: username and password (of a valid user account on the host system) and returns an authentication token. + +If you want to call any exported library which requires an authentication token you have to *append it as an URL parameter _auth''''' to the RPC-Server URL. So instead of calling '''/cgi-bin/luci/rpc/''LIBRARY''''' you have to call '''/cgi-bin/luci/rpc/''LIBRARY''?auth=''TOKEN_*. + +If your JSON-RPC client is Cookie-aware (like most browsers are) you will receive the authentication token also with a session cookie and probably don't have to append it to the RPC-Server URL. + + +# Exported Libraries +## uci +The UCI-Library */rpc/uci* offers functionality to interact with the Universal Configuration Interface. +*Exported Functions:* +* [(string) add(config, type)](http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.add) +* [(integer) apply(config)](http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.apply) +* [http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.changes (object) changes([config])] +* [(boolean) commit(config)](http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.commit) +* [http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.delete (boolean) delete(config, section[, option])] +* [http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.delete_all (boolean) delete_all(config[, type])] +* [http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.foreach (array) foreach(config[, type])] +* [http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.get (mixed) get(config, section[, option])] +* [http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.get_all (object) get_all(config[, section])] +* [http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.get (mixed) get_state(config, section[, option])] +* [(boolean) revert(config)](http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.revert) +* [(name) section(config, type, name, values)](http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.section) +* [(boolean) set(config, section, option, value)](http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.set) +* [(boolean) tset(config, section, values)](http://luci.subsignal.org/api/luci/modules/luci.model.uci.html#Cursor.tset) + +## uvl +The UVL-Library */rpc/uvl* offers functionality to validate UCI files and get schemes describing UCI files. +*Exported Functions:* +* [(array) get_scheme(scheme)](http://luci.subsignal.org/api/luci/modules/luci.uvl.html#UVL.get_scheme) +* [(array) validate(config, section, option)](http://luci.subsignal.org/api/luci/modules/luci.uvl.html#UVL.validate) +* [(array) validate_config(config)](http://luci.subsignal.org/api/luci/modules/luci.uvl.html#UVL.validate_config) +* [(array) validate_section(config, section)](http://luci.subsignal.org/api/luci/modules/luci.uvl.html#UVL.validate_section) +* [(array) validate(config, section, option)](http://luci.subsignal.org/api/luci/modules/luci.uvl.html#UVL.validate_option) + +## fs +The Filesystem library */rpc/fs* offers functionality to interact with the filesystem on the host machine. +*Exported Functions:* + +* [Complete luci.fs library](http://luci.subsignal.org/api/luci/modules/luci.fs.html) +*Note:* All functions are exported as they are except for _readfile'' which encodes its return value in base64 and ''writefile'' which only accepts base64 encoded data as second argument. Note that both functions will only be available when the ''luasocket_ packet is installed on the hostsystem. + +## sys +The System library */rpc/sys* offers functionality to interact with the operating system on the host machine. +*Exported Functions:* +* [Complete luci.sys library](http://luci.subsignal.org/api/luci/modules/luci.sys.html) +* [Complete luci.sys.group library](http://luci.subsignal.org/api/luci/modules/luci.sys.group.html) with prefix *group.* +* [Complete luci.sys.net library](http://luci.subsignal.org/api/luci/modules/luci.sys.net.html) with prefix *net.* +* [Complete luci.sys.process library](http://luci.subsignal.org/api/luci/modules/luci.sys.process.html) with prefix *process.* +* [Complete luci.sys.user library](http://luci.subsignal.org/api/luci/modules/luci.sys.user.html) with prefix *user.* +* [Complete luci.sys.wifi library](http://luci.subsignal.org/api/luci/modules/luci.sys.wifi.html) with prefix *wifi.* + +## ipkg +The IPKG library */rpc/ipkg* offers functionality to interact with the package manager (IPKG or OPKG) on the host machine. +*Exported Functions:* +* [Complete luci.model.ipkg library](http://luci.subsignal.org/api/luci/modules/luci.model.ipkg.html) diff --git a/feeds/luci/documentation/LAR.md b/feeds/luci/documentation/LAR.md new file mode 100644 index 0000000..457b076 --- /dev/null +++ b/feeds/luci/documentation/LAR.md @@ -0,0 +1,87 @@ +LAR is a simple archive format to pack multiple lua source files and arbitrary other resources into a single file. + + +# Format Specification + +A LAR archive file is divided into two parts: the payload and the index lookup table. +All segments of the archive are 4 Byte aligned to ease reading and processing of the format. +All integers are stored in network byte order, so an implementation has to use htonl() and htons() to properly read them. + +Schema: + + + + > + + + + > + + ... + + + + > + > + + + + + > + + + + + > + + ... + + + + + > + > + + + + + +# Processing + +In order to process an LAR archive, an implementation would have to do the following steps: + +## Read Index + +1. Locate and open the archive file +1. Seek to end of file - 4 bytes +1. Read 32bit index offset and swap from network to native byte order +1. Seek to index offset, calculate index length: filesize - index offset - 4 +1. Initialize a linked list for index table entries +1. Read each index entry until the index length is reached, read and byteswap 4 * 32bit int and 2 * 16bit int +1. Seek to begin of file + +## Read Member + +1. Read the archive index +1. Iterate through the linked index list, perform the following steps for each entry +1. Seek to the specified file path offset +1. Read as much bytes as specified in the file path length into a buffer +1. Compare the contents of the buffer against the path of the searched member +1. If buffer and searched path are equal, seek to the specified file data offset +1. Read data until the file data length is reached, return +1. Select the next index table entry and repeat from step 3, if there is no next entry then return + +# Reference implementation + +A reference implementation can be found here: +http://luci.subsignal.org/trac/browser/luci/trunk/contrib/lar + +The lar.pl script is a simple packer for LAR archives and cli.c provides a utility to list and dump packed LAR archives. diff --git a/feeds/luci/documentation/LMO.md b/feeds/luci/documentation/LMO.md new file mode 100644 index 0000000..961a45b --- /dev/null +++ b/feeds/luci/documentation/LMO.md @@ -0,0 +1,144 @@ +LMO is a simple binary format to pack language strings into a more efficient form. Although it's suitable to store any kind of key-value table, it's only used for the LuCI *.po based translation system at the moment. The abbreviation "LMO" stands for "Lua Machine Objects" in the style of the GNU gettext *.mo format. + + +# Format Specification + +A LMO file is divided into two parts: the payload and the index lookup table. +All segments of the file are 4 Byte aligned to ease reading and processing of the format. +Only unsigned 32bit integers are used and stored in network byte order, so an implementation has to use htonl() to properly read them. + +Schema: + + + + + + ... + + + > + + + + + + > + + + + + + > + + ... + + + + + + > + > + + + > + + + +# Processing + +In order to process a LMO file, an implementation would have to do the following steps: + +## Read Index + +1. Locate and open the archive file +1. Seek to end of file - 4 bytes (sizeof(uint32_t)) +1. Read 32bit index offset and swap from network to native byte order +1. Seek to index offset, calculate index length: filesize - index offset - 4 +1. Initialize a linked list for index table entries +1. Read each index entry until the index length is reached, read and byteswap 4 * uint32_t for each step +1. Seek to begin of file + +## Read Entry + +1. Calculate the unsigned 32bit hash of the entries key value (see "Hash Function" section below) +1. Obtain the archive index +1. Iterate through the linked index list, perform the following steps for each entry: + 1. Compare the entry hash value with the calculated hash from step 1 + 2. If the hash values are equal proceed with step 4 + 3. Select the next entry and repeat from step 3.1 +1. Seek to the file offset specified in the selected entry +1. Read as much bytes as specified in the entry length into a buffer +1. Return the buffer value + +# Hash Function + +The current LuCI-LMO implementation uses the "Super Fast Hash" function which was kindly put in the public domain by it's original author. See http://www.azillionmonkeys.com/qed/hash.html for details. Below is the C-Implementation of this function: + + + #if (defined(__GNUC__) && defined(__i386__)) + #define sfh_get16(d) (*((const uint16_t *) (d))) + #else + #define sfh_get16(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\ + +(uint32_t)(((const uint8_t *)(d))[0]) ) + #endif + + uint32_t sfh_hash(const char * data, int len) + { + uint32_t hash = len, tmp; + int rem; + + if (len <= NULL) return 0; + + rem = len & 3; + len >>= 2; + + /* Main loop */ + for (;len > 0; len--) { + hash += sfh_get16(data); + tmp = (sfh_get16(data+2) << 11) ^ hash; + hash = (hash << 16) ^ tmp; + data += 2*sizeof(uint16_t); + hash += hash >> 11; + } + + /* Handle end cases */ + switch (rem) { + case 3: hash += sfh_get16(data); + hash ^= hash << 16; + hash ^= data[sizeof(uint16_t)] << 18; + hash += hash >> 11; + break; + case 2: hash += sfh_get16(data); + hash ^= hash << 11; + hash += hash >> 17; + break; + case 1: hash += *data; + hash ^= hash << 10; + hash += hash >> 1; + } + + /* Force "avalanching" of final 127 bits */ + hash ^= hash << 3; + hash += hash >> 5; + hash ^= hash << 4; + hash += hash >> 17; + hash ^= hash << 25; + hash += hash >> 6; + + return hash; + } + + +# Reference Implementation + +A reference implementation can be found here: +http://luci.subsignal.org/trac/browser/luci/trunk/libs/lmo/src + +The lmo_po2lmo.c executable implements a *.po to *.lmo conversation utility and lmo_lookup.c is a simple *.lmo test utility. +Lua bindings for lmo are defined in lmo_lualib.c and associated headers. diff --git a/feeds/luci/documentation/LuCI-0.10.md b/feeds/luci/documentation/LuCI-0.10.md new file mode 100644 index 0000000..5db9895 --- /dev/null +++ b/feeds/luci/documentation/LuCI-0.10.md @@ -0,0 +1,202 @@ +[[PageOutline(2-5, Table of Contents, floated)]] + + +This document describes new features and incompatibilities to LuCI 0.9.x. +It is targeted at module authors developing external addons to LuCI. + +# I18N Changes + +## API + +The call conventions for the i18n api changed, there is no dedicated translation +key anymore and the english text is used for lookup instead. This was done to +ease the maintenance of language files. + +Code that uses _translate()'' or ''i18n()_ must be changed as follows: + + + -- old style: + translate("some_text", "Some Text") + translatef("some_format_text", "Some formatted Text: %d", 123) + + -- new style: + translate("Some Text") + translatef("Some formatted Text: %d", 123) + + +Likewise for templates: + + + + <%:some_text Some Text%> + + + <%:Some Text%> + + +If code must support both LuCI 0.9.x and 0.10.x versions, it is suggested to write the calls as follows: + + translate("Some Text", "Some Text") + + +An alternative is wrapping translate() calls into a helper function: + + function tr(key, alt) + return translate(key) or translate(alt) or alt + end + + +... which is used as follows: + + tr("some_key", "Some Text") + + +## Translation File Format + +Translation catalogs are now maintained in *.po format files. During build those get translated +into [*.lmo archives](http://luci.subsignal.org/trac/wiki/Documentation/LMO). + +LuCI ships a [utility script](http://luci.subsignal.org/trac/browser/luci/branches/luci-0.10/build/i18n-lua2po.pl) +in the build/ directory to convert old Lua translation files to the *.po format. The generated *.po files should +be placed in the appropriate subdirectories within the top po/ file in the LuCI source tree. + +### Components built within the LuCI tree + +If components using translations are built along with the LuCI tree, the newly added *.po file are automatically +compiled into *.lmo archives during the build process. In order to bundle the appropriate *.lmo files into the +corresponding *.ipk packages, component Makefiles must include a "PO" variable specifying the files to include. + +Given a module _applications/example/'' which uses ''po/en/example.po'' and ''po/en/example-extra.po_, +the _applications/example/Makefile_ must be changed as follows: + + + PO = example example-extra + + include ../../build/config.mk + include ../../build/module.mk + + +### Standalone components + +Authors who externally package LuCI components must prepare required *.lmo archives themselves. +To convert existing Lua based message catalogs to the *.po format, the build/i18n-lua2po.pl helper script can be used. +In order to convert *.po files into *.lmo files, the standalone "po2lmo" utility must be compiled as follows: + + + $ svn co http://svn.luci.subsignal.org/luci/branches/luci-0.10/libs/lmo + $ cd lmo/ + $ make + $ ./src/po2lmo translations.po translations.lmo + + +Note that at the time of writing, the utility program needs Lua headers installed on the system in order to compile properly. + +# CBI + +## Datatypes + +The server side UVL validation has been dropped to reduce space requirements on the target. +Instead it is possible to define datatypes for CBI widgets now: + + + opt = section:option(Value, "optname", "Title Text") + opt.datatype = "ip4addr" + + +User provided data is validated once on the frontend via JavaScript and on the server side prior to saving it. +A list of possible datatypes can be found in the [luci.cbi.datatypes](http://luci.subsignal.org/trac/browser/luci/branches/luci-0.10/libs/web/luasrc/cbi/datatypes.lua#L26) class. + +## Validation + +Server-sided validator function can now return custom error messages to provide better feedback on invalid input. + + + opt = section:option(Value, "optname", "Title Text") + + function opt.validate(self, value, section) + if input_is_valid(value) then + return value + else + return nil, "The value is invalid because ..." + end + end + + +## Tabs + +It is now possible to break up CBI sections into multiple tabs to better organize longer forms. +The TypedSection and NamedSection classes gained two new functions to define tabs, _tab()'' and ''taboption()_. + + + sct = map:section(TypedSection, "name", "type", "Title Text") + + sct:tab("general", "General Tab Title", "General Tab Description") + sct:tab("advanced", "Advanced Tab Title", "Advanced Tab Description") + + opt = sct:taboption("general", Value, "optname", "Title Text") + ... + + +The _tab()_ function is declares a new tab and takes up to three arguments: + * Internal name of the tab, must be unique within the section + * Title text of the tab + * Optional description text for the tab + +The _taboption()'' function wraps ''option()_ and assigns the option object to the given tab. +It takes up to five arguments: + + * Name of the tab to assign the option to + * Option type, e.g. Value or DynamicList + * Option name + * Title text of the option + * Optional description text of the option + +If tabs are used within a particular section, the _option()_ function must not be used, +doing so results in undefined behaviour. + +## Hooks + +The CBI gained support for _hooks_ which can be used to trigger additional actions during the +life-cycle of a map: + + + map = Map("config", "Title Text") + + function map.on_commit(self) + -- do something if the UCI configuration got committed + end + + +The following hooks are defined: + +|| on_cancel || The user pressed cancel within a multi-step Delegator or a SimpleForm instance || +|| on_init || The CBI is about to render the Map object || +|| on_parse || The CBI is about to read received HTTP form values || +|| on_save, on_before_save || The CBI is about to save modified UCI configuration files || +|| on_after_save || Modified UCI configuration files just got saved +|| on_before_commit || The CBI is about to commit the changes || +|| on_commit, on_after_commit, on_before_apply || Modified configurations got committed and the CBI is about to restart associated services || +|| on_apply, on_after_apply || All changes where completely applied (only works on Map instances with the apply_on_parse attribute set) || + +## Sortable Tables + +TypedSection instances which use the "cbi/tblsection" template may now use a new attribute _sortable_ to allow the user to reorder table rows. + + + sct = map:section(TypedSection, "name", "type", "Title Text") + sct.template = "cbi/tblsection" + sct.sortable = true + + ... + + +# JavaScript + +The LuCI 0.10 branch introduced a new JavaScript file _xhr.js_ which provides support routines for XMLHttpRequest operations. +Each theme must include this file in the area of the document for forms to work correctly. + +It should be included like this: + + + + \ No newline at end of file diff --git a/feeds/luci/documentation/Modules.md b/feeds/luci/documentation/Modules.md new file mode 100644 index 0000000..2897df9 --- /dev/null +++ b/feeds/luci/documentation/Modules.md @@ -0,0 +1,94 @@ +# Categories + +The LuCI modules are divided into several category directories, namely: +* applications (Single applications or plugins for other modules or applications) +* i18n (Translation files) +* libs (Independent libraries) +* modules (Collections of applications) +* themes (Frontend themes) + +Each module goes into a subdirectory of any of this category-directories. + +# Module directory +The contents of a module directory are as follows: + +## Makefile +This is the module's makefile. If the module just contains Lua sourcecode or resources then the following Makefile should suffice. + + include ../../build/config.mk + include ../../build/module.mk + + +If you have C(++) code in your module your Makefile should at least contain the following things. + + include ../../build/config.mk + include ../../build/gccconfig.mk + include ../../build/module.mk + + compile: + # Commands to compile and link your C-code + # and to install them under the dist/ hierarchy + + clean: luaclean + # Commands to clean your compiled objects + + + +## src +The *src* directory is reserved for C sourcecode. + +## luasrc +*luasrc* contains all Lua sourcecode files. These will automatically be stripped or compiled depending on the Make target and are installed in the LuCI installation directory. + +## lua +*lua* is equivalent to _luasrc_ but containing Lua files will be installed in the Lua document root. + +## htdocs +All files under *htdocs* will be copied to the document root of the target webserver. + +## root +All directories and files under *root* will be copied to the installation target as they are. + +## dist +*dist* is reserved for the builder to create a working installation tree that will represent the filesystem on the target machine. +*DO NOT* put any files there as they will get deleted. + +## ipkg +*ipkg* contains IPKG package control files, like _preinst'', ''posinst'', ''prerm'', ''postrm''. ''conffiles_. +See IPKG documentation for details. + + +# OpenWRT feed integration +If you want to add your module to the LuCI OpenWRT feed you have to add several sections to the contrib/package/luci/Makefile. + +For a Web UI applications this is: + +A package description: + + define Package/luci-app-YOURMODULE + $(call Package/luci/webtemplate) + DEPENDS+=+some-package +some-other-package + TITLE:=SHORT DESCRIPTION OF YOURMODULE + endef + + + +A package installation target: + + define Package/luci-app-YOURMODULE/install + $(call Package/luci/install/template,$(1),applications/YOURMODULE) + endef + + +A module build instruction: + + ifneq ($(CONFIG_PACKAGE_luci-app-YOURMODULE),) + PKG_SELECTED_MODULES+=applications/YOURMODULE + endif + + + +A build package call: + + $(eval $(call BuildPackage,luci-app-YOURMODULE)) + diff --git a/feeds/luci/documentation/ModulesHowTo.md b/feeds/luci/documentation/ModulesHowTo.md new file mode 100644 index 0000000..7efed83 --- /dev/null +++ b/feeds/luci/documentation/ModulesHowTo.md @@ -0,0 +1,153 @@ +*Note:* If you plan to integrate your module into LuCI, you should read the [wiki:Documentation/Modules Module Reference] before. + +This tutorial describes how to write your own modules for the LuCI WebUI. +For this tutorial we refer to your LuCI installation directory as *lucidir_' (/usr/lib/lua/luci if you are working with an installed version) and assume your LuCI installation is reachable through your webserver via '_/cgi-bin/luci*. + +If you are working with the development environment replace *lucidir_' with '''''/path/to/your/luci/checkout''/applications/myapplication/luasrc''' (this is a default empty module you can use for your experiments) and your LuCI installation can probably be reached via http://localhost:8080/luci/ after you ran '_make runhttpd*. + + + +# Show me the way (The dispatching process) +To write a module you need to understand the basics of the dispatching process in LuCI. +LuCI uses a dispatching tree that will be built by executing the index-Function of every available controller. +The CGI-environment variable *PATH_INFO* will be used as the path in this dispatching tree, e.g.: /cgi-bin/luci/foo/bar/baz +will be resolved to foo.bar.baz + +To register a function in the dispatching tree, you can use the *entry*-function of _luci.dispatcher_. entry takes 4 arguments (2 are optional): + + entry(path, target, title=nil, order=nil) + + +* *path* is a table that describes the position in the dispatching tree: For example a path of {"foo", "bar", "baz"} would insert your node in foo.bar.baz. +* *target* describes the action that will be taken when a user requests the node. There are several predefined ones of which the 3 most important (call, template, cbi) are described later on on this page +* *title* defines the title that will be visible to the user in the menu (optional) +* *order* is a number with which nodes on the same level will be sorted in the menu (optional) + +You can assign more attributes by manipulating the node table returned by the entry-function. A few example attributes: + +* *i18n* defines which translation file should be automatically loaded when the page gets requested +* *dependent* protects plugins to be called out of their context if a parent node is missing +* *leaf* stops parsing the request at this node and goes no further in the dispatching tree +* *sysauth* requires the user to authenticate with a given system user account + + +# It's all about names (Naming and the module file) +Now that you know the basics about dispatching, we can start writing modules. But before you have to choose the category and name of your new digital child. + +We assume you want to create a new application "myapp" with a module "mymodule". + +So you have to create a new subdirectory *_lucidir''/controller/myapp''' with a file '_mymodule.lua* with the following content: + + module("luci.controller.myapp.mymodule", package.seeall) + + function index() + + end + + +The first line is required for Lua to correctly identify the module and create its scope. +The index-Function will be used to register actions in the dispatching tree. + + + +# Teaching your new child (Actions) +So it is there and has a name but it has no actions. + +We assume you want to reuse your module myapp.mymodule that you begun in the last step. + + +## Actions +Reopen *_lucidir_/controller/myapp/mymodule.lua* and just add a function to it so that its content looks like this example: + + + module("luci.controller.myapp.mymodule", package.seeall) + + function index() + entry({"click", "here", "now"}, call("action_tryme"), "Click here", 10).dependent=false + end + + function action_tryme() + luci.http.prepare_content("text/plain") + luci.http.write("Haha, rebooting now...") + luci.sys.reboot() + end + + +And now type */cgi-bin/luci/click/here/now_' ('_[http://localhost:8080/luci/click/here/now]* if you are using the development environment) in your browser. + +You see these action functions simple have to be added to a dispatching entry. + +As you might or might not know: CGI specification requires you to send a Content-Type header before you can send your content. You will find several shortcuts (like the one used above) as well as redirecting functions in the module *luci.http* + +## Views +If you only want to show the user a text or some interesting familiy photos it may be enough to use a HTML-template. These templates can also include some Lua code but be aware that writing whole office suites by only using these templates might be called "dirty" by other developers. + +Now let's create a little template *_lucidir_/view/myapp-mymodule/helloworld.htm* with the content: + + + <%+header%> +

<%:Hello World%>

+ <%+footer%> + + + +and add the following line to the index-Function of your module file. + + entry({"my", "new", "template"}, template("myapp-mymodule/helloworld"), "Hello world", 20).dependent=false + + +Now type */cgi-bin/luci/my/new/template_' ('_[http://localhost:8080/luci/my/new/template]* if you are using the development environment) in your browser. + +You may notice those fancy <% %>-Tags, these are [wiki:Documentation/Templates|template markups] used by the LuCI template processor. +It is always good to include header and footer at the beginning and end of a template as those create the default design and menu. + +## CBI models +The CBI is one of the uber coolest features of LuCI. It creates a formular based user interface and saves its contents to a specific UCI config file. You only have to describe the structure of the configuration file in a CBI model file and Luci does the rest of the work. This includes generating, parsing and validating a XHTML form and reading and writing the UCI file. + +So let's be serious at least for this paragraph and create a real pratical example *_lucidir_/model/cbi/myapp-mymodule/netifaces.lua* with the following contents: + + + m = Map("network", "Network") -- We want to edit the uci config file /etc/config/network + + s = m:section(TypedSection, "interface", "Interfaces") -- Especially the "interface"-sections + s.addremove = true -- Allow the user to create and remove the interfaces + function s:filter(value) + return value ~= "loopback" and value -- Don't touch loopback + end + s:depends("proto", "static") -- Only show those with "static" + s:depends("proto", "dhcp") -- or "dhcp" as protocol and leave PPPoE and PPTP alone + + p = s:option(ListValue, "proto", "Protocol") -- Creates an element list (select box) + p:value("static", "static") -- Key and value pairs + p:value("dhcp", "DHCP") + p.default = "static" + + s:option(Value, "ifname", "interface", "the physical interface to be used") -- This will give a simple textbox + + s:option(Value, "ipaddr", translate("ip", "IP Address")) -- Ja, das ist eine i18n-Funktion ;-) + + s:option(Value, "netmask", "Netmask"):depends("proto", "static") -- You may remember this "depends" function from above + + mtu = s:option(Value, "mtu", "MTU") + mtu.optional = true -- This one is very optional + + dns = s:option(Value, "dns", "DNS-Server") + dns:depends("proto", "static") + dns.optional = true + function dns:validate(value) -- Now, that's nifty, eh? + return value:match("[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+") -- Returns nil if it doesn't match otherwise returns match + end + + gw = s:option(Value, "gateway", "Gateway") + gw:depends("proto", "static") + gw.rmempty = true -- Remove entry if it is empty + + return m -- Returns the map + + +and of course don't forget to add something like this to your module's index-Function. + + entry({"admin", "network", "interfaces"}, cbi("myapp-mymodule/netifaces"), "Network interfaces", 30).dependent=false + + +There are many more features, see [wiki:Documentation/CBI the CBI reference] and the modules shipped with LuCI. diff --git a/feeds/luci/documentation/Templates.md b/feeds/luci/documentation/Templates.md new file mode 100644 index 0000000..dc42c28 --- /dev/null +++ b/feeds/luci/documentation/Templates.md @@ -0,0 +1,65 @@ +LuCI has a simple regex based template processor which parses HTML-files to Lua functions and allows to store precompiled template files. +The simplest form of a template is just an ordinary HTML-file. It will be printed out to the user as is. + +In LuCI every template is an object with an own scope. It can therefore be instanciated and each instance can has a different scope. As every template processor. LuCI supports several special markups. Those are enclosed in `<% %>`-Tags. + +By adding `-` (dash) right after the opening `<%` every whitespace before the markup will be stripped. Adding a `-` right before the closing `%>` will equivalently strip every whitespace behind the markup. + + +# Builtin functions and markups +## Including Lua code +*Markup:* + + <% code %> + + + +## Writing variables and function values +*Syntax:* + + <% write (value) %> + + +*Short-Markup:* + + <%=value%> + + +## Including templates +*Syntax:* + + <% include (templatename) %> + + +*Short-Markup:* + + <%+templatename%> + + + +## Translating +*Syntax:* + + <%= translate("Text to translate") %> + + + +*Short-Markup:* + + <%:Text to translate%> + + + +## Commenting +*Markup:* + + <%# comment %> + + +# Builtin constants +| Name | Value | +---------|--------- +|`REQUEST_URI`|The current URL (without server part)| +|`controller`|Path to the Luci main dispatcher| +|`resource`|Path to the resource directory| +|`media`|Path to the active theme directory| diff --git a/feeds/luci/documentation/ThemesHowTo.md b/feeds/luci/documentation/ThemesHowTo.md new file mode 100644 index 0000000..ae6f8e0 --- /dev/null +++ b/feeds/luci/documentation/ThemesHowTo.md @@ -0,0 +1,76 @@ +# HowTo: Create Themes +*Note:* You should read the [Module Reference](Modules.md) and the [Template Reference](Templates.md) before. + +We assume you want to call your new theme _mytheme_. Make sure you replace this by your module name every time this is mentionend in this Howto. + + + +# Creating the structure +At first create a new theme directory *themes/_mytheme_*. + +Create a _Makefile_ inside your theme directory with the following content: + + include ../../build/config.mk + include ../../build/module.mk + + +Create the following directory structure inside your theme directory. +* ipkg +* htdocs + * luci-static + * _mytheme_ +* luasrc + * view + * themes + * _mytheme_ +* root + * etc + * uci-defaults + + + +# Designing +Create two LuCI HTML-Templates named _header.htm'' and ''footer.htm'' under *luasrc/view/themes/''mytheme_*. +The _header.htm'' will be included at the beginning of each rendered page and the ''footer.htm_ at the end. +So your _header.htm'' will probably contain a DOCTYPE description, headers, the menu and layout of the page and the ''footer.htm_ will close all remaining open tags and may add a footer bar but hey that's your choice you are the designer ;-). + +Just make sure your _header.htm_ *begins* with the following lines: + + <% + require("luci.http").prepare_content("text/html") + -%> + + +This makes sure your content will be sent to the client with the right content type. Of course you can adapt _text/html_ to your needs. + + +Put any stylesheets, Javascripts, images, ... into *htdocs/luci-static/_mytheme_*. +You should refer to this directory in your header and footer templates as: _<%=media%>''. That means for a stylesheet *htdocs/luci-static/''mytheme_/cascade.css* you would write: + + + + + + +# Making the theme selectable +If you are done with your work there are two last steps to do. +To make your theme OpenWRT-capable and selectable on the settings page you should now create a file *root/etc/uci-defaults/luci-theme-_mytheme_* with the following contents: + + #!/bin/sh + uci batch <<-EOF + set luci.themes.MyTheme=/luci-static/mytheme + commit luci + EOF + + +and another file *ipkg/postinst* with the following content: + + #!/bin/sh + [ -n "${IPKG_INSTROOT}" ] || { + ( . /etc/uci-defaults/luci-theme-mytheme ) && rm -f /etc/uci-defaults/luci-theme-mytheme + } + + +This is some OpenWRT magic to correctly register the template with LuCI when it gets installed. + +That's all. Now send your theme to the LuCI developers to get it into the development repository - if you like. diff --git a/feeds/luci/documentation/api/index.html b/feeds/luci/documentation/api/index.html new file mode 100644 index 0000000..c762b9b --- /dev/null +++ b/feeds/luci/documentation/api/index.html @@ -0,0 +1,435 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ + + +

Modules

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
luci.dispatcher
luci.http
luci.http.protocol
luci.http.protocol.conditionals
luci.http.protocol.date
luci.http.protocol.mime
luci.i18n
luci.ip + LuCI IP calculation and netlink access library.
luci.ip.cidr + IP CIDR Object.
luci.json
luci.jsonc + LuCI JSON parsing and serialization library.
luci.jsonc.parser + LuCI JSON parser instance.
luci.model.ipkg
luci.model.uci
luci.rpcc
luci.rpcc.ruci
luci.sys
luci.sys.init + +LuCI system utilities / init related functions.
luci.sys.iptparser
luci.sys.net + +LuCI system utilities / network related functions.
luci.sys.process + +LuCI system utilities / process related functions.
luci.sys.user + +LuCI system utilities / user related functions.
luci.sys.wifi + +LuCI system utilities / wifi related functions.
luci.util
nixio + General POSIX IO library.
nixio.CHANGELOG + Changes and improvements.
nixio.CryptoHash + Cryptographical Hash and HMAC object.
nixio.File + Large File Object.
nixio.README + General Information.
nixio.Socket + Socket Object.
nixio.TLSContext + Transport Layer Security Context Object.
nixio.TLSSocket + TLS Socket Object.
nixio.UnifiedIO + Unified high-level I/O utility API for Files, Sockets and TLS-Sockets.
nixio.bin + Binary operations and conversion.
nixio.bit + Bitfield operators and mainpulation functions.
nixio.crypto + Cryptographical library.
nixio.fs + Low-level and high-level filesystem manipulation library.
+ + + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/luadoc.css b/feeds/luci/documentation/api/luadoc.css new file mode 100644 index 0000000..f9f9749 --- /dev/null +++ b/feeds/luci/documentation/api/luadoc.css @@ -0,0 +1,285 @@ +body { + margin-left: 1em; + margin-right: 1em; + font-family: arial, helvetica, geneva, sans-serif; + background-color:#ffffff; margin:0px; +} + +code { + font-family: "Andale Mono", monospace; +} + +tt { + font-family: "Andale Mono", monospace; +} + +body, td, th { font-size: 11pt; } + +h1, h2, h3, h4 { margin-left: 0em; } + +textarea, pre, tt { font-size:10pt; } +body, td, th { color:#000000; } +small { font-size:0.85em; } +h1 { font-size:1.5em; } +h2 { font-size:1.25em; } +h3 { font-size:1.15em; } +h4 { font-size:1.06em; } + +a:link { font-weight:bold; color: #004080; text-decoration: none; } +a:visited { font-weight:bold; color: #006699; text-decoration: none; } +a:link:hover { text-decoration:underline; } +hr { color:#cccccc } +img { border-width: 0px; } + + +h3 { padding: 1em 0 0.5em; } + +p { margin-left: 1em; } + +p.name { + font-family: "Andale Mono", monospace; + padding-top: 1em; + margin-left: 0em; +} + +blockquote { margin-left: 3em; } + +pre.example { + background-color: rgb(245, 245, 245); + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-right-style: solid; + border-bottom-style: solid; + border-left-style: solid; + border-top-color: silver; + border-right-color: silver; + border-bottom-color: silver; + border-left-color: silver; + padding: 1em; + margin-left: 1em; + margin-right: 1em; + font-family: "Andale Mono", monospace; + font-size: smaller; +} + + +hr { + margin-left: 0em; + background: #00007f; + border: 0px; + height: 1px; +} + +ul { list-style-type: disc; } + +table.index { border: 1px #00007f; } +table.index td { text-align: left; vertical-align: top; } +table.index ul { padding-top: 0em; margin-top: 0em; } + +table { + border: 1px solid black; + border-collapse: collapse; + margin: 1em auto; +} +th { + border: 1px solid black; + padding: 0.5em; +} +td { + border: 1px solid black; + padding: 0.5em; +} +div.header, div.footer { margin-left: 0em; } + +#container +{ + margin-left: 1em; + margin-right: 1em; + background-color: #f0f0f0; +} + +#product +{ + text-align: center; + border-bottom: 1px solid #cccccc; + background-color: #ffffff; +} + +#product big { + font-size: 2em; +} + +#product_logo +{ +} + +#product_name +{ +} + +#product_description +{ +} + +#main +{ + background-color: #f0f0f0; + border-left: 2px solid #cccccc; +} + +#navigation +{ + float: left; + width: 18em; + margin: 0; + vertical-align: top; + background-color: #f0f0f0; + overflow:visible; +} + +#navigation h1 { + background-color:#e7e7e7; + font-size:1.1em; + color:#000000; + text-align:left; + margin:0px; + padding:0.2em; + border-top:1px solid #dddddd; + border-bottom:1px solid #dddddd; +} + +#navigation ul +{ + font-size:1em; + list-style-type: none; + padding: 0; + margin: 1px; +} + +#navigation li +{ + text-indent: -1em; + margin: 0em 0em 0em 0.5em; + display: block; + padding: 3px 0px 0px 12px; +} + +#navigation li li a +{ + padding: 0px 3px 0px -1em; +} + +#content +{ + margin-left: 18em; + padding: 1em; + border-left: 2px solid #cccccc; + border-right: 2px solid #cccccc; + background-color: #ffffff; +} + +#about +{ + clear: both; + margin: 0; + padding: 5px; + border-top: 2px solid #cccccc; + background-color: #ffffff; +} + +@media print { + body { + font: 12pt "Times New Roman", "TimeNR", Times, serif; + } + a { font-weight:bold; color: #004080; text-decoration: underline; } + + #main { background-color: #ffffff; border-left: 0px; } + #container { margin-left: 2%; margin-right: 2%; background-color: #ffffff; } + + #content { margin-left: 0px; padding: 1em; border-left: 0px; border-right: 0px; background-color: #ffffff; } + + #navigation { display: none; + } + pre.example { + font-family: "Andale Mono", monospace; + font-size: 10pt; + page-break-inside: avoid; + } +} + +table.module_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.module_list td.name { background-color: #f0f0f0; } +table.module_list td.summary { width: 100%; } + +table.file_list +{ + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.file_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.file_list td.name { background-color: #f0f0f0; } +table.file_list td.summary { width: 100%; } + + +table.function_list +{ + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.function_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.function_list td.name { background-color: #f0f0f0; } +table.function_list td.summary { width: 100%; } + + +table.table_list +{ + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.table_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.table_list td.name { background-color: #f0f0f0; } +table.table_list td.summary { width: 100%; } + +dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;} +dl.function dd {padding: 0.5em 0;} +dl.function h3 {margin: 0; font-size: medium;} + +dl.table dt {border-top: 1px solid #ccc; padding-top: 1em;} +dl.table dd {padding-bottom: 1em;} +dl.table h3 {padding: 0; margin: 0; font-size: medium;} + +#TODO: make module_list, file_list, function_list, table_list inherit from a list + diff --git a/feeds/luci/documentation/api/modules/luci.dispatcher.html b/feeds/luci/documentation/api/modules/luci.dispatcher.html new file mode 100644 index 0000000..4ae88fe --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.dispatcher.html @@ -0,0 +1,1151 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.dispatcher

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_ () + +No-op function used to mark translation entries for menu labels.
alias (...) + +Create a redirect to another dispatching node.
arcombine (trg1, trg2) + +Create a combined dispatching target for non argv and argv requests.
assign (path, clone, title, order) + +Clone a node of the dispatching tree to another position.
build_url (...) + +Build the URL relative to the server webroot from given virtual path.
call (name, ...) + +Create a function-call dispatching target.
cbi (model) + +Create a CBI model dispatching target.
createindex () + +Generate the dispatching index using the native file-cache based strategy.
createtree () + +Create the dispatching tree from the index.
dispatch (request) + +Dispatches a LuCI virtual path.
entry (path, target, title, order) + +Create a new dispatching node and define common parameters.
error404 (message) + +Send a 404 error code and render the "error404" template if available.
error500 (message) + +Send a 500 error code and render the "error500" template if available.
firstchild () + +Alias the first (lowest order) page automatically + +
form (model) + +Create a CBI form model dispatching target.
get (...) + +Fetch or create a dispatching node without setting the target module or + +enabling the node.
httpdispatch (request) + +Dispatch an HTTP request.
modifier (func, order) + +Register a tree modifier.
node (...) + +Fetch or create a new dispatching node.
node_childs (node) + +Return a sorted table of visible childs within a given node +
node_visible (node) + +Check whether a dispatch node shall be visible +
rewrite (n, ...) + +Rewrite the first x path values of the request.
template (name) + +Create a template render dispatching target.
translate (text) + +Access the luci.i18n translate() api.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
_ ()
+
+ + +No-op function used to mark translation entries for menu labels. + +This function does not actually translate the given argument but +is used by build/i18n-scan.pl to find translatable entries. + + + + + + + + + + +
+ + + + +
alias (...)
+
+ + +Create a redirect to another dispatching node. + + + +

Parameters

+
    + +
  • + ...: Virtual path destination +
  • + +
+ + + + + + + + +
+ + + + +
arcombine (trg1, trg2)
+
+ + +Create a combined dispatching target for non argv and argv requests. + + + +

Parameters

+
    + +
  • + trg1: Overview Target +
  • + +
  • + trg2: Detail Target +
  • + +
+ + + + + + + + +
+ + + + +
assign (path, clone, title, order)
+
+ + +Clone a node of the dispatching tree to another position. + + + +

Parameters

+
    + +
  • + path: Virtual path destination +
  • + +
  • + clone: Virtual path source +
  • + +
  • + title: Destination node title (optional) +
  • + +
  • + order: Destination node order value (optional) +
  • + +
+ + + + + + +

Return value:

+Dispatching tree node + + + +
+ + + + +
build_url (...)
+
+ + +Build the URL relative to the server webroot from given virtual path. + + + +

Parameters

+
    + +
  • + ...: Virtual path +
  • + +
+ + + + + + +

Return value:

+Relative URL + + + +
+ + + + +
call (name, ...)
+
+ + +Create a function-call dispatching target. + + + +

Parameters

+
    + +
  • + name: Target function of local controller +
  • + +
  • + ...: Additional parameters passed to the function +
  • + +
+ + + + + + + + +
+ + + + +
cbi (model)
+
+ + +Create a CBI model dispatching target. + + + +

Parameters

+
    + +
  • + model: CBI model to be rendered +
  • + +
+ + + + + + + + +
+ + + + +
createindex ()
+
+ + +Generate the dispatching index using the native file-cache based strategy. + + + + + + + + + + + +
+ + + + +
createtree ()
+
+ + +Create the dispatching tree from the index. + +Build the index before if it does not exist yet. + + + + + + + + + + +
+ + + + +
dispatch (request)
+
+ + +Dispatches a LuCI virtual path. + + + +

Parameters

+
    + +
  • + request: Virtual path +
  • + +
+ + + + + + + + +
+ + + + +
entry (path, target, title, order)
+
+ + +Create a new dispatching node and define common parameters. + + + +

Parameters

+
    + +
  • + path: Virtual path +
  • + +
  • + target: Target function to call when dispatched. +
  • + +
  • + title: Destination node title +
  • + +
  • + order: Destination node order value (optional) +
  • + +
+ + + + + + +

Return value:

+Dispatching tree node + + + +
+ + + + +
error404 (message)
+
+ + +Send a 404 error code and render the "error404" template if available. + + + +

Parameters

+
    + +
  • + message: Custom error message (optional) +
  • + +
+ + + + + + +

Return value:

+false + + + +
+ + + + +
error500 (message)
+
+ + +Send a 500 error code and render the "error500" template if available. + + + +

Parameters

+
    + +
  • + message: Custom error message (optional)# +
  • + +
+ + + + + + +

Return value:

+false + + + +
+ + + + +
firstchild ()
+
+ + +Alias the first (lowest order) page automatically + + + + + + + + + + + +
+ + + + +
form (model)
+
+ + +Create a CBI form model dispatching target. + + + +

Parameters

+
    + +
  • + model: CBI form model tpo be rendered +
  • + +
+ + + + + + + + +
+ + + + +
get (...)
+
+ + +Fetch or create a dispatching node without setting the target module or + +enabling the node. + + +

Parameters

+
    + +
  • + ...: Virtual path +
  • + +
+ + + + + + +

Return value:

+Dispatching tree node + + + +
+ + + + +
httpdispatch (request)
+
+ + +Dispatch an HTTP request. + + + +

Parameters

+
    + +
  • + request: LuCI HTTP Request object +
  • + +
+ + + + + + + + +
+ + + + +
modifier (func, order)
+
+ + +Register a tree modifier. + + + +

Parameters

+
    + +
  • + func: Modifier function +
  • + +
  • + order: Modifier order value (optional) +
  • + +
+ + + + + + + + +
+ + + + +
node (...)
+
+ + +Fetch or create a new dispatching node. + + + +

Parameters

+
    + +
  • + ...: Virtual path +
  • + +
+ + + + + + +

Return value:

+Dispatching tree node + + + +
+ + + + +
node_childs (node)
+
+ + +Return a sorted table of visible childs within a given node + + + +

Parameters

+
    + +
  • + node: Dispatch node +
  • + +
+ + + + + + +

Return value:

+Ordered table of child node names + + + +
+ + + + +
node_visible (node)
+
+ + +Check whether a dispatch node shall be visible + + + +

Parameters

+
    + +
  • + node: Dispatch node +
  • + +
+ + + + + + +

Return value:

+Boolean indicating whether the node should be visible + + + +
+ + + + +
rewrite (n, ...)
+
+ + +Rewrite the first x path values of the request. + + + +

Parameters

+
    + +
  • + n: Number of path values to replace +
  • + +
  • + ...: Virtual path to replace removed path values with +
  • + +
+ + + + + + + + +
+ + + + +
template (name)
+
+ + +Create a template render dispatching target. + + + +

Parameters

+
    + +
  • + name: Template to be rendered +
  • + +
+ + + + + + + + +
+ + + + +
translate (text)
+
+ + +Access the luci.i18n translate() api. + + + +

Parameters

+
    + +
  • + text: Text to translate +
  • + +
+ + + + + + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.http.html b/feeds/luci/documentation/api/modules/luci.http.html new file mode 100644 index 0000000..ea04fc2 --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.http.html @@ -0,0 +1,854 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.http

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
build_querystring (table) + +Create a querystring out of a table of key - value pairs.
close () + +Close the HTTP-Connection.
content () + +Return the request content if the request was of unknown type.
formvalue (name, noparse) + +Get a certain HTTP input value or a table of all input values.
formvaluetable (prefix) + +Get a table of all HTTP input values with a certain prefix.
getcookie (name) + +Get the value of a certain HTTP-Cookie.
getenv (name) + +Get the value of a certain HTTP environment variable + +or the environment table itself.
header (key, value) + +Send a HTTP-Header.
prepare_content (mime) + +Set the mime type of following content data.
redirect (url) + +Redirects the client to a new URL and closes the connection.
setfilehandler (callback) + +Set a handler function for incoming user file uploads.
source () + +Get the RAW HTTP input source +
splice (fp, size) + +Splice data from a filedescriptor to the client.
status (code, message) + +Set the HTTP status code and status message.
write (content, src_err) + +Send a chunk of content data to the client.
write_json (data) + +Send the given data as JSON encoded string.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
build_querystring (table)
+
+ + +Create a querystring out of a table of key - value pairs. + + + +

Parameters

+
    + +
  • + table: Query string source table +
  • + +
+ + + + + + +

Return value:

+Encoded HTTP query string + + + +
+ + + + +
close ()
+
+ + +Close the HTTP-Connection. + + + + + + + + + + + +
+ + + + +
content ()
+
+ + +Return the request content if the request was of unknown type. + + + + + + + + +

Return values:

+
    + +
  1. HTTP request body + +
  2. HTTP request body length + +
+ + + +
+ + + + +
formvalue (name, noparse)
+
+ + +Get a certain HTTP input value or a table of all input values. + + + +

Parameters

+
    + +
  • + name: Name of the GET or POST variable to fetch +
  • + +
  • + noparse: Don't parse POST data before getting the value +
  • + +
+ + + + + + +

Return value:

+HTTP input value or table of all input value + + + +
+ + + + +
formvaluetable (prefix)
+
+ + +Get a table of all HTTP input values with a certain prefix. + + + +

Parameters

+
    + +
  • + prefix: Prefix +
  • + +
+ + + + + + +

Return value:

+Table of all HTTP input values with given prefix + + + +
+ + + + +
getcookie (name)
+
+ + +Get the value of a certain HTTP-Cookie. + + + +

Parameters

+
    + +
  • + name: Cookie Name +
  • + +
+ + + + + + +

Return value:

+String containing cookie data + + + +
+ + + + +
getenv (name)
+
+ + +Get the value of a certain HTTP environment variable + +or the environment table itself. + + +

Parameters

+
    + +
  • + name: Environment variable +
  • + +
+ + + + + + +

Return value:

+HTTP environment value or environment table + + + +
+ + + + +
header (key, value)
+
+ + +Send a HTTP-Header. + + + +

Parameters

+
    + +
  • + key: Header key +
  • + +
  • + value: Header value +
  • + +
+ + + + + + + + +
+ + + + +
prepare_content (mime)
+
+ + +Set the mime type of following content data. + + + +

Parameters

+
    + +
  • + mime: Mimetype of following content +
  • + +
+ + + + + + + + +
+ + + + +
redirect (url)
+
+ + +Redirects the client to a new URL and closes the connection. + + + +

Parameters

+
    + +
  • + url: Target URL +
  • + +
+ + + + + + + + +
+ + + + +
setfilehandler (callback)
+
+ + +Set a handler function for incoming user file uploads. + + + +

Parameters

+
    + +
  • + callback: Handler function +
  • + +
+ + + + + + + + +
+ + + + +
source ()
+
+ + +Get the RAW HTTP input source + + + + + + + + +

Return value:

+HTTP LTN12 source + + + +
+ + + + +
splice (fp, size)
+
+ + +Splice data from a filedescriptor to the client. + + + +

Parameters

+
    + +
  • + fp: File descriptor +
  • + +
  • + size: Bytes to splice (optional) +
  • + +
+ + + + + + + + +
+ + + + +
status (code, message)
+
+ + +Set the HTTP status code and status message. + + + +

Parameters

+
    + +
  • + code: Status code +
  • + +
  • + message: Status message +
  • + +
+ + + + + + + + +
+ + + + +
write (content, src_err)
+
+ + +Send a chunk of content data to the client. + +This function is as a valid LTN12 sink. +If the content chunk is nil this function will automatically invoke close. + + +

Parameters

+
    + +
  • + content: Content chunk +
  • + +
  • + src_err: Error object from source (optional) +
  • + +
+ + + + + + + + +

See also:

+ + +
+ + + + +
write_json (data)
+
+ + +Send the given data as JSON encoded string. + + + +

Parameters

+
    + +
  • + data: Data to send +
  • + +
+ + + + + + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.http.protocol.conditionals.html b/feeds/luci/documentation/api/modules/luci.http.protocol.conditionals.html new file mode 100644 index 0000000..9728815 --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.http.protocol.conditionals.html @@ -0,0 +1,556 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.http.protocol.conditionals

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
if_match (req, stat) + +14.24 / If-Match + +Test whether the given message object contains an "If-Match" header and +compare it against the given stat object.
if_modified_since (req, stat) + +14.25 / If-Modified-Since + +Test whether the given message object contains an "If-Modified-Since" header +and compare it against the given stat object.
if_none_match (req, stat) + +14.26 / If-None-Match + +Test whether the given message object contains an "If-None-Match" header and +compare it against the given stat object.
if_range (req, stat) + +14.27 / If-Range + +The If-Range header is currently not implemented due to the lack of general +byte range stuff in luci.http.protocol .
if_unmodified_since (req, stat) + +14.28 / If-Unmodified-Since + +Test whether the given message object contains an "If-Unmodified-Since" +header and compare it against the given stat object.
mk_etag (stat) + +Implement 14.19 / ETag.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
if_match (req, stat)
+
+ + +14.24 / If-Match + +Test whether the given message object contains an "If-Match" header and +compare it against the given stat object. + + +

Parameters

+
    + +
  • + req: HTTP request message object +
  • + +
  • + stat: A file.stat object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating whether the precondition is ok + +
  2. Alternative status code if the precondition failed + +
+ + + +
+ + + + +
if_modified_since (req, stat)
+
+ + +14.25 / If-Modified-Since + +Test whether the given message object contains an "If-Modified-Since" header +and compare it against the given stat object. + + +

Parameters

+
    + +
  • + req: HTTP request message object +
  • + +
  • + stat: A file.stat object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating whether the precondition is ok + +
  2. Alternative status code if the precondition failed + +
  3. Table containing extra HTTP headers if the precondition failed + +
+ + + +
+ + + + +
if_none_match (req, stat)
+
+ + +14.26 / If-None-Match + +Test whether the given message object contains an "If-None-Match" header and +compare it against the given stat object. + + +

Parameters

+
    + +
  • + req: HTTP request message object +
  • + +
  • + stat: A file.stat object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating whether the precondition is ok + +
  2. Alternative status code if the precondition failed + +
  3. Table containing extra HTTP headers if the precondition failed + +
+ + + +
+ + + + +
if_range (req, stat)
+
+ + +14.27 / If-Range + +The If-Range header is currently not implemented due to the lack of general +byte range stuff in luci.http.protocol . This function will always return +false, 412 to indicate a failed precondition. + + +

Parameters

+
    + +
  • + req: HTTP request message object +
  • + +
  • + stat: A file.stat object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating whether the precondition is ok + +
  2. Alternative status code if the precondition failed + +
+ + + +
+ + + + +
if_unmodified_since (req, stat)
+
+ + +14.28 / If-Unmodified-Since + +Test whether the given message object contains an "If-Unmodified-Since" +header and compare it against the given stat object. + + +

Parameters

+
    + +
  • + req: HTTP request message object +
  • + +
  • + stat: A file.stat object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating whether the precondition is ok + +
  2. Alternative status code if the precondition failed + +
+ + + +
+ + + + +
mk_etag (stat)
+
+ + +Implement 14.19 / ETag. + + + +

Parameters

+
    + +
  • + stat: A file.stat structure +
  • + +
+ + + + + + +

Return value:

+String containing the generated tag suitable for ETag headers + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.http.protocol.date.html b/feeds/luci/documentation/api/modules/luci.http.protocol.date.html new file mode 100644 index 0000000..d89a723 --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.http.protocol.date.html @@ -0,0 +1,410 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.http.protocol.date

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + +
compare (d1, d2) + +Compare two dates which can either be unix epoch times or HTTP date strings.
to_http (time) + +Convert the given unix epoch time to valid HTTP date string.
to_unix (data) + +Parse given HTTP date string and convert it to unix epoch time.
tz_offset (tz) + +Return the time offset in seconds between the UTC and given time zone.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
compare (d1, d2)
+
+ + +Compare two dates which can either be unix epoch times or HTTP date strings. + + + +

Parameters

+
    + +
  • + d1: The first date or epoch time to compare +
  • + +
  • + d2: The first date or epoch time to compare +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. -1 - if d1 is lower then d2 + +
  2. 0 - if both dates are equal + +
  3. 1 - if d1 is higher then d2 + +
+ + + +
+ + + + +
to_http (time)
+
+ + +Convert the given unix epoch time to valid HTTP date string. + + + +

Parameters

+
    + +
  • + time: Unix epoch time +
  • + +
+ + + + + + +

Return value:

+String containing the formatted date + + + +
+ + + + +
to_unix (data)
+
+ + +Parse given HTTP date string and convert it to unix epoch time. + + + +

Parameters

+
    + +
  • + data: String containing the date +
  • + +
+ + + + + + +

Return value:

+Unix epoch time + + + +
+ + + + +
tz_offset (tz)
+
+ + +Return the time offset in seconds between the UTC and given time zone. + + + +

Parameters

+
    + +
  • + tz: Symbolic or numeric timezone specifier +
  • + +
+ + + + + + +

Return value:

+Time offset to UTC in seconds + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.http.protocol.html b/feeds/luci/documentation/api/modules/luci.http.protocol.html new file mode 100644 index 0000000..57063bb --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.http.protocol.html @@ -0,0 +1,753 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.http.protocol

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
header_source (sock) + +Creates a ltn12 source from the given socket.
mimedecode_message_body (src, msg, filecb) + +Decode a mime encoded http message body with multipart/form-data + +Content-Type.
parse_message_body (src, msg, filecb) + +Try to extract and decode a http message body from the given ltn12 source.
parse_message_header (src) + +Try to extract an http message header including information like protocol + +version, message headers and resulting CGI environment variables from the +given ltn12 source.
urldecode (str, no_plus) + +Decode an urlencoded string - optionally without decoding + +the "+" sign to " " - and return the decoded string.
urldecode_message_body (src, msg) + +Decode an urlencoded http message body with application/x-www-urlencoded + +Content-Type.
urldecode_params (url, tbl) + +Extract and split urlencoded data pairs, separated bei either "&" or ";" + +from given url or string.
urlencode (str) + +Encode given string to x-www-urlencoded format.
urlencode_params (tbl) + +Encode each key-value-pair in given table to x-www-urlencoded format, + +separated by "&".
+ + + + + + +
+
+ + +

Functions

+
+ + + +
header_source (sock)
+
+ + +Creates a ltn12 source from the given socket. The source will return it's + +data line by line with the trailing \r\n stripped of. + + +

Parameters

+
    + +
  • + sock: Readable network socket +
  • + +
+ + + + + + +

Return value:

+Ltn12 source function + + + +
+ + + + +
mimedecode_message_body (src, msg, filecb)
+
+ + +Decode a mime encoded http message body with multipart/form-data + +Content-Type. Stores all extracted data associated with its parameter name +in the params table within the given message object. Multiple parameter +values are stored as tables, ordinary ones as strings. +If an optional file callback function is given then it is feeded with the +file contents chunk by chunk and only the extracted file name is stored +within the params table. The callback function will be called subsequently +with three arguments: + o Table containing decoded (name, file) and raw (headers) mime header data + o String value containing a chunk of the file data + o Boolean which indicates wheather the current chunk is the last one (eof) + + +

Parameters

+
    + +
  • + src: Ltn12 source function +
  • + +
  • + msg: HTTP message object +
  • + +
  • + filecb: File callback function (optional) +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Value indicating successful operation (not nil means "ok") + +
  2. String containing the error if unsuccessful + +
+ + + +

See also:

+ + +
+ + + + +
parse_message_body (src, msg, filecb)
+
+ + +Try to extract and decode a http message body from the given ltn12 source. + +This function will examine the Content-Type within the given message object +to select the appropriate content decoder. +Currently the application/x-www-urlencoded and application/form-data +mime types are supported. If the encountered content encoding can't be +handled then the whole message body will be stored unaltered as "content" +property within the given message object. + + +

Parameters

+
    + +
  • + src: Ltn12 source function +
  • + +
  • + msg: HTTP message object +
  • + +
  • + filecb: File data callback (optional, see mimedecode_message_body()) +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Value indicating successful operation (not nil means "ok") + +
  2. String containing the error if unsuccessful + +
+ + + +

See also:

+ + +
+ + + + +
parse_message_header (src)
+
+ + +Try to extract an http message header including information like protocol + +version, message headers and resulting CGI environment variables from the +given ltn12 source. + + +

Parameters

+
    + +
  • + src: Ltn12 source function +
  • + +
+ + + + + + +

Return value:

+HTTP message object + + + +

See also:

+ + +
+ + + + +
urldecode (str, no_plus)
+
+ + +Decode an urlencoded string - optionally without decoding + +the "+" sign to " " - and return the decoded string. + + +

Parameters

+
    + +
  • + str: Input string in x-www-urlencoded format +
  • + +
  • + no_plus: Don't decode "+" signs to spaces +
  • + +
+ + + + + + +

Return value:

+The decoded string + + + +

See also:

+ + +
+ + + + +
urldecode_message_body (src, msg)
+
+ + +Decode an urlencoded http message body with application/x-www-urlencoded + +Content-Type. Stores all extracted data associated with its parameter name +in the params table within the given message object. Multiple parameter +values are stored as tables, ordinary ones as strings. + + +

Parameters

+
    + +
  • + src: Ltn12 source function +
  • + +
  • + msg: HTTP message object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Value indicating successful operation (not nil means "ok") + +
  2. String containing the error if unsuccessful + +
+ + + +

See also:

+ + +
+ + + + +
urldecode_params (url, tbl)
+
+ + +Extract and split urlencoded data pairs, separated bei either "&" or ";" + +from given url or string. Returns a table with urldecoded values. +Simple parameters are stored as string values associated with the parameter +name within the table. Parameters with multiple values are stored as array +containing the corresponding values. + + +

Parameters

+
    + +
  • + url: The url or string which contains x-www-urlencoded form data +
  • + +
  • + tbl: Use the given table for storing values (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing the urldecoded parameters + + + +

See also:

+ + +
+ + + + +
urlencode (str)
+
+ + +Encode given string to x-www-urlencoded format. + + + +

Parameters

+
    + +
  • + str: String to encode +
  • + +
+ + + + + + +

Return value:

+String containing the encoded data + + + +

See also:

+ + +
+ + + + +
urlencode_params (tbl)
+
+ + +Encode each key-value-pair in given table to x-www-urlencoded format, + +separated by "&". Tables are encoded as parameters with multiple values by +repeating the parameter name with each value. + + +

Parameters

+
    + +
  • + tbl: Table with the values +
  • + +
+ + + + + + +

Return value:

+String containing encoded values + + + +

See also:

+ + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.http.protocol.mime.html b/feeds/luci/documentation/api/modules/luci.http.protocol.mime.html new file mode 100644 index 0000000..0b5ce0c --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.http.protocol.mime.html @@ -0,0 +1,326 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.http.protocol.mime

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + +
to_ext (mimetype) + +Return corresponding extension for a given mime type or nil if the + +given mime-type is unknown.
to_mime (filename) + +Extract extension from a filename and return corresponding mime-type or + +"application/octet-stream" if the extension is unknown.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
to_ext (mimetype)
+
+ + +Return corresponding extension for a given mime type or nil if the + +given mime-type is unknown. + + +

Parameters

+
    + +
  • + mimetype: The mimetype to retrieve the extension from +
  • + +
+ + + + + + +

Return value:

+String with the extension or nil for unknown type + + + +
+ + + + +
to_mime (filename)
+
+ + +Extract extension from a filename and return corresponding mime-type or + +"application/octet-stream" if the extension is unknown. + + +

Parameters

+
    + +
  • + filename: The filename for which the mime type is guessed +
  • + +
+ + + + + + +

Return value:

+String containign the determined mime type + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.i18n.html b/feeds/luci/documentation/api/modules/luci.i18n.html new file mode 100644 index 0000000..0111cb2 --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.i18n.html @@ -0,0 +1,564 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.i18n

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
clear () + +Clear the translation table.
load (file, lang, force) + +Load a translation and copy its data into the translation table.
loadc (file, force) + +Load a translation file using the default translation language.
setlanguage (lang) + +Set the context default translation language.
string (key) + +Return the translated value for a specific translation key + +and ensure that the returned value is a Lua string value.
stringf (key, ...) + +Return the translated value for a specific translation key and use it as sprintf pattern.
translate (key) + +Return the translated value for a specific translation key.
translatef (key, ...) + +Return the translated value for a specific translation key and use it as sprintf pattern.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
clear ()
+
+ + +Clear the translation table. + + + + + + + + + + + +
+ + + + +
load (file, lang, force)
+
+ + +Load a translation and copy its data into the translation table. + + + +

Parameters

+
    + +
  • + file: Language file +
  • + +
  • + lang: Two-letter language code +
  • + +
  • + force: Force reload even if already loaded (optional) +
  • + +
+ + + + + + +

Return value:

+Success status + + + +
+ + + + +
loadc (file, force)
+
+ + +Load a translation file using the default translation language. + +Alternatively load the translation of the fallback language. + + +

Parameters

+
    + +
  • + file: Language file +
  • + +
  • + force: Force reload even if already loaded (optional) +
  • + +
+ + + + + + + + +
+ + + + +
setlanguage (lang)
+
+ + +Set the context default translation language. + + + +

Parameters

+
    + +
  • + lang: Two-letter language code +
  • + +
+ + + + + + + + +
+ + + + +
string (key)
+
+ + +Return the translated value for a specific translation key + +and ensure that the returned value is a Lua string value. +This is the same as calling tostring(translate(...)) + + +

Parameters

+
    + +
  • + key: Default translation text +
  • + +
+ + + + + + +

Return value:

+Translated string + + + +
+ + + + +
stringf (key, ...)
+
+ + +Return the translated value for a specific translation key and use it as sprintf pattern. + +Ensure that the returned value is a Lua string value. +This is the same as calling tostring(translatef(...)) + + +

Parameters

+
    + +
  • + key: Default translation text +
  • + +
  • + ...: Format parameters +
  • + +
+ + + + + + +

Return value:

+Translated and formatted string + + + +
+ + + + +
translate (key)
+
+ + +Return the translated value for a specific translation key. + + + +

Parameters

+
    + +
  • + key: Default translation text +
  • + +
+ + + + + + +

Return value:

+Translated string + + + +
+ + + + +
translatef (key, ...)
+
+ + +Return the translated value for a specific translation key and use it as sprintf pattern. + + + +

Parameters

+
    + +
  • + key: Default translation text +
  • + +
  • + ...: Format parameters +
  • + +
+ + + + + + +

Return value:

+Translated and formatted string + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.ip.cidr.html b/feeds/luci/documentation/api/modules/luci.ip.cidr.html new file mode 100644 index 0000000..ce8c567 --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.ip.cidr.html @@ -0,0 +1,1269 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.ip.cidr

+ +

+ IP CIDR Object. + Represents an IPv4 or IPv6 address range.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cidr:is4 () + +Checks whether the CIDR instance is an IPv4 address range +
cidr:is4rfc1918 () + +Checks whether the CIDR instance is within the private RFC1918 address space +
cidr:is4linklocal () + +Checks whether the CIDR instance is an IPv4 link local (Zeroconf) address +
cidr:is6 () + +Checks whether the CIDR instance is an IPv6 address range +
cidr:is6linklocal () + +Checks whether the CIDR instance is an IPv6 link local address +
cidr:is6mapped4 () + +Checks whether the CIDR instance is an IPv6 mapped IPv4 address +
cidr:lower (addr) + +Checks whether this CIDR instance is lower than the given argument.
cidr:higher (addr) + +Checks whether this CIDR instance is higher than the given argument.
cidr:equal (addr) + +Checks whether this CIDR instance is equal to the given argument.
cidr:prefix (mask) + +Get or set prefix size of CIDR instance.
cidr:network (mask) + +Derive network address of CIDR instance.
cidr:host () + +Derive host address of CIDR instance.
cidr:mask (mask) + +Derive netmask of CIDR instance.
cidr:broadcast (mask) + +Derive broadcast address of CIDR instance.
cidr:mapped4 () + +Derive mapped IPv4 address of CIDR instance.
cidr:contains (addr) + +Test whether CIDR contains given range.
cidr:add (amount, inplace) + +Add given amount to CIDR instance.
cidr:sub (amount, inplace) + +Subtract given amount from CIDR instance.
cidr:minhost () + +Calculate the lowest possible host address within this CIDR instance.
cidr:maxhost () + +Calculate the highest possible host address within this CIDR instance.
cidr:string () + +Convert CIDR instance into string representation.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
cidr:is4 ()
+
+ + +Checks whether the CIDR instance is an IPv4 address range + + + + + + + + +

Return value:

+true if the CIDR is an IPv4 range, else false + + + +

See also:

+ + +
+ + + + +
cidr:is4rfc1918 ()
+
+ + +Checks whether the CIDR instance is within the private RFC1918 address space + + + + + + +

Usage:

+
local addr = luci.ip.new("192.168.45.2/24") 
+if addr:is4rfc1918() then 
+	print("Is a private address") 
+end
+ + + +

Return value:

+true if the entire range of this CIDR lies within one of + the ranges 10.0.0.0-10.255.255.255, + 172.16.0.0-172.31.0.0 or + 192.168.0.0-192.168.255.255, else false. + + + +
+ + + + +
cidr:is4linklocal ()
+
+ + +Checks whether the CIDR instance is an IPv4 link local (Zeroconf) address + + + + + + +

Usage:

+
local addr = luci.ip.new("169.254.34.125") 
+if addr:is4linklocal() then 
+	print("Is a zeroconf address") 
+end
+ + + +

Return value:

+true if the entire range of this CIDR lies within the range + the range 169.254.0.0-169.254.255.255, else false. + + + +
+ + + + +
cidr:is6 ()
+
+ + +Checks whether the CIDR instance is an IPv6 address range + + + + + + + + +

Return value:

+true if the CIDR is an IPv6 range, else false + + + +

See also:

+ + +
+ + + + +
cidr:is6linklocal ()
+
+ + +Checks whether the CIDR instance is an IPv6 link local address + + + + + + +

Usage:

+
local addr = luci.ip.new("fe92:53a:3216:af01:221:63ff:fe75:aa17/64") 
+if addr:is6linklocal() then 
+	print("Is a linklocal address") 
+end
+ + + +

Return value:

+true if the entire range of this CIDR lies within the range + the fe80::/10 range, else false. + + + +
+ + + + +
cidr:is6mapped4 ()
+
+ + +Checks whether the CIDR instance is an IPv6 mapped IPv4 address + + + + + + +

Usage:

+
local addr = luci.ip.new("::ffff:192.168.1.1") 
+if addr:is6mapped4() then 
+	print("Is a mapped IPv4 address") 
+end
+ + + +

Return value:

+true if the address is an IPv6 mapped IPv4 address in the + form ::ffff:1.2.3.4. + + + +
+ + + + +
cidr:lower (addr)
+
+ + +Checks whether this CIDR instance is lower than the given argument. +The comparisation follows these rules: +
  • An IPv4 address is always lower than an IPv6 address
  • +
  • Prefix sizes are ignored
+ + + +

Parameters

+
    + +
  • + addr: A luci.ip.cidr instance or a string convertable by + luci.ip.new() to compare against. +
  • + +
+ + + + +

Usage:

+
local addr = luci.ip.new("192.168.1.1") 
+print(addr:lower(addr)) -- false 
+print(addr:lower("10.10.10.10/24")) -- false 
+print(addr:lower(luci.ip.new("::1"))) -- true 
+print(addr:lower(luci.ip.new("192.168.200.1"))) -- true
+ + + +

Return value:

+true if this CIDR is lower than the given address, + else false. + + + +

See also:

+ + +
+ + + + +
cidr:higher (addr)
+
+ + +Checks whether this CIDR instance is higher than the given argument. +The comparisation follows these rules: +
  • An IPv4 address is always lower than an IPv6 address
  • +
  • Prefix sizes are ignored
+ + + +

Parameters

+
    + +
  • + addr: A luci.ip.cidr instance or a string convertable by + luci.ip.new() to compare against. +
  • + +
+ + + + +

Usage:

+
local addr = luci.ip.new("192.168.1.1") 
+print(addr:higher(addr)) -- false 
+print(addr:higher("10.10.10.10/24")) -- true 
+print(addr:higher(luci.ip.new("::1"))) -- false 
+print(addr:higher(luci.ip.new("192.168.200.1"))) -- false
+ + + +

Return value:

+true if this CIDR is higher than the given address, + else false. + + + +

See also:

+ + +
+ + + + +
cidr:equal (addr)
+
+ + +Checks whether this CIDR instance is equal to the given argument. + + + +

Parameters

+
    + +
  • + addr: A luci.ip.cidr instance or a string convertable by + luci.ip.new() to compare against. +
  • + +
+ + + + +

Usage:

+
local addr = luci.ip.new("192.168.1.1") 
+print(addr:equal(addr)) -- true 
+print(addr:equal("192.168.1.1")) -- true 
+print(addr:equal(luci.ip.new("::1"))) -- false 
+ 
+local addr6 = luci.ip.new("::1") 
+print(addr6:equal("0:0:0:0:0:0:0:1/64")) -- true 
+print(addr6:equal(luci.ip.new("fe80::221:63ff:fe75:aa17"))) -- false
+ + + +

Return value:

+true if this CIDR is equal to the given address, + else false. + + + +

See also:

+ + +
+ + + + +
cidr:prefix (mask)
+
+ + +Get or set prefix size of CIDR instance. +If the optional mask parameter is given, the prefix size of this CIDR is altered +else the current prefix size is returned. + + + +

Parameters

+
    + +
  • + mask: Either a number containing the number of bits (0..32 + for IPv4, 0..128 for IPv6) or a string containing a valid + netmask (optional) +
  • + +
+ + + + +

Usage:

+
local range = luci.ip.new("192.168.1.1/255.255.255.0") 
+print(range:prefix()) -- 24 
+ 
+range:prefix(16) 
+print(range:prefix()) -- 16 
+ 
+range:prefix("255.255.255.255") 
+print(range:prefix()) -- 32
+ + + +

Return value:

+Bit count of the current prefix size + + + +
+ + + + +
cidr:network (mask)
+
+ + +Derive network address of CIDR instance. + +Returns a new CIDR instance representing the network address of this instance +with all host parts masked out. The used prefix size can be overridden by the +optional mask parameter. + + + +

Parameters

+
    + +
  • + mask: Either a number containing the number of bits (0..32 + for IPv4, 0..128 for IPv6) or a string containing a valid + netmask (optional) +
  • + +
+ + + + +

Usage:

+
local range = luci.ip.new("192.168.62.243/255.255.0.0") 
+print(range:network())                -- "192.168.0.0" 
+print(range:network(24))              -- "192.168.62.0" 
+print(range:network("255.255.255.0")) -- "192.168.62.0" 
+ 
+local range6 = luci.ip.new("fd9b:62b3:9cc5:0:221:63ff:fe75:aa17/64") 
+print(range6:network())               -- "fd9b:62b3:9cc5::"
+ + + +

Return value:

+CIDR instance representing the network address + + + +
+ + + + +
cidr:host ()
+
+ + +Derive host address of CIDR instance. + +This function essentially constructs a copy of this CIDR with the prefix size +set to 32 for IPv4 and 128 for IPv6. + + + + + + +

Usage:

+
local range = luci.ip.new("172.19.37.45/16") 
+print(range)        -- "172.19.37.45/16" 
+print(range:host()) -- "172.19.37.45"
+ + + +

Return value:

+CIDR instance representing the host address + + + +
+ + + + +
cidr:mask (mask)
+
+ + +Derive netmask of CIDR instance. + +Constructs a CIDR instance representing the netmask of this instance. The used +prefix size can be overridden by the optional mask parameter. + + + +

Parameters

+
    + +
  • + mask: Either a number containing the number of bits (0..32 + for IPv4, 0..128 for IPv6) or a string containing a valid + netmask (optional) +
  • + +
+ + + + +

Usage:

+
local range = luci.ip.new("172.19.37.45/16") 
+print(range:mask())            -- "255.255.0.0" 
+print(range:mask(24))          -- "255.255.255.0" 
+print(range:mask("255.0.0.0")) -- "255.0.0.0"
+ + + +

Return value:

+CIDR instance representing the netmask + + + +
+ + + + +
cidr:broadcast (mask)
+
+ + +Derive broadcast address of CIDR instance. + +Constructs a CIDR instance representing the broadcast address of this instance. +The used prefix size can be overridden by the optional mask parameter. + +This function has no effect on IPv6 instances, it will return nothing in this +case. + + + +

Parameters

+
    + +
  • + mask: Either a number containing the number of bits (0..32 + for IPv4, 0..128 for IPv6) or a string containing a valid + netmask (optional) +
  • + +
+ + + + +

Usage:

+
local range = luci.ip.new("172.19.37.45/16") 
+print(range:broadcast())            -- "172.19.255.255" 
+print(range:broadcast(24))          -- "172.19.37.255" 
+print(range:broadcast("255.0.0.0")) -- "172.255.255.255"
+ + + +

Return value:

+Return a new CIDR instance representing the broadcast address if this + instance is an IPv4 range, else return nothing. + + + +
+ + + + +
cidr:mapped4 ()
+
+ + +Derive mapped IPv4 address of CIDR instance. + +Constructs a CIDR instance representing the IPv4 address of the IPv6 mapped +IPv4 address in this instance. + +This function has no effect on IPv4 instances or IPv6 instances which are not a +mapped address, it will return nothing in this case. + + + + + + +

Usage:

+
local addr = luci.ip.new("::ffff:172.16.19.1") 
+print(addr:mapped4()) -- "172.16.19.1"
+ + + +

Return value:

+Return a new CIDR instance representing the IPv4 address if this + instance is an IPv6 mapped IPv4 address, else return nothing. + + + +
+ + + + +
cidr:contains (addr)
+
+ + +Test whether CIDR contains given range. + + + +

Parameters

+
    + +
  • + addr: A luci.ip.cidr instance or a string convertable by + luci.ip.new() to test. +
  • + +
+ + + + +

Usage:

+
local range = luci.ip.new("10.24.0.0/255.255.0.0") 
+print(range:contains("10.24.5.1"))  -- true 
+print(range:contains("::1"))        -- false 
+print(range:contains("10.0.0.0/8")) -- false 
+ 
+local range6 = luci.ip.new("fe80::/10") 
+print(range6:contains("fe80::221:63f:fe75:aa17/64"))         -- true 
+print(range6:contains("fd9b:6b3:c5:0:221:63f:fe75:aa17/64")) -- false
+ + + +

Return value:

+true if this instance fully contains the given address else + false. + + + +
+ + + + +
cidr:add (amount, inplace)
+
+ + +Add given amount to CIDR instance. If the result would overflow the maximum +address space, the result is set to the highest possible address. + + + +

Parameters

+
    + +
  • + amount: A numeric value between 0 and 0xFFFFFFFF, a + luci.ip.cidr instance or a string convertable by + luci.ip.new(). +
  • + +
  • + inplace: If true, modify this instance instead of returning + a new derived CIDR instance. +
  • + +
+ + + + +

Usage:

+
local addr = luci.ip.new("192.168.1.1/24") 
+print(addr:add(250))         -- "192.168.1.251/24" 
+print(addr:add("0.0.99.0"))  -- "192.168.100.1/24" 
+ 
+addr:add(256, true)          -- true 
+print(addr)                  -- "192.168.2.1/24 
+ 
+addr:add("255.0.0.0", true)  -- false (overflow) 
+print(addr)                  -- "255.255.255.255/24 
+ 
+local addr6 = luci.ip.new("fe80::221:63f:fe75:aa17/64") 
+print(addr6:add(256))        -- "fe80::221:63f:fe75:ab17/64" 
+print(addr6:add("::ffff:0")) -- "fe80::221:640:fe74:aa17/64" 
+ 
+addr:add(256, true)          -- true 
+print(addr)                  -- "fe80::221:63f:fe75:ab17/64 
+ 
+addr:add("ffff::", true)     -- false (overflow) 
+print(addr)                  -- "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/64"
+ + + +

Return value:

+
    +
  • When adding inplace: Return true if the addition succeeded + or false when the addition overflowed.
  • +
  • When deriving new CIDR: Return new instance representing the value of + this instance plus the added amount or the highest possible address if + the addition overflowed the available address space.
+ + + +
+ + + + +
cidr:sub (amount, inplace)
+
+ + +Subtract given amount from CIDR instance. If the result would under, the lowest +possible address is returned. + + + +

Parameters

+
    + +
  • + amount: A numeric value between 0 and 0xFFFFFFFF, a + luci.ip.cidr instance or a string convertable by + luci.ip.new(). +
  • + +
  • + inplace: If true, modify this instance instead of returning + a new derived CIDR instance. +
  • + +
+ + + + +

Usage:

+
local addr = luci.ip.new("192.168.1.1/24") 
+print(addr:sub(256))         -- "192.168.0.1/24" 
+print(addr:sub("0.168.0.0")) -- "192.0.1.1/24" 
+ 
+addr:sub(256, true)          -- true 
+print(addr)                  -- "192.168.0.1/24 
+ 
+addr:sub("255.0.0.0", true)  -- false (underflow) 
+print(addr)                  -- "0.0.0.0/24 
+ 
+local addr6 = luci.ip.new("fe80::221:63f:fe75:aa17/64") 
+print(addr6:sub(256))        -- "fe80::221:63f:fe75:a917/64" 
+print(addr6:sub("::ffff:0")) -- "fe80::221:63e:fe76:aa17/64" 
+ 
+addr:sub(256, true)          -- true 
+print(addr)                  -- "fe80::221:63f:fe75:a917/64" 
+ 
+addr:sub("ffff::", true)     -- false (underflow) 
+print(addr)                  -- "::/64"
+ + + +

Return value:

+
    +
  • When subtracting inplace: Return true if the subtraction + succeeded or false when the subtraction underflowed.
  • +
  • When deriving new CIDR: Return new instance representing the value of + this instance minus the subtracted amount or the lowest address if + the subtraction underflowed.
+ + + +
+ + + + +
cidr:minhost ()
+
+ + +Calculate the lowest possible host address within this CIDR instance. + + + + + + +

Usage:

+
local addr = luci.ip.new("192.168.123.56/24") 
+print(addr:minhost())  -- "192.168.123.1" 
+ 
+local addr6 = luci.ip.new("fd9b:62b3:9cc5:0:221:63ff:fe75:aa17/64") 
+print(addr6:minhost()) -- "fd9b:62b3:9cc5::1"
+ + + +

Return value:

+Returns a new CIDR instance representing the lowest host address + within this range. + + + +
+ + + + +
cidr:maxhost ()
+
+ + +Calculate the highest possible host address within this CIDR instance. + + + + + + +

Usage:

+
local addr = luci.ip.new("192.168.123.56/24") 
+print(addr:maxhost())  -- "192.168.123.254" (.255 is broadcast) 
+ 
+local addr6 = luci.ip.new("fd9b:62b3:9cc5:0:221:63ff:fe75:aa17/64") 
+print(addr6:maxhost()) -- "fd9b:62b3:9cc5:0:ffff:ffff:ffff:ffff"
+ + + +

Return value:

+Returns a new CIDR instance representing the highest host address + within this range. + + + +
+ + + + +
cidr:string ()
+
+ + +Convert CIDR instance into string representation. + +If the prefix size of instance is less than 32 for IPv4 or 128 for IPv6, the +address is returned in the form "address/prefix" otherwise just "address". + +It is usually not required to call this function directly as CIDR objects +define it as __tostring function in the associated metatable. + + + + + + + + +

Return value:

+Returns a string representing the range or address of this CIDR instance + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.ip.html b/feeds/luci/documentation/api/modules/luci.ip.html new file mode 100644 index 0000000..549a553 --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.ip.html @@ -0,0 +1,934 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.ip

+ +

+ LuCI IP calculation and netlink access library.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
new (address, netmask) + +Construct a new luci.ip.cidr instance and autodetect the address family.
IPv4 (address, netmask) + +Construct a new IPv4 luci.ip.cidr instance.
IPv6 (address, netmask) + +Construct a new IPv6 luci.ip.cidr instance.
route (address) + +Determine the route leading to the given destination.
routes (filter, callback) + +Fetch all routes, optionally matching the given criteria.
neighbors (filter, callback) + +Fetches entries from the IPv4 ARP and IPv6 neighbour kernel table
link (device) + +Fetch basic device information
+ + + + + + +
+
+ + +

Functions

+
+ + + +
new (address, netmask)
+
+ + +Construct a new luci.ip.cidr instance and autodetect the address family. +Throws an error if the given strings do not represent a valid address or +if the given optional netmask is of a different family. + + +

Parameters

+
    + +
  • + address: String containing a valid IPv4 or IPv6 address, optionally +with prefix size (CIDR notation) or netmask separated by slash. +
  • + +
  • + netmask: String containing a valid IPv4 or IPv6 netmask or number +containing a prefix size in bits (0..32 for IPv4, +0..128 for IPv6). Overrides mask embedded in the first argument +if specified. (optional) +
  • + +
+ + + + +

Usage:

+
addr = luci.ip.new("10.24.0.1/24") 
+addr = luci.ip.new("10.24.0.1/255.255.255.0") 
+addr = luci.ip.new("10.24.0.1", "255.255.255.0")        -- separate netmask 
+addr = luci.ip.new("10.24.0.1/24", 16)                  -- override netmask 
+ 
+addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/64") 
+addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/ffff:ffff:ffff:ffff::") 
+addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17", "ffff:ffff:ffff:ffff::") 
+addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/64", 128) -- override netmask
+ + + +

Return value:

+A luci.ip.cidr object representing the given +address/mask range. + + + +

See also:

+ + +
+ + + + +
IPv4 (address, netmask)
+
+ + +Construct a new IPv4 luci.ip.cidr instance. +Throws an error if the given string does not represent a valid IPv4 address or +if the given optional netmask is of a different family. + + +

Parameters

+
    + +
  • + address: String containing a valid IPv4, optionally with prefix size +(CIDR notation) or netmask separated by slash. +
  • + +
  • + netmask: String containing a valid IPv4 netmask or number +containing a prefix size between 0 and 32 bit. +Overrides mask embedded in the first argument if specified. (optional) +
  • + +
+ + + + +

Usage:

+
addr = luci.ip.IPv4("10.24.0.1/24") 
+addr = luci.ip.IPv4("10.24.0.1/255.255.255.0") 
+addr = luci.ip.IPv4("10.24.0.1", "255.255.255.0")        -- separate netmask 
+addr = luci.ip.IPv4("10.24.0.1/24", 16)                  -- override netmask
+ + + +

Return value:

+A luci.ip.cidr object representing the given IPv4 range. + + + +

See also:

+ + +
+ + + + +
IPv6 (address, netmask)
+
+ + +Construct a new IPv6 luci.ip.cidr instance. +Throws an error if the given string does not represent a valid IPv6 address or +if the given optional netmask is of a different family. + + +

Parameters

+
    + +
  • + address: String containing a valid IPv6, optionally with prefix size +(CIDR notation) or netmask separated by slash. +
  • + +
  • + netmask: String containing a valid IPv4 netmask or number +containing a prefix size between 0 and 128 bit. +Overrides mask embedded in the first argument if specified. (optional) +
  • + +
+ + + + +

Usage:

+
addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/64") 
+addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/ffff:ffff:ffff:ffff::") 
+addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17", "ffff:ffff:ffff:ffff::") 
+addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/64", 128) -- override netmask
+ + + +

Return value:

+A luci.ip.cidr object representing the given IPv6 range. + + + +

See also:

+ + +
+ + + + +
route (address)
+
+ + +Determine the route leading to the given destination. + + +

Parameters

+
    + +
  • + address: A luci.ip.cidr instance or a string containing +a valid IPv4 or IPv6 range as specified by luci.ip.new(). +
  • + +
+ + + + +

Usage:

+
    +
  • Find default gateway by getting route to Google's public NS server +
    rt = luci.ip.route("8.8.8.8") 
    +if rt ~= nil then 
    +	print("gateway is", rt.gw) 
    +end
  • +
  • Determine IPv6 upstream interface
    rt = luci.ip.route("2001::/7") 
    +if rt ~= nil then 
    +	print("ipv6 upstream device is", rt.dev) 
    +end
  • +
+ + + +

Return value:

+

Table containing the fields described below.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
type +

Route type with one of the following numeric values:

+ + + + + + + + + + + + + + + + + + + + + +
1RTN_UNICAST - Gateway or direct route
2RTN_LOCAL - Accept locally
3RTN_BROADCAST - + Accept locally as broadcast send as broadcast
4RTN_ANYCAST - + Accept locally as broadcast but send as unicast
5RTN_MULTICAST - Multicast route
+
familyNumber containing the route family, 4 for IPv4 or + 6 for IPv6
destDestination luci.ip.cidr instance
gwGateway luci.ip.cidr instance (optional)
fromSource address luci.ip.cidr instance (optional)
srcPreferred source luci.ip.cidr instance (optional)
devString containing the name of the outgoing interface
iifString containing the name of the incoming interface (optional)
tableNumber of the associated routing table (0..65535)
protoNumber of the associated routing protocol
scopeNumber describing the scope of the route, most commonly + 0 for global or 253 for on-link
metricNumber describing the route metric (optional)
expiresNumber of seconds the prefix is valid (IPv6 only, optional)
errorRoute destination error code (optional)
+ + + +

See also:

+ + +
+ + + + +
routes (filter, callback)
+
+ + +Fetch all routes, optionally matching the given criteria. + + +

Parameters

+
    + +
  • + filter:

    Table containing one or more of the possible filter +critera described below (optional)

    + + + + + + + + + + + + + + +
    FieldDescription
    family + Number describing the address family to return - 4 selects + IPv4 routes, 6 IPv6 ones. Any other value selects both. +
    iif + String containing the incoming route interface to match. +
    oif + String containing the outgoing route interface to match. +
    type + Numeric type to match, e.g. 1 for unicast. +
    scope + Numeric scope to match, e.g. 253 for onlink. +
    proto + Numeric protocol to match, e.g. 2 for boot. +
    table + Numeric routing table to match (0..65535). +
    gw + String containing the gateway address to match. Can be in any notation + specified by luci.ip.new(). Prefix matching is performed when + comparing the routes, e.g. "192.168.1.0/24" would select routes with gateway + addresses 192.168.1.1 .. 192.168.1.255. +
    dest + String containing the destination to match. Prefix matching is performed. +
    from + String containing the source address to match. Prefix matching is performed. +
    src + String containing the preferred source address to match. + Prefix matching is performed. +
    dest_exact + String containing the destination to match. Exact matching is performed, + e.g. dest = "0.0.0.0/0" would match any IPv4 route + while dest_exact = "0.0.0.0/0" will only match the + default route. +
    from_exact + String containing the source address to match. Exact matching is performed. +
    +
  • + +
  • + callback:

    Callback function to invoke for each found route +instead of returning one table of route objects (optional)

    +
  • + +
+ + + + +

Usage:

+
    +
  • Find all IPv4 default routes: +
    luci.ip.routes({ dest_exact = "0.0.0.0/0" }, function(rt) 
    +	print(rt.type, rt.gw, rt.dev) 
    +end)
  • +
  • Find all global IPv6 prefixes on the current system: +
    luci.ip.routes({ from = "2001::/7" }, function(rt) 
    +	print(rt.from) 
    +end)
  • +
  • Fetch all IPv4 routes: +
    routes = luci.ip.routes({ family = 4 }) 
    +for _, rt in ipairs(routes) do 
    +	print(rt.dest, rt.gw, rt.dev) 
    +end
  • +
+ + + +

Return value:

+If no callback function is provided, a table of routes +as specified by luci.ip.route() +is returned. If a callback function is given, it is invoked for each route +and nothing is returned. + + + +

See also:

+ + +
+ + + + +
neighbors (filter, callback)
+
+ + +Fetches entries from the IPv4 ARP and IPv6 neighbour kernel table + + +

Parameters

+
    + +
  • + filter:

    Table containing one or more of the possible filter +critera described below (optional)

    + + + + + +
    FieldDescription
    family + Number describing the address family to return - 4 selects + IPv4 ARP, 6 select IPv6 neighbour entries. Any other value + selects both. +
    dev + String containing the associated interface to match. +
    dest + String containing the associated address to match. Can be in any notation + specified by luci.ip.new(). Prefix matching is performed when + comparing the addresses, e.g. "192.168.1.0/24" would select ARP entries + for 192.168.1.1 .. 192.168.1.255. +
    mac + String containing MAC address to match. +
    +
  • + +
  • + callback:

    Callback function to invoke for each found neighbour +entry instead of returning one table of neighbour entries (optional)

    +
  • + +
+ + + + +

Usage:

+
    +
  • Find all ARP neighbours in the LAN: +
    luci.ip.neighbors({ dest = "192.168.0.0/16" }, function(n) 
    +	print(n.dest, n.mac) 
    +end)
  • +
  • Find all active IPv6 addresses of host with given MAC: +
    luci.ip.neighbors({ family = 6, mac = "00:21:63:75:aa:17" }, 
    +	function(n) 
    +		print(n.dest) 
    +	end)
  • +
+ + + +

Return value:

+If no callback function is provided, a table of neighbour entries +is returned. If a callback function is given, it is invoked for each entry +and nothing is returned. + +A neighbour entry is a table containing the following fields: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
familyNumber containing the neighbour entry family, 4 for IPv4 + ARP or 6 for IPv6 NDP
devString containing the associated device of the neighbour entry
destIP address luci.ip.cidr instance
macString containing the associated MAC address
routerBoolean "true" if the neighbour entry is a router (IPv6, optional)
proxyBoolean "true" if this is a proxy entry (optional)
incompleteBoolean "true" if the entry is in incomplete state (optional)
reachableBoolean "true" if the entry is in reachable state (optional)
staleBoolean "true" if the entry is stale (optional)
delayBoolean "true" if the entry is delayed (optional)
probeBoolean "true" if the entry is in probe state (optional)
failedBoolean "true" if the entry is in failed state (optional)
noarpBoolean "true" if the entry is not caused by NDP or + ARP (optional)
permanentBoolean "true" if the entry was statically configured from + userspace (optional)
+ + + +
+ + + + +
link (device)
+
+ + +Fetch basic device information + + +

Parameters

+
    + +
  • + device: String containing the network device to query +
  • + +
+ + + + +

Usage:

+
    +
  • Test whether device br-lan exists: +
    print(luci.ip.link("br-lan").name ~= nil) 
    +
  • +
  • Query MAC address of eth0: +
    print(luci.ip.link("eth0").mac) 
    +
  • +
+ + + +

Return value:

+If the given interface is found, a table containing the fields +described below is returned, else an empty table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
upBoolean indicating whether the device is in IFF_RUNNING state
typeNumeric value indicating the type of the device, e.g. 1 + for ethernet.
nameString containing the name of the device
masterIf queried device is a bridge port, string containing the name of + parent bridge device (optional)
mtuNumber containing the current MTU of the device
qlenNumber containing the TX queue length of the device
macString containing the link local address of the device in + dotted hex notation
+ + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.json.html b/feeds/luci/documentation/api/modules/luci.json.html new file mode 100644 index 0000000..761bd6e --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.json.html @@ -0,0 +1,598 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.json

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ActiveDecoder (customnull) + +Create a new Active JSON-Decoder.
ActiveDecoder:get () + +Fetches one JSON-object from given source +
Decoder (customnull) + +Create a new JSON-Decoder.
Decoder:get () + +Get the decoded data packets after the rawdata has been sent to the sink.
Decoder:sink () + +Create an LTN12 sink from the decoder object which accepts the JSON-Data.
Encoder (data, buffersize, fastescape) + +Create a new JSON-Encoder.
Encoder:source () + +Create an LTN12 source providing the encoded JSON-Data.
decode (json) + +Directly decode a JSON string +
encode (obj) + +Direcly encode a Lua object into a JSON string.
null () + +Null replacement function +
+ + + + + + +
+
+ + +

Functions

+
+ + + +
ActiveDecoder (customnull)
+
+ + +Create a new Active JSON-Decoder. + + + +

Parameters

+
    + +
  • + customnull: Use luci.json.null instead of nil for decoding null +
  • + +
+ + + + + + +

Return value:

+Active JSON-Decoder + + + +
+ + + + +
ActiveDecoder:get ()
+
+ + +Fetches one JSON-object from given source + + + + + + + + +

Return value:

+Decoded object + + + +
+ + + + +
Decoder (customnull)
+
+ + +Create a new JSON-Decoder. + + + +

Parameters

+
    + +
  • + customnull: Use luci.json.null instead of nil for decoding null +
  • + +
+ + + + + + +

Return value:

+JSON-Decoder + + + +
+ + + + +
Decoder:get ()
+
+ + +Get the decoded data packets after the rawdata has been sent to the sink. + + + + + + + + +

Return value:

+Decoded data + + + +
+ + + + +
Decoder:sink ()
+
+ + +Create an LTN12 sink from the decoder object which accepts the JSON-Data. + + + + + + + + +

Return value:

+LTN12 sink + + + +
+ + + + +
Encoder (data, buffersize, fastescape)
+
+ + +Create a new JSON-Encoder. + + + +

Parameters

+
    + +
  • + data: Lua-Object to be encoded. +
  • + +
  • + buffersize: Blocksize of returned data source. +
  • + +
  • + fastescape: Use non-standard escaping (don't escape control chars) +
  • + +
+ + + + + + +

Return value:

+JSON-Encoder + + + +
+ + + + +
Encoder:source ()
+
+ + +Create an LTN12 source providing the encoded JSON-Data. + + + + + + + + +

Return value:

+LTN12 source + + + +
+ + + + +
decode (json)
+
+ + +Directly decode a JSON string + + + +

Parameters

+
    + +
  • + json: JSON-String +
  • + +
+ + + + + + +

Return value:

+Lua object + + + +
+ + + + +
encode (obj)
+
+ + +Direcly encode a Lua object into a JSON string. + + + +

Parameters

+
    + +
  • + obj: Lua Object +
  • + +
+ + + + + + +

Return value:

+JSON string + + + +
+ + + + +
null ()
+
+ + +Null replacement function + + + + + + + + +

Return value:

+null + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.jsonc.html b/feeds/luci/documentation/api/modules/luci.jsonc.html new file mode 100644 index 0000000..f82eb40 --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.jsonc.html @@ -0,0 +1,397 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.jsonc

+ +

+ LuCI JSON parsing and serialization library. + The luci.jsonc class is a high level Lua binding to the JSON-C library to + allow reading and writing JSON data with minimal overhead.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + +
new () + +Construct a new luci.jsonc.parser instance.
parse (json) + +Parse a complete JSON string and convert it into a Lua data structure.
stringify (data, pretty) + +Convert given Lua data into a JSON string.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
new ()
+
+ + +Construct a new luci.jsonc.parser instance. + + + + + +

Usage:

+parser = luci.jsonc.new() + + + +

Return value:

+A luci.jsonc.parser object representing a JSON-C tokener. + + + +
+ + + + +
parse (json)
+
+ + +Parse a complete JSON string and convert it into a Lua data structure. + + +

Parameters

+
    + +
  • + json: A string containing the JSON data to parse, must be either a + JSON array or a JSON object. +
  • + +
+ + + + +

Usage:

+
data = luci.jsonc.parse('{ "name": "John", "age": 34 }') 
+print(data.name)  -- "John"
+ + + +

Return value:

+On success, a table containing the parsed JSON data is returned, on + failure the function returns nil and a string containing the reason of + the parse error. + + + +

See also:

+ + +
+ + + + +
stringify (data, pretty)
+
+ + +Convert given Lua data into a JSON string. + +This function recursively converts the given Lua data into a JSON string, +ignoring any unsupported data. Lua tables are converted into JSON arrays if they +only contain integer keys, mixed tables are turned into JSON objects with any +existing numeric keys converted into strings. + +Lua functions, coroutines and userdata objects are ignored and Lua numbers are +converted to integers if they do not contain fractional values. + + + +

Parameters

+
    + +
  • + data: The Lua data to convert, can be a table, string, boolean or number. +
  • + +
  • + pretty: A boolean value indicating whether the resulting JSON should be + pretty printed. +
  • + +
+ + + + +

Usage:

+
json = luci.jsonc.stringify({ item = true, values = { 1, 2, 3 } }) 
+print(json)  -- '{"item":true,"values":[1,2,3]}'
+ + + +

Return value:

+Returns a string containing the JSON representation of the given Lua + data. + + + +

See also:

+ + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.jsonc.parser.html b/feeds/luci/documentation/api/modules/luci.jsonc.parser.html new file mode 100644 index 0000000..e8e145f --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.jsonc.parser.html @@ -0,0 +1,495 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.jsonc.parser

+ +

+ LuCI JSON parser instance. + A JSON parser instance is useful to parse JSON data chunk by chunk, without + the need to assemble all data in advance.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
parser:parse (json) + +Parses one chunk of JSON data.
parser:get () + +Convert parsed JSON data into Lua table.
parser:set (data) + +Put Lua data into the parser.
parser:sink () + +Generate an ltn12-compatible sink.
parser:stringify (pretty) + +Serialize current parser state as JSON.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
parser:parse (json)
+
+ + +Parses one chunk of JSON data. + + + +

Parameters

+
    + +
  • + json: String containing the JSON fragment to parse +
  • + +
+ + + + +

Usage:

+
parser = luci.jsonc.new() 
+ 
+while true do 
+	chunk = ...  -- fetch a cunk of data, e.g. from a socket 
+	finish, errmsg = parser.parse(chunk) 
+ 
+	if finish == nil then 
+		error("Cannot parse JSON: " .. errmsg) 
+	end 
+ 
+	if finish == true then 
+		break 
+	end 
+end
+ + + +

Return value:

+
    +
  • true if a complete JSON object has been parsed and no further input is + expected.
  • +
  • false if further input is required
  • +
  • nil if an error was encountered while parsing the current chunk. + In this case a string describing the parse error is returned as second + value.
+ + + +

See also:

+ + +
+ + + + +
parser:get ()
+
+ + +Convert parsed JSON data into Lua table. + + + + + + +

Usage:

+
parser = luci.jsonc.new() 
+parser:parse('{ "example": "test" }') 
+ 
+data = parser:get() 
+print(data.example)  -- "test"
+ + + +

Return value:

+Parsed JSON object converted into a Lua table or nil if the parser + didn't finish or encountered an error. + + + +

See also:

+ + +
+ + + + +
parser:set (data)
+
+ + +Put Lua data into the parser. + + + +

Parameters

+
    + +
  • + data: Lua data to put into the parser object. The data is converted to an + internal JSON representation that can be dumped with stringify(). + The conversion follows the rules described in luci.jsonc.stringify. +
  • + +
+ + + + +

Usage:

+
parser = luci.jsonc.new() 
+parser:set({ "some", "data" })
+ + + +

Return value:

+Nothing is returned. + + + +

See also:

+ + +
+ + + + +
parser:sink ()
+
+ + +Generate an ltn12-compatible sink. + + + + + + +

Usage:

+
parser = luci.jsonc.new() 
+ltn12.pump.all(ltn12.source.file(io.input()), parser:sink()) 
+print(parser:get())
+ + + +

Return value:

+Returns a function that can be used as an ltn12 sink. + + + +
+ + + + +
parser:stringify (pretty)
+
+ + +Serialize current parser state as JSON. + + + +

Parameters

+
    + +
  • + pretty: A boolean value indicating whether the resulting JSON should be pretty printed. +
  • + +
+ + + + +

Usage:

+
parser = luci.jsonc.new() 
+parser:parse('{ "example": "test" }') 
+print(parser:serialize())  -- '{"example":"test"}'
+ + + +

Return value:

+Returns the serialized JSON data of this parser instance. + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.model.ipkg.html b/feeds/luci/documentation/api/modules/luci.model.ipkg.html new file mode 100644 index 0000000..921153c --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.model.ipkg.html @@ -0,0 +1,734 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.model.ipkg

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
compare_versions (ver1, ver2, comp) + +lua version of opkg compare-versions +
find (pat, cb) + +Find packages that match the given pattern.
info (pkg) + +Return information about installed and available packages.
install (...) + +Install one or more packages.
installed (pkg) + +Determine whether a given package is installed.
list_all (pat, cb) + +List all packages known to opkg.
list_installed (pat, cb) + +List installed packages.
overlay_root () + +Determines the overlay root used by opkg.
remove (...) + +Remove one or more packages.
status (pkg) + +Return the package status of one or more packages.
update () + +Update package lists.
upgrade () + +Upgrades all installed packages.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
compare_versions (ver1, ver2, comp)
+
+ + +lua version of opkg compare-versions + + + +

Parameters

+
    + +
  • + ver1: string version 1 +
  • + +
  • + ver2: string version 2 +
  • + +
  • + comp: string compare versions using + "<=" or "<" lower-equal + ">" or ">=" greater-equal + "=" equal + "<<" lower + ">>" greater + "~=" not equal +
  • + +
+ + + + + + +

Return value:

+Boolean indicating the status of the compare + + + +
+ + + + +
find (pat, cb)
+
+ + +Find packages that match the given pattern. + + + +

Parameters

+
    + +
  • + pat: Find packages whose names or descriptions match this pattern, nil results in zero results +
  • + +
  • + cb: Callback function invoked for each patckage, receives name, version and description as arguments +
  • + +
+ + + + + + +

Return value:

+nothing + + + +
+ + + + +
info (pkg)
+
+ + +Return information about installed and available packages. + + + +

Parameters

+
    + +
  • + pkg: Limit output to a (set of) packages +
  • + +
+ + + + + + +

Return value:

+Table containing package information + + + +
+ + + + +
install (...)
+
+ + +Install one or more packages. + + + +

Parameters

+
    + +
  • + ...: List of packages to install +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating the status of the action + +
  2. OPKG return code, STDOUT and STDERR + +
+ + + +
+ + + + +
installed (pkg)
+
+ + +Determine whether a given package is installed. + + + +

Parameters

+
    + +
  • + pkg: Package +
  • + +
+ + + + + + +

Return value:

+Boolean + + + +
+ + + + +
list_all (pat, cb)
+
+ + +List all packages known to opkg. + + + +

Parameters

+
    + +
  • + pat: Only find packages matching this pattern, nil lists all packages +
  • + +
  • + cb: Callback function invoked for each package, receives name, version and description as arguments +
  • + +
+ + + + + + +

Return value:

+nothing + + + +
+ + + + +
list_installed (pat, cb)
+
+ + +List installed packages. + + + +

Parameters

+
    + +
  • + pat: Only find packages matching this pattern, nil lists all packages +
  • + +
  • + cb: Callback function invoked for each package, receives name, version and description as arguments +
  • + +
+ + + + + + +

Return value:

+nothing + + + +
+ + + + +
overlay_root ()
+
+ + +Determines the overlay root used by opkg. + + + + + + + + +

Return value:

+String containing the directory path of the overlay root. + + + +
+ + + + +
remove (...)
+
+ + +Remove one or more packages. + + + +

Parameters

+
    + +
  • + ...: List of packages to install +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating the status of the action + +
  2. OPKG return code, STDOUT and STDERR + +
+ + + +
+ + + + +
status (pkg)
+
+ + +Return the package status of one or more packages. + + + +

Parameters

+
    + +
  • + pkg: Limit output to a (set of) packages +
  • + +
+ + + + + + +

Return value:

+Table containing package status information + + + +
+ + + + +
update ()
+
+ + +Update package lists. + + + + + + + + +

Return values:

+
    + +
  1. Boolean indicating the status of the action + +
  2. OPKG return code, STDOUT and STDERR + +
+ + + +
+ + + + +
upgrade ()
+
+ + +Upgrades all installed packages. + + + + + + + + +

Return values:

+
    + +
  1. Boolean indicating the status of the action + +
  2. OPKG return code, STDOUT and STDERR + +
+ + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.model.uci.html b/feeds/luci/documentation/api/modules/luci.model.uci.html new file mode 100644 index 0000000..c84d1eb --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.model.uci.html @@ -0,0 +1,1444 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.model.uci

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Cursor:add (config, type) + +Add an anonymous section.
Cursor:apply (configlist, command) + +Applies UCI configuration changes +
Cursor:changes (config) + +Get a table of saved but uncommitted changes.
Cursor:commit (config) + +Commit saved changes.
Cursor:delete (config, section, option) + +Deletes a section or an option.
Cursor:delete_all (config, type, comparator) + +Delete all sections of a given type that match certain criteria.
Cursor:foreach (config, type, callback) + +Call a function for every section of a certain type.
Cursor:get (config, section, option) + +Get a section type or an option +
Cursor:get_all (config, section) + +Get all sections of a config or all values of a section.
Cursor:get_bool (config, section, option) + +Get a boolean option and return it's value as true or false.
Cursor:get_confdir () + +Get the configuration directory.
Cursor:get_first (config, type, option, default) + +Get the given option from the first section with the given type.
Cursor:get_list (config, section, option) + +Get an option or list and return values as table.
Cursor:get_savedir () + +Get the directory for uncomitted changes.
Cursor:load (config) + +Manually load a config.
Cursor:revert (config) + +Revert saved but uncommitted changes.
Cursor:save (config) + +Saves changes made to a config to make them committable.
Cursor:section (config, type, name, values) + +Create a new section and initialize it with data.
Cursor:set (config, section, option, value) + +Set a value or create a named section.
Cursor:set_confdir (directory) + +Set the configuration directory.
Cursor:set_list (config, section, option, value) + +Set given values as list.
Cursor:set_savedir (directory) + +Set the directory for uncommited changes.
Cursor:substate () + +Create a sub-state of this cursor.
Cursor:tset (config, section, values) + +Updated the data of a section using data from a table.
Cursor:unload (config) + +Discard changes made to a config.
cursor () + +Create a new UCI-Cursor.
cursor_state () + +Create a new Cursor initialized to the state directory.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
Cursor:add (config, type)
+
+ + +Add an anonymous section. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + type: UCI section type +
  • + +
+ + + + + + +

Return value:

+Name of created section + + + +
+ + + + +
Cursor:apply (configlist, command)
+
+ + +Applies UCI configuration changes + + + +

Parameters

+
    + +
  • + configlist: List of UCI configurations +
  • + +
  • + command: Don't apply only return the command +
  • + +
+ + + + + + + + +
+ + + + +
Cursor:changes (config)
+
+ + +Get a table of saved but uncommitted changes. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Table of changes + + + +

See also:

+ + +
+ + + + +
Cursor:commit (config)
+
+ + +Commit saved changes. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +

See also:

+ + +
+ + + + +
Cursor:delete (config, section, option)
+
+ + +Deletes a section or an option. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option (optional) +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:delete_all (config, type, comparator)
+
+ + +Delete all sections of a given type that match certain criteria. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + type: UCI section type +
  • + +
  • + comparator: Function that will be called for each section and +returns a boolean whether to delete the current section (optional) +
  • + +
+ + + + + + + + +
+ + + + +
Cursor:foreach (config, type, callback)
+
+ + +Call a function for every section of a certain type. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + type: UCI section type +
  • + +
  • + callback: Function to be called +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:get (config, section, option)
+
+ + +Get a section type or an option + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option (optional) +
  • + +
+ + + + + + +

Return value:

+UCI value + + + +
+ + + + +
Cursor:get_all (config, section)
+
+ + +Get all sections of a config or all values of a section. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name (optional) +
  • + +
+ + + + + + +

Return value:

+Table of UCI sections or table of UCI values + + + +
+ + + + +
Cursor:get_bool (config, section, option)
+
+ + +Get a boolean option and return it's value as true or false. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option +
  • + +
+ + + + + + +

Return value:

+Boolean + + + +
+ + + + +
Cursor:get_confdir ()
+
+ + +Get the configuration directory. + + + + + + + + +

Return value:

+Configuration directory + + + +
+ + + + +
Cursor:get_first (config, type, option, default)
+
+ + +Get the given option from the first section with the given type. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + type: UCI section type +
  • + +
  • + option: UCI option (optional) +
  • + +
  • + default: Default value (optional) +
  • + +
+ + + + + + +

Return value:

+UCI value + + + +
+ + + + +
Cursor:get_list (config, section, option)
+
+ + +Get an option or list and return values as table. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option +
  • + +
+ + + + + + +

Return value:

+table. If the option was not found, you will simply get + an empty table. + + + +
+ + + + +
Cursor:get_savedir ()
+
+ + +Get the directory for uncomitted changes. + + + + + + + + +

Return value:

+Save directory + + + +
+ + + + +
Cursor:load (config)
+
+ + +Manually load a config. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +

See also:

+ + +
+ + + + +
Cursor:revert (config)
+
+ + +Revert saved but uncommitted changes. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +

See also:

+ + +
+ + + + +
Cursor:save (config)
+
+ + +Saves changes made to a config to make them committable. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +

See also:

+ + +
+ + + + +
Cursor:section (config, type, name, values)
+
+ + +Create a new section and initialize it with data. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + type: UCI section type +
  • + +
  • + name: UCI section name (optional) +
  • + +
  • + values: Table of key - value pairs to initialize the section with +
  • + +
+ + + + + + +

Return value:

+Name of created section + + + +
+ + + + +
Cursor:set (config, section, option, value)
+
+ + +Set a value or create a named section. + +When invoked with three arguments config, sectionname, sectiontype, +then a named section of the given type is created. + +When invoked with four arguments config, sectionname, optionname and +optionvalue then the value of the specified option is set to the given value. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option or UCI section type +
  • + +
  • + value: UCI value or nothing if you want to create a section +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:set_confdir (directory)
+
+ + +Set the configuration directory. + + + +

Parameters

+
    + +
  • + directory: UCI configuration directory +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:set_list (config, section, option, value)
+
+ + +Set given values as list. Setting a list option to an empty list +has the same effect as deleting the option. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option +
  • + +
  • + value: value or table. Raw values will become a single item table. +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:set_savedir (directory)
+
+ + +Set the directory for uncommited changes. + + + +

Parameters

+
    + +
  • + directory: UCI changes directory +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:substate ()
+
+ + +Create a sub-state of this cursor. The sub-state is tied to the parent + +curser, means it the parent unloads or loads configs, the sub state will +do so as well. + + + + + + + +

Return value:

+UCI state cursor tied to the parent cursor + + + +
+ + + + +
Cursor:tset (config, section, values)
+
+ + +Updated the data of a section using data from a table. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name (optional) +
  • + +
  • + values: Table of key - value pairs to update the section with +
  • + +
+ + + + + + + + +
+ + + + +
Cursor:unload (config)
+
+ + +Discard changes made to a config. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +

See also:

+ + +
+ + + + +
cursor ()
+
+ + +Create a new UCI-Cursor. + + + + + + + + +

Return value:

+UCI-Cursor + + + +
+ + + + +
cursor_state ()
+
+ + +Create a new Cursor initialized to the state directory. + + + + + + + + +

Return value:

+UCI cursor + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.rpcc.html b/feeds/luci/documentation/api/modules/luci.rpcc.html new file mode 100644 index 0000000..f7cb020 --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.rpcc.html @@ -0,0 +1,328 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.rpcc

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + +
Client:proxy (prefix) + +Create a transparent RPC proxy.
Client:request (method, params, notification) + +Request an RP call and get the response.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
Client:proxy (prefix)
+
+ + +Create a transparent RPC proxy. + + + +

Parameters

+
    + +
  • + prefix: Method prefix +
  • + +
+ + + + + + +

Return value:

+RPC Proxy object + + + +
+ + + + +
Client:request (method, params, notification)
+
+ + +Request an RP call and get the response. + + + +

Parameters

+
    + +
  • + method: Remote method +
  • + +
  • + params: Parameters +
  • + +
  • + notification: Notification only? +
  • + +
+ + + + + + +

Return value:

+response + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.rpcc.ruci.html b/feeds/luci/documentation/api/modules/luci.rpcc.ruci.html new file mode 100644 index 0000000..203779c --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.rpcc.ruci.html @@ -0,0 +1,281 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.rpcc.ruci

+ +

+ + + + + + + +

Functions

+ + + + + + + +
factory (rpccl) + +Create a new UCI over RPC proxy.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
factory (rpccl)
+
+ + +Create a new UCI over RPC proxy. + + + +

Parameters

+
    + +
  • + rpccl: RPC client +
  • + +
+ + + + + + +

Return value:

+Network transparent UCI module + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.sys.html b/feeds/luci/documentation/api/modules/luci.sys.html new file mode 100644 index 0000000..860c5fb --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.sys.html @@ -0,0 +1,645 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
call (...) + +Execute a given shell command and return the error code +
dmesg () + +Retrieves the output of the "dmesg" command.
exec (command) + +Execute a given shell command and capture its standard output +
getenv (var) + +Retrieve environment variables.
hostname (String) + +Get or set the current hostname.
httpget (url, stream, target) + +Returns the contents of a documented referred by an URL.
mounts () + +Retrieve information about currently mounted file systems.
reboot () + +Initiate a system reboot.
syslog () + +Retrieves the output of the "logread" command.
uniqueid (bytes) + +Generates a random id with specified length.
uptime () + +Returns the current system uptime stats.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
call (...)
+
+ + +Execute a given shell command and return the error code + + + +

Parameters

+
    + +
  • + ...: Command to call +
  • + +
+ + + + + + +

Return value:

+Error code of the command + + + +
+ + + + +
dmesg ()
+
+ + +Retrieves the output of the "dmesg" command. + + + + + + + + +

Return value:

+String containing the current log buffer + + + +
+ + + + +
exec (command)
+
+ + +Execute a given shell command and capture its standard output + + + +

Parameters

+
    + +
  • + command: Command to call +
  • + +
+ + + + + + +

Return value:

+String containg the return the output of the command + + + +
+ + + + +
getenv (var)
+
+ + +Retrieve environment variables. If no variable is given then a table + +containing the whole environment is returned otherwise this function returns +the corresponding string value for the given name or nil if no such variable +exists. + + +

Parameters

+
    + +
  • + var: Name of the environment variable to retrieve (optional) +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. String containg the value of the specified variable + +
  2. Table containing all variables if no variable name is given + +
+ + + +
+ + + + +
hostname (String)
+
+ + +Get or set the current hostname. + + + +

Parameters

+
    + +
  • + String: containing a new hostname to set (optional) +
  • + +
+ + + + + + +

Return value:

+String containing the system hostname + + + +
+ + + + +
httpget (url, stream, target)
+
+ + +Returns the contents of a documented referred by an URL. + + + +

Parameters

+
    + +
  • + url: The URL to retrieve +
  • + +
  • + stream: Return a stream instead of a buffer +
  • + +
  • + target: Directly write to target file name +
  • + +
+ + + + + + +

Return value:

+String containing the contents of given the URL + + + +
+ + + + +
mounts ()
+
+ + +Retrieve information about currently mounted file systems. + + + + + + + + +

Return value:

+Table containing mount information + + + +
+ + + + +
reboot ()
+
+ + +Initiate a system reboot. + + + + + + + + +

Return value:

+Return value of os.execute() + + + +
+ + + + +
syslog ()
+
+ + +Retrieves the output of the "logread" command. + + + + + + + + +

Return value:

+String containing the current log buffer + + + +
+ + + + +
uniqueid (bytes)
+
+ + +Generates a random id with specified length. + + + +

Parameters

+
    + +
  • + bytes: Number of bytes for the unique id +
  • + +
+ + + + + + +

Return value:

+String containing hex encoded id + + + +
+ + + + +
uptime ()
+
+ + +Returns the current system uptime stats. + + + + + + + + +

Return value:

+String containing total uptime in seconds + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.sys.init.html b/feeds/luci/documentation/api/modules/luci.sys.init.html new file mode 100644 index 0000000..596fb7c --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.sys.init.html @@ -0,0 +1,516 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys.init

+ +

+ +LuCI system utilities / init related functions. +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
disable (name) + +Disable the given init script +
enable (name) + +Enable the given init script +
enabled (name) + +Test whether the given init script is enabled +
index (name) + +Get the index of he given init script +
names () + +Get the names of all installed init scripts +
start (name) + +Start the given init script +
stop (name) + +Stop the given init script +
+ + + + + + +
+
+ + +

Functions

+
+ + + +
disable (name)
+
+ + +Disable the given init script + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Boolean indicating success + + + +
+ + + + +
enable (name)
+
+ + +Enable the given init script + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Boolean indicating success + + + +
+ + + + +
enabled (name)
+
+ + +Test whether the given init script is enabled + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Boolean indicating whether init is enabled + + + +
+ + + + +
index (name)
+
+ + +Get the index of he given init script + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Numeric index value + + + +
+ + + + +
names ()
+
+ + +Get the names of all installed init scripts + + + + + + + + +

Return value:

+Table containing the names of all inistalled init scripts + + + +
+ + + + +
start (name)
+
+ + +Start the given init script + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Boolean indicating success + + + +
+ + + + +
stop (name)
+
+ + +Stop the given init script + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Boolean indicating success + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.sys.iptparser.html b/feeds/luci/documentation/api/modules/luci.sys.iptparser.html new file mode 100644 index 0000000..122afcc --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.sys.iptparser.html @@ -0,0 +1,466 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.sys.iptparser

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IptParser (family) + +Create a new iptables parser object.
IptParser:chain (table, chain) + +Return the given firewall chain within the given table name.
IptParser:chains (table) + +Find the names of all chains within the given table name.
IptParser:is_custom_target (target) + +Test whether the given target points to a custom chain.
IptParser:resync () + +Rebuild the internal lookup table, for example when rules have changed + +through external commands.
IptParser:tables () + +Find the names of all tables.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
IptParser (family)
+
+ + +Create a new iptables parser object. + + + +

Parameters

+
    + +
  • + family: Number specifying the address family. 4 for IPv4, 6 for IPv6 +
  • + +
+ + + + + + +

Return value:

+IptParser instance + + + +
+ + + + +
IptParser:chain (table, chain)
+
+ + +Return the given firewall chain within the given table name. + + + +

Parameters

+
    + +
  • + table: String containing the table name +
  • + +
  • + chain: String containing the chain name +
  • + +
+ + + + + + +

Return value:

+Table containing the fields "policy", "packets", "bytes" + and "rules". The "rules" field is a table of rule tables. + + + +
+ + + + +
IptParser:chains (table)
+
+ + +Find the names of all chains within the given table name. + + + +

Parameters

+
    + +
  • + table: String containing the table name +
  • + +
+ + + + + + +

Return value:

+Table of chain names in the order they occur. + + + +
+ + + + +
IptParser:is_custom_target (target)
+
+ + +Test whether the given target points to a custom chain. + + + +

Parameters

+
    + +
  • + target: String containing the target action +
  • + +
+ + + + + + +

Return value:

+Boolean indicating whether target is a custom chain. + + + +
+ + + + +
IptParser:resync ()
+
+ + +Rebuild the internal lookup table, for example when rules have changed + +through external commands. + + + + + + + +

Return value:

+nothing + + + +
+ + + + +
IptParser:tables ()
+
+ + +Find the names of all tables. + + + + + + + + +

Return value:

+Table of table names. + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.sys.net.html b/feeds/luci/documentation/api/modules/luci.sys.net.html new file mode 100644 index 0000000..09cef17 --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.sys.net.html @@ -0,0 +1,601 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys.net

+ +

+ +LuCI system utilities / network related functions. +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
arptable () + +Returns the current arp-table entries as two-dimensional table.
conntrack () + +Returns conntrack information +
deviceinfo () + +Return information about available network interfaces.
devices () + +Determine the names of available network interfaces.
host_hints () + +Returns a two-dimensional table of host hints.
ipv4_hints () + +Returns a two-dimensional table of IPv4 address hints.
ipv6_hints () + +Returns a two-dimensional table of IPv6 address hints.
mac_hints () + +Returns a two-dimensional table of mac address hints.
pingtest (host) + +Tests whether the given host responds to ping probes.
routes () + +Returns the current kernel routing table entries.
routes6 () + +Returns the current ipv6 kernel routing table entries.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
arptable ()
+
+ + +Returns the current arp-table entries as two-dimensional table. + + + + + + + + +

Return value:

+Table of table containing the current arp entries. + The following fields are defined for arp entry objects: + { "IP address", "HW address", "HW type", "Flags", "Mask", "Device" } + + + +
+ + + + +
conntrack ()
+
+ + +Returns conntrack information + + + + + + + + +

Return value:

+Table with the currently tracked IP connections + + + +
+ + + + +
deviceinfo ()
+
+ + +Return information about available network interfaces. + + + + + + + + +

Return value:

+Table containing all current interface names and their information + + + +
+ + + + +
devices ()
+
+ + +Determine the names of available network interfaces. + + + + + + + + +

Return value:

+Table containing all current interface names + + + +
+ + + + +
host_hints ()
+
+ + +Returns a two-dimensional table of host hints. + + + + + + + + +

Return value:

+Table of table containing known hosts from various sources, + indexed by mac address. Each subtable contains at least one + of the fields "name", "ipv4" or "ipv6". + + + +
+ + + + +
ipv4_hints ()
+
+ + +Returns a two-dimensional table of IPv4 address hints. + + + + + + + + +

Return value:

+Table of table containing known hosts from various sources. + Each entry contains the values in the following order: + [ "ip", "name" ] + + + +
+ + + + +
ipv6_hints ()
+
+ + +Returns a two-dimensional table of IPv6 address hints. + + + + + + + + +

Return value:

+Table of table containing known hosts from various sources. + Each entry contains the values in the following order: + [ "ip", "name" ] + + + +
+ + + + +
mac_hints ()
+
+ + +Returns a two-dimensional table of mac address hints. + + + + + + + + +

Return value:

+Table of table containing known hosts from various sources. + Each entry contains the values in the following order: + [ "mac", "name" ] + + + +
+ + + + +
pingtest (host)
+
+ + +Tests whether the given host responds to ping probes. + + + +

Parameters

+
    + +
  • + host: String containing a hostname or IPv4 address +
  • + +
+ + + + + + +

Return value:

+Number containing 0 on success and >= 1 on error + + + +
+ + + + +
routes ()
+
+ + +Returns the current kernel routing table entries. + + + + + + + + +

Return value:

+Table of tables with properties of the corresponding routes. + The following fields are defined for route entry tables: + { "dest", "gateway", "metric", "refcount", "usecount", "irtt", + "flags", "device" } + + + +
+ + + + +
routes6 ()
+
+ + +Returns the current ipv6 kernel routing table entries. + + + + + + + + +

Return value:

+Table of tables with properties of the corresponding routes. + The following fields are defined for route entry tables: + { "source", "dest", "nexthop", "metric", "refcount", "usecount", + "flags", "device" } + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.sys.process.html b/feeds/luci/documentation/api/modules/luci.sys.process.html new file mode 100644 index 0000000..9c4f0a5 --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.sys.process.html @@ -0,0 +1,448 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys.process

+ +

+ +LuCI system utilities / process related functions. +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
info () + +Get the current process id.
list () + +Retrieve information about currently running processes.
setgroup (gid) + +Set the gid of a process identified by given pid.
setuser (uid) + +Set the uid of a process identified by given pid.
signal (pid, sig) + +Send a signal to a process identified by given pid.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
info ()
+
+ + +Get the current process id. + + + + + + + + +

Return value:

+Number containing the current pid + + + +
+ + + + +
list ()
+
+ + +Retrieve information about currently running processes. + + + + + + + + +

Return value:

+Table containing process information + + + +
+ + + + +
setgroup (gid)
+
+ + +Set the gid of a process identified by given pid. + + + +

Parameters

+
    + +
  • + gid: Number containing the Unix group id +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating successful operation + +
  2. String containing the error message if failed + +
  3. Number containing the error code if failed + +
+ + + +
+ + + + +
setuser (uid)
+
+ + +Set the uid of a process identified by given pid. + + + +

Parameters

+
    + +
  • + uid: Number containing the Unix user id +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating successful operation + +
  2. String containing the error message if failed + +
  3. Number containing the error code if failed + +
+ + + +
+ + + + +
signal (pid, sig)
+
+ + +Send a signal to a process identified by given pid. + + + +

Parameters

+
    + +
  • + pid: Number containing the process id +
  • + +
  • + sig: Signal to send (default: 15 [SIGTERM]) +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating successful operation + +
  2. Number containing the error code if failed + +
+ + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.sys.user.html b/feeds/luci/documentation/api/modules/luci.sys.user.html new file mode 100644 index 0000000..37126dd --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.sys.user.html @@ -0,0 +1,416 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys.user

+ +

+ +LuCI system utilities / user related functions. +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + +
getuser (uid) + +Retrieve user informations for given uid.
checkpasswd (username, pass) + +Test whether given string matches the password of a given system user.
getpasswd (username) + +Retrieve the current user password hash.
setpasswd (username, password) + +Change the password of given user.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
getuser (uid)
+
+ + +Retrieve user informations for given uid. + + + +

Parameters

+
    + +
  • + uid: Number containing the Unix user id +
  • + +
+ + + + + + +

Return value:

+Table containing the following fields: + { "uid", "gid", "name", "passwd", "dir", "shell", "gecos" } + + + +
+ + + + +
checkpasswd (username, pass)
+
+ + +Test whether given string matches the password of a given system user. + + + +

Parameters

+
    + +
  • + username: String containing the Unix user name +
  • + +
  • + pass: String containing the password to compare +
  • + +
+ + + + + + +

Return value:

+Boolean indicating wheather the passwords are equal + + + +
+ + + + +
getpasswd (username)
+
+ + +Retrieve the current user password hash. + + + +

Parameters

+
    + +
  • + username: String containing the username to retrieve the password for +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. String containing the hash or nil if no password is set. + +
  2. Password database entry + +
+ + + +
+ + + + +
setpasswd (username, password)
+
+ + +Change the password of given user. + + + +

Parameters

+
    + +
  • + username: String containing the Unix user name +
  • + +
  • + password: String containing the password to compare +
  • + +
+ + + + + + +

Return value:

+Number containing 0 on success and >= 1 on error + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.sys.wifi.html b/feeds/luci/documentation/api/modules/luci.sys.wifi.html new file mode 100644 index 0000000..eb1f6b3 --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.sys.wifi.html @@ -0,0 +1,284 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys.wifi

+ +

+ +LuCI system utilities / wifi related functions. +

+ + + + + + + +

Functions

+ + + + + + + +
getiwinfo (ifname) + +Get wireless information for given interface.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
getiwinfo (ifname)
+
+ + +Get wireless information for given interface. + + + +

Parameters

+
    + +
  • + ifname: String containing the interface name +
  • + +
+ + + + + + +

Return value:

+A wrapped iwinfo object instance + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/luci.util.html b/feeds/luci/documentation/api/modules/luci.util.html new file mode 100644 index 0000000..847230b --- /dev/null +++ b/feeds/luci/documentation/api/modules/luci.util.html @@ -0,0 +1,1717 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.util

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
append (src, ...) + +Appends numerically indexed tables or single objects to a given table.
bigendian () + +Test whether the current system is operating in big endian mode.
class (base) + +Create a Class object (Python-style object model).
clone (object, deep) + +Clones the given object and return it's copy.
cmatch (str, pattern) + +Count the occurrences of given substring in given string.
combine (tbl1, tbl2, ...) + +Combines two or more numerically indexed tables and single objects into one table.
contains (table, value) + +Checks whether the given table contains the given value.
copcall (f, ...) + +This is a coroutine-safe drop-in replacement for Lua's "pcall"-function +
coxpcall (f, err, ...) + +This is a coroutine-safe drop-in replacement for Lua's "xpcall"-function +
dtable () + +Create a dynamic table which automatically creates subtables.
dumptable (t, maxdepth) + +Recursively dumps a table to stdout, useful for testing and debugging.
exec (command) + +Execute given commandline and gather stdout.
execi (command) + +Return a line-buffered iterator over the output of given command.
get_bytecode (val) + +Return the current runtime bytecode of the given data.
imatch (val) + +Return a matching iterator for the given value.
instanceof (object, class) + +Test whether the given object is an instance of the given class.
keys (t) + +Retrieve all keys of given associative table.
kspairs (t) + +Return a key, value iterator for the given table.
libpath () + +Returns the absolute path to LuCI base directory.
parse_units (ustr) + +Parse certain units from the given string and return the canonical integer + +value or 0 if the unit is unknown.
pcdata (value) + +Create valid XML PCDATA from given string.
perror (obj) + +Write given object to stderr.
restore_data (str) + +Restore data previously serialized with serialize_data().
serialize_data (val) + +Recursively serialize given data to lua code, suitable for restoring + +with loadstring().
serialize_json (data, writer) + +Convert data structure to JSON +
spairs (t, f) + +Return a key, value iterator which returns the values sorted according to + +the provided callback function.
split (str, pat, max, regex) + +Splits given string on a defined separator sequence and return a table + +containing the resulting substrings.
strip_bytecode (code) + +Strips unnescessary lua bytecode from given string.
striptags (value) + +Strip HTML tags from given string.
threadlocal () + +Create a new or get an already existing thread local store associated with + +the current active coroutine.
trim (str) + +Remove leading and trailing whitespace from given string value.
ubus (object, method, values) + +Issue an ubus call.
update (t, updates) + +Update values in given table with the values from the second given table.
vspairs (t) + +Return a key, value iterator for the given table.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
append (src, ...)
+
+ + +Appends numerically indexed tables or single objects to a given table. + + + +

Parameters

+
    + +
  • + src: Target table +
  • + +
  • + ...: Objects to insert +
  • + +
+ + + + + + +

Return value:

+Target table + + + +
+ + + + +
bigendian ()
+
+ + +Test whether the current system is operating in big endian mode. + + + + + + + + +

Return value:

+Boolean value indicating whether system is big endian + + + +
+ + + + +
class (base)
+
+ + +Create a Class object (Python-style object model). + +The class object can be instantiated by calling itself. +Any class functions or shared parameters can be attached to this object. +Attaching a table to the class object makes this table shared between +all instances of this class. For object parameters use the __init__ function. +Classes can inherit member functions and values from a base class. +Class can be instantiated by calling them. All parameters will be passed +to the __init__ function of this class - if such a function exists. +The __init__ function must be used to set any object parameters that are not shared +with other objects of this class. Any return values will be ignored. + + +

Parameters

+
    + +
  • + base: The base class to inherit from (optional) +
  • + +
+ + + + + + +

Return value:

+A class object + + + +

See also:

+ + +
+ + + + +
clone (object, deep)
+
+ + +Clones the given object and return it's copy. + + + +

Parameters

+
    + +
  • + object: Table value to clone +
  • + +
  • + deep: Boolean indicating whether to do recursive cloning +
  • + +
+ + + + + + +

Return value:

+Cloned table value + + + +
+ + + + +
cmatch (str, pattern)
+
+ + +Count the occurrences of given substring in given string. + + + +

Parameters

+
    + +
  • + str: String to search in +
  • + +
  • + pattern: String containing pattern to find +
  • + +
+ + + + + + +

Return value:

+Number of found occurrences + + + +
+ + + + +
combine (tbl1, tbl2, ...)
+
+ + +Combines two or more numerically indexed tables and single objects into one table. + + + +

Parameters

+
    + +
  • + tbl1: Table value to combine +
  • + +
  • + tbl2: Table value to combine +
  • + +
  • + ...: More tables to combine +
  • + +
+ + + + + + +

Return value:

+Table value containing all values of given tables + + + +
+ + + + +
contains (table, value)
+
+ + +Checks whether the given table contains the given value. + + + +

Parameters

+
    + +
  • + table: Table value +
  • + +
  • + value: Value to search within the given table +
  • + +
+ + + + + + +

Return value:

+number indicating the first index at which the given value occurs + within table or false. + + + +
+ + + + +
copcall (f, ...)
+
+ + +This is a coroutine-safe drop-in replacement for Lua's "pcall"-function + + + +

Parameters

+
    + +
  • + f: Lua function to be called protected +
  • + +
  • + ...: Parameters passed to the function +
  • + +
+ + + + + + +

Return value:

+A boolean whether the function call succeeded and the returns + values of the function or the error object + + + +
+ + + + +
coxpcall (f, err, ...)
+
+ + +This is a coroutine-safe drop-in replacement for Lua's "xpcall"-function + + + +

Parameters

+
    + +
  • + f: Lua function to be called protected +
  • + +
  • + err: Custom error handler +
  • + +
  • + ...: Parameters passed to the function +
  • + +
+ + + + + + +

Return value:

+A boolean whether the function call succeeded and the return + values of either the function or the error handler + + + +
+ + + + +
dtable ()
+
+ + +Create a dynamic table which automatically creates subtables. + + + + + + + + +

Return value:

+Dynamic Table + + + +
+ + + + +
dumptable (t, maxdepth)
+
+ + +Recursively dumps a table to stdout, useful for testing and debugging. + + + +

Parameters

+
    + +
  • + t: Table value to dump +
  • + +
  • + maxdepth: Maximum depth +
  • + +
+ + + + + + +

Return value:

+Always nil + + + +
+ + + + +
exec (command)
+
+ + +Execute given commandline and gather stdout. + + + +

Parameters

+
    + +
  • + command: String containing command to execute +
  • + +
+ + + + + + +

Return value:

+String containing the command's stdout + + + +
+ + + + +
execi (command)
+
+ + +Return a line-buffered iterator over the output of given command. + + + +

Parameters

+
    + +
  • + command: String containing the command to execute +
  • + +
+ + + + + + +

Return value:

+Iterator + + + +
+ + + + +
get_bytecode (val)
+
+ + +Return the current runtime bytecode of the given data. The byte code + +will be stripped before it is returned. + + +

Parameters

+
    + +
  • + val: Value to return as bytecode +
  • + +
+ + + + + + +

Return value:

+String value containing the bytecode of the given data + + + +
+ + + + +
imatch (val)
+
+ + +Return a matching iterator for the given value. The iterator will return + +one token per invocation, the tokens are separated by whitespace. If the +input value is a table, it is transformed into a string first. A nil value +will result in a valid interator which aborts with the first invocation. + + +

Parameters

+
    + +
  • + val: The value to scan (table, string or nil) +
  • + +
+ + + + + + +

Return value:

+Iterator which returns one token per call + + + +
+ + + + +
instanceof (object, class)
+
+ + +Test whether the given object is an instance of the given class. + + + +

Parameters

+
    + +
  • + object: Object instance +
  • + +
  • + class: Class object to test against +
  • + +
+ + + + + + +

Return value:

+Boolean indicating whether the object is an instance + + + +

See also:

+ + +
+ + + + +
keys (t)
+
+ + +Retrieve all keys of given associative table. + + + +

Parameters

+
    + +
  • + t: Table to extract keys from +
  • + +
+ + + + + + +

Return value:

+Sorted table containing the keys + + + +
+ + + + +
kspairs (t)
+
+ + +Return a key, value iterator for the given table. + +The table pairs are sorted by key. + + +

Parameters

+
    + +
  • + t: The table to iterate +
  • + +
+ + + + + + +

Return value:

+Function value containing the corresponding iterator + + + +
+ + + + +
libpath ()
+
+ + +Returns the absolute path to LuCI base directory. + + + + + + + + +

Return value:

+String containing the directory path + + + +
+ + + + +
parse_units (ustr)
+
+ + +Parse certain units from the given string and return the canonical integer + +value or 0 if the unit is unknown. Upper- or lower case is irrelevant. +Recognized units are: + o "y" - one year (60*60*24*366) + o "m" - one month (60*60*24*31) + o "w" - one week (60*60*24*7) + o "d" - one day (60*60*24) + o "h" - one hour (60*60) + o "min" - one minute (60) + o "kb" - one kilobyte (1024) + o "mb" - one megabyte (1024*1024) + o "gb" - one gigabyte (1024*1024*1024) + o "kib" - one si kilobyte (1000) + o "mib" - one si megabyte (1000*1000) + o "gib" - one si gigabyte (1000*1000*1000) + + +

Parameters

+
    + +
  • + ustr: String containing a numerical value with trailing unit +
  • + +
+ + + + + + +

Return value:

+Number containing the canonical value + + + +
+ + + + +
pcdata (value)
+
+ + +Create valid XML PCDATA from given string. + + + +

Parameters

+
    + +
  • + value: String value containing the data to escape +
  • + +
+ + + + + + +

Return value:

+String value containing the escaped data + + + +
+ + + + +
perror (obj)
+
+ + +Write given object to stderr. + + + +

Parameters

+
    + +
  • + obj: Value to write to stderr +
  • + +
+ + + + + + +

Return value:

+Boolean indicating whether the write operation was successful + + + +
+ + + + +
restore_data (str)
+
+ + +Restore data previously serialized with serialize_data(). + + + +

Parameters

+
    + +
  • + str: String containing the data to restore +
  • + +
+ + + + + + +

Return value:

+Value containing the restored data structure + + + +

See also:

+ + +
+ + + + +
serialize_data (val)
+
+ + +Recursively serialize given data to lua code, suitable for restoring + +with loadstring(). + + +

Parameters

+
    + +
  • + val: Value containing the data to serialize +
  • + +
+ + + + + + +

Return value:

+String value containing the serialized code + + + +

See also:

+ + +
+ + + + +
serialize_json (data, writer)
+
+ + +Convert data structure to JSON + + + +

Parameters

+
    + +
  • + data: The data to serialize +
  • + +
  • + writer: A function to write a chunk of JSON data (optional) +
  • + +
+ + + + + + +

Return value:

+String containing the JSON if called without write callback + + + +
+ + + + +
spairs (t, f)
+
+ + +Return a key, value iterator which returns the values sorted according to + +the provided callback function. + + +

Parameters

+
    + +
  • + t: The table to iterate +
  • + +
  • + f: A callback function to decide the order of elements +
  • + +
+ + + + + + +

Return value:

+Function value containing the corresponding iterator + + + +
+ + + + +
split (str, pat, max, regex)
+
+ + +Splits given string on a defined separator sequence and return a table + +containing the resulting substrings. The optional max parameter specifies +the number of bytes to process, regardless of the actual length of the given +string. The optional last parameter, regex, specifies whether the separator +sequence is interpreted as regular expression. + + +

Parameters

+
    + +
  • + str: String value containing the data to split up +
  • + +
  • + pat: String with separator pattern (optional, defaults to "\n") +
  • + +
  • + max: Maximum times to split (optional) +
  • + +
  • + regex: Boolean indicating whether to interpret the separator + pattern as regular expression (optional, default is false) +
  • + +
+ + + + + + +

Return value:

+Table containing the resulting substrings + + + +
+ + + + +
strip_bytecode (code)
+
+ + +Strips unnescessary lua bytecode from given string. Information like line + +numbers and debugging numbers will be discarded. Original version by +Peter Cawley (http://lua-users.org/lists/lua-l/2008-02/msg01158.html) + + +

Parameters

+
    + +
  • + code: String value containing the original lua byte code +
  • + +
+ + + + + + +

Return value:

+String value containing the stripped lua byte code + + + +
+ + + + +
striptags (value)
+
+ + +Strip HTML tags from given string. + + + +

Parameters

+
    + +
  • + value: String containing the HTML text +
  • + +
+ + + + + + +

Return value:

+String with HTML tags stripped of + + + +
+ + + + +
threadlocal ()
+
+ + +Create a new or get an already existing thread local store associated with + +the current active coroutine. A thread local store is private a table object +whose values can't be accessed from outside of the running coroutine. + + + + + + + +

Return value:

+Table value representing the corresponding thread local store + + + +
+ + + + +
trim (str)
+
+ + +Remove leading and trailing whitespace from given string value. + + + +

Parameters

+
    + +
  • + str: String value containing whitespace padded data +
  • + +
+ + + + + + +

Return value:

+String value with leading and trailing space removed + + + +
+ + + + +
ubus (object, method, values)
+
+ + +Issue an ubus call. + + + +

Parameters

+
    + +
  • + object: String containing the ubus object to call +
  • + +
  • + method: String containing the ubus method to call +
  • + +
  • + values: Table containing the values to pass +
  • + +
+ + + + + + +

Return value:

+Table containin the ubus result + + + +
+ + + + +
update (t, updates)
+
+ + +Update values in given table with the values from the second given table. + +Both table are - in fact - merged together. + + +

Parameters

+
    + +
  • + t: Table which should be updated +
  • + +
  • + updates: Table containing the values to update +
  • + +
+ + + + + + +

Return value:

+Always nil + + + +
+ + + + +
vspairs (t)
+
+ + +Return a key, value iterator for the given table. + +The table pairs are sorted by value. + + +

Parameters

+
    + +
  • + t: The table to iterate +
  • + +
+ + + + + + +

Return value:

+Function value containing the corresponding iterator + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.CHANGELOG.html b/feeds/luci/documentation/api/modules/nixio.CHANGELOG.html new file mode 100644 index 0000000..48bedc8 --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.CHANGELOG.html @@ -0,0 +1,290 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.CHANGELOG

+ +

+ Changes and improvements.

+ + + + + + + + + + +

Tables

+ + + + + + + + + + + + +
0.2 + Initial Release.
0.3 + Service Release.
+ + + +
+
+ + + + +

Tables

+
+ +
0.2
+
+ Initial Release. +
    +
  • Initial Release
  • +
+ + + +
+ + +
0.3
+
+ Service Release. +
    +
  • Added getifaddrs() function.
  • +
  • Added getsockopt(), setsockopt(), getsockname() and getpeername() + directly to TLS-socket objects unifying the socket interface.
  • +
  • Added support for CyaSSL as cryptographical backend.
  • +
  • Added support for x509 certificates in DER format.
  • +
  • Added support for splice() in UnifiedIO.copyz().
  • +
  • Added interface to inject chunks into UnifiedIO.linesource() buffer.
  • +
  • Changed TLS behaviour to explicitely separate servers and clients.
  • +
  • Fixed usage of signed datatype breaking Base64 decoding.
  • +
  • Fixed namespace clashes for nixio.fs.
  • +
  • Fixed splice() support for some exotic C libraries.
  • +
  • Reconfigure axTLS cryptographical provider and mark it as obsolete.
  • +
+ + + +
+ + +
+ + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.CryptoHash.html b/feeds/luci/documentation/api/modules/nixio.CryptoHash.html new file mode 100644 index 0000000..6158a77 --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.CryptoHash.html @@ -0,0 +1,316 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.CryptoHash

+ +

+ Cryptographical Hash and HMAC object.

+ + + + + + + +

Functions

+ + + + + + + + + + + + +
CryptoHash:final () + Finalize the hash and return the digest.
CryptoHash:update (chunk) + Add another chunk of data to be hashed.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
CryptoHash:final ()
+
+ + Finalize the hash and return the digest. + + + + + +

Usage:

+You cannot call update on a hash object that was already finalized + you can however call final multiple times to get the digest. + + + +

Return values:

+
    + +
  1. hexdigest + +
  2. buffer containing binary digest + +
+ + + +
+ + + + +
CryptoHash:update (chunk)
+
+ + Add another chunk of data to be hashed. + + +

Parameters

+
    + +
  • + chunk: Chunk of data +
  • + +
+ + + + + + +

Return value:

+CryptoHash object (self) + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.File.html b/feeds/luci/documentation/api/modules/nixio.File.html new file mode 100644 index 0000000..d9e67ea --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.File.html @@ -0,0 +1,673 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.File

+ +

+ Large File Object. + Large file operations are supported up to 52 bits if the Lua number type is + double (default).

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
File:close () + Close the file descriptor.
File:fileno () + Get the number of the filedescriptor.
File:lock (command, length) + Apply or test a lock on the file.
File:read (length) + Read from a file descriptor.
File:seek (offset, whence) + Reposition read / write offset of the file descriptor.
File:setblocking (blocking) + (POSIX) Set the blocking mode of the file descriptor.
File:stat (field) + Get file status and attributes.
File:sync (data_only) + Synchronizes the file with the storage device.
File:tell () + Return the current read / write offset of the file descriptor.
File:write (buffer, offset, length) + Write to the file descriptor.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
File:close ()
+
+ + Close the file descriptor. + + + + + + + +

Return value:

+true + + + +
+ + + + +
File:fileno ()
+
+ + Get the number of the filedescriptor. + + + + + + + +

Return value:

+file descriptor number + + + +
+ + + + +
File:lock (command, length)
+
+ + Apply or test a lock on the file. + + +

Parameters

+
    + +
  • + command: Locking Command ["lock", "tlock", "ulock", "test"] +
  • + +
  • + length: Amount of Bytes to lock from current offset (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls lockf() on POSIX and _locking() on Windows. + +
  • The "lock" command is blocking, "tlock" is non-blocking, + "ulock" unlocks and "test" only tests for the lock. + +
  • The "test" command is not available on Windows. + +
  • Locks are by default advisory on POSIX, but mandatory on Windows. + +
+ + + +

Return value:

+true + + + +
+ + + + +
File:read (length)
+
+ + Read from a file descriptor. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + +

Usage

+
    + +
  • Warning: It is not guaranteed that all requested data + is read at once especially when dealing with pipes. + You have to check the return value - the length of the buffer actually read - + or use the safe IO functions in the high-level IO utility module. + +
  • The length of the return buffer is limited by the (compile time) + nixio buffersize which is nixio.const.buffersize (8192 by default). + Any read request greater than that will be safely truncated to this value. + +
+ + + +

Return value:

+buffer containing data successfully read + + + +
+ + + + +
File:seek (offset, whence)
+
+ + Reposition read / write offset of the file descriptor. + The seek will be done either from the beginning of the file or relative + to the current position or relative to the end. + + +

Parameters

+
    + +
  • + offset: File Offset +
  • + +
  • + whence: Starting point ["set", "cur", "end"] +
  • + +
+ + + + +

Usage:

+This function calls lseek(). + + + +

Return value:

+new (absolute) offset position + + + +
+ + + + +
File:setblocking (blocking)
+
+ + (POSIX) Set the blocking mode of the file descriptor. + + +

Parameters

+
    + +
  • + blocking: (boolean) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
File:stat (field)
+
+ + Get file status and attributes. + + +

Parameters

+
    + +
  • + field: Only return a specific field, not the whole table (optional) +
  • + +
+ + + + +

Usage:

+This function calls fstat(). + + + +

Return value:

+Table containing:
    +
  • atime = Last access timestamp
  • +
  • blksize = Blocksize (POSIX only)
  • +
  • blocks = Blocks used (POSIX only)
  • +
  • ctime = Creation timestamp
  • +
  • dev = Device ID
  • +
  • gid = Group ID
  • +
  • ino = Inode
  • +
  • modedec = Mode converted into a decimal number
  • +
  • modestr = Mode as string as returned by ls -l
  • +
  • mtime = Last modification timestamp
  • +
  • nlink = Number of links
  • +
  • rdev = Device ID (if special file)
  • +
  • size = Size in bytes
  • +
  • type = ["reg", "dir", "chr", "blk", "fifo", "lnk", "sock"]
  • +
  • uid = User ID
  • +
+ + + +
+ + + + +
File:sync (data_only)
+
+ + Synchronizes the file with the storage device. + Returns when the file is successfully written to the disk. + + +

Parameters

+
    + +
  • + data_only: Do not synchronize the metadata. (optional, boolean) +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls fsync() when data_only equals false + otherwise fdatasync(), on Windows _commit() is used instead. + +
  • fdatasync() is only supported by Linux and Solaris. For other systems + the data_only parameter is ignored and fsync() is always called. + +
+ + + +

Return value:

+true + + + +
+ + + + +
File:tell ()
+
+ + Return the current read / write offset of the file descriptor. + + + + + +

Usage:

+This function calls lseek() with offset 0 from the current position. + + + +

Return value:

+offset position + + + +
+ + + + +
File:write (buffer, offset, length)
+
+ + Write to the file descriptor. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • Warning: It is not guaranteed that all data + in the buffer is written at once especially when dealing with pipes. + You have to check the return value - the number of bytes actually written - + or use the safe IO functions in the high-level IO utility module. + +
  • Unlike standard Lua indexing the lowest offset and default is 0. + +
+ + + +

Return value:

+number of bytes written + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.README.html b/feeds/luci/documentation/api/modules/nixio.README.html new file mode 100644 index 0000000..d8a17f7 --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.README.html @@ -0,0 +1,374 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.README

+ +

+ General Information.

+ + + + + + + + + + +

Tables

+ + + + + + + + + + + + + + + + + + + + + + +
Errorhandling + General error handling information.
Functions + Function conventions.
Platforms + Platform information.
TLS-Crypto + Cryptography and TLS libraries.
+ + + +
+
+ + + + +

Tables

+
+ +
Errorhandling
+
+ General error handling information. +
    +
  • Most of the functions available in this library may fail. If any error + occurs the function returns nil or false, an error code + (usually errno) and an additional error message text (if avaialable).
  • +
  • At the moment false is only returned when a non-blocking I/O function + fails with EAGAIN, EWOULDBLOCK or WSAEWOULDBLOCK for any others nil is + returned as first parameter. Therefore you can use false to write portable + non-blocking I/O applications.
  • +
  • Note that the function documentation does only mention the return values + in case of a successful operation.
  • +
  • You can find a table of common error numbers and other useful constants + like signal numbers in nixio.const e.g. nixio.const.EINVAL, + nixio.const.SIGTERM, etc. For portability there is a second error constant + table nixio.const_sock for socket error codes. This might + be important if you are dealing with Windows applications, on POSIX however + const_sock is just an alias for const.
  • +
  • With some exceptions - which are explicitely stated in the function + documentation - all blocking functions are signal-protected and will not fail + with EINTR.
  • +
  • On POSIX the SIGPIPE signal will be set to ignore upon initialization. + You should restore the default behaviour or set a custom signal handler + in your program after loading nixio if you need this behaviour.
  • +
+ + + +
+ + +
Functions
+
+ Function conventions. +
In general all functions are namend and behave like their POSIX API + counterparts - where applicable - applying the following rules: +
    +
  • Functions should be named like the underlying POSIX API function omitting + prefixes or suffixes - especially when placed in an object-context ( + lockf -> File:lock, fsync -> File:sync, dup2 -> dup, ...)
  • +
  • If you are unclear about the behaviour of a function you should consult + your OS API documentation (e.g. the manpages).
  • +
  • If the name is significantly different from the POSIX-function, the + underlying function(s) are stated in the documentation.
  • +
  • Parameters should reflect those of the C-API, buffer length arguments and + by-reference parameters should be omitted for pratical purposes.
  • +
  • If a C function accepts a bitfield as parameter, it should be translated + into lower case string flags representing the flags if the bitfield is the + last parameter and also omitting prefixes or suffixes. (e.g. waitpid + (pid, &s, WNOHANG | WUNTRACED) -> waitpid(pid, "nohang", "untraced"), + getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) -> + Socket:getopt("socket", "reuseaddr"), etc.)
  • +
  • If it is not applicable to provide a string representation of the + bitfield a bitfield generator helper is provided. It is named FUNCTION_flags. + (open("/tmp/test", O_RDONLY | O_NONBLOCK) -> open("/tmp/test", open_flags( + "rdonly", "nonblock")))
  • +
+ + + +
+ + +
Platforms
+
+ Platform information. +
    +
  • The minimum platform requirements are a decent POSIX 2001 support. + Builds are more or less tested on Linux, Solaris and FreeBSD. Builds for + Windows XP SP1 and later can be compiled with MinGW either from Windows + itself or using the MinGW cross-compiler. Earlier versions of Windows are not + supported.
  • +
  • In general all functions which don't have any remarks + in their documentation are available on all platforms.
  • +
  • Functions with a (POSIX), (Linux) or similar prefix are only available + on these specific platforms. Same appplies to parameters of functions + with a similar suffix.
  • +
  • Some functions might have limitations on some platforms. This should + be stated in the documentation. Please also consult your OS API + documentation.
  • +
+ + + +
+ + +
TLS-Crypto
+
+ Cryptography and TLS libraries. +
    +
  • Currently 3 underlying cryptography libraries are supported: openssl, + cyassl and axTLS. The name of the library in use is written to + nixio.tls_provider
  • +
  • You should whenever possible use openssl or cyassl as axTLS has only + limited support. It does not provide support for non-blocking sockets and + is probably less audited than the other ones.
  • +
  • As the supported Windows versions are not suitable for embedded devices + axTLS is at the moment not supported on Windows.
  • +
+ + + +
+ + +
+ + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.Socket.html b/feeds/luci/documentation/api/modules/nixio.Socket.html new file mode 100644 index 0000000..7d258fc --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.Socket.html @@ -0,0 +1,1033 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.Socket

+ +

+ Socket Object. + Supports IPv4, IPv6 and UNIX (POSIX only) families.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Socket:accept () + Accept a connection on the socket.
Socket:bind (host, port) + Bind the socket to a network address.
Socket:close () + Close the socket.
Socket:connect (host, port) + Connect the socket to a network address.
Socket:fileno () + Get the number of the filedescriptor.
Socket:getopt (level, option) + Get a socket option.
Socket:getpeername () + Get the peer address of a socket.
Socket:getsockname () + Get the local address of a socket.
Socket:listen (backlog) + Listen for connections on the socket.
Socket:read  (length) + Receive a message on the socket (This is an alias for recv).
Socket:recv  (length) + Receive a message on the socket.
Socket:recvfrom (length) + Receive a message on the socket including the senders source address.
Socket:send (buffer, offset, length) + Send a message on the socket.
Socket:sendto (buffer, host, port, offset, length) + Send a message on the socket specifying the destination.
Socket:setblocking (blocking) + Set the blocking mode of the socket.
Socket:setopt (level, option, value) + Set a socket option.
Socket:shutdown (how) + Shut down part of a full-duplex connection.
Socket:write (buffer, offset, length) + Send a message on the socket (This is an alias for send).
+ + + + + + +
+
+ + +

Functions

+
+ + + +
Socket:accept ()
+
+ + Accept a connection on the socket. + + + + + + + +

Return values:

+
    + +
  1. Socket Object + +
  2. Peer IP-Address + +
  3. Peer Port + +
+ + + +
+ + + + +
Socket:bind (host, port)
+
+ + Bind the socket to a network address. + + +

Parameters

+
    + +
  • + host: Host (optional, default: all addresses) +
  • + +
  • + port: Port or service description +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls getaddrinfo() and bind() but NOT listen(). + +
  • If host is a domain name it will be looked up and bind() + tries the IP-Addresses in the order returned by the DNS resolver + until the bind succeeds. + +
  • UNIX sockets ignore the port, + and interpret host as a socket path. + +
+ + + +

Return value:

+true + + + +
+ + + + +
Socket:close ()
+
+ + Close the socket. + + + + + + + +

Return value:

+true + + + +
+ + + + +
Socket:connect (host, port)
+
+ + Connect the socket to a network address. + + +

Parameters

+
    + +
  • + host: Hostname or IP-Address (optional, default: localhost) +
  • + +
  • + port: Port or service description +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls getaddrinfo() and connect(). + +
  • If host is a domain name it will be looked up and connect() + tries the IP-Addresses in the order returned by the DNS resolver + until the connect succeeds. + +
  • UNIX sockets ignore the port, + and interpret host as a socket path. + +
+ + + +

Return value:

+true + + + +
+ + + + +
Socket:fileno ()
+
+ + Get the number of the filedescriptor. + + + + + + + +

Return value:

+file descriptor number + + + +
+ + + + +
Socket:getopt (level, option)
+
+ + Get a socket option. + + +

Parameters

+
    + +
  • + level: Level ["socket", "tcp", "ip", "ipv6"] +
  • + +
  • + option: Option ["keepalive", "reuseaddr", "sndbuf", "rcvbuf", + "priority", "broadcast", "linger", "sndtimeo", "rcvtimeo", "dontroute", + "bindtodevice", "error", "oobinline", "cork" (TCP), "nodelay" (TCP), + "mtu" (IP, IPv6), "hdrincl" (IP), "multicast_ttl" (IP), "multicast_loop" + (IP, IPv6), "multicast_if" (IP, IPv6), "v6only" (IPv6), "multicast_hops" + (IPv6), "add_membership" (IP, IPv6), "drop_membership" (IP, IPv6)] +
  • + +
+ + + + + + +

Return value:

+Value + + + +
+ + + + +
Socket:getpeername ()
+
+ + Get the peer address of a socket. + + + + + + + +

Return values:

+
    + +
  1. IP-Address + +
  2. Port + +
+ + + +
+ + + + +
Socket:getsockname ()
+
+ + Get the local address of a socket. + + + + + + + +

Return values:

+
    + +
  1. IP-Address + +
  2. Port + +
+ + + +
+ + + + +
Socket:listen (backlog)
+
+ + Listen for connections on the socket. + + +

Parameters

+
    + +
  • + backlog: Length of queue for pending connections +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
Socket:read  (length)
+
+ + Receive a message on the socket (This is an alias for recv). + See the recvfrom description for more details. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + + + +

Return value:

+buffer containing data successfully read + + + +

See also:

+ + +
+ + + + +
Socket:recv  (length)
+
+ + Receive a message on the socket. + This function is identical to recvfrom except that it does not return + the sender's source address. See the recvfrom description for more details. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + + + +

Return value:

+buffer containing data successfully read + + + +

See also:

+ + +
+ + + + +
Socket:recvfrom (length)
+
+ + Receive a message on the socket including the senders source address. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + +

Usage

+
    + +
  • Warning: It is not guaranteed that all requested data + is read at once. + You have to check the return value - the length of the buffer actually read - + or use the safe IO functions in the high-level IO utility module. + +
  • The length of the return buffer is limited by the (compile time) + nixio buffersize which is nixio.const.buffersize (8192 by default). + Any read request greater than that will be safely truncated to this value. + +
+ + + +

Return values:

+
    + +
  1. buffer containing data successfully read + +
  2. host IP-Address of the sender + +
  3. port Port of the sender + +
+ + + +
+ + + + +
Socket:send (buffer, offset, length)
+
+ + Send a message on the socket. + This function is identical to sendto except for the missing destination + parameters. See the sendto description for a detailed description. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + + + +

Return value:

+number of bytes written + + + +

See also:

+ + +
+ + + + +
Socket:sendto (buffer, host, port, offset, length)
+
+ + Send a message on the socket specifying the destination. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + host: Target IP-Address +
  • + +
  • + port: Target Port +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • Warning: It is not guaranteed that all data + in the buffer is written at once. + You have to check the return value - the number of bytes actually written - + or use the safe IO functions in the high-level IO utility module. + +
  • Unlike standard Lua indexing the lowest offset and default is 0. + +
+ + + +

Return value:

+number of bytes written + + + +
+ + + + +
Socket:setblocking (blocking)
+
+ + Set the blocking mode of the socket. + + +

Parameters

+
    + +
  • + blocking: (boolean) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
Socket:setopt (level, option, value)
+
+ + Set a socket option. + + +

Parameters

+
    + +
  • + level: Level ["socket", "tcp", "ip", "ipv6"] +
  • + +
  • + option: Option ["keepalive", "reuseaddr", "sndbuf", "rcvbuf", + "priority", "broadcast", "linger", "sndtimeo", "rcvtimeo", "dontroute", + "bindtodevice", "error", "oobinline", "cork" (TCP), "nodelay" (TCP), + "mtu" (IP, IPv6), "hdrincl" (IP), "multicast_ttl" (IP), "multicast_loop" + (IP, IPv6), "multicast_if" (IP, IPv6), "v6only" (IPv6), "multicast_hops" + (IPv6), "add_membership" (IP, IPv6), "drop_membership" (IP, IPv6)] +
  • + +
  • + value: Value +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
Socket:shutdown (how)
+
+ + Shut down part of a full-duplex connection. + + +

Parameters

+
    + +
  • + how: (optional, default: rdwr) ["rdwr", "rd", "wr"] +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
Socket:write (buffer, offset, length)
+
+ + Send a message on the socket (This is an alias for send). + See the sendto description for a detailed description. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + + + +

Return value:

+number of bytes written + + + +

See also:

+ + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.TLSContext.html b/feeds/luci/documentation/api/modules/nixio.TLSContext.html new file mode 100644 index 0000000..a91b1ee --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.TLSContext.html @@ -0,0 +1,479 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.TLSContext

+ +

+ Transport Layer Security Context Object.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TLSContext:create (socket) + Create a TLS Socket from a socket descriptor.
TLSContext:set_cert (path) + Assign a PEM certificate to this context.
TLSContext:set_ciphers (cipherlist) + Set the available ciphers for this context.
TLSContext:set_key (path) + Assign a PEM private key to this context.
TLSContext:set_verify (flag1, ...) + Set the verification flags of this context.
TLSContext:set_verify_depth (depth) + Set the verification depth of this context.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
TLSContext:create (socket)
+
+ + Create a TLS Socket from a socket descriptor. + + +

Parameters

+
    + +
  • + socket: Socket Object +
  • + +
+ + + + + + +

Return value:

+TLSSocket Object + + + +
+ + + + +
TLSContext:set_cert (path)
+
+ + Assign a PEM certificate to this context. + + +

Parameters

+
    + +
  • + path: Certificate File path +
  • + +
+ + + + +

Usage:

+This function calls SSL_CTX_use_certificate_chain_file(). + + + +

Return value:

+true + + + +
+ + + + +
TLSContext:set_ciphers (cipherlist)
+
+ + Set the available ciphers for this context. + + +

Parameters

+
    + +
  • + cipherlist: String containing a list of ciphers +
  • + +
+ + + + +

Usage:

+This function calls SSL_CTX_set_cipher_list(). + + + +

Return value:

+true + + + +
+ + + + +
TLSContext:set_key (path)
+
+ + Assign a PEM private key to this context. + + +

Parameters

+
    + +
  • + path: Private Key File path +
  • + +
+ + + + +

Usage:

+This function calls SSL_CTX_use_PrivateKey_file(). + + + +

Return value:

+true + + + +
+ + + + +
TLSContext:set_verify (flag1, ...)
+
+ + Set the verification flags of this context. + + +

Parameters

+
    + +
  • + flag1: First Flag ["none", "peer", "verify_fail_if_no_peer_cert", + "client_once"] +
  • + +
  • + ...: More Flags [-"-] +
  • + +
+ + + + +

Usage:

+This function calls SSL_CTX_set_verify(). + + + +

Return value:

+true + + + +
+ + + + +
TLSContext:set_verify_depth (depth)
+
+ + Set the verification depth of this context. + + +

Parameters

+
    + +
  • + depth: Depth +
  • + +
+ + + + +

Usage:

+This function calls SSL_CTX_set_verify_depth(). + + + +

Return value:

+true + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.TLSSocket.html b/feeds/luci/documentation/api/modules/nixio.TLSSocket.html new file mode 100644 index 0000000..3d99a64 --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.TLSSocket.html @@ -0,0 +1,575 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.TLSSocket

+ +

+ TLS Socket Object. + TLS Sockets contain the underlying socket and context in the fields + "socket" and "context".

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TLSSocket:accept () + Wait for a TLS handshake from a client.
TLSSocket:connect () + Initiate the TLS handshake as client with the server.
TLSSocket:read  (length) + Receive a message on the socket (This is an alias for recv).
TLSSocket:recv (length) + Receive a message on the socket.
TLSSocket:send (buffer, offset, length) + Send a message to the socket.
TLSSocket:shutdown () + Shut down the TLS connection.
TLSSocket:write (buffer, offset, length) + Send a message on the socket (This is an alias for send).
+ + + + + + +
+
+ + +

Functions

+
+ + + +
TLSSocket:accept ()
+
+ + Wait for a TLS handshake from a client. + + + + + +

Usage

+
    + +
  • This function calls SSL_accept(). + +
  • You have to call either connect or accept before transmitting data. + +
+ + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
TLSSocket:connect ()
+
+ + Initiate the TLS handshake as client with the server. + + + + + +

Usage

+
    + +
  • This function calls SSL_connect(). + +
  • You have to call either connect or accept before transmitting data. + +
+ + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
TLSSocket:read  (length)
+
+ + Receive a message on the socket (This is an alias for recv). + See the recv description for more details. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + + + +

Return value:

+buffer containing data successfully read + + + +

See also:

+ + +
+ + + + +
TLSSocket:recv (length)
+
+ + Receive a message on the socket. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls SSL_read(). + +
  • Warning: It is not guaranteed that all requested data + is read at once. + You have to check the return value - the length of the buffer actually read - + or use the safe IO functions in the high-level IO utility module. + +
  • The length of the return buffer is limited by the (compile time) + nixio buffersize which is nixio.const.buffersize (8192 by default). + Any read request greater than that will be safely truncated to this value. + +
+ + + +

Return value:

+buffer containing data successfully read + + + +
+ + + + +
TLSSocket:send (buffer, offset, length)
+
+ + Send a message to the socket. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls SSL_write(). + +
  • Warning: It is not guaranteed that all data + in the buffer is written at once. + You have to check the return value - the number of bytes actually written - + or use the safe IO functions in the high-level IO utility module. + +
  • Unlike standard Lua indexing the lowest offset and default is 0. + +
+ + + +

Return value:

+number of bytes written + + + +
+ + + + +
TLSSocket:shutdown ()
+
+ + Shut down the TLS connection. + + + + + +

Usage:

+This function calls SSL_shutdown(). + + + +

Return value:

+true + + + +
+ + + + +
TLSSocket:write (buffer, offset, length)
+
+ + Send a message on the socket (This is an alias for send). + See the send description for a detailed description. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + + + +

Return value:

+number of bytes written + + + +

See also:

+ + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.UnifiedIO.html b/feeds/luci/documentation/api/modules/nixio.UnifiedIO.html new file mode 100644 index 0000000..1717980 --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.UnifiedIO.html @@ -0,0 +1,767 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.UnifiedIO

+ +

+ Unified high-level I/O utility API for Files, Sockets and TLS-Sockets. + These functions are added to the object function tables by doing + require "nixio.util", can be used on all nixio IO Descriptors and + are based on the shared low-level read() and write() functions.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UnifiedIO:blocksource (blocksize, limit) + Create a block-based iterator.
UnifiedIO:close () + Close the descriptor.
UnifiedIO:copy (fdout, size) + Copy data from the current descriptor to another one.
UnifiedIO:copyz (fdout, size) + Copy data from the current descriptor to another one using kernel-space + copying if possible.
UnifiedIO:is_file () + Test whether the I/O-Descriptor is a file.
UnifiedIO:is_socket () + Test whether the I/O-Descriptor is a socket.
UnifiedIO:is_tls_socket () + Test whether the I/O-Descriptor is a TLS socket.
UnifiedIO:linesource (limit) + Create a line-based iterator.
UnifiedIO:readall (length) + Read a block of data and wait until all data is available.
UnifiedIO:sink (close_when_done) + Create a sink.
UnifiedIO:writeall (block) + Write a block of data and wait until all data is written.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
UnifiedIO:blocksource (blocksize, limit)
+
+ + Create a block-based iterator. + + +

Parameters

+
    + +
  • + blocksize: Advisory blocksize (optional) +
  • + +
  • + limit: Amount of data to consume (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the low-level read function of the descriptor. + +
  • The blocksize given is only advisory and to be seen as an upper limit, + if an underlying read returns less bytes the chunk is nevertheless returned. + +
  • If the limit parameter is omitted, the iterator returns data + until an end-of-file, end-of-stream, connection shutdown or similar happens. + +
  • The iterator will not buffer so it is safe to mix with calls to read. + +
  • If the descriptor is non-blocking the iterator may fail with EAGAIN. + +
  • The iterator can be used as an LTN12 source. + +
+ + + +

Return value:

+Block-based Iterator + + + +
+ + + + +
UnifiedIO:close ()
+
+ + Close the descriptor. + + + + + +

Usage:

+If the descriptor is a TLS-socket the underlying descriptor is + closed without touching the TLS connection. + + + +

Return value:

+true + + + +
+ + + + +
UnifiedIO:copy (fdout, size)
+
+ + Copy data from the current descriptor to another one. + + +

Parameters

+
    + +
  • + fdout: Target Descriptor +
  • + +
  • + size: Bytes to copy (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the blocksource function of the source descriptor + and the sink function of the target descriptor. + +
  • If the limit parameter is omitted, data is copied + until an end-of-file, end-of-stream, connection shutdown or similar happens. + +
  • If the descriptor is non-blocking the function may fail with EAGAIN. + +
+ + + +

Return values:

+
    + +
  1. bytes that were successfully written if no error occurred + +
  2. - reserved for error code - + +
  3. - reserved for error message - + +
  4. bytes that were successfully written even if an error occurred + +
+ + + +
+ + + + +
UnifiedIO:copyz (fdout, size)
+
+ + Copy data from the current descriptor to another one using kernel-space + copying if possible. + + +

Parameters

+
    + +
  • + fdout: Target Descriptor +
  • + +
  • + size: Bytes to copy (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the sendfile() syscall to copy the data or the + blocksource function of the source descriptor and the sink function + of the target descriptor as a fallback mechanism. + +
  • If the limit parameter is omitted, data is copied + until an end-of-file, end-of-stream, connection shutdown or similar happens. + +
  • If the descriptor is non-blocking the function may fail with EAGAIN. + +
+ + + +

Return values:

+
    + +
  1. bytes that were successfully written if no error occurred + +
  2. - reserved for error code - + +
  3. - reserved for error message - + +
  4. bytes that were successfully written even if an error occurred + +
+ + + +
+ + + + +
UnifiedIO:is_file ()
+
+ + Test whether the I/O-Descriptor is a file. + + + + + + + +

Return value:

+boolean + + + +
+ + + + +
UnifiedIO:is_socket ()
+
+ + Test whether the I/O-Descriptor is a socket. + + + + + + + +

Return value:

+boolean + + + +
+ + + + +
UnifiedIO:is_tls_socket ()
+
+ + Test whether the I/O-Descriptor is a TLS socket. + + + + + + + +

Return value:

+boolean + + + +
+ + + + +
UnifiedIO:linesource (limit)
+
+ + Create a line-based iterator. + Lines may end with either \n or \r\n, these control chars are not included + in the return value. + + +

Parameters

+
    + +
  • + limit: Line limit +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the low-level read function of the descriptor. + +
  • Note: This function uses an internal buffer to read + ahead. Do NOT mix calls to read(all) and the returned iterator. If you want + to stop reading line-based and want to use the read(all) functions instead + you can pass "true" to the iterator which will flush the buffer + and return the bufferd data. + +
  • If the limit parameter is omitted, this function uses the nixio + buffersize (8192B by default). + +
  • If the descriptor is non-blocking the iterator may fail with EAGAIN. + +
  • The iterator can be used as an LTN12 source. + +
+ + + +

Return value:

+Line-based Iterator + + + +
+ + + + +
UnifiedIO:readall (length)
+
+ + Read a block of data and wait until all data is available. + + +

Parameters

+
    + +
  • + length: Bytes to read (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the low-level read function of the descriptor. + +
  • If the length parameter is omitted, this function returns all data + that can be read before an end-of-file, end-of-stream, connection shutdown + or similar happens. + +
  • If the descriptor is non-blocking this function may fail with EAGAIN. + +
+ + + +

Return values:

+
    + +
  1. data that was successfully read if no error occurred + +
  2. - reserved for error code - + +
  3. - reserved for error message - + +
  4. data that was successfully read even if an error occurred + +
+ + + +
+ + + + +
UnifiedIO:sink (close_when_done)
+
+ + Create a sink. + This sink will simply write all data that it receives and optionally + close the descriptor afterwards. + + +

Parameters

+
    + +
  • + close_when_done: (optional, boolean) +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the writeall function of the descriptor. + +
  • If the descriptor is non-blocking the sink may fail with EAGAIN. + +
  • The iterator can be used as an LTN12 sink. + +
+ + + +

Return value:

+Sink + + + +
+ + + + +
UnifiedIO:writeall (block)
+
+ + Write a block of data and wait until all data is written. + + +

Parameters

+
    + +
  • + block: Bytes to write +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the low-level write function of the descriptor. + +
  • If the descriptor is non-blocking this function may fail with EAGAIN. + +
+ + + +

Return values:

+
    + +
  1. bytes that were successfully written if no error occurred + +
  2. - reserved for error code - + +
  3. - reserved for error message - + +
  4. bytes that were successfully written even if an error occurred + +
+ + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.bin.html b/feeds/luci/documentation/api/modules/nixio.bin.html new file mode 100644 index 0000000..fd82879 --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.bin.html @@ -0,0 +1,427 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.bin

+ +

+ Binary operations and conversion.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
b64decode (buffer) + Base64 decode a given buffer.
b64encode (buffer) + Base64 encode a given buffer.
crc32 (buffer, initial) + Calculate the CRC32 value of a buffer.
hexlify (buffer) + Return a hexadecimal ASCII represantation of the content of a buffer.
unhexlify (hexvalue) + Return a binary buffer from a hexadecimal ASCII representation.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
b64decode (buffer)
+
+ + Base64 decode a given buffer. + + +

Parameters

+
    + +
  • + buffer: Base 64 Encoded data +
  • + +
+ + + + + + +

Return value:

+binary data + + + +
+ + + + +
b64encode (buffer)
+
+ + Base64 encode a given buffer. + + +

Parameters

+
    + +
  • + buffer: Buffer +
  • + +
+ + + + + + +

Return value:

+base64 encoded buffer + + + +
+ + + + +
crc32 (buffer, initial)
+
+ + Calculate the CRC32 value of a buffer. + + +

Parameters

+
    + +
  • + buffer: Buffer +
  • + +
  • + initial: Initial CRC32 value (optional) +
  • + +
+ + + + + + +

Return value:

+crc32 value + + + +
+ + + + +
hexlify (buffer)
+
+ + Return a hexadecimal ASCII represantation of the content of a buffer. + + +

Parameters

+
    + +
  • + buffer: Buffer +
  • + +
+ + + + + + +

Return value:

+representation using characters [0-9a-f] + + + +
+ + + + +
unhexlify (hexvalue)
+
+ + Return a binary buffer from a hexadecimal ASCII representation. + + +

Parameters

+
    + +
  • + hexvalue: representation using characters [0-9a-f] +
  • + +
+ + + + + + +

Return value:

+binary data + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.bit.html b/feeds/luci/documentation/api/modules/nixio.bit.html new file mode 100644 index 0000000..b29c29d --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.bit.html @@ -0,0 +1,744 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.bit

+ +

+ Bitfield operators and mainpulation functions. + Can be used as a drop-in replacement for bitlib.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
arshift (oper, shift) + Arithmetically right shift a number.
band (oper1, oper2, ...) + Bitwise AND several numbers.
bnot (oper) + Invert given number.
bor (oper1, oper2, ...) + Bitwise OR several numbers.
bxor (oper1, oper2, ...) + Bitwise XOR several numbers.
cast (oper) + Cast a number to the bit-operating range.
check (bitfield, flag1, ...) + Checks whether given flags are set in a bitfield.
div (oper1, oper2, ...) + Integer division of 2 or more numbers.
lshift (oper, shift) + Left shift a number.
rshift (oper, shift) + Right shift a number.
set (bitfield, flag1, ...) + Sets one or more flags of a bitfield.
unset (bitfield, flag1, ...) + Unsets one or more flags of a bitfield.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
arshift (oper, shift)
+
+ + Arithmetically right shift a number. + + +

Parameters

+
    + +
  • + oper: number +
  • + +
  • + shift: bits to shift +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
band (oper1, oper2, ...)
+
+ + Bitwise AND several numbers. + + +

Parameters

+
    + +
  • + oper1: First Operand +
  • + +
  • + oper2: Second Operand +
  • + +
  • + ...: More Operands +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
bnot (oper)
+
+ + Invert given number. + + +

Parameters

+
    + +
  • + oper: Operand +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
bor (oper1, oper2, ...)
+
+ + Bitwise OR several numbers. + + +

Parameters

+
    + +
  • + oper1: First Operand +
  • + +
  • + oper2: Second Operand +
  • + +
  • + ...: More Operands +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
bxor (oper1, oper2, ...)
+
+ + Bitwise XOR several numbers. + + +

Parameters

+
    + +
  • + oper1: First Operand +
  • + +
  • + oper2: Second Operand +
  • + +
  • + ...: More Operands +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
cast (oper)
+
+ + Cast a number to the bit-operating range. + + +

Parameters

+
    + +
  • + oper: number +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
check (bitfield, flag1, ...)
+
+ + Checks whether given flags are set in a bitfield. + + +

Parameters

+
    + +
  • + bitfield: Bitfield +
  • + +
  • + flag1: First Flag +
  • + +
  • + ...: More Flags +
  • + +
+ + + + + + +

Return value:

+true when all flags are set, otherwise false + + + +
+ + + + +
div (oper1, oper2, ...)
+
+ + Integer division of 2 or more numbers. + + +

Parameters

+
    + +
  • + oper1: Operand 1 +
  • + +
  • + oper2: Operand 2 +
  • + +
  • + ...: More Operands +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
lshift (oper, shift)
+
+ + Left shift a number. + + +

Parameters

+
    + +
  • + oper: number +
  • + +
  • + shift: bits to shift +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
rshift (oper, shift)
+
+ + Right shift a number. + + +

Parameters

+
    + +
  • + oper: number +
  • + +
  • + shift: bits to shift +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
set (bitfield, flag1, ...)
+
+ + Sets one or more flags of a bitfield. + + +

Parameters

+
    + +
  • + bitfield: Bitfield +
  • + +
  • + flag1: First Flag +
  • + +
  • + ...: More Flags +
  • + +
+ + + + + + +

Return value:

+altered bitfield + + + +
+ + + + +
unset (bitfield, flag1, ...)
+
+ + Unsets one or more flags of a bitfield. + + +

Parameters

+
    + +
  • + bitfield: Bitfield +
  • + +
  • + flag1: First Flag +
  • + +
  • + ...: More Flags +
  • + +
+ + + + + + +

Return value:

+altered bitfield + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.crypto.html b/feeds/luci/documentation/api/modules/nixio.crypto.html new file mode 100644 index 0000000..79a7458 --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.crypto.html @@ -0,0 +1,319 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.crypto

+ +

+ Cryptographical library.

+ + + + + + + +

Functions

+ + + + + + + + + + + + +
hash (algo) + Create a hash object.
hmac (algo, key) + Create a HMAC object.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
hash (algo)
+
+ + Create a hash object. + + +

Parameters

+
    + +
  • + algo: Algorithm ["sha1", "md5"] +
  • + +
+ + + + + + +

Return value:

+CryptoHash Object + + + +
+ + + + +
hmac (algo, key)
+
+ + Create a HMAC object. + + +

Parameters

+
    + +
  • + algo: Algorithm ["sha1", "md5"] +
  • + +
  • + key: HMAC-Key +
  • + +
+ + + + + + +

Return value:

+CryptoHash Object + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.fs.html b/feeds/luci/documentation/api/modules/nixio.fs.html new file mode 100644 index 0000000..40d0a06 --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.fs.html @@ -0,0 +1,1562 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.fs

+ +

+ Low-level and high-level filesystem manipulation library.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
access (path, mode1, ...) + Check user's permission on a file.
basename (path) + Strip the directory part from a path.
chmod (path, mode) + Change the file mode.
chown (path, user, group) + (POSIX) Change owner and group of a file.
copy (src, dest) + Copy a file, directory or symlink non-recursively preserving file mode, + timestamps, owner and group.
copyr (src, dest) + Copy a file, directory or symlink recursively preserving file mode, + timestamps, owner and group.
datacopy (src, dest, limit) + Copy data between files.
dir (path) + Iterate over the entries of a directory.
dirname (path) + Strip the base from a path.
glob (pattern) + (POSIX) Find pathnames matching a pattern.
lchown (path, user, group) + (POSIX) Change owner and group of a file and do not resolve + if target is a symlink.
link (oldpath, newpath) + Create a hard link.
lstat (path, field) + Get file status and attributes and do not resolve if target is a symlink.
mkdir (path, mode) + Create a new directory.
mkdirr (dest, mode) + Create a directory and all needed parent directories recursively.
mkfifo (path, mode) + (POSIX) Create a FIFO (named pipe).
move (src, dest) + Rename a file, directory or symlink non-recursively across filesystems.
mover (src, dest) + Rename a file, directory or symlink recursively across filesystems.
readfile (path, limit) + Read the contents of a file into a buffer.
readlink (path) + (POSIX) Read the target of a symbolic link.
realpath (path) + Return the cannonicalized absolute pathname.
remove (path) + Remove a file or directory.
rename (src, dest) + Renames a file or directory.
rmdir (path) + Remove an empty directory.
stat (path, field) + Get file status and attributes.
statvfs (path) + (POSIX) Get filesystem statistics.
symlink (oldpath, newpath) + (POSIX) Create a symbolic link.
unlink (path) + Delete a name and - if no links are left - the associated file.
utimes (path, actime, mtime) + Change file last access and last modification time.
writefile (path, data) + Write a buffer into a file truncating the file first.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
access (path, mode1, ...)
+
+ + Check user's permission on a file. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + mode1: First Mode to check ["f", "r", "w", "x"] +
  • + +
  • + ...: More Modes to check [-"-] +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
basename (path)
+
+ + Strip the directory part from a path. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + +

Usage:

+This function cannot fail and will never return nil. + + + +

Return value:

+basename + + + +
+ + + + +
chmod (path, mode)
+
+ + Change the file mode. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + mode: File mode + [decimal mode number, "[-r][-w][-xsS][-r][-w][-xsS][-r][-w][-xtT]"] +
  • + +
+ + + + +

Usage

+
    + +
  • Windows only supports setting the write-protection through the + "Writable to others" bit. + +
  • Notice: The mode-flag for the functions + open, mkdir, mkfifo are affected by the umask. + +
+ + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
chown (path, user, group)
+
+ + (POSIX) Change owner and group of a file. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + user: User ID or Username (optional) +
  • + +
  • + group: Group ID or Groupname (optional) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
copy (src, dest)
+
+ + Copy a file, directory or symlink non-recursively preserving file mode, + timestamps, owner and group. + + +

Parameters

+
    + +
  • + src: Source path +
  • + +
  • + dest: Destination path +
  • + +
+ + + + +

Usage:

+The destination must always be a full destination path e.g. do not + omit the basename even if source and destination basename are equal. + + + +

Return value:

+true + + + +
+ + + + +
copyr (src, dest)
+
+ + Copy a file, directory or symlink recursively preserving file mode, + timestamps, owner and group. + + +

Parameters

+
    + +
  • + src: Source path +
  • + +
  • + dest: Destination path +
  • + +
+ + + + +

Usage:

+The destination must always be a full destination path e.g. do not + omit the basename even if source and destination basename are equal. + + + +

Return value:

+true + + + +
+ + + + +
datacopy (src, dest, limit)
+
+ + Copy data between files. + + +

Parameters

+
    + +
  • + src: Source file path +
  • + +
  • + dest: Destination file path +
  • + +
  • + limit: Maximum bytes to copy (optional) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
dir (path)
+
+ + Iterate over the entries of a directory. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + +

Usage:

+The special entries "." and ".." are omitted. + + + +

Return value:

+directory iterator returning one entry per call + + + +
+ + + + +
dirname (path)
+
+ + Strip the base from a path. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + +

Usage:

+This function cannot fail and will never return nil. + + + +

Return value:

+dirname + + + +
+ + + + +
glob (pattern)
+
+ + (POSIX) Find pathnames matching a pattern. + + +

Parameters

+
    + +
  • + pattern: Pattern +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. path iterator + +
  2. number of matches + +
+ + + +
+ + + + +
lchown (path, user, group)
+
+ + (POSIX) Change owner and group of a file and do not resolve + if target is a symlink. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + user: User ID or Username (optional) +
  • + +
  • + group: Group ID or Groupname (optional) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
link (oldpath, newpath)
+
+ + Create a hard link. + + +

Parameters

+
    + +
  • + oldpath: Path +
  • + +
  • + newpath: Path +
  • + +
+ + + + +

Usage:

+This function calls link() on POSIX and CreateHardLink() on Windows. + + + +

Return value:

+true + + + +
+ + + + +
lstat (path, field)
+
+ + Get file status and attributes and do not resolve if target is a symlink. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + field: Only return a specific field, not the whole table (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing attributes (see stat for a detailed description) + + + +

See also:

+ + +
+ + + + +
mkdir (path, mode)
+
+ + Create a new directory. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + mode: File mode (optional, see chmod and umask) +
  • + +
+ + + + + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
mkdirr (dest, mode)
+
+ + Create a directory and all needed parent directories recursively. + + +

Parameters

+
    + +
  • + dest: Destination path +
  • + +
  • + mode: File mode (optional, see chmod and umask) +
  • + +
+ + + + + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
mkfifo (path, mode)
+
+ + (POSIX) Create a FIFO (named pipe). + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + mode: File mode (optional, see chmod and umask) +
  • + +
+ + + + + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
move (src, dest)
+
+ + Rename a file, directory or symlink non-recursively across filesystems. + + +

Parameters

+
    + +
  • + src: Source path +
  • + +
  • + dest: Destination path +
  • + +
+ + + + +

Usage:

+The destination must always be a full destination path e.g. do not + omit the basename even if source and destination basename are equal. + + + +

Return value:

+true + + + +
+ + + + +
mover (src, dest)
+
+ + Rename a file, directory or symlink recursively across filesystems. + + +

Parameters

+
    + +
  • + src: Source path +
  • + +
  • + dest: Destination path +
  • + +
+ + + + +

Usage:

+The destination must always be a full destination path e.g. do not + omit the basename even if source and destination basename are equal. + + + +

Return value:

+true + + + +
+ + + + +
readfile (path, limit)
+
+ + Read the contents of a file into a buffer. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + limit: Maximum bytes to read (optional) +
  • + +
+ + + + + + +

Return value:

+file contents + + + +
+ + + + +
readlink (path)
+
+ + (POSIX) Read the target of a symbolic link. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + + + +

Return value:

+target path + + + +
+ + + + +
realpath (path)
+
+ + Return the cannonicalized absolute pathname. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + + + +

Return value:

+absolute path + + + +
+ + + + +
remove (path)
+
+ + Remove a file or directory. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
rename (src, dest)
+
+ + Renames a file or directory. + + +

Parameters

+
    + +
  • + src: Source path +
  • + +
  • + dest: Destination path +
  • + +
+ + + + +

Usage:

+It is normally not possible to rename files across fileystems. + + + +

Return value:

+true + + + +
+ + + + +
rmdir (path)
+
+ + Remove an empty directory. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
stat (path, field)
+
+ + Get file status and attributes. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + field: Only return a specific field, not the whole table (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing:
    +
  • atime = Last access timestamp
  • +
  • blksize = Blocksize (POSIX only)
  • +
  • blocks = Blocks used (POSIX only)
  • +
  • ctime = Creation timestamp
  • +
  • dev = Device ID
  • +
  • gid = Group ID
  • +
  • ino = Inode
  • +
  • modedec = Mode converted into a decimal number
  • +
  • modestr = Mode as string as returned by ls -l
  • +
  • mtime = Last modification timestamp
  • +
  • nlink = Number of links
  • +
  • rdev = Device ID (if special file)
  • +
  • size = Size in bytes
  • +
  • type = ["reg", "dir", "chr", "blk", "fifo", "lnk", "sock"]
  • +
  • uid = User ID
  • +
+ + + +
+ + + + +
statvfs (path)
+
+ + (POSIX) Get filesystem statistics. + + +

Parameters

+
    + +
  • + path: Path to any file within the filesystem. +
  • + +
+ + + + + + +

Return value:

+Table containing:
    +
  • bavail = available blocks
  • +
  • bfree = free blocks
  • +
  • blocks = number of fragments
  • +
  • frsize = fragment size
  • +
  • favail = available inodes
  • +
  • ffree = free inodes
  • +
  • files = inodes
  • +
  • flag = flags
  • +
  • fsid = filesystem ID
  • +
  • namemax = maximum filename length
  • +
+ + + +
+ + + + +
symlink (oldpath, newpath)
+
+ + (POSIX) Create a symbolic link. + + +

Parameters

+
    + +
  • + oldpath: Path +
  • + +
  • + newpath: Path +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
unlink (path)
+
+ + Delete a name and - if no links are left - the associated file. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
utimes (path, actime, mtime)
+
+ + Change file last access and last modification time. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + actime: Last access timestamp (optional, default: current time) +
  • + +
  • + mtime: Last modification timestamp (optional, default: actime) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
writefile (path, data)
+
+ + Write a buffer into a file truncating the file first. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + data: Data to write +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/api/modules/nixio.html b/feeds/luci/documentation/api/modules/nixio.html new file mode 100644 index 0000000..8ee0f62 --- /dev/null +++ b/feeds/luci/documentation/api/modules/nixio.html @@ -0,0 +1,2405 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio

+ +

+ General POSIX IO library.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bind (host, port, family, socktype) + Create a new socket and bind it to a network address.
chdir (path) + Change the working directory.
closelog () + (POSIX) Close the connection to the system logger.
connect (host, port, family, socktype) + Create a new socket and connect to a network address.
crypt (key, salt) + (POSIX) Encrypt a user password.
dup (oldfd, newfd) + Duplicate a file descriptor.
errno () + Get the last system error code.
exec (executable, ...) + Execute a file to replace the current process.
exece (executable, arguments, environment) + Execute a file with a custom environment to replace the current process.
execp (executable, ...) + Invoke the shell and execute a file to replace the current process.
fork () + (POSIX) Clone the current process.
getaddrinfo (host, family, service) + Look up a hostname and service via DNS.
getcwd () + Get the current working directory.
getenv (variable) + Get the current environment table or a specific environment variable.
getgid () + (POSIX) Get the group id of the current process.
getgr (group) + (POSIX) Get all or a specific user group.
getifaddrs () + (Linux, BSD) Get a list of available network interfaces and their addresses.
getnameinfo (ipaddr) + Reverse look up an IP-Address via DNS.
getpid () + Get the ID of the current process.
getppid () + (POSIX) Get the parent process id of the current process.
getproto (proto) + Get all or a specifc proto entry.
getprotobyname (name) + Get protocol entry by name.
getprotobynumber (proto) + Get protocol entry by number.
getpw (user) + (POSIX) Get all or a specific user account.
getsp (user) + (Linux, Solaris) Get all or a specific shadow password entry.
getuid () + (POSIX) Get the user id of the current process.
kill (target, signal) + (POSIX) Send a signal to one or more processes.
nanosleep (seconds, nanoseconds) + Sleep for a specified amount of time.
nice (nice) + (POSIX) Change priority of current process.
open (path, flags, mode) + Open a file.
open_flags (flag1, ...) + Generate flags for a call to open().
openlog (ident, flag1, ...) + (POSIX) Open a connection to the system logger.
pipe () + Create a pipe.
poll (fds, timeout) + Wait for some event on a file descriptor.
poll_flags (mode1, ...) + Generate events-bitfield or parse revents-bitfield for poll.
sendfile (socket, file, length) + (POSIX) Send data from a file to a socket in kernel-space.
setenv (variable, value) + Set or unset a environment variable.
setgid (gid) + (POSIX) Set the group id of the current process.
setlogmask (priority) + (POSIX) Set the logmask of the system logger for current process.
setsid () + (POSIX) Create a new session and set the process group ID.
setuid (gid) + (POSIX) Set the user id of the current process.
signal (signal, handler) + Ignore or use set the default handler for a signal.
socket (domain, type) + Create a new socket.
splice (fdin, fdout, length, flags) + (Linux) Send data from / to a pipe in kernel-space.
splice_flags (flag1, ...) + (Linux) Generate a flag bitfield for a call to splice.
strerror (errno) + Get the error message for the corresponding error code.
sysinfo () + (Linux) Get overall system statistics.
syslog (priority) + (POSIX) Write a message to the system logger.
times () + (POSIX) Get process times.
tls (mode) + Create a new TLS context.
umask (mask) + Sets the file mode creation mask.
uname () + (POSIX) Get information about current system and kernel.
waitpid (pid, flag1, ...) + (POSIX) Wait for a process to change state.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
bind (host, port, family, socktype)
+
+ + Create a new socket and bind it to a network address. + This function is a shortcut for calling nixio.socket and then bind() + on the socket object. + + +

Parameters

+
    + +
  • + host: Hostname or IP-Address (optional, default: all addresses) +
  • + +
  • + port: Port or service description +
  • + +
  • + family: Address family ["any", "inet", "inet6"] +
  • + +
  • + socktype: Socket Type ["stream", "dgram"] +
  • + +
+ + + + +

Usage

+
    + +
  • This functions calls getaddrinfo(), socket(), + setsockopt() and bind() but NOT listen(). + +
  • The reuseaddr-option is automatically set before binding. + +
+ + + +

Return value:

+Socket Object + + + +
+ + + + +
chdir (path)
+
+ + Change the working directory. + + +

Parameters

+
    + +
  • + path: New working directory +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
closelog ()
+
+ + (POSIX) Close the connection to the system logger. + + + + + + + + + +
+ + + + +
connect (host, port, family, socktype)
+
+ + Create a new socket and connect to a network address. + This function is a shortcut for calling nixio.socket and then connect() + on the socket object. + + +

Parameters

+
    + +
  • + host: Hostname or IP-Address (optional, default: localhost) +
  • + +
  • + port: Port or service description +
  • + +
  • + family: Address family ["any", "inet", "inet6"] +
  • + +
  • + socktype: Socket Type ["stream", "dgram"] +
  • + +
+ + + + +

Usage:

+This functions calls getaddrinfo(), socket() and connect(). + + + +

Return value:

+Socket Object + + + +
+ + + + +
crypt (key, salt)
+
+ + (POSIX) Encrypt a user password. + + +

Parameters

+
    + +
  • + key: Key +
  • + +
  • + salt: Salt +
  • + +
+ + + + + + +

Return value:

+password hash + + + +
+ + + + +
dup (oldfd, newfd)
+
+ + Duplicate a file descriptor. + + +

Parameters

+
    + +
  • + oldfd: Old descriptor [File Object, Socket Object (POSIX only)] +
  • + +
  • + newfd: New descriptor to serve as copy (optional) +
  • + +
+ + + + +

Usage:

+This funcation calls dup2() if newfd is set, otherwise dup(). + + + +

Return value:

+File Object of new descriptor + + + +
+ + + + +
errno ()
+
+ + Get the last system error code. + + + + + + + +

Return value:

+Error code + + + +
+ + + + +
exec (executable, ...)
+
+ + Execute a file to replace the current process. + + +

Parameters

+
    + +
  • + executable: Executable +
  • + +
  • + ...: Parameters +
  • + +
+ + + + +

Usage

+
    + +
  • The name of the executable is automatically passed as argv[0] + +
  • This function does not return on success. + +
+ + + + + +
+ + + + +
exece (executable, arguments, environment)
+
+ + Execute a file with a custom environment to replace the current process. + + +

Parameters

+
    + +
  • + executable: Executable +
  • + +
  • + arguments: Argument Table +
  • + +
  • + environment: Environment Table (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • The name of the executable is automatically passed as argv[0] + +
  • This function does not return on success. + +
+ + + + + +
+ + + + +
execp (executable, ...)
+
+ + Invoke the shell and execute a file to replace the current process. + + +

Parameters

+
    + +
  • + executable: Executable +
  • + +
  • + ...: Parameters +
  • + +
+ + + + +

Usage

+
    + +
  • The name of the executable is automatically passed as argv[0] + +
  • This function does not return on success. + +
+ + + + + +
+ + + + +
fork ()
+
+ + (POSIX) Clone the current process. + + + + + + + +

Return value:

+the child process id for the parent process, 0 for the child process + + + +
+ + + + +
getaddrinfo (host, family, service)
+
+ + Look up a hostname and service via DNS. + + +

Parameters

+
    + +
  • + host: hostname to lookup (optional) +
  • + +
  • + family: address family ["any", "inet", "inet6"] +
  • + +
  • + service: service name or port (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing one or more tables containing:
    +
  • family = ["inet", "inet6"]
  • +
  • socktype = ["stream", "dgram", "raw"]
  • +
  • address = Resolved IP-Address
  • +
  • port = Resolved Port (if service was given)
  • +
+ + + +
+ + + + +
getcwd ()
+
+ + Get the current working directory. + + + + + + + +

Return value:

+workign directory + + + +
+ + + + +
getenv (variable)
+
+ + Get the current environment table or a specific environment variable. + + +

Parameters

+
    + +
  • + variable: Variable (optional) +
  • + +
+ + + + + + +

Return value:

+environment table or single environment variable + + + +
+ + + + +
getgid ()
+
+ + (POSIX) Get the group id of the current process. + + + + + + + +

Return value:

+process group id + + + +
+ + + + +
getgr (group)
+
+ + (POSIX) Get all or a specific user group. + + +

Parameters

+
    + +
  • + group: Group ID or groupname (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing:
    +
  • name = Group Name
  • +
  • gid = Group ID
  • +
  • passwd = Password
  • +
  • mem = {Member #1, Member #2, ...}
  • +
+ + + +
+ + + + +
getifaddrs ()
+
+ + (Linux, BSD) Get a list of available network interfaces and their addresses. + + + + + + + +

Return value:

+Table containing one or more tables containing:
    +
  • name = Interface Name
  • +
  • family = ["inet", "inet6", "packet"]
  • +
  • addr = Interface Address (IPv4, IPv6, MAC, ...)
  • +
  • broadaddr = Broadcast Address
  • +
  • dstaddr = Destination Address (Point-to-Point)
  • +
  • netmask = Netmask (if available)
  • +
  • prefix = Prefix (if available)
  • +
  • flags = Table of interface flags (up, multicast, loopback, ...)
  • +
  • data = Statistics (Linux, "packet"-family)
  • +
  • hatype = Hardware Type Identifier (Linix, "packet"-family)
  • +
  • ifindex = Interface Index (Linux, "packet"-family)
  • +
+ + + +
+ + + + +
getnameinfo (ipaddr)
+
+ + Reverse look up an IP-Address via DNS. + + +

Parameters

+
    + +
  • + ipaddr: IPv4 or IPv6-Address +
  • + +
+ + + + + + +

Return value:

+FQDN + + + +
+ + + + +
getpid ()
+
+ + Get the ID of the current process. + + + + + + + +

Return value:

+process id + + + +
+ + + + +
getppid ()
+
+ + (POSIX) Get the parent process id of the current process. + + + + + + + +

Return value:

+parent process id + + + +
+ + + + +
getproto (proto)
+
+ + Get all or a specifc proto entry. + + +

Parameters

+
    + +
  • + proto: protocol number or name to lookup (optional) +
  • + +
+ + + + + + +

Return value:

+Table (or if no parameter is given, a table of tables) + containing the following fields:
    +
  • name = Protocol Name
  • +
  • proto = Protocol Number
  • +
  • aliases = Table of alias names
  • +
+ + + +
+ + + + +
getprotobyname (name)
+
+ + Get protocol entry by name. + + +

Parameters

+
    + +
  • + name: protocol name to lookup +
  • + +
+ + + + +

Usage:

+This function returns nil if the given protocol is unknown. + + + +

Return value:

+Table containing the following fields:
    +
  • name = Protocol Name
  • +
  • proto = Protocol Number
  • +
  • aliases = Table of alias names
  • +
+ + + +
+ + + + +
getprotobynumber (proto)
+
+ + Get protocol entry by number. + + +

Parameters

+
    + +
  • + proto: protocol number to lookup +
  • + +
+ + + + +

Usage:

+This function returns nil if the given protocol is unknown. + + + +

Return value:

+Table containing the following fields:
    +
  • name = Protocol Name
  • +
  • proto = Protocol Number
  • +
  • aliases = Table of alias names
  • +
+ + + +
+ + + + +
getpw (user)
+
+ + (POSIX) Get all or a specific user account. + + +

Parameters

+
    + +
  • + user: User ID or username (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing:
    +
  • name = Name
  • +
  • uid = ID
  • +
  • gid = Group ID
  • +
  • passwd = Password
  • +
  • dir = Home directory
  • +
  • gecos = Information
  • +
  • shell = Shell
  • +
+ + + +
+ + + + +
getsp (user)
+
+ + (Linux, Solaris) Get all or a specific shadow password entry. + + +

Parameters

+
    + +
  • + user: username (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing:
    +
  • namp = Name
  • +
  • expire = Expiration Date
  • +
  • flag = Flags
  • +
  • inact = Inactivity Date
  • +
  • lstchg = Last change
  • +
  • max = Maximum
  • +
  • min = Minimum
  • +
  • warn = Warning
  • +
  • pwdp = Password Hash
  • +
+ + + +
+ + + + +
getuid ()
+
+ + (POSIX) Get the user id of the current process. + + + + + + + +

Return value:

+process user id + + + +
+ + + + +
kill (target, signal)
+
+ + (POSIX) Send a signal to one or more processes. + + +

Parameters

+
    + +
  • + target: Target process of process group. +
  • + +
  • + signal: Signal to send +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
nanosleep (seconds, nanoseconds)
+
+ + Sleep for a specified amount of time. + + +

Parameters

+
    + +
  • + seconds: Seconds to wait (optional) +
  • + +
  • + nanoseconds: Nanoseconds to wait (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • Not all systems support nanosecond precision but you can expect + to have at least maillisecond precision. + +
  • This function is not signal-protected and may fail with EINTR. + +
+ + + +

Return value:

+true + + + +
+ + + + +
nice (nice)
+
+ + (POSIX) Change priority of current process. + + +

Parameters

+
    + +
  • + nice: Nice Value +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
open (path, flags, mode)
+
+ + Open a file. + + +

Parameters

+
    + +
  • + path: Filesystem path to open +
  • + +
  • + flags: Flag string or number (see open_flags). + ["r", "r+", "w", "w+", "a", "a+"] +
  • + +
  • + mode: File mode for newly created files (see chmod, umask). +
  • + +
+ + + + +

Usage:

+Although this function also supports the traditional fopen() + file flags it does not create a file stream but uses the open() syscall. + + + +

Return value:

+File Object + + + +

See also:

+ + +
+ + + + +
open_flags (flag1, ...)
+
+ + Generate flags for a call to open(). + + +

Parameters

+
    + +
  • + flag1: First Flag ["append", "creat", "excl", "nonblock", "ndelay", + "sync", "trunc", "rdonly", "wronly", "rdwr"] +
  • + +
  • + ...: More Flags [-"-] +
  • + +
+ + + + +

Usage

+
    + +
  • This function cannot fail and will never return nil. + +
  • The "nonblock" and "ndelay" flags are aliases. + +
  • The "nonblock", "ndelay" and "sync" flags are no-ops on Windows. + +
+ + + +

Return value:

+flag to be used as second parameter to open + + + +
+ + + + +
openlog (ident, flag1, ...)
+
+ + (POSIX) Open a connection to the system logger. + + +

Parameters

+
    + +
  • + ident: Identifier +
  • + +
  • + flag1: Flag 1 ["cons", "nowait", "pid", "perror", "ndelay", "odelay"] +
  • + +
  • + ...: More flags [-"-] +
  • + +
+ + + + + + + + +
+ + + + +
pipe ()
+
+ + Create a pipe. + + + + + + + +

Return values:

+
    + +
  1. File Object of the read end + +
  2. File Object of the write end + +
+ + + +
+ + + + +
poll (fds, timeout)
+
+ + Wait for some event on a file descriptor. + poll() sets the revents-field of the tables provided by fds to a bitfield + indicating the events that occurred. + + +

Parameters

+
    + +
  • + fds: Table containing one or more tables containing
      +
    • fd = I/O Descriptor [Socket Object, File Object (POSIX)]
    • +
    • events = events to wait for (bitfield generated with poll_flags)
    • +
    +
  • + +
  • + timeout: Timeout in milliseconds +
  • + +
+ + + + +

Usage

+
    + +
  • This function works in-place on the provided table and only + writes the revents field, you can use other fields on your demand. + +
  • All metamethods on the tables provided as fds are ignored. + +
  • The revents-fields are not reset when the call times out. + You have to check the first return value to be 0 to handle this case. + +
  • If you want to wait on a TLS-Socket you have to use the underlying + socket instead. + +
  • On Windows poll is emulated through select(), can only be used + on socket descriptors and cannot take more than 64 descriptors per call. + +
  • This function is not signal-protected and may fail with EINTR. + +
+ + + +

Return values:

+
    + +
  1. number of ready IO descriptors + +
  2. the fds-table with revents-fields set + +
+ + + +

See also:

+ + +
+ + + + +
poll_flags (mode1, ...)
+
+ + Generate events-bitfield or parse revents-bitfield for poll. + + +

Parameters

+
    + +
  • + mode1: revents-Flag bitfield returned from poll to parse OR + ["in", "out", "err", "pri" (POSIX), "hup" (POSIX), "nval" (POSIX)] +
  • + +
  • + ...: More mode strings for generating the flag [-"-] +
  • + +
+ + + + + + +

Return value:

+table with boolean fields reflecting the mode parameter + OR bitfield to use for the events-Flag field + + + +

See also:

+ + +
+ + + + +
sendfile (socket, file, length)
+
+ + (POSIX) Send data from a file to a socket in kernel-space. + + +

Parameters

+
    + +
  • + socket: Socket Object +
  • + +
  • + file: File Object +
  • + +
  • + length: Amount of data to send (in Bytes). +
  • + +
+ + + + + + +

Return value:

+bytes sent + + + +
+ + + + +
setenv (variable, value)
+
+ + Set or unset a environment variable. + + +

Parameters

+
    + +
  • + variable: Variable +
  • + +
  • + value: Value (optional) +
  • + +
+ + + + +

Usage:

+The environment variable will be unset if value is omitted. + + + +

Return value:

+true + + + +
+ + + + +
setgid (gid)
+
+ + (POSIX) Set the group id of the current process. + + +

Parameters

+
    + +
  • + gid: New Group ID +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
setlogmask (priority)
+
+ + (POSIX) Set the logmask of the system logger for current process. + + +

Parameters

+
    + +
  • + priority: Priority ["emerg", "alert", "crit", "err", "warning", + "notice", "info", "debug"] +
  • + +
+ + + + + + + + +
+ + + + +
setsid ()
+
+ + (POSIX) Create a new session and set the process group ID. + + + + + + + +

Return value:

+session id + + + +
+ + + + +
setuid (gid)
+
+ + (POSIX) Set the user id of the current process. + + +

Parameters

+
    + +
  • + gid: New User ID +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
signal (signal, handler)
+
+ + Ignore or use set the default handler for a signal. + + +

Parameters

+
    + +
  • + signal: Signal +
  • + +
  • + handler: ["ign", "dfl"] +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
socket (domain, type)
+
+ + Create a new socket. + + +

Parameters

+
    + +
  • + domain: Domain ["inet", "inet6", "unix"] +
  • + +
  • + type: Type ["stream", "dgram", "raw"] +
  • + +
+ + + + + + +

Return value:

+Socket Object + + + +
+ + + + +
splice (fdin, fdout, length, flags)
+
+ + (Linux) Send data from / to a pipe in kernel-space. + + +

Parameters

+
    + +
  • + fdin: Input I/O descriptor +
  • + +
  • + fdout: Output I/O descriptor +
  • + +
  • + length: Amount of data to send (in Bytes). +
  • + +
  • + flags: (optional, bitfield generated by splice_flags) +
  • + +
+ + + + + + +

Return value:

+bytes sent + + + +

See also:

+ + +
+ + + + +
splice_flags (flag1, ...)
+
+ + (Linux) Generate a flag bitfield for a call to splice. + + +

Parameters

+
    + +
  • + flag1: First Flag ["move", "nonblock", "more"] +
  • + +
  • + ...: More flags [-"-] +
  • + +
+ + + + + + +

Return value:

+Flag bitfield + + + +

See also:

+ + +
+ + + + +
strerror (errno)
+
+ + Get the error message for the corresponding error code. + + +

Parameters

+
    + +
  • + errno: System error code +
  • + +
+ + + + + + +

Return value:

+Error message + + + +
+ + + + +
sysinfo ()
+
+ + (Linux) Get overall system statistics. + + + + + + + +

Return value:

+Table containing:
    +
  • uptime = system uptime in seconds
  • +
  • loads = {loadavg1, loadavg5, loadavg15}
  • +
  • totalram = total RAM
  • +
  • freeram = free RAM
  • +
  • sharedram = shared RAM
  • +
  • bufferram = buffered RAM
  • +
  • totalswap = total SWAP
  • +
  • freeswap = free SWAP
  • +
  • procs = number of running processes
  • +
+ + + +
+ + + + +
syslog (priority)
+
+ + (POSIX) Write a message to the system logger. + + +

Parameters

+
    + +
  • + priority: Priority ["emerg", "alert", "crit", "err", "warning", + "notice", "info", "debug"] +
  • + +
+ + + + + + + + +
+ + + + +
times ()
+
+ + (POSIX) Get process times. + + + + + + + +

Return value:

+Table containing:
    +
  • utime = user time
  • +
  • utime = system time
  • +
  • cutime = children user time
  • +
  • cstime = children system time
  • +
+ + + +
+ + + + +
tls (mode)
+
+ + Create a new TLS context. + + +

Parameters

+
    + +
  • + mode: TLS-Mode ["client", "server"] +
  • + +
+ + + + + + +

Return value:

+TLSContext Object + + + +
+ + + + +
umask (mask)
+
+ + Sets the file mode creation mask. + + +

Parameters

+
    + +
  • + mask: New creation mask (see chmod for format specifications) +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. the old umask as decimal mode number + +
  2. the old umask as mode string + +
+ + + +
+ + + + +
uname ()
+
+ + (POSIX) Get information about current system and kernel. + + + + + + + +

Return value:

+Table containing:
    +
  • sysname = operating system
  • +
  • nodename = network name (usually hostname)
  • +
  • release = OS release
  • +
  • version = OS version
  • +
  • machine = hardware identifier
  • +
+ + + +
+ + + + +
waitpid (pid, flag1, ...)
+
+ + (POSIX) Wait for a process to change state. + + +

Parameters

+
    + +
  • + pid: Process ID (optional, default: any childprocess) +
  • + +
  • + flag1: Flag (optional) ["nohang", "untraced", "continued"] +
  • + +
  • + ...: More Flags [-"-] +
  • + +
+ + + + +

Usage:

+If the "nohang" is given this function becomes non-blocking. + + + +

Return values:

+
    + +
  1. process id of child or 0 if no child has changed state + +
  2. ["exited", "signaled", "stopped"] + +
  3. [exit code, terminate signal, stop signal] + +
+ + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/feeds/luci/documentation/i18n.md b/feeds/luci/documentation/i18n.md new file mode 100644 index 0000000..226a406 --- /dev/null +++ b/feeds/luci/documentation/i18n.md @@ -0,0 +1,19 @@ +# General +Translations are saved in the folder po/ for each module and application. You find the reference in po/templates/.pot. The actual translation files can be found at po/[lang]/[package].po . + +In order to use the commands below you need to have the _gettext'' utilities (''msgcat'', ''msgfmt'', ''msgmerge_) installed on your system. + +# Rebuild po files +If you want to rebuild the translations after you made changes to a package this is an easy way: + + ./build/i18n-scan.pl applications/[application] > applications/[application]/po/templates/[application_basename].pot + ./build/i18n-update.pl applications/[application]/po + + Example: + ./build/i18n-scan.pl applications/luci-app-firewall > applications/luci-app-firewall/po/templates/firewall.pot + ./build/i18n-update.pl applications/luci-app-firewall/po + (note that the directory argument can be omitted for i18n-update.pl to update all apps) + +*Note:* Some packages share translation files, in this case you need to scan through all their folders. The first command from above should then be: + + ./build/i18n-scan.pl applications/[package-1] applications/[package-2] applications/[package-n] > [location of shared template]/[application].pot diff --git a/feeds/luci/libs/luci-lib-httpclient/Makefile b/feeds/luci/libs/luci-lib-httpclient/Makefile new file mode 100644 index 0000000..1e7fd1b --- /dev/null +++ b/feeds/luci/libs/luci-lib-httpclient/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=HTTP(S) client library +LUCI_DEPENDS:=+luci-base +luci-lib-nixio + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/libs/luci-lib-httpclient/luasrc/httpclient.lua b/feeds/luci/libs/luci-lib-httpclient/luasrc/httpclient.lua new file mode 100644 index 0000000..c76cc54 --- /dev/null +++ b/feeds/luci/libs/luci-lib-httpclient/luasrc/httpclient.lua @@ -0,0 +1,368 @@ +-- Copyright 2009 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +require "nixio.util" +local nixio = require "nixio" + +local ltn12 = require "luci.ltn12" +local util = require "luci.util" +local table = require "table" +local http = require "luci.http.protocol" +local date = require "luci.http.protocol.date" + +local type, pairs, ipairs, tonumber = type, pairs, ipairs, tonumber +local unpack = unpack + +module "luci.httpclient" + +function chunksource(sock, buffer) + buffer = buffer or "" + return function() + local output + local _, endp, count = buffer:find("^([0-9a-fA-F]+);?.-\r\n") + while not count and #buffer <= 1024 do + local newblock, code = sock:recv(1024 - #buffer) + if not newblock then + return nil, code + end + buffer = buffer .. newblock + _, endp, count = buffer:find("^([0-9a-fA-F]+);?.-\r\n") + end + count = tonumber(count, 16) + if not count then + return nil, -1, "invalid encoding" + elseif count == 0 then + return nil + elseif count + 2 <= #buffer - endp then + output = buffer:sub(endp+1, endp+count) + buffer = buffer:sub(endp+count+3) + return output + else + output = buffer:sub(endp+1, endp+count) + buffer = "" + if count - #output > 0 then + local remain, code = sock:recvall(count-#output) + if not remain then + return nil, code + end + output = output .. remain + count, code = sock:recvall(2) + else + count, code = sock:recvall(count+2-#buffer+endp) + end + if not count then + return nil, code + end + return output + end + end +end + + +function request_to_buffer(uri, options) + local source, code, msg = request_to_source(uri, options) + local output = {} + + if not source then + return nil, code, msg + end + + source, code = ltn12.pump.all(source, (ltn12.sink.table(output))) + + if not source then + return nil, code + end + + return table.concat(output) +end + +function request_to_source(uri, options) + local status, response, buffer, sock = request_raw(uri, options) + if not status then + return status, response, buffer + elseif status ~= 200 and status ~= 206 then + return nil, status, buffer + end + + if response.headers["Transfer-Encoding"] == "chunked" then + return chunksource(sock, buffer) + else + return ltn12.source.cat(ltn12.source.string(buffer), sock:blocksource()) + end +end + +-- +-- GET HTTP-resource +-- +function request_raw(uri, options) + options = options or {} + local pr, auth, host, port, path + + if options.params then + uri = uri .. '?' .. http.urlencode_params(options.params) + end + + if uri:find("%[") then + if uri:find("@") then + pr, auth, host, port, path = uri:match("(%w+)://(.+)@(%b[]):?([0-9]*)(.*)") + host = host:sub(2,-2) + else + pr, host, port, path = uri:match("(%w+)://(%b[]):?([0-9]*)(.*)") + host = host:sub(2,-2) + end + else + if uri:find("@") then + pr, auth, host, port, path = + uri:match("(%w+)://(.+)@([%w-.]+):?([0-9]*)(.*)") + else + pr, host, port, path = uri:match("(%w+)://([%w-.]+):?([0-9]*)(.*)") + end + end + + if not host then + return nil, -1, "unable to parse URI" + end + + if pr ~= "http" and pr ~= "https" then + return nil, -2, "protocol not supported" + end + + port = #port > 0 and port or (pr == "https" and 443 or 80) + path = #path > 0 and path or "/" + + options.depth = options.depth or 10 + local headers = options.headers or {} + local protocol = options.protocol or "HTTP/1.1" + headers["User-Agent"] = headers["User-Agent"] or "LuCI httpclient 0.1" + + if headers.Connection == nil then + headers.Connection = "close" + end + + if auth and not headers.Authorization then + headers.Authorization = "Basic " .. nixio.bin.b64encode(auth) + end + + local sock, code, msg = nixio.connect(host, port) + if not sock then + return nil, code, msg + end + + sock:setsockopt("socket", "sndtimeo", options.sndtimeo or 15) + sock:setsockopt("socket", "rcvtimeo", options.rcvtimeo or 15) + + if pr == "https" then + local tls = options.tls_context or nixio.tls() + sock = tls:create(sock) + local stat, code, error = sock:connect() + if not stat then + return stat, code, error + end + end + + -- Pre assemble fixes + if protocol == "HTTP/1.1" then + headers.Host = headers.Host or host + end + + if type(options.body) == "table" then + options.body = http.urlencode_params(options.body) + end + + if type(options.body) == "string" then + headers["Content-Length"] = headers["Content-Length"] or #options.body + headers["Content-Type"] = headers["Content-Type"] or + "application/x-www-form-urlencoded" + options.method = options.method or "POST" + end + + if type(options.body) == "function" then + options.method = options.method or "POST" + end + + if options.cookies then + local cookiedata = {} + for _, c in ipairs(options.cookies) do + local cdo = c.flags.domain + local cpa = c.flags.path + if (cdo == host or cdo == "."..host or host:sub(-#cdo) == cdo) + and (cpa == path or cpa == "/" or cpa .. "/" == path:sub(#cpa+1)) + and (not c.flags.secure or pr == "https") + then + cookiedata[#cookiedata+1] = c.key .. "=" .. c.value + end + end + if headers["Cookie"] then + headers["Cookie"] = headers["Cookie"] .. "; " .. table.concat(cookiedata, "; ") + else + headers["Cookie"] = table.concat(cookiedata, "; ") + end + end + + -- Assemble message + local message = {(options.method or "GET") .. " " .. path .. " " .. protocol} + + for k, v in pairs(headers) do + if type(v) == "string" or type(v) == "number" then + message[#message+1] = k .. ": " .. v + elseif type(v) == "table" then + for i, j in ipairs(v) do + message[#message+1] = k .. ": " .. j + end + end + end + + message[#message+1] = "" + message[#message+1] = "" + + -- Send request + sock:sendall(table.concat(message, "\r\n")) + + if type(options.body) == "string" then + sock:sendall(options.body) + elseif type(options.body) == "function" then + local res = {options.body(sock)} + if not res[1] then + sock:close() + return unpack(res) + end + end + + -- Create source and fetch response + local linesrc = sock:linesource() + local line, code, error = linesrc() + + if not line then + sock:close() + return nil, code, error + end + + local protocol, status, msg = line:match("^([%w./]+) ([0-9]+) (.*)") + + if not protocol then + sock:close() + return nil, -3, "invalid response magic: " .. line + end + + local response = { + status = line, headers = {}, code = 0, cookies = {}, uri = uri + } + + line = linesrc() + while line and line ~= "" do + local key, val = line:match("^([%w-]+)%s?:%s?(.*)") + if key and key ~= "Status" then + if type(response.headers[key]) == "string" then + response.headers[key] = {response.headers[key], val} + elseif type(response.headers[key]) == "table" then + response.headers[key][#response.headers[key]+1] = val + else + response.headers[key] = val + end + end + line = linesrc() + end + + if not line then + sock:close() + return nil, -4, "protocol error" + end + + -- Parse cookies + if response.headers["Set-Cookie"] then + local cookies = response.headers["Set-Cookie"] + for _, c in ipairs(type(cookies) == "table" and cookies or {cookies}) do + local cobj = cookie_parse(c) + cobj.flags.path = cobj.flags.path or path:match("(/.*)/?[^/]*") + if not cobj.flags.domain or cobj.flags.domain == "" then + cobj.flags.domain = host + response.cookies[#response.cookies+1] = cobj + else + local hprt, cprt = {}, {} + + -- Split hostnames and save them in reverse order + for part in host:gmatch("[^.]*") do + table.insert(hprt, 1, part) + end + for part in cobj.flags.domain:gmatch("[^.]*") do + table.insert(cprt, 1, part) + end + + local valid = true + for i, part in ipairs(cprt) do + -- If parts are different and no wildcard + if hprt[i] ~= part and #part ~= 0 then + valid = false + break + -- Wildcard on invalid position + elseif hprt[i] ~= part and #part == 0 then + if i ~= #cprt or (#hprt ~= i and #hprt+1 ~= i) then + valid = false + break + end + end + end + -- No TLD cookies + if valid and #cprt > 1 and #cprt[2] > 0 then + response.cookies[#response.cookies+1] = cobj + end + end + end + end + + -- Follow + response.code = tonumber(status) + if response.code and options.depth > 0 then + if (response.code == 301 or response.code == 302 or response.code == 307) + and response.headers.Location then + local nuri = response.headers.Location or response.headers.location + if not nuri then + return nil, -5, "invalid reference" + end + if not nuri:find("https?://") then + nuri = pr .. "://" .. host .. ":" .. port .. nuri + end + + options.depth = options.depth - 1 + if options.headers then + options.headers.Host = nil + end + sock:close() + + return request_raw(nuri, options) + end + end + + return response.code, response, linesrc(true)..sock:readall(), sock +end + +function cookie_parse(cookiestr) + local key, val, flags = cookiestr:match("%s?([^=;]+)=?([^;]*)(.*)") + if not key then + return nil + end + + local cookie = {key = key, value = val, flags = {}} + for fkey, fval in flags:gmatch(";%s?([^=;]+)=?([^;]*)") do + fkey = fkey:lower() + if fkey == "expires" then + fval = date.to_unix(fval:gsub("%-", " ")) + end + cookie.flags[fkey] = fval + end + + return cookie +end + +function cookie_create(cookie) + local cookiedata = {cookie.key .. "=" .. cookie.value} + + for k, v in pairs(cookie.flags) do + if k == "expires" then + v = date.to_http(v):gsub(", (%w+) (%w+) (%w+) ", ", %1-%2-%3 ") + end + cookiedata[#cookiedata+1] = k .. ((#v > 0) and ("=" .. v) or "") + end + + return table.concat(cookiedata, "; ") +end diff --git a/feeds/luci/libs/luci-lib-httpclient/luasrc/httpclient/receiver.lua b/feeds/luci/libs/luci-lib-httpclient/luasrc/httpclient/receiver.lua new file mode 100644 index 0000000..b886e96 --- /dev/null +++ b/feeds/luci/libs/luci-lib-httpclient/luasrc/httpclient/receiver.lua @@ -0,0 +1,284 @@ +-- Copyright 2009 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +require "nixio.util" +local nixio = require "nixio" +local httpc = require "luci.httpclient" +local ltn12 = require "luci.ltn12" + +local print, tonumber, require, unpack = print, tonumber, require, unpack + +module "luci.httpclient.receiver" + +local function prepare_fd(target) + -- Open fd for appending + local oflags = nixio.open_flags("wronly", "creat") + local file, code, msg = nixio.open(target, oflags) + if not file then + return file, code, msg + end + + -- Acquire lock + local stat, code, msg = file:lock("tlock") + if not stat then + return stat, code, msg + end + + file:seek(0, "end") + + return file +end + +local function splice_async(sock, pipeout, pipein, file, cb) + local ssize = 65536 + local smode = nixio.splice_flags("move", "more", "nonblock") + + -- Set pipe non-blocking otherwise we might end in a deadlock + local stat, code, msg = pipein:setblocking(false) + if stat then + stat, code, msg = pipeout:setblocking(false) + end + if not stat then + return stat, code, msg + end + + + local pollsock = { + {fd=sock, events=nixio.poll_flags("in")} + } + + local pollfile = { + {fd=file, events=nixio.poll_flags("out")} + } + + local done + local active -- Older splice implementations sometimes don't detect EOS + + repeat + active = false + + -- Socket -> Pipe + repeat + nixio.poll(pollsock, 15000) + + stat, code, msg = nixio.splice(sock, pipeout, ssize, smode) + if stat == nil then + return stat, code, msg + elseif stat == 0 then + done = true + break + elseif stat then + active = true + end + until stat == false + + -- Pipe -> File + repeat + nixio.poll(pollfile, 15000) + + stat, code, msg = nixio.splice(pipein, file, ssize, smode) + if stat == nil then + return stat, code, msg + elseif stat then + active = true + end + until stat == false + + if cb then + cb(file) + end + + if not active then + -- We did not splice any data, maybe EOS, fallback to default + return false + end + until done + + pipein:close() + pipeout:close() + sock:close() + file:close() + return true +end + +local function splice_sync(sock, pipeout, pipein, file, cb) + local os = require "os" + local ssize = 65536 + local smode = nixio.splice_flags("move", "more") + local stat + + -- This is probably the only forking http-client ;-) + local pid, code, msg = nixio.fork() + if not pid then + return pid, code, msg + elseif pid == 0 then + pipein:close() + file:close() + + repeat + stat, code = nixio.splice(sock, pipeout, ssize, smode) + until not stat or stat == 0 + + pipeout:close() + sock:close() + os.exit(stat or code) + else + pipeout:close() + sock:close() + + repeat + stat, code, msg = nixio.splice(pipein, file, ssize, smode) + if cb then + cb(file) + end + until not stat or stat == 0 + + pipein:close() + file:close() + + if not stat then + nixio.kill(pid, 15) + nixio.wait(pid) + return stat, code, msg + else + pid, msg, code = nixio.wait(pid) + if msg == "exited" then + if code == 0 then + return true + else + return nil, code, nixio.strerror(code) + end + else + return nil, -0x11, "broken pump" + end + end + end +end + +function request_to_file(uri, target, options, cbs) + options = options or {} + cbs = cbs or {} + options.headers = options.headers or {} + local hdr = options.headers + local file, code, msg + + if target then + file, code, msg = prepare_fd(target) + if not file then + return file, code, msg + end + + local off = file:tell() + + -- Set content range + if off > 0 then + hdr.Range = hdr.Range or ("bytes=" .. off .. "-") + end + end + + local code, resp, buffer, sock = httpc.request_raw(uri, options) + if not code then + -- No success + if file then + file:close() + end + return code, resp, buffer + elseif hdr.Range and code ~= 206 then + -- We wanted a part but we got the while file + sock:close() + if file then + file:close() + end + return nil, -4, code, resp + elseif not hdr.Range and code ~= 200 then + -- We encountered an error + sock:close() + if file then + file:close() + end + return nil, -4, code, resp + end + + if cbs.on_header then + local stat = {cbs.on_header(file, code, resp)} + if stat[1] == false then + if file then + file:close() + end + sock:close() + return unpack(stat) + elseif stat[2] then + file = file and stat[2] + end + end + + if not file then + return nil, -5, "no target given" + end + + local chunked = resp.headers["Transfer-Encoding"] == "chunked" + local stat + + -- Write the buffer to file + file:writeall(buffer) + + repeat + if not options.splice or not sock:is_socket() or chunked then + break + end + + -- This is a plain TCP socket and there is no encoding so we can splice + + local pipein, pipeout, msg = nixio.pipe() + if not pipein then + sock:close() + file:close() + return pipein, pipeout, msg + end + + + -- Adjust splice values + local ssize = 65536 + local smode = nixio.splice_flags("move", "more") + + -- Splicing 512 bytes should never block on a fresh pipe + local stat, code, msg = nixio.splice(sock, pipeout, 512, smode) + if stat == nil then + break + end + + -- Now do the real splicing + local cb = cbs.on_write + if options.splice == "asynchronous" then + stat, code, msg = splice_async(sock, pipeout, pipein, file, cb) + elseif options.splice == "synchronous" then + stat, code, msg = splice_sync(sock, pipeout, pipein, file, cb) + else + break + end + + if stat == false then + break + end + + return stat, code, msg + until true + + local src = chunked and httpc.chunksource(sock) or sock:blocksource() + local snk = file:sink() + + if cbs.on_write then + src = ltn12.source.chain(src, function(chunk) + cbs.on_write(file) + return chunk + end) + end + + -- Fallback to read/write + stat, code, msg = ltn12.pump.all(src, snk) + + file:close() + sock:close() + return stat and true, code, msg +end + diff --git a/feeds/luci/libs/luci-lib-ip/Makefile b/feeds/luci/libs/luci-lib-ip/Makefile new file mode 100644 index 0000000..eb80dcb --- /dev/null +++ b/feeds/luci/libs/luci-lib-ip/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2015 LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Lua library for IP calculation and routing information +LUCI_DEPENDS:=+liblua +libnl-tiny + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/libs/luci-lib-ip/src/Makefile b/feeds/luci/libs/luci-lib-ip/src/Makefile new file mode 100644 index 0000000..76abd27 --- /dev/null +++ b/feeds/luci/libs/luci-lib-ip/src/Makefile @@ -0,0 +1,17 @@ +IP_CFLAGS = -std=gnu99 -I$(STAGING_DIR)/usr/include/libnl-tiny/ +IP_LDFLAGS = -llua -lm -lnl-tiny +IP_OBJ = ip.o +IP_LIB = ip.so + +%.o: %.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(LUA_CFLAGS) $(IP_CFLAGS) $(FPIC) -c -o $@ $< + +compile: $(IP_OBJ) + $(CC) $(LDFLAGS) -shared -o $(IP_LIB) $(IP_OBJ) $(IP_LDFLAGS) + +install: compile + mkdir -p $(DESTDIR)/usr/lib/lua/luci + cp $(IP_LIB) $(DESTDIR)/usr/lib/lua/luci/$(IP_LIB) + +clean: + rm -f *.o *.so diff --git a/feeds/luci/libs/luci-lib-ip/src/ip.c b/feeds/luci/libs/luci-lib-ip/src/ip.c new file mode 100644 index 0000000..b91966c --- /dev/null +++ b/feeds/luci/libs/luci-lib-ip/src/ip.c @@ -0,0 +1,1392 @@ +/* +Copyright 2015 Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#define LUCI_IP "luci.ip" +#define LUCI_IP_CIDR "luci.ip.cidr" + +#define RTA_INT(x) (*(int *)RTA_DATA(x)) +#define RTA_U32(x) (*(uint32_t *)RTA_DATA(x)) + +static int hz = 0; +static struct nl_sock *sock = NULL; + +typedef struct { + union { + struct in_addr v4; + struct in6_addr v6; + } addr; + int len; + int bits; + int family; + bool exact; +} cidr_t; + +struct dump_filter { + bool get; + int family; + int iif; + int oif; + int type; + int scope; + int proto; + int table; + cidr_t gw; + cidr_t from; + cidr_t src; + cidr_t dst; + struct ether_addr mac; +}; + +struct dump_state { + int index; + int pending; + int callback; + struct lua_State *L; + struct dump_filter *filter; +}; + + +static int _cidr_new(lua_State *L, int index, int family, bool mask); + +static cidr_t *L_checkcidr (lua_State *L, int index, cidr_t *p) +{ + if (lua_type(L, index) == LUA_TUSERDATA) + return luaL_checkudata(L, index, LUCI_IP_CIDR); + + if (_cidr_new(L, index, p ? p->family : 0, false)) + return lua_touserdata(L, -1); + + luaL_error(L, "Invalid operand"); + return NULL; +} + +static bool parse_mask(int family, const char *mask, int *bits) +{ + char *e; + struct in_addr m; + struct in6_addr m6; + + if (family == AF_INET && inet_pton(AF_INET, mask, &m)) + { + for (*bits = 0, m.s_addr = ntohl(m.s_addr); + *bits < 32 && (m.s_addr << *bits) & 0x80000000; + ++*bits); + } + else if (family == AF_INET6 && inet_pton(AF_INET6, mask, &m6)) + { + for (*bits = 0; + *bits < 128 && (m6.s6_addr[*bits / 8] << (*bits % 8)) & 128; + ++*bits); + } + else + { + *bits = strtoul(mask, &e, 10); + + if (e == mask || *e != 0 || *bits > ((family == AF_INET) ? 32 : 128)) + return false; + } + + return true; +} + +static bool parse_cidr(const char *dest, cidr_t *pp) +{ + char *p, buf[INET6_ADDRSTRLEN * 2 + 2]; + uint8_t bitlen = 0; + + strncpy(buf, dest, sizeof(buf) - 1); + + p = strchr(buf, '/'); + + if (p) + *p++ = 0; + + if (inet_pton(AF_INET, buf, &pp->addr.v4)) + { + bitlen = 32; + pp->family = AF_INET; + pp->len = sizeof(struct in_addr); + } + else if (inet_pton(AF_INET6, buf, &pp->addr.v6)) + { + bitlen = 128; + pp->family = AF_INET6; + pp->len = sizeof(struct in6_addr); + } + else + return false; + + if (p) + { + if (!parse_mask(pp->family, p, &pp->bits)) + return false; + } + else + { + pp->bits = bitlen; + } + + return true; +} + +static int L_getint(lua_State *L, int index, const char *name) +{ + int rv = 0; + + lua_getfield(L, index, name); + + if (lua_type(L, -1) == LUA_TNUMBER) + rv = lua_tonumber(L, -1); + + lua_pop(L, 1); + + return rv; +} + +static const char * L_getstr(lua_State *L, int index, const char *name) +{ + const char *rv = NULL; + + lua_getfield(L, index, name); + + if (lua_type(L, -1) == LUA_TSTRING) + rv = lua_tostring(L, -1); + + lua_pop(L, 1); + + return rv; +} + +static void L_setint(struct lua_State *L, const char *name, uint32_t n) +{ + lua_pushinteger(L, n); + lua_setfield(L, -2, name); +} + +static void L_setbool(struct lua_State *L, const char *name, bool val) +{ + lua_pushboolean(L, val); + lua_setfield(L, -2, name); +} + +static void L_setaddr(struct lua_State *L, const char *name, + int family, void *addr, int bits) +{ + cidr_t *p; + + if (!addr) + return; + + p = lua_newuserdata(L, sizeof(*p)); + + if (!p) + return; + + if (family == AF_INET) + { + p->family = AF_INET; + p->bits = (bits < 0) ? 32 : bits; + p->len = sizeof(p->addr.v4); + p->addr.v4 = *(struct in_addr *)addr; + } + else + { + p->family = AF_INET6; + p->bits = (bits < 0) ? 128 : bits; + p->len = sizeof(p->addr.v6); + p->addr.v6 = *(struct in6_addr *)addr; + } + + luaL_getmetatable(L, LUCI_IP_CIDR); + lua_setmetatable(L, -2); + lua_setfield(L, -2, name); +} + +static void L_setstr(struct lua_State *L, const char *name, const char *val) +{ + lua_pushstring(L, val); + lua_setfield(L, -2, name); +} + +static void L_setdev(struct lua_State *L, const char *name, + struct nlattr *attr) +{ + char buf[32]; + + if (if_indextoname(RTA_INT(attr), buf)) + L_setstr(L, name, buf); +} + +static int L_checkbits(lua_State *L, int index, cidr_t *p) +{ + int bits; + + if (lua_gettop(L) < index || lua_isnil(L, index)) + { + bits = p->bits; + } + else if (lua_type(L, index) == LUA_TNUMBER) + { + bits = lua_tointeger(L, index); + + if (bits < 0 || bits > ((p->family == AF_INET) ? 32 : 128)) + return luaL_error(L, "Invalid prefix size"); + } + else if (lua_type(L, index) == LUA_TSTRING) + { + if (!parse_mask(p->family, lua_tostring(L, index), &bits)) + return luaL_error(L, "Invalid netmask format"); + } + else + { + return luaL_error(L, "Invalid data type"); + } + + return bits; +} + +static int _cidr_new(lua_State *L, int index, int family, bool mask) +{ + uint32_t n; + const char *addr; + cidr_t cidr = { }, *cidrp; + + if (lua_type(L, index) == LUA_TNUMBER) + { + n = htonl(lua_tointeger(L, index)); + + if (family == AF_INET6) + { + cidr.family = AF_INET6; + cidr.bits = 128; + cidr.len = sizeof(cidr.addr.v6); + cidr.addr.v6.s6_addr[12] = n; + cidr.addr.v6.s6_addr[13] = (n >> 8); + cidr.addr.v6.s6_addr[14] = (n >> 16); + cidr.addr.v6.s6_addr[15] = (n >> 24); + } + else + { + cidr.family = AF_INET; + cidr.bits = 32; + cidr.len = sizeof(cidr.addr.v4); + cidr.addr.v4.s_addr = n; + } + } + else + { + addr = luaL_checkstring(L, index); + + if (!parse_cidr(addr, &cidr)) + return 0; + + if (family && cidr.family != family) + return 0; + + if (mask) + cidr.bits = L_checkbits(L, index + 1, &cidr); + } + + if (!(cidrp = lua_newuserdata(L, sizeof(*cidrp)))) + return 0; + + *cidrp = cidr; + luaL_getmetatable(L, LUCI_IP_CIDR); + lua_setmetatable(L, -2); + return 1; +} + +static int cidr_new(lua_State *L) +{ + return _cidr_new(L, 1, 0, true); +} + +static int cidr_ipv4(lua_State *L) +{ + return _cidr_new(L, 1, AF_INET, true); +} + +static int cidr_ipv6(lua_State *L) +{ + return _cidr_new(L, 1, AF_INET6, true); +} + +static int cidr_is4(lua_State *L) +{ + cidr_t *p = L_checkcidr(L, 1, NULL); + + lua_pushboolean(L, p->family == AF_INET); + return 1; +} + +static int cidr_is4rfc1918(lua_State *L) +{ + cidr_t *p = L_checkcidr(L, 1, NULL); + uint32_t a = htonl(p->addr.v4.s_addr); + + lua_pushboolean(L, (p->family == AF_INET && + ((a >= 0x0A000000 && a <= 0x0AFFFFFF) || + (a >= 0xAC100000 && a <= 0xAC1FFFFF) || + (a >= 0xC0A80000 && a <= 0xC0A8FFFF)))); + + return 1; +} + +static int cidr_is4linklocal(lua_State *L) +{ + cidr_t *p = L_checkcidr(L, 1, NULL); + uint32_t a = htonl(p->addr.v4.s_addr); + + lua_pushboolean(L, (p->family == AF_INET && + a >= 0xA9FE0000 && + a <= 0xA9FEFFFF)); + + return 1; +} + +static bool _is_mapped4(cidr_t *p) +{ + return (p->family == AF_INET6 && + p->addr.v6.s6_addr[0] == 0 && + p->addr.v6.s6_addr[1] == 0 && + p->addr.v6.s6_addr[2] == 0 && + p->addr.v6.s6_addr[3] == 0 && + p->addr.v6.s6_addr[4] == 0 && + p->addr.v6.s6_addr[5] == 0 && + p->addr.v6.s6_addr[6] == 0 && + p->addr.v6.s6_addr[7] == 0 && + p->addr.v6.s6_addr[8] == 0 && + p->addr.v6.s6_addr[9] == 0 && + p->addr.v6.s6_addr[10] == 0xFF && + p->addr.v6.s6_addr[11] == 0xFF); +} + +static int cidr_is6mapped4(lua_State *L) +{ + cidr_t *p = L_checkcidr(L, 1, NULL); + + lua_pushboolean(L, _is_mapped4(p)); + return 1; +} + +static int cidr_is6(lua_State *L) +{ + cidr_t *p = L_checkcidr(L, 1, NULL); + + lua_pushboolean(L, p->family == AF_INET6); + return 1; +} + +static int cidr_is6linklocal(lua_State *L) +{ + cidr_t *p = L_checkcidr(L, 1, NULL); + + lua_pushboolean(L, (p->family == AF_INET6 && + p->addr.v6.s6_addr[0] == 0xFE && + p->addr.v6.s6_addr[1] >= 0x80 && + p->addr.v6.s6_addr[1] <= 0xBF)); + + return 1; +} + +static int _cidr_cmp(lua_State *L) +{ + cidr_t *a = L_checkcidr(L, 1, NULL); + cidr_t *b = L_checkcidr(L, 2, NULL); + + if (a->family != b->family) + return (a->family - b->family); + + return memcmp(&a->addr.v6, &b->addr.v6, a->len); +} + +static int cidr_lower(lua_State *L) +{ + lua_pushboolean(L, _cidr_cmp(L) < 0); + return 1; +} + +static int cidr_higher(lua_State *L) +{ + lua_pushboolean(L, _cidr_cmp(L) > 0); + return 1; +} + +static int cidr_equal(lua_State *L) +{ + lua_pushboolean(L, _cidr_cmp(L) == 0); + return 1; +} + +static int cidr_lower_equal(lua_State *L) +{ + lua_pushboolean(L, _cidr_cmp(L) <= 0); + return 1; +} + +static int cidr_prefix(lua_State *L) +{ + cidr_t *p = L_checkcidr(L, 1, NULL); + int bits = L_checkbits(L, 2, p); + + p->bits = bits; + lua_pushinteger(L, p->bits); + return 1; +} + +static void _apply_mask(cidr_t *p, int bits, bool inv) +{ + uint8_t b, i; + + if (bits <= 0) + { + memset(&p->addr.v6, inv * 0xFF, p->len); + } + else if (p->family == AF_INET && bits <= 32) + { + if (inv) + p->addr.v4.s_addr |= ntohl((1 << (32 - bits)) - 1); + else + p->addr.v4.s_addr &= ntohl(~((1 << (32 - bits)) - 1)); + } + else if (p->family == AF_INET6 && bits <= 128) + { + for (i = 0; i < sizeof(p->addr.v6.s6_addr); i++) + { + b = (bits > 8) ? 8 : bits; + if (inv) + p->addr.v6.s6_addr[i] |= ~((uint8_t)(0xFF << (8 - b))); + else + p->addr.v6.s6_addr[i] &= (uint8_t)(0xFF << (8 - b)); + bits -= b; + } + } +} + +static int cidr_network(lua_State *L) +{ + cidr_t *p1 = L_checkcidr(L, 1, NULL), *p2; + int bits = L_checkbits(L, 2, p1); + + if (!(p2 = lua_newuserdata(L, sizeof(*p2)))) + return 0; + + *p2 = *p1; + p2->bits = (p1->family == AF_INET) ? 32 : 128; + _apply_mask(p2, bits, false); + + luaL_getmetatable(L, LUCI_IP_CIDR); + lua_setmetatable(L, -2); + return 1; +} + +static int cidr_host(lua_State *L) +{ + cidr_t *p1 = L_checkcidr(L, 1, NULL); + cidr_t *p2 = lua_newuserdata(L, sizeof(*p2)); + + if (!p2) + return 0; + + *p2 = *p1; + p2->bits = (p1->family == AF_INET) ? 32 : 128; + + luaL_getmetatable(L, LUCI_IP_CIDR); + lua_setmetatable(L, -2); + return 1; +} + +static int cidr_mask(lua_State *L) +{ + cidr_t *p1 = L_checkcidr(L, 1, NULL), *p2; + int bits = L_checkbits(L, 2, p1); + + if (!(p2 = lua_newuserdata(L, sizeof(*p2)))) + return 0; + + p2->bits = (p1->family == AF_INET) ? 32 : 128; + p2->family = p1->family; + + memset(&p2->addr.v6.s6_addr, 0xFF, sizeof(p2->addr.v6.s6_addr)); + _apply_mask(p2, bits, false); + + luaL_getmetatable(L, LUCI_IP_CIDR); + lua_setmetatable(L, -2); + return 1; +} + +static int cidr_broadcast(lua_State *L) +{ + cidr_t *p1 = L_checkcidr(L, 1, NULL); + cidr_t *p2; + int bits = L_checkbits(L, 2, p1); + + if (p1->family == AF_INET6) + return 0; + + if (!(p2 = lua_newuserdata(L, sizeof(*p2)))) + return 0; + + *p2 = *p1; + p2->bits = (p1->family == AF_INET) ? 32 : 128; + _apply_mask(p2, bits, true); + + luaL_getmetatable(L, LUCI_IP_CIDR); + lua_setmetatable(L, -2); + return 1; +} + +static int cidr_mapped4(lua_State *L) +{ + cidr_t *p1 = L_checkcidr(L, 1, NULL); + cidr_t *p2; + + if (!_is_mapped4(p1)) + return 0; + + if (!(p2 = lua_newuserdata(L, sizeof(*p2)))) + return 0; + + p2->family = AF_INET; + p2->bits = (p1->bits > 32) ? 32 : p1->bits; + memcpy(&p2->addr.v4, p1->addr.v6.s6_addr + 12, sizeof(p2->addr.v4)); + + luaL_getmetatable(L, LUCI_IP_CIDR); + lua_setmetatable(L, -2); + return 1; +} + +static int cidr_contains(lua_State *L) +{ + cidr_t *p1 = L_checkcidr(L, 1, NULL); + cidr_t *p2 = L_checkcidr(L, 2, NULL); + cidr_t a = *p1, b = *p2; + bool rv = false; + + if (p1->family == p2->family && p1->bits <= p2->bits) + { + _apply_mask(&a, p1->bits, false); + _apply_mask(&b, p1->bits, false); + + rv = !memcmp(&a.addr.v6, &b.addr.v6, a.len); + } + + lua_pushboolean(L, rv); + return 1; +} + +#define S6_BYTE(a, i) \ + (a)->addr.v6.s6_addr[sizeof((a)->addr.v6.s6_addr) - (i) - 1] + +static int _cidr_add_sub(lua_State *L, bool add) +{ + cidr_t *p1 = L_checkcidr(L, 1, NULL); + cidr_t *p2 = L_checkcidr(L, 2, p1); + cidr_t r = *p1; + bool inplace = lua_isboolean(L, 3) ? lua_toboolean(L, 3) : false; + bool ok = true; + uint8_t i, carry; + uint32_t a, b; + + if (p1->family == p2->family) + { + if (p1->family == AF_INET6) + { + for (i = 0, carry = 0; i < sizeof(r.addr.v6.s6_addr); i++) + { + if (add) + { + S6_BYTE(&r, i) = S6_BYTE(p1, i) + S6_BYTE(p2, i) + carry; + carry = (S6_BYTE(p1, i) + S6_BYTE(p2, i) + carry) / 256; + } + else + { + S6_BYTE(&r, i) = (S6_BYTE(p1, i) - S6_BYTE(p2, i) - carry); + carry = (S6_BYTE(p1, i) < (S6_BYTE(p2, i) + carry)); + } + } + + /* would over/underflow */ + if (carry) + { + memset(&r.addr.v6, add * 0xFF, sizeof(r.addr.v6)); + ok = false; + } + } + else + { + a = ntohl(p1->addr.v4.s_addr); + b = ntohl(p2->addr.v4.s_addr); + + /* would over/underflow */ + if ((add && (UINT_MAX - a) < b) || (!add && a < b)) + { + r.addr.v4.s_addr = add * 0xFFFFFFFF; + ok = false; + } + else + { + r.addr.v4.s_addr = add ? htonl(a + b) : htonl(a - b); + } + } + } + else + { + ok = false; + } + + if (inplace) + { + *p1 = r; + lua_pushboolean(L, ok); + return 1; + } + + if (!(p1 = lua_newuserdata(L, sizeof(*p1)))) + return 0; + + *p1 = r; + + luaL_getmetatable(L, LUCI_IP_CIDR); + lua_setmetatable(L, -2); + return 1; +} + +static int cidr_add(lua_State *L) +{ + return _cidr_add_sub(L, true); +} + +static int cidr_sub(lua_State *L) +{ + return _cidr_add_sub(L, false); +} + +static int cidr_minhost(lua_State *L) +{ + cidr_t *p = L_checkcidr(L, 1, NULL); + cidr_t r = *p; + uint8_t i, rest, carry; + + _apply_mask(&r, r.bits, false); + + if (r.family == AF_INET6 && r.bits < 128) + { + r.bits = 128; + + for (i = 0, carry = 1; i < sizeof(r.addr.v6.s6_addr); i++) + { + rest = (S6_BYTE(&r, i) + carry) > 255; + S6_BYTE(&r, i) += carry; + carry = rest; + } + } + else if (r.family == AF_INET && r.bits < 32) + { + r.bits = 32; + r.addr.v4.s_addr = htonl(ntohl(r.addr.v4.s_addr) + 1); + } + + if (!(p = lua_newuserdata(L, sizeof(*p)))) + return 0; + + *p = r; + + luaL_getmetatable(L, LUCI_IP_CIDR); + lua_setmetatable(L, -2); + return 1; +} + +static int cidr_maxhost(lua_State *L) +{ + cidr_t *p = L_checkcidr(L, 1, NULL); + cidr_t r = *p; + + _apply_mask(&r, r.bits, true); + + if (r.family == AF_INET && r.bits < 32) + { + r.bits = 32; + r.addr.v4.s_addr = htonl(ntohl(r.addr.v4.s_addr) - 1); + } + else if (r.family == AF_INET6) + { + r.bits = 128; + } + + if (!(p = lua_newuserdata(L, sizeof(*p)))) + return 0; + + *p = r; + + luaL_getmetatable(L, LUCI_IP_CIDR); + lua_setmetatable(L, -2); + return 1; +} + +static int cidr_gc (lua_State *L) +{ + return 0; +} + +static int cidr_tostring (lua_State *L) +{ + char buf[INET6_ADDRSTRLEN]; + cidr_t *p = L_checkcidr(L, 1, NULL); + + if ((p->family == AF_INET && p->bits < 32) || + (p->family == AF_INET6 && p->bits < 128)) + { + lua_pushfstring(L, "%s/%d", + inet_ntop(p->family, &p->addr.v6, buf, sizeof(buf)), + p->bits); + } + else + { + lua_pushstring(L, inet_ntop(p->family, &p->addr.v6, buf, sizeof(buf))); + } + + return 1; +} + +/* + * route functions + */ + +static bool diff_prefix(int family, void *addr, int bits, cidr_t *p) +{ + uint8_t i, b, r; + uint32_t m; + + if (!p->family) + return false; + + if (!addr || p->family != family || p->bits > bits) + return true; + + if (family == AF_INET6) + { + for (i = 0, r = p->bits; i < sizeof(struct in6_addr); i++) + { + b = r ? (0xFF << (8 - ((r > 8) ? 8 : r))) : 0; + + if ((((struct in6_addr *)addr)->s6_addr[i] & b) != + (p->addr.v6.s6_addr[i] & b)) + return true; + + r -= ((r > 8) ? 8 : r); + } + } + else + { + m = p->bits ? htonl(~((1 << (32 - p->bits)) - 1)) : 0; + + if ((((struct in_addr *)addr)->s_addr & m) != (p->addr.v4.s_addr & m)) + return true; + } + + return (p->exact && p->bits != bits); +} + +static int cb_dump_route(struct nl_msg *msg, void *arg) +{ + struct dump_state *s = arg; + struct dump_filter *f = s->filter; + struct nlmsghdr *hdr = nlmsg_hdr(msg); + struct rtmsg *rt = NLMSG_DATA(hdr); + struct nlattr *tb[RTA_MAX+1]; + struct in6_addr *src, *dst, *gw, *from, def = { }; + int iif, oif, bitlen; + uint32_t table; + + if (hdr->nlmsg_type != RTM_NEWROUTE || + (rt->rtm_family != AF_INET && rt->rtm_family != AF_INET6)) + return NL_SKIP; + + nlmsg_parse(hdr, sizeof(*rt), tb, RTA_MAX, NULL); + + iif = tb[RTA_IIF] ? RTA_INT(tb[RTA_IIF]) : 0; + oif = tb[RTA_OIF] ? RTA_INT(tb[RTA_OIF]) : 0; + table = tb[RTA_TABLE] ? RTA_U32(tb[RTA_TABLE]) : rt->rtm_table; + from = tb[RTA_SRC] ? RTA_DATA(tb[RTA_SRC]) : NULL; + src = tb[RTA_PREFSRC] ? RTA_DATA(tb[RTA_PREFSRC]) : NULL; + dst = tb[RTA_DST] ? RTA_DATA(tb[RTA_DST]) : &def; + gw = tb[RTA_GATEWAY] ? RTA_DATA(tb[RTA_GATEWAY]) : NULL; + + bitlen = (rt->rtm_family == AF_INET6) ? 128 : 32; + + if ((f->type && rt->rtm_type != f->type) || + (f->family && rt->rtm_family != f->family) || + (f->proto && rt->rtm_protocol != f->proto) || + (f->scope && rt->rtm_scope != f->scope) || + (f->iif && iif != f->iif) || + (f->oif && oif != f->oif) || + (f->table && table != f->table) || + diff_prefix(rt->rtm_family, from, rt->rtm_src_len, &f->from) || + diff_prefix(rt->rtm_family, dst, rt->rtm_dst_len, &f->dst) || + diff_prefix(rt->rtm_family, gw, bitlen, &f->gw) || + diff_prefix(rt->rtm_family, src, bitlen, &f->src)) + goto out; + + if (s->callback) + lua_pushvalue(s->L, 2); + + lua_newtable(s->L); + + L_setint(s->L, "type", rt->rtm_type); + L_setint(s->L, "family", (rt->rtm_family == AF_INET) ? 4 : 6); + + L_setaddr(s->L, "dest", rt->rtm_family, dst, rt->rtm_dst_len); + + if (gw) + L_setaddr(s->L, "gw", rt->rtm_family, gw, -1); + + if (from) + L_setaddr(s->L, "from", rt->rtm_family, from, rt->rtm_src_len); + + if (iif) + L_setdev(s->L, "iif", tb[RTA_IIF]); + + if (oif) + L_setdev(s->L, "dev", tb[RTA_OIF]); + + L_setint(s->L, "table", table); + L_setint(s->L, "proto", rt->rtm_protocol); + L_setint(s->L, "scope", rt->rtm_scope); + + if (src) + L_setaddr(s->L, "src", rt->rtm_family, src, -1); + + if (tb[RTA_PRIORITY]) + L_setint(s->L, "metric", RTA_U32(tb[RTA_PRIORITY])); + + if (rt->rtm_family == AF_INET6 && tb[RTA_CACHEINFO]) + { + struct rta_cacheinfo *ci = RTA_DATA(tb[RTA_CACHEINFO]); + + if (ci->rta_expires) + { + if (ci->rta_expires) + L_setint(s->L, "expires", ci->rta_expires / hz); + + if (ci->rta_error != 0) + L_setint(s->L, "error", ci->rta_error); + } + } + + s->index++; + + if (s->callback) + lua_call(s->L, 1, 0); + else if (hdr->nlmsg_flags & NLM_F_MULTI) + lua_rawseti(s->L, -2, s->index); + +out: + s->pending = !!(hdr->nlmsg_flags & NLM_F_MULTI); + return NL_SKIP; +} + +static int +cb_done(struct nl_msg *msg, void *arg) +{ + struct dump_state *s = arg; + s->pending = 0; + return NL_STOP; +} + +static int +cb_error(struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg) +{ + struct dump_state *s = arg; + s->pending = 0; + return NL_STOP; +} + +static int _error(lua_State *L, int code, const char *msg) +{ + lua_pushnil(L); + lua_pushnumber(L, code ? code : errno); + lua_pushstring(L, msg ? msg : strerror(errno)); + + return 3; +} + +static int _route_dump(lua_State *L, struct dump_filter *filter) +{ + int flags = NLM_F_REQUEST; + struct dump_state s = { + .L = L, + .pending = 1, + .index = 0, + .callback = lua_isfunction(L, 2), + .filter = filter + }; + + if (!hz) + hz = sysconf(_SC_CLK_TCK); + + if (!sock) + { + sock = nl_socket_alloc(); + if (!sock) + return _error(L, -1, "Out of memory"); + + if (nl_connect(sock, NETLINK_ROUTE)) + return _error(L, 0, NULL); + } + + struct nl_msg *msg; + struct nl_cb *cb = nl_cb_alloc(NL_CB_DEFAULT); + struct rtmsg rtm = { + .rtm_family = filter->family, + .rtm_dst_len = filter->dst.bits, + .rtm_src_len = filter->src.bits + }; + + if (!filter->get) + flags |= NLM_F_DUMP; + + msg = nlmsg_alloc_simple(RTM_GETROUTE, flags); + if (!msg) + goto out; + + nlmsg_append(msg, &rtm, sizeof(rtm), 0); + + if (filter->get) + nla_put(msg, RTA_DST, filter->dst.len, &filter->dst.addr.v6); + + nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, cb_dump_route, &s); + nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, cb_done, &s); + nl_cb_err(cb, NL_CB_CUSTOM, cb_error, &s); + + nl_send_auto_complete(sock, msg); + + if (!filter->get && !s.callback) + lua_newtable(L); + + while (s.pending > 0) + nl_recvmsgs(sock, cb); + + nlmsg_free(msg); + +out: + nl_cb_put(cb); + return (s.callback == 0); +} + +static int route_get(lua_State *L) +{ + struct dump_filter filter = { .get = true }; + const char *dest = luaL_checkstring(L, 1); + + if (!parse_cidr(dest, &filter.dst)) + return _error(L, -1, "Invalid destination"); + + filter.family = filter.dst.family; + + return _route_dump(L, &filter); +} + +static int route_dump(lua_State *L) +{ + const char *s; + cidr_t p = { }; + struct dump_filter filter = { }; + + if (lua_type(L, 1) == LUA_TTABLE) + { + filter.family = L_getint(L, 1, "family"); + + if (filter.family == 4) + filter.family = AF_INET; + else if (filter.family == 6) + filter.family = AF_INET6; + else + filter.family = 0; + + if ((s = L_getstr(L, 1, "iif")) != NULL) + filter.iif = if_nametoindex(s); + + if ((s = L_getstr(L, 1, "oif")) != NULL) + filter.oif = if_nametoindex(s); + + filter.type = L_getint(L, 1, "type"); + filter.scope = L_getint(L, 1, "scope"); + filter.proto = L_getint(L, 1, "proto"); + filter.table = L_getint(L, 1, "table"); + + if ((s = L_getstr(L, 1, "gw")) != NULL && parse_cidr(s, &p)) + filter.gw = p; + + if ((s = L_getstr(L, 1, "from")) != NULL && parse_cidr(s, &p)) + filter.from = p; + + if ((s = L_getstr(L, 1, "src")) != NULL && parse_cidr(s, &p)) + filter.src = p; + + if ((s = L_getstr(L, 1, "dest")) != NULL && parse_cidr(s, &p)) + filter.dst = p; + + if ((s = L_getstr(L, 1, "from_exact")) != NULL && parse_cidr(s, &p)) + filter.from = p, filter.from.exact = true; + + if ((s = L_getstr(L, 1, "dest_exact")) != NULL && parse_cidr(s, &p)) + filter.dst = p, filter.dst.exact = true; + } + + return _route_dump(L, &filter); +} + + +static bool diff_macaddr(struct ether_addr *mac1, struct ether_addr *mac2) +{ + struct ether_addr empty = { }; + + if (!memcmp(mac2, &empty, sizeof(empty))) + return false; + + if (!mac1 || memcmp(mac1, mac2, sizeof(empty))) + return true; + + return false; +} + +static int cb_dump_neigh(struct nl_msg *msg, void *arg) +{ + char buf[32]; + struct ether_addr *mac; + struct in6_addr *dst; + struct dump_state *s = arg; + struct dump_filter *f = s->filter; + struct nlmsghdr *hdr = nlmsg_hdr(msg); + struct ndmsg *nd = NLMSG_DATA(hdr); + struct nlattr *tb[NDA_MAX+1]; + int bitlen; + + if (hdr->nlmsg_type != RTM_NEWNEIGH || + (nd->ndm_family != AF_INET && nd->ndm_family != AF_INET6)) + return NL_SKIP; + + nlmsg_parse(hdr, sizeof(*nd), tb, NDA_MAX, NULL); + + mac = tb[NDA_LLADDR] ? RTA_DATA(tb[NDA_LLADDR]) : NULL; + dst = tb[NDA_DST] ? RTA_DATA(tb[NDA_DST]) : NULL; + + bitlen = (nd->ndm_family == AF_INET) ? 32 : 128; + + if ((f->family && nd->ndm_family != f->family) || + (f->iif && nd->ndm_ifindex != f->iif) || + (f->type && !(f->type & nd->ndm_state)) || + diff_prefix(nd->ndm_family, dst, bitlen, &f->dst) || + diff_macaddr(mac, &f->mac)) + goto out; + + if (s->callback) + lua_pushvalue(s->L, 2); + + lua_newtable(s->L); + + L_setint(s->L, "family", (nd->ndm_family == AF_INET) ? 4 : 6); + L_setstr(s->L, "dev", if_indextoname(nd->ndm_ifindex, buf)); + + L_setbool(s->L, "router", (nd->ndm_flags & NTF_ROUTER)); + L_setbool(s->L, "proxy", (nd->ndm_flags & NTF_PROXY)); + + L_setbool(s->L, "incomplete", (nd->ndm_state & NUD_INCOMPLETE)); + L_setbool(s->L, "reachable", (nd->ndm_state & NUD_REACHABLE)); + L_setbool(s->L, "stale", (nd->ndm_state & NUD_STALE)); + L_setbool(s->L, "delay", (nd->ndm_state & NUD_DELAY)); + L_setbool(s->L, "probe", (nd->ndm_state & NUD_PROBE)); + L_setbool(s->L, "failed", (nd->ndm_state & NUD_FAILED)); + L_setbool(s->L, "noarp", (nd->ndm_state & NUD_NOARP)); + L_setbool(s->L, "permanent", (nd->ndm_state & NUD_PERMANENT)); + + if (dst) + L_setaddr(s->L, "dest", nd->ndm_family, dst, -1); + + if (mac) + { + snprintf(buf, sizeof(buf), "%02x:%02x:%02x:%02x:%02x:%02x", + mac->ether_addr_octet[0], mac->ether_addr_octet[1], + mac->ether_addr_octet[2], mac->ether_addr_octet[3], + mac->ether_addr_octet[4], mac->ether_addr_octet[5]); + + lua_pushstring(s->L, buf); + lua_setfield(s->L, -2, "mac"); + } + + s->index++; + + if (s->callback) + lua_call(s->L, 1, 0); + else if (hdr->nlmsg_flags & NLM_F_MULTI) + lua_rawseti(s->L, -2, s->index); + +out: + s->pending = !!(hdr->nlmsg_flags & NLM_F_MULTI); + return NL_SKIP; +} + +static int neighbor_dump(lua_State *L) +{ + cidr_t p = { }; + const char *s; + struct ether_addr *mac; + struct dump_filter filter = { .type = 0xFF & ~NUD_NOARP }; + struct dump_state st = { + .callback = lua_isfunction(L, 2), + .pending = 1, + .filter = &filter, + .L = L + }; + + if (lua_type(L, 1) == LUA_TTABLE) + { + filter.family = L_getint(L, 1, "family"); + + if (filter.family == 4) + filter.family = AF_INET; + else if (filter.family == 6) + filter.family = AF_INET6; + else + filter.family = 0; + + if ((s = L_getstr(L, 1, "dev")) != NULL) + filter.iif = if_nametoindex(s); + + if ((s = L_getstr(L, 1, "dest")) != NULL && parse_cidr(s, &p)) + filter.dst = p; + + if ((s = L_getstr(L, 1, "mac")) != NULL && + (mac = ether_aton(s)) != NULL) + filter.mac = *mac; + } + + if (!sock) + { + sock = nl_socket_alloc(); + if (!sock) + return _error(L, -1, "Out of memory"); + + if (nl_connect(sock, NETLINK_ROUTE)) + return _error(L, 0, NULL); + } + + struct nl_msg *msg; + struct nl_cb *cb = nl_cb_alloc(NL_CB_DEFAULT); + struct ndmsg ndm = { + .ndm_family = filter.family + }; + + msg = nlmsg_alloc_simple(RTM_GETNEIGH, NLM_F_REQUEST | NLM_F_DUMP); + if (!msg) + goto out; + + nlmsg_append(msg, &ndm, sizeof(ndm), 0); + + nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, cb_dump_neigh, &st); + nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, cb_done, &st); + nl_cb_err(cb, NL_CB_CUSTOM, cb_error, &st); + + nl_send_auto_complete(sock, msg); + + if (!st.callback) + lua_newtable(L); + + while (st.pending > 0) + nl_recvmsgs(sock, cb); + + nlmsg_free(msg); + +out: + nl_cb_put(cb); + return (st.callback == 0); +} + + +static int cb_dump_link(struct nl_msg *msg, void *arg) +{ + char *p, *addr, buf[48]; + struct dump_state *s = arg; + struct nlmsghdr *hdr = nlmsg_hdr(msg); + struct ifinfomsg *ifm = NLMSG_DATA(hdr); + struct nlattr *tb[IFLA_MAX+1]; + int i, len; + + if (hdr->nlmsg_type != RTM_NEWLINK) + return NL_SKIP; + + nlmsg_parse(hdr, sizeof(*ifm), tb, IFLA_MAX, NULL); + + L_setbool(s->L, "up", (ifm->ifi_flags & IFF_RUNNING)); + L_setint(s->L, "type", ifm->ifi_type); + L_setstr(s->L, "name", if_indextoname(ifm->ifi_index, buf)); + + if (tb[IFLA_MTU]) + L_setint(s->L, "mtu", RTA_U32(tb[IFLA_MTU])); + + if (tb[IFLA_TXQLEN]) + L_setint(s->L, "qlen", RTA_U32(tb[IFLA_TXQLEN])); + + if (tb[IFLA_MASTER]) + L_setdev(s->L, "master", tb[IFLA_MASTER]); + + if (tb[IFLA_ADDRESS]) + { + len = nla_len(tb[IFLA_ADDRESS]); + addr = nla_get_string(tb[IFLA_ADDRESS]); + + if ((len * 3) <= sizeof(buf)) + { + for (p = buf, i = 0; i < len; i++) + p += sprintf(p, "%s%02x", (i ? ":" : ""), (uint8_t)*addr++); + + L_setstr(s->L, "mac", buf); + } + } + + s->pending = 0; + return NL_SKIP; +} + +static int link_get(lua_State *L) +{ + const char *dev = luaL_checkstring(L, 1); + struct dump_state st = { + .pending = 1, + .L = L + }; + + if (!sock) + { + sock = nl_socket_alloc(); + if (!sock) + return _error(L, -1, "Out of memory"); + + if (nl_connect(sock, NETLINK_ROUTE)) + return _error(L, 0, NULL); + } + + struct nl_msg *msg = nlmsg_alloc_simple(RTM_GETLINK, NLM_F_REQUEST); + struct nl_cb *cb = nl_cb_alloc(NL_CB_DEFAULT); + struct ifinfomsg ifm = { .ifi_index = if_nametoindex(dev) }; + + if (!msg || !cb) + return 0; + + nlmsg_append(msg, &ifm, sizeof(ifm), 0); + + nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, cb_dump_link, &st); + nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, cb_done, &st); + nl_cb_err(cb, NL_CB_CUSTOM, cb_error, &st); + + lua_newtable(L); + + nl_send_auto_complete(sock, msg); + + while (st.pending > 0) + nl_recvmsgs(sock, cb); + + nlmsg_free(msg); + nl_cb_put(cb); + + return 1; +} + + +static const luaL_reg ip_methods[] = { + { "new", cidr_new }, + { "IPv4", cidr_ipv4 }, + { "IPv6", cidr_ipv6 }, + + { "route", route_get }, + { "routes", route_dump }, + + { "neighbors", neighbor_dump }, + + { "link", link_get }, + + { } +}; + +static const luaL_reg ip_cidr_methods[] = { + { "is4", cidr_is4 }, + { "is4rfc1918", cidr_is4rfc1918 }, + { "is4linklocal", cidr_is4linklocal }, + { "is6", cidr_is6 }, + { "is6linklocal", cidr_is6linklocal }, + { "is6mapped4", cidr_is6mapped4 }, + { "lower", cidr_lower }, + { "higher", cidr_higher }, + { "equal", cidr_equal }, + { "prefix", cidr_prefix }, + { "network", cidr_network }, + { "host", cidr_host }, + { "mask", cidr_mask }, + { "broadcast", cidr_broadcast }, + { "mapped4", cidr_mapped4 }, + { "contains", cidr_contains }, + { "add", cidr_add }, + { "sub", cidr_sub }, + { "minhost", cidr_minhost }, + { "maxhost", cidr_maxhost }, + { "string", cidr_tostring }, + + { "__lt", cidr_lower }, + { "__le", cidr_lower_equal }, + { "__eq", cidr_equal }, + { "__add", cidr_add }, + { "__sub", cidr_sub }, + { "__gc", cidr_gc }, + { "__tostring", cidr_tostring }, + + { } +}; + +int luaopen_luci_ip(lua_State *L) +{ + luaL_register(L, LUCI_IP, ip_methods); + + luaL_newmetatable(L, LUCI_IP_CIDR); + luaL_register(L, NULL, ip_cidr_methods); + lua_pushvalue(L, -1); + lua_setfield(L, -2, "__index"); + lua_pop(L, 1); + + return 1; +} diff --git a/feeds/luci/libs/luci-lib-ip/src/ip.luadoc b/feeds/luci/libs/luci-lib-ip/src/ip.luadoc new file mode 100644 index 0000000..e32ae72 --- /dev/null +++ b/feeds/luci/libs/luci-lib-ip/src/ip.luadoc @@ -0,0 +1,831 @@ +--- LuCI IP calculation and netlink access library. +module "luci.ip" + +---[[ +Construct a new luci.ip.cidr instance and autodetect the address family. +Throws an error if the given strings do not represent a valid address or +if the given optional netmask is of a different family. +@class function +@sort 1 +@name new +@param address String containing a valid IPv4 or IPv6 address, optionally +with prefix size (CIDR notation) or netmask separated by slash. +@param netmask String containing a valid IPv4 or IPv6 netmask or number +containing a prefix size in bits (`0..32` for IPv4, +`0..128` for IPv6). Overrides mask embedded in the first argument +if specified. (optional) +@return A `luci.ip.cidr` object representing the given +address/mask range. +@usage `addr = luci.ip.new("10.24.0.1/24") +addr = luci.ip.new("10.24.0.1/255.255.255.0") +addr = luci.ip.new("10.24.0.1", "255.255.255.0") -- separate netmask +addr = luci.ip.new("10.24.0.1/24", 16) -- override netmask + +addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/64") +addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/ffff:ffff:ffff:ffff::") +addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17", "ffff:ffff:ffff:ffff::") +addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/64", 128) -- override netmask` +@see IPv4 +@see IPv6 +]] + +---[[ +Construct a new IPv4 luci.ip.cidr instance. +Throws an error if the given string does not represent a valid IPv4 address or +if the given optional netmask is of a different family. +@class function +@sort 2 +@name IPv4 +@param address String containing a valid IPv4, optionally with prefix size +(CIDR notation) or netmask separated by slash. +@param netmask String containing a valid IPv4 netmask or number +containing a prefix size between `0` and `32` bit. +Overrides mask embedded in the first argument if specified. (optional) +@return A `luci.ip.cidr` object representing the given IPv4 range. +@usage `addr = luci.ip.IPv4("10.24.0.1/24") +addr = luci.ip.IPv4("10.24.0.1/255.255.255.0") +addr = luci.ip.IPv4("10.24.0.1", "255.255.255.0") -- separate netmask +addr = luci.ip.IPv4("10.24.0.1/24", 16) -- override netmask` +@see IPv6 +]] + +---[[ +Construct a new IPv6 luci.ip.cidr instance. +Throws an error if the given string does not represent a valid IPv6 address or +if the given optional netmask is of a different family. +@class function +@sort 3 +@name IPv6 +@param address String containing a valid IPv6, optionally with prefix size +(CIDR notation) or netmask separated by slash. +@param netmask String containing a valid IPv4 netmask or number +containing a prefix size between `0` and `128` bit. +Overrides mask embedded in the first argument if specified. (optional) +@return A `luci.ip.cidr` object representing the given IPv6 range. +@usage `addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/64") +addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/ffff:ffff:ffff:ffff::") +addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17", "ffff:ffff:ffff:ffff::") +addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/64", 128) -- override netmask` +@see IPv4 +]] + +---[[ +Determine the route leading to the given destination. +@class function +@sort 4 +@name route +@param address A `luci.ip.cidr` instance or a string containing +a valid IPv4 or IPv6 range as specified by `luci.ip.new()`. +@return

Table containing the fields described below.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
`type` +

Route type with one of the following numeric values:

+ + + + + + + + + + + + + + + + + + + + + +
`1``RTN_UNICAST` - Gateway or direct route
`2``RTN_LOCAL` - Accept locally
`3``RTN_BROADCAST` - + Accept locally as broadcast send as broadcast
`4``RTN_ANYCAST` - + Accept locally as broadcast but send as unicast
`5``RTN_MULTICAST` - Multicast route
+
`family`Number containing the route family, `4` for IPv4 or + `6` for IPv6
`dest`Destination `luci.ip.cidr` instance
`gw`Gateway `luci.ip.cidr` instance (optional)
`from`Source address `luci.ip.cidr` instance (optional)
`src`Preferred source `luci.ip.cidr` instance (optional)
`dev`String containing the name of the outgoing interface
`iif`String containing the name of the incoming interface (optional)
`table`Number of the associated routing table (`0..65535`)
`proto`Number of the associated routing protocol
`scope`Number describing the scope of the route, most commonly + `0` for global or `253` for on-link
`metric`Number describing the route metric (optional)
`expires`Number of seconds the prefix is valid (IPv6 only, optional)
`error`Route destination error code (optional)
+@usage
    +
  • Find default gateway by getting route to Google's public NS server +`rt = luci.ip.route("8.8.8.8") +if rt ~= nil then + print("gateway is", rt.gw) +end`
  • +
  • Determine IPv6 upstream interface `rt = luci.ip.route("2001::/7") +if rt ~= nil then + print("ipv6 upstream device is", rt.dev) +end`
  • +
+@see routes +]] + +---[[ +Fetch all routes, optionally matching the given criteria. +@class function +@sort 5 +@name routes +@param filter

Table containing one or more of the possible filter +critera described below (optional)

+ + + + + + + + + + + + + + +
FieldDescription
`family` + Number describing the address family to return - `4` selects + IPv4 routes, `6` IPv6 ones. Any other value selects both. +
`iif` + String containing the incoming route interface to match. +
`oif` + String containing the outgoing route interface to match. +
`type` + Numeric type to match, e.g. `1` for unicast. +
`scope` + Numeric scope to match, e.g. `253` for onlink. +
`proto` + Numeric protocol to match, e.g. `2` for boot. +
`table` + Numeric routing table to match (`0..65535`). +
`gw` + String containing the gateway address to match. Can be in any notation + specified by `luci.ip.new()`. Prefix matching is performed when + comparing the routes, e.g. "192.168.1.0/24" would select routes with gateway + addresses `192.168.1.1 .. 192.168.1.255`. +
`dest` + String containing the destination to match. Prefix matching is performed. +
`from` + String containing the source address to match. Prefix matching is performed. +
`src` + String containing the preferred source address to match. + Prefix matching is performed. +
`dest_exact` + String containing the destination to match. Exact matching is performed, + e.g. `dest = "0.0.0.0/0"` would match any IPv4 route + while `dest_exact = "0.0.0.0/0"` will only match the + default route. +
`from_exact` + String containing the source address to match. Exact matching is performed. +
+@param callback

Callback function to invoke for each found route +instead of returning one table of route objects (optional)

+@return If no callback function is provided, a table of routes +as specified by `luci.ip.route()` +is returned. If a callback function is given, it is invoked for each route +and nothing is returned. +@see route +@usage
    +
  • Find all IPv4 default routes: +`luci.ip.routes({ dest_exact = "0.0.0.0/0" }, function(rt) + print(rt.type, rt.gw, rt.dev) +end)`
  • +
  • Find all global IPv6 prefixes on the current system: +`luci.ip.routes({ from = "2001::/7" }, function(rt) + print(rt.from) +end)`
  • +
  • Fetch all IPv4 routes: +`routes = luci.ip.routes({ family = 4 }) +for _, rt in ipairs(routes) do + print(rt.dest, rt.gw, rt.dev) +end`
  • +
+]] + +---[[ +Fetches entries from the IPv4 ARP and IPv6 neighbour kernel table +@class function +@sort 6 +@name neighbors +@param filter

Table containing one or more of the possible filter +critera described below (optional)

+ + + + + +
FieldDescription
`family` + Number describing the address family to return - `4` selects + IPv4 ARP, `6` select IPv6 neighbour entries. Any other value + selects both. +
`dev` + String containing the associated interface to match. +
`dest` + String containing the associated address to match. Can be in any notation + specified by `luci.ip.new()`. Prefix matching is performed when + comparing the addresses, e.g. "192.168.1.0/24" would select ARP entries + for `192.168.1.1 .. 192.168.1.255`. +
`mac` + String containing MAC address to match. +
+@param callback

Callback function to invoke for each found neighbour +entry instead of returning one table of neighbour entries (optional)

+@return If no callback function is provided, a table of neighbour entries +is returned. If a callback function is given, it is invoked for each entry +and nothing is returned. + +A neighbour entry is a table containing the following fields: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
`family`Number containing the neighbour entry family, `4` for IPv4 + ARP or `6` for IPv6 NDP
`dev`String containing the associated device of the neighbour entry
`dest`IP address `luci.ip.cidr` instance
`mac`String containing the associated MAC address
`router`Boolean "true" if the neighbour entry is a router (IPv6, optional)
`proxy`Boolean "true" if this is a proxy entry (optional)
`incomplete`Boolean "true" if the entry is in incomplete state (optional)
`reachable`Boolean "true" if the entry is in reachable state (optional)
`stale`Boolean "true" if the entry is stale (optional)
`delay`Boolean "true" if the entry is delayed (optional)
`probe`Boolean "true" if the entry is in probe state (optional)
`failed`Boolean "true" if the entry is in failed state (optional)
`noarp`Boolean "true" if the entry is not caused by NDP or + ARP (optional)
`permanent`Boolean "true" if the entry was statically configured from + userspace (optional)
+@usage
    +
  • Find all ARP neighbours in the LAN: +`luci.ip.neighbors({ dest = "192.168.0.0/16" }, function(n) + print(n.dest, n.mac) +end)`
  • +
  • Find all active IPv6 addresses of host with given MAC: +`luci.ip.neighbors({ family = 6, mac = "00:21:63:75:aa:17" }, + function(n) + print(n.dest) + end)`
  • +
+]] + +---[[ +Fetch basic device information +@class function +@sort 7 +@name link +@param device String containing the network device to query +@return If the given interface is found, a table containing the fields +described below is returned, else an empty table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
`up`Boolean indicating whether the device is in IFF_RUNNING state
`type`Numeric value indicating the type of the device, e.g. `1` + for ethernet.
`name`String containing the name of the device
`master`If queried device is a bridge port, string containing the name of + parent bridge device (optional)
`mtu`Number containing the current MTU of the device
`qlen`Number containing the TX queue length of the device
`mac`String containing the link local address of the device in + dotted hex notation
+@usage
    +
  • Test whether device br-lan exists: +`print(luci.ip.link("br-lan").name ~= nil) +`
  • +
  • Query MAC address of eth0: +`print(luci.ip.link("eth0").mac) +`
  • +
+]] + + +--- IP CIDR Object. +-- Represents an IPv4 or IPv6 address range. +-- @cstyle instance +module "luci.ip.cidr" + +---[[ +Checks whether the CIDR instance is an IPv4 address range + +@class function +@sort 1 +@name cidr.is4 +@see cidr.is6 +@return `true` if the CIDR is an IPv4 range, else `false` +]] + +---[[ +Checks whether the CIDR instance is within the private RFC1918 address space + +@class function +@sort 2 +@name cidr.is4rfc1918 +@return `true` if the entire range of this CIDR lies within one of + the ranges `10.0.0.0-10.255.255.255`, + `172.16.0.0-172.31.0.0` or + `192.168.0.0-192.168.255.255`, else `false`. +@usage `local addr = luci.ip.new("192.168.45.2/24") +if addr:is4rfc1918() then + print("Is a private address") +end` +]] + +---[[ +Checks whether the CIDR instance is an IPv4 link local (Zeroconf) address + +@class function +@sort 3 +@name cidr.is4linklocal +@return `true` if the entire range of this CIDR lies within the range + the range `169.254.0.0-169.254.255.255`, else `false`. +@usage `local addr = luci.ip.new("169.254.34.125") +if addr:is4linklocal() then + print("Is a zeroconf address") +end` +]] + +---[[ +Checks whether the CIDR instance is an IPv6 address range + +@class function +@sort 4 +@name cidr.is6 +@see cidr.is4 +@return `true` if the CIDR is an IPv6 range, else `false` +]] + +---[[ +Checks whether the CIDR instance is an IPv6 link local address + +@class function +@sort 5 +@name cidr.is6linklocal +@return `true` if the entire range of this CIDR lies within the range + the `fe80::/10` range, else `false`. +@usage `local addr = luci.ip.new("fe92:53a:3216:af01:221:63ff:fe75:aa17/64") +if addr:is6linklocal() then + print("Is a linklocal address") +end` +]] + +---[[ +Checks whether the CIDR instance is an IPv6 mapped IPv4 address + +@class function +@sort 6 +@name cidr.is6mapped4 +@return `true` if the address is an IPv6 mapped IPv4 address in the + form `::ffff:1.2.3.4`. +@usage `local addr = luci.ip.new("::ffff:192.168.1.1") +if addr:is6mapped4() then + print("Is a mapped IPv4 address") +end` +]] + +---[[ +Checks whether this CIDR instance is lower than the given argument. +The comparisation follows these rules: +
  • An IPv4 address is always lower than an IPv6 address
  • +
  • Prefix sizes are ignored
+ +@class function +@sort 7 +@name cidr.lower +@param addr A `luci.ip.cidr` instance or a string convertable by + `luci.ip.new()` to compare against. +@return `true` if this CIDR is lower than the given address, + else `false`. +@usage `local addr = luci.ip.new("192.168.1.1") +print(addr:lower(addr)) -- false +print(addr:lower("10.10.10.10/24")) -- false +print(addr:lower(luci.ip.new("::1"))) -- true +print(addr:lower(luci.ip.new("192.168.200.1"))) -- true` +@see cidr.higher +@see cidr.equal +]] + +---[[ +Checks whether this CIDR instance is higher than the given argument. +The comparisation follows these rules: +
  • An IPv4 address is always lower than an IPv6 address
  • +
  • Prefix sizes are ignored
+ +@class function +@sort 8 +@name cidr.higher +@param addr A `luci.ip.cidr` instance or a string convertable by + `luci.ip.new()` to compare against. +@return `true` if this CIDR is higher than the given address, + else `false`. +@usage `local addr = luci.ip.new("192.168.1.1") +print(addr:higher(addr)) -- false +print(addr:higher("10.10.10.10/24")) -- true +print(addr:higher(luci.ip.new("::1"))) -- false +print(addr:higher(luci.ip.new("192.168.200.1"))) -- false` +@see cidr.lower +@see cidr.equal +]] + +---[[ +Checks whether this CIDR instance is equal to the given argument. + +@class function +@sort 9 +@name cidr.equal +@param addr A `luci.ip.cidr` instance or a string convertable by + `luci.ip.new()` to compare against. +@return `true` if this CIDR is equal to the given address, + else `false`. +@usage `local addr = luci.ip.new("192.168.1.1") +print(addr:equal(addr)) -- true +print(addr:equal("192.168.1.1")) -- true +print(addr:equal(luci.ip.new("::1"))) -- false + +local addr6 = luci.ip.new("::1") +print(addr6:equal("0:0:0:0:0:0:0:1/64")) -- true +print(addr6:equal(luci.ip.new("fe80::221:63ff:fe75:aa17"))) -- false` +@see cidr.lower +@see cidr.higher +]] + +---[[ +Get or set prefix size of CIDR instance. +If the optional mask parameter is given, the prefix size of this CIDR is altered +else the current prefix size is returned. + +@class function +@sort 10 +@name cidr.prefix +@param mask Either a number containing the number of bits (`0..32` + for IPv4, `0..128` for IPv6) or a string containing a valid + netmask (optional) +@return Bit count of the current prefix size +@usage `local range = luci.ip.new("192.168.1.1/255.255.255.0") +print(range:prefix()) -- 24 + +range:prefix(16) +print(range:prefix()) -- 16 + +range:prefix("255.255.255.255") +print(range:prefix()) -- 32` +]] + +---[[ +Derive network address of CIDR instance. + +Returns a new CIDR instance representing the network address of this instance +with all host parts masked out. The used prefix size can be overridden by the +optional mask parameter. + +@class function +@sort 11 +@name cidr.network +@param mask Either a number containing the number of bits (`0..32` + for IPv4, `0..128` for IPv6) or a string containing a valid + netmask (optional) +@return CIDR instance representing the network address +@usage `local range = luci.ip.new("192.168.62.243/255.255.0.0") +print(range:network()) -- "192.168.0.0" +print(range:network(24)) -- "192.168.62.0" +print(range:network("255.255.255.0")) -- "192.168.62.0" + +local range6 = luci.ip.new("fd9b:62b3:9cc5:0:221:63ff:fe75:aa17/64") +print(range6:network()) -- "fd9b:62b3:9cc5::"` +]] + +---[[ +Derive host address of CIDR instance. + +This function essentially constructs a copy of this CIDR with the prefix size +set to `32` for IPv4 and `128` for IPv6. + +@class function +@sort 12 +@name cidr.host +@return CIDR instance representing the host address +@usage `local range = luci.ip.new("172.19.37.45/16") +print(range) -- "172.19.37.45/16" +print(range:host()) -- "172.19.37.45"` +]] + +---[[ +Derive netmask of CIDR instance. + +Constructs a CIDR instance representing the netmask of this instance. The used +prefix size can be overridden by the optional mask parameter. + +@class function +@sort 13 +@name cidr.mask +@param mask Either a number containing the number of bits (`0..32` + for IPv4, `0..128` for IPv6) or a string containing a valid + netmask (optional) +@return CIDR instance representing the netmask +@usage `local range = luci.ip.new("172.19.37.45/16") +print(range:mask()) -- "255.255.0.0" +print(range:mask(24)) -- "255.255.255.0" +print(range:mask("255.0.0.0")) -- "255.0.0.0"` +]] + +---[[ +Derive broadcast address of CIDR instance. + +Constructs a CIDR instance representing the broadcast address of this instance. +The used prefix size can be overridden by the optional mask parameter. + +This function has no effect on IPv6 instances, it will return nothing in this +case. + +@class function +@sort 14 +@name cidr.broadcast +@param mask Either a number containing the number of bits (`0..32` + for IPv4, `0..128` for IPv6) or a string containing a valid + netmask (optional) +@return Return a new CIDR instance representing the broadcast address if this + instance is an IPv4 range, else return nothing. +@usage `local range = luci.ip.new("172.19.37.45/16") +print(range:broadcast()) -- "172.19.255.255" +print(range:broadcast(24)) -- "172.19.37.255" +print(range:broadcast("255.0.0.0")) -- "172.255.255.255"` +]] + +---[[ +Derive mapped IPv4 address of CIDR instance. + +Constructs a CIDR instance representing the IPv4 address of the IPv6 mapped +IPv4 address in this instance. + +This function has no effect on IPv4 instances or IPv6 instances which are not a +mapped address, it will return nothing in this case. + +@class function +@sort 15 +@name cidr.mapped4 +@return Return a new CIDR instance representing the IPv4 address if this + instance is an IPv6 mapped IPv4 address, else return nothing. +@usage `local addr = luci.ip.new("::ffff:172.16.19.1") +print(addr:mapped4()) -- "172.16.19.1"` +]] + +---[[ +Test whether CIDR contains given range. + +@class function +@sort 16 +@name cidr.contains +@param addr A `luci.ip.cidr` instance or a string convertable by + `luci.ip.new()` to test. +@return `true` if this instance fully contains the given address else + `false`. +@usage `local range = luci.ip.new("10.24.0.0/255.255.0.0") +print(range:contains("10.24.5.1")) -- true +print(range:contains("::1")) -- false +print(range:contains("10.0.0.0/8")) -- false + +local range6 = luci.ip.new("fe80::/10") +print(range6:contains("fe80::221:63f:fe75:aa17/64")) -- true +print(range6:contains("fd9b:6b3:c5:0:221:63f:fe75:aa17/64")) -- false` +]] + +---[[ +Add given amount to CIDR instance. If the result would overflow the maximum +address space, the result is set to the highest possible address. + +@class function +@sort 17 +@name cidr.add +@param amount A numeric value between 0 and 0xFFFFFFFF, a + `luci.ip.cidr` instance or a string convertable by + `luci.ip.new()`. +@param inplace If `true`, modify this instance instead of returning + a new derived CIDR instance. +@return
    +
  • When adding inplace: Return `true` if the addition succeded + or `false` when the addition overflowed.
  • +
  • When deriving new CIDR: Return new instance representing the value of + this instance plus the added amount or the highest possible address if + the addition overflowed the available address space.
+@usage `local addr = luci.ip.new("192.168.1.1/24") +print(addr:add(250)) -- "192.168.1.251/24" +print(addr:add("0.0.99.0")) -- "192.168.100.1/24" + +addr:add(256, true) -- true +print(addr) -- "192.168.2.1/24 + +addr:add("255.0.0.0", true) -- false (overflow) +print(addr) -- "255.255.255.255/24 + +local addr6 = luci.ip.new("fe80::221:63f:fe75:aa17/64") +print(addr6:add(256)) -- "fe80::221:63f:fe75:ab17/64" +print(addr6:add("::ffff:0")) -- "fe80::221:640:fe74:aa17/64" + +addr:add(256, true) -- true +print(addr) -- "fe80::221:63f:fe75:ab17/64 + +addr:add("ffff::", true) -- false (overflow) +print(addr) -- "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/64"` +]] + +---[[ +Substract given amount from CIDR instance. If the result would under, the lowest +possible address is returned. + +@class function +@sort 18 +@name cidr.sub +@param amount A numeric value between 0 and 0xFFFFFFFF, a + `luci.ip.cidr` instance or a string convertable by + `luci.ip.new()`. +@param inplace If `true`, modify this instance instead of returning + a new derived CIDR instance. +@return
    +
  • When substracting inplace: Return `true` if the substraction + succeded or `false` when the substraction underflowed.
  • +
  • When deriving new CIDR: Return new instance representing the value of + this instance minus the substracted amount or the lowest address if + the substraction underflowed.
+@usage `local addr = luci.ip.new("192.168.1.1/24") +print(addr:sub(256)) -- "192.168.0.1/24" +print(addr:sub("0.168.0.0")) -- "192.0.1.1/24" + +addr:sub(256, true) -- true +print(addr) -- "192.168.0.1/24 + +addr:sub("255.0.0.0", true) -- false (underflow) +print(addr) -- "0.0.0.0/24 + +local addr6 = luci.ip.new("fe80::221:63f:fe75:aa17/64") +print(addr6:sub(256)) -- "fe80::221:63f:fe75:a917/64" +print(addr6:sub("::ffff:0")) -- "fe80::221:63e:fe76:aa17/64" + +addr:sub(256, true) -- true +print(addr) -- "fe80::221:63f:fe75:a917/64" + +addr:sub("ffff::", true) -- false (underflow) +print(addr) -- "::/64"` +]] + +---[[ +Calculate the lowest possible host address within this CIDR instance. + +@class function +@sort 19 +@name cidr.minhost +@return Returns a new CIDR instance representing the lowest host address + within this range. +@usage `local addr = luci.ip.new("192.168.123.56/24") +print(addr:minhost()) -- "192.168.123.1" + +local addr6 = luci.ip.new("fd9b:62b3:9cc5:0:221:63ff:fe75:aa17/64") +print(addr6:minhost()) -- "fd9b:62b3:9cc5::1"` +]] + +---[[ +Calculate the highest possible host address within this CIDR instance. + +@class function +@sort 20 +@name cidr.maxhost +@return Returns a new CIDR instance representing the highest host address + within this range. +@usage `local addr = luci.ip.new("192.168.123.56/24") +print(addr:maxhost()) -- "192.168.123.254" (.255 is broadcast) + +local addr6 = luci.ip.new("fd9b:62b3:9cc5:0:221:63ff:fe75:aa17/64") +print(addr6:maxhost()) -- "fd9b:62b3:9cc5:0:ffff:ffff:ffff:ffff"` +]] + +---[[ +Convert CIDR instance into string representation. + +If the prefix size of instance is less than 32 for IPv4 or 128 for IPv6, the +address is returned in the form "address/prefix" otherwise just "address". + +It is usually not required to call this function directly as CIDR objects +define it as __tostring function in the associated metatable. + +@class function +@sort 21 +@name cidr.string +@return Returns a string representing the range or address of this CIDR instance +]] diff --git a/feeds/luci/libs/luci-lib-json/Makefile b/feeds/luci/libs/luci-lib-json/Makefile new file mode 100644 index 0000000..069886d --- /dev/null +++ b/feeds/luci/libs/luci-lib-json/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI JSON library +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/libs/luci-lib-json/luasrc/json.lua b/feeds/luci/libs/luci-lib-json/luasrc/json.lua new file mode 100644 index 0000000..f7b57f9 --- /dev/null +++ b/feeds/luci/libs/luci-lib-json/luasrc/json.lua @@ -0,0 +1,530 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local nixio = require "nixio" +local util = require "luci.util" +local table = require "table" +local string = require "string" +local coroutine = require "coroutine" + +local assert = assert +local tonumber = tonumber +local tostring = tostring +local error = error +local type = type +local pairs = pairs +local ipairs = ipairs +local next = next +local pcall = pcall + +local band = nixio.bit.band +local bor = nixio.bit.bor +local rshift = nixio.bit.rshift +local char = string.char + +local getmetatable = getmetatable + +module "luci.json" + + +function decode(json, ...) + local a = ActiveDecoder(function() return nil end, ...) + a.chunk = json + local s, obj = pcall(a.get, a) + return s and obj or nil +end + + +function encode(obj, ...) + local out = {} + local e = Encoder(obj, 1, ...):source() + local chnk, err + repeat + chnk, err = e() + out[#out+1] = chnk + until not chnk + return not err and table.concat(out) or nil +end + + +function null() + return null +end + +Encoder = util.class() + +function Encoder.__init__(self, data, buffersize, fastescape) + self.data = data + self.buffersize = buffersize or 512 + self.buffer = "" + self.fastescape = fastescape + + getmetatable(self).__call = Encoder.source +end + +function Encoder.source(self) + local source = coroutine.create(self.dispatch) + return function() + local res, data = coroutine.resume(source, self, self.data, true) + if res then + return data + else + return nil, data + end + end +end + +function Encoder.dispatch(self, data, start) + local parser = self.parsers[type(data)] + + parser(self, data) + + if start then + if #self.buffer > 0 then + coroutine.yield(self.buffer) + end + + coroutine.yield() + end +end + +function Encoder.put(self, chunk) + if self.buffersize < 2 then + coroutine.yield(chunk) + else + if #self.buffer + #chunk > self.buffersize then + local written = 0 + local fbuffer = self.buffersize - #self.buffer + + coroutine.yield(self.buffer .. chunk:sub(written + 1, fbuffer)) + written = fbuffer + + while #chunk - written > self.buffersize do + fbuffer = written + self.buffersize + coroutine.yield(chunk:sub(written + 1, fbuffer)) + written = fbuffer + end + + self.buffer = chunk:sub(written + 1) + else + self.buffer = self.buffer .. chunk + end + end +end + +function Encoder.parse_nil(self) + self:put("null") +end + +function Encoder.parse_bool(self, obj) + self:put(obj and "true" or "false") +end + +function Encoder.parse_number(self, obj) + self:put(tostring(obj)) +end + +function Encoder.parse_string(self, obj) + if self.fastescape then + self:put('"' .. obj:gsub('\\', '\\\\'):gsub('"', '\\"') .. '"') + else + self:put('"' .. + obj:gsub('[%c\\"]', + function(char) + return '\\u00%02x' % char:byte() + end + ) + .. '"') + end +end + +function Encoder.parse_iter(self, obj) + if obj == null then + return self:put("null") + end + + if type(obj) == "table" and (#obj == 0 and next(obj)) then + self:put("{") + local first = true + + for key, entry in pairs(obj) do + if key ~= null then + first = first or self:put(",") + first = first and false + self:parse_string(tostring(key)) + self:put(":") + self:dispatch(entry) + end + end + + self:put("}") + else + self:put("[") + local first = true + + if type(obj) == "table" then + for i=1, #obj do + first = first or self:put(",") + first = first and nil + self:dispatch(obj[i]) + end + else + for entry in obj do + first = first or self:put(",") + first = first and nil + self:dispatch(entry) + end + end + + self:put("]") + end +end + +Encoder.parsers = { + ['nil'] = Encoder.parse_nil, + ['table'] = Encoder.parse_iter, + ['number'] = Encoder.parse_number, + ['string'] = Encoder.parse_string, + ['boolean'] = Encoder.parse_bool, + ['function'] = Encoder.parse_iter +} + + +Decoder = util.class() + +function Decoder.__init__(self, customnull) + self.cnull = customnull + getmetatable(self).__call = Decoder.sink +end + +function Decoder.sink(self) + local sink = coroutine.create(self.dispatch) + return function(...) + return coroutine.resume(sink, self, ...) + end +end + + +function Decoder.get(self) + return self.data +end + +function Decoder.dispatch(self, chunk, src_err, strict) + local robject, object + local oset = false + + while chunk do + while chunk and #chunk < 1 do + chunk = self:fetch() + end + + assert(not strict or chunk, "Unexpected EOS") + if not chunk then break end + + local char = chunk:sub(1, 1) + local parser = self.parsers[char] + or (char:match("%s") and self.parse_space) + or (char:match("[0-9-]") and self.parse_number) + or error("Unexpected char '%s'" % char) + + chunk, robject = parser(self, chunk) + + if parser ~= self.parse_space then + assert(not oset, "Scope violation: Too many objects") + object = robject + oset = true + + if strict then + return chunk, object + end + end + end + + assert(not src_err, src_err) + assert(oset, "Unexpected EOS") + + self.data = object +end + + +function Decoder.fetch(self) + local tself, chunk, src_err = coroutine.yield() + assert(chunk or not src_err, src_err) + return chunk +end + + +function Decoder.fetch_atleast(self, chunk, bytes) + while #chunk < bytes do + local nchunk = self:fetch() + assert(nchunk, "Unexpected EOS") + chunk = chunk .. nchunk + end + + return chunk +end + + +function Decoder.fetch_until(self, chunk, pattern) + local start = chunk:find(pattern) + + while not start do + local nchunk = self:fetch() + assert(nchunk, "Unexpected EOS") + chunk = chunk .. nchunk + start = chunk:find(pattern) + end + + return chunk, start +end + + +function Decoder.parse_space(self, chunk) + local start = chunk:find("[^%s]") + + while not start do + chunk = self:fetch() + if not chunk then + return nil + end + start = chunk:find("[^%s]") + end + + return chunk:sub(start) +end + + +function Decoder.parse_literal(self, chunk, literal, value) + chunk = self:fetch_atleast(chunk, #literal) + assert(chunk:sub(1, #literal) == literal, "Invalid character sequence") + return chunk:sub(#literal + 1), value +end + + +function Decoder.parse_null(self, chunk) + return self:parse_literal(chunk, "null", self.cnull and null) +end + + +function Decoder.parse_true(self, chunk) + return self:parse_literal(chunk, "true", true) +end + + +function Decoder.parse_false(self, chunk) + return self:parse_literal(chunk, "false", false) +end + + +function Decoder.parse_number(self, chunk) + local chunk, start = self:fetch_until(chunk, "[^0-9eE.+-]") + local number = tonumber(chunk:sub(1, start - 1)) + assert(number, "Invalid number specification") + return chunk:sub(start), number +end + + +function Decoder.parse_string(self, chunk) + local str = "" + local object = nil + assert(chunk:sub(1, 1) == '"', 'Expected "') + chunk = chunk:sub(2) + + while true do + local spos = chunk:find('[\\"]') + if spos then + str = str .. chunk:sub(1, spos - 1) + + local char = chunk:sub(spos, spos) + if char == '"' then -- String end + chunk = chunk:sub(spos + 1) + break + elseif char == "\\" then -- Escape sequence + chunk, object = self:parse_escape(chunk:sub(spos)) + str = str .. object + end + else + str = str .. chunk + chunk = self:fetch() + assert(chunk, "Unexpected EOS while parsing a string") + end + end + + return chunk, str +end + + +function Decoder.utf8_encode(self, s1, s2) + local n = s1 * 256 + s2 + + if n >= 0 and n <= 0x7F then + return char(n) + elseif n >= 0 and n <= 0x7FF then + return char( + bor(band(rshift(n, 6), 0x1F), 0xC0), + bor(band(n, 0x3F), 0x80) + ) + elseif n >= 0 and n <= 0xFFFF then + return char( + bor(band(rshift(n, 12), 0x0F), 0xE0), + bor(band(rshift(n, 6), 0x3F), 0x80), + bor(band(n, 0x3F), 0x80) + ) + elseif n >= 0 and n <= 0x10FFFF then + return char( + bor(band(rshift(n, 18), 0x07), 0xF0), + bor(band(rshift(n, 12), 0x3F), 0x80), + bor(band(rshift(n, 6), 0x3F), 0x80), + bor(band(n, 0x3F), 0x80) + ) + else + return "?" + end +end + + +function Decoder.parse_escape(self, chunk) + local str = "" + chunk = self:fetch_atleast(chunk:sub(2), 1) + local char = chunk:sub(1, 1) + chunk = chunk:sub(2) + + if char == '"' then + return chunk, '"' + elseif char == "\\" then + return chunk, "\\" + elseif char == "u" then + chunk = self:fetch_atleast(chunk, 4) + local s1, s2 = chunk:sub(1, 2), chunk:sub(3, 4) + s1, s2 = tonumber(s1, 16), tonumber(s2, 16) + assert(s1 and s2, "Invalid Unicode character") + + return chunk:sub(5), self:utf8_encode(s1, s2) + elseif char == "/" then + return chunk, "/" + elseif char == "b" then + return chunk, "\b" + elseif char == "f" then + return chunk, "\f" + elseif char == "n" then + return chunk, "\n" + elseif char == "r" then + return chunk, "\r" + elseif char == "t" then + return chunk, "\t" + else + error("Unexpected escaping sequence '\\%s'" % char) + end +end + + +function Decoder.parse_array(self, chunk) + chunk = chunk:sub(2) + local array = {} + local nextp = 1 + + local chunk, object = self:parse_delimiter(chunk, "%]") + + if object then + return chunk, array + end + + repeat + chunk, object = self:dispatch(chunk, nil, true) + table.insert(array, nextp, object) + nextp = nextp + 1 + + chunk, object = self:parse_delimiter(chunk, ",%]") + assert(object, "Delimiter expected") + until object == "]" + + return chunk, array +end + + +function Decoder.parse_object(self, chunk) + chunk = chunk:sub(2) + local array = {} + local name + + local chunk, object = self:parse_delimiter(chunk, "}") + + if object then + return chunk, array + end + + repeat + chunk = self:parse_space(chunk) + assert(chunk, "Unexpected EOS") + + chunk, name = self:parse_string(chunk) + + chunk, object = self:parse_delimiter(chunk, ":") + assert(object, "Separator expected") + + chunk, object = self:dispatch(chunk, nil, true) + array[name] = object + + chunk, object = self:parse_delimiter(chunk, ",}") + assert(object, "Delimiter expected") + until object == "}" + + return chunk, array +end + + +function Decoder.parse_delimiter(self, chunk, delimiter) + while true do + chunk = self:fetch_atleast(chunk, 1) + local char = chunk:sub(1, 1) + if char:match("%s") then + chunk = self:parse_space(chunk) + assert(chunk, "Unexpected EOS") + elseif char:match("[%s]" % delimiter) then + return chunk:sub(2), char + else + return chunk, nil + end + end +end + + +Decoder.parsers = { + ['"'] = Decoder.parse_string, + ['t'] = Decoder.parse_true, + ['f'] = Decoder.parse_false, + ['n'] = Decoder.parse_null, + ['['] = Decoder.parse_array, + ['{'] = Decoder.parse_object +} + + +ActiveDecoder = util.class(Decoder) + +function ActiveDecoder.__init__(self, source, customnull) + Decoder.__init__(self, customnull) + self.source = source + self.chunk = nil + getmetatable(self).__call = self.get +end + + +function ActiveDecoder.get(self) + local chunk, src_err, object + if not self.chunk then + chunk, src_err = self.source() + else + chunk = self.chunk + end + + self.chunk, object = self:dispatch(chunk, src_err, true) + return object +end + + +function ActiveDecoder.fetch(self) + local chunk, src_err = self.source() + assert(chunk or not src_err, src_err) + return chunk +end diff --git a/feeds/luci/libs/luci-lib-json/luasrc/json.luadoc b/feeds/luci/libs/luci-lib-json/luasrc/json.luadoc new file mode 100644 index 0000000..37f97d2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-json/luasrc/json.luadoc @@ -0,0 +1,94 @@ +---[[ +LuCI JSON-Library + +@cstyle instance +]] +module "luci.json" + +---[[ +Directly decode a JSON string + +@class function +@name decode +@param json JSON-String +@return Lua object +]] + +---[[ +Direcly encode a Lua object into a JSON string. + +@class function +@name encode +@param obj Lua Object +@return JSON string +]] + +---[[ +Null replacement function + +@class function +@name null +@return null +]] + +---[[ +Create a new JSON-Encoder. + +@class function +@name Encoder +@param data Lua-Object to be encoded. +@param buffersize Blocksize of returned data source. +@param fastescape Use non-standard escaping (don't escape control chars) +@return JSON-Encoder +]] + +---[[ +Create an LTN12 source providing the encoded JSON-Data. + +@class function +@name Encoder.source +@return LTN12 source +]] + +---[[ +Create a new JSON-Decoder. + +@class function +@name Decoder +@param customnull Use luci.json.null instead of nil for decoding null +@return JSON-Decoder +]] + +---[[ +Create an LTN12 sink from the decoder object which accepts the JSON-Data. + +@class function +@name Decoder.sink +@return LTN12 sink +]] + +---[[ +Get the decoded data packets after the rawdata has been sent to the sink. + +@class function +@name Decoder.get +@return Decoded data +]] + +---[[ +Create a new Active JSON-Decoder. + +@class function +@name ActiveDecoder +@param customnull Use luci.json.null instead of nil for decoding null +@return Active JSON-Decoder +]] + +---[[ +Fetches one JSON-object from given source + +@class function +@name ActiveDecoder.get +@return Decoded object +]] + diff --git a/feeds/luci/libs/luci-lib-jsonc/Makefile b/feeds/luci/libs/luci-lib-jsonc/Makefile new file mode 100644 index 0000000..6a63dab --- /dev/null +++ b/feeds/luci/libs/luci-lib-jsonc/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2015 LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Lua binding for JSON-C +LUCI_DEPENDS:=+liblua +libjson-c + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/libs/luci-lib-jsonc/src/Makefile b/feeds/luci/libs/luci-lib-jsonc/src/Makefile new file mode 100644 index 0000000..e15fbac --- /dev/null +++ b/feeds/luci/libs/luci-lib-jsonc/src/Makefile @@ -0,0 +1,17 @@ +JSONC_CFLAGS = -std=gnu99 -I$(STAGING_DIR)/usr/include/json-c/ +JSONC_LDFLAGS = -llua -lm -ljson-c +JSONC_OBJ = jsonc.o +JSONC_LIB = jsonc.so + +%.o: %.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(LUA_CFLAGS) $(JSONC_CFLAGS) $(FPIC) -c -o $@ $< + +compile: $(JSONC_OBJ) + $(CC) $(LDFLAGS) -shared -o $(JSONC_LIB) $(JSONC_OBJ) $(JSONC_LDFLAGS) + +install: compile + mkdir -p $(DESTDIR)/usr/lib/lua/luci + cp $(JSONC_LIB) $(DESTDIR)/usr/lib/lua/luci/$(JSONC_LIB) + +clean: + rm -f *.o *.so diff --git a/feeds/luci/libs/luci-lib-jsonc/src/jsonc.c b/feeds/luci/libs/luci-lib-jsonc/src/jsonc.c new file mode 100644 index 0000000..ef11101 --- /dev/null +++ b/feeds/luci/libs/luci-lib-jsonc/src/jsonc.c @@ -0,0 +1,461 @@ +/* +Copyright 2015 Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#define _GNU_SOURCE + +#include +#include +#include + +#include +#include +#include + +#define LUCI_JSONC "luci.jsonc" +#define LUCI_JSONC_PARSER "luci.jsonc.parser" + +struct json_state { + struct json_object *obj; + struct json_tokener *tok; + enum json_tokener_error err; +}; + +static void _json_to_lua(lua_State *L, struct json_object *obj); +static struct json_object * _lua_to_json(lua_State *L, int index); + +static int json_new(lua_State *L) +{ + struct json_state *s; + struct json_tokener *tok = json_tokener_new(); + + if (!tok) + return 0; + + s = lua_newuserdata(L, sizeof(*s)); + + if (!s) + { + json_tokener_free(tok); + return 0; + } + + s->tok = tok; + s->obj = NULL; + s->err = json_tokener_continue; + + luaL_getmetatable(L, LUCI_JSONC_PARSER); + lua_setmetatable(L, -2); + + return 1; +} + +static int json_parse(lua_State *L) +{ + size_t len; + const char *json = luaL_checklstring(L, 1, &len); + struct json_state s = { + .tok = json_tokener_new() + }; + + if (!s.tok) + return 0; + + s.obj = json_tokener_parse_ex(s.tok, json, len); + s.err = json_tokener_get_error(s.tok); + + if (s.obj) + { + _json_to_lua(L, s.obj); + json_object_put(s.obj); + } + else + { + lua_pushnil(L); + } + + if (s.err == json_tokener_continue) + s.err = json_tokener_error_parse_eof; + + if (s.err) + lua_pushstring(L, json_tokener_error_desc(s.err)); + + json_tokener_free(s.tok); + return (1 + !!s.err); +} + +static int json_stringify(lua_State *L) +{ + struct json_object *obj = _lua_to_json(L, 1); + bool pretty = lua_toboolean(L, 2); + int flags = 0; + + if (pretty) + flags |= JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_SPACED; + + lua_pushstring(L, json_object_to_json_string_ext(obj, flags)); + json_object_put(obj); + return 1; +} + + +static int json_parse_chunk(lua_State *L) +{ + size_t len; + struct json_state *s = luaL_checkudata(L, 1, LUCI_JSONC_PARSER); + const char *chunk = luaL_checklstring(L, 2, &len); + + s->obj = json_tokener_parse_ex(s->tok, chunk, len); + s->err = json_tokener_get_error(s->tok); + + if (!s->err) + { + lua_pushboolean(L, true); + return 1; + } + else if (s->err == json_tokener_continue) + { + lua_pushboolean(L, false); + return 1; + } + + lua_pushnil(L); + lua_pushstring(L, json_tokener_error_desc(s->err)); + return 2; +} + +static void _json_to_lua(lua_State *L, struct json_object *obj) +{ + int n; + + switch (json_object_get_type(obj)) + { + case json_type_object: + lua_newtable(L); + json_object_object_foreach(obj, key, val) + { + _json_to_lua(L, val); + lua_setfield(L, -2, key); + } + break; + + case json_type_array: + lua_newtable(L); + for (n = 0; n < json_object_array_length(obj); n++) + { + _json_to_lua(L, json_object_array_get_idx(obj, n)); + lua_rawseti(L, -2, n + 1); + } + break; + + case json_type_boolean: + lua_pushboolean(L, json_object_get_boolean(obj)); + break; + + case json_type_int: + lua_pushinteger(L, json_object_get_int(obj)); + break; + + case json_type_double: + lua_pushnumber(L, json_object_get_double(obj)); + break; + + case json_type_string: + lua_pushstring(L, json_object_get_string(obj)); + break; + + case json_type_null: + lua_pushnil(L); + break; + } +} + +static int json_parse_get(lua_State *L) +{ + struct json_state *s = luaL_checkudata(L, 1, LUCI_JSONC_PARSER); + + if (!s->obj || s->err) + lua_pushnil(L); + else + _json_to_lua(L, s->obj); + + return 1; +} + +static int _lua_test_array(lua_State *L, int index) +{ + int max = 0; + lua_Number idx; + + lua_pushnil(L); + + /* check for non-integer keys */ + while (lua_next(L, index)) + { + if (lua_type(L, -2) != LUA_TNUMBER) + goto out; + + idx = lua_tonumber(L, -2); + + if (idx != (lua_Number)(lua_Integer)idx) + goto out; + + if (idx <= 0) + goto out; + + if (idx > max) + max = idx; + + lua_pop(L, 1); + continue; + +out: + lua_pop(L, 2); + return -1; + } + + /* check for holes */ + //for (i = 1; i <= max; i++) + //{ + // lua_rawgeti(L, index, i); + // + // if (lua_isnil(L, -1)) + // { + // lua_pop(L, 1); + // return 0; + // } + // + // lua_pop(L, 1); + //} + + return max; +} + +static struct json_object * _lua_to_json(lua_State *L, int index) +{ + lua_Number nd, ni; + struct json_object *obj; + const char *key; + int i, max; + + switch (lua_type(L, index)) + { + case LUA_TTABLE: + max = _lua_test_array(L, index); + + if (max >= 0) + { + obj = json_object_new_array(); + + if (!obj) + return NULL; + + for (i = 1; i <= max; i++) + { + lua_rawgeti(L, index, i); + + json_object_array_put_idx(obj, i - 1, + _lua_to_json(L, lua_gettop(L))); + + lua_pop(L, 1); + } + + return obj; + } + + obj = json_object_new_object(); + + if (!obj) + return NULL; + + lua_pushnil(L); + + while (lua_next(L, index)) + { + lua_pushvalue(L, -2); + key = lua_tostring(L, -1); + + if (key) + json_object_object_add(obj, key, + _lua_to_json(L, lua_gettop(L) - 1)); + + lua_pop(L, 2); + } + + return obj; + + case LUA_TNIL: + return NULL; + + case LUA_TBOOLEAN: + return json_object_new_boolean(lua_toboolean(L, index)); + + case LUA_TNUMBER: + nd = lua_tonumber(L, index); + ni = lua_tointeger(L, index); + + if (nd == ni) + return json_object_new_int(nd); + + return json_object_new_double(nd); + + case LUA_TSTRING: + return json_object_new_string(lua_tostring(L, index)); + } + + return NULL; +} + +static int json_parse_set(lua_State *L) +{ + struct json_state *s = luaL_checkudata(L, 1, LUCI_JSONC_PARSER); + + s->err = 0; + s->obj = _lua_to_json(L, 2); + + return 0; +} + +static int json_parse_sink_closure(lua_State *L) +{ + bool finished = lua_toboolean(L, lua_upvalueindex(2)); + if (lua_isnil(L, 1)) + { + // no more data available + if (finished) + { + // we were finished parsing + lua_pushboolean(L, true); + return 1; + } + else + { + lua_pushnil(L); + lua_pushstring(L, "Incomplete JSON data"); + return 2; + } + } + else + { + if (finished) + { + lua_pushnil(L); + lua_pushstring(L, "Unexpected data after complete JSON object"); + return 2; + } + else + { + // luci.jsonc.parser.chunk() + lua_pushcfunction(L, json_parse_chunk); + // parser object from closure + lua_pushvalue(L, lua_upvalueindex(1)); + // chunk + lua_pushvalue(L, 1); + lua_call(L, 2, 2); + + if (lua_isnil(L, -2)) + { + // an error occurred, leave (nil, errmsg) on the stack and return it + return 2; + } + else if (lua_toboolean(L, -2)) + { + // finished reading, set finished=true and return nil to prevent further input + lua_pop(L, 2); + lua_pushboolean(L, true); + lua_replace(L, lua_upvalueindex(2)); + lua_pushnil(L); + return 1; + } + else + { + // not finished reading, return true + lua_pop(L, 2); + lua_pushboolean(L, true); + return 1; + } + } + } +} + +static int json_parse_sink(lua_State *L) +{ + luaL_checkudata(L, 1, LUCI_JSONC_PARSER); + lua_pushboolean(L, false); + lua_pushcclosure(L, json_parse_sink_closure, 2); + return 1; +} + +static int json_tostring(lua_State *L) +{ + struct json_state *s = luaL_checkudata(L, 1, LUCI_JSONC_PARSER); + bool pretty = lua_toboolean(L, 2); + int flags = 0; + + if (pretty) + flags |= JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_SPACED; + + lua_pushstring(L, json_object_to_json_string_ext(s->obj, flags)); + return 1; +} + +static int json_gc(lua_State *L) +{ + struct json_state *s = luaL_checkudata(L, 1, LUCI_JSONC_PARSER); + + if (s->obj) + json_object_put(s->obj); + + if (s->tok) + json_tokener_free(s->tok); + + return 0; +} + + +static const luaL_reg jsonc_methods[] = { + { "new", json_new }, + { "parse", json_parse }, + { "stringify", json_stringify }, + + { } +}; + +static const luaL_reg jsonc_parser_methods[] = { + { "parse", json_parse_chunk }, + { "get", json_parse_get }, + { "set", json_parse_set }, + { "sink", json_parse_sink }, + { "stringify", json_tostring }, + + { "__gc", json_gc }, + { "__tostring", json_tostring }, + + { } +}; + + +int luaopen_luci_jsonc(lua_State *L) +{ + luaL_register(L, LUCI_JSONC, jsonc_methods); + + luaL_newmetatable(L, LUCI_JSONC_PARSER); + luaL_register(L, NULL, jsonc_parser_methods); + lua_pushvalue(L, -1); + lua_setfield(L, -2, "__index"); + lua_pop(L, 1); + + return 1; +} diff --git a/feeds/luci/libs/luci-lib-jsonc/src/jsonc.luadoc b/feeds/luci/libs/luci-lib-jsonc/src/jsonc.luadoc new file mode 100644 index 0000000..720b17d --- /dev/null +++ b/feeds/luci/libs/luci-lib-jsonc/src/jsonc.luadoc @@ -0,0 +1,146 @@ +--- LuCI JSON parsing and serialization library. +-- The luci.jsonc class is a high level Lua binding to the JSON-C library to +-- allow reading and writing JSON data with minimal overhead. +module "luci.jsonc" + +---[[ +Construct a new luci.jsonc.parser instance. +@class function +@sort 1 +@name new +@return A `luci.jsonc.parser` object representing a JSON-C tokener. +@usage `parser = luci.jsonc.new()` +]] + +---[[ +Parse a complete JSON string and convert it into a Lua data structure. +@class function +@sort 2 +@name parse +@param json A string containing the JSON data to parse, must be either a + JSON array or a JSON object. +@return On success, a table containing the parsed JSON data is returned, on + failure the function returns `nil` and a string containing the reason of + the parse error. +@usage `data = luci.jsonc.parse('{ "name": "John", "age": 34 }') +print(data.name) -- "John"` +@see stringify +]] + +---[[ +Convert given Lua data into a JSON string. + +This function recursively converts the given Lua data into a JSON string, +ignoring any unsupported data. Lua tables are converted into JSON arrays if they +only contain integer keys, mixed tables are turned into JSON objects with any +existing numeric keys converted into strings. + +Lua functions, coroutines and userdata objects are ignored and Lua numbers are +converted to integers if they do not contain fractional values. + +@class function +@sort 3 +@name stringify +@param data The Lua data to convert, can be a table, string, boolean or number. +@param pretty A boolean value indicating whether the resulting JSON should be + pretty printed. +@return Returns a string containing the JSON representation of the given Lua + data. +@usage `json = luci.jsonc.stringify({ item = true, values = { 1, 2, 3 } }) +print(json) -- '{"item":true,"values":[1,2,3]}'` +@see parse +]] + + +--- LuCI JSON parser instance. +-- A JSON parser instance is useful to parse JSON data chunk by chunk, without +-- the need to assemble all data in advance. +-- @cstyle instance +module "luci.jsonc.parser" + +---[[ +Parses one chunk of JSON data. + +@class function +@sort 1 +@name parser.parse +@see parser.get +@param json String containing the JSON fragment to parse +@return
    +
  • `true` if a complete JSON object has been parsed and no further input is + expected.
  • +
  • `false` if further input is required
  • +
  • `nil` if an error was encountered while parsing the current chunk. + In this case a string describing the parse error is returned as second + value.
+@usage `parser = luci.jsonc.new() + +while true do + chunk = ... -- fetch a cunk of data, e.g. from a socket + finish, errmsg = parser.parse(chunk) + + if finish == nil then + error("Cannot parse JSON: " .. errmsg) + end + + if finish == true then + break + end +end` +]] + +---[[ +Convert parsed JSON data into Lua table. + +@class function +@sort 2 +@name parser.get +@see parser.parse +@return Parsed JSON object converted into a Lua table or `nil` if the parser + didn't finish or encountered an error. +@usage `parser = luci.jsonc.new() +parser:parse('{ "example": "test" }') + +data = parser:get() +print(data.example) -- "test"` +]] + +---[[ +Put Lua data into the parser. + +@class function +@sort 3 +@name parser.set +@see parser.stringify +@param data Lua data to put into the parser object. The data is converted to an + internal JSON representation that can be dumped with `stringify()`. + The conversion follows the rules described in `luci.jsonc.stringify`. +@return Nothing is returned. +@usage `parser = luci.jsonc.new() +parser:set({ "some", "data" })` +]] + +---[[ +Generate an ltn12-compatible sink. + +@class function +@sort 4 +@name parser.sink +@return Returns a function that can be used as an ltn12 sink. +@usage `parser = luci.jsonc.new() +ltn12.pump.all(ltn12.source.file(io.input()), parser:sink()) +print(parser:get())` +]] + +---[[ +Serialize current parser state as JSON. + +@class function +@sort 5 +@name parser.stringify +@param pretty A boolean value indicating whether the resulting JSON should be pretty printed. +@return Returns the serialized JSON data of this parser instance. +@usage `parser = luci.jsonc.new() +parser:parse('{ "example": "test" }') +print(parser:serialize()) -- '{"example":"test"}'` +]] diff --git a/feeds/luci/libs/luci-lib-luaneightbl/Makefile b/feeds/luci/libs/luci-lib-luaneightbl/Makefile new file mode 100644 index 0000000..f0185b8 --- /dev/null +++ b/feeds/luci/libs/luci-lib-luaneightbl/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=neightbl - Lua lib for IPv6 neighbors +LUCI_DEPENDS:=+liblua + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/libs/luci-lib-luaneightbl/src/Makefile b/feeds/luci/libs/luci-lib-luaneightbl/src/Makefile new file mode 100644 index 0000000..f856d2f --- /dev/null +++ b/feeds/luci/libs/luci-lib-luaneightbl/src/Makefile @@ -0,0 +1,17 @@ +NEIGHTBL_CFLAGS = -std=gnu99 +NEIGHTBL_LDFLAGS = -llua -lm +NEIGHTBL_OBJ = neightbl.o +NEIGHTBL_LIB = neightbl.so + +%.o: %.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(LUA_CFLAGS) $(NEIGHTBL_CFLAGS) $(FPIC) -c -o $@ $< + +compile: $(NEIGHTBL_OBJ) + $(CC) $(LDFLAGS) -shared -o $(NEIGHTBL_LIB) $(NEIGHTBL_OBJ) $(NEIGHTBL_LDFLAGS) + +install: compile + mkdir -p $(DESTDIR)/usr/lib/lua + cp $(NEIGHTBL_LIB) $(DESTDIR)/usr/lib/lua/$(NEIGHTBL_LIB) + +clean: + rm -f *.o *.so diff --git a/feeds/luci/libs/luci-lib-luaneightbl/src/neightbl.c b/feeds/luci/libs/luci-lib-luaneightbl/src/neightbl.c new file mode 100644 index 0000000..987ec5e --- /dev/null +++ b/feeds/luci/libs/luci-lib-luaneightbl/src/neightbl.c @@ -0,0 +1,122 @@ +/* +License: +Copyright 2013 Steven Barth + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +char *ether_ntoa_l (const struct ether_addr *addr, char *buf) +{ + sprintf (buf, "%02x:%02x:%02x:%02x:%02x:%02x", + addr->ether_addr_octet[0], addr->ether_addr_octet[1], + addr->ether_addr_octet[2], addr->ether_addr_octet[3], + addr->ether_addr_octet[4], addr->ether_addr_octet[5]); + return buf; +} + +static int neightbl_get(lua_State *L) { + int sock = socket(AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE); + struct sockaddr_nl kernel = {AF_NETLINK, 0, 0, 0}; + if (connect(sock, (struct sockaddr*)&kernel, sizeof(kernel))) + goto error; + + const char *ifname = luaL_checkstring(L, 1); + int ifindex = if_nametoindex(ifname); + if (ifindex <= 0) + goto error; + + struct { + struct nlmsghdr hdr; + struct ndmsg ndm; + } req = { + {sizeof(req), RTM_GETNEIGH, NLM_F_REQUEST | NLM_F_DUMP, 1, 0}, + {AF_INET6, 0, 0, ifindex, 0, 0, 0}, + }; + + if (send(sock, &req, sizeof(req), 0) != sizeof(req)) + goto error; + + lua_newtable(L); + + char buf[8192]; + struct nlmsghdr *nh = (struct nlmsghdr*)buf; + do { + ssize_t len = recv(sock, buf, sizeof(buf), 0); + if (len < 0) { + lua_pop(L, 1); + goto error; + } + + + for (;NLMSG_OK(nh, (size_t)len) && nh->nlmsg_type == RTM_NEWNEIGH; + nh = NLMSG_NEXT(nh, len)) { + struct ndmsg *ndm = NLMSG_DATA(nh); + if (NLMSG_PAYLOAD(nh, 0) < sizeof(*ndm) || ndm->ndm_ifindex != ifindex) + continue; + + ssize_t alen = NLMSG_PAYLOAD(nh, sizeof(*ndm)); + char buf[INET6_ADDRSTRLEN] = {0}, *mac = NULL, str_buf[ETH_ALEN]; + for (struct rtattr *rta = (struct rtattr*)&ndm[1]; RTA_OK(rta, alen); + rta = RTA_NEXT(rta, alen)) { + if (rta->rta_type == NDA_DST && RTA_PAYLOAD(rta) >= sizeof(struct in6_addr)) + inet_ntop(AF_INET6, RTA_DATA(rta), buf, sizeof(buf)); + else if (rta->rta_type == NDA_LLADDR && RTA_PAYLOAD(rta) >= 6) + mac = ether_ntoa_l(RTA_DATA(rta),str_buf); + } + + if (mac) + lua_pushstring(L, mac); + else + lua_pushboolean(L, false); + + lua_setfield(L, -2, buf); + } + } while (nh->nlmsg_type == RTM_NEWNEIGH); + + close(sock); + return 1; + +error: + close(sock); + lua_pushnil(L); + lua_pushinteger(L, errno); + lua_pushstring(L, strerror(errno)); + return 3; +} + + +static const luaL_reg R[] = { + {"get", neightbl_get}, + {NULL, NULL} +}; + + +int luaopen_neightbl(lua_State *l) +{ + luaL_register(l, "neightbl", R); + return 1; +} diff --git a/feeds/luci/libs/luci-lib-nixio/.gitignore b/feeds/luci/libs/luci-lib-nixio/.gitignore new file mode 100644 index 0000000..a21f2a2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/.gitignore @@ -0,0 +1,11 @@ +src/libaxtls.a +.depend +.config.* +_stage +conf +lex.zconf.c +lkc_defs.h +mconf +zconf.tab.h +zconf.tab.c +src/nixio.dll diff --git a/feeds/luci/libs/luci-lib-nixio/LICENSE b/feeds/luci/libs/luci-lib-nixio/LICENSE new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/Makefile b/feeds/luci/libs/luci-lib-nixio/Makefile new file mode 100644 index 0000000..41800fe --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=NIXIO POSIX library +LUCI_DEPENDS:=+PACKAGE_luci-lib-nixio_openssl:libopenssl +PACKAGE_luci-lib-nixio_cyassl:libcyassl +liblua + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/libs/luci-lib-nixio/NOTICE b/feeds/luci/libs/luci-lib-nixio/NOTICE new file mode 100644 index 0000000..96d1192 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/NOTICE @@ -0,0 +1,10 @@ +nixio - Linux I/O library for lua +Copyright 2009 Steven Barth +Licensed under the Apache License, Version 2.0. + +Contains code from: +axTLS - Copyright 2008 Cameron Rich + +Thanks for testing, feedback and code snippets: +John Crispin +Jo-Philipp Wich \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/README b/feeds/luci/libs/luci-lib-nixio/README new file mode 100644 index 0000000..ba9b36b --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/README @@ -0,0 +1,13 @@ +Building: + Use GNU Make. + make or gmake depending on your system. + + Special make flags: + + OS Override Target OS [Linux|FreeBSD|SunOS|Windows] + NIXIO_TLS TLS-Library [*openssl|axtls] + NIXIO_CROSS_CC MinGW CC (Windows) `which i586-mingw32msvc-cc` + LUA_CFLAGS Lua CFLAGS `pkg-config --cflags lua5.1` + LUA_TARGET Lua compile target [*source|strip|compile] + LUA_MODULEDIR Install LUA_PATH "/usr/share/lua/5.1" + LUA_LIBRARYDIR Install LUA_CPATH "/usr/lib/lua/5.1" diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/Makefile new file mode 100644 index 0000000..02c33d2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/Makefile @@ -0,0 +1,181 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +-include config/.config + +ifneq ($(strip $(HAVE_DOT_CONFIG)),y) +all: menuconfig +else +all: target +endif + +include config/makefile.conf + +target : $(STAGE) $(TARGET) + +# VERSION has to come from the command line +RELEASE=axTLS-$(VERSION) + +# standard version +target: + $(MAKE) -C crypto + $(MAKE) -C ssl +ifdef CONFIG_AXHTTPD + $(MAKE) -C httpd +endif +ifdef CONFIG_BINDINGS + $(MAKE) -C bindings +endif +ifdef CONFIG_SAMPLES + $(MAKE) -C samples +endif + +$(STAGE) : ssl/version.h + @mkdir -p $(STAGE) + +# create a version file with something in it. +ssl/version.h: + @echo "#define AXTLS_VERSION \"(no version)\"" > ssl/version.h + +$(PREFIX) : + @mkdir -p $(PREFIX)/lib + @mkdir -p $(PREFIX)/bin + +release: + $(MAKE) -C config/scripts/config clean + -$(MAKE) clean + -@rm config/*.msi config/*.back.aip config/config.h config/.config* + -@rm www/index.20* + -@rm -fr $(STAGE) + @echo "#define AXTLS_VERSION \"$(VERSION)\"" > ssl/version.h + cd ../; tar cvfz $(RELEASE).tar.gz --wildcards-match-slash --exclude .svn axTLS; cd -; + +docs: + $(MAKE) -C docsrc doco + +# build the Win32 demo release version +win32_demo: + @echo "#define AXTLS_VERSION \"$(VERSION)\"" > ssl/version.h + $(MAKE) win32releaseconf + +install: $(PREFIX) all + cp --no-dereference $(STAGE)/libax* $(PREFIX)/lib + chmod 755 $(PREFIX)/lib/libax* +ifdef CONFIG_SAMPLES + install -m 755 $(STAGE)/ax* $(PREFIX)/bin +endif +ifdef CONFIG_HTTP_HAS_AUTHORIZATION + install -m 755 $(STAGE)/htpasswd $(PREFIX)/bin +endif +ifdef CONFIG_PLATFORM_CYGWIN + install -m 755 $(STAGE)/cygaxtls.dll $(PREFIX)/bin +endif +ifdef CONFIG_PERL_BINDINGS + install -m 755 $(STAGE)/axtlsp.pm `perl -e 'use Config; print $$Config{installarchlib};'` +endif + @mkdir -p -m 755 $(PREFIX)/include/axTLS + install -m 644 crypto/*.h $(PREFIX)/include/axTLS + install -m 644 ssl/*.h $(PREFIX)/include/axTLS + -rm $(PREFIX)/include/axTLS/cert.h + -rm $(PREFIX)/include/axTLS/private_key.h + install -m 644 config/config.h $(PREFIX)/include/axTLS + +installclean: + -@rm $(PREFIX)/lib/libax* > /dev/null 2>&1 + -@rm $(PREFIX)/bin/ax* > /dev/null 2>&1 + -@rm $(PREFIX)/bin/axhttpd* > /dev/null 2>&1 + -@rm `perl -e 'use Config; print $$Config{installarchlib};'`/axtlsp.pm > /dev/null 2>&1 + +test: + cd $(STAGE); ssltest; ../ssl/test/test_axssl.sh; cd -; + +# tidy up things +clean:: + @cd crypto; $(MAKE) clean + @cd ssl; $(MAKE) clean + @cd httpd; $(MAKE) clean + @cd samples; $(MAKE) clean + @cd docsrc; $(MAKE) clean + @cd bindings; $(MAKE) clean + +# --------------------------------------------------------------------------- +# mconf stuff +# --------------------------------------------------------------------------- + +CONFIG_CONFIG_IN = config/Config.in +CONFIG_DEFCONFIG = config/defconfig + +config/scripts/config/conf: config/scripts/config/Makefile + $(MAKE) -C config/scripts/config conf + -@if [ ! -f config/.config ] ; then \ + cp $(CONFIG_DEFCONFIG) config/.config; \ + fi + +config/scripts/config/mconf: config/scripts/config/Makefile + $(MAKE) -C config/scripts/config ncurses conf mconf + -@if [ ! -f config/.config ] ; then \ + cp $(CONFIG_DEFCONFIG) .config; \ + fi + +cleanconf: + $(MAKE) -C config/scripts/config clean + @rm -f config/.config + +menuconfig: config/scripts/config/mconf + @./config/scripts/config/mconf $(CONFIG_CONFIG_IN) + +config: config/scripts/config/conf + @./config/scripts/config/conf $(CONFIG_CONFIG_IN) + +oldconfig: config/scripts/config/conf + @./config/scripts/config/conf -o $(CONFIG_CONFIG_IN) + +default: config/scripts/config/conf + @./config/scripts/config/conf -d $(CONFIG_CONFIG_IN) > /dev/null + $(MAKE) + +randconfig: config/scripts/config/conf + @./config/scripts/config/conf -r $(CONFIG_CONFIG_IN) + +allnoconfig: config/scripts/config/conf + @./config/scripts/config/conf -n $(CONFIG_CONFIG_IN) + +allyesconfig: config/scripts/config/conf + @./config/scripts/config/conf -y $(CONFIG_CONFIG_IN) + +# The special win32 release configuration +win32releaseconf: config/scripts/config/conf + @./config/scripts/config/conf -D config/win32config $(CONFIG_CONFIG_IN) > /dev/null + $(MAKE) + +# The special linux release configuration +linuxconf: config/scripts/config/conf + @./config/scripts/config/conf -D config/linuxconfig $(CONFIG_CONFIG_IN) > /dev/null + $(MAKE) diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/README b/feeds/luci/libs/luci-lib-nixio/axTLS/README new file mode 100644 index 0000000..c8926d9 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/README @@ -0,0 +1,3 @@ + +See www/index.html for the README, CHANGELOG, LICENSE and other notes. + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/Config.in b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/Config.in new file mode 100644 index 0000000..12a696b --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/Config.in @@ -0,0 +1,105 @@ +# +# For a description of the syntax of this configuration file, +# see scripts/config/Kconfig-language.txt +# +menu "Language Bindings" + +config CONFIG_BINDINGS + bool "Create language bindings" + default n + help + axTLS supports language bindings in C#, VB.NET, Java and Perl. + + Select Y here if you want to build the various language bindings. + +config CONFIG_CSHARP_BINDINGS + bool "Create C# bindings" + default n + depends on CONFIG_BINDINGS + help + Build C# bindings. + + This requires .NET to be installed on Win32 platforms and mono to be + installed on all other platforms. + +config CONFIG_VBNET_BINDINGS + bool "Create VB.NET bindings" + default n + depends on CONFIG_BINDINGS + help + Build VB.NET bindings. + + This requires the .NET to be installed and is only built under Win32 + platforms. + +menu ".Net Framework" +depends on CONFIG_CSHARP_BINDINGS || CONFIG_VBNET_BINDINGS +config CONFIG_DOT_NET_FRAMEWORK_BASE + string "Location of .NET Framework" + default "c:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727" +endmenu + +config CONFIG_JAVA_BINDINGS + bool "Create Java bindings" + default n + depends on CONFIG_BINDINGS + help + Build Java bindings. + + Current Issues (see README): + * Needs Java 1.4 or better. + * If building under Win32 it will use the Win32 JDK. + +menu "Java Home" +depends on CONFIG_JAVA_BINDINGS +config CONFIG_JAVA_HOME + string "Location of JDK" + default "c:\\Program Files\\Java\\jdk1.5.0_06" if CONFIG_PLATFORM_WIN32 || CONFIG_PLATFORM_CYGWIN + default "/usr/local/jdk142" if !CONFIG_PLATFORM_WIN32 && !CONFIG_PLATFORM_CYGWIN + depends on CONFIG_JAVA_BINDINGS + help + The location of Sun's JDK. +endmenu + +config CONFIG_PERL_BINDINGS + bool "Create Perl bindings" + default n + depends on CONFIG_BINDINGS + help + Build Perl bindings. + + Current Issues (see README): + * 64 bit versions don't work at present. + * libperl.so needs to be in the shared library path. + +menu "Perl Home" +depends on CONFIG_PERL_BINDINGS && CONFIG_PLATFORM_WIN32 +config CONFIG_PERL_CORE + string "Location of Perl CORE" + default "c:\\perl\\lib\\CORE" + help: + works with ActiveState + "http://www.activestate.com/Products/ActivePerl" + +config CONFIG_PERL_LIB + string "Name of Perl Library" + default "perl58.lib" +endmenu + +config CONFIG_LUA_BINDINGS + bool "Create Lua bindings" + default n + depends on CONFIG_BINDINGS && !CONFIG_PLATFORM_WIN32 + help + Build Lua bindings (see www.lua.org). + +menu "Lua Home" +depends on CONFIG_LUA_BINDINGS +config CONFIG_LUA_CORE + string "Location of Lua CORE" + default "/usr/local" + help: + If the Lua exists on another directory then this needs to be changed +endmenu + +endmenu diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/Makefile new file mode 100644 index 0000000..7654fbb --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/Makefile @@ -0,0 +1,86 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +all: + +include ../config/.config +include ../config/makefile.conf + +ifdef CONFIG_CSHARP_BINDINGS +all: csharp/axInterface.cs +endif + +ifdef CONFIG_VBNET_BINDINGS +all: vbnet/axInterface.vb +endif + +ifdef CONFIG_JAVA_BINDINGS +all: java/axtlsj.java +endif + +ifdef CONFIG_PERL_BINDINGS +all: perl/axTLSp_wrap.c +endif + +ifdef CONFIG_LUA_BINDINGS +all: lua/axTLSl_wrap.c +endif + +csharp/axInterface.cs: ../ssl/ssl.h + @perl ./generate_interface.pl -csharp + +vbnet/axInterface.vb: ../ssl/ssl.h + @perl ./generate_interface.pl -vbnet + +java/axTLSj.i: ../ssl/ssl.h + @perl ./generate_SWIG_interface.pl -java + +java/axtlsj.java: java/axTLSj.i $(wildcard java/SSL*.java) + @cd java; swig -java -package axTLSj axTLSj.i; $(MAKE) + +perl/axTLSp.i: ../ssl/ssl.h + @perl ./generate_SWIG_interface.pl -perl + +perl/axTLSp_wrap.c: perl/axTLSp.i + @cd perl; swig -perl5 axTLSp.i; $(MAKE) + +lua/axTLSl.i: ../ssl/ssl.h + @perl ./generate_SWIG_interface.pl -lua + +lua/axTLSl_wrap.c: lua/axTLSl.i + @cd lua; swig -lua axTLSl.i; $(MAKE) + +clean:: + $(MAKE) -C csharp clean + $(MAKE) -C vbnet clean + $(MAKE) -C java clean + $(MAKE) -C perl clean + $(MAKE) -C lua clean + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/README b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/README new file mode 100644 index 0000000..8bc3109 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/README @@ -0,0 +1,43 @@ +=============================================================================== += Language Bindings = +=============================================================================== + +The tools to generate the various language bindings are done here. +SWIG 1.3.24 or better is required for creating the Java and Perl bindings. + +Perl scripts are used to parse ssl.h and automagically give the appropriate +bindings. + +At present, the four languages supported are: + +* C# +* VB.NET +* Java +* Perl + +To generate each binding run the following: + +C#: +> generate_interface.pl -csharp + +VB.NET: +> generate_interface.pl -vbnet + + +Java: +> generate_SWIG_interface.pl -java +> cd java; swig -java -package axTLSj -noextern axTLSj.i + +Perl: +> generate_SWIG_interface.pl -perl +> cd perl; swig -noextern -perl axTLSp.i + +Java and Perl both create a library each called libaxtlsj.so and libaxtlsp.so +(or axtlsj.dll and atlsp.dll on Win32 platforms). + +Note: the "-noextern" is deprecated in swig 1.3.27 and newer. The "-noextern" +option was required to get Win32 bindings to work (which is why is has probably +been deprecated). + +Each binding (except for Perl) has an extra helper interface to make life +easier. diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/csharp/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/csharp/Makefile new file mode 100644 index 0000000..3414f85 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/csharp/Makefile @@ -0,0 +1,35 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +include ../../config/.config +include ../../config/makefile.conf + +clean:: + @rm -f axssl* axInterface.cs diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/csharp/axTLS.cs b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/csharp/axTLS.cs new file mode 100644 index 0000000..cf64a25 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/csharp/axTLS.cs @@ -0,0 +1,491 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * A wrapper around the unmanaged interface to give a semi-decent C# API + */ + +using System; +using System.Runtime.InteropServices; +using System.Net.Sockets; + +/** + * @defgroup csharp_api C# API. + * + * Ensure that the appropriate Dispose() methods are called when finished with + * various objects - otherwise memory leaks will result. + * @{ + */ +namespace axTLS +{ + /** + * @class SSL + * @ingroup csharp_api + * @brief A representation of an SSL connection. + */ + public class SSL + { + public IntPtr m_ssl; /**< A pointer to the real SSL type */ + + /** + * @brief Store the reference to an SSL context. + * @param ip [in] A reference to an SSL object. + */ + public SSL(IntPtr ip) + { + m_ssl = ip; + } + + /** + * @brief Free any used resources on this connection. + * + * A "Close Notify" message is sent on this connection (if possible). + * It is up to the application to close the socket. + */ + public void Dispose() + { + axtls.ssl_free(m_ssl); + } + + /** + * @brief Return the result of a handshake. + * @return SSL_OK if the handshake is complete and ok. + * @see ssl.h for the error code list. + */ + public int HandshakeStatus() + { + return axtls.ssl_handshake_status(m_ssl); + } + + /** + * @brief Return the SSL cipher id. + * @return The cipher id which is one of: + * - SSL_AES128_SHA (0x2f) + * - SSL_AES256_SHA (0x35) + * - SSL_RC4_128_SHA (0x05) + * - SSL_RC4_128_MD5 (0x04) + */ + public byte GetCipherId() + { + return axtls.ssl_get_cipher_id(m_ssl); + } + + /** + * @brief Get the session id for a handshake. + * + * This will be a 32 byte sequence and is available after the first + * handshaking messages are sent. + * @return The session id as a 32 byte sequence. + * @note A SSLv23 handshake may have only 16 valid bytes. + */ + public byte[] GetSessionId() + { + IntPtr ptr = axtls.ssl_get_session_id(m_ssl); + byte sess_id_size = axtls.ssl_get_session_id_size(m_ssl); + byte[] result = new byte[sess_id_size]; + Marshal.Copy(ptr, result, 0, sess_id_size); + return result; + } + + /** + * @brief Retrieve an X.509 distinguished name component. + * + * When a handshake is complete and a certificate has been exchanged, + * then the details of the remote certificate can be retrieved. + * + * This will usually be used by a client to check that the server's + * common name matches the URL. + * + * A full handshake needs to occur for this call to work. + * + * @param component [in] one of: + * - SSL_X509_CERT_COMMON_NAME + * - SSL_X509_CERT_ORGANIZATION + * - SSL_X509_CERT_ORGANIZATIONAL_NAME + * - SSL_X509_CA_CERT_COMMON_NAME + * - SSL_X509_CA_CERT_ORGANIZATION + * - SSL_X509_CA_CERT_ORGANIZATIONAL_NAME + * @return The appropriate string (or null if not defined) + */ + public string GetCertificateDN(int component) + { + return axtls.ssl_get_cert_dn(m_ssl, component); + } + } + + /** + * @class SSLUtil + * @ingroup csharp_api + * @brief Some global helper functions. + */ + public class SSLUtil + { + + /** + * @brief Return the build mode of the axTLS project. + * @return The build mode is one of: + * - SSL_BUILD_SERVER_ONLY + * - SSL_BUILD_ENABLE_VERIFICATION + * - SSL_BUILD_ENABLE_CLIENT + * - SSL_BUILD_FULL_MODE + */ + public static int BuildMode() + { + return axtls.ssl_get_config(axtls.SSL_BUILD_MODE); + } + + /** + * @brief Return the number of chained certificates that the + * client/server supports. + * @return The number of supported server certificates. + */ + public static int MaxCerts() + { + return axtls.ssl_get_config(axtls.SSL_MAX_CERT_CFG_OFFSET); + } + + /** + * @brief Return the number of CA certificates that the client/server + * supports. + * @return The number of supported CA certificates. + */ + public static int MaxCACerts() + { + return axtls.ssl_get_config(axtls.SSL_MAX_CA_CERT_CFG_OFFSET); + } + + /** + * @brief Indicate if PEM is supported. + * @return true if PEM supported. + */ + public static bool HasPEM() + { + return axtls.ssl_get_config(axtls.SSL_HAS_PEM) > 0 ? true : false; + } + + /** + * @brief Display the text string of the error. + * @param error_code [in] The integer error code. + */ + public static void DisplayError(int error_code) + { + axtls.ssl_display_error(error_code); + } + + /** + * @brief Return the version of the axTLS project. + */ + public static string Version() + { + return axtls.ssl_version(); + } + } + + /** + * @class SSLCTX + * @ingroup csharp_api + * @brief A base object for SSLServer/SSLClient. + */ + public class SSLCTX + { + /** + * @brief A reference to the real client/server context. + */ + protected IntPtr m_ctx; + + /** + * @brief Establish a new client/server context. + * + * This function is called before any client/server SSL connections are + * made. If multiple threads are used, then each thread will have its + * own SSLCTX context. Any number of connections may be made with a + * single context. + * + * Each new connection will use the this context's private key and + * certificate chain. If a different certificate chain is required, + * then a different context needs to be be used. + * + * @param options [in] Any particular options. At present the options + * supported are: + * - SSL_SERVER_VERIFY_LATER (client only): Don't stop a handshake if + * the server authentication fails. The certificate can be + * authenticated later with a call to VerifyCert(). + * - SSL_CLIENT_AUTHENTICATION (server only): Enforce client + * authentication i.e. each handshake will include a "certificate + * request" message from the server. + * - SSL_DISPLAY_BYTES (full mode build only): Display the byte + * sequences during the handshake. + * - SSL_DISPLAY_STATES (full mode build only): Display the state + * changes during the handshake. + * - SSL_DISPLAY_CERTS (full mode build only): Display the + * certificates that are passed during a handshake. + * - SSL_DISPLAY_RSA (full mode build only): Display the RSA key + * details that are passed during a handshake. + * @param num_sessions [in] The number of sessions to be used for + * session caching. If this value is 0, then there is no session + * caching. + * @return A client/server context. + */ + protected SSLCTX(uint options, int num_sessions) + { + m_ctx = axtls.ssl_ctx_new(options, num_sessions); + } + + /** + * @brief Remove a client/server context. + * + * Frees any used resources used by this context. Each connection will + * be sent a "Close Notify" alert (if possible). + */ + public void Dispose() + { + axtls.ssl_ctx_free(m_ctx); + } + + /** + * @brief Read the SSL data stream. + * @param ssl [in] An SSL object reference. + * @param in_data [out] After a successful read, the decrypted data + * will be here. It will be null otherwise. + * @return The number of decrypted bytes: + * - if > 0, then the handshaking is complete and we are returning the + * number of decrypted bytes. + * - SSL_OK if the handshaking stage is successful (but not yet + * complete). + * - < 0 if an error. + * @see ssl.h for the error code list. + * @note Use in_data before doing any successive ssl calls. + */ + public int Read(SSL ssl, out byte[] in_data) + { + IntPtr ptr = IntPtr.Zero; + int ret = axtls.ssl_read(ssl.m_ssl, ref ptr); + + if (ret > axtls.SSL_OK) + { + in_data = new byte[ret]; + Marshal.Copy(ptr, in_data, 0, ret); + } + else + { + in_data = null; + } + + return ret; + } + + /** + * @brief Write to the SSL data stream. + * @param ssl [in] An SSL obect reference. + * @param out_data [in] The data to be written + * @return The number of bytes sent, or if < 0 if an error. + * @see ssl.h for the error code list. + */ + public int Write(SSL ssl, byte[] out_data) + { + return axtls.ssl_write(ssl.m_ssl, out_data, out_data.Length); + } + + /** + * @brief Write to the SSL data stream. + * @param ssl [in] An SSL obect reference. + * @param out_data [in] The data to be written + * @param out_len [in] The number of bytes to be written + * @return The number of bytes sent, or if < 0 if an error. + * @see ssl.h for the error code list. + */ + public int Write(SSL ssl, byte[] out_data, int out_len) + { + return axtls.ssl_write(ssl.m_ssl, out_data, out_len); + } + + /** + * @brief Find an ssl object based on a Socket reference. + * + * Goes through the list of SSL objects maintained in a client/server + * context to look for a socket match. + * @param s [in] A reference to a Socket object. + * @return A reference to the SSL object. Returns null if the object + * could not be found. + */ + public SSL Find(Socket s) + { + int client_fd = s.Handle.ToInt32(); + return new SSL(axtls. ssl_find(m_ctx, client_fd)); + } + + /** + * @brief Authenticate a received certificate. + * + * This call is usually made by a client after a handshake is complete + * and the context is in SSL_SERVER_VERIFY_LATER mode. + * @param ssl [in] An SSL object reference. + * @return SSL_OK if the certificate is verified. + */ + public int VerifyCert(SSL ssl) + { + return axtls.ssl_verify_cert(ssl.m_ssl); + } + + /** + * @brief Force the client to perform its handshake again. + * + * For a client this involves sending another "client hello" message. + * For the server is means sending a "hello request" message. + * + * This is a blocking call on the client (until the handshake + * completes). + * @param ssl [in] An SSL object reference. + * @return SSL_OK if renegotiation instantiation was ok + */ + public int Renegotiate(SSL ssl) + { + return axtls.ssl_renegotiate(ssl.m_ssl); + } + + /** + * @brief Load a file into memory that is in binary DER or ASCII PEM + * format. + * + * These are temporary objects that are used to load private keys, + * certificates etc into memory. + * @param obj_type [in] The format of the file. Can be one of: + * - SSL_OBJ_X509_CERT (no password required) + * - SSL_OBJ_X509_CACERT (no password required) + * - SSL_OBJ_RSA_KEY (AES128/AES256 PEM encryption supported) + * - SSL_OBJ_P8 (RC4-128 encrypted data supported) + * - SSL_OBJ_P12 (RC4-128 encrypted data supported) + * + * PEM files are automatically detected (if supported). + * @param filename [in] The location of a file in DER/PEM format. + * @param password [in] The password used. Can be null if not required. + * @return SSL_OK if all ok + */ + public int ObjLoad(int obj_type, string filename, string password) + { + return axtls.ssl_obj_load(m_ctx, obj_type, filename, password); + } + + /** + * @brief Transfer binary data into the object loader. + * + * These are temporary objects that are used to load private keys, + * certificates etc into memory. + * @param obj_type [in] The format of the memory data. + * @param data [in] The binary data to be loaded. + * @param len [in] The amount of data to be loaded. + * @param password [in] The password used. Can be null if not required. + * @return SSL_OK if all ok + */ + public int ObjLoad(int obj_type, byte[] data, int len, string password) + { + return axtls.ssl_obj_memory_load(m_ctx, obj_type, + data, len, password); + } + } + + /** + * @class SSLServer + * @ingroup csharp_api + * @brief The server context. + * + * All server connections are started within a server context. + */ + public class SSLServer : SSLCTX + { + /** + * @brief Start a new server context. + * + * @see SSLCTX for details. + */ + public SSLServer(uint options, int num_sessions) : + base(options, num_sessions) {} + + /** + * @brief Establish a new SSL connection to an SSL client. + * + * It is up to the application to establish the initial socket + * connection. + * + * Call Dispose() when the connection is to be removed. + * @param s [in] A reference to a Socket object. + * @return An SSL object reference. + */ + public SSL Connect(Socket s) + { + int client_fd = s.Handle.ToInt32(); + return new SSL(axtls.ssl_server_new(m_ctx, client_fd)); + } + } + + /** + * @class SSLClient + * @ingroup csharp_api + * @brief The client context. + * + * All client connections are started within a client context. + */ + public class SSLClient : SSLCTX + { + /** + * @brief Start a new client context. + * + * @see SSLCTX for details. + */ + public SSLClient(uint options, int num_sessions) : + base(options, num_sessions) {} + + /** + * @brief Establish a new SSL connection to an SSL server. + * + * It is up to the application to establish the initial socket + * connection. + * + * This is a blocking call - it will finish when the handshake is + * complete (or has failed). + * + * Call Dispose() when the connection is to be removed. + * @param s [in] A reference to a Socket object. + * @param session_id [in] A 32 byte session id for session resumption. + * This can be null if no session resumption is not required. + * @return An SSL object reference. Use SSL.handshakeStatus() to check + * if a handshake succeeded. + */ + public SSL Connect(Socket s, byte[] session_id) + { + int client_fd = s.Handle.ToInt32(); + byte sess_id_size = (byte)(session_id != null ? + session_id.Length : 0); + return new SSL(axtls.ssl_client_new(m_ctx, client_fd, session_id, + sess_id_size)); + } + } +} +/** @} */ diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/generate_SWIG_interface.pl b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/generate_SWIG_interface.pl new file mode 100755 index 0000000..4b25179 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/generate_SWIG_interface.pl @@ -0,0 +1,393 @@ +#!/usr/bin/perl + +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +#=============================================================== +# Transforms function signature into SWIG format +sub transformSignature +{ + foreach $item (@_) + { + $line =~ s/STDCALL //g; + $line =~ s/EXP_FUNC/extern/g; + + # make API Java more 'byte' friendly + $line =~ s/uint32_t/int/g; + $line =~ s/const uint8_t \* /const unsigned char \* /g; + $line =~ s/\(void\)/()/g; + if ($ARGV[0] eq "-java") + { + $line =~ s/.*ssl_read.*//g; + $line =~ s/const uint8_t \*(\w+)/const signed char $1\[\]/g; + $line =~ s/uint8_t/signed char/g; + } + elsif ($ARGV[0] eq "-perl") + { + $line =~ s/const uint8_t \*(\w+)/const unsigned char $1\[\]/g; + $line =~ s/uint8_t/unsigned char/g; + } + else # lua + { + $line =~ s/const uint8_t \*session_id/const unsigned char session_id\[\]/g; + $line =~ s/const uint8_t \*\w+/unsigned char *INPUT/g; + $line =~ s/uint8_t/unsigned char/g; + } + } + + return $line; +} + +# Parse input file +sub parseFile +{ + foreach $line (@_) + { + next if $line =~ /ssl_x509_create/; # ignore for now + + # test for a #define + if (!$skip && $line =~ m/^#define/) + { + $splitDefine = 1 if $line =~ m/\\$/; + print DATA_OUT $line; + + # check line is not split + next if $splitDefine == 1; + } + + # pick up second line of #define statement + if ($splitDefine) + { + print DATA_OUT $line; + + # check line is not split + $splitDefine = ($line =~ m/\\$/); + next; + } + + # test for function declaration + if (!$skip && $line =~ /EXP_FUNC/ && $line !~/\/\*/) + { + $line = transformSignature($line); + $splitFunctionDeclaration = $line !~ /;/; + print DATA_OUT $line; + next; + } + + if ($splitFunctionDeclaration) + { + $line = transformSignature($line); + $splitFunctionDeclaration = $line !~ /;/; + print DATA_OUT $line; + next; + } + } +} + +#=============================================================== + +# Determine which module to build from cammand-line options +use strict; +use Getopt::Std; + +my $module; +my $interfaceFile; +my $data_file; +my $skip; +my $splitLine; +my @raw_data; + +if (not defined $ARGV[0]) +{ + goto ouch; +} + +if ($ARGV[0] eq "-java") +{ + print "Generating Java interface file\n"; + $module = "axtlsj"; + $interfaceFile = "java/axTLSj.i"; +} +elsif ($ARGV[0] eq "-perl") +{ + print "Generating Perl interface file\n"; + $module = "axtlsp"; + $interfaceFile = "perl/axTLSp.i"; +} +elsif ($ARGV[0] eq "-lua") +{ + print "Generating lua interface file\n"; + $module = "axtlsl"; + $interfaceFile = "lua/axTLSl.i"; +} +else +{ +ouch: + die "Usage: $0 [-java | -perl | -lua]\n"; +} + +# Input file required to generate SWIG interface file. +$data_file = "../ssl/ssl.h"; + +# Open input files +open(DATA_IN, $data_file) || die("Could not open file ($data_file)!"); +@raw_data = ; + +# Open output file +open(DATA_OUT, ">$interfaceFile") || die("Cannot Open File"); + +# +# I wish I could say it was easy to generate the Perl/Java/Lua bindings, +# but each had their own set of challenges... :-(. +# +print DATA_OUT << "END"; +%module $module\n + +/* include our own header */ +%inline %{ +#include "ssl.h" +%} + +%include "typemaps.i" +/* Some SWIG magic to make the API a bit more Java friendly */ +#ifdef SWIGJAVA + +%apply long { SSL * }; +%apply long { SSL_CTX * }; +%apply long { SSLObjLoader * }; + +/* allow "unsigned char []" to become "byte[]" */ +%include "arrays_java.i" + +/* convert these pointers to use long */ +%apply signed char[] {unsigned char *}; +%apply signed char[] {signed char *}; + +/* allow ssl_get_session_id() to return "byte[]" */ +%typemap(out) unsigned char * ssl_get_session_id \"if (result) jresult = SWIG_JavaArrayOutSchar(jenv, result, ssl_get_session_id_size((SSL const *)arg1));\" + +/* allow ssl_client_new() to have a null session_id input */ +%typemap(in) const signed char session_id[] (jbyte *jarr) { + if (jarg3 == NULL) + { + jresult = (jint)ssl_client_new(arg1,arg2,NULL,0); + return jresult; + } + + if (!SWIG_JavaArrayInSchar(jenv, &jarr, &arg3, jarg3)) return 0; +} + +/* Lot's of work required for an ssl_read() due to its various custom + * requirements. + */ +%native (ssl_read) int ssl_read(SSL *ssl, jobject in_data); +%{ +JNIEXPORT jint JNICALL Java_axTLSj_axtlsjJNI_ssl_1read(JNIEnv *jenv, jclass jcls, jint jarg1, jobject jarg2) { + jint jresult = 0 ; + SSL *arg1; + unsigned char *arg2; + jbyte *jarr; + int result; + JNIEnv e = *jenv; + jclass holder_class; + jfieldID fid; + + arg1 = (SSL *)jarg1; + result = (int)ssl_read(arg1, &arg2); + + /* find the "m_buf" entry in the SSLReadHolder class */ + if (!(holder_class = e->GetObjectClass(jenv,jarg2)) || + !(fid = e->GetFieldID(jenv,holder_class, "m_buf", "[B"))) + return SSL_NOT_OK; + + if (result > SSL_OK) + { + int i; + + /* create a new byte array to hold the read data */ + jbyteArray jarray = e->NewByteArray(jenv, result); + + /* copy the bytes across to the java byte array */ + jarr = e->GetByteArrayElements(jenv, jarray, 0); + for (i = 0; i < result; i++) + jarr[i] = (jbyte)arg2[i]; + + /* clean up and set the new m_buf object */ + e->ReleaseByteArrayElements(jenv, jarray, jarr, 0); + e->SetObjectField(jenv, jarg2, fid, jarray); + } + else /* set to null */ + e->SetObjectField(jenv, jarg2, fid, NULL); + + jresult = (jint)result; + return jresult; +} +%} + +/* Big hack to get hold of a socket's file descriptor */ +%typemap (jtype) long "Object" +%typemap (jstype) long "Object" +%native (getFd) int getFd(long sock); +%{ +JNIEXPORT jint JNICALL Java_axTLSj_axtlsjJNI_getFd(JNIEnv *env, jclass jcls, jobject sock) +{ + JNIEnv e = *env; + jfieldID fid; + jobject impl; + jobject fdesc; + + /* get the SocketImpl from the Socket */ + if (!(jcls = e->GetObjectClass(env,sock)) || + !(fid = e->GetFieldID(env,jcls,"impl","Ljava/net/SocketImpl;")) || + !(impl = e->GetObjectField(env,sock,fid))) return -1; + + /* get the FileDescriptor from the SocketImpl */ + if (!(jcls = e->GetObjectClass(env,impl)) || + !(fid = e->GetFieldID(env,jcls,"fd","Ljava/io/FileDescriptor;")) || + !(fdesc = e->GetObjectField(env,impl,fid))) return -1; + + /* get the fd from the FileDescriptor */ + if (!(jcls = e->GetObjectClass(env,fdesc)) || + !(fid = e->GetFieldID(env,jcls,"fd","I"))) return -1; + + /* return the descriptor */ + return e->GetIntField(env,fdesc,fid); +} +%} + +#endif + +/* Some SWIG magic to make the API a bit more Perl friendly */ +#ifdef SWIGPERL + +/* for ssl_session_id() */ +%typemap(out) const unsigned char * { + SV *svs = newSVpv((unsigned char *)\$1, ssl_get_session_id_size((SSL const *)arg1)); + \$result = newRV(svs); + sv_2mortal(\$result); + argvi++; +} + +/* for ssl_write() */ +%typemap(in) const unsigned char out_data[] { + SV* tempsv; + if (!SvROK(\$input)) + croak("Argument \$argnum is not a reference."); + tempsv = SvRV(\$input); + if (SvTYPE(tempsv) != SVt_PV) + croak("Argument \$argnum is not an string."); + \$1 = (unsigned char *)SvPV(tempsv, PL_na); +} + +/* for ssl_read() */ +%typemap(in) unsigned char **in_data (unsigned char *buf) { + \$1 = &buf; +} + +%typemap(argout) unsigned char **in_data { + if (result > SSL_OK) { + SV *svs = newSVpv(*\$1, result); + \$result = newRV(svs); + sv_2mortal(\$result); + argvi++; + } +} + +/* for ssl_client_new() */ +%typemap(in) const unsigned char session_id[] { + /* check for a reference */ + if (SvOK(\$input) && SvROK(\$input)) { + SV* tempsv = SvRV(\$input); + if (SvTYPE(tempsv) != SVt_PV) + croak("Argument \$argnum is not an string."); + \$1 = (unsigned char *)SvPV(tempsv, PL_na); + } + else + \$1 = NULL; +} + +#endif + +/* Some SWIG magic to make the API a bit more Lua friendly */ +#ifdef SWIGLUA +SWIG_NUMBER_TYPEMAP(unsigned char); +SWIG_TYPEMAP_NUM_ARR(uchar,unsigned char); + +/* for ssl_session_id() */ +%typemap(out) const unsigned char * { + int i; + lua_newtable(L); + for (i = 0; i < ssl_get_session_id_size((SSL const *)arg1); i++){ + lua_pushnumber(L,(lua_Number)result[i]); + lua_rawseti(L,-2,i+1); /* -1 is the number, -2 is the table */ + } + SWIG_arg++; +} + +/* for ssl_read() */ +%typemap(in) unsigned char **in_data (unsigned char *buf) { + \$1 = &buf; +} + +%typemap(argout) unsigned char **in_data { + if (result > SSL_OK) { + int i; + lua_newtable(L); + for (i = 0; i < result; i++){ + lua_pushnumber(L,(lua_Number)buf2[i]); + lua_rawseti(L,-2,i+1); /* -1 is the number, -2 is the table */ + } + SWIG_arg++; + } +} + +/* for ssl_client_new() */ +%typemap(in) const unsigned char session_id[] { + if (lua_isnil(L,\$input)) + \$1 = NULL; + else + \$1 = SWIG_get_uchar_num_array_fixed(L,\$input, ssl_get_session_id((SSL const *)\$1)); +} + +#endif + +END + +# Initialise loop variables +$skip = 1; +$splitLine = 0; + +parseFile(@raw_data); + +close(DATA_IN); +close(DATA_OUT); + +#=============================================================== + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/generate_interface.pl b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/generate_interface.pl new file mode 100755 index 0000000..c24bff9 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/generate_interface.pl @@ -0,0 +1,322 @@ +#!/usr/bin/perl -w + +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +#=============================================================== +# This application transforms ssl.h into interfaces that can be used by +# other language bindings. It is "SWIG"-like in nature in that various +# files are generated based on the axTLS API. +# +# The file produced is axInterface.? (depending on the file extension). +# +#=============================================================== + +use strict; + +my $CSHARP = 0; +my $VBNET = 1; + +my $binding; +my $skip = 0; +my $signature_ret_type; + +# Transforms function signature into an Interface format +sub transformSignature +{ + my $item; + my ($line) = @_; + + foreach $item ($line) + { + # our very basic preprocessor + if ($binding == $CSHARP) + { + $line =~ s/STDCALL //; + $line =~ s/EXP_FUNC/ [DllImport ("axtls")]\n public static extern/; + $line =~ s/uint32_t/uint/g; + $line =~ s/uint8_t \*\*/ref IntPtr /g; + $line =~ s/const uint8_t \* /IntPtr /g; + $line =~ s/const uint8_t \*/byte[] /g; # note: subtle diff + $line =~ s/uint8_t \* ?/byte[] /g; + $line =~ s/uint8_t ?/byte /g; + $line =~ s/const char \* ?/string /g; + $line =~ s/const SSL_CTX \* ?/IntPtr /g; + $line =~ s/SSL_CTX \* ?/IntPtr /g; + $line =~ s/SSLObjLoader \* ?/IntPtr /g; + $line =~ s/const SSL \* ?/IntPtr /g; + $line =~ s/SSL \* ?/IntPtr /g; + $line =~ s/\(void\)/()/g; + } + elsif ($binding == $VBNET) + { + if ($line =~ /EXP_FUNC/) + { + # Procedure or function? + my $invariant = $line =~ /void /; + + my $proc = $invariant ? "Sub" : "Function"; + ($signature_ret_type) = $line =~ /EXP_FUNC (.*) STDCALL/; + $line =~ s/EXP_FUNC .* STDCALL / Public Shared $proc _\n /; + + $signature_ret_type =~ s/const uint8_t \*/As IntPtr/; + $signature_ret_type =~ s/const char \*/As String/; + $signature_ret_type =~ s/SSL_CTX \*/As IntPtr/; + $signature_ret_type =~ s/SSLObjLoader \*/As IntPtr/; + $signature_ret_type =~ s/SSL \*/As IntPtr/; + $signature_ret_type =~ s/uint8_t/As Byte/; + $signature_ret_type =~ s/int/As Integer/; + $signature_ret_type =~ s/void//; + $signature_ret_type .= "\n End $proc\n\n"; + } + + $line =~ s/uint32_t (\w+)/ByVal $1 As Integer/g; + $line =~ s/int (\w+)/ByVal $1 As Integer/g; + $line =~ s/uint8_t \*\* ?(\w+)/ByRef $1 As IntPtr/g; + $line =~ s/const uint8_t \* ?(\w+)/ByVal $1() As Byte/g; + $line =~ s/uint8_t \* ?(\w+)/ByVal $1() As Byte/g; + $line =~ s/uint8_t ?(\w+)/ByVal $1 As Byte/g; + $line =~ s/const char \* ?(\w+)/ByVal $1 As String/g; + $line =~ s/const SSL_CTX \* ?(\w+)/ByVal $1 As IntPtr/g; + $line =~ s/SSL_CTX \* ?(\w+)/ByVal $1 As IntPtr/g; + $line =~ s/SSLObjLoader \* ?(\w+)/ByVal $1 As IntPtr/g; + $line =~ s/const SSL \* ?(\w+)/ByVal $1 As IntPtr/g; + $line =~ s/SSL \* ?(\w+)/ByVal $1 As IntPtr/g; + $line =~ s/void \* ?(\w+)/Byval $1 As IntPtr/g; + $line =~ s/\(void\)/()/g; + $line =~ s/void//g; + $line =~ s/;\n/ $signature_ret_type;/; + } + } + + return $line; +} + +# Parse input file +sub parseFile +{ + my (@file) = @_; + my $line; + my $splitDefine = 0; + my $splitFunctionDeclaration; + my $vb_hack = " "; + my $vb_line_hack = 0; + + $skip = 0; + + foreach $line (@file) + { + next if $line =~ /sl_x509_create/; # ignore for now + + # test for a #define + if (!$skip && $line =~ m/^#define/) + { + $splitDefine = 1 if $line =~ m/\\$/; + + if ($binding == $VBNET) + { + $line =~ s/\|/Or/g; + $line =~ s/ 0x/ &H/; + } + + my ($name, $value) = $line =~ /#define (\w+) +([^\\]*)[\\]?\n/; + + if (defined $name && defined $value) + { + # C# constant translation + if ($binding == $CSHARP) + { + $line = " public const int $name = $value"; + } + # VB.NET constant translation + elsif ($binding == $VBNET) + { + $line = " Public Const $name As Integer = $value"; + } + } + + next if $line =~ /#define/; # ignore any other defines + + print DATA_OUT $line; + + # check line is not split + next if $splitDefine == 1; + print DATA_OUT ";" if $binding == $CSHARP; + print DATA_OUT "\n"; + } + + # pick up second line of #define statement + if ($splitDefine) + { + if ($line !~ /\\$/) + { + $line =~ s/$/;/ if $binding == $CSHARP; # add the ";" + } + + $line =~ s/ ?\| ?/ Or /g + if ($binding == $VBNET); + + # check line is not split + $splitDefine = ($line =~ m/\\$/); + + # ignore trailing "\" + $line =~ s/\\$// if $binding == $CSHARP; + $line =~ s/\\$/_/ if $binding == $VBNET; + print DATA_OUT $line; + next; + } + + # test for function declaration + if (!$skip && $line =~ /EXP_FUNC/ && $line !~ /\/\*/) + { + $line = transformSignature($line); + $splitFunctionDeclaration = $line !~ /;/; + $line =~ s/;// if ($binding == $VBNET); + $line =~ s/\n$/ _\n/ if ($binding == $VBNET) && + $splitFunctionDeclaration; + print DATA_OUT $line; + next; + } + + if ($splitFunctionDeclaration) + { + $line = transformSignature($line); + $splitFunctionDeclaration = $line !~ /;/; + $line =~ s/;// if ($binding == $VBNET); + $line =~ s/\n/ _\n/ if ($binding == $VBNET) && + $splitFunctionDeclaration == 1; + print DATA_OUT $line; + next; + } + } +} + +#=============================================================== + +# Determine which module to build from command-line options +use strict; +use Getopt::Std; + +my $binding_prefix; +my $binding_suffix; +my $data_file; +my @raw_data; + +if (not defined $ARGV[0]) +{ + goto ouch; +} + +if ($ARGV[0] eq "-csharp") +{ + print "Generating C# interface file\n"; + $binding_prefix = "csharp"; + $binding_suffix = "cs"; + $binding = $CSHARP; +} +elsif ($ARGV[0] eq "-vbnet") +{ + print "Generating VB.NET interface file\n"; + $binding_prefix = "vbnet"; + $binding_suffix = "vb"; + $binding = $VBNET; +} +else +{ +ouch: + die "Usage: $0 [-csharp | -vbnet]\n"; +} + +my $interfaceFile = "$binding_prefix/axInterface.$binding_suffix"; + +# Input file required to generate interface file. +$data_file = "../ssl/ssl.h"; + +# Open input files +open(DATA_IN, $data_file) || die("Could not open file ($data_file)!"); +@raw_data = ; + + +# Open output file +if ($binding == $CSHARP || $binding == $VBNET) +{ + open(DATA_OUT, ">$interfaceFile") || die("Cannot Open File"); +} + +# SPEC interface file header +if ($binding == $CSHARP) +{ + # generate the C#/C interface file + print DATA_OUT << "END"; +// The C# to C interface definition file for the axTLS project +// Do not modify - this file is generated + +using System; +using System.Runtime.InteropServices; + +namespace axTLS +{ + public class axtls + { +END +} +elsif ($binding == $VBNET) +{ + # generate the VB.NET/C interface file + print DATA_OUT << "END"; +' The VB.NET to C interface definition file for the axTLS project +' Do not modify - this file is generated + +Imports System +Imports System.Runtime.InteropServices + +Namespace axTLSvb + Public Class axtls +END +} + +parseFile(@raw_data); + +# finish up +if ($binding == $CSHARP) +{ + print DATA_OUT " };\n"; + print DATA_OUT "};\n"; +} +elsif ($binding == $VBNET) +{ + print DATA_OUT " End Class\nEnd Namespace\n"; +} + +close(DATA_IN); +close(DATA_OUT); + +#=============================================================== + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/Makefile new file mode 100644 index 0000000..8df1d0a --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/Makefile @@ -0,0 +1,94 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +AXTLS_HOME=../.. + +include $(AXTLS_HOME)/config/.config +include $(AXTLS_HOME)/config/makefile.conf +include $(AXTLS_HOME)/config/makefile.java.conf + +all: lib jar + +JAR=$(AXTLS_HOME)/$(STAGE)/axtls.jar + +ifdef CONFIG_PLATFORM_WIN32 +TARGET=$(AXTLS_HOME)/$(STAGE)/axtlsj.dll +else +TARGET=$(AXTLS_HOME)/$(STAGE)/libaxtlsj.so +endif + +lib: $(TARGET) +axTLSj_wrap.o : axTLSj_wrap.c + +JAVA_FILES= \ + axtlsjJNI.java \ + axtlsjConstants.java \ + axtlsj.java \ + SSLReadHolder.java \ + SSL.java \ + SSLUtil.java \ + SSLCTX.java \ + SSLServer.java \ + SSLClient.java + +OBJ=axTLSj_wrap.o + +JAVA_CLASSES:=$(JAVA_FILES:%.java=classes/axTLSj/%.class) + +ifdef CONFIG_PLATFORM_WIN32 +LDFLAGS += axtls.lib /libpath:"$(AXTLS_HOME)/$(STAGE)" + +include $(AXTLS_HOME)/config/makefile.post + +$(TARGET) : $(OBJ) + $(LD) $(LDFLAGS) $(LDSHARED) /out:$@ $(OBJ) +else # Not Win32 + +$(TARGET) : $(OBJ) + $(LD) $(LDFLAGS) -L $(AXTLS_HOME)/$(STAGE) $(LDSHARED) -o $@ $(OBJ) -laxtls +endif + +jar: $(OBJ) $(JAR) + +# if we are doing the samples then defer creating the jar until then +$(JAR): $(JAVA_CLASSES) +ifndef CONFIG_JAVA_SAMPLES + jar cvf $@ -C classes axTLSj +else + @if [ ! -f $(JAR) ]; then touch $(JAR); fi +endif + +classes/axTLSj/%.class : %.java + javac -d classes -classpath classes $^ + +clean:: + @rm -f $(JAR) $(TARGET) SWIG* axtls* *.i *.c + @rm -fr classes/* + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSL.java b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSL.java new file mode 100644 index 0000000..b53a6da --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSL.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * A wrapper around the unmanaged interface to give a semi-decent Java API + */ + +package axTLSj; + +import java.io.*; +import java.util.*; + +/** + * @defgroup java_api Java API. + * + * Ensure that the appropriate dispose() methods are called when finished with + * various objects - otherwise memory leaks will result. + */ + +/** + * @class SSL + * @ingroup java_api + * @brief A representation of an SSL connection. + * + */ +public class SSL +{ + public int m_ssl; /**< A pointer to the real SSL type */ + + /** + * @brief Store the reference to an SSL context. + * @param ip [in] A reference to an SSL object. + */ + public SSL(int ip) + { + m_ssl = ip; + } + + /** + * @brief Free any used resources on this connection. + * + * A "Close Notify" message is sent on this connection (if possible). It + * is up to the application to close the socket. + */ + public void dispose() + { + axtlsj.ssl_free(m_ssl); + } + + /** + * @brief Return the result of a handshake. + * @return SSL_OK if the handshake is complete and ok. + * @see ssl.h for the error code list. + */ + public int handshakeStatus() + { + return axtlsj.ssl_handshake_status(m_ssl); + } + + /** + * @brief Return the SSL cipher id. + * @return The cipher id which is one of: + * - SSL_AES128_SHA (0x2f) + * - SSL_AES256_SHA (0x35) + * - SSL_RC4_128_SHA (0x05) + * - SSL_RC4_128_MD5 (0x04) + */ + public byte getCipherId() + { + return axtlsj.ssl_get_cipher_id(m_ssl); + } + + /** + * @brief Get the session id for a handshake. + * + * This will be a 32 byte sequence and is available after the first + * handshaking messages are sent. + * @return The session id as a 32 byte sequence. + * @note A SSLv23 handshake may have only 16 valid bytes. + */ + public byte[] getSessionId() + { + return axtlsj.ssl_get_session_id(m_ssl); + } + + /** + * @brief Retrieve an X.509 distinguished name component. + * + * When a handshake is complete and a certificate has been exchanged, + * then the details of the remote certificate can be retrieved. + * + * This will usually be used by a client to check that the server's common + * name matches the URL. + * + * A full handshake needs to occur for this call to work. + * + * @param component [in] one of: + * - SSL_X509_CERT_COMMON_NAME + * - SSL_X509_CERT_ORGANIZATION + * - SSL_X509_CERT_ORGANIZATIONAL_NAME + * - SSL_X509_CA_CERT_COMMON_NAME + * - SSL_X509_CA_CERT_ORGANIZATION + * - SSL_X509_CA_CERT_ORGANIZATIONAL_NAME + * @return The appropriate string (or null if not defined) + */ + public String getCertificateDN(int component) + { + return axtlsj.ssl_get_cert_dn(m_ssl, component); + } +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLCTX.java b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLCTX.java new file mode 100644 index 0000000..1cd3e03 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLCTX.java @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * A wrapper around the unmanaged interface to give a semi-decent Java API + */ + +package axTLSj; + +import java.net.*; + +/** + * @class SSLCTX + * @ingroup java_api + * @brief A base object for SSLServer/SSLClient. + */ +public class SSLCTX +{ + /** + * A reference to the real client/server context. + */ + protected int m_ctx; + + /** + * @brief Establish a new client/server context. + * + * This function is called before any client/server SSL connections are + * made. If multiple threads are used, then each thread will have its + * own SSLCTX context. Any number of connections may be made with a single + * context. + * + * Each new connection will use the this context's private key and + * certificate chain. If a different certificate chain is required, then a + * different context needs to be be used. + * + * @param options [in] Any particular options. At present the options + * supported are: + * - SSL_SERVER_VERIFY_LATER (client only): Don't stop a handshake if the + * server authentication fails. The certificate can be authenticated later + * with a call to verifyCert(). + * - SSL_CLIENT_AUTHENTICATION (server only): Enforce client authentication + * i.e. each handshake will include a "certificate request" message from + * the server. + * - SSL_DISPLAY_BYTES (full mode build only): Display the byte sequences + * during the handshake. + * - SSL_DISPLAY_STATES (full mode build only): Display the state changes + * during the handshake. + * - SSL_DISPLAY_CERTS (full mode build only): Display the certificates that + * are passed during a handshake. + * - SSL_DISPLAY_RSA (full mode build only): Display the RSA key details + * that are passed during a handshake. + * + * @param num_sessions [in] The number of sessions to be used for session + * caching. If this value is 0, then there is no session caching. + * + * If this option is null, then the default internal private key/ + * certificate pair is used (if CONFIG_SSL_USE_DEFAULT_KEY is set). + * + * The resources used by this object are automatically freed. + * @return A client/server context. + */ + protected SSLCTX(int options, int num_sessions) + { + m_ctx = axtlsj.ssl_ctx_new(options, num_sessions); + } + + /** + * @brief Remove a client/server context. + * + * Frees any used resources used by this context. Each connection will be + * sent a "Close Notify" alert (if possible). + */ + public void dispose() + { + axtlsj.ssl_ctx_free(m_ctx); + } + + /** + * @brief Read the SSL data stream. + * @param ssl [in] An SSL object reference. + * @param rh [out] After a successful read, the decrypted data can be + * retrieved with rh.getData(). It will be null otherwise. + * @return The number of decrypted bytes: + * - if > 0, then the handshaking is complete and we are returning the + * number of decrypted bytes. + * - SSL_OK if the handshaking stage is successful (but not yet complete). + * - < 0 if an error. + * @see ssl.h for the error code list. + * @note Use rh before doing any successive ssl calls. + */ + public int read(SSL ssl, SSLReadHolder rh) + { + return axtlsj.ssl_read(ssl.m_ssl, rh); + } + + /** + * @brief Write to the SSL data stream. + * @param ssl [in] An SSL obect reference. + * @param out_data [in] The data to be written + * @return The number of bytes sent, or if < 0 if an error. + * @see ssl.h for the error code list. + */ + public int write(SSL ssl, byte[] out_data) + { + return axtlsj.ssl_write(ssl.m_ssl, out_data, out_data.length); + } + + /** + * @brief Write to the SSL data stream. + * @param ssl [in] An SSL obect reference. + * @param out_data [in] The data to be written + * @param out_len [in] The number of bytes to be written + * @return The number of bytes sent, or if < 0 if an error. + * @see ssl.h for the error code list. + */ + public int write(SSL ssl, byte[] out_data, int out_len) + { + return axtlsj.ssl_write(ssl.m_ssl, out_data, out_len); + } + + /** + * @brief Find an ssl object based on a Socket reference. + * + * Goes through the list of SSL objects maintained in a client/server + * context to look for a socket match. + * @param s [in] A reference to a Socket object. + * @return A reference to the SSL object. Returns null if the object + * could not be found. + */ + public SSL find(Socket s) + { + int client_fd = axtlsj.getFd(s); + return new SSL(axtlsj.ssl_find(m_ctx, client_fd)); + } + + /** + * @brief Authenticate a received certificate. + * + * This call is usually made by a client after a handshake is complete + * and the context is in SSL_SERVER_VERIFY_LATER mode. + * @param ssl [in] An SSL object reference. + * @return SSL_OK if the certificate is verified. + */ + public int verifyCert(SSL ssl) + { + return axtlsj.ssl_verify_cert(ssl.m_ssl); + } + + /** + * @brief Force the client to perform its handshake again. + * + * For a client this involves sending another "client hello" message. + * For the server is means sending a "hello request" message. + * + * This is a blocking call on the client (until the handshake completes). + * @param ssl [in] An SSL object reference. + * @return SSL_OK if renegotiation instantiation was ok + */ + public int renegotiate(SSL ssl) + { + return axtlsj.ssl_renegotiate(ssl.m_ssl); + } + + /** + * @brief Load a file into memory that is in binary DER or ASCII PEM format. + * + * These are temporary objects that are used to load private keys, + * certificates etc into memory. + * @param obj_type [in] The format of the file. Can be one of: + * - SSL_OBJ_X509_CERT (no password required) + * - SSL_OBJ_X509_CACERT (no password required) + * - SSL_OBJ_RSA_KEY (AES128/AES256 PEM encryption supported) + * - SSL_OBJ_P8 (RC4-128 encrypted data supported) + * - SSL_OBJ_P12 (RC4-128 encrypted data supported) + * + * PEM files are automatically detected (if supported). + * @param filename [in] The location of a file in DER/PEM format. + * @param password [in] The password used. Can be null if not required. + * @return SSL_OK if all ok + */ + public int objLoad(int obj_type, String filename, String password) + { + return axtlsj.ssl_obj_load(m_ctx, obj_type, filename, password); + } + + /** + * @brief Transfer binary data into the object loader. + * + * These are temporary objects that are used to load private keys, + * certificates etc into memory. + * @param obj_type [in] The format of the memory data. + * @param data [in] The binary data to be loaded. + * @param len [in] The amount of data to be loaded. + * @param password [in] The password used. Can be null if not required. + * @return SSL_OK if all ok + */ + + public int objLoad(int obj_type, byte[] data, int len, String password) + { + return axtlsj.ssl_obj_memory_load(m_ctx, obj_type, data, len, password); + } +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLClient.java b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLClient.java new file mode 100644 index 0000000..f65fe9c --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLClient.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * A wrapper around the unmanaged interface to give a semi-decent Java API + */ + +package axTLSj; + +import java.net.*; + +/** + * @class SSLClient + * @ingroup java_api + * @brief The client context. + * + * All client connections are started within a client context. + */ +public class SSLClient extends SSLCTX +{ + /** + * @brief Start a new client context. + * + * @see SSLCTX for details. + */ + public SSLClient(int options, int num_sessions) + { + super(options, num_sessions); + } + + /** + * @brief Establish a new SSL connection to an SSL server. + * + * It is up to the application to establish the initial socket connection. + * + * This is a blocking call - it will finish when the handshake is + * complete (or has failed). + * + * Call dispose() when the connection is to be removed. + * @param s [in] A reference to a Socket object. + * @param session_id [in] A 32 byte session id for session resumption. This + * can be null if no session resumption is not required. + * @return An SSL object reference. Use SSL.handshakeStatus() to check + * if a handshake succeeded. + */ + public SSL connect(Socket s, byte[] session_id) + { + int client_fd = axtlsj.getFd(s); + byte sess_id_size = (byte)(session_id != null ? + session_id.length : 0); + return new SSL(axtlsj.ssl_client_new(m_ctx, client_fd, session_id, + sess_id_size)); + } +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLReadHolder.java b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLReadHolder.java new file mode 100644 index 0000000..91fd76b --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLReadHolder.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * A wrapper around the unmanaged interface to give a semi-decent Java API + */ + +package axTLSj; + +/** + * @class SSLReadHolder + * @ingroup java_api + * @brief A holder for data read in an SSL read. + */ +public class SSLReadHolder +{ + /** + * @brief Contruct a new read holder object. + */ + public SSLReadHolder() + { + m_buf = null; + } + + /** + * @brief Retrieve the reference to the read data. + */ + public byte[] getData() + { + return m_buf; + } + + private byte[] m_buf; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLServer.java b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLServer.java new file mode 100644 index 0000000..514ccb0 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLServer.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * A wrapper around the unmanaged interface to give a semi-decent Java API + */ + +package axTLSj; + +import java.net.*; + +/** + * @class SSLServer + * @ingroup java_api + * @brief The server context. + * + * All server connections are started within a server context. + */ +public class SSLServer extends SSLCTX +{ + /** + * @brief Start a new server context. + * + * @see SSLCTX for details. + */ + public SSLServer(int options, int num_sessions) + { + super(options, num_sessions); + } + + /** + * @brief Establish a new SSL connection to an SSL client. + * + * It is up to the application to establish the initial socket connection. + * + * Call dispose() when the connection is to be removed. + * @param s [in] A reference to a Socket object. + * @return An SSL object reference. + */ + public SSL connect(Socket s) + { + int client_fd = axtlsj.getFd(s); + return new SSL(axtlsj.ssl_server_new(m_ctx, client_fd)); + } +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLUtil.java b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLUtil.java new file mode 100644 index 0000000..3d53de5 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/java/SSLUtil.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * A wrapper around the unmanaged interface to give a semi-decent Java API + */ + +package axTLSj; + +import java.io.*; +import java.util.*; + +/** + * @class SSLUtil + * @ingroup java_api + * @brief Some global helper functions. + * + */ +public class SSLUtil +{ + /** + * @brief Load up the ddl/shared library + */ + static + { + System.loadLibrary("axtlsj"); + } + + /** + * @brief Return the build mode of the axTLS project. + * @return The build mode is one of: + * - SSL_BUILD_SERVER_ONLY + * - SSL_BUILD_ENABLE_VERIFICATION + * - SSL_BUILD_ENABLE_CLIENT + * - SSL_BUILD_FULL_MODE + */ + public static int buildMode() + { + return axtlsj.ssl_get_config(axtlsj.SSL_BUILD_MODE); + } + + /** + * @brief Return the number of chained certificates that the client/server + * supports. + * @return The number of supported client/server certificates. + */ + public static int maxCerts() + { + return axtlsj.ssl_get_config(axtlsj.SSL_MAX_CERT_CFG_OFFSET); + } + + /** + * @brief Return the number of CA certificates that the client/server + * supports. + * @return The number of supported CA certificates. + */ + public static int maxCACerts() + { + return axtlsj.ssl_get_config(axtlsj.SSL_MAX_CA_CERT_CFG_OFFSET); + } + + /** + * @brief Indicate if PEM is supported. + * @return true if PEM supported. + */ + public static boolean hasPEM() + { + return axtlsj.ssl_get_config(axtlsj.SSL_HAS_PEM) > 0 ? true : false; + } + + /** + * @brief Display the text string of the error. + * @param error_code [in] The integer error code. + * @see ssl.h for the error code list. + */ + public static void displayError(int error_code) + { + axtlsj.ssl_display_error(error_code); + } + + /** + * @brief Return the version of the axTLS project. + */ + public static String version() + { + return axtlsj.ssl_version(); + } +} + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/lua/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/lua/Makefile new file mode 100644 index 0000000..daacf92 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/lua/Makefile @@ -0,0 +1,67 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +AXTLS_HOME=../.. + +include $(AXTLS_HOME)/config/.config +include $(AXTLS_HOME)/config/makefile.conf + +all: lib + + +ifdef CONFIG_PLATFORM_WIN32 +TARGET=$(AXTLS_HOME)/$(STAGE)/axtlsl.dll +else +TARGET=$(CONFIG_LUA_CORE)/lib/lua/5.1/axtlsl.so +endif + +ifneq ($(MAKECMDGOALS), clean) + +lib: $(TARGET) +OBJ:=axTLSl_wrap.o +include $(AXTLS_HOME)/config/makefile.post + +# there are a few static functions that aren't used +CFLAGS += -funit-at-a-time + +$(TARGET) : $(OBJ) + $(LD) $(LDFLAGS) $(LDSHARED) -o $@ $^ -L$(AXTLS_HOME)/$(STAGE) -L$(CONFIG_LUA_CORE)/lib -laxtls -llua + +CFLAGS += -I $(CONFIG_LUA_CORE)/include +else +CFLAGS += /I"`cygpath -w $(CONFIG_LUA_CORE)/include`" +LDFLAGS += axtls.lib /libpath:"$(AXTLS_HOME)/$(STAGE)" + +$(TARGET) : $(OBJ) + $(LD) $(LDFLAGS) $(LDSHARED) /out:$@ $(OBJ) +endif # WIN32 + +clean:: + @rm -f $(TARGET) *.i axTLSl* .depend diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/perl/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/perl/Makefile new file mode 100644 index 0000000..92fd3c5 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/perl/Makefile @@ -0,0 +1,91 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +AXTLS_HOME=../.. + +include $(AXTLS_HOME)/config/.config +include $(AXTLS_HOME)/config/makefile.conf + +all: lib + +ifdef CONFIG_PLATFORM_WIN32 +TARGET=$(AXTLS_HOME)/$(STAGE)/axtlsp.dll +else +TARGET=$(AXTLS_HOME)/$(STAGE)/libaxtlsp.so +endif + +ifneq ($(MAKECMDGOALS), clean) + +ifdef CONFIG_PLATFORM_WIN32 +PERL5_CORE:=$(shell cygpath -w "$(CONFIG_PERL_CORE)") +else +PERL5_CORE= $(shell perl -e 'use Config; print $$Config{archlib};')/CORE +endif + +all: test_perl + +test_perl: + @if ! [ -d "$(PERL5_CORE)" ]; then \ + echo "*** Error: Perl not installed at $(CONFIG_PERL_CORE) - go to " \ + "http://www.cpan.org/authors/id/G/GR/GRAHAMC/SiePerl-5.8.0-bin-1.0-Win32.INSTALL.exe" && exit 1; \ + fi + +endif + +lib: $(TARGET) +OBJ:=axTLSp_wrap.o +include $(AXTLS_HOME)/config/makefile.post + +ifndef CONFIG_PLATFORM_WIN32 # Linux/Unix/Cygwin + +# +# Could have used libperl.a, but it increases the library to over 1MB, so just +# use libperl.so. But this needs to be in the shared library path for things to +# work. +# +$(TARGET) : $(OBJ) + $(LD) $(LDFLAGS) -L$(AXTLS_HOME)/$(STAGE) -L$(PERL5_CORE) $(LDSHARED) -o $@ $(OBJ) -laxtls -lperl +ifdef CONFIG_PLATFORM_CYGWIN + cd $(AXTLS_HOME)/$(STAGE); ln -sf $(notdir $@) axtlsp.dll +endif + @install axtlsp.pm $(AXTLS_HOME)/$(STAGE) + +CFLAGS += -D_GNU_SOURCE -I$(PERL5_CORE) +else +CFLAGS += /I"$(PERL5_CORE)" +LDFLAGS += $(CONFIG_PERL_LIB) /libpath:"$(PERL5_CORE)" axtls.lib /libpath:"$(AXTLS_HOME)/$(STAGE)" + +$(TARGET) : $(OBJ) + $(LD) $(LDFLAGS) $(LDSHARED) /out:$@ $(OBJ) + install axtlsp.pm $(AXTLS_HOME)/$(STAGE) +endif # WIN32 + +clean:: + @rm -f $(TARGET) axtls* *.i axTLSp* *.c .depend $(AXTLS_HOME)/$(STAGE)/axtlsp.pm diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/vbnet/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/vbnet/Makefile new file mode 100644 index 0000000..7da60d0 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/vbnet/Makefile @@ -0,0 +1,35 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +include ../../config/.config +include ../../config/makefile.conf + +clean:: + @rm -f axssl* axInterface.vb diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/vbnet/axTLSvb.vb b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/vbnet/axTLSvb.vb new file mode 100644 index 0000000..9388273 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/bindings/vbnet/axTLSvb.vb @@ -0,0 +1,200 @@ +' +' Copyright (c) 2007, Cameron Rich +' +' All rights reserved. +' +' Redistribution and use in source and binary forms, with or without +' modification, are permitted provided that the following conditions are met: +' +' * Redistributions of source code must retain the above copyright notice, +' this list of conditions and the following disclaimer. +' * Redistributions in binary form must reproduce the above copyright +' notice, this list of conditions and the following disclaimer in the +' documentation and/or other materials provided with the distribution. +' * Neither the name of the axTLS project nor the names of its +' contributors may be used to endorse or promote products derived +' from this software without specific prior written permission. +' +' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +' "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +' LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +' A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +' CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +' SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +' TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +' DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +' OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +' NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +' THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +' + +' +' A wrapper around the unmanaged Integererface to give a semi-decent VB.NET API +' + +Imports System +Imports System.Runtime.InteropServices +Imports System.Net.Sockets +Imports axTLSvb + +Namespace axTLSvb + Public Class SSL + Public m_ssl As IntPtr + + Public Sub New(ByRef ip As IntPtr) + m_ssl = ip + End Sub + + Public Sub Dispose() + axtls.ssl_free(m_ssl) + End Sub + + Public Function HandshakeStatus() As Integer + Return axtls.ssl_handshake_status(m_ssl) + End Function + + Public Function GetCipherId() As Byte + Return axtls.ssl_get_cipher_id(m_ssl) + End Function + + Public Function GetSessionId() As Byte() + Dim ptr As IntPtr = axtls.ssl_get_session_id(m_ssl) + Dim sess_id_size As Integer = axtls.ssl_get_session_id_size(m_ssl) + Dim result(sess_id_size-1) As Byte + Marshal.Copy(ptr, result, 0, sess_id_size) + Return result + End Function + + Public Function GetCertificateDN(component As Integer) As String + Return axtls.ssl_get_cert_dn(m_ssl, component) + End Function + End Class + + Public Class SSLUtil + Private dummy As Integer ' need something here + + Public Shared Function BuildMode() As Integer + Return axtls.ssl_get_config(axtls.SSL_BUILD_MODE) + End Function + + Public Shared Function MaxCerts() As Integer + Return axtls.ssl_get_config(axtls.SSL_MAX_CERT_CFG_OFFSET) + End Function + + Public Shared Function MaxCACerts() As Integer + Return axtls.ssl_get_config(axtls.SSL_MAX_CA_CERT_CFG_OFFSET) + End Function + + Public Shared Function HasPEM() As Boolean + If axtls.ssl_get_config(axtls.SSL_HAS_PEM) > 0 Then + Return True + Else + Return False + End If + End Function + + Public Shared Sub DisplayError(ByVal error_code As Integer) + axtls.ssl_display_error(error_code) + End Sub + + Public Shared Function Version() As String + Return axtls.ssl_version() + End Function + End Class + + Public Class SSLCTX + Protected m_ctx As IntPtr + + Protected Sub New(ByVal options As Integer, _ + ByVal num_sessions As Integer) + m_ctx = axtls.ssl_ctx_new(options, num_sessions) + End Sub + + Public Sub Dispose() + axtls.ssl_ctx_free(m_ctx) + End Sub + + Public Function Read(ByVal ssl As SSL, ByRef in_data As Byte()) As Integer + Dim ptr As IntPtr = IntPtr.Zero + Dim ret as Integer = axtls.ssl_read(ssl.m_ssl, ptr) + + If ret > axtls.SSL_OK Then + ReDim in_data(ret) + Marshal.Copy(ptr, in_data, 0, ret) + Else + in_data = Nothing + End If + + Return ret + End Function + + Public Function Write(ByVal ssl As SSL, _ + ByVal data As Byte(), len As Integer) As Integer + Return axtls.ssl_write(ssl.m_ssl, data, len) + End Function + + Public Function Find(ByVal s As Socket) As SSL + Dim client_fd As Integer = s.Handle.ToInt32() + Return New SSL(axtls.ssl_find(m_ctx, client_fd)) + End Function + + Public Function VerifyCert(ByVal ssl As SSL) As Integer + Return axtls.ssl_verify_cert(ssl.m_ssl) + End Function + + Public Function Renegotiate(ByVal ssl As SSL) As Integer + Return axtls.ssl_renegotiate(ssl.m_ssl) + End Function + + Public Function ObjLoad(ByVal obj_type As Integer, _ + ByVal filename As String, _ + password As String) As Integer + Return axtls.ssl_obj_load(m_ctx, obj_type, filename, password) + End Function + + Public Function ObjLoad(ByVal obj_type As Integer, _ + ByVal data As Byte(), ByVal len As Integer, _ + password As String) As Integer + Return axtls.ssl_obj_memory_load( _ + m_ctx, obj_type, data, len, password) + End Function + End Class + + Public Class SSLServer + Inherits SSLCTX + + Public Sub New(ByVal options As Integer, _ + ByVal num_sessions As Integer) + MyBase.New(options, num_sessions) + End Sub + + Public Function Connect(ByVal s As Socket) As SSL + Dim client_fd As Integer = s.Handle.ToInt32() + Return New SSL(axtls.ssl_server_new(m_ctx, client_fd)) + End Function + End Class + + Public Class SSLClient + Inherits SSLCTX + + Public Sub New(ByVal options As Integer, _ + ByVal num_sessions As Integer) + MyBase.New(options, num_sessions) + End Sub + + Public Function Connect(ByVal s As Socket, _ + ByVal session_id As Byte()) As SSL + Dim client_fd As Integer = s.Handle.ToInt32() + Dim sess_id_size As Byte + If session_id is Nothing Then + sess_id_size = 0 + Else + sess_id_size = session_id.Length + End If + + Return New SSL(axtls.ssl_client_new(m_ctx, client_fd, session_id, _ + sess_id_size)) + End Function + + End Class +End Namespace diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/.config b/feeds/luci/libs/luci-lib-nixio/axTLS/config/.config new file mode 100644 index 0000000..46cd061 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/.config @@ -0,0 +1,112 @@ +# +# Automatically generated make config: don't edit +# +HAVE_DOT_CONFIG=y +CONFIG_PLATFORM_LINUX=y +# CONFIG_PLATFORM_CYGWIN is not set +# CONFIG_PLATFORM_WIN32 is not set + +# +# General Configuration +# +PREFIX="/usr" +# CONFIG_DEBUG is not set +CONFIG_STRIP_UNWANTED_SECTIONS=y +# CONFIG_VISUAL_STUDIO_7_0 is not set +# CONFIG_VISUAL_STUDIO_8_0 is not set +CONFIG_VISUAL_STUDIO_7_0_BASE="" +CONFIG_VISUAL_STUDIO_8_0_BASE="" +CONFIG_EXTRA_CFLAGS_OPTIONS="-fpic" +CONFIG_EXTRA_LDFLAGS_OPTIONS="" + +# +# SSL Library +# +# CONFIG_SSL_SERVER_ONLY is not set +# CONFIG_SSL_CERT_VERIFICATION is not set +# CONFIG_SSL_ENABLE_CLIENT is not set +CONFIG_SSL_FULL_MODE=y +# CONFIG_SSL_SKELETON_MODE is not set +# CONFIG_SSL_PROT_LOW is not set +CONFIG_SSL_PROT_MEDIUM=y +# CONFIG_SSL_PROT_HIGH is not set +# CONFIG_SSL_USE_DEFAULT_KEY is not set +CONFIG_SSL_PRIVATE_KEY_LOCATION="/etc/nixio/rsa_main.der" +CONFIG_SSL_PRIVATE_KEY_PASSWORD="" +CONFIG_SSL_X509_CERT_LOCATION="" +# CONFIG_SSL_GENERATE_X509_CERT is not set +CONFIG_SSL_X509_COMMON_NAME="" +CONFIG_SSL_X509_ORGANIZATION_NAME="" +CONFIG_SSL_X509_ORGANIZATION_UNIT_NAME="" +# CONFIG_SSL_ENABLE_V23_HANDSHAKE is not set +# CONFIG_SSL_HAS_PEM is not set +# CONFIG_SSL_USE_PKCS12 is not set +CONFIG_SSL_EXPIRY_TIME=24 +CONFIG_X509_MAX_CA_CERTS=4 +CONFIG_SSL_MAX_CERTS=2 +CONFIG_SSL_CTX_MUTEXING=y +CONFIG_USE_DEV_URANDOM=y +# CONFIG_WIN32_USE_CRYPTO_LIB is not set +# CONFIG_OPENSSL_COMPATIBLE is not set +# CONFIG_PERFORMANCE_TESTING is not set +# CONFIG_SSL_TEST is not set +# CONFIG_AXHTTPD is not set +# CONFIG_HTTP_STATIC_BUILD is not set +CONFIG_HTTP_PORT=0 +CONFIG_HTTP_HTTPS_PORT=0 +CONFIG_HTTP_SESSION_CACHE_SIZE=0 +CONFIG_HTTP_WEBROOT="" +CONFIG_HTTP_TIMEOUT=0 +# CONFIG_HTTP_HAS_CGI is not set +CONFIG_HTTP_CGI_EXTENSIONS="" +# CONFIG_HTTP_ENABLE_LUA is not set +CONFIG_HTTP_LUA_PREFIX="" +CONFIG_HTTP_LUA_CGI_LAUNCHER="" +# CONFIG_HTTP_BUILD_LUA is not set +# CONFIG_HTTP_DIRECTORIES is not set +# CONFIG_HTTP_HAS_AUTHORIZATION is not set +# CONFIG_HTTP_HAS_IPV6 is not set +# CONFIG_HTTP_ENABLE_DIFFERENT_USER is not set +CONFIG_HTTP_USER="" +# CONFIG_HTTP_VERBOSE is not set +# CONFIG_HTTP_IS_DAEMON is not set + +# +# Language Bindings +# +# CONFIG_BINDINGS is not set +# CONFIG_CSHARP_BINDINGS is not set +# CONFIG_VBNET_BINDINGS is not set +CONFIG_DOT_NET_FRAMEWORK_BASE="" +# CONFIG_JAVA_BINDINGS is not set +CONFIG_JAVA_HOME="" +# CONFIG_PERL_BINDINGS is not set +CONFIG_PERL_CORE="" +CONFIG_PERL_LIB="" +# CONFIG_LUA_BINDINGS is not set +CONFIG_LUA_CORE="" + +# +# Samples +# +# CONFIG_SAMPLES is not set +# CONFIG_C_SAMPLES is not set +# CONFIG_CSHARP_SAMPLES is not set +# CONFIG_VBNET_SAMPLES is not set +# CONFIG_JAVA_SAMPLES is not set +# CONFIG_PERL_SAMPLES is not set +# CONFIG_LUA_SAMPLES is not set + +# +# BigInt Options +# +# CONFIG_BIGINT_CLASSICAL is not set +# CONFIG_BIGINT_MONTGOMERY is not set +CONFIG_BIGINT_BARRETT=y +CONFIG_BIGINT_CRT=y +# CONFIG_BIGINT_KARATSUBA is not set +MUL_KARATSUBA_THRESH=0 +SQU_KARATSUBA_THRESH=0 +CONFIG_BIGINT_SLIDING_WINDOW=y +CONFIG_BIGINT_SQUARE=y +# CONFIG_BIGINT_CHECK_ON is not set diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/Config.in b/feeds/luci/libs/luci-lib-nixio/axTLS/config/Config.in new file mode 100644 index 0000000..dc40756 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/Config.in @@ -0,0 +1,114 @@ +# +# For a description of the syntax of this configuration file, +# see scripts/config/Kconfig-language.txt +# + +mainmenu "axTLS Configuration" + +config HAVE_DOT_CONFIG + bool + default y + +choice + prompt "Platform" + default CONFIG_PLATFORM_LINUX + +config CONFIG_PLATFORM_LINUX + bool "Linux" + +config CONFIG_PLATFORM_CYGWIN + bool "Cygwin" + +config CONFIG_PLATFORM_WIN32 + bool "Win32" + +endchoice + +menu "General Configuration" + +config PREFIX + string "axTLS installation prefix" + depends on !CONFIG_PLATFORM_WIN32 + default "/usr/local" + help + Define your directory to install axTLS files/subdirs in. + +config CONFIG_DEBUG + bool "Build axTLS with Debugging symbols" + default n + help + Say Y here if you wish to compile axTLS with debugging symbols. + This will allow you to use a debugger to examine axTLS internals. + This increases the size of the binary considerably and should only be + used when doing development. + If you are doing development and want to debug axTLS, answer Y. + + Most people should answer N. + +config CONFIG_STRIP_UNWANTED_SECTIONS + depends on !CONFIG_PLATFORM_WIN32 && !CONFIG_DEBUG + bool "Strip unwanted sections from elf binaries" + default y + help + Strip unwanted sections from the resulting binaries + +menu "Microsoft Compiler Options" +depends on CONFIG_PLATFORM_WIN32 + +choice + prompt "Compiler" + depends on CONFIG_PLATFORM_WIN32 + default CONFIG_VISUAL_STUDIO_7_0 + +config CONFIG_VISUAL_STUDIO_7_0 + bool "Visual Studio 7.0 (2003)" + help + Use Microsoft's Visual Studio 2003 platform. + +config CONFIG_VISUAL_STUDIO_8_0 + bool "Visual Studio 8.0 (2005)" + help + Use Microsoft's Visual Studio 2005 platform. + +endchoice + +config CONFIG_VISUAL_STUDIO_7_0_BASE + string "Base" + depends on CONFIG_VISUAL_STUDIO_7_0 + default "c:\\Program Files\\Microsoft Visual Studio .NET 2003" + +config CONFIG_VISUAL_STUDIO_8_0_BASE + string "Base" + depends on CONFIG_VISUAL_STUDIO_8_0 + default "c:\\Program Files\\Microsoft Visual Studio 8" + +endmenu + +config CONFIG_EXTRA_CFLAGS_OPTIONS + string "Any extra CFLAGS options for the compiler?" + help + Do you want to pass any extra CFLAGS options to the compiler as + you build axTLS? If so, this is the option for you... For + example, if you want to add some simple compiler switches (like + -march=i686), or check for warnings using -Werror, just those + options here. + +config CONFIG_EXTRA_LDFLAGS_OPTIONS + string "Any extra LDFLAGS options for the compiler?" + help + Do you want to pass any extra LDFLAGS options to the compiler? + +endmenu + +source ssl/Config.in +config CONFIG_AXHTTPD + bool "Enable HTTP/HTTPS Web Server" + default y + help + Build the AXHTTPD web server + +source httpd/Config.in +source bindings/Config.in +source samples/Config.in +source ssl/BigIntConfig.in + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/JMeter.jmx b/feeds/luci/libs/luci-lib-nixio/axTLS/config/JMeter.jmx new file mode 100755 index 0000000..f62c03f --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/JMeter.jmx @@ -0,0 +1,247 @@ + + + + + + + + true + false + + + + + 1152004173000 + + + 16 + false + + 10 + false + + 1152004173000 + stopthread + 0 + + + + /index.html + GET + true + + true + 80 + + + + + + false + 127.0.0.1 + + false + + + + + 1152004173000 + + + 16 + false + + 10 + false + + 1152004173000 + stopthread + 0 + + + + /index.html + GET + true + HTTPS + true + 443 + + + + + + false + 127.0.0.1 + + false + + + + + 1152004173000 + + + 16 + false + + 10 + false + + 1152004173000 + stopthread + 0 + + + + /index.html + GET + true + HTTPS + true + 2443 + + + + + + false + 127.0.0.1 + + false + + + + + 1152004173000 + + + 16 + false + + 10 + false + + 1152004173000 + stopthread + 0 + + + + /index.html + GET + true + HTTPS + true + 3443 + + + + + + false + 127.0.0.1 + + false + + + + + 1152004173000 + + + 16 + false + + 10 + false + + 1152004173000 + stopthread + 0 + + + + /index.html + GET + true + HTTPS + true + 1443 + + + + + + false + 127.0.0.1 + + false + + + + + + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + false + false + false + false + false + 0 + + saveConfig + + + false + + + + + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + false + false + false + false + false + 0 + + saveConfig + + + false + + + + + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/Rules.mak b/feeds/luci/libs/luci-lib-nixio/axTLS/config/Rules.mak new file mode 100644 index 0000000..c0308da --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/Rules.mak @@ -0,0 +1,220 @@ +# Rules.make for busybox +# +# Copyright (C) 1999-2005 by Erik Andersen +# +# Licensed under GPLv2, see the file LICENSE in this tarball for details. +# + +# Pull in the user's busybox configuration +ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) +-include $(top_builddir)/.config +endif + +#-------------------------------------------------------- +PROG := busybox +MAJOR_VERSION :=1 +MINOR_VERSION :=1 +SUBLEVEL_VERSION:=0 +EXTRAVERSION := +VERSION :=$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL_VERSION)$(EXTRAVERSION) +BUILDTIME := $(shell TZ=UTC date -u "+%Y.%m.%d-%H:%M%z") + + +#-------------------------------------------------------- +# With a modern GNU make(1) (highly recommended, that's what all the +# developers use), all of the following configuration values can be +# overridden at the command line. For example: +# make CROSS=powerpc-linux- top_srcdir="$HOME/busybox" PREFIX=/mnt/app +#-------------------------------------------------------- + +# If you are running a cross compiler, you will want to set 'CROSS' +# to something more interesting... Target architecture is determined +# by asking the CC compiler what arch it compiles things for, so unless +# your compiler is broken, you should not need to specify TARGET_ARCH +CROSS =$(subst ",, $(strip $(CROSS_COMPILER_PREFIX))) +CC = $(CROSS)gcc +AR = $(CROSS)ar +AS = $(CROSS)as +LD = $(CROSS)ld +NM = $(CROSS)nm +STRIP = $(CROSS)strip +CPP = $(CC) -E +# MAKEFILES = $(top_builddir)/.config +RM = rm +RM_F = $(RM) -f +LN = ln +LN_S = $(LN) -s +MKDIR = mkdir +MKDIR_P = $(MKDIR) -p +MV = mv +CP = cp + + +# What OS are you compiling busybox for? This allows you to include +# OS specific things, syscall overrides, etc. +TARGET_OS=linux + +# Select the compiler needed to build binaries for your development system +HOSTCC = gcc +HOSTCFLAGS= -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer + +# Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc. +LC_ALL:= C + +# If you want to add some simple compiler switches (like -march=i686), +# especially from the command line, use this instead of CFLAGS directly. +# For optimization overrides, it's better still to set OPTIMIZATION. +CFLAGS_EXTRA=$(subst ",, $(strip $(EXTRA_CFLAGS_OPTIONS))) + +# To compile vs some other alternative libc, you may need to use/adjust +# the following lines to meet your needs... +# +# If you are using Red Hat 6.x with the compatible RPMs (for developing under +# Red Hat 5.x and glibc 2.0) uncomment the following. Be sure to read about +# using the compatible RPMs (compat-*) at http://www.redhat.com ! +#LIBCDIR:=/usr/i386-glibc20-linux +# +# For other libraries, you are on your own. But these may (or may not) help... +#LDFLAGS+=-nostdlib +#LIBRARIES:=$(LIBCDIR)/lib/libc.a -lgcc +#CROSS_CFLAGS+=-nostdinc -I$(LIBCDIR)/include -I$(GCCINCDIR) -funsigned-char +#GCCINCDIR:=$(shell gcc -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp") + +WARNINGS=-Wall -Wstrict-prototypes -Wshadow +CFLAGS=-I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir) +ARFLAGS=cru + + +# gcc centric. Perhaps fiddle with findstring gcc,$(CC) for the rest +# get the CC MAJOR/MINOR version +CC_MAJOR:=$(shell printf "%02d" $(shell echo __GNUC__ | $(CC) -E -xc - | tail -n 1)) +CC_MINOR:=$(shell printf "%02d" $(shell echo __GNUC_MINOR__ | $(CC) -E -xc - | tail -n 1)) + +#-------------------------------------------------------- +export VERSION BUILDTIME HOSTCC HOSTCFLAGS CROSS CC AR AS LD NM STRIP CPP +ifeq ($(strip $(TARGET_ARCH)),) +TARGET_ARCH:=$(shell $(CC) -dumpmachine | sed -e s'/-.*//' \ + -e 's/i.86/i386/' \ + -e 's/sparc.*/sparc/' \ + -e 's/arm.*/arm/g' \ + -e 's/m68k.*/m68k/' \ + -e 's/ppc/powerpc/g' \ + -e 's/v850.*/v850/g' \ + -e 's/sh[234]/sh/' \ + -e 's/mips-.*/mips/' \ + -e 's/mipsel-.*/mipsel/' \ + -e 's/cris.*/cris/' \ + ) +endif + +# A nifty macro to make testing gcc features easier +check_gcc=$(shell \ + if [ "$(1)" != "" ]; then \ + if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \ + then echo "$(1)"; else echo "$(2)"; fi \ + fi) + +# Setup some shortcuts so that silent mode is silent like it should be +ifeq ($(subst s,,$(MAKEFLAGS)),$(MAKEFLAGS)) +export MAKE_IS_SILENT=n +SECHO=@echo +else +export MAKE_IS_SILENT=y +SECHO=-@false +endif + +CFLAGS+=$(call check_gcc,-funsigned-char,) + +#-------------------------------------------------------- +# Arch specific compiler optimization stuff should go here. +# Unless you want to override the defaults, do not set anything +# for OPTIMIZATION... + +# use '-Os' optimization if available, else use -O2 +OPTIMIZATION:=$(call check_gcc,-Os,-O2) + +# Some nice architecture specific optimizations +ifeq ($(strip $(TARGET_ARCH)),arm) + OPTIMIZATION+=-fstrict-aliasing +endif +ifeq ($(strip $(TARGET_ARCH)),i386) + OPTIMIZATION+=$(call check_gcc,-march=i386,) + OPTIMIZATION+=$(call check_gcc,-mpreferred-stack-boundary=2,) + OPTIMIZATION+=$(call check_gcc,-falign-functions=0 -falign-jumps=0 -falign-loops=0,\ + -malign-functions=0 -malign-jumps=0 -malign-loops=0) +endif +OPTIMIZATIONS:=$(OPTIMIZATION) -fomit-frame-pointer + +# +#-------------------------------------------------------- +# If you're going to do a lot of builds with a non-vanilla configuration, +# it makes sense to adjust parameters above, so you can type "make" +# by itself, instead of following it by the same half-dozen overrides +# every time. The stuff below, on the other hand, is probably less +# prone to casual user adjustment. +# + +ifeq ($(strip $(CONFIG_LFS)),y) + # For large file summit support + CFLAGS+=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 +endif +ifeq ($(strip $(CONFIG_DMALLOC)),y) + # For testing mem leaks with dmalloc + CFLAGS+=-DDMALLOC + LIBRARIES:=-ldmalloc +else + ifeq ($(strip $(CONFIG_EFENCE)),y) + LIBRARIES:=-lefence + endif +endif +ifeq ($(strip $(CONFIG_DEBUG)),y) + CFLAGS +=$(WARNINGS) -g -D_GNU_SOURCE + LDFLAGS +=-Wl,-warn-common + STRIPCMD:=/bin/true -Not_stripping_since_we_are_debugging +else + CFLAGS+=$(WARNINGS) $(OPTIMIZATIONS) -D_GNU_SOURCE -DNDEBUG + LDFLAGS += -Wl,-warn-common + STRIPCMD:=$(STRIP) -s --remove-section=.note --remove-section=.comment +endif +ifeq ($(strip $(CONFIG_STATIC)),y) + LDFLAGS += --static +endif + +ifeq ($(strip $(CONFIG_SELINUX)),y) + LIBRARIES += -lselinux +endif + +ifeq ($(strip $(PREFIX)),) + PREFIX:=`pwd`/_install +endif + +# Additional complications due to support for pristine source dir. +# Include files in the build directory should take precedence over +# the copy in top_srcdir, both during the compilation phase and the +# shell script that finds the list of object files. +# Work in progress by . + + +OBJECTS:=$(APPLET_SOURCES:.c=.o) busybox.o usage.o applets.o +CFLAGS += $(CROSS_CFLAGS) +ifdef BB_INIT_SCRIPT + CFLAGS += -DINIT_SCRIPT='"$(BB_INIT_SCRIPT)"' +endif + +# Put user-supplied flags at the end, where they +# have a chance of winning. +CFLAGS += $(CFLAGS_EXTRA) + +#------------------------------------------------------------ +# Installation options +ifeq ($(strip $(CONFIG_INSTALL_APPLET_HARDLINKS)),y) +INSTALL_OPTS=--hardlinks +endif +ifeq ($(strip $(CONFIG_INSTALL_APPLET_SYMLINKS)),y) +INSTALL_OPTS=--symlinks +endif +ifeq ($(strip $(CONFIG_INSTALL_APPLET_DONT)),y) +INSTALL_OPTS= +endif + +.PHONY: dummy diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/axhttpd.aip b/feeds/luci/libs/luci-lib-nixio/axTLS/config/axhttpd.aip new file mode 100755 index 0000000..412fe3b --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/axhttpd.aip @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/axtls.RES b/feeds/luci/libs/luci-lib-nixio/axTLS/config/axtls.RES new file mode 100644 index 0000000000000000000000000000000000000000..2929b3b679fddfb78bb58ebbccc5c0c4a9eb37d8 GIT binary patch literal 22748 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 /dev/null 2>&1; then \ + echo "Mono not installed! - go " \ + "to http://www.mono-project.com/Main_Page" && exit 1; \ + fi + +endif # Linux + +endif # not 'clean' diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/makefile.java.conf b/feeds/luci/libs/luci-lib-nixio/axTLS/config/makefile.java.conf new file mode 100644 index 0000000..9b22462 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/makefile.java.conf @@ -0,0 +1,58 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +ifneq ($(MAKECMDGOALS), clean) + +ifdef CONFIG_PLATFORM_CYGWIN +CFLAGS += -I"$(CONFIG_JAVA_HOME)/include" +CFLAGS += -I"$(CONFIG_JAVA_HOME)/include/win32" +JAVA_BIN:=$(CONFIG_JAVA_HOME)/bin +else + +ifdef CONFIG_PLATFORM_WIN32 +CFLAGS += /I"$(shell cygpath -w $(CONFIG_JAVA_HOME)/include)" +CFLAGS += /I"$(shell cygpath -w $(CONFIG_JAVA_HOME)/include/win32)" +JAVA_BIN:=$(shell cygpath -u $(CONFIG_JAVA_HOME)/bin) +else # Linux +CFLAGS += -I$(CONFIG_JAVA_HOME)/include + +ifdef CONFIG_PLATFORM_SOLARIS +CFLAGS += -I$(CONFIG_JAVA_HOME)/include/solaris +else +CFLAGS += -I$(CONFIG_JAVA_HOME)/include/linux +endif + +JAVA_BIN:=$(CONFIG_JAVA_HOME)/bin +endif +endif + +PATH:=$(JAVA_BIN):$(PATH) + +endif # not 'clean' diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/makefile.post b/feeds/luci/libs/luci-lib-nixio/axTLS/config/makefile.post new file mode 100644 index 0000000..033981c --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/makefile.post @@ -0,0 +1,19 @@ + +ifneq ($(MAKECMDGOALS), clean) +ifndef CONFIG_PLATFORM_WIN32 +ifndef CONFIG_PLATFORM_SOLARIS +# do dependencies +-include .depend +all : .depend +.depend: $(wildcard *.c) + @$(CC) $(CFLAGS) -MM $^ > $@ +endif # 'not' solaris +endif # 'not' win32 + +ifdef CONFIG_PLATFORM_WIN32 +OBJ:=$(OBJ:.o=.obj) +%.obj : %.c + $(CC) $(CFLAGS) $< +endif # win32 + +endif # end of 'not' clean diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/Kconfig-language.txt b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/Kconfig-language.txt new file mode 100644 index 0000000..493749b --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/Kconfig-language.txt @@ -0,0 +1,255 @@ +Introduction +------------ + +The configuration database is collection of configuration options +organized in a tree structure: + + +- Code maturity level options + | +- Prompt for development and/or incomplete code/drivers + +- General setup + | +- Networking support + | +- System V IPC + | +- BSD Process Accounting + | +- Sysctl support + +- Loadable module support + | +- Enable loadable module support + | +- Set version information on all module symbols + | +- Kernel module loader + +- ... + +Every entry has its own dependencies. These dependencies are used +to determine the visible of an entry. Any child entry is only +visible if its parent entry is also visible. + +Menu entries +------------ + +Most entries define a config option, all other entries help to organize +them. A single configuration option is defined like this: + +config MODVERSIONS + bool "Set version information on all module symbols" + depends MODULES + help + Usually, modules have to be recompiled whenever you switch to a new + kernel. ... + +Every line starts with a key word and can be followed by multiple +arguments. "config" starts a new config entry. The following lines +define attributes for this config option. Attributes can be the type of +the config option, input prompt, dependencies, help text and default +values. A config option can be defined multiple times with the same +name, but every definition can have only a single input prompt and the +type must not conflict. + +Menu attributes +--------------- + +A menu entry can have a number of attributes. Not all of them are +applicable everywhere (see syntax). + +- type definition: "bool"/"tristate"/"string"/"hex"/"integer" + Every config option must have a type. There are only two basic types: + tristate and string, the other types base on these two. The type + definition optionally accepts an input prompt, so these two examples + are equivalent: + + bool "Networking support" + and + bool + prompt "Networking support" + +- input prompt: "prompt" ["if" ] + Every menu entry can have at most one prompt, which is used to display + to the user. Optionally dependencies only for this prompt can be added + with "if". + +- default value: "default" ["if" ] + A config option can have any number of default values. If multiple + default values are visible, only the first defined one is active. + Default values are not limited to the menu entry, where they are + defined, this means the default can be defined somewhere else or be + overriden by an earlier definition. + The default value is only assigned to the config symbol if no other + value was set by the user (via the input prompt above). If an input + prompt is visible the default value is presented to the user and can + be overridden by him. + Optionally dependencies only for this default value can be added with + "if". + +- dependencies: "depends on"/"requires" + This defines a dependency for this menu entry. If multiple + dependencies are defined they are connected with '&&'. Dependencies + are applied to all other options within this menu entry (which also + accept "if" expression), so these two examples are equivalent: + + bool "foo" if BAR + default y if BAR + and + depends on BAR + bool "foo" + default y + +- help text: "help" + This defines a help text. The end of the help text is determined by + the level indentation, this means it ends at the first line which has + a smaller indentation than the first line of the help text. + + +Menu dependencies +----------------- + +Dependencies define the visibility of a menu entry and can also reduce +the input range of tristate symbols. The tristate logic used in the +expressions uses one more state than normal boolean logic to express the +module state. Dependency expressions have the following syntax: + + ::= (1) + '=' (2) + '!=' (3) + '(' ')' (4) + '!' (5) + '||' (6) + '&&' (7) + +Expressions are listed in decreasing order of precedence. + +(1) Convert the symbol into an expression. Boolean and tristate symbols + are simply converted into the respective expression values. All + other symbol types result in 'n'. +(2) If the values of both symbols are equal, it returns 'y', + otherwise 'n'. +(3) If the values of both symbols are equal, it returns 'n', + otherwise 'y'. +(4) Returns the value of the expression. Used to override precedence. +(5) Returns the result of (2-/expr/). +(6) Returns the result of min(/expr/, /expr/). +(7) Returns the result of max(/expr/, /expr/). + +An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2 +respectively for calculations). A menu entry becomes visible when it's +expression evaluates to 'm' or 'y'. + +There are two type of symbols: constant and nonconstant symbols. +Nonconstant symbols are the most common ones and are defined with the +'config' statement. Nonconstant symbols consist entirely of alphanumeric +characters or underscores. +Constant symbols are only part of expressions. Constant symbols are +always surrounded by single or double quotes. Within the quote any +other character is allowed and the quotes can be escaped using '\'. + +Menu structure +-------------- + +The position of a menu entry in the tree is determined in two ways. First +it can be specified explicitely: + +menu "Network device support" + depends NET + +config NETDEVICES + ... + +endmenu + +All entries within the "menu" ... "endmenu" block become a submenu of +"Network device support". All subentries inherit the dependencies from +the menu entry, e.g. this means the dependency "NET" is added to the +dependency list of the config option NETDEVICES. + +The other way to generate the menu structure is done by analyzing the +dependencies. If a menu entry somehow depends on the previous entry, it +can be made a submenu of it. First the the previous (parent) symbol must +be part of the dependency list and then one of these two condititions +must be true: +- the child entry must become invisible, if the parent is set to 'n' +- the child entry must only be visible, if the parent is visible + +config MODULES + bool "Enable loadable module support" + +config MODVERSIONS + bool "Set version information on all module symbols" + depends MODULES + +comment "module support disabled" + depends !MODULES + +MODVERSIONS directly depends on MODULES, this means it's only visible if +MODULES is different from 'n'. The comment on the other hand is always +visible when MODULES it's visible (the (empty) dependency of MODULES is +also part of the comment dependencies). + + +Kconfig syntax +-------------- + +The configuration file describes a series of menu entries, where every +line starts with a keyword (except help texts). The following keywords +end a menu entry: +- config +- choice/endchoice +- comment +- menu/endmenu +- if/endif +- source +The first four also start the definition of a menu entry. + +config: + + "config" + + +This defines a config symbol and accepts any of above +attributes as options. + +choices: + + "choice" + + + "endchoice" + +This defines a choice group and accepts any of above attributes as +options. A choice can only be of type bool or tristate, while a boolean +choice only allows a single config entry to be selected, a tristate +choice also allows any number of config entries to be set to 'm'. This +can be used if multiple drivers for a single hardware exists and only a +single driver can be compiled/loaded into the kernel, but all drivers +can be compiled as modules. +A choice accepts another option "optional", which allows to set the +choice to 'n' and no entry needs to be selected. + +comment: + + "comment" + + +This defines a comment which is displayed to the user during the +configuration process and is also echoed to the output files. The only +possible options are dependencies. + +menu: + + "menu" + + + "endmenu" + +This defines a menu block, see "Menu structure" above for more +information. The only possible options are dependencies. + +if: + + "if" + + "endif" + +This defines an if block. The dependency expression is appended +to all enclosed menu entries. + +source: + + "source" + +This reads the specified configuration file. This file is always parsed. diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/Makefile new file mode 100644 index 0000000..7399501 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/Makefile @@ -0,0 +1,121 @@ +# Makefile for axTLS +# +# Copyright (C) 2002 Erik Andersen + +top_srcdir=../.. +top_builddir=../.. +srcdir=$(top_srcdir)/scripts/config +include $(top_srcdir)/Rules.mak + +all: ncurses conf mconf + +ifeq ($(shell uname),SunOS) +LIBS = -lcurses +else +LIBS = -lncurses +endif +ifeq (/usr/include/ncurses/ncurses.h, $(wildcard /usr/include/ncurses/ncurses.h)) + HOSTNCURSES += -I/usr/include/ncurses -DCURSES_LOC="" +else +ifeq (/usr/include/ncurses/curses.h, $(wildcard /usr/include/ncurses/curses.h)) + HOSTNCURSES += -I/usr/include/ncurses -DCURSES_LOC="" +else +ifeq (/usr/local/include/ncurses/ncurses.h, $(wildcard /usr/local/include/ncurses/ncurses.h)) + HOSTCFLAGS += -I/usr/local/include/ncurses -DCURSES_LOC="" +else +ifeq (/usr/local/include/ncurses/curses.h, $(wildcard /usr/local/include/ncurses/curses.h)) + HOSTCFLAGS += -I/usr/local/include/ncurses -DCURSES_LOC="" +else +ifeq (/usr/include/ncurses.h, $(wildcard /usr/include/ncurses.h)) + HOSTNCURSES += -DCURSES_LOC="" +else + HOSTNCURSES += -DCURSES_LOC="" +endif +endif +endif +endif +endif + +CONF_SRC = conf.c +MCONF_SRC = mconf.c +LXD_SRC = lxdialog/checklist.c lxdialog/menubox.c lxdialog/textbox.c \ + lxdialog/yesno.c lxdialog/inputbox.c lxdialog/util.c \ + lxdialog/msgbox.c + +SHARED_SRC = zconf.tab.c +SHARED_DEPS := $(srcdir)/lkc.h $(srcdir)/lkc_proto.h \ + lkc_defs.h $(srcdir)/expr.h zconf.tab.h +CONF_OBJS = $(patsubst %.c,%.o, $(CONF_SRC)) +MCONF_OBJS = $(patsubst %.c,%.o, $(MCONF_SRC) $(LXD_SRC)) +SHARED_OBJS = $(patsubst %.c,%.o, $(SHARED_SRC)) + +conf: $(CONF_OBJS) $(SHARED_OBJS) + $(HOSTCC) $(NATIVE_LDFLAGS) $^ -o $@ + +mconf: $(MCONF_OBJS) $(SHARED_OBJS) + $(HOSTCC) $(NATIVE_LDFLAGS) $^ -o $@ $(LIBS) + +$(CONF_OBJS): %.o : $(srcdir)/%.c $(SHARED_DEPS) + $(HOSTCC) $(HOSTCFLAGS) -I. -c $< -o $@ + +$(MCONF_OBJS): %.o : $(srcdir)/%.c $(SHARED_DEPS) + @[ -d $(@D) ] || mkdir -v $(@D) + $(HOSTCC) $(HOSTCFLAGS) $(HOSTNCURSES) -I. -c $< -o $@ + +lkc_defs.h: $(srcdir)/lkc_proto.h + @sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/' + +### +# The following requires flex/bison +# By default we use the _shipped versions, uncomment the +# following line if you are modifying the flex/bison src. +#LKC_GENPARSER := 1 + +ifdef LKC_GENPARSER + +%.tab.c %.tab.h: $(srcdir)/%.y + bison -t -d -v -b $* -p $(notdir $*) $< + +lex.%.c: $(srcdir)/%.l + flex -P$(notdir $*) -o$@ $< +else + +lex.zconf.o: lex.zconf.c $(SHARED_DEPS) + $(HOSTCC) $(HOSTCFLAGS) -I$(srcdir) -c $< -o $@ + +lex.zconf.c: $(srcdir)/lex.zconf.c_shipped + cp $< $@ + +zconf.tab.c: $(srcdir)/zconf.tab.c_shipped + cp $< $@ + +zconf.tab.h: $(srcdir)/zconf.tab.h_shipped + cp $< $@ +endif + +zconf.tab.o: zconf.tab.c lex.zconf.c $(srcdir)/confdata.c $(srcdir)/expr.c \ + $(srcdir)/symbol.c $(srcdir)/menu.c $(SHARED_DEPS) + $(HOSTCC) $(HOSTCFLAGS) -I$(srcdir) -I. -c $< -o $@ + +.PHONY: ncurses + +ncurses: + @echo "main() {}" > lxtemp.c + @if $(HOSTCC) lxtemp.c $(LIBS) ; then \ + rm -f lxtemp.c a.out; \ + else \ + rm -f lxtemp.c; \ + echo -e "\007" ;\ + echo ">> Unable to find the Ncurses libraries." ;\ + echo ">>" ;\ + echo ">> You must have Ncurses installed in order" ;\ + echo ">> to use 'make menuconfig'" ;\ + echo ;\ + exit 1 ;\ + fi + +clean: + rm -f *.o *~ ../../*~ core *.exe $(TARGETS) $(MCONF_OBJS) $(CONF_OBJS) + rm -f conf conf.exe mconf mconf.exe zconf.tab.c zconf.tab.h lex.zconf.c lkc_defs.h + rm -f ../..config.h + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/conf.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/conf.c new file mode 100644 index 0000000..1524467 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/conf.c @@ -0,0 +1,583 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +static void conf(struct menu *menu); +static void check_conf(struct menu *menu); + +enum { + ask_all, + ask_new, + ask_silent, + set_default, + set_yes, + set_mod, + set_no, + set_random +} input_mode = ask_all; +char *defconfig_file; + +static int indent = 1; +static int valid_stdin = 1; +static int conf_cnt; +static char line[128]; +static struct menu *rootEntry; + +static char nohelp_text[] = "Sorry, no help available for this option yet.\n"; + +static void strip(char *str) +{ + char *p = str; + int l; + + while ((isspace(*p))) + p++; + l = strlen(p); + if (p != str) + memmove(str, p, l + 1); + if (!l) + return; + p = str + l - 1; + while ((isspace(*p))) + *p-- = 0; +} + +static void check_stdin(void) +{ + if (!valid_stdin && input_mode == ask_silent) { + printf("aborted!\n\n"); + printf("Console input/output is redirected. "); + printf("Run 'make oldconfig' to update configuration.\n\n"); + exit(1); + } +} + +static void conf_askvalue(struct symbol *sym, const char *def) +{ + enum symbol_type type = sym_get_type(sym); + tristate val; + + if (!sym_has_value(sym)) + printf("(NEW) "); + + line[0] = '\n'; + line[1] = 0; + + if (!sym_is_changable(sym)) { + printf("%s\n", def); + line[0] = '\n'; + line[1] = 0; + return; + } + + switch (input_mode) { + case ask_new: + case ask_silent: + if (sym_has_value(sym)) { + printf("%s\n", def); + return; + } + check_stdin(); + case ask_all: + fflush(stdout); + fgets(line, 128, stdin); + return; + case set_default: + printf("%s\n", def); + return; + default: + break; + } + + switch (type) { + case S_INT: + case S_HEX: + case S_STRING: + printf("%s\n", def); + return; + default: + ; + } + switch (input_mode) { + case set_yes: + if (sym_tristate_within_range(sym, yes)) { + line[0] = 'y'; + line[1] = '\n'; + line[2] = 0; + break; + } + case set_mod: + if (type == S_TRISTATE) { + if (sym_tristate_within_range(sym, mod)) { + line[0] = 'm'; + line[1] = '\n'; + line[2] = 0; + break; + } + } else { + if (sym_tristate_within_range(sym, yes)) { + line[0] = 'y'; + line[1] = '\n'; + line[2] = 0; + break; + } + } + case set_no: + if (sym_tristate_within_range(sym, no)) { + line[0] = 'n'; + line[1] = '\n'; + line[2] = 0; + break; + } + case set_random: + do { + val = (tristate)(random() % 3); + } while (!sym_tristate_within_range(sym, val)); + switch (val) { + case no: line[0] = 'n'; break; + case mod: line[0] = 'm'; break; + case yes: line[0] = 'y'; break; + } + line[1] = '\n'; + line[2] = 0; + break; + default: + break; + } + printf("%s", line); +} + +int conf_string(struct menu *menu) +{ + struct symbol *sym = menu->sym; + const char *def, *help; + + while (1) { + printf("%*s%s ", indent - 1, "", menu->prompt->text); + printf("(%s) ", sym->name); + def = sym_get_string_value(sym); + if (sym_get_string_value(sym)) + printf("[%s] ", def); + conf_askvalue(sym, def); + switch (line[0]) { + case '\n': + break; + case '?': + /* print help */ + if (line[1] == '\n') { + help = nohelp_text; + if (menu->sym->help) + help = menu->sym->help; + printf("\n%s\n", menu->sym->help); + def = NULL; + break; + } + default: + line[strlen(line)-1] = 0; + def = line; + } + if (def && sym_set_string_value(sym, def)) + return 0; + } +} + +static int conf_sym(struct menu *menu) +{ + struct symbol *sym = menu->sym; + int type; + tristate oldval, newval; + const char *help; + + while (1) { + printf("%*s%s ", indent - 1, "", menu->prompt->text); + if (sym->name) + printf("(%s) ", sym->name); + type = sym_get_type(sym); + putchar('['); + oldval = sym_get_tristate_value(sym); + switch (oldval) { + case no: + putchar('N'); + break; + case mod: + putchar('M'); + break; + case yes: + putchar('Y'); + break; + } + if (oldval != no && sym_tristate_within_range(sym, no)) + printf("/n"); + if (oldval != mod && sym_tristate_within_range(sym, mod)) + printf("/m"); + if (oldval != yes && sym_tristate_within_range(sym, yes)) + printf("/y"); + if (sym->help) + printf("/?"); + printf("] "); + conf_askvalue(sym, sym_get_string_value(sym)); + strip(line); + + switch (line[0]) { + case 'n': + case 'N': + newval = no; + if (!line[1] || !strcmp(&line[1], "o")) + break; + continue; + case 'm': + case 'M': + newval = mod; + if (!line[1]) + break; + continue; + case 'y': + case 'Y': + newval = yes; + if (!line[1] || !strcmp(&line[1], "es")) + break; + continue; + case 0: + newval = oldval; + break; + case '?': + goto help; + default: + continue; + } + if (sym_set_tristate_value(sym, newval)) + return 0; +help: + help = nohelp_text; + if (sym->help) + help = sym->help; + printf("\n%s\n", help); + } +} + +static int conf_choice(struct menu *menu) +{ + struct symbol *sym, *def_sym; + struct menu *child; + int type; + bool is_new; + + sym = menu->sym; + type = sym_get_type(sym); + is_new = !sym_has_value(sym); + if (sym_is_changable(sym)) { + conf_sym(menu); + sym_calc_value(sym); + switch (sym_get_tristate_value(sym)) { + case no: + return 1; + case mod: + return 0; + case yes: + break; + } + } else { + switch (sym_get_tristate_value(sym)) { + case no: + return 1; + case mod: + printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); + return 0; + case yes: + break; + } + } + + while (1) { + int cnt, def; + + printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); + def_sym = sym_get_choice_value(sym); + cnt = def = 0; + line[0] = '0'; + line[1] = 0; + for (child = menu->list; child; child = child->next) { + if (!menu_is_visible(child)) + continue; + if (!child->sym) { + printf("%*c %s\n", indent, '*', menu_get_prompt(child)); + continue; + } + cnt++; + if (child->sym == def_sym) { + def = cnt; + printf("%*c", indent, '>'); + } else + printf("%*c", indent, ' '); + printf(" %d. %s", cnt, menu_get_prompt(child)); + if (child->sym->name) + printf(" (%s)", child->sym->name); + if (!sym_has_value(child->sym)) + printf(" (NEW)"); + printf("\n"); + } + printf("%*schoice", indent - 1, ""); + if (cnt == 1) { + printf("[1]: 1\n"); + goto conf_childs; + } + printf("[1-%d", cnt); + if (sym->help) + printf("?"); + printf("]: "); + switch (input_mode) { + case ask_new: + case ask_silent: + if (!is_new) { + cnt = def; + printf("%d\n", cnt); + break; + } + check_stdin(); + case ask_all: + fflush(stdout); + fgets(line, 128, stdin); + strip(line); + if (line[0] == '?') { + printf("\n%s\n", menu->sym->help ? + menu->sym->help : nohelp_text); + continue; + } + if (!line[0]) + cnt = def; + else if (isdigit(line[0])) + cnt = atoi(line); + else + continue; + break; + case set_random: + def = (random() % cnt) + 1; + case set_default: + case set_yes: + case set_mod: + case set_no: + cnt = def; + printf("%d\n", cnt); + break; + } + + conf_childs: + for (child = menu->list; child; child = child->next) { + if (!child->sym || !menu_is_visible(child)) + continue; + if (!--cnt) + break; + } + if (!child) + continue; + if (line[strlen(line) - 1] == '?') { + printf("\n%s\n", child->sym->help ? + child->sym->help : nohelp_text); + continue; + } + sym_set_choice_value(sym, child->sym); + if (child->list) { + indent += 2; + conf(child->list); + indent -= 2; + } + return 1; + } +} + +static void conf(struct menu *menu) +{ + struct symbol *sym; + struct property *prop; + struct menu *child; + + if (!menu_is_visible(menu)) + return; + + sym = menu->sym; + prop = menu->prompt; + if (prop) { + const char *prompt; + + switch (prop->type) { + case P_MENU: + if (input_mode == ask_silent && rootEntry != menu) { + check_conf(menu); + return; + } + case P_COMMENT: + prompt = menu_get_prompt(menu); + if (prompt) + printf("%*c\n%*c %s\n%*c\n", + indent, '*', + indent, '*', prompt, + indent, '*'); + default: + ; + } + } + + if (!sym) + goto conf_childs; + + if (sym_is_choice(sym)) { + conf_choice(menu); + if (sym->curr.tri != mod) + return; + goto conf_childs; + } + + switch (sym->type) { + case S_INT: + case S_HEX: + case S_STRING: + conf_string(menu); + break; + default: + conf_sym(menu); + break; + } + +conf_childs: + if (sym) + indent += 2; + for (child = menu->list; child; child = child->next) + conf(child); + if (sym) + indent -= 2; +} + +static void check_conf(struct menu *menu) +{ + struct symbol *sym; + struct menu *child; + + if (!menu_is_visible(menu)) + return; + + sym = menu->sym; + if (sym) { + if (sym_is_changable(sym) && !sym_has_value(sym)) { + if (!conf_cnt++) + printf("*\n* Restart config...\n*\n"); + rootEntry = menu_get_parent_menu(menu); + conf(rootEntry); + } + if (sym_is_choice(sym) && sym_get_tristate_value(sym) != mod) + return; + } + + for (child = menu->list; child; child = child->next) + check_conf(child); +} + +int main(int ac, char **av) +{ + int i = 1; + const char *name; + struct stat tmpstat; + + if (ac > i && av[i][0] == '-') { + switch (av[i++][1]) { + case 'o': + input_mode = ask_new; + break; + case 's': + input_mode = ask_silent; + valid_stdin = isatty(0) && isatty(1) && isatty(2); + break; + case 'd': + input_mode = set_default; + break; + case 'D': + input_mode = set_default; + defconfig_file = av[i++]; + if (!defconfig_file) { + printf("%s: No default config file specified\n", + av[0]); + exit(1); + } + break; + case 'n': + input_mode = set_no; + break; + case 'm': + input_mode = set_mod; + break; + case 'y': + input_mode = set_yes; + break; + case 'r': + input_mode = set_random; + srandom(time(NULL)); + break; + case 'h': + case '?': + printf("%s [-o|-s] config\n", av[0]); + exit(0); + } + } + name = av[i]; + if (!name) { + printf("%s: configuration file missing\n", av[0]); + } + conf_parse(name); + //zconfdump(stdout); + switch (input_mode) { + case set_default: + if (!defconfig_file) + defconfig_file = conf_get_default_confname(); + if (conf_read(defconfig_file)) { + printf("***\n" + "*** Can't find default configuration \"%s\"!\n" + "***\n", defconfig_file); + exit(1); + } + break; + case ask_silent: + if (stat(".config", &tmpstat)) { + printf("***\n" + "*** You have not yet configured axTLS!\n" + "***\n" + "*** Please run some configurator (e.g. \"make oldconfig\" or\n" + "*** \"make menuconfig\" or \"make config\").\n" + "***\n"); + exit(1); + } + case ask_all: + case ask_new: + conf_read(NULL); + break; + default: + break; + } + + if (input_mode != ask_silent) { + rootEntry = &rootmenu; + conf(&rootmenu); + if (input_mode == ask_all) { + input_mode = ask_silent; + valid_stdin = 1; + } + } + do { + conf_cnt = 0; + check_conf(&rootmenu); + } while (conf_cnt); + if (conf_write(NULL)) { + fprintf(stderr, "\n*** Error during writing of the axTLS configuration.\n\n"); + return 1; + } + return 0; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/confdata.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/confdata.c new file mode 100644 index 0000000..a59e245 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/confdata.c @@ -0,0 +1,458 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +const char conf_def_filename[] = "config/.config"; + +const char conf_defname[] = "config/defconfig"; + +const char *conf_confnames[] = { + "config/.config", + conf_defname, + NULL, +}; + +static char *conf_expand_value(const char *in) +{ + struct symbol *sym; + const char *src; + static char res_value[SYMBOL_MAXLENGTH]; + char *dst, name[SYMBOL_MAXLENGTH]; + + res_value[0] = 0; + dst = name; + while ((src = strchr(in, '$'))) { + strncat(res_value, in, src - in); + src++; + dst = name; + while (isalnum(*src) || *src == '_') + *dst++ = *src++; + *dst = 0; + sym = sym_lookup(name, 0); + sym_calc_value(sym); + strcat(res_value, sym_get_string_value(sym)); + in = src; + } + strcat(res_value, in); + + return res_value; +} + +char *conf_get_default_confname(void) +{ + struct stat buf; + static char fullname[PATH_MAX+1]; + char *env, *name; + + name = conf_expand_value(conf_defname); + env = getenv(SRCTREE); + if (env) { + sprintf(fullname, "%s/%s", env, name); + if (!stat(fullname, &buf)) + return fullname; + } + return name; +} + +int conf_read(const char *name) +{ + FILE *in = NULL; + char line[1024]; + char *p, *p2; + int lineno = 0; + struct symbol *sym; + struct property *prop; + struct expr *e; + int i; + + if (name) { + in = zconf_fopen(name); + } else { + const char **names = conf_confnames; + while ((name = *names++)) { + name = conf_expand_value(name); + in = zconf_fopen(name); + if (in) { + printf("#\n" + "# using defaults found in %s\n" + "#\n", name); + break; + } + } + } + + if (!in) + return 1; + + for_all_symbols(i, sym) { + sym->flags |= SYMBOL_NEW | SYMBOL_CHANGED; + sym->flags &= ~SYMBOL_VALID; + switch (sym->type) { + case S_INT: + case S_HEX: + case S_STRING: + if (sym->user.val) + free(sym->user.val); + default: + sym->user.val = NULL; + sym->user.tri = no; + } + } + + while (fgets(line, sizeof(line), in)) { + lineno++; + sym = NULL; + switch (line[0]) { + case '#': + if (line[1]!=' ') + continue; + p = strchr(line + 2, ' '); + if (!p) + continue; + *p++ = 0; + if (strncmp(p, "is not set", 10)) + continue; + sym = sym_find(line + 2); + if (!sym) { + fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line + 2); + break; + } + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + sym->user.tri = no; + sym->flags &= ~SYMBOL_NEW; + break; + default: + ; + } + break; + + case 'A' ... 'Z': + p = strchr(line, '='); + if (!p) + continue; + *p++ = 0; + p2 = strchr(p, '\n'); + if (p2) + *p2 = 0; + sym = sym_find(line); + if (!sym) { + fprintf(stderr, "%s:%d: trying to assign nonexistent symbol %s\n", name, lineno, line); + break; + } + switch (sym->type) { + case S_TRISTATE: + if (p[0] == 'm') { + sym->user.tri = mod; + sym->flags &= ~SYMBOL_NEW; + break; + } + case S_BOOLEAN: + if (p[0] == 'y') { + sym->user.tri = yes; + sym->flags &= ~SYMBOL_NEW; + break; + } + if (p[0] == 'n') { + sym->user.tri = no; + sym->flags &= ~SYMBOL_NEW; + break; + } + break; + case S_STRING: + if (*p++ != '"') + break; + for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) { + if (*p2 == '"') { + *p2 = 0; + break; + } + memmove(p2, p2 + 1, strlen(p2)); + } + if (!p2) { + fprintf(stderr, "%s:%d: invalid string found\n", name, lineno); + exit(1); + } + case S_INT: + case S_HEX: + if (sym_string_valid(sym, p)) { + sym->user.val = strdup(p); + sym->flags &= ~SYMBOL_NEW; + } else { + fprintf(stderr, "%s:%d: symbol value '%s' invalid for %s\n", name, lineno, p, sym->name); + exit(1); + } + break; + default: + ; + } + break; + case '\n': + break; + default: + continue; + } + if (sym && sym_is_choice_value(sym)) { + struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); + switch (sym->user.tri) { + case no: + break; + case mod: + if (cs->user.tri == yes) + /* warn? */; + break; + case yes: + if (cs->user.tri != no) + /* warn? */; + cs->user.val = sym; + break; + } + cs->user.tri = E_OR(cs->user.tri, sym->user.tri); + cs->flags &= ~SYMBOL_NEW; + } + } + fclose(in); + + if (modules_sym) + sym_calc_value(modules_sym); + for_all_symbols(i, sym) { + sym_calc_value(sym); + if (sym_has_value(sym) && !sym_is_choice_value(sym)) { + if (sym->visible == no) + sym->flags |= SYMBOL_NEW; + switch (sym->type) { + case S_STRING: + case S_INT: + case S_HEX: + if (!sym_string_within_range(sym, sym->user.val)) + sym->flags |= SYMBOL_NEW; + default: + break; + } + } + if (!sym_is_choice(sym)) + continue; + prop = sym_get_choice_prop(sym); + for (e = prop->expr; e; e = e->left.expr) + if (e->right.sym->visible != no) + sym->flags |= e->right.sym->flags & SYMBOL_NEW; + } + + sym_change_count = 1; + + return 0; +} + +struct menu *next_menu(struct menu *menu) +{ + if (menu->list) return menu->list; + do { + if (menu->next) { + menu = menu->next; + break; + } + } while ((menu = menu->parent)); + + return menu; +} + +#define SYMBOL_FORCEWRITE (1<<31) + +int conf_write(const char *name) +{ + FILE *out, *out_h; + struct symbol *sym; + struct menu *menu; + const char *basename; + char dirname[128], tmpname[128], newname[128]; + int type, l; + const char *str; + + dirname[0] = 0; + if (name && name[0]) { + struct stat st; + char *slash; + + if (!stat(name, &st) && S_ISDIR(st.st_mode)) { + strcpy(dirname, name); + strcat(dirname, "/"); + basename = conf_def_filename; + } else if ((slash = strrchr(name, '/'))) { + int size = slash - name + 1; + memcpy(dirname, name, size); + dirname[size] = 0; + if (slash[1]) + basename = slash + 1; + else + basename = conf_def_filename; + } else + basename = name; + } else + basename = conf_def_filename; + + sprintf(newname, "config/%s.tmpconfig.%d", dirname, (int)getpid()); + out = fopen(newname, "w"); + if (!out) + return 1; + out_h = NULL; + if (!name) { + out_h = fopen("config/.tmpconfig.h", "w"); + if (!out_h) + return 1; + } + fprintf(out, "#\n" + "# Automatically generated make config: don't edit\n" + "#\n"); + if (out_h) { + fprintf(out_h, "/*\n" + " * Automatically generated header file: don't edit\n" + " */\n\n"); +#if 0 + "/* Version Number */\n" + "#define BB_VER \"%s\"\n" + "#define BB_BT \"%s\"\n", + getenv("VERSION"), + getenv("BUILDTIME")); + if (getenv("EXTRA_VERSION")) + fprintf(out_h, "#define BB_EXTRA_VERSION \"%s\"\n", + getenv("EXTRA_VERSION")); + fprintf(out_h, "\n"); +#endif + } + + if (!sym_change_count) + sym_clear_all_valid(); + + /* Force write of all non-duplicate symbols. */ + + /* Write out everything by default. */ + for(menu = rootmenu.list; menu; menu = next_menu(menu)) + if (menu->sym) menu->sym->flags |= SYMBOL_FORCEWRITE; + + menu = rootmenu.list; + while (menu) { + sym = menu->sym; + if (!sym) { + if (!menu_is_visible(menu)) + goto next; + str = menu_get_prompt(menu); + fprintf(out, "\n" + "#\n" + "# %s\n" + "#\n", str); + if (out_h) + fprintf(out_h, "\n" + "/*\n" + " * %s\n" + " */\n", str); + } else if (!(sym->flags & SYMBOL_CHOICE)) { + sym_calc_value(sym); + if (!(sym->flags & SYMBOL_FORCEWRITE)) + goto next; + + sym->flags &= ~SYMBOL_FORCEWRITE; + type = sym->type; + if (type == S_TRISTATE) { + sym_calc_value(modules_sym); + if (modules_sym->curr.tri == no) + type = S_BOOLEAN; + } + switch (type) { + case S_BOOLEAN: + case S_TRISTATE: + switch (sym_get_tristate_value(sym)) { + case no: + fprintf(out, "# %s is not set\n", sym->name); + if (out_h) + fprintf(out_h, "#undef %s\n", sym->name); + break; + case mod: +#if 0 + fprintf(out, "%s=m\n", sym->name); + if (out_h) + fprintf(out_h, "#define %s_MODULE 1\n", sym->name); +#endif + break; + case yes: + fprintf(out, "%s=y\n", sym->name); + if (out_h) + fprintf(out_h, "#define %s 1\n", sym->name); + break; + } + break; + case S_STRING: + // fix me + str = sym_get_string_value(sym); + fprintf(out, "%s=\"", sym->name); + if (out_h) + fprintf(out_h, "#define %s \"", sym->name); + do { + l = strcspn(str, "\"\\"); + if (l) { + fwrite(str, l, 1, out); + if (out_h) + fwrite(str, l, 1, out_h); + } + str += l; + while (*str == '\\' || *str == '"') { + fprintf(out, "\\%c", *str); + if (out_h) + fprintf(out_h, "\\%c", *str); + str++; + } + } while (*str); + fputs("\"\n", out); + if (out_h) + fputs("\"\n", out_h); + break; + case S_HEX: + str = sym_get_string_value(sym); + if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) { + fprintf(out, "%s=%s\n", sym->name, *str ? str : "0"); + if (out_h) + fprintf(out_h, "#define %s 0x%s\n", sym->name, str); + break; + } + case S_INT: + str = sym_get_string_value(sym); + fprintf(out, "%s=%s\n", sym->name, *str ? str : "0"); + if (out_h) + fprintf(out_h, "#define %s %s\n", sym->name, str); + break; + } + } +next: + menu = next_menu(menu); + } + fclose(out); + if (out_h) { + fclose(out_h); + rename("config/.tmpconfig.h", "config/config.h"); + file_write_dep(NULL); + } + if (!name || basename != conf_def_filename) { + if (!name) + name = conf_def_filename; + sprintf(tmpname, "%s.old", name); + rename(name, tmpname); + } + sprintf(tmpname, "%s%s", dirname, basename); + if (rename(newname, tmpname)) + return 1; + + sym_change_count = 0; + + return 0; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/expr.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/expr.c new file mode 100644 index 0000000..30e4f9d --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/expr.c @@ -0,0 +1,1099 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +#define DEBUG_EXPR 0 + +struct expr *expr_alloc_symbol(struct symbol *sym) +{ + struct expr *e = malloc(sizeof(*e)); + memset(e, 0, sizeof(*e)); + e->type = E_SYMBOL; + e->left.sym = sym; + return e; +} + +struct expr *expr_alloc_one(enum expr_type type, struct expr *ce) +{ + struct expr *e = malloc(sizeof(*e)); + memset(e, 0, sizeof(*e)); + e->type = type; + e->left.expr = ce; + return e; +} + +struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) +{ + struct expr *e = malloc(sizeof(*e)); + memset(e, 0, sizeof(*e)); + e->type = type; + e->left.expr = e1; + e->right.expr = e2; + return e; +} + +struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2) +{ + struct expr *e = malloc(sizeof(*e)); + memset(e, 0, sizeof(*e)); + e->type = type; + e->left.sym = s1; + e->right.sym = s2; + return e; +} + +struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) +{ + if (!e1) + return e2; + return e2 ? expr_alloc_two(E_AND, e1, e2) : e1; +} + +struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) +{ + if (!e1) + return e2; + return e2 ? expr_alloc_two(E_OR, e1, e2) : e1; +} + +struct expr *expr_copy(struct expr *org) +{ + struct expr *e; + + if (!org) + return NULL; + + e = malloc(sizeof(*org)); + memcpy(e, org, sizeof(*org)); + switch (org->type) { + case E_SYMBOL: + e->left = org->left; + break; + case E_NOT: + e->left.expr = expr_copy(org->left.expr); + break; + case E_EQUAL: + case E_UNEQUAL: + e->left.sym = org->left.sym; + e->right.sym = org->right.sym; + break; + case E_AND: + case E_OR: + case E_CHOICE: + e->left.expr = expr_copy(org->left.expr); + e->right.expr = expr_copy(org->right.expr); + break; + default: + printf("can't copy type %d\n", e->type); + free(e); + e = NULL; + break; + } + + return e; +} + +void expr_free(struct expr *e) +{ + if (!e) + return; + + switch (e->type) { + case E_SYMBOL: + break; + case E_NOT: + expr_free(e->left.expr); + return; + case E_EQUAL: + case E_UNEQUAL: + break; + case E_OR: + case E_AND: + expr_free(e->left.expr); + expr_free(e->right.expr); + break; + default: + printf("how to free type %d?\n", e->type); + break; + } + free(e); +} + +static int trans_count; + +#define e1 (*ep1) +#define e2 (*ep2) + +static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2) +{ + if (e1->type == type) { + __expr_eliminate_eq(type, &e1->left.expr, &e2); + __expr_eliminate_eq(type, &e1->right.expr, &e2); + return; + } + if (e2->type == type) { + __expr_eliminate_eq(type, &e1, &e2->left.expr); + __expr_eliminate_eq(type, &e1, &e2->right.expr); + return; + } + if (e1->type == E_SYMBOL && e2->type == E_SYMBOL && + e1->left.sym == e2->left.sym && (e1->left.sym->flags & (SYMBOL_YES|SYMBOL_NO))) + return; + if (!expr_eq(e1, e2)) + return; + trans_count++; + expr_free(e1); expr_free(e2); + switch (type) { + case E_OR: + e1 = expr_alloc_symbol(&symbol_no); + e2 = expr_alloc_symbol(&symbol_no); + break; + case E_AND: + e1 = expr_alloc_symbol(&symbol_yes); + e2 = expr_alloc_symbol(&symbol_yes); + break; + default: + ; + } +} + +void expr_eliminate_eq(struct expr **ep1, struct expr **ep2) +{ + if (!e1 || !e2) + return; + switch (e1->type) { + case E_OR: + case E_AND: + __expr_eliminate_eq(e1->type, ep1, ep2); + default: + ; + } + if (e1->type != e2->type) switch (e2->type) { + case E_OR: + case E_AND: + __expr_eliminate_eq(e2->type, ep1, ep2); + default: + ; + } + e1 = expr_eliminate_yn(e1); + e2 = expr_eliminate_yn(e2); +} + +#undef e1 +#undef e2 + +int expr_eq(struct expr *e1, struct expr *e2) +{ + int res, old_count; + + if (e1->type != e2->type) + return 0; + switch (e1->type) { + case E_EQUAL: + case E_UNEQUAL: + return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym; + case E_SYMBOL: + return e1->left.sym == e2->left.sym; + case E_NOT: + return expr_eq(e1->left.expr, e2->left.expr); + case E_AND: + case E_OR: + e1 = expr_copy(e1); + e2 = expr_copy(e2); + old_count = trans_count; + expr_eliminate_eq(&e1, &e2); + res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL && + e1->left.sym == e2->left.sym); + expr_free(e1); + expr_free(e2); + trans_count = old_count; + return res; + case E_CHOICE: + case E_RANGE: + case E_NONE: + /* panic */; + } + + if (DEBUG_EXPR) { + expr_fprint(e1, stdout); + printf(" = "); + expr_fprint(e2, stdout); + printf(" ?\n"); + } + + return 0; +} + +struct expr *expr_eliminate_yn(struct expr *e) +{ + struct expr *tmp; + + if (e) switch (e->type) { + case E_AND: + e->left.expr = expr_eliminate_yn(e->left.expr); + e->right.expr = expr_eliminate_yn(e->right.expr); + if (e->left.expr->type == E_SYMBOL) { + if (e->left.expr->left.sym == &symbol_no) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + e->right.expr = NULL; + return e; + } else if (e->left.expr->left.sym == &symbol_yes) { + free(e->left.expr); + tmp = e->right.expr; + *e = *(e->right.expr); + free(tmp); + return e; + } + } + if (e->right.expr->type == E_SYMBOL) { + if (e->right.expr->left.sym == &symbol_no) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + e->right.expr = NULL; + return e; + } else if (e->right.expr->left.sym == &symbol_yes) { + free(e->right.expr); + tmp = e->left.expr; + *e = *(e->left.expr); + free(tmp); + return e; + } + } + break; + case E_OR: + e->left.expr = expr_eliminate_yn(e->left.expr); + e->right.expr = expr_eliminate_yn(e->right.expr); + if (e->left.expr->type == E_SYMBOL) { + if (e->left.expr->left.sym == &symbol_no) { + free(e->left.expr); + tmp = e->right.expr; + *e = *(e->right.expr); + free(tmp); + return e; + } else if (e->left.expr->left.sym == &symbol_yes) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + e->right.expr = NULL; + return e; + } + } + if (e->right.expr->type == E_SYMBOL) { + if (e->right.expr->left.sym == &symbol_no) { + free(e->right.expr); + tmp = e->left.expr; + *e = *(e->left.expr); + free(tmp); + return e; + } else if (e->right.expr->left.sym == &symbol_yes) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + e->right.expr = NULL; + return e; + } + } + break; + default: + ; + } + return e; +} + +/* + * bool FOO!=n => FOO + */ +struct expr *expr_trans_bool(struct expr *e) +{ + if (!e) + return NULL; + switch (e->type) { + case E_AND: + case E_OR: + case E_NOT: + e->left.expr = expr_trans_bool(e->left.expr); + e->right.expr = expr_trans_bool(e->right.expr); + break; + case E_UNEQUAL: + // FOO!=n -> FOO + if (e->left.sym->type == S_TRISTATE) { + if (e->right.sym == &symbol_no) { + e->type = E_SYMBOL; + e->right.sym = NULL; + } + } + break; + default: + ; + } + return e; +} + +/* + * e1 || e2 -> ? + */ +struct expr *expr_join_or(struct expr *e1, struct expr *e2) +{ + struct expr *tmp; + struct symbol *sym1, *sym2; + + if (expr_eq(e1, e2)) + return expr_copy(e1); + if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) + return NULL; + if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) + return NULL; + if (e1->type == E_NOT) { + tmp = e1->left.expr; + if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL) + return NULL; + sym1 = tmp->left.sym; + } else + sym1 = e1->left.sym; + if (e2->type == E_NOT) { + if (e2->left.expr->type != E_SYMBOL) + return NULL; + sym2 = e2->left.expr->left.sym; + } else + sym2 = e2->left.sym; + if (sym1 != sym2) + return NULL; + if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE) + return NULL; + if (sym1->type == S_TRISTATE) { + if (e1->type == E_EQUAL && e2->type == E_EQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || + (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) { + // (a='y') || (a='m') -> (a!='n') + return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_no); + } + if (e1->type == E_EQUAL && e2->type == E_EQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) { + // (a='y') || (a='n') -> (a!='m') + return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_mod); + } + if (e1->type == E_EQUAL && e2->type == E_EQUAL && + ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) { + // (a='m') || (a='n') -> (a!='y') + return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_yes); + } + } + if (sym1->type == S_BOOLEAN && sym1 == sym2) { + if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) || + (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL)) + return expr_alloc_symbol(&symbol_yes); + } + + if (DEBUG_EXPR) { + printf("optimize ("); + expr_fprint(e1, stdout); + printf(") || ("); + expr_fprint(e2, stdout); + printf(")?\n"); + } + return NULL; +} + +struct expr *expr_join_and(struct expr *e1, struct expr *e2) +{ + struct expr *tmp; + struct symbol *sym1, *sym2; + + if (expr_eq(e1, e2)) + return expr_copy(e1); + if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) + return NULL; + if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) + return NULL; + if (e1->type == E_NOT) { + tmp = e1->left.expr; + if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL) + return NULL; + sym1 = tmp->left.sym; + } else + sym1 = e1->left.sym; + if (e2->type == E_NOT) { + if (e2->left.expr->type != E_SYMBOL) + return NULL; + sym2 = e2->left.expr->left.sym; + } else + sym2 = e2->left.sym; + if (sym1 != sym2) + return NULL; + if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE) + return NULL; + + if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) || + (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes)) + // (a) && (a='y') -> (a='y') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); + + if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) || + (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no)) + // (a) && (a!='n') -> (a) + return expr_alloc_symbol(sym1); + + if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) || + (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod)) + // (a) && (a!='m') -> (a='y') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); + + if (sym1->type == S_TRISTATE) { + if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) { + // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' + sym2 = e1->right.sym; + if ((e2->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) + return sym2 != e2->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) + : expr_alloc_symbol(&symbol_no); + } + if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) { + // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' + sym2 = e2->right.sym; + if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) + return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) + : expr_alloc_symbol(&symbol_no); + } + if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) + // (a!='y') && (a!='n') -> (a='m') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_mod); + + if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || + (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) + // (a!='y') && (a!='m') -> (a='n') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_no); + + if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && + ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) + // (a!='m') && (a!='n') -> (a='m') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); + + if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) || + (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) || + (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) || + (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes)) + return NULL; + } + + if (DEBUG_EXPR) { + printf("optimize ("); + expr_fprint(e1, stdout); + printf(") && ("); + expr_fprint(e2, stdout); + printf(")?\n"); + } + return NULL; +} + +static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2) +{ +#define e1 (*ep1) +#define e2 (*ep2) + struct expr *tmp; + + if (e1->type == type) { + expr_eliminate_dups1(type, &e1->left.expr, &e2); + expr_eliminate_dups1(type, &e1->right.expr, &e2); + return; + } + if (e2->type == type) { + expr_eliminate_dups1(type, &e1, &e2->left.expr); + expr_eliminate_dups1(type, &e1, &e2->right.expr); + return; + } + if (e1 == e2) + return; + + switch (e1->type) { + case E_OR: case E_AND: + expr_eliminate_dups1(e1->type, &e1, &e1); + default: + ; + } + + switch (type) { + case E_OR: + tmp = expr_join_or(e1, e2); + if (tmp) { + expr_free(e1); expr_free(e2); + e1 = expr_alloc_symbol(&symbol_no); + e2 = tmp; + trans_count++; + } + break; + case E_AND: + tmp = expr_join_and(e1, e2); + if (tmp) { + expr_free(e1); expr_free(e2); + e1 = expr_alloc_symbol(&symbol_yes); + e2 = tmp; + trans_count++; + } + break; + default: + ; + } +#undef e1 +#undef e2 +} + +static void expr_eliminate_dups2(enum expr_type type, struct expr **ep1, struct expr **ep2) +{ +#define e1 (*ep1) +#define e2 (*ep2) + struct expr *tmp, *tmp1, *tmp2; + + if (e1->type == type) { + expr_eliminate_dups2(type, &e1->left.expr, &e2); + expr_eliminate_dups2(type, &e1->right.expr, &e2); + return; + } + if (e2->type == type) { + expr_eliminate_dups2(type, &e1, &e2->left.expr); + expr_eliminate_dups2(type, &e1, &e2->right.expr); + } + if (e1 == e2) + return; + + switch (e1->type) { + case E_OR: + expr_eliminate_dups2(e1->type, &e1, &e1); + // (FOO || BAR) && (!FOO && !BAR) -> n + tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1))); + tmp2 = expr_copy(e2); + tmp = expr_extract_eq_and(&tmp1, &tmp2); + if (expr_is_yes(tmp1)) { + expr_free(e1); + e1 = expr_alloc_symbol(&symbol_no); + trans_count++; + } + expr_free(tmp2); + expr_free(tmp1); + expr_free(tmp); + break; + case E_AND: + expr_eliminate_dups2(e1->type, &e1, &e1); + // (FOO && BAR) || (!FOO || !BAR) -> y + tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1))); + tmp2 = expr_copy(e2); + tmp = expr_extract_eq_or(&tmp1, &tmp2); + if (expr_is_no(tmp1)) { + expr_free(e1); + e1 = expr_alloc_symbol(&symbol_yes); + trans_count++; + } + expr_free(tmp2); + expr_free(tmp1); + expr_free(tmp); + break; + default: + ; + } +#undef e1 +#undef e2 +} + +struct expr *expr_eliminate_dups(struct expr *e) +{ + int oldcount; + if (!e) + return e; + + oldcount = trans_count; + while (1) { + trans_count = 0; + switch (e->type) { + case E_OR: case E_AND: + expr_eliminate_dups1(e->type, &e, &e); + expr_eliminate_dups2(e->type, &e, &e); + default: + ; + } + if (!trans_count) + break; + e = expr_eliminate_yn(e); + } + trans_count = oldcount; + return e; +} + +struct expr *expr_transform(struct expr *e) +{ + struct expr *tmp; + + if (!e) + return NULL; + switch (e->type) { + case E_EQUAL: + case E_UNEQUAL: + case E_SYMBOL: + case E_CHOICE: + break; + default: + e->left.expr = expr_transform(e->left.expr); + e->right.expr = expr_transform(e->right.expr); + } + + switch (e->type) { + case E_EQUAL: + if (e->left.sym->type != S_BOOLEAN) + break; + if (e->right.sym == &symbol_no) { + e->type = E_NOT; + e->left.expr = expr_alloc_symbol(e->left.sym); + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_mod) { + printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name); + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_yes) { + e->type = E_SYMBOL; + e->right.sym = NULL; + break; + } + break; + case E_UNEQUAL: + if (e->left.sym->type != S_BOOLEAN) + break; + if (e->right.sym == &symbol_no) { + e->type = E_SYMBOL; + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_mod) { + printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name); + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_yes) { + e->type = E_NOT; + e->left.expr = expr_alloc_symbol(e->left.sym); + e->right.sym = NULL; + break; + } + break; + case E_NOT: + switch (e->left.expr->type) { + case E_NOT: + // !!a -> a + tmp = e->left.expr->left.expr; + free(e->left.expr); + free(e); + e = tmp; + e = expr_transform(e); + break; + case E_EQUAL: + case E_UNEQUAL: + // !a='x' -> a!='x' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL; + break; + case E_OR: + // !(a || b) -> !a && !b + tmp = e->left.expr; + e->type = E_AND; + e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); + tmp->type = E_NOT; + tmp->right.expr = NULL; + e = expr_transform(e); + break; + case E_AND: + // !(a && b) -> !a || !b + tmp = e->left.expr; + e->type = E_OR; + e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); + tmp->type = E_NOT; + tmp->right.expr = NULL; + e = expr_transform(e); + break; + case E_SYMBOL: + if (e->left.expr->left.sym == &symbol_yes) { + // !'y' -> 'n' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + break; + } + if (e->left.expr->left.sym == &symbol_mod) { + // !'m' -> 'm' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = E_SYMBOL; + e->left.sym = &symbol_mod; + break; + } + if (e->left.expr->left.sym == &symbol_no) { + // !'n' -> 'y' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + break; + } + break; + default: + ; + } + break; + default: + ; + } + return e; +} + +int expr_contains_symbol(struct expr *dep, struct symbol *sym) +{ + if (!dep) + return 0; + + switch (dep->type) { + case E_AND: + case E_OR: + return expr_contains_symbol(dep->left.expr, sym) || + expr_contains_symbol(dep->right.expr, sym); + case E_SYMBOL: + return dep->left.sym == sym; + case E_EQUAL: + case E_UNEQUAL: + return dep->left.sym == sym || + dep->right.sym == sym; + case E_NOT: + return expr_contains_symbol(dep->left.expr, sym); + default: + ; + } + return 0; +} + +bool expr_depends_symbol(struct expr *dep, struct symbol *sym) +{ + if (!dep) + return false; + + switch (dep->type) { + case E_AND: + return expr_depends_symbol(dep->left.expr, sym) || + expr_depends_symbol(dep->right.expr, sym); + case E_SYMBOL: + return dep->left.sym == sym; + case E_EQUAL: + if (dep->left.sym == sym) { + if (dep->right.sym == &symbol_yes || dep->right.sym == &symbol_mod) + return true; + } + break; + case E_UNEQUAL: + if (dep->left.sym == sym) { + if (dep->right.sym == &symbol_no) + return true; + } + break; + default: + ; + } + return false; +} + +struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2) +{ + struct expr *tmp = NULL; + expr_extract_eq(E_AND, &tmp, ep1, ep2); + if (tmp) { + *ep1 = expr_eliminate_yn(*ep1); + *ep2 = expr_eliminate_yn(*ep2); + } + return tmp; +} + +struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2) +{ + struct expr *tmp = NULL; + expr_extract_eq(E_OR, &tmp, ep1, ep2); + if (tmp) { + *ep1 = expr_eliminate_yn(*ep1); + *ep2 = expr_eliminate_yn(*ep2); + } + return tmp; +} + +void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2) +{ +#define e1 (*ep1) +#define e2 (*ep2) + if (e1->type == type) { + expr_extract_eq(type, ep, &e1->left.expr, &e2); + expr_extract_eq(type, ep, &e1->right.expr, &e2); + return; + } + if (e2->type == type) { + expr_extract_eq(type, ep, ep1, &e2->left.expr); + expr_extract_eq(type, ep, ep1, &e2->right.expr); + return; + } + if (expr_eq(e1, e2)) { + *ep = *ep ? expr_alloc_two(type, *ep, e1) : e1; + expr_free(e2); + if (type == E_AND) { + e1 = expr_alloc_symbol(&symbol_yes); + e2 = expr_alloc_symbol(&symbol_yes); + } else if (type == E_OR) { + e1 = expr_alloc_symbol(&symbol_no); + e2 = expr_alloc_symbol(&symbol_no); + } + } +#undef e1 +#undef e2 +} + +struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) +{ + struct expr *e1, *e2; + + if (!e) { + e = expr_alloc_symbol(sym); + if (type == E_UNEQUAL) + e = expr_alloc_one(E_NOT, e); + return e; + } + switch (e->type) { + case E_AND: + e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); + e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); + if (sym == &symbol_yes) + e = expr_alloc_two(E_AND, e1, e2); + if (sym == &symbol_no) + e = expr_alloc_two(E_OR, e1, e2); + if (type == E_UNEQUAL) + e = expr_alloc_one(E_NOT, e); + return e; + case E_OR: + e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); + e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); + if (sym == &symbol_yes) + e = expr_alloc_two(E_OR, e1, e2); + if (sym == &symbol_no) + e = expr_alloc_two(E_AND, e1, e2); + if (type == E_UNEQUAL) + e = expr_alloc_one(E_NOT, e); + return e; + case E_NOT: + return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); + case E_UNEQUAL: + case E_EQUAL: + if (type == E_EQUAL) { + if (sym == &symbol_yes) + return expr_copy(e); + if (sym == &symbol_mod) + return expr_alloc_symbol(&symbol_no); + if (sym == &symbol_no) + return expr_alloc_one(E_NOT, expr_copy(e)); + } else { + if (sym == &symbol_yes) + return expr_alloc_one(E_NOT, expr_copy(e)); + if (sym == &symbol_mod) + return expr_alloc_symbol(&symbol_yes); + if (sym == &symbol_no) + return expr_copy(e); + } + break; + case E_SYMBOL: + return expr_alloc_comp(type, e->left.sym, sym); + case E_CHOICE: + case E_RANGE: + case E_NONE: + /* panic */; + } + return NULL; +} + +tristate expr_calc_value(struct expr *e) +{ + tristate val1, val2; + const char *str1, *str2; + + if (!e) + return yes; + + switch (e->type) { + case E_SYMBOL: + sym_calc_value(e->left.sym); + return e->left.sym->curr.tri; + case E_AND: + val1 = expr_calc_value(e->left.expr); + val2 = expr_calc_value(e->right.expr); + return E_AND(val1, val2); + case E_OR: + val1 = expr_calc_value(e->left.expr); + val2 = expr_calc_value(e->right.expr); + return E_OR(val1, val2); + case E_NOT: + val1 = expr_calc_value(e->left.expr); + return E_NOT(val1); + case E_EQUAL: + sym_calc_value(e->left.sym); + sym_calc_value(e->right.sym); + str1 = sym_get_string_value(e->left.sym); + str2 = sym_get_string_value(e->right.sym); + return !strcmp(str1, str2) ? yes : no; + case E_UNEQUAL: + sym_calc_value(e->left.sym); + sym_calc_value(e->right.sym); + str1 = sym_get_string_value(e->left.sym); + str2 = sym_get_string_value(e->right.sym); + return !strcmp(str1, str2) ? no : yes; + default: + printf("expr_calc_value: %d?\n", e->type); + return no; + } +} + +int expr_compare_type(enum expr_type t1, enum expr_type t2) +{ +#if 0 + return 1; +#else + if (t1 == t2) + return 0; + switch (t1) { + case E_EQUAL: + case E_UNEQUAL: + if (t2 == E_NOT) + return 1; + case E_NOT: + if (t2 == E_AND) + return 1; + case E_AND: + if (t2 == E_OR) + return 1; + case E_OR: + if (t2 == E_CHOICE) + return 1; + case E_CHOICE: + if (t2 == 0) + return 1; + default: + return -1; + } + printf("[%dgt%d?]", t1, t2); + return 0; +#endif +} + +void expr_print(struct expr *e, void (*fn)(void *, const char *), void *data, int prevtoken) +{ + if (!e) { + fn(data, "y"); + return; + } + + if (expr_compare_type(prevtoken, e->type) > 0) + fn(data, "("); + switch (e->type) { + case E_SYMBOL: + if (e->left.sym->name) + fn(data, e->left.sym->name); + else + fn(data, ""); + break; + case E_NOT: + fn(data, "!"); + expr_print(e->left.expr, fn, data, E_NOT); + break; + case E_EQUAL: + fn(data, e->left.sym->name); + fn(data, "="); + fn(data, e->right.sym->name); + break; + case E_UNEQUAL: + fn(data, e->left.sym->name); + fn(data, "!="); + fn(data, e->right.sym->name); + break; + case E_OR: + expr_print(e->left.expr, fn, data, E_OR); + fn(data, " || "); + expr_print(e->right.expr, fn, data, E_OR); + break; + case E_AND: + expr_print(e->left.expr, fn, data, E_AND); + fn(data, " && "); + expr_print(e->right.expr, fn, data, E_AND); + break; + case E_CHOICE: + fn(data, e->right.sym->name); + if (e->left.expr) { + fn(data, " ^ "); + expr_print(e->left.expr, fn, data, E_CHOICE); + } + break; + case E_RANGE: + fn(data, "["); + fn(data, e->left.sym->name); + fn(data, " "); + fn(data, e->right.sym->name); + fn(data, "]"); + break; + default: + { + char buf[32]; + sprintf(buf, "", e->type); + fn(data, buf); + break; + } + } + if (expr_compare_type(prevtoken, e->type) > 0) + fn(data, ")"); +} + +static void expr_print_file_helper(void *data, const char *str) +{ + fwrite(str, strlen(str), 1, data); +} + +void expr_fprint(struct expr *e, FILE *out) +{ + expr_print(e, expr_print_file_helper, out, E_NONE); +} + +static void expr_print_gstr_helper(void *data, const char *str) +{ + str_append((struct gstr*)data, str); +} + +void expr_gstr_print(struct expr *e, struct gstr *gs) +{ + expr_print(e, expr_print_gstr_helper, gs, E_NONE); +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/expr.h b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/expr.h new file mode 100644 index 0000000..7d39ff4 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/expr.h @@ -0,0 +1,195 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#ifndef EXPR_H +#define EXPR_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#ifndef __cplusplus +#include +#endif + +struct file { + struct file *next; + struct file *parent; + char *name; + int lineno; + int flags; +}; + +#define FILE_BUSY 0x0001 +#define FILE_SCANNED 0x0002 +#define FILE_PRINTED 0x0004 + +typedef enum tristate { + no, mod, yes +} tristate; + +enum expr_type { + E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_CHOICE, E_SYMBOL, E_RANGE +}; + +union expr_data { + struct expr *expr; + struct symbol *sym; +}; + +struct expr { + enum expr_type type; + union expr_data left, right; +}; + +#define E_OR(dep1, dep2) (((dep1)>(dep2))?(dep1):(dep2)) +#define E_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2)) +#define E_NOT(dep) (2-(dep)) + +struct expr_value { + struct expr *expr; + tristate tri; +}; + +struct symbol_value { + void *val; + tristate tri; +}; + +enum symbol_type { + S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER +}; + +struct symbol { + struct symbol *next; + char *name; + char *help; + enum symbol_type type; + struct symbol_value curr, user; + tristate visible; + int flags; + struct property *prop; + struct expr *dep, *dep2; + struct expr_value rev_dep; +}; + +#define for_all_symbols(i, sym) for (i = 0; i < 257; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER) + +#define SYMBOL_YES 0x0001 +#define SYMBOL_MOD 0x0002 +#define SYMBOL_NO 0x0004 +#define SYMBOL_CONST 0x0007 +#define SYMBOL_CHECK 0x0008 +#define SYMBOL_CHOICE 0x0010 +#define SYMBOL_CHOICEVAL 0x0020 +#define SYMBOL_PRINTED 0x0040 +#define SYMBOL_VALID 0x0080 +#define SYMBOL_OPTIONAL 0x0100 +#define SYMBOL_WRITE 0x0200 +#define SYMBOL_CHANGED 0x0400 +#define SYMBOL_NEW 0x0800 +#define SYMBOL_AUTO 0x1000 +#define SYMBOL_CHECKED 0x2000 +#define SYMBOL_CHECK_DONE 0x4000 +#define SYMBOL_WARNED 0x8000 + +#define SYMBOL_MAXLENGTH 256 +#define SYMBOL_HASHSIZE 257 +#define SYMBOL_HASHMASK 0xff + +enum prop_type { + P_UNKNOWN, P_PROMPT, P_COMMENT, P_MENU, P_DEFAULT, P_CHOICE, P_SELECT, P_RANGE +}; + +struct property { + struct property *next; + struct symbol *sym; + enum prop_type type; + const char *text; + struct expr_value visible; + struct expr *expr; + struct menu *menu; + struct file *file; + int lineno; +}; + +#define for_all_properties(sym, st, tok) \ + for (st = sym->prop; st; st = st->next) \ + if (st->type == (tok)) +#define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT) +#define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE) +#define for_all_prompts(sym, st) \ + for (st = sym->prop; st; st = st->next) \ + if (st->text) + +struct menu { + struct menu *next; + struct menu *parent; + struct menu *list; + struct symbol *sym; + struct property *prompt; + struct expr *dep; + unsigned int flags; + //char *help; + struct file *file; + int lineno; + void *data; +}; + +#define MENU_CHANGED 0x0001 +#define MENU_ROOT 0x0002 + +#ifndef SWIG + +extern struct file *file_list; +extern struct file *current_file; +struct file *lookup_file(const char *name); + +extern struct symbol symbol_yes, symbol_no, symbol_mod; +extern struct symbol *modules_sym; +extern int cdebug; +struct expr *expr_alloc_symbol(struct symbol *sym); +struct expr *expr_alloc_one(enum expr_type type, struct expr *ce); +struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2); +struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2); +struct expr *expr_alloc_and(struct expr *e1, struct expr *e2); +struct expr *expr_alloc_or(struct expr *e1, struct expr *e2); +struct expr *expr_copy(struct expr *org); +void expr_free(struct expr *e); +int expr_eq(struct expr *e1, struct expr *e2); +void expr_eliminate_eq(struct expr **ep1, struct expr **ep2); +tristate expr_calc_value(struct expr *e); +struct expr *expr_eliminate_yn(struct expr *e); +struct expr *expr_trans_bool(struct expr *e); +struct expr *expr_eliminate_dups(struct expr *e); +struct expr *expr_transform(struct expr *e); +int expr_contains_symbol(struct expr *dep, struct symbol *sym); +bool expr_depends_symbol(struct expr *dep, struct symbol *sym); +struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2); +struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2); +void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2); +struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym); + +void expr_fprint(struct expr *e, FILE *out); +struct gstr; /* forward */ +void expr_gstr_print(struct expr *e, struct gstr *gs); + +static inline int expr_is_yes(struct expr *e) +{ + return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes); +} + +static inline int expr_is_no(struct expr *e) +{ + return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no); +} +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* EXPR_H */ diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lex.zconf.c_shipped b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lex.zconf.c_shipped new file mode 100644 index 0000000..b877bb6 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lex.zconf.c_shipped @@ -0,0 +1,3688 @@ + +#line 3 "lex.zconf.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 31 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE zconfrestart(zconfin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +extern int zconfleng; + +extern FILE *zconfin, *zconfout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up zconftext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up zconftext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via zconfrestart()), so that the user can continue scanning by + * just pointing zconfin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when zconftext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int zconfleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 1; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow zconfwrap()'s to do buffer switches + * instead of setting up a fresh zconfin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void zconfrestart (FILE *input_file ); +void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE zconf_create_buffer (FILE *file,int size ); +void zconf_delete_buffer (YY_BUFFER_STATE b ); +void zconf_flush_buffer (YY_BUFFER_STATE b ); +void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer ); +void zconfpop_buffer_state (void ); + +static void zconfensure_buffer_stack (void ); +static void zconf_load_buffer_state (void ); +static void zconf_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER zconf_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE zconf_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE zconf_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE zconf_scan_bytes (yyconst char *bytes,int len ); + +void *zconfalloc (yy_size_t ); +void *zconfrealloc (void *,yy_size_t ); +void zconffree (void * ); + +#define yy_new_buffer zconf_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + zconfensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + zconf_create_buffer(zconfin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + zconfensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + zconf_create_buffer(zconfin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define zconfwrap(n) 1 +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +FILE *zconfin = (FILE *) 0, *zconfout = (FILE *) 0; + +typedef int yy_state_type; + +extern int zconflineno; + +int zconflineno = 1; + +extern char *zconftext; +#define yytext_ptr zconftext +static yyconst flex_int16_t yy_nxt[][38] = + { + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }, + + { + 11, 12, 13, 14, 12, 12, 15, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12 + }, + + { + 11, 12, 13, 14, 12, 12, 15, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12 + }, + + { + 11, 16, 16, 17, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 18, 16, 16, 18, 18, 19, 20, + 21, 22, 18, 18, 23, 24, 18, 25, 18, 26, + 27, 18, 28, 29, 30, 18, 18, 16 + }, + + { + 11, 16, 16, 17, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 18, 16, 16, 18, 18, 19, 20, + 21, 22, 18, 18, 23, 24, 18, 25, 18, 26, + 27, 18, 28, 29, 30, 18, 18, 16 + + }, + + { + 11, 31, 32, 33, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31 + }, + + { + 11, 31, 32, 33, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31 + }, + + { + 11, 34, 34, 35, 34, 36, 34, 34, 36, 34, + 34, 34, 34, 34, 34, 37, 34, 34, 34, 34, + + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34 + }, + + { + 11, 34, 34, 35, 34, 36, 34, 34, 36, 34, + 34, 34, 34, 34, 34, 37, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34 + }, + + { + 11, 38, 38, 39, 40, 41, 42, 43, 41, 44, + 45, 46, 47, 47, 48, 49, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 50, 47, 47, 47, 51, + 47, 47, 47, 47, 47, 47, 47, 52 + + }, + + { + 11, 38, 38, 39, 40, 41, 42, 43, 41, 44, + 45, 46, 47, 47, 48, 49, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 50, 47, 47, 47, 51, + 47, 47, 47, 47, 47, 47, 47, 52 + }, + + { + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11 + }, + + { + 11, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12 + }, + + { + 11, -13, 53, 54, -13, -13, 55, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13 + }, + + { + 11, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14 + + }, + + { + 11, 56, 56, 57, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56 + }, + + { + 11, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16 + }, + + { + 11, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17 + }, + + { + 11, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, 58, -18, -18, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -18 + }, + + { + 11, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, 58, -19, -19, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, + 58, 58, 58, 58, 58, 58, 58, -19 + + }, + + { + 11, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, 58, -20, -20, 58, 58, 58, 58, + 58, 58, 58, 58, 60, 58, 58, 58, 58, 61, + 58, 58, 58, 58, 58, 58, 58, -20 + }, + + { + 11, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, 58, -21, -21, 58, 58, 58, 58, + 58, 62, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -21 + }, + + { + 11, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, 58, -22, -22, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 63, 58, + 58, 58, 58, 58, 58, 58, 58, -22 + }, + + { + 11, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, 58, -23, -23, 58, 58, 58, 58, + 58, 64, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -23 + }, + + { + 11, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, 58, -24, -24, 58, 58, 58, 58, + 58, 58, 65, 58, 58, 58, 58, 58, 66, 58, + 58, 58, 58, 58, 58, 58, 58, -24 + + }, + + { + 11, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, 58, -25, -25, 58, 67, 58, 58, + 58, 68, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -25 + }, + + { + 11, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, 58, -26, -26, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 69, 58, 58, 58, 58, 58, 58, -26 + }, + + { + 11, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, 58, -27, -27, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 70, 58, 58, 58, 58, -27 + }, + + { + 11, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, 58, -28, -28, 58, 71, 58, 58, + 58, 72, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -28 + }, + + { + 11, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, 58, -29, -29, 58, 58, 58, 58, + 58, 73, 58, 58, 58, 58, 58, 58, 58, 74, + 58, 58, 58, 58, 75, 58, 58, -29 + + }, + + { + 11, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, 58, -30, -30, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 76, 58, 58, 58, 58, -30 + }, + + { + 11, 77, 77, -31, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 11, -32, 78, 79, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32 + }, + + { + 11, 80, -33, -33, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80 + }, + + { + 11, 81, 81, 82, 81, -34, 81, 81, -34, 81, + 81, 81, 81, 81, 81, -34, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81 + + }, + + { + 11, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35 + }, + + { + 11, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36 + }, + + { + 11, 83, 83, 84, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83 + }, + + { + 11, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38 + }, + + { + 11, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39 + + }, + + { + 11, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, 85, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40 + }, + + { + 11, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41 + }, + + { + 11, 86, 86, -42, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86 + }, + + { + 11, -43, -43, -43, -43, -43, -43, 87, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43 + }, + + { + 11, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44 + + }, + + { + 11, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45 + }, + + { + 11, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, 88, 89, 89, -46, -46, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, -46 + }, + + { + 11, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, 89, 89, 89, -47, -47, 89, 89, 89, 89, + + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, -47 + }, + + { + 11, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48 + }, + + { + 11, -49, -49, 90, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49 + + }, + + { + 11, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, 89, 89, 89, -50, -50, 89, 89, 89, 89, + 89, 89, 91, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, -50 + }, + + { + 11, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, 89, 89, 89, -51, -51, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 92, 89, + 89, 89, 89, 89, 89, 89, 89, -51 + }, + + { + 11, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, 93 + }, + + { + 11, -53, 53, 54, -53, -53, 55, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53 + }, + + { + 11, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54 + + }, + + { + 11, 56, 56, 57, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56 + }, + + { + 11, 56, 56, 57, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56 + }, + + { + 11, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57 + }, + + { + 11, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, 58, -58, -58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -58 + }, + + { + 11, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, 58, -59, -59, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 94, + 58, 58, 58, 58, 58, 58, 58, -59 + + }, + + { + 11, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, 58, -60, -60, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 95, + 58, 58, 58, 58, 58, 58, 58, -60 + }, + + { + 11, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, 58, -61, -61, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 96, 97, 58, + 58, 58, 58, 58, 58, 58, 58, -61 + }, + + { + 11, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, 58, -62, -62, 58, 58, 58, 58, + + 58, 58, 98, 58, 58, 58, 58, 58, 58, 58, + 99, 58, 58, 58, 58, 58, 58, -62 + }, + + { + 11, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, 58, -63, -63, 58, 100, 58, 58, + 101, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -63 + }, + + { + 11, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, 58, -64, -64, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 102, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 103, -64 + + }, + + { + 11, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, 58, -65, -65, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -65 + }, + + { + 11, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, 58, -66, -66, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 104, 58, 58, -66 + }, + + { + 11, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, 58, -67, -67, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 105, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -67 + }, + + { + 11, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, 58, -68, -68, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 106, 58, + 58, 58, 58, 58, 58, 58, 58, -68 + }, + + { + 11, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, 58, -69, -69, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 107, 58, 58, -69 + + }, + + { + 11, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, 58, -70, -70, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 108, + 58, 58, 58, 58, 58, 58, 58, -70 + }, + + { + 11, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, 58, -71, -71, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 109, 58, + 58, 58, 58, 58, 58, 58, 58, -71 + }, + + { + 11, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, 58, -72, -72, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 110, 58, 58, 58, 58, 58, -72 + }, + + { + 11, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, 58, -73, -73, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 111, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -73 + }, + + { + 11, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, 58, -74, -74, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 112, 58, -74 + + }, + + { + 11, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, 58, -75, -75, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 113, 58, 58, 58, 58, -75 + }, + + { + 11, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, 58, -76, -76, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 114, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -76 + }, + + { + 11, 77, 77, -77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 11, -78, 78, 79, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78 + }, + + { + 11, 80, -79, -79, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80 + + }, + + { + 11, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80 + }, + + { + 11, 81, 81, 82, 81, -81, 81, 81, -81, 81, + 81, 81, 81, 81, 81, -81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81 + }, + + { + 11, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82 + }, + + { + 11, -83, -83, 84, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83 + }, + + { + 11, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84 + + }, + + { + 11, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85 + }, + + { + 11, 86, 86, -86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86 + }, + + { + 11, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87 + }, + + { + 11, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, 115, 89, 89, -88, -88, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, -88 + }, + + { + 11, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, 89, 89, 89, -89, -89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, -89 + + }, + + { + 11, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90 + }, + + { + 11, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, 89, 89, 89, -91, -91, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, -91 + }, + + { + 11, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, 89, 89, 89, -92, -92, 89, 89, 89, 89, + + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, -92 + }, + + { + 11, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93 + }, + + { + 11, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, 58, -94, -94, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 116, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -94 + + }, + + { + 11, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, 58, -95, -95, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 117, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -95 + }, + + { + 11, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, 58, -96, -96, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 118, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -96 + }, + + { + 11, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, 58, -97, -97, 58, 58, 58, 58, + + 58, 58, 119, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -97 + }, + + { + 11, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, 58, -98, -98, 120, 121, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -98 + }, + + { + 11, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, 58, -99, -99, 58, 58, 58, 58, + 58, 122, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -99 + + }, + + { + 11, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, 58, -100, -100, 58, 58, 123, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -100 + }, + + { + 11, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, 58, -101, -101, 58, 58, 58, 124, + 58, 58, 58, 58, 58, 125, 58, 126, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -101 + }, + + { + 11, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, 58, -102, -102, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 127, 58, 58, 58, 58, 58, 58, -102 + }, + + { + 11, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, 58, -103, -103, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -103 + }, + + { + 11, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, 58, -104, -104, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -104 + + }, + + { + 11, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, 58, -105, -105, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 128, 58, + 58, 58, 58, 58, 58, 58, 58, -105 + }, + + { + 11, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, 58, -106, -106, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 129, 58, -106 + }, + + { + 11, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, 58, -107, -107, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 130, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -107 + }, + + { + 11, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, 58, -108, -108, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 131, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -108 + }, + + { + 11, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, 58, -109, -109, 58, 58, 58, 58, + 58, 58, 58, 132, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -109 + + }, + + { + 11, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, 58, -110, -110, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 133, 58, -110 + }, + + { + 11, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, 58, -111, -111, 58, 58, 58, 58, + 58, 134, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -111 + }, + + { + 11, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, 58, -112, -112, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 135, 58, 58, 58, 58, -112 + }, + + { + 11, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, 58, -113, -113, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 136, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -113 + }, + + { + 11, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, 58, -114, -114, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 137, 58, 58, 58, -114 + + }, + + { + 11, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, 89, 89, 89, -115, -115, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, -115 + }, + + { + 11, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, 58, -116, -116, 58, 58, 58, 58, + 58, 138, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -116 + }, + + { + 11, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, 58, -117, -117, 58, 58, 58, 139, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -117 + }, + + { + 11, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, 58, -118, -118, 58, 58, 58, 58, + 58, 140, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -118 + }, + + { + 11, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, 58, -119, -119, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 141, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -119 + + }, + + { + 11, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, 58, -120, -120, 58, 58, 142, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 143, 58, 58, -120 + }, + + { + 11, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, 58, -121, -121, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 144, 58, -121 + }, + + { + 11, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, 58, -122, -122, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 145, 58, + 58, 58, 58, 58, 58, 58, 58, -122 + }, + + { + 11, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, 58, -123, -123, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 146, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -123 + }, + + { + 11, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, 58, -124, -124, 58, 58, 58, 58, + 58, 58, 58, 58, 147, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -124 + + }, + + { + 11, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, 58, -125, -125, 58, 58, 58, 58, + 58, 58, 148, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -125 + }, + + { + 11, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, 58, -126, -126, 58, 58, 58, 58, + 58, 149, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -126 + }, + + { + 11, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, 58, -127, -127, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -127 + }, + + { + 11, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, 58, -128, -128, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 150, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -128 + }, + + { + 11, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, 58, -129, -129, 58, 58, 58, 151, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -129 + + }, + + { + 11, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, 58, -130, -130, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 152, + 58, 58, 58, 58, 58, 58, 58, -130 + }, + + { + 11, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, 58, -131, -131, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 153, 58, 58, 58, 58, 58, 58, -131 + }, + + { + 11, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, 58, -132, -132, 58, 58, 58, 58, + + 58, 154, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -132 + }, + + { + 11, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, 58, -133, -133, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 155, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -133 + }, + + { + 11, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, 58, -134, -134, 58, 58, 58, 156, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -134 + + }, + + { + 11, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, 58, -135, -135, 58, 58, 58, 157, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -135 + }, + + { + 11, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, 58, -136, -136, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 158, 58, + 58, 58, 58, 58, 58, 58, 58, -136 + }, + + { + 11, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, 58, -137, -137, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 159, 58, 58, -137 + }, + + { + 11, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, 58, -138, -138, 58, 160, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -138 + }, + + { + 11, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, 58, -139, -139, 58, 58, 58, 58, + 58, 161, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -139 + + }, + + { + 11, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, 58, -140, -140, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 162, 58, + 58, 58, 58, 58, 58, 58, 58, -140 + }, + + { + 11, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, 58, -141, -141, 58, 58, 58, 58, + 58, 58, 58, 163, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -141 + }, + + { + 11, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, 58, -142, -142, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 164, + 58, 58, 58, 58, 58, 58, 58, -142 + }, + + { + 11, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, 58, -143, -143, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 165, 58, 58, 58, 58, -143 + }, + + { + 11, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, 58, -144, -144, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 166, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -144 + + }, + + { + 11, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, 58, -145, -145, 58, 58, 58, 58, + 167, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -145 + }, + + { + 11, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, 58, -146, -146, 58, 58, 58, 58, + 58, 168, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -146 + }, + + { + 11, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, 58, -147, -147, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 169, + 58, 58, 58, 58, 58, 58, 58, -147 + }, + + { + 11, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, 58, -148, -148, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -148 + }, + + { + 11, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, 58, -149, -149, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 170, 58, + 58, 58, 58, 58, 58, 58, 58, -149 + + }, + + { + 11, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, 58, -150, -150, 58, 58, 58, 58, + 58, 171, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -150 + }, + + { + 11, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, 58, -151, -151, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 172, + 58, 58, 58, 58, 58, 58, 58, -151 + }, + + { + 11, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, 58, -152, -152, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 173, 58, + 58, 58, 58, 58, 58, 58, 58, -152 + }, + + { + 11, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, 58, -153, -153, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 174, 58, 58, -153 + }, + + { + 11, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, 58, -154, -154, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -154 + + }, + + { + 11, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, 58, -155, -155, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 175, 58, 58, 58, 58, -155 + }, + + { + 11, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, 58, -156, -156, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 176, 58, 58, -156 + }, + + { + 11, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, 58, -157, -157, 58, 58, 58, 58, + + 58, 177, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -157 + }, + + { + 11, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, 58, -158, -158, 58, 58, 58, 58, + 58, 58, 58, 178, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -158 + }, + + { + 11, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, 58, -159, -159, 58, 179, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -159 + + }, + + { + 11, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, 58, -160, -160, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 180, 58, + 58, 58, 58, 58, 58, 58, 58, -160 + }, + + { + 11, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, 58, -161, -161, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -161 + }, + + { + 11, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, 58, -162, -162, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 181, 58, 58, -162 + }, + + { + 11, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, 58, -163, -163, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -163 + }, + + { + 11, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, 58, -164, -164, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 182, + 58, 58, 58, 58, 58, 58, 58, -164 + + }, + + { + 11, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, 58, -165, -165, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 183, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -165 + }, + + { + 11, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, 58, -166, -166, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 184, 58, 58, -166 + }, + + { + 11, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, 58, -167, -167, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 185, 58, 58, 58, -167 + }, + + { + 11, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, 58, -168, -168, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -168 + }, + + { + 11, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, 58, -169, -169, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 186, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -169 + + }, + + { + 11, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, 58, -170, -170, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 187, 58, -170 + }, + + { + 11, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, 58, -171, -171, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 188, 58, + 58, 58, 58, 58, 58, 58, 58, -171 + }, + + { + 11, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, 58, -172, -172, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 189, 58, + 58, 58, 58, 58, 58, 58, 58, -172 + }, + + { + 11, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, 58, -173, -173, 58, 190, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -173 + }, + + { + 11, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, 58, -174, -174, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -174 + + }, + + { + 11, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, 58, -175, -175, 58, 58, 58, 58, + 58, 191, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -175 + }, + + { + 11, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, 58, -176, -176, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -176 + }, + + { + 11, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, 58, -177, -177, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -177 + }, + + { + 11, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, 58, -178, -178, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -178 + }, + + { + 11, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, 58, -179, -179, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 192, 58, 58, -179 + + }, + + { + 11, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, 58, -180, -180, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -180 + }, + + { + 11, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, 58, -181, -181, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -181 + }, + + { + 11, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, 58, -182, -182, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 193, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -182 + }, + + { + 11, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, 58, -183, -183, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 194, 58, 58, 58, -183 + }, + + { + 11, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, 58, -184, -184, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -184 + + }, + + { + 11, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, 58, -185, -185, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -185 + }, + + { + 11, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, 58, -186, -186, 58, 58, 58, 195, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -186 + }, + + { + 11, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, 58, -187, -187, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -187 + }, + + { + 11, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, 58, -188, -188, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 196, 58, -188 + }, + + { + 11, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, 58, -189, -189, 58, 58, 58, 58, + 58, 58, 197, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -189 + + }, + + { + 11, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, 58, -190, -190, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 198, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -190 + }, + + { + 11, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, 58, -191, -191, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 199, 58, 58, 58, -191 + }, + + { + 11, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, 58, -192, -192, 58, 58, 58, 58, + + 58, 200, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -192 + }, + + { + 11, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, 58, -193, -193, 58, 58, 58, 58, + 58, 201, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -193 + }, + + { + 11, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, 58, -194, -194, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 202, 58, 58, -194 + + }, + + { + 11, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, 58, -195, -195, 58, 58, 58, 58, + 58, 203, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -195 + }, + + { + 11, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, 58, -196, -196, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -196 + }, + + { + 11, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, 58, -197, -197, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 204, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -197 + }, + + { + 11, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, 58, -198, -198, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -198 + }, + + { + 11, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, 58, -199, -199, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -199 + + }, + + { + 11, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, 58, -200, -200, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -200 + }, + + { + 11, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, 58, -201, -201, 58, 205, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -201 + }, + + { + 11, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, 58, -202, -202, 58, 206, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -202 + }, + + { + 11, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, 58, -203, -203, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -203 + }, + + { + 11, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, 58, -204, -204, 58, 58, 58, 58, + 58, 58, 58, 207, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -204 + + }, + + { + 11, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, 58, -205, -205, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 208, 58, + 58, 58, 58, 58, 58, 58, 58, -205 + }, + + { + 11, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, 58, -206, -206, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 209, 58, 58, -206 + }, + + { + 11, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, 58, -207, -207, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -207 + }, + + { + 11, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, 58, -208, -208, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -208 + }, + + { + 11, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, 58, -209, -209, 58, 58, 58, 58, + 58, 210, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -209 + + }, + + { + 11, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, 58, -210, -210, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, -210 + }, + + } ; + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (yyconst char msg[] ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up zconftext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + zconfleng = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 64 +#define YY_END_OF_BUFFER 65 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[211] = + { 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 65, 5, 4, 3, 2, 36, 37, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 63, 60, 62, 55, 59, 58, 57, 53, 48, 42, + 47, 51, 53, 40, 41, 50, 50, 43, 53, 50, + 50, 53, 4, 3, 2, 2, 1, 35, 35, 35, + 35, 35, 35, 35, 16, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 63, 60, 62, 61, + 55, 54, 57, 56, 44, 51, 38, 50, 50, 52, + 45, 46, 39, 35, 35, 35, 35, 35, 35, 35, + + 35, 35, 30, 29, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 49, 25, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 15, 35, 7, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 17, 35, 35, + 35, 35, 35, 34, 35, 35, 35, 35, 35, 35, + 10, 35, 13, 35, 35, 35, 35, 33, 35, 35, + 35, 35, 35, 22, 35, 32, 9, 31, 35, 26, + 12, 35, 35, 21, 18, 35, 8, 35, 35, 35, + 35, 35, 27, 35, 35, 6, 35, 20, 19, 23, + + 35, 35, 11, 35, 35, 35, 14, 28, 35, 24 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 5, 6, 1, 1, 7, 8, 9, + 10, 1, 1, 1, 11, 12, 12, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 1, 1, 1, + 14, 1, 1, 1, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 1, 15, 1, 1, 16, 1, 17, 18, 19, 20, + + 21, 22, 23, 24, 25, 13, 13, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 13, 13, 36, + 13, 13, 1, 37, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +extern int zconf_flex_debug; +int zconf_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *zconftext; + +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +#define START_STRSIZE 16 + +char *text; +static char *text_ptr; +static int text_size, text_asize; + +struct buffer { + struct buffer *parent; + YY_BUFFER_STATE state; +}; + +struct buffer *current_buf; + +static int last_ts, first_ts; + +static void zconf_endhelp(void); +static struct buffer *zconf_endfile(void); + +void new_string(void) +{ + text = malloc(START_STRSIZE); + text_asize = START_STRSIZE; + text_ptr = text; + text_size = 0; + *text_ptr = 0; +} + +void append_string(const char *str, int size) +{ + int new_size = text_size + size + 1; + if (new_size > text_asize) { + text = realloc(text, new_size); + text_asize = new_size; + text_ptr = text + text_size; + } + memcpy(text_ptr, str, size); + text_ptr += size; + text_size += size; + *text_ptr = 0; +} + +void alloc_string(const char *str, int size) +{ + text = malloc(size + 1); + memcpy(text, str, size); + text[size] = 0; +} + +#define INITIAL 0 +#define COMMAND 1 +#define HELP 2 +#define STRING 3 +#define PARAM 4 + +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int zconfwrap (void ); +#else +extern int zconfwrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO (void) fwrite( zconftext, zconfleng, 1, zconfout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = read( fileno(zconfin), (char *) buf, max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(zconfin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int zconflex (void); + +#define YY_DECL int zconflex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after zconftext and zconfleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + + int str = 0; + int ts, i; + + if ( (yy_init) ) + { + (yy_init) = 0; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! zconfin ) + zconfin = stdin; + + if ( ! zconfout ) + zconfout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + zconfensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + zconf_create_buffer(zconfin,YY_BUF_SIZE ); + } + + zconf_load_buffer_state( ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of zconftext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ yy_ec[YY_SC_TO_UI(*yy_cp)] ]) > 0 ) + ++yy_cp; + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ +case 1: +/* rule 1 can match eol */ +YY_RULE_SETUP +current_file->lineno++; + YY_BREAK +case 2: +YY_RULE_SETUP + + YY_BREAK +case 3: +/* rule 3 can match eol */ +YY_RULE_SETUP +current_file->lineno++; return T_EOL; + YY_BREAK +case 4: +YY_RULE_SETUP +{ + BEGIN(COMMAND); +} + YY_BREAK +case 5: +YY_RULE_SETUP +{ + unput(zconftext[0]); + BEGIN(COMMAND); +} + YY_BREAK + +case 6: +YY_RULE_SETUP +BEGIN(PARAM); return T_MAINMENU; + YY_BREAK +case 7: +YY_RULE_SETUP +BEGIN(PARAM); return T_MENU; + YY_BREAK +case 8: +YY_RULE_SETUP +BEGIN(PARAM); return T_ENDMENU; + YY_BREAK +case 9: +YY_RULE_SETUP +BEGIN(PARAM); return T_SOURCE; + YY_BREAK +case 10: +YY_RULE_SETUP +BEGIN(PARAM); return T_CHOICE; + YY_BREAK +case 11: +YY_RULE_SETUP +BEGIN(PARAM); return T_ENDCHOICE; + YY_BREAK +case 12: +YY_RULE_SETUP +BEGIN(PARAM); return T_COMMENT; + YY_BREAK +case 13: +YY_RULE_SETUP +BEGIN(PARAM); return T_CONFIG; + YY_BREAK +case 14: +YY_RULE_SETUP +BEGIN(PARAM); return T_MENUCONFIG; + YY_BREAK +case 15: +YY_RULE_SETUP +BEGIN(PARAM); return T_HELP; + YY_BREAK +case 16: +YY_RULE_SETUP +BEGIN(PARAM); return T_IF; + YY_BREAK +case 17: +YY_RULE_SETUP +BEGIN(PARAM); return T_ENDIF; + YY_BREAK +case 18: +YY_RULE_SETUP +BEGIN(PARAM); return T_DEPENDS; + YY_BREAK +case 19: +YY_RULE_SETUP +BEGIN(PARAM); return T_REQUIRES; + YY_BREAK +case 20: +YY_RULE_SETUP +BEGIN(PARAM); return T_OPTIONAL; + YY_BREAK +case 21: +YY_RULE_SETUP +BEGIN(PARAM); return T_DEFAULT; + YY_BREAK +case 22: +YY_RULE_SETUP +BEGIN(PARAM); return T_PROMPT; + YY_BREAK +case 23: +YY_RULE_SETUP +BEGIN(PARAM); return T_TRISTATE; + YY_BREAK +case 24: +YY_RULE_SETUP +BEGIN(PARAM); return T_DEF_TRISTATE; + YY_BREAK +case 25: +YY_RULE_SETUP +BEGIN(PARAM); return T_BOOLEAN; + YY_BREAK +case 26: +YY_RULE_SETUP +BEGIN(PARAM); return T_BOOLEAN; + YY_BREAK +case 27: +YY_RULE_SETUP +BEGIN(PARAM); return T_DEF_BOOLEAN; + YY_BREAK +case 28: +YY_RULE_SETUP +BEGIN(PARAM); return T_DEF_BOOLEAN; + YY_BREAK +case 29: +YY_RULE_SETUP +BEGIN(PARAM); return T_INT; + YY_BREAK +case 30: +YY_RULE_SETUP +BEGIN(PARAM); return T_HEX; + YY_BREAK +case 31: +YY_RULE_SETUP +BEGIN(PARAM); return T_STRING; + YY_BREAK +case 32: +YY_RULE_SETUP +BEGIN(PARAM); return T_SELECT; + YY_BREAK +case 33: +YY_RULE_SETUP +BEGIN(PARAM); return T_SELECT; + YY_BREAK +case 34: +YY_RULE_SETUP +BEGIN(PARAM); return T_RANGE; + YY_BREAK +case 35: +YY_RULE_SETUP +{ + alloc_string(zconftext, zconfleng); + zconflval.string = text; + return T_WORD; + } + YY_BREAK +case 36: +YY_RULE_SETUP + + YY_BREAK +case 37: +/* rule 37 can match eol */ +YY_RULE_SETUP +current_file->lineno++; BEGIN(INITIAL); + YY_BREAK + +case 38: +YY_RULE_SETUP +return T_AND; + YY_BREAK +case 39: +YY_RULE_SETUP +return T_OR; + YY_BREAK +case 40: +YY_RULE_SETUP +return T_OPEN_PAREN; + YY_BREAK +case 41: +YY_RULE_SETUP +return T_CLOSE_PAREN; + YY_BREAK +case 42: +YY_RULE_SETUP +return T_NOT; + YY_BREAK +case 43: +YY_RULE_SETUP +return T_EQUAL; + YY_BREAK +case 44: +YY_RULE_SETUP +return T_UNEQUAL; + YY_BREAK +case 45: +YY_RULE_SETUP +return T_IF; + YY_BREAK +case 46: +YY_RULE_SETUP +return T_ON; + YY_BREAK +case 47: +YY_RULE_SETUP +{ + str = zconftext[0]; + new_string(); + BEGIN(STRING); + } + YY_BREAK +case 48: +/* rule 48 can match eol */ +YY_RULE_SETUP +BEGIN(INITIAL); current_file->lineno++; return T_EOL; + YY_BREAK +case 49: +YY_RULE_SETUP +/* ignore */ + YY_BREAK +case 50: +YY_RULE_SETUP +{ + alloc_string(zconftext, zconfleng); + zconflval.string = text; + return T_WORD; + } + YY_BREAK +case 51: +YY_RULE_SETUP +/* comment */ + YY_BREAK +case 52: +/* rule 52 can match eol */ +YY_RULE_SETUP +current_file->lineno++; + YY_BREAK +case 53: +YY_RULE_SETUP + + YY_BREAK +case YY_STATE_EOF(PARAM): +{ + BEGIN(INITIAL); + } + YY_BREAK + +case 54: +/* rule 54 can match eol */ +*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ +(yy_c_buf_p) = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up zconftext again */ +YY_RULE_SETUP +{ + append_string(zconftext, zconfleng); + zconflval.string = text; + return T_WORD_QUOTE; + } + YY_BREAK +case 55: +YY_RULE_SETUP +{ + append_string(zconftext, zconfleng); + } + YY_BREAK +case 56: +/* rule 56 can match eol */ +*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ +(yy_c_buf_p) = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up zconftext again */ +YY_RULE_SETUP +{ + append_string(zconftext + 1, zconfleng - 1); + zconflval.string = text; + return T_WORD_QUOTE; + } + YY_BREAK +case 57: +YY_RULE_SETUP +{ + append_string(zconftext + 1, zconfleng - 1); + } + YY_BREAK +case 58: +YY_RULE_SETUP +{ + if (str == zconftext[0]) { + BEGIN(PARAM); + zconflval.string = text; + return T_WORD_QUOTE; + } else + append_string(zconftext, 1); + } + YY_BREAK +case 59: +/* rule 59 can match eol */ +YY_RULE_SETUP +{ + printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno()); + current_file->lineno++; + BEGIN(INITIAL); + return T_EOL; + } + YY_BREAK +case YY_STATE_EOF(STRING): +{ + BEGIN(INITIAL); + } + YY_BREAK + +case 60: +YY_RULE_SETUP +{ + ts = 0; + for (i = 0; i < zconfleng; i++) { + if (zconftext[i] == '\t') + ts = (ts & ~7) + 8; + else + ts++; + } + last_ts = ts; + if (first_ts) { + if (ts < first_ts) { + zconf_endhelp(); + return T_HELPTEXT; + } + ts -= first_ts; + while (ts > 8) { + append_string(" ", 8); + ts -= 8; + } + append_string(" ", ts); + } + } + YY_BREAK +case 61: +/* rule 61 can match eol */ +*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */ +(yy_c_buf_p) = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up zconftext again */ +YY_RULE_SETUP +{ + current_file->lineno++; + zconf_endhelp(); + return T_HELPTEXT; + } + YY_BREAK +case 62: +/* rule 62 can match eol */ +YY_RULE_SETUP +{ + current_file->lineno++; + append_string("\n", 1); + } + YY_BREAK +case 63: +YY_RULE_SETUP +{ + append_string(zconftext, zconfleng); + if (!first_ts) + first_ts = last_ts; + } + YY_BREAK +case YY_STATE_EOF(HELP): +{ + zconf_endhelp(); + return T_HELPTEXT; + } + YY_BREAK + +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(COMMAND): +{ + if (current_buf) { + zconf_endfile(); + return T_EOF; + } + fclose(zconfin); + yyterminate(); +} + YY_BREAK +case 64: +YY_RULE_SETUP +YY_FATAL_ERROR( "flex scanner jammed" ); + YY_BREAK + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed zconfin at a new source and called + * zconflex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = zconfin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( zconfwrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * zconftext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of zconflex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = (yytext_ptr); + register int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + size_t num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + zconfrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + zconfrestart(zconfin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1)]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + register int yy_is_jam; + + yy_current_state = yy_nxt[yy_current_state][1]; + yy_is_jam = (yy_current_state <= 0); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up zconftext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = (yy_n_chars) + 2; + register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + zconfrestart(zconfin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( zconfwrap( ) ) + return EOF; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve zconftext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void zconfrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + zconfensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + zconf_create_buffer(zconfin,YY_BUF_SIZE ); + } + + zconf_init_buffer(YY_CURRENT_BUFFER,input_file ); + zconf_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * zconfpop_buffer_state(); + * zconfpush_buffer_state(new_buffer); + */ + zconfensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + zconf_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (zconfwrap()) processing, but the only time this flag + * is looked at is after zconfwrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void zconf_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + zconfin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE zconf_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) zconfalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + zconf_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with zconf_create_buffer() + * + */ + void zconf_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + zconffree((void *) b->yy_ch_buf ); + + zconffree((void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a zconfrestart() or at EOF. + */ + static void zconf_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + zconf_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then zconf_init_buffer was _probably_ + * called from zconfrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void zconf_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + zconf_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + zconfensure_buffer_stack(); + + /* This block is copied from zconf_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from zconf_switch_to_buffer. */ + zconf_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void zconfpop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + zconf_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + zconf_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void zconfensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)zconfalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)zconfrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + zconf_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to zconflex() will + * scan from a @e copy of @a str. + * @param str a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * zconf_scan_bytes() instead. + */ +YY_BUFFER_STATE zconf_scan_string (yyconst char * str ) +{ + + return zconf_scan_bytes(str,strlen(str) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE zconf_scan_bytes (yyconst char * bytes, int len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = len + 2; + buf = (char *) zconfalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_bytes()" ); + + for ( i = 0; i < len; ++i ) + buf[i] = bytes[i]; + + buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; + + b = zconf_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in zconf_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up zconftext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + zconftext[zconfleng] = (yy_hold_char); \ + (yy_c_buf_p) = zconftext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + zconfleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int zconfget_lineno (void) +{ + + return zconflineno; +} + +/** Get the input stream. + * + */ +FILE *zconfget_in (void) +{ + return zconfin; +} + +/** Get the output stream. + * + */ +FILE *zconfget_out (void) +{ + return zconfout; +} + +/** Get the length of the current token. + * + */ +int zconfget_leng (void) +{ + return zconfleng; +} + +/** Get the current token. + * + */ + +char *zconfget_text (void) +{ + return zconftext; +} + +/** Set the current line number. + * @param line_number + * + */ +void zconfset_lineno (int line_number ) +{ + + zconflineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see zconf_switch_to_buffer + */ +void zconfset_in (FILE * in_str ) +{ + zconfin = in_str ; +} + +void zconfset_out (FILE * out_str ) +{ + zconfout = out_str ; +} + +int zconfget_debug (void) +{ + return zconf_flex_debug; +} + +void zconfset_debug (int bdebug ) +{ + zconf_flex_debug = bdebug ; +} + +/* zconflex_destroy is for both reentrant and non-reentrant scanners. */ +int zconflex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + zconf_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + zconfpop_buffer_state(); + } + + /* Destroy the stack itself. */ + zconffree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *zconfalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *zconfrealloc (void * ptr, yy_size_t size ) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void zconffree (void * ptr ) +{ + free( (char *) ptr ); /* see zconfrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#undef YY_NEW_FILE +#undef YY_FLUSH_BUFFER +#undef yy_set_bol +#undef yy_new_buffer +#undef yy_set_interactive +#undef yytext_ptr +#undef YY_DO_BEFORE_ACTION + +#ifdef YY_DECL_IS_OURS +#undef YY_DECL_IS_OURS +#undef YY_DECL +#endif + +void zconf_starthelp(void) +{ + new_string(); + last_ts = first_ts = 0; + BEGIN(HELP); +} + +static void zconf_endhelp(void) +{ + zconflval.string = text; + BEGIN(INITIAL); +} + +/* + * Try to open specified file with following names: + * ./name + * $(srctree)/name + * The latter is used when srctree is separate from objtree + * when compiling the kernel. + * Return NULL if file is not found. + */ +FILE *zconf_fopen(const char *name) +{ + char *env, fullname[PATH_MAX+1]; + FILE *f; + + f = fopen(name, "r"); + if (!f && name[0] != '/') { + env = getenv(SRCTREE); + if (env) { + sprintf(fullname, "%s/%s", env, name); + f = fopen(fullname, "r"); + } + } + return f; +} + +void zconf_initscan(const char *name) +{ + zconfin = zconf_fopen(name); + if (!zconfin) { + printf("can't find file %s\n", name); + exit(1); + } + + current_buf = malloc(sizeof(*current_buf)); + memset(current_buf, 0, sizeof(*current_buf)); + + current_file = file_lookup(name); + current_file->lineno = 1; + current_file->flags = FILE_BUSY; +} + +void zconf_nextfile(const char *name) +{ + struct file *file = file_lookup(name); + struct buffer *buf = malloc(sizeof(*buf)); + memset(buf, 0, sizeof(*buf)); + + current_buf->state = YY_CURRENT_BUFFER; + zconfin = zconf_fopen(name); + if (!zconfin) { + printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name); + exit(1); + } + zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE)); + buf->parent = current_buf; + current_buf = buf; + + if (file->flags & FILE_BUSY) { + printf("recursive scan (%s)?\n", name); + exit(1); + } + if (file->flags & FILE_SCANNED) { + printf("file %s already scanned?\n", name); + exit(1); + } + file->flags |= FILE_BUSY; + file->lineno = 1; + file->parent = current_file; + current_file = file; +} + +static struct buffer *zconf_endfile(void) +{ + struct buffer *parent; + + current_file->flags |= FILE_SCANNED; + current_file->flags &= ~FILE_BUSY; + current_file = current_file->parent; + + parent = current_buf->parent; + if (parent) { + fclose(zconfin); + zconf_delete_buffer(YY_CURRENT_BUFFER); + zconf_switch_to_buffer(parent->state); + } + free(current_buf); + current_buf = parent; + + return parent; +} + +int zconf_lineno(void) +{ + if (current_buf) + return current_file->lineno - 1; + else + return 0; +} + +char *zconf_curname(void) +{ + if (current_buf) + return current_file->name; + else + return ""; +} + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lkc.h b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lkc.h new file mode 100644 index 0000000..b8a67fc --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lkc.h @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#ifndef LKC_H +#define LKC_H + +#include "expr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef LKC_DIRECT_LINK +#define P(name,type,arg) extern type name arg +#else +#include "lkc_defs.h" +#define P(name,type,arg) extern type (*name ## _p) arg +#endif +#include "lkc_proto.h" +#undef P + +#define SRCTREE "srctree" + +int zconfparse(void); +void zconfdump(FILE *out); + +extern int zconfdebug; +void zconf_starthelp(void); +FILE *zconf_fopen(const char *name); +void zconf_initscan(const char *name); +void zconf_nextfile(const char *name); +int zconf_lineno(void); +char *zconf_curname(void); + +/* confdata.c */ +extern const char conf_def_filename[]; +extern char conf_filename[]; + +char *conf_get_default_confname(void); + +/* kconfig_load.c */ +void kconfig_load(void); + +/* menu.c */ +void menu_init(void); +void menu_add_menu(void); +void menu_end_menu(void); +void menu_add_entry(struct symbol *sym); +void menu_end_entry(void); +void menu_add_dep(struct expr *dep); +struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep); +void menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep); +void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep); +void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep); +void menu_finalize(struct menu *parent); +void menu_set_type(int type); + +/* util.c */ +struct file *file_lookup(const char *name); +int file_write_dep(const char *name); + +struct gstr { + size_t len; + char *s; +}; +struct gstr str_new(void); +struct gstr str_assign(const char *s); +void str_free(struct gstr *gs); +void str_append(struct gstr *gs, const char *s); +void str_printf(struct gstr *gs, const char *fmt, ...); +const char *str_get(struct gstr *gs); + +/* symbol.c */ +void sym_init(void); +void sym_clear_all_valid(void); +void sym_set_changed(struct symbol *sym); +struct symbol *sym_check_deps(struct symbol *sym); +struct property *prop_alloc(enum prop_type type, struct symbol *sym); +struct symbol *prop_get_symbol(struct property *prop); + +static inline tristate sym_get_tristate_value(struct symbol *sym) +{ + return sym->curr.tri; +} + + +static inline struct symbol *sym_get_choice_value(struct symbol *sym) +{ + return (struct symbol *)sym->curr.val; +} + +static inline bool sym_set_choice_value(struct symbol *ch, struct symbol *chval) +{ + return sym_set_tristate_value(chval, yes); +} + +static inline bool sym_is_choice(struct symbol *sym) +{ + return sym->flags & SYMBOL_CHOICE ? true : false; +} + +static inline bool sym_is_choice_value(struct symbol *sym) +{ + return sym->flags & SYMBOL_CHOICEVAL ? true : false; +} + +static inline bool sym_is_optional(struct symbol *sym) +{ + return sym->flags & SYMBOL_OPTIONAL ? true : false; +} + +static inline bool sym_has_value(struct symbol *sym) +{ + return sym->flags & SYMBOL_NEW ? false : true; +} + +#ifdef __cplusplus +} +#endif + +#endif /* LKC_H */ diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lkc_proto.h b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lkc_proto.h new file mode 100644 index 0000000..6dc6d0c --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lkc_proto.h @@ -0,0 +1,40 @@ + +/* confdata.c */ +P(conf_parse,void,(const char *name)); +P(conf_read,int,(const char *name)); +P(conf_write,int,(const char *name)); + +/* menu.c */ +P(rootmenu,struct menu,); + +P(menu_is_visible,bool,(struct menu *menu)); +P(menu_get_prompt,const char *,(struct menu *menu)); +P(menu_get_root_menu,struct menu *,(struct menu *menu)); +P(menu_get_parent_menu,struct menu *,(struct menu *menu)); + +/* symbol.c */ +P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]); +P(sym_change_count,int,); + +P(sym_lookup,struct symbol *,(const char *name, int isconst)); +P(sym_find,struct symbol *,(const char *name)); +P(sym_re_search,struct symbol **,(const char *pattern)); +P(sym_type_name,const char *,(enum symbol_type type)); +P(sym_calc_value,void,(struct symbol *sym)); +P(sym_get_type,enum symbol_type,(struct symbol *sym)); +P(sym_tristate_within_range,bool,(struct symbol *sym,tristate tri)); +P(sym_set_tristate_value,bool,(struct symbol *sym,tristate tri)); +P(sym_toggle_tristate_value,tristate,(struct symbol *sym)); +P(sym_string_valid,bool,(struct symbol *sym, const char *newval)); +P(sym_string_within_range,bool,(struct symbol *sym, const char *str)); +P(sym_set_string_value,bool,(struct symbol *sym, const char *newval)); +P(sym_is_changable,bool,(struct symbol *sym)); +P(sym_get_choice_prop,struct property *,(struct symbol *sym)); +P(sym_get_default_prop,struct property *,(struct symbol *sym)); +P(sym_get_string_value,const char *,(struct symbol *sym)); + +P(prop_get_type_name,const char *,(enum prop_type type)); + +/* expr.c */ +P(expr_compare_type,int,(enum expr_type t1, enum expr_type t2)); +P(expr_print,void,(struct expr *e, void (*fn)(void *, const char *), void *data, int prevtoken)); diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/BIG.FAT.WARNING b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/BIG.FAT.WARNING new file mode 100644 index 0000000..a8999d8 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/BIG.FAT.WARNING @@ -0,0 +1,4 @@ +This is NOT the official version of dialog. This version has been +significantly modified from the original. It is for use by the Linux +kernel configuration script. Please do not bother Savio Lam with +questions about this program. diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/checklist.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/checklist.c new file mode 100644 index 0000000..71de4a1 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/checklist.c @@ -0,0 +1,372 @@ +/* + * checklist.c -- implements the checklist box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension + * Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "dialog.h" + +static int list_width, check_x, item_x, checkflag; + +/* + * Print list item + */ +static void +print_item (WINDOW * win, const char *item, int status, + int choice, int selected) +{ + int i; + + /* Clear 'residue' of last item */ + wattrset (win, menubox_attr); + wmove (win, choice, 0); + for (i = 0; i < list_width; i++) + waddch (win, ' '); + + wmove (win, choice, check_x); + wattrset (win, selected ? check_selected_attr : check_attr); + if (checkflag == FLAG_CHECK) + wprintw (win, "[%c]", status ? 'X' : ' '); + else + wprintw (win, "(%c)", status ? 'X' : ' '); + + wattrset (win, selected ? tag_selected_attr : tag_attr); + mvwaddch(win, choice, item_x, item[0]); + wattrset (win, selected ? item_selected_attr : item_attr); + waddstr (win, (char *)item+1); + if (selected) { + wmove (win, choice, check_x+1); + wrefresh (win); + } +} + +/* + * Print the scroll indicators. + */ +static void +print_arrows (WINDOW * win, int choice, int item_no, int scroll, + int y, int x, int height) +{ + wmove(win, y, x); + + if (scroll > 0) { + wattrset (win, uarrow_attr); + waddch (win, ACS_UARROW); + waddstr (win, "(-)"); + } + else { + wattrset (win, menubox_attr); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + } + + y = y + height + 1; + wmove(win, y, x); + + if ((height < item_no) && (scroll + choice < item_no - 1)) { + wattrset (win, darrow_attr); + waddch (win, ACS_DARROW); + waddstr (win, "(+)"); + } + else { + wattrset (win, menubox_border_attr); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + } +} + +/* + * Display the termination buttons + */ +static void +print_buttons( WINDOW *dialog, int height, int width, int selected) +{ + int x = width / 2 - 11; + int y = height - 2; + + print_button (dialog, "Select", y, x, selected == 0); + print_button (dialog, " Help ", y, x + 14, selected == 1); + + wmove(dialog, y, x+1 + 14*selected); + wrefresh (dialog); +} + +/* + * Display a dialog box with a list of options that can be turned on or off + * The `flag' parameter is used to select between radiolist and checklist. + */ +int +dialog_checklist (const char *title, const char *prompt, int height, int width, + int list_height, int item_no, struct dialog_list_item ** items, + int flag) + +{ + int i, x, y, box_x, box_y; + int key = 0, button = 0, choice = 0, scroll = 0, max_choice, *status; + WINDOW *dialog, *list; + + checkflag = flag; + + /* Allocate space for storing item on/off status */ + if ((status = malloc (sizeof (int) * item_no)) == NULL) { + endwin (); + fprintf (stderr, + "\nCan't allocate memory in dialog_checklist().\n"); + exit (-1); + } + + /* Initializes status */ + for (i = 0; i < item_no; i++) { + status[i] = (items[i]->selected == 1); /* ON */ + if ((!choice && status[i]) || items[i]->selected == 2) /* SELECTED */ + choice = i + 1; + } + if (choice) + choice--; + + max_choice = MIN (list_height, item_no); + + /* center dialog box on screen */ + x = (COLS - width) / 2; + y = (LINES - height) / 2; + + draw_shadow (stdscr, y, x, height, width); + + dialog = newwin (height, width, y, x); + keypad (dialog, TRUE); + + draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr); + wattrset (dialog, border_attr); + mvwaddch (dialog, height-3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch (dialog, ACS_HLINE); + wattrset (dialog, dialog_attr); + waddch (dialog, ACS_RTEE); + + if (title != NULL && strlen(title) >= width-2 ) { + /* truncate long title -- mec */ + char * title2 = malloc(width-2+1); + memcpy( title2, title, width-2 ); + title2[width-2] = '\0'; + title = title2; + } + + if (title != NULL) { + wattrset (dialog, title_attr); + mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' '); + waddstr (dialog, (char *)title); + waddch (dialog, ' '); + } + + wattrset (dialog, dialog_attr); + print_autowrap (dialog, prompt, width - 2, 1, 3); + + list_width = width - 6; + box_y = height - list_height - 5; + box_x = (width - list_width) / 2 - 1; + + /* create new window for the list */ + list = subwin (dialog, list_height, list_width, y+box_y+1, x+box_x+1); + + keypad (list, TRUE); + + /* draw a box around the list items */ + draw_box (dialog, box_y, box_x, list_height + 2, list_width + 2, + menubox_border_attr, menubox_attr); + + /* Find length of longest item in order to center checklist */ + check_x = 0; + for (i = 0; i < item_no; i++) + check_x = MAX (check_x, + strlen (items[i]->name) + 4); + + check_x = (list_width - check_x) / 2; + item_x = check_x + 4; + + if (choice >= list_height) { + scroll = choice - list_height + 1; + choice -= scroll; + } + + /* Print the list */ + for (i = 0; i < max_choice; i++) { + print_item (list, items[scroll + i]->name, + status[i+scroll], i, i == choice); + } + + print_arrows(dialog, choice, item_no, scroll, + box_y, box_x + check_x + 5, list_height); + + print_buttons(dialog, height, width, 0); + + wnoutrefresh (list); + wnoutrefresh (dialog); + doupdate (); + + while (key != ESC) { + key = wgetch (dialog); + + for (i = 0; i < max_choice; i++) + if (toupper(key) == toupper(items[scroll + i]->name[0])) + break; + + + if ( i < max_choice || key == KEY_UP || key == KEY_DOWN || + key == '+' || key == '-' ) { + if (key == KEY_UP || key == '-') { + if (!choice) { + if (!scroll) + continue; + /* Scroll list down */ + if (list_height > 1) { + /* De-highlight current first item */ + print_item (list, items[scroll]->name, + status[scroll], 0, FALSE); + scrollok (list, TRUE); + wscrl (list, -1); + scrollok (list, FALSE); + } + scroll--; + print_item (list, items[scroll]->name, + status[scroll], 0, TRUE); + wnoutrefresh (list); + + print_arrows(dialog, choice, item_no, scroll, + box_y, box_x + check_x + 5, list_height); + + wrefresh (dialog); + + continue; /* wait for another key press */ + } else + i = choice - 1; + } else if (key == KEY_DOWN || key == '+') { + if (choice == max_choice - 1) { + if (scroll + choice >= item_no - 1) + continue; + /* Scroll list up */ + if (list_height > 1) { + /* De-highlight current last item before scrolling up */ + print_item (list, items[scroll + max_choice - 1]->name, + status[scroll + max_choice - 1], + max_choice - 1, FALSE); + scrollok (list, TRUE); + scroll (list); + scrollok (list, FALSE); + } + scroll++; + print_item (list, items[scroll + max_choice - 1]->name, + status[scroll + max_choice - 1], + max_choice - 1, TRUE); + wnoutrefresh (list); + + print_arrows(dialog, choice, item_no, scroll, + box_y, box_x + check_x + 5, list_height); + + wrefresh (dialog); + + continue; /* wait for another key press */ + } else + i = choice + 1; + } + if (i != choice) { + /* De-highlight current item */ + print_item (list, items[scroll + choice]->name, + status[scroll + choice], choice, FALSE); + /* Highlight new item */ + choice = i; + print_item (list, items[scroll + choice]->name, + status[scroll + choice], choice, TRUE); + wnoutrefresh (list); + wrefresh (dialog); + } + continue; /* wait for another key press */ + } + switch (key) { + case 'H': + case 'h': + case '?': + for (i = 0; i < item_no; i++) + items[i]->selected = 0; + items[scroll + choice]->selected = 1; + delwin (dialog); + free (status); + return 1; + case TAB: + case KEY_LEFT: + case KEY_RIGHT: + button = ((key == KEY_LEFT ? --button : ++button) < 0) + ? 1 : (button > 1 ? 0 : button); + + print_buttons(dialog, height, width, button); + wrefresh (dialog); + break; + case 'S': + case 's': + case ' ': + case '\n': + if (!button) { + if (flag == FLAG_CHECK) { + status[scroll + choice] = !status[scroll + choice]; + wmove (list, choice, check_x); + wattrset (list, check_selected_attr); + wprintw (list, "[%c]", status[scroll + choice] ? 'X' : ' '); + } else { + if (!status[scroll + choice]) { + for (i = 0; i < item_no; i++) + status[i] = 0; + status[scroll + choice] = 1; + for (i = 0; i < max_choice; i++) + print_item (list, items[scroll + i]->name, + status[scroll + i], i, i == choice); + } + } + wnoutrefresh (list); + wrefresh (dialog); + + for (i = 0; i < item_no; i++) { + items[i]->selected = status[i]; + } + } else { + for (i = 0; i < item_no; i++) + items[i]->selected = 0; + items[scroll + choice]->selected = 1; + } + delwin (dialog); + free (status); + return button; + case 'X': + case 'x': + key = ESC; + case ESC: + break; + } + + /* Now, update everything... */ + doupdate (); + } + + + delwin (dialog); + free (status); + return -1; /* ESC pressed */ +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/colors.h b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/colors.h new file mode 100644 index 0000000..d34dd37 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/colors.h @@ -0,0 +1,161 @@ +/* + * colors.h -- color attribute definitions + * + * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +/* + * Default color definitions + * + * *_FG = foreground + * *_BG = background + * *_HL = highlight? + */ +#define SCREEN_FG COLOR_CYAN +#define SCREEN_BG COLOR_BLUE +#define SCREEN_HL TRUE + +#define SHADOW_FG COLOR_BLACK +#define SHADOW_BG COLOR_BLACK +#define SHADOW_HL TRUE + +#define DIALOG_FG COLOR_BLACK +#define DIALOG_BG COLOR_WHITE +#define DIALOG_HL FALSE + +#define TITLE_FG COLOR_YELLOW +#define TITLE_BG COLOR_WHITE +#define TITLE_HL TRUE + +#define BORDER_FG COLOR_WHITE +#define BORDER_BG COLOR_WHITE +#define BORDER_HL TRUE + +#define BUTTON_ACTIVE_FG COLOR_WHITE +#define BUTTON_ACTIVE_BG COLOR_BLUE +#define BUTTON_ACTIVE_HL TRUE + +#define BUTTON_INACTIVE_FG COLOR_BLACK +#define BUTTON_INACTIVE_BG COLOR_WHITE +#define BUTTON_INACTIVE_HL FALSE + +#define BUTTON_KEY_ACTIVE_FG COLOR_WHITE +#define BUTTON_KEY_ACTIVE_BG COLOR_BLUE +#define BUTTON_KEY_ACTIVE_HL TRUE + +#define BUTTON_KEY_INACTIVE_FG COLOR_RED +#define BUTTON_KEY_INACTIVE_BG COLOR_WHITE +#define BUTTON_KEY_INACTIVE_HL FALSE + +#define BUTTON_LABEL_ACTIVE_FG COLOR_YELLOW +#define BUTTON_LABEL_ACTIVE_BG COLOR_BLUE +#define BUTTON_LABEL_ACTIVE_HL TRUE + +#define BUTTON_LABEL_INACTIVE_FG COLOR_BLACK +#define BUTTON_LABEL_INACTIVE_BG COLOR_WHITE +#define BUTTON_LABEL_INACTIVE_HL TRUE + +#define INPUTBOX_FG COLOR_BLACK +#define INPUTBOX_BG COLOR_WHITE +#define INPUTBOX_HL FALSE + +#define INPUTBOX_BORDER_FG COLOR_BLACK +#define INPUTBOX_BORDER_BG COLOR_WHITE +#define INPUTBOX_BORDER_HL FALSE + +#define SEARCHBOX_FG COLOR_BLACK +#define SEARCHBOX_BG COLOR_WHITE +#define SEARCHBOX_HL FALSE + +#define SEARCHBOX_TITLE_FG COLOR_YELLOW +#define SEARCHBOX_TITLE_BG COLOR_WHITE +#define SEARCHBOX_TITLE_HL TRUE + +#define SEARCHBOX_BORDER_FG COLOR_WHITE +#define SEARCHBOX_BORDER_BG COLOR_WHITE +#define SEARCHBOX_BORDER_HL TRUE + +#define POSITION_INDICATOR_FG COLOR_YELLOW +#define POSITION_INDICATOR_BG COLOR_WHITE +#define POSITION_INDICATOR_HL TRUE + +#define MENUBOX_FG COLOR_BLACK +#define MENUBOX_BG COLOR_WHITE +#define MENUBOX_HL FALSE + +#define MENUBOX_BORDER_FG COLOR_WHITE +#define MENUBOX_BORDER_BG COLOR_WHITE +#define MENUBOX_BORDER_HL TRUE + +#define ITEM_FG COLOR_BLACK +#define ITEM_BG COLOR_WHITE +#define ITEM_HL FALSE + +#define ITEM_SELECTED_FG COLOR_WHITE +#define ITEM_SELECTED_BG COLOR_BLUE +#define ITEM_SELECTED_HL TRUE + +#define TAG_FG COLOR_YELLOW +#define TAG_BG COLOR_WHITE +#define TAG_HL TRUE + +#define TAG_SELECTED_FG COLOR_YELLOW +#define TAG_SELECTED_BG COLOR_BLUE +#define TAG_SELECTED_HL TRUE + +#define TAG_KEY_FG COLOR_YELLOW +#define TAG_KEY_BG COLOR_WHITE +#define TAG_KEY_HL TRUE + +#define TAG_KEY_SELECTED_FG COLOR_YELLOW +#define TAG_KEY_SELECTED_BG COLOR_BLUE +#define TAG_KEY_SELECTED_HL TRUE + +#define CHECK_FG COLOR_BLACK +#define CHECK_BG COLOR_WHITE +#define CHECK_HL FALSE + +#define CHECK_SELECTED_FG COLOR_WHITE +#define CHECK_SELECTED_BG COLOR_BLUE +#define CHECK_SELECTED_HL TRUE + +#define UARROW_FG COLOR_GREEN +#define UARROW_BG COLOR_WHITE +#define UARROW_HL TRUE + +#define DARROW_FG COLOR_GREEN +#define DARROW_BG COLOR_WHITE +#define DARROW_HL TRUE + +/* End of default color definitions */ + +#define C_ATTR(x,y) ((x ? A_BOLD : 0) | COLOR_PAIR((y))) +#define COLOR_NAME_LEN 10 +#define COLOR_COUNT 8 + +/* + * Global variables + */ + +typedef struct { + char name[COLOR_NAME_LEN]; + int value; +} color_names_st; + +extern color_names_st color_names[]; +extern int color_table[][3]; diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/dialog.h b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/dialog.h new file mode 100644 index 0000000..7bab3ad --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/dialog.h @@ -0,0 +1,199 @@ + +/* + * dialog.h -- common declarations for all dialog modules + * + * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include + +#ifdef CURSES_LOC +#ifdef __sun__ +#define CURS_MACROS +#endif +#include CURSES_LOC + +/* + * Colors in ncurses 1.9.9e do not work properly since foreground and + * background colors are OR'd rather than separately masked. This version + * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible + * with standard curses. The simplest fix (to make this work with standard + * curses) uses the wbkgdset() function, not used in the original hack. + * Turn it off if we're building with 1.9.9e, since it just confuses things. + */ +#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE) +#define OLD_NCURSES 1 +#undef wbkgdset +#define wbkgdset(w,p) /*nothing*/ +#else +#define OLD_NCURSES 0 +#endif + +#define TR(params) _tracef params + +#define ESC 27 +#define TAB 9 +#define MAX_LEN 2048 +#define BUF_SIZE (10*1024) +#define MIN(x,y) (x < y ? x : y) +#define MAX(x,y) (x > y ? x : y) + + +#ifndef ACS_ULCORNER +#define ACS_ULCORNER '+' +#endif +#ifndef ACS_LLCORNER +#define ACS_LLCORNER '+' +#endif +#ifndef ACS_URCORNER +#define ACS_URCORNER '+' +#endif +#ifndef ACS_LRCORNER +#define ACS_LRCORNER '+' +#endif +#ifndef ACS_HLINE +#define ACS_HLINE '-' +#endif +#ifndef ACS_VLINE +#define ACS_VLINE '|' +#endif +#ifndef ACS_LTEE +#define ACS_LTEE '+' +#endif +#ifndef ACS_RTEE +#define ACS_RTEE '+' +#endif +#ifndef ACS_UARROW +#define ACS_UARROW '^' +#endif +#ifndef ACS_DARROW +#define ACS_DARROW 'v' +#endif + +/* + * Attribute names + */ +#define screen_attr attributes[0] +#define shadow_attr attributes[1] +#define dialog_attr attributes[2] +#define title_attr attributes[3] +#define border_attr attributes[4] +#define button_active_attr attributes[5] +#define button_inactive_attr attributes[6] +#define button_key_active_attr attributes[7] +#define button_key_inactive_attr attributes[8] +#define button_label_active_attr attributes[9] +#define button_label_inactive_attr attributes[10] +#define inputbox_attr attributes[11] +#define inputbox_border_attr attributes[12] +#define searchbox_attr attributes[13] +#define searchbox_title_attr attributes[14] +#define searchbox_border_attr attributes[15] +#define position_indicator_attr attributes[16] +#define menubox_attr attributes[17] +#define menubox_border_attr attributes[18] +#define item_attr attributes[19] +#define item_selected_attr attributes[20] +#define tag_attr attributes[21] +#define tag_selected_attr attributes[22] +#define tag_key_attr attributes[23] +#define tag_key_selected_attr attributes[24] +#define check_attr attributes[25] +#define check_selected_attr attributes[26] +#define uarrow_attr attributes[27] +#define darrow_attr attributes[28] + +/* number of attributes */ +#define ATTRIBUTE_COUNT 29 + +/* + * Global variables + */ +extern bool use_colors; + +extern chtype attributes[]; +#endif + +extern const char *backtitle; + +struct dialog_list_item { + char *name; + int namelen; + char *tag; + int selected; /* Set to 1 by dialog_*() function. */ +}; + +/* + * Function prototypes + */ + +void init_dialog (void); +void end_dialog (void); +void dialog_clear (void); +#ifdef CURSES_LOC +void attr_clear (WINDOW * win, int height, int width, chtype attr); +void color_setup (void); +void print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x); +void print_button (WINDOW * win, const char *label, int y, int x, int selected); +void draw_box (WINDOW * win, int y, int x, int height, int width, chtype box, + chtype border); +void draw_shadow (WINDOW * win, int y, int x, int height, int width); +#endif + +int first_alpha (const char *string, const char *exempt); +int dialog_yesno (const char *title, const char *prompt, int height, int width); +int dialog_msgbox (const char *title, const char *prompt, int height, + int width, int pause); +int dialog_textbox (const char *title, const char *file, int height, int width); +int dialog_menu (const char *title, const char *prompt, int height, int width, + int menu_height, const char *choice, int item_no, + struct dialog_list_item ** items); +int dialog_checklist (const char *title, const char *prompt, int height, + int width, int list_height, int item_no, + struct dialog_list_item ** items, int flag); +extern unsigned char dialog_input_result[]; +int dialog_inputbox (const char *title, const char *prompt, int height, + int width, const char *init); + +struct dialog_list_item *first_sel_item(int item_no, + struct dialog_list_item ** items); + +/* + * This is the base for fictitious keys, which activate + * the buttons. + * + * Mouse-generated keys are the following: + * -- the first 32 are used as numbers, in addition to '0'-'9' + * -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o') + * -- uppercase chars are used to invoke the button (M_EVENT + 'O') + */ +#ifdef CURSES_LOC +#define M_EVENT (KEY_MAX+1) +#endif + + +/* + * The `flag' parameter in checklist is used to select between + * radiolist and checklist + */ +#define FLAG_CHECK 1 +#define FLAG_RADIO 0 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/inputbox.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/inputbox.c new file mode 100644 index 0000000..fa7bebc --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/inputbox.c @@ -0,0 +1,240 @@ +/* + * inputbox.c -- implements the input box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "dialog.h" + +unsigned char dialog_input_result[MAX_LEN + 1]; + +/* + * Print the termination buttons + */ +static void +print_buttons(WINDOW *dialog, int height, int width, int selected) +{ + int x = width / 2 - 11; + int y = height - 2; + + print_button (dialog, " Ok ", y, x, selected==0); + print_button (dialog, " Help ", y, x + 14, selected==1); + + wmove(dialog, y, x+1+14*selected); + wrefresh(dialog); +} + +/* + * Display a dialog box for inputing a string + */ +int +dialog_inputbox (const char *title, const char *prompt, int height, int width, + const char *init) +{ + int i, x, y, box_y, box_x, box_width; + int input_x = 0, scroll = 0, key = 0, button = -1; + unsigned char *instr = dialog_input_result; + WINDOW *dialog; + + /* center dialog box on screen */ + x = (COLS - width) / 2; + y = (LINES - height) / 2; + + + draw_shadow (stdscr, y, x, height, width); + + dialog = newwin (height, width, y, x); + keypad (dialog, TRUE); + + draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr); + wattrset (dialog, border_attr); + mvwaddch (dialog, height-3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch (dialog, ACS_HLINE); + wattrset (dialog, dialog_attr); + waddch (dialog, ACS_RTEE); + + if (title != NULL && strlen(title) >= width-2 ) { + /* truncate long title -- mec */ + char * title2 = malloc(width-2+1); + memcpy( title2, title, width-2 ); + title2[width-2] = '\0'; + title = title2; + } + + if (title != NULL) { + wattrset (dialog, title_attr); + mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' '); + waddstr (dialog, (char *)title); + waddch (dialog, ' '); + } + + wattrset (dialog, dialog_attr); + print_autowrap (dialog, prompt, width - 2, 1, 3); + + /* Draw the input field box */ + box_width = width - 6; + getyx (dialog, y, x); + box_y = y + 2; + box_x = (width - box_width) / 2; + draw_box (dialog, y + 1, box_x - 1, 3, box_width + 2, + border_attr, dialog_attr); + + print_buttons(dialog, height, width, 0); + + /* Set up the initial value */ + wmove (dialog, box_y, box_x); + wattrset (dialog, inputbox_attr); + + if (!init) + instr[0] = '\0'; + else + strcpy (instr, init); + + input_x = strlen (instr); + + if (input_x >= box_width) { + scroll = input_x - box_width + 1; + input_x = box_width - 1; + for (i = 0; i < box_width - 1; i++) + waddch (dialog, instr[scroll + i]); + } else + waddstr (dialog, instr); + + wmove (dialog, box_y, box_x + input_x); + + wrefresh (dialog); + + while (key != ESC) { + key = wgetch (dialog); + + if (button == -1) { /* Input box selected */ + switch (key) { + case TAB: + case KEY_UP: + case KEY_DOWN: + break; + case KEY_LEFT: + continue; + case KEY_RIGHT: + continue; + case KEY_BACKSPACE: + case 127: + if (input_x || scroll) { + wattrset (dialog, inputbox_attr); + if (!input_x) { + scroll = scroll < box_width - 1 ? + 0 : scroll - (box_width - 1); + wmove (dialog, box_y, box_x); + for (i = 0; i < box_width; i++) + waddch (dialog, instr[scroll + input_x + i] ? + instr[scroll + input_x + i] : ' '); + input_x = strlen (instr) - scroll; + } else + input_x--; + instr[scroll + input_x] = '\0'; + mvwaddch (dialog, box_y, input_x + box_x, ' '); + wmove (dialog, box_y, input_x + box_x); + wrefresh (dialog); + } + continue; + default: + if (key < 0x100 && isprint (key)) { + if (scroll + input_x < MAX_LEN) { + wattrset (dialog, inputbox_attr); + instr[scroll + input_x] = key; + instr[scroll + input_x + 1] = '\0'; + if (input_x == box_width - 1) { + scroll++; + wmove (dialog, box_y, box_x); + for (i = 0; i < box_width - 1; i++) + waddch (dialog, instr[scroll + i]); + } else { + wmove (dialog, box_y, input_x++ + box_x); + waddch (dialog, key); + } + wrefresh (dialog); + } else + flash (); /* Alarm user about overflow */ + continue; + } + } + } + switch (key) { + case 'O': + case 'o': + delwin (dialog); + return 0; + case 'H': + case 'h': + delwin (dialog); + return 1; + case KEY_UP: + case KEY_LEFT: + switch (button) { + case -1: + button = 1; /* Indicates "Cancel" button is selected */ + print_buttons(dialog, height, width, 1); + break; + case 0: + button = -1; /* Indicates input box is selected */ + print_buttons(dialog, height, width, 0); + wmove (dialog, box_y, box_x + input_x); + wrefresh (dialog); + break; + case 1: + button = 0; /* Indicates "OK" button is selected */ + print_buttons(dialog, height, width, 0); + break; + } + break; + case TAB: + case KEY_DOWN: + case KEY_RIGHT: + switch (button) { + case -1: + button = 0; /* Indicates "OK" button is selected */ + print_buttons(dialog, height, width, 0); + break; + case 0: + button = 1; /* Indicates "Cancel" button is selected */ + print_buttons(dialog, height, width, 1); + break; + case 1: + button = -1; /* Indicates input box is selected */ + print_buttons(dialog, height, width, 0); + wmove (dialog, box_y, box_x + input_x); + wrefresh (dialog); + break; + } + break; + case ' ': + case '\n': + delwin (dialog); + return (button == -1 ? 0 : button); + case 'X': + case 'x': + key = ESC; + case ESC: + break; + } + } + + delwin (dialog); + return -1; /* ESC pressed */ +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/menubox.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/menubox.c new file mode 100644 index 0000000..873dc58 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/menubox.c @@ -0,0 +1,438 @@ +/* + * menubox.c -- implements the menu box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* + * Changes by Clifford Wolf (god@clifford.at) + * + * [ 1998-06-13 ] + * + * *) A bugfix for the Page-Down problem + * + * *) Formerly when I used Page Down and Page Up, the cursor would be set + * to the first position in the menu box. Now lxdialog is a bit + * smarter and works more like other menu systems (just have a look at + * it). + * + * *) Formerly if I selected something my scrolling would be broken because + * lxdialog is re-invoked by the Menuconfig shell script, can't + * remember the last scrolling position, and just sets it so that the + * cursor is at the bottom of the box. Now it writes the temporary file + * lxdialog.scrltmp which contains this information. The file is + * deleted by lxdialog if the user leaves a submenu or enters a new + * one, but it would be nice if Menuconfig could make another "rm -f" + * just to be sure. Just try it out - you will recognise a difference! + * + * [ 1998-06-14 ] + * + * *) Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files + * and menus change their size on the fly. + * + * *) If for some reason the last scrolling position is not saved by + * lxdialog, it sets the scrolling so that the selected item is in the + * middle of the menu box, not at the bottom. + * + * 02 January 1999, Michael Elizabeth Chastain (mec@shout.net) + * Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus. + * This fixes a bug in Menuconfig where using ' ' to descend into menus + * would leave mis-synchronized lxdialog.scrltmp files lying around, + * fscanf would read in 'scroll', and eventually that value would get used. + */ + +#include "dialog.h" + +static int menu_width, item_x; + +/* + * Print menu item + */ +static void +print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey) +{ + int j; + char menu_item[menu_width+1]; + + strncpy(menu_item, item, menu_width); + menu_item[menu_width] = 0; + j = first_alpha(menu_item, "YyNnMmHh"); + + /* Clear 'residue' of last item */ + wattrset (win, menubox_attr); + wmove (win, choice, 0); +#if OLD_NCURSES + { + int i; + for (i = 0; i < menu_width; i++) + waddch (win, ' '); + } +#else + wclrtoeol(win); +#endif + wattrset (win, selected ? item_selected_attr : item_attr); + mvwaddstr (win, choice, item_x, menu_item); + if (hotkey) { + wattrset (win, selected ? tag_key_selected_attr : tag_key_attr); + mvwaddch(win, choice, item_x+j, menu_item[j]); + } + if (selected) { + wmove (win, choice, item_x+1); + wrefresh (win); + } +} + +/* + * Print the scroll indicators. + */ +static void +print_arrows (WINDOW * win, int item_no, int scroll, + int y, int x, int height) +{ + int cur_y, cur_x; + + getyx(win, cur_y, cur_x); + + wmove(win, y, x); + + if (scroll > 0) { + wattrset (win, uarrow_attr); + waddch (win, ACS_UARROW); + waddstr (win, "(-)"); + } + else { + wattrset (win, menubox_attr); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + } + + y = y + height + 1; + wmove(win, y, x); + + if ((height < item_no) && (scroll + height < item_no)) { + wattrset (win, darrow_attr); + waddch (win, ACS_DARROW); + waddstr (win, "(+)"); + } + else { + wattrset (win, menubox_border_attr); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + waddch (win, ACS_HLINE); + } + + wmove(win, cur_y, cur_x); +} + +/* + * Display the termination buttons. + */ +static void +print_buttons (WINDOW *win, int height, int width, int selected) +{ + int x = width / 2 - 16; + int y = height - 2; + + print_button (win, "Select", y, x, selected == 0); + print_button (win, " Exit ", y, x + 12, selected == 1); + print_button (win, " Help ", y, x + 24, selected == 2); + + wmove(win, y, x+1+12*selected); + wrefresh (win); +} + +/* + * Display a menu for choosing among a number of options + */ +int +dialog_menu (const char *title, const char *prompt, int height, int width, + int menu_height, const char *current, int item_no, + struct dialog_list_item ** items) +{ + int i, j, x, y, box_x, box_y; + int key = 0, button = 0, scroll = 0, choice = 0, first_item = 0, max_choice; + WINDOW *dialog, *menu; + FILE *f; + + max_choice = MIN (menu_height, item_no); + + /* center dialog box on screen */ + x = (COLS - width) / 2; + y = (LINES - height) / 2; + + draw_shadow (stdscr, y, x, height, width); + + dialog = newwin (height, width, y, x); + keypad (dialog, TRUE); + + draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr); + wattrset (dialog, border_attr); + mvwaddch (dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch (dialog, ACS_HLINE); + wattrset (dialog, dialog_attr); + wbkgdset (dialog, dialog_attr & A_COLOR); + waddch (dialog, ACS_RTEE); + + if (title != NULL && strlen(title) >= width-2 ) { + /* truncate long title -- mec */ + char * title2 = malloc(width-2+1); + memcpy( title2, title, width-2 ); + title2[width-2] = '\0'; + title = title2; + } + + if (title != NULL) { + wattrset (dialog, title_attr); + mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' '); + waddstr (dialog, (char *)title); + waddch (dialog, ' '); + } + + wattrset (dialog, dialog_attr); + print_autowrap (dialog, prompt, width - 2, 1, 3); + + menu_width = width - 6; + box_y = height - menu_height - 5; + box_x = (width - menu_width) / 2 - 1; + + /* create new window for the menu */ + menu = subwin (dialog, menu_height, menu_width, + y + box_y + 1, x + box_x + 1); + keypad (menu, TRUE); + + /* draw a box around the menu items */ + draw_box (dialog, box_y, box_x, menu_height + 2, menu_width + 2, + menubox_border_attr, menubox_attr); + + /* + * Find length of longest item in order to center menu. + * Set 'choice' to default item. + */ + item_x = 0; + for (i = 0; i < item_no; i++) { + item_x = MAX (item_x, MIN(menu_width, strlen (items[i]->name) + 2)); + if (strcmp(current, items[i]->tag) == 0) choice = i; + } + + item_x = (menu_width - item_x) / 2; + + /* get the scroll info from the temp file */ + if ( (f=fopen("lxdialog.scrltmp","r")) != NULL ) { + if ( (fscanf(f,"%d\n",&scroll) == 1) && (scroll <= choice) && + (scroll+max_choice > choice) && (scroll >= 0) && + (scroll+max_choice <= item_no) ) { + first_item = scroll; + choice = choice - scroll; + fclose(f); + } else { + scroll=0; + remove("lxdialog.scrltmp"); + fclose(f); + f=NULL; + } + } + if ( (choice >= max_choice) || (f==NULL && choice >= max_choice/2) ) { + if (choice >= item_no-max_choice/2) + scroll = first_item = item_no-max_choice; + else + scroll = first_item = choice - max_choice/2; + choice = choice - scroll; + } + + /* Print the menu */ + for (i=0; i < max_choice; i++) { + print_item (menu, items[first_item + i]->name, i, i == choice, + (items[first_item + i]->tag[0] != ':')); + } + + wnoutrefresh (menu); + + print_arrows(dialog, item_no, scroll, + box_y, box_x+item_x+1, menu_height); + + print_buttons (dialog, height, width, 0); + wmove (menu, choice, item_x+1); + wrefresh (menu); + + while (key != ESC) { + key = wgetch(menu); + + if (key < 256 && isalpha(key)) key = tolower(key); + + if (strchr("ynmh", key)) + i = max_choice; + else { + for (i = choice+1; i < max_choice; i++) { + j = first_alpha(items[scroll + i]->name, "YyNnMmHh"); + if (key == tolower(items[scroll + i]->name[j])) + break; + } + if (i == max_choice) + for (i = 0; i < max_choice; i++) { + j = first_alpha(items[scroll + i]->name, "YyNnMmHh"); + if (key == tolower(items[scroll + i]->name[j])) + break; + } + } + + if (i < max_choice || + key == KEY_UP || key == KEY_DOWN || + key == '-' || key == '+' || + key == KEY_PPAGE || key == KEY_NPAGE) { + + print_item (menu, items[scroll + choice]->name, choice, FALSE, + (items[scroll + choice]->tag[0] != ':')); + + if (key == KEY_UP || key == '-') { + if (choice < 2 && scroll) { + /* Scroll menu down */ + scrollok (menu, TRUE); + wscrl (menu, -1); + scrollok (menu, FALSE); + + scroll--; + + print_item (menu, items[scroll]->name, 0, FALSE, + (items[scroll]->tag[0] != ':')); + } else + choice = MAX(choice - 1, 0); + + } else if (key == KEY_DOWN || key == '+') { + + print_item (menu, items[scroll + choice]->name, choice, FALSE, + (items[scroll + choice]->tag[0] != ':')); + + if ((choice > max_choice-3) && + (scroll + max_choice < item_no) + ) { + /* Scroll menu up */ + scrollok (menu, TRUE); + scroll (menu); + scrollok (menu, FALSE); + + scroll++; + + print_item (menu, items[scroll + max_choice - 1]->name, + max_choice-1, FALSE, + (items[scroll + max_choice - 1]->tag[0] != ':')); + } else + choice = MIN(choice+1, max_choice-1); + + } else if (key == KEY_PPAGE) { + scrollok (menu, TRUE); + for (i=0; (i < max_choice); i++) { + if (scroll > 0) { + wscrl (menu, -1); + scroll--; + print_item (menu, items[scroll]->name, 0, FALSE, + (items[scroll]->tag[0] != ':')); + } else { + if (choice > 0) + choice--; + } + } + scrollok (menu, FALSE); + + } else if (key == KEY_NPAGE) { + for (i=0; (i < max_choice); i++) { + if (scroll+max_choice < item_no) { + scrollok (menu, TRUE); + scroll(menu); + scrollok (menu, FALSE); + scroll++; + print_item (menu, items[scroll + max_choice - 1]->name, + max_choice-1, FALSE, + (items[scroll + max_choice - 1]->tag[0] != ':')); + } else { + if (choice+1 < max_choice) + choice++; + } + } + + } else + choice = i; + + print_item (menu, items[scroll + choice]->name, choice, TRUE, + (items[scroll + choice]->tag[0] != ':')); + + print_arrows(dialog, item_no, scroll, + box_y, box_x+item_x+1, menu_height); + + wnoutrefresh (dialog); + wrefresh (menu); + + continue; /* wait for another key press */ + } + + switch (key) { + case KEY_LEFT: + case TAB: + case KEY_RIGHT: + button = ((key == KEY_LEFT ? --button : ++button) < 0) + ? 2 : (button > 2 ? 0 : button); + + print_buttons(dialog, height, width, button); + wrefresh (menu); + break; + case ' ': + case 's': + case 'y': + case 'n': + case 'm': + case '/': + /* save scroll info */ + if ( (f=fopen("lxdialog.scrltmp","w")) != NULL ) { + fprintf(f,"%d\n",scroll); + fclose(f); + } + delwin (dialog); + items[scroll + choice]->selected = 1; + switch (key) { + case 's': return 3; + case 'y': return 3; + case 'n': return 4; + case 'm': return 5; + case ' ': return 6; + case '/': return 7; + } + return 0; + case 'h': + case '?': + button = 2; + case '\n': + delwin (dialog); + items[scroll + choice]->selected = 1; + + remove("lxdialog.scrltmp"); + return button; + case 'e': + case 'x': + key = ESC; + case ESC: + break; + } + } + + delwin (dialog); + remove("lxdialog.scrltmp"); + return -1; /* ESC pressed */ +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/msgbox.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/msgbox.c new file mode 100644 index 0000000..93692e1 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/msgbox.c @@ -0,0 +1,85 @@ +/* + * msgbox.c -- implements the message box and info box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "dialog.h" + +/* + * Display a message box. Program will pause and display an "OK" button + * if the parameter 'pause' is non-zero. + */ +int +dialog_msgbox (const char *title, const char *prompt, int height, int width, + int pause) +{ + int i, x, y, key = 0; + WINDOW *dialog; + + /* center dialog box on screen */ + x = (COLS - width) / 2; + y = (LINES - height) / 2; + + draw_shadow (stdscr, y, x, height, width); + + dialog = newwin (height, width, y, x); + keypad (dialog, TRUE); + + draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr); + + if (title != NULL && strlen(title) >= width-2 ) { + /* truncate long title -- mec */ + char * title2 = malloc(width-2+1); + memcpy( title2, title, width-2 ); + title2[width-2] = '\0'; + title = title2; + } + + if (title != NULL) { + wattrset (dialog, title_attr); + mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' '); + waddstr (dialog, (char *)title); + waddch (dialog, ' '); + } + wattrset (dialog, dialog_attr); + print_autowrap (dialog, prompt, width - 2, 1, 2); + + if (pause) { + wattrset (dialog, border_attr); + mvwaddch (dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch (dialog, ACS_HLINE); + wattrset (dialog, dialog_attr); + waddch (dialog, ACS_RTEE); + + print_button (dialog, " Ok ", + height - 2, width / 2 - 4, TRUE); + + wrefresh (dialog); + while (key != ESC && key != '\n' && key != ' ' && + key != 'O' && key != 'o' && key != 'X' && key != 'x') + key = wgetch (dialog); + } else { + key = '\n'; + wrefresh (dialog); + } + + delwin (dialog); + return key == ESC ? -1 : 0; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/textbox.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/textbox.c new file mode 100644 index 0000000..a5a460b --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/textbox.c @@ -0,0 +1,556 @@ +/* + * textbox.c -- implements the text box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "dialog.h" + +static void back_lines (int n); +static void print_page (WINDOW * win, int height, int width); +static void print_line (WINDOW * win, int row, int width); +static char *get_line (void); +static void print_position (WINDOW * win, int height, int width); + +static int hscroll, fd, file_size, bytes_read; +static int begin_reached = 1, end_reached, page_length; +static char *buf, *page; + +/* + * Display text from a file in a dialog box. + */ +int +dialog_textbox (const char *title, const char *file, int height, int width) +{ + int i, x, y, cur_x, cur_y, fpos, key = 0; + int passed_end; + char search_term[MAX_LEN + 1]; + WINDOW *dialog, *text; + + search_term[0] = '\0'; /* no search term entered yet */ + + /* Open input file for reading */ + if ((fd = open (file, O_RDONLY)) == -1) { + endwin (); + fprintf (stderr, + "\nCan't open input file in dialog_textbox().\n"); + exit (-1); + } + /* Get file size. Actually, 'file_size' is the real file size - 1, + since it's only the last byte offset from the beginning */ + if ((file_size = lseek (fd, 0, SEEK_END)) == -1) { + endwin (); + fprintf (stderr, "\nError getting file size in dialog_textbox().\n"); + exit (-1); + } + /* Restore file pointer to beginning of file after getting file size */ + if (lseek (fd, 0, SEEK_SET) == -1) { + endwin (); + fprintf (stderr, "\nError moving file pointer in dialog_textbox().\n"); + exit (-1); + } + /* Allocate space for read buffer */ + if ((buf = malloc (BUF_SIZE + 1)) == NULL) { + endwin (); + fprintf (stderr, "\nCan't allocate memory in dialog_textbox().\n"); + exit (-1); + } + if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) { + endwin (); + fprintf (stderr, "\nError reading file in dialog_textbox().\n"); + exit (-1); + } + buf[bytes_read] = '\0'; /* mark end of valid data */ + page = buf; /* page is pointer to start of page to be displayed */ + + /* center dialog box on screen */ + x = (COLS - width) / 2; + y = (LINES - height) / 2; + + + draw_shadow (stdscr, y, x, height, width); + + dialog = newwin (height, width, y, x); + keypad (dialog, TRUE); + + /* Create window for text region, used for scrolling text */ + text = subwin (dialog, height - 4, width - 2, y + 1, x + 1); + wattrset (text, dialog_attr); + wbkgdset (text, dialog_attr & A_COLOR); + + keypad (text, TRUE); + + /* register the new window, along with its borders */ + draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr); + + wattrset (dialog, border_attr); + mvwaddch (dialog, height-3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch (dialog, ACS_HLINE); + wattrset (dialog, dialog_attr); + wbkgdset (dialog, dialog_attr & A_COLOR); + waddch (dialog, ACS_RTEE); + + if (title != NULL && strlen(title) >= width-2 ) { + /* truncate long title -- mec */ + char * title2 = malloc(width-2+1); + memcpy( title2, title, width-2 ); + title2[width-2] = '\0'; + title = title2; + } + + if (title != NULL) { + wattrset (dialog, title_attr); + mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' '); + waddstr (dialog, (char *)title); + waddch (dialog, ' '); + } + print_button (dialog, " Exit ", height - 2, width / 2 - 4, TRUE); + wnoutrefresh (dialog); + getyx (dialog, cur_y, cur_x); /* Save cursor position */ + + /* Print first page of text */ + attr_clear (text, height - 4, width - 2, dialog_attr); + print_page (text, height - 4, width - 2); + print_position (dialog, height, width); + wmove (dialog, cur_y, cur_x); /* Restore cursor position */ + wrefresh (dialog); + + while ((key != ESC) && (key != '\n')) { + key = wgetch (dialog); + switch (key) { + case 'E': /* Exit */ + case 'e': + case 'X': + case 'x': + delwin (dialog); + free (buf); + close (fd); + return 0; + case 'g': /* First page */ + case KEY_HOME: + if (!begin_reached) { + begin_reached = 1; + /* First page not in buffer? */ + if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) { + endwin (); + fprintf (stderr, + "\nError moving file pointer in dialog_textbox().\n"); + exit (-1); + } + if (fpos > bytes_read) { /* Yes, we have to read it in */ + if (lseek (fd, 0, SEEK_SET) == -1) { + endwin (); + fprintf (stderr, "\nError moving file pointer in " + "dialog_textbox().\n"); + exit (-1); + } + if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) { + endwin (); + fprintf (stderr, + "\nError reading file in dialog_textbox().\n"); + exit (-1); + } + buf[bytes_read] = '\0'; + } + page = buf; + print_page (text, height - 4, width - 2); + print_position (dialog, height, width); + wmove (dialog, cur_y, cur_x); /* Restore cursor position */ + wrefresh (dialog); + } + break; + case 'G': /* Last page */ + case KEY_END: + + end_reached = 1; + /* Last page not in buffer? */ + if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) { + endwin (); + fprintf (stderr, + "\nError moving file pointer in dialog_textbox().\n"); + exit (-1); + } + if (fpos < file_size) { /* Yes, we have to read it in */ + if (lseek (fd, -BUF_SIZE, SEEK_END) == -1) { + endwin (); + fprintf (stderr, + "\nError moving file pointer in dialog_textbox().\n"); + exit (-1); + } + if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) { + endwin (); + fprintf (stderr, + "\nError reading file in dialog_textbox().\n"); + exit (-1); + } + buf[bytes_read] = '\0'; + } + page = buf + bytes_read; + back_lines (height - 4); + print_page (text, height - 4, width - 2); + print_position (dialog, height, width); + wmove (dialog, cur_y, cur_x); /* Restore cursor position */ + wrefresh (dialog); + break; + case 'K': /* Previous line */ + case 'k': + case KEY_UP: + if (!begin_reached) { + back_lines (page_length + 1); + + /* We don't call print_page() here but use scrolling to ensure + faster screen update. However, 'end_reached' and + 'page_length' should still be updated, and 'page' should + point to start of next page. This is done by calling + get_line() in the following 'for' loop. */ + scrollok (text, TRUE); + wscrl (text, -1); /* Scroll text region down one line */ + scrollok (text, FALSE); + page_length = 0; + passed_end = 0; + for (i = 0; i < height - 4; i++) { + if (!i) { + /* print first line of page */ + print_line (text, 0, width - 2); + wnoutrefresh (text); + } else + /* Called to update 'end_reached' and 'page' */ + get_line (); + if (!passed_end) + page_length++; + if (end_reached && !passed_end) + passed_end = 1; + } + + print_position (dialog, height, width); + wmove (dialog, cur_y, cur_x); /* Restore cursor position */ + wrefresh (dialog); + } + break; + case 'B': /* Previous page */ + case 'b': + case KEY_PPAGE: + if (begin_reached) + break; + back_lines (page_length + height - 4); + print_page (text, height - 4, width - 2); + print_position (dialog, height, width); + wmove (dialog, cur_y, cur_x); + wrefresh (dialog); + break; + case 'J': /* Next line */ + case 'j': + case KEY_DOWN: + if (!end_reached) { + begin_reached = 0; + scrollok (text, TRUE); + scroll (text); /* Scroll text region up one line */ + scrollok (text, FALSE); + print_line (text, height - 5, width - 2); + wnoutrefresh (text); + print_position (dialog, height, width); + wmove (dialog, cur_y, cur_x); /* Restore cursor position */ + wrefresh (dialog); + } + break; + case KEY_NPAGE: /* Next page */ + case ' ': + if (end_reached) + break; + + begin_reached = 0; + print_page (text, height - 4, width - 2); + print_position (dialog, height, width); + wmove (dialog, cur_y, cur_x); + wrefresh (dialog); + break; + case '0': /* Beginning of line */ + case 'H': /* Scroll left */ + case 'h': + case KEY_LEFT: + if (hscroll <= 0) + break; + + if (key == '0') + hscroll = 0; + else + hscroll--; + /* Reprint current page to scroll horizontally */ + back_lines (page_length); + print_page (text, height - 4, width - 2); + wmove (dialog, cur_y, cur_x); + wrefresh (dialog); + break; + case 'L': /* Scroll right */ + case 'l': + case KEY_RIGHT: + if (hscroll >= MAX_LEN) + break; + hscroll++; + /* Reprint current page to scroll horizontally */ + back_lines (page_length); + print_page (text, height - 4, width - 2); + wmove (dialog, cur_y, cur_x); + wrefresh (dialog); + break; + case ESC: + break; + } + } + + delwin (dialog); + free (buf); + close (fd); + return 1; /* ESC pressed */ +} + +/* + * Go back 'n' lines in text file. Called by dialog_textbox(). + * 'page' will be updated to point to the desired line in 'buf'. + */ +static void +back_lines (int n) +{ + int i, fpos; + + begin_reached = 0; + /* We have to distinguish between end_reached and !end_reached + since at end of file, the line is not ended by a '\n'. + The code inside 'if' basically does a '--page' to move one + character backward so as to skip '\n' of the previous line */ + if (!end_reached) { + /* Either beginning of buffer or beginning of file reached? */ + if (page == buf) { + if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) { + endwin (); + fprintf (stderr, "\nError moving file pointer in " + "back_lines().\n"); + exit (-1); + } + if (fpos > bytes_read) { /* Not beginning of file yet */ + /* We've reached beginning of buffer, but not beginning of + file yet, so read previous part of file into buffer. + Note that we only move backward for BUF_SIZE/2 bytes, + but not BUF_SIZE bytes to avoid re-reading again in + print_page() later */ + /* Really possible to move backward BUF_SIZE/2 bytes? */ + if (fpos < BUF_SIZE / 2 + bytes_read) { + /* No, move less then */ + if (lseek (fd, 0, SEEK_SET) == -1) { + endwin (); + fprintf (stderr, "\nError moving file pointer in " + "back_lines().\n"); + exit (-1); + } + page = buf + fpos - bytes_read; + } else { /* Move backward BUF_SIZE/2 bytes */ + if (lseek (fd, -(BUF_SIZE / 2 + bytes_read), SEEK_CUR) + == -1) { + endwin (); + fprintf (stderr, "\nError moving file pointer " + "in back_lines().\n"); + exit (-1); + } + page = buf + BUF_SIZE / 2; + } + if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) { + endwin (); + fprintf (stderr, "\nError reading file in back_lines().\n"); + exit (-1); + } + buf[bytes_read] = '\0'; + } else { /* Beginning of file reached */ + begin_reached = 1; + return; + } + } + if (*(--page) != '\n') { /* '--page' here */ + /* Something's wrong... */ + endwin (); + fprintf (stderr, "\nInternal error in back_lines().\n"); + exit (-1); + } + } + /* Go back 'n' lines */ + for (i = 0; i < n; i++) + do { + if (page == buf) { + if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) { + endwin (); + fprintf (stderr, + "\nError moving file pointer in back_lines().\n"); + exit (-1); + } + if (fpos > bytes_read) { + /* Really possible to move backward BUF_SIZE/2 bytes? */ + if (fpos < BUF_SIZE / 2 + bytes_read) { + /* No, move less then */ + if (lseek (fd, 0, SEEK_SET) == -1) { + endwin (); + fprintf (stderr, "\nError moving file pointer " + "in back_lines().\n"); + exit (-1); + } + page = buf + fpos - bytes_read; + } else { /* Move backward BUF_SIZE/2 bytes */ + if (lseek (fd, -(BUF_SIZE / 2 + bytes_read), + SEEK_CUR) == -1) { + endwin (); + fprintf (stderr, "\nError moving file pointer" + " in back_lines().\n"); + exit (-1); + } + page = buf + BUF_SIZE / 2; + } + if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) { + endwin (); + fprintf (stderr, "\nError reading file in " + "back_lines().\n"); + exit (-1); + } + buf[bytes_read] = '\0'; + } else { /* Beginning of file reached */ + begin_reached = 1; + return; + } + } + } while (*(--page) != '\n'); + page++; +} + +/* + * Print a new page of text. Called by dialog_textbox(). + */ +static void +print_page (WINDOW * win, int height, int width) +{ + int i, passed_end = 0; + + page_length = 0; + for (i = 0; i < height; i++) { + print_line (win, i, width); + if (!passed_end) + page_length++; + if (end_reached && !passed_end) + passed_end = 1; + } + wnoutrefresh (win); +} + +/* + * Print a new line of text. Called by dialog_textbox() and print_page(). + */ +static void +print_line (WINDOW * win, int row, int width) +{ + int y, x; + char *line; + + line = get_line (); + line += MIN (strlen (line), hscroll); /* Scroll horizontally */ + wmove (win, row, 0); /* move cursor to correct line */ + waddch (win, ' '); + waddnstr (win, line, MIN (strlen (line), width - 2)); + + getyx (win, y, x); + /* Clear 'residue' of previous line */ +#if OLD_NCURSES + { + int i; + for (i = 0; i < width - x; i++) + waddch (win, ' '); + } +#else + wclrtoeol(win); +#endif +} + +/* + * Return current line of text. Called by dialog_textbox() and print_line(). + * 'page' should point to start of current line before calling, and will be + * updated to point to start of next line. + */ +static char * +get_line (void) +{ + int i = 0, fpos; + static char line[MAX_LEN + 1]; + + end_reached = 0; + while (*page != '\n') { + if (*page == '\0') { + /* Either end of file or end of buffer reached */ + if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) { + endwin (); + fprintf (stderr, "\nError moving file pointer in " + "get_line().\n"); + exit (-1); + } + if (fpos < file_size) { /* Not end of file yet */ + /* We've reached end of buffer, but not end of file yet, + so read next part of file into buffer */ + if ((bytes_read = read (fd, buf, BUF_SIZE)) == -1) { + endwin (); + fprintf (stderr, "\nError reading file in get_line().\n"); + exit (-1); + } + buf[bytes_read] = '\0'; + page = buf; + } else { + if (!end_reached) + end_reached = 1; + break; + } + } else if (i < MAX_LEN) + line[i++] = *(page++); + else { + /* Truncate lines longer than MAX_LEN characters */ + if (i == MAX_LEN) + line[i++] = '\0'; + page++; + } + } + if (i <= MAX_LEN) + line[i] = '\0'; + if (!end_reached) + page++; /* move pass '\n' */ + + return line; +} + +/* + * Print current position + */ +static void +print_position (WINDOW * win, int height, int width) +{ + int fpos, percent; + + if ((fpos = lseek (fd, 0, SEEK_CUR)) == -1) { + endwin (); + fprintf (stderr, "\nError moving file pointer in print_position().\n"); + exit (-1); + } + wattrset (win, position_indicator_attr); + wbkgdset (win, position_indicator_attr & A_COLOR); + percent = !file_size ? + 100 : ((fpos - bytes_read + page - buf) * 100) / file_size; + wmove (win, height - 3, width - 9); + wprintw (win, "(%3d%%)", percent); +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/util.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/util.c new file mode 100644 index 0000000..6f83951 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/util.c @@ -0,0 +1,375 @@ +/* + * util.c + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "dialog.h" + + +/* use colors by default? */ +bool use_colors = 1; + +const char *backtitle = NULL; + +const char *dialog_result; + +/* + * Attribute values, default is for mono display + */ +chtype attributes[] = +{ + A_NORMAL, /* screen_attr */ + A_NORMAL, /* shadow_attr */ + A_NORMAL, /* dialog_attr */ + A_BOLD, /* title_attr */ + A_NORMAL, /* border_attr */ + A_REVERSE, /* button_active_attr */ + A_DIM, /* button_inactive_attr */ + A_REVERSE, /* button_key_active_attr */ + A_BOLD, /* button_key_inactive_attr */ + A_REVERSE, /* button_label_active_attr */ + A_NORMAL, /* button_label_inactive_attr */ + A_NORMAL, /* inputbox_attr */ + A_NORMAL, /* inputbox_border_attr */ + A_NORMAL, /* searchbox_attr */ + A_BOLD, /* searchbox_title_attr */ + A_NORMAL, /* searchbox_border_attr */ + A_BOLD, /* position_indicator_attr */ + A_NORMAL, /* menubox_attr */ + A_NORMAL, /* menubox_border_attr */ + A_NORMAL, /* item_attr */ + A_REVERSE, /* item_selected_attr */ + A_BOLD, /* tag_attr */ + A_REVERSE, /* tag_selected_attr */ + A_BOLD, /* tag_key_attr */ + A_REVERSE, /* tag_key_selected_attr */ + A_BOLD, /* check_attr */ + A_REVERSE, /* check_selected_attr */ + A_BOLD, /* uarrow_attr */ + A_BOLD /* darrow_attr */ +}; + + +#include "colors.h" + +/* + * Table of color values + */ +int color_table[][3] = +{ + {SCREEN_FG, SCREEN_BG, SCREEN_HL}, + {SHADOW_FG, SHADOW_BG, SHADOW_HL}, + {DIALOG_FG, DIALOG_BG, DIALOG_HL}, + {TITLE_FG, TITLE_BG, TITLE_HL}, + {BORDER_FG, BORDER_BG, BORDER_HL}, + {BUTTON_ACTIVE_FG, BUTTON_ACTIVE_BG, BUTTON_ACTIVE_HL}, + {BUTTON_INACTIVE_FG, BUTTON_INACTIVE_BG, BUTTON_INACTIVE_HL}, + {BUTTON_KEY_ACTIVE_FG, BUTTON_KEY_ACTIVE_BG, BUTTON_KEY_ACTIVE_HL}, + {BUTTON_KEY_INACTIVE_FG, BUTTON_KEY_INACTIVE_BG, BUTTON_KEY_INACTIVE_HL}, + {BUTTON_LABEL_ACTIVE_FG, BUTTON_LABEL_ACTIVE_BG, BUTTON_LABEL_ACTIVE_HL}, + {BUTTON_LABEL_INACTIVE_FG, BUTTON_LABEL_INACTIVE_BG, + BUTTON_LABEL_INACTIVE_HL}, + {INPUTBOX_FG, INPUTBOX_BG, INPUTBOX_HL}, + {INPUTBOX_BORDER_FG, INPUTBOX_BORDER_BG, INPUTBOX_BORDER_HL}, + {SEARCHBOX_FG, SEARCHBOX_BG, SEARCHBOX_HL}, + {SEARCHBOX_TITLE_FG, SEARCHBOX_TITLE_BG, SEARCHBOX_TITLE_HL}, + {SEARCHBOX_BORDER_FG, SEARCHBOX_BORDER_BG, SEARCHBOX_BORDER_HL}, + {POSITION_INDICATOR_FG, POSITION_INDICATOR_BG, POSITION_INDICATOR_HL}, + {MENUBOX_FG, MENUBOX_BG, MENUBOX_HL}, + {MENUBOX_BORDER_FG, MENUBOX_BORDER_BG, MENUBOX_BORDER_HL}, + {ITEM_FG, ITEM_BG, ITEM_HL}, + {ITEM_SELECTED_FG, ITEM_SELECTED_BG, ITEM_SELECTED_HL}, + {TAG_FG, TAG_BG, TAG_HL}, + {TAG_SELECTED_FG, TAG_SELECTED_BG, TAG_SELECTED_HL}, + {TAG_KEY_FG, TAG_KEY_BG, TAG_KEY_HL}, + {TAG_KEY_SELECTED_FG, TAG_KEY_SELECTED_BG, TAG_KEY_SELECTED_HL}, + {CHECK_FG, CHECK_BG, CHECK_HL}, + {CHECK_SELECTED_FG, CHECK_SELECTED_BG, CHECK_SELECTED_HL}, + {UARROW_FG, UARROW_BG, UARROW_HL}, + {DARROW_FG, DARROW_BG, DARROW_HL}, +}; /* color_table */ + +/* + * Set window to attribute 'attr' + */ +void +attr_clear (WINDOW * win, int height, int width, chtype attr) +{ + int i, j; + + wattrset (win, attr); + for (i = 0; i < height; i++) { + wmove (win, i, 0); + for (j = 0; j < width; j++) + waddch (win, ' '); + } + touchwin (win); +} + +void dialog_clear (void) +{ + attr_clear (stdscr, LINES, COLS, screen_attr); + /* Display background title if it exists ... - SLH */ + if (backtitle != NULL) { + int i; + + wattrset (stdscr, screen_attr); + mvwaddstr (stdscr, 0, 1, (char *)backtitle); + wmove (stdscr, 1, 1); + for (i = 1; i < COLS - 1; i++) + waddch (stdscr, ACS_HLINE); + } + wnoutrefresh (stdscr); +} + +/* + * Do some initialization for dialog + */ +void +init_dialog (void) +{ + initscr (); /* Init curses */ + keypad (stdscr, TRUE); + cbreak (); + noecho (); + + + if (use_colors) /* Set up colors */ + color_setup (); + + + dialog_clear (); +} + +/* + * Setup for color display + */ +void +color_setup (void) +{ + int i; + + if (has_colors ()) { /* Terminal supports color? */ + start_color (); + + /* Initialize color pairs */ + for (i = 0; i < ATTRIBUTE_COUNT; i++) + init_pair (i + 1, color_table[i][0], color_table[i][1]); + + /* Setup color attributes */ + for (i = 0; i < ATTRIBUTE_COUNT; i++) + attributes[i] = C_ATTR (color_table[i][2], i + 1); + } +} + +/* + * End using dialog functions. + */ +void +end_dialog (void) +{ + endwin (); +} + + +/* + * Print a string of text in a window, automatically wrap around to the + * next line if the string is too long to fit on one line. Newline + * characters '\n' are replaced by spaces. We start on a new line + * if there is no room for at least 4 nonblanks following a double-space. + */ +void +print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x) +{ + int newl, cur_x, cur_y; + int i, prompt_len, room, wlen; + char tempstr[MAX_LEN + 1], *word, *sp, *sp2; + + strcpy (tempstr, prompt); + + prompt_len = strlen(tempstr); + + /* + * Remove newlines + */ + for(i=0; i room || + (newl && wlen < 4 && sp && wlen+1+strlen(sp) > room + && (!(sp2 = index(sp, ' ')) || wlen+1+(sp2-sp) > room))) { + cur_y++; + cur_x = x; + } + wmove (win, cur_y, cur_x); + waddstr (win, word); + getyx (win, cur_y, cur_x); + cur_x++; + if (sp && *sp == ' ') { + cur_x++; /* double space */ + while (*++sp == ' '); + newl = 1; + } else + newl = 0; + word = sp; + } + } +} + +/* + * Print a button + */ +void +print_button (WINDOW * win, const char *label, int y, int x, int selected) +{ + int i, temp; + + wmove (win, y, x); + wattrset (win, selected ? button_active_attr : button_inactive_attr); + waddstr (win, "<"); + temp = strspn (label, " "); + label += temp; + wattrset (win, selected ? button_label_active_attr + : button_label_inactive_attr); + for (i = 0; i < temp; i++) + waddch (win, ' '); + wattrset (win, selected ? button_key_active_attr + : button_key_inactive_attr); + waddch (win, label[0]); + wattrset (win, selected ? button_label_active_attr + : button_label_inactive_attr); + waddstr (win, (char *)label + 1); + wattrset (win, selected ? button_active_attr : button_inactive_attr); + waddstr (win, ">"); + wmove (win, y, x + temp + 1); +} + +/* + * Draw a rectangular box with line drawing characters + */ +void +draw_box (WINDOW * win, int y, int x, int height, int width, + chtype box, chtype border) +{ + int i, j; + + wattrset (win, 0); + for (i = 0; i < height; i++) { + wmove (win, y + i, x); + for (j = 0; j < width; j++) + if (!i && !j) + waddch (win, border | ACS_ULCORNER); + else if (i == height - 1 && !j) + waddch (win, border | ACS_LLCORNER); + else if (!i && j == width - 1) + waddch (win, box | ACS_URCORNER); + else if (i == height - 1 && j == width - 1) + waddch (win, box | ACS_LRCORNER); + else if (!i) + waddch (win, border | ACS_HLINE); + else if (i == height - 1) + waddch (win, box | ACS_HLINE); + else if (!j) + waddch (win, border | ACS_VLINE); + else if (j == width - 1) + waddch (win, box | ACS_VLINE); + else + waddch (win, box | ' '); + } +} + +/* + * Draw shadows along the right and bottom edge to give a more 3D look + * to the boxes + */ +void +draw_shadow (WINDOW * win, int y, int x, int height, int width) +{ + int i; + + if (has_colors ()) { /* Whether terminal supports color? */ + wattrset (win, shadow_attr); + wmove (win, y + height, x + 2); + for (i = 0; i < width; i++) + waddch (win, winch (win) & A_CHARTEXT); + for (i = y + 1; i < y + height + 1; i++) { + wmove (win, i, x + width); + waddch (win, winch (win) & A_CHARTEXT); + waddch (win, winch (win) & A_CHARTEXT); + } + wnoutrefresh (win); + } +} + +/* + * Return the position of the first alphabetic character in a string. + */ +int +first_alpha(const char *string, const char *exempt) +{ + int i, in_paren=0, c; + + for (i = 0; i < strlen(string); i++) { + c = tolower(string[i]); + + if (strchr("<[(", c)) ++in_paren; + if (strchr(">])", c) && in_paren > 0) --in_paren; + + if ((! in_paren) && isalpha(c) && + strchr(exempt, c) == 0) + return i; + } + + return 0; +} + +/* + * Get the first selected item in the dialog_list_item list. + */ +struct dialog_list_item * +first_sel_item(int item_no, struct dialog_list_item ** items) +{ + int i; + + for (i = 0; i < item_no; i++) { + if (items[i]->selected) + return items[i]; + } + + return NULL; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/yesno.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/yesno.c new file mode 100644 index 0000000..11fcc25 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/lxdialog/yesno.c @@ -0,0 +1,118 @@ +/* + * yesno.c -- implements the yes/no box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "dialog.h" + +/* + * Display termination buttons + */ +static void +print_buttons(WINDOW *dialog, int height, int width, int selected) +{ + int x = width / 2 - 10; + int y = height - 2; + + print_button (dialog, " Yes ", y, x, selected == 0); + print_button (dialog, " No ", y, x + 13, selected == 1); + + wmove(dialog, y, x+1 + 13*selected ); + wrefresh (dialog); +} + +/* + * Display a dialog box with two buttons - Yes and No + */ +int +dialog_yesno (const char *title, const char *prompt, int height, int width) +{ + int i, x, y, key = 0, button = 0; + WINDOW *dialog; + + /* center dialog box on screen */ + x = (COLS - width) / 2; + y = (LINES - height) / 2; + + draw_shadow (stdscr, y, x, height, width); + + dialog = newwin (height, width, y, x); + keypad (dialog, TRUE); + + draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr); + wattrset (dialog, border_attr); + mvwaddch (dialog, height-3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch (dialog, ACS_HLINE); + wattrset (dialog, dialog_attr); + waddch (dialog, ACS_RTEE); + + if (title != NULL && strlen(title) >= width-2 ) { + /* truncate long title -- mec */ + char * title2 = malloc(width-2+1); + memcpy( title2, title, width-2 ); + title2[width-2] = '\0'; + title = title2; + } + + if (title != NULL) { + wattrset (dialog, title_attr); + mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' '); + waddstr (dialog, (char *)title); + waddch (dialog, ' '); + } + + wattrset (dialog, dialog_attr); + print_autowrap (dialog, prompt, width - 2, 1, 3); + + print_buttons(dialog, height, width, 0); + + while (key != ESC) { + key = wgetch (dialog); + switch (key) { + case 'Y': + case 'y': + delwin (dialog); + return 0; + case 'N': + case 'n': + delwin (dialog); + return 1; + + case TAB: + case KEY_LEFT: + case KEY_RIGHT: + button = ((key == KEY_LEFT ? --button : ++button) < 0) + ? 1 : (button > 1 ? 0 : button); + + print_buttons(dialog, height, width, button); + wrefresh (dialog); + break; + case ' ': + case '\n': + delwin (dialog); + return button; + case ESC: + break; + } + } + + delwin (dialog); + return -1; /* ESC pressed */ +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/mconf.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/mconf.c new file mode 100644 index 0000000..406eb29 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/mconf.c @@ -0,0 +1,977 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + * + * Introduced single menu mode (show all sub-menus in one large tree). + * 2002-11-06 Petr Baudis + * + * Directly use liblxdialog library routines. + * 2002-11-14 Petr Baudis + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lxdialog/dialog.h" + +#define LKC_DIRECT_LINK +#include "lkc.h" + +static char menu_backtitle[128]; +static const char mconf_readme[] = +"Overview\n" +"--------\n" +"Some features may be built directly into axTLS. Some features\n" +"may be completely removed altogether. There are also certain\n" +"parameters which are not really features, but must be\n" +"entered in as decimal or hexadecimal numbers or possibly text.\n" +"\n" +"Menu items beginning with [*] or [ ] represent features\n" +"configured to be built in or removed respectively.\n" +"\n" +"To change any of these features, highlight it with the cursor\n" +"keys and press to build it in or to removed it.\n" +"You may also press the to cycle\n" +"through the available options (ie. Y->N->Y).\n" +"\n" +"Some additional keyboard hints:\n" +"\n" +"Menus\n" +"----------\n" +"o Use the Up/Down arrow keys (cursor keys) to highlight the item\n" +" you wish to change or submenu wish to select and press .\n" +" Submenus are designated by \"--->\".\n" +"\n" +" Shortcut: Press the option's highlighted letter (hotkey).\n" +" Pressing a hotkey more than once will sequence\n" +" through all visible items which use that hotkey.\n" +"\n" +" You may also use the and keys to scroll\n" +" unseen options into view.\n" +"\n" +"o To exit a menu use the cursor keys to highlight the button\n" +" and press .\n" +"\n" +" Shortcut: Press or or if there is no hotkey\n" +" using those letters. You may press a single , but\n" +" there is a delayed response which you may find annoying.\n" +"\n" +" Also, the and cursor keys will cycle between and\n" +" \n" +"\n" +"\n" +"Data Entry\n" +"-----------\n" +"o Enter the requested information and press \n" +" If you are entering hexadecimal values, it is not necessary to\n" +" add the '0x' prefix to the entry.\n" +"\n" +"o For help, use the or cursor keys to highlight the help option\n" +" and press . You can try as well.\n" +"\n" +"\n" +"Text Box (Help Window)\n" +"--------\n" +"o Use the cursor keys to scroll up/down/left/right. The VI editor\n" +" keys h,j,k,l function here as do and for those\n" +" who are familiar with less and lynx.\n" +"\n" +"o Press , , or to exit.\n" +"\n" +"\n" +"Alternate Configuration Files\n" +"-----------------------------\n" +"Menuconfig supports the use of alternate configuration files for\n" +"those who, for various reasons, find it necessary to switch\n" +"between different configurations.\n" +"\n" +"At the end of the main menu you will find two options. One is\n" +"for saving the current configuration to a file of your choosing.\n" +"The other option is for loading a previously saved alternate\n" +"configuration.\n" +"\n" +"Even if you don't use alternate configuration files, but you\n" +"find during a Menuconfig session that you have completely messed\n" +"up your settings, you may use the \"Load Alternate...\" option to\n" +"restore your previously saved settings from \".config\" without\n" +"restarting Menuconfig.\n" +"\n" +"Other information\n" +"-----------------\n" +"If you use Menuconfig in an XTERM window make sure you have your\n" +"$TERM variable set to point to a xterm definition which supports color.\n" +"Otherwise, Menuconfig will look rather bad. Menuconfig will not\n" +"display correctly in a RXVT window because rxvt displays only one\n" +"intensity of color, bright.\n" +"\n" +"Menuconfig will display larger menus on screens or xterms which are\n" +"set to display more than the standard 25 row by 80 column geometry.\n" +"In order for this to work, the \"stty size\" command must be able to\n" +"display the screen's current row and column geometry. I STRONGLY\n" +"RECOMMEND that you make sure you do NOT have the shell variables\n" +"LINES and COLUMNS exported into your environment. Some distributions\n" +"export those variables via /etc/profile. Some ncurses programs can\n" +"become confused when those variables (LINES & COLUMNS) don't reflect\n" +"the true screen size.\n" +"\n" +"Optional personality available\n" +"------------------------------\n" +"If you prefer to have all of the options listed in a single\n" +"menu, rather than the default multimenu hierarchy, run the menuconfig\n" +"with MENUCONFIG_MODE environment variable set to single_menu. Example:\n" +"\n" +"make MENUCONFIG_MODE=single_menu menuconfig\n" +"\n" +" will then unroll the appropriate category, or enfold it if it\n" +"is already unrolled.\n" +"\n" +"Note that this mode can eventually be a little more CPU expensive\n" +"(especially with a larger number of unrolled categories) than the\n" +"default mode.\n", +menu_instructions[] = + "Arrow keys navigate the menu. " + " selects submenus --->. " + "Highlighted letters are hotkeys. " + "Pressing selectes a feature, while will exclude a feature. " + "Press to exit, for Help, for Search. " + "Legend: [*] feature is selected [ ] feature is excluded", +radiolist_instructions[] = + "Use the arrow keys to navigate this window or " + "press the hotkey of the item you wish to select " + "followed by the . " + "Press for additional information about this option.", +inputbox_instructions_int[] = + "Please enter a decimal value. " + "Fractions will not be accepted. " + "Use the key to move from the input field to the buttons below it.", +inputbox_instructions_hex[] = + "Please enter a hexadecimal value. " + "Use the key to move from the input field to the buttons below it.", +inputbox_instructions_string[] = + "Please enter a string value. " + "Use the key to move from the input field to the buttons below it.", +setmod_text[] = + "This feature depends on another which has been configured as a module.\n" + "As a result, this feature will be built as a module.", +nohelp_text[] = + "There is no help available for this option.\n", +load_config_text[] = + "Enter the name of the configuration file you wish to load. " + "Accept the name shown to restore the configuration you " + "last retrieved. Leave blank to abort.", +load_config_help[] = + "\n" + "For various reasons, one may wish to keep several different axTLS\n" + "configurations available on a single machine.\n" + "\n" + "If you have saved a previous configuration in a file other than the\n" + "axTLS's default, entering the name of the file here will allow you\n" + "to modify that configuration.\n" + "\n" + "If you are uncertain, then you have probably never used alternate\n" + "configuration files. You should therefor leave this blank to abort.\n", +save_config_text[] = + "Enter a filename to which this configuration should be saved " + "as an alternate. Leave blank to abort.", +save_config_help[] = + "\n" + "For various reasons, one may wish to keep different axTLS\n" + "configurations available on a single machine.\n" + "\n" + "Entering a file name here will allow you to later retrieve, modify\n" + "and use the current configuration as an alternate to whatever\n" + "configuration options you have selected at that time.\n" + "\n" + "If you are uncertain what all this means then you should probably\n" + "leave this blank.\n", +search_help[] = + "\n" + "Search for CONFIG_ symbols and display their relations.\n" + "Example: search for \"^FOO\"\n" + "Result:\n" + "-----------------------------------------------------------------\n" + "Symbol: FOO [=m]\n" + "Prompt: Foo bus is used to drive the bar HW\n" + "Defined at drivers/pci/Kconfig:47\n" + "Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n" + "Location:\n" + " -> Bus options (PCI, PCMCIA, EISA, MCA, ISA)\n" + " -> PCI support (PCI [=y])\n" + " -> PCI access mode ( [=y])\n" + "Selects: LIBCRC32\n" + "Selected by: BAR\n" + "-----------------------------------------------------------------\n" + "o The line 'Prompt:' shows the text used in the menu structure for\n" + " this CONFIG_ symbol\n" + "o The 'Defined at' line tell at what file / line number the symbol\n" + " is defined\n" + "o The 'Depends on:' line tell what symbols needs to be defined for\n" + " this symbol to be visible in the menu (selectable)\n" + "o The 'Location:' lines tell where in the menu structure this symbol\n" + " is located\n" + " A location followed by a [=y] indicate that this is a selectable\n" + " menu item - and current value is displayed inside brackets.\n" + "o The 'Selects:' line tell what symbol will be automatically\n" + " selected if this symbol is selected (y or m)\n" + "o The 'Selected by' line tell what symbol has selected this symbol\n" + "\n" + "Only relevant lines are shown.\n" + "\n\n" + "Search examples:\n" + "Examples: USB => find all CONFIG_ symbols containing USB\n" + " ^USB => find all CONFIG_ symbols starting with USB\n" + " USB$ => find all CONFIG_ symbols ending with USB\n" + "\n"; + +static char filename[PATH_MAX+1] = ".config"; +static int indent; +static struct termios ios_org; +static int rows = 0, cols = 0; +static struct menu *current_menu; +static int child_count; +static int single_menu_mode; + +static struct dialog_list_item *items[16384]; /* FIXME: This ought to be dynamic. */ +static int item_no; + +static void conf(struct menu *menu); +static void conf_choice(struct menu *menu); +static void conf_string(struct menu *menu); +static void conf_load(void); +static void conf_save(void); +static void show_textbox(const char *title, const char *text, int r, int c); +static void show_helptext(const char *title, const char *text); +static void show_help(struct menu *menu); +static void show_file(const char *filename, const char *title, int r, int c); + +static void init_wsize(void) +{ + struct winsize ws; + char *env; + + if (!ioctl(STDIN_FILENO, TIOCGWINSZ, &ws)) { + rows = ws.ws_row; + cols = ws.ws_col; + } + + if (!rows) { + env = getenv("LINES"); + if (env) + rows = atoi(env); + if (!rows) + rows = 24; + } + if (!cols) { + env = getenv("COLUMNS"); + if (env) + cols = atoi(env); + if (!cols) + cols = 80; + } + + if (rows < 19 || cols < 80) { + fprintf(stderr, "Your display is too small to run Menuconfig!\n"); + fprintf(stderr, "It must be at least 19 lines by 80 columns.\n"); + exit(1); + } + + rows -= 4; + cols -= 5; +} + +static void cinit(void) +{ + item_no = 0; +} + +static void cmake(void) +{ + items[item_no] = malloc(sizeof(struct dialog_list_item)); + memset(items[item_no], 0, sizeof(struct dialog_list_item)); + items[item_no]->tag = malloc(32); items[item_no]->tag[0] = 0; + items[item_no]->name = malloc(512); items[item_no]->name[0] = 0; + items[item_no]->namelen = 0; + item_no++; +} + +static int cprint_name(const char *fmt, ...) +{ + va_list ap; + int res; + + if (!item_no) + cmake(); + va_start(ap, fmt); + res = vsnprintf(items[item_no - 1]->name + items[item_no - 1]->namelen, + 512 - items[item_no - 1]->namelen, fmt, ap); + if (res > 0) + items[item_no - 1]->namelen += res; + va_end(ap); + + return res; +} + +static int cprint_tag(const char *fmt, ...) +{ + va_list ap; + int res; + + if (!item_no) + cmake(); + va_start(ap, fmt); + res = vsnprintf(items[item_no - 1]->tag, 32, fmt, ap); + va_end(ap); + + return res; +} + +static void cdone(void) +{ + int i; + + for (i = 0; i < item_no; i++) { + free(items[i]->tag); + free(items[i]->name); + free(items[i]); + } + + item_no = 0; +} + +static void get_prompt_str(struct gstr *r, struct property *prop) +{ + int i, j; + struct menu *submenu[8], *menu; + + str_printf(r, "Prompt: %s\n", prop->text); + str_printf(r, " Defined at %s:%d\n", prop->menu->file->name, + prop->menu->lineno); + if (!expr_is_yes(prop->visible.expr)) { + str_append(r, " Depends on: "); + expr_gstr_print(prop->visible.expr, r); + str_append(r, "\n"); + } + menu = prop->menu->parent; + for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) + submenu[i++] = menu; + if (i > 0) { + str_printf(r, " Location:\n"); + for (j = 4; --i >= 0; j += 2) { + menu = submenu[i]; + str_printf(r, "%*c-> %s", j, ' ', menu_get_prompt(menu)); + if (menu->sym) { + str_printf(r, " (%s [=%s])", menu->sym->name ? + menu->sym->name : "", + sym_get_string_value(menu->sym)); + } + str_append(r, "\n"); + } + } +} + +static void get_symbol_str(struct gstr *r, struct symbol *sym) +{ + bool hit; + struct property *prop; + + str_printf(r, "Symbol: %s [=%s]\n", sym->name, + sym_get_string_value(sym)); + for_all_prompts(sym, prop) + get_prompt_str(r, prop); + hit = false; + for_all_properties(sym, prop, P_SELECT) { + if (!hit) { + str_append(r, " Selects: "); + hit = true; + } else + str_printf(r, " && "); + expr_gstr_print(prop->expr, r); + } + if (hit) + str_append(r, "\n"); + if (sym->rev_dep.expr) { + str_append(r, " Selected by: "); + expr_gstr_print(sym->rev_dep.expr, r); + str_append(r, "\n"); + } + str_append(r, "\n\n"); +} + +static struct gstr get_relations_str(struct symbol **sym_arr) +{ + struct symbol *sym; + struct gstr res = str_new(); + int i; + + for (i = 0; sym_arr && (sym = sym_arr[i]); i++) + get_symbol_str(&res, sym); + if (!i) + str_append(&res, "No matches found.\n"); + return res; +} + +static void search_conf(void) +{ + struct symbol **sym_arr; + struct gstr res; + +again: + switch (dialog_inputbox("Search Configuration Parameter", + "Enter Keyword", 10, 75, + NULL)) { + case 0: + break; + case 1: + show_helptext("Search Configuration", search_help); + goto again; + default: + return; + } + + sym_arr = sym_re_search(dialog_input_result); + res = get_relations_str(sym_arr); + free(sym_arr); + show_textbox("Search Results", str_get(&res), 0, 0); + str_free(&res); +} + +static void build_conf(struct menu *menu) +{ + struct symbol *sym; + struct property *prop; + struct menu *child; + int type, tmp, doint = 2; + tristate val; + char ch; + + if (!menu_is_visible(menu)) + return; + + sym = menu->sym; + prop = menu->prompt; + if (!sym) { + if (prop && menu != current_menu) { + const char *prompt = menu_get_prompt(menu); + switch (prop->type) { + case P_MENU: + child_count++; + cmake(); + cprint_tag("m%p", menu); + + if (single_menu_mode) { + cprint_name("%s%*c%s", + menu->data ? "-->" : "++>", + indent + 1, ' ', prompt); + } else { + cprint_name(" %*c%s --->", indent + 1, ' ', prompt); + } + + if (single_menu_mode && menu->data) + goto conf_childs; + return; + default: + if (prompt) { + child_count++; + cmake(); + cprint_tag(":%p", menu); + cprint_name("---%*c%s", indent + 1, ' ', prompt); + } + } + } else + doint = 0; + goto conf_childs; + } + + cmake(); + type = sym_get_type(sym); + if (sym_is_choice(sym)) { + struct symbol *def_sym = sym_get_choice_value(sym); + struct menu *def_menu = NULL; + + child_count++; + for (child = menu->list; child; child = child->next) { + if (menu_is_visible(child) && child->sym == def_sym) + def_menu = child; + } + + val = sym_get_tristate_value(sym); + if (sym_is_changable(sym)) { + cprint_tag("t%p", menu); + switch (type) { + case S_BOOLEAN: + cprint_name("[%c]", val == no ? ' ' : '*'); + break; + case S_TRISTATE: + switch (val) { + case yes: ch = '*'; break; + case mod: ch = 'M'; break; + default: ch = ' '; break; + } + cprint_name("<%c>", ch); + break; + } + } else { + cprint_tag("%c%p", def_menu ? 't' : ':', menu); + cprint_name(" "); + } + + cprint_name("%*c%s", indent + 1, ' ', menu_get_prompt(menu)); + if (val == yes) { + if (def_menu) { + cprint_name(" (%s)", menu_get_prompt(def_menu)); + cprint_name(" --->"); + if (def_menu->list) { + indent += 2; + build_conf(def_menu); + indent -= 2; + } + } + return; + } + } else { + if (menu == current_menu) { + cprint_tag(":%p", menu); + cprint_name("---%*c%s", indent + 1, ' ', menu_get_prompt(menu)); + goto conf_childs; + } + child_count++; + val = sym_get_tristate_value(sym); + if (sym_is_choice_value(sym) && val == yes) { + cprint_tag(":%p", menu); + cprint_name(" "); + } else { + switch (type) { + case S_BOOLEAN: + cprint_tag("t%p", menu); + if (sym_is_changable(sym)) + cprint_name("[%c]", val == no ? ' ' : '*'); + else + cprint_name("---"); + break; + case S_TRISTATE: + cprint_tag("t%p", menu); + switch (val) { + case yes: ch = '*'; break; + case mod: ch = 'M'; break; + default: ch = ' '; break; + } + if (sym_is_changable(sym)) + cprint_name("<%c>", ch); + else + cprint_name("---"); + break; + default: + cprint_tag("s%p", menu); + tmp = cprint_name("(%s)", sym_get_string_value(sym)); + tmp = indent - tmp + 4; + if (tmp < 0) + tmp = 0; + cprint_name("%*c%s%s", tmp, ' ', menu_get_prompt(menu), + (sym_has_value(sym) || !sym_is_changable(sym)) ? + "" : " (NEW)"); + goto conf_childs; + } + } + cprint_name("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu), + (sym_has_value(sym) || !sym_is_changable(sym)) ? + "" : " (NEW)"); + if (menu->prompt->type == P_MENU) { + cprint_name(" --->"); + return; + } + } + +conf_childs: + indent += doint; + for (child = menu->list; child; child = child->next) + build_conf(child); + indent -= doint; +} + +static void conf(struct menu *menu) +{ + struct dialog_list_item *active_item = NULL; + struct menu *submenu; + const char *prompt = menu_get_prompt(menu); + struct symbol *sym; + char active_entry[40]; + int stat, type; + + unlink("lxdialog.scrltmp"); + active_entry[0] = 0; + while (1) { + indent = 0; + child_count = 0; + current_menu = menu; + cdone(); cinit(); + build_conf(menu); + if (!child_count) + break; + if (menu == &rootmenu) { + cmake(); cprint_tag(":"); cprint_name("--- "); + cmake(); cprint_tag("L"); cprint_name("Load an Alternate Configuration File"); + cmake(); cprint_tag("S"); cprint_name("Save Configuration to an Alternate File"); + } + dialog_clear(); + stat = dialog_menu(prompt ? prompt : "Main Menu", + menu_instructions, rows, cols, rows - 10, + active_entry, item_no, items); + if (stat < 0) + return; + + if (stat == 1 || stat == 255) + break; + + active_item = first_sel_item(item_no, items); + if (!active_item) + continue; + active_item->selected = 0; + strncpy(active_entry, active_item->tag, sizeof(active_entry)); + active_entry[sizeof(active_entry)-1] = 0; + type = active_entry[0]; + if (!type) + continue; + + sym = NULL; + submenu = NULL; + if (sscanf(active_entry + 1, "%p", &submenu) == 1) + sym = submenu->sym; + + switch (stat) { + case 0: + switch (type) { + case 'm': + if (single_menu_mode) + submenu->data = (void *) (long) !submenu->data; + else + conf(submenu); + break; + case 't': + if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes) + conf_choice(submenu); + else if (submenu->prompt->type == P_MENU) + conf(submenu); + break; + case 's': + conf_string(submenu); + break; + case 'L': + conf_load(); + break; + case 'S': + conf_save(); + break; + } + break; + case 2: + if (sym) + show_help(submenu); + else + show_helptext("README", mconf_readme); + break; + case 3: + if (type == 't') { + if (sym_set_tristate_value(sym, yes)) + break; + if (sym_set_tristate_value(sym, mod)) + show_textbox(NULL, setmod_text, 6, 74); + } + break; + case 4: + if (type == 't') + sym_set_tristate_value(sym, no); + break; + case 5: + if (type == 't') + sym_set_tristate_value(sym, mod); + break; + case 6: + if (type == 't') + sym_toggle_tristate_value(sym); + else if (type == 'm') + conf(submenu); + break; + case 7: + search_conf(); + break; + } + } +} + +static void show_textbox(const char *title, const char *text, int r, int c) +{ + int fd; + + fd = creat(".help.tmp", 0777); + write(fd, text, strlen(text)); + close(fd); + show_file(".help.tmp", title, r, c); + unlink(".help.tmp"); +} + +static void show_helptext(const char *title, const char *text) +{ + show_textbox(title, text, 0, 0); +} + +static void show_help(struct menu *menu) +{ + struct gstr help = str_new(); + struct symbol *sym = menu->sym; + + if (sym->help) + { + if (sym->name) { + str_printf(&help, "%s:\n\n", sym->name); + str_append(&help, sym->help); + str_append(&help, "\n"); + } + } else { + str_append(&help, nohelp_text); + } + get_symbol_str(&help, sym); + show_helptext(menu_get_prompt(menu), str_get(&help)); + str_free(&help); +} + +static void show_file(const char *filename, const char *title, int r, int c) +{ + while (dialog_textbox(title, filename, r ? r : rows, c ? c : cols) < 0) + ; +} + +static void conf_choice(struct menu *menu) +{ + const char *prompt = menu_get_prompt(menu); + struct menu *child; + struct symbol *active; + + active = sym_get_choice_value(menu->sym); + while (1) { + current_menu = menu; + cdone(); cinit(); + for (child = menu->list; child; child = child->next) { + if (!menu_is_visible(child)) + continue; + cmake(); + cprint_tag("%p", child); + cprint_name("%s", menu_get_prompt(child)); + if (child->sym == sym_get_choice_value(menu->sym)) + items[item_no - 1]->selected = 1; /* ON */ + else if (child->sym == active) + items[item_no - 1]->selected = 2; /* SELECTED */ + else + items[item_no - 1]->selected = 0; /* OFF */ + } + + switch (dialog_checklist(prompt ? prompt : "Main Menu", + radiolist_instructions, 15, 70, 6, + item_no, items, FLAG_RADIO)) { + case 0: + if (sscanf(first_sel_item(item_no, items)->tag, "%p", &child) != 1) + break; + sym_set_tristate_value(child->sym, yes); + return; + case 1: + if (sscanf(first_sel_item(item_no, items)->tag, "%p", &child) == 1) { + show_help(child); + active = child->sym; + } else + show_help(menu); + break; + case 255: + return; + } + } +} + +static void conf_string(struct menu *menu) +{ + const char *prompt = menu_get_prompt(menu); + + while (1) { + char *heading; + + switch (sym_get_type(menu->sym)) { + case S_INT: + heading = (char *) inputbox_instructions_int; + break; + case S_HEX: + heading = (char *) inputbox_instructions_hex; + break; + case S_STRING: + heading = (char *) inputbox_instructions_string; + break; + default: + heading = "Internal mconf error!"; + /* panic? */; + } + + switch (dialog_inputbox(prompt ? prompt : "Main Menu", + heading, 10, 75, + sym_get_string_value(menu->sym))) { + case 0: + if (sym_set_string_value(menu->sym, dialog_input_result)) + return; + show_textbox(NULL, "You have made an invalid entry.", 5, 43); + break; + case 1: + show_help(menu); + break; + case 255: + return; + } + } +} + +static void conf_load(void) +{ + while (1) { + switch (dialog_inputbox(NULL, load_config_text, 11, 55, + filename)) { + case 0: + if (!dialog_input_result[0]) + return; + if (!conf_read(dialog_input_result)) + return; + show_textbox(NULL, "File does not exist!", 5, 38); + break; + case 1: + show_helptext("Load Alternate Configuration", load_config_help); + break; + case 255: + return; + } + } +} + +static void conf_save(void) +{ + while (1) { + switch (dialog_inputbox(NULL, save_config_text, 11, 55, + filename)) { + case 0: + if (!dialog_input_result[0]) + return; + if (!conf_write(dialog_input_result)) + return; + show_textbox(NULL, "Can't create file! Probably a nonexistent directory.", 5, 60); + break; + case 1: + show_helptext("Save Alternate Configuration", save_config_help); + break; + case 255: + return; + } + } +} + +static void conf_cleanup(void) +{ + tcsetattr(1, TCSAFLUSH, &ios_org); + unlink(".help.tmp"); +} + +static void winch_handler(int sig) +{ + struct winsize ws; + + if (ioctl(1, TIOCGWINSZ, &ws) == -1) { + rows = 24; + cols = 80; + } else { + rows = ws.ws_row; + cols = ws.ws_col; + } + + if (rows < 19 || cols < 80) { + end_dialog(); + fprintf(stderr, "Your display is too small to run Menuconfig!\n"); + fprintf(stderr, "It must be at least 19 lines by 80 columns.\n"); + exit(1); + } + + rows -= 4; + cols -= 5; + +} + +int main(int ac, char **av) +{ + struct symbol *sym; + char *mode; + int stat; + + conf_parse(av[1]); + conf_read(NULL); + + sym = sym_lookup("VERSION", 0); + sym_calc_value(sym); + snprintf(menu_backtitle, 128, "axTLS v%s Configuration", + sym_get_string_value(sym)); + + mode = getenv("MENUCONFIG_MODE"); + if (mode) { + if (!strcasecmp(mode, "single_menu")) + single_menu_mode = 1; + } + + tcgetattr(1, &ios_org); + atexit(conf_cleanup); + init_wsize(); + init_dialog(); + signal(SIGWINCH, winch_handler); + conf(&rootmenu); + end_dialog(); + + /* Restart dialog to act more like when lxdialog was still separate */ + init_dialog(); + do { + stat = dialog_yesno(NULL, + "Do you wish to save your new axTLS configuration?", 5, 60); + } while (stat < 0); + end_dialog(); + + if (stat == 0) { + conf_write(NULL); + printf("\n\n" + "*** End of axTLS configuration.\n" + "*** Check the top-level Makefile for additional configuration options.\n\n"); + } else + printf("\n\nYour axTLS configuration changes were NOT saved.\n\n"); + + return 0; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/menu.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/menu.c new file mode 100644 index 0000000..0c13156 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/menu.c @@ -0,0 +1,390 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +struct menu rootmenu; +static struct menu **last_entry_ptr; + +struct file *file_list; +struct file *current_file; + +static void menu_warn(struct menu *menu, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "%s:%d:warning: ", menu->file->name, menu->lineno); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} + +static void prop_warn(struct property *prop, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "%s:%d:warning: ", prop->file->name, prop->lineno); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} + +void menu_init(void) +{ + current_entry = current_menu = &rootmenu; + last_entry_ptr = &rootmenu.list; +} + +void menu_add_entry(struct symbol *sym) +{ + struct menu *menu; + + menu = malloc(sizeof(*menu)); + memset(menu, 0, sizeof(*menu)); + menu->sym = sym; + menu->parent = current_menu; + menu->file = current_file; + menu->lineno = zconf_lineno(); + + *last_entry_ptr = menu; + last_entry_ptr = &menu->next; + current_entry = menu; +} + +void menu_end_entry(void) +{ +} + +void menu_add_menu(void) +{ + current_menu = current_entry; + last_entry_ptr = ¤t_entry->list; +} + +void menu_end_menu(void) +{ + last_entry_ptr = ¤t_menu->next; + current_menu = current_menu->parent; +} + +struct expr *menu_check_dep(struct expr *e) +{ + if (!e) + return e; + + switch (e->type) { + case E_NOT: + e->left.expr = menu_check_dep(e->left.expr); + break; + case E_OR: + case E_AND: + e->left.expr = menu_check_dep(e->left.expr); + e->right.expr = menu_check_dep(e->right.expr); + break; + case E_SYMBOL: + /* change 'm' into 'm' && MODULES */ + if (e->left.sym == &symbol_mod) + return expr_alloc_and(e, expr_alloc_symbol(modules_sym)); + break; + default: + break; + } + return e; +} + +void menu_add_dep(struct expr *dep) +{ + current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep)); +} + +void menu_set_type(int type) +{ + struct symbol *sym = current_entry->sym; + + if (sym->type == type) + return; + if (sym->type == S_UNKNOWN) { + sym->type = type; + return; + } + menu_warn(current_entry, "type of '%s' redefined from '%s' to '%s'\n", + sym->name ? sym->name : "", + sym_type_name(sym->type), sym_type_name(type)); +} + +struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep) +{ + struct property *prop = prop_alloc(type, current_entry->sym); + + prop->menu = current_entry; + prop->text = prompt; + prop->expr = expr; + prop->visible.expr = menu_check_dep(dep); + + if (prompt) { + if (current_entry->prompt) + menu_warn(current_entry, "prompt redefined\n"); + current_entry->prompt = prop; + } + + return prop; +} + +void menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep) +{ + menu_add_prop(type, prompt, NULL, dep); +} + +void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep) +{ + menu_add_prop(type, NULL, expr, dep); +} + +void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep) +{ + menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep); +} + +void sym_check_prop(struct symbol *sym) +{ + struct property *prop; + struct symbol *sym2; + for (prop = sym->prop; prop; prop = prop->next) { + switch (prop->type) { + case P_DEFAULT: + if ((sym->type == S_STRING || sym->type == S_INT || sym->type == S_HEX) && + prop->expr->type != E_SYMBOL) + prop_warn(prop, + "default for config symbol '%'" + " must be a single symbol", sym->name); + break; + case P_SELECT: + sym2 = prop_get_symbol(prop); + if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE) + prop_warn(prop, + "config symbol '%s' uses select, but is " + "not boolean or tristate", sym->name); + else if (sym2->type == S_UNKNOWN) + prop_warn(prop, + "'select' used by config symbol '%s' " + "refer to undefined symbol '%s'", + sym->name, sym2->name); + else if (sym2->type != S_BOOLEAN && sym2->type != S_TRISTATE) + prop_warn(prop, + "'%s' has wrong type. 'select' only " + "accept arguments of boolean and " + "tristate type", sym2->name); + break; + case P_RANGE: + if (sym->type != S_INT && sym->type != S_HEX) + prop_warn(prop, "range is only allowed " + "for int or hex symbols"); + if (!sym_string_valid(sym, prop->expr->left.sym->name) || + !sym_string_valid(sym, prop->expr->right.sym->name)) + prop_warn(prop, "range is invalid"); + break; + default: + ; + } + } +} + +void menu_finalize(struct menu *parent) +{ + struct menu *menu, *last_menu; + struct symbol *sym; + struct property *prop; + struct expr *parentdep, *basedep, *dep, *dep2, **ep; + + sym = parent->sym; + if (parent->list) { + if (sym && sym_is_choice(sym)) { + /* find the first choice value and find out choice type */ + for (menu = parent->list; menu; menu = menu->next) { + if (menu->sym) { + current_entry = parent; + menu_set_type(menu->sym->type); + current_entry = menu; + menu_set_type(sym->type); + break; + } + } + parentdep = expr_alloc_symbol(sym); + } else if (parent->prompt) + parentdep = parent->prompt->visible.expr; + else + parentdep = parent->dep; + + for (menu = parent->list; menu; menu = menu->next) { + basedep = expr_transform(menu->dep); + basedep = expr_alloc_and(expr_copy(parentdep), basedep); + basedep = expr_eliminate_dups(basedep); + menu->dep = basedep; + if (menu->sym) + prop = menu->sym->prop; + else + prop = menu->prompt; + for (; prop; prop = prop->next) { + if (prop->menu != menu) + continue; + dep = expr_transform(prop->visible.expr); + dep = expr_alloc_and(expr_copy(basedep), dep); + dep = expr_eliminate_dups(dep); + if (menu->sym && menu->sym->type != S_TRISTATE) + dep = expr_trans_bool(dep); + prop->visible.expr = dep; + if (prop->type == P_SELECT) { + struct symbol *es = prop_get_symbol(prop); + es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr, + expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep))); + } + } + } + for (menu = parent->list; menu; menu = menu->next) + menu_finalize(menu); + } else if (sym) { + basedep = parent->prompt ? parent->prompt->visible.expr : NULL; + basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no); + basedep = expr_eliminate_dups(expr_transform(basedep)); + last_menu = NULL; + for (menu = parent->next; menu; menu = menu->next) { + dep = menu->prompt ? menu->prompt->visible.expr : menu->dep; + if (!expr_contains_symbol(dep, sym)) + break; + if (expr_depends_symbol(dep, sym)) + goto next; + dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no); + dep = expr_eliminate_dups(expr_transform(dep)); + dep2 = expr_copy(basedep); + expr_eliminate_eq(&dep, &dep2); + expr_free(dep); + if (!expr_is_yes(dep2)) { + expr_free(dep2); + break; + } + expr_free(dep2); + next: + menu_finalize(menu); + menu->parent = parent; + last_menu = menu; + } + if (last_menu) { + parent->list = parent->next; + parent->next = last_menu->next; + last_menu->next = NULL; + } + } + for (menu = parent->list; menu; menu = menu->next) { + if (sym && sym_is_choice(sym) && menu->sym) { + menu->sym->flags |= SYMBOL_CHOICEVAL; + if (!menu->prompt) + menu_warn(menu, "choice value must have a prompt"); + for (prop = menu->sym->prop; prop; prop = prop->next) { + if (prop->type == P_PROMPT && prop->menu != menu) { + prop_warn(prop, "choice values " + "currently only support a " + "single prompt"); + } + if (prop->type == P_DEFAULT) + prop_warn(prop, "defaults for choice " + "values not supported"); + } + current_entry = menu; + menu_set_type(sym->type); + menu_add_symbol(P_CHOICE, sym, NULL); + prop = sym_get_choice_prop(sym); + for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr) + ; + *ep = expr_alloc_one(E_CHOICE, NULL); + (*ep)->right.sym = menu->sym; + } + if (menu->list && (!menu->prompt || !menu->prompt->text)) { + for (last_menu = menu->list; ; last_menu = last_menu->next) { + last_menu->parent = parent; + if (!last_menu->next) + break; + } + last_menu->next = menu->next; + menu->next = menu->list; + menu->list = NULL; + } + } + + if (sym && !(sym->flags & SYMBOL_WARNED)) { + if (sym->type == S_UNKNOWN) + menu_warn(parent, "config symbol defined " + "without type\n"); + + if (sym_is_choice(sym) && !parent->prompt) + menu_warn(parent, "choice must have a prompt\n"); + + /* Check properties connected to this symbol */ + sym_check_prop(sym); + sym->flags |= SYMBOL_WARNED; + } + + if (sym && !sym_is_optional(sym) && parent->prompt) { + sym->rev_dep.expr = expr_alloc_or(sym->rev_dep.expr, + expr_alloc_and(parent->prompt->visible.expr, + expr_alloc_symbol(&symbol_mod))); + } +} + +bool menu_is_visible(struct menu *menu) +{ + struct menu *child; + struct symbol *sym; + tristate visible; + + if (!menu->prompt) + return false; + sym = menu->sym; + if (sym) { + sym_calc_value(sym); + visible = menu->prompt->visible.tri; + } else + visible = menu->prompt->visible.tri = expr_calc_value(menu->prompt->visible.expr); + + if (visible != no) + return true; + if (!sym || sym_get_tristate_value(menu->sym) == no) + return false; + + for (child = menu->list; child; child = child->next) + if (menu_is_visible(child)) + return true; + return false; +} + +const char *menu_get_prompt(struct menu *menu) +{ + if (menu->prompt) + return menu->prompt->text; + else if (menu->sym) + return menu->sym->name; + return NULL; +} + +struct menu *menu_get_root_menu(struct menu *menu) +{ + return &rootmenu; +} + +struct menu *menu_get_parent_menu(struct menu *menu) +{ + enum prop_type type; + + for (; menu != &rootmenu; menu = menu->parent) { + type = menu->prompt ? menu->prompt->type : 0; + if (type == P_MENU) + break; + } + return menu; +} + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/mkconfigs b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/mkconfigs new file mode 100755 index 0000000..3cb7bb1 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/mkconfigs @@ -0,0 +1,67 @@ +#!/bin/sh +# +# Copyright (C) 2002 Khalid Aziz +# Copyright (C) 2002 Randy Dunlap +# Copyright (C) 2002 Al Stone +# Copyright (C) 2002 Hewlett-Packard Company +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Busybox version by Matteo Croce <3297627799 at wind.it> +# +# Rules to generate bbconfig.h from .config: +# - Retain lines that begin with "CONFIG_" +# - Retain lines that begin with "# CONFIG_" +# - lines that use double-quotes must \\-escape-quote them + +if [ $# -lt 1 ] +then + config=.config +else config=$1 +fi + +echo "#ifndef _BBCONFIG_H" +echo "#define _BBCONFIG_H" +echo \ +"/* + * busybox configuration options. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or + * NON INFRINGEMENT. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + * + * This file is generated automatically by scripts/config/mkconfigs. + * Do not edit. + * + */" + +echo "static char const bbconfig_config[] =" +echo "\"CONFIG_BEGIN=n\\n\\" +echo "`sed 's/\"/\\\\\"/g' $config | grep "^#\? \?CONFIG_" | awk '{ print $0 "\\\\n\\\\" }' `" +echo "CONFIG_END=n\\n\";" +echo "#endif /* _BBCONFIG_H */" diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/symbol.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/symbol.c new file mode 100644 index 0000000..ea62972 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/symbol.c @@ -0,0 +1,809 @@ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +struct symbol symbol_yes = { + .name = "y", + .curr = { "y", yes }, + .flags = SYMBOL_YES|SYMBOL_VALID, +}, symbol_mod = { + .name = "m", + .curr = { "m", mod }, + .flags = SYMBOL_MOD|SYMBOL_VALID, +}, symbol_no = { + .name = "n", + .curr = { "n", no }, + .flags = SYMBOL_NO|SYMBOL_VALID, +}, symbol_empty = { + .name = "", + .curr = { "", no }, + .flags = SYMBOL_VALID, +}; + +int sym_change_count; +struct symbol *modules_sym; +tristate modules_val; + +void sym_add_default(struct symbol *sym, const char *def) +{ + struct property *prop = prop_alloc(P_DEFAULT, sym); + + prop->expr = expr_alloc_symbol(sym_lookup(def, 1)); +} + +void sym_init(void) +{ + struct symbol *sym; + char *p; + static bool inited = false; + + if (inited) + return; + inited = true; + + sym = sym_lookup("VERSION", 0); + sym->type = S_STRING; + sym->flags |= SYMBOL_AUTO; + p = getenv("VERSION"); + if (p) + sym_add_default(sym, p); + + sym = sym_lookup("TARGET_ARCH", 0); + sym->type = S_STRING; + sym->flags |= SYMBOL_AUTO; + p = getenv("TARGET_ARCH"); + if (p) + sym_add_default(sym, p); + +} + +enum symbol_type sym_get_type(struct symbol *sym) +{ + enum symbol_type type = sym->type; + + if (type == S_TRISTATE) { + if (sym_is_choice_value(sym) && sym->visible == yes) + type = S_BOOLEAN; + else if (modules_val == no) + type = S_BOOLEAN; + } + return type; +} + +const char *sym_type_name(enum symbol_type type) +{ + switch (type) { + case S_BOOLEAN: + return "boolean"; + case S_TRISTATE: + return "tristate"; + case S_INT: + return "integer"; + case S_HEX: + return "hex"; + case S_STRING: + return "string"; + case S_UNKNOWN: + return "unknown"; + case S_OTHER: + break; + } + return "???"; +} + +struct property *sym_get_choice_prop(struct symbol *sym) +{ + struct property *prop; + + for_all_choices(sym, prop) + return prop; + return NULL; +} + +struct property *sym_get_default_prop(struct symbol *sym) +{ + struct property *prop; + + for_all_defaults(sym, prop) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + if (prop->visible.tri != no) + return prop; + } + return NULL; +} + +struct property *sym_get_range_prop(struct symbol *sym) +{ + struct property *prop; + + for_all_properties(sym, prop, P_RANGE) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + if (prop->visible.tri != no) + return prop; + } + return NULL; +} + +static void sym_calc_visibility(struct symbol *sym) +{ + struct property *prop; + tristate tri; + + /* any prompt visible? */ + tri = no; + for_all_prompts(sym, prop) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + tri = E_OR(tri, prop->visible.tri); + } + if (tri == mod && (sym->type != S_TRISTATE || modules_val == no)) + tri = yes; + if (sym->visible != tri) { + sym->visible = tri; + sym_set_changed(sym); + } + if (sym_is_choice_value(sym)) + return; + tri = no; + if (sym->rev_dep.expr) + tri = expr_calc_value(sym->rev_dep.expr); + if (tri == mod && sym_get_type(sym) == S_BOOLEAN) + tri = yes; + if (sym->rev_dep.tri != tri) { + sym->rev_dep.tri = tri; + sym_set_changed(sym); + } +} + +static struct symbol *sym_calc_choice(struct symbol *sym) +{ + struct symbol *def_sym; + struct property *prop; + struct expr *e; + + /* is the user choice visible? */ + def_sym = sym->user.val; + if (def_sym) { + sym_calc_visibility(def_sym); + if (def_sym->visible != no) + return def_sym; + } + + /* any of the defaults visible? */ + for_all_defaults(sym, prop) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + if (prop->visible.tri == no) + continue; + def_sym = prop_get_symbol(prop); + sym_calc_visibility(def_sym); + if (def_sym->visible != no) + return def_sym; + } + + /* just get the first visible value */ + prop = sym_get_choice_prop(sym); + for (e = prop->expr; e; e = e->left.expr) { + def_sym = e->right.sym; + sym_calc_visibility(def_sym); + if (def_sym->visible != no) + return def_sym; + } + + /* no choice? reset tristate value */ + sym->curr.tri = no; + return NULL; +} + +void sym_calc_value(struct symbol *sym) +{ + struct symbol_value newval, oldval; + struct property *prop; + struct expr *e; + + if (!sym) + return; + + if (sym->flags & SYMBOL_VALID) + return; + sym->flags |= SYMBOL_VALID; + + oldval = sym->curr; + + switch (sym->type) { + case S_INT: + case S_HEX: + case S_STRING: + newval = symbol_empty.curr; + break; + case S_BOOLEAN: + case S_TRISTATE: + newval = symbol_no.curr; + break; + default: + sym->curr.val = sym->name; + sym->curr.tri = no; + return; + } + if (!sym_is_choice_value(sym)) + sym->flags &= ~SYMBOL_WRITE; + + sym_calc_visibility(sym); + + /* set default if recursively called */ + sym->curr = newval; + + switch (sym_get_type(sym)) { + case S_BOOLEAN: + case S_TRISTATE: + if (sym_is_choice_value(sym) && sym->visible == yes) { + prop = sym_get_choice_prop(sym); + newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no; + } else if (E_OR(sym->visible, sym->rev_dep.tri) != no) { + sym->flags |= SYMBOL_WRITE; + if (sym_has_value(sym)) + newval.tri = sym->user.tri; + else if (!sym_is_choice(sym)) { + prop = sym_get_default_prop(sym); + if (prop) + newval.tri = expr_calc_value(prop->expr); + } + newval.tri = E_OR(E_AND(newval.tri, sym->visible), sym->rev_dep.tri); + } else if (!sym_is_choice(sym)) { + prop = sym_get_default_prop(sym); + if (prop) { + sym->flags |= SYMBOL_WRITE; + newval.tri = expr_calc_value(prop->expr); + } + } + if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN) + newval.tri = yes; + break; + case S_STRING: + case S_HEX: + case S_INT: + if (sym->visible != no) { + sym->flags |= SYMBOL_WRITE; + if (sym_has_value(sym)) { + newval.val = sym->user.val; + break; + } + } + prop = sym_get_default_prop(sym); + if (prop) { + struct symbol *ds = prop_get_symbol(prop); + if (ds) { + sym->flags |= SYMBOL_WRITE; + sym_calc_value(ds); + newval.val = ds->curr.val; + } + } + break; + default: + ; + } + + sym->curr = newval; + if (sym_is_choice(sym) && newval.tri == yes) + sym->curr.val = sym_calc_choice(sym); + + if (memcmp(&oldval, &sym->curr, sizeof(oldval))) + sym_set_changed(sym); + if (modules_sym == sym) + modules_val = modules_sym->curr.tri; + + if (sym_is_choice(sym)) { + int flags = sym->flags & (SYMBOL_CHANGED | SYMBOL_WRITE); + prop = sym_get_choice_prop(sym); + for (e = prop->expr; e; e = e->left.expr) { + e->right.sym->flags |= flags; + if (flags & SYMBOL_CHANGED) + sym_set_changed(e->right.sym); + } + } +} + +void sym_clear_all_valid(void) +{ + struct symbol *sym; + int i; + + for_all_symbols(i, sym) + sym->flags &= ~SYMBOL_VALID; + sym_change_count++; + if (modules_sym) + sym_calc_value(modules_sym); +} + +void sym_set_changed(struct symbol *sym) +{ + struct property *prop; + + sym->flags |= SYMBOL_CHANGED; + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->menu) + prop->menu->flags |= MENU_CHANGED; + } +} + +void sym_set_all_changed(void) +{ + struct symbol *sym; + int i; + + for_all_symbols(i, sym) + sym_set_changed(sym); +} + +bool sym_tristate_within_range(struct symbol *sym, tristate val) +{ + int type = sym_get_type(sym); + + if (sym->visible == no) + return false; + + if (type != S_BOOLEAN && type != S_TRISTATE) + return false; + + if (type == S_BOOLEAN && val == mod) + return false; + if (sym->visible <= sym->rev_dep.tri) + return false; + if (sym_is_choice_value(sym) && sym->visible == yes) + return val == yes; + return val >= sym->rev_dep.tri && val <= sym->visible; +} + +bool sym_set_tristate_value(struct symbol *sym, tristate val) +{ + tristate oldval = sym_get_tristate_value(sym); + + if (oldval != val && !sym_tristate_within_range(sym, val)) + return false; + + if (sym->flags & SYMBOL_NEW) { + sym->flags &= ~SYMBOL_NEW; + sym_set_changed(sym); + } + if (sym_is_choice_value(sym) && val == yes) { + struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); + + cs->user.val = sym; + cs->flags &= ~SYMBOL_NEW; + } + + sym->user.tri = val; + if (oldval != val) { + sym_clear_all_valid(); + if (sym == modules_sym) + sym_set_all_changed(); + } + + return true; +} + +tristate sym_toggle_tristate_value(struct symbol *sym) +{ + tristate oldval, newval; + + oldval = newval = sym_get_tristate_value(sym); + do { + switch (newval) { + case no: + newval = mod; + break; + case mod: + newval = yes; + break; + case yes: + newval = no; + break; + } + if (sym_set_tristate_value(sym, newval)) + break; + } while (oldval != newval); + return newval; +} + +bool sym_string_valid(struct symbol *sym, const char *str) +{ + signed char ch; + + switch (sym->type) { + case S_STRING: + return true; + case S_INT: + ch = *str++; + if (ch == '-') + ch = *str++; + if (!isdigit(ch)) + return false; + if (ch == '0' && *str != 0) + return false; + while ((ch = *str++)) { + if (!isdigit(ch)) + return false; + } + return true; + case S_HEX: + if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) + str += 2; + ch = *str++; + do { + if (!isxdigit(ch)) + return false; + } while ((ch = *str++)); + return true; + case S_BOOLEAN: + case S_TRISTATE: + switch (str[0]) { + case 'y': case 'Y': + case 'm': case 'M': + case 'n': case 'N': + return true; + } + return false; + default: + return false; + } +} + +bool sym_string_within_range(struct symbol *sym, const char *str) +{ + struct property *prop; + int val; + + switch (sym->type) { + case S_STRING: + return sym_string_valid(sym, str); + case S_INT: + if (!sym_string_valid(sym, str)) + return false; + prop = sym_get_range_prop(sym); + if (!prop) + return true; + val = strtol(str, NULL, 10); + return val >= strtol(prop->expr->left.sym->name, NULL, 10) && + val <= strtol(prop->expr->right.sym->name, NULL, 10); + case S_HEX: + if (!sym_string_valid(sym, str)) + return false; + prop = sym_get_range_prop(sym); + if (!prop) + return true; + val = strtol(str, NULL, 16); + return val >= strtol(prop->expr->left.sym->name, NULL, 16) && + val <= strtol(prop->expr->right.sym->name, NULL, 16); + case S_BOOLEAN: + case S_TRISTATE: + switch (str[0]) { + case 'y': case 'Y': + return sym_tristate_within_range(sym, yes); + case 'm': case 'M': + return sym_tristate_within_range(sym, mod); + case 'n': case 'N': + return sym_tristate_within_range(sym, no); + } + return false; + default: + return false; + } +} + +bool sym_set_string_value(struct symbol *sym, const char *newval) +{ + const char *oldval; + char *val; + int size; + + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + switch (newval[0]) { + case 'y': case 'Y': + return sym_set_tristate_value(sym, yes); + case 'm': case 'M': + return sym_set_tristate_value(sym, mod); + case 'n': case 'N': + return sym_set_tristate_value(sym, no); + } + return false; + default: + ; + } + + if (!sym_string_within_range(sym, newval)) + return false; + + if (sym->flags & SYMBOL_NEW) { + sym->flags &= ~SYMBOL_NEW; + sym_set_changed(sym); + } + + oldval = sym->user.val; + size = strlen(newval) + 1; + if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) { + size += 2; + sym->user.val = val = malloc(size); + *val++ = '0'; + *val++ = 'x'; + } else if (!oldval || strcmp(oldval, newval)) + sym->user.val = val = malloc(size); + else + return true; + + strcpy(val, newval); + free((void *)oldval); + sym_clear_all_valid(); + + return true; +} + +const char *sym_get_string_value(struct symbol *sym) +{ + tristate val; + + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + val = sym_get_tristate_value(sym); + switch (val) { + case no: + return "n"; + case mod: + return "m"; + case yes: + return "y"; + } + break; + default: + ; + } + return (const char *)sym->curr.val; +} + +bool sym_is_changable(struct symbol *sym) +{ + return sym->visible > sym->rev_dep.tri; +} + +struct symbol *sym_lookup(const char *name, int isconst) +{ + struct symbol *symbol; + const char *ptr; + char *new_name; + int hash = 0; + + if (name) { + if (name[0] && !name[1]) { + switch (name[0]) { + case 'y': return &symbol_yes; + case 'm': return &symbol_mod; + case 'n': return &symbol_no; + } + } + for (ptr = name; *ptr; ptr++) + hash += *ptr; + hash &= 0xff; + + for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { + if (!strcmp(symbol->name, name)) { + if ((isconst && symbol->flags & SYMBOL_CONST) || + (!isconst && !(symbol->flags & SYMBOL_CONST))) + return symbol; + } + } + new_name = strdup(name); + } else { + new_name = NULL; + hash = 256; + } + + symbol = malloc(sizeof(*symbol)); + memset(symbol, 0, sizeof(*symbol)); + symbol->name = new_name; + symbol->type = S_UNKNOWN; + symbol->flags = SYMBOL_NEW; + if (isconst) + symbol->flags |= SYMBOL_CONST; + + symbol->next = symbol_hash[hash]; + symbol_hash[hash] = symbol; + + return symbol; +} + +struct symbol *sym_find(const char *name) +{ + struct symbol *symbol = NULL; + const char *ptr; + int hash = 0; + + if (!name) + return NULL; + + if (name[0] && !name[1]) { + switch (name[0]) { + case 'y': return &symbol_yes; + case 'm': return &symbol_mod; + case 'n': return &symbol_no; + } + } + for (ptr = name; *ptr; ptr++) + hash += *ptr; + hash &= 0xff; + + for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { + if (!strcmp(symbol->name, name) && + !(symbol->flags & SYMBOL_CONST)) + break; + } + + return symbol; +} + +struct symbol **sym_re_search(const char *pattern) +{ + struct symbol *sym, **sym_arr = NULL; + int i, cnt, size; + regex_t re; + + cnt = size = 0; + /* Skip if empty */ + if (strlen(pattern) == 0) + return NULL; + if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB|REG_ICASE)) + return NULL; + + for_all_symbols(i, sym) { + if (sym->flags & SYMBOL_CONST || !sym->name) + continue; + if (regexec(&re, sym->name, 0, NULL, 0)) + continue; + if (cnt + 1 >= size) { + void *tmp = sym_arr; + size += 16; + sym_arr = realloc(sym_arr, size * sizeof(struct symbol *)); + if (!sym_arr) { + free(tmp); + return NULL; + } + } + sym_arr[cnt++] = sym; + } + if (sym_arr) + sym_arr[cnt] = NULL; + regfree(&re); + + return sym_arr; +} + + +struct symbol *sym_check_deps(struct symbol *sym); + +static struct symbol *sym_check_expr_deps(struct expr *e) +{ + struct symbol *sym; + + if (!e) + return NULL; + switch (e->type) { + case E_OR: + case E_AND: + sym = sym_check_expr_deps(e->left.expr); + if (sym) + return sym; + return sym_check_expr_deps(e->right.expr); + case E_NOT: + return sym_check_expr_deps(e->left.expr); + case E_EQUAL: + case E_UNEQUAL: + sym = sym_check_deps(e->left.sym); + if (sym) + return sym; + return sym_check_deps(e->right.sym); + case E_SYMBOL: + return sym_check_deps(e->left.sym); + default: + break; + } + printf("Oops! How to check %d?\n", e->type); + return NULL; +} + +struct symbol *sym_check_deps(struct symbol *sym) +{ + struct symbol *sym2; + struct property *prop; + + if (sym->flags & SYMBOL_CHECK_DONE) + return NULL; + if (sym->flags & SYMBOL_CHECK) { + printf("Warning! Found recursive dependency: %s", sym->name); + return sym; + } + + sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); + sym2 = sym_check_expr_deps(sym->rev_dep.expr); + if (sym2) + goto out; + + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->type == P_CHOICE || prop->type == P_SELECT) + continue; + sym2 = sym_check_expr_deps(prop->visible.expr); + if (sym2) + goto out; + if (prop->type != P_DEFAULT || sym_is_choice(sym)) + continue; + sym2 = sym_check_expr_deps(prop->expr); + if (sym2) + goto out; + } +out: + if (sym2) + printf(" %s", sym->name); + sym->flags &= ~SYMBOL_CHECK; + return sym2; +} + +struct property *prop_alloc(enum prop_type type, struct symbol *sym) +{ + struct property *prop; + struct property **propp; + + prop = malloc(sizeof(*prop)); + memset(prop, 0, sizeof(*prop)); + prop->type = type; + prop->sym = sym; + prop->file = current_file; + prop->lineno = zconf_lineno(); + + /* append property to the prop list of symbol */ + if (sym) { + for (propp = &sym->prop; *propp; propp = &(*propp)->next) + ; + *propp = prop; + } + + return prop; +} + +struct symbol *prop_get_symbol(struct property *prop) +{ + if (prop->expr && (prop->expr->type == E_SYMBOL || + prop->expr->type == E_CHOICE)) + return prop->expr->left.sym; + return NULL; +} + +const char *prop_get_type_name(enum prop_type type) +{ + switch (type) { + case P_PROMPT: + return "prompt"; + case P_COMMENT: + return "comment"; + case P_MENU: + return "menu"; + case P_DEFAULT: + return "default"; + case P_CHOICE: + return "choice"; + case P_SELECT: + return "select"; + case P_RANGE: + return "range"; + case P_UNKNOWN: + break; + } + return "unknown"; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/util.c b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/util.c new file mode 100644 index 0000000..8fc95a2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/util.c @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2002-2005 Roman Zippel + * Copyright (C) 2002-2005 Sam Ravnborg + * + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include "lkc.h" + +/* file already present in list? If not add it */ +struct file *file_lookup(const char *name) +{ + struct file *file; + + for (file = file_list; file; file = file->next) { + if (!strcmp(name, file->name)) + return file; + } + + file = malloc(sizeof(*file)); + memset(file, 0, sizeof(*file)); + file->name = strdup(name); + file->next = file_list; + file_list = file; + return file; +} + +/* write a dependency file as used by kbuild to track dependencies */ +int file_write_dep(const char *name) +{ + struct file *file; + FILE *out; + + if (!name) + name = "config/.config.cmd"; + out = fopen("config/.config.tmp", "w"); + if (!out) + return 1; + fprintf(out, "deps_config := \\\n"); + for (file = file_list; file; file = file->next) { + if (file->next) + fprintf(out, "\t%s \\\n", file->name); + else + fprintf(out, "\t%s\n", file->name); + } + fprintf(out, "\n.config include/config.h: $(deps_config)\n\n$(deps_config):\n"); + fclose(out); + rename(".config.tmp", name); + return 0; +} + + +/* Allocate initial growable sting */ +struct gstr str_new(void) +{ + struct gstr gs; + gs.s = malloc(sizeof(char) * 64); + gs.len = 16; + strcpy(gs.s, "\0"); + return gs; +} + +/* Allocate and assign growable string */ +struct gstr str_assign(const char *s) +{ + struct gstr gs; + gs.s = strdup(s); + gs.len = strlen(s) + 1; + return gs; +} + +/* Free storage for growable string */ +void str_free(struct gstr *gs) +{ + if (gs->s) + free(gs->s); + gs->s = NULL; + gs->len = 0; +} + +/* Append to growable string */ +void str_append(struct gstr *gs, const char *s) +{ + size_t l = strlen(gs->s) + strlen(s) + 1; + if (l > gs->len) { + gs->s = realloc(gs->s, l); + gs->len = l; + } + strcat(gs->s, s); +} + +/* Append printf formatted string to growable string */ +void str_printf(struct gstr *gs, const char *fmt, ...) +{ + va_list ap; + char s[10000]; /* big enough... */ + va_start(ap, fmt); + vsnprintf(s, sizeof(s), fmt, ap); + str_append(gs, s); + va_end(ap); +} + +/* Retreive value of growable string */ +const char *str_get(struct gstr *gs) +{ + return gs->s; +} + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.l b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.l new file mode 100644 index 0000000..55517b2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.l @@ -0,0 +1,366 @@ +%option backup nostdinit noyywrap never-interactive full ecs +%option 8bit backup nodefault perf-report perf-report +%x COMMAND HELP STRING PARAM +%{ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include + +#define LKC_DIRECT_LINK +#include "lkc.h" + +#define START_STRSIZE 16 + +char *text; +static char *text_ptr; +static int text_size, text_asize; + +struct buffer { + struct buffer *parent; + YY_BUFFER_STATE state; +}; + +struct buffer *current_buf; + +static int last_ts, first_ts; + +static void zconf_endhelp(void); +static struct buffer *zconf_endfile(void); + +void new_string(void) +{ + text = malloc(START_STRSIZE); + text_asize = START_STRSIZE; + text_ptr = text; + text_size = 0; + *text_ptr = 0; +} + +void append_string(const char *str, int size) +{ + int new_size = text_size + size + 1; + if (new_size > text_asize) { + text = realloc(text, new_size); + text_asize = new_size; + text_ptr = text + text_size; + } + memcpy(text_ptr, str, size); + text_ptr += size; + text_size += size; + *text_ptr = 0; +} + +void alloc_string(const char *str, int size) +{ + text = malloc(size + 1); + memcpy(text, str, size); + text[size] = 0; +} +%} + +ws [ \n\t] +n [A-Za-z0-9_] + +%% + int str = 0; + int ts, i; + +[ \t]*#.*\n current_file->lineno++; +[ \t]*#.* + +[ \t]*\n current_file->lineno++; return T_EOL; + +[ \t]+ { + BEGIN(COMMAND); +} + +. { + unput(yytext[0]); + BEGIN(COMMAND); +} + + +{ + "mainmenu" BEGIN(PARAM); return T_MAINMENU; + "menu" BEGIN(PARAM); return T_MENU; + "endmenu" BEGIN(PARAM); return T_ENDMENU; + "source" BEGIN(PARAM); return T_SOURCE; + "choice" BEGIN(PARAM); return T_CHOICE; + "endchoice" BEGIN(PARAM); return T_ENDCHOICE; + "comment" BEGIN(PARAM); return T_COMMENT; + "config" BEGIN(PARAM); return T_CONFIG; + "menuconfig" BEGIN(PARAM); return T_MENUCONFIG; + "help" BEGIN(PARAM); return T_HELP; + "if" BEGIN(PARAM); return T_IF; + "endif" BEGIN(PARAM); return T_ENDIF; + "depends" BEGIN(PARAM); return T_DEPENDS; + "requires" BEGIN(PARAM); return T_REQUIRES; + "optional" BEGIN(PARAM); return T_OPTIONAL; + "default" BEGIN(PARAM); return T_DEFAULT; + "prompt" BEGIN(PARAM); return T_PROMPT; + "tristate" BEGIN(PARAM); return T_TRISTATE; + "def_tristate" BEGIN(PARAM); return T_DEF_TRISTATE; + "bool" BEGIN(PARAM); return T_BOOLEAN; + "boolean" BEGIN(PARAM); return T_BOOLEAN; + "def_bool" BEGIN(PARAM); return T_DEF_BOOLEAN; + "def_boolean" BEGIN(PARAM); return T_DEF_BOOLEAN; + "int" BEGIN(PARAM); return T_INT; + "hex" BEGIN(PARAM); return T_HEX; + "string" BEGIN(PARAM); return T_STRING; + "select" BEGIN(PARAM); return T_SELECT; + "enable" BEGIN(PARAM); return T_SELECT; + "range" BEGIN(PARAM); return T_RANGE; + {n}+ { + alloc_string(yytext, yyleng); + zconflval.string = text; + return T_WORD; + } + . + \n current_file->lineno++; BEGIN(INITIAL); +} + +{ + "&&" return T_AND; + "||" return T_OR; + "(" return T_OPEN_PAREN; + ")" return T_CLOSE_PAREN; + "!" return T_NOT; + "=" return T_EQUAL; + "!=" return T_UNEQUAL; + "if" return T_IF; + "on" return T_ON; + \"|\' { + str = yytext[0]; + new_string(); + BEGIN(STRING); + } + \n BEGIN(INITIAL); current_file->lineno++; return T_EOL; + --- /* ignore */ + ({n}|[-/.])+ { + alloc_string(yytext, yyleng); + zconflval.string = text; + return T_WORD; + } + #.* /* comment */ + \\\n current_file->lineno++; + . + <> { + BEGIN(INITIAL); + } +} + +{ + [^'"\\\n]+/\n { + append_string(yytext, yyleng); + zconflval.string = text; + return T_WORD_QUOTE; + } + [^'"\\\n]+ { + append_string(yytext, yyleng); + } + \\.?/\n { + append_string(yytext + 1, yyleng - 1); + zconflval.string = text; + return T_WORD_QUOTE; + } + \\.? { + append_string(yytext + 1, yyleng - 1); + } + \'|\" { + if (str == yytext[0]) { + BEGIN(PARAM); + zconflval.string = text; + return T_WORD_QUOTE; + } else + append_string(yytext, 1); + } + \n { + printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno()); + current_file->lineno++; + BEGIN(INITIAL); + return T_EOL; + } + <> { + BEGIN(INITIAL); + } +} + +{ + [ \t]+ { + ts = 0; + for (i = 0; i < yyleng; i++) { + if (yytext[i] == '\t') + ts = (ts & ~7) + 8; + else + ts++; + } + last_ts = ts; + if (first_ts) { + if (ts < first_ts) { + zconf_endhelp(); + return T_HELPTEXT; + } + ts -= first_ts; + while (ts > 8) { + append_string(" ", 8); + ts -= 8; + } + append_string(" ", ts); + } + } + [ \t]*\n/[^ \t\n] { + current_file->lineno++; + zconf_endhelp(); + return T_HELPTEXT; + } + [ \t]*\n { + current_file->lineno++; + append_string("\n", 1); + } + [^ \t\n].* { + append_string(yytext, yyleng); + if (!first_ts) + first_ts = last_ts; + } + <> { + zconf_endhelp(); + return T_HELPTEXT; + } +} + +<> { + if (current_buf) { + zconf_endfile(); + return T_EOF; + } + fclose(yyin); + yyterminate(); +} + +%% +void zconf_starthelp(void) +{ + new_string(); + last_ts = first_ts = 0; + BEGIN(HELP); +} + +static void zconf_endhelp(void) +{ + zconflval.string = text; + BEGIN(INITIAL); +} + + +/* + * Try to open specified file with following names: + * ./name + * $(srctree)/name + * The latter is used when srctree is separate from objtree + * when compiling the kernel. + * Return NULL if file is not found. + */ +FILE *zconf_fopen(const char *name) +{ + char *env, fullname[PATH_MAX+1]; + FILE *f; + + f = fopen(name, "r"); + if (!f && name[0] != '/') { + env = getenv(SRCTREE); + if (env) { + sprintf(fullname, "%s/%s", env, name); + f = fopen(fullname, "r"); + } + } + return f; +} + +void zconf_initscan(const char *name) +{ + yyin = zconf_fopen(name); + if (!yyin) { + printf("can't find file %s\n", name); + exit(1); + } + + current_buf = malloc(sizeof(*current_buf)); + memset(current_buf, 0, sizeof(*current_buf)); + + current_file = file_lookup(name); + current_file->lineno = 1; + current_file->flags = FILE_BUSY; +} + +void zconf_nextfile(const char *name) +{ + struct file *file = file_lookup(name); + struct buffer *buf = malloc(sizeof(*buf)); + memset(buf, 0, sizeof(*buf)); + + current_buf->state = YY_CURRENT_BUFFER; + yyin = zconf_fopen(name); + if (!yyin) { + printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name); + exit(1); + } + yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); + buf->parent = current_buf; + current_buf = buf; + + if (file->flags & FILE_BUSY) { + printf("recursive scan (%s)?\n", name); + exit(1); + } + if (file->flags & FILE_SCANNED) { + printf("file %s already scanned?\n", name); + exit(1); + } + file->flags |= FILE_BUSY; + file->lineno = 1; + file->parent = current_file; + current_file = file; +} + +static struct buffer *zconf_endfile(void) +{ + struct buffer *parent; + + current_file->flags |= FILE_SCANNED; + current_file->flags &= ~FILE_BUSY; + current_file = current_file->parent; + + parent = current_buf->parent; + if (parent) { + fclose(yyin); + yy_delete_buffer(YY_CURRENT_BUFFER); + yy_switch_to_buffer(parent->state); + } + free(current_buf); + current_buf = parent; + + return parent; +} + +int zconf_lineno(void) +{ + if (current_buf) + return current_file->lineno - 1; + else + return 0; +} + +char *zconf_curname(void) +{ + if (current_buf) + return current_file->name; + else + return ""; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.tab.c_shipped b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.tab.c_shipped new file mode 100644 index 0000000..cc68dcb --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.tab.c_shipped @@ -0,0 +1,2130 @@ +/* A Bison parser, made by GNU Bison 1.875a. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Written by Richard Stallman by simplifying the original so called + ``semantic'' parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* If NAME_PREFIX is specified substitute the variables and functions + names. */ +#define yyparse zconfparse +#define yylex zconflex +#define yyerror zconferror +#define yylval zconflval +#define yychar zconfchar +#define yydebug zconfdebug +#define yynerrs zconfnerrs + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + T_MAINMENU = 258, + T_MENU = 259, + T_ENDMENU = 260, + T_SOURCE = 261, + T_CHOICE = 262, + T_ENDCHOICE = 263, + T_COMMENT = 264, + T_CONFIG = 265, + T_MENUCONFIG = 266, + T_HELP = 267, + T_HELPTEXT = 268, + T_IF = 269, + T_ENDIF = 270, + T_DEPENDS = 271, + T_REQUIRES = 272, + T_OPTIONAL = 273, + T_PROMPT = 274, + T_DEFAULT = 275, + T_TRISTATE = 276, + T_DEF_TRISTATE = 277, + T_BOOLEAN = 278, + T_DEF_BOOLEAN = 279, + T_STRING = 280, + T_INT = 281, + T_HEX = 282, + T_WORD = 283, + T_WORD_QUOTE = 284, + T_UNEQUAL = 285, + T_EOF = 286, + T_EOL = 287, + T_CLOSE_PAREN = 288, + T_OPEN_PAREN = 289, + T_ON = 290, + T_SELECT = 291, + T_RANGE = 292, + T_OR = 293, + T_AND = 294, + T_EQUAL = 295, + T_NOT = 296 + }; +#endif +#define T_MAINMENU 258 +#define T_MENU 259 +#define T_ENDMENU 260 +#define T_SOURCE 261 +#define T_CHOICE 262 +#define T_ENDCHOICE 263 +#define T_COMMENT 264 +#define T_CONFIG 265 +#define T_MENUCONFIG 266 +#define T_HELP 267 +#define T_HELPTEXT 268 +#define T_IF 269 +#define T_ENDIF 270 +#define T_DEPENDS 271 +#define T_REQUIRES 272 +#define T_OPTIONAL 273 +#define T_PROMPT 274 +#define T_DEFAULT 275 +#define T_TRISTATE 276 +#define T_DEF_TRISTATE 277 +#define T_BOOLEAN 278 +#define T_DEF_BOOLEAN 279 +#define T_STRING 280 +#define T_INT 281 +#define T_HEX 282 +#define T_WORD 283 +#define T_WORD_QUOTE 284 +#define T_UNEQUAL 285 +#define T_EOF 286 +#define T_EOL 287 +#define T_CLOSE_PAREN 288 +#define T_OPEN_PAREN 289 +#define T_ON 290 +#define T_SELECT 291 +#define T_RANGE 292 +#define T_OR 293 +#define T_AND 294 +#define T_EQUAL 295 +#define T_NOT 296 + + + + +/* Copy the first part of user declarations. */ + + +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include +#include + +#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt) + +#define PRINTD 0x0001 +#define DEBUG_PARSE 0x0002 + +int cdebug = PRINTD; + +extern int zconflex(void); +static void zconfprint(const char *err, ...); +static void zconferror(const char *err); +static bool zconf_endtoken(int token, int starttoken, int endtoken); + +struct symbol *symbol_hash[257]; + +static struct menu *current_menu, *current_entry; + +#define YYERROR_VERBOSE + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) + +typedef union YYSTYPE { + int token; + char *string; + struct symbol *symbol; + struct expr *expr; + struct menu *menu; +} YYSTYPE; +/* Line 191 of yacc.c. */ + +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +#define LKC_DIRECT_LINK +#include "lkc.h" + + +/* Line 214 of yacc.c. */ + + +#if ! defined (yyoverflow) || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# if YYSTACK_USE_ALLOCA +# define YYSTACK_ALLOC alloca +# else +# ifndef YYSTACK_USE_ALLOCA +# if defined (alloca) || (defined (_ALLOCA_H) && defined (__GNUC__)) +# define YYSTACK_ALLOC alloca +# else +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# else +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +# define YYSTACK_ALLOC malloc +# define YYSTACK_FREE free +# endif +#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ + + +#if (! defined (yyoverflow) \ + && (! defined (__cplusplus) \ + || (YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + short yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + register YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (0) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined (__STDC__) || defined (__cplusplus) + typedef signed char yysigned_char; +#else + typedef short yysigned_char; +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 2 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 201 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 42 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 41 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 104 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 182 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 296 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const unsigned char yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const unsigned short yyprhs[] = +{ + 0, 0, 3, 4, 7, 9, 11, 13, 17, 19, + 21, 23, 26, 28, 30, 32, 34, 36, 38, 42, + 45, 49, 52, 53, 56, 59, 62, 65, 69, 74, + 78, 83, 87, 91, 95, 100, 105, 110, 116, 119, + 122, 124, 128, 131, 132, 135, 138, 141, 144, 149, + 153, 157, 160, 165, 166, 169, 173, 175, 179, 182, + 183, 186, 189, 192, 196, 199, 201, 205, 208, 209, + 212, 215, 218, 222, 226, 228, 232, 235, 238, 241, + 242, 245, 248, 253, 257, 261, 262, 265, 267, 269, + 272, 275, 278, 280, 282, 283, 286, 288, 292, 296, + 300, 303, 307, 311, 313 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yysigned_char yyrhs[] = +{ + 43, 0, -1, -1, 43, 44, -1, 45, -1, 55, + -1, 66, -1, 3, 77, 79, -1, 5, -1, 15, + -1, 8, -1, 1, 79, -1, 61, -1, 71, -1, + 47, -1, 49, -1, 69, -1, 79, -1, 10, 28, + 32, -1, 46, 50, -1, 11, 28, 32, -1, 48, + 50, -1, -1, 50, 51, -1, 50, 75, -1, 50, + 73, -1, 50, 32, -1, 21, 76, 32, -1, 22, + 81, 80, 32, -1, 23, 76, 32, -1, 24, 81, + 80, 32, -1, 26, 76, 32, -1, 27, 76, 32, + -1, 25, 76, 32, -1, 19, 77, 80, 32, -1, + 20, 81, 80, 32, -1, 36, 28, 80, 32, -1, + 37, 82, 82, 80, 32, -1, 7, 32, -1, 52, + 56, -1, 78, -1, 53, 58, 54, -1, 53, 58, + -1, -1, 56, 57, -1, 56, 75, -1, 56, 73, + -1, 56, 32, -1, 19, 77, 80, 32, -1, 21, + 76, 32, -1, 23, 76, 32, -1, 18, 32, -1, + 20, 28, 80, 32, -1, -1, 58, 45, -1, 14, + 81, 32, -1, 78, -1, 59, 62, 60, -1, 59, + 62, -1, -1, 62, 45, -1, 62, 66, -1, 62, + 55, -1, 4, 77, 32, -1, 63, 74, -1, 78, + -1, 64, 67, 65, -1, 64, 67, -1, -1, 67, + 45, -1, 67, 66, -1, 67, 55, -1, 67, 1, + 32, -1, 6, 77, 32, -1, 68, -1, 9, 77, + 32, -1, 70, 74, -1, 12, 32, -1, 72, 13, + -1, -1, 74, 75, -1, 74, 32, -1, 16, 35, + 81, 32, -1, 16, 81, 32, -1, 17, 81, 32, + -1, -1, 77, 80, -1, 28, -1, 29, -1, 5, + 79, -1, 8, 79, -1, 15, 79, -1, 32, -1, + 31, -1, -1, 14, 81, -1, 82, -1, 82, 40, + 82, -1, 82, 30, 82, -1, 34, 81, 33, -1, + 41, 81, -1, 81, 38, 81, -1, 81, 39, 81, + -1, 28, -1, 29, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const unsigned short yyrline[] = +{ + 0, 94, 94, 95, 98, 99, 100, 101, 102, 103, + 104, 105, 109, 110, 111, 112, 113, 114, 120, 128, + 134, 142, 152, 154, 155, 156, 157, 160, 166, 173, + 179, 186, 192, 198, 204, 210, 216, 222, 230, 239, + 245, 254, 255, 261, 263, 264, 265, 266, 269, 275, + 281, 287, 293, 299, 301, 306, 315, 324, 325, 331, + 333, 334, 335, 340, 347, 353, 362, 363, 369, 371, + 372, 373, 374, 377, 383, 390, 397, 404, 410, 417, + 418, 419, 422, 427, 432, 440, 442, 447, 448, 451, + 452, 453, 457, 457, 459, 460, 463, 464, 465, 466, + 467, 468, 469, 472, 473 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE +/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU", + "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG", + "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS", + "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_DEFAULT", "T_TRISTATE", + "T_DEF_TRISTATE", "T_BOOLEAN", "T_DEF_BOOLEAN", "T_STRING", "T_INT", + "T_HEX", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL", "T_EOF", "T_EOL", + "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_ON", "T_SELECT", "T_RANGE", "T_OR", + "T_AND", "T_EQUAL", "T_NOT", "$accept", "input", "block", + "common_block", "config_entry_start", "config_stmt", + "menuconfig_entry_start", "menuconfig_stmt", "config_option_list", + "config_option", "choice", "choice_entry", "choice_end", "choice_stmt", + "choice_option_list", "choice_option", "choice_block", "if", "if_end", + "if_stmt", "if_block", "menu", "menu_entry", "menu_end", "menu_stmt", + "menu_block", "source", "source_stmt", "comment", "comment_stmt", + "help_start", "help", "depends_list", "depends", "prompt_stmt_opt", + "prompt", "end", "nl_or_eof", "if_expr", "expr", "symbol", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const unsigned short yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const unsigned char yyr1[] = +{ + 0, 42, 43, 43, 44, 44, 44, 44, 44, 44, + 44, 44, 45, 45, 45, 45, 45, 45, 46, 47, + 48, 49, 50, 50, 50, 50, 50, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 52, 53, + 54, 55, 55, 56, 56, 56, 56, 56, 57, 57, + 57, 57, 57, 58, 58, 59, 60, 61, 61, 62, + 62, 62, 62, 63, 64, 65, 66, 66, 67, 67, + 67, 67, 67, 68, 69, 70, 71, 72, 73, 74, + 74, 74, 75, 75, 75, 76, 76, 77, 77, 78, + 78, 78, 79, 79, 80, 80, 81, 81, 81, 81, + 81, 81, 81, 82, 82 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const unsigned char yyr2[] = +{ + 0, 2, 0, 2, 1, 1, 1, 3, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 3, 2, + 3, 2, 0, 2, 2, 2, 2, 3, 4, 3, + 4, 3, 3, 3, 4, 4, 4, 5, 2, 2, + 1, 3, 2, 0, 2, 2, 2, 2, 4, 3, + 3, 2, 4, 0, 2, 3, 1, 3, 2, 0, + 2, 2, 2, 3, 2, 1, 3, 2, 0, 2, + 2, 2, 3, 3, 1, 3, 2, 2, 2, 0, + 2, 2, 4, 3, 3, 0, 2, 1, 1, 2, + 2, 2, 1, 1, 0, 2, 1, 3, 3, 3, + 2, 3, 3, 1, 1 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const unsigned char yydefact[] = +{ + 2, 0, 1, 0, 0, 0, 8, 0, 0, 10, + 0, 0, 0, 0, 9, 93, 92, 3, 4, 22, + 14, 22, 15, 43, 53, 5, 59, 12, 79, 68, + 6, 74, 16, 79, 13, 17, 11, 87, 88, 0, + 0, 0, 38, 0, 0, 0, 103, 104, 0, 0, + 0, 96, 19, 21, 39, 42, 58, 64, 0, 76, + 7, 63, 73, 75, 18, 20, 0, 100, 55, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, + 85, 0, 85, 85, 85, 26, 0, 0, 23, 0, + 25, 24, 0, 0, 0, 85, 85, 47, 44, 46, + 45, 0, 0, 0, 54, 41, 40, 60, 62, 57, + 61, 56, 81, 80, 0, 69, 71, 66, 70, 65, + 99, 101, 102, 98, 97, 77, 0, 0, 0, 94, + 94, 0, 94, 94, 0, 94, 0, 0, 0, 94, + 0, 78, 51, 94, 94, 0, 0, 89, 90, 91, + 72, 0, 83, 84, 0, 0, 0, 27, 86, 0, + 29, 0, 33, 31, 32, 0, 94, 0, 0, 49, + 50, 82, 95, 34, 35, 28, 30, 36, 0, 48, + 52, 37 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const short yydefgoto[] = +{ + -1, 1, 17, 18, 19, 20, 21, 22, 52, 88, + 23, 24, 105, 25, 54, 98, 55, 26, 109, 27, + 56, 28, 29, 117, 30, 58, 31, 32, 33, 34, + 89, 90, 57, 91, 131, 132, 106, 35, 155, 50, + 51 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -99 +static const short yypact[] = +{ + -99, 48, -99, 38, 46, 46, -99, 46, -29, -99, + 46, -17, -3, -11, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, 38, + 12, 15, -99, 18, 51, 62, -99, -99, -11, -11, + 4, -24, 138, 138, 160, 121, 110, -4, 81, -4, + -99, -99, -99, -99, -99, -99, -19, -99, -99, -11, + -11, 70, 70, 73, 32, -11, 46, -11, 46, -11, + 46, -11, 46, 46, 46, -99, 36, 70, -99, 95, + -99, -99, 96, 46, 106, 46, 46, -99, -99, -99, + -99, 38, 38, 38, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, 112, -99, -99, -99, -99, -99, + -99, 117, -99, -99, -99, -99, -11, 33, 65, 131, + 1, 119, 131, 1, 136, 1, 153, 154, 155, 131, + 70, -99, -99, 131, 131, 156, 157, -99, -99, -99, + -99, 101, -99, -99, -11, 158, 159, -99, -99, 161, + -99, 162, -99, -99, -99, 163, 131, 164, 165, -99, + -99, -99, 99, -99, -99, -99, -99, -99, 166, -99, + -99, -99 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const short yypgoto[] = +{ + -99, -99, -99, 111, -99, -99, -99, -99, 178, -99, + -99, -99, -99, 91, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, 115, -99, -99, -99, -99, -99, + -99, 146, 168, 89, 27, 0, 126, -1, -98, -48, + -63 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -68 +static const short yytable[] = +{ + 66, 67, 36, 42, 39, 40, 71, 41, 123, 124, + 43, 44, 74, 75, 120, 154, 72, 46, 47, 69, + 70, 121, 122, 48, 140, 45, 127, 128, 112, 130, + 49, 133, 156, 135, 158, 159, 68, 161, 60, 69, + 70, 165, 69, 70, 61, 167, 168, 62, 2, 3, + 63, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 46, 47, 13, 14, 139, 152, 48, 126, 178, 15, + 16, 69, 70, 49, 37, 38, 129, 166, 151, 15, + 16, -67, 114, 64, -67, 5, 101, 7, 8, 102, + 10, 11, 12, 143, 65, 13, 103, 153, 46, 47, + 147, 148, 149, 69, 70, 125, 172, 134, 141, 136, + 137, 138, 15, 16, 5, 101, 7, 8, 102, 10, + 11, 12, 145, 146, 13, 103, 101, 7, 142, 102, + 10, 11, 12, 171, 144, 13, 103, 69, 70, 69, + 70, 15, 16, 100, 150, 154, 113, 108, 113, 116, + 73, 157, 15, 16, 74, 75, 70, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 104, 107, 160, 115, + 85, 110, 73, 118, 86, 87, 74, 75, 92, 93, + 94, 95, 111, 96, 119, 162, 163, 164, 169, 170, + 173, 174, 97, 175, 176, 177, 179, 180, 181, 53, + 99, 59 +}; + +static const unsigned char yycheck[] = +{ + 48, 49, 3, 32, 4, 5, 30, 7, 71, 72, + 10, 28, 16, 17, 33, 14, 40, 28, 29, 38, + 39, 69, 70, 34, 87, 28, 74, 75, 32, 77, + 41, 79, 130, 81, 132, 133, 32, 135, 39, 38, + 39, 139, 38, 39, 32, 143, 144, 32, 0, 1, + 32, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 28, 29, 14, 15, 28, 32, 34, 35, 166, 31, + 32, 38, 39, 41, 28, 29, 76, 140, 126, 31, + 32, 0, 1, 32, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 93, 32, 14, 15, 32, 28, 29, + 101, 102, 103, 38, 39, 32, 154, 80, 13, 82, + 83, 84, 31, 32, 4, 5, 6, 7, 8, 9, + 10, 11, 95, 96, 14, 15, 5, 6, 32, 8, + 9, 10, 11, 32, 28, 14, 15, 38, 39, 38, + 39, 31, 32, 54, 32, 14, 57, 56, 59, 58, + 12, 32, 31, 32, 16, 17, 39, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 55, 56, 32, 58, + 32, 56, 12, 58, 36, 37, 16, 17, 18, 19, + 20, 21, 56, 23, 58, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 21, + 54, 33 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const unsigned char yystos[] = +{ + 0, 43, 0, 1, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 14, 15, 31, 32, 44, 45, 46, + 47, 48, 49, 52, 53, 55, 59, 61, 63, 64, + 66, 68, 69, 70, 71, 79, 79, 28, 29, 77, + 77, 77, 32, 77, 28, 28, 28, 29, 34, 41, + 81, 82, 50, 50, 56, 58, 62, 74, 67, 74, + 79, 32, 32, 32, 32, 32, 81, 81, 32, 38, + 39, 30, 40, 12, 16, 17, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 32, 36, 37, 51, 72, + 73, 75, 18, 19, 20, 21, 23, 32, 57, 73, + 75, 5, 8, 15, 45, 54, 78, 45, 55, 60, + 66, 78, 32, 75, 1, 45, 55, 65, 66, 78, + 33, 81, 81, 82, 82, 32, 35, 81, 81, 77, + 81, 76, 77, 81, 76, 81, 76, 76, 76, 28, + 82, 13, 32, 77, 28, 76, 76, 79, 79, 79, + 32, 81, 32, 32, 14, 80, 80, 32, 80, 80, + 32, 80, 32, 32, 32, 80, 82, 80, 80, 32, + 32, 32, 81, 32, 32, 32, 32, 32, 80, 32, + 32, 32 +}; + +#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) +# define YYSIZE_T __SIZE_TYPE__ +#endif +#if ! defined (YYSIZE_T) && defined (size_t) +# define YYSIZE_T size_t +#endif +#if ! defined (YYSIZE_T) +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +#endif +#if ! defined (YYSIZE_T) +# define YYSIZE_T unsigned int +#endif + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror ("syntax error: cannot back up");\ + YYERROR; \ + } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +/* YYLLOC_DEFAULT -- Compute the default location (before the actions + are run). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + Current.first_line = Rhs[1].first_line; \ + Current.first_column = Rhs[1].first_column; \ + Current.last_line = Rhs[N].last_line; \ + Current.last_column = Rhs[N].last_column; +#endif + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +# define YYDSYMPRINT(Args) \ +do { \ + if (yydebug) \ + yysymprint Args; \ +} while (0) + +# define YYDSYMPRINTF(Title, Token, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (cinluded). | +`------------------------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_stack_print (short *bottom, short *top) +#else +static void +yy_stack_print (bottom, top) + short *bottom; + short *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (/* Nothing. */; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_reduce_print (int yyrule) +#else +static void +yy_reduce_print (yyrule) + int yyrule; +#endif +{ + int yyi; + unsigned int yylineno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + yyrule - 1, yylineno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#if YYMAXDEPTH == 0 +# undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined (__GLIBC__) && defined (_STRING_H) +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +# if defined (__STDC__) || defined (__cplusplus) +yystrlen (const char *yystr) +# else +yystrlen (yystr) + const char *yystr; +# endif +{ + register const char *yys = yystr; + + while (*yys++ != '\0') + continue; + + return yys - yystr - 1; +} +# endif +# endif + +# ifndef yystpcpy +# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +# if defined (__STDC__) || defined (__cplusplus) +yystpcpy (char *yydest, const char *yysrc) +# else +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +# endif +{ + register char *yyd = yydest; + register const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +#endif /* !YYERROR_VERBOSE */ + + + +#if YYDEBUG +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) +#else +static void +yysymprint (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + if (yytype < YYNTOKENS) + { + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); +# ifdef YYPRINT + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + } + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + switch (yytype) + { + default: + break; + } + YYFPRINTF (yyoutput, ")"); +} + +#endif /* ! YYDEBUG */ +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yydestruct (int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yytype, yyvaluep) + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM); +# else +int yyparse (); +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM) +# else +int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + register int yystate; + register int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + short yyssa[YYINITDEPTH]; + short *yyss = yyssa; + register short *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + register YYSTYPE *yyvsp; + + + +#define YYPOPSTACK (yyvsp--, yyssp--) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* When reducing, the number of symbols on the RHS of the reduced + rule. */ + int yylen; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. + */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow ("parser stack overflow", + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyoverflowlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyoverflowlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + short *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyoverflowlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; + + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + yystate = yyn; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 8: + + { zconfprint("unexpected 'endmenu' statement"); ;} + break; + + case 9: + + { zconfprint("unexpected 'endif' statement"); ;} + break; + + case 10: + + { zconfprint("unexpected 'endchoice' statement"); ;} + break; + + case 11: + + { zconfprint("syntax error"); yyerrok; ;} + break; + + case 18: + + { + struct symbol *sym = sym_lookup(yyvsp[-1].string, 0); + sym->flags |= SYMBOL_OPTIONAL; + menu_add_entry(sym); + printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string); +;} + break; + + case 19: + + { + menu_end_entry(); + printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 20: + + { + struct symbol *sym = sym_lookup(yyvsp[-1].string, 0); + sym->flags |= SYMBOL_OPTIONAL; + menu_add_entry(sym); + printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string); +;} + break; + + case 21: + + { + if (current_entry->prompt) + current_entry->prompt->type = P_MENU; + else + zconfprint("warning: menuconfig statement without prompt"); + menu_end_entry(); + printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 27: + + { + menu_set_type(S_TRISTATE); + printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 28: + + { + menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr); + menu_set_type(S_TRISTATE); + printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 29: + + { + menu_set_type(S_BOOLEAN); + printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 30: + + { + menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr); + menu_set_type(S_BOOLEAN); + printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 31: + + { + menu_set_type(S_INT); + printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 32: + + { + menu_set_type(S_HEX); + printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 33: + + { + menu_set_type(S_STRING); + printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 34: + + { + menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 35: + + { + menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 36: + + { + menu_add_symbol(P_SELECT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 37: + + { + menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,yyvsp[-3].symbol, yyvsp[-2].symbol), yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 38: + + { + struct symbol *sym = sym_lookup(NULL, 0); + sym->flags |= SYMBOL_CHOICE; + menu_add_entry(sym); + menu_add_expr(P_CHOICE, NULL, NULL); + printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 39: + + { + menu_end_entry(); + menu_add_menu(); +;} + break; + + case 40: + + { + if (zconf_endtoken(yyvsp[0].token, T_CHOICE, T_ENDCHOICE)) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno()); + } +;} + break; + + case 42: + + { + printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno); + zconfnerrs++; +;} + break; + + case 48: + + { + menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 49: + + { + menu_set_type(S_TRISTATE); + printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 50: + + { + menu_set_type(S_BOOLEAN); + printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 51: + + { + current_entry->sym->flags |= SYMBOL_OPTIONAL; + printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 52: + + { + menu_add_symbol(P_DEFAULT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 55: + + { + printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno()); + menu_add_entry(NULL); + menu_add_dep(yyvsp[-1].expr); + menu_end_entry(); + menu_add_menu(); +;} + break; + + case 56: + + { + if (zconf_endtoken(yyvsp[0].token, T_IF, T_ENDIF)) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno()); + } +;} + break; + + case 58: + + { + printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno); + zconfnerrs++; +;} + break; + + case 63: + + { + menu_add_entry(NULL); + menu_add_prop(P_MENU, yyvsp[-1].string, NULL, NULL); + printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 64: + + { + menu_end_entry(); + menu_add_menu(); +;} + break; + + case 65: + + { + if (zconf_endtoken(yyvsp[0].token, T_MENU, T_ENDMENU)) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno()); + } +;} + break; + + case 67: + + { + printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno); + zconfnerrs++; +;} + break; + + case 72: + + { zconfprint("invalid menu option"); yyerrok; ;} + break; + + case 73: + + { + yyval.string = yyvsp[-1].string; + printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string); +;} + break; + + case 74: + + { + zconf_nextfile(yyvsp[0].string); +;} + break; + + case 75: + + { + menu_add_entry(NULL); + menu_add_prop(P_COMMENT, yyvsp[-1].string, NULL, NULL); + printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 76: + + { + menu_end_entry(); +;} + break; + + case 77: + + { + printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno()); + zconf_starthelp(); +;} + break; + + case 78: + + { + current_entry->sym->help = yyvsp[0].string; +;} + break; + + case 82: + + { + menu_add_dep(yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 83: + + { + menu_add_dep(yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 84: + + { + menu_add_dep(yyvsp[-1].expr); + printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno()); +;} + break; + + case 86: + + { + menu_add_prop(P_PROMPT, yyvsp[-1].string, NULL, yyvsp[0].expr); +;} + break; + + case 89: + + { yyval.token = T_ENDMENU; ;} + break; + + case 90: + + { yyval.token = T_ENDCHOICE; ;} + break; + + case 91: + + { yyval.token = T_ENDIF; ;} + break; + + case 94: + + { yyval.expr = NULL; ;} + break; + + case 95: + + { yyval.expr = yyvsp[0].expr; ;} + break; + + case 96: + + { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); ;} + break; + + case 97: + + { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;} + break; + + case 98: + + { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;} + break; + + case 99: + + { yyval.expr = yyvsp[-1].expr; ;} + break; + + case 100: + + { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); ;} + break; + + case 101: + + { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); ;} + break; + + case 102: + + { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); ;} + break; + + case 103: + + { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;} + break; + + case 104: + + { yyval.symbol = sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); ;} + break; + + + } + +/* Line 999 of yacc.c. */ + + + yyvsp -= yylen; + yyssp -= yylen; + + + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (YYPACT_NINF < yyn && yyn < YYLAST) + { + YYSIZE_T yysize = 0; + int yytype = YYTRANSLATE (yychar); + char *yymsg; + int yyx, yycount; + + yycount = 0; + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + yysize += yystrlen (yytname[yyx]) + 15, yycount++; + yysize += yystrlen ("syntax error, unexpected ") + 1; + yysize += yystrlen (yytname[yytype]); + yymsg = (char *) YYSTACK_ALLOC (yysize); + if (yymsg != 0) + { + char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); + yyp = yystpcpy (yyp, yytname[yytype]); + + if (yycount < 5) + { + yycount = 0; + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); + yyx++) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + const char *yyq = ! yycount ? ", expecting " : " or "; + yyp = yystpcpy (yyp, yyq); + yyp = yystpcpy (yyp, yytname[yyx]); + yycount++; + } + } + yyerror (yymsg); + YYSTACK_FREE (yymsg); + } + else + yyerror ("syntax error; also virtual memory exhausted"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror ("syntax error"); + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + /* Return failure if at end of input. */ + if (yychar == YYEOF) + { + /* Pop the error token. */ + YYPOPSTACK; + /* Pop the rest of the stack. */ + while (yyss < yyssp) + { + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[*yyssp], yyvsp); + YYPOPSTACK; + } + YYABORT; + } + + YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); + yydestruct (yytoken, &yylval); + yychar = YYEMPTY; + + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*----------------------------------------------------. +| yyerrlab1 -- error raised explicitly by an action. | +`----------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[yystate], yyvsp); + yyvsp--; + yystate = *--yyssp; + + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + YYDPRINTF ((stderr, "Shifting error token, ")); + + *++yyvsp = yylval; + + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*----------------------------------------------. +| yyoverflowlab -- parser overflow comes here. | +`----------------------------------------------*/ +yyoverflowlab: + yyerror ("parser stack overflow"); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + return yyresult; +} + + + + + +void conf_parse(const char *name) +{ + struct symbol *sym; + int i; + + zconf_initscan(name); + + sym_init(); + menu_init(); + modules_sym = sym_lookup("MODULES", 0); + rootmenu.prompt = menu_add_prop(P_MENU, "axTLS Configuration", NULL, NULL); + + //zconfdebug = 1; + zconfparse(); + if (zconfnerrs) + exit(1); + menu_finalize(&rootmenu); + for_all_symbols(i, sym) { + if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym)) + printf("\n"); + else + sym->flags |= SYMBOL_CHECK_DONE; + } + + sym_change_count = 1; +} + +const char *zconf_tokenname(int token) +{ + switch (token) { + case T_MENU: return "menu"; + case T_ENDMENU: return "endmenu"; + case T_CHOICE: return "choice"; + case T_ENDCHOICE: return "endchoice"; + case T_IF: return "if"; + case T_ENDIF: return "endif"; + } + return ""; +} + +static bool zconf_endtoken(int token, int starttoken, int endtoken) +{ + if (token != endtoken) { + zconfprint("unexpected '%s' within %s block", zconf_tokenname(token), zconf_tokenname(starttoken)); + zconfnerrs++; + return false; + } + if (current_menu->file != current_file) { + zconfprint("'%s' in different file than '%s'", zconf_tokenname(token), zconf_tokenname(starttoken)); + zconfprint("location of the '%s'", zconf_tokenname(starttoken)); + zconfnerrs++; + return false; + } + return true; +} + +static void zconfprint(const char *err, ...) +{ + va_list ap; + + fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1); + va_start(ap, err); + vfprintf(stderr, err, ap); + va_end(ap); + fprintf(stderr, "\n"); +} + +static void zconferror(const char *err) +{ + fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err); +} + +void print_quoted_string(FILE *out, const char *str) +{ + const char *p; + int len; + + putc('"', out); + while ((p = strchr(str, '"'))) { + len = p - str; + if (len) + fprintf(out, "%.*s", len, str); + fputs("\\\"", out); + str = p + 1; + } + fputs(str, out); + putc('"', out); +} + +void print_symbol(FILE *out, struct menu *menu) +{ + struct symbol *sym = menu->sym; + struct property *prop; + + if (sym_is_choice(sym)) + fprintf(out, "choice\n"); + else + fprintf(out, "config %s\n", sym->name); + switch (sym->type) { + case S_BOOLEAN: + fputs(" boolean\n", out); + break; + case S_TRISTATE: + fputs(" tristate\n", out); + break; + case S_STRING: + fputs(" string\n", out); + break; + case S_INT: + fputs(" integer\n", out); + break; + case S_HEX: + fputs(" hex\n", out); + break; + default: + fputs(" ???\n", out); + break; + } + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->menu != menu) + continue; + switch (prop->type) { + case P_PROMPT: + fputs(" prompt ", out); + print_quoted_string(out, prop->text); + if (!expr_is_yes(prop->visible.expr)) { + fputs(" if ", out); + expr_fprint(prop->visible.expr, out); + } + fputc('\n', out); + break; + case P_DEFAULT: + fputs( " default ", out); + expr_fprint(prop->expr, out); + if (!expr_is_yes(prop->visible.expr)) { + fputs(" if ", out); + expr_fprint(prop->visible.expr, out); + } + fputc('\n', out); + break; + case P_CHOICE: + fputs(" #choice value\n", out); + break; + default: + fprintf(out, " unknown prop %d!\n", prop->type); + break; + } + } + if (sym->help) { + int len = strlen(sym->help); + while (sym->help[--len] == '\n') + sym->help[len] = 0; + fprintf(out, " help\n%s\n", sym->help); + } + fputc('\n', out); +} + +void zconfdump(FILE *out) +{ + struct property *prop; + struct symbol *sym; + struct menu *menu; + + menu = rootmenu.list; + while (menu) { + if ((sym = menu->sym)) + print_symbol(out, menu); + else if ((prop = menu->prompt)) { + switch (prop->type) { + case P_COMMENT: + fputs("\ncomment ", out); + print_quoted_string(out, prop->text); + fputs("\n", out); + break; + case P_MENU: + fputs("\nmenu ", out); + print_quoted_string(out, prop->text); + fputs("\n", out); + break; + default: + ; + } + if (!expr_is_yes(prop->visible.expr)) { + fputs(" depends ", out); + expr_fprint(prop->visible.expr, out); + fputc('\n', out); + } + fputs("\n", out); + } + + if (menu->list) + menu = menu->list; + else if (menu->next) + menu = menu->next; + else while ((menu = menu->parent)) { + if (menu->prompt && menu->prompt->type == P_MENU) + fputs("\nendmenu\n", out); + if (menu->next) { + menu = menu->next; + break; + } + } + } +} + +#include "lex.zconf.c" +#include "util.c" +#include "confdata.c" +#include "expr.c" +#include "symbol.c" +#include "menu.c" + + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.tab.h_shipped b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.tab.h_shipped new file mode 100644 index 0000000..3b191ef --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.tab.h_shipped @@ -0,0 +1,125 @@ +/* A Bison parser, made from zconf.y, by GNU bison 1.75. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +#ifndef BISON_ZCONF_TAB_H +# define BISON_ZCONF_TAB_H + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + T_MAINMENU = 258, + T_MENU = 259, + T_ENDMENU = 260, + T_SOURCE = 261, + T_CHOICE = 262, + T_ENDCHOICE = 263, + T_COMMENT = 264, + T_CONFIG = 265, + T_HELP = 266, + T_HELPTEXT = 267, + T_IF = 268, + T_ENDIF = 269, + T_DEPENDS = 270, + T_REQUIRES = 271, + T_OPTIONAL = 272, + T_PROMPT = 273, + T_DEFAULT = 274, + T_TRISTATE = 275, + T_BOOLEAN = 276, + T_INT = 277, + T_HEX = 278, + T_WORD = 279, + T_STRING = 280, + T_UNEQUAL = 281, + T_EOF = 282, + T_EOL = 283, + T_CLOSE_PAREN = 284, + T_OPEN_PAREN = 285, + T_ON = 286, + T_OR = 287, + T_AND = 288, + T_EQUAL = 289, + T_NOT = 290 + }; +#endif +#define T_MAINMENU 258 +#define T_MENU 259 +#define T_ENDMENU 260 +#define T_SOURCE 261 +#define T_CHOICE 262 +#define T_ENDCHOICE 263 +#define T_COMMENT 264 +#define T_CONFIG 265 +#define T_HELP 266 +#define T_HELPTEXT 267 +#define T_IF 268 +#define T_ENDIF 269 +#define T_DEPENDS 270 +#define T_REQUIRES 271 +#define T_OPTIONAL 272 +#define T_PROMPT 273 +#define T_DEFAULT 274 +#define T_TRISTATE 275 +#define T_BOOLEAN 276 +#define T_INT 277 +#define T_HEX 278 +#define T_WORD 279 +#define T_STRING 280 +#define T_UNEQUAL 281 +#define T_EOF 282 +#define T_EOL 283 +#define T_CLOSE_PAREN 284 +#define T_OPEN_PAREN 285 +#define T_ON 286 +#define T_OR 287 +#define T_AND 288 +#define T_EQUAL 289 +#define T_NOT 290 + + + + +#ifndef YYSTYPE +#line 33 "zconf.y" +typedef union { + int token; + char *string; + struct symbol *symbol; + struct expr *expr; + struct menu *menu; +} yystype; +/* Line 1281 of /usr/share/bison/yacc.c. */ +#line 118 "zconf.tab.h" +# define YYSTYPE yystype +#endif + +extern YYSTYPE zconflval; + + +#endif /* not BISON_ZCONF_TAB_H */ + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.y b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.y new file mode 100644 index 0000000..cf45da0 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/scripts/config/zconf.y @@ -0,0 +1,690 @@ +%{ +/* + * Copyright (C) 2002 Roman Zippel + * Released under the terms of the GNU GPL v2.0. + */ + +#include +#include +#include +#include +#include +#include + +#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt) + +#define PRINTD 0x0001 +#define DEBUG_PARSE 0x0002 + +int cdebug = PRINTD; + +extern int zconflex(void); +static void zconfprint(const char *err, ...); +static void zconferror(const char *err); +static bool zconf_endtoken(int token, int starttoken, int endtoken); + +struct symbol *symbol_hash[257]; + +static struct menu *current_menu, *current_entry; + +#define YYERROR_VERBOSE +%} +%expect 40 + +%union +{ + int token; + char *string; + struct symbol *symbol; + struct expr *expr; + struct menu *menu; +} + +%token T_MAINMENU +%token T_MENU +%token T_ENDMENU +%token T_SOURCE +%token T_CHOICE +%token T_ENDCHOICE +%token T_COMMENT +%token T_CONFIG +%token T_MENUCONFIG +%token T_HELP +%token T_HELPTEXT +%token T_IF +%token T_ENDIF +%token T_DEPENDS +%token T_REQUIRES +%token T_OPTIONAL +%token T_PROMPT +%token T_DEFAULT +%token T_TRISTATE +%token T_DEF_TRISTATE +%token T_BOOLEAN +%token T_DEF_BOOLEAN +%token T_STRING +%token T_INT +%token T_HEX +%token T_WORD +%token T_WORD_QUOTE +%token T_UNEQUAL +%token T_EOF +%token T_EOL +%token T_CLOSE_PAREN +%token T_OPEN_PAREN +%token T_ON +%token T_SELECT +%token T_RANGE + +%left T_OR +%left T_AND +%left T_EQUAL T_UNEQUAL +%nonassoc T_NOT + +%type prompt +%type source +%type symbol +%type expr +%type if_expr +%type end + +%{ +#define LKC_DIRECT_LINK +#include "lkc.h" +%} +%% +input: /* empty */ + | input block +; + +block: common_block + | choice_stmt + | menu_stmt + | T_MAINMENU prompt nl_or_eof + | T_ENDMENU { zconfprint("unexpected 'endmenu' statement"); } + | T_ENDIF { zconfprint("unexpected 'endif' statement"); } + | T_ENDCHOICE { zconfprint("unexpected 'endchoice' statement"); } + | error nl_or_eof { zconfprint("syntax error"); yyerrok; } +; + +common_block: + if_stmt + | comment_stmt + | config_stmt + | menuconfig_stmt + | source_stmt + | nl_or_eof +; + + +/* config/menuconfig entry */ + +config_entry_start: T_CONFIG T_WORD T_EOL +{ + struct symbol *sym = sym_lookup($2, 0); + sym->flags |= SYMBOL_OPTIONAL; + menu_add_entry(sym); + printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), $2); +}; + +config_stmt: config_entry_start config_option_list +{ + menu_end_entry(); + printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); +}; + +menuconfig_entry_start: T_MENUCONFIG T_WORD T_EOL +{ + struct symbol *sym = sym_lookup($2, 0); + sym->flags |= SYMBOL_OPTIONAL; + menu_add_entry(sym); + printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2); +}; + +menuconfig_stmt: menuconfig_entry_start config_option_list +{ + if (current_entry->prompt) + current_entry->prompt->type = P_MENU; + else + zconfprint("warning: menuconfig statement without prompt"); + menu_end_entry(); + printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); +}; + +config_option_list: + /* empty */ + | config_option_list config_option + | config_option_list depends + | config_option_list help + | config_option_list T_EOL +; + +config_option: T_TRISTATE prompt_stmt_opt T_EOL +{ + menu_set_type(S_TRISTATE); + printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_DEF_TRISTATE expr if_expr T_EOL +{ + menu_add_expr(P_DEFAULT, $2, $3); + menu_set_type(S_TRISTATE); + printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_BOOLEAN prompt_stmt_opt T_EOL +{ + menu_set_type(S_BOOLEAN); + printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_DEF_BOOLEAN expr if_expr T_EOL +{ + menu_add_expr(P_DEFAULT, $2, $3); + menu_set_type(S_BOOLEAN); + printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_INT prompt_stmt_opt T_EOL +{ + menu_set_type(S_INT); + printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_HEX prompt_stmt_opt T_EOL +{ + menu_set_type(S_HEX); + printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_STRING prompt_stmt_opt T_EOL +{ + menu_set_type(S_STRING); + printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_PROMPT prompt if_expr T_EOL +{ + menu_add_prompt(P_PROMPT, $2, $3); + printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_DEFAULT expr if_expr T_EOL +{ + menu_add_expr(P_DEFAULT, $2, $3); + printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_SELECT T_WORD if_expr T_EOL +{ + menu_add_symbol(P_SELECT, sym_lookup($2, 0), $3); + printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_RANGE symbol symbol if_expr T_EOL +{ + menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,$2, $3), $4); + printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno()); +}; + +/* choice entry */ + +choice: T_CHOICE T_EOL +{ + struct symbol *sym = sym_lookup(NULL, 0); + sym->flags |= SYMBOL_CHOICE; + menu_add_entry(sym); + menu_add_expr(P_CHOICE, NULL, NULL); + printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); +}; + +choice_entry: choice choice_option_list +{ + menu_end_entry(); + menu_add_menu(); +}; + +choice_end: end +{ + if (zconf_endtoken($1, T_CHOICE, T_ENDCHOICE)) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno()); + } +}; + +choice_stmt: + choice_entry choice_block choice_end + | choice_entry choice_block +{ + printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno); + zconfnerrs++; +}; + +choice_option_list: + /* empty */ + | choice_option_list choice_option + | choice_option_list depends + | choice_option_list help + | choice_option_list T_EOL +; + +choice_option: T_PROMPT prompt if_expr T_EOL +{ + menu_add_prompt(P_PROMPT, $2, $3); + printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); +}; + +choice_option: T_TRISTATE prompt_stmt_opt T_EOL +{ + menu_set_type(S_TRISTATE); + printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno()); +}; + +choice_option: T_BOOLEAN prompt_stmt_opt T_EOL +{ + menu_set_type(S_BOOLEAN); + printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno()); +}; + +choice_option: T_OPTIONAL T_EOL +{ + current_entry->sym->flags |= SYMBOL_OPTIONAL; + printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno()); +}; + +choice_option: T_DEFAULT T_WORD if_expr T_EOL +{ + menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3); + printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno()); +}; + +choice_block: + /* empty */ + | choice_block common_block +; + +/* if entry */ + +if: T_IF expr T_EOL +{ + printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno()); + menu_add_entry(NULL); + menu_add_dep($2); + menu_end_entry(); + menu_add_menu(); +}; + +if_end: end +{ + if (zconf_endtoken($1, T_IF, T_ENDIF)) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno()); + } +}; + +if_stmt: + if if_block if_end + | if if_block +{ + printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno); + zconfnerrs++; +}; + +if_block: + /* empty */ + | if_block common_block + | if_block menu_stmt + | if_block choice_stmt +; + +/* menu entry */ + +menu: T_MENU prompt T_EOL +{ + menu_add_entry(NULL); + menu_add_prop(P_MENU, $2, NULL, NULL); + printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno()); +}; + +menu_entry: menu depends_list +{ + menu_end_entry(); + menu_add_menu(); +}; + +menu_end: end +{ + if (zconf_endtoken($1, T_MENU, T_ENDMENU)) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno()); + } +}; + +menu_stmt: + menu_entry menu_block menu_end + | menu_entry menu_block +{ + printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno); + zconfnerrs++; +}; + +menu_block: + /* empty */ + | menu_block common_block + | menu_block menu_stmt + | menu_block choice_stmt + | menu_block error T_EOL { zconfprint("invalid menu option"); yyerrok; } +; + +source: T_SOURCE prompt T_EOL +{ + $$ = $2; + printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2); +}; + +source_stmt: source +{ + zconf_nextfile($1); +}; + +/* comment entry */ + +comment: T_COMMENT prompt T_EOL +{ + menu_add_entry(NULL); + menu_add_prop(P_COMMENT, $2, NULL, NULL); + printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno()); +}; + +comment_stmt: comment depends_list +{ + menu_end_entry(); +}; + +/* help option */ + +help_start: T_HELP T_EOL +{ + printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno()); + zconf_starthelp(); +}; + +help: help_start T_HELPTEXT +{ + current_entry->sym->help = $2; +}; + +/* depends option */ + +depends_list: /* empty */ + | depends_list depends + | depends_list T_EOL +; + +depends: T_DEPENDS T_ON expr T_EOL +{ + menu_add_dep($3); + printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno()); +} + | T_DEPENDS expr T_EOL +{ + menu_add_dep($2); + printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno()); +} + | T_REQUIRES expr T_EOL +{ + menu_add_dep($2); + printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno()); +}; + +/* prompt statement */ + +prompt_stmt_opt: + /* empty */ + | prompt if_expr +{ + menu_add_prop(P_PROMPT, $1, NULL, $2); +}; + +prompt: T_WORD + | T_WORD_QUOTE +; + +end: T_ENDMENU nl_or_eof { $$ = T_ENDMENU; } + | T_ENDCHOICE nl_or_eof { $$ = T_ENDCHOICE; } + | T_ENDIF nl_or_eof { $$ = T_ENDIF; } +; + +nl_or_eof: + T_EOL | T_EOF; + +if_expr: /* empty */ { $$ = NULL; } + | T_IF expr { $$ = $2; } +; + +expr: symbol { $$ = expr_alloc_symbol($1); } + | symbol T_EQUAL symbol { $$ = expr_alloc_comp(E_EQUAL, $1, $3); } + | symbol T_UNEQUAL symbol { $$ = expr_alloc_comp(E_UNEQUAL, $1, $3); } + | T_OPEN_PAREN expr T_CLOSE_PAREN { $$ = $2; } + | T_NOT expr { $$ = expr_alloc_one(E_NOT, $2); } + | expr T_OR expr { $$ = expr_alloc_two(E_OR, $1, $3); } + | expr T_AND expr { $$ = expr_alloc_two(E_AND, $1, $3); } +; + +symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); } + | T_WORD_QUOTE { $$ = sym_lookup($1, 1); free($1); } +; + +%% + +void conf_parse(const char *name) +{ + struct symbol *sym; + int i; + + zconf_initscan(name); + + sym_init(); + menu_init(); + modules_sym = sym_lookup("MODULES", 0); + rootmenu.prompt = menu_add_prop(P_MENU, "axTLS Configuration", NULL, NULL); + + //zconfdebug = 1; + zconfparse(); + if (zconfnerrs) + exit(1); + menu_finalize(&rootmenu); + for_all_symbols(i, sym) { + if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym)) + printf("\n"); + else + sym->flags |= SYMBOL_CHECK_DONE; + } + + sym_change_count = 1; +} + +const char *zconf_tokenname(int token) +{ + switch (token) { + case T_MENU: return "menu"; + case T_ENDMENU: return "endmenu"; + case T_CHOICE: return "choice"; + case T_ENDCHOICE: return "endchoice"; + case T_IF: return "if"; + case T_ENDIF: return "endif"; + } + return ""; +} + +static bool zconf_endtoken(int token, int starttoken, int endtoken) +{ + if (token != endtoken) { + zconfprint("unexpected '%s' within %s block", zconf_tokenname(token), zconf_tokenname(starttoken)); + zconfnerrs++; + return false; + } + if (current_menu->file != current_file) { + zconfprint("'%s' in different file than '%s'", zconf_tokenname(token), zconf_tokenname(starttoken)); + zconfprint("location of the '%s'", zconf_tokenname(starttoken)); + zconfnerrs++; + return false; + } + return true; +} + +static void zconfprint(const char *err, ...) +{ + va_list ap; + + fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1); + va_start(ap, err); + vfprintf(stderr, err, ap); + va_end(ap); + fprintf(stderr, "\n"); +} + +static void zconferror(const char *err) +{ + fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err); +} + +void print_quoted_string(FILE *out, const char *str) +{ + const char *p; + int len; + + putc('"', out); + while ((p = strchr(str, '"'))) { + len = p - str; + if (len) + fprintf(out, "%.*s", len, str); + fputs("\\\"", out); + str = p + 1; + } + fputs(str, out); + putc('"', out); +} + +void print_symbol(FILE *out, struct menu *menu) +{ + struct symbol *sym = menu->sym; + struct property *prop; + + if (sym_is_choice(sym)) + fprintf(out, "choice\n"); + else + fprintf(out, "config %s\n", sym->name); + switch (sym->type) { + case S_BOOLEAN: + fputs(" boolean\n", out); + break; + case S_TRISTATE: + fputs(" tristate\n", out); + break; + case S_STRING: + fputs(" string\n", out); + break; + case S_INT: + fputs(" integer\n", out); + break; + case S_HEX: + fputs(" hex\n", out); + break; + default: + fputs(" ???\n", out); + break; + } + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->menu != menu) + continue; + switch (prop->type) { + case P_PROMPT: + fputs(" prompt ", out); + print_quoted_string(out, prop->text); + if (!expr_is_yes(prop->visible.expr)) { + fputs(" if ", out); + expr_fprint(prop->visible.expr, out); + } + fputc('\n', out); + break; + case P_DEFAULT: + fputs( " default ", out); + expr_fprint(prop->expr, out); + if (!expr_is_yes(prop->visible.expr)) { + fputs(" if ", out); + expr_fprint(prop->visible.expr, out); + } + fputc('\n', out); + break; + case P_CHOICE: + fputs(" #choice value\n", out); + break; + default: + fprintf(out, " unknown prop %d!\n", prop->type); + break; + } + } + if (sym->help) { + int len = strlen(sym->help); + while (sym->help[--len] == '\n') + sym->help[len] = 0; + fprintf(out, " help\n%s\n", sym->help); + } + fputc('\n', out); +} + +void zconfdump(FILE *out) +{ + struct property *prop; + struct symbol *sym; + struct menu *menu; + + menu = rootmenu.list; + while (menu) { + if ((sym = menu->sym)) + print_symbol(out, menu); + else if ((prop = menu->prompt)) { + switch (prop->type) { + case P_COMMENT: + fputs("\ncomment ", out); + print_quoted_string(out, prop->text); + fputs("\n", out); + break; + case P_MENU: + fputs("\nmenu ", out); + print_quoted_string(out, prop->text); + fputs("\n", out); + break; + default: + ; + } + if (!expr_is_yes(prop->visible.expr)) { + fputs(" depends ", out); + expr_fprint(prop->visible.expr, out); + fputc('\n', out); + } + fputs("\n", out); + } + + if (menu->list) + menu = menu->list; + else if (menu->next) + menu = menu->next; + else while ((menu = menu->parent)) { + if (menu->prompt && menu->prompt->type == P_MENU) + fputs("\nendmenu\n", out); + if (menu->next) { + menu = menu->next; + break; + } + } + } +} + +#include "lex.zconf.c" +#include "util.c" +#include "confdata.c" +#include "expr.c" +#include "symbol.c" +#include "menu.c" diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/config/win32config b/feeds/luci/libs/luci-lib-nixio/axTLS/config/win32config new file mode 100644 index 0000000..6c8d607 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/config/win32config @@ -0,0 +1,119 @@ +# +# Automatically generated make config: don't edit +# +HAVE_DOT_CONFIG=y +# CONFIG_PLATFORM_LINUX is not set +# CONFIG_PLATFORM_CYGWIN is not set +# CONFIG_PLATFORM_SOLARIS is not set +CONFIG_PLATFORM_WIN32=y + +# +# General Configuration +# +PREFIX="" +# CONFIG_DEBUG is not set +# CONFIG_STRIP_UNWANTED_SECTIONS is not set + +# +# Microsoft Compiler Options +# +# CONFIG_VISUAL_STUDIO_7_0 is not set +CONFIG_VISUAL_STUDIO_8_0=y +CONFIG_VISUAL_STUDIO_7_0_BASE="" +CONFIG_VISUAL_STUDIO_8_0_BASE="c:\\Program Files\\Microsoft Visual Studio 8" +CONFIG_EXTRA_CFLAGS_OPTIONS="" +CONFIG_EXTRA_LDFLAGS_OPTIONS="" + +# +# SSL Library +# +# CONFIG_SSL_SERVER_ONLY is not set +# CONFIG_SSL_CERT_VERIFICATION is not set +# CONFIG_SSL_ENABLE_CLIENT is not set +CONFIG_SSL_FULL_MODE=y +# CONFIG_SSL_SKELETON_MODE is not set +# CONFIG_SSL_PROT_LOW is not set +CONFIG_SSL_PROT_MEDIUM=y +# CONFIG_SSL_PROT_HIGH is not set +CONFIG_SSL_USE_DEFAULT_KEY=y +CONFIG_SSL_PRIVATE_KEY_LOCATION="" +CONFIG_SSL_PRIVATE_KEY_PASSWORD="" +CONFIG_SSL_X509_CERT_LOCATION="" +CONFIG_SSL_GENERATE_X509_CERT=y +CONFIG_SSL_X509_COMMON_NAME="" +CONFIG_SSL_X509_ORGANIZATION_NAME="" +CONFIG_SSL_X509_ORGANIZATION_UNIT_NAME="" +CONFIG_SSL_ENABLE_V23_HANDSHAKE=y +CONFIG_SSL_HAS_PEM=y +CONFIG_SSL_USE_PKCS12=y +CONFIG_SSL_EXPIRY_TIME=24 +CONFIG_X509_MAX_CA_CERTS=4 +CONFIG_SSL_MAX_CERTS=2 +# CONFIG_SSL_CTX_MUTEXING is not set +# CONFIG_USE_DEV_URANDOM is not set +CONFIG_WIN32_USE_CRYPTO_LIB=y +# CONFIG_OPENSSL_COMPATIBLE is not set +# CONFIG_PERFORMANCE_TESTING is not set +# CONFIG_SSL_TEST is not set +CONFIG_AXHTTPD=y + +# +# Axhttpd Configuration +# +# CONFIG_HTTP_STATIC_BUILD is not set +CONFIG_HTTP_PORT=80 +CONFIG_HTTP_HTTPS_PORT=443 +CONFIG_HTTP_SESSION_CACHE_SIZE=5 +CONFIG_HTTP_WEBROOT="www" +CONFIG_HTTP_TIMEOUT=300 +# CONFIG_HTTP_HAS_CGI is not set +CONFIG_HTTP_CGI_EXTENSIONS="" +# CONFIG_HTTP_ENABLE_LUA is not set +CONFIG_HTTP_LUA_PREFIX="" +CONFIG_HTTP_LUA_CGI_LAUNCHER="" +# CONFIG_HTTP_BUILD_LUA is not set +CONFIG_HTTP_DIRECTORIES=y +CONFIG_HTTP_HAS_AUTHORIZATION=y +# CONFIG_HTTP_HAS_IPV6 is not set +CONFIG_HTTP_VERBOSE=y +# CONFIG_HTTP_IS_DAEMON is not set + +# +# Language Bindings +# +# CONFIG_BINDINGS is not set +# CONFIG_CSHARP_BINDINGS is not set +# CONFIG_VBNET_BINDINGS is not set +CONFIG_DOT_NET_FRAMEWORK_BASE="" +# CONFIG_JAVA_BINDINGS is not set +CONFIG_JAVA_HOME="" +# CONFIG_PERL_BINDINGS is not set +CONFIG_PERL_CORE="" +CONFIG_PERL_LIB="" +# CONFIG_LUA_BINDINGS is not set +CONFIG_LUA_CORE="" + +# +# Samples +# +CONFIG_SAMPLES=y +CONFIG_C_SAMPLES=y +# CONFIG_CSHARP_SAMPLES is not set +# CONFIG_VBNET_SAMPLES is not set +# CONFIG_JAVA_SAMPLES is not set +# CONFIG_PERL_SAMPLES is not set +# CONFIG_LUA_SAMPLES is not set + +# +# BigInt Options +# +# CONFIG_BIGINT_CLASSICAL is not set +# CONFIG_BIGINT_MONTGOMERY is not set +CONFIG_BIGINT_BARRETT=y +CONFIG_BIGINT_CRT=y +# CONFIG_BIGINT_KARATSUBA is not set +MUL_KARATSUBA_THRESH=0 +SQU_KARATSUBA_THRESH=0 +CONFIG_BIGINT_SLIDING_WINDOW=y +CONFIG_BIGINT_SQUARE=y +# CONFIG_BIGINT_CHECK_ON is not set diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/Makefile new file mode 100644 index 0000000..3ea8bdd --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/Makefile @@ -0,0 +1,50 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +include ../config/.config +include ../config/makefile.conf + +AXTLS_HOME=.. + +OBJ=\ + aes.o \ + bigint.o \ + crypto_misc.o \ + hmac.o \ + md2.o \ + md5.o \ + rc4.o \ + rsa.o \ + sha1.o + +include ../config/makefile.post + +all: $(OBJ) + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/aes.c b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/aes.c new file mode 100644 index 0000000..038a45b --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/aes.c @@ -0,0 +1,456 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * AES implementation - this is a small code version. There are much faster + * versions around but they are much larger in size (i.e. they use large + * submix tables). + */ + +#include +#include "crypto.h" + +/* all commented out in skeleton mode */ +#ifndef CONFIG_SSL_SKELETON_MODE + +#define rot1(x) (((x) << 24) | ((x) >> 8)) +#define rot2(x) (((x) << 16) | ((x) >> 16)) +#define rot3(x) (((x) << 8) | ((x) >> 24)) + +/* + * This cute trick does 4 'mul by two' at once. Stolen from + * Dr B. R. Gladman but I'm sure the u-(u>>7) is + * a standard graphics trick + * The key to this is that we need to xor with 0x1b if the top bit is set. + * a 1xxx xxxx 0xxx 0xxx First we mask the 7bit, + * b 1000 0000 0000 0000 then we shift right by 7 putting the 7bit in 0bit, + * c 0000 0001 0000 0000 we then subtract (c) from (b) + * d 0111 1111 0000 0000 and now we and with our mask + * e 0001 1011 0000 0000 + */ +#define mt 0x80808080 +#define ml 0x7f7f7f7f +#define mh 0xfefefefe +#define mm 0x1b1b1b1b +#define mul2(x,t) ((t)=((x)&mt), \ + ((((x)+(x))&mh)^(((t)-((t)>>7))&mm))) + +#define inv_mix_col(x,f2,f4,f8,f9) (\ + (f2)=mul2(x,f2), \ + (f4)=mul2(f2,f4), \ + (f8)=mul2(f4,f8), \ + (f9)=(x)^(f8), \ + (f8)=((f2)^(f4)^(f8)), \ + (f2)^=(f9), \ + (f4)^=(f9), \ + (f8)^=rot3(f2), \ + (f8)^=rot2(f4), \ + (f8)^rot1(f9)) + +/* + * AES S-box + */ +static const uint8_t aes_sbox[256] = +{ + 0x63,0x7C,0x77,0x7B,0xF2,0x6B,0x6F,0xC5, + 0x30,0x01,0x67,0x2B,0xFE,0xD7,0xAB,0x76, + 0xCA,0x82,0xC9,0x7D,0xFA,0x59,0x47,0xF0, + 0xAD,0xD4,0xA2,0xAF,0x9C,0xA4,0x72,0xC0, + 0xB7,0xFD,0x93,0x26,0x36,0x3F,0xF7,0xCC, + 0x34,0xA5,0xE5,0xF1,0x71,0xD8,0x31,0x15, + 0x04,0xC7,0x23,0xC3,0x18,0x96,0x05,0x9A, + 0x07,0x12,0x80,0xE2,0xEB,0x27,0xB2,0x75, + 0x09,0x83,0x2C,0x1A,0x1B,0x6E,0x5A,0xA0, + 0x52,0x3B,0xD6,0xB3,0x29,0xE3,0x2F,0x84, + 0x53,0xD1,0x00,0xED,0x20,0xFC,0xB1,0x5B, + 0x6A,0xCB,0xBE,0x39,0x4A,0x4C,0x58,0xCF, + 0xD0,0xEF,0xAA,0xFB,0x43,0x4D,0x33,0x85, + 0x45,0xF9,0x02,0x7F,0x50,0x3C,0x9F,0xA8, + 0x51,0xA3,0x40,0x8F,0x92,0x9D,0x38,0xF5, + 0xBC,0xB6,0xDA,0x21,0x10,0xFF,0xF3,0xD2, + 0xCD,0x0C,0x13,0xEC,0x5F,0x97,0x44,0x17, + 0xC4,0xA7,0x7E,0x3D,0x64,0x5D,0x19,0x73, + 0x60,0x81,0x4F,0xDC,0x22,0x2A,0x90,0x88, + 0x46,0xEE,0xB8,0x14,0xDE,0x5E,0x0B,0xDB, + 0xE0,0x32,0x3A,0x0A,0x49,0x06,0x24,0x5C, + 0xC2,0xD3,0xAC,0x62,0x91,0x95,0xE4,0x79, + 0xE7,0xC8,0x37,0x6D,0x8D,0xD5,0x4E,0xA9, + 0x6C,0x56,0xF4,0xEA,0x65,0x7A,0xAE,0x08, + 0xBA,0x78,0x25,0x2E,0x1C,0xA6,0xB4,0xC6, + 0xE8,0xDD,0x74,0x1F,0x4B,0xBD,0x8B,0x8A, + 0x70,0x3E,0xB5,0x66,0x48,0x03,0xF6,0x0E, + 0x61,0x35,0x57,0xB9,0x86,0xC1,0x1D,0x9E, + 0xE1,0xF8,0x98,0x11,0x69,0xD9,0x8E,0x94, + 0x9B,0x1E,0x87,0xE9,0xCE,0x55,0x28,0xDF, + 0x8C,0xA1,0x89,0x0D,0xBF,0xE6,0x42,0x68, + 0x41,0x99,0x2D,0x0F,0xB0,0x54,0xBB,0x16, +}; + +/* + * AES is-box + */ +static const uint8_t aes_isbox[256] = +{ + 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38, + 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb, + 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87, + 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb, + 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d, + 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e, + 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2, + 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25, + 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16, + 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92, + 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda, + 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84, + 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a, + 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06, + 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02, + 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b, + 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea, + 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73, + 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85, + 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e, + 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89, + 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b, + 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20, + 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4, + 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31, + 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f, + 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d, + 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef, + 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0, + 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61, + 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26, + 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d +}; + +static const unsigned char Rcon[30]= +{ + 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80, + 0x1b,0x36,0x6c,0xd8,0xab,0x4d,0x9a,0x2f, + 0x5e,0xbc,0x63,0xc6,0x97,0x35,0x6a,0xd4, + 0xb3,0x7d,0xfa,0xef,0xc5,0x91, +}; + +/* ----- static functions ----- */ +static void AES_encrypt(const AES_CTX *ctx, uint32_t *data); +static void AES_decrypt(const AES_CTX *ctx, uint32_t *data); + +/* Perform doubling in Galois Field GF(2^8) using the irreducible polynomial + x^8+x^4+x^3+x+1 */ +static unsigned char AES_xtime(uint32_t x) +{ + return x = (x&0x80) ? (x<<1)^0x1b : x<<1; +} + +/** + * Set up AES with the key/iv and cipher size. + */ +void AES_set_key(AES_CTX *ctx, const uint8_t *key, + const uint8_t *iv, AES_MODE mode) +{ + int i, ii; + uint32_t *W, tmp, tmp2; + const unsigned char *ip; + int words; + + switch (mode) + { + case AES_MODE_128: + i = 10; + words = 4; + break; + + case AES_MODE_256: + i = 14; + words = 8; + break; + + default: /* fail silently */ + return; + } + + ctx->rounds = i; + ctx->key_size = words; + W = ctx->ks; + for (i = 0; i < words; i+=2) + { + W[i+0]= ((uint32_t)key[ 0]<<24)| + ((uint32_t)key[ 1]<<16)| + ((uint32_t)key[ 2]<< 8)| + ((uint32_t)key[ 3] ); + W[i+1]= ((uint32_t)key[ 4]<<24)| + ((uint32_t)key[ 5]<<16)| + ((uint32_t)key[ 6]<< 8)| + ((uint32_t)key[ 7] ); + key += 8; + } + + ip = Rcon; + ii = 4 * (ctx->rounds+1); + for (i = words; i> 8)&0xff]<<16; + tmp2|=(uint32_t)aes_sbox[(tmp>>16)&0xff]<<24; + tmp2|=(uint32_t)aes_sbox[(tmp>>24) ]; + tmp=tmp2^(((unsigned int)*ip)<<24); + ip++; + } + + if ((words == 8) && ((i % words) == 4)) + { + tmp2 =(uint32_t)aes_sbox[(tmp )&0xff] ; + tmp2|=(uint32_t)aes_sbox[(tmp>> 8)&0xff]<< 8; + tmp2|=(uint32_t)aes_sbox[(tmp>>16)&0xff]<<16; + tmp2|=(uint32_t)aes_sbox[(tmp>>24) ]<<24; + tmp=tmp2; + } + + W[i]=W[i-words]^tmp; + } + + /* copy the iv across */ + memcpy(ctx->iv, iv, 16); +} + +/** + * Change a key for decryption. + */ +void AES_convert_key(AES_CTX *ctx) +{ + int i; + uint32_t *k,w,t1,t2,t3,t4; + + k = ctx->ks; + k += 4; + + for (i= ctx->rounds*4; i > 4; i--) + { + w= *k; + w = inv_mix_col(w,t1,t2,t3,t4); + *k++ =w; + } +} + +/** + * Encrypt a byte sequence (with a block size 16) using the AES cipher. + */ +void AES_cbc_encrypt(AES_CTX *ctx, const uint8_t *msg, uint8_t *out, int length) +{ + int i; + uint32_t tin[4], tout[4], iv[4]; + + memcpy(iv, ctx->iv, AES_IV_SIZE); + for (i = 0; i < 4; i++) + tout[i] = ntohl(iv[i]); + + for (length -= AES_BLOCKSIZE; length >= 0; length -= AES_BLOCKSIZE) + { + uint32_t msg_32[4]; + uint32_t out_32[4]; + memcpy(msg_32, msg, AES_BLOCKSIZE); + msg += AES_BLOCKSIZE; + + for (i = 0; i < 4; i++) + tin[i] = ntohl(msg_32[i])^tout[i]; + + AES_encrypt(ctx, tin); + + for (i = 0; i < 4; i++) + { + tout[i] = tin[i]; + out_32[i] = htonl(tout[i]); + } + + memcpy(out, out_32, AES_BLOCKSIZE); + out += AES_BLOCKSIZE; + } + + for (i = 0; i < 4; i++) + iv[i] = htonl(tout[i]); + memcpy(ctx->iv, iv, AES_IV_SIZE); +} + +/** + * Decrypt a byte sequence (with a block size 16) using the AES cipher. + */ +void AES_cbc_decrypt(AES_CTX *ctx, const uint8_t *msg, uint8_t *out, int length) +{ + int i; + uint32_t tin[4], xor[4], tout[4], data[4], iv[4]; + + memcpy(iv, ctx->iv, AES_IV_SIZE); + for (i = 0; i < 4; i++) + xor[i] = ntohl(iv[i]); + + for (length -= 16; length >= 0; length -= 16) + { + uint32_t msg_32[4]; + uint32_t out_32[4]; + memcpy(msg_32, msg, AES_BLOCKSIZE); + msg += AES_BLOCKSIZE; + + for (i = 0; i < 4; i++) + { + tin[i] = ntohl(msg_32[i]); + data[i] = tin[i]; + } + + AES_decrypt(ctx, data); + + for (i = 0; i < 4; i++) + { + tout[i] = data[i]^xor[i]; + xor[i] = tin[i]; + out_32[i] = htonl(tout[i]); + } + + memcpy(out, out_32, AES_BLOCKSIZE); + out += AES_BLOCKSIZE; + } + + for (i = 0; i < 4; i++) + iv[i] = htonl(xor[i]); + memcpy(ctx->iv, iv, AES_IV_SIZE); +} + +/** + * Encrypt a single block (16 bytes) of data + */ +static void AES_encrypt(const AES_CTX *ctx, uint32_t *data) +{ + /* To make this code smaller, generate the sbox entries on the fly. + * This will have a really heavy effect upon performance. + */ + uint32_t tmp[4]; + uint32_t tmp1, old_a0, a0, a1, a2, a3, row; + int curr_rnd; + int rounds = ctx->rounds; + const uint32_t *k = ctx->ks; + + /* Pre-round key addition */ + for (row = 0; row < 4; row++) + data[row] ^= *(k++); + + /* Encrypt one block. */ + for (curr_rnd = 0; curr_rnd < rounds; curr_rnd++) + { + /* Perform ByteSub and ShiftRow operations together */ + for (row = 0; row < 4; row++) + { + a0 = (uint32_t)aes_sbox[(data[row%4]>>24)&0xFF]; + a1 = (uint32_t)aes_sbox[(data[(row+1)%4]>>16)&0xFF]; + a2 = (uint32_t)aes_sbox[(data[(row+2)%4]>>8)&0xFF]; + a3 = (uint32_t)aes_sbox[(data[(row+3)%4])&0xFF]; + + /* Perform MixColumn iff not last round */ + if (curr_rnd < (rounds - 1)) + { + tmp1 = a0 ^ a1 ^ a2 ^ a3; + old_a0 = a0; + a0 ^= tmp1 ^ AES_xtime(a0 ^ a1); + a1 ^= tmp1 ^ AES_xtime(a1 ^ a2); + a2 ^= tmp1 ^ AES_xtime(a2 ^ a3); + a3 ^= tmp1 ^ AES_xtime(a3 ^ old_a0); + } + + tmp[row] = ((a0 << 24) | (a1 << 16) | (a2 << 8) | a3); + } + + /* KeyAddition - note that it is vital that this loop is separate from + the MixColumn operation, which must be atomic...*/ + for (row = 0; row < 4; row++) + data[row] = tmp[row] ^ *(k++); + } +} + +/** + * Decrypt a single block (16 bytes) of data + */ +static void AES_decrypt(const AES_CTX *ctx, uint32_t *data) +{ + uint32_t tmp[4]; + uint32_t xt0,xt1,xt2,xt3,xt4,xt5,xt6; + uint32_t a0, a1, a2, a3, row; + int curr_rnd; + int rounds = ctx->rounds; + const uint32_t *k = ctx->ks + ((rounds+1)*4); + + /* pre-round key addition */ + for (row=4; row > 0;row--) + data[row-1] ^= *(--k); + + /* Decrypt one block */ + for (curr_rnd = 0; curr_rnd < rounds; curr_rnd++) + { + /* Perform ByteSub and ShiftRow operations together */ + for (row = 4; row > 0; row--) + { + a0 = aes_isbox[(data[(row+3)%4]>>24)&0xFF]; + a1 = aes_isbox[(data[(row+2)%4]>>16)&0xFF]; + a2 = aes_isbox[(data[(row+1)%4]>>8)&0xFF]; + a3 = aes_isbox[(data[row%4])&0xFF]; + + /* Perform MixColumn iff not last round */ + if (curr_rnd<(rounds-1)) + { + /* The MDS cofefficients (0x09, 0x0B, 0x0D, 0x0E) + are quite large compared to encryption; this + operation slows decryption down noticeably. */ + xt0 = AES_xtime(a0^a1); + xt1 = AES_xtime(a1^a2); + xt2 = AES_xtime(a2^a3); + xt3 = AES_xtime(a3^a0); + xt4 = AES_xtime(xt0^xt1); + xt5 = AES_xtime(xt1^xt2); + xt6 = AES_xtime(xt4^xt5); + + xt0 ^= a1^a2^a3^xt4^xt6; + xt1 ^= a0^a2^a3^xt5^xt6; + xt2 ^= a0^a1^a3^xt4^xt6; + xt3 ^= a0^a1^a2^xt5^xt6; + tmp[row-1] = ((xt0<<24)|(xt1<<16)|(xt2<<8)|xt3); + } + else + tmp[row-1] = ((a0<<24)|(a1<<16)|(a2<<8)|a3); + } + + for (row = 4; row > 0; row--) + data[row-1] = tmp[row-1] ^ *(--k); + } +} + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/bigint.c b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/bigint.c new file mode 100644 index 0000000..53a5839 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/bigint.c @@ -0,0 +1,1575 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @defgroup bigint_api Big Integer API + * @brief The bigint implementation as used by the axTLS project. + * + * The bigint library is for RSA encryption/decryption as well as signing. + * This code tries to minimise use of malloc/free by maintaining a small + * cache. A bigint context may maintain state by being made "permanent". + * It be be later released with a bi_depermanent() and bi_free() call. + * + * It supports the following reduction techniques: + * - Classical + * - Barrett + * - Montgomery + * + * It also implements the following: + * - Karatsuba multiplication + * - Squaring + * - Sliding window exponentiation + * - Chinese Remainder Theorem (implemented in rsa.c). + * + * All the algorithms used are pretty standard, and designed for different + * data bus sizes. Negative numbers are not dealt with at all, so a subtraction + * may need to be tested for negativity. + * + * This library steals some ideas from Jef Poskanzer + * + * and GMP . It gets most of its implementation + * detail from "The Handbook of Applied Cryptography" + * + * @{ + */ + +#include +#include +#include +#include +#include +#include "bigint.h" + +#define V1 v->comps[v->size-1] /**< v1 for division */ +#define V2 v->comps[v->size-2] /**< v2 for division */ +#define U(j) tmp_u->comps[tmp_u->size-j-1] /**< uj for division */ +#define Q(j) quotient->comps[quotient->size-j-1] /**< qj for division */ + +static bigint *bi_int_multiply(BI_CTX *ctx, bigint *bi, comp i); +static bigint *bi_int_divide(BI_CTX *ctx, bigint *biR, comp denom); +static bigint *alloc(BI_CTX *ctx, int size); +static bigint *trim(bigint *bi); +static void more_comps(bigint *bi, int n); +#if defined(CONFIG_BIGINT_KARATSUBA) || defined(CONFIG_BIGINT_BARRETT) || \ + defined(CONFIG_BIGINT_MONTGOMERY) +static bigint *comp_right_shift(bigint *biR, int num_shifts); +static bigint *comp_left_shift(bigint *biR, int num_shifts); +#endif + +#ifdef CONFIG_BIGINT_CHECK_ON +static void check(const bigint *bi); +#else +#define check(A) /**< disappears in normal production mode */ +#endif + + +/** + * @brief Start a new bigint context. + * @return A bigint context. + */ +BI_CTX *bi_initialize(void) +{ + /* calloc() sets everything to zero */ + BI_CTX *ctx = (BI_CTX *)calloc(1, sizeof(BI_CTX)); + + /* the radix */ + ctx->bi_radix = alloc(ctx, 2); + ctx->bi_radix->comps[0] = 0; + ctx->bi_radix->comps[1] = 1; + bi_permanent(ctx->bi_radix); + return ctx; +} + +/** + * @brief Close the bigint context and free any resources. + * + * Free up any used memory - a check is done if all objects were not + * properly freed. + * @param ctx [in] The bigint session context. + */ +void bi_terminate(BI_CTX *ctx) +{ + bi_depermanent(ctx->bi_radix); + bi_free(ctx, ctx->bi_radix); + + if (ctx->active_count != 0) + { +#ifdef CONFIG_SSL_FULL_MODE + printf("bi_terminate: there were %d un-freed bigints\n", + ctx->active_count); +#endif + abort(); + } + + bi_clear_cache(ctx); + free(ctx); +} + +/** + *@brief Clear the memory cache. + */ +void bi_clear_cache(BI_CTX *ctx) +{ + bigint *p, *pn; + + if (ctx->free_list == NULL) + return; + + for (p = ctx->free_list; p != NULL; p = pn) + { + pn = p->next; + free(p->comps); + free(p); + } + + ctx->free_count = 0; + ctx->free_list = NULL; +} + +/** + * @brief Increment the number of references to this object. + * It does not do a full copy. + * @param bi [in] The bigint to copy. + * @return A reference to the same bigint. + */ +bigint *bi_copy(bigint *bi) +{ + check(bi); + if (bi->refs != PERMANENT) + bi->refs++; + return bi; +} + +/** + * @brief Simply make a bigint object "unfreeable" if bi_free() is called on it. + * + * For this object to be freed, bi_depermanent() must be called. + * @param bi [in] The bigint to be made permanent. + */ +void bi_permanent(bigint *bi) +{ + check(bi); + if (bi->refs != 1) + { +#ifdef CONFIG_SSL_FULL_MODE + printf("bi_permanent: refs was not 1\n"); +#endif + abort(); + } + + bi->refs = PERMANENT; +} + +/** + * @brief Take a permanent object and make it eligible for freedom. + * @param bi [in] The bigint to be made back to temporary. + */ +void bi_depermanent(bigint *bi) +{ + check(bi); + if (bi->refs != PERMANENT) + { +#ifdef CONFIG_SSL_FULL_MODE + printf("bi_depermanent: bigint was not permanent\n"); +#endif + abort(); + } + + bi->refs = 1; +} + +/** + * @brief Free a bigint object so it can be used again. + * + * The memory itself it not actually freed, just tagged as being available + * @param ctx [in] The bigint session context. + * @param bi [in] The bigint to be freed. + */ +void bi_free(BI_CTX *ctx, bigint *bi) +{ + check(bi); + if (bi->refs == PERMANENT) + { + return; + } + + if (--bi->refs > 0) + { + return; + } + + bi->next = ctx->free_list; + ctx->free_list = bi; + ctx->free_count++; + + if (--ctx->active_count < 0) + { +#ifdef CONFIG_SSL_FULL_MODE + printf("bi_free: active_count went negative " + "- double-freed bigint?\n"); +#endif + abort(); + } +} + +/** + * @brief Convert an (unsigned) integer into a bigint. + * @param ctx [in] The bigint session context. + * @param i [in] The (unsigned) integer to be converted. + * + */ +bigint *int_to_bi(BI_CTX *ctx, comp i) +{ + bigint *biR = alloc(ctx, 1); + biR->comps[0] = i; + return biR; +} + +/** + * @brief Do a full copy of the bigint object. + * @param ctx [in] The bigint session context. + * @param bi [in] The bigint object to be copied. + */ +bigint *bi_clone(BI_CTX *ctx, const bigint *bi) +{ + bigint *biR = alloc(ctx, bi->size); + check(bi); + memcpy(biR->comps, bi->comps, bi->size*COMP_BYTE_SIZE); + return biR; +} + +/** + * @brief Perform an addition operation between two bigints. + * @param ctx [in] The bigint session context. + * @param bia [in] A bigint. + * @param bib [in] Another bigint. + * @return The result of the addition. + */ +bigint *bi_add(BI_CTX *ctx, bigint *bia, bigint *bib) +{ + int n; + comp carry = 0; + comp *pa, *pb; + + check(bia); + check(bib); + + n = max(bia->size, bib->size); + more_comps(bia, n+1); + more_comps(bib, n); + pa = bia->comps; + pb = bib->comps; + + do + { + comp sl, rl, cy1; + sl = *pa + *pb++; + rl = sl + carry; + cy1 = sl < *pa; + carry = cy1 | (rl < sl); + *pa++ = rl; + } while (--n != 0); + + *pa = carry; /* do overflow */ + bi_free(ctx, bib); + return trim(bia); +} + +/** + * @brief Perform a subtraction operation between two bigints. + * @param ctx [in] The bigint session context. + * @param bia [in] A bigint. + * @param bib [in] Another bigint. + * @param is_negative [out] If defined, indicates that the result was negative. + * is_negative may be null. + * @return The result of the subtraction. The result is always positive. + */ +bigint *bi_subtract(BI_CTX *ctx, + bigint *bia, bigint *bib, int *is_negative) +{ + int n = bia->size; + comp *pa, *pb, carry = 0; + + check(bia); + check(bib); + + more_comps(bib, n); + pa = bia->comps; + pb = bib->comps; + + do + { + comp sl, rl, cy1; + sl = *pa - *pb++; + rl = sl - carry; + cy1 = sl > *pa; + carry = cy1 | (rl > sl); + *pa++ = rl; + } while (--n != 0); + + if (is_negative) /* indicate a negative result */ + { + *is_negative = carry; + } + + bi_free(ctx, trim(bib)); /* put bib back to the way it was */ + return trim(bia); +} + +/** + * Perform a multiply between a bigint an an (unsigned) integer + */ +static bigint *bi_int_multiply(BI_CTX *ctx, bigint *bia, comp b) +{ + int j = 0, n = bia->size; + bigint *biR = alloc(ctx, n + 1); + comp carry = 0; + comp *r = biR->comps; + comp *a = bia->comps; + + check(bia); + + /* clear things to start with */ + memset(r, 0, ((n+1)*COMP_BYTE_SIZE)); + + do + { + long_comp tmp = *r + (long_comp)a[j]*b + carry; + *r++ = (comp)tmp; /* downsize */ + carry = (comp)(tmp >> COMP_BIT_SIZE); + } while (++j < n); + + *r = carry; + bi_free(ctx, bia); + return trim(biR); +} + +/** + * @brief Does both division and modulo calculations. + * + * Used extensively when doing classical reduction. + * @param ctx [in] The bigint session context. + * @param u [in] A bigint which is the numerator. + * @param v [in] Either the denominator or the modulus depending on the mode. + * @param is_mod [n] Determines if this is a normal division (0) or a reduction + * (1). + * @return The result of the division/reduction. + */ +bigint *bi_divide(BI_CTX *ctx, bigint *u, bigint *v, int is_mod) +{ + int n = v->size, m = u->size-n; + int j = 0, orig_u_size = u->size; + uint8_t mod_offset = ctx->mod_offset; + comp d; + bigint *quotient, *tmp_u; + comp q_dash; + + check(u); + check(v); + + /* if doing reduction and we are < mod, then return mod */ + if (is_mod && bi_compare(v, u) > 0) + { + bi_free(ctx, v); + return u; + } + + quotient = alloc(ctx, m+1); + tmp_u = alloc(ctx, n+1); + v = trim(v); /* make sure we have no leading 0's */ + d = (comp)((long_comp)COMP_RADIX/(V1+1)); + + /* clear things to start with */ + memset(quotient->comps, 0, ((quotient->size)*COMP_BYTE_SIZE)); + + /* normalise */ + if (d > 1) + { + u = bi_int_multiply(ctx, u, d); + + if (is_mod) + { + v = ctx->bi_normalised_mod[mod_offset]; + } + else + { + v = bi_int_multiply(ctx, v, d); + } + } + + if (orig_u_size == u->size) /* new digit position u0 */ + { + more_comps(u, orig_u_size + 1); + } + + do + { + /* get a temporary short version of u */ + memcpy(tmp_u->comps, &u->comps[u->size-n-1-j], (n+1)*COMP_BYTE_SIZE); + + /* calculate q' */ + if (U(0) == V1) + { + q_dash = COMP_RADIX-1; + } + else + { + q_dash = (comp)(((long_comp)U(0)*COMP_RADIX + U(1))/V1); + } + + if (v->size > 1 && V2) + { + /* we are implementing the following: + if (V2*q_dash > (((U(0)*COMP_RADIX + U(1) - + q_dash*V1)*COMP_RADIX) + U(2))) ... */ + comp inner = (comp)((long_comp)COMP_RADIX*U(0) + U(1) - + (long_comp)q_dash*V1); + if ((long_comp)V2*q_dash > (long_comp)inner*COMP_RADIX + U(2)) + { + q_dash--; + } + } + + /* multiply and subtract */ + if (q_dash) + { + int is_negative; + tmp_u = bi_subtract(ctx, tmp_u, + bi_int_multiply(ctx, bi_copy(v), q_dash), &is_negative); + more_comps(tmp_u, n+1); + + Q(j) = q_dash; + + /* add back */ + if (is_negative) + { + Q(j)--; + tmp_u = bi_add(ctx, tmp_u, bi_copy(v)); + + /* lop off the carry */ + tmp_u->size--; + v->size--; + } + } + else + { + Q(j) = 0; + } + + /* copy back to u */ + memcpy(&u->comps[u->size-n-1-j], tmp_u->comps, (n+1)*COMP_BYTE_SIZE); + } while (++j <= m); + + bi_free(ctx, tmp_u); + bi_free(ctx, v); + + if (is_mod) /* get the remainder */ + { + bi_free(ctx, quotient); + return bi_int_divide(ctx, trim(u), d); + } + else /* get the quotient */ + { + bi_free(ctx, u); + return trim(quotient); + } +} + +/* + * Perform an integer divide on a bigint. + */ +static bigint *bi_int_divide(BI_CTX *ctx, bigint *biR, comp denom) +{ + int i = biR->size - 1; + long_comp r = 0; + + check(biR); + + do + { + r = (r<comps[i]; + biR->comps[i] = (comp)(r / denom); + r %= denom; + } while (--i >= 0); + + return trim(biR); +} + +#ifdef CONFIG_BIGINT_MONTGOMERY +/** + * There is a need for the value of integer N' such that B^-1(B-1)-N^-1N'=1, + * where B^-1(B-1) mod N=1. Actually, only the least significant part of + * N' is needed, hence the definition N0'=N' mod b. We reproduce below the + * simple algorithm from an article by Dusse and Kaliski to efficiently + * find N0' from N0 and b */ +static comp modular_inverse(bigint *bim) +{ + int i; + comp t = 1; + comp two_2_i_minus_1 = 2; /* 2^(i-1) */ + long_comp two_2_i = 4; /* 2^i */ + comp N = bim->comps[0]; + + for (i = 2; i <= COMP_BIT_SIZE; i++) + { + if ((long_comp)N*t%two_2_i >= two_2_i_minus_1) + { + t += two_2_i_minus_1; + } + + two_2_i_minus_1 <<= 1; + two_2_i <<= 1; + } + + return (comp)(COMP_RADIX-t); +} +#endif + +#if defined(CONFIG_BIGINT_KARATSUBA) || defined(CONFIG_BIGINT_BARRETT) || \ + defined(CONFIG_BIGINT_MONTGOMERY) +/** + * Take each component and shift down (in terms of components) + */ +static bigint *comp_right_shift(bigint *biR, int num_shifts) +{ + int i = biR->size-num_shifts; + comp *x = biR->comps; + comp *y = &biR->comps[num_shifts]; + + check(biR); + + if (i <= 0) /* have we completely right shifted? */ + { + biR->comps[0] = 0; /* return 0 */ + biR->size = 1; + return biR; + } + + do + { + *x++ = *y++; + } while (--i > 0); + + biR->size -= num_shifts; + return biR; +} + +/** + * Take each component and shift it up (in terms of components) + */ +static bigint *comp_left_shift(bigint *biR, int num_shifts) +{ + int i = biR->size-1; + comp *x, *y; + + check(biR); + + if (num_shifts <= 0) + { + return biR; + } + + more_comps(biR, biR->size + num_shifts); + + x = &biR->comps[i+num_shifts]; + y = &biR->comps[i]; + + do + { + *x-- = *y--; + } while (i--); + + memset(biR->comps, 0, num_shifts*COMP_BYTE_SIZE); /* zero LS comps */ + return biR; +} +#endif + +/** + * @brief Allow a binary sequence to be imported as a bigint. + * @param ctx [in] The bigint session context. + * @param data [in] The data to be converted. + * @param size [in] The number of bytes of data. + * @return A bigint representing this data. + */ +bigint *bi_import(BI_CTX *ctx, const uint8_t *data, int size) +{ + bigint *biR = alloc(ctx, (size+COMP_BYTE_SIZE-1)/COMP_BYTE_SIZE); + int i, j = 0, offset = 0; + + memset(biR->comps, 0, biR->size*COMP_BYTE_SIZE); + + for (i = size-1; i >= 0; i--) + { + biR->comps[offset] += data[i] << (j*8); + + if (++j == COMP_BYTE_SIZE) + { + j = 0; + offset ++; + } + } + + return trim(biR); +} + +#ifdef CONFIG_SSL_FULL_MODE +/** + * @brief The testharness uses this code to import text hex-streams and + * convert them into bigints. + * @param ctx [in] The bigint session context. + * @param data [in] A string consisting of hex characters. The characters must + * be in upper case. + * @return A bigint representing this data. + */ +bigint *bi_str_import(BI_CTX *ctx, const char *data) +{ + int size = strlen(data); + bigint *biR = alloc(ctx, (size+COMP_NUM_NIBBLES-1)/COMP_NUM_NIBBLES); + int i, j = 0, offset = 0; + memset(biR->comps, 0, biR->size*COMP_BYTE_SIZE); + + for (i = size-1; i >= 0; i--) + { + int num = (data[i] <= '9') ? (data[i] - '0') : (data[i] - 'A' + 10); + biR->comps[offset] += num << (j*4); + + if (++j == COMP_NUM_NIBBLES) + { + j = 0; + offset ++; + } + } + + return biR; +} + +void bi_print(const char *label, bigint *x) +{ + int i, j; + + if (x == NULL) + { + printf("%s: (null)\n", label); + return; + } + + printf("%s: (size %d)\n", label, x->size); + for (i = x->size-1; i >= 0; i--) + { + for (j = COMP_NUM_NIBBLES-1; j >= 0; j--) + { + comp mask = 0x0f << (j*4); + comp num = (x->comps[i] & mask) >> (j*4); + putc((num <= 9) ? (num + '0') : (num + 'A' - 10), stdout); + } + } + + printf("\n"); +} +#endif + +/** + * @brief Take a bigint and convert it into a byte sequence. + * + * This is useful after a decrypt operation. + * @param ctx [in] The bigint session context. + * @param x [in] The bigint to be converted. + * @param data [out] The converted data as a byte stream. + * @param size [in] The maximum size of the byte stream. Unused bytes will be + * zeroed. + */ +void bi_export(BI_CTX *ctx, bigint *x, uint8_t *data, int size) +{ + int i, j, k = size-1; + + check(x); + memset(data, 0, size); /* ensure all leading 0's are cleared */ + + for (i = 0; i < x->size; i++) + { + for (j = 0; j < COMP_BYTE_SIZE; j++) + { + comp mask = 0xff << (j*8); + int num = (x->comps[i] & mask) >> (j*8); + data[k--] = num; + + if (k < 0) + { + break; + } + } + } + + bi_free(ctx, x); +} + +/** + * @brief Pre-calculate some of the expensive steps in reduction. + * + * This function should only be called once (normally when a session starts). + * When the session is over, bi_free_mod() should be called. bi_mod_power() + * relies on this function being called. + * @param ctx [in] The bigint session context. + * @param bim [in] The bigint modulus that will be used. + * @param mod_offset [in] There are three moduluii that can be stored - the + * standard modulus, and its two primes p and q. This offset refers to which + * modulus we are referring to. + * @see bi_free_mod(), bi_mod_power(). + */ +void bi_set_mod(BI_CTX *ctx, bigint *bim, int mod_offset) +{ + int k = bim->size; + comp d = (comp)((long_comp)COMP_RADIX/(bim->comps[k-1]+1)); +#ifdef CONFIG_BIGINT_MONTGOMERY + bigint *R, *R2; +#endif + + ctx->bi_mod[mod_offset] = bim; + bi_permanent(ctx->bi_mod[mod_offset]); + ctx->bi_normalised_mod[mod_offset] = bi_int_multiply(ctx, bim, d); + bi_permanent(ctx->bi_normalised_mod[mod_offset]); + +#if defined(CONFIG_BIGINT_MONTGOMERY) + /* set montgomery variables */ + R = comp_left_shift(bi_clone(ctx, ctx->bi_radix), k-1); /* R */ + R2 = comp_left_shift(bi_clone(ctx, ctx->bi_radix), k*2-1); /* R^2 */ + ctx->bi_RR_mod_m[mod_offset] = bi_mod(ctx, R2); /* R^2 mod m */ + ctx->bi_R_mod_m[mod_offset] = bi_mod(ctx, R); /* R mod m */ + + bi_permanent(ctx->bi_RR_mod_m[mod_offset]); + bi_permanent(ctx->bi_R_mod_m[mod_offset]); + + ctx->N0_dash[mod_offset] = modular_inverse(ctx->bi_mod[mod_offset]); + +#elif defined (CONFIG_BIGINT_BARRETT) + ctx->bi_mu[mod_offset] = + bi_divide(ctx, comp_left_shift( + bi_clone(ctx, ctx->bi_radix), k*2-1), ctx->bi_mod[mod_offset], 0); + bi_permanent(ctx->bi_mu[mod_offset]); +#endif +} + +/** + * @brief Used when cleaning various bigints at the end of a session. + * @param ctx [in] The bigint session context. + * @param mod_offset [in] The offset to use. + * @see bi_set_mod(). + */ +void bi_free_mod(BI_CTX *ctx, int mod_offset) +{ + bi_depermanent(ctx->bi_mod[mod_offset]); + bi_free(ctx, ctx->bi_mod[mod_offset]); +#if defined (CONFIG_BIGINT_MONTGOMERY) + bi_depermanent(ctx->bi_RR_mod_m[mod_offset]); + bi_depermanent(ctx->bi_R_mod_m[mod_offset]); + bi_free(ctx, ctx->bi_RR_mod_m[mod_offset]); + bi_free(ctx, ctx->bi_R_mod_m[mod_offset]); +#elif defined(CONFIG_BIGINT_BARRETT) + bi_depermanent(ctx->bi_mu[mod_offset]); + bi_free(ctx, ctx->bi_mu[mod_offset]); +#endif + bi_depermanent(ctx->bi_normalised_mod[mod_offset]); + bi_free(ctx, ctx->bi_normalised_mod[mod_offset]); +} + +/** + * Perform a standard multiplication between two bigints. + */ +static bigint *regular_multiply(BI_CTX *ctx, bigint *bia, bigint *bib) +{ + int i, j, i_plus_j; + int n = bia->size; + int t = bib->size; + bigint *biR = alloc(ctx, n + t); + comp *sr = biR->comps; + comp *sa = bia->comps; + comp *sb = bib->comps; + + check(bia); + check(bib); + + /* clear things to start with */ + memset(biR->comps, 0, ((n+t)*COMP_BYTE_SIZE)); + i = 0; + + do + { + comp carry = 0; + comp b = *sb++; + i_plus_j = i; + j = 0; + + do + { + long_comp tmp = sr[i_plus_j] + (long_comp)sa[j]*b + carry; + sr[i_plus_j++] = (comp)tmp; /* downsize */ + carry = (comp)(tmp >> COMP_BIT_SIZE); + } while (++j < n); + + sr[i_plus_j] = carry; + } while (++i < t); + + bi_free(ctx, bia); + bi_free(ctx, bib); + return trim(biR); +} + +#ifdef CONFIG_BIGINT_KARATSUBA +/* + * Karatsuba improves on regular multiplication due to only 3 multiplications + * being done instead of 4. The additional additions/subtractions are O(N) + * rather than O(N^2) and so for big numbers it saves on a few operations + */ +static bigint *karatsuba(BI_CTX *ctx, bigint *bia, bigint *bib, int is_square) +{ + bigint *x0, *x1; + bigint *p0, *p1, *p2; + int m; + + if (is_square) + { + m = (bia->size + 1)/2; + } + else + { + m = (max(bia->size, bib->size) + 1)/2; + } + + x0 = bi_clone(ctx, bia); + x0->size = m; + x1 = bi_clone(ctx, bia); + comp_right_shift(x1, m); + bi_free(ctx, bia); + + /* work out the 3 partial products */ + if (is_square) + { + p0 = bi_square(ctx, bi_copy(x0)); + p2 = bi_square(ctx, bi_copy(x1)); + p1 = bi_square(ctx, bi_add(ctx, x0, x1)); + } + else /* normal multiply */ + { + bigint *y0, *y1; + y0 = bi_clone(ctx, bib); + y0->size = m; + y1 = bi_clone(ctx, bib); + comp_right_shift(y1, m); + bi_free(ctx, bib); + + p0 = bi_multiply(ctx, bi_copy(x0), bi_copy(y0)); + p2 = bi_multiply(ctx, bi_copy(x1), bi_copy(y1)); + p1 = bi_multiply(ctx, bi_add(ctx, x0, x1), bi_add(ctx, y0, y1)); + } + + p1 = bi_subtract(ctx, + bi_subtract(ctx, p1, bi_copy(p2), NULL), bi_copy(p0), NULL); + + comp_left_shift(p1, m); + comp_left_shift(p2, 2*m); + return bi_add(ctx, p1, bi_add(ctx, p0, p2)); +} +#endif + +/** + * @brief Perform a multiplication operation between two bigints. + * @param ctx [in] The bigint session context. + * @param bia [in] A bigint. + * @param bib [in] Another bigint. + * @return The result of the multiplication. + */ +bigint *bi_multiply(BI_CTX *ctx, bigint *bia, bigint *bib) +{ + check(bia); + check(bib); + +#ifdef CONFIG_BIGINT_KARATSUBA + if (min(bia->size, bib->size) < MUL_KARATSUBA_THRESH) + { + return regular_multiply(ctx, bia, bib); + } + + return karatsuba(ctx, bia, bib, 0); +#else + return regular_multiply(ctx, bia, bib); +#endif +} + +#ifdef CONFIG_BIGINT_SQUARE +/* + * Perform the actual square operion. It takes into account overflow. + */ +static bigint *regular_square(BI_CTX *ctx, bigint *bi) +{ + int t = bi->size; + int i = 0, j; + bigint *biR = alloc(ctx, t*2); + comp *w = biR->comps; + comp *x = bi->comps; + comp carry; + + memset(w, 0, biR->size*COMP_BYTE_SIZE); + + do + { + long_comp tmp = w[2*i] + (long_comp)x[i]*x[i]; + comp u = 0; + w[2*i] = (comp)tmp; + carry = (comp)(tmp >> COMP_BIT_SIZE); + + for (j = i+1; j < t; j++) + { + long_comp xx = (long_comp)x[i]*x[j]; + long_comp xx2 = 2*xx; + long_comp blob = (long_comp)w[i+j]+carry; + + if (u) /* previous overflow */ + { + blob += COMP_RADIX; + } + + + u = 0; + tmp = xx2 + blob; + + /* check for overflow */ + if ((COMP_MAX-xx) < xx || (COMP_MAX-xx2) < blob) + { + u = 1; + } + + w[i+j] = (comp)tmp; + carry = (comp)(tmp >> COMP_BIT_SIZE); + } + + w[i+t] += carry; + + if (u) + { + w[i+t+1] = 1; /* add carry */ + } + } while (++i < t); + + bi_free(ctx, bi); + return trim(biR); +} + +/** + * @brief Perform a square operation on a bigint. + * @param ctx [in] The bigint session context. + * @param bia [in] A bigint. + * @return The result of the multiplication. + */ +bigint *bi_square(BI_CTX *ctx, bigint *bia) +{ + check(bia); + +#ifdef CONFIG_BIGINT_KARATSUBA + if (bia->size < SQU_KARATSUBA_THRESH) + { + return regular_square(ctx, bia); + } + + return karatsuba(ctx, bia, NULL, 1); +#else + return regular_square(ctx, bia); +#endif +} +#endif + +/** + * @brief Compare two bigints. + * @param bia [in] A bigint. + * @param bib [in] Another bigint. + * @return -1 if smaller, 1 if larger and 0 if equal. + */ +int bi_compare(bigint *bia, bigint *bib) +{ + int r, i; + + check(bia); + check(bib); + + if (bia->size > bib->size) + r = 1; + else if (bia->size < bib->size) + r = -1; + else + { + comp *a = bia->comps; + comp *b = bib->comps; + + /* Same number of components. Compare starting from the high end + * and working down. */ + r = 0; + i = bia->size - 1; + + do + { + if (a[i] > b[i]) + { + r = 1; + break; + } + else if (a[i] < b[i]) + { + r = -1; + break; + } + } while (--i >= 0); + } + + return r; +} + +/* + * Allocate and zero more components. Does not consume bi. + */ +static void more_comps(bigint *bi, int n) +{ + if (n > bi->max_comps) + { + bi->max_comps = max(bi->max_comps * 2, n); + bi->comps = (comp*)realloc(bi->comps, bi->max_comps * COMP_BYTE_SIZE); + } + + if (n > bi->size) + { + memset(&bi->comps[bi->size], 0, (n-bi->size)*COMP_BYTE_SIZE); + } + + bi->size = n; +} + +/* + * Make a new empty bigint. It may just use an old one if one is available. + * Otherwise get one off the heap. + */ +static bigint *alloc(BI_CTX *ctx, int size) +{ + bigint *biR; + + /* Can we recycle an old bigint? */ + if (ctx->free_list != NULL) + { + biR = ctx->free_list; + ctx->free_list = biR->next; + ctx->free_count--; + + if (biR->refs != 0) + { +#ifdef CONFIG_SSL_FULL_MODE + printf("alloc: refs was not 0\n"); +#endif + abort(); /* create a stack trace from a core dump */ + } + + more_comps(biR, size); + } + else + { + /* No free bigints available - create a new one. */ + biR = (bigint *)malloc(sizeof(bigint)); + biR->comps = (comp*)malloc(size * COMP_BYTE_SIZE); + biR->max_comps = size; /* give some space to spare */ + } + + biR->size = size; + biR->refs = 1; + biR->next = NULL; + ctx->active_count++; + return biR; +} + +/* + * Work out the highest '1' bit in an exponent. Used when doing sliding-window + * exponentiation. + */ +static int find_max_exp_index(bigint *biexp) +{ + int i = COMP_BIT_SIZE-1; + comp shift = COMP_RADIX/2; + comp test = biexp->comps[biexp->size-1]; /* assume no leading zeroes */ + + check(biexp); + + do + { + if (test & shift) + { + return i+(biexp->size-1)*COMP_BIT_SIZE; + } + + shift >>= 1; + } while (--i != 0); + + return -1; /* error - must have been a leading 0 */ +} + +/* + * Is a particular bit is an exponent 1 or 0? Used when doing sliding-window + * exponentiation. + */ +static int exp_bit_is_one(bigint *biexp, int offset) +{ + comp test = biexp->comps[offset / COMP_BIT_SIZE]; + int num_shifts = offset % COMP_BIT_SIZE; + comp shift = 1; + int i; + + check(biexp); + + for (i = 0; i < num_shifts; i++) + { + shift <<= 1; + } + + return test & shift; +} + +#ifdef CONFIG_BIGINT_CHECK_ON +/* + * Perform a sanity check on bi. + */ +static void check(const bigint *bi) +{ + if (bi->refs <= 0) + { + printf("check: zero or negative refs in bigint\n"); + abort(); + } + + if (bi->next != NULL) + { + printf("check: attempt to use a bigint from " + "the free list\n"); + abort(); + } +} +#endif + +/* + * Delete any leading 0's (and allow for 0). + */ +static bigint *trim(bigint *bi) +{ + check(bi); + + while (bi->comps[bi->size-1] == 0 && bi->size > 1) + { + bi->size--; + } + + return bi; +} + +#if defined(CONFIG_BIGINT_MONTGOMERY) +/** + * @brief Perform a single montgomery reduction. + * @param ctx [in] The bigint session context. + * @param bixy [in] A bigint. + * @return The result of the montgomery reduction. + */ +bigint *bi_mont(BI_CTX *ctx, bigint *bixy) +{ + int i = 0, n; + uint8_t mod_offset = ctx->mod_offset; + bigint *bim = ctx->bi_mod[mod_offset]; + comp mod_inv = ctx->N0_dash[mod_offset]; + + check(bixy); + + if (ctx->use_classical) /* just use classical instead */ + { + return bi_mod(ctx, bixy); + } + + n = bim->size; + + do + { + bixy = bi_add(ctx, bixy, comp_left_shift( + bi_int_multiply(ctx, bim, bixy->comps[i]*mod_inv), i)); + } while (++i < n); + + comp_right_shift(bixy, n); + + if (bi_compare(bixy, bim) >= 0) + { + bixy = bi_subtract(ctx, bixy, bim, NULL); + } + + return bixy; +} + +#elif defined(CONFIG_BIGINT_BARRETT) +/* + * Stomp on the most significant components to give the illusion of a "mod base + * radix" operation + */ +static bigint *comp_mod(bigint *bi, int mod) +{ + check(bi); + + if (bi->size > mod) + { + bi->size = mod; + } + + return bi; +} + +/* + * Barrett reduction has no need for some parts of the product, so ignore bits + * of the multiply. This routine gives Barrett its big performance + * improvements over Classical/Montgomery reduction methods. + */ +static bigint *partial_multiply(BI_CTX *ctx, bigint *bia, bigint *bib, + int inner_partial, int outer_partial) +{ + int i = 0, j, n = bia->size, t = bib->size; + bigint *biR; + comp carry; + comp *sr, *sa, *sb; + + check(bia); + check(bib); + + biR = alloc(ctx, n + t); + sa = bia->comps; + sb = bib->comps; + sr = biR->comps; + + if (inner_partial) + { + memset(sr, 0, inner_partial*COMP_BYTE_SIZE); + } + else /* outer partial */ + { + if (n < outer_partial || t < outer_partial) /* should we bother? */ + { + bi_free(ctx, bia); + bi_free(ctx, bib); + biR->comps[0] = 0; /* return 0 */ + biR->size = 1; + return biR; + } + + memset(&sr[outer_partial], 0, (n+t-outer_partial)*COMP_BYTE_SIZE); + } + + do + { + comp *a = sa; + comp b = *sb++; + long_comp tmp; + int i_plus_j = i; + carry = 0; + j = n; + + if (outer_partial && i_plus_j < outer_partial) + { + i_plus_j = outer_partial; + a = &sa[outer_partial-i]; + j = n-(outer_partial-i); + } + + do + { + if (inner_partial && i_plus_j >= inner_partial) + { + break; + } + + tmp = sr[i_plus_j] + ((long_comp)*a++)*b + carry; + sr[i_plus_j++] = (comp)tmp; /* downsize */ + carry = (comp)(tmp >> COMP_BIT_SIZE); + } while (--j != 0); + + sr[i_plus_j] = carry; + } while (++i < t); + + bi_free(ctx, bia); + bi_free(ctx, bib); + return trim(biR); +} + +/** + * @brief Perform a single Barrett reduction. + * @param ctx [in] The bigint session context. + * @param bi [in] A bigint. + * @return The result of the Barrett reduction. + */ +bigint *bi_barrett(BI_CTX *ctx, bigint *bi) +{ + bigint *q1, *q2, *q3, *r1, *r2, *r; + uint8_t mod_offset = ctx->mod_offset; + bigint *bim = ctx->bi_mod[mod_offset]; + int k = bim->size; + + check(bi); + check(bim); + + /* use Classical method instead - Barrett cannot help here */ + if (bi->size > k*2) + { + return bi_mod(ctx, bi); + } + + q1 = comp_right_shift(bi_clone(ctx, bi), k-1); + + /* do outer partial multiply */ + q2 = partial_multiply(ctx, q1, ctx->bi_mu[mod_offset], 0, k-1); + q3 = comp_right_shift(q2, k+1); + r1 = comp_mod(bi, k+1); + + /* do inner partial multiply */ + r2 = comp_mod(partial_multiply(ctx, q3, bim, k+1, 0), k+1); + r = bi_subtract(ctx, r1, r2, NULL); + + /* if (r >= m) r = r - m; */ + if (bi_compare(r, bim) >= 0) + { + r = bi_subtract(ctx, r, bim, NULL); + } + + return r; +} +#endif /* CONFIG_BIGINT_BARRETT */ + +#ifdef CONFIG_BIGINT_SLIDING_WINDOW +/* + * Work out g1, g3, g5, g7... etc for the sliding-window algorithm + */ +static void precompute_slide_window(BI_CTX *ctx, int window, bigint *g1) +{ + int k = 1, i; + bigint *g2; + + for (i = 0; i < window-1; i++) /* compute 2^(window-1) */ + { + k <<= 1; + } + + ctx->g = (bigint **)malloc(k*sizeof(bigint *)); + ctx->g[0] = bi_clone(ctx, g1); + bi_permanent(ctx->g[0]); + g2 = bi_residue(ctx, bi_square(ctx, ctx->g[0])); /* g^2 */ + + for (i = 1; i < k; i++) + { + ctx->g[i] = bi_residue(ctx, bi_multiply(ctx, ctx->g[i-1], bi_copy(g2))); + bi_permanent(ctx->g[i]); + } + + bi_free(ctx, g2); + ctx->window = k; +} +#endif + +/** + * @brief Perform a modular exponentiation. + * + * This function requires bi_set_mod() to have been called previously. This is + * one of the optimisations used for performance. + * @param ctx [in] The bigint session context. + * @param bi [in] The bigint on which to perform the mod power operation. + * @param biexp [in] The bigint exponent. + * @return The result of the mod exponentiation operation + * @see bi_set_mod(). + */ +bigint *bi_mod_power(BI_CTX *ctx, bigint *bi, bigint *biexp) +{ + int i = find_max_exp_index(biexp), j, window_size = 1; + bigint *biR = int_to_bi(ctx, 1); + +#if defined(CONFIG_BIGINT_MONTGOMERY) + uint8_t mod_offset = ctx->mod_offset; + if (!ctx->use_classical) + { + /* preconvert */ + bi = bi_mont(ctx, + bi_multiply(ctx, bi, ctx->bi_RR_mod_m[mod_offset])); /* x' */ + bi_free(ctx, biR); + biR = ctx->bi_R_mod_m[mod_offset]; /* A */ + } +#endif + + check(bi); + check(biexp); + +#ifdef CONFIG_BIGINT_SLIDING_WINDOW + for (j = i; j > 32; j /= 5) /* work out an optimum size */ + window_size++; + + /* work out the slide constants */ + precompute_slide_window(ctx, window_size, bi); +#else /* just one constant */ + ctx->g = (bigint **)malloc(sizeof(bigint *)); + ctx->g[0] = bi_clone(ctx, bi); + ctx->window = 1; + bi_permanent(ctx->g[0]); +#endif + + /* if sliding-window is off, then only one bit will be done at a time and + * will reduce to standard left-to-right exponentiation */ + do + { + if (exp_bit_is_one(biexp, i)) + { + int l = i-window_size+1; + int part_exp = 0; + + if (l < 0) /* LSB of exponent will always be 1 */ + l = 0; + else + { + while (exp_bit_is_one(biexp, l) == 0) + l++; /* go back up */ + } + + /* build up the section of the exponent */ + for (j = i; j >= l; j--) + { + biR = bi_residue(ctx, bi_square(ctx, biR)); + if (exp_bit_is_one(biexp, j)) + part_exp++; + + if (j != l) + part_exp <<= 1; + } + + part_exp = (part_exp-1)/2; /* adjust for array */ + biR = bi_residue(ctx, bi_multiply(ctx, biR, ctx->g[part_exp])); + i = l-1; + } + else /* square it */ + { + biR = bi_residue(ctx, bi_square(ctx, biR)); + i--; + } + } while (i >= 0); + + /* cleanup */ + for (i = 0; i < ctx->window; i++) + { + bi_depermanent(ctx->g[i]); + bi_free(ctx, ctx->g[i]); + } + + free(ctx->g); + bi_free(ctx, bi); + bi_free(ctx, biexp); +#if defined CONFIG_BIGINT_MONTGOMERY + return ctx->use_classical ? biR : bi_mont(ctx, biR); /* convert back */ +#else /* CONFIG_BIGINT_CLASSICAL or CONFIG_BIGINT_BARRETT */ + return biR; +#endif +} + +#ifdef CONFIG_SSL_CERT_VERIFICATION +/** + * @brief Perform a modular exponentiation using a temporary modulus. + * + * We need this function to check the signatures of certificates. The modulus + * of this function is temporary as it's just used for authentication. + * @param ctx [in] The bigint session context. + * @param bi [in] The bigint to perform the exp/mod. + * @param bim [in] The temporary modulus. + * @param biexp [in] The bigint exponent. + * @return The result of the mod exponentiation operation + * @see bi_set_mod(). + */ +bigint *bi_mod_power2(BI_CTX *ctx, bigint *bi, bigint *bim, bigint *biexp) +{ + bigint *biR, *tmp_biR; + + /* Set up a temporary bigint context and transfer what we need between + * them. We need to do this since we want to keep the original modulus + * which is already in this context. This operation is only called when + * doing peer verification, and so is not expensive :-) */ + BI_CTX *tmp_ctx = bi_initialize(); + bi_set_mod(tmp_ctx, bi_clone(tmp_ctx, bim), BIGINT_M_OFFSET); + tmp_biR = bi_mod_power(tmp_ctx, + bi_clone(tmp_ctx, bi), + bi_clone(tmp_ctx, biexp)); + biR = bi_clone(ctx, tmp_biR); + bi_free(tmp_ctx, tmp_biR); + bi_free_mod(tmp_ctx, BIGINT_M_OFFSET); + bi_terminate(tmp_ctx); + + bi_free(ctx, bi); + bi_free(ctx, bim); + bi_free(ctx, biexp); + return biR; +} +#endif + +#ifdef CONFIG_BIGINT_CRT +/** + * @brief Use the Chinese Remainder Theorem to quickly perform RSA decrypts. + * + * @param ctx [in] The bigint session context. + * @param bi [in] The bigint to perform the exp/mod. + * @param dP [in] CRT's dP bigint + * @param dQ [in] CRT's dQ bigint + * @param p [in] CRT's p bigint + * @param q [in] CRT's q bigint + * @param qInv [in] CRT's qInv bigint + * @return The result of the CRT operation + */ +bigint *bi_crt(BI_CTX *ctx, bigint *bi, + bigint *dP, bigint *dQ, + bigint *p, bigint *q, bigint *qInv) +{ + bigint *m1, *m2, *h; + + /* Montgomery has a condition the 0 < x, y < m and these products violate + * that condition. So disable Montgomery when using CRT */ +#if defined(CONFIG_BIGINT_MONTGOMERY) + ctx->use_classical = 1; +#endif + ctx->mod_offset = BIGINT_P_OFFSET; + m1 = bi_mod_power(ctx, bi_copy(bi), dP); + + ctx->mod_offset = BIGINT_Q_OFFSET; + m2 = bi_mod_power(ctx, bi, dQ); + + h = bi_subtract(ctx, bi_add(ctx, m1, p), bi_copy(m2), NULL); + h = bi_multiply(ctx, h, qInv); + ctx->mod_offset = BIGINT_P_OFFSET; + h = bi_residue(ctx, h); +#if defined(CONFIG_BIGINT_MONTGOMERY) + ctx->use_classical = 0; /* reset for any further operation */ +#endif + return bi_add(ctx, m2, bi_multiply(ctx, q, h)); +} +#endif +/** @} */ diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/bigint.h b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/bigint.h new file mode 100644 index 0000000..2966a3e --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/bigint.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef BIGINT_HEADER +#define BIGINT_HEADER + +#include "crypto.h" + +BI_CTX *bi_initialize(void); +void bi_terminate(BI_CTX *ctx); +void bi_permanent(bigint *bi); +void bi_depermanent(bigint *bi); +void bi_clear_cache(BI_CTX *ctx); +void bi_free(BI_CTX *ctx, bigint *bi); +bigint *bi_copy(bigint *bi); +bigint *bi_clone(BI_CTX *ctx, const bigint *bi); +void bi_export(BI_CTX *ctx, bigint *bi, uint8_t *data, int size); +bigint *bi_import(BI_CTX *ctx, const uint8_t *data, int len); +bigint *int_to_bi(BI_CTX *ctx, comp i); + +/* the functions that actually do something interesting */ +bigint *bi_add(BI_CTX *ctx, bigint *bia, bigint *bib); +bigint *bi_subtract(BI_CTX *ctx, bigint *bia, + bigint *bib, int *is_negative); +bigint *bi_divide(BI_CTX *ctx, bigint *bia, bigint *bim, int is_mod); +bigint *bi_multiply(BI_CTX *ctx, bigint *bia, bigint *bib); +bigint *bi_mod_power(BI_CTX *ctx, bigint *bi, bigint *biexp); +bigint *bi_mod_power2(BI_CTX *ctx, bigint *bi, bigint *bim, bigint *biexp); +int bi_compare(bigint *bia, bigint *bib); +void bi_set_mod(BI_CTX *ctx, bigint *bim, int mod_offset); +void bi_free_mod(BI_CTX *ctx, int mod_offset); + +#ifdef CONFIG_SSL_FULL_MODE +void bi_print(const char *label, bigint *bi); +bigint *bi_str_import(BI_CTX *ctx, const char *data); +#endif + +/** + * @def bi_mod + * Find the residue of B. bi_set_mod() must be called before hand. + */ +#define bi_mod(A, B) bi_divide(A, B, ctx->bi_mod[ctx->mod_offset], 1) + +/** + * bi_residue() is technically the same as bi_mod(), but it uses the + * appropriate reduction technique (which is bi_mod() when doing classical + * reduction). + */ +#if defined(CONFIG_BIGINT_MONTGOMERY) +#define bi_residue(A, B) bi_mont(A, B) +bigint *bi_mont(BI_CTX *ctx, bigint *bixy); +#elif defined(CONFIG_BIGINT_BARRETT) +#define bi_residue(A, B) bi_barrett(A, B) +bigint *bi_barrett(BI_CTX *ctx, bigint *bi); +#else /* if defined(CONFIG_BIGINT_CLASSICAL) */ +#define bi_residue(A, B) bi_mod(A, B) +#endif + +#ifdef CONFIG_BIGINT_SQUARE +bigint *bi_square(BI_CTX *ctx, bigint *bi); +#else +#define bi_square(A, B) bi_multiply(A, bi_copy(B), B) +#endif + +#ifdef CONFIG_BIGINT_CRT +bigint *bi_crt(BI_CTX *ctx, bigint *bi, + bigint *dP, bigint *dQ, + bigint *p, bigint *q, + bigint *qInv); +#endif + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/bigint_impl.h b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/bigint_impl.h new file mode 100644 index 0000000..1483154 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/bigint_impl.h @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef BIGINT_IMPL_HEADER +#define BIGINT_IMPL_HEADER + +/* Maintain a number of precomputed variables when doing reduction */ +#define BIGINT_M_OFFSET 0 /**< Normal modulo offset. */ +#ifdef CONFIG_BIGINT_CRT +#define BIGINT_P_OFFSET 1 /**< p modulo offset. */ +#define BIGINT_Q_OFFSET 2 /**< q module offset. */ +#define BIGINT_NUM_MODS 3 /**< The number of modulus constants used. */ +#else +#define BIGINT_NUM_MODS 1 +#endif + +/* Architecture specific functions for big ints */ +#ifdef WIN32 +#define COMP_RADIX 4294967296i64 +#define COMP_MAX 0xFFFFFFFFFFFFFFFFui64 +#else +#define COMP_RADIX 4294967296ULL /**< Max component + 1 */ +#define COMP_MAX 0xFFFFFFFFFFFFFFFFULL/**< (Max dbl comp -1) */ +#endif +#define COMP_BIT_SIZE 32 /**< Number of bits in a component. */ +#define COMP_BYTE_SIZE 4 /**< Number of bytes in a component. */ +#define COMP_NUM_NIBBLES 8 /**< Used For diagnostics only. */ + +typedef uint32_t comp; /**< A single precision component. */ +typedef uint64_t long_comp; /**< A double precision component. */ +typedef int64_t slong_comp; /**< A signed double precision component. */ + +/** + * @struct _bigint + * @brief A big integer basic object + */ +struct _bigint +{ + struct _bigint* next; /**< The next bigint in the cache. */ + short size; /**< The number of components in this bigint. */ + short max_comps; /**< The heapsize allocated for this bigint */ + int refs; /**< An internal reference count. */ + comp* comps; /**< A ptr to the actual component data */ +}; + +typedef struct _bigint bigint; /**< An alias for _bigint */ + +/** + * Maintains the state of the cache, and a number of variables used in + * reduction. + */ +typedef struct /**< A big integer "session" context. */ +{ + bigint *active_list; /**< Bigints currently used. */ + bigint *free_list; /**< Bigints not used. */ + bigint *bi_radix; /**< The radix used. */ + bigint *bi_mod[BIGINT_NUM_MODS]; /**< modulus */ + +#if defined(CONFIG_BIGINT_MONTGOMERY) + bigint *bi_RR_mod_m[BIGINT_NUM_MODS]; /**< R^2 mod m */ + bigint *bi_R_mod_m[BIGINT_NUM_MODS]; /**< R mod m */ + comp N0_dash[BIGINT_NUM_MODS]; +#elif defined(CONFIG_BIGINT_BARRETT) + bigint *bi_mu[BIGINT_NUM_MODS]; /**< Storage for mu */ +#endif + bigint *bi_normalised_mod[BIGINT_NUM_MODS]; /**< Normalised mod storage. */ + bigint **g; /**< Used by sliding-window. */ + int window; /**< The size of the sliding window */ + int active_count; /**< Number of active bigints. */ + int free_count; /**< Number of free bigints. */ + +#ifdef CONFIG_BIGINT_MONTGOMERY + uint8_t use_classical; /**< Use classical reduction. */ +#endif + uint8_t mod_offset; /**< The mod offset we are using */ +} BI_CTX; + +#ifndef WIN32 +#define max(a,b) ((a)>(b)?(a):(b)) /**< Find the maximum of 2 numbers. */ +#define min(a,b) ((a)<(b)?(a):(b)) /**< Find the minimum of 2 numbers. */ +#endif + +#define PERMANENT 0x7FFF55AA /**< A magic number for permanents. */ + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/crypto.h b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/crypto.h new file mode 100644 index 0000000..5c95f21 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/crypto.h @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file crypto.h + */ + +#ifndef HEADER_CRYPTO_H +#define HEADER_CRYPTO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "config.h" +#include "os_port.h" +#include "bigint_impl.h" +#include "bigint.h" + +/* enable features based on a 'super-set' capbaility. */ +#if defined(CONFIG_SSL_FULL_MODE) +#define CONFIG_SSL_ENABLE_CLIENT +#define CONFIG_SSL_CERT_VERIFICATION +#elif defined(CONFIG_SSL_ENABLE_CLIENT) +#define CONFIG_SSL_CERT_VERIFICATION +#endif + +/************************************************************************** + * AES declarations + **************************************************************************/ + +#define AES_MAXROUNDS 14 +#define AES_BLOCKSIZE 16 +#define AES_IV_SIZE 16 + +typedef struct aes_key_st +{ + uint16_t rounds; + uint16_t key_size; + uint32_t ks[(AES_MAXROUNDS+1)*8]; + uint8_t iv[AES_IV_SIZE]; +} AES_CTX; + +typedef enum +{ + AES_MODE_128, + AES_MODE_256 +} AES_MODE; + +void AES_set_key(AES_CTX *ctx, const uint8_t *key, + const uint8_t *iv, AES_MODE mode); +void AES_cbc_encrypt(AES_CTX *ctx, const uint8_t *msg, + uint8_t *out, int length); +void AES_cbc_decrypt(AES_CTX *ks, const uint8_t *in, uint8_t *out, int length); +void AES_convert_key(AES_CTX *ctx); + +/************************************************************************** + * RC4 declarations + **************************************************************************/ + +typedef struct +{ + uint8_t x, y, m[256]; +} RC4_CTX; + +void RC4_setup(RC4_CTX *s, const uint8_t *key, int length); +void RC4_crypt(RC4_CTX *s, const uint8_t *msg, uint8_t *data, int length); + +/************************************************************************** + * SHA1 declarations + **************************************************************************/ + +#define SHA1_SIZE 20 + +/* + * This structure will hold context information for the SHA-1 + * hashing operation + */ +typedef struct +{ + uint32_t Intermediate_Hash[SHA1_SIZE/4]; /* Message Digest */ + uint32_t Length_Low; /* Message length in bits */ + uint32_t Length_High; /* Message length in bits */ + uint16_t Message_Block_Index; /* Index into message block array */ + uint8_t Message_Block[64]; /* 512-bit message blocks */ +} SHA1_CTX; + +void SHA1_Init(SHA1_CTX *); +void SHA1_Update(SHA1_CTX *, const uint8_t * msg, int len); +void SHA1_Final(uint8_t *digest, SHA1_CTX *); + +/************************************************************************** + * MD2 declarations + **************************************************************************/ + +#define MD2_SIZE 16 + +typedef struct +{ + unsigned char cksum[16]; /* checksum of the data block */ + unsigned char state[48]; /* intermediate digest state */ + unsigned char buffer[16]; /* data block being processed */ + int left; /* amount of data in buffer */ +} MD2_CTX; + +EXP_FUNC void STDCALL MD2_Init(MD2_CTX *ctx); +EXP_FUNC void STDCALL MD2_Update(MD2_CTX *ctx, const uint8_t *input, int ilen); +EXP_FUNC void STDCALL MD2_Final(uint8_t *digest, MD2_CTX *ctx); + +/************************************************************************** + * MD5 declarations + **************************************************************************/ + +#define MD5_SIZE 16 + +typedef struct +{ + uint32_t state[4]; /* state (ABCD) */ + uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */ + uint8_t buffer[64]; /* input buffer */ +} MD5_CTX; + +EXP_FUNC void STDCALL MD5_Init(MD5_CTX *); +EXP_FUNC void STDCALL MD5_Update(MD5_CTX *, const uint8_t *msg, int len); +EXP_FUNC void STDCALL MD5_Final(uint8_t *digest, MD5_CTX *); + +/************************************************************************** + * HMAC declarations + **************************************************************************/ +void hmac_md5(const uint8_t *msg, int length, const uint8_t *key, + int key_len, uint8_t *digest); +void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key, + int key_len, uint8_t *digest); + +/************************************************************************** + * RSA declarations + **************************************************************************/ + +typedef struct +{ + bigint *m; /* modulus */ + bigint *e; /* public exponent */ + bigint *d; /* private exponent */ +#ifdef CONFIG_BIGINT_CRT + bigint *p; /* p as in m = pq */ + bigint *q; /* q as in m = pq */ + bigint *dP; /* d mod (p-1) */ + bigint *dQ; /* d mod (q-1) */ + bigint *qInv; /* q^-1 mod p */ +#endif + int num_octets; + BI_CTX *bi_ctx; +} RSA_CTX; + +void RSA_priv_key_new(RSA_CTX **rsa_ctx, + const uint8_t *modulus, int mod_len, + const uint8_t *pub_exp, int pub_len, + const uint8_t *priv_exp, int priv_len +#ifdef CONFIG_BIGINT_CRT + , const uint8_t *p, int p_len, + const uint8_t *q, int q_len, + const uint8_t *dP, int dP_len, + const uint8_t *dQ, int dQ_len, + const uint8_t *qInv, int qInv_len +#endif + ); +void RSA_pub_key_new(RSA_CTX **rsa_ctx, + const uint8_t *modulus, int mod_len, + const uint8_t *pub_exp, int pub_len); +void RSA_free(RSA_CTX *ctx); +int RSA_decrypt(const RSA_CTX *ctx, const uint8_t *in_data, uint8_t *out_data, + int is_decryption); +bigint *RSA_private(const RSA_CTX *c, bigint *bi_msg); +#if defined(CONFIG_SSL_CERT_VERIFICATION) || defined(CONFIG_SSL_GENERATE_X509_CERT) +bigint *RSA_sign_verify(BI_CTX *ctx, const uint8_t *sig, int sig_len, + bigint *modulus, bigint *pub_exp); +bigint *RSA_public(const RSA_CTX * c, bigint *bi_msg); +int RSA_encrypt(const RSA_CTX *ctx, const uint8_t *in_data, uint16_t in_len, + uint8_t *out_data, int is_signing); +void RSA_print(const RSA_CTX *ctx); +#endif + +/************************************************************************** + * RNG declarations + **************************************************************************/ +EXP_FUNC void STDCALL RNG_initialize(const uint8_t *seed_buf, int size); +EXP_FUNC void STDCALL RNG_terminate(void); +EXP_FUNC void STDCALL get_random(int num_rand_bytes, uint8_t *rand_data); +void get_random_NZ(int num_rand_bytes, uint8_t *rand_data); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/crypto_misc.c b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/crypto_misc.c new file mode 100644 index 0000000..59b72ec --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/crypto_misc.c @@ -0,0 +1,357 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Some misc. routines to help things out + */ + +#include +#include +#include +#include +#include "crypto_misc.h" +#ifdef CONFIG_WIN32_USE_CRYPTO_LIB +#include "wincrypt.h" +#endif + +#ifndef WIN32 +static int rng_fd = -1; +#elif defined(CONFIG_WIN32_USE_CRYPTO_LIB) +static HCRYPTPROV gCryptProv; +#endif + +#if (!defined(CONFIG_USE_DEV_URANDOM) && !defined(CONFIG_WIN32_USE_CRYPTO_LIB)) +static uint64_t rng_num; +#endif + +static int rng_ref_count; +const char * const unsupported_str = "Error: Feature not supported\n"; + +#ifndef CONFIG_SSL_SKELETON_MODE +/** + * Retrieve a file and put it into memory + * @return The size of the file, or -1 on failure. + */ +int get_file(const char *filename, uint8_t **buf) +{ + int total_bytes = 0; + int bytes_read = 0; + int filesize; + FILE *stream = fopen(filename, "rb"); + + if (stream == NULL) + { +#ifdef CONFIG_SSL_FULL_MODE + printf("file '%s' does not exist\n", filename); TTY_FLUSH(); +#endif + return -1; + } + + /* Win CE doesn't support stat() */ + fseek(stream, 0, SEEK_END); + filesize = ftell(stream); + *buf = (uint8_t *)malloc(filesize); + fseek(stream, 0, SEEK_SET); + + do + { + bytes_read = fread(*buf+total_bytes, 1, filesize-total_bytes, stream); + total_bytes += bytes_read; + } while (total_bytes < filesize && bytes_read > 0); + + fclose(stream); + return filesize; +} +#endif + +/** + * Initialise the Random Number Generator engine. + * - On Win32 use the platform SDK's crypto engine. + * - On Linux use /dev/urandom + * - If none of these work then use a custom RNG. + */ +EXP_FUNC void STDCALL RNG_initialize(const uint8_t *seed_buf, int size) +{ + if (rng_ref_count == 0) + { +#if !defined(WIN32) && defined(CONFIG_USE_DEV_URANDOM) + rng_fd = ax_open("/dev/urandom", O_RDONLY); +#elif defined(WIN32) && defined(CONFIG_WIN32_USE_CRYPTO_LIB) + if (!CryptAcquireContext(&gCryptProv, + NULL, NULL, PROV_RSA_FULL, 0)) + { + if (GetLastError() == NTE_BAD_KEYSET && + !CryptAcquireContext(&gCryptProv, + NULL, + NULL, + PROV_RSA_FULL, + CRYPT_NEWKEYSET)) + { + printf("CryptoLib: %x\n", unsupported_str, GetLastError()); + exit(1); + } + } +#else + /* help seed with the user's private key - this is a number that + should be hard to find, due to the fact that it relies on knowing + the private key */ + int i; + + for (i = 0; i < size/(int)sizeof(uint64_t); i++) + rng_num ^= *((uint64_t *)&seed_buf[i*sizeof(uint64_t)]); + + srand((long)&seed_buf); /* use the stack ptr as another rnd seed */ +#endif + } + + rng_ref_count++; +} + +/** + * Terminate the RNG engine. + */ +EXP_FUNC void STDCALL RNG_terminate(void) +{ + if (--rng_ref_count == 0) + { +#ifndef WIN32 + close(rng_fd); +#elif defined(CONFIG_WIN32_USE_CRYPTO_LIB) + CryptReleaseContext(gCryptProv, 0); +#endif + } +} + +/** + * Set a series of bytes with a random number. Individual bytes can be 0 + */ +EXP_FUNC void STDCALL get_random(int num_rand_bytes, uint8_t *rand_data) +{ +#if !defined(WIN32) && defined(CONFIG_USE_DEV_URANDOM) + /* use the Linux default */ + read(rng_fd, rand_data, num_rand_bytes); /* read from /dev/urandom */ +#elif defined(WIN32) && defined(CONFIG_WIN32_USE_CRYPTO_LIB) + /* use Microsoft Crypto Libraries */ + CryptGenRandom(gCryptProv, num_rand_bytes, rand_data); +#else /* nothing else to use, so use a custom RNG */ + /* The method we use when we've got nothing better. Use RC4, time + and a couple of random seeds to generate a random sequence */ + RC4_CTX rng_ctx; + struct timeval tv; + uint64_t big_num1, big_num2; + + gettimeofday(&tv, NULL); /* yes I know we shouldn't do this */ + + /* all numbers by themselves are pretty simple, but combined should + * be a challenge */ + big_num1 = (uint64_t)tv.tv_sec*(tv.tv_usec+1); + big_num2 = (uint64_t)rand()*big_num1; + big_num1 ^= rng_num; + + memcpy(rand_data, &big_num1, sizeof(uint64_t)); + if (num_rand_bytes > sizeof(uint64_t)) + memcpy(&rand_data[8], &big_num2, sizeof(uint64_t)); + + if (num_rand_bytes > 16) + { + /* clear rest of data */ + memset(&rand_data[16], 0, num_rand_bytes-16); + } + + RC4_setup(&rng_ctx, rand_data, 16); /* use as a key */ + RC4_crypt(&rng_ctx, rand_data, rand_data, num_rand_bytes); + + /* use last 8 bytes for next time */ + memcpy(&rng_num, &rand_data[num_rand_bytes-8], sizeof(uint64_t)); +#endif +} + +/** + * Set a series of bytes with a random number. Individual bytes are not zero. + */ +void get_random_NZ(int num_rand_bytes, uint8_t *rand_data) +{ + int i; + get_random(num_rand_bytes, rand_data); + + for (i = 0; i < num_rand_bytes; i++) + { + while (rand_data[i] == 0) /* can't be 0 */ + rand_data[i] = (uint8_t)(rand()); + } +} + +/** + * Some useful diagnostic routines + */ +#if defined(CONFIG_SSL_FULL_MODE) || defined(CONFIG_DEBUG) +int hex_finish; +int hex_index; + +static void print_hex_init(int finish) +{ + hex_finish = finish; + hex_index = 0; +} + +static void print_hex(uint8_t hex) +{ + static int column; + + if (hex_index == 0) + { + column = 0; + } + + printf("%02x ", hex); + if (++column == 8) + { + printf(": "); + } + else if (column >= 16) + { + printf("\n"); + column = 0; + } + + if (++hex_index >= hex_finish && column > 0) + { + printf("\n"); + } +} + +/** + * Spit out a blob of data for diagnostics. The data is is a nice column format + * for easy reading. + * + * @param format [in] The string (with possible embedded format characters) + * @param size [in] The number of numbers to print + * @param data [in] The start of data to use + * @param ... [in] Any additional arguments + */ +EXP_FUNC void STDCALL print_blob(const char *format, + const uint8_t *data, int size, ...) +{ + int i; + char tmp[80]; + va_list(ap); + + va_start(ap, size); + sprintf(tmp, "%s\n", format); + vprintf(tmp, ap); + print_hex_init(size); + for (i = 0; i < size; i++) + { + print_hex(data[i]); + } + + va_end(ap); + TTY_FLUSH(); +} +#elif defined(WIN32) +/* VC6.0 doesn't handle variadic macros */ +EXP_FUNC void STDCALL print_blob(const char *format, const unsigned char *data, + int size, ...) {} +#endif + +#if defined(CONFIG_SSL_HAS_PEM) || defined(CONFIG_HTTP_HAS_AUTHORIZATION) +/* base64 to binary lookup table */ +static const uint8_t map[128] = +{ + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, + 255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, + 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 255, 255, 255, 255, 255 +}; + +EXP_FUNC int STDCALL base64_decode(const char *in, int len, + uint8_t *out, int *outlen) +{ + int g, t, x, y, z; + uint8_t c; + int ret = -1; + + g = 3; + for (x = y = z = t = 0; x < len; x++) + { + if ((c = map[in[x]&0x7F]) == 0xff) + continue; + + if (c == 254) /* this is the end... */ + { + c = 0; + + if (--g < 0) + goto error; + } + else if (g != 3) /* only allow = at end */ + goto error; + + t = (t<<6) | c; + + if (++y == 4) + { + out[z++] = (uint8_t)((t>>16)&255); + + if (g > 1) + out[z++] = (uint8_t)((t>>8)&255); + + if (g > 2) + out[z++] = (uint8_t)(t&255); + + y = t = 0; + } + } + + if (y != 0) + goto error; + + if (outlen) + *outlen = z; + ret = 0; + +error: +#ifdef CONFIG_SSL_FULL_MODE + if (ret < 0) + printf("Error: Invalid base64\n"); TTY_FLUSH(); +#endif + TTY_FLUSH(); + return ret; + +} +#endif + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/hmac.c b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/hmac.c new file mode 100644 index 0000000..9199ff2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/hmac.c @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * HMAC implementation - This code was originally taken from RFC2104 + */ + +#include +#include "crypto.h" + +/** + * Perform HMAC-MD5 + */ +void hmac_md5(const uint8_t *msg, int length, const uint8_t *key, + int key_len, uint8_t *digest) +{ + MD5_CTX context; + uint8_t k_ipad[64]; + uint8_t k_opad[64]; + int i; + + memset(k_ipad, 0, sizeof k_ipad); + memset(k_opad, 0, sizeof k_opad); + memcpy(k_ipad, key, key_len); + memcpy(k_opad, key, key_len); + + for (i = 0; i < 64; i++) + { + k_ipad[i] ^= 0x36; + k_opad[i] ^= 0x5c; + } + + MD5_Init(&context); + MD5_Update(&context, k_ipad, 64); + MD5_Update(&context, msg, length); + MD5_Final(digest, &context); + MD5_Init(&context); + MD5_Update(&context, k_opad, 64); + MD5_Update(&context, digest, MD5_SIZE); + MD5_Final(digest, &context); +} + +/** + * Perform HMAC-SHA1 + */ +void hmac_sha1(const uint8_t *msg, int length, const uint8_t *key, + int key_len, uint8_t *digest) +{ + SHA1_CTX context; + uint8_t k_ipad[64]; + uint8_t k_opad[64]; + int i; + + memset(k_ipad, 0, sizeof k_ipad); + memset(k_opad, 0, sizeof k_opad); + memcpy(k_ipad, key, key_len); + memcpy(k_opad, key, key_len); + + for (i = 0; i < 64; i++) + { + k_ipad[i] ^= 0x36; + k_opad[i] ^= 0x5c; + } + + SHA1_Init(&context); + SHA1_Update(&context, k_ipad, 64); + SHA1_Update(&context, msg, length); + SHA1_Final(digest, &context); + SHA1_Init(&context); + SHA1_Update(&context, k_opad, 64); + SHA1_Update(&context, digest, SHA1_SIZE); + SHA1_Final(digest, &context); +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/md2.c b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/md2.c new file mode 100644 index 0000000..bfcbd24 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/md2.c @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * RFC 1115/1319 compliant MD2 implementation + * The MD2 algorithm was designed by Ron Rivest in 1989. + * + * http://www.ietf.org/rfc/rfc1115.txt + * http://www.ietf.org/rfc/rfc1319.txt + */ + +#include +#include + +#include "crypto.h" + +/** + * This code is only here to enable the verification of Verisign root + * certificates. So only enable it for verification mode. + */ +#ifdef CONFIG_SSL_CERT_VERIFICATION + +static const uint8_t PI_SUBST[256] = +{ + 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01, 0x3D, 0x36, + 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13, 0x62, 0xA7, 0x05, 0xF3, + 0xC0, 0xC7, 0x73, 0x8C, 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, + 0x82, 0xCA, 0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16, + 0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12, 0xBE, 0x4E, + 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49, 0xA0, 0xFB, 0xF5, 0x8E, + 0xBB, 0x2F, 0xEE, 0x7A, 0xA9, 0x68, 0x79, 0x91, 0x15, 0xB2, + 0x07, 0x3F, 0x94, 0xC2, 0x10, 0x89, 0x0B, 0x22, 0x5F, 0x21, + 0x80, 0x7F, 0x5D, 0x9A, 0x5A, 0x90, 0x32, 0x27, 0x35, 0x3E, + 0xCC, 0xE7, 0xBF, 0xF7, 0x97, 0x03, 0xFF, 0x19, 0x30, 0xB3, + 0x48, 0xA5, 0xB5, 0xD1, 0xD7, 0x5E, 0x92, 0x2A, 0xAC, 0x56, + 0xAA, 0xC6, 0x4F, 0xB8, 0x38, 0xD2, 0x96, 0xA4, 0x7D, 0xB6, + 0x76, 0xFC, 0x6B, 0xE2, 0x9C, 0x74, 0x04, 0xF1, 0x45, 0x9D, + 0x70, 0x59, 0x64, 0x71, 0x87, 0x20, 0x86, 0x5B, 0xCF, 0x65, + 0xE6, 0x2D, 0xA8, 0x02, 0x1B, 0x60, 0x25, 0xAD, 0xAE, 0xB0, + 0xB9, 0xF6, 0x1C, 0x46, 0x61, 0x69, 0x34, 0x40, 0x7E, 0x0F, + 0x55, 0x47, 0xA3, 0x23, 0xDD, 0x51, 0xAF, 0x3A, 0xC3, 0x5C, + 0xF9, 0xCE, 0xBA, 0xC5, 0xEA, 0x26, 0x2C, 0x53, 0x0D, 0x6E, + 0x85, 0x28, 0x84, 0x09, 0xD3, 0xDF, 0xCD, 0xF4, 0x41, 0x81, + 0x4D, 0x52, 0x6A, 0xDC, 0x37, 0xC8, 0x6C, 0xC1, 0xAB, 0xFA, + 0x24, 0xE1, 0x7B, 0x08, 0x0C, 0xBD, 0xB1, 0x4A, 0x78, 0x88, + 0x95, 0x8B, 0xE3, 0x63, 0xE8, 0x6D, 0xE9, 0xCB, 0xD5, 0xFE, + 0x3B, 0x00, 0x1D, 0x39, 0xF2, 0xEF, 0xB7, 0x0E, 0x66, 0x58, + 0xD0, 0xE4, 0xA6, 0x77, 0x72, 0xF8, 0xEB, 0x75, 0x4B, 0x0A, + 0x31, 0x44, 0x50, 0xB4, 0x8F, 0xED, 0x1F, 0x1A, 0xDB, 0x99, + 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14 +}; + +/* + * MD2 context setup + */ +EXP_FUNC void STDCALL MD2_Init(MD2_CTX *ctx) +{ + memset(ctx, 0, sizeof *ctx); +} + +static void md2_process(MD2_CTX *ctx) +{ + int i, j; + uint8_t t = 0; + + for (i = 0; i < 16; i++) + { + ctx->state[i + 16] = ctx->buffer[i]; + ctx->state[i + 32] = ctx->buffer[i] ^ ctx->state[i]; + } + + for (i = 0; i < 18; i++) + { + for (j = 0; j < 48; j++) + t = (ctx->state[j] ^= PI_SUBST[t]); + + t = (t + i) & 0xFF; + } + + t = ctx->cksum[15]; + + for (i = 0; i < 16; i++) + t = (ctx->cksum[i] ^= PI_SUBST[ctx->buffer[i] ^ t]); +} + +/* + * MD2 process buffer + */ +EXP_FUNC void STDCALL MD2_Update(MD2_CTX *ctx, const uint8_t *input, int ilen) +{ + int fill; + + while (ilen > 0) + { + if (ctx->left + ilen > 16) + fill = 16 - ctx->left; + else + fill = ilen; + + memcpy(ctx->buffer + ctx->left, input, fill); + + ctx->left += fill; + input += fill; + ilen -= fill; + + if (ctx->left == 16) + { + ctx->left = 0; + md2_process(ctx); + } + } +} + +/* + * MD2 final digest + */ +EXP_FUNC void STDCALL MD2_Final(uint8_t *output, MD2_CTX *ctx) +{ + int i; + uint8_t x; + + x = (uint8_t)(16 - ctx->left); + + for (i = ctx->left; i < 16; i++) + ctx->buffer[i] = x; + + md2_process(ctx); + + memcpy(ctx->buffer, ctx->cksum, 16); + md2_process(ctx); + + memcpy(output, ctx->state, 16); +} + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/md5.c b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/md5.c new file mode 100644 index 0000000..b4f86ca --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/md5.c @@ -0,0 +1,293 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * This file implements the MD5 algorithm as defined in RFC1321 + */ + +#include +#include "crypto.h" + +/* Constants for MD5Transform routine. + */ +#define S11 7 +#define S12 12 +#define S13 17 +#define S14 22 +#define S21 5 +#define S22 9 +#define S23 14 +#define S24 20 +#define S31 4 +#define S32 11 +#define S33 16 +#define S34 23 +#define S41 6 +#define S42 10 +#define S43 15 +#define S44 21 + +/* ----- static functions ----- */ +static void MD5Transform(uint32_t state[4], const uint8_t block[64]); +static void Encode(uint8_t *output, uint32_t *input, uint32_t len); +static void Decode(uint32_t *output, const uint8_t *input, uint32_t len); + +static const uint8_t PADDING[64] = +{ + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* F, G, H and I are basic MD5 functions. + */ +#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) +#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define I(x, y, z) ((y) ^ ((x) | (~z))) + +/* ROTATE_LEFT rotates x left n bits. */ +#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) + +/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. + Rotation is separate from addition to prevent recomputation. */ +#define FF(a, b, c, d, x, s, ac) { \ + (a) += F ((b), (c), (d)) + (x) + (uint32_t)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define GG(a, b, c, d, x, s, ac) { \ + (a) += G ((b), (c), (d)) + (x) + (uint32_t)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define HH(a, b, c, d, x, s, ac) { \ + (a) += H ((b), (c), (d)) + (x) + (uint32_t)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define II(a, b, c, d, x, s, ac) { \ + (a) += I ((b), (c), (d)) + (x) + (uint32_t)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } + +/** + * MD5 initialization - begins an MD5 operation, writing a new ctx. + */ +EXP_FUNC void STDCALL MD5_Init(MD5_CTX *ctx) +{ + ctx->count[0] = ctx->count[1] = 0; + + /* Load magic initialization constants. + */ + ctx->state[0] = 0x67452301; + ctx->state[1] = 0xefcdab89; + ctx->state[2] = 0x98badcfe; + ctx->state[3] = 0x10325476; +} + +/** + * Accepts an array of octets as the next portion of the message. + */ +EXP_FUNC void STDCALL MD5_Update(MD5_CTX *ctx, const uint8_t * msg, int len) +{ + uint32_t x; + int i, partLen; + + /* Compute number of bytes mod 64 */ + x = (uint32_t)((ctx->count[0] >> 3) & 0x3F); + + /* Update number of bits */ + if ((ctx->count[0] += ((uint32_t)len << 3)) < ((uint32_t)len << 3)) + ctx->count[1]++; + ctx->count[1] += ((uint32_t)len >> 29); + + partLen = 64 - x; + + /* Transform as many times as possible. */ + if (len >= partLen) + { + memcpy(&ctx->buffer[x], msg, partLen); + MD5Transform(ctx->state, ctx->buffer); + + for (i = partLen; i + 63 < len; i += 64) + MD5Transform(ctx->state, &msg[i]); + + x = 0; + } + else + i = 0; + + /* Buffer remaining input */ + memcpy(&ctx->buffer[x], &msg[i], len-i); +} + +/** + * Return the 128-bit message digest into the user's array + */ +EXP_FUNC void STDCALL MD5_Final(uint8_t *digest, MD5_CTX *ctx) +{ + uint8_t bits[8]; + uint32_t x, padLen; + + /* Save number of bits */ + Encode(bits, ctx->count, 8); + + /* Pad out to 56 mod 64. + */ + x = (uint32_t)((ctx->count[0] >> 3) & 0x3f); + padLen = (x < 56) ? (56 - x) : (120 - x); + MD5_Update(ctx, PADDING, padLen); + + /* Append length (before padding) */ + MD5_Update(ctx, bits, 8); + + /* Store state in digest */ + Encode(digest, ctx->state, MD5_SIZE); +} + +/** + * MD5 basic transformation. Transforms state based on block. + */ +static void MD5Transform(uint32_t state[4], const uint8_t block[64]) +{ + uint32_t a = state[0], b = state[1], c = state[2], + d = state[3], x[MD5_SIZE]; + + Decode(x, block, 64); + + /* Round 1 */ + FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ + FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ + FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ + FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ + FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ + FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ + FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ + FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ + FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ + FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ + FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ + FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ + FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ + FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ + FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ + FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ + + /* Round 2 */ + GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ + GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ + GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ + GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ + GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ + GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ + GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ + GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ + GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ + GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ + GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ + GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ + GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ + GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ + GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ + GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ + + /* Round 3 */ + HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ + HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ + HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ + HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ + HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ + HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ + HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ + HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ + HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ + HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ + HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ + HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ + HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ + HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ + HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ + HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ + + /* Round 4 */ + II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ + II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ + II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ + II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ + II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ + II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ + II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ + II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ + II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ + II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ + II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ + II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ + II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ + II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ + II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ + II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ + + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; +} + +/** + * Encodes input (uint32_t) into output (uint8_t). Assumes len is + * a multiple of 4. + */ +static void Encode(uint8_t *output, uint32_t *input, uint32_t len) +{ + uint32_t i, j; + + for (i = 0, j = 0; j < len; i++, j += 4) + { + output[j] = (uint8_t)(input[i] & 0xff); + output[j+1] = (uint8_t)((input[i] >> 8) & 0xff); + output[j+2] = (uint8_t)((input[i] >> 16) & 0xff); + output[j+3] = (uint8_t)((input[i] >> 24) & 0xff); + } +} + +/** + * Decodes input (uint8_t) into output (uint32_t). Assumes len is + * a multiple of 4. + */ +static void Decode(uint32_t *output, const uint8_t *input, uint32_t len) +{ + uint32_t i, j; + + for (i = 0, j = 0; j < len; i++, j += 4) + output[i] = ((uint32_t)input[j]) | (((uint32_t)input[j+1]) << 8) | + (((uint32_t)input[j+2]) << 16) | (((uint32_t)input[j+3]) << 24); +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/rc4.c b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/rc4.c new file mode 100644 index 0000000..57136b8 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/rc4.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * An implementation of the RC4/ARC4 algorithm. + * Originally written by Christophe Devine. + */ + +#include +#include "crypto.h" + +/** + * Get ready for an encrypt/decrypt operation + */ +void RC4_setup(RC4_CTX *ctx, const uint8_t *key, int length) +{ + int i, j = 0, k = 0, a; + uint8_t *m; + + ctx->x = 0; + ctx->y = 0; + m = ctx->m; + + for (i = 0; i < 256; i++) + m[i] = i; + + for (i = 0; i < 256; i++) + { + a = m[i]; + j = (uint8_t)(j + a + key[k]); + m[i] = m[j]; + m[j] = a; + + if (++k >= length) + k = 0; + } +} + +/** + * Perform the encrypt/decrypt operation (can use it for either since + * this is a stream cipher). + */ +void RC4_crypt(RC4_CTX *ctx, const uint8_t *msg, uint8_t *out, int length) +{ + int i; + uint8_t *m, x, y, a, b; + out = (uint8_t *)msg; + + x = ctx->x; + y = ctx->y; + m = ctx->m; + + for (i = 0; i < length; i++) + { + a = m[++x]; + y += a; + m[x] = b = m[y]; + m[y] = a; + out[i] ^= m[(uint8_t)(a + b)]; + } + + ctx->x = x; + ctx->y = y; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/rsa.c b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/rsa.c new file mode 100644 index 0000000..31627bb --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/rsa.c @@ -0,0 +1,268 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Implements the RSA public encryption algorithm. Uses the bigint library to + * perform its calculations. + */ + +#include +#include +#include +#include +#include "crypto.h" + +void RSA_priv_key_new(RSA_CTX **ctx, + const uint8_t *modulus, int mod_len, + const uint8_t *pub_exp, int pub_len, + const uint8_t *priv_exp, int priv_len +#if CONFIG_BIGINT_CRT + , const uint8_t *p, int p_len, + const uint8_t *q, int q_len, + const uint8_t *dP, int dP_len, + const uint8_t *dQ, int dQ_len, + const uint8_t *qInv, int qInv_len +#endif + ) +{ + RSA_CTX *rsa_ctx; + BI_CTX *bi_ctx; + RSA_pub_key_new(ctx, modulus, mod_len, pub_exp, pub_len); + rsa_ctx = *ctx; + bi_ctx = rsa_ctx->bi_ctx; + rsa_ctx->d = bi_import(bi_ctx, priv_exp, priv_len); + bi_permanent(rsa_ctx->d); + +#ifdef CONFIG_BIGINT_CRT + rsa_ctx->p = bi_import(bi_ctx, p, p_len); + rsa_ctx->q = bi_import(bi_ctx, q, q_len); + rsa_ctx->dP = bi_import(bi_ctx, dP, dP_len); + rsa_ctx->dQ = bi_import(bi_ctx, dQ, dQ_len); + rsa_ctx->qInv = bi_import(bi_ctx, qInv, qInv_len); + bi_permanent(rsa_ctx->dP); + bi_permanent(rsa_ctx->dQ); + bi_permanent(rsa_ctx->qInv); + bi_set_mod(bi_ctx, rsa_ctx->p, BIGINT_P_OFFSET); + bi_set_mod(bi_ctx, rsa_ctx->q, BIGINT_Q_OFFSET); +#endif +} + +void RSA_pub_key_new(RSA_CTX **ctx, + const uint8_t *modulus, int mod_len, + const uint8_t *pub_exp, int pub_len) +{ + RSA_CTX *rsa_ctx; + BI_CTX *bi_ctx; + + if (*ctx) /* if we load multiple certs, dump the old one */ + RSA_free(*ctx); + + bi_ctx = bi_initialize(); + *ctx = (RSA_CTX *)calloc(1, sizeof(RSA_CTX)); + rsa_ctx = *ctx; + rsa_ctx->bi_ctx = bi_ctx; + rsa_ctx->num_octets = (mod_len & 0xFFF0); + rsa_ctx->m = bi_import(bi_ctx, modulus, mod_len); + bi_set_mod(bi_ctx, rsa_ctx->m, BIGINT_M_OFFSET); + rsa_ctx->e = bi_import(bi_ctx, pub_exp, pub_len); + bi_permanent(rsa_ctx->e); +} + +/** + * Free up any RSA context resources. + */ +void RSA_free(RSA_CTX *rsa_ctx) +{ + BI_CTX *bi_ctx; + if (rsa_ctx == NULL) /* deal with ptrs that are null */ + return; + + bi_ctx = rsa_ctx->bi_ctx; + + bi_depermanent(rsa_ctx->e); + bi_free(bi_ctx, rsa_ctx->e); + bi_free_mod(rsa_ctx->bi_ctx, BIGINT_M_OFFSET); + + if (rsa_ctx->d) + { + bi_depermanent(rsa_ctx->d); + bi_free(bi_ctx, rsa_ctx->d); +#ifdef CONFIG_BIGINT_CRT + bi_depermanent(rsa_ctx->dP); + bi_depermanent(rsa_ctx->dQ); + bi_depermanent(rsa_ctx->qInv); + bi_free(bi_ctx, rsa_ctx->dP); + bi_free(bi_ctx, rsa_ctx->dQ); + bi_free(bi_ctx, rsa_ctx->qInv); + bi_free_mod(rsa_ctx->bi_ctx, BIGINT_P_OFFSET); + bi_free_mod(rsa_ctx->bi_ctx, BIGINT_Q_OFFSET); +#endif + } + + bi_terminate(bi_ctx); + free(rsa_ctx); +} + +/** + * @brief Use PKCS1.5 for decryption/verification. + * @param ctx [in] The context + * @param in_data [in] The data to encrypt (must be < modulus size-11) + * @param out_data [out] The encrypted data. + * @param is_decryption [in] Decryption or verify operation. + * @return The number of bytes that were originally encrypted. -1 on error. + * @see http://www.rsasecurity.com/rsalabs/node.asp?id=2125 + */ +int RSA_decrypt(const RSA_CTX *ctx, const uint8_t *in_data, + uint8_t *out_data, int is_decryption) +{ + const int byte_size = ctx->num_octets; + int i, size; + bigint *decrypted_bi, *dat_bi; + uint8_t *block = (uint8_t *)alloca(byte_size); + + memset(out_data, 0, byte_size); /* initialise */ + + /* decrypt */ + dat_bi = bi_import(ctx->bi_ctx, in_data, byte_size); +#ifdef CONFIG_SSL_CERT_VERIFICATION + decrypted_bi = is_decryption ? /* decrypt or verify? */ + RSA_private(ctx, dat_bi) : RSA_public(ctx, dat_bi); +#else /* always a decryption */ + decrypted_bi = RSA_private(ctx, dat_bi); +#endif + + /* convert to a normal block */ + bi_export(ctx->bi_ctx, decrypted_bi, block, byte_size); + + i = 10; /* start at the first possible non-padded byte */ + +#ifdef CONFIG_SSL_CERT_VERIFICATION + if (is_decryption == 0) /* PKCS1.5 signing pads with "0xff"s */ + { + while (block[i++] == 0xff && i < byte_size); + + if (block[i-2] != 0xff) + i = byte_size; /*ensure size is 0 */ + } + else /* PKCS1.5 encryption padding is random */ +#endif + { + while (block[i++] && i < byte_size); + } + size = byte_size - i; + + /* get only the bit we want */ + if (size > 0) + memcpy(out_data, &block[i], size); + + return size ? size : -1; +} + +/** + * Performs m = c^d mod n + */ +bigint *RSA_private(const RSA_CTX *c, bigint *bi_msg) +{ +#ifdef CONFIG_BIGINT_CRT + return bi_crt(c->bi_ctx, bi_msg, c->dP, c->dQ, c->p, c->q, c->qInv); +#else + BI_CTX *ctx = c->bi_ctx; + ctx->mod_offset = BIGINT_M_OFFSET; + return bi_mod_power(ctx, bi_msg, c->d); +#endif +} + +#ifdef CONFIG_SSL_FULL_MODE +/** + * Used for diagnostics. + */ +void RSA_print(const RSA_CTX *rsa_ctx) +{ + if (rsa_ctx == NULL) + return; + + printf("----------------- RSA DEBUG ----------------\n"); + printf("Size:\t%d\n", rsa_ctx->num_octets); + bi_print("Modulus", rsa_ctx->m); + bi_print("Public Key", rsa_ctx->e); + bi_print("Private Key", rsa_ctx->d); +} +#endif + +#if defined(CONFIG_SSL_CERT_VERIFICATION) || defined(CONFIG_SSL_GENERATE_X509_CERT) +/** + * Performs c = m^e mod n + */ +bigint *RSA_public(const RSA_CTX * c, bigint *bi_msg) +{ + c->bi_ctx->mod_offset = BIGINT_M_OFFSET; + return bi_mod_power(c->bi_ctx, bi_msg, c->e); +} + +/** + * Use PKCS1.5 for encryption/signing. + * see http://www.rsasecurity.com/rsalabs/node.asp?id=2125 + */ +int RSA_encrypt(const RSA_CTX *ctx, const uint8_t *in_data, uint16_t in_len, + uint8_t *out_data, int is_signing) +{ + int byte_size = ctx->num_octets; + int num_pads_needed = byte_size-in_len-3; + bigint *dat_bi, *encrypt_bi; + + /* note: in_len+11 must be > byte_size */ + out_data[0] = 0; /* ensure encryption block is < modulus */ + + if (is_signing) + { + out_data[1] = 1; /* PKCS1.5 signing pads with "0xff"'s */ + memset(&out_data[2], 0xff, num_pads_needed); + } + else /* randomize the encryption padding with non-zero bytes */ + { + out_data[1] = 2; + get_random_NZ(num_pads_needed, &out_data[2]); + } + + out_data[2+num_pads_needed] = 0; + memcpy(&out_data[3+num_pads_needed], in_data, in_len); + + /* now encrypt it */ + dat_bi = bi_import(ctx->bi_ctx, out_data, byte_size); + encrypt_bi = is_signing ? RSA_private(ctx, dat_bi) : + RSA_public(ctx, dat_bi); + bi_export(ctx->bi_ctx, encrypt_bi, out_data, byte_size); + + /* save a few bytes of memory */ + bi_clear_cache(ctx->bi_ctx); + return byte_size; +} + +#endif /* CONFIG_SSL_CERT_VERIFICATION */ diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/sha1.c b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/sha1.c new file mode 100644 index 0000000..be19100 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/crypto/sha1.c @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * SHA1 implementation - as defined in FIPS PUB 180-1 published April 17, 1995. + * This code was originally taken from RFC3174 + */ + +#include +#include "crypto.h" + +/* + * Define the SHA1 circular left shift macro + */ +#define SHA1CircularShift(bits,word) \ + (((word) << (bits)) | ((word) >> (32-(bits)))) + +/* ----- static functions ----- */ +static void SHA1PadMessage(SHA1_CTX *ctx); +static void SHA1ProcessMessageBlock(SHA1_CTX *ctx); + +/** + * Initialize the SHA1 context + */ +void SHA1_Init(SHA1_CTX *ctx) +{ + ctx->Length_Low = 0; + ctx->Length_High = 0; + ctx->Message_Block_Index = 0; + ctx->Intermediate_Hash[0] = 0x67452301; + ctx->Intermediate_Hash[1] = 0xEFCDAB89; + ctx->Intermediate_Hash[2] = 0x98BADCFE; + ctx->Intermediate_Hash[3] = 0x10325476; + ctx->Intermediate_Hash[4] = 0xC3D2E1F0; +} + +/** + * Accepts an array of octets as the next portion of the message. + */ +void SHA1_Update(SHA1_CTX *ctx, const uint8_t *msg, int len) +{ + while (len--) + { + ctx->Message_Block[ctx->Message_Block_Index++] = (*msg & 0xFF); + ctx->Length_Low += 8; + + if (ctx->Length_Low == 0) + ctx->Length_High++; + + if (ctx->Message_Block_Index == 64) + SHA1ProcessMessageBlock(ctx); + + msg++; + } +} + +/** + * Return the 160-bit message digest into the user's array + */ +void SHA1_Final(uint8_t *digest, SHA1_CTX *ctx) +{ + int i; + + SHA1PadMessage(ctx); + memset(ctx->Message_Block, 0, 64); + ctx->Length_Low = 0; /* and clear length */ + ctx->Length_High = 0; + + for (i = 0; i < SHA1_SIZE; i++) + { + digest[i] = ctx->Intermediate_Hash[i>>2] >> 8 * ( 3 - ( i & 0x03 ) ); + } +} + +/** + * Process the next 512 bits of the message stored in the array. + */ +static void SHA1ProcessMessageBlock(SHA1_CTX *ctx) +{ + const uint32_t K[] = { /* Constants defined in SHA-1 */ + 0x5A827999, + 0x6ED9EBA1, + 0x8F1BBCDC, + 0xCA62C1D6 + }; + int t; /* Loop counter */ + uint32_t temp; /* Temporary word value */ + uint32_t W[80]; /* Word sequence */ + uint32_t A, B, C, D, E; /* Word buffers */ + + /* + * Initialize the first 16 words in the array W + */ + for (t = 0; t < 16; t++) + { + W[t] = ctx->Message_Block[t * 4] << 24; + W[t] |= ctx->Message_Block[t * 4 + 1] << 16; + W[t] |= ctx->Message_Block[t * 4 + 2] << 8; + W[t] |= ctx->Message_Block[t * 4 + 3]; + } + + for (t = 16; t < 80; t++) + { + W[t] = SHA1CircularShift(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]); + } + + A = ctx->Intermediate_Hash[0]; + B = ctx->Intermediate_Hash[1]; + C = ctx->Intermediate_Hash[2]; + D = ctx->Intermediate_Hash[3]; + E = ctx->Intermediate_Hash[4]; + + for (t = 0; t < 20; t++) + { + temp = SHA1CircularShift(5,A) + + ((B & C) | ((~B) & D)) + E + W[t] + K[0]; + E = D; + D = C; + C = SHA1CircularShift(30,B); + + B = A; + A = temp; + } + + for (t = 20; t < 40; t++) + { + temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[1]; + E = D; + D = C; + C = SHA1CircularShift(30,B); + B = A; + A = temp; + } + + for (t = 40; t < 60; t++) + { + temp = SHA1CircularShift(5,A) + + ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2]; + E = D; + D = C; + C = SHA1CircularShift(30,B); + B = A; + A = temp; + } + + for (t = 60; t < 80; t++) + { + temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[3]; + E = D; + D = C; + C = SHA1CircularShift(30,B); + B = A; + A = temp; + } + + ctx->Intermediate_Hash[0] += A; + ctx->Intermediate_Hash[1] += B; + ctx->Intermediate_Hash[2] += C; + ctx->Intermediate_Hash[3] += D; + ctx->Intermediate_Hash[4] += E; + ctx->Message_Block_Index = 0; +} + +/* + * According to the standard, the message must be padded to an even + * 512 bits. The first padding bit must be a '1'. The last 64 + * bits represent the length of the original message. All bits in + * between should be 0. This function will pad the message + * according to those rules by filling the Message_Block array + * accordingly. It will also call the ProcessMessageBlock function + * provided appropriately. When it returns, it can be assumed that + * the message digest has been computed. + * + * @param ctx [in, out] The SHA1 context + */ +static void SHA1PadMessage(SHA1_CTX *ctx) +{ + /* + * Check to see if the current message block is too small to hold + * the initial padding bits and length. If so, we will pad the + * block, process it, and then continue padding into a second + * block. + */ + if (ctx->Message_Block_Index > 55) + { + ctx->Message_Block[ctx->Message_Block_Index++] = 0x80; + while(ctx->Message_Block_Index < 64) + { + ctx->Message_Block[ctx->Message_Block_Index++] = 0; + } + + SHA1ProcessMessageBlock(ctx); + + while (ctx->Message_Block_Index < 56) + { + ctx->Message_Block[ctx->Message_Block_Index++] = 0; + } + } + else + { + ctx->Message_Block[ctx->Message_Block_Index++] = 0x80; + while(ctx->Message_Block_Index < 56) + { + + ctx->Message_Block[ctx->Message_Block_Index++] = 0; + } + } + + /* + * Store the message length as the last 8 octets + */ + ctx->Message_Block[56] = ctx->Length_High >> 24; + ctx->Message_Block[57] = ctx->Length_High >> 16; + ctx->Message_Block[58] = ctx->Length_High >> 8; + ctx->Message_Block[59] = ctx->Length_High; + ctx->Message_Block[60] = ctx->Length_Low >> 24; + ctx->Message_Block[61] = ctx->Length_Low >> 16; + ctx->Message_Block[62] = ctx->Length_Low >> 8; + ctx->Message_Block[63] = ctx->Length_Low; + SHA1ProcessMessageBlock(ctx); +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/docsrc/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/docsrc/Makefile new file mode 100644 index 0000000..2826686 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/docsrc/Makefile @@ -0,0 +1,39 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +include ../config/makefile.conf + +all: + +doco: + doxygen ./axTLS.dox + +clean:: + @-rm -fr html *~ diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/docsrc/axTLS.dox b/feeds/luci/libs/luci-lib-nixio/axTLS/docsrc/axTLS.dox new file mode 100644 index 0000000..d9959b2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/docsrc/axTLS.dox @@ -0,0 +1,1237 @@ +# Doxyfile 1.4.5 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = axTLS + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, +# Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = NO + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is YES. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../bindings/csharp/axTLS.cs ../bindings/java/SSL.java ../bindings/java/SSLUtil.java ../bindings/java/SSLCTX.java ../bindings/java/SSLServer.java ../bindings/java/SSLClient.java ../bindings/java/SSLReadHolder.java ../ssl/ssl.h ../crypto/bigint.c ../crypto/bigint.h + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = images + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = doco_footer.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = YES + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = YES + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = CONFIG_SSL_CERT_VERIFICATION CONFIG_SSL_ENABLE_CLIENT CONFIG_SSL_GENERATE_X509_CERT CONFIG_BIGINT_MONTGOMERY CONFIG_BIGINT_BARRETT CONFIG_BIGINT_CRT EXP_FUNC="" STDCALL="" + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = NO + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = NO + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = NO + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = NO + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = NO + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = NO + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = NO + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that a graph may be further truncated if the graph's +# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH +# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), +# the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/docsrc/doco_footer.html b/feeds/luci/libs/luci-lib-nixio/axTLS/docsrc/doco_footer.html new file mode 100644 index 0000000..20c4e70 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/docsrc/doco_footer.html @@ -0,0 +1,3 @@ +

+

+Copyright 2007 Cameron Rich diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/docsrc/images/axolotl.jpg b/feeds/luci/libs/luci-lib-nixio/axTLS/docsrc/images/axolotl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7352bbae836739e469c837a7fdb8114f786b2130 GIT binary patch literal 3041 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 literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/Config.in b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/Config.in new file mode 100644 index 0000000..513d57a --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/Config.in @@ -0,0 +1,163 @@ +# +# For a description of the syntax of this configuration file, +# see scripts/config/Kconfig-language.txt +# + +menu "Axhttpd Configuration" +depends on CONFIG_AXHTTPD + +config CONFIG_HTTP_STATIC_BUILD + bool "Static Build" + default n + help + Select y if you want axhttpd to be a static build (i.e. don't use the + axtls shared library or dll). + +config CONFIG_HTTP_PORT + int "HTTP port" + default 80 + help + The port number of the normal HTTP server. + + You must be a root user in order to use the default port. + +config CONFIG_HTTP_HTTPS_PORT + int "HTTPS port" + default 443 + help + The port number of the HTTPS server. + + You must be a root user in order to use the default port. + +config CONFIG_HTTP_SESSION_CACHE_SIZE + int "SSL session cache size" + default 5 + help + The size of the SSL session cache. + + This is not actually related to the number of concurrent users, but + for optimum performance they should be the same (with a penalty + in memory usage). + +config CONFIG_HTTP_WEBROOT + string "Web root location" + default "../www" if !CONFIG_PLATFORM_WIN32 + default "..\\www" if CONFIG_PLATFORM_WIN32 + help + The location of the web root in relation to axhttpd. This is + the directory where index.html lives. + +config CONFIG_HTTP_TIMEOUT + int "Timeout" + default 300 + help + Set the timeout of a connection in seconds. + +menu "CGI" +depends on !CONFIG_PLATFORM_WIN32 + +config CONFIG_HTTP_HAS_CGI + bool "Enable CGI" + default y + depends on !CONFIG_PLATFORM_WIN32 + help + Enable the CGI capability. Not available on Win32 platforms. + +config CONFIG_HTTP_CGI_EXTENSIONS + string "CGI File Extension(s)" + default ".lua,.lp" + depends on CONFIG_HTTP_HAS_CGI + help + Tell axhhtpd what file extension(s) are used for CGI. + + This is a comma separated list - e.g. ".php,.pl" etc + +config CONFIG_HTTP_ENABLE_LUA + bool "Enable Lua" + default y + depends on CONFIG_HTTP_HAS_CGI + help + Lua is a powerful, fast, light-weight, embeddable scripting language. + + See http://www.lua.org for details. + +config CONFIG_HTTP_LUA_PREFIX + string "Lua's Installation Prefix" + default "/usr/local" + depends on CONFIG_HTTP_ENABLE_LUA + + help + The location of Lua's installation prefix. This is also necessary for + Lua's cgi launcher application. + +config CONFIG_HTTP_LUA_CGI_LAUNCHER + string "CGI launcher location" + default "/bin/cgi.exe" if CONFIG_PLATFORM_CYGWIN + default "/bin/cgi" if !CONFIG_PLATFORM_CYGWIN + depends on CONFIG_HTTP_ENABLE_LUA + help + The location of LUA's CGI launcher application (after + the CONFIG_HTTP_LUA_PREFIX) + +config CONFIG_HTTP_BUILD_LUA + bool "Build Lua" + default n + depends on CONFIG_HTTP_ENABLE_LUA + help + Build Lua and install in /usr/local/bin + +endmenu + +config CONFIG_HTTP_DIRECTORIES + bool "Enable Directory Listing" + default y + help + Enable directory listing. + +config CONFIG_HTTP_HAS_AUTHORIZATION + bool "Enable authorization" + default y + help + Pages/directories can have passwords associated with them. + +config CONFIG_HTTP_HAS_IPV6 + bool "Enable IPv6" + default n + depends on !CONFIG_PLATFORM_WIN32 + help + Use IPv6 instead of IPv4. + + Does not work under Win32 + +config CONFIG_HTTP_ENABLE_DIFFERENT_USER + bool "Enable different user" + default n + depends on !CONFIG_PLATFORM_WIN32 + help + Allow the web server to be run as a different user + +config CONFIG_HTTP_USER + string "As User" + default "nobody" + depends on CONFIG_HTTP_ENABLE_DIFFERENT_USER + help + The user name that will be used to run axhttpd. + +config CONFIG_HTTP_VERBOSE + bool "Verbose Mode" + default y if CONFIG_SSL_FULL_MODE + default n if !CONFIG_SSL_FULL_MODE + help + Enable extra statements used when using axhttpd. + +config CONFIG_HTTP_IS_DAEMON + bool "Run as a daemon" + default n + depends on !CONFIG_PLATFORM_WIN32 + help + Run axhttpd as a background process. + + Does not work under Win32 + +endmenu + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/Makefile new file mode 100644 index 0000000..b8c18d2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/Makefile @@ -0,0 +1,127 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +all : web_server lua + +AXTLS_HOME=.. + +include $(AXTLS_HOME)/config/.config +include $(AXTLS_HOME)/config/makefile.conf + +ifndef CONFIG_PLATFORM_WIN32 + +ifdef CONFIG_PLATFORM_CYGWIN +TARGET=$(AXTLS_HOME)/$(STAGE)/axhttpd.exe +TARGET2=$(AXTLS_HOME)/$(STAGE)/htpasswd.exe +else +TARGET=$(AXTLS_HOME)/$(STAGE)/axhttpd +TARGET2=$(AXTLS_HOME)/$(STAGE)/htpasswd +endif + +ifdef CONFIG_HTTP_STATIC_BUILD +LIBS=$(AXTLS_HOME)/$(STAGE)/libaxtls.a +else +LIBS=-L$(AXTLS_HOME)/$(STAGE) -laxtls +endif + +ifdef CONFIG_HTTP_BUILD_LUA +lua: kepler-1.1 + +kepler-1.1: + @tar xvfz kepler-1.1-snapshot-20070521-1825.tar.gz + @cat kepler.patch | patch -p0 + cd kepler-1.1; ./configure --prefix=$(CONFIG_HTTP_LUA_PREFIX) --launcher=cgi --lua-suffix= ; make install +else +lua: +endif + +else # win32 build +lua: + +TARGET=$(AXTLS_HOME)/$(STAGE)/axhttpd.exe +TARGET2=$(AXTLS_HOME)/$(STAGE)/htpasswd.exe + +ifdef CONFIG_HTTP_STATIC_BUILD +LIBS=$(AXTLS_HOME)/$(STAGE)/axtls.static.lib $(AXTLS_HOME)\\config\\axtls.res +else +LIBS=$(AXTLS_HOME)/$(STAGE)/axtls.lib $(AXTLS_HOME)\\config\\axtls.res +endif +endif + +ifndef CONFIG_AXHTTPD +web_server: +else + +web_server :: $(TARGET) + +ifdef CONFIG_HTTP_HAS_AUTHORIZATION +web_server :: $(TARGET2) +endif + +OBJ= \ + axhttpd.o \ + proc.o \ + tdate_parse.o + +include $(AXTLS_HOME)/config/makefile.post + +ifndef CONFIG_PLATFORM_WIN32 + +$(TARGET): $(OBJ) $(AXTLS_HOME)/$(STAGE)/libaxtls.a + $(LD) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) +ifdef CONFIG_STRIP_UNWANTED_SECTIONS + $(STRIP) --remove-section=.comment $(TARGET) +endif + +$(TARGET2): htpasswd.o $(AXTLS_HOME)/$(STAGE)/libaxtls.a + $(LD) $(LDFLAGS) -o $@ htpasswd.o $(LIBS) + +else # Win32 + +OBJ:=$(OBJ:.o=.obj) +%.obj : %.c + $(CC) $(CFLAGS) $< + +htpasswd.obj : htpasswd.c + $(CC) $(CFLAGS) $? + +$(TARGET): $(OBJ) + $(LD) $(LDFLAGS) /out:$@ $(LIBS) $? + +$(TARGET2): htpasswd.obj + $(LD) $(LDFLAGS) /out:$@ $(LIBS) $? +endif + +endif # CONFIG_AXHTTPD + +clean:: + -@rm -f $(TARGET)* + -@rm -fr kepler-1.1 + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/axhttp.h b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/axhttp.h new file mode 100644 index 0000000..73c299f --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/axhttp.h @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ssl.h" + +#define BACKLOG 15 +#define VERSION "1.0.0" +#ifdef CONFIG_HTTP_HAS_IPV6 +#define HAVE_IPV6 +#endif + +#define MAXPOSTDATASIZE 30000 +#define MAXREQUESTLENGTH 256 +#define BLOCKSIZE 4096 + +#define INITIAL_CONNECTION_SLOTS 10 +#define CONFIG_HTTP_DEFAULT_SSL_OPTIONS SSL_DISPLAY_CERTS + +#define STATE_WANT_TO_READ_HEAD 1 +#define STATE_WANT_TO_SEND_HEAD 2 +#define STATE_WANT_TO_READ_FILE 3 +#define STATE_WANT_TO_SEND_FILE 4 +#define STATE_DOING_DIR 5 + +enum +{ + TYPE_GET, + TYPE_HEAD, + TYPE_POST +}; + +struct connstruct +{ + struct connstruct *next; + int state; + int reqtype; + int networkdesc; + int filedesc; + SSL *ssl; + +#if defined(CONFIG_HTTP_DIRECTORIES) +#ifdef WIN32 + HANDLE dirp; + WIN32_FIND_DATA file_data; +#else + DIR *dirp; +#endif +#endif + + time_t timeout; + char actualfile[MAXREQUESTLENGTH]; + char filereq[MAXREQUESTLENGTH]; + char dirname[MAXREQUESTLENGTH]; + char server_name[MAXREQUESTLENGTH]; + int numbytes; + char databuf[BLOCKSIZE]; + uint8_t is_ssl; + uint8_t close_when_done; + time_t if_modified_since; + +#if defined(CONFIG_HTTP_HAS_CGI) + uint8_t is_cgi; +#ifdef CONFIG_HTTP_ENABLE_LUA + uint8_t is_lua; +#endif + int content_length; + char remote_addr[MAXREQUESTLENGTH]; + char uri_request[MAXREQUESTLENGTH]; + char uri_path_info[MAXREQUESTLENGTH]; + char uri_query[MAXREQUESTLENGTH]; + char cookie[MAXREQUESTLENGTH]; +#endif +#if defined(CONFIG_HTTP_HAS_AUTHORIZATION) + char authorization[MAXREQUESTLENGTH]; +#endif + int post_read; + int post_state; + char *post_data; +}; + +struct serverstruct +{ + struct serverstruct *next; + int sd; + int is_ssl; + SSL_CTX *ssl_ctx; +}; + +#if defined(CONFIG_HTTP_HAS_CGI) +struct cgiextstruct +{ + struct cgiextstruct *next; + char *ext; +}; +#endif + +/* global prototypes */ +extern struct serverstruct *servers; +extern struct connstruct *usedconns; +extern struct connstruct *freeconns; +extern const char * const server_version; + +#if defined(CONFIG_HTTP_HAS_CGI) +extern struct cgiextstruct *cgiexts; +#endif + +/* conn.c prototypes */ +void removeconnection(struct connstruct *cn); + +/* proc.c prototypes */ +void procdodir(struct connstruct *cn); +void procreadhead(struct connstruct *cn); +void procsendhead(struct connstruct *cn); +void procreadfile(struct connstruct *cn); +void procsendfile(struct connstruct *cn); +#if defined(CONFIG_HTTP_HAS_CGI) +void read_post_data(struct connstruct *cn); +#endif + +/* misc.c prototypes */ +char *my_strncpy(char *dest, const char *src, size_t n); +int isdir(const char *name); + +/* tdate prototypes */ +void tdate_init(void); +time_t tdate_parse(const char* str); + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/axhttpd.c b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/axhttpd.c new file mode 100644 index 0000000..35d36f6 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/axhttpd.c @@ -0,0 +1,604 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include "axhttp.h" + +struct serverstruct *servers; +struct connstruct *usedconns; +struct connstruct *freeconns; +const char * const server_version = "axhttpd/"AXTLS_VERSION; + +static void addtoservers(int sd); +static int openlistener(int port); +static void handlenewconnection(int listenfd, int is_ssl); +static void addconnection(int sd, char *ip, int is_ssl); +static void ax_chdir(void); + +#if defined(CONFIG_HTTP_HAS_CGI) +struct cgiextstruct *cgiexts; +static void addcgiext(const char *tp); + +#if !defined(WIN32) +static void reaper(int sigtype) +{ + wait3(NULL, WNOHANG, NULL); +} +#endif +#endif + +#ifdef CONFIG_HTTP_VERBOSE /* should really be in debug mode or something */ +/* clean up memory for valgrind */ +static void sigint_cleanup(int sig) +{ + struct serverstruct *sp; + struct connstruct *tp; + + while (servers != NULL) + { + if (servers->is_ssl) + ssl_ctx_free(servers->ssl_ctx); + + sp = servers->next; + free(servers); + servers = sp; + } + + while (freeconns != NULL) + { + tp = freeconns->next; + free(freeconns); + freeconns = tp; + } + + while (usedconns != NULL) + { + tp = usedconns->next; + free(usedconns); + usedconns = tp; + } + +#if defined(CONFIG_HTTP_HAS_CGI) + while (cgiexts) + { + struct cgiextstruct *cp = cgiexts->next; + if (cp == NULL) /* last entry */ + free(cgiexts->ext); + free(cgiexts); + cgiexts = cp; + } +#endif + + exit(0); +} + +static void die(int sigtype) +{ + exit(0); +} +#endif + +int main(int argc, char *argv[]) +{ + fd_set rfds, wfds; + struct connstruct *tp, *to; + struct serverstruct *sp; + int rnum, wnum, active; + int i; + time_t currtime; + +#ifdef WIN32 + WORD wVersionRequested = MAKEWORD(2, 2); + WSADATA wsaData; + WSAStartup(wVersionRequested,&wsaData); +#else + signal(SIGPIPE, SIG_IGN); +#if defined(CONFIG_HTTP_HAS_CGI) + signal(SIGCHLD, reaper); +#endif +#ifdef CONFIG_HTTP_VERBOSE + signal(SIGQUIT, die); +#endif +#endif + +#ifdef CONFIG_HTTP_VERBOSE + signal(SIGTERM, die); + signal(SIGINT, sigint_cleanup); +#endif + tdate_init(); + + for (i = 0; i < INITIAL_CONNECTION_SLOTS; i++) + { + tp = freeconns; + freeconns = (struct connstruct *)calloc(1, sizeof(struct connstruct)); + freeconns->next = tp; + } + + if ((active = openlistener(CONFIG_HTTP_PORT)) == -1) + { +#ifdef CONFIG_HTTP_VERBOSE + fprintf(stderr, "ERR: Couldn't bind to port %d\n", + CONFIG_HTTP_PORT); +#endif + exit(1); + } + + addtoservers(active); + + if ((active = openlistener(CONFIG_HTTP_HTTPS_PORT)) == -1) + { +#ifdef CONFIG_HTTP_VERBOSE + fprintf(stderr, "ERR: Couldn't bind to port %d\n", + CONFIG_HTTP_HTTPS_PORT); +#endif + exit(1); + } + + addtoservers(active); + servers->ssl_ctx = ssl_ctx_new(CONFIG_HTTP_DEFAULT_SSL_OPTIONS, + CONFIG_HTTP_SESSION_CACHE_SIZE); + servers->is_ssl = 1; + +#if defined(CONFIG_HTTP_HAS_CGI) + addcgiext(CONFIG_HTTP_CGI_EXTENSIONS); +#endif + +#if defined(CONFIG_HTTP_VERBOSE) +#if defined(CONFIG_HTTP_HAS_CGI) + printf("addcgiext %s\n", CONFIG_HTTP_CGI_EXTENSIONS); +#endif + printf("%s: listening on ports %d (http) and %d (https)\n", + server_version, CONFIG_HTTP_PORT, CONFIG_HTTP_HTTPS_PORT); + TTY_FLUSH(); +#endif + + ax_chdir(); + +#ifdef CONFIG_HTTP_ENABLE_DIFFERENT_USER + { + struct passwd *pd = getpwnam(CONFIG_HTTP_USER); + + if (pd != NULL) + { + int res = setuid(pd->pw_uid); + res |= setgid(pd->pw_gid); + +#if defined(CONFIG_HTTP_VERBOSE) + if (res == 0) + { + printf("change to '%s' successful\n", CONFIG_HTTP_USER); + TTY_FLUSH(); + } +#endif + } + + } +#endif + + +#ifndef WIN32 +#ifdef CONFIG_HTTP_IS_DAEMON + if (fork() > 0) /* parent will die */ + exit(0); + + setsid(); +#endif +#endif + + /* main loop */ + while (1) + { + FD_ZERO(&rfds); + FD_ZERO(&wfds); + rnum = wnum = -1; + sp = servers; + + while (sp != NULL) /* read each server port */ + { + FD_SET(sp->sd, &rfds); + + if (sp->sd > rnum) + rnum = sp->sd; + sp = sp->next; + } + + /* Add the established sockets */ + tp = usedconns; + currtime = time(NULL); + + while (tp != NULL) + { + if (currtime > tp->timeout) /* timed out? Kill it. */ + { + to = tp; + tp = tp->next; + removeconnection(to); + continue; + } + + if (tp->state == STATE_WANT_TO_READ_HEAD) + { + FD_SET(tp->networkdesc, &rfds); + if (tp->networkdesc > rnum) + rnum = tp->networkdesc; + } + + if (tp->state == STATE_WANT_TO_SEND_HEAD) + { + FD_SET(tp->networkdesc, &wfds); + if (tp->networkdesc > wnum) + wnum = tp->networkdesc; + } + + if (tp->state == STATE_WANT_TO_READ_FILE) + { + FD_SET(tp->filedesc, &rfds); + if (tp->filedesc > rnum) + rnum = tp->filedesc; + } + + if (tp->state == STATE_WANT_TO_SEND_FILE) + { + FD_SET(tp->networkdesc, &wfds); + if (tp->networkdesc > wnum) + wnum = tp->networkdesc; + } + +#if defined(CONFIG_HTTP_DIRECTORIES) + if (tp->state == STATE_DOING_DIR) + { + FD_SET(tp->networkdesc, &wfds); + if (tp->networkdesc > wnum) + wnum = tp->networkdesc; + } +#endif + tp = tp->next; + } + + active = select(wnum > rnum ? wnum+1 : rnum+1, + rnum != -1 ? &rfds : NULL, + wnum != -1 ? &wfds : NULL, + NULL, NULL); + + /* New connection? */ + sp = servers; + while (active > 0 && sp != NULL) + { + if (FD_ISSET(sp->sd, &rfds)) + { + handlenewconnection(sp->sd, sp->is_ssl); + active--; + } + + sp = sp->next; + } + + /* Handle the established sockets */ + tp = usedconns; + + while (active > 0 && tp != NULL) + { + to = tp; + tp = tp->next; + + if (to->state == STATE_WANT_TO_READ_HEAD && + FD_ISSET(to->networkdesc, &rfds)) + { + active--; +#if defined(CONFIG_HTTP_HAS_CGI) + if (to->post_state) + read_post_data(to); + else +#endif + procreadhead(to); + } + + if (to->state == STATE_WANT_TO_SEND_HEAD && + FD_ISSET(to->networkdesc, &wfds)) + { + active--; + procsendhead(to); + } + + if (to->state == STATE_WANT_TO_READ_FILE && + FD_ISSET(to->filedesc, &rfds)) + { + active--; + procreadfile(to); + } + + if (to->state == STATE_WANT_TO_SEND_FILE && + FD_ISSET(to->networkdesc, &wfds)) + { + active--; + procsendfile(to); + } + +#if defined(CONFIG_HTTP_DIRECTORIES) + if (to->state == STATE_DOING_DIR && + FD_ISSET(to->networkdesc, &wfds)) + { + active--; + procdodir(to); + } +#endif + } + } + + return 0; +} + +#if defined(CONFIG_HTTP_HAS_CGI) +static void addcgiext(const char *cgi_exts) +{ + char *cp = strdup(cgi_exts); + + /* extenstions are comma separated */ + do + { + struct cgiextstruct *ex = (struct cgiextstruct *) + malloc(sizeof(struct cgiextstruct)); + ex->ext = cp; + ex->next = cgiexts; + cgiexts = ex; + if ((cp = strchr(cp, ',')) != NULL) + *cp++ = 0; + } while (cp != NULL); +} +#endif + +static void addtoservers(int sd) +{ + struct serverstruct *tp = (struct serverstruct *) + calloc(1, sizeof(struct serverstruct)); + tp->next = servers; + tp->sd = sd; + servers = tp; +} + +#ifdef HAVE_IPV6 +static void handlenewconnection(int listenfd, int is_ssl) +{ + struct sockaddr_in6 their_addr; + int tp = sizeof(their_addr); + char ipbuf[100]; + int connfd = accept(listenfd, (struct sockaddr *)&their_addr, &tp); + + if (tp == sizeof(struct sockaddr_in6)) + inet_ntop(AF_INET6, &their_addr.sin6_addr, ipbuf, sizeof(ipbuf)); + else if (tp == sizeof(struct sockaddr_in)) + inet_ntop(AF_INET, &(((struct sockaddr_in *)&their_addr)->sin_addr), + ipbuf, sizeof(ipbuf)); + else + *ipbuf = '\0'; + + addconnection(connfd, ipbuf, is_ssl); +} + +#else +static void handlenewconnection(int listenfd, int is_ssl) +{ + struct sockaddr_in their_addr; + socklen_t tp = sizeof(struct sockaddr_in); + int connfd = accept(listenfd, (struct sockaddr *)&their_addr, &tp); + addconnection(connfd, inet_ntoa(their_addr.sin_addr), is_ssl); +} +#endif + +static int openlistener(int port) +{ + int sd; +#ifdef WIN32 + char tp = 1; +#else + int tp = 1; +#endif +#ifndef HAVE_IPV6 + struct sockaddr_in my_addr; + + if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) + return -1; + + memset(&my_addr, 0, sizeof(my_addr)); + my_addr.sin_family = AF_INET; + my_addr.sin_port = htons((short)port); + my_addr.sin_addr.s_addr = INADDR_ANY; +#else + struct sockaddr_in6 my_addr; + + if ((sd = socket(AF_INET6, SOCK_STREAM, 0)) == -1) + return -1; + + memset(&my_addr, 0, sizeof(my_addr)); + my_addr.sin6_family = AF_INET6; + my_addr.sin6_port = htons(port); + my_addr.sin6_addr.s_addr = INADDR_ANY; +#endif + + setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &tp, sizeof(tp)); + if (bind(sd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) + { + close(sd); + return -1; + } + + listen(sd, BACKLOG); + return sd; +} + +/* Wrapper function for strncpy() that guarantees + a null-terminated string. This is to avoid any possible + issues due to strncpy()'s behaviour. + */ +char *my_strncpy(char *dest, const char *src, size_t n) +{ + strncpy(dest, src, n); + dest[n-1] = '\0'; + return dest; +} + +int isdir(const char *tpbuf) +{ + struct stat st; + char path[MAXREQUESTLENGTH]; + strcpy(path, tpbuf); + +#ifdef WIN32 /* win32 stat() can't handle trailing '\' */ + if (path[strlen(path)-1] == '\\') + path[strlen(path)-1] = 0; +#endif + + if (stat(path, &st) == -1) + return 0; + + if ((st.st_mode & S_IFMT) == S_IFDIR) + return 1; + + return 0; +} + +static void addconnection(int sd, char *ip, int is_ssl) +{ + struct connstruct *tp; + + /* Get ourselves a connstruct */ + if (freeconns == NULL) + tp = (struct connstruct *)calloc(1, sizeof(struct connstruct)); + else + { + tp = freeconns; + freeconns = tp->next; + } + + /* Attach it to the used list */ + tp->next = usedconns; + usedconns = tp; + tp->networkdesc = sd; + + if (is_ssl) + tp->ssl = ssl_server_new(servers->ssl_ctx, sd); + + tp->is_ssl = is_ssl; + tp->filedesc = -1; +#if defined(CONFIG_HTTP_HAS_DIRECTORIES) + tp->dirp = NULL; +#endif + *tp->actualfile = '\0'; + *tp->filereq = '\0'; + tp->state = STATE_WANT_TO_READ_HEAD; + tp->reqtype = TYPE_GET; + tp->close_when_done = 0; + tp->timeout = time(NULL) + CONFIG_HTTP_TIMEOUT; +#if defined(CONFIG_HTTP_HAS_CGI) + strcpy(tp->remote_addr, ip); +#endif +} + +void removeconnection(struct connstruct *cn) +{ + struct connstruct *tp; + int shouldret = 0; + + tp = usedconns; + + if (tp == NULL || cn == NULL) + shouldret = 1; + else if (tp == cn) + usedconns = tp->next; + else + { + while (tp != NULL) + { + if (tp->next == cn) + { + tp->next = (tp->next)->next; + shouldret = 0; + break; + } + + tp = tp->next; + shouldret = 1; + } + } + + if (shouldret) + return; + + /* If we did, add it to the free list */ + cn->next = freeconns; + freeconns = cn; + + /* Close it all down */ + if (cn->networkdesc != -1) + { + if (cn->is_ssl) + { + ssl_free(cn->ssl); + cn->ssl = NULL; + } + + SOCKET_CLOSE(cn->networkdesc); + } + + if (cn->filedesc != -1) + close(cn->filedesc); + +#if defined(CONFIG_HTTP_HAS_DIRECTORIES) + if (cn->dirp != NULL) +#ifdef WIN32 + FindClose(cn->dirp); +#else + closedir(cn->dirp); +#endif +#endif +} + +/* + * Change directories one way or the other. + */ +static void ax_chdir(void) +{ + static char *webroot = CONFIG_HTTP_WEBROOT; + + if (chdir(webroot)) + { +#ifdef CONFIG_HTTP_VERBOSE + fprintf(stderr, "'%s' is not a directory\n", webroot); +#endif + exit(1); + } +} + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/htpasswd.c b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/htpasswd.c new file mode 100644 index 0000000..1a7a231 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/htpasswd.c @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include "ssl.h" + +int tfd; + +void base64_encode(const uint8_t *in, size_t inlen, char *out, size_t outlen) +{ + static const char b64str[64] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + while (inlen && outlen) + { + *out++ = b64str[(in[0] >> 2) & 0x3f]; + if (!--outlen) + break; + + *out++ = b64str[((in[0] << 4) + + (--inlen ? in[1] >> 4 : 0)) & 0x3f]; + if (!--outlen) + break; + *out++ = (inlen + ? b64str[((in[1] << 2) + + (--inlen ? in[2] >> 6 : 0)) + & 0x3f] + : '='); + if (!--outlen) + break; + *out++ = inlen ? b64str[in[2] & 0x3f] : '='; + if (!--outlen) + break; + if (inlen) + inlen--; + if (inlen) + in += 3; + } + + if (outlen) + *out = '\0'; +} + +static void usage(void) +{ + fprintf(stderr,"Usage: htpasswd username\n"); + exit(1); +} + +#ifdef WIN32 +static char * getpass(const char *prompt) +{ + static char buf[127]; + FILE *fp = stdin; + + printf(prompt); TTY_FLUSH(); +#if 0 + fp = fopen("/dev/tty", "w"); + if (fp == NULL) + { + printf("null\n"); TTY_FLUSH(); + fp = stdin; + } +#endif + + fgets(buf, sizeof(buf), fp); + while (buf[strlen(buf)-1] < ' ') + buf[strlen(buf)-1] = '\0'; + + //if (fp != stdin) + // fclose(fp); + return buf; +} +#endif + +int main(int argc, char *argv[]) +{ + char* pw; + uint8_t md5_salt[MD5_SIZE], md5_pass[MD5_SIZE]; + char b64_salt[MD5_SIZE+10], b64_pass[MD5_SIZE+10]; + MD5_CTX ctx; + + if (argc != 2) + usage(); + + pw = strdup(getpass("New password:")); + if (strcmp(pw, getpass("Re-type new password:")) != 0) + { + fprintf(stderr, "They don't match, sorry.\n" ); + exit(1); + } + + RNG_initialize((uint8_t *)pw, sizeof(pw)); + get_random(MD5_SIZE, md5_salt); + RNG_terminate(); + base64_encode(md5_salt, MD5_SIZE, b64_salt, sizeof(b64_salt)); + + MD5_Init(&ctx); + MD5_Update(&ctx, md5_salt, MD5_SIZE); + MD5_Update(&ctx, (uint8_t *)pw, strlen(pw)); + MD5_Final(md5_pass, &ctx); + base64_encode(md5_pass, MD5_SIZE, b64_pass, sizeof(b64_pass)); + + printf("Add the following to your '.htpasswd' file\n"); + printf("%s:%s$%s\n", argv[1], b64_salt, b64_pass); + return 0; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/kepler-1.1-snapshot-20070521-1825.tar.gz b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/kepler-1.1-snapshot-20070521-1825.tar.gz new file mode 100755 index 0000000000000000000000000000000000000000..d1caec5a53f93f043a32ec04807dff259223c32c GIT binary patch literal 768249 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 YXxC^qAC}G&Q`96+aR{7@ixnC?xYwp`@XY^ zXyWb8+YLaF)cVtg9}d@pEx+yycCO$?P;etGXu5&boyEesX?Tp=JJyxDWgU@Nt-Zxz zF$;cCgQI8u?7S;#-VDL1b0&7w!Pl7|g2@ZY%C4xNFW|1mI2&*wQ8PYKLLk(7JD8}E zSTcp&i-jZ20DA@5QruSemW{76wT=9{%*?c&q>#2X-(f!W)Kj$Re&T3VvkKcyz%7FC z0*RM1n8IxrBpTjtbxsH1racF|u6JS)a~jjcB@LybFV@Un73o5x~>c&njn+M><2O>>nsZnQkQ(V}-(126Tm z?X_EZr|Ie z?v7Y}FkN_$V@}{8sOyG2IGjEj2yzE(kFy~ufGw0r#x1EHC5=>HPGck8M^iDM$gREH znvTW%z=j{-Rj%F4kFMK#8d)tYD@T-J?9G>fGG#A3vsiMDgu!lwhvdL z&2`M1YTsXdUp}FxjfjGS4-UrJdSw9z=i>1#gy`E_mI-NWMVK!hF=xO%c=iV0&g~=&u&B8ui}4EE+zQ z9UQ!912m2YSI%8@Vb`G_?L#?u+bh>h@Y-T=v)o}fG)diJ4Y;0jTf)Iw?6^j7pEaMO zeAtmKLN0LVI^{YhxI7T~p*o{O#wDPRaH*Y}U1DADr01Ty9qC_GJvOJ1S9Q>1-}w)n z76?onv^Qpdcauv~>q8Sj2AX3vn~>WbJFpKqro^^l!EC2x;#}31>KW$&A}mpg@qoGH zNSoYSYxaC*6nY)YD{4d?lFy2%V&d8`vx}a>gf8SlP zAnLRh2pcA~zO|uyyUAFzyZ$D{lf7fq+H`4xA3E4Y}F?j7oXMmnq%39r0==veLG2b4lGJ z+lvTUU-K`s^|h6AkFqcC1@h%BY}yaG(>(v%Y&IGX*M!nOF|s*S~P^6 z(bAw>q{uHJ(Ud7Y$_wl{!JnC#EFp~}MD|l{u)AFPvdR!kDGO14n6F~$@Nu*v7ognA z5#)$~ARF*VrXUvRT_x4q-eVZASxjDDMzssvnk7LsnaTmA9sC;1-vBSbWzgpv^Nqpw zF1lF(HrMbv!m<>)d-nb6+ z)~02dRs)RH=qG+s`Jg04Jpw#KwMTQu^S0$~(@wh4Xf$8M9 zEQkm4kfKYBk`tICGv@WRHJ+`EJn8LzUx!FjmWHZaF-{Uli914wP~y+Cq$?(Kpo~!QiOdr?rZyrG7(>9{YUC%D;)37WNI;C8} z@%&mjY8g=NEu0u#1>7GrEhIYAtFxe|wYAJ}x_8K&++@h(9D<3fIEM%l546hO%s zUps=P?k0@%{OGNY9HCR(*Dz9T2#bx{vBNAl4iegFu;TCbL@6|bPePrhr>vn8U6`pk zM(n+yrifaF!{0pgGwgX2JHVKJZUcII-ihcK$AF1>F%dN}T%6lJ4@;v}+nq!lyHx79@{vPgtDUxft0q5{K9c3?=!Mvb^^tekr% zpgM2qaBZO^=W*}{@IDB=W;F<5IOdj{zrQwH7pju1=~Ya}-q98e2~AJNt=L4VfrL zaI15gT^6dQ9Aanle{dMO-STw04j|W?VSoz^Mk6fozVioW|1#iMpo=45Usblg!bT1tRcHatP>i;%Gk~n|p*JAyFfQXo-v+(oLQo4JchQ>03=Ds-d(x zGFSA_P=Y&66?MlPL{OBxkeJ&3pNtZhIv;!+{+w&OopS&1Tg&a+vr*sH&T^dQQ0hP zjR*=P9|Z>&X!b#wLeB9spiLZ7Zn^^jbM;RJ?_j{du!kLDwukbolV)~E%+^u59EkYX zr1a?9t{LKqD53|DeMW};n-celhD(c$BAXZ!df)aUspRUCOx^74!K`v%Ct<>}Ig5B{ zgdIali-<*cxQjNexpdKoY>KToZHQ)TfNL2`);olcJyOc((_tI-WGW1WJ2!eIS#}cO zDtX87y&~B@7&$Jm8j?$ZQZq9=Uyaxk+v;cEvHA}LX|TWezUD3A)zY?`Rdxeke|KU# zAhWR4wp~ojmR@qW@c>7Ibo+3ZP{*8=+kQ=uA|-%|At&h37|S}NN{cg9n)28paNQ1J zWWm+HWY>A72;l69z+97;gx*`r03t}#L$x4b7m0%NER<3%ei>CQhZM^3O(q!IRI<(mYwO*EK%PHCjDt5&@1()CuW+EUPt&Mx6h*i+he|r$X9G=#e z^BTxH+n%>IH`^;$0c9DQ2K;wjf^>-!K>sYuR(9|D{O>2Rk2`7Qb&Cd(-MektTV2p0 z__!T$B{Scyn8B~uY48g1bZ~8O=dE|D$HnXrW{dV`J%LTJd(PB2o&_3Xo=%(d*W%EZgsJS|&Lf9l{%~+rddjb35-+vR zb+10?7Z*_IqlV8Ik=pKKDIg(a40p%3I9lZGwE2m)*3X^PI*yYo=YSbF4;eDZvX(x@ zdEPDoG}BJj%USQSF1X-?8I(&_8iG2i0`rczw{=qC(#WEhqbyu=X0maqLP#`fE16)1 z!`TQEk0jzUM2-U3n5zgaSp%X;=yZs_S|ugNsTiI~kewMJ*31`LF9*4s8T0`&ZR{yi zVRtXWAzTFR6|YML#{^QD@-Xcn-87R)aO>PI^c<|J+o&DiFZ$$w1kM}1NhvoujS_7~ z_#9!bG~!$_QTHlmrNd;Z7ST}b-@Z@}m%Pnt0&*gI0wKV1+d^D(W^jcMdz9`K{k|D6 zQ1jIsQ-)WH=7aJHmXBANAS?>jcw-a(nsEyVTvrn28znj#T== zqtFhFm}smV1ZfFDcNu~=ktBkYiBYA8l8K@P2=_v9BO4dkOSLE5L+|nh`2qKnlr#O_ zvHPbhI>(c~b@e2eR^dQig~W~#g(Jf^W2%~Bf(c|QDoW|OkP8z=1}zY*;J(0^d6IRd z5HK~&AgPs&xIlyp+H#0l9k!}>SV7HjXId#`^H-6__Jxk)2$bx$n@>fFhHb0dI$Fs| z36}{r70b~#i%611k*sHyq4b!f7{>Gk$#$sy6YN7DYnmqh5jqm$Gu%n=Nhff>b zg=}!>O?iGGqa*mW0DEukx>InGBqUc(-GyAB-btK_6x;*}sEaWzF&F|j=b7ZZ5fdwN zp~uI8iW{>+Y**!AHf6IOb%{PQYtV9@Ia8YYbryOwDC1`9@ zl|gge19srUz>?Y7P za!09gtOEUy6V;OHPSB*zw6v)|SzQ;^Lu2`d9+EPaYMBDygaul~X<3bT#2b4T;FhcG zhz~5!nk2GAYEOpk0@0l@c^9V-mZ`Ov2skaKAF8*7*t#HwG~a}9!xpyCrr)NtzIK5gtmj~3?GMflt3AyI1C$sf#p)dnbpRtQ0_%DpAnOOMTMdrgm zqRG0c0x@nOW;gZ@AYgX}fFy-_;&%sd>JIe6qcwyR3l(T$X2`*-H zi9cu;aI7}vo?z2?*Xre`&)<0b(i2y=&R_UU>4$!%MN*$0uuqRLj@_j3;{fzwW37{5 z>W&P&H!1xzOg0ln-*1Lr;QkH|bt zd#x1HH*8SQtD-dF0l`zN6|u^8Evz%30<|_&3hB$38rF*gP56eGo!1RUsSUNUeaEEbPj~C*E=C%9Bsjx}u*)WZ*5kb|`H}oIAo<^0R(;v3PZK zb8of9Psh(j;qM;XY!)`$fgCj(z@J9!-e&to!;%c2vVE>4XLa+W>eFeda3 zhbw;SQ1*QyCyv46ItgMup|Sw>CS_vR7P`%iQ9!;Lj(%P{ro{Kg0rdTpzi>81)QMN# zS{L*R4q}14t89j`7}*VKwj|zPl#^SSJ&ue;UssBjbcxRV zAW4id0fywj6t=u9b6-=8tisvFLab4+?qp2o)&A2&HmMQWD;FQVbam^>yK7X|d*N-R z^RB;=q6%H-vCr%YEtWU-xWh@GiqjqDj_P3~bIFKyeYz+vy27iCqWFrL9x3x4cypa8)p6f#5!d1 zOt5cNF>=hfzOq3ugJ>G<7Af1su^oKgoe%IZhx@CjhK9sQNSG^^%?^t}0e$AaTXti@ z;X}^JQTCgQ939UlW55#hw*US9_P;+&mWClI!AU^n{D|h<>IG3LWz!vwcApuFoat$lEis;ke5#<;p)P zz!IRjwb8Y1Qb8)N5L$SW_mELRHwbMbg%+$%5jAtBC@N7GAl1#Q?`? zN7(T)j->rrF6kDc)5{lAExe*4yV)ppa{&&xz8dJr`FBRA3}d!uqc)4!`4J07evi*2 zKBq9s576qMuT^>05ZsUADCGP0tLlI{{B^#Y ztU->LS2@h3O3{iL$(SulGn)u4Lwc`(={eU;o~aonHUTaxF&v5u82MN`!w5#w;5W0r z;zEtEmOVRT4=|u)5f`juobXL3~X`*4S>SBM5I+G*V{`0TlSQnEW{y%SP^ zlj_)AfQ!%G9<_Eilg7qi$+5n~@rW>MYJzFjaV@tcfq)z6+@9LngWg(4$FQeKFhj*u zd>VEN_RgB*W}iVc;S%iRkd%ANC=cx6+9q}<^iWS$AUPG|(FNM+fov%|jA zoH^x}V@LmT?CkrX)$kTliXwd;+`#TAs;&t4acJ`*a-BXe-(yqlS$|XhiPf85_uYew zinDOfeJV_}g;fBw*qW**#bebn9o2Yld}84Q*rzYXLB+Tz?~WFZnD3T^zYFqtp+w6& zCsBZz*b!(_Q~+qY7?mlxaIj4+nsHJV0{xQIk5;Ji zH0MFpJ=P7erq+viVB2!UDBrw6YRtCJYOAe*PeK{wI5I_&eePuTB{D zwng!NTA^1<73<_JSpKqC4$dSyl-teIu7&~EQ9l6G=#Kby4SiSKHU+&Veh%(P6zV|y zw~~qLeqpLre8IQ~Y$Xli&6ZdK%TvMhDhlFj7u7JJYtU45=;RKk_)<3Z*io~t6~teFNF&1`oHVdJtt^drdV!nzehTqy#%O>XN zTVyb67WAhtZ(X^#>^@GK$BRpDp9x+>*2&2 z;vFyz_)~@U(_>F?uy2!=+pdB|<8Risv+cWpHH&YG?k(=aa@0s}P!Z#N-K_z>=FjH4 z!OzAA*`!}3EmrWylyM$)bYy|ucY zO_+2=3wkuAYE2CSj|m+@g?!K>UD4_~x|X{hneU;;vS(nIbPv+g?QkD1g;$ z#KvUmq9W;u>4|_U)#iwm*HD{Tuf`d|T2D^;@i~I|hZ;_rO1KVF98bfEofD*7KN--{ zbs4L!sG2|7nLlF)=tE}L6WIxNU#+r@D|4_(* zVI9fe3*TBf9#qf8?o9F}AQwz{4H$4@R(!WC`xZo%Zeh^D_VRhW#nSGW5v3Gx5u}l_ zAGCd@BhU?jUI>J*(5uxc3yB5>-tg?jY;I@qKLaaRs8C$MiiqQfq&|XD2Zq>;vk4$5 zAs`Y#L^*nmik>r(wm`*Q?6W7Va^z-wKcMOGhHm44z^ARn{79Qp)z|M{3b5`d>nWh{ zm*bWbcr@1@<2|_V5j4-OdcRtzv^Z+B^_E;J*4bCMqRYm^Cy+AD9YnB9f$Fzj+!#ku zpXg^$@kd_AQ-ECZFVD`r$!)wnL)oUr!;mqO>{;TTrj97(J0_-pb_-(JY`cw`fRnMg zC9Q&!(VBf6(%67qkS@teBON}Q3_-TCos31G1-rk#V>9a~!sAZNxH;oV7IK|xmLOum zh(;*FfMI?%JQGu96bK_*24ukL3Q+Pe_qDe(Hkqo%wyV=Wz$Z^o3Ddf%V{KE{TG(Ge zVp@eMu)diV?BF&s|Gf8JPiX=Aj5k50Ma79eK}c$QWuiBFF~XSfp4<8>e)bV-o`A8r z7caVh!T|22S+HqFvGuyDL^|L~nUC)qdDoG*;r$t_eX4F+yvQ&YcI{I>pc}Dk*;^?& z0`lpLz6()IoL%1UQe8T*#D2M$e2X!-{;hLSd+4GOo4ot1uP!SX%!k&L3|eC5=?CSs z3f%iHxu9Z-PV=<6ffwvUIj422x_NYIYjIk=*TRr)++=h24kdHdn+KmP+C5k(s+9_KP&Vl-^J%OlkmD&1adAyrCmDmII&ceQ zyEZejpI7R>R$nUAFsYs{Ah3ohdfIsd;}7ef*tqPA zt^P53J&x%jebqE20};bVOd+W(?m>c6_^BX2ea8+lUg|=OQG}ud+TvgeRiu|?+(F0) ze6^HwS70cPLFpvN_L}h6Qp&|)ffMjFAJ=(mRyxZVyhLpQFg{uM4TULZeg2uzzM6 zY#d}wbGya2GL;466KVy~XVV(*(V59=j3;hlCfSh!_OvEf=$;gU6eE5?<|C5~fGX#ax-e*H%oP#k_SQ>)xLY z$NF>lJ)g)xi5Q7_=cE7y=>h&F6b6B9eYORC*pz7lZ`|!-gife?vyoZYD^7sA?B$Y( zA0^~XoU^c388U{36w1u@q?#{*7d$qe?lo`tfwonf>ah(LwOrwOL%!}6*39omaG(-q@jW> z1Uv)9L?VbxsOrJ)Y$j`Ti4f{I*oE0eRNB()xg~anp}famwUcSOKdtE|$0V2m3@ptDj$K&)d&+UB|uF>sny zH^Je$*F*gKU7;6t=BH@iXC1MS!#ykPfD#OI%5j=M720;;>eiD_NioDgghT|5-SyK2 z>UyqRyt;M%%9d9Zr!u&O+AchK`SQgJer+xVkeMoT7@Hv6=hyr66JZ}6Gb@oa*|3~Z zI3J7YEkl$(bNk4gls4xpu`1IAZ9UZ3*dzz^AO?)@7yCuu>KSU?z@`Ce!^@c>3Rv^k z`r5{+d40LMb@8c&$@FvVU{)1~6Rc%c=(?;cE1=F@(^4q8eA|u*j0}|efd@gnCbz>GAO~0e;I}vG~JCQ;*4D#`4mN& z9q$H_hs|zr=oz1Sg~MBgWPqBQ;ffl{9G`WHw?+1qRf<-BWK{v;rCaj=?y&Z=oDeTY z1@3Vlg4e^HbvB=SKl^Fz)T0GrHJ57SPW_pEie%-$>jnAuFydJ@CHpr`m9XH4R5px8 zBdqFYON<9Gd7B2*A#^oNQIOtqbJ_9HFsM7zYd0mIx{XSu7lFH2Wb793z}i)HAa0lO z$SxBSo#u9cxt>mnT}(r#IBZM)I3;|_*<+SSJ2ZCz$Ri?H0eZN23D}(?SOY!r6rz5d zxo0ZGRg1=D=p4q$-CH52FfyHQ+k7*_c6dE)UGA7$b_qwFs=d%8W-74R8-nSx&lj-I zs^o1SOji?6V0}|2bqtV8R{SEMBcOq}buqnDp=+{|HRVIrSv01R3r6HTrFvssx+exL z*qyQ2T}F#2#cq3AUmkjpIKAP`d380p1O@_=NGuTK9Jrab#6JT`B zo5oAz;i%`4AI*2H8&4;IS#X24AAb@Lv(y3pml<|+sxa>eB48r96|JW8p(C3Cy5P(* zHvEm+R@8~XD+Ni66s$)0tiY{d7d5id3U&(bkgT@{cP546SIJ7R9GW8yl=Nt2?%t~y zG~C;M@^Jo1wZ)d)gEeJogxZD|9U66TnA{d=*7&Gd1KRu{_AG9$H%R+<(J*bnmvW%E zD*~(Qtqe9k)@6tKvW?Utp|&{Z+J%$=p4(*mJl>$uax8{pf8^e)MZ@IQxROmZb8-9I3Awjm2JzX#=_9`HrKSSn7(DS{ zjrI+1XHnY(EBh9PPc{0(r)P_X&wY8RhfmGW@MXqB9QoRO&_}m)sA_^KKUy>$$B{~J zeKuGwzlC8To@6jCP7JtUV1z{Zl8+3Vxs{>C@AYM`^q1{6mxe4ygT}pbLf8B)ur&~~ z3C_nJzz{#1KWZs;M_d~01k{Ed^JM_{-y!1BC)RO#sTww{2(+}X0|Xm0WPm4~V^Ha03my0lMt?%-lbGlgccdW$L<7uWvy#m9s8%#&JUO)zf0 zwXm+8ME~6Z?+;u$Kie#2NfMpMF{gYsEr;2ZU?0E+vTr85v`I+F|553$ z7^%`bpX6u@afJB*OF*>0_6(3H5wJaupZzw6pS@VwyrhXXFkv%|)rE=pl5KmZ(NA7G zEF(z1O*F%nYPm+E*j*gF#K?zC;~+|hp%w?2g+aV_c&+X1vy*pVZm8ocZ6dq^xu)SQ z7#@34`b)r0D!~1o$$-6OC~(bXdJ3%Y9e=x7d^Na=fwChs)Ddk!i!0)KZ1w|qh|zVu zV3n8gcaEvcrPw^n!mawDUlOB14Z#T7QjYOpvs^R(@4|EEkG00s+lR~U=@@rEZ_v!9 zdxLdD^}~5RAiXRgVpqe{cr`eRv^%`CE|~T}`rzFAX?yx!$NFNb3_~L@=Fn9K$A_m1 zHa{DsB}&dB#^S0}ZGtTXT{9<-k<;vQ(*|ZcMm+p~H{d|wEK~OvY?_$3q#n;XCietIL-B!;&0;u|dO0NWLbep4 z|2Zebz%!jfD#uYnE>(bnR2{;Z>SZA3Fwh)okT#=Km z2saCcCj>Kvh%|=mT5BdH>P=fSbl03@2lT3#9(h>#jQoQ2S}#?9{zU|{j>byJ(#T`t z;6QJXj1IF2$KTp2Aqfi{ShExQjEaaWs7GSQNdX*C!3Z0om{gcOKdx2QW!_;qocgEa zu)*jm(itYXUeYt6#3+}#C7+g6!7J+f%-+}M-0mbU7SB6c^O2iqM&9ZV+xXi%Ad4a)K+<5a>T`_4ZWU#IYm z><;S!ux>(dn^7?!U;`VS57REC3`;84K8ynH;AuO3lMkzCzC>>Rg!%G>8Iv@(y3xj6 zdji+Ud$ZnFA^ezQcBi#+ca^TDcUSL$9G!K!9W0r!|5_X}1-}{Kr+uvQ>+QBfFR(yB zm2`8{Oh7)C(d;0)=OGxMIT1<-TL8cii0Ko;3J^(v`Qrs7WIojVw|%{=N8ZK}!IqWvaAm}wc2hQ2qza58?$WCBdErdyW>GGrlZ8sxar{1+{naC3)XE8&z(TO= zv1S#JLGrXt0SuK@8uxHDFCTk|#~%V4GUb|{D!*Hc?-f9s)qF*5@B{B#56yyjxZ22_ z)a(Ig6qSe1Zw2N+m#$RqO)a}=x2~Ak2=f67UNLy2Ii(aQYiwN_dA3_z7Itq0^-pW5_V=kyx86yAaxZU_T{EX3nJ6kjfWt3wuAhgh#Gd;mld3 zDkxj}ePZZQjhbjRD$CE_$U3QmwqXzHN!H7^adUC9O;>}P@ZAiLZ(oTRJU2C)$`a@p z=EU}LcAwPq25Oht=%6%GX|qm#@e!*9O05Cumi=KS05GD#&j37y_%>5$sSf%hX-SBJ zW^61|)2>CKMvOmKo_->*#F!^FOHAf(+gg-bq~hB%@nDie+zXNm$*PDgBj3COm+7DR z|Db>7|7-oD`bjVo9HwR3ogc_H_Px!=O|IrvCp-=v&7%lOD9Hy1LROGo9+&`bu86a( zdc3H&u4Js&+tJ8~OdMw|IWweB$3|>h3wkZL@Vt>6BM)QKSfuCzxS~;fQDk_aAoO!o zHe^YDITB_D9a)?bHj+vcspE0eWg^a}>#Xi)#H*NeBwoulWl0=3J822T8nc`nW|~{p z9{Z@0Q`SLNx9VD^WA3EHju&<8oH&ftPuPQSbwdPGm;cYVrrCo%%?T&ZBKCyylZ06} z_2P6x#_)LKBluB?0&@aTd=lwUP|eS7Os?kM z)WRcE&DToq8PKvf803_+Vaa>&|f6NxR+dGO>gi<&>Yod1qhMMjI#_(@7;s_8^rnEk>Vc ztQBdGtp}VKBk|5Lq7g*$04fWoRy9|H$Ad!3m6Ua{q+%$oUWO6TL^(tI=}e+jM1{C} z@w~z4F8g^IYU&;g+(3xB+&$@74}!WOv+ePY$lsGwZ-us12F;kz4fyP=KzlEAh%8%M zTGg>L$UvWSQ1qvJ=5I4HvxYsJJhriFP%)xC%n)(bf8BkzD8K+31>)&oGUTOwXDt!z zbu0y{*w=vHw`w-Tuoz`-({$*vFx^LOnhXy5tSa1zRp=l4CDg&H!f~uZ*|B)a_wvK6 zZ{}!d#D7Gl&IaoHe&qX+b=wpbHaWN2k9tdeM9ss2%*-NB+Dmi!E}KC}D~fsXe%|#a zxqKs+8%F>(Go0k4USp(3x5h{}hA!1!E-|dR@k^ZHtYKII_-34kKBf)buQOsq=bdPc z=RBceI;W{-+qoE^J_1hY1j=mK4D7ERBAU1JsjqJ zV9UWS27F2+v4CM!cI?IVsm2M^Gx z67(s-?EICiyD++^3+#Ee+!7}Somr@`yAU@#4`+5WMGv;DYqwjjxBD7!5v zzMtKowBnQ9fZMs~yXe+*HA~B&oislLlRf!EVAQKsVbHhS2_X@N5uWlMswIW-a zi%E7+gSVAu^AD4h`p5*iHRA8En40MmXGImo1y@Qro7zP6cRrYl#L6Y2xy&T)=F?#E z&65QunhGs>oUf|<>fZKT5>tu1bQq5oJUmI0oV1E=-gUF-&*GvX7xgh0OAWf1gYwp_ z)L)3^GhPcjZ;N7PPNR&sQ_*U zXwq$Lo~piis--qhb?nXaaLIgtio>vwsjz3#v+4dzvu_j%*#5k_>e*A~qJS~DXrTPZ zEo#^1PHxjB;?5$ThWc{m42ASr`*@c;-`$PDtMNZ9+ujokN~p!SSpcVF#rt)Wix`}Q zhWdi?`Bc^;aa@?2e{K?hMd5_bQ(oeEAx;Wau?Q$$#DHj>&7iACiU9^}KM0H|f#+Vr z#z9O+UK<1MXdpf;eVEy`R+LgX0!pGS`OPrKz`#EFhgHhj~ zPhE)~U@f+;8(nmW1LrSrpp{^}qb_3?bw8ZuYmr1FrXG)^@v}uVjf*XDC_)&{XrZ}w zI7~H<_J%OIgbf?4ffxf=_8o-ol<~GMcSc|vdXG1VR?LEAM$wV-Bl4^B zR|TFdToX*6yR1vE^W9q{Un%&!KE(8>Z{h%YI|X~*>}KOXI0!u>Is<~FKacom;Y4Do zI|)W8{pI))xDyM=Cn`*conVz#2V-M6AKg~>tv;ZF!WSs-m;nI>Q4 z;HXk&0ZE5DWLbV<#t26Vf#s>g5EN2rL(NZyI%qfE(Fg>oCA zy9ILTHh-5>mN-5JvSGpMSlL!p5s4XDVy@YN!#Q0GHKSNKBxo^_dTWpG9Ba3=83Wx^ zSF;MjJ|PXXK;~0inGFKv*ff`{OXreiJsJgDvv}MDD1H=zXCDQ~*@)ts#glyD?OXPb z8of@Im`E9b`cjvQ~c;pGbR(#a$OhtG%+d>n6Ll zM>g+5r_gpZQ=IZyCR)kfr>J}lGj9=40U&*r4A^NI#AtK(t(&}!R|4@7XP0_vv3=*;buqPLFDi%mffIQGP^-_i`fn62*zdxb=U3) zzO-^v6{I}y_U|p{Jg6FS9#l)`Jg9CV=fQlc7MoJnL^Dl`WJ8!c@MW~04IAk=qx}P< z5}o9hNW`Mt1OdWMl8Ffcu_)t<%IvKz@VAvoABPI}lmX2D6ay%Gk zuD-?8Rs!tSvtUt|XEHQA-c@e`QMz+an<+i3ywiqH7Th~nX4!loTv`%>5a;T2*Dbj|b_)i$-BC*BHXfdo850_reUZfP;w`J=FcV*VMMmXRPc z`*8kT+hR-7whM&IOjCc^Mq$hc%caN;A}QQl!VWKjj>|-Gz0JYd7?x;cXnSu2!pG8M zRtXYusTo&`(iDn&{gkEa?Q=WX0Fo7Mb4htQ+XhP$teJg>N`O>HoEP(`zjh&q#nojmT#vB zJ~{3_JN^#SIEI}$syU|^D+?@HrYG}1YAsJY5?rY9M7GObXkewZcE0Fk5 zb90Xn@&u?6hUi2Rzs}nsO9B$jaiz1x=O{G9GG250zHO>)Bbo*7S#TMV=q;oh-Wzqy=jGdS!F0rNo4XO| z5_80fnjSN6Hj#*BLD|3~0c?b|f@q#-(YJ6%?^%<`q;^7(7QnU*GCo@vheXjKBiiW~ z7#S3ySs(?dxXBkKpIm;?AA`tCHV7!bpq73zZ$w zIypQv!8~-COlb9@oMX5EOHS9kd+K2;oCt<7o^Kd@>I4_Av+8;X#Rs5PD`kgygl3y> z9|WHj6eyg88a7d&s}nRL6jDH#sv)}1-$F4ec03m7SP6>edHyedQ7P{O#k$x4!DC7a zb;k>N)=WMXy0;X5Nly?^FYzAHku{m@Qrot7l8UNE^Qe|vV$$YKVk~slJ)NV;y~i)P zwn}?o!^76&=PsCnb-MVt=iAQ5^ zw$49v`C{zFBTqkZVe8V9(dwSQdhyD`=eN#BD}3zA#q$r_H!j!*-(J4-=wspMi}ob^ z3g=y!Ru|n4TsnsqK$muH7{=8x5i6G<$P4{dBWwZ|iPB$z zMfT_N-RMNBeI(;k!boh4RFkDP_Fq{Fm z?1m&gWR0C6Y}>P9FkO`dWxKEj=7VBjSVl1NU!pK>jIt|tFwt>F7*pAR+zFui#N1Ux z3C$$P)*v5$AOL%i0fY6tTjblpAEJBffxyv?$Vq^Av85@=&0<6ph5DESj;p!d084*T zQJzso%P)-(OY;puYv~FrPnD3q;#SA=hG?P$IFWii@WIk99JCIQbprv|!G{NOPK2&` zn~F`i@1C?Z;#3=9xdSt_%?0Ij87X%)Qm!gzlb&i>mxInSRJFO1yzXJSfhsqejVrH! zDmQDZ(=i+K`LLft-7G59n$TSVjdiT7H#8WOp_P;AjcU@n27LIXhp%4x?2Feoy>jN? z<4Lg(^mzi7_LDQzKiJLG&AFS;f4U7VELjUZI_vWelnlx9jI?~;g*42CL!CaWo; zVK<*5?FfS3@tMar6hM8g6TKc-QtkwvHyxBC2N?Y~gH*g*Dh^AJzK(Xi@D!xtac<;) zecU=p#4jHLJHB@V2Me$IGpo-Ydtfz2zw3%~o#b_l# zvLORny&AeF@XoPz#Q8M>Wt&r9MIlt|UBR}VPZv`U4^;{1fI1D-qlRZqb<3IYMxCWA z2-1kYq^Y0_+W2y>LmlS$3799yP+P@YRma(Dmz=mp_Esgo(J2O|fb)^u4&DUPgfukd z(~jG3449I5Q$TrZ^|RKNO01Zhcg1dtpkfP5>41y*s|)%Y#wn_!9CKj^N~@QLmM~lm zi5@bEECxES*p+Ek41!M&GA}s@?&Ch#*HS3V2`o9e!2nQ0Cm4Rz(L4sxmO35OqmR$1 zx`S#HE2$K40o}@xc1=$zGmmickcl-t8c?XA>k!Q7z8Me!=`}TuPH8!6)K}NzJyt3k zi+P`CRXHO38_>3hbFbf1XHRtu6vOM13+tqsuJ+7suB=a#spQDRK?TZjXwD!sb0$Go z4ObZ(d7M%QLgNM1I&|+u4bOnD1^cZLZ6{&^K|;l@>p-4$g5EkscMHE~#G4L@ zVB)Z@&FO4*9S|lpjO9SN$nDhTF$d2L%X)g_+ZG&#h{C#U5|U8iOfcEzYaWCJi$d zTOo_S-hzE;6M^Y!$N|uv`f^MZI?snF?tqWQQMVnRe8WlBj(LQC3@GxlK&rbig=NT7 z!J}sL(_`jss!A^Fmn*~xztNc53p&>;XQOGPhxmNH{y~?#rEcPvOZ0J=Rk2Bg$4m7P z3f@u&;ll;}Tg+F+`vryO#ZSR0?kI`wo@^5DbkrlBT;+Nygj1t~jP@B&T7|j;fL5%k z$XBF533U~j&Bg94lI$4+qDLk;^ya*aDyB*}PGTD}4Vt0t7v-#KP_!&7p_G$^?Om02 z-v=OOJWh2_lgENH`j~$}+sBzD8@yjjVol*E7^Uo}x~A1a&BRU5IZQFb{np*-rtsX7 z;0bdDR+fW^+=DhGF^pWO1yZ*$c};;PwO)=qHfDz`ASDJ^UyzAWgJq4Vbue^NMJJIc zZ`3Q-%yyvh)>=Wg&$G#uZ`+Ii>g|&d3Ut{0&R=;rSuihL48X z&f?uf&u#V)w{oFmdBWFcpTN6~MR)Eo1?$#X3zb^WXC*d+3zXZq>a~&7+o9NuAOlYAojY|mq2kniV% zhNdnr)08mW2YZlhUE?`|EkII)N)AjjQLK1?5=8uYpE{1DMabp!mgW{LHSCWu;si=~ zU{oR)=xWD7uw_~Z6H+rqQoL=XpPS^p(M_JP9t_mEV$>VV`ocfbGuS%4a!5cX?SQqb zTSr{ri6s3>T00)yMCS+|{a7e&ZFA0zn>195xN`rp!)MFc=cRNE4Z?C1QIp%F7&IKY z=?W?s_X z`d<^(tBl|?f|Skz28Z6((GS`Yt?x41OxZYXT_?ovW)a1sOVmA7d9r_paM3t$tPSS)GRdgl(1Y^i#lDH;~Zbd09ed zgE2RgNR%YC@4+*=o4=orr+XMvq=GN!?o!bK`F-N2OJ7=CKDK9JBAd}^8?P9NwoV^C5{5j{lL)jXJ^1a9tqpgmv9#D5^x*g zx-L75AoEm;>;$(C0&vQJZBl0_&d(a?cc+1XGkYp4;DpO!L|z4WN;oT{j=VCH{j|(1 zs*KI123k<`W&oyaPAGVGk#orr&K#4-sY+>2*aD7+yjpf#c_OZC$uj>x*)FDtFMxI1 z(5X90)dM#S**lc}HMm}?5QHPH#SGM?37SEy`X2Zl*Gls_T)?PAd*pH_wdZydtS4D`448L`q81;)1Yo>s|qml;X5$ zhY;C`Y_MutPwEciUJy}EJ@@%?hDc@JH*9+iGluw z){q92=>`I8p>6zJyF2O}*;Am5SNKv{PiziH1lc4(l_{eAT!LMRZlB>uec-l4I5*cW z;&qf03odTMGis#d@$*+}q*I>FCxK8ZAb#Y4k+%`sw0y$xhn@B<-=%y98NRX>eg*e+dmT#ap`D z!qB2C<}$tKu0i()c_wJu?mI{bE9@+%Ghsf&;>uFyVjoqw$@yeU{DPJqQBjFRUM9|} zq-fp_BU59w5QBjl)N(@AndAG+Y&d4BS_o2e-w0kgLSZvg1^g$}&=$Z1;;wK5?`7k0 zj!4gnQ|?3BUh?RMdt4A&L_ z>l_oWNvoO2ML7?uh!(Coma@0HWo56uVH|69JU#DIHnVn}jd!*rM+8BukL=p5C?aF{ z>PvoF(|s;E>zoN@3Ao3^5&)jKxFjtARtunFmlIl{j+aXjSw)o-)iG5()orMFVw*Lh z-GLcC?xIPbZfnhIXQ8GqnR_Hqhk2{|poXKd?B`1>zmKuw8kHnAoMipnDIH95ib6@w z&kl=00UDgk1g^+iYMr+Maaf@2wFL)K5cIC&Nx5GD|5U*>fw@3OhI$n_Z!o+Z5;VO? zRLBJq{VzjiWs+c^@7q~b^bnceR*9Z3l1xweI*N`a!8$X3D$!~eBaC+axb$!4I|k~DlgGqUHzcA zqs(VMm+oBU#b2^Z99EH_w`k2m@az&8lA0H+LckiFl#lPq@$?=$Z!lvt zdd~@Wl7SdyLp&wp19ptjzbbPHSAd1)oOqG_3v(urHXID-xItwUNh|N}c01_`^=v!q zJMrYrl2CG`OnL6Yz`7HZiMQee(b2UYN3yqB2+2-qsD3U0dEF5k%deYm0&nY7R1*P4X3+G2Q{ zUB2-U1tj0|P>1fkUVv5H?^l6y7c;SnU&PZu_0Y?QL?>LQ@zSE#b9xj~_j!Y_!?Wne zOH6@A%kyU;o+-UyT9(d|PT+NNvfSh)FUjO>xvpuTvZYg+;}pTr!wFVt-{#FO#jb}_ z%X2x3&E=e36!C9Zav~B33b^C1faPYyLt_B5H0F?b@D<{&7>b!iJ77K>Z`V8F9v^2r z$9MD6n|Z0d+^~ahCA;}cb>@R@+nkGh(R_wHq!jbT>Nn1a&ft3Kubtx4N0Av-a`Jc_*;FFa8`y@khSdsMeP^~19=Nk^^C;jlW}4x zM#t>z4zW!N8Y5!NW6sD=4gt%mDmBvIq{uy>#-0V__q~>VzUi%l=_ZUAyo_PJ;5XEb zzgzH2MhZ_BW)#82z>$P2i4W%*A6&7f6nUK`mf*@C(h04*Ad&G|QpzFVCU3z)vg|n?tW~Q`|yPbh1k^+-)TlHLmP3bZKswzon$=-*MA?Mu;eyT(Pr} z3N3f<1RsH?05!r>0&VCs94wTsDBOIQXAq1DXlZDpM71-{V-)~^SgXS$=-dc$ML+Ki zP=In8GZsgb6H6UWbh+8L6a<=*7Ze#hT~#m-P!J*pFi>FIE~%-HR0 zixv*%PALBf+Wk4b$z(Rb{szZqS$?kDPR{R4)ea6hcDwC-j@>@iT6Ayt3KKOUO_x<9 z@(6J*>}fSD2BtcVZQcUi&&G4ftsH5upYm`KOC;qYwv|SH_LA*-m;Kd{Yax;yKUMlT)6_F?)$L1h4}jS(I0YJY2wuNU<0vQf@yJFd_jH$kt|; zs4B=LKv2DKp0pRFc`7uOFv?xhGxE_as>D5_BHAO#hAAb!GX@G?8*Ko&C;&T)pF9I(a0Q`H>m5kC8t#zcVA#Fh2zHikE6; z&Qi$Gipm?CP7CTQoHK#7b0KtK)y>9Z7_}&14B2HRO>Ry}#iHP>npuYj2|d1Sb8do% zZ-K54Aj(Qj1wn3t3@s7e(~{#>IfA*Gm${BlP#BS>A1}rDH3lnI&-qe9O;h>kL@+&B zxd192mm0Vnr}w57^VudJy7G?O2vkAHK0>aF z{19)(UGy?3>(=?jG_C1+JpS!C|8jh}Zp6hS4#3*g)1~%LQ`!XL01%h{j*Jy#3(`x{ z_F9_bnFVPy^y4`ryeBBSoKAmQ&%k~=Yb!}IB$QT9fCdnWDIiAqK`b}A|6*xnL?3Z@ zy?W@;f@_`%&BI)R_w`x3Tmrl}Zt5A|bPS|tiboRA2NsfgGI}zF4otOB1L&D;!|4kz zpwsRcgnD?hM!+|ZKYe-Y%Ec}7yDfGOyy{eRF4L|sbQnCo*WngGy@Odidc0tUBebVK zH+hhndAB|arbgifQ3VT16f$F5XR=P>7Q$+^LH8WN&jroWPCXTrdhE&2;&%%^ z8KN}b&UXunDq~6{V<7FYU|s^#JKbwSTcy!sT-XHE%fg^FA#}!(4PFwn;;q^gck?OG z(wzVb-+!@SgXyBTqOX0b8Lud!UUl|hdkM(xvPiGn4HUpud(O_PwnB_}DR%r;g5pl0 z>oP#CrS+ijWv0J=$LSY~*ce@Q-Z_ul?afoKl-~|d33Us2Q0jMh!Xn(noHTPNk6wm5 zeYcuz`?F>qEXm?R(Iu1Y_|AySlxj}Hqe}(X*#&fhr%W5;BeHp_7=P=@XsGNY9}lt~ zam`0UkVd`S88p?0lEEd^3<(vnhvO*+_dupNCpdbl{2<(6?h?UO8gbBbj~CDuS8%Dt z($fo{H56Nv2r0~G5am0p?}OlBV;FI0p^M}PhB4`T41Rl7&oYHa?D1>rWbKG}L&m%U z;g#p=ioz`KoafX{&sdfs8)$(ae;%u|ib#1)HnJ)yu;r zHr8!%_QW;3Y>SW0CD0qW5T$qea*Mt}y-`$$g%O>|?Rrs3qkcAlSdZ~++U3Ls;C{ns z4hScjL!mj)#_;*;Q!^k+x5Zj0h<{mF`CYF%H;>SVM#xKW# zNapxV`?uvwPVyv*3FM8BggtOv4lA|~bkSonl+0jTCNLYoaXBLGmw9nBKZ@{#MTjpF=VplqCf#lG{dcr(kMu$zzeRpXZ&72nL zPOLZL!k(~qQVEHzD-VVkuNsnYFIce_i--P=l2Hvn`r)Le<7}j{$|I4i*%Zs@Uh*R? zVvvd+;hd`^3(~@*Zk6d)WF5e43b?UKeY0aW-5_yFoLT}?GqE^7DuJ#x<`&8m2R8Mv z#M3ii^mI|e%-JJwISq>K%G)FIaFGlt<>mq2KZzg+?1W9T5g3W&Oo$qe^C!;f@-%dS zp+^e{6cw7UweLp>(=lz!jxa6l^l~X;wac~*Z%dtwg=85wMypAh1L_k*h0g90{-{)w1L7QtwtYB<9^DU86cZG3oMQ5>$4OM|BxxyB6>3nM2W@npG z@$8JC?|`+wnICmQFDb!j7(Gc@7>C)&?I2ZNL^u^z>G~Y(<@r;c8c}gJk@d%pjesif z@Ie3KK;m88okaZtA>p~fK~5-e#SPfET_v#)#~YLE01#)vT>}EWojqKTWI|dn8-;_y zCwf>rlN|LVt|zcWh&<`cq}21qprhzg2RFg-CR^(>1wOT|@V;{KktZ&B*s1iy6MMGi zR`JA><`Z25KG0nOXOLMoF<<9QigT4Boscv~dL?yW(y>N8mk?aZea^%DjuV1dl(Z>~ zxzKCr&l3_}FW3zPJi;a=;Kt7yqN%~FIY>G$NS~nm%V~Sp7oA=Pb3hN5v%5K`6ZUS2 z2is?CQ=AAEjzb(hKRRNs?9eS|(InF~n2#Ki1#msZC?5c}E5R+1qd00;>tl#_H?xQV zUY69km%?)M7`^bM+%g=f$G;ZaWbSM(X!lwuz_FrDaH%vNz6TD%!=aX}pYpTd%Nu7MUH5_On}VUkbj52`)#uvX>B8dKI8FD>MQ2+iKnq zji(t1HvIJVojhDpu9V_2&adbnHs^W8kF+l{|Jx!EX?D-lv;0aN5^N$lL zdM&bL42tB3kl75feC(F=`D98CjmpDTBgfQwpl-JDr0manQSJh(@FpFfcs>QL0o&o= zhSfVl@;y1Ma(9KPaRfEsKGM~Ye5ZoI=WL$EENk>u!$MKHhyF5e!$V*WFA#$o3+^JG ztP9Cp;U{{J%;)qNlnl8B!Uh_a9x@O+ZB`s^LyA8Z8<_8=oaW{@3b#p3qnh5*|I!U_dCnQkg0;_<;Mr@!!V+SPcoZyjP+fdTqWg=EXDox<{$Lpo zRIAtFoI6(QB1cR#zvB8U3H-9DBuJwk?>l`mqt#mwsV*?+fb%&x(keUas^I+7$w947 z_RvGa60S4&NT;QNhl*y!QpD9$!wp=i^%@(`h;hgv#Xrxdy|~XyQ3+Zt<1$%rUJy~D zUUvzCEuYp%tfyDbUA4wvG5iKd%UjxB?pufjmp2GitP-064cJo*v@>1p7ZY<nwNf(tS^w520cHxQE!f+x~2E%w{pI^1%+d!@-0; zJA+i(JmF@I(RsZ$DG1`$un)MqNfI|@Cluv~J1yzw&=u6i*p@O05WOJXV~?wH;w7mS zaA&vp;qvNLEq8W`9xRkwUK}ud!&8O+K2;7GPN#Mo49)e92=o{D;2lx2qxvDXJJNQ@ zLl`3<-C394aF|SfN(y!?nYXe;Fwz><4UTeK ze}W#FxBuUVneJZ8UoT#hb|+pVFJ)LMKaSQLoPwsBYc@aiG+Hko zp#{~3-i+>Hv{E{F3+jaP7gh<+qBVMlbwR~N8CF}A(MkVY=LWK)!>ZH$!UhrZGo_0RMcC9;iyY^T6*=Q4FZ^r+rlU(|{`f5FQwdEgvAt zZ-qxnrHKIEqX+4pJf-esNCsh~0%dKH^zq1KN<9T4{~6*p9uGJpu?L(_fVw@i6z1L@ z9NF+|C^BM+M0kkAznop-2cf5m-ZM$9ar>~ufJrv7mO=WJw)WF&9pMbGw`-jLrK*~d z`atvtjB??WVLCAva|`=QSlTgi7T{}jb6_T{5d;OI?Q{4Rv9_3ZVmr84;rO=EiNCOB z?y(l<0^d$fZ%o#BN;61s9mI~&_)*KB6=oB^X@ywgrrBfBayOf7E8^-uh4kc8m`~H) z$Xqt??dHk^HI3PYF87FdT5`SI3^)W_nhIA}Im?SaWrYmDXJUIq3!1!&D^+Vo*97k`l5z6 zcLr*PBDcnt#6VT7+93Id8}@KW^S&4261^!iHF$?R^^wLB@AI>!ybeb;1U~Xysp|9asHk%DJ#$NKZjlJ2cY` zwEi&zWi7QS095vLsIj@_kvtk65>?|?zVWE+;~S6GHthMDakWL5Z8B7f$w~Ig0e6wh z=cD~%QjTyr1HGWRE_Tc}G7rdHJ!{SeyUT-p3NwX1axK(n(sk7CCxP{_i-Pd(MO=J z==Qz2cD<>yFdhu3q&Q{TM!JszlwFf+$*rVqZd>Z+BcLEXah`CT z8b|vttAYw{S}&+`pPMs>#W*u!i_9MVGBlxS%G@!S69+NxckG>aDbwA>dUe;ONg zX1z1Lwk~cQ=0f7f8|Lwbdi>U5(eIbj&G7F|G8>ERNOGTY{}jh`->$k~A-o`G2-I%D zOai}R&0~#{uEdU0TsNt9c6>%dyMFP-4OE(vW^|K_pn@hyMqs4m$=2LabcW^+gFO9{_rE?LvgCVIzfPudJ;@wC)VLb2_r$(f;U zRYcaa2KuqY_VO@3EN;g&5oQ{<*VSTJ82K5uhIccEd)Bk2gW+sfat70Y@Ia`HrvbnQ zTrmy!8Aw~riaUrgK}%a=+<`V-p)>H`OC7R1I}46XJA6*I(ctN4I6j;Fn}cI)MioRj z^9UvB*;)#8uWGkjI@49-B#rVztFDB9n+pKx_O%YVo;1$MdCFImSvwJs#7PFcTuvT% z%3j4(@KQ}xrXBCZ4crLq<;b}|C5-FlK#s+i&U)>de#cl391ndb4rgdEi};)KEnD{w zbp(R5O9Z{^%;^L68WWOGFOJi&6+5;haH1|cbEzJ7`BXMC> zcz=%=QV;c|W*be3M0xcX={%cEi{8u}4pO~K<{#G)$50Tj4mx?!#9NokiiY9bE^^8o zn_35F-1wtD+VtTH0PJPFfxbe16l@3!>;m(U?>?VIrBqsl?4t3fdO@_4aJZ^!b&6JqdsC-_KO|BoiyJd zV}VCHTzCrDg7mC|+z`oH>ACdBo3C4ALF=m!61AuqdI6KFLrIqAR&Nrwdh5(85KhBJ zzSZ1+)!rtp9nA_*ut;ZJ)@>#F9b-0l7x&Ee$w+rdiw?GQH$i=ufz0l-MGLD|jZ|1F=7M}7Eg?z15+Ze)_xLegKP0;`gYHd%2$OHgQL|_cy9Al`SAT06`_z;m; zU6)LO)L12Fe=}i!ZqcEPmF3jT>a@4#X+r(zH-Pt;RS2%7FGr3JEG)9R6iQoJx?Ps$ zn2p*xbLj+P)^?P09%Na|`<2xr3#iH^%)mxCJkcJbzos?}3apctLb8)cjv!^Du zGa7A4T};+K*~o;?-)R$tfPz2L*76(dijjhf{hSbXU9vo-c}LfsiRc##Ye}-=QZ?j~`W;C=;GPQ1<7G-c3In_sE_0o;+EAEK1rJ`1SrythB&>Giw zk{w_~j#MMR)7HKrCHouoHI3%5-CtLe6@>WgZ`jq7BU6m_%bSvnOXoqeCKEY|i@R^6 z0M&UAz+0?ULhi0UfJa4a03@f-hKQeDBkp|pZmVxS(SF;qKbu?zYqn*~_SnuHC$V_2 zl{eTb9BhZB{@R$Y9&^lU^;81IJ2DfU*i1NPO1T68Rn(k#nX&!GE1^8wSatg5 z6}!Z4mT9;#;g8%A96=Aj(Lg1jmdJ$j#s~HEIoHLu>Vsih^K+fvqNvc8}5u@kRRIxT9* zMS@Bdu{czo#eu1ueX?+0__&L1_E;Kgz1wBtWgAyb8;9$=zn%N~Cy5r#|!vY#< z(;n>5r@juL0+B&;tqY>fVUx$C*hSEZTQGUVk&NyTVVsse6p{Q+Td3XuOF*>00teuj zD*!s$EB4ECy(2kVqXYSgvjnU&vy^AzwB}r60XisE5vyDLPS($sg(dPd*$x6ClGy6} zh|@@^Sh#>vY-5ON>C`-=IYZ^jpex>+x#k1J+#xxgH&9+ad4Gr8G$FY&p1^I4cFVTS zc4A_)Mnd->hn(f<2^#Tv9_k5n6Uz(S(X;WGCT~z45F%RMHe1tl5EN9EtB)&r$W~G- zwB8Y0zBy&nJz@~#yU(tF2P<{*v>idZz83Rf;N?Ya3E2w!W?CUPH)uvWkYeH>hZ_>N zw_Sz&a9oZs`YHp*(3-=N@>gPaCDRQ$>7=fZ?}InCfW^Advk~HaWR)2^lR3lrlN15A8nY2x+?lBqWDv=O1_R=HL8W&G zL=1%_;t@7>1d$UL5HCAh0qye6tS89Xbj9f0Y&MlyaOdq#uVYKI}GP=?()lhnqn z3n-Oz&x&Y~xaY5R5Qb%BruhyI5|Uj@q})Lb1S1BE;R49RxU4E5X;xKGGG3QL|H_jU z);|@Z09XNKhL|?sigVtQDmie+eyFM9ihb-&ynD=&S?#&LJ=|02XuUYH6Yepr48IbT zWO=z@9cH7kO43Ka(iUP8fTacg^UU=Hz9*7CFSH`@bzJj#hFCN+p>%C|s!BaZp3jh$LG-OB4%BIFXvHp zlZTFk##+h1@hHNsI@bRg#lX<50_cQtQlPg;g(Y_tbK6pC%svY>5`4OQ+7V&%L*-Cu zcGY?ZK&?Ibgmu{B-?!mD@LfWc!xqdLZ)6ZFPIuRr z+{cHWTKCZDbqxczv@?FyWKON?j6H*@-fv=T0{sHPXOPO!@X7r_KJjhthk;gho-(=S zaw-Zv>n|Af^0e)q5A?_p8E1hCIqYqqL+&K*eyR1zc}j{A(X!_ZyN#YfosR%TbWK1z zd>J&+(G4+Q70r`Cs-9rJRg^cxMs4`9Q5!4gE|e29Y{>fYxC&y8gh+AlDMXh{@KP39Xa+mFZb=xoku^11u%10ad|96ss(i8>o3i6v+<0 zF8zdQuT$p81<8yWM`)XczV&5K3Gx zF&U?g0TJR=HTAe2Mr2b)a_^}(PGf$gauO!3B5WUDS8Y^YxJtsn5O1y{wb;Zm5cTCD zZH45xaX`0e8B`~S_F&{l@#btT_Bn8BMzzf;!ctsv4wM@Y&(bhM9}Ch;F4rZ3# z+hU|e@Euh3{uTFhPF#hqKyZZfzU|{tKDEt{Ks7M1(tNDxtOu|IDOgK65D98Yypcjv zv~9s*k2Ey45{4S#7W?W7sJFL=&<-5wCnU1wd(SOGtmrs*aF7bXdWmgyFv-UCO$AT? zK<`v#*1#F2X{~~JLZl45amX)C!hi@}Q?3C==scqadRXPmu_vJ^$Zji-4t4#*1dgW> zLKyi_2`X|^T1#;lMc0W2%q_j5M>^?j@c1}R5X>3Sk&Cbc!ft!SPmpe9h1gWF?dW6# zg&^p%;<4fw=1kCt)<+rO)Kef=_h?I{p8BI#|Z)_!j=c19S*wy8SccP z0w4S!o)1%OzW(iVDrU%Lf9 z*AXtN>Ue0MKFX-Z?_|>$*Qu=8e*P&9(G&RWIpLfXc!YAhL>o&WvZ6kI2~bwns`^;L zKIX*2c?ornD6+H1bMc&Iny1|xPn>`J;@rX8l8@Jl$wmmqNkNHi?F?W(f9m{&&piKV zy)8M%&|1=>yTLFNTsQ79!>bx@34N|X)-@z-otJ0SFIF5>-!_?fVm$tSvm&TI! zHl*+**DVWv9q5U@(-2%Y{8Vpr3i~is^>Y$R^T0Qdd#`sn?>VXr?~a0Yx!NiInezN# z==|d5=|l8=^cZuqj-Kk<#PE;eieTh}J}1k-FBt&CLTlND<1ivFPh}z7)5Kz52VH)4 zmSZD+_r{YPzODD~l9fc9t0>tOV6-h#1T*{+a{SJ&AyyjflfKiU{i^b8f@*KlEFuIZ zewkYD+GLzTlJ05gptd4gWUMgC^fQksLB;@lz!9xBD+VOv1)X4C_SX8*i*=;8OivQK z6EbpVH+Rr#Fn4wz{{mIDiVa;89iF|T zv6&iJ+e$EGDXJLr)ezj7>3dtrko1WHZ;o7dVPopD+h1P|?zMkQZTDz9F%~M76nCIj@Z%-(E#MR?*q`Fm0 zIN(WHPCcA(|1$EY6LonsMrZ!>nTBFYvqs$r$b=eYc;lNX+yMrvL&@XIo18VMAUFg8 zy0q&f{jX-*)K{<>rht8yA7ET)}dXfw+ogH08k6Do)R zb7-=*=_b@7@k`c+Gh1 zY{MY5xj^!-Av}CnXP@XS5!20#(mQYxQDC?W(N*Nu= zocdhRyr~e}0jo$&7sVg33e_FUGzB zlS}>b0I@Bb8{G7~iM$LzKul|_ZHMoCc8IH^wP;`r?WhyDRaSLQx|_7FmYsN2WQZX+ zcT$Q?%4yj%JE)#d#3g9csKEB2n!I+~(_o;c!8EW+IV6-RerjEQ5wROp_?4%egQ4=i zBn0+u^7IIyjgPstkTbJbP7EuGcLd35NJ?2zpE#Vd*|cPUYRc<~)`ffoeswnLGDsDs z!5c4-&&V>196FD2X}zTPywiKwkPfzPug=Dlroq34wU4I_ zi}&>Z%U!JDy&7DrhBr%?<38S%YJCZ!-QfMiwU9ZGrT5KEk=unASvaatN}swQ4(zSV z0*ig8MASK?S*3)_m{cnt!WL!N5MP^J<>sO&2S^+q5oNS|5avT!y!I$b3YH;Mh3>uP z&LQl`VK%vG;X1exXMhgil$1|q^oDnmS|1!7v??Q6Ap<0!IP-AJ$%?rm05>4BZo~KK z<$!b8-Xu<2Wa8B*BU=k_`u_Xc1m%KNupzbo>xqeyZ4#W(3N%szP+btRG2M@qs)RR%9sfU31MN)b2n~y5yxb$p=4(a=^i(`YaAHB4xyb>jLc1B zQBSMH1!u&7FI5gS6&Qw^(KvX^LOZ?Z+HlHuZ8!y~rf^Vmy^odB)%rIGT)y*5z`apV z*JEadDFX=N;{AYb89hp-Guvk5iVkPNf#^RlaZP)aJPpMYTock$yXY~DW_2o1$iZl8 zCG}9|QkZdYNJ7CBQwHco=QhZ)gi&-3Iw}JO*e0YK<-3?=CY4-C0pOMG*S6W52Znd3 zI&O^>TA>SxnpGU;n9b>Oy6WN*oepekFU;pMFDX#y-R&n+@q_$oP$S5ZqnV+Kog-ed z#DOT!IXr^CT&jY8NSuvPGPRlN^G>SK!j!V!%iBtB)vM*CpmbN&^r)_<)y;Jw$v_LN zH$pU$AQCAPDo~xlvbNw{*A!KI5NQaH%;mUz6c=u<5kV6$s2G&CukGCQp=%(_|gysEeWJ;eXr#TVMaLfeeIkhrSVT1(W z-w6+}Hz}*ii3p1V^l3q0{(?2a)UCGy3G`e(DN|$;m@Yu5t#(}GO?yC?=NMULk!8@6 zBZenrG405E!4e2bxYn>ksAh|$??smCM5izNjQ3~5aWLcXh)`_N_`ASaITq)ZrQ5{_ z=%0RFzX2aWMFqd_h&L$*KPpaXlB<>EYT@v3cSVQXYbs`P!uGXD@HeL>H zf&-ZiwGCsNLEjBDPA*b}>MSsj)T~@Ficz4;R^jAsQ@nt|UqzTNtj-?kktWOBgTN7h zOnw>F*m`A6b3!=kLu;(7lM3+X>b|*gY!_y1UyW|dBz=t zAdeEvoz)KrHiGn|q{dSxMr&W`aTjVtk_Z9D9 zt3ioeIEhQ(Nq4ym&ZF4{c=b9kuc!(wHKUGmB559zFl{A)0b3K%giH}SNEPAgT%zl2 z2se)*J{Igb&}3KC5b6yDa7#FN8*$FwaQ7i*Wnt!oY1uu2P(BELUk-kcg5P7ya5?W% zQDNCD)T%uba@?doi8Yfw)2WA2@3S5o=06izkhe*IqJbLhYF1dmeH*5FCr1NH)=xk> z5hWL?1#N8jnM4tCNVUSOu;91!%Nf-9?93cmhC2jV!+#7;sgRP{{3|zGtPg=Xz#j1j z(0pYCo;`AOcMT?l<1t~McC-013}As%${h(A`Y8t+c#0qIEVWMD{p^WOdctSGR;a5h zNQB=rLN{9I@`-i`xymW+RX6?2)GL0)@8O!?!&OruTmMR;vvF^^Z5g>M)Hwv=Y21tyE<$_LPnH{mefD|cu2t^lqwpFsj< zZ5_1f_cHLxIJ9!o=jn`2S|`DJ(Fx|tuH^)Mhs zX_RPGfAag{U=*JSP0b`d|Du{OsNgKlmzm)5tUp~hJL!IW##(nD+}l2j|Mg~WdhOCY^Px+gPQ${6XVW~=C$odr4UmmSa}+a9!V3fvE33ouI+4U`YoZ4WV-2^> z)tY#g6|u7r3L7oI%Q>lH3CEUQNu0e_@n9W`Q<{1n1R{~b960*zU^F^G4g>4KT}R7A z*`S!t=pGwp{XF9SY5U2xGwvLlfhsE;k-~ciBRlL2aP*)^8Co2?+bZtO-l=%=5a-}N zIFo=q-`eYnQKVZUu>~L<>J|^e1Na{WJ~Q^3Mmu2(zphk;kD)+k!9-bB+lzmd7Nw6}rVRcTxEq!J)aX z)iu}BEYynJ^ze_n*VDV#SC}VSU485BbTd6X%f&U{MW0f+<=QY!;9qO$-D~C_>x&y% zx_ZY2%2@8M?r~$nTAq*_qlYU)_fB24hv^evA)`S?YIuAjiKr>|bTg3Y`|S}d#X zuGvbX{rV88hWp^}`zEE?MbpyO#J}hF;ncmSp;5-+Gr!)#ZFg7Ocf-H!p>0)dVc0Zs zpU(8uQY8!W1SYM-C4VJ*&)VABb`Sm=tLOA`JS_s=h66?r+~W^f8!nt#L$0?3L3R<2 zf)IHtc0cNq)5`(9>_Vz9cDPeYVVHzLzB5hDPNlD`Z4q74NI7{xsa4XjDIkI5fmn$P zqJ%@^)?DQG%M%lm&TGQC7)X{hivUN5b=WN9w`m_KN4clx=E^oVpa zt96^QlEu&aoPI}pl5%wmvm8+4b%|O8YIbj!@7>_!o|-I;T}{N6XZMc0Wza%Fq%+jD zkWhJXGq4Ft>PklIiBQ`*_F!nd*hro`!+9f^6RFm%6@PVIoTdw9-^jcPCj#HDCBzd& zb{fv7na=gjGwpx|U@k=r1+D8Lw11njwz~Oz`H+1m!Oqc^$*MP*?#X^TJ5{L*RJ1l z@9L-VuF=5%zKfLC6ym{j4P$9K=ekHcm}@#i$%ixWdTy&s0VM3Z`HIzXcji?Re9Rj$ z{$+38mlDObsQLc9O8Q1>o;G|qnA`90D8=g-&#Pk$vdWAu%SEH8=2cXUjYPb#irKs> zYAkKMj)Qr1WP`CG44emaQEv|C)wE~icu5N}Z;763s>I*zNB{$WsI_>F?qK*^KXyVf z@m)DujgNb&)7Q1ZUu+H_lRoE`W7RDwU;Lv_F&@z!l(sO1D_X%25yyPl7I)4ufaCN< zv3|l=be>31S5v2rL?g(c&U|v5U|fTt89IuCyRN6OHXA?~Q;$QKjrbCQyDD&_QPpB{ zbd2`!h_!Gq+A@%EAchN$?dvZj2@+PuVL3b{t1=~Y8)9!Q+>6YY+73+qLH~zf{?HjT zAvm}7M4>y?hZMVVgHmciOv#~HlKoslXvBcX%W(I>4I6CQvTmo>ZrpuvJ$5LH*j=>I2sutK_Y3*_+zKt644h=I+7WtIK?cZ6h~W=Ui;J!Uc1E*XmAm>&OJu zlI#???&KaP>l+4ADZgvp_u%q>Gq>}ctv+W*;^sM9z58x?oS;?92$7I870vh2gY(|y zPY#AlN#-0rgV?si@q`Lx$< zGdJ&f-PV*Eb4O^YMcje??yHfV1mghGT)P?7mT-(KQUdBqhb~ic=?D&Fx;rUn<0|nZ zKtnz@$norGo!uL5#{iXJ=ua={NE)ypU5QmWC46vtX_^m1W>@q!g?UGdPc%`ppNYl# z2$)o7Go`!9T>jM=RFR5EX#~KXsXR#4>p6L%FwUDC>XdhO!zC1@Et0Um6ZUudn&^I0Hpm zwg>Kl6%({OIOI>8yAjuYlawddH6MgVdpX5_G@8pdDIN^w!ks~-7xLmGnylyKI;c$N z(Y|dX<8tKpuEycwoo)WX8Q9T(^q@3XGi0gnsR*qq)^#!aN*2utWqDxxx^1O{JemLI zh%YnffC{6U+cV4-pAFz*=*JV4qsIW;>;-BYP?PigSMMhKn75zS4e-`Fi4f%aU3ge!BwsAzX(D!a$Ln zGCy!XnR^CKVdb*{;Vsi}!8i%Xi~H8s4+toYZcp3!ZbA4&p6e62IWc4?5&$Znc;#7J zig`oCA<{PWmar)fG+d$)9g-MUKV?=xf)LGRSs$DEzSaxj{Un7e^MI_hi*fUI2`;eB zL9c;}TsV@LA53avc~i3#gR&xxlv-tsMmw@X3Tei;em*T2OUe-`HvLe?*G*UP38F;0 z^rbb$ph=$aXj-Z{I-G6Fvpz$Yml>!WFX->c!vL7oo?#sE>=4~6CUj1{4IF^^jXXaR zHZiucds^N0-3P6^t9#mQm!N@)PAs2k<8(PPL@bo*YnPFrN_c>oKF#9E(_&O&k{>9= z0*;FfHWc@-t`ytoim!ZIA?F(=@f2pFD%$8If`5!739B)EwiSh)I5{WJ@YI@mWkgh; zBQ&zsiDrX&25q=*OFU)T5!l58Leo8pE?GOvT5h(9+fID5^Ufg4va!pDLB28q$OyNU z^zlr3l7?*NivDrhgR#JtC1)_7EZ3DLCOFl->vyWZkrDxXJ9yR*>!?IDb|{d znBG+IGtN{E=DaE&>&WGZaqm$Iz>>kz#SW`tvr!U-WV$+${H@N7U3K7EalP9$ZFal- z^WOFA&1sZW!6oCD%@@kZ=T1I*rh2i=(WvKi-BF=>!TA{{T~_RRwY!LJ4x1wzh4woy zK2rC0QEFFg&m4z*5-c-4vkA$s86wuXPLtIXihBt^sbp2TkDmX!1}|V&gR*kuBdwpg zPEzd^J5y4XFzaEr4Y=6>3@GaJVdP)72B+ znsyG`ik{+xhT$}pox>~ukpvD)t@%NhEbK+w=v_?<$me9#YYS@E$l_k5lsj0;E&`f@ zXp^G@cL!yPVzi3hxh(sJ8{wM8-f%ijdNI0ws}rj(4(PwWJ1|h%`e(a<+%RhvdsG0s z=#SFR_6qUmWFT|QJ}_)%*U|k%o>~wglC*4U5gJEHAdan!vPGM}>_j_u6_UWZ7;0FY zcJt_xRM~Lni`&ru%(n`u>%3k7pn@6YOLv_?q=p zREnjh@M1KE?0{K-b!lNB^$_6GEE50iFx5kaf;bE_7R*cN1R#6acBQ|C-)ZY`nLEmq zEC;h`EhEw4a@2xa>y<(C=E1VB$LPisHaJ`CZoelRwXSTKzI4)~Tkp<&N3jld5=iDa6Tn$QKsO(4n>*PB zjkpXIAfg*G(4S<^b|-nITY{TKDZeWf-Hr+bPVYzkvArRz3}BzS?ImW%(DH#dIq+b~ zb*hFC;Z#ipv51&G7CykpE*kjbAE)p%Eq|Dr50dYAdCXm8s@)5Fw6|oJ_KwWevRw{} z=3~B07y9|G*8}r=*#m|4op3%ZD2L1gx#bxVav=%{wx1u4z5bZrOZLa{nZN|)Z?9%! z=okFO+SSFa?+nUv;2ar!q27Y?5+F>(A!-6`57I+&pqG9w!e1oR9yaCLLFy5bGvWx*QRr4Y49 z)2%#opCznOBZnkt^4ePWGz5#0r)Nt9NflCes9J@0OP&6`nM*clA2iI?mfPI;{;{VY zy?Emt=PeRU!Wpd^sUN60o(}rq>f)2MH8f1M>8L`^8L_^Kz>uX^b*4LKo#J0I|S54{L?8GoT^txbv zBYik-8eQEr2{z^IF2j;j;n>*Wr8*X{jzi=eZ?j{?=nizO?C$4C9lD8dEhrv9xQj)kWn7a_>p(> zw%*NnsmOW?XsWY~%RIc-a-5hUWH_Ep8BmXC)iTWIB=c`d^ZU+lG|a`c6?e1DWSV=V zUk-yV!K1WwZAj1_jmo@Q!h)#i44FvsWL)L5e!0qZqru9@?V%39dl?(c)Hd@0iQX5? zdOcC5yR!@gh#X`Da$9EDO0XXS3XhLteip zxkd7bUBn%}g}Z55Yr#Q0`FFZa+3Kd=srUpV)9;0_4fP(Zchcc?ZLQZGP?VvWuNf`f zt#ERZ=57sP8!dglsk$o9!;>P9=Ny=;dBiS2=Vt|LOe7$+VMCrth$(@>7MCfNXXMC& z;w{hQG6M?L6U%ESUJ|*^RJs@T=N9C;TbJspXPuVWK3H}}%t}l++hC;erAhf3*q&~e zn1>3V<@G&tbUnAVwx-^_uuHeFwvF8jRIU&BD%S^A&RrUffs`70^5kp^|9r#(r`GhY zd3x!-C+pq}3u@%k(T`AKygb}B-BXlm%XD>vjh!QY(>53YMHgikjMA=t z{HYpI7fVpH_zjHGc_YfemD611ed~i3RHKa;+C*lDN>oEOq8W|hs306lQtyNVw&}_W zNaZwh&U-$F8V3Dy@g{)@^7Op&R7)4eV(0bF=9W&Q^s_XbWZ5_MQ_?`8jlYI5J z)Fq^Vs!K#a7tCgaPqs;n5P}@2geXLYatOfyF$JthBNgXuBEpz!19*Qj9thu8r{)pf zm>Z=pF~uEcP{c~ftHKpHPSvmhoD~GC)=o*{6B(;Y+=r~)1J6g8s&JAOvXSsTAf}6B!_BZGwyp*(0jakO*M^CA zv1f^;A9BQ7?K6HQiqnE+qv@#}b@ApWw(~DBwjgeNoo~{4^t zIYCHsg4%b1^JE|k!K2^^)RoDK1km#dHv7;mUVD>5M5Ocqmj)DanvkGC#s#u5#z{s> zOz!0(vvEJ;N;-szFv<6e(u~x)FxHd(ydU;r`6|o~t!m$A_xio`s%h>;#}F16 zI77lyc215f^FvN>vvZpgVmo)iY{)qJ%GgMBL8R3oEhgoct>n0fEbt~NQF8$BK#KTAH+WQ?_Wdtkf6ywI_TeGlDCM}y*L~lUr-e@R+8Wq6DsQ5rC zZqA5HTQ_wQ0}PuT&};(Sq$D|U*;Gqrg1XF51--%aAx4M4`^YW&ZPT`%}!9@Jb7RG9q+rv&EmTtKx&3pI)F|9Rm zS!X>$#Th|s)fryeoC&F9#EA^b?q-v1P)2Z00l1~NF6OLG5N6+z|6Foz#a0!YOU z$P2{+zccn2k)2qnaa>*>9~fxmp3G}%YNL8kA|+4-)c#C8ZIigwcatYap3Wf+)Kh-U zT-f-a*0`O(v{l_K#$%1D1pqqcOR*OX*>Y2ZIHFzXIy1+S8fQd5q8sKs^ zwoIu*sCOH3$&Ovxu`5LWbgZd?_ROx`t08WVf>23+$A{I2U<>mphuNk#J<0(OjHCpF zsFz;{d86Ffsqz>?voe`Oe|Ph#A|A3uI>|84DvT?)RJ{haK>80RDK=<}Xp8mOq<&cM z4%Awpe_7&XYN@epG!!dzWCGJtg*pmTI}7aFs5h!ySJu*2w9}#D!W@vGitxw;ADE>J zK2VFf8OZiZmCFW-PADnE@`a8T)LC%MYFZhP+>fRj-8wqjF6Fq;7a7=Ys)kgborD*O zmqX!~T5WTHmKBYX^A=DEd@$MWW*YU?C;nb35Zxr?BAgb}ZhWW4jOf@CfA;KUfssY1 z5xgKlg&COMQEit2=G1U#xO&4I4vuPf*v@Pqw;23Ww@|AO2uePIJ1Fnt z{q5L2`YgqhWoiN52j79-MeOARA%vdE&9aU`tn@rHpIU`>yEY`un@B^#o47tC(@lD4 z#zA1R(eDSofi~`R+q+TRHb69X3Nhu9B*6j{A@wwpj=sB)CrPP0HEs zUd+M81zD9^zMJbPP*&g=(7Wlrq~A+P)3^l>i=mfdomC56jLue^)!mt2`bi^ z6JizHf{kl>1nN80LDc58uCah&=r`2d?8;lqeL%WHoIjNq6l=x1%hc9MT+ZYMxzgj~ zynPZR-QuliYPGI7k_SUfD;!~K9;L16hN0T)OGS#gbbEZAkQ@lrFl7}CA6!KBe8agRjMAr` zyn5+fo%Ef>sBgq;5-5<>Bc6f{$4rK822!yL2Q?z*CE;#nEZ6jIjoE=XTXJ0wObYi=gsHA}T=cS=wk7B+m;xJixhfR-qeK z$AR02zK}kuhi*BNVn-?;l_LQW%BXEDZ4INao>;)TdM>jT#nfAfVv4IU$A*2u9PW99 z0qU@FKe^wH-1Q`b?mMkDtQ*M`Q@Y*pFk9AWp6)@_W3M$*y)5GhXY&-Q8K4JgYd@Qy zchnN+(*qb1i@m9&n3N;raZFu>a!BT??f7dda;lWS2?6OBjmQUavJadSRMU_i&IkEa z`IG^Z*e?K|p)@?Wz3hqggNnMz!~7ZqIFVjR8A=C;P0BBkVrtPmz)x=;&;_hj4*KMM zYGmU1OAK$T$Xt-8DpyRkDZ)X|xpGHvUj7-V@+sYWY7*?Tw8eh|?2|coyJldE6+r%d zs`fk`RceM_de(9;XZI1MNTOnrnN0c++Ul8X)F*;yt9*uGK8PVC%;$?qu^J z=oY6ndhLlJ7d*zcxpDeZV4GA5v8dCznkEmaR~S>~d7R_t2>oH=OAzps5^+d$Q5Jde z>5NFM=H^AoYM~q-il3y7Z05R2-1k^%p(Q@2T{G1v6hpSzG43o-dvsGIkxyVdoWvKC z@j5CL)rnCgG+B%=uRkMo5d0Bw78?Xe*9PT6MEMd^E_kM7n_=8C z(l%i@*l?@dB7v){ct;>36R&t2j@`3)B5b@C91Bivxe7-|*BR&oJ#sRa6X34cA>JRyU3(9^z(9DB_RDH6#T|IXFW&`n-Slb2Devpgia% zkDCPq-y|R-<}ZX{^`Qcj{h}P8siMR@sMTyZ<~T=$wuWhhotU)p?ryh3+e^fNO7f1E z3cfONmwbjok67_db%;t>PAF6Z60D=6&Cu{OQ>xE>tFRZP4{bTlj9m}og(zxMIYbbu zSVAKqV@~hBy?r5(SpX5Pb{K31S>;55CweCqS5^)y{?PQ6ZzI1Q94C8tvy&KFAhSND z-_p#afBAbU=o0#dz2|LZb?Xylsqrr2y@`U-j8Y;TO1C~bdNe1zZ$t@LM=p!mK1ZTh zxeV60lT2o0o<>WQPIN3qz!wTFN>AfqB>aw)l@OImdPQB@u?8Aq$gqkYb_8huG~FGP z+mP4Vd`COf?$}O38w;8)tjQ|P;U6%sDm#hXY$^CGohJ_?WtYGk0-c}AN#9ETBdZ*x zc&R)HopXS@Vv5JxQPL#C*(3!IdP>nmJ3mxABTm_%mdcqia=Zrz`62tMjtui{b~Y>v z`0|gATz_Pck`jajN-oH*39shrre1(Kr@ci(eXMf2y;NP(2-D;=#LsHr1J=_NANj+N+_tARN2my+Yn8 zX=Nm4FbnLngEX`%HeP<%$Qmv)i^XWCtj!`kw6oZ`?&Oqf9dzPc!tSRmHc;Dy4VHBC zxEqD8Z#dt;9;TWL;O#m%LUH0q7qdQ%S)dSOO9t2Al!BCLixV?xsh6o&1}Dng^YIF- zAcmQ5r&;f2;$yDkJe^6f3Q|$7*#z~x+_p(Zg5z1XvMHuJZExy2)@{xv4?UWtu2?mj zi6U#48m2>w1|EW*uli@2@3LcP!%xurxVKw9&kL0x0J1Zk23TpkP3qp&jL>$#c8-+6HVQJ=?cMO$P0^@>CjLpum zxcEub293#Ut)H1%{=_AX@u@ggD!Uhd#HjYNL>uqz8r7!TT#;?0B^|oum$PrxR8TT! zp2@*y8xkh+kcvVn`U2W%n+QlP{yQj(Bo=Z}SiPA=JOIU~-#liuz}A^+D&DS>kUN_7 z4P&C_*U)XpRiQOq=Y)+T^nGG`5SS{kGYsTUUYxT`LA6{T0%Mu-v=>nDo2{i^-Lnf zNHdyA3*%Yf7MPTpgSWa2;Qw(QLz5p){X+06I|Ww$tWA!6gF%Ca(O3$K(|+VJ0L;K* zH9|OIaVR#-hvThnb;}NClJ6GgYCEcpMqVsdFOklkOGne{oODTbPI5|}W&1Z9BcZ5u zkDsS4SjSE}8{bKC#Ff|S&}`g9glgAkgEgd?1jvYDXMd^Ls$z0fW#uT`OPzFXmLO{- z3&g6q8`JlwV@;{bnbQrxs=bew9a*ESqOT|T-9hPyQo$Hnz1Seg0cQ3#!2o4b5ksGO zs2HYZt;$vWt%&rqQOFpom^ zP;>-V3Eqmy`O)T_W)Rht5z*e$9kqd9<>XGXmdsV^0r-tdux3gYw7u(00{#;{dGYo3R&Axm%3!gn# zZ%sqoP0rVxP`N>wZU==$fM9t)iDj!tEt@nHtJXXFd}U5^WDCXCh(*BfmEA9Nl}SsP z8P_}h7Jvacj@o|XyQHHt!1_5aVcz{K=ioNF3NBNt*`OTdJgMvF#A*w?)$Sf%TEMJq z=YUd@!;U8OU7&i0(|m-Qx`82PGc$SUy^CI-oGBXttk8j%RRwH8$0&LU{I`sNils*uhE{W%wZsh zrSzI%daLW#6)eh@)g2>DMO1)UC5V1-N+(}^EgGtGLPN$E)7Q)wCQl)GVHR zn&;?;@i}GBG==|6d)DHO$6E+xE{gE7rGW3|lAYSthPl#Gc`#+21R@?d(x;dP1z~#; z_)cawgvw~MR9KJd%67g-kVlp4X1cnc+O>Cby*)Y%C|sYpHpy5Lc+6b0SF^n{rz-RT zCh#G0V6m3P(UIr%=^yDHVUlrNd)$Rz-*T6qK7ZrV6PLE+dXwMk-a>m1ij5SjX$6Q+ zhglb&e0`og%buE2yS1i!g7;91RctCQcN?3aoTH8+APlI5B%Cw)vdJtsw%x#zgx(f!3@tvFU3Etb8HOO z6SFwm!Y%9D!#Z+_QaZt*dI-D$K6W#Ol*v2L_RSMl4I8D-Me8w_tN1OUXETQAfX|ev zCVe;fcG3^jQf(`YbF1d(-D=hQfX>7{qwYkG8e^VOa#|Nn&cL+n$3n12l(U&Ub~yT1 zTd&Q>9%so{55YSFRRBM7;9`hhU1N+W-P%MR3mH_P zLifT$i}ho?gtMkr?PRxv_D1i*u9Su)cQ+q8o$-G&{IPS?}vhT5ZHCukBZ z0an{6>uTl$_ifLxywltoF};S(M5Jfa=hJJe8`sT0R?NpM9rJ4)f0+)gbf}>GxweLH zu$#4a^wo47s-XI&8!PFHY9PTOsC9o^b>G_+POC>Q_OgRqitmnkxZxf)0WBn%0!`RV z2q%pAMRAcrcWt*-Eca%pGt8T^B=d3acDr)m72tZvYG9-^XsZZf0qGfdJ3>4ZWlM-( z7Y7*=cGBn37od{bh9Hk>MsY4qIm)EKkB#T!7{6d{Jay&C$DgwI3;)zgOm^MS!M#(8 z8&olz!em2x(h0`X9UOHebYz*HYy@4|SkRZoZjknneU43sk`~OEdEcMWRTWtQurqEs zm>^0)j9=R{VdBdw&Pp~ASdqbi21GBb6&~N&6T>5F;;p;W&Gf{I;b7G1L7#cU3z^L@ z&I)wYd3IL9*`_dlcMr(!8A(wtV1$`AdQ`EupmwIlxKq?A@Ldqw1r|ILoip7XXs>Jd z5P9s{zTb505_L}yUk}jl`Wf(7&(XDdK*HJtBiJ2q)TC%qFsK17W^cKY@y8H9;Z20n>{Vopn@HPaA-xLApyq5mAwn&IJ^ZMv))Q0xBIM zohwoT!YYVJt~8R;&C(%KA{|RF&63OJ{rJwg^T)mC{`1~BGw+-`^FB|_z21tZIFX)y z7sY}6QV+!t^gm4HAU^BSjO&g#mmxu1hzjaP@KMa;?(=9CbZRo4v<%`dkwmbWkVrRr zUTOx&01q@=AXGF#k!oa^TC!)_U7bX&%7?T$^ixqrx`h*b-*8V`C>D55T(t z74|eDs+F6DJ>ZXSpgL>6Awt?vyiZu(=Gd#pYd>cBc5C^@KSPi0sn36Ms>n^b9j`2c zZw$!jZ9Qo!@H!Zp5q2`A5q4;#I=Q8#Ud%e5W|2bGy1(M+H+xN*Q{Qt79vP|d^MEP+pCx31#VP)x0z1kI|pL5WC4Ts50BDP3TM?09hNnVC#bZCwuQ ztT>mWf5iTP@)%eVvi02gqsMpO-cnHoaY|)n!8iXrLX|$#4i(4jq`fLvOnYe;PrJ7& z?~R~rX8cbD^(Ou1Yktn}n;WK3ZLf^=1mzqFo81aj$o-IK67C$i(jJ#vWsgw|KL4U` ztP-|FNU+Kdq8h!VZ*%5%JrcLSk{;jhMFrDroxNLN7c9nf-e4P*HvQ~7le~7}i}&Q9 zxHUs*2~GZBI@SpkWOw)7)Ym!%jkx2C~4vm&KqF3Q1;$RLj_T!6vE69@JcKY{+*0Q=gm7;zMj* zw>~>@|0Z!J|JbmvV*4jBG}~LUb!{!Yd2ua6=bmei;N2LvTHKSGal^u4_cZp<>_zp3 z3)tSbZa1VwSWzL}*nrnKt^edpsEcVu9!Dr+1FyXH+x^^g@8#46Yc$?8orhZ|)UE3a zWnx3{&TKx@u-rEbCGL8>KX8s5z&FP2JD%XCj z{+Ew}K$49b-`GUbb+KjS$oXdOQ=>N1wrIi=it^QgLH%-Zi3N*v zALnWD-Ploo3}x^)B&&DQR$d@n%#G9Vl{8AZu8O{yTVzXPhiQv0ansW=b!AS{&tZmP z@Oy9An1ZS`-1nC&_imE->z*pTFvwB#l?&%*FbX*| z=AjH?{f=mIvTs~$Cpw1EJHF;wv6J`r5YiL-7uk>@V!_4#UXm^odcoGIQr>yjo+ju_ zGqe53|MF#iIi2cb@VP!|#~{a_<6E!!&bl}h=APVoRUZUR$7&8&H!{VN&0Bd)I_k{Q zCEUB1KQn1zX4__e>^oSrRJT8A7e7ZJ=lbI48^fr)*6UtVGMk=B<;pB~|6z%Jmk>9t z*yxLkImy4Ctz44~l)!rxrK($PFEcgQbc`Qiy8=$EHpE+VGd-Qr4?I+D+!X39`en^g z6hRH19|?x!62^AU%JeV?=iIn})>ghC{GA5Ky)Xvnt|Q;lUi^=T?P*fR;KCF?nO{Ym zs~$&eakV|Ojw2DaAUb%dKdV#E*mqE&k>|7G3R}-Y(wfT4JLl1QFJ{w*@E;_kHpX{f z--G80!s|Hymfux^tA`&25N=z_<@|?8LQy<6T(B_`{zoCvn8;kH)^kT1Q?grtd->mb z%;!dRMyr}&ukyHdi34W^FLTA_pZ~t)H%ga&|9KM_c<7c?p2K~4TP-A4cUoiqxS@cW zDq&=8{=>TqhEKuA+Dc6Pq2KL0rUb*x)%%tEyL}SsXmq$N_7=ZyDjhFdPv%o^%*fKYhZf*lxCF)PE?pbzGSa zt^~D~5O+GU1?U-pWm^avzllN`3V$ugaO#jzQRNM8=M}rY!sJd5!kza!B%#uwR2c$( zNf{5acDZSbsi^-`+=8wWvO0F}oiWvb51O%a>_T*Q;duPk2r^}aNyy-*==fb|*4btA zZBbry$v&^M5h!Q?zmX?uy*se5KvsN*xOwPpWm|O2Mb9EF&u0mLE;-|Ix4e8vu4kT{ z;jI!m@uUj4Ktd8g@<|F`jsKf%+qajs?PrHqgD+Rjo6OAu^OI!HkVMmx)#D2)qw0P5 z+Bg=A{n<7%dxTK%cRM6GL)*IVml%6`ETvT~#}9B4G9rtV4UZQ@%Q`&fY`i9Mph5_0 zAbjPc#nzAPY+Zzbeu@{*dhUhSkx|z~+d~O~ZV>8S$t^?kz*+|>1*O#g=1Z+)|GL$X zRTpdTSdUWnAMMa7X{nz+JqvPaPP{%UXvFMH$Hya3RuUC9s48=?vJxV)yeJ7MyAlI$ zV&mxfH_tDq+n-Q13QV87*t?iZ$yQ#LexUpNW`&OGvN1N2y+Cye_wz6uv2^woNxi_c z^#U33oLw*y1W`^?9~?Vi#^zL}@IP8a$b)U#nqz6#-0m8)+X~~VN|gkHqd7T?xvUqp z5!2ES4s2bW?G)*(T-smG2ZsN)1>uJS376i$xhS{=7c1XRL_+}dc#blG9-&113B#7v zwx5835jgSso!=6`={P10jOiR5l>oX0uCOp%3mn4>KiL2-co7)T3OW`bBHQ4Ez+!+X z4>@mwTzC_a0+@CITn!k*2uH~RCkO(osqVyFRs_ z^T0476HZIx)xLTTMh5_8(3sPOSPPFp=h}K$!q!S_ksS z9ekAs1J=M{C(d@bI`8`tTV`;q1Q;C)$-wKK?gxegO+XSHcml$i+W{N>w2*L=02u!r zg6}zlAWz%8iM_@^w{iFd6!P-4N`Tk{a}Qr|UqMZ9!Y`=oPUOL7rm$1uUPCniM2uVq z!a7cz!j}kuLeIisr#Qsq8k};whun5Gw(c#;sxW zBSx1HH%0Bv%8qf}Fx(P?SeaJs36#v2gK>KxV%2|_Wl%VtXdX6pJf?;(0RO@j9~1xJ zfJ<8dWgKxiK!gHI<>-j3jVhoe4t|(ZjVU#TjJ5$6Fj#=v6)VKi`S2$i?zqp_562_~ z9)@keF~89Vz`!#2WX~AL8ONQPLxNA-!42ry&XZZ<>1tcV#%!k&?zg-xzO)I@JlO}3 zYt{HYSO|d@*piPRxFdkfP~sug^_Vzrbw6WVRq0%U@a#euzt{{GEH8S$A|b$mLQG&6 z0D21y16lw$83aE6#|rJdjd{Jgyz+LpCa(HBTp|2364F(*Q{!|KR@u~s)?wr%CMQPJ-35!UKkvH59u?^Ca(rjylh##}w? zVhR-d&S8<0cLM|i^_N)opVhH#Jx5_Gdx4FnPOS7G?DUlm=u#0LcB%|Nd!>Z%nG5Y7 z?A)4yA0(x#?RP>@K7b;o9E=~Rz5?(yRB)eDG02(-821X;&QjZofm~fl5Y`LiucxUa zTm*8YGjyM~>A#2rUJ-B17l{?z2s&(-SAu{uw+S8*RU?W8hOgMd&esGmoy+h`V=(Tx z5p+Ujhgma+{QVslv4a}~p`-ymkEYC$(Li__E!hsb5+(Z*$ zA98-;evC^#2DV3uCB*I37AnYAAmkVvwpsw}9@_<9b-?^Cl$8mvt3qdBejL(&PF4*J zf-g3kj>FMuf$i)4kP|XQFaa4sIF4|+xUQ9}1Dp{r!jZ#AgJDa~5M+8dVHSQA6$n`w zT=CyhmIJ-L?zL|S>?dE)NghDl6d_#l0{zOJ$dLs^Y6DyqNHGQ$fkknBuDF^Y@BKRwf?fa-&Jcv3pr%Vt(B+yuk$}JzAQ6`_=AFl(5xZbwIsO86E-g>Q znu5_eU>}Sr-2a$tx4iR^HUS)dWCkg`a0aHwfm3J%!CAEl6PSymb%vvRtDo6*q}UQo ztzkg!`1Qxbp_EtfK)o6OKNPOMayBN8TyCv2Ma;@GiZ9`(0Rh3S7~qgVx%{AoIq=0w^3;9&z4wnF7V7 zFy`<_%w)K0Va$m~u;yPU4Ir#7IOzHhDUjIPD-i*364t4JKaAdCligSF+(lwbj=62{ zRvhTW7jgm*1C)s?RKPl-6Nz5A8bt&kc8&4F)#2O5Kw`Hj#AyM%vH%tV2GT>|Cv6~NkF;|{_&!9r^?F*xR_83^ssh7_NccXL+Saf! zb}|*R?F}c4hxdCE577`E+%#nO_X;e0a|MJutMulx+gU-lg=<~FfOTMGCGEYePlJ0? z*`Lbk#)sctaFgnNxUFvS@~$Ax@dmFthlYXX`!Ap4Ey>9X#r?aj)GKE?{u4XmU7xv` zKYOz=;j5d^;Ck|Z%$z1)fo$p2n5X9uua0vyz&}@KID1QZ@sA=R`z-vp&0FfEyd~fq!%^VV02E`{BSo1fuRua=yEw`AR&2zY#ATRcyV7o3Vudwl=3ctaB z2hN_bq~9ybVS066+i|N)TMOm=aRGc{>r1T>_G68|Fq@R)qvFUVW}JsU0)KNdhoaGg%c3(l_nFL5GGEn^B_o}GnEtb;+DPo#s3s``2` ziPb#!;BV=xj$qNSl+ddF4$h_|QK`cKHhIwcLBsv3qo2Dra57V5Q$vXOii&)J4r-G! zd7O6IZvLaT^q^=W(EiP}Q-=8B*w(8fV)H1mp`MVxO2Fm&ozZg}`z{R+ZRZ&@d1$Tu z$%q<&QM*`hZDg35FbSwU+B@AKihWu<@I4Y+ZXHYK#IM?C_!~u|ca%V0*lW9i&qeK* zMCd=G^URrkq5po`Sn$boi_L|MFAI~pYh+_Cg!b}4eJ^cPhioQ_1{RjEr#~CMMS%!w zgKGO%_!YcA-PDU?gbgKs&N7!@9j2->+-pHG&R%E5=kFP|U?r{0JLG`ZJICHO=&(uS z4S$;XHJ*J;TtI4Z|LvV!OIT;o_=MGXjyrq9Z1K?&T)}B)lCv%>Ht3IluY_O=W-giR zsJnimmni`L=)98zWtWGbAgCJRiROHuC72me-wj(4zvR3CmhO8{&D$}s4?ZIER zl#qv2OD%8JCryO+x6E?k71r@j@>Z)y((Um4xo^xY0*^I)-c4_LkJuQSHHh60m7=R} z^N5%Z2qx26H3?Ktg?C{%Cq7{Bn`=`AEqZT;-ff0Gpobntlgq~D-QMAB1 z^cWOzzu@HH=II+#iNrM77Eg}K^uONB@^D>#cPDP!=Wp}Ddl&)@V)&iebWu32@$UFy zM3_z~e(xUzj6QSOid*h>lf$CGMN$>~Edsr(=!8dKcGkx%k#OA>{(EWas^EGR`!C5Ku^c$@$5A zY=>*AG$#^_P2btmUQa(zO3Pv%ZU2W-Dj z9*S!keu zjiPxEO#*^)Yh}D=`Up)_q>RFr$8>5;W#OL$LSu?Xi8V^=Z-)u5cs zT)N7krD0DOW;UEM&M-pdt#9L>M;F?j4j$u48J^RuqhXa*(u4O+<&kd=32$q<&M+;t z`I%%Ko}gkw$Z6t=AqDCm~RNa zF>IcsLCf!?_293Q$!Q)EGODap!ddX^2p+B#AAgki@X*)RslMIW&VTE_o%$DO-o?&b zY-t1_F&f{y5&j5$*D&*L*6TL?hTGo$sbCukS8F@MB}v%jLLoAB!%l74R4(*IyKVP> zrp(n3PXku&wzr!!T>LiL0F-L( z1UM9)YwwS0os~#wMHVF;!91;hd36k9V8s<*A;A$bO}NA^3NZ>VvB@WAptqkOENc60 zVu&SgKEr6$i= zrS(slyJ9ZpY7zH@a{CRaIUI>g->dPQPgL7`r6&hi+zCUy9gPaTXqYm-89`ftuf`Ya zKcD~dQ)GM|p*LS2lghes8ax}0=Cd8qDPhgmpdC?Vu;Z%l3E54~G?cA#a+1F?8B(3LmM(zA6+H->)=hs1=k`i875 zYwzk@bzS|*?RPi*FDS)l%su>U?B15rKpVuRv8<}o4UQXM2_4m9p8C@ogzgPE9+9{8 zJ?wV%()~Rg`qU-N_K8^ornoezLwgP~=lMjxe4a6_pQO9rr(-_R&JP0ooXWhr`zaPG zQI%qW{hIEJ9Bmb5_5K6iU%RKoTDNBcB#KfLL;oY{&(m$Ic&_*!O1)=)zfx>~J=uO-ygKGHka^ksjNa0axk5_Hf$ zHMZz~oKAiuFSz|`W+e9f(`e_OW8wpGMCe^3FC*?gx6b|*e&N#Z;j+gb`RnVaLWU14 zrsSrW$0pHjhX;-J`p=JD(0{}odb)VYbY53=-cq{y`@Q$z36#(t^kv-Z?I+?V|IGw7HDh>>B;+x>EBdF9x=c=_vY2~K(pp*ney_D z7L{{n`!<(-!{gm?x)Nq4AHmgi9aLc|_|%jY>&jIsqtD>d>-Sc21@I3-6A;|y39OnD)BH8AW9NP)mWo{W%y(Gs$NywO`5&)7 zChsRqT|fc}9s6m=@TbC!ki<7#fnm*w`frJKuyyHN24jmfO4GlblINMw{eius~;AyIhI+BY1^uCdu@&~mbv){|;U)u5HhM0tQ zbD7--P)ho99;(9hFG|$(^sw|#GVc-{roMhth|1@l^c}2e7?c#{QD6#;6Hd)$W9*Rp zi0;*O*rB4H=2n-a>-+IV_I7OAk6+c_CmsmjQe2rkwY1=f&3~l7cJSoAj9p)-=pJ%5>vAJUibavk`zgJzfLW@^>Sphj)sGl zRL$iD!}G^;k}(PYj7iQk$--1g9&0A72dPwjxk35yb^F8Ak9Uh$@(%p__e8o?eJEw3 zoL0RQ$TD>H3meA|<(?*!qga2SX=F;ZNL@1Cu_V(%B%+ijeAiH`}cl6$i zP^sj4OwgI|_O3MfzIOf1tgl-X9YT4&k28kn1Lfv%XYj7^5&6F3%C9HI7)Wys0Y-*i z#(+y~s8ciE5u!cztxO(1Z7cgvFXi70@^Z~Dwmrra3>*)h*yVoR=Oo2-E8Yq%()?3A zck@14l|JS1Vb??R#2@~4cW4k{43tuSf*)89m%iOIpwPNYL-T<5!=E{m_L4h!)G1F> z9*S{Sk(+Bi38)khjWwwiEUU`=eDBUP4i%gHo+pl18Y^qR4wwWpJ}|Q<>Qaz@Pt)x5 z$zuy!bi7A&`#EW)lXu!fTEw&Sj1|n{+@JRt`%EYCFEKiec{2tKlpmt-bc z>gJCc4vVEP5cMX@S?kK~K{?D#%u`FnX9PXpO3a%Q8B(7z-!Pa%?6NR3Bw@Zz46)Q6 zb*W{NPW7}uvXF|Aw51H^Ui(W6#8R{WbQ9*kp|Nq zlP!%|4Tcbn+)NKD)uZ^=(P`B+fHqC>eZ@O@H>GJx>`Ttuc+5xaUvY0x_YrxkUPQ6; zAfvHb>H?b4f^r;rky7ef6mHaY#lBFAa!QK73=8DjSqh%df7m?}h*X`5lq2n<_UL z8%)rf?^<+>6u3kK`ajN%XttCjhaZ0x=*|;;1P?eLPOOqKM&qZvhapGP zYxwHPtQAde?@Yk9B^Cz}7w<)k0y*z2Z%^|+7~-i0Nn*J;nB~4v)rZiPPO2D`cww#W<)5YSdbM!d#tokoE*O+j4O>C4N{L3DB4^ z5QI_ujq5X+d}MHz7#9T#0~;3Kf3P^lSnx0Gt*Bvd#kto`5K5Z)W142QHo32x2u1Hl zHNS(x$5PScW{w}2_^WOxrbvF;X7TAY(AMvJaMw$k!zG<5N+RYiv-sDWkB!Qge(?M> zJ6shZsf4aMHa9p%v02EoS|v6(VSn74r0=QJ>23JtJxbp2CNe~w+IG&~BACNTlik46 zmt3##Map_%&Fi_6-8Zis@u=cJU*}m+j&oDa!^WCuqC|Jd4<9J5ppYpY-y~90hxg%(DWn&;?Ib zs**J7zaF6j6fgsK>cw|-4LBJ31hef>IRAB}v8cS~+Li3l@8$9-H7aQcgEjr08qV&x zn;W0#>1dODq$ioC+b`#L&(o@UF)*xLnCP4K=K%5@JrYuNrVNZ5wN$)y`;m8vSd)9t zj;Ai7k!5C4_+BB4CHZ9d-?Po;(P$qP-e%^)B<{f|{>|2)NR9UQI-%e9Q^;dtb%IVX zG`AKnUAvd45ZUS_h{Yt@vz7d!Bj+@oTgT~mLR>GzK`O{-`qGH7JszMI&T_M~2k zT&5Maeo|d=T017Ffi?5q*KSC1YsGDcPApAVLBZ!P^WQ5)x^QK^sAYq0~f=9(HoLgr=?+($ah z<{Ad-AhEbK%1*9=B*Ly=WwO$zCHn5t#=AkNNZb^RdqF8jUSIl=u$ zwhbmi8E+khuc_vrFN|i7|Lr%NK@x0;a=(L835=Zgaj`^T?Dznpv{la1fu zCpork+Z1`Y78$UW=GJ1Pr=EGUAtBns!Ljetos^F;Oq$HkIn=dTcxX77Z8TiJ8?oeG zENs}g={FPztpKRHma%4~Fu>pXAEfP*{4PY?D3%DR5Uby(X7 zygDqBvUjzm>1H+i7F=oC6B*}RVa>gf3FuI0aCX%)pnT|Ji- z(J$o1(a!HpKA3#VNH*frP4d|D_&g!$xo@DaUMH1sAa59RCRkka%_lvBsp|uqj^u|p zHY`8JUbQE`D-{{$Bmqk305{-OjS^ z$vG+2_-HGT75^AzVwt=bc8BT>MH1Orv7OIjT_r8HfhqQ$mo+}zys)19PcK$qFITy3 zygA8qa^3sFaN0|1GHp`j7skVwE8i_G?Z*>;)SX>98gCi^GN7DZ{#AF8%ONJ8LLb%p z#YcgTmy)-n!g6(12J8M(l%GNDg{0xl7)ieK#wx{^_oq?jO;~?J?Mih|8Mm9uOdCoY z(UiZwrWCl6*@E1n)n!w6-ToT)fC!F2*8lVKkQrNzhx3B{Y`PlpSXS?_Ub5pJSf}oF8G#X|8+YkN)XQd?l zh<=chx{Xj@^ij{|=VZGkSLWZoC>yIFIgH%qdQ%9(@JZEZj7=^DU?cSu$2qEn45}W)8*Ehh^Ee%c6~<= zzmcjGC)};@cd#?hq4Ue_R}NIx4YaO-at1YO)Og9>g88rJIaS46Iewa1MuI~3yFrit zQR&E%O+$^|BU6JyH;i5vadY!seBJ z!t{lQg?zOUCBdt+3S)Z69Iehe6wq&=^)2!Qf_hLy%$4oB(r;&|{Vx!t-X!uU=Y` zKi=>iOy&zco)g%6FD1Ndpc(ZveB!;o&=``lH}XSytS@G7E{5Z~O&JH+&xh~O&pe+@ zRf2p(uW*~j8$veBCo-9Jk2HjW{ez(grQG~nMyvF+{3+GH6!_004mvfr7JW9FtP$`p z61N*xlEjt?Y>ZN592tc$@ihHjEuZO0Km!$xr{YO<$l0%k6@jEoycu82mA`6> z(NOgbXy66yW?$G}(^pst{SLJ-GlUk&v62WVKtrasp^53J^B{_ z)O&zIr5fFNOFsyRS1+600J(lX4aq<_=4~EBiLW`CLH|0hN{Ij-3Jk&kqzlF}jJ_*64L)EaPMAI~Y@ya+2kKn`@r_WxPSsR;WK?)X#Spa4dcye(8yih=c zNRElI01mj3OSY{eV5t&Fc^F1KQAOd6qklo}{2`2gs;SR~jFh8_>^fHw5aO)rqY@^r zeFA12l6Z(egA;|CtW}C4n5LPzcf3!|;gFgpv;=S+KLA|8{xwhQg`dN_ArPW~z|RgN z#I=CO8V;mGFFWzayw?w#?*jyYAfG0P!JK&?u&Mx{ABPfQ+t~n2HE3raBH)D&1AwV8 z6&$$nXx(pLAO2CWQYlMxnDlGm+o9pNf*XSAW_QwM7c_GY$b)tDb`lKfidiLHlR|Eu z&u^g^=Qu1#J-v0>z(=>#4xg5Q1M*YHc6W(uQ>i;X$kiSB$=&CEr;dOO_HZ(Bqty56 zf_O5yRyVfxvy2_D9tEdh{8htKv3JRGi!5~q(>=CJ!|*D5>-9!-F#7aDIH(~h51V)7 zjk@>6i_u}AFu=bUn(H*s{oL@SURy8+`wxf1{?w0lFL5HWADNWhO}xL@LETq6@Vk6Z zCz&*-h(Fv--zzF+1RuekQsLrqhHjIzS%#z)J{fxGdS7EK0N;)@ZY&52s+<4`Xgez& z)ZdMSBXu(kVpUD-463IWE^F~T6;0!a8;2&c{|3xPQdk>4(#A9Bm*_;JZ#qO+#@YIx zt`DaYym^|-vqenUnr>Ku;%!TkV0T`fkaN`Z$T7Oz!T-~T!!Ed1)*J74xTR6mtbDM1 zzkZzXO0oAF?CuWmt4b`mvb!pCV><^tLlTx$B#eFc_hbDVmED#6w!rR72(p|ZNcE9e zBrv$0Lp(n{b=qZs(TczQ5$$)={;ij`&9Ez{q^`rd#eu2h7AI&v<0%s}#*}0*xcssm zPcQRhE#QH?0a=F?o`21`nZe_B)doFn#8~A<5?@4_(#EqAH@CH>{6xf7R&LmIRA9P! zZG||pAj-7Dc_a-*sm&nrVtPnbvUj`){Qj8SD+2NY{l{beEhXU*b)3v{D%BXa^$F0( z9&dL4dE%|#{fyn7l*=!N+DZmiR0$PM{E=EWvvc2%8z(2j=H*{o7Q%W-7&>|VoO497 zj95cJb8#a4yl-A?>v6d8*$DiEDCn}qd`Jy_k4E_k(=U<*7JJbi=7+d(xR>4j^>5%S zNJm7!*+DK(_12B73+RS!7>!*!hDD|E$1fpOt($reJpDq--G*#sK z2BSt^kuYBUS4`!u$Z*g>DX2W#%zTiWZe6KcKbj~sqkZ~@m3F`xV$R-cr^0>>&5jX{g?l*^*<8 zAdrRrH(pE;Z{U_{TF=#<-}ly$88ataU(LtyE`y~oCsyxszmU_LCz`|0;($BPie4q$ zlLo|XO+R1-=6(qLf(FI|SE%ms69Gtq@fH?%O#~{bc;5iy#@3)k0Jtk)48*BqmlI4M zBR$#P|8+IZa>6hEC74m&|Lj8(@Kv&c$@y;<){TzWq-#LvmpDr9N90H6A7tEk>W7~h z3)XIY@pi@;Sxny0&RG_^;2jWVLTdhR2v z*KRUHADLX|t#Fa4*j`l9`oStET~(^qt>;vo>b!H*yc%WB<|w*D9cc?jo@)`qV}~S1 zkLRC+6Mj9B`tSY>B}M3@_Wc=hE$ddMJ|iaDQuxW&X#OU>Z1#UMI z!=oRnL@N!AD~RDqJ-R9h?e_Er=bh!ApAXWl)hWiGNHy~0#0=!tX&W0g&G*$( z>O?KXFB-f?ebCh%wlqBM_mqi(&di{W7i0`m$sf(vH(V{ETFWGZ^b{e zx7u^;kXrtr?H#spF^XNBOujYLYx9V^>dll5bqwXOxt9L7hWUDru}?R*TV3NZO@>aJ zr2Z%j#fg{0$5ryB40o@ip0~cFZ`CHK4XF7&5=iO_Tj~u*tHtDmwx7!T$2D2o=87{! zm*6{1dmCjq<}O6SCM>%48J5oO&Ct@dE$O>Z&iUFKYR++Gf8x%!NqU^XGSxBM9%0{{ z*WH4m`Sb!^+n3*ak5O@=Ggq%vAd|nrvgLWY$)owczaW}s{VYhl)Pp+cAu)!_1JDm9#BF2-mCO4XFOSToNRr(SCyw#t5*||<>POtd1I0dN zmLBnz`?Wu*2tp)(tnXDq=4HyhQ|Ray=2O2&z_2C9#lEVXb94ImV}AZFV?|7C?9E)m z^>OE!(n8v^c_Ux(h2@PTgo9%GCsNNTmG)&UOWkJfM``(JMkD2~qE@Ztfg-2Jzk#pZ zzV}K?jg|^$NTX``cx@igkMaIx5xtUYNVqT4pasohs_(C-a{TGo5yoysfcI51&7X%7)_O}TXAb!BKwatdN;@#`v|s0v zk|UgYCsAp3V<+8&kxnll_qf-**?w_!Kt6R1qs7eU)c-5}7kf*-3=`GU&3B2u{mty3 z|BR}UtsufvI0-@TjzB^w_-C8hCL2eWPI26MT^}M|BqXX+CeVV&`n437`(j{T>-k@8 z*6;kkeU|EhXiw3;{?v?;*0za$tZj3}Eo8r-uYbpHnEG-5MQZ)k<(v9Sqr?S?>4#q0 zvZpugM_@d_ifRaPaf46-&Mia0@#2*Zm>gH1FNW`Ioss>!={kcVwS9>jQKLJfS@Qcs zbcSOmqa1Wkt68eJ`!e)XpTEnPWfXij!*|9OF*~JwjtO`PvIu?odc#HR1z7#dv^C&BCR^}BZubRC*ZqWuw|i$yYH<=Bw}~zuCsWhY zl}(b;M)E;eS(^tsq6*&vmLw?ByU#xm_G3ry&cT!UwRq13AJe~{Y|Qnk*DIRI=g?M; zzvJwO+B@@K9BOU!Anh2>eWGTzcjQ zY@S~=;o?Gbyw6|jZM-c1MH2ACJzye_#211OU@ud$MS90-9h0`1+iFdAq`72^Ohq&n zuU6eR=6{etMjz?v5ge3t&x^O1BYWvBHP7?hQM%?U##={T=DOWe@uVCRBn|5JsS7d3 z#U!5?f+7PbB#~`yH+4g%`vm>nB4?%YwG5HXe$CaH!lT|-_~tvDdMUjtK}_0~Z^4Z!O2EfJ5}LrIAz%MtyGqhH z%?tVMwQK>M@;UV_?ay}#l94zi1vbx@6#FatOrszA5Oj_g?kSr}M}O}}9eSR^zU?$D zbiU-=?TbLqkIA=*lqk1>Ww}^dK1@)OWQL4ar3~M=Gl_X?wtN`x(4$i0s=r0fj9*G& zeAMT1U(cgWxUnzDDs!oeuH@(Ug1lQTv|1f*%kF+#DNN)d;y26t852I)XIi~yki}1I z=&yNwaeaJvqxBc)Zq4NuM65kL9YSPh{1 z`tmQkw&_~hUr@3;lr1gnxtZ1%d<+q~@j4q8E!w^qp8q7Qr@EPI@Mk_1e@ZJw&CvVU zjm}|h!i~MM66P-CkD5#B{hlW$rX7X%nw$hFItLRw2(QX9>;`&*G5s>!12HJ{_=8*f=q_{L1_ z<+pT>SGBj?@EvS@&6;tl0skgpqI0X7#+$kdBDnLVa_6l|WL{CC(JDx9yVefAq>BzPEn&jz5a^dDKVm_vDnf#~CW>1R*clSB`ZyZaDS+p@;ub z4~+jhvI0F3CJXnUPQg-67|zQ#-#v3wXFavxaz& zl~nGap{uY4S?>>UbKqL|LN9TzswvFH+q?o1#D?au?0O`rAM;}PB1q&xf!K)rHC@vZF|?rApp*$sP&58UMx<2q)!t6!Jj zX*`ZIAg5fm_>T0I^L~E6n~dyZRt{~(kkF$CbDGnCV+y%7sr$&*9_1Rue&^+Lmldl1 zuA@$E_|~x~KOhs99!<6mGc5FULecNr@PEpVcx%$M{H2TbRY}wB zP`$oC^a`h?M$Rh>1ujj@Y6l5fCz@^LH&q){zL7A5oTjjJOpqU?>uC?VZ1%NLq+H#T?4GT7zT|c3FX-HA+d!_sf8j#DV1Lr?Xpnkkcp6GA!^6Yu zx5$E6WN@n26Y4#s4}Ii(X#b_Lts`ILmE%kxz+gEvoEs-N%HRI2A4U` zH$A;{eV(%@7mlyWG3YqH>_bi#tuNH6J>SW&&!iFjjPhdSqhQM}R&$q8Dbp%(;Ia_X za!yQCFt|%3bh+!U|DAQ3X^P4b^5CA1(_xyRJoUv*7x6 zTY2Phy&dswG}p8@}H)@Ab%J<^EtiBVktIy)pUSBAJd|}B$66q)|OWK=O)XmMJssH_S zDx=>xkYB*hz*06zLSy;sjD(*U&>5F;FZ4@(-tC&zaFdq}H*}ud(48h(HMGki<4w|< z@V@IazC>YJn_taVmiANY@;3Jgc2HcD!I!KsS`_vr$I&~S>GSFLy+?hyo${AysGn6_ z3Q?w$Wnbbw)5w~sC8l}XkdbieO!cp`8apwGj|w>=2HDj|Nq60IDDI2*EavWX+C)n6 zch*5y&~`ThiY%5hj)pSc@JDqO6!qua&vKglZT5k?h3w<9XZ>p#o2r9vd%dq zI}(Kh_MG(;&z4n_A`4F5??|u*QdDL3nu;MbOPG)3hotnJO5X{-<2u#bR=-u0^N}m?%X6O7W8j z^3|}c=@YkEO2383{^t}z9Ei>T0aHM%zaUZfss=;N&l1$Ir+ITNtVN%Bw>wCk>vN-d?~N9lYtZ-%Wyldt_6h8@ zT^s^euysC0F-2zIE}2E$}j#ZJ4l z^mS=ktV?;F+G0%rqY@NU`2CqW%24~Gt*m>cSu`qc-)Kp-IIgAf z!o4B9<(!6<%Ph`_>bvXt7sBq`vZ}e+c>#-Qgbz4d-e=)RrBJyq(|9t8Z}|Hp>D_|S zEE6J}0OO=?7#n>L`Y3a2hbEw)h~N)uGta)q4M~Qdn1EZ$R@Fv`kQ2;XQqxC3G(G#i zQaEMq68qKbsfsJYt0$z@F=uL#Ue6XYxt-~v?P#G=R%Wtad~3)4vQ$;;1Sx^JW!SZ$ z<&tj@P{xBxZG#(F@(*Ak3G}&SzPqro$-7x_%vVSlO#=fo2pLz4C5^ckLV;kLLX$bS zLDq5D=1N2eti!G9qY-M(L#+z!K?$iA+yBIU$nh>h^Yb5(fvL2N`q4R?yqdG|;JCJCfp|;MDV`vI zXFlgWaA+0-RMZdnY*i27dx`H^Yum4e&o%Z`6?Mv(cPkjZC*SlQ7Iw23DhF1;NZF|q zFSQ_?vM`+H+M8*%CBGHhQpK>`3T|`wma5}TF#%hAv)~U*#xWXjS zHV`&Me0wXN%G|Go87kEaK@C2{#aK@xTx(S!wA`v0!M8Zao##>|u5k2N!c5t1#sWhT z7f5qQQ}Wviv3AY?ye8(DP#P|*Rf*oWVZoT&)@t5HkIWvQy*M~M?wqm_IeRY& zhux6p*H-ja^oK|%x{Fnhx<3~y>+r(s_m6*c+|Sm;D6sgN`V%XLeCbX|$_Mk0uy}u- z8|fZLCO0R*aj^}F4XqM3dh^tsm=2%}Td|wfugeBT=!d6lmXyr59y(XRS^!e%|F`7N^O)u2mwg>0e=8VNep*_QPuMc@yD zpeOb5w9kH(vgZ{v?g#%>_py@W`eoqs)*caj)E5B+$6U{7l5c?o^edT6p!L8g&D3G8 zQ&f|Ti%EYt7<7vt5o=&i@}OXQY|wehxa6xIDohCUq^t&_@}w|L=kZlyTtYL$mh{%E z(b#opfc!-X;#$HcpuKfHGcfuy2oy0y>7re_!ELj<_`a#yIR4J@F7hgG<2GjB#_^tGp`zj*jpR#d zlTmpgRlYA$J;0D{8(BKKfxFPDbq5b?ODtuO%7l#yA*2^13FXC_4fp^p@OHl0CmL?O z^(nZ+PWv+vezyYSS&7tSBeq2lx@7mAm93%R*Krc}(L5La=xGB|SD6AxO-b)!n!X0V z6oS(4_K%`J%!Lh_mWrC@s{%;viyGJXT^E9Nq7LK_O*1?gSR(*Jy;~`Qp{`{+c~_`G z2$&Gmelr<@J=YujBcWzJPVD@REPGo{-*So?Zo~XQ8Ux}INl?7N5hIZltodkNZ81Go zTw6vYV_;(1XuS)hNC2WHs-2I?rS*K_dy54zUDbD#mK#D@pa7he$x_feZ^xR6C=WCCi?!vWkenC#}&vw4)9=v$g zc{X2me!6?yIXT@qKAq9rIiNuikIrriZA3r2$=#!agU+sK5(SgNbTm4bQA=hw@#0W4 zpvdymT~6+TsRTKEq z%x3RK8`t*-gM}JCIqf``km_D0mx=*UG6o*4^nfW(^!evW<0Y!2L};aH#_xuy5>2=Q_tHJ_`|aDGQp;X z;DT1UwOSL6-e#>9kSypOdsgd_X2k{cq%gRj&AsM=S3BSyr0>zuS7;Cx!;Cm!YYhUp z3~+#wD^nW*hZz5X`8{B-q*+@ra=I|)RuzUf=8=@YR5lP%pf#6c1SSmZ1sP(Ec z8f0^A8|mr=mRgwxpccT=DQ#^;iK+GyfW|`Ns)EY2YzbiY%7TV~Q*cyaQmy54De=V9 z>n{D_SH%)FcNGE%jGzZwMSRZP#~#|A_uBL-53^Q0x-+?Th%mcRi>-326*H+WLCBT zqN5bxR8s-OWzkh&M%_8dOg{}Ivv&bE452o%bJ+Gom#w6JRd`H8p9P%!#{rJs69GUC zhW;UMK{Jzo2|yS&-7H|rOBETUMU{7qKLc@A?9OvaE(Gm)@t-d~NQ~jx@t-#~9&D8I zzqTKI`g8o}pW@@kf4;!@&us|*{P5n!gM00VQR~;6?FXAmMlOYa-kDwxN5gn>BkuDs zeBr@u;zIvoI8b|PKyjQe+_26UOH1K6%19{oyKuv6IE~xH%iL1!D$#K`_+LEU{fzz3 zImX_=e>UV)kk!CFFFm z192F#!C=@MDh?2slWYL9TF2?9cH&V#>5VYk<3%!on0M1rAFdTamt7<&L=BGBzhj7$ z7dy)1b)tlZ^x;Z)LG2IrAJ2ze{$MA?mW4(aR=@^Ckp=P9jK-; zNd{`DDM!pk2vDqyB8oZo1X;1FC5OC`5E>Fn8WWAPyeq@5->E~a^+(YLnnMgRHf1UN zcJu|l+JuCc@L}ecSVatWP7e4+|MWveqVG8$ydwoY(%K{$XOlu|u2!m&htF@6m0pn7 zSg4i`x{%PatoyQ8_^#P*a$QW~%lzC5ynB#SW zeh_OMkPVf17WeJ-p!Sarcs>4cXuPUn*xE?DqJvl*SMW&R|e4O#OkXbNVK@Kf8C zG#Wkt^#;==nvtEhG)^eu^N_5t{fDUF9TU~p9kGHNc96&@By+WEM(8~QE>l{^%-etTmJM>Kp%QR~fa;M0xXH6x;g){;$z+?zw2ssLDC zJ_@-18H7De-c))iRFHJ073g1tx;vjcYZ6r!v_oe}p|j0IaYp`x9S)k&T1zt~P$NjwJD?ZxiPWaYtl*EdgG$GJPyNAYjYM(*&Z(ZEpi;T0eyWJr0J(-8|fH?%01&gh# zBM9?wbrbpG&~PEK?e|i$xpxkU6^o(MssLBhe&xb(NCO=i)`>;L26V70V;cyL$T)#j z5%W0GRlbl103(E%3b&`L_cJ9Ms3YS7)+)9$_6~$wqEs(aheEIL0Vv0$1FF($ssGyH zF#&^UnkyU|0D&>>hI99MmK7Ja^V~HYptxT8ta|I8QZBCmD<)@$7Z7yhNSwfXgt>Rs zWu{_IQkHStOI(b(Ohn8c+@fB>6sXcLF?=Ljn!DLoSVn*bXK+2(dR265!ED(15gto79E?o`9oKS(7b^!#M}FP0B{cF8SAA{=SY?&*@RCM5&*>2 zAynXQIld+E42osouu{Y!n6QaFUG>zt7?dZrTp}N|9*kgsHlQw7tq!Vd5l>X?o8{!- zvkrTrW{5#tFgcn&Slx1Tx)SL?nU7K}C>B)B6H|96$;()>RiT854Q^pHce)BAW>40M z42LW6gU24JCfKplfu7{=g2NCofw|(0xWF#lbyW*^9iaEG8}iPSfg_wf;l($j`*A?D z(30^$X0DmxOqrvobYsuXzW4NDS4v3qPA;Dr~=IWZYBD@Y(%M9q4xyI|g}+ zwn2n4Lu*WuD)NoqUAcq?t+O&%VCKpgR$O<2yb3!Pv^0-Do29Pfn20M+CXHDl&}evu%BH#7 zh2>Rf_&7ON6%9$*S9>B!RYSNhxV>m({Wn+%g)1>UgR?HGS2Ty*8x&xBS(HnaP`dUA zZ|9>CjaG2LMB9)J$-uV{vR#Q|6SmGvdkDwKa&*U@4LbDkUgj zM8xD;EnY5ESqI&LLO`?W1JXpTdvLU~*V(H%`Tu+|1cU}XMk{%6)o=ODOFx8o*Z3Q2 z62NE;S&gP?-&cegfmCi^Bh!*&m#qT)|Kvs|le~&2LlWJAda&fG*dQ2;5^qqV+CG-5Y6EPMPzi)uNG?Ab_9%zbW!9gn;aP=*fv2Yn^yO;(PRiD6 z_x<%Kt;IG5&UR?t+Xbj4x8qjCwZt@DSf#FTceSNM5@I#FmAv6<=mH3GkG9*gcGAJk zX|aAtGq$Rw;peI|&WA|h=f^j;S=AB9tYDa0(y3ZF!dA0*ErVks_0fK%ZZQYkIAaJb z!sB-Af*5bHx&)=1ys!X&j~h4$h_(j7JT{3u0GKeg*n8i?{X*>nx`$K~#%$Hkp6{G? zpLR|U8xAqn>`O4$Q8v!TmL{hhq}|Ah3ZebPI;5y{8A>R&2?qBre5rM5dsV)!0NuX= zOwbu=0o6(ko}KLfu5(hG#mMNx`4#lF9J!oRH6?=p)S^(8y3O7x1StY%9mJmB3`Zll z6(1_1pS?-TTn;0$!}&3j7QQ8TeO0U418q1gx{8b?`YORTd)Qc~S8!dY+L$?mVDs}< zgLB$uc!v^cHbv8wN~H#DmLRG+){TYFtXbyP2T)oI@V$k>7QH=a`E@Q#_YNqAj3&uM z;Vdz@uhQi&e1Q2~n%v1{?2w|E04_x)vZJ#+vuO*lC^xsqdh3oV|I#pC@0QB_Lc-iu5fli$vVglbBAaZRG_y94Oc=b9%$jSR)wFr0?%u}Hn zw!A9D+M;OU+)@)Ok7CvzfQpsTBiRaVNbQ@}&v-!-TJhe+q|S{luP-wx#0Vb7s0E8+ z8OV`Nm^KgsfT2d>zMHL56l(Y-OY~qavyxAH7m=$pMFy0d!3+ohY1YNeGs;}S_ z)vOgO*HU~N15~vJ{TdMjSXD=#bDJ557>Ty?P6k9=d!P>;C8OFAs8MC^5J(;}9&9s2 zR;qRZR)-3f=^C|oRZiSmq1&>0EfIqeKHA}ngdwUycV?4JRk=jgb{tR8!Vp9qdvCm$ zJZHpbhc6uPrE5Y?PpT{fcolBlOA4Z0Gnxx44Fllvjo4=PVapO*1 z{j>H6+mBF+J8@PtJg za_tDD-iU+xZgJi!dNH1bt$3(el!gs~T?!On^ktM0XjLhtS&qo>v@#D6jfTN9(uqNI zYf!wdDzD_LtF!LB4RbT6Ut!!RxVOhu$#}{gS*9oqRu`n6Ih)zJdhN~nR_OBeK&_Ks zsl$rB$Kbu9s8RE-&_OMH_saU=sWE-NEorJfKMOj4X^Q5|yi6{8;~SXZ7-4y3!%3lW zB?-)280nPSM^_`kF$I|y^qdk@(Yr6I!r_vlvn@u$o8l}PfDQuK3g;*{Ik@fmlhUQ5+VpOo|GuN!JUmC%@R^cE_1~42^kYq2<8jkAI@2H z8-55?OHU5>*=p#OYIT{JxoJB5y;>n9!6bd_!QqDW;M^EEzNX^^BJM&4LnZc+LkI_r z&^Alp)NN#MU(u;&0ELQgW!q9G5S;I@C`}mv2W@>U)J|a0BZuXvn%t>P;2JvA1sd_X z)$*ATsrz$**{SAVHvA2##S=Ni+%BL4JXdkS1@x9UGS$$=YKIF|u+4PSYx! zZfbnC$0HPdB%C)YuzWspRlwUW6T!3!b%J_2J?#Y-vb>HkJE50*e}Uit;?sRFcOtlJ z0Ba_W+Xsz5F=PiVPQZE|An;`Wpu^D_@Q4Ev`K`zKzf?FuZHTCi@>o=B_oOOvqczd8 zVK8VsDrf7OHC{X3?q?b18jCs zj>(`~7+|tfCJhc`r^=^u$sB-$aKT4m+otRtv5Awz^s) zjEfEgxZphM93KPzRU7?4)W&&W()~-+8d10r6NZo?DB6&Oc!#II*zqxRr0bvwcm=PO z++_fnrG7f?(O|uVm56Z$_9ZoFN%Ou9PNu23eHvi=QGDj!UN{ZNW%^rO83PliodKA0 z)a`oJCN-%w!$Nw9yh@Cw*fi9xm6j93;zFdcr08KA_7(_rD8E?NXYh-3c&&&}(p$&z z*(2D68*g8&P3E0;4;QR7-sp^0=U9X2@W$azd zJEt#>JKt`+gq{#IAM--!>6{HybW)a68NiKtVq2a8`m>thGTaK%gLLAqhJnMep+u+A zpc&GNGqKRy7Jx_;&OtJ7X`BThjtCx*19lz20D#8Od1^CbdwD~$jk-IzNpq$LE`W(H zoTnfN>A=p&C%)2iT=rOScg^B{crz_RJY^u!z*&D%J|%=$%QjzBvid|nx$TL5qE7T& zpXeu*CwfkikzAFYe*)`Lc$%0Rgkt(41s=~nI)nxfLb3W^BCIK*_fWP^A z&U#G!lZLNnB(8$QUO0ihkh70gaAI{cGukOL?Gy8|1+Ik&I&KK94c=*KR`&g5VW|>b z8FeY3THPWKyB!r11NV$#n(?pHVilo|M59cD5S_dQ9?@<^g^Oz1HQKl7(?z6FBk|w> z>o}g2jsHAeZ5*e=UdWh6qjt3$jvCTftyD3nD*~nVzuNiFcMkV=Hx-ezG1l2VJ;hM# z(9i+JyFrf`#lHrTvYKRS)7XG5IFEnCzJ3$~m8KC=h_QtZ7OV4GHt8VJi=aROrQ!mi zgg3(Y&EfSpIMmOdfA^oc@qa!*2(a1le_Hq3t%v3KKcD>^|L3Rp1mgc(VEmt7{ffi? zJh<0_a9|Mrr}gkB3;&}-f>9uxi&AJDComYq^-=FD!v6$f=FGMn4W8m)wpBX6NkP0- z;g*nBR?&8RTT8#d1J2A&_oV3Zuwl=RdO({vY&6_@IoE4`->~)YsMs)`8QJ(_jNZex zQx#x1dfquy^KsfY&INZy@!*x=WR_*zAfZm6k@5re|5Xh9 zvCE@lJAIho2bH)AKQ6ls}i4$n@$i(%br42 zO=*9l_iRQxRR^1?ic(Y2miFNdw>7=2j>fcAW!S}Y6;7j7jqkj>QyzSbi|o9ySV!Ft zG?Hp>U3VzZ*P(R?bv!y}3}sFu#>+I^#7@A?bgR;NQjCl55pFdww;Ah%Sv|B{fLV4> zo`oO{)^R`BZ~h0*^WR5bzbV*ZGj`YP(@cBXS2p0y10F|QSB5E>N#_Ean&eM0hAHK? zSU7k_C3rD-Pp}~}SqM^=Fj)yk6Dq?)%z{F_EJ*7X3%XMscBg72cmsGVo(As}XE8OC z5<BUnhGQzlPb((DS9)Eg|(Z&h0r^O>Db zXY(l^!W`YTK;N1(BxC6u#EILOI?pq9Mi!1QZr|~))!w-R_BX6b6zOHW>4O6?`uV_Mec0m7HaBfI@Po!* zxnXxuhUJca&;}eUnqgC>MCY4 zQ~fmRJzix+J1@s-RnCT^VR1vzF@!dO8l4tqaCb_>Ezbla6g(zMLBn6&M&zvG7qvlS z>8O(nyYko*+r(jMr`;&ow^lJ+)^fL0r`pVTMq`V$HLC?Q4_$l$)`&P%=l$=mO33kM zSX`jNSALTh$t9KobJ$6;#=0&q>b2BK9UdKbo-jXBUu!pErU$$JF0%lqfCdjs- zCR(SzUl`lcATgvE*xcY~>PM`pQSuIVz>v-`JIk|CQY5toohv#_XqiY8!>$@bww*tg zldmGtP}*xqQT0+wBi9yiMoaGQnsHKHK5Eb7H+1TGVf zgQ`gSpxcYm1Y)P_Dm-%R2ts7MLZgIbQ&Y(T*=Ur#!Nh^8NzBoi^^*}s%~fZ3dJeB% z4HQq5FJtb8X~Fywm*AV$AyXrdk?7od(7b%>_@>`errTB1>Qjs{sxywDjc zHX&9gQG;{L+lW`w_;D8p8nV66u~kOWVAE%2bxi!+vb;lmxuYsk)FeC^wIu~vL~`Vv z7DV3JPC4)nnV6KUs%AwfF#*;w77&_uBz@m5-TGBSEgNAMpp3H@a4Hwk zmSxB&3`*@L8K}rAfFYU=>H;)TExIJ+!{V{dY6;l}W~pU#OE{gHb|=Jy-j7<12(hYO z`>ufSTZrvkf?nj_(^1(OME!K8i7}SA)zod(HIMPpO$XDg!Z@G?1aF~Th}un^78&M5 zWwzlFn~DO0_v1;QQ=#N0XRZt~9;Y`vC2RRPb%RG*2Ox_*_AMcSQ+mr?UpB4Pp@)Sj zv4hnuJwq?}xgHu9Ytyf33dxWaT7!NgO1JE^q^_!sK5+n8PHAn_aGoV@_5JBsE;H|7;sqAIN0@F&QB48HGXb56_1(kTcu8 z4s(oMT(6rckdUaRro=?mr1q*o8`@$L4>A7-RuU1OVGybcSr~5^b7xF0K>eGl(0<%2 z6bh8XN;_*=w--~5)GVXFkbzjz)DGx4WRw*+P-0CN1Cho3ZBUtVd8o5bgg1e){<{o8b#*znCluq?V|l!ZOH`pAzA%YlZ2gMJPc-s--Go zYK8W2Wzd9NeL<1`V0* zF@`6^>yv$lV3W^*4c_GF6N)3CwQXn_bB)Loz^G`aJC6@Kwu~erg$Z5#vqrJ5EsODo!(lw8>20sdHAtawL^7$H()G+ z))8YbF1pCI%a~WOPdvX8nN!By_Noh!SVM<=!tK0SQrXK*=&mI1`)yDQ1DxqMvKMCw zh8Ibb^BB^D)w~n2BDIZ^Rikv>(GpoPu#$}MCR5!EM0%tQ1rAh=9n3*>BFwO2L{1 z|AgmLiK}uf&M^`#ZhX1sijUFicY=!#SbFNjm~%bu&Es4EtnD5VZWQRMwQif67`G|0 zUmQ#pNU8aDu80DFOYOW#pAW&qhBBts7Fb=KlH(SqYUy#?S=X~nNtrUx@bG5LSWR5ExnhV~oswd_OSY`*Of}<$%k?s)u>PDgu#uUfEhI z?_pLyo!EYM2fa**)V<<7o}9(!K@KF~-9+Eva{60v=Ki6Ut7+EID+{!DAcxktVJ6Zw z98wK)nj~0M0bv|Z^Mt>{ z&)uVggU;?L^{*ejI5h81PCKURN$2$W&Wn?d_zkb0y`Yg`=Z;WE)WB)m)5`_iPaO#UP2Z@a{PNUEP5AF-M%u46cGBvyf%$!i-NY(uqgJpX>xLe z1Sc5MDqNRX`RVLlYoq;OmN4uL1^~BN60-$enI!qlw))8+o{oxg8_pH>7JFTvVQc z?EvpuDN$9zb{r2URpF8snx(^1zyl6@P0=n)lyDx&IT#7VMK)HQGnVHy)$sgO%5ee z1|r~m5p5_zqaDW9;lHJo6u{Vc#{~tWn{H`6nY^O)V^BG+mhjA+H8gAfC5A(n zQO8OsNhT<=p0gp-D{{5bBE_b3Z^w-0ifW_%Bjt|93mpiys}MLZ$Yz$(6HKUWSAK9R zt8-#K+E-ImC7Td->2;EfbByaw%6-(n(&7)(D2AG#tD0OT{U{%0z-8sbeqs%m-gy3sWC?iDOg?hJpyQI$aPo z3_3RYtoUIo(x1N4Pdccz^`ek*$Yquhh}1z6MX^j`jc}Q9rCh2&LblkK_eCNWGaOIh z!i#4h6S|smgwO?2CWdxp)mdr7$vCuQ7Tu_A*P+EmZO)1MHg7SSQ2xt7MnJ> z2bnk{Jq7m3-5Ln+iZC2j?zP_F~vF2v5 zvlZBsCm?<=Zsj1TyIB*PRECmtg6?u<MDFnEF$O-+zsS8j5HhgQi7^7?uh zeGY3f#B>*{I;)X6S%%RgNIinDD=rCIu&hI^y~hw-fm>n?TtJr@G9I3eb7^_S{&gs) zF=_XyMXO}uUZIXg0@E3@kpzgJH%Id{ zbx!KCHB1=1zQ;i8cHk7e$&Ua}y{~S02+%9`aJH9>*2u=(%;-EhmDvwlG9gYb(=ylA~G!^hT{1w)yQP2A`cwjpCwo zRN^QI%-fndfzbV!!%_iDv}Ftdrj3^XcH6FV172ZJ;$JEShtDOQL6sKW%exqkzU&15 zHibI*k-Cl$XurBMu zNyT?Vs@f0CZqvrr%>UaazH%?1bP@L{7bU?+7olJL3eQXZ27mAix{=S9DnE+Xd0?tzz=?* zZ*cWH{oB4)(-JS$FZ(KYUghQ$G2HqU{W7l{sOAn-^8i%yGE}v_fG(nco7XPz^l$xI zog3zr`p%D8CTU9XjbB|mV7(S_C0QP?B$wW9eTYESyV*qX;Ak3e4fNlwIdW?h=UY6z z2Bzz>6z^C3>Scazc9(rMg0>LzpbjNowrh&K_FsT>ST*D-I7rdl? zJS)C0Yd?9GeXtDaX@Gj-%o-oD%u0{qbC<+j>ky%4b|pE5x~V$_yqf^94Y5CgKl<%{ z=U`7}qfNy%ubHWp@_b-}2nqL_6=qTf+M2!gU@a#H1J})oG`lyz3@4mLD)*RTC>#)2 zOO3W^*Z~z-(Jp#r_!3!N^z?J+Iyw3?pEkx6tLb*;_4To2T)T@Z~=?_UN!?$Eii?yyOiNu zVEkgnTQ_79UhY!pQEs%Yw2$B6N$^qg&cyN7G!aA8!qEn&bLd2#Ow-g{6bbqyRVen{ zw{n)zC*XOhwF2Q&KcD8~L{W*pRV+BF1#WG_nhb@EussRTvNjuR0R2c`?4uK*5{WKi z%m@@KI_&tHR46{c*!rFq%7z1*k zE%7jChaQXcuA%iJa&9jxNx4KqtO!fLwKPRMnt4gT^-JDFO>fFtY{LCx-_mb>3G~Rm zf?xasNsE4iKf*H2hYVP*=p$xhm=P0eM%+xOBw~g(y$4g*^3^$zrj>Mi;Q3WKx#&f# zcsUJJVw5LB{c}!Ow$txEt*~4woBZ1`2*=s(Q`#M>RqRkng@F5+ZeOU~MjWaE!;|XD zO`&mdU?4Uj4CQNx`QqM)%Te%aO(Nt3`4x=;GM|x=*fMGhU-5VFmyXb9+Yde*=Mgh{ z%u6zkV87IqMpF9Kv}SfVT3OyH&ZUixM8olwR`JrXfYUPyLNOd+3Q|f)teFm*`1jSD z<%)$i8dNCqW;hzbZGVj58&wDURuDvIh$))#%gnR$t7{-u$Psi~@N$%c5B%mCTo~L;c=ig5+$9X-0 zxMWFV?NI>+QuuA)W$8xmHzeLlh*DklAiB1c`0B~pqu0RcfBn_ri)SEQC(s^5lQ`=B z-HT_>`O!c;V)jI*k^HI)M!$7nikOlPa?Wz6L}DGt9y`s<29QX3GWMepT_NMi)5ijNJnQNAvs}r5ZoVaW4CGCE3TB} zWw=2Cla5J2y-|d%cm%BbP1M7?FXzTg2%VA5RKFeFg)Rnbk6`t`rD3kMUT%r8JncYi z{oSLzPTjx<1+k;&-Gif@y~F*3h7c(Mv|}9qcBHEA96#;uh>BZo!6LK89*2vmAy9jt zZ<9hpt-k)P>aVsmL?H%^;-OQ}T%9SQ-jhZ(TvyYzmReC&)fFU9N~35-y1W>Vfxmg8 zWx!IHgs-{))t$$?b-+Fgt|nulZr$FMa~uWmaT;C@{}5|qT)=H+6u#;L%6YhL?(-+5wO{fIQrBz8)YS*&}qQz5%0^-zQcpV%9?voz< zRphb=kge}8$Np9x_g-pEaW)tLGrEnn*XrZms^wwnmbngZfMCnDg#8kq<#nnKil1jY z-@p!0IAE^0zUk&SX%SzOvKFaij*7Chm}Dc4A*vW@w0nfuEySwxUIT1`!8dt~j+=m1 zt!u*iYTR2kwil>*LfZ?38Ik3vZcVNysxN3o?xdWeEP|Y!^rqnTk8zg z3?U(>U>&66$GUcK4wf@`G;Ym;l6$BRt2PH5Ej>7ATX3ipY7?A3Q}3N4uRb2a^@yu4 zgJ)ZTIgf`DgURyd%|(K7P!Lj>3O&7Hti6cUmd+6GlziBq_7XBCno?jhGG3v_5Lx$1 zZB>0E+3@0+fehazi9G}u=$x^WERAtAcE|IBZH)c1}*!?r#Y7p`+j2&?a9H(_)(T1BQ{~xaeKLVkrqYIN4OKp^oc+9zckpou?c< zR5SZVqCjcz0o5trx#QTP3>Vy?Eh78pIm7+9gZ9(>z%oHY#U6LWdMyrA^=2n0(e;+Hoc$I1abRs%D$ zd!}M;u>5-Z%qWPrJZf%6+;)_U>H!nh5*f<$^@To1wf!Qk0}PsWsSnuxFb8$@c>-Kx z=qQws$3ZZQ+2kWoFPi?{s9-}~#?Z7nXEEj40BrSvtWRXa#c-2FhL_sTs(8i(%r9|E zpUYtfW=liSD5a+=7VB+jW;BdBd&glzh@lLy-v-<~AGbFu8SH3f)Z!l7;tr|p@DWxH zGPiZAnk+(OW`v>sd>?u}9XLux9G5_E5&ESQM^|l{hO@~~rXH#T16VKZyd%sITwD%q zjZr(eCf4dGeAoyd8cdC%$`OJ=o>(C6tK@lt9z?nXX%rMcav5La6YKoxm)r)v`{Z^H?Hjh~I{qH>WyUhV7qxRmUfMmU?OvowV2XxVEzh6eV)350We{H{B z1+(hHT+q>07aR6D(#n@zHamwR7tM&)`1vGL2f@lfBd?JjM}0<)0cFU3t&zDXOdu=O zwqtkCU{zm_j4kca+4ptLg}?q5F%8_gQo16-7GA2O%rn6XmeV{VkrU#-GK}zBSk7_F zHTGB3U~;4B0c4#t?KP1#a%HT-AY^GWvRD(MwuSqNh%z@@L71|oVb!rTIj z&5y51Fs5PBb(i9lCWBG-M(;`{c^c-Qn;sfC33CT2ly}D|#-^jdV2liDNBTvXfN#_D*e9NE-h*?BKMs!pI z%e=S-faG*mW$+*G0@EqsSGiL_GES*C33kiN3$0G(_a}B8m&TL0#x9Ui( zrr(d#fx@aQJsGp`SNi&v^mm{o7lmO=ap?5i$Qur`caNerlX3hQy{*Iha-x63}%I#{WENCj(5)?y|ilc`#Y-DabG58!+1uD)-#E!l}CR0-syF5>b6)zh!>kY~6N<>-UclBLS4Ry?}f5 z1_$q4cikX-4b%jkPuPW6qQaA%gOkpt{&jl%qT@AJ2?T84kV>d2cX>s3UjR=<*|YIze-FH&%!9w<+cx;fi+#o1U2xWmekNR# zOzc zHo+JaY!f#ykH(`QQWgsA4^QD!WE0pK)yS`2%B^ti>MqpVdD;tyx(n%7lBjElpfU*n zPTD%o&~acOcYUV%lfHJ3XOGi9G0Km`8^i*Fk+0>r{Wz}0IJEl1AIQ8>l=K{>VH|(8 zAShUS;laWDRBXm#N`-(7vSAz>DO?d?-D|ioRU!tWq1{md_rnqv`HIWYU?#(EzQ0ax z?2Rd?B@Mq3JWR^G31%g7?&>NzmbPVPN}xV?(!{1b0ncAD7;b4G@UYCb>B-EO!pM{> zXzS-6dSyX5V7cUzJZY&AG-@078hBsoJ#)>RRDp#L6ZNTXOPYMLApdb)*oH&C^wRYR z%u&f_nL^Ncf*=$MXvK}%A!x#u5GYG32j6fl(YEe~N2gZaVN3ZnCs36!tEbW>rcPTK zYb5lnt%eC%TYZf4k=t5ZhMz-_>q#~}zp(KSe2ISM-kC9w6Nr7NO;nsM!NYMk{CPGU zpy)W4c|@~J=6ZW*G71J7i2T~;?p;)PiiMDBtdJ(ou_2-$6{9!tO^!0}7F%9kIG*RT z^?gpmt~e{3w{x4(q!N$ifuRY4r~bm8O2WV*lpkx_O{7JU$|F_yEI3*bCHoo!ev0EE z77+9y1E~)Q3gD>VqRrrB1vG zaf*3}Q!Iiw1C2O?S%?Ev9GLd^(lNXXLg=#|R&$=ZeLlg`tzjo~np=#1%+<)tS(Y^C zGtL(Hl+PEQ#GG3?bvAyOtIkE(T{e`sh{tdbK8wXgJXKzr8$iu1soC4oWDW{!v2DAxiFOe?^rmd6iNT+e8H`XN8EnGc!bl7OL4-`c3I;UG zFCnj}yclGoKE@Rhu26Pcwd9YsHAG|EoGbPIs@&7S>eUuGq=Jty;K##g%3K1nyyTOz-iZ=!rFe31$5fZ6ptuTo&M z+|}f9zsskL2Xj`!EO=l&OHyRuk&X3;!n%%GYOtmA_wrVh4n?|)(aEeQ=NzCDBk2RF zdG+}+n6SV4eA{eTK5nzt7R@GWZ_%)Aiy35c*an2sm1smFxrDpgjvNfDK`S8^+bs3p z1>8_3$zWJ^0E|F$zbJZ<9*rm7{v-(K-wF9bwATwf%hsJ6U-g?*?utvqUxs9C%slLl zyU+FyU!0T_>wI zLSe{?6Wr9yyBSEC${!P%7hK*gX0XVpRrB*lU2$ZXtuOht5Mn$YmNDbXRp$p*b?0!; zo4HoK;NY(ofb!9CpatY=7j9zr=x}%EG_VBn8uE(QfUm(!p7o6GPhO!H$nrcn7AFmi zoB4%YnMLy#2jZ9Er|kP9Sr@qvxg`X@c}0op9ile_7$Iq6vAQKUuPk2_L4rs7EzreS zAhp~WD!f!Efa`UFpjR?hVU@J(#BlZG{x)iiptpf3r6vJhUPSh8g{pG&gP&&f1&zLV zm(f@55_4m1J4f=|F6pX0t-Pb52Jwh=(bSO)yW#=M9&*C7*l)~e8!)RyY0r*rCc{(jT2%DPtP@6obrX1&8s zxZcK`dIzWFdIzWT`#T8q2bZ<;>OHOKZ{9ecR`gd6x`;80-X1;Je5aVQimNl&GwovSy$r;zKRbS<~)aEt+i(IZ)Q(BU@090R=khO(a& z!KdVlNql3p%#KGNdp&Vn5bKrBZg=!hj6EcnJ=^)FyMK6!&V8ykblh|O`rPnZ0KMVX zk`2w&%O;Z~A1l!VG!?iq0PxAB3I8-};Cg*ZgSRgr1>(C7+*^LT^j$&= zlzj;aV#g<;XBCKy!0OC78sqgf1%Do@CjBdJRpzlS0wU*lXL5cBs>L%>ag~ej28;J> zao?W-x1R`=p++C0H$#s-zD6AL2a!4mi88xag2Xh^aQy^k$WR1LO79&!f#~Na-RGU- z?vsNTCtqS(1}=UEsw!?oXBW{aS2>M4zx4p3>wK&i9aR`?e}*1~j;XkBsdKOom-jR$ zL{Q_y+vW%x+-+>z=Bm_Cvvw)|YrFMx{MVo2Q;Pq3(Y%UU>koca4*$Aw|HFoV{l##QDo%?7y->6C>rNCfXV_7Wez$ zebU4mP7I`nR6)^|*HQgVHXZfpJNS!mEEN+ij)LLonQI4+x)LYNSkEWPII0~T?{$uW zm#qPDy~(DUZBvuTVH(rR9GZdzWB^onptT@CMOoTvYVoP5<)Nk)aGF|TX=)Lq$@N&g z<6noJCd(T732@-V)i;?-=f53YV&{-sJvuhc96jDYR9}|f@-QLWnKOFQ{{CPUvQ4e% z)ZHEGCoiC-=q***647*pppEf#75i&r*I`UuEjzz#h|t4+kj|{R(*#D~j&JS?FY54S zRYr7l8-n=jN}6Ct)`T0ep8nb_L>{*o*L=SVdF7*9az8sB_k;XPWoz@eNdJHcU@8YZ z+ixY@-|dX0!)@HsBqZF(B1W7QQ@E|)LM13}A3CJ6rTL*Vg3B0+r(Csx7mG+7u6@g} zbu${77a^{Kj4T%JEeNBkfVUNcT=-`6suH~yzd@@Q!{T==SMrYKs$Gp>?0zC-fXqX65u}Ac@DtXgi<6n(MgpbpPb^__sDU zS7jPH>cM7m3U_fp%&cPbL@rvL-?uvBydE4xY0()$)6CBsH8V|~8ecwVd`Po(R!Ak( z*}SA9KOKdF5^^n{4+=g1|{uHf&V(Je<=r z#;$gI1Y7oViu1T|m!c0yx=EQJy`GU@w0Y4@I$@bbRqtCUr|s{YjIQORt6t`2uDRjV zJP6xa77*tXO|&npoiDjLT4>+ZIoc%{2yUE!{h+IUT6|UI zS0R($V3eLr-Bk4^{wo)=3omIp1^)#o)YTvxwEO})sV1eDZ8+9HKFJ>?S4srQrnrA6 z_5xU-NK0B>d3j{ryv^=_b$0_h@!F$LAd4cyh8Ny}R2MjWkwkkdj5XBLmX8(+D_TDG zd;0_r9Ygf69WTl=fux*{SOXu>2Vu_xXE4w02Uc7wlBudaqso~eEeTif=v_?ernlvj zWdmbPMJeHKHl6e!)oVOir|%3Qx70;8DY}Za=YsmDTXu+LL1#w{RG&(V2f^}ukLK2K zABM*C<{~brFnlx17o7cQnPKhp%qeZ4A8JTEsD|V;*j73n=hO&%tFE0^tOL*?ic~_ogL`mT7`e*Cm>WmTrRTncye$C`FlI5~yG_Ou{q-a2$6*X%`$!yI~f| z9+{P=T!`-x=v95L+GM3Aj=(z*WbsysFR*;-kGH&k9ZOjfs-VLC0GsVT51c{eCF2Gb z#E;ohgOXNtO5p%QY4UUg_YCOOG;bn1ZhH{W5=VU_?Y3vhB`w@R*DEHxC_ zw09Bh+Put0Re&qTTL{vCe4#fI7v&+O4GMY(AoSnJy@YnnFCc=m^nIMMfp8Y+QH^^C zOnX*c0T4#DS}6tw*TG4_X%|Z~=)t`;qoER7-k0NZ+t&&C+$8dd17CH1+x_zB=qm;3 z<%{JlkMY0Ave$zUw@=%2MW=r#x4S~$p#cCZCaA}4_(KgMWUHgDMnkPJV^KphxoHZg zV6BLi5YO-5%EcOiqG+mCrmsYEm|7jjxzf0+Ct?fhN}49*Rp0 zUn_ID7O5-*kU57yLl_@Y=M=y!fa;;(P#_}ShR8+YOPgMCZU`xPh=z}xd=Zvs1;C#m z&mrWm(b`JP21^c#Sfs&dqetMXTN=gDi^Ef~tKhw}Q)%kc)Ph7$ zxGBM6VKJ0|z#4a*IX5D#@a=GQ6)Zs&a4HI;^_^RGQdJga>lYqjVSa{BzS~$9Q_V|r z#f_$r2M~Ie2J%DiQ^N&76i}V4-rI3>087@WEJFE=(}F{stE7nErF)R3tQbILLs&If>xX;T?2JNhD;s)dLI0u|x(OR>D(sXtJm2giwhH zZs)#Zx#@8q%(0a@kn(i!0BahOrKti@DE(LS!Vz2H!q3`ETu#>#h*i0zh9v_c#Wp zm@b0xPvPyy#HfLfmi~<^*kFg|BAGyJVR&Zvdb>geIvv8f=9H}YmcyZSUSOqNa@8U_ z5aGyx9kk2lYA;Q}>cy)R^WFyeRD0gk37ug*8V)uJZb85s(H&+iS;hMyl%ZR?0K!m8 z$t~j+snH>seA|Aw!FkOG<7tuC;jWAtdK4)(BQN?&<`P`b0K~dFRc@kpL^j}`4J3$;m;~$wB0#0+%yBwQZmD6 zor9CsomTq}5Epbl8K8A5TGK@1cv9#mWcwy;PN{PHPHV%joG0k>AFS;m5sKJ@vnslS z0=K3iI3{d#TPv9I0{oE9k^wjom>IuXUteFgdDY)r!4Oijx9!1+N`dVeign2gIDCkE zS)to87a(6mEez%%^zIuv{|Cmy&)$fvLM9eI?`A{`M0%K8B^?x`Pq0z$i7e!E2D}nh z^7uTl(YJFpXw+G#gMED`6xjYd!jNJT_mVU9ZIepsbgm^04?tse)xEI5$s?E^Y1D>e z!r+bFf_!xiSW{fYY4nPbd6}MJBe@7~T%l&dL2y;6)HlnigHygvl5upNIWg(VKDGgP zeOD-4u4z6iQ)7nA)igfoSvwm}?hw5+o#nDXzizZq8gQ)4Sa#|{hz2tEY1Va^GH zVpIh=5wJrYfu)Msp*6ZPKk+sF4kqaSv2V3`moK^N%XpYB)E^X7r|vX;T{9<%%?>M@ z-dzT>3FlF<+?a`y(H9yUcO!WRhUyqN^IQa995|n=<^81ps5Ue1j$HhT>m`eT996*b zH%t-NB2DZy?=-(;P^C&j4e|}g$$5kpM4-gNwfv!mEP_Ha%`3fa;$t@QpcnkZzCv!a zDOhs*3U-Tm1wZU7)DD|>_{+Z37Dwj2eqf6jI~G&MJh6pXTWE^#Z!VC_Y30teayhNs znO5$MJ$J{Rmj;%X2bOyS%l(0wBZb~G$3ZVil!bp4V+5K_wLuT|A9r`2?`ykTNZnV> z>*C^T*FG)b?>$y+9PT{pGzlll81$Dm-unQb8TOw5te?RC^ZsY|%l>~4Kl}7&`_G@^ zQbySo);Zrn(w#A=Ouv)U0k#fSO9G_I>hM)p|K{?wXh zFwzIy25yQ1d5bvRn0hSNU4?&>Ez2jt57X{VShFxeJ#6f_#=NV^<`O_9Df#aK^jVhQ-I-lV;YNtQy;{d%%~z8>|bC<`i~ zaCn}^qXz6;*kIyR4ePg?Ruf2RA?#I&e`y5DAxuKS>OjTEl8zArs{RnrOB>!la7q<-!VWDT8--Nx&sc43#J+mDLLY0lN4`tc>0AMML@Ww z@fd&9%LJC|*UjQZUzBKgv`O|J0fCOKl80$OV7KHSd*u9EX*Q$7Dve3us7GBF)Ly+) z%U-wUU{8z;2hY^|W(3hkyu+f=&{rYOL4h4>RRt%-gET`!N<^P}how;1(H=M{UhhNL zfy*HfIp+jbP*h)(XslqTUaYpjBc2H)V=`7-!)<^eP#$eZDaVq(CRM_t z%X~R&X2ZOTO;9)2DjsLWq08{To<_J8!M_TUdc8TyF}}3-XBZ!I`DEFK*^LavtOJ#_ zfrp(auJ$U4S{OMkl(&v%-t0r>eiY@`756lOh!*0{8MxkTau`<@F)o=vv3KiWn*#5#www_7x^d?YYHHOt={MmP!`vR@qB-t0?ohoAi0?V> zfn121&T(NQ{WiSX5NupkR)2KuI(%2P)MF)oUdGobJwpA47jI!aNwA7GLT6cgti4>Y zIp|zA!m&qBPIq>#{V^jql!e?$@g%;?SMldC?<(OM{G{(jU+)}4Ah$1fPSl?UPSR`K zZ}8))HV!+TJ!(ammCOYOC2`>eI#6fb;np=Xc%wk}v@4&};!`X>RbaIRLHPK9a7spXC+fAE zxN-a0<5LFN zjt7wVJWe4Je=3YHN_OQqjGf8(GYk*z?Fth0Az&E9P{i28&p>y43ER?vn|-3EjDd_d zd72ZRTsfdR6nn85etx{^?0AT87cThKrUTUdldtL%V7$dXghK?ofY%q$Rx?wabBF+s~R1dnt#$*RimG)v;G-3 zdeRUtH7>>ry8V=&D8QCc5<3?kC zjULw64b`Y-;2|J+)%dTSal+XxM`S{hf7Rd-oyo1VVDEWl_xYmzAG^{InhGa`@x9g7 z>e-ffDOd_DqnHZ(>#-HG3iOL*P$w;WlCGy1kx*@;IMPAq=nBjcwOr)yOXP4 zHbt-EWhtxKhED_gh=@pUwOv{UZX38Vlxu7{uxdV{w`#eEzk|F(Vie^pOd>7i(azrE zqoV_fj=a;f&p3xCwFGZ`<*gFg8A*nsiq z^b8B2(DBvT^1@?L(0uXy>z#v5@A-*-UIL8X@Puj=vUV~n|{j&=^_Dr;$g zJpzEWOH?5q43vl)0f&hZl;bmSHGxfnH#3V)TF<%s`1x_iJTA@QzF1lCsLB+BG|8st z7lMp%Q%+{?nMa7$qfIfP4eWW4nkhkg4q$o{Px|p#X z!03!vkeQ&LLkc}Xb4I(-YINqohO_NNlsagk9(NCpPF@^${LQ5fjArz`&(TW$aV+{) zrI}S4E5c95jb9fw1Qx91z!Y7bd0)6pByD{hyvSm`oS+&nS>{9y<2;%6vo#^R zEq=(5il}_VROyoTPv}cS(JY65jpl2tB8oJngR2tz6F`pNmLs1db$yMv{Gs5HEx=@LGXgH z^l#(wyM|o>nz z_q7tl(T%dRcobn?1>e(6TrfG9dF}`f8n_N#o=e)U0Y!b)sz@e~c7M=89hH9R>xsx` z54Z^u-_A&UirK}KNe?j0$RKThpE zwy3!IBY^4>Y^=+$THqMN>uG&+JIxa%#%QEqyMStf`>uW+2#XS715_3kw`j>MjG>7m zRos*D>mW-;c|h37KoxKy@I5_%M%NX(tDn>Kb(*~~3hbegOZ=+j4H6*W%mDa=`=y?Z zL)&!H=N+<(3cb_Pmc6qJmSW-8nR$7y3pyjB&iO}b z-Y8~UfiZ_N!W)O(0vCIT3!y<(M?30fl&O>Qi)!Y@MFy^84Ei%`&kq4D*{rC#H9ZRe zCydBMf_U1UOj8r$vKAL$Y>gS_KFQ(#+FM?`+RZJwQMhOJ zWgEvx&s5)CTXN72t}dfi%Y18FE>AEEV~AmaBH$PUo61{wuNc1;7zKld9%?*}RQ*>g z4H8psFMxsLR_O_knSTRt^pdHDzU~$o2Ooi|cj0xzShygF$8DIHc8|l@EjlZ^B9(6@ znGQS=m={EuR%O9gEW#Uhf#9fV{~J7D6cJqIC-#){T6^xm`b@7Sw<3Mwwzs1KqgapJ&T< znV(l#-}lVHTM}o~s>4|c2b?wIGI6=A5%Ejbh4uRiZAQsv*l{p2`S`4$BaAV(G>EJP zGj!9`jF{*6V$9J?*38^UAn?a0{Y?TZH4L3MBLL0TlAl}sDY^Kom%*q)kYQl$kt%{l zdeZjI#`Z`f!g92El+1*ICD9t)3S8~beLj(Sq}u#a$Z#J!)^YlM0|vd<1y%MN9YLUT ze60R&ZIi7Rgtk$Wo)1>kh$rV$%&no_w8~YXN;5KphPc$slsF* zPaBLwdk|_}3EaX)p$d_G)k>1~u?>3+XmrxH-+yV(`@fFQy!a0vA_4TA{Lk%;2d#4c zuLnQJfA}dr<@gU582{luMSs|MaIgIk^FKe>Y;BaIKkQ7ehofOUxe+exs3`HmLV)?% zbhKb}2$L9^!aH2}@g6RgmV!|ftnndv|AV4z+_+Q69PsMsYl0ONgafLN+3c`^l-EfY zj0fTX?G@|w`k-N*S-?8Yc>tDC5ZO&MQ1T+bQ)ky~?QrgUST~lI0yz?IAqUM7=vV5M(2i!xstNVRz@PWN4)Ske7Eo`>NkDwv?)bZ6W^RF@AM*lzut zX7hiI&y4dw`yj!eKAIc<>A|P1&;0Yh)oT5G{{Ivo=lst&_|yGg!Ri0$J@`MK{`WuK zY&|HS{wJt81oZ?+wGj~zaK*|7Ah+H=7F1Gve>r}~#Gl#i<3PP@h^KS^!DZqHW4c8Y zsBt{WlgW=78fu#MrvTVMyeRSD55tTjNWH%sQwPqiwMo)b@~q?z-`96(iHuqSgFtQs zb9>N=p^X&83`28Tz`H+JfDl{Pys4=bO#a z^WztX&TyrxabwynYnNpD^ zgB8>er;G}N1skgW>FR|-vsmA?wW#yW>G4h%z1K`s3|4tTi7rJK0*>z4&Npybbz*{L zq3Y{RoTDR=+Ixdh_T~$z{~M;$Jdv@5Pz6~IFT^TIEUh3AeeQS2R`$^=MP0Jxa%ZeK zQt%y(vfl1KE007IR_o_Mc1CBUi zFL-QYkB@=*Rdl6CzQwswyE~g3nxXNC=4b@zF5Q>1n~Qn^P(aId3vBv8Nx~pJL9CG z=p`fs5i~QI5YD+Pf0ufo#W?;g#=IYWPtt3BWzfK+5fnqYQN|lF4xMBGQ4k1SsBfJ} zPtON&?tKmB+{h-1BKN|Z-Do&QeSBZOK7k27-9181OD)TIOVaMTIS*_DtA@^+D{M4j zRZl?-MiY{)NIl|^T=;!k{j>JyymzslCf5aBMxFPv_Vh|sR#EY$Yy_-{)0eGGko%XHT-}3}kEj`oIxKcRB`O~>#(`lk<#-}k^??>Cq zwkacDb=kmO|6b+U(N(J5FUcDqk;#Z$oW@joD^4^1-E+BugAc11PED{wc5PrP{$e^OdL>(k;bxgNxs!SACk)`VHU59hiWO-an`oqDXOQOVf1R;jylG^Yjwq$SE4Hss@Zf|Fu#5I^K z0mlyv8T>U*-55*o$HJX!keNPYxC5&;Fx6+MtLi4sC&>*uT+9~Opi!WFX+RL4LB8Cf zxsnzU9Bo_kMG9IfN*1R<0FDIvha9SdB)1d;`dkjv;pOy_vku`F;odFSYe7` zzR?0_}~?WI1R)4}i>tD{-3iMIl; zIj-DA5uXYBJn9?Jr5UNZ6o!z4no%!G1l6r>DKfxaFR@0ziw~rjs4cijj5wxWopgfF zp6{HpBTa*M`gl(4mLCuez&NN_C(9spOs(a`jhY12a^&k&J%jj1G~_igWHj(Z3oy`I zDQ0pK8&i*5B9b=NpA{j-V9ze?r>DCHr5La>W*-bnSa@K{%;=SBciGKOC*$)$9g4@t z)+I%0%xb<_s2Q!IX{T(mA*1)f@D%c_I*~sSYO9f^6FRa6dFv;rP(n-e=vBHb%wkeE zJ|LJWnI1ygskGK;uoWhZ26}DqHsJd%Vek(~7$Mpw=v8Q1 zU(uN#auGViA|(np%oPVxBy~UyB{ES%4gZ8EeNBlh6_Xo~PfnkO@1xNWN|+~V5u&)% zCWnv_=<@7_6*m-`{`46dgEuS%LNU^w+fZ!cAKS(vtZWZfTsDNkqGO{;JyKR|tgYaD z1hIbLC_x=F9xOJ|UR*@4pwhBf__4s5v0|z)bh9F{YYlhZ!BL3)d^{7d3R^dvsJ0~2 z+6p}OAXgm+lE`%eK(oVhJ2N$P%}ks}qc&OYkmT77q*~9}<(LiCSF@L$f$x&lh z+yi8B`c9RrGiO2a8p#A0tr6K{D7A^@@B+Ml5l=`wf&dqos?pa*T9#E&1!gQ84XGM} zU^*rMZ3yL9nqVh<)=P@$!U1dwBMw^;D)8}|o3t1uvqfG(vmq=>ikKGw_E);5{xS9ZN(Y*X$s9>@K^GR z9r2t zPEp4%CD}&-NO2<3@|fsTJc7)tH+aG%z@a34@AgNFU*O1ECLlocvII9q1y_`bC7-} zw$4GTTOve2mQF!SxB?mva{hzsp58j#cQl+>D=c-%bEPD4v&v6rvbX`U!VTwOaqPGI zorAqCL4f5{6r*0UqfZS|+eUUR9S=y`(8Pp{MoY3bvl$=+93#AGhYEh8e1wa_jCM+D zo5jdgF3WM})U1lkqr+@c@N{Pwaw1!;r_jU?xK!g}fGQ23bLQ67PpvZ(X;`CWMkoY` z((akKK2T=q7KArFo=|vkXyZ)`q^?QY4xgMq2GmZl6zj$drch`%C-V5zcOeU}+ER`6=oAvT2W2KW z;M8)WWg4^sC9P5hm}`tW%DY?v0gdk{zHA{{#mc|ANKzfysEKiupom_aa$|o znQ9%d4%#xq)flLHxEFa^`nj^yv6Q7?H=$&vEh-*u+lvHk`XUb@V|h_3XDNzzN)g zLHdmTs2rMz6WN!2zwE4u?v#{`0n43fIS_$sH6cjs&g7g0l{!8(rVF!tB!y{-aQZ`} z1TvCM6>cVSo|eC1wSm4q)RY8OocKo{8@M}%e}Fwj5TP$3c*z){ z37L?SdRgpa#H>1gk?@$66u}<#$K4tmYsFk)+lASp{?1S>yBdllzs5%p?IdC2kgkImF@5h+6XBgOMJaf zI%!Ni!>K~TWW^{uLODS^rr#wTAIq)e9v-&DhP#y=0OFy+7lS;wzLJA2{Rtf)l%hi{ z(yiK0vve(==3tkYlsaPc7OQPjC)xw(}qsVc|iZL)`rpi4zDX6`nE+H#9=B}m? zD#D6CrZ-BlVWG){2(P&!cX+&TH8cy7sWO)uc;F$El z_jcFtxIcsFGV$c5rnz0`W(pQnO9`y#Lj=$|k5L9;V-v70F=BxMq~2w-0J+xkWwQ{I z$TpbB?=VAA_Sv&?aW?9AkuKRs$sj~1rYU4MR$B@awLv{=xoZLKD)FIlWK7_Y0{sr# zaqxm65@R8AbI+}r-{tnKy|3Myyd3sbGFWI=5|pO1wxNlQkoC}vr0<19V9WQiB8mZP zH8sMbnjIN#VNgAL2kZ9q4z?>}mq~1IJ6c*3TBefH%sbCKLDs$AFa@LyhP$#-j*JagsI38CI>@-4~`&x?^{lb3r;VR``2C0=Kqb62;bxsh|}JMnKw7O?g2T$ ze_=!hom4_~{X0c4v)A#3Iw-(|;t!gR`i2q(B(kd82*)S;PY-uaUmSP7-FOL?imJ+s zE_qHxoAB$mJi!LvFa6=RUd!GG!WvQ_lrblkGgoi8u@pOX!21O)b_Nt;w;Az;`#Ink zrwSTTI^^w$;AylcU?mWJZt4nq4#o8s!*~QbYqLvD^gXSS#%A$p{_XIk7#KcdK!($A z^+shL(53SltHWqRDBCO{o@0Ek5n-%xz*6?{`XAJI|FEULa3nCD%^7h7rcaoU23q5F z_z~cG#zwH<)rZ2(pvhk;UJQ0Lm?TNKqrlex$^AcP`u~22;2$5&jsJ1~;e&@||KIk{ z{=YxP$MgTC;2)oH@Q+{JYd?rupKi7uZa(<+kL3PqgMDO9q>s!G^AYr@%>!<-#*Ni9 zR=Uzl8+X2A=BQ4TrQw?2uSMcH--^}K#tMWHX}~>SHmI{%KUtdL=~wWci>jY%65G>MPI5_@jz5+gd8e2YL4cIuyy|b_V)^a3!}l z#i}00!Z#4%alEs9TJ>>6!LryI9>t2N$9!7jmop>Q1KbhE+=pxXzBDf;R_bA!G>pSKVD z@&O~d82(dzj1EJ~$h$n(Fp(T3m+Ba2Ul{F-Y1ANE;bERM$rJMuX)kKY6phtA)Ty~f z!|FQJIZ6sUHns0@oYqsIZKwN3l)JYFW>mv`SGyMB?<57E=EVF?jaooz>A6cG$g=Hr z2@VH8Ivfr@031dPhYj=Fg~Mn*9N4CWo`9`WPpD7m=}Y19_w@q<)+gdf z@ptSaM)^8)3CthDS|sbqzcR*92M5wC-%fnIC4nHo4%OIkA1<`eQzBJUFS6+sylkLv z{-bR<9N*vS3R(cY9798x1K`_jTbu6AF*1Kl_r>`*BPBQEiMVE`=+1C=RX?|D0?A;t zp~kSlJ47d`6xr&zE;A6~R$CGP%J-yKrp=3FO%4@%iQohsV{%<+opcrc*i?EjwN33S z7Nf-~q%Fj*04s`uuXqTfG(y3J9U7P+8q(m;9dtto@+|>}b5ncYjj8 z?soXN-(WZxr$twQ2PQcVn+Mv_(?!}my6OGuF5Rgyd_pd5Fc} zas%&#z{k}b#y~R|&ySBzkI2<9tbF8$h+e(i+L2^Q9X zZu)qD(#4E=1oWo2EKPl{c#!qJ=9mq^`WkDRKBB21pJ13ye~MVK5n7H4>B!1J!fu7o ztggj2xTbdGKv!OynNi3UoLm9N9lDZ*(cq9|EuI4@4i2;rN4i#AP&Px8#~QO;gIN9w z{#`~Feyt5B7gw}DKjx&mcm}bpCGwtV!(j>g510GhH63r~BL3m`MJTOmpN*rjG0EJW1oucTZc$7<88qFt+a zLl${vDQ&hfhmG#V)Zl&~e*>TD^Z)z<-Tuxy z{~vtT`mCJ)W8>k^=l@Ufk>~%pzWp`%KOUk1;DgQk4>mUfm%mTr$r;4f-_1rN3=O;J zu|6x2$N4+l=>F7+JVIuNx6ICAXZ&>cE6hgPq;49`Bzv{`i|O_fI?O z+lgdnF5}mH2X)@OCd0|7UcYWoP;7JEV_Po0ylV&0i2mqa49TAGS^FH+EUF`n1K(DI z%>4$N5e{@ijg-H(VECpTR5ZKosAkHon28JC4ObBg)N^+TxvE^`S969Sj5Bi##-RAN zetp`wa|dibaTL>rz9ef#dd>En@xxoE@~Eq)P+i&f{8i_-zv=9JWe#P%&ivfz>g%0@ z7adVrmo?A1ZD(xke$a%p;1OpXOY>n~Bx&!ap0U|0sp5M?8(<%>>R$%|JnvCE8Qg-R zQP~YNP8&|OF5YiNZ`~1?LJ*;Ydvfndiw0We-nkQKITD4iX}kPM0ltR$MKN_=5%$&@RS^2)#+1XPIt;6Dg+oXEGrSDDXuDI;D z@4`q;(!D}z%A20j_zmoFeLr^YU-;HZ?`yh0&}nWm+K)w1N_2C2a(cXf_|)cnu^#oM zv@xeIPCCbXJEuFgG)oqjcsUEP`Blei<0NW2@J1`zU`TC!EkzKUq6-y-y+{?`KfxmI zJ^rN{t&2{Vg}Lr=U)Zjb)LseAoC;i}+j&T156&@=IeqD^=-oQmtIX}tRVGS1uB|}; z6nJ@Q?nf+0u#|6d5T1@UvavIQS@cE-livDy4=<|l0v!fm)`fn;m7;!Boi*t6bm#Fw z$L-+)JNQ7&e|fC-l-qvsAv?hPGPnKldpEBLT09*Un{uCSut%c5{Q;4R%V}xX)2`G1>zPN}%F9A08bnwPH><%u$D{cmD>oI0%L2OJ8!7LTD zsFi@OLk)GFSY}p@asOqoeT!?~U5p$Q0!+}R)f!TB>T`r=t43bb$q-^!=(z#Q|IAV%ZEbvN6 zv@WPKM&*6Fi(xI32J-zajc_$s|w^&_&y&_<+A9O_F>rG){s1-8?!a;cf~9x7du#ltyo z9j^#(m}f_O9m66+QQgN>`;yFi_o>B0HuHF-Riy_)6gFg|RZcyB+<5mTQz`X`~htgdkDa3G!R0 z@*f?cRgdKJ&m$oyMS*}t@>91nR}~$p$!zZn_auiJTb9N^ST`6Zc$;B_wx_$85ZaEI z>j(p@3!Wbo%QFnk&t{PE7z`mN;Jp?w0&-!l@I%0y_ex8n(8qE;XuZ@3F6gctZ6SE+ zO&~peJ~({oT~z~1e>;3>0wQ4W4Ao4ka04c@QlaPTLI<}7% zg8;9B(iP3I^vZA;Mry04u2~<_%?Mr%t)ILf8`K!RnGUq*CK>dPc_A7u#B|wGQCu2JJ#2mXZc&l@y{ub#u1| zJ5@=<5KAV(ARl-_^eIY(WivIomwMHG=(xl_Hhnj#8QA!wLa)SZGXpf^aM_i?$~G|4e2 z2*Aznb}agH4;TG%Mqg}DQtlD2h1QHcOK83UW0c^uD~wi%M-SqSxiBkXjtCz@$m7l! z!dReNi#Z?Z3B{ij*cR@5n?}B=iAH!Xqj#B$-?)hfQXx)SCv?E2ilD}q@wMIOJ&c28w8&K{q`V9|uX;nY zDx2z%v}ht%YDx7Za{cLW^$;&owLxA6P9qB>RIARQ#>x;KlN#)-ifr1uur3X`?dHLX zp7`f7m7O}5+bfTEPWE@ZyZc?Z7;xU3h+mc2Ebg@%Ivza|<>5JJuQP1LLg_K|;8rQ_ zfF5%$hir^r@7`sMX|L32>=?8FhrcSK7&N?!<=F&7A-wmLOsh0}FGQk4XV^WtL}dgT zk7O{@OuZUj0)YHb(C$%P)JN=?HpHAXCJdd;3OXuf1s#>Mf=Uu$gSL+XLEF)gP<3V! z2Q;{Ekrcoj0a;`l*@`k%iANY^I@f?RpUj?TH~tt2|v=NWtxCEw!x4irx#M=e6oSBS}c!(2-(MG-R(b5^EK2=7~>{ydcxc z-T-$%h`-lKG6vYX`feSfh^>!M9#!qPa!YIbK~e=peelsO-@(2VVrvn5?q84La`@Qmc#1L0ZFJ z2H>~^KPj`ojK>udCg&JCS?L*}MmrXsD~s(9?I>X@j~A?I;XKw3H>=S?HNj`XRx@5K zi*?IB6QVvF)Gs({<2PYjFubZ*;EIb4y&M}Qo|M(=hVo<7lpx{fl12s3ItfM(C3%Cg z*EvDhvz7b4lqcCKraikZL=67~qF27TNKii>!@Vp-`zO({2a$ZNDhO^rpcU57ksV2N zn5AptMwrh=c{fK|3aXD)@lb`r`FcbUhH$MH3ac@kF2Q%X32LNrD@B&A!wCdm2*5GxVzz)#dwy0>VFH_0|;>os#<7;6a+>c-n30y+@_W4_cAs8zD3tT+wNQy-5F<*!1gKSj z5tq&p3^aP0-vMI?9V8t`rD4Z+>o6Hs-8uFp){?^Erbz#37Racr40aG^_=*~=#!7L^ z3^C8ko5Hw&mKYa(nBr0dRfbZ1$5t^H)~v-*q6Q+y2dW5#t<>(#Y1`f_m6eY;GmTbo zX(ZH`_8Nk1Gzc5(3jH>i^`brfM(r>Ie1`!mamP}{=y;;aD~+JyG(7ql%2SbiQ0hJb zr^q!ZU9(Eg8*kWRx(W~51yzOw5_EH@U!Ln18;yp9shqaaU6v>B#p<7>k44iOL})Js zt%TdiXP(Pi3oxq=1b8ahy)3}mGw0!2i0k{#F_92)VIN|3eJgQY8yVfI>TEnx_H{O< zBULq77#TqxUG1%?#gNK60X~&?wP8_F9}k%2Jb8-wyX3c2QQv=o(aP=VOd}bSEKz3W_Lj08Iv*lGP1sXt+sD~g8;8! zAsf~6Ng}~GHP40#(r(A7jKh2aHe0n1$LKEO z9or_@FbMW|5kue$#s4$12DH&#GiRGXv=rmT4UnMC=8Q##KEeE+!1nVSvilTf2Ew)m zThQh;uhHxe-$iwF*2Ro)H$4#M-_P8X320ntL8%!+52AN#GC?=z}8bzdwIKQx3cbuc8OeE(C0i$Hr#^Wae3Dv!?{IDj0 zYFc~c5JCbG=76_mXLb-Jn=>O3UiwCJBC$sd!j7NMBhsfN#Q&s;3Bz$J;boH8(2`^} zj?jgLv+VY#xXqvLma=w7UbCu^_6h($E8-ChkCU{-jHs&ZWNfbUWXg6OrXP~F>z7k6 zi2rJfVPymJU?SOVv5hFAu9E|`-Q@g1q0|}ig_|0ZW?VHnfTdgBzU9n#elkV%p946Q zZngL1E{?Wp12ZE+T%+C+I54PTG8ov#Ff524gm)e>Fqge*wjBS5&gN~)K16>E9FY1v zR|hEO%tXNwC(N6b;TYm(%vot|8zPe(Leh0{EsTMYII=t7BeZ65DcA`%1IH8H4u=el zFU#Hq!RQ=xX?^(OS@(43=?M+X@LsU}3+Tf)xYy6OjHxf&^T6Bz!6Q%60Wb00trpO# zi!~kel<49y8*b?*<F>!aSk^B0;wfl6&TgVN6QEOP@nkXt z4R(sDf|g}7%v(rhyKR}rX*JrpIm~%OY4gb7=5d83*WJs*_eOcM9T@rv1Yw%uWwI0m z?G~`*&J;k=^gHJ9)^U$F7MLZ@h$upNlFl_;1@#EDPB;>62Ye5J0&i&5G{2aGIqde~ z&iK_BoE|4vkVn8&r`U_sxx515k%?(zVgmEtww5Nj#to}ouJanZ8a=D7)(B|S)ehFc z2{jsyO$5ll6cA)()5?tt`{b{38T6UaT7ep+poJ|yc0 z=H>&8rzj#UFP7tEA+I_db(uU$Z2Nqk;}x3`(6ulfxNP&Z5os1(!io3_8dx?sBZPe- z%4YbS?-sFrd|~pLhsN$Ik@XzJdP|+3X8!#}*Ge`*U47}O>s=guwC(V04Xs|f z0Gfu-P`ePz`&y4O;&K{lMa%K$8Z&zyWCZPnDL(S%D6i5DKCdDFu5dmG4u-UFXAj{E zj_Ec~cJ{5*g^D*#;acxNc}3PX;@^VMwOXFKO;KD1x+cON+jW!B-k!SC*+8azbsImzaYu(%FQ+4|(7?hbj38Gvw*zaf#=W)<4H#kmO3Sqn z2v*BySy{zlTtK0NwQX^H)uq>uTn)P%8Wqfah;inG)*i7^!K?qVs4uPu?6^M{0X7!f`@a>YnXaQ`+ThY=R15g$wm|2O_8w*w+` zX#quxx^V`ayDwPp%VVOxXZ%lV8%VY{Bbpxl*$_`8KGQDm{)#K zi_(Lv;kQ(|6yZfjn0QT)U)x=>GO&Jacu{XuMQ}$&hPx^H_%^6 z*ps%^v`ft*QL>KKm&4TPrG2ftl_=w!MKioogS>dSnzTcCIdebmy;$Wnlvb*QnP3>+uVcz{FKrGxWQja*Y)DO*yJCIyQ>R-3Y@Zg_y(`hst=J{Z3dB&;4dBi?tl5u z%=nK#P5$RkTkZRP{Kt*Y9{e2t@u&EB@gFJrbL-(^383FO{v(HVK6ipTpU({GOapzM z<@pefOr$Kiw(kiH1C^V)>Z{fVX*79RokMDiAi|fR886uijEqkNmF47f?#oN z_lBj#)PjXgh(=YKhA&#L%c(^$0dG)VRcC0kD#NI}x^keQsy1sze3MNJybA>!0bvl* zj1lX!tYp4q)ZavJ3H5d(T4SX)y7G|~A4Xl+Xy`Jn$}%lertOqL&O^VtuU<(}Zrvn!x;SAL{fr%Cl&v|yT$c@?jTTDo?;+o6sH$9^qC zvMvx+R-wI}{~a%^=XEeD>a`OY*Ab@fxMziW;=#?Gwc7~ZQas(QU0TWyH%8M;4tH7mEaf^P7P`_scy&}+!swXFyQRQ$n+pJMNRS0rBW2&NwS!1Bt z(je5Pztu2s=GC*dxd?6@IWd$0q0)vgTsUl_7cLvPiK%Ebq(KiCy^T7ix`kULe0UFC z>C9$kYT|y*`0#J@Q!W1w(_!&pGC<6c|6BJzE9ZZD(E3^a|0zCF{-+ghUPTHUI000v zeXsrNNQwXV+ncRcSp%@Istj$MRV9v(hG&zQoQ&bxO$q(I#k2zUV1jXYIUo-9AJ0hv zF;$~D^D-^O(`$Zctg6UaLX|$~9w+A!Rm;DHwCtdn{h?OFI6vU;)rCkrZz1{34>*LQ zojo;-!<}axTV$+gVtg)2!TpS12-!SaWdEpCVwl<2M<=D%S#DpSoF13nlfJ^1dA4)< zWvS3*TwK^9d*xxG2LhFVo6aWQcfMVEyG0qMRQc}C^L=wJ9CV=;KreKW?7?|Om7_ZW zs9+3%w*Xz%9zlcz{OZOy8c*|!o{pXXET}2m*m4T7+omod5+I@x9Q!A}%zDWVJ0oi~yTMsr{ffPV$ z*Qb3YJx2TYj-onPgy%Pki@t2|L2$Du@i#evlF1~^ASIAY6VxA;A0cUfG$)%7&gs^N zi9I+%CyY3&_K&*zhtFR~y^(r!^x_nrwf$pA!v_cKm!K9zn~+vuW}xC~5y}lLJ+FO|Z$_Ww3N*Sf zrf61k$tLy0#Jx3sh*gc$g4J|c1*7DgZc~%gozMNSp9hQvTMG)Vlk-_Ca_ecr!Wm11 zgRW|xUZ{%L6*O36wzajEjsjzp)!7&tR?xpwuRqy8=tL_k4Qve6LB@fgMM-3!#FsmV zdk39H!$rhl)YLO+jyq5H z6~pt}{lmS^H>I)ZOL%CO;|2WjkI~26ka60eF3hV*{3iMRl;UEnwFz1wG&L^!F)oTQ zfI&-P3&&~SW-4$R;$XwLzMYC(O-Z%Pyp!C$azRBoLipnG=6iTs0;>vrT|ZBWEdqCQliJBH}Op_ z5(m7ZMwewdiVlU&ZNONvT_B{)R*QuNx1v15{2&y%eh4j*b3=sVZ|cC**s6LBtB1Kn zpg}hpB!ehT-pm2w7@#Qk3??NN*vsL|s03|Os${cmi&?_3SXVo`v2Z}-!jIfux%#WN;S~8y6vn33WA`WGNVBHsR{1cM%cQ$Tc{7nHq1eh`O95 z6F~F1-uoRyw>y88YR9&!^aTCHdyk-JH^SfdEL~>1>Tm3 z*5EzHQ>V&xh)aSN)bBeU#a)E*&Dzre$e>!5YTCG_2z8B@!`YN|qOOkA1O%=g2215A zI6^~rn5S9F6x0$o2tbe&LyexD!>{*`j}Dng8~%qp?=uZjYxIV(JJrcG#RvzujV*=c zi5M7Fj67_|KqB`D7SrB6UwGSg!}4H_ zXfr(Z@n7xSaanQx2a=ck@E|BI$BP`Cp)qpR`mF{;FZ{t!S3rvbybv+tkP|$)cJ`B| zs58kJ*F#kmY(R$vaQWA@){IRlc`HL|KFJM_LfaE|90`QfFI=g@MQJ(xFcRg}NMyVkY(N|Bt}JBi`N%kz8lwgw zv>UmS#ujK_D=jox3D9;_LoD7L9r&ufH{tfc35F1- zV9&V1v{@ll%&<(JszO&3*4FnxL}0EK5a7)P**p#N3+*LuG|?gwqnMH+&*do(LeroD zzbiT#*f^@}StwCC1edvUX@GVC)a+SqTwK-jH$zN^mtbrGNPVH*9V0?NF1ZMchzRJa zS_XQ4X48m$eCv~SHW3PwAbrYK(w{lh$5|uh*%jladacrvSt0F*?RWZM287Pe9{hc` z7Pd(ND{u!;yUS@-yp6~wsNH*qRIG0fz`PfygZhA${qV)J$DQNu$?nc!GrCK9l9sPb zq@Dm|{UD4O4-6B{#57i$Bp!~8=a85HSTS{ztYr7#j2`pOfG`tT)AYl8klyyEA!Mt10I7F|Lp56+`TSk1EXB_jy+!bYoQ>bOmDu&00$81o#t+ zh!a=v8zov8B~M;K{d7chTvM>1CQo~jxsC$(aw}son-NOnpxYaNJ6dbKgq2wSE?sWO zF~@z3xuFKEcBRl5%XqC`DKu$wviRtGfLBR2T7F-kv;-2zpre9_dvWSEZk%LF7zImR zIwKjSnkF8i6Vo0bN1a||Z=y@gNR&l3_>HbK@sli3U!;W_-G~|sV=Z(YZTtAffsQ6O zW*m43;>ajQ>+q6~KI2rrAc|v$j{pGNb*isDFgiVUMqwP(0UO2n>%@35rVxO3fU$?i zMzsgsDhdvbY0415nN-IEO~LtF1Cr7eVYq!g&sXU(LzN=fXQVeej-RYd< zscJFaXvnbm%z}1!xv1K-6#8+z^ zP|$InOH$NUQKYqe9QR252?m8!iQf(tm!5A zd7HUuX2eddMGx>CFf-bs_SV(_cQjC=)Y?*5jt_l`VE_#iGMSEOCqz3RE1>$M?=16* zYchRH<_?d^F$nPb2&Oeqg1aSL_{dV?%8(tB{1Wn6j%FabfR70EEn6RP z>&Pn1ZrexfIW5QBvQ@C!Piaa1p{^Hv!$##-yB@-X0L|{6O2QQyqS{;#eU$Ed^kc7d zX{0)4iZ?jioTVF2xr}NbT*if5#+^UgW zgCcLWl<%vuXK2#k3A;a|8mz7p57Kd=PYXxUX3-mN5=JnH8`i3Q;m}~KhYOb`Jfd#G zyR90Jybe5r1ABoFEl>|`!ew#dC_zGIR3#t@Ek+4O?S>KD&yy5{b9Fp$3SI<^7jHi2 z!`MdY4X9D7RsufG^@d_ z7Zbl7K7+9;UHIbmlV_*eD8!ybFh=C4Hm#xD)M%*Klx z*~G1*NtU(LaTQI1e;q(BHX!0vN;z-UiYvv`-*Vx)`$vb5pEM)&_X+LscOO|G^ zRN!p{f8jLx0Bc4%EN{uw%=QUBQT_+9Y658YOG+ct-6X+1PjG_Ow0*!@s@?ks$3Deb z!wKcK-f;G|Z@@7E)~R|Ax-AZ{c)enqH_E*^%l%G$nH8vR-Lr{D(^TPkK-L^hW0ygu z_%&>v9^+SjtW8Gs-48!T^)o%julyJk-SiZ`>4#)&+O#)5{9;AosUq`K9f%n(_fcx)3ay{(D zqi83MM>l^+7L5NTT()|^8Mq|QU)eB5V$7-pU?8N{ZnkMf2(;BynuMKK|NK%)eB_6G_gW#ibW zGW+>q@&?tEs_GrLD&2+SEua5*vfQBjNJqzeo#W`ZbJ98fy0ZtQyDXI|Kz^gx)z?Xy zM~3~5qFRh9gc>UJ;Y%N-Rgk>(-=X4|sVu1*YJ-^Hs?(4}TRI%zyDdD#--rqDB^}bA zjC|yHWuO5D2%P8MG!T?MDEU0ryjzBT2dG@54l8y;5+#iP2~ zY0UCLO|)Gh*6*3VZAAa-oH7_{wiTSAqt&RTxYsj!lZ$xJZsJ6He=dqb=pKFhb9%2W z%qqU=s;xu%Z5UB)#H2tcE`;k$(D>A>n%QP(ls&9e=VXNGD7N6tPskYQ29n9QFvZo? zmz?4SRf~$bZ@A%Qzv+TaLeLhjD(RTs5u6W=Aa;5}w)!gtD@0E~?qYqp-XfHKjAwMx z9SpDQMQ-CNV{V=3O*ZN0B2~OidLyonIL<0x&wE|0wjc=m>Cso6!|p-nkh?4t$cp@G z-E<^V-wan

fDedKz!lqMsb^T21q>Hq=W=8SH4EA>zM;NrmJbFUrC zpUS2_>6u2Pp_&|-Tr&K#=Fa|QKtDv_Ev}1Ggu`sW>T7H9h;M#Rzv_Y%wdp+J{Mc?O zyfn~IFvMy3yNzX|)wk36U03W)OsYy{ygS^|`~gX@T?sIEi)wn}Pua0#&(BLRz&9|I zZwYB%vS@MC?OjaM*Ta6DlDdN7TR{WQv+1OlD56U>a5$=I+S3)Qoo{~9XD3~158lAR zOD9AV8ZbI*8s5@u{DBD1YUnj&UjF_BTTlSvl^4*`!qQ&1xR_*bbPFgh9Uq_k_V5(* z*tp=#Z_*-O2%<)ds5m;3=zZ{K$+Qrsk#$Y!q}yatnsKO#e8z1FI||# z0$)WE_e5Kc=!CZ!75fq-NiGGA4b*=Z3V@pOsxxVFgH-;NDkW0j7R4}!JNk@obRn!C zX?8Lz09(H`s*RS=euzrP#Hz^4$r6G4GYI3t%brG*8AR{~T2f~6SYrAR8k&1xtFza` zar6p!KbY@#a=NAJa78EC!;dj}P=inGP^-`$wfkKvT3%gscZB90_76|ZPH@nY7zf;> z=#^?Lph#6)#^|I7xH&W<7w>+ze-y3!p=l9`H#=dS8eu=_jlq^lL3w$7d5fO{5+3Lu zqbz$JV{S@5jDS#fj!tZb993WqOVAc&l?U+Xz_IIg2D$JO^`OHS&G=LubZ9ssp3$h` zQU$*-5`-BfO^cgu=4@WJp^nkyngY6OOZL>5kB+wNJ?Y&2&X(m$MC^RCzq@k~?HukL z{PuU9?cd(Tq>guuk^^@x8S$39#JiVtP|ofK;IbaH zG#VHOWHIEgMdldirqQ-NTane1hpS@&7e0Tr1?k$FO_4kPHbvt%=(Z8jFV%5*+=?!m zE#Zy(B)QyA2N{6ya;U!0s6iEvmREG&x~Z*rr{g}xAV1BP>*e^ynXAc{ufd23LiqBU3>#pf19wku{p6UNN`lkO{bxT zHASWw^vx8!!E5iiBe0ll_v^v+XhwG#T5FFc#;wkSS%ms`?O5+XY|~^kq)S_43*t{i z&Y?-uWozMnrlYyk;lQIFFOxiv&uxZ>fDEU`0E1KjAR47u9m60BmQD3xtxf!t%Gv-D zVp%MPPU37E=KbOMu&6ux5;`^};K4mzqT6h=pzCy&Ti@P1i`RGH?Q*DX)lGK%fAAHDi^7U$Vu z4+)$GsNogMk8}}J%R(uGP!8wpb)?M>eeWn1jh$VmZQW4#?Hv8i3jbwtST|Ja3s55( zuTZpZ;*0#b+5`NQYWK2BP?8aSReYteU?%Hm?V{i<2BeWtpd=klzfMZ;XU}&|y9Y|N zZ^+3h%(nSD+3=J%5OV#1bs8!3XW`}4A3zI0ZWxp|7y(QIsR*+}-prxSySU3=9Fm5inZL+q2 z&qJ-Q5E>EU(n1Gmv>Mgh>L0+c<{}g%s*n%V8PQ%bO*JZxi||PSM?pUsRk3A@9)llm zLn|MQ>PlK^tffj+5_Z5aohCB~p}qRf zA-*#KZF>a&AMkQs{w`kLs&W!KGlkBo3k^)6L3N?j6iTZLO-!Llb)mu(Dyj=znL=09 zg}&3iTjv>MgvqAo7v3pmshmgKLVSl=a=!&YY!4w&O*n~%5J)d&ISjQGKu_F31PB--Agk}YAs1)D2_$8XL*9G&(8r=j-0 zn8oKPS`XR5wHEQ6&%f3}=U(-xS2o-RTaJY_4pj`uyT}o9Ii?w$QPq-BJ8Moe<_&>b(YpahE9eg5ff6EB^(Grpz-%xfxlQTK%liV zun@~FkqQ!N7c$%Lu*bH=9^3ZE_=8~NEC4!xzvX!+>j8ZJo&)%Nu>l-(ss`}rJqPe; zu>m}-9Kb)k=K%g;u>l-b4xr}K?`3C1LWuGWw}fs}6c1y)+vj>osIHJtLt5(fTEnBm z6@@$ssRy=qbPAW5K%&;y*Ihy=qb;eTyGMt+JEx|wEF0LwVP4g&)Ou;9eA>cS2d>&U zNK)wjp-fU7Fe6j`Ltts(Hn)OJ@^lEp990nBjO4(DR=G^eozaI_+VXJ{fNL16KLYfe zKI75&B3|U)!WjwNIrr7e;Q$hsXOob%nf?fK4>`_~^e|(8IQKsb-?Yg3x8hwF;akIO ztJ5c%p7_Rk=wwu~&nt;)#>B*{z819+A2gxUl`^bnLaMrhuBCIux7d&-5}rF=A3;avq50y8>4_Q-yh}xqH`O9!7)Y@ zCS1_7VxJJZ@6vO7H)rfX5LCvl#k11WqY1*&62jofx1}a8JU4fE_PwQMKl}cCz|U;| zpNkLD$DI6s57ZCe|L6Y3#?SsgKgGxQ|GB{Qe-D3U{D0c_!T+ayfAfC(L;3&wVmL?@ zuSG6A7p_Oo#nN0~9OF4-b85>2?@s&SXK15x8D9@Cr`r9|;OeTtrl^gJQ14BBd{dgl`*=+<1n zn;HNH%2`hwpr>%BkW4Ni2YZy?T%KhkxCKo!uu(d@@x2L<@+$(nbGWAnsS6d9gC8Gv zcD`y-p}ixzRyjE7m@oTJ=<6XBf3l-rJ~=w3zb_7VPxp@wxeYGAe~5n$j&^qr$YN-p z{~n#r|Z{k=Fmg-erL3X_KJR z)Zz_Igc?HmRWihp6&l? zi%}_xCzJSwEFb6;e1&m2@VW={@$T)M?gWB`xNceCbp+mYu(PHqxZ&y(nPc=KGvn~v zZ?%4uxvk_fR$O~8kKm*QvmSQlwGFfR9=RrHdlDQ1G_JL+d{#pTr}VDWg5e!>Bbq-X z?`h`MVYYD(l+C#Jz@~}qNkHFgxiq$O1>0a`khFjGk9Az%pT+_g{W-|asa8? zraBi7&CnZ;F!iPP9tQ_MqmorH&-jTVC(JGla#nqsXJ}i)p89Z&2tcsr!?L$# zp*f4Fms~pNm=(%GeM{@_IWn4W8!mf%Z}*1q@B`vUxL_57T~Ye>PBRtYUCdp?9ml&k zg#DZ;{IBUVgZ~E&dj26qfO-7?gNJ_p?@v{QpZWiv;^XlDyy7SVeEMsf0sOP5_1R{t zy}7Xw5CO1KGdhd&VK0JHJ|_zU2;|Nz+baln8jnWEP^|TnvD*F#7?dLCG(;=++lmg@ zts_0?Co;Z(o|2b3R@K2^0)b!whEYK(_hSF>R0%$#sXC{M`|U0N^|Q`1czKyz`mgW} zzd$aJBIly*Y@A2=C4`Vp<6=6A6%Sj_Gm3xy3W^~&U>Hp}tPLZSBLiglJmDM*0|7T* z>3(i}x9^zHzV&~wL4McT4Y%w8%t)1`IYC+e#$}zt3N}$){R6fX>Mc9UkF8$5rh-f} z#Xn_dqvVn^M9TUc`TYXCO5oKS^(`@d;aHahC%>N-&(U^$tR_{rF37-t8qka>7z2oC zkP#KlEzv_zgCHKMTKdY@MH?jnbaxK+pB_HzDDa&|2i+H{7FO7zHaV6s3aziEIi$ce z8S^Z}mMII1VDd{{?d-Cj#;7}udxxym#6EELAW4zR4t-4k!ozg!0>bh}m=XS*b1|r` zhda-x_(U8Eym(5k$Ms$_Y23L}m+p#ilUtaRacJfxU}^$`{pWfQpFu)BYF_Qc!8WHfIS7~X8{79jeA)? zQG~d$BrsHyRkh(vUz%L%T||-hF}^;gtCm5gWUvB=qJO9Ta6?yD=L%K_w?`CrE)s1W zKtbo~dP3vu4T<*c2ID!dA%^BZKHYf?^wV}FpWeCOwrd~ilsmMREV^;WPtyrvW1c#V zn{!VswUV`7JNpA3K)gEmFuKA$l2c}y+ETWR#X;Nt5S+{*EH*^tl5IFIbbmiMjc>{E zY`vAhK@^I6lMJ>HTzO8i5hYd8q#qfE3rLR#LDt|Jgco0RIsyR`mR+GwWJdet&hZ{D z{AuUp^u(flmiD0?tc`7njf|595;ME>wFS+;Ygwh5|G$ij3rKkX{xQI2^Z%{;_c!kQ z{C}(U;Aj5-r}#+z->f(Z0H2Wnu<@&V?N31fxc_PJ4&X#5wS?*kC=KC8fCD|=Iv|*0 z&S3}+!wwC*vA=kvUi`0v{l{~{e^H7S?><2tdh|>cog!U%zHi!nz8}@^ueTnw9{#%h z>BIXEfA#Cneto}v|5pz_wa4u7&ffmc;Ys(o;_CJ~PmepDsQ!HaUh7vI>l+QvV;x4` zjn9I4`EF~tdC3-XZxbnXq3It{ciGMFiCB>8&&YVdI<(g4t8_#?)~(#1%ajt zzE>{`&IU@pdp~N^EY^)G_+Gs%I2$PW?)}6Iqgwo4xE3#r1o3-eLA>zt#P78}P`kZ& zN9~H9no;O^dm(&JhNA`XU6p+InGQx-Hd&D9LDBc<=`suEvk7#hN`82Vsz!sE0{Yn$ z#Ev1lWAcvym|#PN%3<6cj-7bF_HE^h!B`Hm9VXhpp9I6<1&H?VC&jxjhLWuo>t+mL ztv>WpjI#5^dRGPCeU7SfYh&SlS{v`)Q=)jTh57+?$UFDaPZot*u!nnPc4&T|lW-2I zMf+TNmp%uR3V1?^q+)MPszIwZYtnG`q{y9-%-@rv{=(~vMHkpFp!=!XECI?DKEyG5 zlAk%rPZMgA7TVz7IyEpfyIrwxTTA5-oNWlfxt%(JH)VSjjSbn36wEdI(dXE&HhbXw0_}=(ahbtgpvAhkI~uQCf=$=CL%t8+B^%6J4PZ-E-dS=KvVv zDk#xFTL)9F<4Sa3e}#?BK$258f1A516UH+h{#jDINs=_$KoGWUP2n8<)^^v@-N9{2 zG#!uOHUaL;Y(-euse@2VRdmveK=#en=i5_EkY2+(1_gdt&E#@i+|*>PAm=w(nKn$I zTIgNRsfBZTHC>)JtG1ri2vxgKOH3_y=Qf%>x60|atEWH0>9^l?`t|AB2&}_aM*$$b z8Z9pX2II;S&QJJe0?u*)T&$T;wu@}?Ty4)_QY_pv0ia6qu`w$*5-WH_uAle}BCke9 zfx=03K+c2bMm*HdbBrNw#Z&zp#3)EuX2dV?!d6f}_&JC@<~jV(&oj(16j`-_ec?Rk z$BL`6kJS%;tj=-!Sp6_5j4}*!Ze=I^LP-m@0{qf1Ce)N=ZFJtFzIcH@^b24{%?tQp zU)V0x4}Pr3zkRHJ=*I+T!$RoCN~#gh)i0A=>WzJ_e&|F@v6$Dy&HsqF$)eqbT+G4wgbQH3+H)7J}1(&9zhlyC}}mM_o{OJ zV6m!vPk!E43SgWY@<%_4C?$*|*It%-8AlwKR?OGx&MI`$Ge}; zHmvd2r%~(v=KY784?Zj3{XoXZ$soqCDABXzGMn5)&*C&be}_~s!Ys?)^CXw=kmCic zR=hi&Qr;Js>jHUSOo|snz<18FX@P z+F_lm*#XyKq;z&|G^6W=PI^W$8KX0}+sDg#XyeuOa=3x9stS2O;Aui5rJAqC%Q!!U z1ZdNhkCWbT0Q{fg+nW|_Xq&-Q9)}Ji1&ervLQ^Hjjc%G1Lsp&kvjhWGf|(fh_U2-! z#4=#Pe?J{6Zk%lSad348Od9PRp6o}v8jxlrG>9BK0Kr*_Mr=*SDc;b(nGF=k`$x&M zG4>0w%%$-HS`Vc#3MCPMc?cK*Lc&!5Cbv3>hog@h9O_zHo$UXvvvYjB^V>TQv_B@8 zTtDlcPqH_Vk=wV6ry>Y;GQVDNunqq}vX;EUSe{%gl)U5`fTIv$k_J#G3Nx@Dt*Q_i zWkA)iqBF^0bNAXtBBmK@#du+(eU>UUWCfUUlw2hs*^h=r;b%C1+MP^OBkY&~lYC^8 z&|t&t`BFfjt_ujYrj41<3l}gXqKMv(TP>?xY+E$k#!A~NSoF)!oz>Io7F$)mflRXKvo0eRX71xv<`w3)n_`V|@+;h)Gq0?5SxR8iPIz@%$91)$@_>cxuCJW0 zJ<=qoQCB~J#_?!)82Y&2oK3PZ2p^Qv{?Wl!M>czi%^dQq^Q<(=bp9ySaEh#mM`Y`# z%D4~KXoL{tE7fFxSJ0x(Uz+dv`9q)C{Qpnl|K0wq-7fL}pSFMI|9^^)&;OJ2$Nd)D zem%I?ei*fWz1e=S*$Oy+yf^=E>`sBxzi=7M@`loFh_ zI=|~w4zl_^iV)2jZXq<=ZftwQ)6741b(iWj&DczLr9tXx>2XF^O(kQd8VnV^Nnl)I zCY96&Mx*TJ`wooOsE_ap3nmMFgp^Zuc%8wmR+PP^kTq}Mz6{nB($>7XL1Apmy0qMm z{#T#>S=|3H=HGM9{|66S<^0c|J^1G4SH!a&;nH3izjcu*5z5;i;hmBZyHb#>IcgHW|;P~H|*0I zM|m-&uF12N`(9tfj9nzLw#1kw^T7?-6%R6=s0OcTtZ?b1)s*Ovwad#jOq>uV(E0PD zCwK1D^c_?U+p=kSZr$9`latQ#JGHLlwAB2bA9tSYe{-jHaI~|her`sBVZ#ydP-LC% zlb!v8J2mK@=SblS(6tOlHX3ySqA)f&4#obd>UZw6|@l;T==&1ylQ-vRCfRZF&}i$1~_YFL+my-zi89>(ol=IW~F~ z4@c;zr||1wm`<;o5gPfZKiNp3n%a{4$NS$jqbG_FeSEUlgvJh&0=`B&``<(l*4xeK z%jYk?iCSz?gdW1G%^O8&K*NVy7-`60q?q*y>~dEBL1QsaExDYM<9alTZ@^pv)VO1q zVyYf1Qe$?)`g`Oy3_V%zsW{`z3R496(mu=N9Y{5Fb zY(~eY2YcPaqu&@!6qeB!4*D9IgKB~m*@$$2jxC6);|%aU_kyvSv~3KuS(ka#=#Ny{ zIyOKXh{iv-_2>sUc14cfzS~Mitn5!lq3wI{f%ophJ6D{3(G((a{-_A=q5B)^m`_V` z%d!O8#bo9&?=Fl?(6{Y?}FHE&Wp zL!RZyaFiUzm&s0@gha~5>Z)i{%HQCRDBiK|5$1pD`)r3qjjfTNQt-_Ty zT+*PWXPCI5@F>a@k4M4TIEa$XEH76KHWh~&sxZICmk8hkMU6YO>9*u@CX;Vl z?O(mr(0zgd%brn^%bog@qvK~_bJ96E*?HRO?ms;|I#z!UPddk^C($1x@BNeGqi5Zd z-=3Uyo@oJ$77_=7LO=D{l&FzR8co)V8`!w?f=lVua7qnqu^RD_Jnc{V-+@ID{%A;3 z@%bbl&cXv?#Ow7h!B>6faJSR=5GR0XEuvH4K-J`~cIwQ^1Wo|6)O;iIm!$X#o1Ray z-cG+iQF!73sPYu3n8A-q^?!S?_al(~L!#eW?1}DaNoe0W1b#fK4zVTHvU~lTQJ*Ng z0w0Vf9z#eVFfw@6U5?I@0i?g(wXq&B9wKt|?4T#CDw*rp` zimJl%!xP1azV7sgM2~XVp<9+4z`K#*HF}bs3!M-h7$_o7t zBzOi9D5@Wx9H9{l90U88iVhwls_w$eiB5v8jnvHpHkvL~-cQxCOtSH0s9*+9b&dqy z05zC{&IuYTQU{r)YFjf}+)*c---uQlaC9HCOx}I|0t1uGY>gHixe=6j{3S7y>Jl_ zirnL9PH(d5sE_evB5(j<1E8~M0g8(&^m^z`IMfrF-CQ7*$aO;5`o~?MBi%6s%1VoR zLps91J{my+n0SQeE0jb$<`1JsYOWbk)9QI?HJ=~vf4y_siT+rnBMw!fK)YS_t#f>Qbj%Y! zJlRVWX~}N9!PfPRXihlBs)NvgPnGiBh8!YhX%teOl1;~lW&{pTPB1pG;<0lAahAQF zj_Kik8s0$i^v8O7+AdbPTpRX6XV2fCs4r;2l_^SCvkg{Z86|>t7?i^k=1q-kq{i5Ab_tM$rI?LrDDSJ4---zN$AL zZlv#r<0jaY3x8Mu?JRK{UDwJOWt8yF|0MqeynKuzo2a&79e1AYpPU~5 zcK>j%^9@VPgp`K;Nh2EM@qA|&4jJPWe678pX zGU>-f%#B#xfc7-RMxq;aLK~}Ak%I*053Y>XEiTken!J(yXr&24n9At{I4fLT(?hL} zNQ%ouEsX|Tt;?4KHKBUQy+Uhk@$wd{WB^J)wZAK%Z)mBheD(^uRD5itSt769?s+dN z;`2xi^&;zUD&}T1%Jo_==g})kW|pm-Lowhl5-17{QTA4#j=}-&yjKL>Yc;x;mWI9X zrg~{wCD@|DEs{Aou=mZ2GLZ{G=WD8t9gDW@i1(n~o zI`sNZ2t;B_>OEYzZQR^p z7;h`_7+;?W9dTqMnq>HXMcshv1 zeSf}hc>>N8lf+W1_vQB_#z9<3ipnVw1_W?W{jhFx|DdCuDdZU7{gZyHsM(~(hbkOn zYMamvHK-@dQ7ROA?v|jkN|M*~Ye2VVgX&lZ&JKXZPp%8a0gp$pO%`G?oWS|e4=1qW z4W;-QRA=p+etFV)-azzUT@_iF&4qk!XK3nzn!n*NS9*tBf?iFJRC8!_`2cqhw9A~X zsVb5k%wS+G0ZhLmabc#~!cnY3lOw()bhKL|i~iKzC|YB3%=vB@j`A!SRe~Qzh6_Cd z?1&^)B6H~DteHhXe<@*Fm=$B&y-#7JT(1%9u(yAVkhHv^ac;#+mcy_2kB<(Ku~0C< z?x3tCt^VbVrht0AtFDMpDm|#z#)@Vs(y*?Wp@x!CO(0*sq^ZeXL&_7qxrorjz1|eB z#5E2u>hf?Re?yq#wgDOQq(~jw>O}1HFCVg%H&uYH-Df+;UlH^dx~szRy6C1AIYf*M zg<-ZE{mKy8l553w=pZG!xNt(!$E==|djct%kFD5@Dq;5ZyY#yv&8V!_F*Hr13(Yau zkAizI)-fz7iD19aGJqnU<1EjIK#Sc2&^RIm2n#DcLh>(}gOwEU&EV<_|8{%PNwuLJ z&;_!Mn9#X^Zpj5wRNDmD0rOwl_C5*$2HBG&fMAU>AB$7!f+}GSdnB>ir${r|Cb0oD zg%gwoFxN8fwybx+wRE;4VpZ)jY41zi0hW%#XprgR-t4M;ylwo5^l~}{oRiY&lzFY3 zbfAOjXmsOYiIb`3H82-AnHkukP#{c{b!8viD6N=Nj;r%QxBnE#h5;rNZA4rIg7ZPu zRXG2n$c)XSN~S?W^3mw6QLf`}@#jZRYAB-WVul7+Z|P;|c3CF~kf)@bei&hQ=b~!` z{N|!-2k{M}GN`8>Su~P{q&ks9h$(g_gZmcOf=2>=PsJc#@R0*=6*d zi;nX-;Tm^kv4FLqR`=IxEW-Ahb{yUpTd4)d0ugCk+7Z;k8t8qo5EG{wkGvs$yZlMM z{IVu`n;~xE-h`~`X)@|6*luhI%Vm1ZHp|gUkbmzbG(icqzSQW55j?12 z?Cf#2jW^(6e}?Y$YV#-8QQOiE9}gT|tJYO^_QH$R4y;v?on_f5iBq#)CPDYGAl11O zYapm42U??{*pM3gEE~HK`6ROnZy~e;Tw)JZlhI7>)sa@*P0FZ(R+=MByP;1RvsXbR z1FaPzHSS7?XMlnmXz(F3khP+w{hL=q-P?U!{=IjfX=m2%n=Nr_38W->ax_c@u~H<= zN&H4laHu0l4Y@%um5jBEiiZKt4iB$xnJyb5uo;v#EJZGzbM1zZ;9R|+C*HyB0qgDc z=7L9&jnZhRAXUJIQuT*`8l=UcDF|7WVh55|pQcyA%|Ky_2w{421tku-h_EGOR;@To z=*H;?38H$56EQnuIT^T%dh1}&`900mgv3B zFy3DgPvHGvdiW?RS7gT}tvmy-QR*(o{bj9wonls$>?lVeD;7~7@{^4aBf5)KYVTY^HT&6|z>dk}aDiVsuWzg1ph)atCTG9b0f?HQv6^>lT0Yl$2NPNB(=?ioROFKk`N#8gL)BL#oMW3LXnz(F}?Ax{sE9`78SFl-E3wCr66 zGcMsc%($Rxkq4t;ufQEp5)dSARqyLE-i249v;z^;M}%rR)9E>gVYAI78MACeNYTH^j3E2b?`RdA01^Cc#*J{@~IgK(O2 zi76T%Iu_E3478*OA2ff-6NrLQ8PgYm4tDQ+KmZP$p6)z8=(qs%Eu~tH?K5GudAUJ5 z1=f_%9TwbFpUGQE#PT|2>FkewTy&jH+ptMER zew`BDaw1&Cdp4xw_|A)O;CA57o!WP;TG{Ea6rb6@)l$__8(t+>Cue-or<|6Vvn_?*j+S+C5Smj7h=nZ|Z2tFR}Ox5x`BZ^Bc(svzc zowSDZhJP&BnY214Z4h(_Rb8cWQ{1eY@4HRs-h?~aqA)|DsOg%=tMDuxGHWP^A*Mjq z29f40I{=H;Sq7#Q&k{74AcPc*J`5Nyd>91IGPWz`3dT8GBi6>thB=ARaEbI}XjrSz zY>naMszX_ixUpsMbNEs-a6tjlS#n!P(uw#@F7=PA?vYu-46AM>ozk>`VdJe2Fjy8q zIAA_}5GnDd%+g0;53|>Kvh(8Ll$!)uh#P|{ftGrrsa@OFuGg5`R!=mBk#xbt3|QLX zc?8lwc;Xo&%Yd%eT1dfNNzEbH&I2^>!AD_||9`Xh?hkDoN#gkZivNl+cQG1}014Yk zz&MAo>~QAc1)OBp@yUZUz}V7^Rx{$UiSKX!)~la0Bf$1%?>^sXH%6N2u6|WlS5?=; za#%MNt=s*|Y3GjWEoqI5xw-{wJC>OLI>|_xv(_*4psGcof~H9%K+<46Jm;3|*4&s& zT$qBZ(;&3$BGCjGsAi_*CvST?e08P0?LwKl{TcoBf6-?~{5Ot=|4)zq*6uv2i2wFy z{)a#2nYyo#jqP!oPJ^+N+rU`{CO9qpI}Zn1)To+crVL==Kr#xPXD?w+#oY zA_er3Df8o}4Wh|e=~yS65+E+zC|93%N8(@}SYi_rYS&`EM>xtQSb02!J1;%?wF@4Jt|wqnAm} zaoB}zKLD}6=$xJejcJ-EXULx6n=30E4B0!#RnIs>$<;PJzQQ~K?Z=8sLj^+P3gh!W zeae=5AgZ!X_>&06SHY9uJ8eaDrFBWlEw>RA{2*9sD^Xp=T(9ra6_o!rT>6gs)rf`7#g6DkhuK-DdKNvI ztcUB4>1cbMw?KcD{1*U+-EMZ^e{1r;hu;4l-S9sG^0@hB|05vZHoxqDUk}K4%`f}k z|64$C7wNkOz?&AKu)Pxjp-_Q843;*7?=}L&cKTvnroubHzN>dYwHzb{(TOso9GrYm z?m$8V7mK!1rRgUf*;}xM3R0aGtbCUrozOB}R9i}gK+zSPKq!iwdXYSYkXS|D>^1QGM4&9|p{`gM;1f*1iYlL{~<-aH6X-5tM6lzNl7KHSOU3 zeJ7VFf#2PE`Q!1MqweAJt>Z1Pk+IXr*fc`LynrUi?@N-1B=2X#Asj;_oD^*}C=K|m z??Bc+mCDRnZ#V=y1K05@XL}jRX}ZWaI#xKh#W)>|IarUpl>07(B`NE246j4Qv^tc3 zlFfo|(8`27C#Oxz7mWO>Otpop1&r8cKlx=L6pz^J6S}`RkFP+&>n9^PDQQemYBJlH z-qMi*U2Q;@i)=cy`rE{_%y_3-joFS}ZFOafvzCoU&~sXK`(RA+e2f|xisP-11)RdB z8bk=l&)@ijw41!|HK~k$5u1|%U?0pBvJwa|>Vq(;oG+^rP3wS6FyvW!a}0UJhgMwV zggG6$XxYUyBV$61BMJPDx5_eAX@Am_#LMb*CPQ&;?aI#7Ij6dL|IJ{b3IF!t-)~Og zzcG7GzW*j)koZBQ9C94>5L-#S76Z?j%KuT(1Wu_pBu}Bq+1Sk#P1Ho@LYcfNP1MFl zm4{SpjJ65(!Z!<+AF*W`Z6$-fVFHKJIKhis@JH=rXEq6vkjzEmj8y-G&@AK&>-ve? zYmC1Fvj7v&z)5JzV@)u`lG^khE6g|2>2Mg%n?lx1QdkBk`4mdd1qC} z2dnR7H#T@*IK74C3PZ0#`<)X?(d(WSD)ELM4xApsQpq8qR!LKca*yok^H=JIR!={x z)nRWM^(Eu=m$W{vS(S&2qQ@2cWnd4!d&jEAa}_8`5_b?qqm2^5ZXH`$kYPAu*p|hq z1ks%T2J_xJ<8T8}eD>0P;|#;z#^21}1VN`}u9}CnO6-L8s&J6^qW7lrh1kjerpUWV zGBY3x05V?cC;`fXha^K(ia%NAoas_qFo{w>6Ka9H0$(s3w9(M3H)x1uj*Z;LNK4GA zq{X)-#mmdf6*e_Fg)OtmwERY`P$5X81_`B^&2UcvO+ksuOMN&&8~V2jlZCD6lxYN~ ze?Cn=CdmCzf3m5UZ7+vV$Iinl$Zt2-pBcq} zE||kbMm9Zr)U2 zH}|LR{M&uP?a~;w+!;o*Cv8lI7FQ*2T-7A(8g3FgYFhntuUx|EFBd3H`CHi%^WxwA z&NQcHG){$^$j539*jGhIQpj=dk*6}^2Qmvu8qc0))$Xr2j9;NyZvvsXHHF*<`B^#t z2A&Iu`}-EEy)!H-PXNh6AQd4YvaQW!Pq?$#3}~(Huo9Lf`iy1qAi+$`TMLHL&%avh zYd$yX|Gz>CxY_#u&g#QQ-0 zAEWUEY0wka{7d4OyD9!nA~?}+pO+N%rF3v|8F1@-a3m2%XWT<#G4kLd;ZO$@LjZei zXD``0I_@2By_{n+ydMv{ThGn?!Ty^)e0en2Q00IZ)B5)=IV9-T&}oBPytnA4M>&3d zcyN5+0&(8IdHvJYuJyj-y?+k9de!}_RbtI_<4r0t{n6^s(%G2BS-FQgFr4`*m3_I* z0YUW_bEmM)N`@a}o!_ShDy4TGMg2)el5~@OGAO?euL*f^bL>c|658{^4RJejx9BV|WFB=4_ zDDL@V#U@2{ik-9TW5dT*%NUq@lI6H~MU1B^Zggvvih}KUvv5unsTnEzl=?JuOR`d~ zx-cnH-SWa(SC&6IKHS-V>6T|zWMy$Spmj=X^PS2H=**3wbKN@1RjIOyC~@5y+E=Qw ziqgq?<2Xkf>zaWO33AK3K5v!P91U>jEvi?bRh)>PKEt9C%eQk>g)EYaIF0)||$UQr`Tsp9ql^I_|r@;z&)h^u4&Js{^c zR1n+e5%mwHax|Dq`yig2eBdmZ)}6?GZv$Wv?g{N9{E6wb@rymAv;O&V;iN;Q)`rPN zoMMiOv*sNd!%~e~wuo~AUyJxKd9vSUNNCPSMHVc4ye*3fK<8^qV-ja}y^OO~`rS z16P`_=1t%^GpyCfS)Y@&8g>KL^eXh*<)c&8cTo*<);FPa==W;+&+e6(>pS(UIR9sN zj8EJN1ooeGh9n~?{{2=R4 z@9p3ZicaAUsHU7>4BbOAL9SBS zw0@YWHB5(Osk0e`VmO1Hvl@TVv8&4aEVaekKlMbRdq&bzcz9HN+!@#|zj_&C&h?bD zQyin!5vy8R*kz@KXkV%IvTS=SHBgM)?Y$XAR}paVX)u_MM%V6b0lZ5_(@{VL$nDI4 z7Y_^(Pg$+*%HX817eOCw6ekz)fS)>cZs$>cE?3oB$4wVj$h4De%N^dZCYWLuOd7!9 zbJ}QWMsV%G zRP{1WFRG_(N;5`Xw-q1SjqCL!D>9-#75WrZHp~ogLyL=JH>_E%oS`t$M>2>jpi-uGywE@o6&2Bb%=9E1b3S3*E_}Cx z1zkMd&H6vlEo26w@FZ8e%y_#*CwLV@Yo~oI1%%o-i;GicSEaiAGP%x7QFRZfltj2( zy0Z05=9Lml!nyGNqo{c>iV-JQJvOGc%GTr(SY$flptpvlHR@Q#; zo=&G@nE{sIu~juVktMQ8LUqU{qzE%-4<57MO761$Qwtxv|;Ht$3~&) z_y5fp_VCQjeIXuf*lunPos1076L^$ergq#Rqbk)fghS$7Ve&I*T%!LlCz{Za85Av) z_{>v^be5za(ZdgK^tlqcGU+OTJCsF?8?jOOh7`_xZ^w7gKp2TG;%iGU4qZYD?r3J^ zp(x9Ly*KAfmxaCC8}?361fjHH5JZW1msV$6n&kzuyP)*VR&EMw(WK$Gm=^bwhO$wC zzB3ze=`!iKWh$wGT;T6kz-KIQpsOFGHrEXgsfPxD#Vp-UtBZ;cqcv+i?JvV3gch9L z+rznE0mx|Wk>)#lNI0ig@wM3GTL-zTinow)ACu?FAnt#Vjs9 z62Ak@RIDI@GrE5el`bMeZt7Oj`-rtZQL&2JjC)nvUm@}7Fgg=@-hT3A9E{>9#poVq zoC~Kh4pquX@i>7o1Xlea((Dvlm(W0G9g=a>d4#VPf@m^{uAL*fir-NriAqa=IjTqo z8B|+lR}M!0g$LN_B$ggT>2-j=FfKY>abo`^MJY!jR?i7w)lsL;POBe!JoL;O&?g>= zMULOAfL}nyCd^(S4xCGJ#0G()Fp-zhHAZF`XP118cARUqA;4+mP0C4)YsL!X~0hmUq|dc1I2wE%=V<& zs47|GyHr`$bqcC1a#!z%N+7p3skdu?k*Tw`in-&*v5>y8H+M1ivw?lK!5te2-P5_{ z{?+ChU;Q(~{)gqDuiyYY+x}&;I9edu{bk`=3AJnYy?d7#^(E#Yt zO1r(X`d!fee*NL2^|i+p4#2lC?$M?^+(M<(t>Zu|JyB*m2ZztQhrz*X(pcHsRmYfl z-ODJ6P5u@Qa}Hi_A3X0KEwzzVnkjIgm214}Rt^Z}#^D z?7^`Np}Wstwh#8Vx8&h}?Y-tN-M>gFU7G(McaM(EH|Vjz*xHpo9B=LHnqQnyn7_X` zINUurc&&fDKJ3bmW9JnB-Q7{GZ0{Z%b9#aeT7sNN@Bog?N?I=M>G+YZKCle0tlyWb3wt!LX|FgJ(z{JMt-NgQLdT5chIE!mY2$?NL*J+$k=cDSiIzna=OcO9GFVmI~kRk=ahQ+~bG8yY;S zYjE|35gyfy&~MQ1=uu5aZ(2Y_H10YvNM3GQ1-}juqPtcBl6BWAK-}(H1<2r?TRFJ% zSb((Nb(;VYzH1dA*LU8G-Tj-Y9C}sw2&h9+r=i^17I0cPb=o&0cK0uLt+9K2=NetV zhChCP+u&LDIdx#0-gSrK*?8AF>P)>W_2JX^R`_EttDMH4QxDJdy5-uh8(mF%{^ zo<|oH5Q4kUiR+ZV<>TN4JMUg_=RqIiM_@H7nGJ{8C91plR$%?!-21JCU_JPbD#Nd5 z`0IQ1Yuowt>%?oSFzxFqHU; z?8aYh$PDF8>NC&By}-nX!l!z=_$i0kf3+OE!UFMC)Gvm7_pfXq*l>o!ArO4slSZEL zlNOZq`*m`SCj}03iQnD}{P&$jctatrlKwf?KaYl|PTSlj#;}|~#c`IRP1QZi+C=qb z`QBGVI?|KGFnzF{_UMWR4;?w_bDwCX&8 zdJTS~ARoLAof6wpVoMd+a^F9b_quD_-h1dgz1K6vRD>42Vty8b%b3DmH+bzs_N&PN zS<+<8d5S0ii>}n9=|>!muh|>*l;gOPGWyxh@zKuyajPx6626cr6aeR|n&ec?a`42f zq6f0K^$VIAKoR*g@ZLqL;jM;WGPjEA%1@uRl^GME6;lG(5Q62{8*+E8Z5AH%pl35$ z(i6GE|=S;avZCTVhQ5~8Jd7_NZ|MBLLiF~6=t`H)r$dt z^s3!Rn`88b`5*khMYY4#@X3=jgn!22%yw39)y}H4^FO9h?W^FP3L`enKaYoF4<+qm z$gxUz**z8|S0jNo=!WlLybWmIggHyXr%!qR;dLLkFWa!W8d}$SM;4eSxdzleVy z@E}w@frl!%U+=;0)YV+|)pQ+dG~K9QJPjw|k_E`VecwLpZXE;uKHF|&tYi;w+O9O}If;+y zmWuS|m{G_evbHKmmb0A~)CkZ7sy7zUUw_4D3 zx$J7LEY58O&*lyru+P>vVLF}xM#6`S(A}1lxzdGj9!X{Al*8*RDH?3+vW;h1HVmI_ zP>dKjo5ua6C8yf{&aU5y<>h777yO$hLtR5%WcgLdqH!9(efCZ|b}@ZTLqe_%>Xww-p-rM_%Vmrz^`=^acCyOh99Atj?$lsdDFk z`y}RQo58cDQwJ}jobni7S%$k2R1RKhZasfqF-zDv5c2G<@m*A1*_K~+?@a{`aoI(` z?DL(U>dLN^;2zZW_Zz?L>w}-`%Ko=s_RapDkBTjC5A7cu`$f>uQk9aO(B1b74de6- zgcKnDR?&O<4yhVRVdpH3h$~Z7oXQ5xz?03V!M4-OIW%H57f5cC zhuom4V^1TW4Fm;Y+>`4hch1S8EokDl*=}`0wTBzLkF2-PD5V~cT-`7kP!fl3MpZRy ze9NTp#H#01=)l>W$1%=K9I9E9n;)*53ng6I#2RR=2y>O3@(eurfrf#UfTrcQKrn^~ z!qQr}NyR>Km*ghOh1*ha0}I*I@;NaR*Kj@RJhMKGRzfueiAS963Qy^cmw@B~ed855%D#Pe^{(kJbsFmBTe8*9`MU43tkyj2h2z&=@8k z=@vr`ixgYi4AE;-^|92ZP!h&Z>aAN*ZIkMipbB;*z-_w(&E0!z-WK?N0LHhiT6uxa z6B)XZB{^{OO}y(E$Nl6qfh}~20z@Ab{xs{j+9YI22wDu4GcKg{28CV+XcU6Pj2~}- z-eY9Sd?9Ec0SKL&BqAnxLUxVmxE(cD$)%?0-FNr zkeYI})m{foBs(|#u+v&whb2c}Ip_Jq)}wV;A@6zcc-?6gF-c2nTdL5v>moa2A8|Ht z&OzkCyyS8rvNbu|LscqTa;iIdcIGhmQ+PU)8z~v$sT+L1lvm=gTp}`Eq!7cnHn1^H zvGb zv?DGlFARw!e}$xoM=F5Ubi`_RaSDn8WyNA6zom)TeX-NseSXw?-97BR*nM;K5h z)*pSlzWQB-^*_+IK{Oe_{wL?O^ei~K2EsSO)PcZCT;DqWr;6+uPbR6C(u@4)%h|wY zr1>(>iewafiNA1|o(sb6&a)fRenrzOYR`)-D$krm-&s!1N|Nfs^Hri8w0@pw5Wp!M z%Wv9`8zZjcL`b9r;Pr{xpnVM{yhVmjD+-g`_NPX^DDe}Ps#s`N5_CJQjfvdt)S@)) zUgmi#==uCN`Fik8KHm(~2q+&1r?-#O(5oqV$grjkyDXhp<4$}k&0~BO_oqc=GT#cY zIbmLd@>^!(!t}JwIW8r2ft#JgZBU}3SF~5PVk%WNc~V-<+08iEfNv#*v{`lJVa*(d z)!m}zZtB(~8{OC~yF!u8DBihY6j-&Pn#3Tl&S>O$SzVQ?9gtV9K4HAxXXmcy3btz;_$NXn>5Fh`G~LMGd0Vh1i1#-LwBbjrBsfDOJt9 z=o|{O@Q4$#&%#>+P?EP-FIgz@*kMqJ!jyc0v<{2qL_2O5K(5D_P4zvHh?%>1J8FDG zL#o#Z!xj7C_U^&m0Umghc%5&_e_H(A-(Z2=PaWvWd=C4hV zEz;tA^P5pK7(~~b-wc`oNM`Wr$0pj8ZGN){Bp~i@ese@tI6-hp#V%38zNW7qfd1x# zyx9B!s0|ePO!Hw!I9C0 zEDys%B^icwup_7et+c2ys;MK7gfnRW$?KL(1KxXaW5 zsUn~^9B#Qfru>tA{+m9NYGn0#MNn7;iMa9e(9l<&M>ye{RHwnbffd1|7-1H&k(&KQ z%1^a$U#FRPbG)rL2b6;b&qf64L803xD5+_RK45A3To;`h3PD^O4IMKf+43J(C_Q?P=w0QrWgqlBgRvazR4AZ zKfF9pR0BB|%+r94KRA(IamqQs_YFi^liEfQ|2~1FtcQ)9H1Z}BAqDNq?A(b;nL2TD zuTbOBV1UDDJUD4WV>(reHAh`y_Ih z)gPE1Nuaf~WT%tkRyi}yDQ!t+EG5GYF@8YO`?O+KJvBbb=S)N7nhep)BlF3uh{aRO zf>=pXE4e!CRu!pK#Lqi1vNX;na^&IFppquz0qO5CN*(I^^>QKcG&IrVG3rkz9CS2M z*^8`&GgPz4Ep#JVOW~84P+QUXjbw;HG4(+qk@!Bw0mXVMbeyw-wei_l_cLE+qJy-z zOqJ9o=3+p0{9;U(++s*~{BlB?+8q}lY-_(HZ~RuE_PU2V+f@8`XRrHd!*9}7 zk3-X}8mIQ>fmQ(e&0{3mh*HJR_i;C0+9jeN8=+|^?xLx>?bnI!K5?tTkNPD0|JiU+&Imf0lJvLm$3Ep zwDnZtI=|%yQNMs+ZE z^C6hFJR8|@nc3=yCkN%8REGt3042F@%LVtIsxGiSiW&E@|AtNsu~LH8J00Fa)-PJ;jE&kE-sZXUV>aXeyefQgm*O_-m#U3}OQ3T2lsecOMMeL-s*AX;>RYD1#1rdk?7mt zE2!I*idodC<&CiDz+bTI})(C<{X3`n7LB7 zg51vry!+`DEy1fEgLy>=faE%_BJX;lYg<#KT=k1)nyq%sGT~g7iJ1~zz%q%L_ns+9PxT81A)6uu}8O z0Z~Q&Ir&91IQsGMxVN|U3#zU%3Z`)Fr*C0(>g9QYIy}|QCte$&)tk3cXld!)vdl`r zcX|lODra}vE@~wPfuV2rKG|%1&xM?1sBbf zGo0D)6%q2;qWSsYqRF0q*(vb-EAkDwgAfC5G=ntskkf`+i#u#dglLf7gg+I+2#=e& z^`&%)Zya`TRY4FsYNCKvv7lH<#2u$T>fl@t`WzV4qFLGrG$phI6?-xoe3<5iDwiqxw;V~PvAA@IZDhGD>4uWP1ONud-)?W6Bl^MJa`cJFZraQ_v+vYZ3aSRhdp(w zVGT_nEG9Cs&u+fT#bkG>7BwsO7mosOfz93`KjSxD++V6yZ8_&q>r+jwRXGi@>Cayk zsn(0tRDp$%63rya3S4NnYLR7^9P0woD|}r?e@`|2)pKjD0IeWuV0I6-w@4+UpU`w^ z!c%GzF~Hj1SZzjO;XR!48a3<#fh(x9z}g;p98LP?M3ZaxhPN36udPkkY6D_pPC~?W zLuL@cNu=@BPU?sYD=^Z!|3F8BMQdOtDRSkR2hFRg_zj$Z2j2 zf__t$7bM|QC(RAM<{t^rPZBmj!e7W0JMaP#+C(IIa5l_NtV7W?`BT*^Oj5{>5KSc% z0@2#0p-S76kr!%YEC;BYx|3*jNEl-ooVXpQtpn_hrduSB(WGeNpckJSztD~2F@Kp1 zhiDu^E?<$+r5QsIHAZU5P(w9L5BL0`Yy`#R8bFTGP%4cLSTet|mYrw?Vh&6Xv1_O- zAX>naYlc&vbo}53b0iJxMB_;(s4{r!`z4H*Ne}E*6Rg~TLn_0h$W1;-3P{v~+KXj6 z#x<&CJ~l;F$WE?6cTC>A4(e3g?`_t*jR~7_ica5b?GCSEW z)Zq$h#Oxj(1DNHrj@gs1Feeq#*^Kd`?fX?RiSS$^rmMw3)MQxq0w}0zRRvX228nXD zkdqk@Cgh8Ur}nnw7RVY{HMXi1q_6OfRve#cvWRPfQflkLNrWR>M*Z?dLU}aLW1Y0P zAD3Htii<>`CA%x|*8&^gi$RS~eXu&B@qN7JIM{hEAfV|E>H`1uiifxr*y)buSN&Hv_zsGoKoBD74%ed zV%vECa}?g2bJdh2v9Z1$wW3=1(5y@v3$EG&KnRo7U( zNoH%i#v-(jwcG^Xq?IbkNr!GFLoPdrSpXrE^;myUdl$^D;s$+iU~QHQKM+JSdzCHdWF=@aY%xUF0iOnN&aSr z5Zyymo}P6(v&}~J#>%)$C6LHKsLfR-_+&|hm1f~vZpK_^>3kBIsOmL`<0)joD))@@pwr-%Ws4P{4Q@4mFXhpn< zGMzmBK&31K?{0EkJ^kqX8auy4$>}`PM}U4r^wdIE$?MHiU{Y(t8#{3{yzlVr7}B!3 z(xw3Ll53NFGV~Ok^9uZkD4R`PR-)2(jf>GFmR22WySkJ0dwu62aO z0{?YR$koZox~%oI$b=r8%Vz51HTqaqAIgu5stV=8rTYYAnktZUHa6ak4qB%gV*RQ* z7?8PQr4vu0WVA+`1QA9QmEY@Oh!;czCX-Ae`xFpE$d~*e%xu~b_d|scQpizv*1}e4 z)6M;Yc_3||Kb8es6}TPzj~ehtp>gn+Q-0b&KdPhf<4kDIA)$^9SqdB6Sb-bQ9(>K+ zig)wE_bSdD=&fp(oY|J6Cv?<z>cGVgSMF1 z;JETomPtxd7{`A+Dr`#{bIC3%PHJ7YNb_A4|F&}wEdHYz?47V<(IUIB*oGhGVo&7* zS7ZUC4LUG3%sWE}^l?JdC?%H>Jo35lM<)LllrEEWJY^3hRk9iUgLr`>MOW2jOJI)A zhE@83ZjW(7{aQXnjObq?!ghi(^S{1WMiiu5})NZmR6NgihDB8@wb9n4@<*ntBws2 zMx-x{#s+f&Q}yz2Yj1DsFgSd(+dT^C*%tzJk1p}Wt+hTQ9HtWm%e9^cZx@yqg5QIM z^@Vo<8I{r6)t_Yw7NtuMjPd~lYo&X*sIYf2E}^6r$tYG79Pyb(7Nh+FL{|Q_1fKMM z@ql6Lm;RxB%~6$a9y*tUp)b5$U}L?7cMCp>m-~#R+5ZcwP%ke+X9h0lLYd7JE)2G7 zBN}KW{0boh{0~KAo({#FaXXVkKAYrU;OJj&gb|JC8@92{vavXb@El)QsxTcZiiv}o zI9>~}MdhPH1z(2FYopclT=|d`PLRI$6W~@R16a0UOj$>)Dp7S6&M#jsUt~EnDORMl z#m6ya!9fM+2_9c`G)X`+??Sj=x%DchY_Z?hxTvcEIyTs*GkE`Y0cNWG9?%6%ap3Ds zd(tTE_?e@$vo`$NkoMAZ`$m!@gTWyp0pS=6l`me+2G{CM z!W_33ddCH_x!tPV1H9TR?X=AWrsOz8rRl~kddP}y4MK0_2bOB4q&CuVqN&NkDAAkT zLbKcef~!#A;F8oRZYpIE+(m*`o?3AhUg3gbPcKBOXEm`M%c3CjJqjLZ?Np;a^0mni z2%MgE0?cqXtoCF}VVk8$Zx$+%Dji$Zc;rkeEo&q%7^0Gbh8O}yFv4k2`JAbnK}JQj zc_jcrNl^)O>dPkB8t|%~;CrPj37N9cp9A&Yo8h}m5?VR#z1clJ>>jIqMsHdz6|{sd z^7`2nZ|}TYfClhqX?B@fCknxOH`nY%cSU^+aS!XTt9++C+N3a*TyOyPg1^J*JQ&9a1ofc)y}d2Yu|ZwnclA}X-$x_MUW8# z6QD+GZH68lSg<2B17&sUuI-3XNL4fAXi{J^hThn7I%DV+4bjD?x@mCC>ld0Z%Yakv z!;OW|ND*wy&o4eL5VkgHqcat=k1_|RbOJ5$^1x01cHDm_HugXfI;STM+RPYm4F#UK zp#7Kt8_nD>>4a(AI{0iI`MH=uw;<4=9X`!8OUR0@YpvIKnDd+FW+9pCY2TwLpYrwNpz z7eO__s3sXaJQ%eR_SL6k0bMdnX{y03Em^qkVY}H_rU%atj*m(`c)z^7yx>t2*RKK7 zLW)mPgWX~GUT+<%F!@$JwB*4s@G!>PS^(@yEwo-}*Xd=|qJe8&$R2>jFc;8sigyem=AkLxP{pUXIK&)e`VHCG? zXz&XfE`MG29Sf=H3K_StpiLiCSJmFH#c?cTMgOT<$*L=7jPf^J`ERBE; zBxe*QZqz^5P!+uYoc_Lev%h`3bFgn6ah7&iTC;2x?71Y{C*K+s78l3TzJ+>F7lj2T z?I0fu^!1aaZz8K#zTrf}NR+M68q&A2^0b9@$G;;RRikx@I<|nS zhh;si=yElD?YUmn3cs-%a2)vvezW8#S+iy=IpIwru?$jvL1i&`j|D9ZD|Oe13pV)D zd2F1sRf_D2W7z17j6;g+(85yZ{=q&;%~TP$9bfP&)rn4!?wx{!%leMgQb{q|NzgOH zuv+RQl@TINEhwHYNRan-svyPz-zZfl5|Q~feX%vCz%Jn6mdxR#H3o1#|HLVRDlPu# zjYFrM25AgD)F9~W&x>F|pUSG=fZ%LA-sdkmmuSX}@ za26pdnTSr3Q8c-}?NaK(t*3eym<0x&3PeA1;e{}Q_wVo~`u)1R&K+j-U99t`>PF0}S$$`I zi|($Q?v@tf7JV*nrrN7NtG6hZ)O1xfewQgn3g9ypwM>kwBrP9Y7oXi3y(@3tTzN7Y z598bIEmIcB~6JX22`4zl1(r3W_yea!8xXhcT&o?uR)hyw~40f;bfx!Oz@SW6QuklN44g!YW7ERa>)p?bGU0ZmuK+lxTA z5_@iQ;;Sv^9o;?=#SN+OdbR0C-MIr}V7BxPT@*>g4_PEc>rHw9JlPr4Ni&Rg#&K)K zLQ<%N`fcs6gJVSuVfqj8_l7mStp(@p-p>A;Bm4coyYF|q`y1{c9nf#~;qQh|ZJ#Bo z=O@XnyS}jGw!HQH`HX%ay?JK8UGzrvX4ihZ;=X;p^OODd8?Wwx)9!z}Z(kq$yx~kY zC$V2+&s|GB#+ z`_J712Zzr4gTqTqa9safV`f%sqaOe21bKfb^#jNGjSw)=`6Gi5HdP0IJTJ9N^?DqgE zqI!updPHY*Y0AFD(bL}38xC2SUY9V2vJ6M2JLfR>FnS8>_nwSZ7OdEmLf2F?wOnK~ z&{2JKC!D)3 zw)qf?cUq>NqC?MxYe=Zq!aCqst&e!e`ggOS=g~#1<``2USIjaaoEkA78>JyD2SRJm zOjGbOP4DPz{BD^D##4LdEeqNXk5$$JCyAG!a@Iu9vnRyNhcV2D$!%G;5`bm%5?BlJ-~zUqGXx?7&az~AsTWjH3K2{*8saS+Cu@AF67G%FwH}+{lUu%UwgctkQ&I{`|oZ3$DH~YsZbm{j8N9ztls`7;R$M$OJtmcbd_B*e%_~3VVXF<2L zHz<;{pE`S|8xMchW}`FzYWW7#@$6o<9Qw7xCl}K`@{Lo)S<9)S11MuGOA6(T3TGX< zO+`vZD$+VfibfI@TCS&9p963pe(>SI&PqQXsmL6(ex;|2%B#yW<=4S+8XW$k$suN% zDr`zKp#18jYSO2xjD%yb!cm9D#!WJuOs(!weh4qpV3UXDJVQ`us0?x*dxhbVDA5Zn zXyiT021em>u!HfXn?a7m9mv)hx=$h?1zIA$L{Q=s$p0|vv&$NatrP}^p7*oywVH3$ zraQ;W<>=5NJD(1deknR^#l#QK@8VEz2STyU{P~2tfF1!)1$Z@O@TY3<_=r; zQ<*Ap?7ZPQ{)Y{pv%jAm*9xC0TgaXL=iOhr&)w8nT)@Pc@x!($`I%aF?n15Zv@Hdp z2ahLUL){pZFoD7!;X;}<)NOpK>?cO3`ik8oa9`d_C4`gFwKVBi33$p3^w)3NSkbgc zWQ=Jk%aq+Dpsnv!hi87koW$286~2XaH!mp4Lm9^w1w=dcjDLUM#El0_Xh1)3rQ+5{fq?tDOsN zRLpS~eEl0OIfo)WcdMIzDacKpOi8ag%;QzT&eu8m za`V)f2B-XGFqmg_5)T_Za*f zrFVd3MM;CPy#zd|qb63A8kh2;p({kam2(V6lH}*Ys!O7kk~i!ar1e{^zEu>K|FHYI zyLBw56g3Yq(HND9p76JEWt)PVzZQKW)>h)`z6rD6+?j2LXQsIu_v^Z>-Rk{xA zWYkvF1l#7;U0j+J`o^_v6WI!ctRluB&y&z-^)ECO8mLWYnJI^fx2ocbm<-G=E~zLr zh!_mkW-bjnYxg?oYSUgO=fJhmtHjXsGt}|H!sqcQN&)S16f{%uYsIre2SSm4X!37n zB{{X`q`>M_sN8ee8-CxdxTAQze#?omi&oE#x82JVgpw*hHIp-=*@{gnCeiJxv(Vwt zvEWDdglAmCgF9aSsEJ6G$?^jyHvh*8tK@7_Wr=T0ixssfg%G8b@FtjrzySiH4-J|b zkLu4R7;yBCK^RX501ls3S;wy_92H+kqnD}hC^QrvK~vmD=ymXebr|O+zT1m~!`HB- zm9?T$7X|AsLd;M`SwsgV`9a(tMi{Ta>tv+^hmN0LDGi#}?palVbTEIYjk>uTm1hr5 zlnfD<0b|w4QrFMg?!iIDtW}GLRcz3)2V=D~9c2?yCD#`?+~OQ|;(PAQ0ve4^irk}L z6{mVbVS^0STj!7`gA$Kd?i{RqLn@Mr<5nsv151uC(Zqk=(!cNYX1WE(r3{hXfD^Ue zC**xg+QLvfq0BDKmn8Fwftp=7F93Ju(YV(y%gTN=Cu>#iEF$9K6j&#O_$^wA=)7vp zs%o5QOdqIa)dLHmP94tj3vJ;jY-4Lj#G{v+LEAY&yf~4&2V2iyd5R#8$VL~nd6g-PlzMVomWQEMqtuPluUEQgQbkDD3`d>$OOZ!5vi3_RL zQArd*w{R7;pp_2BoqZ;+b+*}MebHL8q;}FQ2JZuGgM9r7iPcffYM^|KI)1!UL9K#b zCkbI$gXJpL_*yB;ox=88i8!hp;5eKR6ode2@b3!w!`n!>K5f6{9aX!;7SN$2Mjcfc zUMHlyhstsnJ}Yp&aGrQ+t1ldk7w(P5`VSIB&~3z{WMzwhvlx9zl}i2i_>^d-CU5|tbnU@6-6QV!wLo-w`LFJ zmfoyePrnrUyYIXJsr5WFiQqrWp9DJ$kyZgwGo}7rySL9vcp_9nZWkubBS*Pl>)&-Q{>KUG*udko5x|gSJ``0^d|k@&I?Uk zO7W5KY_1DntX21L+RYY=Z*$BuA8#%#E=&p=i@Bt6Y-03kXC@p-z1N z$;>cbM>0SB*1olSXSt#KJg&aQbJ$@WGvuy}TYbQqnyb}K!y?w-6aD8t z^_EwMv(y^i$%z}IoR_saPO2)Z1r%}s!vzudD0?v^4uk4_l>=Wj`CeFF;92wC%c?xf z*B4Bn2i>5UBKY;~umDoHIy%7ZI9XK?Sy|;Qq^HOTY4&8;xTq*j9aYvaMO4wFQ*G!= zMxQX4XdQ;#s=og;l)=&MXzi=f?~s)+tB2p8N8@pv<_pRmh&fz3CTa{3Z?V;hK>uF4 zxUHwhW$S|rRxi4S2Fg%?FI?4?EBZo*<@V)#)1jS!&~a#R1<42zBs=M#2xz`S5hU4X zIWK7~R5N8O3T-N(aubwI8ZPQ>P$qH3)lzA454*>24z(8H&dLK?V8APA%+G~D7PP#n zNWM1r4D}a0)EBK1vdt@9S?KrQOHoiaG-;R+|Ak#LAurYD&YX@|1XhZd$grz+Qdj5B zrHP+f%Zg!H6L-S3;)pHG!&`Cg$|mN$VhkywWJp-$7+3)+_6}ZeA3X2c$Vl=&s%y7) zb_ta?bOp=m@+G73mRB>ZO0J`fF6_zmvL{&+Sc;7xQ^w|*HyD|aO^X>lO+9iS=ZL(0+cq!+QHSG8BJh=ci*d4#O zBx>AlKnH^FEraEEX3}6-8?k(n8)8(IHLTY8-wvKAmZjvmgL;5q6z6$#riOD1pI0<+ zb}637npTt=xq9@%1=z;SzGooa-ur-!t%QcHAKeZ7^8+7t+1^4HvXZ1hX%iyFz7(QH z>V=l)2Y2Y?3v}Xgd#RLZx^a1Mx6$+6xewd2MbO~Qv%9rWcI;HllLe=A8vAY6!zVGp zAApfDZd^YWGn_a|4kK?3Aq+)Tg;vDMW!IrpTHLgez={5;duErIy+U|omRG2>JVg!E zwiW2-L=5;0xo}9eYV+A)ck7kkq%j=3aZahe7dhz5dsp(|RorFeRPwp1QYl?VlN62@ z=V&T3RO}E@WB5n!U><(s8F~ADW8s}02rbE}^CI$;eZ^FSK`F<^aW(9ZHZ)f-^^};g zmV%^eMUPJGp$sLxv{p|`@$sQI8bcMLdL^t%F7MzMES0NI(O2dF^wp!G{@b6QS)Y&b zcoBy&4DqfmL^>QSh27;;$pv<=ff# znmwfVGoY>HVg$Igd`|9l|DK$tK+08Xy>pXqRzHD4oTNCIACeV8zI;A!Kg>=(#Qnm1 z_>UyRC(7~4ituG}t56p(85ec|*36A(e@Yzxt8jdGP-?ga_b+HANSq&Y^j!RJvO66K!(E}@$_j_gj zr}`nu;Hx@LK4TjJd+q3_cDie4M9Tfd0>xpiRc~ETdJGMaEC7n!C;aqZd#}BD)VcXE zL_ZfYf%0!Esl5cOf)Yy3n?;I0hZ4-&25=U+InehxF-0nN@}GjKQqPD|hAvNZ_RjZo@yM2-lWDwQn3U5S zij$G^f*u!kA3Yhpfe}{ep{ZyNVgxCPoiQ3C0MSJ^Ox`4QU2ka@*`-ktpuUPPzjA8!W^W=7?m~C^!SrJ2f!~p{mziqwT`(s&M6^%9~CmacXkw1sL~VA;~ej392Ma z^b6{q;zBmq`gEGdp-Gcu?~qdC>|83wfoR-|W(;<>%SrWs0aej8u83OjeAs2}6n@Gk zb9_x3`aCA$T&`m~b4VTXutoAE^Fgesl_qN3mlPDhaXOBbv=EK>@6!YpTKrkxr}$Lu z@kCOta0=KBCR*>u{RM1~_}lk*n;GzX3t2y?Miru}L^j$mfS?%Uw!J`EZ{u*CmQMbo zpYN)22|0@W%%Wqp+UMB>3ag}+v#LlLoobCYjKeHjdALZk zoreMN{_RKWk5^edL0-JZ9 zkZpq}5DYT!0i|_yAD#IR;HdSUjN*~^geS^>hIWbGL*g0yXCszU)Bt(FsF`V8g>w!3 zlAXfWU@0K7+WqDDaO>#x)^<14bug1K)oTo)3g(t*sDos&2?RF`gI0ZQOxVPAftIS; znnX7PAKtL4FQFE+_9D6r7VoOj2{e&o5DI?6>_XDtG4^nOD#_PE?1H# zXUJCWQmPO?cqkrD?C9nkIqjyyC0Pkj$*dh!V%yPhxPvS{XZoRIa<|=jidL|_e!`be zdzgOMo2q>>6^M&884~-`kjH4!BVN|ReJ`NCcEX{~$l~dJKUr|G zK%inH)=z0fy)k3PZ%cevy0b6yQZhFI=9Cx6tO|2U|c{8J(@Olc$ipS zk(zC~D{HN}iNiyI@5kcF6BTq>*pDz^2T;Xqa^0e&?QBd&*M_+t3g)y2T_7;tDCzCu zbif02_V^;IkzY3WZu`yto1^aY1{7q|54Fi@ES86gomCxH{an_(8Jt1UkY@Eql|X!z zW8YhHoz`{a6%bg0m|V|u*F8MkJCY?vxp)n6#V|S?Z3#nslyS?hOGZ}Z8KKR8jmB=t^DO&Velm*kk5*O0 ze|*e&Jx@utA^tYR z=pr7FU8MC8MlJ+v)hAVivlRxdoc^a`Np9LjQ1(TSYSX@vrEpx0(Ud_;ikcM4F|P1& zn~BMA*id_~p8?MVXE#=7y{xeUQdd!cYLhH0&iZHo0fjne{fr0b7lTbuET>3d>|FI8 z3By52(eo%jcOD2SQ*I&(!rur2i<}7J0knm`=)I=ILQ_h;GW!I(B`n&mY^?_FBmhCA zFvQ~1LDOQ%NV zq%=^y4(*UVK8}xnJnU{gSFXBd_cxG-dZ`x7Cc*8QG#Fb*6$!>x1g-h1_#7S7tEn#@ zOxAw4cE37q{jKj)gAEIcflx&Y+WvYc`QM(+^C>hfjHL9csn~CnpW9+6HuZ!|+cca1Cj*l%AZijVv#dCq^v-Nr> zaPb+@*`ifjh@ru$fAo{)d&9%;65qc_#|qa(a@|-w4I8-8aIka|yL-%-4eJ?E3#du3 zy@&XegeMOgP#p*dQWSNRk=oOt-G#D+lT9OMtmsb(fiRR!Qgje&8$bWJbKG5hwsYJJ zUhMqReGcE$88nI}A2~G~Zcau$_7ea+?Er+lp-Y+C&EUuZ?iSuBZa&U%tV5_Om zEK;rxNB3xOpWzu`t&V+;TAZ6X32>rnP6GHoj?%GshW*VuzdM~$MZvm5SjW!;SrbF{uqP5e@K|FRNB_^A&u*sACH+#L~t(Qme9V9G5tm19* z&gvHJ#%c7tH;FDM({wz^3i2T&TBF2-rtH=GluVv4$q;Es+z5PeW1Us}D4`_o{YYT* zN)2TuyK8mFcU7_|C3ZyWD577%i$Q1L|7ZQwI(_&ksbUv)h5fU4_=d5$MRm-`R^3D?nqUz)>x?0r#;?so z<}oHAD`FZM0@MDv@xRe|{qh0HY_+Wjp~w`xDje2Mf8J9pUjRyuO+O)E@n^YV1nq z?F+!Ff3+6+&(FW=bJP9LS1|v&>HeqvX!T*~{-@LV^Zw_L_>}K|&guTA^HA=8IxDM> z(fq6P?fRqdzsCKKHUMLO{oKF$Iltkir_%PT@ULjJG1xuJP-2*+XCFr6vf;@fvy4uv zL{im95@6>V4}hW%duK&R6>QC)DrhmDP@Kv1u&18#<%x>PK{B(B%z@F&p?zQ~_{5;# z=Gh2(gkjydj?*VgRSsv(BkO9(xnQvF&%g7FSjv3)G&+m6_8L3vU)Hd`l4pz5f7=JN zG{NE`a^zwT1f0iOCqTBn)+$09TOgl`*E<$u6G+|iTZTzF$)+Gd&=ghNBkB7b?AKB8 zac4jQO}GbiTx;IMwZP%B_-sRadeU1qV-v4OOUpqO<_eXq0U3ZA&}_7@V_A?bidIk= zbEV=zr~rgX?^RAHu zrCQE8j@aB+*D2=CB{Y|d{e(;Q6RRlxDwRC#CHd|&;*$5RdH{Dh$+t~Ot6Whexf-+$ z77gkxfaZ4cy?y1l&}6j}paaPg!kOl5FNFc`Yc3`oRm5+k1T)BwLMYERNuvCa0~$?? z*MX%05sBPGu>xI4MZi(_D-vi%#EA{PgP~qDy-J1&=E`AKISbw^z@BZ9t(35h^hB&R z?l(;JqRB~g7Aw7OX4y>{p;qh&l_413Uf?@2aKh=39vG4!!meY_g$p39Fv+#G#}+ja zv3XXT48GJV%Fu3`Bxlz&q$O^*iYkqPg@Hm(VAD=eM2d=RgjRXOYabBG=q?PB+6y+` zYA~SwFh)!a{mR13OMQyB&4iNd~ucGx3e3x4{R)n0y1>jN|KDTH-uv7sgO45Vaf62nyRUv_UonglnO`9~!cE9o@&eR)Nxt*u0L4w@RNQ#(*e1 z3j!kw!6BOT1Ei9w@9M^-7@p(~*nO_SvXFI8URPB;?2&zn z=0Xuz2K@m|0#RNA+S=EbL2DbOA$ zvn?!vk6xy*%I zra!#7A?3@h8|n|emd}CXAiH)NEZ?AX0!) zWCSGm^_~kyX^1ht${oSdBHw0m=sMKk4Ni|nTnBH{Yw}OY9NaZD$Y8CyT)R-VuBK2k zfTtww85e}x+Ei>Gm9sS8=#?RaDY=_Ro8i-W{hpyoSoROG+Tal+c zlS{P#{H@B!Qa$JHDA7&TGo5q{DKrQ)UIxtax03DY2d|qf1_G;mYllI10U5iDt|G77 zh-j*^)DE5ojlHd3=w{?NXemP)sULI`Fhy&}s_k~6t)FYwl%_!ix6Gw^IS zv9WN`hPLFlC9sIcULImlJob)Jk7Sn5?PpcCW!jEY6*8u5%=6ptBuec-*)0GG?T@b; zMZVOgn5i%jr`K!{+u#KYsazPo9U{st{JOfJ+@Hyfca@Q|ing3v8%g1n(`UhZO%~1_ zyvN<9?=%9tlx3<_xi?2MP=n~873f?woe1EbTAdc+pAFp&Y4%o*3 zs^nrvxg2D`22ZlffzpqPkx?OL_!>{NUH@IShJWT{8}};c7!A#Sihf?o2uJlxKuW%i z#_;LWN8yshY)Z7p0$TWFn0+rjYX*ZXT`2e>gp^%?{n*Fc0XS^y6J*%l9B#mar<>Rc zerwUUP>jn*<0)!n^ufW%aUT3PpxOD8C(xh9`O~MJaLFAIwn-TJ767*2F=A4KnKp~k z#)EGau6cIk;X6epgAC1YOqfo30=Q(TusXLa+JeC+Ea{kQ5{B8k7%&~tsexN-G;YvR zo?$qz38E-@-;pW22{}ocIch{=_YJglm1-f$@fq#)W{^Q$n2+=<7Q<#gTvn00ov@DppHn zrwXS9T8YHw!IB4w>!F-GgHSTA=R9Iepba2ovbm}upGu2iz%rT6t#*_a-QtY+O`M{U zZ7i&kKEHuo;JM_4GOT2^%=SXND?$~0qd&G^M#$A~ETTBIZ62q8+J^l<|G82A|L4d5 zYCn8bmjB!BKjr^F;!`32bNsJ|YpeiReYnzj6oB;KdAQ!L2mnx40DQUpZ<&aZq<>zL z{m<{+o9V?rTd=pB?}3^#$VP6Q?;ZU=Fc|Qz^%Q8i&!dMfAhu?n`f&KPS%Mb?#HyrD zOFEvQn$7OfGdg&o4s^g$#a4KGR@I)LM*zRxEGVh&=AJy$YKMMj(b*K*8e+ujlceC8 zF_MPm-Eyx&yLuaiiLI6WOs2vH@rA7P|MP)mX43y*a`MmD|2}&3@X@0`>Hojze^R*klugg>h5>$x2%k z5*yy%SsmO*ixboaR|S!Ao}vA(_Xr2)J*!kMLpe{myu0)42HkQry&~}QZZUc0-hjPl zDRlwuSAph4eF;vcTAbq3MnBZ_*%fQUMxSoH+yL;C-q4S+z|xhXWnz)A%V}=pASK_M zX7FIB9ZSa399E`?&)7R|XbS{wM|WrL^~YI0iHDeq!g*%ss0tQON?<66_Emx*N-Me! zC%_rM8O0Ic%L(58lcj5%x@wXJ)OotOipg-{Td;058{#Pq50}~%G4dz9e0p-z6gg)B z3xu<#%nTUm2x*mNG8(3)HJ_bO&8cM;kq%1rFe8Pjwbl$;ZC#UOWNPgRW>HWLx79m@ z_tcq`P};Dcd5|`-h!(C14Xgp@OH{1Yrp(YS`mxkDNsM$A!;;L;*Q1VFk4elI6SqOz zXJXp;8H+@((f(1z4Ux<@$_J~}3b{-)7|`CsR66=Y~&x{=DIruzLK@#%SW0 zonm-*w5zf{-+=IGs|5sN)tw5}4&lBcHJ`KiWG?s5qOy2g+(0Zl=uTRuvg3@rG;biY z2;UG|oaLsuk)_6;kYlp+L(|*_k1nKEo}$uL+8a8RpVDI;i9noIWZHV4kTol<@yH;D#R3~Rs z&*i9^`rJTH+Bmq))VZ&wRIyb%GBKGMV4qFS=$#pUpVa$(CmWmIzH|m?gx8Y$J;;d?7zfkpP4^Hq%RRmwzppQ z-t52F+21+(vHN_k0UW9G?)AaZ4$e2c>4YV3!95iDjK#il08IK6lf#N5gw8$Lbkf&i zf@KU@Bdg_`eC{8_M6tcyN%dRQ(6le)&eY!R8~vbR6%PqSZFV3><7VOm2&W5 z-j@+34a2#@C-_4RVE9hmV7jPbTPE521ncfvR8Dn`OuQXwVOXLGQnpuQD&U1X9xK%u zb=B&&xoXB=t=0w?d5UM0JPP&ItTR4*SvN-ARn^4J;}z|P8q2&J-_6FK{t(TA5UKrD zvrCPIuaeYki(_*dQ7R`w8gY>E+Ty>La3N6`?SZDZ4C6e=aTnmC>l27MB*hqG<(0?EOy^yzv9HzIi`I)TMpiT^KKzDz1ML+1k$^O8|JQ* z^-2}9Z|uFjLfW++;Se#5#9iQ@q1h#qm`$Gqca-#p=I}NOEkp~!Iu?cvmE_TId>#Sg zvB5dLHmq`eyIemlCd2A-1H0THIfH|@vfR)vCw;3bH@3@-@w}}rm)qsY*S@;k)Go&& zVP&~XcV6J=s4jP9m%ExV;D4BcjlKjwv`cA3P)e{q1vcwzCQv=s(=|i|8A4nS?!%w3 zL{kY*PA0(D$Ayb64wZ3##(jfCd2(jUK)7Mrq2ASuMqEa6+qpZ1Qf~gY?CnoRJY8BE z!vUlkvNt?!L}LhJ(G8;A2Jahv#U=xl49#YhNrFzh+)*R)(zRXt3+pIEgi()A6{~4!xbAQQn)f4WB65BbKR| zb*`3<*^L>XPNHFy_AB@+7ov4s)P5??c7yuFj~VnVOCjpSo2JqwedNt+v1T#HQwM>2 zp%AU)x#ZgzV5trL8x*laouq(o!hwhnA@l#{-kRP{N42(1@3g6W^ zXp$4_Ey7?x9K&jg26)D6G&0*(ju;q>8iF3?vS^Dd^=NX1E>6)+JlJhk_7?lkhzW^_ zWk!yqIc$lmWHcQG(jDZ9Kp-9Q#*=w(`Ko%{~Bnr!gvZI71B|L-BAiHlA zlWVf*$aph~<2FT$t87$%V7ChBv=LH4=@Ptref!AT(5*tpGfm#&WLrP8}oO@FpY z!F3*qL9REkj_mIXi6r{ci>H$3+(_qP6{$td=ZFqM(HAhKt&kx}sUeo2bs{G9S`|%?yofI;b%YwO40o4(Q-Cf-O1F8ea`k?Wbu9l9pNp`*L;S#e#Q`7rp+!+R9ZO zcepfU$m>e`Fxb$)HjveX^%S(mvv}+8QAmqulaPkITdGFE<(%DQN+<#-zYdRc8+t6ZVRk=PM;N12DXcKIo;T zG8y@bES#WM0&F8L1StT{vI1jHz?p&9KqE9vqaaz6xIdlbCM#bJZ`@e0a%4{mcVQK& zwgifBA#@`cNd+f`xSAB3N@{Fe>NFiqtJWPjImTy$Xg7ULR#{aO>XG4@Q5u&tU{M1L zd>NdlhSJl?f`G*ea^okuam~jv2j|Qaz)_o3idnN{DRPuYL0t@R^#PIY;RazuU?_!+ zkuF_WdI-|F)tyh?AWrolPA9;lCh^4Uy~`79@HdRKon+J8=~%F|8Fc&siTdcRqlc4rSnunTuiVmSaNMt0`{TJV|HIc@8=6j6PU0a% z>a71*V9(=7?QXMSs_49n?IbV%5TM4+h_7^LtHIcJTKJ)9Hj`#`U1Jo!P*al7{)_aS z7&($g>(Hdn-Or?1L>}x;f`>vWeLBSB^3m{vURyk{vospk6ICqN@kEUI zC{i+&OH_T)O0a$tE8S)9}?0n#_B7Q*U5YSH}WLDmw|`=eSCM#Ao0C^@4{^=cZD#3FDN z1B;O;IE%Eyv$l=FZ2Lw5%Bk5gH9JOeIP7>TwYF_;q&##m3lExMUSFQaip$g50|4<9 zdgD$VM{h$T5TqsAZ1?@Jy` z%w;khQaDAVi|kqS9tDr{iK#__7}~92M}^D-=n@^{Bo@b2W`HQefK*fFpy>9$O0+`6 zcGrf58*AWl(aaBR(qRq?s7gu{r}IdChv<2Et^4nY3nD>@$kahZ!xc3`leI0dP^)c= z0E#QfCKL4hrUgNT7R_i`HO3zpZflc)V015=m{bT=JWjk0+b~*qY^3h!rYr|!G#CIX zWy4r_3rkC8;M~C`;*-0hEQ=CPXiv1zZe>35%@!(e478PtWtvceqNPr6Hk3u5fb)7p zTd3tQ^x9<6pOmV}tpKOg7Nv`CLNa5!a|Z=MZ1hiw(h;VF2PBiYSV7DTGHPu&`5XeJL$)hq&3_U+Q57unNpJtqIg~K!IYyJJqHFl5XgxxSwa>n1a)&2UFPdIe zdFSCfSF1#n$=AuvHsx)Xba>;s@*OPS@ho_S8sA{SOSZr5P-V%b4UQF`;1(AUt6JaW zsJB?!J*!=tks&j*~SB0I@ovqzNZ?jcH;Dt!Ae=_hDu@%L$*7Z&#q!yKPX zJ~n`hQD$65&8S2>z=$;CP>#UnYCoY|!@(2=7%^`=M1n5Isk)4Hm;(x?!W;))z3>id zxA@DLP8hS@^Nu;gDr|Q1PAgwBB6wYiq0zwzW_H|LI*XuL+jOL^eNv1M*guC!*mNv~ ze!%{uKuM-km%y|L-vn>j>{1^$n-4KNEJ{~Dd|^j zV*pFOctG4@oAt;g4#D73=y0o5bK2%vx3rB8qg+u1deNd2Nr}Q$oV7zRxx1214^w_y zS|`I`JF3Q6fNX^F0imn{+TJ}M>FA~2I(wj$Ol zQbYBWS#Sju(Kp{3%xW3T8Eaok)Rp0sc7P(Xc@2RDqGJ(Dd?0asiEU^g34AatUzv<` z?HQFjVW}Rh5MQ;J-Bhuc{GF8RlMNozrOZ;GNGO-xs{#9sW%Ott z=z4d1o0PU_tS@>PRVV$LJ&N7h;a&!u%#vK~;#O{Nd5X>lKtf$cU7xb3MNRzx!etQQ zeGKY`@H(|RAe^_46-0;Rg6xcupl_PE8JiPF99z12>zaJEVxLu_bFF>8a6tO-FS(NF zW4^*R-#qhXV%2%k?{nm3%5|xC7jOWxT_4V9qhgT2(-}M3HSSkBaB&wV5Tp#hjB==f zf$TA~e7!Q=2SDAOugdQXvO}+ebG5x57Eiv0lvKg|>d<=30^21J2}_hmnA!z`?2Ik1mlInCbmVbesfvGB4Ybhq-s0umMmU4ci6vYr84&{}_xsb)bV!*t_!7Xf zHTE=7KAv%O@IL_8YVgh8eIm(n{#H=|6Sj#@&zftNO#VIlZ}y&b57)h?9K+D)|7b_i zbf0)rETK~^wT6MBe1|N>KT3o?+bfBX6xG2G-lV$(S1EuU3f`v_>f}vlxM|DW*Y6O; z95=nGLZ{V=X3!N59h2NXmf9(4O_j5nrh#kP>u*JQHLY;WAC;#HB-x;5W{6N;Iddr!k8GVN_$CkMWy>I{;!&Vr(QMRjV%e?s9_Ca_6%6Rv?6?JRn3tVuC;eHn zI99nq8uw3Wwiv(aX&Ij-Z<2b6p%{u>cn9H4d2P~<5*K`Hx6B!gspecQ))aU~HD$^n z8YK}N+nrd+YA({SnUE&AFZtZhpime2ZD1J(eB{5{F%TF4G0xfoIor@;& zuQ3EfCfb^b%Ci@Hv&c-fb@p2H0wIZzW*&dKS3VQ69roN^m*Qn!QzSv)WUYID$5MTmFDDwc+S$LY2zuHGd1{WW8s_czhD0T z`_l#7`tjQ8cX&l_MRcL~u*coKxkv2|w!jqSbQqmcB9=&?>&zWGA(sO1Vt4E1(cFA% zDfsu*dGQgQ(M=CfBggz$z^pEO(^{pT4i+dBTVtuciu8vKjgf!jfm{XS;S?>8CqP39 zHj=~eo;Rcy2ZwuG$2!~@buu(zHu2!v**|`9xVPKg$LHn0#D=uH}I!yjIXL9+ecDX)P z+ZOjDNfLTPgtyblsA$ShtWdTU#l+Hey$&9E`a^mt>Xh~>1Jv_T1bb|6ab(su`bJMAr6&js@-sY&l7-e}8 znu>D3FKdr4?Ui-AevBtTs&Y#W^4Y!lR6ms4%q34qHnDo7LR-khE)u;br%)iJAoeV(rA9_R2S>s_Sx9U99s-x|#po6j1v58xiZtIBfm1^6HJ!~%MfS4=4 zBgFupmX89N;F$*k)GO;cxuW6~`PY)PaBGfKDY>N=PXY_9Xf=sUMq;sy7t)T|cn0!sVcJ=mdI76uIlG#|jC_hNaE~lNMWlQS zc>du7?|RQ~H}}VBvCmdhcVnZ~hjb~z3GtK>D*)^fxly%OSKZr9xm&OfSxRtU$|NC4 zb2UBKaA3g4)$;g;vHU6N>HHb?H8euLZ(M@+H!Oi`)$HklX$>lHE%(~?(8-2bW$?(V zrD2YCUceO6;^)Epak@J^U#PtPtzn4RxYmjD@lBsDJZ4>TsE?||D>olD(Q01^HXQu+ zj&W@!t91xGLBi1B4+X%=Rdnm%SB&LU<1ju8IM(Z1MMm9TosbJ4W88+mgk6|8$H^@eYW)a{mfnomyz4t|xVFgNlL zzNu#z1wuW=@A6!M)i>Mn97G9u3g7fIiqEN^(=T~vI%4`k0W;(&edp(FQ-J?|;zXu4 zN83kajZI>V>Py8Q7t_k@RZa zuOw$qp_8)cju>!Sg)JuZ#gJ7%NINQ6lqGXIm|48{Gv9Gy>9L_$tCWFitZlx zcqnOQ95V8+4%Yoo_|(ULr&;(K;oonF|GxI^KgR9d&q@X77&i~#%aMve8<*{OyVeT+D} zd)`#ZyPE;!3D3`^P`HdBj=2JHgQyaU86YP(zXU!rniTmuFqx7p9)A$MaaN4D~$%85_tl zOsY(`WXM7Yl(#BpFxtYYku1l{%sDHTeZjn?abqP~5saOgBP4XiDS&^3YCOl7(LJHu zfmXB9UUr$fZSs`F80IC$V4Rl<$}o!t!D)m!Pl3Eg6wL_4ly8~=Ff7EJVVy~g(DL9c z%LdDml}6(KLFPRuCA|59+_t>!B};)^ENP^*HVw>m z=fC&1etEWYd_*@vfB}?f1s{L_UqGP0Bp*BtI*;x9A$&eJhtJ4pwDhK7*T$HkDxtPj zato8d%{AJ=lP9WTXhp_Egc)a-okr12C0|1047unA+BjoYzeXCea}+-fSsCmAz>M`r9w6+maF zc4sLI4OW8VRL9_Syv(39}?F$u7Ft>ilrL_SG);Qbx^8t`rGRG9VO zN@YZD`6QMllv0#r7#=%OEL>pI`y59r-Jy;wVj&o|@*|T(MMcx96i9{)Cr@YeRwnD6 zGL|6AycBN{+R923=oRK9RIAWnY-+8BhP{^@!!oH6g{YGsDT~vR*EMPe57K6!3%X`~ zZE;TFK8bN(^mg?f_9v3m%)&5RID;iZC%Q405szskv({OVxyK4#j*DE#r$kQY0sBWG zEW|o>a?nDCrRm2O%t_?0f&Bi7kpNcMjfhu}2^v10ZGq;D9K%5Z=#)h{s=VRV6+5+Z zU8Y8uITQ#_ef?(#2fN*^{R#kvG6g3y0POC({86W@tN>$3Krk+WQCg>&)z11}y-$`P zY2yG3rif?nq3i;(7V;%0#%(;FWMkw~V%mW~0*B0`32C%XDPgn-XHXanGWa>UOo&HX zv2U8F5;xtbK>|wFS|qvXd~GbSw=V1rYpLb(6I%FaEY=u82g%(>GHcOSK=3xf*YV#u z2{_`;#}LbSvAwjZjr?v23E-&$&Xi2HC7uBuH!!GyHZY$x^SI{(3@!riH^~|w4fEyT zMKXcuIm?i>91anP!)7}xApDwNz%bj$8zYDlkp9z@vP5C~x;Mb1# z@3M04J-^x3N5#jTL10!=d-ka%O@^|b-gKVQSV>c4jPsHF8GO;pjKEfbBqpfurqmDx zr+TKcIx>VHvz&{1rnCi@a_CiExQ>CkBDq_zSE(U>y=-j09hQ8pnc7h(CyV0YPBdt# z<12Gm31EtGdzkHph{KNHvTh_n811nff_CCzacD+WZ6Ul(_7S^?IkXd^;qNg-gr$QP zyg%pxm5culLejy>2b|PS0o#Z;Hd;6@Sc}l&GkAyR7TtCtC41i8dj6{WS6YJ{WdxWc zQsEE~9i2)(iYnP)97^SQXh~LK;!^-e0?kdWhT7WnS{5itE%DS=xUUGGp!Wm{ZcGtk z<%rH`k)^Q{f8@%6e{FSdloGg)NZF_>VnO(S1~M#x&u;712xQC3!01| z&*Ds;cqQoghP>mgGsH4Pxvyx&0{}rq$elplwxCgF3oVxke{7S?xG+aTGtiVhS+Z_G zpb#cr&T(8&488rGW;WadzzPih$?#>ZO@DM~ZeUn^ceqHJH7Twf=oxN7jpm6JZD{6b z?Sargyq6t7GsazRb@t$WUnPzyqBodx;C*H?4V?sIF*uBI&b}a%hK9A`r8VIE_LPQ} z<23`41oL^9Xdz7NZoqr?253v z&nS1Hze|h-w~os*QaUe+?ctR-K0-|y1Pd1YeFZ~p%cu!&b)m)0pyPNF;WQ=hD239<7@Wlz%gafo^+!7m zSqlF?F^yTWT^g0sb6`vOrOZhyRG!*NIzGEgC3sg?OVWi*}TIu zYxhnmXP9iJd^#Fw#rS)KwO}Q#3bYP@hePpQBF?9X*uecF1-99F!?R7?c+fm1u^OH| z*%YN3{-Es!uNF7;F2PD3e~y6Tr;&8v*;9{0R$EufI|muN z%6yo@ymCT8D3lZ~7l|p=;IZ+}v-U*kRDdbsxpIQM=^3;|mPwSJ!QSrtH%u9&-o%A^ zrz&#vX6E>zb;r-Ko^PNGXS$=qz8$$-uoc??8aC|n8^Q0XbH@^zd> zl!!|sC#67g(9chbWFM}dg|0SJa?eB!HwO1cfWcYAqMDGGS(Mb~)YU{OI^+ryv<=mP zpa$y4jaO4b$}E~*J=>~E*&G)*8Cu+nn649QIa^N6@DD%C3>4q%0m1@>>N5ypaRp$nYez2+l5tTKY|G zPv!i8^~g% z72+$|FxYe=;Mv%rWa7$qvgzDi1HB)reXV3=G@Y`Bh(+M>=_HQrj`4fVyeM@A3&&L0 zb%rEFoW#s?&B8$5#`68VV%Oo9Y&eM2l6Zo(ygoOt^$78`%rTVUm-L(oAl}R1b3$Zo zrbFy%B-o?cW!;d)@{RDAJDXTpI$hc#vagVB?1(Xa0-UjgI=bDpc_V6?fI9nFK|EJ0 z;r8{3)z{xDdz+t6lJuj!S#3(fU^dhdJBeFKimayD@|4{BBEryPCYz{z!X}#n1h8Fo z=9XuzebTbHS#%1Cm+>Q-1EDa^6M!OlrQogE10JZ1-*_g^B;BgNO^uHh;r?`Q=A3u} zx|W%kcqrWD5LW@kwL^m7pQDVSh^R|R-60AuO>Bh9c``Z|K2NEJ$m{f7jfYSN+q}PN z5oj}4xTR@s$gdL$HvRD^N+)r%W8O@9){zzv5umOyB@pKOW^!OE>>Y^unpB@NNt7x7#ccTGJ^(vp~K zF`jC-t23cE$4m{{2FEeVaqBK^THLQ{9xpQ^>zHx-;cYS_1zdp`rEYrl_-x)X{%En3 zE;~t3NTowWxmFEA>H%B%)9^a12n0dU7h1?AAzZ0B2v~6>UeFadswb!gkK9YxPhUZk zB}gr*-OH-TfvM0#K8?|gg3w)U2aD}#s9mD0Hn)32AiMY&wS{N>tbx`*CLD(1E{v(F z;cVbBdtKT*$^WdXi7n#MI78!Am0`O{{yhcJs*JmT5?Ud{z7u}8`?`}i(skf>) z9*Zeb&u(C4@6{gpS^-mie&eLt(#nQMDv6ZVkR$7!Q#yDX@-1Z@!y1cEt*lTf(pYDr zu0-Wsy2`VKR=)5aIK`mh_FqIvi_@eG_tH&UZ>Uc{QpH9rCR! zT|`8DXi=CDbzsS6<71w~C11*w5vu&G3!@FbhiG~?bExbRYdW$nRCWwWPOU8mJEzzK zznU?XqeV4#a%D&qX|hJW4!a2-vi+MpiZe+%VVhsGGQL z-@>MbN|(=02b7&(U|kNYQx$4qrCXlC`o>A@MaDC(P|G~j2qVW~YUHuUN;u3I4qrmz zSW=qCXu7CDoPtLsL{i9`nrsXz|3g}deU|o`xslS%8A=-dMWyiy@;JY6!(&%90wb8z zh4V?#45eC5U6R6c!1GZ(&&+7zv>LWm$^)d)*wO`is3htAO6X_Jhq_*`!fzT9&tfSw zpO6?9qPaJr>W&_a^VYhe)cH*`I2R7;<7J8mnRV?>q8yqB<5&nAP_;H1TUY6XM}V@5 zB8{(Sj%qo8i3PHV_pszEhWje?`-Owrbi#XIa?hLk~se(ZCiESY0h1wGQ${WWbAJMaKq|YdvM7!A-70*79LJHpyn_nfU#qAT{ft{!e!SDPw|zJ%oBpcZPaVy9>-f4_*1fL(RvNyWo(;88WzePPlAef4iqN~m=V9JK52a|J)LcB^-=M3 zWGSUBTMSjTE$}{mCA$~T5=CWzY{jyg@L9~x_UfA2%mWo}g6Z=p*BHv{A zILqGg28&0>2n!E*HmkyOqNvKAWYIH1KK`hSI0>+0l1R4ih?g6krvT&%X63*?`vF;%E$nqUt6`2VU_kgYB~bUPNibL1?o%X1BB-?a#Xu zo`o5YYp7lXI@xDwLvJzrYByN|&zDZPyb>B>Y~vn$Y`RDJjDbJ+IAh#&V%3eie16pr z-aE_wDTB|ohc}MjP>>r(ZQb=x(-XAC?8y;ioiC0D$%hKB61++Hz?33Eg!@N4$pT8l zB(_h2i$pv=XuT#0GVc?~DD=U0StKy3GQR#GY6ONM^hHa}9-@6P7x~;Z`uc%PzKj6) zA$VHFQBo|S{bQ3hL#|z2iBH@fqdYj7CPTR*JBctY(FCY@oa0HEXOn_`3(^?FWjPr& z0x`I8rNO!(q5Y!Dt8T4qqLPvrfkK2U%H(m9q^OaUhLtiO4hlEd`v-u6W-o0uYtHJT z8BHTu`Vg*IlULKt5q9$fo@zE_Q@<^hS7Nh1#}hIY7NrBBA$B`adVu%E!g8<`yjO3O z8;4TgYu6ovKm}eh5X!K9DdG@3TWY@(+KWL)2f->1rg*ELhU6EZjf-($zGl$f4OO?j zf?Jf;r+kt4fr6E31Z5N2Nz7>!ov}Mk5bHsMS2MH|otYE4v>_#=Y~2#yw8-uTP z_pMd-*V#+zl~@;)RFLj^D^}aPKrzQ+<-M9Vf>*wzq{Z`HAU+rlhRQ^_33p*9<8#R$ zQxUn{@Z&{1?>>9;GQ4+>c{oCp&vFRUX#lGjz)zNqdy;c(57F_XW1lAN&ZKO>G%KIi zf0h6LP4OSjzd{?c<3Fr+I%^Nh@gLfM#((%DKIQli=M?{;y=vk=tOo71b@>14M9q(pd}I->$EHx88nK!2oa&IFfIe2<$~^GRAx+q!PbXG$=ce&H%_zIgn0r z;ziQg-FbFHAf0G>g~M@!-Ap5SX5d3PqKJ)MikC9fkxy0fq0})tlH3GRgWU8T%?wNg zddwts;j6U`9x7w4wo7T!RP&vto0G^k{cnpCO6r)!mLdtNK!W-j$QZHu88?#9+F+CEua6j#lO!-`TSwG~pzsi+fZF*!iv; zmr!3(#}=Mp2gahP^Fl_`w`?UXNH;i?by@N{)7Yu#X0WI!b5uX>I>THsQr*E_{)pXN>A}OaROXz8{*7j@dMBQ>KlS^(d?FTX zH(!w3r|-~xn-qN2F}g1&7#rQ#{hKv)qId98&R53DwzieBjMuj6I%JqTD3~%mEclKC zyHHl=HKe={GI{IGvSD^ZIm28>}^1W*h9xExps){>pV@Wu(IFG~t{Dzaf$u2ihS#N;3Xe3HFR z6+{i>^?r4-m7$;QM5m>W$7;0_pv_TE#sN+Wfp}~!qLo4bV=vEBcItRs!(EjR@uZ9p zYnoriIH~5fxGouDL)i%(j$KZ&VNL25$G01Y=5y914p_aRjG5G~^uo_CNfqS29}^2u zfKj~j5{s;P2UaO30sFh(=Wh8aUYxvp@wgf28NPLp{4Wcaf>r-AP5K}49+i^Ioxr&; z2+%2aYj~DT;3OK6$>-j|^EbO&t+j<_a7f}Lh=_x;_!8=FV8vi-Fi3KkmY?H%hyf(p z-+#Zh96G^Mlv{GAN_&?y?aS{<8eREZ?vQM*2FB7uZ=0%SBK~t?d?;L=xub8T6$`Jg zyRaTCg~dX9oPYI;sHJEZ5G{&kFdD~cj-9$uN;uKsgIB- z65H(SJsGlg!se(#Pl6Nw9uPqc;ULE-DKv2Czq2@;3~PEtm-ZEFGvq&0$3J8UO-=34 z7O(?Rj_gkz12I7%F+@QB&&+nwjNT64VN}b;aA_K@bl!0^>9^B&^M4F|>J}fU!twp58 z#pH*<(ozzjXXcQQ2ECzQm)thW!-iTI7`k$)f71&`NAA;U=(FKERnBAp%#mwd4Itql zp4XT#8!?j#;lPZo)%u{v_CaRj=CMJo(%9BivTbKY;B2#5SYJ=O6u4>2+Gj*zscS)l_d+NU7p$e^O#=w5w+ae_ z8kLi!wvEgt%n{~pLem!&B#c6nv7Zd$f5K-Cv|$m#w&6SiKm zNfAbeo5@ngo*jpXet@^ARoy8ATsqBBz`hk&VtUrG=-*u@&xkBAtlXR6jZPgV%!9Vgu zbR12km(w|`kow?b{-)AZF~rSg9H~$w-W=(uP*mnLxoUXTwJQBW!Y=?`O6nv+7p2EFhV+`X z=4?{aT;11&4Q{>c8fh7`XEL z`rVG;(w;tfLa#OJ*~i#8=jfLn^$Smnq++yaeUpmqF=B;h-DI6y16lF4N^arInn5R` z&4_g2t~X~^;mb+dZIwTRa#@SCo`qIK8ztdb;*J5~C+{FA)7wGu5_nKmM(9!TR`vRw znmn1e1{C|j!2?XT?d$`Z5DbOm7Vt6J{;#dBcPdQ(?#%xgtN)Q>@{hl24gRr*!OvTV`{d9L2g!9d zMP>%$Go#vo)l`)B2R(++ubeZtH1A=Un|K_|E3Rf9dx5kKJAoycaPReY_MdluY4Z2| z?$7qmm)r7X@8Ee?zIOk@iNomb(HvkBt_6?ng&^vqAp##rP-W}+bE$mv=9z-{W>>yF z-}%Y3BHvyg{4C$z?C;69-R{2ncB~)Cm+gc7?Jf0mduvz0-k+OWsf_6_PHQv|sBpmp zZNpBscE$`y<`jju~Ks#c0A( zLjy~P(L{oqq$DRslQTC9{CSp%P`}1KrcI`0gOTJ!| zphb&73)4uN!O_mk-t!k|MvIznOw>pL%JNVuKBvW41!in+8K~bui`$2i)9?PO!)9Mny;EFLsBH5H1_vtf)gyR7go|Pc<1^FmerAk$ z#;gtT&>)!qCSMQco59$$UoP=0-Bkdz8~Vp~K;s%C7A!Q)O^^6D1}Z2U=PLz+I~r}L zr^VW}0R z$g6LtGovBj1f4IyBOrym5DIxU9rUd9)oo$^F&T?0%(mw;6RQEZHeKcpms5{>6>2R< z2N_kW_MScCZ~bAcjxmGKN<)kGfr6mgn4JPuPtH8g7b_r*nt;AN>AK5m_NEwBSC7NB zjiWWA8$&XSgHGsLl)rMCqCnX{pJK>=zS9*sPEJBT?wabbq@|Uu$)g#o3Fe7t&@4z~ zc{-2Y>>k7E6sp$Cp!G>B{pG7nufJkvQ8!Mual;_JWb23S55ZY9IYC?!{WQ-ls}xZ* zM10H5#kUOVK3QASGWGTD+ulCd-R*84D@LP!cUxzyIy0_5Qn% zUc2eT{PalPtvohDNzMRl3q$uV>AhBCy-!vX%u5*4b=QJ{fG(l&^L&wIoCDs0p-ye< z?jv22yxrIpD=m=PNakdq@yb01kqOE!qDd$tvkb(&TXCR!{%qCoOXjy|{fF_9QvbZ* z)hf}R)5O1ncaL&&m0<{vvJ)R>(E#i7sIc7czY95QF!Stq0`UQjZ{$F(=#H>&Gdh&t zt$!zEcTbICyOUv@HuCVR^;hwZx0*qr(9Cy}93d>|yyIhMR$8-0r5-utu`Pm%+d;bz z&}t7DjM2D~KO(Ox4A*7fSqXEuaql*4gN6Xqc^*Zzz1PR{K&9394v%nL&qr~DIL$+0 z$%YM8L_mNg#9siLnX5FO=eIoyM2=L|@dZDo|r}!9iaY=?q&iyMbC+ZM7oS8RlKfi+_!3^2Zd_lm1HlVN(Jw(pl2^F#*}Ozj5o42t4Dp437mDj_;jt! z5e|BSDe`1~lVtOGYoFdXFrY&fuVlIrV*rAD#x*$D63FesBLf)i50gO(0T z=pHH{BIr5}Z?dXo-x6C=0Y#$dS`y(?lQ0tbU2(+(d?J~`LXI+CtYIK!XTmcS5e2wo}Zl)DD zwRah7Ye?0}YK2OEWq)0bWcM@2z-yzhMyay2_5E~ z92T?-|9O;CT31S#PB+;2Dt`0}>%4(AOSiqN9=rF7%8 zsx0`IFlcd{s4x17p953}1%Pu_=?!6b3sM-E>uWdWnIc zY{3*5^cay~#bYgU8Bgzba?dOX5lCdSIH~Rl!xla8%Hwb$D&Yh(75_I*ko;B^I654%p-! z@Oh{WYiUiqW41x+)=j+^mx9iQvxcgKT0f`4(vr#(?sc3?$<_#6hy&}eq;kmRHZYGg zIa#6LHSeGKzHnJu{7*h2){GY^ynWDA4%rk^qxP%S4qO+k8@nigSkUCMRf#3q>a@zn zSdp}Dlo9bpXFRyFH0ih7SKYy&$#1&i>A^J`?%1w}Dl%dOjWx zUU|W*v5rFX|6FiHGS)ege<2i-U>^D$)rAaFVKKxh=INwsJmAR`c#;_X(!Q!k_ z=9kF1^1o{QeKrYdf*kTOr77x2e$6JT`mIEe4GgdCHN<U7(=hg?;GdDH!6=eYM`YiIY(VOJq(zATq?id52r3n3XBo+Q=lYjOSo5lZ;0{4OgL z5maNC<*_W2Vz33|@4rK9N~8XR(>=g-`g!zbd%Jsd^nc6IVW$1(A7cOCdHiVY(VzaG z|Dum)|9MXKpPlx1(d`XDTfr9W*DK(`@&xVOJ1!5p2mowBqyneIYI!v-= z@N5$O12emv7sYseW##hna(T#w>XQgqY6NBRkCai_lIlQ`wtE5naxF;FdeXNlRbhu+ zV^Cl>Pu+0A$QS(7Jv`bu*q@un@xz{(cixKmf_}T)nXjtd+kdk+_h_~4xx9*{!`!?X zd}BMr7+4QmuqNM@X3_<|_2&4;gTtd>ZvJpN*oh~=2@I1_-ao$vmS#ElaTyr%;6-va zjT1^X`ylvvIoOVean8;baFR?ulJGd5#Him-FpOj$jRhO;pTv3pDYU;3T3VbrZ1!m9 z<^I+&P{X+P3RQq?*FuNc(8AmXuBos`(i242_57j zpIn$uv{7ncItss93!ZYH19s|F2QelzQZk6$=3jTZyU*ub#ONL#9=_S1>-Z1(5_fLR zf4Kf#=hjvtAHKyK*^6 zpxDVU>wnBK#%W4-3c#zc45olzz_a5 za~`@K?;;UW9;P1JNl4>459=iB=$wal?CLrPi03?2@lWRF9=k7eqjTSSaDF`OZatry z`|h4lDv-NI(~p{u(N;M zeJLPzxbTLF>BxNh$cfCqa*xi7*E=@vFJZ7Rse)`1!q(u_Y%_K_qN?Jq@-wV5r+k^Wk}s{H?bhWU0Pb#ea5vZN~ihAe0jCb0HuVxkX*;G{(=OuFH0U z74?g;z1m*eRGxAi*R|c&-#Ya}P|@$c5+oIK^mdRO5+x!1t$EFEja(Mdw(ASg|LlcT z(OExxb(O7O9RR~`4dc{;CQse&WG5f6)a_=&P;ot&yKEICEpyVi8p|E_iFxlps649b zXH%bzs{WW(bk=%m784y9EULDR6piVseOP&?38qB7&1q#aMpT}lD!Y4q0?O&A_*_rz3!o|qC({|<)R)_K1x?lJXQhu!*mP1R z%I?NGP0e{)18ElhIGM4&sI{owZX)VbGZ0w4mLt@RdSUMk(m~y@JCKz_x!`Urkg^@G zCx7Zd$TFK$61a~BIV-v{VWhXwg(VL|?tups{oEXePK1=cd;pRo*X^;<5(d(`EK z@{SdE)}r7$&Hy!Ku^07-b*qE5>oE2#*C>nDpLq@OxC;pW6;CGE-x_JA8lXo;;Y+1x zYyrY~s073MEK-xj69r{(hqI<+Ln9W0PA{lo)U{RifmLDwY3WQKaO;~@?q@n$udUp2 zhDxBXYj;ZB(uuH%(Rgc@uCk80jVm1!a!RnPW6N@Nbo^q)rGVt|e+7iH5 zlxauEIZsK3FW&4Q`${r-{LI&qVYA)WzLpH0c8_0gy*cXoYBG9*RrcQO&V5_4-e+a? z2)?^Kk0c|lx5Oh5M&scyN@L)Z-DR#qX);@$p|!D!Qo7_Bl%$FlkePioKKOzctEbfI zL3-HJ8m6N{cO}%0t5t1}D(x35=Wy0OFRrqaG$qeQ6#VgYI^@WY`BwqF;s!%u8(++I ztxiHV`fXvpYFkq*=fAjpN_o!}l+5AXDpuIzw5jI5^4V8O|ZG8=W2t9ay)zfg! z=WhjIxi8vvC6Vs4=t<=hzahtcUlM@oJbu_Qoybo|?Dp!bX_;A>vl)3c9Y*;k2#!YH zhs2Q}D3y6Ffc>3aznV$kGP7y9Bq$A>81)-RPHOv7hqE-kxyJ|lr8#rLuva$xWV3`3 zo|8}>&i#5%w#rd44_D+H9-M(3V&oR7v)k(?wjC)YxB=umXYzTFBN10ncbeLv9fdICLXGJtla zX20s-7Ntwsa{aSDdDpAzZomPG;NvgtHgY}8K=Ed0o~m4i85}OdJkJ;Byed=O#ekzX z!TItPsJMZXc5aT5AjV@Y3Oa_6hLh!;|a#Q4H$+daHnJ*}c3I$sV@^RcxPVr9hLirv!_rZJ{ z{9~4tuS-m~Fc6r;FSJt;a0uQ~z#K_`1q}|%Kq^3B_@-IvCgvCG0NEu4AYOx)qQdB? zj0Q?seD#6lUlSPgObj)u<_qZ_iNm+*)!hJ!hrSD{UTSV@jCryX=w29)=-psCaJvTSPNm;yoXU3r*B6^!W=N ziTH(MtuB20bKB`N+zFQkf!c{ZK&V_kJo<>l>9CleS9dV=uFq4hGI zj`Ix)t=gD|R!A4Yjog&P`eHdyZUaNe))t`d<>#2kDWCKy#K6w;qn*EX-%$iUT@GUx zO^{Z_!8n>&nT3;HKe33JnN zEZ;*IuQAAA&e7`f08{AzsXm)TX%P>a0s8#o%HeFE#Z59DNw0%(JjtO#c7ka-ftR|s zNZ$41Yi)U$XQ#zwG~pcQQJ!c01eO3@wEN@?Db_&A5U`;ECj&s3Kax80AvH9JfxJl| zUiFFsAY@ZY5D8oytyfd*QMezfz%Usl(h4P1;<01ewVVRmjjx*+<}W$LzcCGNJUtmE z`8mc$9w4KZoJCPkPdI9TB{15x`D?ZIGo4k!h5zD^5x3~!?o^po#vbV$V_ z6nlcJF*b`Vukv$@Pj-UyE=D>7oa@LM*93b3r)Y{UBLSL))3NT2m$B&h$8KNjJostndG~oRzjXw^=bORLJI6mByg9~b)rVXA$A1kDUIbhFe+^y%vx_s{ z{pIyx_vk1%I1G07UhnR7pErY@{q5a1&v*7;2G5}8{=spuyR)}*3}BBBs7V2~(}j93 z0LWhVaQjDiu=Q+bcjx%8&EUn(@jgO*0bsX+*IS3jJKJw|w+>-v9KJp{>OvQu1K|Cg z{TFDS)!pmvAH#^CWq2BNe}bRE(T^BA6Pr`^qX10Xq6R-6>^|?p!)IOS9SXAC*#2K} zgYIta>@|buTYFnCyHxK0;2csx>EX{mcIgqcxCQ?wAsXjq`(Xe05Pss^93LDW>&idx z9Ce$)*5S?(PRxtL184vz7U~=j7^u15WjHwL*mHoPR|g8=SU^}d{dwNq0$%au5mvXC z5~kv-e#jEp53~Hg_A|@=pKYJNyp7rR|Bu$z%JKid{q|4$|3Bp8+W+&4lMldm9pwV> zkg`C1x8C`7y|Y$!0oaB*$=P&bPCGJKg!B2{Z9_nd*?ylO*{1vYiDjx!hhAQ9zRx52 za)yR`A5Hq_G@kkY{Lgtjyr5$PIYMOIXl_a!<`ZlA>ojj<{{Q?>HtgR&B4MPMWJ5|i zh^IVRmS$-yO7kQ*jiX`;Oat`*&xn^@jD*yX*-VO1rBAqo1CQ?Gkk=te)Pe`h4+8MP z;$bOH!^^%wY_Er=zuU*u$zIQu$MKmliN$L7Z9`go9ipe52KMvL{#wU{0gp6@3QOD` zQ1&;!xK;2m9Dh5%l%77{J$T)fvgynjITkNv+jTl@H)!LG2C5jKoKROu0T^?pxDL=f z1w)GG!7nQZ=o5Q%4G%{5{u6ivv{yQf`cToh^)!Bg6}u71fVCnp$o~C8sLMLXVO&BV zr>o^@*?V<#+}(R!dcJeCb$tBSidlr!Ej@j+d$9lVzYvNs&Q{a(dJ9+xWF+y&Hvi(J zo07Uq_`x{6NG4fIfleq>@d>i_=;(lRMfckr5+x(+1Rzr&j}_;zA*CVo0hg4a9LswK zV0NHDGWwqqY9$v-aL2zH6@m6zP$VjQo5NsFW0YfgEX%&0j)p6rdG)~cDcZKm%m9sZN zz4$o}@0>hvksbp1MfC=49hle&Ii3@>JWt{Yo)yoYS;;&pteWtZTg~^%jOm^=+bg%8Z0JXxc~eafN;92j^HoG0iX3%cYs#R}I*-Q@Fsm3H z=al9DQ8t(YA@`3opA6{p7x|?5m3cfcYd|9)JWnKezUD2tM^UGn~zIRvy8sFSJ?IK3AinlA3bA!`uO^%M!CE3S$7)UhZ5fF=lh!v1Pq!Y^y zQQzA-e5IgB2xJ0*>aZX*LN;&`N2oHi znI8#$fGAU(XE~8u6BZ3HqPu*y+(amtKZj^5l(HkIB@)$hgonL)j9?O$wpI-O@c|zO zuR%zIdAX)jXpkAE5yo#ar;RFE0m7P%3Oa#PIXC}<`$iTFh`GlNyyW67ml04-YJxFj zMm~WvkKEiSuMMoNx;7Rg^A*0)mS67tN3=`F#RQq0o=H|QKzEP=<}-D+FmJ$7mKO*` z9>U>i0GuTk$Rh`5SvG*F%1~NWF+s^{5)SYzJ(C^kus<}iIStB{-SA>XV<9DRB?%I+ z4`1n9cZIn+>v*XS>M94(WS}{Jt8O(Ds1{y2%lKt%H1U=aahI+tVJR-7Yl8HGSWRrM zA2)rDMq+s&%Bo%Ze0P^4_Yy(LSSyZz@V91qngnJPU29OhGi>Frk)@SXfnabNpS{`H zecszT>S1G0_l%hAuu`6|%Z6n!3{y*U71n{39$%r7IIN(! z<+900l@(Et>iCuB=0KE-C#lvNl4~nYV0KziDB6fL+G-+m3VfI0{Ty0tI#ccq>C%#7x%??<3?$Sx`5Z+NE~?@7_qWxktYL6D1^u8vTlNM^VK%Nxp+cPkg}S> zc245iP0dDmrup=u0?UK$@O0&@-$x(~3E7heYs(!vy763^gcb-m?dQ*v!5~ga52SK3 ziwhzGp;H8pbr`dboItVzv1@}`^$Acon3!JQK|WrhIS%*bz98>t3=}jP7bN>5YB}nd zm-}zFdp%OCH1yBK_UdY|6v)rLo&AGDEc0|TSX=E-*ud*!VpE!5UkFDeusf7yk;V=Si=z$eU7<)qNbgTGHR zPBjL{&Pb=itYrL{LPeJRjOoqb`~`woIywKci$P517v_Vj0RDB~9nH;2nfY(>`OrNP z={{G^9o)yG=!%@$(eRA649m3~p9*QB$X|SEje7)Dc6O>9Hb4oiyj-^&A2wMU8Fz5* z@#@#Kl_K4$l{c_&>yW>u{?yxLu*GbeZ}y$62pf-@&|Xlo0N#qCRuH*mK39%l4$Mvj zZUG7};3Y4sf)Y6BRF%tk0Z7_pn&Krgwm@u;WMLa#S4$nid31q^dw};qw%j@r5hYM( zK)SLO{3a(bf?=k!tT%8qW>(OGC(|^60h2b}F`%`>o6RM8gkM%ekIsl@)`nM+u2CM< zgYOCa9tEPz8uU8!&)ABJZ8mMl(RVg{u*@1Ru`C;j4={!-!%)a|<)k%)qVO z@oP)eRMxxP1nO3bItGH$!Cx`gafEl)xy`!Y<0vFpC>UG=+s_hY6Xya19Fk%(iN2Tz z((x5FfHL>WFF^c%8q8O`=-?ZCTOS)3rZOAgmVv+dZ~Ic_o&^uXVWc}7({j_AAhKc#=nt5Og5K@Q*t>9BJM1PS|EA6 zMBSD(Rg`oFKJAZ%ZQfv4S$oxh+LO?_WRO6YsXHcLY!O$=b znw|MBqKl12Ov3dEs#eHyW-$QPC(tv6lOg>KPNP1uFA3{`s>!Fi{RwBMs8#S+^bo3F zOVd7ev@*P$G{@mwgR`ZfDR<)}+|;kfoR5J`yB#WNQcs|V4eHZO+)CvcfiEazCx1D$+H7DmCE71n0Tv4-WA+5dkI3#;O_#DPmMe6-ofc{wZC_}+m zrzdE7$q6_;J7K=yJ&))VZDt!MO=l-H`RFi{$zF}ZWUNiw_L4fz63H-b+y zhF_|2LglrPsD;2!U(N&t?j`b0@8vdmlj%+9-kP8=uGAf#{~YG1xbB0{g@l6W@i+zs zG%cXa4E_?~zuZRDKo?NV^a9+A7WmfF$Vg&toVOq@M=k= z7|b{UEHDw;0OZ0r>VHIpRuICP!OEyA#{1LO;nv~H8yD^Z4XzMct99m^+Q;#{(0?E zQ8z2PkCrtvsEZlE&3@eX+W00N}@S?9CY7@Wf-1vF<#JeAF&6Bd~SQygObkQ zv!$k_7mX7(+7Zc)^JlP6q!#1x1(4&`HeT1*L-0V9t?T3zWbLz9@rZ0lh8LP(Bn4;i zLs^V2h4AQu1NRt@M7%IT)&~giWvZ{vM3N*r6r5nLiIZtTWl!SZ?^6uADsJV3yrdR9 zL-gI|c)omprY*ckg^eqSii%)M)t$ta_9;>B1u{>|=e5ETjA8r7?)EENSW=Z7fyYcB z@W+|MA4@WmEMyMZlM!ZA{8XX*+37voIX>FiKXw>2{KJGzJ$Eh^=!hTKT20*pa~-GG);@T3CBfSvZkZy$cQ_W0rI?mfyX!CAZ_^dba)9iZ`0d?rkR zTT&oTcQP)pZqJX;9aCpzTDE}8zaRt+_Qvosx(2Z=n|#a- zO}a$c4>)rq>13eBx9_|Jj~}*R<`DuO^|!WRNQ|o6+2DAk)p4B144X;pwcZ*JuI)GMNOqa1!^YlN`le`-CItuqEg)o4_35Md=2a z&=S)4cyVcA)}D8$|EDZCj}FC+oH|KlG3HgG$mN^ zz;3;Is#Lt}hu?kGunE@eG_b!T^rcsdh_Kc)B=@Y$$p)A2+7SXQ1q}!-ekLWG6UzpQ z?1D+#gb+mi;TfpDDm{80D+Gxc?}{u#KTJ5VWeI_l9c9|mJCE7(I6?v-Tr_Je z@Vb|o1!_RWlSj6AGC^``^P*y1K$1H zwy?I#!B0GEICP#Qoa;U*6C*WY1V>mHb3CzvC_81!Kr@4G<^L=n8b)L$XWm85ARfy- zj*zr%nUMzhUx#$vgts}@X@OU_7?wavqVl{z=hGA~+t^T2UvpJ#BqlmYbxM5$>A%!7 zvsfGq!Pv`;t$6U*w+1m?!27FBM5aTXN2?`mgKn(48*g6!w6*)DJEJSw%l!-cpjy)Q z1!Di!d-mqV3rv&pH+{dz8OwR2*n43ZO|L-e)9-1|`i#0c zntq_IGJqnt)*2IKh*rp^0o+mtwR5C^u&k0`Zr~U|MOtpnh`A~*CLIB8HK(k@v)T!> zr(|w!{+r?HeAR0hJHB0RKRlbawE@;J8#%@m%PAS(X`_*cO%DJE3M)|~GiDHK17g=< z8=NHt1*1Mon{2?&;SYXYEnN-jfkOwz(1Bu7WCLy=Z)^4XqZmc{3n;y)!f$E&T(nQa zBO6a;*0k~-Mr6}VTcLCzlU7UFLJC=5)dB#b!JrZGJ!}*%@%5`$B%hv`BCX0Iqv_BT zS*$EFNG?o~m1-!N)t8_Z0DF*4bn$AiaC9$y53&$CPYH6`hlaENiP> zp7qmS@93!85sO{6!flv$$=Y|1ZNtT&(cA0o{Ng^8asVSV-QG)(wq&P;X6Tz*dpkNo z{>=9@+B@3D1a*EuP>oiNq&Wzod%a$ik6^zJf`R#!VOQ=Q1YY6 z?K)2_@ZM8s0X0bhh3&mI3xRqi6e5ZQJ#_oSC%quFf2h#eZE-m(P`f3JEugGj6=d#4pSBn$dvr=@?xZa>g#MmMcxdbs&-x zX~2d`Nl6;RYfPVqL{xle$bb*&vg{AEzp`Lj7fghYch#mkJghgVbBy77w*Z23T;yDB z8bo1dU50llso7 zsdG8IxMe*QPIbtJHb{E$kc)Ec8Qs1$xp=83bX6DSA9-!WJ8INa9;H;t8#d{AE|a_* zSfSVJkB8G7|3jy7YTW9ezu2@=jooHHoTGEO;d`XO`r+#)urqK-0v1HUr=X8l$qmd% zf+lvqQDSJQX;OGoLT=|t&}w^>F6qHYK!l&8xZxP>0+_>V6AYp3!%XGrT;v4RWiBPfwG60^2y8H36zJ59Op8wCm>rM=Whf@lZxhGgLWF_|t>G_srdZ zx|&g2z^rxf0l40o%XP=jetus|7WJe>e~p=6XQ+$%(U>CBC`I`=D#(RLwB$gL22&Cb zhBz0UD|wiF&d}QNK4krcu6Zo5013krHUybo{-v| zIit61u^}^by!U#4YmaqKU4M?0KpnA#I)l?T(A=RqTF5>ksl&vgAq$V9!Df@>iI4nh~Kr0#4U1Jmq0RkKsxyt#ZkIojF0xriyg^8C0oXL%?mog4a3a&Kz zi09$B><5?SFu(OqI+d|>I5^B~pO(@x%vsliW}+J>%^1xHfQ*6c-XCA1sqp*?yd)>& zU+6O*ZeW2JsF;ic_6)EZ&$ih+e_#sK~>La z7nAvNl{K-2`-&%twzM>}^LS94Gl1@qk`;_x(uj6o?#Y*~qpe=g0Wa8?JX)ckBN{N^R^WA6o#0tQJIDHE=p~S z8@zr43)wUN{fzI}utdkO0a9VsFLPH4KyV5He*P zl?)F3;gAL1QxPW$Aiu}V3UV#lUAF!m1OPY(`5tl7U)hU3#fV`2M=dmNAsh9aBE z_69EFBOcJq4u;$t#gh}N#Avb|uw{npJrx9vpOqM5nVgSQ+tjN8H78F0Qx3a89j8~% z)jsE;qg&dd%(0SD*hdw_el^Fk#_Aky8Y@n`^`#qDV*JM@CW3u*aUd18wA1sxOPuxI z);1pSzql{|y8FDAJaMD4{~uCug~V1+VdQDo{Bm)X{X zU{Y_$?rvC9P^k1RO6p84yY2AC!sL~88>l=a$^UXg*=tE@;uQ5_!@M}$+wJP>F!8OV z0M-d!Gh1oU&9xKxBLUtk%Vxe0TUd6%_Vj(3f;Y zp*B)nrGkh4fj%2*%C9+sOvyc6s0vE6_+RMWZR*)U@6@3mdXI-VH>caJ3^wAxm<8gV z6IrGOQ%3CWX0fk{4Z;NAl7%_!8#VxZ=`fI$F?1^wpGR}1ded7cmj;|&t`~1 zbMQ3c**3%aS4Z9b-}9Lj{~3LQzC!rt8{$91_isz_pC7kZ|BV0qM||A)&$Qwc{(0>& zIzm2LX?IpS-v;e(*V~=-)zxzJXR(B|V^SsTN^qCR&(yLV_*p$LQvE#DW3T++Rea5{ zn1^wTm9R|DJzWpVHbAYP@1jpX2|8Hcbq(3wc}7nE^E$=lJmx~t5x6A#359|?iE=+j zB_>00r1-688X|dm)kCYw&FX{OG5t%jdQeGr1Dt~+4JXU%;bc|mG;KIX$A=maAGr0v zDsx%;0Qa_zf7B4sVxb-$zP$n3b2Itm?NSenUf%#sybc+jxGL5|lmgXhs{@kTP((58 zg&i&00?LV@Y=@@uq6GKc-P2=78ApZ}-?Ik20B4OJ^jBJE%(0;jkzKI|06g6 zeEQ#Bd-Ny$|06y&{l^st;@??*yryFR!~Y)z?MLg6zFU9veKqyJNG1gu$%)){Ytla> zfCfCGlgNEW>^+9~*I0fr>h(Qxe%P%#Gpr}H@$sSkEb|_q>fd{G=0C_NdyW5aOo{ot zrz8NCp7D5`hjb+P&qm&ZixHoLNLKj5gQD$l)SKw6B~~{5bKrz?GOA|}vSF5ubLY-$ zZ|j%iEs!=2UeC4344AWG9g{&fWjp(+S7dUH({NwH@SFNa8dCl*%MJ)CVG=M@i5EqZ zi&-303Pa%J(bpC;klRHhvIrJIBN%{nKo)g_M$QQ&@l7*$0H8u{E+Bt-ewjA0$#8=n zO9LtX`UL-xC}h1rHTlLpyr!0HXFuu4CVo=3qvGSvAfQhDCY`^U` z+p>k>JMOAIWx-~UnxUHaj$tFEl#{XZ#B_4h_0oDk=_Aa}$vIBl*=X}@e4^xSsK(=y zrkH@Bg`sq-v+V7NNj^nR828mW_sAxJ63J}_yRD}xt(-~x=2XmvgK?irV*C{Nfd$Pk zc*T!!ehKPR;SMC)b)1(-4DJn3Q&nU6~!4 z;^&ln9$zZ8xlS0_q$?XL`bp49ck+SXNhCo547=-o=*`d}b51ksR%(i4~;C$|89uP=Fem2hu*psJ@dc9d&uxL|=5-paw(Cz}DUC;U|Xyzg|B$3%s2Sh7QA%rs74 zQvnOB5f$ql@8KnKr3D87PpP|r zTCf3mC&FSE8O*||L`T9{#!lkBs^Uw~g>hSIwDZE)oYz(8K!uJ}=wMD7rvgtk`J1c0 zu7$Gc&?RhXGg#ZWXDx|=9JGQpv>?FOINh6+h%TErqlUS#z_nUt5_0Y(tp~pinbuaU zW;M+*>sMZ<$`$q3u2gT0SMz_}Dpgc~sfX@zg*7x}ylGhY%M7b9Gb^VU;f(V~JaBaZia zoC@1q;KN8)$aW3D9q&2NY=nV98Um!wI6Ugr?@#g-C^CRFc>5oUc2@!t9h`<}oI?oek6xC>^Ru&zAA5 zd3Fa4-Rhwwa(TvuD2$4>^}T+Utw=Jq0?m_(PDm1KATcmZ9* zCG3Qu+d=7#reoGf?p0_n{QZ&Z1KlhtRX74`e=|YGjqhcr^TU>Vbvq_ zi8B+=3G0Wf7eIy3P~=YvK@$w=*v_HZ{9<_+ryE|yiK#eoE8?4pTaj3ljSY2>V8_wg z6-8j^eFm}x@}Kq*gm3SY(nTRIJlQbEATuYdXydR$v^K$X%>H!me_dTLN4V-*oN|*G zxOga3l#V~V;b-zp72&`+$%=Cg-{DCJ3e3%f*Pc8h(V75rk~?gJ^juc}_T`6QHCSi; znRB9BMG)rjCYTDbsh|@d0Vet+=7<>+6~$aZ3JoNv>x@tWg%gPP(3^z~%ng(2_+Y5c zj7|&5TY!^f0fX{OOIinpk|VA=qEJh|PRzrJdT1%a9Q`TK)tve@aRz)^0}I2u?Elot#DB=jY~FQg zx_W77H!}4>mJYVxf_HStwA}=JLh#*nH+(n4E_~Sc?}80_lM)_W+=L26i9skj)rY@m zn$%S@BSg_A@l1Ync+GMU9Qx;hDWc`tC>O(t{hi%)=dQweN%tn}KAOaTS7-ttHJ+$O zZ2->>4tBd+`x?TDu7;gG(G?YwZY)`Yc5wf`ntlUtcjx7g$LJl2DTy@Lu>*E&zQ!^TGUPRh396c_$sqDzj28#W77Qff){zXfMCzCk($aA8lU0^UB3D=AY zjbFO%kj|YUo!@Op=hZ_xuN=~6^jyrs_3EAVo!;u7olxB*vItO;09G}}s+ABmEF=7f zOsGOMy2Vl5x`BZ-+9=qE{iyJFF)?TuCz8Joqg;6QK_*MW@^L{*CjgD+Ou-TrggC(|&1g}q%Ibp8I$PwJ;Mc9E!s|)C3@yM@ zXbDW5VexxxZQ~6kXa#D`jT%hp7GU=BK$%Mk9P195b8M*jEiN+^OowA|ZIGHeLcey5 zXaNh7<#{4bvs_o-rijiqGISC0INJ~AVAS4^69}>o2B9e-Ywr+@I21FlVbyMJc zxYUCOfxogTIl`qz!D)5V?`7)uQ&@To^SQV6OAj69j$wie;7iKND48qisfs~2Z)y1o z=6-!Op9B;mar19vi$zAs2=u|r#xA(Y-N93bO{ah+w-#ev&2e^5Vo)rO2x3MEYD;0dqP0&!SyYN7k7es?p z$u?&oxx7yo^stPJY@6Bq#lx14qAxDDhTjt(AIl})Q;1%NQNB6tgZIXFg_){ zvwu&#H9;L^^&N3k;&M+ak3z3dpY@4Ai3wTdISRKYP5RR>YdPS}qBd!0oG=<0bD9RU z96TTpCXEkl6h%Y&@3z zExQ_=vY{0?Dm_7vnD~beSg-ccn`d>kF{acFwfEla*44&vQ#aIpzVlOEZHz>9Q`-l% zl3{rJN?Kk^-b+s{&ReDmYsW}&m{a$qoDQgvdq$?Z|%mLZjs^wdR^b9nprEN)PO?s&lo)HlJsJc@fNZhO!V zC1%9^24c4GZJ$hy!>vXV&NYx*S$f$$-a35Q!zUE)ffCYkI7n7>=(CT*w34fumH9=( ze1C`T>`d!2VmPS zuvd5N+N&md{_Y&TYS^6%eh5A;(M^)~e0|nHUfppdrM90U0-1uZwMguNjaT=7}%QsRBe!JTE zv_S(gTr|hLQT1v60K)+EwONet%>Pv%GUnic+Pu~qRj>Q>dfR*LDNiORWGZPt>4$E6 zwP(Y`KOAt6I~84m1j8{@%oO`%eJ4s|Lr@b*M>5fp$j}|U*=`ll=_JYz|oD3?omPXvLi23 zmps*cd0YuVgs~|FuVR0UuD)RzZ3Yj5hHc0g{I2a9$pkVC4PyeVNvl<|vP9v{1?U(? z8ZJXyo6?<4U-PG8yJ;c@Vg0}Eba$UCmU#fEL8gwhWgYdpw?#n`&`O26EBx{rsCTF@ zh$fgq_5OX>0w6A+w<3jt#<*#6pr}-t5(zxPjgkxyP2W!tdsGlqqkZ%+S`=5?pOE8i2xv{@Q3LtvnyedO90Quy&BSh2(dO%MMv9nJ{ zSLk%kGumLR5crskIdGw6q70|aX|NsIsCt{Oks{Re%snxlX=K8W*6ip(q{&dxcMvyC zNiAUk7!aE$(H-Us#!PX#?Oq{u#12_AwNbl5NZTl4c>ea}UF+$^-P(S+d+=>Jt@Txt6MOm9Y35i>Dv)%lMR&nM7@4OpozVoXds8@q zyS8+6yE**qX_5_CH&wYeRb2ct22n!7H)9w?usFSt^HXrl!pV0&QnIETaIop_0oxXg z%QWw{Nsew>PJ0@N4!*M2^e$7e-~GAN)Xe=z1|sI=cKz-U(ep>;L_#(crzaE&6d6YQ zcfW4QxA_2hxebi{Q&PpSOodEn@nnS$s=3(iHW{ zU51S6k{M9*=}A-6DtCZNYLppJM^nCVgmQO)O6rvvPzT9HQ`9hb>FdGlc^zduuTbs| zP)Qv#1L_zGv$Xqk`8@Z_NzTG!pjdrk&G(#t*biqDVsebh}6H^WMP1$}!y@ zr}^IS>l~}j8N~NJr0r~-;BnPwHB`+>>6~vQKZ?fiB_d>5wvv1Aegz6Trz09mmw~YW)f|2(7hxYPoFcMBR(Z|x*NR?YREuZRk;MUIW-4OMUKtM|~;_U>b%?4@f z_^^9i!F5(4tzF~Rc#Hg6l(4#bJs3|54h4WY#_?8`)2Z9pyRtO)(PSIy?xd$#u-H!& zX3&OaFKJbif%+(h!CI$RE}pO$kGM+#5%?~os>oQ%H2TRB8vIZ>uT`}J*#5r)!=b;Z zxF$^ySp&W3saVE=r&71pRPbCCusRwnVKM{m5WQ+~KRp<9Ap=8aZ%!()gg>7M#%x5~+g-KPQp}-%>Sej1dR}i@EprZAwwIR_4%{aQ zlWB@~cENj$zP;di7Ta@~X4>4>Dr31PUB~&lUNlOp%%^(k1g9Ch@erMLdt6b*x?Njr z=(sUz7J&|n1q3r|4wPz?uS1U)2Z!iqZsUigl*)^EY^kN9rB1j}RW2D^@lqNCF;xY_ zi31dN8BfywM56!ul-q*F(X8xd+deOCJa<+Fe(;0sH3A)KGMutX!T+q=6{$`W2jrc% zGX-bD7!zE_!4FqEgMhjCbW9h;bg7T2HfTncmzV2nV^9!NABy6gb9`mjw=3UX;Q>hS z`mp=DURj3mc8Lyb)D#%2HN(ZKEhOlKcvMdvjGhpS^L0C=AyWC3tRZrk0c9GAy<~;H zyQy4DV3iF4&T7hqK(T}=p|TaXTxTb>bxX#CPB%Fgd?6gYQ?oo_cWn-*gj(y|tu>nY zS&hvw*0grAe5Y-6GWu#|i)tOnFk#F1@a>!%wf+~!y@D(Vg1q?ld+JU=+hZ34*L;qGDg;Hc|y zV-{z9CtC!B_2#go`Ng1w28cGBO#4F@(Sf&b1|KX9sWDF+YvYP5*SZ4g;3?jE3SV;T zabE%ny+DhC-9ER81ENOC7A7e^0x=VTZMcj3VG|bi!xN|of0mY-L=W6m77H!SL67^2 zTUItqE>|e6iQUMDcQtk-2@TF_kS{~l?01e|jak-*-nyOPcKzKjPdUtKY43Izjup^+ylaAAZf~?>ckA#mG+jLBH6K=Snq|vY1gWLIDRoA_JWQq+d z3CW+If7z%0{QpOieWe62H=O@#?X^|^{O^3*`Sbk$BR=-|Pb<#ZzuLk9JYHE{gRkrD zN9&ym4j>B7;xwL6s4+A*;C#@0wQ(BtKPMSXIm-)l>+We@NXzc$VHw4KE|sdxEI19s zPsnNVH;~6cz-#<%=O9@8heVR+5FPjjB^#UE!8!kr*3(^lY=>UN5E`oJG#zFrVv_WP zFSrgmB(wJk{J@;8&ESE)WXF0|EfQ?0ri6|F4uo>aZ`$z}y9a;6!T^q9DB^n&kKqwY zo~l<;9=l4u9g7Vt0FtH~LhNtQh3sQ=jww!^`M~aQE0+3GF6?;z8vh{11$v}ZFm4|` zffIo#(*UyueCt1uz&V(MWP{9HNN1c_76aIOPD)?`A(Y05g}m5Gf9uhWmv?^gNJ%x= zJETPlc&(az^ey6I@u+d>QJEog%*9Z|r!Vr9^6_p`T3%~;R;_h0F-?HOJ!P{s`oV6OZw*t z86VMZ4Nrn4_1M&~uxOQ5=gSwztP*rxqPsfbhJ0MyldwdK9DK-KEWUzxO52*l6A}He z_9F&mB3;^c-Vp>2!NYZfq+yBB5O8Gdx+zRw*TsL?a$BcKC}71 zucH9EiT_*eRPcX)=KuRcK0g1)*_P)KZZ6sOrZ~Ig9 z>Rcuk$R3+Vau%ZG5HJ&V3FKljk0tzAS(ZT)S@KvmnAwy4Hur1Z->pY?tMxEWCK+bW zT{IJHx4NsVUscuB)m3Hr?-i|hV8|@^eRkYe6z#6_l3r!Z*Rl+k$%nvcYK>;cuGMPf zy<>n(MGB%=8){0hGPdg#e+v`j=SHYcEfDy24Nn^y@SSf{HD)nhSPLka9x!{l@|qR= z^(vV9$nQ|W^Q#TKrP;J!w1HXW1Sy*(DK6=5yuUPgXP;a`V0D8^{KH&#OkEg*bc%bCSxmUGvsYuIH{PMF{%k_A1;$Al zN|SZvQBr#q%JnTSZSDlx7jT8%U_hn4h*GnnYOrL!BM!rjT01;4WQb&e^l_(33tZUK zJ}Tq>U7yAB-(WTxe;ozj68Z0Gd$V-@w+Y!F<-Z4bO!<#ToCLtmmJ9&B{%z+e1%Teb zBf#i-mNCixEhK{Oei#;S=S+T)=1Gk$JTrV)OZWzsdu`DlOkErsiVt zf*b~PUsKps(&XUJA0{EXU%RCbNHa)vov13RF30*i`Y}VvY#%BiNQP{NX>Wp2qwmBH zNfG;Y4bxtcey{H|VtchgvID%ymHOVBH0GFH)D)0!=1zy8B*Vs>3go=uW^kED71=CH zF&fKN0RW%_P*t$6{IR(%NFh4Fvs7NfTh>Ho*&3_xojb^;_fB87k5yiIJ*EOcb|6KR z_kfk694_uEkRv`jcS%)a<5dTAjG!fyieJi?eT;6G)!#x&NrIcBvV^Q&tQ{e}){p%`61Y`(zg?9Py_Q|Y^0 zIfn1V>NRwrLhEsFk~!t7$RgCL-W?Zucc)@*V+k*wrX^VAals2SPV7pIKkSs|g7h(t z?!}*@qjA`1)=RNERz>1|128_EhZm|hX@x0s2HDGbHz*0+G$7SsK1xTumU$2 zGy;#-B6<`6)9*yV>x9=3O$I_zM^8K5YN4K6zH`AX<`41M5+7swAQqNjr>( zi6W1B38)v6c);Wbcyb2Z2M>0~-X#5u8E6a*R?Fp~A6oDkdn0pcBe;AXx>P^*@67`{ z7M0`Uy|~ZDGE%}Pk6nhhDvJZSVAy^uZBV3LR@Tt-!*$6Qr`Z}J&D@}D3g!9*hLtJc zp#08DrzZDTQ5_$d)7xnXNJ|C@? z2d>Y7Fzj8v?(Xh)Pcb6I1q*KPF0Z-RwW@{r$hA|*uWDt97=^>U_XfUps)bz=bWx0z zJL-3rRHR{wj%o&EGs2W49Ycn6G7-|47Pz0^N32^%?h$>mbmiXC4=m_P33R_jgIVWA2k4?^K5(L*>iNK(KFA$)$}{zGu{#K)aQ4O0D)i>RkmS77WKQ9j3zu%yd{1jLX*~f+4 zbzxB(u!uP4s?!T`juQrprWY-M1i5x^yf7j=Zd!~`1YKOf>YS$Vv{wwTIZgA&@ zs;su1BVdCBukDjs5We`1oN!d)BHL$6jjn75iPJa_DO>yEPp*vHC02Dx+s@X%Ow4wg z9o%VRedbP?CbmTNPc*S}#tgDYcEpDu7-wdVT1BD#ML^rFX4A446sI5ssyOL&*4FsO zB^H(~v>{P`-O1JRu~gH-iZG5f&Di@fjWhsa9-Mb=O>&lU{zT_5@Fm$ANwujXp=B4k zY4U~EZ?38Y7%CqWFgN+OIslrX&l>42!)&*zi|sV4I%lkr&6bjEqGE>aauZWs zYQZX#ATkcwDFeC5fS5~A^{+9ySguy%ys({((HohhmzM@~(tXu*0y7rWWViQkap zMFBiz(`-4hb1fw(&1QI^_^O7crXClP6cq@Qkc1aU=d^p&-R*T97T4bXbc*qJwJEe( zo`e+!P|m1C@7>;Bx7U-%%l&O=(hT&AhCB4ekrUdYVTA617i;L5gRZ1!*9Yv8Ku^Rf`DYJ=%`ngwo@0cMBx4!K&o zgdZ|vrc{blP)AfD&_yxJZCD}`|7=T@Fm*UQ!^Xb5z8bTOAE`%o$#Mn&YO9&C@0f~o zRlU@;yWA|)hL(%Q4mZ~l@!A0=(9&*rzGnm zF2&llRpyI3WKCkAJ;wYwtO+3#8W15gtIj3aSYnz0o0y>b3ay=}OI59STvV=Irruy` zPOY|MuxfN{gV1v~`4JY-Y?iI9X_9cLT)wkH+f=Kl3@);0QzliyoGZCOrk<6AQc)#9 zR302EzP$pkH)@|R?#C2cgmb(QDb6QomQnVfv8|(0-cJ>|3t#p~( z4H&Fr$h(DoJFA6?XIKo`7mAsKQmi~>XT$uELJYv%yhpq%9P;OuK&s}HE5$^DfrYU) zVlr;HL(tY-HSsX{c_vd>abiv}aTVUkZaYHyM+STiHC#ukkL4uAT~-h$v#V>o%#cj( zXm*kz1A$0ev{2+Kp0laD@Xg#W*K?$Q6o zU&{h)iT)Sf7483@w%d>P{}1xy^uMuT0rs@L+yV?)+gGyytI*TNzs&}WHcbVc=~vX$ zF44(W+$3FUU`9sJcnwn8Zm){ImU5VHq1b@-WJl2D+MX;NB2+rZJUe~YJG*>!c)WXh z*zM^aJ3MIkPHNZxgSHrj)LM;P$=U2*v(dwhIdz=$Dygc35p_gfRd}a3>B;4ImR=7f zKk1?Im(-k*=kemfspUWxsWiNkjA#FnynS+E9O~}rY44}wv)vy_MwJH2*<=8;&a9%owlOm9CsiY_n`T}1TRquZDT5(U-#@Be6&L9IdjOG)s{E7E9B?x zOcA95n)y!7aL#vhm8Bj_*Zh0pYAbr|vcE}VJM7HE1JRfOuXltsi-Y+Xu!4?<{1G+MPB|Vc?)nHiPAslHb zRI1A~()%>jwRHx=VsWSlHh(aW}VC1Xn(f3(fWPd>G^(gPT~YJ5qPvOonuxWq*z zfT;tBRsX4#qKxw5DpS1Nbd@+^X>GfZ$2zmLDcap}GnL87lC~<_s$z>jENCtp*%>YU zK+UYOEiyf*DT};&ji{;(_{gD(Yf!Bn(|T`_*&d|SOazie)^*yHPnJ-2e2!7$QiHzC zu`rjDOLlQdZPN!O*^X~L<}PLca&Z;`WR`tMQ96>I_;RqVTxMm=R~*@rLQ0NorjyF4 zq^d?%si5Sdzb{K}2KO?v!18$*=47L&-#BHJvEPFBq2*uJIGwp_kye`x+SRqPjoyMv zj}jlKr&+Jeeoxnytq1SvXkIzhrE(K#r<6^a9p+n9$U|m_`5cv#N?8srq8gG|86BZZ z+|v_=J>rtNX67t3`!^C*oNWuV(miR-pVLb###W`BRs}NsbRI|6`D7N6Qahp(#@Pgy zW{u@(m^XVYy+^A@*ANI*s-d|VQ+4L^(z3JO6(jFMAUhpgHD%F}_6 z^squ!v{^G1Yse+qd=PWJ<}P>(FITVE*5rjAni}8Zyf`_ocyn-a`eyem|6-Mqw7;3} z)bxpT=*2ObPN3Lp})+;h!7%`QMX9r#~#Hn-aw+ntTC zuK$ycK%}bgx}^NOUVgh%Y1zJ&2qomx1CZDe!$~sA^qP6s0bh@I>`>hXA-%ui#Uz#i z5h|rdR6+XcR}V6!qBN2vH|O}ih!3SMZW$LUU5LTN;VeSWqe`8JfmA?#m0ghxh2)KV zX4Y(ScyRb1=N6DB!-7?qtfE$H&$l|C0S~>jC&OXrV+6@z2(`8$kXy zwl~__?X5id=S8lqxIg#E$H!xl1xEd!WvpLy-t!qY_EqNe*fJ$Y*D{Kh<>;vcfLeoO z$%+Gk?@tc*8)H0XFfV=EkW@GUpxUZ0Yfn?&qZuqGb>$W4X-XSzR!!qA;c0fu8eWWN zQ!LPUVm-N6!$@(D+*E27l@igUr|NgxN8#GZ+;yro)KA-7*WhO6|$*auM z&*kY?<{9Sl3@h`*xjb=Yo=Gmxq%zMmmuFg;=O&luCZ9(sDe1&5OxbED?_SLIIkFpU zVARl|%}=dHdqYgsz*pKEGs`Iz&orF*vHw^x-IM~Nl0}Ecq^ndwS6mdQ^NqqaafNXl zMtMDK)va-vS>G8KFNFoWt-uo7!lL-;i(qJ#vjl;OoOXHe=FHL8$rlvYdS`PT<}Q=x z3hJR;bah;{`lZ0$aaRVGqx;DKR62^0<1z>eV`2=3u>oBrC6FtRPj+~3KK3(b0Wz7^ zJ(*C#TU_}RHHpW|04G9M8Zr_YIH3!>Fz7}sBeswvgDO|X_}MiQ`)(nu8WWa6I5o;S zcg-kLDml&4)7%Tx;UUq(&&JRh^Gw&vVY)JaB?-wgoF5y>#lZ_Q#OF-sD}xKngz2y_ zWz28+u6glZ+IVZzeQV?@q3cGh7AcKJ5J!gUh}Yjb^8Lc)Z{J5r3l-!G0dj-f}p80gg{_ zR0!(=Ap_*++f|6VT)|&$qg7Oe=K$#byx6V!ZGXO~rqrw|fePMU{^iYEJJ)ULJ&@Bf z=#Rz-CHY|i=tn2J`+v<3&HL$&Kw6!rio=Ci8?nT;&BUIWn1jBOS`MqS4HZ95&X>y3 zim9ycU*O=NS?N91e|L29s$9R3T0$T-&m8;n3;RCsXS=VCx&`P*2iZ{Zq{5()%X%@J zaXT{fQ@O%kRfW6z`*{T3y~_Q5^Df`~{lo8bzu%txko(>J-?^VhXZfGqeB=5Q8%8#h z-q18E%^FV3O4*A#pl=r^u^!-Ty_Nv_ivjwJ0WRuiSX#M8tC*{WGzth@nnTk>$kn(8 zgm!)5>`|cy%ad?yIV2I&Dd@d3P(|+4L*l!xLCXmm;6idYF|9Sg=|Y0b^@++_rgi$% zxI{g4*;rZ@8y7`-J(Bq6c%9>=Wo=ujmA%7PbBD52Fm|b}U&z`E!o7JY%%=)zb`Fv1 zLx_|jqGm@AY4y27>ROFHpElUWaRVkBsaeZcQt^Bx-Ch|uD}xuJv4ZwFT2xp`9q3f) z3)7pz$l82auU7Cwf}{4*Lfd2LDdk54=8#jb6&#jS_$aB@dJRL8u}!Z{tGx=ZO+2}1 zR%MI=8bXJ866Z8Zrt+&KxcJLrgfe$0=272EYYnisa9qtiwnET6__Lj!@}^S2Lqv)1 zMY3vTn;?Ixp5ePrM!V&ivxG{9CC2x0-a4i%+86yxE%GR(uvBQJIN&x3jw@rllIp}} z=Pukx76r0U%40)%P4;1k+!csNqHtEBt8K%TN|%L94N&c}(L)kOf=>=(oOz}8L7 z+P2VVl2#E{v=Yz!O=3z1<=M7rs2fD(3C+Ta7-ln4&MhNF_xDiRbW|Bux2>Uk`=F&%e3;ck%cK{&muVv@fq? z$@y=)Q`Y}K+j{z_|9^<5*%Ua?c#C<2QFKrQ(-+^PkBD_HmOvLkj{r$ht-~(@O-vllA`T~O-;0=>$g6DP32qBG4y-spH-$^vX-*;W>|5&yC?(V*8{a;HZov5Uy1=LJAa~uSbch|7d9^m-oth+6GKlRSKZ<_nv zx839Y?(vx;yur^fH_+{49H0*#Z*o^>Cj_C}aXL72feNCfS)F{@Fk+#bq%EH;A?>ve zBi+c7o`<$7g#R*xc27@te_G#f+&b5|VP{}d;fjCUx{&5xf0UKqLFLy(e&Ly(-(6rH zR{7xTIlR7AuQ|i{{K9RsZiH~#sCt1SBAWO|LG;Ry>S|2VM3 zZ8*ISW3rv_gD3({G4bxQRxp_DbnM;64JzV9!EowKld-MwZ#(p+b=~YJL>Y7S;x>DM zjxM6%Ir`y%h9Io9IkuQGp5Lv?0&DZN&PAb#)GmyEH)DMFb}3BUc#;feen3eSSA-&1 zl5dq#JA#`ex(OPXEgO`(QOCJ+?#A#pbP+pjh{InT^`))?=iPVB6@>p0P?Q8Zqtb93NLJd8!mpi!7n?M)|ODro&z}Y>$tOq3C)f%14M3| zAg}yNdG9!{IZKq+tm}a1G*0`}p9Dd9RtzTIZ6lixP|~$5qyV1p&qlKd4Tz!iB%paV zj6(lIFfmpy&k#ABYR&SXXJd>|;a{uOfd0@Ogr^4BD@5CFf>! z(rw*j+Ige;ESY3&q$cL6kPp3AAWwdamN>lNKH;DAg4ay;hJVv5?6~X&{>tc(uh2rw zXjP{$!$S^*jh%!X0jZB*;sX89PXI0yc-`GSJwwtZI_#ZA{)PW`#I3sl)N=!N^WPmE z?srcqU)#vnF6Qh0`1a^zzbi8uz;yPu%DxHN4-R{;b>1vzTjo~ZIw}RrZppH*-kqIw zPY;fM(%82hv&yys%D`5oDNtL2i8fAN@?J54aRxa)8`Y!3gRUAo9QjE=lk_&>$)08$ z2gDp8h=5PUM8Gv%dYOZmCZmAl2~LF}f;EM#(x9>_GIPMpL40EjAsmHhPDhOXu1PK~ zpt!_D@)90AXUo~NOYh`>IqO@%mCLVjfSgUIv#xMOhA@k#VZ?fW-8?AbcJxxQ-nZAE zov;7JvTIO=q!&L5@InMr1x1`St5UTZOap$}<~t|rLHW&*Zy~bYkXOlFU z|ojM&I4jKZJ}SK!BsbsQlY4eAk1N}5e6C)E&_IAO8L zq?|OdHrviRbo?JJ%0527;aR-@8;1R_v;A9Y|KHgt`G0=ee)RwRAP=l-80aJh*(J<; z-4mnrJ^wl&#&Q!(&|6kO*3uZ%u3RMJHSn$hWUqGY9s`v@gSYtkI#HK;t)`+s*OgV9 zy0V6anjL$MzW}YSnbMhzGw(&s@oWN{%|MW*UZSY0rk{-=6qb^U3)>l8h02BJvo)FH z&hEch}Q1hA!n>%4)+cX@cEYv2){0ontA+#pv_t9HelNkk&VeOrx-rKr1HPN2!Aw z&IltJ@PZaU{s_gUNi2h{*mVYNS&kLMKPm;E*b?{%;CBklgW6$@BRtJ@0F+&aKd$U? z{K*+8VIXt-(Ube}S^C^V|2^CpgkJQ;Twodf-)I;0f6v;T_9Oj&hzALVCZAD~&L#o5 zq88)iHkb@&5$`M}o{mF04Cle1IZo(S&=}=RAUJdv=vfpcy&lz*XZaBVXaiCXZX6} zr^bOTXd9KK%F9$VF@&5LLvcWDjgwnqfn}bE%vC9H8*|6{6F>*Pp`cJ; zgu;-p3tC&%GTdfDA)W7$k6HOjJJ@ARY<#j}?9J4E6h^C`#p^#!CesI5|Lf1zpO)_b zZ$94te~<@-yW2#BBbWwg@{y@%J%KYI+u$2lr@dGNa}SG9Sc4Yb&A!HyQsDNU=+DAv z+6)bG#X?XP2?W6$gh}#8NHXKwOi&bW18)++esv5qLv%XrOkns0%Y%>*IWyczqpTA> zpYdK@iEtx#|ZCSHt+<$7vt~-w)?0n_hP6mYPDtn zX?`AEIP>$-g^Pb2{8^(-b$aWKWf=;rG69KZoTMZZXUcO|7QhmmnKsjqVdO?STj)ll zer5e}_}rZ-6*3eH;~NjepLn{B$gFi*tnT7rbq9g>SVhU6Pdr<{! z5@5`bAcG<@$X|@0@UBQtHqTC5^{H|{pqhd~eeV9l`iqA;w}YS$f8Tf$_`5rv(Dys| z`GE0NuEFupCtvZ0XBM76wi>H#sk=0$oPO(s_Oj`ulI?&z#3Qi`# zb)!4h7({7Om&F1Ps0!L%1%bfeWmrs-r4&Swir?b%rJuv~I zf#+YVBHL*4A^Ks8zF=T}*J}J7`S~cAUMB+%tCB=FxB-cin83k=2!5IIR){X94!Q6& z7?Hvo+XG#p0;{o+Qo|3TG@NnhTj-AXIta;ZP^g;}c@675R`(=`-;|1AVmL`+%p_== z&_};huW-X1tD0~9H5<;6b*J^u7eCypkNyT>_&*dYw zP|_-?ny3|&VEC4AxG@OW@#eS42!=D%Nj>ikXeUgWY0?)5Lg&H!X$bgct)ZV3L2)R$ z*g+`@??I}MQDC=R=ud(oH8cR^)3)$XhVOA?Xwq*-Tmf7R&;)BSBCl|?E(kY|4zz<2 zm4>Z*(8Q=hJZ$t^(C_TEIj)?+OVjX*rZz5)swp}jFizLOoc!O_A4Q0Vc^32kjB0*q z9m~#t*V{$=pQjt0$NL`-@}U0zvsq$&5JXeY?F7xIxaXfHFonF>4-6dw18oe^|BEy9 zoMB(95`4Get@Z71*9|p9>{yU)IX--PF8X${L?1r;%5*Ut!h6?4I~Vxu<0q;6ynfp7 zntl5@p_DuN^qqdwV|53qDpdVLJnZ!u=FnRm`p@%6rUvRhp^g!9j8jwn-p8i-*tDD} z`7i`lH%SsY1sw``T_Qwr;RdQdhaS0T$q=){hG(x18-Tx|?M%sll)BDF+}jHCU!B0s zcPtclu(+u|l1C)$(o(4=(D}hM7^eYs-2XkugXH@+>}tp!!*9FI^|rIsZsL77vdhTSM0*0rc8#*Re%tZeYn?XV z>#Efjk*bxAR(mMWU5~W?tQGXsH8bVlo*IU3mcdk5t@xH>wJd3| zChDr6_+zc}^k0^YEMEV{HvS9iShoJ3ZkFOdY(Cq3T>lU8;ME0Ku+sEPMiFOi9joNh z1v)u$9Dq8i+iO(EdMX?2EO41j1JeJJTG*R>Pzo$-)gnWZyK#sFBO^DyXpTiQ(#B!p zzljJLlMqr!o5e4*9;;qA@8K2cP?-uDH{2vi``}zUk&}#_D_0Q^*ssvCK3{3RY^)4c z?Ujp_bhUB*UGKtHel}apot1R0(OR|tm)xKxACwga{usNi)w8%#_yH~FT_k?Dq)CCM zDOW%_(BCYgA$PoLOZoeb|KjyuQs({UI+oi1ZxsFiJllHuX#e>j4;%L{*U{E-bpRQQ%|cA!MdQ{>&17f7X{E4(nLh$zS}S^KA4581PE`>wc8 zuFmn}B6}kfTxt47C1sb11vfzi+d=tL(~IjQ`OtuO@l>n*OSID5QxO~>Rxe(> z$aYt1M@BDgma(SUMS~n&EmKW{x;jWfbJ-pAw#~Guh}Sw-M92e^!IoYV`b*dn{$TYr$X0&dBdjfd!j%~1X+rBj>)DUXYP7qC|(fL zA$*s>+#`tRn24x4)`d_EtI~j#$1%l2ESP=x$Fckgyj8RGk6vv5g3mqlU+u8IxQ?az z|Bd4P->038NB!S}Jm`1tGwnd=mI6A<0+DlF_(?Py#i?lEJBP~HiXH4$?9HRX-aNW* zZ+;0|a}elq`|`+nV!dpfU#{F7Qwcm&-d0pUr_Jj# z0V&XwKYC~$retpJOi^mN)%Pm6S^Vca3# z0*CL*o9N2qLfNOmLh{DOEqvQ>e+Ua&xT538yXj0KJiHeaXa4UpNOxfn4S0`^kLL(1 z-gktz);I1fWmoLUMJHMs7-%-o2^qQGlunD84E)i(|HnUz*MDaI_@#9$TmS1@Mf>lk z8=H^*pC0644a-8?)@;qocn_^sYq6~nzLbklg@@qVA}cB16oF3w#la$y6t`SKd}F=q zbx$o4`O$4rU|c7GJRnd!Uf=%xo_qZNvjzHBsAK8+e_Hnc_Gtg}FpoU{TYR-3Bpv>p zxW!Yx^09!_`{Xpmp}r=m*SKQ1%M`)Gk9JY(tJJzkC7idrXRjY=!B>3l@&BOiD131p z%k;mS?ehK4$Me63dF1`i-*N+`@*H0@199w<%U?Z##D7aI0lSu$QaPy@$P2r?F+>u= zI-Wkpxvj=$Z86wC|GI-)iP9z_v`d=>vQCcBLfS+{;fPW0#NV%;I8gg2A%pnQESiR6 zB#zKke;+?F9bXch#@G>8pN??Bi?H^!411ibhT8Nf-(HorR4NDA!;g|dBX-2t7XQ?) zz>3`vXAZxL-Er(5qacRk$Ic{iOw3zq^*JII#EoNi3am#H$n*$0Wj4kEJkBY8j3&*c zFJYKAA7IbN{VlyQ4-!5eEw;VZ>I zpU4BBlC{|1tyU{+wX7$Wv(9wKFg4(>-?>^6EC`61VECPBA%Ie1DvNZStCGk#@owQY z8dc3LXTz?~-SzsN%YJ|g=>Glg$-nXHU$Fl7PTu}>didSzv#(Rfvitwfo|WSNJ$Knh71#3@y_U2hK0R30=K<={FXHU&{~i>?6x z1iA%C*;-5j9Zmvtf-{`nqJ1ce7O*Ullh3dw6yf>_$eNz-4T4eV*C_`GA;HAQd+X8% zI0YZ}`YDK((;<_yj)4t*v_f03Zy2iiDB0WcAoBZQ!t9f$4O-{q486x3|dKTFK<< zTiJxx^>h>ofZ%@Jr(WMn#&?tO>Ut^~d$#EO`Ollp^>+IiIavS%9P#$uUh_0epzgOA zBrBymIM7$95d$FRaG)w>{ z*V|s2CeV{8-wqOgmMQ+w`Zfjn4g+iTWC_crN(O-!)#Y7A^~&%dfQmrk4j94Jk7fhJ zLA{Q`Q7CJ`;?xgmox^-Ngr~#Nzwk4lW{qe42v(dU1|fp(!w|#ZVImEbgYEbh@2Lh+ zR0jxQpr@q5&S5K&1p5Z+mt92Wjknhz*5+CgrXa{qVyKb>kiqUDO{m771D~8)klTSI zf_aTi^OKl8BB$GR^nk(PXs9hb%)n(rpSzm|V4RJrd#`edRn_M51~j5&MV6}^*#vmbU(yW+4X-kzR(f4JY>7uIeMep`ycl2)m@c29N3d$Xy zoQb1DSnL4w>_lLN64YV0hrr%+PxoHK&)rvtM~7!WIrW3XvtxvLaB?bk#oOJ}v%|f2 zN4uvm(NEu=^tw>}K7c(wJU%#uTDot#$7d}8)k31^ehk}C#y~J_bl+tvv`YT}^<4kZvyA_5mF|CRu5Ug1 ze}9mNhg$jj5itJsdJj0v;c@Q_SDy;P2y}@FcqoI0At`E6*4KwUSSvqKR?qar11u`O zLgR2CaBLJFc_}iBDDaTc%bTV!<5$HGC>{Wr1SDRP>qtWu5lU|Gv{!lucnVP2=50X4 z)^InkeZT<6O2eyI3KYS73X6aY%!M}|0~=vq1}zOcN)u$R7?2Vj6Okx_u62r`M}R2+ zNgg!4i1ih!zE-7l(?SnKD34&s%qW;5wdd0^;*~dH8j@J_Bo((oAG!(^W78@T1;i4D zL>ryJpG`4FqwMa5f(?b>(qfI!o?81s5OW)Wr;kvA0QNf!&^{7-6PX^y0Z3-VzXJC6 zrZEs?&qvpV7S;^FQ(f_@*u4R9%{VbRDp9y3f0#brxmbfCCV2Q_2lE=@pW3lPtBx8z4t?5fnL=i3(beAT<-|T{;bb z00JMHMW}Az7-b+=+_l63Ifu*Wnnywk?2(WN?07Kkw4uEUaB_kyb4owRmdL$Wzzn0}cVpvK-)QNQc14Fx_OGg@hVk{h! z?1wN0&Y5a1mA0}LiCgJE(!UP;51GbD%Paqnz3%{zs%rjTiW07(fGF5rFAK^BH=Ar| z5=bC~0HFnwASiXqO>$)$dv^&DQ50;54G|l55gTG}fQkzGqM{-q0)l{u6vbXp@H;be z&Mmu}gr=YVU-CT4?%i`woik@<&dhHTz$2Z;I>C(vB)cWBBd>{MTylN@)|F04gph&3F*%GsA za3H#c#$>Y4lIlyfY_!?CEyi}vw9}0n!NexlYh$oqjExfL_Y&IeJjwvf1lACZG=(OsqWSll+RFr~? zT394J5S$Pug8IP^HDo^pW~Q6SeQ^Ci%VbOf&>FbTA{aHfEhu20L_;uaSUP$#n4Yb0 zBQT)rCd?5ygR{3x=P$j~kBZX%HWy@ver94}_`O^~I4R9iP~QVMJI4BYe6ctz4PWRm zy@8htylP>JhK?kRD}p8+)2;8o?OA>;v;c$ubrWLk=1|M+mpkx^G!6X7Pft zpa?2_R9c8NIOS|jk&g+=LD2?JAM|A5MivLeT(F4*1Y^!kL?vKCNhceKXcDbxsy7NY zAD~3+A(MF`QHA~AsmlPO4ky^K%!d_!nVlw{i0Wd5fFR!NUy7cD4`KX&JQ#t0;npAi zt-${Wl!-1MWX}yUF$JgyuSf7x1S-2r1&O<` zXig^o`jkja9Q!aR=mH;@OD>L*G9>!Vs$`E*c)*)G>;PIw`P}GYY`7|<3)L3h2?GEt z7C(FpX$%^MDyb$o-ce_;YzJ&QAMTSwup0#zGRBQO*!_`LZ_8)hb4jmKYe>-;Ud?f$N-|}a^yfN8-3i#Cx8fOF|XeU<| zY$_;H=dlY`B7QLfqUYIc`&Ypof1EKOuI1{FH6;jl+&+?vxoOBG&rx8aR?`bi77S%p zu>Y9~REJ`oiJ8`NtU^z;!c@&Ow$u&WU4hJd00r=A4;hau&ut!j2OnakO zx_hk;Wmb0NM8ollN@AAmbh3nu8KVN`t5(Fxr}?8#9~}lM?(x`_Xznj!sV3ogIgY%Od_U&sgWrCvTDI!MkYx_1}G#F z=!Fa8SP%yIQu0=~r4HAubH@xXJ4=EdUnRJ@b9(ULjT;vuEaeAzd~$KAJe&&R{h%l6 zH+)yfa7HRRXaeHEbZ~2chumJk+Q2p#>i+39Zo`gZ8)hBEHe{29S0x%anIIAudx#2$ z?%1C&2;)eGgFE8!jq^}X2{V8fk9jJ=7c8HI$^7Xt0| zhgIP2ZXP&R$J7#qbsIQIBA=7(R`eY^6>yY0(nTbe$j}XjaRlb#&uJ0L>4iz`g~=c? zg4-O&f2KRZK!D!TQoS~k(RM{htlEeX>^t9$m=GN9%E9^^Rl`v=riww~jT^sO7vm^5 z#ha6{QYD9D#l5bvaPV1*s~8?Udso*aZ+1GCrn?a6 zV>=n+B;0?Uy|N7!3o{;^!!<}$lkt>PqNEmR{1tYJK*W#MjV?48dEj#zDdC2au#XkN z{)q|=nei3hIMW%-roj`7ctW%bm}0;v)CZ&HCh`G z&ON5bHGxV*@{V!tGqn$6W8$1iq>2QU2M*02Q#81!3{7TC-_*e3Di_6om68RVkz7w8 zUa;2N(M|;^z{vRMlsSkD?gwDaN}xP>hEb3~M;*FzVB7@zN0voyMNSA+uV6=Vh|7(p zTw2`tX{<(q-AlKjfb|hhb+#`V!||}Cl`*^Q1Y{$+-HUgYk)IG&GPtmUi>jYt;-pfz z(h3_srl4hnZnYF~Va5cwDEKEZ5zhzaJg*u8iNMcc8q>uo%%xLSf`l6;FMv}MZ-}QL zX3G#k{C?Gdzhnm)6+*C`cI^Z0((&NKa9~py)l>{Bcf<{0{hX*&N#V*=`3m27ENO9a&YF^wgLl2d)Be`^Zo5(k(V?3dIo;h2X3}~Syb*qLx z0C(X1$S>(zQdmYENEYiYVxY0SDF%Etzii{Mrn=;8RDkdEJ8RRCJD5#Be9?7*46Y1t zmnUH)#U)no3KegU#JjYrtcIG77CJw`_Dxyma_G2Xj}nd$YzC;I(xX)prd9=rK$SxE z4Tmy#>b(i6*h)fiM$35ca|JIh&JpAK8dn2-`2-xVmDr7KQ;tM$Ruo}z=nPMI$;_bL zoh@pS?5KhyjS-XCc}0 zlMDh;P<&z|jD_O?W6Na#aJz@~zPD-3#D%CD5t=>XjRP;_o%Of7@^fqXl@fMa~XEXR_{T3bY>W?hI{akIwGM*AGd*0%jMO z8W|2~JJ5Y$c$}6l2azg-o;n6uxK8P8+h7xh01Z^6`bik9P-ueb@(!+@STm+08k+*u z8V+^M#ALBg9v`|80g=rj+&_S)zni|Aqh3}cMZ6b_U76y}!=Eh)@lQxXnU2g7mA)HKD~2f`X!tQ}xK zvBx9C#_c9eh4dV8xl3xGVK`&+L>h>=n-!)Gru-|qp$*&WUCcGs!oj^oX{0B(`vS>c zY!`^PhC4eB@}DD5!rR8EKLh+WyWs^Pev~JRdiGN@L*b2v$aE>DrO~it%r54t&UN#z zVW#>)F7})X$3-GQzFY?bhghdLW2V%CLp)Enh*NM|KzpC^*)ra%#?T@o#4vz9L{-t5 zARq~C({mxpoPN-En0{NqG#Kt7g@QjE2^sN7H-l}H?GrC-=+02_sV0%b=mPF;O>FO2 z7%XIUZ1QATTEw>t`v;7aF*wa)SmSGvQV4==74-mxn=A{))-uF6_{K=iZYVQCkVcV5 zuy%gPhvQ!1DuCeu$ZgPB1GJZNCZ5MI@(C0nd<$Lr`0>I$=#vC5lc>jJhzwo!Hi-Xh zU41Yv%*dXF7j7Eq9%$kLwFOI&W&kcDdXi%3Hmb`Y&eQhED4^2Oc!XxC0sxay_^6p- zWV<>M!`MGrnixhw@!*2OA!Rv?e;HDgo#wJE*}TRCl|aDDlx>9Zfpq~rB_pW7ysKK! z8WzF5DP)td2Z?gQe-2$n;1*f0uaXI?dcuzoUaL9Hq8(OL6^@RRF(i@hxhp*r#055D zi9&h4!w_|p0^1C6UzQ6eQaTdaX6S4HH{zy_aQ9DaN?1B5>cph*r{Fvm&NgX;GBGkr z&SjGkaiWQCa`JxCjU>8CY-~wGkY)sEvK{dYhxFvy^yop{nLw>X$Bwp4y@npN#Z)2m zNw;tbIn!7o)*d@@Nw5VmOXKzv%*$PaZ5tT3p#j4?4&jNGZg~kzjij^+Gl!K?=$^k; zOL27y84FJge$ijcrs#+QiL29oZVEL_;sm9mFvcSkKr-wAb{#2JfRF-`YXzCD&@Ct6 zPk1p=#o?v}R)wkuuP{+5tQ+ct#;y<6s&nDlt!Jj-`fiOE4@|!TUAJrLhXw_<&;%u7Yj{7;qy3tGbNug^h4Z~4!g7}F^ep?=1V17 zj=Tw-_jJ(?-40+%DL{+c3z%$1JjSkX`4lEv%kI=264BO$-b2KGQoM+^5`%QHgsx{o zAg`WHo-Z(n7I@GczU6S!a_p}jVRRk{4Wt+dRZ@HbxX9qPdZzx_NsO|ScLrGGYSPEy zYE=h#P2^G$HBw9G-J$3(X9vq{NCY69Bi zx+=0@!;ORAZ2xb#aUArY)&E0d8h{eZ$aZD1?}x1o4D#vJsYd)C_Lu1Y(W#5uCU-h) zJ*egHf8770mi4Eb{KL>jUGd-U&WZTHow^+H|M`3V+HeNl1`f+oTz>SJM)Aht%OSOq zB%^dOnXs@J955RDxo~({E>n_9iwg!6mW??t7s*H(R5YlNeR1O#{#$8rE|Hq6t%JRl z&i)Z^rOWgND-u+Licx^-NtcEWE*cKM#zX2v{;RoTl*fkX3)1{dUJ z6lKP>XeOFVGI?Pj|4vy_o4SgCf0WT$0ZNA8HfK2hvv$ZBp6kRThrG35DK` z)L&EJa2vTq36QG^d%056UBp=_)vxHmcCo0Uu%=Am31dq8<(CxZnmUdi4$$pP@D?!_ z9az-MT#!wYUaZZ2SLwEvt+7rvWujc~{IdL9Uqt_2IJ~d`z9-Bnikkd3Zyc&TF-%O! zem48tu<^GkD9Ekw`J^_z3;X2aRRpJ`-i5t}_LVbwBfa#?FC9}lbnuvgg@f4}eFoEe%Uw%g3aO)D4NTpMG&h7baZa+=Y9fL3L5j|)lqs*#8M|7Lhc{w#mB zoc~O(IXp7pfy;lLIzaxPBl6#0|5wNQ`$Gh5a7b;`A^&ym*dY=Brwb#2Bl6$h@z=d| z@8W{8^M@45{mKRnl!pxMHL$2awr6B!4(m{mnc2InH~rAjmF3RNEF5f?(ROAx0bx{i zKpc#+l1!kKj+q1n=kmw=_B^ROJj;{Vzlz7tzJd)J1;$)E6VUKd7CaW|ej*gZY;+`s z=E%JVmkJ|+-TLY{rMfB{^=sDmoQ4eRgqNN2U?m2&VfKS?_bD~%i>a}Il9#%@?wRzf z)Ey382r`6pv(*7bt5lSjU9OBO<+*m<+T`+StS?|N&9%cdOD240FK5!IrS9IazZ(8+ zosl8KGj@!heJFo&Mg~;pS0~86fJf7EsZyA4_@56fEbxI$bQ~neG`Wz!HH?!G&FdcX zlUGqLf33TRk1rYR1YS{tfb8dwRpz?0&tanh7exH%MQ@DUELNL&A?+Zp=Gt}k;);Z@ zo=i_3n`S@!FPge1U_*s(v2Y}hFQvsmC8D4N1e0X0j}q9i4-q~^UJpFh#}*C}2#`Gw zK0a=0`QYMV_6Ow~R+Myk!s|y`q1|@@x(w zFcCU6AZ=taq7kIX*!!W;p+Sn3*|O@-WfkVJZNvyao3+p8K2I79mpxGhVLB0GQnz7p zt9W-Mn8#+PdnWtWa;ryRmL`Z039ErPNp$KW;^w$P=xs$KX4?&}vN1I^qp4V)c+W5A z%9FZ#*({tD@@kQ8^nXk^nJaf!^L%g>ulh3JN%u@O&zV$~(W6JB!uT-*uDeqgRU=eR zjbwQIe%1q{FqWMRBpS<;yJwnu%cqQzXmgkf7y&j$<)IQ`VpoEZShY)xx;5gl$KVPG z$8?A*D)tT5#n#qTHCtQ0mq9@2?#(m(=16BF$`gGOm6(`)o>XG;N!LyAcyonqiLI^s zQGpekyEV$@!N$UeJl2{9YgC;yR^ulJjFc}f`=RcE7mybdx1<*hk@?GDNY}^jN~|K{ ziGqKr64iiB#`5xci%1SY3Fwp&GS?>yS8771Nvx4}ULFFM>RuQkQb5eLOcx5|!i^il zv_^c_q5Ca%%46!3lSdr04Tmx9vN@OlJ)kW6T#qSWg(av}7W*6kLD}#C1_du;;QrA` z+dZ+@Z2qAeAvJ(qz@^Z8fr0hb>q}O(m6X_iJ!m4TgOt=r3L;V?he$rgVle74*8cA! zA6ehXDM*H5P0V$cBbXp;?j(AV4w_zME4@gEKrV7Ba*=d$F;h!>#zGro2Rr0D5r6M5^Ws;EIJ(ELa7|7Yy|@aq4p!aTN% z%=$lUD%sHo?t;pqo{+|RCV9d2;gt|#2sc=Swj7pHZ4IC1 zf{06>5@SoJ_~V(E_(3+wjF$W0zpSpEy1HT$8OJH zR{duuI!sekfa1~AK(#>fVK1mr2_o-})*(KgqBqdi6RIX#kKT6^N-CG=*(ynbBwPg1 z4E7MG4h@>PN+xxV{jV$x5p@v%36W*3V9V^WcyNBVMlOVs#WQjg-QKSC*J9h6io%z8kDcU{NSB9~5bRhkSy$8;eLR4YN*L=vf(I{LHD4#n;3ziEs4cOC6^OakytiGQ4wpuKeYlCVL1wzsHq%A z8|+7YfFo?4u}C}^L2%)kUf|~vz9Nn!V_0knC)a6r6Osm7Y~sbbISHVtnOrIpNB~L? zT&6&t2tOkVik>Cb10e)Cz<7lisp(q_LrCyQ29Ae`%eb|Q6$c}@B#hwDjtM&^h*7+N zkBJ9tARMCu7QN88B*v-27@8*2(`?uh_D6dfg`z0%rlOiYYsPd3hW0tD~5RpCL<0O3G!zEqN9(?alMK8qts~U5>SqQ z67w?Y8jYQ>q9Jd9K#Ip*V>HJN z1)?ovbri{1+nH${Vz%3;k3}>_hA%tIRqKRQHkTwN(@RYhb$VpVy-bx|LA%tyA*He3j1-)WZgul(wON%U0$E*NMn9unE5 zWGV~uPQCG?xQ|jy(q$YZpopWIgbA)<##tglZp>I-a6}lVhUs)LFo5+FBJuLWP4{XE z_aunVASGYVr?@F0O(Fr)h>lFJ2qwiJ&1zYViVATUrg#W7y>3+mUL6>&fN`UEW7pY& zo$z~*lI$R)#S~vf)Kl(?#C;i2HSF?6?M})U>_~Ojf=k4+$+#aj<|aT9x;oX!p@0^1#3?MFngQu=(qz*E=r(J` zh2V^$Y{X^Aly<1Z&L49L8M}^OT$CF+W^N;DU5yC+#tAse0SFOwIviqKlfBGdz|8OZ z^n*$P5eJ8{nRCrM}63I38epjk~U#<=r7eLz}Ez~zM)cZ zQ?ganWSi!hfe*#34Huy3hGP;9OXT|DV3lhtftJ`CmGB z>6jG%=k9zY|L@=O_m7MJDslRrnQ8z=*05tjlHbb`uFCL{oagY>UsI z7Uo`6G_#1ttplKAMpABEBtrw-5#jt9ScqUYn zaW}|x89Qzi7hx9UI}7A2Imj-DEfCBku@!iL{;=shN38BANfu&F_Zww&$tJ6s09tuU z1!3wnkQhl3OQ1{vWCLl00RYi(#e@JWM%5}|9b#@u6?1}%T(g#WLj)%r7@#-d$Q;~p zm9e3)A2X3Sjq-3UgvE!J3?v@q(9@n^8cl?IWxH8ZF+PmvdG?2SiusU|j>FU|By9|< zG}(?EDe#MTZKG~b+FrHtCxw3WdhhF zrd;QIT4J3Gij;I5DV97(Ig+pWR3lm*R8%Gs-f$;o#yH5z3|qe3l7*C~W%n4VK;c&o zri)mu5E1CrS%GXYWwYaQf#|k;7L1@9s6rhxKp!$IP%b$id|IF!Sf0>u;CGQul^+Ke z?Hsv#{(d`-+Vf0x8?jefhipB)gh;t5 z6c$QN2aAJH<0k5X2{ne#nLH)Mu#%94_trJ-q8~8tz4&MJy_S#z)Y!ghusrcGbcIZQ zltDC$C{J)_yfQL2i$@+GSAFB87%YjtVRa~g3{L>=={!+iCA^1sE0}K$ldbTx0B$fP zlOF=(;GSwU-TQJz>Li60Y~+R^l+fUJk;sbQ>4njBDv8TT1F#QxGnEk;E5zGF^2_?^ zzewU~f$l`7oz{UJuSamJ6_AX*w5S^ zE`K0UODSFmsxmwM_o1!riJ50!94s*bo}Vb?!2~jX!;cq~6qvRn@u`VXvNIPXl{Qg> zs&Bgp=DFcaMHhgb9KIeWi%AgvaLT*H{hV3Ce&p2a%9ds0Xmb>#%kHjS@m%XDmyvUi zQywz3AfrSLOZYl$HN$`|Z0zvVP6aR{n*)VHD8$&u{)9*XBsP;4Q7SVrN_)DLk%86X zrr}q;VVblm#Y;0*0S@>8xXu&tF^Ph0@_=PMYuLYTvpf)Lhd}^R4co&d_s1OJv_%a- z57@+#d4HOAP=RF&C2uTbACgHV@#6iGznW*2JFvAqXv$AbCN4Lp6L(Ei(izhxFlPDx zmr4#3kwE%~kWMCk;LS|eszygcyfgL?w@VcLlk6PHW)95&At$&O-0!R($N*J9s=p(` z@t8zu;$@RQiB*`7b#@?{VLX_OGwyI&EU3b~(um?yp>z1vBm|aGR%D29(T_MLGO$@D zx<{n)h!VzBERdI0i&s>zl{FOnN+rOiU*aIfw8%NpYQ*h-9#lL`o15V=YMyo^M;L(i? zFe#XR07nxGhg&mQ0sF|hhZG+Ow6@@Wfc;8?={j8G#p*(97$cd%N|lAKR7`(!A#hhV zAMuKea&=;6JOa6B!Qc#;z+B1kUqi8gKL=G1V(M1T9qoiXwwp}li+G;59P*$t@gCi& z34On!VK4NAQCQFu07DB~CX4}em#!G^p^lpjun*5k+XhOF|fJp@$nbF^* zfGqnNU^dS&+nX{cW-xx30iDQ*M+0a`P{=RGE^+I*W0)EUsGgu)#w4zBN;J7!H4axF zDHAx=0QVf>dlkKV7>A4iM`FWfOX1GS$^borX;@9)N~bIvkQL; zNKAq^*nB`t(EvYNkw}isd!IlUC%zYC4v!`@!LuEq2NmFC`=|{_+yki=(4&Mxqd`;i zMKPNWwZZlmV+G*|TEQHHJTX?HN*nT3OS0`f*pP$ANg>+*ns zM8}eer3kJmlwh+K+}$JXckF8oM>gxDJx_vcOBf<9=LaC85v>u^_>8W>No>j%Y=lpv zj#~{L3W}5}kqv;faf3JVb4y|yM*JEh$A2u+(ZBGH<#4$gWOw+hTn*~F|BoF80H8YX ze>!J(=$Lr_pY6^*a{vE#{QcwZ|4mo%aCLHk_&@N9>B@iDuwhQQS2SFuLE2y4B|ygj zl2bSUm|Oja-}4{2=Klv@^B>G%^8e?W9}N?SbiyYHTTmgt_%v{Ua9=t4RYN}FGRU=T zzyTR(K-`Ty0SyRb@rjhzQ8EKT$^sGyEE*YJ+UIm{#vN1zPLM8h6JSRYQV>t^oQCpX zo&%;Zcq6;8O#A@rEH@g0*hgxYhfhJn0i_&nMTDl8gtQXEJ_FEuj+{hZYKUhDr%*{0 zsPJ@PdoUa&j}IsY_7-5fY&L@IU^K{*Takj~<)M>QlIuz;gsKAvq%tw1nh>e#LYFdP z*fe2a!uLvwho7JLVl+Ily3RKb2O3p=-@?I(-NwKXCS-=j1ICW?_fdbSO^j#xtRf-5{$_c(d!Pf?d zV@2sp2GVVf(b~xo?mWa+%^Q`f+XoumO|-TjT^Dv)D(el0AyxNZ95XIRYk$MV4Ztah z5T*=kGf;fr!ZJ%R^pN6G{(!F_-s5XLtF{Erm^dX`3OFjZqex^0xrEq*rH&L%D*Gp} zCCY32gJ4BS^r>RcE%tY7{JFqVQDc&E3C%boTGXQfe)nC(p)ue{aDs&B!2+=NNYP+* z=_sBabG_!kb{?WlbH=MkoPEh8JsRy7!$DA`V&gH>tXmh9UX{$R?oYIS!o0zK6pv)J zgy*B@7$Y;t2Of%vczig;{ z5W|eYN15u))Bw zpygXDDfO|lp2;>4P;R)(x3M;5&jXnQW-1+UZ~^8@Wr~f=r-gEuGmTy<31W@uVHYj^D+5JOPphhga`hhhe#WgCJ+FmS`h$<{!PK_$WO$?(ys}T{fzSM zTo^!Yi_R52T)SHLU}oLH+Qi8t0{C@rI^K+_G83vq&R-4R5Vqhph#>=a!F56@P(pSE z&&X>Bys6A@GU7E;r=4zt>1s8ggeo|&gIyBUbGsyxF@}UEvno$42APNS>4Fl_1IFU$ z?$%cs4~-LdvWzanuuSN=u2c!jjIg$(Cr9FAS|fgzo2UNo1Q7^=GX{~bEFCaZfXhH~ z01?7Oy>Rd%#v{oV1~36eLYNyO*?wZRX$FLt!Rsp}8J%y>a!){0^bJZh09Fj{n4^yn zy*hvog@Nz*5GL7B1Uh87VbMEeWsAP)vW>XiHg)LV283WjJ>xJ1HRXp%W_bzuVWfm~ zLN&v;;jwPUZevPXg!P;)3g0y*!NA;zr7Tm=VsQ#o;mB~P1J^^q+y#PRqT4u+L!a>Xmt<@%B6hT&4chm`tk7t4zY$A1l5jt`K zuj2DSKvJR?^=u_HmyFCkj=6A|jumukKNOvVMK zZ@YPd+3eaytL2s%#T^8y9Qbh}XHzCJrs9$~wqokp)LS91bQxn_*r7=gAWEun*(tG{ zV4Zf;?L#Vdkq=={+}a5sL>w>6uw5jDG#(7UsGT9eYbE^l$)d3l1$cDz$%zAnXXbEC zmCYinVW_4cbGHO8@LMH4l2O&b2NtX3u@DuWcm-YZ0Ey$ehvjkL-bu{zBK>Mo^a8EE z{s|E61*?~0JIDZ#qZ{Vz{R;DYBZ^Hj%SeG{%H#0ZUKb1QW{tqV*;zdFr;^`&a(TfL znIV*|9NHzhtS{_?Ec?kOW-p7gX>p&!gxd&I=w|=R>6o39?UwrvDkFR$ak~q}^CKR1 zT4uUk9bAlEJ0KW1U6vgsY&-Vz#4<4wE?vAf!p_JcmLaV2_EAv7Fi^L%IvEXSb>GLw@x0x0YV9?EtM z(^lxVU>JonQSh-x21AjMew;~XCuq8d$D>vUY{Hg6oFoTjw5kKTCcopB&|Qd|AbEfZ z>ZG0!zd2=vF@21A_nH#Vq`E1ANwBg}eL6~kJ>#V%Pnp9g)<`6yMs){XJZFuJ5@LS| zZ+mczgle2-(G%}Mx%o&U@lFeqnJAI1L&S?Y|D~?3gJh_3OB5Uw)snuo4Tygs-Psw} zCo6FcoZp@-UC~t%dO7G00eV(l9?H!mK(Gua^qI2&EyrYAk`fvg#wA^XWW?NCg%Acg z(G10l3M6R*A{4Iwl^8p2zybJRyc4oI8+XYve6xBdm?r|}fsABH-P4Cce&#Y+49$1Q zr03~@eTf&!{O5Rx?T~17gx~#`2}T&W$us|fAo6fQ*XV~>I2;%U*b%6pK`^G2EQRp{)W1LAf1<38YhC*x3|Io@U*S7H zn+p!Ryy-Lv7`g#J8E7;XMq$dB28*SxE?Lw94!B=}DYTXkRxL(3j3oi>KtPs{M^^I4 zD6_qfb8o!XHgyxl2$M~bEIdFQATXqo7LrASI(iH8gvn*~f5+cH+5f-D#KeUD0dbxO4hC3OFvJM}Udb^4PN~R5;;AD7iYzSn9~}{J zBqZRU91`#kJKSpt2{3o;pb1is3COeVAQ5?)5UlN%bvFkHu?9d1u(lE&kwD7<;05&9 zV6rZ*Fb~P(L94>608AM1D0>|>G#)ig*B^$PGzY|klozI_;O^lIqw!OYC>|de?E=*@ z2lS%|hIg0uv=CD2-OAJCfGfffSwB)2@xj3eufF&YHZvSdV)p`IvmWI%CsJb0nGQ|@l!=J9R z8aQQulp)p<^pddV384EJPe3eCR}9=f8Lx<{6dFH*^KrC!#WIN&FejIATQYv-fCNFt zn86GcC8QZA)J*qYV4LFjchC!PVu@=ULsCOXCcLW(Rm-Rc85Unu3u#P}MyfUTHK2}D zfK~zoSAsFN2sPjdX;okXFwiP0JLL7&(b@(na{E88NhvQdr%bZb8GJ7CnNtZkjfh~L-enV4aQ#-P-mK5|Z zDlsf2l7M%Cp9Y$La^fX5SW7{Rb;%MK;gIQsAQVCk$-!#Iy(5f900aZ9h3%lC%(xcK z#QV8Swqr4=7NZ@kvK=C9rtS#zBk_GE&PA14YOwUz1W#XH+(iNnvA_mzlq_rQPbQk2nr$uSfn+9tL|J~L zJH4dG{9qQ(3#`vGK^j9qofI$8^OVX+dT)li z8BA!IWLinsfpqsyFOh#|m4Qzb39z#Q*{NPk3v=Qz=lCuPkwd>OsF<;`1o(}IjyFyL zh+rE6u8Ofw3ZyQZphm+XyzQC5&MlB=G~M@$-1o`lgB&+fmB)KbN<);;1^tSwCQLLD zc@zVBjmF}U9Jyv1G$6}rqegQKlDJ#Y!Ewduuj3=OwtyqT1aS`n$;6rk)APpF09=Zh zQfeecLh!o@#zRw2E$}ATZo&b{1e?GoBNmo)*f)PQQ%zK#Nvgo>P#vOJfQxc3QIo;W z%)JRkPh2QieM|!iS|jx;wc0GMIx0TAV?8)01;09lr8f@oRYdL(U<{0a|DXQ;-# zLc9z(tX~(=jNyx2gS=Mk5|euv(w)A^T*iqxRG^fVa)3Ymv>c{SlNTKK82QH|;&ii+ zH_m55&orS68ZdQi3n?D0S^%IL_@{(-#&(sGw0XIRs5@J8Q+0xSIUpiJEFd`xSdu7l zN)lIQwea%OBlMQ5n;geg* za~;%;%J%QIg8zGzLkC=h~C(OVm@;@|EL@Thl!~YWrU!Xon86u}l7eZJvDH4P9!ROWt zAX179AbRQ#%5O|oygG8sNc*2-hV*bV4Zs5F7SI9-tsIt&5T?i+j%HD+hv)G4RMv|L zs)s`Fy$DAy5|{WqAxXzDFc4!{-)V3A!(g{&#R~{Y9aRWE+vZ4HSV_|=Qnp<%auP5l z21RLnx=a@bXw26w*ig2#bRauNz+5Qx#T_5{$Zz%&MMZ3N?w zlkP1reKug}fR##L>;kL>9H(%ZG##d0Q6RH$5d73Ap@~)Xc1fiQ#3|n9Gz488rzjDT`hjcI9PR^g`hy;DG15$9 z6W(fiPz;d+DW`Fb;(M@*Ixuhr#F4Q*L&HM+4&8)@vtJz2ovuY0v7uBE;zcpX5r~zH zLeyErL-rzogWWNiq&wv1-Wx6r*#*qg7`U3LZ3I=(dKp{sC$J~+(qD>ep z)fZAK*x9Ti>WJCcmd`I6&_O+hv(J|kZ_5G(MhAx;k%9_9f2mr~CFdh;7dUn74ik6> zjRK|s2-RCHAUh~VN_V(NU&iF{L&lvc@KE6?z7eg+l($DO%16uNG4Znzqi9J!q`v~p zJrct==%euh_rR4nHL(@u%T5lI3XCz)We#0{rI?Z!UkN@j;;Y_yi8}A(F~&x(fTjs!r&?z0S%FK}pb9KE zBVeZTqDF(4k+cSD45Fb)KskuCGQ2&!Ig<4(S-`Ia ztsBTe62z3VJwgHHV1{D9ahL*Q7xhs?WI;3HcE~*y?$yG9ICpqPPh=EfJW&i!5wU+V zbpyd0Ojt)izMLXuqEt!~Cl?I?(T3HnaZXD?JOqDKgi8)lS(5%3nuf$LA->~u=;ZNn zg}iX#DIIL>G~R9DK`oJ^E?EI#FBr}1@sKVV{QqTBHWIYGvL!P2RTB8+dZIhaB|w?^ zTHVhi3#9y5Sfwar_+V^Ry3I^33}c2N^H;=I(~HIg>v>Fi4=&YjQKBXvV~XZt6A{zF z4UMVBnKuv5dW{jTP=K{M`4LKhi5f+n3K5E5LeF{-8->Zc0c*Z_v?)XSYX_fca2dczG1SIC!(@ z)bFj1!HV^UqS!f&H3&*i2yc*Os1vE5y}}kZ$hz$}?_RuVrcFUdr~)EhS*3`l1;79= zgw$~mK;nV~jG#jC0BaSXFLMkr zfTDcO0OTmUz+6YYYK*R4C^saqUk#(E?bv~M#1z*Eyo>}FJDvP^(N_@;`^`d1jd}Ut z`kbv|T-7RxsldvBEe3Usr^X(t*gY;Hz);a&f{&haVZ<`6ReWHFCP`HAAyMA3LMfOlN+CUgFOCwz zy6B^6#0AJJHH?JtB#d6-z&*qV_0e-sS6)b0gm}l2o99HB$AMEq0)B%8M2V+u6BDOV ztd~A_Q6-3|JEqCAkV$dKx*SQ2h^K5!JvDU-mVoqA{sSOB6*vYK#`bWP#Fr3e3|oSjtK5QW7ZkUAs@gdntPnGZ{T4p|67vL>sLQ&Am9 z7CSgfNcmbs0ad|xO?)?R^1q3GQoK|dkAdBfUg2M?1a|=RW+Jyj(uW1$mK9`|Y3U-8 znCadksLq*W1HvT~u5G~QHA)dJD-rOCWKx2JwmApLH@bBeyj?@$q)W1LrGt94@INMRRh`wW0IZV&4tOz*ffeJM3gsb#PY@mMY;LeF14gI{GxD{I zaXXQ@BX|N+J?#hrN)jA3$KX8kJh%pkyJC~5rGe%lC=WNOBBSZFd*o4#!<{m`RiVD+4q#o1ZV2lud zVf}-bYrypeH8t)(%xWsDFmGsYvziLGNRFX^8VrgbG95!jOiiCbUW&#(=A;7LaMuzsxy^adj%<9;Q9SxL0WuQ^D)%r-bS!LUswn zu4>4Ll~@iIkmseUp<=Hh89K92kadlfw8&UEsQSpAU7sK@V0qAl28sUgVobujE*;Ag zCRZ=6V^j(rkAN9rVG6U_H{f6}0d#Tr1`mk6LJ4R39AvQ&^@~gsx?!6uz@Uhm?nfLU zi(X5fiiA6Ewzxwvkz5VHz$g=fB+{*6LNyhWMwkwD!y@Jpsl!+``ef5o20a`=4qW&> z)tbajL-eZ#cSvEsOz9^ni+u<>#h8*B^~HnaqR(gr!MmV4OoFUr^hntlBbd*@XSo&3 z4-qL^v`#o<`k=mM#jMurcw1R#@MO=HBBj)f(@8x5L-&Y6sxNChay z^fQcpWIG7Q$X28HB>~yQ=>FJcVAHUw8_#gvMK{oqyouvG%plE&&|;~$i$ z2Kha@v9b(#Cpcq2XJ)YfFZ~lP|NDp zLfK}$;(%6`wuF(JkT0@+=UVGFOQCZn5DIP}Ji#R0C75#JAQ|vE7gv~xHl6*WYl(P0 zo+N^Zbh?CeG!=Ls#15NsJs&!>D{Qg4k3@&8Gc7zF-M;;CBM);bW(hap!k8puk`#k= z3JN2^j57_qezV-a;awA-kd(w_(Ui3mnzGEV_Rxey%#vF=1@07+S@k&q7HUEw$6Ik> zfRwB_vt*!_xteI`iL%ZD1#iagQ}7D5M25_uO7VH<9|3bp^%<&+sD{xE}7%AupgVP`A?9j@4z zg~m@6SXPd&k%4N;#sUD?k{WhZMb((%FjcMVo$2YdX?25ue;iJ&4sMY1xSz1__cO&F z_gWM}Igw`72duVawL*JK}ajPXM6X3qw@3got zn&Y@}EAuRTz*59-<>IG4{1?l;HU?PY&)~L5xZ4W42SE&-5w(r_gYerE0AA=m07nC| zSe}82&j*+BMLSl{RKqcqqvKk+&5?MQe^I>45x}Q^(_bC&KNJ>zhzX$U$p73aMgC`Z zmm~R~|CYaha{LcZ>2*K}piMzPJpYGNrVJqLUo|w&DGiASBL@7F$Q6yTE{V}U)B!r( zjzs(%iTL>+i1?wb2Zuz7)?Cn7p~$(TXM;wa4?TL|=Y&+ai6}yp&k$kjlatbsy=-7>s7T{6FfBvc_IM-ad8^D7GYKqDTq z#gkaF#_H%!peQS&=PF`0)t*Z@)eIh3GGW%!Y_~OYMvciYtTE_(1`h|ZprU1`8tr*} zZG@85nv`+%;IYUojV0#OOUZ;K1pNL6H39)$z$ReOHq-!MXIqWk?5zaGDXTIydSP4P%=LEHA9_; z6m;suL{6Lvxv5z9EhS`k15^s?7kNDB9m%T%!c{s@m>-OiWVAqYwJCc6IniQ9L61fY zf%a%M=9J=W`^J=m1--6gztPXNU|;K|98CoSs|xqIz)biERllCF#Z2T5$o~Krr-b$I zu%iLRpMf?Q%s!p&Oe_N6Vx2phe()=G{E%F!l)yoJ)xN-?+G^_B)X+q#O%2a+Qv(gK z4eN_dbkgO~fo{@DCh+hq@#g)CEdX8P&IGf4m9><&S^`p{93ixIF>@Xv$pB~}<#<35 zccKvyfCm1$H}b%6m7cfO*~AYMtdIUJC=hK&W}TDrsh3| z=@3~1`hLR)Y&)@MxYsnUi(xjn{n=&MeY}VA1h^Br5u8AYZcQmU>Ds`OZm#B2C`HD; zB+B#ftVOt?75I!!-mx&`X~uw`Xk1*7cqt<=ghD|)A9sVQp<4brPuj@er^c*F0KuKo za%o|&UVi%L;19VdVu-qdl*b)SJIYsKx|w zR*@PXr4XnOfPxB8-qB3Cb2NUBh1u!Mf-)D{qWt(Z39m>~{GwT0X_Hf|hfB*f&>GAc zE!$r>XV^f}oZ(ZPGfpvwFkQw}dA#8$sM+Srbv-5qo0KRCGc}2`VY!x34_SVzeKMed zq`APfgE00=HZF+jKBy@%O#^v&6TyT@?NaI%u=-)^h7?4zL4DFQX;)ecrOc(BG{?eA zs6x2pLQEj{>*9%P4^X>G9<8oNa)X6I_@*x7ogR7t@CZ;CA^LlQJFb&rq?5@B!kZIG zO43P6P8@D(J+CM+bDSQ;&wf{ZaP>?{@X%2flaQ$zN5mlYOahGV5G%?wBb}B2W6lk!nsH=7SVOBJi>%%ErS^&!-8UbJ)4BQ2_0u>8M|&$h}Erp%Gp# zQOOF$4_)G`b&o;=NqZC?Iu1mOGN_2HALGoaEge=~%+WWh4`q0@4ox(WG(7PG$w7y9 zdT~b?oB-N|j9NS)Uv+KA5E=6S!c`@eJ#pOl6bC&5KklEdoRa6p^hHJ)5W|Z-G%j)q z;*Y_w6Y!wItQfwU5K0>kK{BflIuVQDR`R~2blOQ;W+DeKgT{2;EW8XW!vQ}xM?nXG zl}jo4wnYf^@i8LMMO8=)JKeC@Isc`q7bgL$@?{W#u6_vxp6f*i zzNATt`u^)*5?8_`-nUEKl!gN|8KL4 z=E1g6hyQoyF4-Lu^FL&n|U+wdVB|4X@rMO+BX7ZRh628;;Mv zz1byOKA(}ZV%{Yyx^`GG+Sw&MPE5T z+dF#b-hB`MxaGsUzKQkfciYDIC++znHu}|J3wCUHbW-@U`AxT-cFDAT4c2cw{ntNF zzoc!?9&g;x@T-bnZ?f$@wny`O@7dJ1{*N90=r`q(qaS&-+Xn@ajjzbl_AD&Tz3fk0 z{fA%dlQw?EQTIRB^0}(%lUn(96sNWRdg|hj&;0N#TV%tBCr``SFs13{(=NXF)R&K{ zdVR;YBcHr@>cmyvua}*A->fzbr;WY!xBT=*wq6&{-7~+REpvG3tGhmZX5Q0J&n(#y zIVYC$*&E0A2xQ;h%GYYkW5X7F`NbE*owGmx{PTJZjvnqjY3h=DgZTp*Y`o^t!ra!U zzrQxnf6#T$&0Ts~Q|Z`_y?g(4b%!gArwoCu`?yV(DmNdh^ zEz7REcE*e!mFFLA@!YzvZ*`5D**3j>`~FQ^`4&~YfA^j}dx~y8i*@Ma>-vm2XXftc<-fccem(&a<8|KX|m^L z+Xb`j??ej=3rCKe)3#`HyT?9WyJ}U76HhEm8-LT{_MdiKx%-s8&#v#Y_XXdxXX7AWOPVwZ9^d^*-|h{&o2~Rc-stlg zqps?)?czquPO~llerxHU`+oT?=k!hMx8!{F=ZPPzTJ_^+RU282>C>OS=%*d`-Yd84 zp1thNFXEqEo^w~}+Gf}6ZsohR^N0~6jydL-0RslKbd7wte_DpRw9SgMPxFL&d5mM*XQ|Z=Z8|o_yE!Z-4*sJ$nPMKOg+Xy=>^2Lnob4y?ySjdyf8TZRU>GS`-%b z>o|GPTLkQ!vQ9S?Q5$%@vpN+lz>E};;Hhb1Ae|hxnko>L>PIuQgiM>fVJddd|^$J$U7n z5B;?Bh6YoH%pJM=#p*U?6|3hCxb^w)#?hlk=T&{P{*lso(o0o4hlg`MyEg6PxzDf8 z39MN+XwdWjDL!vn({0x`Yh#zB^QPaWjagtjfA*h0Ex0s&`uDq@d4I(nod#^}vG}UI z7nhv>;DkQ?((bFe=F>aw9P#O@*onTCTi8yrz1*Q<$NO_$Y8blq-dn3)zu?TiclCe0 ztm!GIJo?Gb=RTP{@3IdzJi9FOiyyvsdhyZO?*&_Cj$S;z&vi}fkGD$ zY}qn2G;y+t$c%#&<}5mK(S_%<@6+On#se~YwQ5~9W+R)Y>R-QI>U-zj{nV6Bl8Z#3|Z7K_K`FTeb#f-Rdb ze^Yv3R<(WV2OI0jd3pUFzwMiy_kJ?PecY5STc*AilzzVcltMD}p0EDlOXZ!} z*Zn8=0;Sui`$xC>)ZM35oAV!<^z*F8$K3Ph$HUI-JmMJJ(I0pQPIJGr^w+JYH~gsO z_cyyGxk1*{CE=fUO?&GMN#t=%iG`H?UymFP7U==YY-{wRk7la z?5@>Qnoe6>WSf8H&gHk9J?x2*MFR)!nz{Y4Js7}Od;Egu+GXzU-mCetqvMTYH{bWhEAQPlReS5J4+}P2G;YI>+rPVT!K&Ow z%N~C4i{)#c+WqXaL*{K+`b$RJw_0^Lt6ke^bI$qhohi1-3+CJAN6)|Df;;ZK^Reay zSuYNL>DBYrG{1b^x?9HV`~KP=fBfb9@0X{2SJ1CG{p%BUHL!VSl=g2nGwr)f$HTX| zeS1$R-W3YQub%t)Y4sh_fPu$Wf4B5}TQFzT3m+`K>*4eE{W!0>UcJ+2tT-woxAl~q zPuw{ch)m$yGgC=ghcn@Ty;)il@1co>elV$+WLF zUi#yPvkkN)tIj_5P}0BksBA!Y{`y`0PIK#?yP`j;vSzzT0oVeePVw9$mMzEqd~S!Dmii z{m6Chi#A{L{-r-Xc4>pLGk%&i{XI{Qv1ha%)}Yzk7QWnND?7ZuYvl90I(YJ%kB+a% zpV#Kk-(MYY$=;paS}Yy>NR!q#w(WKGlabiPY56mIH{CqzdGE0cUVY`O&#HE}ShM@R zhtr16+_mn7%&e@)>(d%Pded7cY;1Y=b*s<&t)j=eJzH-*YG#Xj9gp8x|LdbKYal=M z_5EejGOxbOH^aTmJ8Av+JKK5+pIUKuZuG6|f6q8+>Q{@_xcfEFyZFV;zis>F^zOr@ zu~pwRS?XwIJ8JB-+jhS)Y0Vjbo-^*(Z?g(L8y=W?Q9oO8>$K5NZd@N&xbulYpMF|# z=6_!eKeh3)iy}$g>;r92M&s~4vbMHLeq-VVkJda;>T%()r&41^?qQ+w` z{_ffjhTPoh^0EEBIoq}l-M#+&IX7!hEn0MLlXv^~OS?TUH?NIvcr^O(DX(w+?3-0h z>c2QCW6{pv+izRa>iqfFSO1W={J-fpwe3-O-{h{}-8Cxs(e@e7l%JU~@;1it%3{wh z4Xi$Q`5kuzwyhZT+t2HszVy$9Pd@nIDXkl~&h@phwY|pCf9IRmOnv6**+(CB^3tBR zo{v3hpXR^)`4`SkyX@1)wb2dFKdJMHH|+SeNwc284<`k#zUUd}Gu?Kt|MjO&u9*47 z#%*ifvPs*Pzkg}ozOA=bJowq`VnV1fO_CVtUMyeS3c&H*Q?Fw68vXIsMtI`<}7) z@i9-{;Qn%bvsRUBUix9v{1GkNwY#ch`I{4l{eIu9ce2lH$jJZg(s}3QegAfg{_E1} z*&cM1&HUrI|NP zGZpWDv-Y{i7BBv6z(<2uzu$Ptf>$mYyJcCMz1hE;yae85=vdvm(JIJfY>|LxlM>a6Q*%dTwD zXvISh^|_&ydq`l*;@e)jeCpH%BVQ^RGUUeDv%lQ@WvtOX=S_L}o56F=Ik&X5L&b{I zcK>oreEvfZZM~*lUW1-+(ePD{aeq_;aU*5Ilt-f7PE1NcBQr~G>_=dD4GoJcn z^qqI!eRpql;gd_oA7@)xTD&)0Solm^Pv+0fzni`;{OaQ8pYNQRS-f-uBZVupZ7T-d zmgV{UwadJF7H+(EZQpvIZ=Y8+Y-p#Z_itO2+2!Te_bGRF8u!)rTeqYuIj4V9(){HQ zdZw*oO&lXPZqRt!jHaVTjoPx{lIPYbw|(LEX|1AO>$C1_(d_c{;P2nQ@%tHy!NUZt%#vvHSBpN^i``k0>4_Vp(>YSm!d^|NMOy)ImAv-NtS@xU|kyFGi=e@d6uT9=F^`lMSe)4Mh zt+#yqQ`aBP{czs9bGi z?#JT((osX^Y&r3gwjcG_H~x$DFCD#Pea_^OzrWD3vvGnRar(JaHoCdaQu4}St^Zga_l_#9wt2cIS<3VX^FgSV3b*FvhTyx&F z9j6VcuKsQH{1JEc**N&MQ|p!OedN(ccl`R@mYHp<7oX6!@vxzz_I~@u3AQWuWq+rw zsCVOsj(V|zZ!fBpY_IuOj_PsqoA#{0+Oi>|H?%$JvX&=h7Onhl%UfrkefE;6c{@Im ze%<%`ZlBld_4yX3#oR6P_I%ab=R2YG%J&9$`?jHd%3GU;lpVW4UK5zUZs6u={m$F@ z@$q?YH+cWro@rBWgTGeIZrYe0%eOr>$=SaBDLFC6#HMXF-_h1{)zr}1GTXg7kKcBG zPQZ4rT{_|7CmT*Yy<7b$OyIP+7LESav-ivQHoow}J2R){`mSuyGa8Madv3GJ*BdOD zG~m{~PhK#8`u%D3Cr-KkoGZhxq-V5$w6NdCF&~W?+sO9)592})Hty8*-uv#G|KJyr zZT!j2woQ5Jn?HUVaQ^vcesKPi*PL|a@n^W+iI$d@&Uchx3ve;Df{-T+EMn?Wer-s z_So#rjaS|4wyjz8+oXBYo1cwoc<-NkcCK8uY(nv#hi$#C{;&W0FHZfopDn&QYr(qn zJ6*qH%~OvqUw(Gl_B{)Kp4O`Ei5K4g)xfH|2G7badi|)Qo?}|*$+iY_?;4oCqMq-O zC!R>}@2FP;5X#hf*_DrXh_dc&pNzhy^B zn!Ebb4#z5U__nXnKC;=GG-|8<{57rp4V8~R{8jdpfmeTVew#kFj&0xk^S-Md z%3Ahbd3v{no4?((^3L>UyHySu`f+#PvOV+ezT^8pet4m<_pb{lW;fk2{LQrc7)6hG z=B%@OygIAt33ETcw&n4@-j9qdi&Zb5HGFpiCWdd1o&CX4^)9^d!amoXvh^0*X|@&j zyjuUYMPGb3c19~-vu69kuXHV*{m9_H`~KLr>y4`}mEV+SEbDT^(P`Vy*~U(SKi@e1 zhnB9>*a^wx=4P8V?K`@GXT}T9p0j-U9moA=(UZzM+aKsVpx%_GJ^D|+?$i?s@-E#c zO&ncs^UI$GPC72TWycBmQ&c8B78d3Y+w|qut%F`U=aX}`*|U1jYqR*a>P@E?&grnC zS?f#Adu;NSW$Ujy^@guvUp|@D;Ww^bJ}bR+)tqCFuc~ibwfgyA&l!`pWag@KS3gmlX1m`vtHd_& z>f5y&l?z6F_SKv%X;b>me6{J(pEdbU(+_(-_gu#3pZ=I}fBBZpn>TOSGU|h!H`(s! z{>b1*cfR;}3)?BD216%3HloR@hkG@g()8udk(<)zE}p+Iqf6(tw%6WhvDh_r?cCE^ z#Gfw&9slFFDVKJ+aqDS!T(JA|3nDM&gf`xJg7e|$K5l*gn#l|Q%=vcN z<|vo zTkz{UF1m6@lgl3{DO5MD4|Uwprp;8Zx0l^sf6!UE+n&Dv*~s99x16y3v!-n?c{#du zIjfDSIHQ_w%_to`d+W{ZiXWOg_lhg7sQ&H>&x~oCKIwb&fa7iK?45brIg#xv-P2z` z<FZuo9g*U;|Id`0*ZJgZZ#4Cml8#8(L;w^VfI%moNQb4W0+v`Ht&N%Jc&!_q> z+4Iqx4?g(8Ydsq*>-U8;Yu3n57yj}`qcgtvc=hNdYreSCcgthrZ@4>cO4AF2!QAni zr=_)DW&h~ZdTooc?|g5=`1Wg8?)>kdpX!aB;TSq|X0Oo`J^zorD}jfqd;cRUCTS0? zW3*6=r6PM-<1Hc;+Ke$6&B81xT2$I>?RhIAZ3-z%l(bV(QfLv879^#zmDK;7d+&^y zv81>9{eS<@|Lv1m?mYM0bDn#i=lPyYO0IXBZVahe*H*iD-MUA(i6PkohYizQ9&`dsr# zd^BX)9{rRjYG2=6I({-ZbF|!+g}u1ktO1dllX5JAgQ`eNQtG@kD52BS+oHcuVU%6S z470R$vVL0f^5e(joT?Gt-U+5V^hXuBY0;mqC}*UP*L?lgTAg$!S?|G-6VE&WajEe9 z!`k|Dy&C+pW|`M{r>aaXk}Al;rH%=_kQ-$k9CbadSe;yFk@GSmV|~&^?GTQw^acOo zZ(}c;`yD-UCGVsHTBfWZkO)|K zr9QY96Qd)C>Mm02vu>SHpzex^^qH}8VSZ}+XCL3XRl0fPxc7-6A9>!Ef46?Bw6U>K z!PUf1k~EUY(T{9QOq9dj$|v<5*cvFeX4&5s5c7K1{dSf0Yn6dZfLJOUT*NNpJ5MN#xJ8 zAL@K=|6K{n%?V*+MjLah1Fvob2CD}At7MPeI@5Yz12ZcYOB#!DGip@7WGEO)k8cd!V}In@&9IPLd6_G(H`XzSrnYJfGe2Iixqox` zh-n2L^Fl3a>YoR%`})GkHa{CwB$?iKu4bQ{>RUTM7=Ij_GwO(?Mfm8Es^54IaMP=X zhm2QIiMwz?pGb6jd246Yz39s;KU8k&C*SnGyu6@b$F5z26%}PjYq#a^nCy6GPgB#1 zv@td({2X$}%an2KY?dxnG_?#om??L0+`(S;w`Q3{#0L><>UK{YuwPf>_VXCaBMs@7 z*EAn2e`~tc_w>A4*TEY`%VnxGlnmQSl>WHHuYb0}wp}W=Hhw-do0>>Hj#SRz!Gkx; zDiUw7DU>5m=zXR&7x!!GZ8sa3j;(FeyU0NiQ?xgKzxRDq#wx`Rq!Vcw-{r1IocVhf zi6Rk0qiNw{9_@bPU7M%jDKTr;(Ro8Blxkno#a-!bRfjh}u-W%R<)C*_zWda#Y>^wC zo0n%M-G9VXuQx>}iB~30o$9#vQ{*R-p_|LiqbGt)UMAetW4pJ!eX>zv)FmkuVi4}k zh!d|~y(lFvkvw9ry?=4(*wN0Zl70K+N9r9dydSisHH7u*)xv}YiWF<}De*QFM@L+%q`t%>M=itFi##5aP*` z4p8?8-~8TiVio6gkyGMbVrmE{S1)0)UclW0+_W>>hpXaRTHi01xbi&4Y;%xdlT%6N z`*)Pt_Y?+~C|7CH94d3dnuB8}1-Y7P=HLUPI7iO8jyL^V>t?~>ogu@+aOw4O>yITT zCl?gV9n{D7?c=jSK~lJk=4S!rtE!@a`GRp(TG0%7sksyfxiN;1OG{Tbm-+d*9L4G7 zDZSyYEIxI6yYYqoN*gm(hHt9QRy#Cp`K?GjnWg6puYH(oopI?>T1HFkxX*3%W@XQ> z51Zm4d+zC8>)o-RK1I7^>gZ}DS=u|9n$~Nq)$(|D(H!?U<7~z0%w1+?ci-%rd*kE# zr+$}?9#zuPa@?U`BD6*Vn#e+hnuq1fakjCnjw;gri7Z zd6@9z>4Qp5g>lZuLC8&9Vqjv>x>MO|%+rgj?vM5xhr6=u`+-lnlUp}z42#+3^m>%$ z1O|ffMaD(ma@0rI59f4gbU`uurXP0h&M+!2FJS7au8 z&v%($JY|51VV^6O(t~pc9BbOMCyttzbAI-^#6#Nj$C^j(XMh37#ful$OZK(2vXZ<~ zQ+Pu4SY@Ui$+`~U;jp~iT>VuaUoz6mUf))mG<^M1yKnVd_J_!`*!%Nwafx$4*x2ws zhnVB!8gusCx!${SeyqveyLB3uS6AHCy}WJvc0+F5 zHTuISeV+Bxp*cBs?i6yW)}}JcjLbGm8B`6Fw=ay)NWaw9bpO#ZlcJK6i{$IuF1ImG zyM)e|zBuY?|0{ZHK4kBou)DTl;VRyuMF*eI*S_3orNb;$X|c1lwVg9(4wK2WwA_5v zwSYY+x>BaMd`VV7^X=UeqXXXQ)jiq3bb7bL)UPZ}Ysx2CB@fS|(Qi)ITwNtCg^QQy zANpjx^#Nle-<;5lj0{3l_~J{Y2cnl{1~d<7Z0xUaP?3_KPQXoDHtOUi$56``k$ToO zHD|T7h6l}MBsNyxf0K}~D<@~N!a8ooK(-$N-4H`6PrYg@wddTUU8|+kVD*y8Gs@`p9T+_RCw7T0-75d{dXBIBqFX_tB zlHIz*F5Q?^Mh^9r3sM+=J9^+0r3oK;E5+*9PP-SIKgKHm#Oy~Vw#7GPv`&U8kK6Wm zNMMu6SMtN^`-8mi`$;r5Huh@W^Pr-l;>;P%oeHueva=Es=PXevu`bVgsVaZ1C1$x9a@`eqYqfpzLIfHxe ztcFd2m1UoouTO6c>p#@2@Z;{164+-B>2W-&3l8^_CrJgSKl7h#XlSUZS>Uey`SWK* z+08{oMYj8`n%$m6I!C6arA;Fcu1x8Fy133@W&O2Cy^-$Djrcat`!O#X6oQ-N$(NfZ&(3?#KQQZU&D6ffv$EP!?ioKlOR=)I zzkk$v_i<3EAw%XlI_}xKmzw^RLZMg~E;!+AS*9FVu!^U@#L4OL=_Q!}K1eP5H1I(1 z4L!>}9~&B+OdHBqb1Zj#Q}!xYzs7>L=J}>o-`mQkqy~`WuS-(iwl$Zt==9lkc8_Ws zw{6?j%Y;Uw0Ze3KvhK##K@)b%7*pebV6q3>HvW;Z)-SUUY=_-KQDd-tY!+#Qh?c~~tk zpy{o(o!tOAx#N2-jLLb}tIXimoTmj*e$Q6D3Qm7JqpmF|Ft(t)jbt?LMygx3T)vjl zg+&g!uM~#lQ*CMt-m5J=&yJn=Hh%MtQ>RXW0Y=tRjXdofC&y`eU|boi0^%Pl;(hJs zK@*0DQ0ptMk_Mlg=NGoSkJG-I7u&ag|Cnb5T>GALf9>))RZ4Vo9`|ubPKjhM+30nb zxUX`zCC^@RCP{9$-n~5`!NI5E;=CA)VLR^y$5wMM052VKw1{-i=dF%JYL@+Wb>D4o z>l?O?BRhjp;)GEq-->Q*+c@mlrh(NppBHC^t_jsricwLg1aK6tln)j3!P z`kK}DF=;M|_wV0Vwh9LT-*{zx%+jQYajLqy&EQu61eVR6yCXujJUoXr?&Pd#dzg>U zT=h;fZfhu<#JCtj^>q!IzMYyKTz0}PLfQR>6Z>@SB_&BeOB>b5rw$Hoj}kL$zoeAv zZ!y&s2{v>_tjH{%lcQZ{@&Isqm&n+(KqnixpUi1zGbAQa*I#R2Lsj>nORv`Mg+o) zX&Y83zIr@lICr$fAh%G(upILB&2>*wsw%TXj#zDP`sSu?Fxax}Y<2L~RLBV%xp48~)vxdDx86NrkZGu;GW!s_%4na}m9Rq- z6IM($G+h1p%5pZF#7be%a=}{CK(zoR{6HnyI+I0L~2p^_U+5g(f8}iUbVg$ zp*MGVI9|=%yybGkgV1TqkGp#uYOOx9yR|tYEzKF!pfBO%bcau+Mu!*q$nCxFdwT9E zoX>7m*OJtiTgHxA(_Cg|vF~Vw-nDDWBZgMz-@Ety~xD_09`f#(kJML4xLsD9AoZRG6yZXdv(Df2Q z;GZ++@ZrP3v3nvS#_F+;W@J3}NU^s$F?)Y97y)}8S~UT93osy3Qc?n5_5GFglII5~ zE{T#oFTXGl|EB&Dz)?xyu7(@D``aks+@mA9hH1*zW|%*}D)&&MWwZR2xI&Ayb!v`t zKF*aNUmVr%bX%D2GuP1Z6DI77h|rxn)!f1YE->EOp+u!ppQf|EXM@4SinotRQR;1G zIQ8b63ef-!e0qKNuYGEY)4ccWi*8ED^kx~&cb|X6FZKJ1^ff_q!N3g+Bsm<8sp+*F z+lE+7-P=MdyTDt&emywJeyBy+tERx#aE+?!;rX|24NR`<(^`IA`EJ%m{mf0;r{*LN-8_`nTycBtqlg&q=_Of{ z{U#LMPQDZ6DQ~lj3y=y3hydqqoHxC^;w|uQ3BA)6xs0}5{JHwbcFi0`MMcRzvi0`U z%f}TQ;LV)!s<^ky!iCMC3*I?oWH4=7o0PI$t}|C}0H`*;-p$hYVL|KY1HBp>*kqppaYk-_?=rFp~V)JgB&t_T3|f9=|}Yu2m*H(<11=^%Oe6Km31lk3ZJUn`fYDOSk6(U~JV zLu%eB&$|+VcRdzmu1L&w+pkGBb#T}E2P()Ur5)OFx$-vVvli#B1UxfDKlpslU#f9AZOJ+b#xUEPHX z77QOgJbbK)v69kEs{f?S+GNu=b2eOBB;n%Y=iMuCoHek>k;bbtVpXd0qd0>kt-?nE zPpLT7Yp$znOtzbhoZRq{{nTR>DZ#OGZ7jl+c@r}zH|3o7$tZ#D1SCmD_VZ(m2Y!o+ ziCxF@k#LdgXKQ)*RTkKeg-r|Gl6gHKM4_1lmxB_ZW?B4tH<0(C*?*@q7o#24$kUcoU4 zMIT<=9AsLFD~ySWdHmQZG011<@HXv2qpRxXIJ=k&eyJr&ErC`MMvMpv$+lkKC8P$% z)Ons@j#YOlTkc+-TtC(<@cY8&#}!_zl`4P!z1MSxoAZi)UQR&xZ4nkBn1C4F#ENDBL$`r5-PKth>PT{8 zBo`MG-GGhw4w^7OJ%dbxxdUlTLI<9DXiyXm2{Iy6s9bP5)t#rY)*bGo)L?s1;GeeU z)M+H{O5mv+EX@e;n`m;kpDRiSEed}6m11-S#pwQ?Vy1V@U;lGOO&1iUC!X7WCY?^` zj#-~7?C%M9bhEy2ssSH1l>;ruz0-U62XYN`&+y-g_52*czi@Nmm0{L$jOQF-RznB? zINfuN^S9@t?qgOv8S^i@4}>fUvO62k5~p|;;Y>o)5YzmB&2M$JAzn~AxN8XNg`61t zV<_Jlh@{J@>>d&yq1pOi4hIewb7LYd1T759bBJberBN_;0Q9#X(|ycA7q z9;~3zF(!YQ<`td{LIiLTbh0Op3YrgkAI$sBfj9#i3JK;7rL{*4HOS!se^5h9K(Gl` zIZzIQPGBVAC$~mOJdmV#Xs+TPbO<#9jYK7(x+hZzcJl}-W)7<8eVfmutt6<-wgg}C z7zi>)1;8<(pv1xQveSf!w7h^{W6)ND3U#6!F(x~tT^z2Ub$(PjU9CN*IE^bvnSd80 z7e{r9bU^`07s_OWMpL9r$TpAWE*By3LGuOt8KMicY$2n@k`q7+=4US8TQovp(3xC^ zL(RzR?I)AEVOJPWnsA=eyA*Axem&L%yJ<5^pGmD zbFHBlz_doDfL?@JjYBoq=;R6Ce%&m<0vmO*PDY9YRYPGx#>y-=m_PZ7X(cNW6x4z7o? zx_1t#RX~AwvO7d#9(3wTni~zmGnjSV6v@Ow6Tj^gei%g+BEnaU0sb!UI|6l(dLRr@ zLe;RZYv>z7cIqEdvL4_fWgxUl?8`UP3r~_37 z$`i$p;V`J;#nW`7Y3|WFb(@x^CrxWdK|RO`({*!EMkAhw#~-6>gM|zEF66sPyRZ6r z;-XIR3sNkWdI;vo<@3IAx-dQglIfUZS19Q{JOsbBr{)$!V>}Nf-=^^g%LI{}>Lh|Q ziwDWgKsbg}uSn-WxFu;=#`slW(1GVOJwpC7WR#7ProrF%Eg-Ee& zu|#uN`Qq*qgcLlD3DaT2{s&QCr$Y*KB8ANYO@*nUd{`VBh6>TNK!{SsVu`K}f^)Gd zq8jb0k`NPe2;Mw^W9hWzSO#{qAp8$oi1bKI8oR&PmD`DwL9j(;YmoDh62)(xQ0Wl7 zl9xk;Pyoco!yMd#DIHX8*iahIq0y-b*BC(F917WoicIjZ$rL1;5CR2Y%;ATAJfc;! zjs(Q|AbbWAKv|vJI!rhwVElu2h$ZJ@iU&+VWbFVvx{S_9)Z&K+H5hP3m4Dj{& z=N`VB#9*ke?>@;_r@oMXdxW|+I!YqAcQ%9*8ri6!&I?Z#%m$#8!Fm&UBbb8w%=diYAmaGU zpd&T!8TJ-$0qnzA;N!zB0jloc>_kd}MmtkvW&%Sa1Z?2X2VrzF8^lgX3`hm`1&<=< znvqE67)>x{lt^+vejz;2b~l?5kGs^ZnvCwOuV2rgE1 zx{LO79g3BuKV^#h3JSyCNEB+ivwodn9W}U4<`h_5)ZUmv_6823{K(MWOn=?p5Ns&` zo5-{+vpquaS!!7xcs~9_ZYkEmQ0@Ej;EE7|2$2E_z7T&rrzmQ)$n`~yw%yi9go*GA zN=Z8r8HS^oaocBr1mTr~PIZXX3jr`3n9vZ5(7@-5T>+0=fq`8C;~?fzVF!dIftsr! zsXF=L6m)-!!1u5#zc(=t_LB6r2xo`s1lu*gpNZE z&B_2rHDp0?*tn9u3PlkfG&V5W_IB`_;YG%%l+jdV+TA8|z-$9cYvIY^xuJFfd!4o# zfk;}+Ud)`w?=9T+#vwnTFCcUii0~5;zJoU*gCdc-I-N;E{(cbB|D(ejykG=F_5>YX zj3k})=h7R3vO5M^a8M}Fsu6x>nV>rd(8=UHV*1zuGXX`Lf~28hbGT4fNJv=DgcB?L zU<>D-`8LVVLM>`Ep!>q!34$$f4O~84?pPOaanJ*>JlUwb!1J?&iY3RxaumCPNaD_? z{zWN$2{V~!qEitcgBOqk!|@LX3m_1CBlr$!GhFBp;|1=SOXKUXqgOM>yjpuu=C^C+ zJTq%+%uZR|s8Y=Ts6oBc(44_!5I33bG}u(cTeSmJWK6C}V8Ka6KN^RM4bx0T9Wm^J zWR6hXL>(W6$A-ZgkEuj_bx7cw5xsSCH(`7cUo83oxwt@)e0(kMAeSQ9j?RFT}bq$-l@2&r$<{zPEM>N3* zi`R~2fkjbJgP@=%AV`CZ;e5fK4&*fG8dTsiLY@6SFl2c{z~g@UT2i$O;yJ+7*4wn z3cF^~IV?52=*3vf_DNgxE}@UJfr|rw>xoVqqd81E+%A#DT^{o{%oBBG97y3ELm+ba zPfQgdE8YJf=AkR(zZmoQh5V72C)Bck67vwBjb?d5LI9FvRj6isOY#Hlflr#CkQ{c} z_J;kQ`6BGe3qdSG2I)PVFZ$;Zh{yZ`F$nF(#Li}hgu{~PoRVm4g7x}y#@8AAghzji z>0!^y{@juR9=Y9cJ>g#y6*EyX&y#^Z0{Xu?pWC&4{%5e_AF)&vEn?_U6f#!55VgoZ zi4{9Vihl+tiZA3MeF_g_)}}jf|WXCT21gxXj%;%`eD}F ze?eytL8s$CL3y1k2+e5BrgDIepd|~hEyJfN;ba=9D}~N;M-3Hr5A69&{tf*%_0|8W z)K^pg52U{O!TwK?eQy8s8r|>z)YQ_^(dm%?NlW+N{h$Adf5_5T0J^CYI2%tIQyqFu zeS#L1VIXpt4R`wqANK$_L*0YSpwU<96Nn3_Y-P}wvOAh-sP=W+=F zot!X}=}rc)We$tUBEsi`nJi>y3wn;1mKwoJ8~jZHe^WsPMe3#r>j0$iUQ@tNa0U^0 zRCO-P2df_V$w&Mg!4D(^00eZ_hOVmwWjkD_qtcLy!TOUIK}WL$T!zA;v)K9sW!Teo zJ&-E6(SeyEkIjfzatgnaY$^$ZPMGf8$du)t2v7rMQ79Ax;VN}i9l_C`X(l2IABoi` zAU?|gxgYFKI|*zrUPh#D{C0xF$fi&rLZB401i-)g+%^QaP!2^L~0^( zbCKJKHMIQz(k=B7Yyz6k<-#2xcrWc99GN0=r1MSz;sBPXUX1`hV^O~Ip8xyozsLUn z7f1lQ_y1bcrfO@8`~QFU|Nn>n{WtIbw?+*cPHtem5RMvnWctsO0U$-G5#}JLs}Zm* zP0@CV0F9PNGpSzOwq;lKEg}(6j zpNrH+^_}zyGeg`i-Z6NdjziIxw z(~86Lu@=s9?6!#lNoBZ?oyy_D-j00eX!IqkB_=+q+7 z7=4H5=yxNBKIl(0M&873b0@;9D0I-Zk+)9u^rOo8@EAU@$1r@lt{D841pFJ(7`${{ zB}9zFrGoO{>p!XvWLN;FgV(OB1ApzImJm@Yo6Q31N8WxQ3baZ^Zj`u35f^0gpgQ2| z4+N1V1DeMw*eLYV4^BXLWEf+6X8wr^k!@q(ddNGXMnX4&Bnlar8hGiZUYKCdRE`QG zi={y6@a@OKJ-b7waF6a0D*98($4)_3ZD0?E?>%)rzmc1#)7vW`bt7VgJze@8fuu6z z=K$D8K+qv(Q0;<3JQ_mF6C!$Q7v^uyN8h^?<8Mnx-@6pUHh>~;T?(O_4&iIh?V*;T?%{vF`Cj{L5R*eDvalj6#+f~8+7lk2<%x6 zaJv^+ILx!Qv+ZgB1vUGV*2-4{(b&;!ZV$(J0@aZz6sixn_2_$73U;GGn}x4kNl@r4 z4urn&txFjelZo^*>_b;_zzBS(RJLH8$p6xfJZ!N*p8usgc`ljDL51O`t|YOo7jW={ zeCSF})TebW!DXRSb;g2^-N<6~lSENl*A~iUXEa%9woaofHd@Q+XukGqWBq*UK0R{jqtEu~c-hcV7 zX-@z+Xmrvewy{WHk87{J_S$QNjd7D0taf4T$=hf1VzA!1Q!r1LnG>Vz^7CMnENteYRlgdxTE2l)BaG5-rT*{h%Hhcb=J^yU>{O7=KyX*vu2wT$#@zE3JWj#ba<+uS0&tJ~h(ncm!j>CL0xf$7a};xj}4tFJv*>0?Ix_tnn& zaxwmUr@eZo|GkaRZ(0A#5fCmL{~c>L{oTcvK{Qa&;9sKgCAu{?z4-#e+e7$`D|zp< zymwmO>(KIEqi~KR!()RYhtrYa$r##Kp&^Q);Y(54If^%i+Q1MY;o=bXw2phimeocy z?Qg%{L$Z)XS&17?5#1`cF`7aE^Bi9rScy+$^-B&dU^mwIK(^AojwT8giyA5lCa$LW6Vi6-JXl zbWGu}R{=*ZN4yUya5S_=K^W3x0Qb;7hWDeOpUO!n5I>Kk7dEU&f1@V|!b0QFjznzc zP-6%5-bZ@sA1Y^)*J+X`-DGgNi16Qa+E%E0_{Dtqw!j{r!umyss^}<#t~-HuiC#KR zFCD%Yu&4J)@+njf1bf&~43zMtL~?nK8jQT<>2pH|d-Ut5{ttDOQVQ4}2AE#ILCc z-wOo0_Y1-9y~<$s^ed;`FEiDe1g(uyvFfAD6L%QERhUU1b|P;H4!p^w&csO!VTdT6 zVLUiK38K{ZC3sY*d zZ#qI6&i&HJEnli}tZvOygI1K#3vHrDaL%CzApx1oC&4~R*B!fv1Y zFSqwz(L!$cy@aR)P&D$eJ4wSZ7k9=K_Uopp_Im%#p{gW(6OTz%b<`bJ1i)HZH4k>* z{AKq|p)R*SN9{vcko~vCu0_g7RguToTiW+AO94@~%&Pu>_h0Q+)b;-fTn{3`c%b<_ zWM;01&nvoCQrs`!BjEuCVuqi;>d3s#Mnrd3+JMSJqG}7L-BDgFg)x)#gGI4#sjAF} z5LYKND_`m2s!G43Xz#@leJGbx4&?Kcm9?LzRm3nV$G(h{$_X0J({~<@?8&29mCpuM z)fFUUEmK7yL|B%K!fJk*=?8lN>z!Hg@F+-s3S@5-Ayq-Aj}~x~Xh@2vfh0h)RS`Qv z2EaWqyBT1-4!&G*97O-^n-?l?!gJXCfCy*|C_Ahe2E;(ozgqt zG{$ij^uvaAE^rYU>H(MMBNmS!_}cQH*?A?1O+^Fen$?I%!LW(fNU5eY&{?zUF}aeO z&zN@6Suyb(cG|)Se3F|A5EFM24vbpZ^sOlpRii$x328L3G)tyNjEiigaKRx8L6F-r zPo!0xh|gr0ps6feWwS~b3^y#mq*$i39c$z?qv0R{G$xcM;q@N)A~kuVIOp31{N`w! z`lq30XQyE-Ov!LKjs@#7WxE6$Tk;tZAIDroAqx}*+Q4*t0L~1kUm+l+^3-p){CySb zu(}AIG88%h<8#mekDmy;$T*K88?^2;a+oO`E{kw!H8g|CR66Q@JZJK!ZcPF4ye_>X z0TaO)_f(Ukbzmd_{a#TtO2t9p>i;yzHvs}cocxzu7Fz&UjBz1>>nq7MCBuU+sV3Ei zI0^RfR+c!b8gLZ5UYPi1Y4|khJop%zctRAV31veVzaQ=pmEe0Co#0t)r{M}%YS0TY z)lJ_YMj7mXG`wMICXm$eOhOO%f?OhJ>7$CTFM7C`?uzk%0y`Wg9ND4CKX*6-n>gyNU2<3rT@))?XyQ#8IjsV6r*uV)>HG`gbGcbnEcN9?q7}kQj{+f`F*}s5ijW-0UIa_&a(;EbJ_13N{GtBG#P9?%o--NZbZ#$46kPm&s`;p ze zHi8X|0su+F8NBBl3?#|MP;LovW+a8@eQXUJ$rwrha}`86E@9vh?h=B0y$Iurb1o7T zwOI33bj_VOJk>LQIzXia&)=i@Tf=vTZV{=%Sk6fHZ3^SeRN@t+FrVOnU_OZj`4d|b zk%V8`I)|*r6U}7xv1j7ubcuIQ`C2zhg_qP~OQgwIou%%8j~oseAHyj<(1IpZ1qjY& zyu)#mcrXo^@Q{*-@$=I4063p48HRZ8;lN!J7P)k9v(tQePRys`h1rU;&HRVHC>kXM zOoC9&Lz_RBz!&z&USFGri?`s2O#vQGyqSH0OL;xdtWgKQYL5+ zL+_dCe!It#5!JQ>K9Z-93>sP2ctElO8m~v*R1Pz)dtvM?qymt%pfq#Q;?TM>Cp0)W z{0|~E1zF{D=`7&0@-!HY!uSuR`vdRzJ-F44LKfe^^Avd^Ny?mM;3^6oNVQG6 z+-p-ldY8>eU3qTLh@g%_Ek1cr9VFNKximyrdxx*y8SBOAMsHo)nK>v+;)tKZ>b3F( z1<(B2aX7$Gg2fkDg;<6x>Xu%&@GV}q7$>CZnj%-Fqq}LksaXsuwj$>$Q7&RP!-zJZ zqC`k_B=DLVif#f9ME@9%w_-!ZLr3J!HN2;38$?mdBzYtwaIt7T2sBRf}LBU z0(#un7Y|wR6V;uiaU+8(SUDK)bL!vk1^z)a_!Rgv#^n3mE>v5nJ(Y3!&s+X0w0W)h z(}ugim9z2jKTx&<9lt!6pnS?r3JQF|QgmH_0`~5u{BSKiVkA>=)87-S2@8q@LK#=I zmzS4ug)=e3MZ-d!42p< zl&sjOJ=9PrDG(0lf(Zu;lF;k99VsCd9otMDVkeCyt!NXI24)f7c8A*Zp$;1=0(?m$ zyab2gs4+X?VS!Omf)XppsS-nrEkrT>4Cgr~=s6K#jrNda8THsiI8E_FlOgk!<>|N! z;0zn{sl#di$wO7Os0!Dcw4^#QTlR7Egnvv^Ov%ovP)j+wE%m^ICweUw8K1PC+G?D$ zU%CY=hx-opMKHv<&Y?zXf8bKO-wM@PXLgw?W&AtTc9Di@b{F9&8YGyey?V%BB+u)- zI{ONwea^}a))E-2E z6q6jq$^(nWVL?V$9wTgYY)p+Hcz$-3Rx8RezgvXo$z1HKXmcVmztLszw|>d-SFE@6 zKv>_dO4sZgr3*0^fpuBI8`fDu2q`wA%)$_c;sppABKa1D4Qz@Ch@x7nB7y(<)sH?f zuZX!Siw?k$^W(O>O5UT2eFLV!e-jQv3Q$bAW82(3h)&`p4SNp|A2jdNVpDs?|I`kc zbp)jH_Xn`^qLdlHNh~EZahK&BZSK#=_8jP1=8i>vkY{b3Ftxot%h&nd?klytF+jAN zYxF;`l7be|u2|OL#7~4Czf#UqwG!6B~Q2s<;wFfwr9%!JZcmBigTYyFPJNjG-*tDgT8&yD`ai!4ZS|f z`c?Cgjm?T{O#TN5|05RoU0WLB6qRz zhKTaYJG(ixW}i@Up`RsSv2XhHrCGe)-v!41eR$`tweP%he=DC^{=X)E%;o!-?*H3) z)Lw5F{eRawD|i0CxAFNc`~R}lD5{o~N6sa@faPx~;`4OBU*dIH_pCd=^Z&i`|NYcsz-8hlc{rL;$|r;M{Q31H{C1UuG2L=;@#;G}PMz3pmL>FQV2!^NEaWFm4C zRx&SsSdx0#9(@R5j6-%s&zlKKC~TQzlmv#y#}x966j0iDpEk<7CM6Vs4L@IIv%_L) zx`6G@x?{2R&;mJ~5)R8?JU7uyCnQYrjycsFI)pIHa6M#fuJBjenm5U9nfxd`j`F5t zNXCCEYx(;kPad2%J#ykfkviXQ$iVX42;_O@u7#}LFbP~!c`}`Y0 zH)-6#IC)l$bhzg5jK1Kr8^=Du6u~|jTi8=BNkcSQAni?(DU<6Qt(-{@ z5Y0;3_F$o0%9c3RI9g~6SEx%t4PfdL#x?9QAmHdMn@vyG z>9PI*E^NsV2G2W2564(}&rIkT^+KQ^0ox1V&<4su08N&)$2A=Xg_sy*D##Hpl*hcf zGE89|`bk1kE9P_=4s|tP5!_j{8qFz5^i40Am~>48h@J9P5!;%sQfvCForYG3Qrht=~ztCMkNe%haSp8vn-J@&?Gh)BHLDk_~825BlE%g~&`GG19U_V-yY$kpZaAM_-Z{vze7QtL#L*3o}*=1mv*fxIaXhp)X{b z(+%?OY3S6Y*0h_c_Ju_(rP)!AWX!IoI)dA3i16IY!RKf=9{Rx$?wagHgLWnqm6_DQSp%Cs1275{1z=b}VCHXol{w;L*ccSb1p|-_ zqdZq!h&>L9#G*Ji9FgO$ixy~P83oK`gcIY0_tq+?%YX$hb<6PJ2qm+9HpR*m#VQQ6 z<-bbeMG;3xU>GEL@)eiXi=hOdPnZBqK(oI_T^vr-MOQ0XEn1#TAKDqJV$r}~%v2__ zZ4)f9tT+QULh-d8o#X{;nsbyTG~hrGy$V0zLrrlkoqDafL^Z^-KnGPpq==Yy1!%UB zYfs!F{Y{h$f;c|vo4YIrVl)6G=|+SmO+sr)7DMx)9Ymdr+h@u_n%FPsUIw&cm=Q8R9y0KB@Er>WC7DT|V#( z5d&)cws6E%#KLDMeJixMYE^^4E}Js`3*OzY$4=CvSxb}} z;B>-ZsKCjxsM+W8OGUgeY$Ndo*SF1~dSsXl@0x^7%Bo-5p>;}gLw=l%kDs(3FX12apu-RFM(^u~ulV77%<(grbLKF{R(u~zF2|?Bke%CSUN@gP zOIX!526=+66))$^Po1|M+ryoeVuwTFyQIAf3dZb)dk+iU`jfhy8a1UPa|awngE~Aa zKP6GmS79{~4!!Ykcn;hpU>mYQGqh+YD%1~gITVXloD~u7InXwun^xQw3@(Ts$07=2 z;!bhRlvz3ASEs4&lo)omj<&K*zxMa~{T}|WQE&awKv9sRilh8ZH?#?`X?GXk6WRup zBWoUfex8QmKSSk3nVbM#!hJUEj@k5eoU-Sy_>DL>o@rRkV&Fr{)K!Vua#JFrL?G%D z^>DB+PvIM#nu@=c;|iHjQK!XWz>#}_gE|R|1c>eVZUp$$vTlx{45-KS5~D?UaX=j zRq0U+44=&d+AQCtIKD$xexN8wYeQ8~N{r=(!XPGj<~@qjNc}-t$}!%Yy`sKDscqOj zQ8G{#CD5)q1H&Z&Rqe-KA0>F%3vW$FzmqxnQQwZAdyo3xLO>N zUf_9BYG1H#MwpJS3baAyg=KWBB$dwMdo$FxCTvI3|8BX+q)Ot>n}}K_1K|txnOKzdKG-JX4LWsdVffBzF!RzY_~|Bu6+*Gqd>$pR;Tp&iTjLwkcvcLH(xzH|S$bN~2X;Qnz9$=+S} z4~#kvJ4w5G7$1|?mHL_}`O~q^ovUbfG+SQaPq5)dmG}@iC2g|b^0(awco{?E43=vp z=}`IR2L)SyeOC}wt}#=a;%877#hcbvt1MlV*q*9zZhNWFkXWeLy<-8--FsI5x_f2I zPl4xEetT(;@6U8&W|gs0L_3)Xf&xfHT4iQP0x#}>lbz>|A4O||oNCY9<|Vj18j8f> zS-C$YilKn$jtHPx8C2e?(wr~CJYuid3S7q)DPpgf6rg_xV$B8&njg&}>|(<(qJjV) z<=tRJiz>_mH|+`3TugVdrI6Dpuw8B@si-gsKw$TZegQfs02&d+QI0p{UbEDnvw}Xi zRAHrqAlR)tm$2g?wHE_j?O48bO3$5*fgsKuT##Y>H~nPn8C1n^j$Ne$AP zlBo&GyS!=}nQ~#W45_q)@r@;n5VJWfU?v*Cc(wryi`yw0J=?hOFa_B#+69IRc4ZIO z;FLGRE03ww#ze2Yxx}4MBZ=thkUo*CO?RY|{V!Tnls2{eDe}l|yD=qejD28;m17eb zPwG@Gl4t0(?rw;gfVh&V|CDM*nPrjL<-6rpYkl?4=ry<3FHHj-TWEhiP-!8Egq_3e zhqPv-qeNWgY3amHnK#z9AXtCz)%LSzZ;rNK{Y_>hax02c>cR=STz2|#0$+RG(xx;!Cmf_= z9S=_>|5$8%hDm!TXOlS$S;45INiv4(?Z?!av)Eeo&Vo$bY*EVzS3uud8y%6KthiK` zAG8;S^-uYY$t&p9S;#F+g(|@^b~{?T;pYUO8$Rok1s{{x3zYAV(!x%|M+vEJ*?rP=0ofgb7lT*_&yAZeV34yG6Xc|P zp;Jj9+;izV9C&BA@7lXzlK1XhhtoEvGRy45U=>G|_PoWjqiOC;VpPW$7tdi00VX^4 z?@V9%RbDi6&7ka)PR0n%_pA$uiu{RiLipVjvl_xA3VYDm;amT}I(gkX!Zt>R6^0q$9XCH)?8_`A2HWeMWlDqb+E{qkuw6As~+81V5pLex` zQE{n-gRwHTSstWxHzT&+Nb))@;9opPojn`b6oV1;`>MM+=j=TO|EO!hg)Trv&k;dSui#H38Ho=qJ7KY4 z*Uk)9LOkm#>jAlj*HLy_uyVKd`lU(rWD^)oRxI|!dVB#(m?-8vcN7-#I2q^46c*_* znI$FG{ar^pRb+Ukvgbcj3jajF(_#9M(zY7Oes0Su zH{6ATVd4wLrfG&rooY*mQ9r z@!7;xEWC7=u<&xOR1@7U8V(aFw-!%{3q^w_2H<@$g30p%S&#PpV^{%F{#8N*}Z+QDO^I7;t`N)=$COgM&r7G{a4xlG5r*wMK)(+ z<03v;kYc(u@^F>wI=Aix>V{={5h=JUamOqGct@TrrT^^+q;PX8oW6m*scw4~5mf<1 zaE$Lp2vcBO-!(CUd_Vg9VLrptH(}6ojlCUKsYzrt?a8L4-K;acqG%f3U_I%asI)z|hd(|wZFF6@RClT?# zv#yP=)##jSqfV!#eF!R2d$P}XPfovLiqB}Kj#v;wX{1h=`^FbI~a4Ach6Yx!fza?n-Nl_ zRg|T+JSLb%iIalz2Df)Q9VtQ2H%{pi)xfIhdnI=Y1v;;o&aZ?;w5#k06FQN(Fm@bx zA5%#K%wwBfJPuEyI2J|&QO|YHbUa3;X(WqT$t#!<-LinNN{3vIudMi_E~&?yvV)$H zQLj?LioY2%@=8kF^0o(A(zN2nJM*281wQ9fkft)WMXcm!(8rjvgjyg3I3)$|z3|2qrX<0&&TES4Mef76>EWP`@SlIo zc~BpaZ#PaEtDE3;=+`}6x>522*7c1imZ4vqv4bpS6n)bk8B{%T6|?^k4LO>ysT8V% z=%XSEP%KC}42ih4X5(Y7LM(w5R3^~O0*k{$k{I|NR4I?~YIG7~*L+qi03jlt3ncc7 z7_;6*xHt;X0lNkqAJ^T4gMdJRFd>ouJS3tjT?0iW z*Dy^~3&N%OD$St8sH_!#V;&Ue(l6`?j=b4-qJ1N*5M@q5;4Qu20yH(PCm;zY%}Eh;)+H%_ z9C9$Dd_%5L)^!HMl>`H&ro>y#0SZD0zaj-uWdy`wcd;ifZ-WJQnA}eQCOZilM-TXr3gm1IKB@pMVTM3}7U@{W@PL-PW-k#^I_1VI*zaGK(*aS4U^;*boe1uakD z#kC|;Bt&lO0Fpt^1YY)><##NYSiMEYafA&FZiRwkSi!O-zL6{XDMllLH7p?{7{Vm@ z>RvH$Jmk>lk_>VCo;&D>d9i*lP$nYKOxUN6cx3LehrRd6y07w`Z+Nq|nD4yzP+UP*Q^ zMPbmkb;(*}iI$)hf=3gmZaFWfeLh^-P5i z6*UR-$S^qP%ytg?`Kvic{ruIY%Sf@Q8&oh=1T&?q*cs5b-#OcQ2!kAyM z0l8P9sm)0trVf-2PVC4N6YpPhBE4oRrbMSKpsHfNZva)5dd5Xoc}fVx=O%E97;@#q zWK5m2j)SJN>r6M$B;kgM4?-6d36P-ZmEujGo+}}1(?jZu;&{tek}VHa6it)^0Br{( zXp-1c6Kv~7kj*q%^XIi$qXeIG=Nyb2wh79*?3LvYt4 zLrJy0Rahz#zBAK9+$6$J8SmlEl}9D%tc}c3xErPLFcNAV?TT&##B)f*6J{OQjtL5? zPB2K8KORw2#JakcO5Li21Vz_<b&2T4b9o4X7ZP5?G;mF1!+Dmyr(Gst!-7IuJmc zkC$MU4*R0-NH|#%6BQ=w&UMOUNn3=Ib?3^vCm^wb&%~r0x(e9`kNLC~jnSW~Cqdk* zWMm9J6tGEHU7G?CeWB5LZh+}mDr~iCOh}wgHAGTp7O_obn1X?X_bs->O%2gVL2@mV zCM?P%9FOtH_69+Eq9`Tre2)80>P;=LMs6IZgLg|Z8+QBajYCgVM7$ACO=_8(Y`2Kk zswiX98S(Kw!`k`#2W(GLc#bPe7c-axrsefn!%;}h!d`&dW;UayR3>X}^G)x_R(!xg z`@~Vn?3ZH|o(GD2;!W)h61>{dHKRcG96-$EZj(VpfN~+&5vIV#RYK(f3$AIbN<`@? z?FpGG08nv50G%N#lN^o=vaBZsGhd3NT>=I?rZ~@@ByNLdU~b3gk?>J2_z}f*ChSG^ z3M(^`<4;jCF7Vo?AtkuzK36uI1?T>li+bJ#H=AzGZ^E}-&+C>!QTplIlLq!2RH zHhjFd(e+UIcStZ?atxK2c1l(ydXg&5Gm&G{gXUx=_uw>YRkit>s@juAHTg1W>jlf^ z-*=&hen+8)9^Hi=y3Wsx_&?*`jmQ64X}8zc%kh8i@;~3o=fd%SZa4hT+h^Ah`v)4i zaO@we@2L6EtpTIV%3jA}Gz6zXt4aq?b`>UD8Yfr4u zKk&QSp~WFV6Y_VW;?U?lkt!&8;9KkYR6F__iTCoPrX_rNQYGW7DIs5NmS?Iii8ofK zG(M=VVOizZ<}uT+89V*jY(xE;WvO4AVyf?ySMF=NLfKokP{W-;RyhMl7FuI}fLfK) zEC;W>;E2ejQ`zq+A7}Rx;^G)%Qf*ooqiPKErUWyp6ctShX5>w^yuXHE3zK)G0N+>+ zRK-=WravRNLUF@#c!j{(mWQXM=nCGn=n7i0?0T`GWLHI2@JwU{-;JzL5m=!ZSHV-a zR!dN)!YYvX)(NUm8B@ViF%{g93Vt!9LJ3?b4XRmQjd*FdBPy7H3S-ku=219>Tt!nr zNt_C%U}7n_p%m;$3TR*M1*JF&{v2@>ys2>%{3&r1ys9_~*X*A=8O={@%HbmWOfTI6 zPQM9(eGXB$QSGUVjd_+^rKCNpJfbGkBHMej;7Vz`;aU#6vyp2)m)UXo)VyxL*{SPf zPLR?%Rd~l1NYhLg+45pu#YuMZ`c-I(tG#5s$zHOwvNN4zy(#WpGjM{gP!gd<5fUb! zY)_+r;Tg^21rK{MN1cz;vc%q!nOyD-UO!5++++!5LPZc^)t)uzLc}L^c%WXjx7ZER zo|;tSy4~9*W3}cQU5s{|+_LDO1vPpBwI`RJiQ_u`3fhHHh9a#j$b*&SFVLH1!~~p9j(Po&p5U1pXVc)pZaTx?-~u!(WJdh-#Hxk&ummy)9)i znoyJ>5^^uT>17~xbFnv9FDhKW?u~HV6f+%KJZir%12h%m6uIIqDnQbJA!sRXy3V@} zQGz=sX9(sKm~-y?chX>QRAmg2v2`F~qc$eWI9pWhWnR&elN+B*L zhnuXR6@;=kMJxE;IDrP>%Zt;2pOf@sru|qX8~2=7TNO{XDM>Yu?xqfl;+0qwH20u{ zO>SC~x&+xF+$WuUHbAKqq7$AqVZR@BQPbBbnDbrPnQ4k#0vaz;XUC-pF>OvTvollR zkQYT(DPT$=e9I(O!XbIew~59v*|OcxRhGDBa)qwm*?79*sGzC!)j#_{&Bqxsn}gsS zhxsW?QBc|Peu6E6YHvgO$wI(Vev{ahtBnG>V^9YYvd8PE!3mNDBs5G#Fi~+2Cl@6t zI(pcC(SRRIl&E|V1;^1K%Fm~fj+q`&j(5Cwg^*UW!ZjB7?U<$7>awV{ty&3BFlD<3 z9W#TDSX3oPY{^1aPw(E=nP}qjZ8y3kPKX*1GTyaO!zCl;`ody=?Tu??l=vD3gsr--7uo9SAfIgXF{ z!hd>J_|I8XP~Z2QkmG=GcC2nKTCcqCYs^*hFL4m$l(D^H<>L@<@+BlzSq#u)nrJC` zStCI;)XhZp*2!IwYMsPMS`i_s^5V$E^%D2K5@DVcowOKEsT`fuCE*8=Na?G>E1H~? zXqW4;2!cKGO2)4H2Mj534XdILnMb-MSO5SXZZ91ilMIJVphjgZs$88dUsFCt5c!Pj z^mv4$Sy{gCoW;15WoN4!6AC+$#tKrcCBBy>)f}?FAp0VE>&S#}WFJ@WQYWH5ucI4K z->V9!Z@K2`q>mMm^+~`rBcT4|5cV3L2a>U+#0vXaVxfUu%Cin zgS>T`ei*Sb)Ey$r@nrabs+cf0>P9)gtCI3dPS==p2cfb^FA|5V22Yqu9Fz@2iRGI& zghH95Tq2G_>AqPJNx|m+tVjyplt>Exe32BqsgV>a11X5TZxt=OKo|vYVi<*)Q4|WE zP(<>26eD1q>p%+gcs6?lhi%Qw>d*L4IYlW@(Hzw6O1Ee+&yxE^Sw-;>3ik3-^^23-uP@92P4Uex($)FA zv%O01?CW-Ub%}yDbt+MXl1J(cS}?Kv1ulRE=cuCRs_nX3G)v z!xPn?&lA;~#}l<2rnao6oW~nA$aL1PxqMM8xg!BV(W6y-5Uusbn?}jG*f=11mvKOx zBD$J&Z+AiiQ>nZ+)jA-vC0~Bs5v&4O|AA>R%sq;)PZ}c#qt(UG%5~NdCtu_PZJAqM z<&}rn6DJE})L^z-NP^z){B`uWp5{k-`+{jR|a>-L?nexIh`SM(HPND}94>>~h z?kG(@MHutOx{Xm754fzLItL5nC>|xQ{&*Y##|!P_brNolAqF-IGOI2*=nO~b;(+0V zG5$tK6+Dt29HT6QeZ2$cHhIQ>6mkw$TY%~pdFy3}dl_?rXpV)U%o|=fmc>MvQp$9{^ zqhH1xiyfs=e;VYQ(DI*7@=bqZW6OVs53(*wmhsufhj&X$_$U~|y&;7w1wMs`_-qv9 zr~Gr1f1ZigD~l3(M67A4Wiy6x7N%%xk5B*W13p3J2>yDvLA?R_ za2v8~P&?|ORSA{>Pae0Tng><-l>iXxfi8V1Jdju-2s~hpEqF?bd4;c6-;AXc^V0Ma z51BhmFfR`zR}pSCwI$|DNsT*^bP4t@Q%O;1o8fQvK(II4>~MZhgDjjPBi3yvsTVMr zAd;Z+`}rIaQ0AiB@rvy@gPInduM|Y2JSH0kGsE*x+)q|npP>yV7hiQf3fAq8O(SvQHWFdHc58%X;8 znG?zshu4}yx@2U*((zJvskb@$;TO+)=y@j_n7kf7TfPt9y%XQpznv;4UTf)O(yNoD zNwtcs9%pP0|H&Y~_)U>9a^ovL*)1M+--b*u@erk4?Fbb>U`=1I<^yE7Eh3QSER zRU#!Znu8kmnB#Lxq)&rpi70)w%!*zlXBZfdG=-)eOxR$=%T10mrP3au`3BN4SQoen zNL_mn6jD#v72ztTXAPW#;vyJxhumreIKo5u+M}MDrd=$cM}!J;&}XQ)$b$aG&QUtG zY>qa&A0g+=G~=&XT( z1|vFY^28&Nu42bA;v))*n|_wCf>h2_wDQ4)qBUUjq{!Ajtv){W^qgj7<>RQl3{wl+ z1pq4RgF%T&5b*>eViqHd!xs@sO(j9Tea!n)nIJ^N%q!&U8iaicot})lr&IFo(G5r= zwaKzqf!Dsrm^}j>++e@FPS@(suh726ZPzr?^KU|Uk-*HCC7uGAn`;X-gEN;#Q2!;@ zFP-Rn7ahzgxeDfjiBUs_sx2rm3ezrC(s|a3Sz0ivDpfrN{-XzkYe=b>M!1s7nGBE! zNw3On?o~%uETZI&%z9!)=(WtPCyF%(!53<|!FHCjw$$%ghrLY>J<; z3M-Q3Dix1hX(-PFkga{R!r>pj)Kv-2>4uf^>5Dnc0WS+$M;s<~>_!qMb*6%@XIT(X zOb6=hqE{k2JH}w3fn#7>B}jNIUAEVu&kt5k_vwD)XC}y zK(2wxIf#S=g{g^sC6=~ZfR;<$lV~swmMEVWino6VwmRRE3n|k@7ccP%Mt&ANqeg2@ zerjV?tw7b5zPaL{scHwcT)m~)2(?cyQ(JRkmnZC+wB*@ zQtnRhmMWP}G?v!vcD_`ceK&KbFipD$pt)1vm-+4yX&8K*e2;KQu^fd!rSbHeeUq5h zFJDR}u5h)$jzH%el9P@Wc5i?y1zuter_FKl4Hxc9l2jJmV;|?_+C$72Us*hKRv@Du z>&TpW$#M=)i7{lNyUW$XIpXB3HdnvgJsr`jCG#}1%i>YAsOhtbkHf}~~cfg>|~vrSis4f`Cx$8UBH{Jm!z{vY>x8@}LY^ON6heTS#O>eBN1 zQhVKBUft+?x6x_)r04W^Kac!Bde=KyHnSMyal2z*MCk$CmiYBBqN|a9i@)_tj(Z8O zsZNW3wh#byxW#2Ta7?-=nx5%`@WU>ajB`~^fbB(nbaob1@yWaP2Y+kJUs&uda2PP* z&1hY=Xpk-DhU&FrS{fK*ILJaO$Sw18Rhk8qR%ui4EDc7g7=Eue3f=J}VEmX{2blXP zu5&X@stY~GJ+C}rE-B5BP5MWeHN78=hocr8{dESRdik|C*YDsngZ{(SzWZ?z?H;qs zp93@K|N3gt{6i87R5y8o8na7P1sRVGTuQu zaS|^o&oRmk_9+VZ))r-OXYZ053P}Q6S35>-=2(~}o#YZ~9(FPHOcz4YVnsV7acp?1 zcjF)|KCA358e~i&r>ohsTgE)#mB_HvHho{6AofS#y|M~?F z4z`{;3G=uP&l~<@zimzpG$YFEwYTWXx$!;*qOZt?UmzC#yT$l}|LbG41N|Z=MEE(% z>rCKrmD~w z69+P*zYHf8=TU$NMc`zFiStwR#zKK9W5P+8E05%SoJp9VH!rMU4rU0R7L%NC2H(F_0>3(i@gt6GFr=S$x1ZITr2@Q? zd3WR#`r`ZoNTi&e4PgMhDgnR;77i75VSV9!zR={Z{Dt@Nf;%-tstIK`eE6OxEXJyL z8&cgzw6L3~0`Z~+Vkj@W6ea0Lgokl&5!Zai;f~RI<#&?p9kEM3){^R?9xW9OR zv9*Z*-hTqat2uWuX1TWTV3$rPXfCWJy_w$p!n>bNKfHUBet5SVet7r1|KWc2U<>}M z)!+TS_TfRJwqSCi)=}nbkdKeiCDu=_cYjnwK2$@r8_DGzy}WIgPC0_Yw`VDlWv(ZEnP5R8Z{@&nm50;BjD0 zL}R0-t2cy+;tbXLbbR73tCkG^5srj|{n~f8>-fxd{~rQ7oSt7=05IeJzr0$^|JYfE zuXp$V+xWQLPo_k5lz!)gv+>mJy&d4b?xNv^JU;sIUG~AcqRwvOxYz`fl+16n{MyF* z+^^xc`tf4Wphq9g4F@^E!c`g{8Ih|gpnqzKt5un9&(4!H@Q+qLt!KqPYwR{R~$fEj_OnE&%=?2gz|TxNd;| zw10r&*%~1$S|fU|_ut@?&U)uNuPDF0&YlUQRK!Q@-rs(`cO&S8u{m({fAx=!$flJp zo@j-txeSv3plv2c(6!kDT6wkL>3KaLwIo&^RY0i%0+B1?F9cxI7tl2t#annQ3v(I~ zqGrRu_$g*(I2b|m>=D6PJEH|dN#^n-6jLK3R z5z1~&ZXIel!=QRb&VlpH6OPGUSFFs(XjJbswLAj`QRj}}?)vxpJ^Y_vzu$ukd}GGQ z;Q|Jv8US%m-|WKb(W?Am4P6#0vf$w!U#h6?zhMisYIvu*ch9*HLutAY!VU4>z4^Mq zf!`Cba9e;c-9Xx^y^m|tC&%Fq>KNaR@5y*HF|gG$l)kI4fN`}yVEXfWRg0Ajhj2lx z*PiV@-+Q$S7fVwSd06IYse>{WbSa7-%oiGyWpA%7+kg}i&ON;IMo1-8CAys6yXVww zH!6S&YfpvLiVFO2Hl}U|d$o`a>rDmW5cLKY1OerOd~QJcT%LtJ0qto(j#&_XxqZ0v zQvtvLUjQ$+qJCMxcEHoofE_Zm`f?%c#`au2t=~U**zoHu z+L1+3DU9-+YV!ljXWU0bWNjI%v-VC|wKVq#1?S#n)3F44n2IEDmLn~_S6a#cdAoNA zdsOXVyNgbH21&Jq{#JErUS5fg@j8z=I7)wtPEK#*EER_=^0FWl)+z^LeE0}ZP7a2t z_@eZH8g3-uulJ3rg=FR|FSpbpB~?k^NZJZ5iXy~0yInkT)Fm<#wH2)c-WKBXto&LO zvyZTnxf9*gC6Saa)GAsMm6EDWx+zRBK%AvTZ->36&l>M3yHYpz_oaHPf!p$rwes+x zEgpFd377gc#7R6B6n~;4L&Hpl3s`QUS22FeQj1PVY=h!x1A!WZXczq$_w5s$(%UyL zq=CF8-8A8=&TO%zCrO25vX&5=l-jkwZ`9xYedEK!hApt}H=re`-HeAQxpnZ6pP845XUD!_+I2u>)}tWc^lV}|vG1EPB7*rK222v?m68Mhx5 zRj+Ccu|r*;mv{X5gHh^Plm^FBQ1X>#Qe1NT0LPIqBT_XHVM#7ODeIIgj-1rVn&`-Q zYZD1)hKudcO&k@>z@exLUkqkYTPLAKWF_>1F@rED1kht#JRkAOHVA-nk#`m*bCJ)U zndx242Cmv)TUK@Vx&F^g`LEa>T}1{wBmV2^a%a65|8;$>b0`13jnDP+t|+nfPcaQ- zuWYCJTQt)wNV3FtH4ve877RX$mV99D(?ppe5Lgni@Dq^sj2a`Or!1%+?ZG9U0ayj9T|xw4W49O zJP&&D<%TZnFT<07$WhCGmf)n|3d0&Hj)wy5Bl*u>f6r$WW(9gY#{ep@bJHZt6wDJH z$reLqogvdjR-G6IhFr?K$>$N4buGCuyHby)A(VxPf&_gfJA2Bp>avK+cU=N#pn3;s z1_H&bY>}(PRkiSmILub7<=#<<^A$)Gq8LNlNA}kn3(2L;3E=en#%Za7}mQ9 z+X%JBF=i4bJD$cDr@EGxJ7(I_s5aHsqBAM(+#Hb7B5N#_-nBmvgSx+D)EIC zlWMtsT<;JHJFc6MBdF=Fi7bNHq&h~Z$T<{5)3(Jvmc&3jn2sy2bQ1DY%t7D>X91i4 zLxUSunzdzZZLRk&!G+kJ5rwqC%(>y2P6$PL#7Gdu@Jli|ZO^om51+~ydM%B5p_SIM zWzmuTWEGYalOp$Zw2bPbN_|XKs2r7LkftV9}Q<^Zk z*9@YMA$cm8%NUopx)A^4UzPt2vtyj@+0G0|d>F?OqUkKFG-pi;|B3mIQ%ZG=QexGT zcBjL6XEP>FmGmaSaoMOyq^RkeYl3V8CQ-l?h=Y)T4B07{>#$*2wT5j+qD{8}4((dr zG>G2Js-jR@vb|M}KJJmax5=4doBklkEPBi7Vz>M{e}Vl1=eq4;WOISGR}6ltxJLfK z(6#vk#+{+OftGxM60n7IH--cSQ!yblSpU!a@*9WM)uhmz;DyTEb^lbmCc~@D^@9(oum(SWD5= z3&>Q{UF?VL;&L09iuWcE!m#P{F{9jyFkd@RM2-~9-4q)*#)xG^vN<}$ASoQEk;=gS z?;>;*G%Dv&b>>>zLDbwA+!0VQ(YI*n9mAtVgxEo^$v&Te4BGKjr;tRaOl-s5RZ86s z2$6?r+*Hjq3fo3`aFiFF-xJ}ux$Pvw{2lBl9_g*@DczOxQb@ZXqrwi}Rz0QUN~ zRm+FdB58{2Uja{x4bTCj4@I>|fEZ^epv;RaQZMh(29BDWnF97oaLweNt(`1}f>%1* zY-2;)IuSn=$Cj+-v|5^KO~=0(+p$G^kQpH#EE zoLAUD>{xJ|q$M=?+D9FNh6HdJJMtK~-6p$%@z^woa2H7)>;Blqwu>&bOq{DxVtc*p zR&rEM`|KWDZFe#y-Liwt3d=ENa434_s;chrE4E7jvmRY-w{R1dnw*cD_65%x2e}ba z8oA4;XRV#e0sY&;?%OzaMEW|2C~mloprsX&0Z(9@CXJ=ys_yhQRcch`u!fwnJA=Suopu)DCyMji}D?_iQeX;7K8pk!`CL_xR+(~8otW;CnUbe@Jy;fYO~OSv=Q z3NLb3#)u$tP1mnqXtY00Z%;Oa)On`60Gj=gzLemp?B$y#<2dg$B|w@W?`QNw!lvt$ zw}5^{3oX)BXQACv&I;3yNzK{FD{{FLmIBnvA{a}ZpqpqIp}dC7#|WJRD!?#dgbD}U zY1;Vgwtp6U49BC&9<-)A7c;d|e`@<{*keZe9H~56N;RoYy%UaKO_l{hr!yK+ExR5Xm7 zsgNE!q)cBkMx^S`9+AVMm&P+n1`)7P=YEi3Cgjl|=(6z#2HP@*1Q?8=H&6%#Ff$B+ zaHz;Yb0l?}$CMaW$=M`QNg{aE91vC2v*bzg`0<4^O}y%MM=gr6%{*Cm^egi;Uuv}U z*x{ly`9yh?m5&JC-DN0EDpXk9N=B&=&7-v8RIsZmDpFRz>w?9Da{_@ZQhjaWq02j3 zQif1LM`|(Hw(3)rrN8#RjX4gyT^2tSo*ot9T%Zt&ixsg-aqGTQ;P~}Rp^iNQ{pO3U z*_8E}I2c{xrib&zWr!`Fl2mx*W3R-d+Zw+)c}j=JPi)@uYg;AWeQxVB!~Qo+1~(u7 zyS?5n#(!Av+{J&rmCyBF?JDCx1U+K9QTLei+3Ro^q#rS4+|`3W2!fgb;I|n1VU7sj zv!a6&9N;|$Y@89Z+b*0!aiZ@!%wkS&DCTyI0qh3RKf^lLm>zAMqiRnHK;D$*FA$0R zE++Ty<}-u-1HXM1q`j-10W;|T>T)Un1H8SX|F`l{iS^I`rXPHQKWKp`BJ-<+- z>Z$RH8yAd9eUT{CH9Lw}4ZmXWX$y1x#}QsPHxks{Y$W*oiQj6qq+){k=AyjbHfHn2 zKQr-3f=vdiB)~@31F<~H`TCuZeNe&TjpSHaU)ETlSy}!VCslh;let%x!9;jrTwm!l z^w1S4Q1+%WPBH95D}+o`kO*;HF-xjNjm!-8Jwe-OYsU;+WTZ+#R*=_l8Ls16ik2)g zG}gIecCk--mnk?+%oW4D07O8qFq1Sor2R#+#jwz@nLECkiV+oa$2!wyUM#9q;r33b zsKN?>Y%Cgffl?-5((_|GJwsuu+7Xyen)=*u#Sc+trP9Ra%Eh$reqk6vKM#2p3UQ@p zAeJcfMoNR|t)*O3Cq+wz3rk}um7sBA8Krvt zzl!u{rbqbn3_fyes4UXAO3V(NIZ@Ii?D8<+qn85Ipdc;_;T-Q}oB{fDJPcx^Fvaqg zPjl1_Ne7piK!BvGsd@MCg!iBL>ylvN-aU$D=r5ta`MrBoYzW25<=lc?@)S#|qOhQ< zs4m-CrJq!|S0grQI2__L3I@pk(m&A1fE_CfF;Cni5BJwv%l-QqaJX61A7HpM%Z{#G zwquno-bYFRK0eRGdBK~ZxbD~m?^6cvF~Fj|Y@mVRvyTB5_)LNL&rb!$#lpqXT>Rxz z1?W=wQU$K@ruUlu{cI^ymJK5`sP)Kpe#*QB{{5R5RVJvQdgY%Wvfi|ks> z%JC75Pr~|1l4J0*0bb^DdG+F^oHPjD1DL4*ZzCu}vS0f0WJ`%V?o~tAf`v zZG@lcc(H6-5W})MFAT1q)^Mj*oF&)zKw>r}#*d@uB;P$9t2`CLA8F`-M7}JF4jzVIm438cEeW(_85UOFr`(lGA)CprU6QT*w z1vrDRuyRgW7#2_Ai4Uw}wSg&X2*Nbo;2c)9_b7aruvsd6cy;yuV4R)SOV=TD8?r68 zWF{nLQubyS8&N|AldbAYDdZ7?B`H-81xZ87YDo7k+}MQQ#1tT_<0J;cr?h{@hE{MY zGv7_~AM=);l}wQEdNP!`VR5mz3D__rg`EGZK)R_EVbq&~`@h}9ZVq;36em)U z$)6M2{mH=YeAOxuIStx$bD8eTR{&6H@#;&65q6;%&DI`Xo6;qT)&e8qM8kmO| z-vhTsRCDYNS)`4UbXZOk`tBav$QLpnHKuN4ibm>YOQc7%bID5>z!s60)@e9SBOsYw zl5`~lbUUC>flyD0e-Wid32=r(8V$qSh?QZHYfDRjGc?38P7QuyFw`-P^4`>JbtZBw z-8sIPfV)m6Gdqvi^?*JAJ6a~P-OK#PXesr?fdqDnPi>s+v-2aF zRUz&GeL#Z0s7!$P048^KT+waFO)*{o=)NDrchOPS^qKGWar@`W=-|qJtm+m;$l4cK!?yh zTU~_%N076*07ZR$*OBNm^WFbv$bSZ-tBZeT#s6DhT`R`_TVH*2C;z#X&-KbgP@?nt znV*eEq#aWVpcjDGgCIT`1H!vfpFBwhAEUhGNPK|0^!%se^d!tk6!bFbMSW!Rfeu;X zAP&>Or6aOAhSMbF9vm?dBQZ&d+Ln~4?JqytSYF*&UA;jm(cxmLA2P#H1OftJ*l3BJ#xuem? z-zL!EtV}R7V(%%vmu?PqU*w=; z9d#0uonN$6<`N#TRZO(UQp`?iVzY7|ZFMiYo9i1Q+?g>Rx6yTxuI*zkjMm3oDb~sE z&W@rjT~eE<;B_x+=r&Fd6W{@?q1M?Oy&J?uuW0&Lrt_#%4E4cs7htHY8`CHZTy+r+QSiAZHYtPhte^_whl?hcEHkip4 zV_MNs&JO$b^>Q5NkqzP}{-YJsoei;%%-&j|oTo!occUO$;o$5>cT^2xPmGKBua4aa zbWYQ;wbqKiyy7qV2Z((@>Bgam^y=9u0bb_t5Q*eNA(r+J{w}5dg^m5o{~v1SU;e>s z_~!*M)%fSR|E~+RwIfl*DL3+>zao$K(Yp#Bx8d1qCIB+-Sb5h#A>xJ;E{eIc-=YZ< z7NEP`Kayh+|7JA5JuAjSRUt~0oB$O@uPHn;2YATQ2Bte1#hSu~piX8*pTY*IvWQLb znQBt`QfF|vZ_y|)kZKxcBRFY7xsz-k?Ck9!jSqvNIB@mCteZy1a={td5NN4ZqymZ# zq8Lsu!A=e-rhT&s@3WTg?;?!E;+H(bupQWnQ8&Pt6*PDr2`r-W4#y)r=%W2ii#z4o z!{D3(S6~xZ6xnaC`_o}nT@O%j)n8t%M8QE4pIjURS8oUdSMMzEZ5@}@sNY0MNQ_GN4l&9}I_p|ry<(k#d)E!o}tt=G} zmMCvBmio#js&Uw7n+O%if>1e9T)@-y;*Kj6n7VDIZoVB#ZYSsLD@4vYHsWPBB_6o1 zN?QBUY~4yYZ5kMD!m4TW<}q&=(~raQ@u!sEp?zFQE9SI<&8yBTIha`8S2j4{EzONb zsv*LOKq9_#bVi%(?VToiA@NR4nftuT;;f8)v0x+*1G*|%#{S>D>+jH z3?ngUIu)Hnxy6pSWl7hB*Jm0T^9ZK_VIfD3W==)gvWJY@yRfH6X@X{`6y*q)A?bF< zDS~61p`I8GJ5y_V1%lObSCxofO`}hZX+>5br-wVQ-H=70HC#LdFxs~-dbq3#^e~To zR2X9b0P8gsM=_GLbsUBmq81JDQ#4wziI*mM)-qxNK`V}g66Ds@Y0ZyAgj6Qf5TG#{ zggL>rbOKeA>CZ$n%rv@(Ip7^-5^8Z&&Pe8|U* zQuLaq%*KTc%D**7rlt+k(aJn$Y{AOR+bQPCNolr|ShuRdNq5&h!1DO)ql^aV-WVqi5K)On*FSA4`z+CI zjQgJQ{b4IPe_6RNz`N!U)+;!nTm`2ac&Dg;*Z#g^^5TvAwqQ3?6QyjP_JpCJ7AaFd zTl@!&v9x?u-fM_Zxh;Pg0ig#tjIyD)Nm4zXVxzEJVr&(Pz2g|IM2l!y1YmK+O(tCE zS;vTb_f7{~qvbg2^>td=+E2AsOD+kR=u+7x13e_oe7m{QZnRo8zK6&M%|H`^Lv81B z)hQAW*8gv}K7vgue*b-`qNxu=T|{EF7j6qEm#Xg8ZGrDS#{p0|^nyI0w)UVcZ6by7 zcjA0nGpa2v3E&-!hj?p1E~CECUmyt@u1f8tJIEny6BuN>^WBu@*~VbNF{oIM(Ic_j ze<|R@FD94Mk0Q6rI1BDVkrhOSF!25*nqskS?nad}1{~#gRDK zO`N(qQDuonRcq-nC;B#y`1t%tcmQB3vM~HuufgCui%PQ* zUBj;haT1>olQBB3xT6@11O*GiTDYy=UumuM?k{2;0!`D*u(4^-Z%Em|tj+&UVKY7Z zKsn+E3udV}YGK91`3)3T09Ritpm)?fYIgHMKQ06;V61OFcz1v4{`>bIFx5R_PN6LJ z%8$qdG#V%_Lm6#$87$sCzX+M103`3@9s2jb>EGA%@BLOgqc3mi-&gc+t%)s|Nzmfa zJn4l@9H}`jlQxc$;C#fh&^Lf`Q`U+f*xzX)jZNmTV%Xye5Z#gNL3pXq91|KykIa{d z{jJPZ{S*?} z*f8NI9S;&Ond%USHnF3_>W;XQ;{S>r**zgn$*+O)tH02&he0e|!(8FYL-~0EB%54S zh9Orlxy}}>iS+0>V+)LCeXXG+l|&9%kHfcbbt$v-KGJ|_ZS0DUSY6k*c2IZNt5gKR zUD^;B+$Of~4%z=tAUcjTLUqybCXPx~v1J6@fm_EgUxjJ(CQoAprqOe!;T*8@Orcjj z1tTx@%OV7)lLnvB#x_e~fIQhWw`duSQ{5v&I+4l(y9A32JjAa!*sUh5_?GCL|F!U7 zp(%uZ3()#s3mN>zU@2Q)5Gy>YI)#a%c(Hhjj>M|`t8xaThJA#25^Y`Y`H?I$onA0e zATOL%HIvwNeD1BVVH*Ef6>3l^fhl^DcJF8YeZms{}}_h>n)Ns4Bq>$9t+|ZW8}YvHvX$i%j-++M}DWhvAVv|>D+iE zh*_aNr-ca>5S2WMq$;P6FT@5#I=2YSFS;9Xi7kF$7$g-=UE+cIr2wI};rcHl^*)U8 zW>T;H!izLgi&V3VOO{QlK*6Xd6<5oz{QfwasCfSAp){fYCN;`#P41+QOOu*ov`xRp zB9$8$w>wy?EVbJUCjrn3+Is15tkT(CJl4C<)ju=N|2Mna&tC3cv5y(&|JwS>YVrK< zz@xkK{}w)EV9|pUsY`MYF)GQ}w1xEQ@P3GylgC-uAET{xKxQKzAJSQiZ8WI-gD88T zod3ce8-M#bx?7`XYgr0 z9b!%89^dlz@{B!mVXTzj4|7c`|LH1lHCR+6h{KL{5bUb$r!D@a+&0y>F@c- z`iDJEGfv)6GAIRt7KQx>$I^0M@w?d=?DXmDN~xc?!nUW}uE`agwn8o{;6e;%ETLs;@& z(qeF902a)9&nZB}ghY-Rvh`(eFb)cg2gfiP1gR(SZ+|+3MIg=uSA$DMVb)|wbpc(D z344U~!>L5Ehh|Hf;`jl&9bS%e^e9JRGS;pJ6jTXD(}#(r z7&A3j5rq*EB5^|yKhR2fJbJB)L9&W{Oba4a%J^tmFe}+1dAde`P0Ggm8QWo-6(Jx{ z+Hq1zQaCgy@HUPL^U{YVJP`vT%L1=@r>| z8V#^Ii%Eac3ivNLg?N_9FqGSS#hTb#K1_u&4ETDX?-%e0w*{{R4-TN5v2ogSK}?TP zlxbRGmJw=dQ%@Qu_X!P?1=)YY+2Ez)*!R49RWADEm0$4D_dGk|9fdN&vfOZ8;wfMh zg^i^pWZ^Ls0eo#>jwD)AWw>Rjyu_AGO_|(K7>9VCp6SnyRb_`BYKqC9N=K?{ggpGv_g?!5)PWHCC`A0 z;{2!@p%R&&@*U*=Plj`R^9v5B{%@F(k$p|A|DV@jS`s$b?SC9_LjEe3k|F1v0)s=B0A2_wfAS z40c$1VKH9tGdP+6`EU|2maH;AZqwt~JQ}sKrZ1M_FW>I`1fYXirhj03wqwxGz-K9{ zV)NQK?YuFEswDBvkT|jkL5I+$wMhYG`sk1ccmR+I;xHL!uns(aXJVMVP1e)X16wR^ zw3h!jgc$}h9LG(L1;(d~9Iu6_``;~px4Z!u{Q0~EM0R7P-TBTZ@(7#<9Y%y}S^y%0 zr}GhAow2$Ku}|V|Z$US*BGiz0`?q)L9JS z$mrqOo#iRTsFO_{enuNuYcmjA#sTao=up!42<|vEy%~5T5ccC~4=lp?Gpn^?z{jq? zf8hTWrto8u0MQ?JKQ=v*bG2^eYChxsr5nl2E+U zA=7om05DU;yb2*Xn#=kv$NatioXaneZ4;qzPfNV7vyA!mPaem=hqDmGdtRG zA$&~EQIfBJVO|UCMJ^x#u-Z4WENC!lbmjOR0n%_syGqjEJ*l9__vQ3tA=Cpna61|IB}|E&K~D z;2)}2`*IV&4+w!ML@b`xIq3HYWQ@8K)y zEX<=yCx@SJr59MEIx%=AsC07H^iQLcQ+$9KcFBAd+TwCezq7Uug|P&@*Rg+)cJ3CP6g}A~wIm1kMkj8~>s6u;av_Nk+;g`8u({ zAY2d!gYyg+##=(TYy{UV+M)_RvQ`Xy7d|Uh@LAPW#LU66%8(*!2Ek;Zl|e)0TG6g9 z45!N)$P0{Sn4Ng{(CiSu6|4@Wa1G53-vb9&bH-RO{opKAG=TeX{!{#Q7UM$0jT=G- zj#z@)Lb#sZEDGc%5~gKNCR%sTYX)&W;$XfND%S_w-gP5 zo|BmoK=bcQ_^--A$2Bkj>o^XxZZHb#_)HTqO6G*?b5Fvc-Mc3qcVe1E=1+N2$D;^q zLfhmCS!*z zj8@S`H6D)#gSu`*Ts%n*LE~Yp$-H|N`NgPDqC;E?;4Wm*J>l-jRNxhWOtDwZ5^XgL zq04V=DUJ=6eH?Q}CX{i}TM9bfaAK=Q6ws8&a z3M{@B-+0LmTQb)l~X_CXDU z!cPNQbb*D+g-bdKE%=q}jZGW4)3t{dJ?2C@e8*>dUd5}qz1zui%)nIOY`CR=ZE4rt zr}&v7|9!Eyv-|4cs>VP6XAb+{N5%YaYioD$zi;PbB(b#U{vhgxaTa=+}*l3DLHMls3AXasJ|r(qf%pQG+PChnn+v02cgiehp%+4}b!EeA4GzZ~bB zy~q!|E_B6uMpRlR{rn8A4oJtUIL96^V%@RP-mvLJ9naO;fz$vFnRM@XZ4=`M^@=!7 zvq+*h^HHy1~aZjb6!qLW#qRqvt*65rhHc=n{hBU3w_;>)A(L_BN zG<`hI(XtXB5*(YTi(5)Chwos(*^0DIRgI1nh?LtD0GbPksNb_wj(O+lnUHKEjiF06 zCFx;O3F`45k{p(z@=$~u2_DmnILtU(v;@cOu&$ODc)qBs%ttV=iCI;71$fV9HViN_ z2=W4JIw^KfLefaWMUx`0FwGY9|I@C2u>bt<=j}JU{@#KA`py1d_MYuN^K07&@EZ>1 zpZ5-b+JAfKLy0%ruMYp_??3mqU;WMh^WLjxO@H^Vuixw*9QgZhyuFvNU+nF|v%Ob4 zFWx@ed-bFL6zaX&KlEShz1%y5Mi2LW>`Uhclx`3Zh*Kizw=clfua_k8d0 z6}I_&|Bb)xzutaxxVQ86#r7Nj_1ibE_YZcV`)APXtG!px-#{%YC(`|+nk|EK*I&vxPA(_I+Z_R|-;+!ah}=f(Ek z%clQq`{nkJyHsl*T6yDPF&>@&^H00@2>aWH|L+{`?Z3il?Ciffd;>q5Fv~ZGy6Vq+ z2fIyw`_0|~4Ap!7W*?eIa6*lJY6R-N+T~Ud)V{MKPy~O!J=is4dA7U#0@^yj%68$~ z(N5ldZu&Fj{MWx**&x13AG6N?we{lp|7ZpN+@1fo@Oc?^(*zG)|1S}RLOjUfOiX}k z55{!VKBt%p&)L22FJdJ6U2A#y8}D_R;Gt8m{rcV0o$q&cpMJOa-P6_W#diDI^5S>T z+U>>Vr)r*BLBb#zpk(EuI%i#R~NtgZuQyX>h|vT z;`h%x%Zu%`?d7Mt+t0t-S=;_n`^LK`Js+^mNL_wDg9|izOn2c_!oDyVioAk4yK&F0 z_KjyAU2-zy#M9)z_C(s9?{>d?3KiRrpo!J*o+0?>ueqLSx@OYOmbXM1CA3 z$H4%~@fX#!TF{*&CNtSUB5(MkG*s`P(!FQl@fZd6^cNqz2?rr7kL4Q=!D+qJn~bL1 z8O+4)ZN4RM(O_EJU5wYe)7QiM*UwSB(z$RuPsh=q*IK@GD*^{+Jo4<)ZJ9BZTbc`- z=77;f+L;Wa`C6F|Mi*;qGK^;8<1SimWzjL3HJ;|J!-gzB~VKC6a^2u}0GsS;OM&v4U z4%bA|;IW-?5T8(bEA;U=flDJ=8su!z9EZ^0-m8N{xGo(X?C<<}_wWerPH%R%{#aL! z5BFd5v&ItRVzI)Dy{CoZ@T64u<=)HPX>H?q?G~QUE*0dN6!!@Jk*`B~cC^#53Y zx&7zehX2R^vZ3;v1QV#)M602}0A_r+?@V@M%YX0Pqm-g(Bn#hBj4fZy!@l{N4f(r= zP3cK+J1iDf1tp^v|0145RWksAdiH?#c$}6+UeN6(Ddz~F#1YAG7-E zYZJV?kMo&!{+mn9)%uum{y$n^jQu%gxJ_@&LB1qVI_z-Wne^E_8YPFZ~0S39> z;+wOn`QzKYXImGzH~%?2KZ8?>M!3?!Mrts+dyiiaf*dW!GW=zJ;t%PVD%6&!^paEj zv2$CM7My2RGuExBMvwQ&De0N=vfQcx73DV+D1I3BP?1sf-syrtC~fYjbW#Uljt^-_ z_Z}Z6$$-AeSpKrJ^I|6%j)1_X_>L>z+aKl8F#0DoyH#73r*LT@eLyhSW8O{;DGDDwPS zkKos{{htpukKP`D;RQvA$3E$4qMr04asA7OZv3-cJLKT^1?`m>g7q zg&#!6QuId&s#~0&GkGzYe-;3U;C5a)tWi%jc`!acIM4EMXa=-5#Ff`;R;X%5bBHR% z{3Ux#1JRlSvX^_$Ud({%Yq-1<^mji2fMyj=!;6$f*w0h+O~{7c&NiN0{O9oaAWT0+ zT|nmK^SP`}GOOBOU%tS_nYTFf@(kF6H z^~XyNot#dc9r@62l|J7NC4MyzCHChc#YLLhxdcsJy*`?{{9B@_?Hi)06;x8r_3%yD z4^!aPuwnIXH%7~^o&A?^HGG~7n2Wn3uXp7266Ce;hjA>kCtJWQjHoKeM&!0DYVSh8}4K^eA?{xH!&Ep{746-5q_nGUwjWLGJ9tK9n zI2lm;*VX4ck5(Q%Z!hjV+Fn~+U3s*=xV^l-zS!Ab={$p*!PcTea5vBE_|Sw7RPL64sy56gEU#s-hNsg-K6<5fjfU7@Yzt*fBEKd6mO;{+2%>q-~7ku1pW)@pUpJPCNJjtqi5Ue z+fUaQpMST!ytvw3Mm_AK?Zxj_o<41N+S}XDmfMqt&8tyZ*VcRZKM*%QG?9iAsWUBv zjL8~xAB%p7ADbVKmnts5Pkw6(oeO@Z$bVk#{(L=s%#i=ISJq1QpY7E<`;S}s{CpbZ z3z`2aJS#-*34Gv67W>iXrSYhT&O51SVL8~w1OF{O?rr#Sa^|a`D294&s&c?}q{$~N zNJ;=fP8&F z=!TMHGLUv_JDh=T5e?io?9gLNpBK;0&K7YLi{o^_kwtqo6XYB}^`D~w9I8YA5Y9bd z9jk^^oT-^)_$eAlC>M^UC9P5{^C*VFq{%2HZ>cuWKb7g+m(*qe5GNRz>HK;0xzzI+ zB{-FI&pxn&97shH$8pdnPdSQkOcvoDy`pMpWD8_VzWOh**LW)MKZ2^j@bp2TiG zIG2v1*jIY90+?F<@0(2D*k=m;zn0ja_?bcfmphM&@jusA*Y4tf-pWVOd^gA!A;6>n zMn6aKUtc$M=pr(4=cq<4-+#@bIP6^SC(IPuAIB0Ii5(E`ERe6`GiCovfY+rf_rXfOwTb&5KIQno zYyZbzyN3DA{QNK9|8uN=x7RzqQVg(J_FwDEkBau+>#KM6U$^p^Ghh?4l@%eG@G(YT z65nx2Tp(X1NrC#+`CweLDR^nUX5#-U9P=LoCk`Y&J%8dq?nPO5G3sH6RpywVd{EhI zvR3#xqNop+zpX?_q)Z9#Ryad~#8*XcH0VM8BjW z-OqmL4traO_YW}?@WcBV{Qpm<;b4$#X$BCVnjdf+{E32CZ>`sy2yJet9_phhyRaz~ zpecL5>2pjF2}?oyhVP+SQ-v3zyDPcMrvoM`Dk?^2*+OZ9s0uE8SKKP?Tp>#w;Kjx` zraxRwZkfh|U6(@akD8wl|3^WTW)fz?+6B}}(xONi^{DADZ1@X+!0_dLywIpzTJn*% z`e*m}uSWmpIRAUWIja4-gE+q&8!$`$w_42q)MBUf(1}gm;bRJE43Ar_R*jl-A~kVf6fzc2?^I;2m4?UR%Q#jIzlAfrro058 zIha1a&2_SSq>T;D<}rNB?i*bG;<7K>rbQuAlhZ_{fxhnZrOYx0jYXey6jsy1D@j<84!Z z>(X4L{Z^*c0_}fvTckh8fHBVtQ61&s6lz{LCM285%+rFune)Pmr+1Gst!yFRj294~ z-uHxj(+j+DQUSQENU$lFfZuZljh8_vjzQ6w`s!JTbqn}2xa@@Q) zKR@3Yf$z#^gj+^&{%i0i8a36p@$HG#g07~@=(FbMAj(PA&*4~6=}3o4G@>JAW7Y{H zH-$pqZWLTRbj*FhyC>&EZ5OZ$`{t04T!O&|P^}&X2IN$yQJ&Nby<@CQTdKtUM5Bfg z34O)GXb$?1dRw#@y)pW~`lw9**YD#0-OA^B2_uG1-!b&RoC~}+9*#trAltFWsoF45 zcgzIs$_Ipvu$E}(w|qf(P&ybe{grbz+^aqq?%m+2kd@AaW7NJlq(6dhK*!+nF@d#xi2cD+$Hi5NheAgP!2IoJkn;XgwHyZX@{!bx?N+i?3eBAGEpeD2F zX+NI~*quXzMq!500iQl+A* zmFCBAC{#F$dim)V{mUg8GH#u$P^mkBqhhP@@E^%>@ewXY@fl$eo^>wh_&uVhF{xl( z{6qs7xzofla0*}5AogmAKtfqXw6zT}rFc|^a6VzPAJ#^fn z{I`k^GDa@VaBDDXkwg$mSvDw1E6aOuAKhTRPoD5(>!kV*8%?9DckXG@AdTXJEn4b- zohAX8)LhctqbV&ivrI8t)*q%(YF87{(**6p6%y+ii+%L#B59wNI(L&rN;i z;Qy}d2QZ8O>y-JwcIPhs&#ipO{=cW99^l0c1M_1Xe&C1X@-6pw@g?%?OzEd|%J=B9 zh2&lmzlJJ>ynPk-tq)McOeKKznV51q6S@eN5@u8RyoX`^6R8NCsogfkuQ!z`gTOJy z^tar@fRI_vUK#lrU^;7};=XuF*@@u&H{%#O_q=-xL@%ulfl0tFeR^R!Uhq6%l6z5~ zyrN-t7)?J0_MzpYryb_%rfxY~bWAmAz-Q55;2n!)SlGi9?c5!{RlpooK!$+>uath( zN*&%!l7W`K;4Gm%Y}xURqRa!>tH)UtjKkOq)Wf|N2KiZl39+>_zlls)Na@5mApm95 z9&*e8m@WE_P(FEVNDdk|1$R@jG>b)|UX@lo|ycyxNUp!3la zcYx63Nl7MlZC_jl-OjUTPfM`lmN1bVrn`fA2g=3JD&F#6QNpZXFgW*Mvi1=I#0diP}R6H_9Ra_}&CKWe1 z?n7YxX{#37T9Of>-6fKl@SIXHQl<_sfvGBVr`alh${_R4!ofgBo=5R{ly*zYj=9d# zE^M!lp?{nvL9dI+$IPJA?vVwTk)W?8+(d#X&+rW}NkJSY<7`0ak)I`=6jVv%Dfe|a zh|#)Ti@R`V>_RDtj~eBk$d@u+99l(HizY~eG2`Sot3DEva{+{E9vvbDFLCz~mnq~g z9AI(~eTm2X_StE2mia2PJ!RSrOOuBC9Omk?NFt)4M`&n4mnb2t>PPSoEW;47tUP-! zV5)l-#6Y#5X=!3qQpb+{7r4ZjJRmnDRg2Pc!6?0()(Kn7phEE7- z&ruS6Q&Q3VK{*N&BTOn9zm7vXXX`Jz6(pm^26i&At;N0(rOklGH6Te*jlL^2&Ntdb ztSbg$q(VZUAEDf|YwyCZ_nC+Oo0I->eaxW$Yb&d3Mf$(Ga;N{fmCv;jJtV>h z%xkI>K=?^b@n>3rwdU3GTWHBj{?*^Q6__ab+d|jdTFsBYI`XtbPut(MFK8InE|L7U ze%En)V(AGBrFk*hv()_UMnj5rW)F(D%o>UbfSoYGP3vpQdO zQ%LP@yf$hFa@RXf#&M7QI1w}SwIwe|8A$G4aRurnVTS#8jil%dZ+Msi5hqC3EV#eJ zg=LW76`8D0BD~6<26$bg>tn!56@0}vD7-hu;Ta8t+zzum9d|LXh4C+j_wd?r2u|@n zM>&=p4Nw+ZN+FeUH_V4&9&i$1_|f!#Jvu^N-DjP9nRFB}E)qP_3LGlS`Wx4OQRV%n zA-tm!AIc88bfYE>5;r}uJszvm*p{t(f_iQRJ7G3_Z(4rKL(Ek<#~c`33JPxT#mRE1 z%K4RsjrzS}AxYDmjP$g4oaKp0hgkIAN>5hVuiZD4#-3@El?9=jcl4Ivnv6jZ5<9hiK`{Sy19G_g=rWtKr-;v1tV0)!=OIusMqJXF-b)Qva zk~hFnhD%z9i)Jz&rdb6@T`RWAq?D?0Z)$`|?-9eHS>$!7(gFDcgI?2+eO8$nm^i*EldUb3I=hF}7|)AHjxi0|%>vF-fCfVRb|IvJ@{pMV zs(Z9YV3Q;izu4L(Y7`~Ub-Q(`^>10N$#hD6xPtM((RZwgwTg6!x-LE>TWM=$Unz+& z5sh=nNrZ^>hd=xQyJMfAd-tlS+}Ad){vCX#-T&$%Uqp511!+xnQo4x4%6IrTmo`QQcDckc%9Qyox4~U*gX>Ej(^{HE+N~1*ndxILMaDOM-;|<; zuQ9XCHB#ss$}Dr^6#93agyxP^-;wIOG&D%J1A*7Yv(6lk(eU(Q^{zSbP52pQoENVL zd;BuBl8e{Ta*m5vO-5|Qcj1aG;k$UfygRx?B^DQ7yyCcbiQdi%z~s_p_Ntn}k~%io zn8Ej$Gt00pVUG_>eQ?Y0%Y5HmE~dL&Om`pinI`{DyH}6>kDrUj|6f~KU%rd~e;c0} z>u*?*EA%l#{=c$XA^%^yv;Vr4&(edf>-s!+?>+DpukWY8fslnStH^^a^H1Sa3DWNA zIl2c#qw#<(bRJliU^$%gAEVrR08brjFN27#vDfm_@*{tFbz^mTW6d@8dVh^GTk^gY z*@^#HT%}K+IM3h|!bj#=O^^7r=6Tl*=H1WiW~WVKvTL62(t~R=l%oOfpb~y zqcGkD=)xox??a5#-^-xjOaA7cohDgGAqg@}Ad%)={OE|>q{K3fo#h6k3@2DBd$86u z!xI5z018u}88|@25d3kL``uI6^AG4fM+$&KFOJgi#D9P&s$fq~p&?_!hApUCjZJ^) zfj`WB=o?GJ4{=OVCT>)RJckCD*iQhc%HzOBsdumFF$xYbso7zNEm$Vy812X=C zh89;!bFZAao;c1i7!33}kdvH^wWHcQ32+SX8)B>Z(t8jzXB-YtJX(Cihgqmo|@woqPrSoA^1qiAC z0gIm4Rub_590lQCt4B_mTA<4sbWE*gg@Sh$OX zlyHy-Gz8^MeH^0OgX5n`sMkbi33a?fOOitg&+@Yv36o< z0AI*$WbTS({@o!XUw$h{Mcd>nB9(P0Uvl>wfWP45VeCTOB?Vvp_vsJk)&HDcp^q8< z|Em@8|5n!4?({#m@%c9D$Gx!cZ@>NP-iy8MH%C8t-}cZ9G_)W6Hnl{49fPf@Aj5-m zk{+^QWscG;4v%H3vCbiDkalU?dLbeLlGCGb6n-ULwCL?IBMT*s1QQ6NT^E|7!)8kL zKoQby=?Q}lGPxyc8=tE%(nwwV++HTp6?xDYLg!P|6Xl7LQ3hz)3QcU#jC@~tp&M-j zRFF48ucsd=QHXwtUclHe4=+(?LZ(_p%1P0A<5{N#I?}S3g{z)O%lhE4fCF{iemHQn zJYyl`2q-wr5yg-X92_tLcSN4SAUWe1BrzIdqM!X^2HlfiA5+;UUt0c4#sFvtmq75` zf%!iYeT*%FtsNtDc6@{n2d5WAlMO3R8;phhm3CS~zr8P3V1;YI#eBaUjD; zBI(%+*D3(oAie?^4pk{+@GVRKF;v2FNZ|yr$*xZ(;%b3i2W!W^k~0_LHATt z2PSYRj!T14v;|xTT2iVI+ExZ(5es|45}eiz4dVD92#=~hvFbQZuwKR)TegPsasQ0TiR!g8hTo@AIPXt8$Cl$x_O<7 zzhYxom5`Piyz~We^BToV)ooo)7Ex+zUQT%a=B{vC+q{f8b#orA&nDn6W=ZIyCd@D& zs1f_xT+)B;X9oYT49c(6$8`R`v$D3bQsn=am+#^~-pc2?Ir}|~9%M zJnoT;R-we_Gx}24M~7+W(bqEhntqs?r!w4|u=m>INY_>(9ty;bOx|@{eq|Uqt4q{7 z4ZEMx;H*A6;;H$hgU+IVhDSNY@C|!%-aqB{4~~I~7aG9eAcYoYRS5=z3)J9pc&rsF z*@qbk_4U{vbdzzMn`Y>Qly)dKOXZ9Um9TFNe^Q2!-LcazwO~d8wXr=9Ek7a(%M3gx zMNv-^GHOz{^Ot+C^tBwm*FQJ?^M+rqe{T4X{W^U8!T;=Uz%w~PO~viMnu^}Yn3ba7+Hb)|(Vp*)iC5>}gmhP?jZVgeEi*cb5`Ms>BGe z-U#qn)wCD2+B{ayy7gHU(}K5a;uHT z>%Gzl#uxj{DXuKgU#6_u*kOXP(*PyFv?Xxu|HuOYB5oc z%|^e|QLAlNz&P+zim#F`)@W(DeNxUBx~k()9@4{yb`9)+$~!%AX?XOos`YlM^|ssK z6ZM?t?>3E(N=AM+zaYnp3~wR6h%wR6PC1`WI0#1ML@`cDFg^;|I~c{+l&c7t3!y@67hSNspMH8- z&v;|Po`f+9cU`an(3>19CZn6Ac{=*$t&u&|<9w9Qp;panBZT(7@wh|;%VclFn_tl* zi|7IUs?}V=2Y3}}=2_;>stJx00N3^KbDokCs~>&#m9Imcb49VvGl{zZn>e7DqEPTt zl#DS3b&Bl*vSi~yo;55ad_fQ-78-{2r(=7jL9eHV{HNn4wZgYeGh$g5QW1`V9K{Nm zO-24tJnK7-MT`S111RTks680eto@3uj+A%Ag9ZOjfAU8d!5n`M78GsNq5>k0dRqA5 zkf2jq37l3?dY~Ke-By$h9g$QV?lO;9nY1hD2xRPO0PIf4h6a`r=!el59-pI&R~>Hf zWr|B5;N6lEaEE*Sl4k@KpSTvDijxT zrkX)~PPob0+VFgY4vs@W-jE7Nwm5rsm_?9uj0ufH$?@R3$*u;_$uRvp$FpTEzGUVr zxbM6mvdcT6?jXiBonJ)em0eiH@m6vEq#-$=QKi)>C*AC^-<@ukJ#z4L!(d;SVG%Z< z#(6Zvh|f9vz921bMZvsjc#c;HGc4|Hyir7 zbz;*9k?_*xS5siR^H8lObpmG>4xs64h7CX5;lnL!aBSHAK<=wlz!KZhEtB z8}g6{2v;ZY0yl-RSJcf+;SSu+ZcR#SobTW#gt&wqg2Z z%#P5zHJqENo12bgf=-i>r-UvpI$aWZt_LB$IQ%n@f9J*i!S1t$LI-EE#1GyQCE~Ps zoNijo=mLM|jsM~~CDBFmzJFi}VS4`JIU6;?dsI3?8E6U3+&B{u4%k@Y*=b|h7B0%V zLE1x|9-7!04*zB`Z?+=&im2xv$98Io!Z2A^BUHP(Iy&pzPgY~g*pU=I&J zd^?LyV!VA}6ovQcLT2BW6oM97N*5aHI+EjT)CQm;);MLX4xG9s>)|XZxxoVL(BY-O}r~XE1taIa>XFye+ zb2qhD51`{r+e;U@2HH&4O$F17%Pl73=W4s5O>G*)8D-@h1m`!k^Dbf*QK_eL&rR$0 zL;+>@kquH%gXX}-BSP}@B4r*EGh;e7+>EL1IA9vn_4yK{Wa77Yh|?* z|8f1%qepl4pSST*hGMvtA2Gx1?h+EMqwETP zfKq!Bk4EvQWbla`fRODNB7x5+vc2C0Zi>BrfJ)=7%g+YMnd^k5Q;TMD3Y%fNv!NVn zOOjI!IOnd)d##+CnkbOXLf`^`$>xUi^u@7ckCPo{zPi}8d<8k+_<&J=px^k%VK*3O zp(XT>6Um7REu97D$Yl%zas{HWD~3nHF>$j*)XtLephwqEXp}UwmSc@T0f!U~Xkw_R z6P9alY2Ocy;eHiJhE+nP9wnknTBnwOjXE=i6b@cRe<2=EJNBp;)~5!tt%(N0>}}KT zd~E|^>j_TTwiwp)A>&}h5RfGXvJ}JsS|Ukx#IZ=ys)4GNG#OZSdQc0^fN>M^LqC_3 z|45G7UNT13McL};xMNG`b(SW1j+t}W{|W}vPd3<%kW#`&=>8#Ww2}^@W17}rZBjct z0e*uE&A&AtC=Cb~QHrkz4eagvy);6!8>2LX)j}HiO#_DC*mN7HK&pyH?#UeJ&~B1C zWK*@k4sC$V%so(g`G9WBIF|&$o8We#eS&QfH$}H7wOk)m06r`V!|=0_A_+1ERr!lv zrA@tj>WTkgq~A@q7Tvs@S>@)1ZIsG2=1}jKE6rncST(o{)~eLRIPOJ!z}llJrCnrGae`n`R>p zvuZ2Y*80+NXQ{L7ciJ26&c^B^;K9>0JP8KEtvMdeCdT&EP~1~}wai0nM97iZ@-8@| z$lbico0S8`SdtVwT%-M*?LuLA-P5$rF0>1+g@W<3Hajtqf0T$CO-9QWla@6aw~5^> z`W2CED?^T|my-Ls_^LV<5{ooUDe|Nzqt=IQOK3A~zF(YKyK|ToCbeR`U)<%&{*#x> z1iD=FCZz$m~h4S_Qt$gRM7*hwjMj zn5fQ(D}tp8cD{JK{bKJaW-48sQ?i_y^Q_O=LaB9<#V@iWB2521)XfZeL1P5EuBDntQb4=n`M6|(v0Old#)vSJRF;J#6&(VEUi6w#ZY zPzQ?l5Tl-R+2>`tG7}&o~XGcO)}SqV*FFC2D1bTfv!H%TKj@ z3&J*B;MDrs7m>TqSNUA>{(m8b;EenK^4iLJ>HfdAdUyZ7jn56<|CcHS0IaL|ZvOi} z>nC^iU%uWxJo@Q|*=zlo!e?)4Esc0Tg)uT{);N@;`FB86FS-Ar?EHPq$p5#xvi_*J z{~xvQ;=kU?XK~S6T(tK;{kkUkAGEdI?ItPdzEqXVRYG+z)~oq&nbq^{S`*%xFyoyGQ>GbbNyR|m&0x|iYlwh* z79cKEoSLsGWEtuNLQ3LtmZTpgxgt>XxEG{7xe-QTW}%3>?QRvXzl<>M!&Wam9-ly2 z`dfU-IIQ=Zz8r#Zu zwIg2aZ$I08R)WG@o3S-YLo7b$rqso^N)5Q1^vy1gs$9%dqe5{WhYCl}E9m`V^{RHiRcl%Y2bAK*WZNiG@{Zd0;N4^5 z>(`NH*0E3ny$foL5;a9Sfm*0Z-Ov0XIbwt`3tfzd1ievE0Gbhw+NUOASnvM6`QagK z$zI~!yVuo&?&64Rt(J2biAWm?3LFU8T6lUv4SWtu*5`oH_wL>6Z;%U-U&lB1#D=vC z-+_nq_#b(QVp>=Rt%C6IrCOYl=$M2tk--bWu=4WIi}Xk#MO{YkK$ZpCm5_yz){cXo zNhS7e8<~y&CzN3UW3kXiRrz(AXaMZr&l)v8>bUVnu}g)J+%4fcRH*&G0(LG~%gKcr z8epo4cZ@7HxR4i8KwSE?&!U98P!QkmP1CHE;W6{%~GcQ6Sj<6{4{~yU7(Cg zh+2R5_tu98jn?8Hk&xbR%W{keJ! zP5gTcW6VT(?fPh$Y*M9>`+vL=P=O91ml;g6BBz&9!iQfAXK&LwarF0{rnAaT|BJ&! zzBwqjtxq{p;lk*UleE03RIzGeq7X((5#gKFl0$SbA{$qoaCB=}RUF-9zppwc>vg&; zTWt~#W>_mJS+};L*@gxmtSwbse0#Yyb0upI%dJ)#&8vZh9|+9UPuvs=e07RRr=X89 zo`jg<6J6@)$CkP_)uHbyvaKH966Ho(A$O8@()9YG`pHiB+G z4h9&himrAo_yYClFFg2FjT5$_R7gYI;?%XZqyVIp)6yVlD*A=DGIrg#>6+@7E0tkh z(QuxQL-znFEwAE+iKH{ps<^lD9kUK(r(eX;eq(FP;ARbXPT+GKFHSPUlpS~@op7Sx zXtipMnj!SKf&1{RRa1|Wk3eRD^vhWTm;|T6LcO)vxZhepHM)0??Y@$aHYFejLQXMA zqdl`uaNyXsK3t#hhXQZyr5!d*zplRg|Ixd(X6$uHQr+7R)Y#SWSRWmcj&Xw#% z$-M%(P!uu?Lv$}!OW~3axdW?0b>2f7s1%|_hzLK|%jVMK3KCN2zs}3=k`Y``cNtN3 ziQI-I#k58xt3ZVWoKk@nBCDv?q|ypl_`Rhv9+9ZUzR4ljhHgftBDIy*h8nb5Ej@TL z=&2-rOewP}e4t9!{y6&45HAbyvLab@B($(M%H}My2x7%%j};No-L{TiZNJ<#gO%S~ zsy%u5QYzCABcx@nQ3I<+Y$NfEHMJxnx%TTFGEC9OcHcg+0k`C|?)!Brr5LBLt#2=X-y7eWTspSZ&{iJEw6qxOfg2nZa%6fN9-a5}1=gat!<+_628f(f_bq5Y0E! z^C{(|rLcE2r4Sr#6jpaikzR5Hhs|kK9~PS) z$C=KTrj(GuQxO+3stBe@ZYpgS{`lg3*}VP`C5P#`-v?ejNpC2e2x)-M(qL4Xprq1J zw;V*YeKo^+%iyz9wzqFP-XN2)rkG$nPgKG>YNX0{Lyr?5h@~X4e|2r6sf%Oe00||G z|1Z4G#7f&u1Ws@*hJ6(y<8r?6WhcOFRfyFhASUe%WuiYJzl>jKX3Cbf@W4#bj;Ze$ zkRz0}QLEaM_`(cyis`Fb)>}#w@tQaE&2BFQ?>L^gzYGK&tMsXH^ozmsr+R@+ialJh z$$weUm7BA)m|~o6H?i5xw-*bM}J2=(kzt^78GA!#BH!xG6CV+OiEkY(wDx zLi@S-9m|(U;)P%5ww!jB7Jy^pzk%m1?EuUPb#uwD_-LM-{K__~#Od>i%Es@@jRMK~ zy#!kNjeh34|J`W(r_TENTIv3`(z(0;-Nr}RSMUCHXZQ7?6#_~>xc-EI>S`#lY^tt? z7&9A~5FCF!X~_kcK4S4e*l7 zVm6(39YZnY9Cs-|*)5u;QDTo^NHOQ6mu}Ld_*I9eVTJ?IH@p*6?!okF0#Tm>vgScX z@zHfJ)M;jCKt~~1FAO-@LSSEmvQvuiWLfkCs94D)>WwH&A4qn9GgQ7r#8~%CCJB!5 zld2$zGU;KMWvCsg!*{CPz?me2L2`zJgsxg}u=riHSHoyJ<8C+1I1(0Rgpw2mJPz(Y z%2=Kl4VoA?3f}Uvi|0}=!7LR+3J7LquP2`PahRF8ONcKWVycE$J^fZ9eQ61<_`;UP z#B=ASSZiCOKvBLs}@Ng@KN6Je||n)*JD{4B~s!X5@*MloDvHuRJOCP@e|oXtov zqsGNlYLehtKc;0q4o`zm&{X&tSXV%sLG&>c+|~t6HyK7%B-Mo5R4)lL1S|%JIN6w%cYD44s2Kloef=)~_pN-cjkm`SYQvtJV^SygAzQ~FJ{hCsJ=;FI$9;=j zMaKDQl5Y6VXve(*Qg)1woeeAaNc(klRa`|@mfEZS^7k9ds~hb#XTx6a?5?>vnA@|k zJHYtXqI09@lS2ZX;&!@hy?&kjvewaJ&jLgM^qh3=6F=A|@Y~A&HQM{`HV(qS9 z57{tFYV&H_wdsj2Fir>Mw=H<8OXQ=90{KY4ALMbnV;7+Z@LF60Rh2%~x&Ebm&CxsA zaS)ii>t3}*oqY*;S7tRbm4_>5Mu7%^mhhQB9^nxgSh*s+!@ZZg`)>~cM(fMi95DI; z24K)z6+i!_;OG4}=pInh zegBvKhJI(Y8(7vCzyS^LT0n$t`}N+9Y(}y_Aj2MGW$^14|BGj=2#6oR)xpr?dgf;{SAk3*41lRy4GYa9dHsiyn}*p zFAg!(>}YUaS_NzeZ)m^PIxVznUs-8?X(;h9RzzDPc*sU5N_0DUEI8(x89MC|p*dDG znCdaqX$(>ffn-Z)XD)dqdKQNEsdiz&ID^toOsGRf8d|^Kd)T=DZ04VuRXu>)7Lbaj z-vcomTm>a~b}0Y?hv`!xOAqkl(j{?m~OTGa>{wZ4|tdSv;a zl2KE=cE8tB|Az%NgKik_f1-k0(A9&^+PeP`I>GdWUvR(Vz+) zrth(t6s?YxXg8LjqIwi7tZ3v8UDd2Y7@*Q3jjK2C2QDfaU)77Kucud}M#s3|*u}C{ zWnz~C!D&5l+37S|!B(()AnulEZ&&9t5|-E50LY`#D<4>rL1PKt+X$W-cTRFtt`|`& zYu@iQ39o2wr%h}{Io8ygwV7KPx<;f-Pb$fA<=&l(kWd6?{3ow!mr(>Ip$7VBG8@9F ztT+NJ!&0l7KGL0}nm)H8PU4uFM~t8;|6YLP@-M#3R5bvlDD4!Q#S;67XPKSAEC#Mm zpG3~~lirY>#NY1esFxo4P;FD{6%6;RZAyu>SOe0l%&$2kd*0FyEQe?0QO9wZb%Rk@ zcQAsgkUJ;<4Rb=*{{C+1{reAWpQw)@(~EX)v3o}8nTx(MP(3R38+*Zc;x#p2eCnW73 z8eMGuuL@nVDED6aceLteLa-(+&Zko z0fL1_*d*~fkZoHv&K2I}qYn&G=BH*5D-C4(xPuuMrsZNiu7Wi%_*Jjb!McbS$wkZx zQEM6sp%Kh%_Q61sG->1~$*_y~)-s{ZfUF^{eN!+&uZY>hHZ#MUfzZ5R&}>U0n+(Ic?3Fjg>!(D@W!iJ*|G>aQ+TX5UZq4z7UH;Qr4EJ{3` z5mB-KF+(zTvI*SX0 zVgNWSIF$+PtSw)J1!V6b_-9u4SVkQ2W(;8YLIXHS!%#^sE|06%vaWND_m^>0EgQ0d zg@tO@%&gnErpO+lo0+1GlX_MaH`A&cY2}?0M=RZm&)0RzG2yiODLOg5QCX>xg~D9Z zsE4j{3M`~7aPPZgKs+SHWXuA~ zJkFTe8p{YU_qB(1!KD#1ZPnpF899DK?|(HR^Tv|m;=|Tyf(eUi!zjy8tcpMJ+FUD2 zY)MXR)u69@7pAYa(75mH*uIGHsF=v{sInu>L%&;mN`BUafPE%B`l&&`zAfHz*pxos zSIu<$_Gaum8>GaQa7#)NfzqIR5}l{ERBL+oGT4>m-_M$ZFQr9bj2JtTb60R~@Mhdp zJvB-T1Lu--C4IpHouz2YBF`5vzLl?w!S~uit)iKE7I#D%g4*8^#9Q@NmckY0JcZ{=ygnF7=VMc;~wp6}v-HPhe>_h4u6X0o3Df?V~FT;ZNP%xz{QVosx zj-Nbl3x&3-BfGvsEA&Vd(P)&Z1}1bxt75K>-)yR3-dGEV4=+YFtQz!{sRn(WO*N<( zQw^?Mq#E?JL^br&2~?x6FB@i(4y{nSAop-9A``;T+3y0v36$X1FB;A*xu6PG!4Hnd zrp}(i(x^qnBB*=o26jK%L7r5jgw+Fm z6~!a9G!rGL7^4JNc2I&DDfiyvjF5g6Za}Eop+ZW?6+7(^H)aYnY^0ijGqCAS!f7G9;N$SnF!WU+2C0!O#qR24{fi+iVUEfg!GP{6n zNRG1@FNZE?5oa+9vz!dDwtw7xb!d*oqrdFFIoR8Obprs!ex>%9JUp=yi^!z&;8KDx)HecTG9+S1=R z_AR~>ofJC^U>n>dHO9gJut&`ZYbFHW*~|v%aqyv~c~HFp5hSrKK=T;L??-ALHE$fq z6-%=ciJt$P;hqh?zTu)MnN z_R}cOwKfa}sF@GZ8D#|fFjVucIdU2a_a|dOhlNz4wH4+Uho5-`{5sELNMZ1gF%8!M z(9FsTrB|nVdFEXr>723JM->nEBu*i^3@=U<6z^xXlGI8q0{?}(x5g@a{F6t1k_Se*=a#p^y498FCAu7;=EV)t|$e++xI4~{CiOr!)36*iq3s+c>VXE&ogqX|>! zHOrTceH|4{6Q`gr0myHY``86Hd10x)4Mf;SJ-VH5`x_s(IttRf z2yh%iqf{5~@YEfvFPs%BO&32ZB)RU*DS?Dw!t?-00IMchGoZl$kkB+^lOuI5x)e%% zmTAPy9sfJp=%|!xT8mn_Q7lBUyCUU5ZTWrrKF0rQ zWxR2AY|)7CuT)7hB?A<6VMh&j45c2aIXH=ASa>#Z_Y>Fdda1wTkAN5LukMf_I;N64 zf{9Bk_ewH;p$msF^OgfBaKdaG!xtD^ee7ywq)D_Z(I)T>N4<19!Dj&*>Xtngq(K#5 z28je4%$?5iN;oZhC6Hxau5W7MnxpP6Vv}{s6Paw%stPEh3BDV9v)qFczc@k;Et6>Hc+96Vi$|nus-}>Nql5eaU*2v^5gDd&1%ijMk^(H zm$#PmF~i3Iiz+HyasMI}APs|Mz8n&=sN_`@ZKfG(MzoxilCT-%KST1& z>3s@f8bKHf3lg$L=_zb=Ex$WP!GHnzkPSTCV@X|56?^{8inL zVK`bua#E`{T$pSeWLpgm$y9__q@itv<}hPp%Sze+t_2erTo#R2x`tV)GIW`I>*e-< z%cK2rzxUvN3;yxz_j~xiM!|kWcj|JR*bPk%+nQ^3YP(doUgT^TdUG{gKwo2^#Rw^8 zo%qKfE^5!>F)ZNRSSu_&;Z2G6o`_#XeV#6;tVS2Zm}71LE+XANMKic@6=KVwRP$YV z98rIT=WJ-6bCiD!Q4;0nH5bRr`$IxL&pRWxx#M&7X8tW>+wj?&r77UG++!SbyLk;ZId&(`Qh`5-;*poeY@aFpRmmD~6=W+8NL5n0=1B27M@ld}XFzfxcj*Z}MTo0yOw zt+YGe>HS=+MuXv6JT7$c zQZt`CLq(3w94+y_5@T7^5e1qK2D~HB%0-gx(by6L23M8jF8WxZXk|7%tg`-04)RXwjN+0AhldHD%Md@ zw4q;&1%bPWH2-(CfK-OjKLb5x=QdY+8e~zIxjVm(%BR-x`fA_pI6~^EVT=z8n}rJK)F28uP)Ub0B&#rz!^*hGxLmS^ z;+sdl;QWB-2AR>}Ph&|(YP1SdI!0KzM7Rh``-w)xdym}zEwqiXw8B0thRbX=qIzuX z?_8Bh_<1ylx)DbSOJYE+%&ZL5o3R!MdLDvUc-ls`vEHq=$-n*7|8Ch_2Mm>stsSq) zECHRZ;pDUzt29%(;TXsft1%pnbDT(o17ai#C@hnjByWIN;1n51MhGZ#V8za=1a#8S zkjTpxXH#)xS#9%doXOjSxX^r$+ZRN)l!;b@S{LS$JF6unFQbFC(xQu^N2FmdO4*a? z7nDE{S5qbPmS-(&h4I#v7uizWVp;U=%vhi+im^gvMpZQyEJInu8l`gDD}A|*OJsg_ z%4PN8Z|>9fPee<+UROQ;X?OdXC6j^=uC!?}RzuBnZR^ove{F&hoq*hM{|4#}hiDha zQj~$(TTKC>v%KoUWOZh(CtH4dd0Cu1F>X6rfK06A-pkRuDoM{UOKgwKE@-J0*;E9r ziQgD777Lsg&`u$WD>KP}WED`dX)cwj2kX$LKr5mD=J}4F1?QQ#a0*hree(kMKgLMG zbXCV$G63?x(a*AE7}~9{GeAZJj@CTG>?s_fP!(fq4y3lKEsNml30XG+C5)g_a{qSj z3;G@29gJW_?{$0YTaNf8wykN7Z3`>6WS6}`fbyi$n&H*{>2Ol{AbRkEYnkz z0Rmy}e#8ibfq#lY*v<^-<;*Hkkgf6~I@bBSjdD|Qp>VybK1$Cp(OEJQ6+Zkzoy{2r zy@T&(L7X?0zZ>b2r4ZT@Q8*UM6BkNToIPwHvhTaq$ROQA5b2w^gmMH?_PDXC zXf{E%hQpGc8VR2>x~5Y{|H6y5Ut}|*lNbfaXcGW4SVW0H6r)W7M_1%guw8(nnmAL~ z^=3ctHD3{((}^N4cdMRO3y-X^QBX#VwwlOpk!ViL=>vN~kvG|MoQ!xlKBn#B4VAh9 z@-v#o@nu2zd{Zzfs-}f~ye)|bF~KI)ViY)nxQZpvcj##=R}AZ+>~#xNzqtELFd}4< zZAcmhfCV}N7YA(4Q)|qP;;1U6Zn2@bHYzzIIjs`Xw5L*|;=!+|0lH&MFqPMu0yjL1 z95bbpVv;qz4#0Bk&fi|H2_7B|x3IxxM=;`72&1=bMc}b339-tP*CbtbgAramXw{cK zFP@#9E#h5v5hhDwMJ3@g6VjtnoRMF9y?=06a~8^uxlm>p3Xa__g`VbnFm^X%=r8@4i01Fii4^Bsu zdpyC@wz^A95%%oW!Nu}}`8Av_#{Mcmz*ot?u!Q!&E0$9)tkTv93&pKBx;Q67v2%)D z-wJbT2IQ@Q?KZpidXeZR^3+6Rx|7{px*A%QayWL+&DSGrD6CJd7iTpqe^FJMw3+#B zCZjgp!RFM&p>FLE$@!E0mM+~Ws$YyZsR&Z$|JFQR(kqO_v>#RNcz>tui z>&QhfykA~02w=Cyu7en>*MID$X`CM!Y+l;$qcuveHW?B4EGze8+Oz16RbM5*q=mh9 z{tFo|77_jq*e-M_#yo3$r5}Z1dK0*)kr3g6D2N@EP_XHbj?_Rhg^#k4@j33@qbR0P zZfc{AK^PzL$dBMFnX3}tgHIX`rs_@~jDV8W54MR}!lzCCgAH5}c~u_;P*sv_m9&K3*hPcu`2BmCQB@}|#I7k@+xc?$@nBaUANfoPaT45EiF3eh7MhjhOV z4pG6T{JjP&QoURSi)bttLL*aSCLUcMRjU+%{niQR>mbWQ<|8$)Xfu>~LZ<+kBCvDf z&1HALgsjaz>K{A^22qeX+@a>09#|Jt+<{Fs-Cnh1M89S()Xt$i0oggq)uh*@%R^D3 zqWYWMK{T4&e2u2A-lOrIa0c`ob?D49;;%59A`C*}K&9+0&szQZgVKxYJs4R#w0gMG zQn^^Aj7fc>hYvS-Lhz-a()=xrO^AbS2fs^(S&RMb>6XPh(8;Y}(qxYH#jD4{rSmx4%|+j2&hTL7eZg*uR| zlq4Dxj5v!}nh&RNJ3L=Q#bHVK$1ofM2G{?@1z-`h%#fcn^hFqd z5o6E~h7skFko7AS5ZmI@9Hv7lTA+=4xZ`19-QmapyY>JhJzF_|pv)htB%oH~yps#$ zVX{P{s#w+0ramUx#AH#Zk$>0&FUmpOZBPpw!Xm$Yb?|z3Miv;l0Q(j7HRh#bZG_NPfrL}{6}kW3u&pDzEw zTimiCFEKxreW0tOw;#8`Xeu=bd9rR0_v<*2+Wm1${r^5jnD|ow{~g1BUHGpD|HT&i zq-c(~?EmXu*y$EZQjEqN%XCNn!!18H6=1T(GIY)GpZJ}%HEihEeC?XAJ^or%7eQrF z4VoQv8t}EifBbmM|8BGN`gr>5?)29^i(hS z{paZw`y+$2AFbTkf8NFi4ux2s3P1VYx9|fUbky&!Zy$PyN2`QHj)s7( zLvr;+{U-?p#GBI&&XM%-RI&Skb{MyT4X$$Zh99Nh;81U z=%>1?Id7cP`oW1`Ms>S+DSh3hcOBgAre09~i`QJCgMde0n^ND*XV&?jT-p0$_W9pg zFXn$(Z?CN0o&UG-x&HHgG|rdy$C%X!-PH3m;6$hMxql?${2_=u0&XH9(vBYE_z(WT6rdP`_Y?kL zr(gQF$y)3O-Tbq#BH{$qKj!ZME16!gaodHQx(~Hv461pOc$z2LfCRa z32b@#Oi=6~2{_W6I++yBh-f3>q#^8akFKDs;q zZ{wry|NBQjnHvuN`0AX2eevgk6>q;JZ8w#}&m#&9qXJGq8x-%8G)IHrJWM&12T;Ud zNYZN@Q9>i)J2%|b1H6z^!J`~5I&bsf=0FwPS+@aj?& z2o&_A7y@%$sSCGE)QBS{cg5m~F+)S@<=s*16qT!&U2-cG-njF zu-I;vs^eICKHiy44L<&`LZ_)ZB%zd%Lt((CV-&OS(TJ7rLCv?X{`_kH=T}&DMf^Bz zq)ud_66eK;mY_Py2XMREhkX5ka77KjPJ`22k%k2gj^bE+&Lv|KihhVwk{K!Q4f_L? z49u}$qhhesNYxmzMI0LzxYE$<$zodUCRd`^GnfTCkv%6-f5!fO#%Hf)FB!ox9dUFnZUa|ph-ElUpn(l5=;MaBZRmiTR;5fOO zb!pl(UCGVBL98z{y-hu5{N+Cw(X;Ejt!>V{rEEGvxP2DE-7){y{+Yr5bEKs!CV-vJ z|F<7KD#`yIEw9}1|F`nFHpv5iC_&BPt9Hj<^q)tA+)8XADFQe%8V04$u9*B)Vy1RSpP6KJVp7#&4px<9Rb_bf`n22}4^GEv!|xpL4Zh)` z^EaGrXL%j;NFayTq`dd$xKe>NuQW*#k>Gs(@?+(yU2m^gD+OJKlQ2yPbl65H7^oi*U zF%u!jeV|Bf=x~(gSisGGu9MDF>MP^oC6WA0tXTL?O`~T{a#p8KRNgMrm({eYtfSmx zKWqWK;}zo*E;@$hl|(GC(O2BqpSccc=46F)~oe^p4Wp+MpcFTwHzoXJ0iUY8klfo348qEx#QTP!%q4=mwsj{RXv68GQ;PBsv0-<7^ z(nI`EzxeONawQt6Gz}%njTY14Rdq56D3ofdHWM_JfVKz5e-|s}Z1?W2vprx3lGQy~ zYd_EWsFusiQkf@_iqe*6Ub-gqg!>?YS1=l-$taCbi5^FTio|(UnFy_Ye9dI=fRBnB zBC^WkDfTH>marnl@TPViEfY7q5SO_k=a!VEN1DtTx~_xE0x>6>UKTWFG#p%?a^u>7 zxsn8x$gIjHS*Eo#ZyZFQvIg_Ci{0V7I*{AmAZ+5TPIru%yXbK-2J58p;K#}cibkhY ze*+`=*7YGiE5oByvJ&e#6)LxiMo}xIr~^)(7}1DvOzaJuEoi4hu&Fg1z^S$C2XR-S z3yUWLk*H1rCcTaN=XJO>mCs)Na54;w8C8#x6#XSpk(qX_a`1~amZ|_sw9~HbE>N8~ zQ(=qLGZ3^O$F(Z9y+$cvAtynBy(lw{M_Dmb3r>=}LNA3@5`_`7G@!v0{QsfGuEll% zzmQ%6t<(jI*vF0j+vN9{NQ-R{*(n8PAs`crN;sw=vblth6JW_DX5dpP4)YAYrGy>M zJQbLkgF+vyPdYO5O#E`ubUJ3Kw@z{H6_`YvVJ<9YIkl>WW)Wb_5W+B;e!miA#HaOb zz+w92qbP3j7nBN8ZXCq~nnZw<1E(K`lrqkGr>O5_Bo=t-4oX0`4(tU*aWXzt{;<&W zJ7oyqXDWj!BesTI&6DWqi^EQ71*N^Y^JMEr8I=9H^e{0=@?@}B1*MV6Wr|>&$@eUj z2ZW!Aye)n#)}XTP1cpqFA1C?m>5QmGw2(4y*XDtT{y|Mw4Z<3`8p!4N@3|M&6r90$ zo2kqw=|IQXhNYQITf%8LQmaiuipdN6zXOA>2cxE6D=e1P=9^*4y>S;FOAP)DFB6>}Fli37~(GN-UXoh?CL6g4m-<{Xu9 zGsSRuGfo61-B`Uqxr;1dB}sPg>l05`DLOaho-vyV%XZE8wF49u-soMB5G*3-0eWS5 zl7^XL@HyI!S@}|O3Z#6wm4r_2k^WYJ-72KBcUP>M%W>92XR5NHuJEbp=aa50IIqHG z1s)YA(T&6z-sf8)vz(n>)^4qsHrojx$oB66eEfYm#gU`;_o6hwkar z>U>MqSm`hx@am|@e7J~kWH7<4qv@xk7I7D`M41>Zq*EsEM+!yMZsgfw%setYqR9r< zR0GLaKF&}$6>vs*HSNOuDH*y<-_BTHB`nYoDrBm6bJSOFBKLHZ$_2nz?3Q^sxQVAj zdpfUO(Erb}|4`4a;s!Ru{`=AT>RQqMV{N5#Xa8{{{H*#jXn4vI!=T1oSdrz%)pKZETDJ4PgwyI zc4ZE;Ecz4$3B9bU=zd{8821VffC9i~6>o-XV+CiX z0lT@(0Fo4d5>if104Alz@gNC$Q_3OtRUJOzx}o)wOxM^D(RRkYzFst#*vMI@6B{Ny zJDZrs%v#e|UkL;%-EGdiNzFu*x^)HrmDXX7I23 z7_b>0!@urh#%XxNU!0f4TxGLztJM&ZYGUkf;g;^~NRSB2I9TQOC?7jX+V!n09RnXR z7K+~w&(IQSOfFhqVV5a~XXFWn=xgC*Z-K{l>J}`87mPw^ZGTbKT~uM3jRl|o1mmdv zKwmd>zOn0@Cc^S9Eg-W@!r9$8D62@30JDxB3Jw2-iSLimN?AX{){&YHLd^b+p<1#LIWCcK(S%!q?z7`A7#*^Sc=~P{jqQ%1TN8)47ZPb1NU^|8MZ#gaNRh{g&lK-#cQW2~r4ldhe{x^b@+_`~0;N z$enSTqGU+rQ4;znC)IVw5H6vHa>#*C%`9q%y>iOMclKZZ?akhgKOI8xon&;LMklAa zU*Boqx~wkZ;@GQO)x`GO!=Luw98ix=(d&-^PZ21BZi-?>7{+HggF+R|3D1a|x^Qapn#R{b|{_Bw9D7QOn<4cK?hpBd*rGQB9~yiy-C&i|Fw z<>iw9@7mhk`F|UqZ+Z85-}*1$R*Vv>esnVCuqWQPo;tl+ttEa1`%TyQ3HBz(QHc`@ zbwJs2PT`nFpPTdi6i@QwkW~((yNN?+(`rG<;;>MBqI4sSgt*zUv~219r~iGhvE{$_ z?wK<^!JkTMOFu+fOW&h}|7rm+{YplxvEU-HZlycoFDSUBFCrnP?;^bA0=o0*Ga16T z)FfW+z1)=<|Sr{UfEWBtW5tnlL5^B3Dc9yI*L#Q)=e6^nVM z#SPW^tOl$?P@P~P)ipe(RksRRpnnl%q(|(9aMbj|xEqBTK-j=>LyKoyUGw$SQ&8V9 zF`tySfWj>KTA|=6WZDo>E)-Q72#=9af+Tk(RN8tIEpx% z9kwQ-hhlZ}9xkEoWQya`1L4?HK50CBrRMM$$v0>lK+p8&)YIs=;j6DUNcF?X^T&ai zu6a=%iQO(J|#M$;a%>m711 zadYp+J>1)hk0~8+U;F(1+MikcAMM^N_A#CRTkou_td{aWtl#B-xRuX!%XM%|8tKi< z@Pps=qzt^R&FUcA^Dh|KJmV~F@|~1$L9^irGA#g3%P$5 z#AG~`r)XmxX5C;EQgE)Io3o`6ngQk4ZM&g@jOqLV6c6m}&ZetCr>8q_UOXp#aqWHj zKCV?2+5I0=XiG}ne8OqV*rIjK@UirDhyX{T!8}W+SzOp9kJne{EIE$nFZ;{9-H+qB zi~cg2e^y~Kn6qRr$xHGgDJl^Lu>{uYHq{gIGiRy`>u-0U z#QG|LFvvnvNZNxpaHmLmA(n$~urx)UH9f+g86BFoMnO-KSzNK9UU=z2Ibir@WT5cN zs5=NSH3U@jQe5WpstH7Mq%DEwqBu4pTS`(vN6GIbT1xP8WnK1&#!2 zUphX0LklL_&-gV!|KJ*?WHUV*B9mCII*ph5~DTqhQk{60l1_N$=_!!|2DK_Wt|NFJ8XdfBipi4i4Y` z<>$Zt?f(YHUEoMgPNRQ(91P=R^h=uM<4?U`WKL!qFJWloZO9FN$tN{>LD z!20yHPF^xcQH+Ysq!evTt{rQCr0wk{lKai$Z8xQu`@!JcKTgBoBYA)_4v=RxsxZXc zLLPSmbjbY_(gj5-wVQu_QnWuteKGdKRpSND za1fTFX;WQ}QbBQ@;SDu+|=2u{uu@3%d zD7ugj%;xMgg^BnRc35hFK(oc!Bm9RnD0@J-R_>6Xbu*xqrvGT&Y+k#ZKhVp9Wu^oh;ibd;1L#{wISAm|I*cgxMH7<-V`Nb*Ll|q@ zEMn6H*2fBEE9e&@yJZK6$r3Q;##xjBdwa&oA<2Q)YM6`>Ra0>^a4ZS+a}6lzykuR_T+fe5z$JDHZmwr2=#GcZnH%sRjYS7_U;My1=~} z1dEF^=WhC;h8{k&Gh9oT*=ZVP0Gzsu8C3|^&j3h3x4+$kv2!D4-p?s*0`tIpu>~SN zx+xMnO;q7~CDT>gP&GoV>8!1Zm8#)$qYq3!8}zoSp1;0Ys--yb=!34V>}7SCg{_4T zOyO?;@Y~(-a6F*65`5rAu_CZcgU4|m4g3}BIJI)}qCFTU0>TF9h+NUFz^N^F8qDoW zo<+e3mB}V=2C@WiBz6VHF)5zCFcekrM$q7b!YJ25zaXm6SOfLmVflv-anZV)#&>`Y z>Mei8COOz6^!#r1gW14Z@{3jv{-uqlro18#mdv0Qu3a-9#G zwy+0Aw}MkqsLG}PFXAsJlXQsH{DvDOVw&$s@8I;mIY8ns1-Y-C~ci(SPg2T z>91Ne*X635Fp|vM+`v}cjX8}I?jzYc#J03CxaQ~`+;R8FKLx=2*g)C zs8{Das8u-%8}s`)sOM68%tKc2T6hvCDTcBJyoq{7wVT-&O2dYAKlo38g=@Iy0F|pg z^q~u3WrG}mY&EJ_fz<*lz{PuT-Wt?HK9mO7oXiSr+3cd)+s=MnFIM^2R;fz+;#E2q zud?#tgT1eK!X3^1*3I_s_Z#;1|E^rEeYtAOx*8R8uIxEVI=i@g0K4&wr9;-bu`{x4 z$^Dr|zJ*6k!~X$J>J9aL#eUv_=PR29yqrdqWTZ{*ZK87_W`9Ey<6)xG&&fc)6yn_7 z5XWN41_$RzH3pH(zfhLYK3hv*tWuvCZLw)qQbZOEK4n5)-)Z{Kv_KG>V&1%`#m`A! zgmLLfnC0Sxf=_q+R?B}Tc}mf|rWbvRvIr&A$LIb^3%Wqz4_1az2T@F>*hIi|ZMc48 zT)SkPKhR@sNjB0j$Rg~KZMe^p@t}uEdeFYx1W~2t^Rq-HvL<@!Nn@dO&aB!o(C#xt zHncVgFj!BI2M_EXN{G3K-Wb7(&0{MRkcK0PorOBp-wpaiPqmy7S_+g4DV!!-LX0ED zL}S!hho8QP;IXX*kI_7m$H5|07q`zoM5@!n%XG-Y`&kLeC)%7S%FxRTcp;f#l z&fz;U$y6^R!_!?WaGRU$1Ca$aX{BUAij7`G3T!V1i&!(DS(wKRX9Qc9VzO08J*$Ch zjTo;DQwFJlGf|4Ad#OLbwaF7R{>65q(YUUa)Y4tOrW9S!0)tx1i70v_%Q&Bm&stS| z>{yN7hS1MFJ~+bioX3ZXc6f^i$m$gikXs?o73OLM0=;@ipnr1&T5dGAN1!iEn}1`} zw&{@DG|VQf&((?UMV97wLv%})TAHS2-BX~(Pz2q%>+Ju;8hq4$ho1pTsMrUVck8cz zMJM|gZ(iUl)TUBq=OG$O^J^}#vI6UpCgYP+e|?#Q-C+z$)y!xBG!%-hcXY9KXMJ+H z?}?dS={V1u{x}{WHi(j5l*FvbZAxlxYh;=i?}=4`dKV`oV&q(tvHxhDLzZJGD1;6I z0z*G0eO4qdvXU6L(3ZSAOca}sdkPN*+GWZMGz(S8O@I|#5lAZYbAnWcWOcAH&oHR% zSx80Ubi;^2O^z)II~Oy7;>37KF#p4Fh^OE69xm4&zzJ?Ix&KQM>nv#t>59loC&WYd zHQZ{FA?!HZ+<0b_Dv*?E3RQ1VD>&P7ccy;O@2sthqEA^Vl5$X+6c%c&tcY51eR)DP zvPmq|TJK0L*fO)LsaFf{^96Y;#*8AC&;|VB`$GLxz2A8=d-k?&RI5exd>Q3vGNK%Ua?EA(xX-T(HcD}^}J4x*X@#z=+Ptl(RcLdyJF?<>GAh=$!#9C zGnGI+D^!2V&z(6QS3KL{XQhdE)pP6FGk)ekqohJP%2TWnbv*-M*1iQX|egntT zJ|%>dAnwZ721q-}rjdN#gQ%vBPFnaj_y z?2V`sls>^G#jHaR&M+IJ4&fN{IH6G;5b0hR3^?xtoMS_ji|xnV&@SJUjGijizM7OA z&fO#h>Q2UZ!<#bhxM8n`>56`m`70nHA7ufTWqoWIDNL%cqQr7OagC9b&QcR~CDt!m zETMTW1q?c7_G0G^^FPEUWZ^I45ZB0(VAE`o;UFSjZ68G=0$N_7?I;#i$^(*jzmFFt zT2#5_QVKH|))nSX_;JPE_D3Y#YR@X@sL-wz?NykF*`O14i?}V40MJ#R(y%l0qRj{a zm&rK8F1wbTa+si2KL+Jao|(p2&)YWC$CJp;Q#4Q+QehlYFz-Z__>kA ztt5|XK=ZAz0FzglcAm4O!Qd=7&nB%Tb8F>=yc*IuLyD2Ztr%EgL=$ZpuLz=otsra0 zjK1F>kTDH11PU-$nIqnU{`;AI_W1oM4jkfo!)M7wJ=a_t?Fsh;+WX8Zn@xxt*QNPn z8)z8%#_xAjkWmp?zi7daIfN!`W_BgMjiA4-U>Htj*d)2-b^u$Yc%d{h;9o{0 z0@lO_9q{R!BBms(;N3RP_-dYpqX80s=gh?H72}vPPi(iYEKtS_8!Wa^)kRJWBz%0F zvk${>Tfkg&Tm~e!u{<#1QbsX%#x$kS;*Wh=AtZyOtF|+b`08D*l=x5Cts1=a!8E_5xZ^~k$l;2OSL)QO{n@p zV$Ar2HwR_`_6Kq&6zZgSd7#}_HmvKFpLafdD0QW;eL<`&6PrK?Nf#l*sF+_D7`OHs zhSllOH^akCGBFcOS}EKSCf~cD5441C05SUi+4~m2xT-SY^xcG4TR{*|Z>J=gNhgz; zByAySOVcK8gJ}|yl=2QYGdIblGjoTzcajDuwtxsei=ZOD3WDO|D#)(S6^o*v{;RN{ zvOYmsMO|G)SJvPC@ju^p&bjxTd+$7w&ZGr0N;-4zd3@(P-}%mWzVkg2u1a3K zmcAlwDr6382T2gwDq(n@m4TnD$muQaA-k z-3XsD$4YQ-NO1Z&Yzsf{{avNQC=`xUFwGbRdHder)3q2!p``+G6g&jLKYJDbah5%l z0(|&k!P}=e{@ARJf0l;-vWz6L9kvKGrBl(pCSkNG7pLj|ad8&6CE$>Hf|N_ZMwHMK z=v4`uA!cJ}pm>NVyPzR6N0=Fr;u_HN5w{$sOs1~Z?D&&{K23-zqb3b7JT$V92pf}2 zlYT~~$VQ&f0YhNNPD(()B(yUR6YwrhGx!LElMo7n_DlB98awQb(6y;(YJ8k}5J5~= zY$B^@R-D#0(varc0llVyRm23|XgUaoH)V$!SNaCS>|cfKvghp}KX*cw1%Rg$UaFu8 zB8{pbuMlQALQaTNR9>WxXU2#b&r!5akij{*uj5>Rh_iG|jw*y$aE{3&Xv4ZN8-to=)X)^9+Cw>VSz1os^UZ2N`s7SW> zT`}g;I$E7|_4Np}jUp}++ac(#fkL};*J!Ir*tKOTijvJ#M?w`OuyE|ExwM)Z(Z_OR zF(juVO1)7pG>;dV6g!l~NNWc*F3Ds>lH>^sV-;sfY2t}XESS&6tvyPC1ifxA74NMc zmyk<7uZxvu>Ef`66zLn*tf&N?M+)}tx>4ulbj9C-2YNbn0xNV5^yJmy-7h)Nlcr`v zWEfI+!%3Ri?BmXdsfJM#KZ^GITB5?2J=2Q0UC0iVb54H#hz|K~7LKjWuZ{^#bHJOAU_)-`kae`e*wv&>>Z>g|esTI9dW z9Tj>DoT9}fL3vXH(d4@rJsfz_gbp{kPD%vGSf3)a3;R@l=Xp5CgNy@*8`VPRM#unW zKqy??#0Iu*QJSNzYa&WF9?8*4k{mCP@X3k*uSz{WPSpVb1KIY*^)XNgB((_*SR^^J zkAguZ8qw$ujA~N1rr-$Wo9Bq;qmI3D^HJj@&rUXKF`7E;0s-thCg-5WLNiW3O(V{~ zx-w7mDElrXc=Jt9Cmg?&v6*q1xn#{p>{H7APhK2WA4T^6)-`L^dGbFu&*gufl~39D z27GE78(j$i*`+&#_)4njv79=lMW9qi&KfteZ6dFQ$6MTcvx%EC;mfUO!F%sE3R|>0 zVPLZoJ+rN)rLFlaX(KJ~P|MsL8C<6pPr{WAlX*aFArcOtQOZnQ-hOF*X)x3zhqK{r z?03>i$C}B5tae3CCmcM04+0_f8Za-urHLB}tG7$&hWK7L>=#VsEWD&oNC7%-+8X%@ zD4|vnVLP@Y_yT6t4A~0DjI3^rr&uPG8d?xe+gI(ap{3amD9^q^i}9?6H(*Xu5~hzH zHw=?L*OPc_Go_?eGE5eIX-uDh913VLNJnDVr&WXaE+n2pd5Iu26ozcNG5p)?=oZN~ z2)K_x`amoeQm)ycaGb!}NlV%vcS~eo0j4GjgoU?`AwfFfr~@e6qz=M*5sr_n&_G&G z1}+g{0t;MJ;HMQWn>Dh*KrX#IZA_+>-P)8A41jqeg_|2`QP|1jKqvsFwz4GyM@Ue> zfejk`3;)6NFhRriJi_=_I3e~NUsO+H=c8x7jbaJ$NUafCFA|@M6RH|n+Zt8^gsiY9 zyD7IdsN5)_NUd1IS7e~wusvR^1WLcah@K{*Zy4 zEwvCMKIa7^#t@Fhd5j|qd6@xfMbR!G4Fs0ducR&sbVM~a(EP0y*)9J!lSgy% z|15mUuis0h;QAlwMo^BGmI2%*H)V=~hrV5syfN{sD3t&I@s(A0D} znwn-Cf&mjoNotr-le}O$G?&?vEN?ZL#B3{Bg9sgfSGLl}iIAHtyX_jE%9Lh}!+g@t zJhMt3LosQB`DL(pA&Und(F#Yn%?-8Fi3k6Xk<0m6Dnd>)vW*Dor*R`TR96S`Xgrm1 z&Uf^U;3h|&aZ^&fy2Uau*^;FK0GBeyE^1vP#vDPZZZt?Hqx@j ztY_ywxAQj`Ug6P=UR9G;q$n6nT(RMSVgzZ-=7h*wG{b0C%bDozK!toYk;uZ`urM`P z0-onzYkVr4KE-8@9fy^{zMkR1zAbO+8iMb`16?}@yE-~M2gtlIm=d~4fdYZBR~;Jz zC5f#F5J0lxnc*~%EtBfhVFK0N-#^ed)Hgh|r9Z5YKf}F!on1X07ciiBhr2Z`LuAeg zt-LsRQ&(4iM^E>8U9RpDM%v06IjhXwb@ufR4fO3C>Y`M@dmG6bY9g+h1(@kfdfPnE z*U`D9V{l0BP0tLc$eBln4u_M5QD8@z)(m#{!}sAGJ9~z@q1WM_zP^6BYjU_COQv{# zWYOp1=m-P>RFitU;`@;q35^6QT5&)>x{1%x!Y;(DQeeyG3%3PrqVN$k1CM%kb_@>< zb!_hG3b`yIgapJ!T1-7WrddKa?QReRjDeq>J9US^M+i6pR$8ey()Hv(q$Lw@DW$~; zW3v0yBgtVSZH$7dDVQ5J#|ht}ZZDQ0_m+1AmY&iGiBDq~jzLHXqhM}c^{ktMBViNm z9g5UryALhqA^o22-fdk2f(u_=Qm3YH#%M69hYG9+%Ssj}P?kogpbJ(D-S1=~g^G+s zXE+cPnAk|jckfWhPBC1HxahyQg_{2Bo9r0FJGypk?iv`}-reu%Jwe14-hBmn?;Pms z_jF%wnX!YNH!3DGmQ%i$StgKjR=Wa-(~oH$Nsft248)jea2(k`xd_K$7a#R@NBMXT zGx5``Vbx-?uFDlVjO#3-r?SI#YeoC#slP-3^bD8i@@J|K*k|}kW5(_%A7=QV?Sc^# z_zAG)ae}I3u)7x|#^H|M3j~mujP8raKtq5qtvcz7rDWXOV3dw~VTfMb`?FlOqUf3^ z#%S5ntvQ?{u+Pa?@Z2FSLIb4nU_*ZJur}0G*2|Gzi&?4)bm#P>jH=}5Ws`w`E6H}% zYZ>a=m181~4qxHm*=@Ndi0-w5pwkkP*`3VjpkU!`cUm+sJ^f#a`rpGc0WD_#*|Mh9 zqyKG*&gp+=w6?jmBbg`~Pfw%DuM_ zBEdMW8EB+Y+T|~&HEPe{G3vR>ym%+~F>^x&SM%OM*2TOPH@{PmyE?Bq^^s!3Y%hgTjRbB?71 z=JCBC+pc3GfZ08$gAT}pG%1KPtEkH$k|ox-2u#c9iT5f-y@9aY*i$HI$zOj=|v~=7Nv**BUNW> z>cM!m^fqj`yZ5|~p6*VLVm3sqOEHZGuFk$gD`!200gJ4{MkRW-5{*RL6png|_+fOv zud`BQcM-75-+~=0ZX!^mF!*2=!nP#_wlEV}bfBPw!D)<^UL9jFvkG<`1iL>_6hnP7 z1c)u=3`kT3JNsvk-Ja6{BUSuM>wC1nyy~QHRZ8(fOc-$+?V(NQeK{$=bO(|}V{<;p z4IBJb-1#rFg(h31CJQ!#Hwp!ss06$AnibBz{K&9k7ePXnmtEewD{L;`y;WngK(5?~ z0PZE&t(A8+Ce&n3uFBs+^eMKeW5O#8n^@2~fwEe-s^Q4Dkn0k2$Q^2+^qkFGBX_>z zPBxN-CMOPgRnPbgD-fzJm_QK!X%lVKL$As!o?yY`m&tGb-Alt;z1kzV%#558GBV&p zmdci%0iUIEShU6u1rDuMT+`v*-P!R2@(1GdMB5cy*K8q>AKoN_1RdRjBJU_=cDSmg za5-OgFqVI@`%R!9JJ{>Sa#1ahdyj#90_sSfvy7VeEaSJs9PZjIxce9HKrB)EvQYgI zU%ZiJN{l{QePuG?q z!TiI1aAa?Yy43hM7)wDFA#kvgQB9W56mE|xnK~C9ET1)vmIQVsaB*xT*j68+F}>Kn z#uGi6@vNS)Kyzn!Iv_3N2%56VDX>&@^%hY&(kw(c_7Y|?LWpcd<3=vYH&B4X%H~jW zK(l+0<4uAvAO+KT;Fbs9po<_2kAacPScphS%Z-sABYE%6sI|&E3})37UE35}t3+dM z(dM@3x=LEB6jVJ+0iQTk&4qkAN5Tiar5=7K*J>(@W{ zQ``VUJ&*x}C{6amQX)CAC{Zc~OmU(_k>B=9!xUc`rqe8?2eDavVi&M7-j@+8W51t4 z>?$Gn6l)L2i^iZTC%(x%_h*f>m}=T8_mq+@_yrxTI?_#ALn)}tg3XwN%m{vfnive8w`v#!Z z<~8`n0ApL)8u@p7S5F_>=>kE+e@?II1oQ!Qx<`2mK@_qSRoSwwn;bKg zFsBDH8+6J-QnVbt+IH)iU@TmuLl&DS5BNY#L7m z@$aJAQ9dmGP;&221sYeP)GjRq@A`Dm~hj` zW#gLAU%ql0^ahd7A~gJ2xrR&lxD_lm%5!&i50$UWcoHI2`Lvd?UlppJG{*FFkg&*X z7>}8gMmAAw01$c@=%uG`TX*l_%olGFV>XVgZACaj&b>DaB&nLKy8dq$bL@~@z6!t#siJHh7*RE%67Osh`)#c6TS)Gc_}GMUd#@D zr;qZ;c%!6)AZdwE3IKl5r5C3!SPUPXrh`_ZkHU1duxNH6u%*G5xO>QSjOraKF@{n43$uu- z;&Ma@oeSnK?TR!+ z{f)WAF~41*CuLHwHMTG zuia5QSRZmI2TqxhEMeV7Di{qbXTb+FvCvgWVi&_4fuyTRH4A4GID=DtG#`^w4C_sy zV>;+E#x*qoc_kq#zY19{VIApKy{U|*kiBnxLn2eW z@v`KYWsdnRNU{LO)d|9{b6K03Xi75R=4`M6jz-`<*h@|ffowuHDA-+u|0amMir&ky zCl}STEFq1+$T4JUzBi<9y*-Skl)gtx)X%V~NW`A8`gVJ?8v;0GFfy3IKs{R@`Dlgj zbQ!`HQ-FB3FVP{xOhx!Bc`I_yyHABs-oiX!u}DZ963EV~AVrv3238Nx0Bf@chn$s^ zXDhV9kZ9T$fW}4|cRJzFx4?>pl^RU>gNpgMB(O^8r?C;93BB0^&*(&M%K1$Je^v4n z@Cv0*foswFELFBG_^nKKW-GQVRYj!XiZ3;1eL$4sCKMan(OsEr^cw=YX*8aB=9;q_ zV|NyWTN3M%Hi%gLcx{1m4ly4(XTyq zgfQ8>0yQe|4Ub-6wrMIp-`S@2oUf+YrpPF~=$wtuB}ln;G0syQ^vUM{frGiu0R^@} zMi}{<;XsHjd6zAci+7S;CnJlgKJ6XVMI~zD@|9}S_l#Zlngi*B&TAYTozDFT)s0FGglkDjz7NdEg zn$jX-6e`kC5MaQ_HDI!>k2_Qf@(w38y%86yg@k7ok zle#sIUFimCnnK`b1IW6g@iU@FDt<-)psYYxi+(mUikZ>k`lufFl2F-)Gzv>&cvp9C zOS3RQdtw7Mt57HJyvm8MXmZSQ<6&rA<7OR5W@;RC*FsbW_CU1_K^Ud#SyEdzyEWbgF{)aMNVj0UO1kEa#xbB5=D%fmZ<*=Rs7>f%pb1i& zND~@b*O~x?K01Z%@px=#+?%7BhEfrwV$>-_V}W28%fm->OD6bjxdEbbS3 zOeH?{9GzL%i-bn7XiNp=cwAx$b3A7yjLCG+6K-?dm;|?1p&JlCEkiCT#HVQf38rO7M!Jxsnr_%J8PfjrWz7M}nWgA0h#yB{<1 z^xlxSdl_Gvl{V5NM7rM%=lueR)vP?F#PLk3I#|SekZ(>F!U78iU^{K49bd5QXu@=U zO-jEs{AHuWJxr0H*ma=<*L3Dgq8oO&^$e08gqVXBS@rZA21|+?NqNX4aP?g>I4%H^ zx@l=XBtD{&ipH4S6J_6WVdsY`cI;4BDP$xr71kHn#*r0DgB1e|puKGOE9p}T*e7N5 zz(F&F4WW~Ufm~dWSrm1I)K=qykcW_S0ZR66;3Z_ngD1~&Ed0VtyVPYZt!7t~KFHGz ziaQShFhmMajDZV@X^l)_U`VkoH?83uvrP)Bz=qJ!FrJY|Ww(dX(0$tTZ9w$cVCR52 zkBwL4r?m6`;dy`*IsdO)*Wx+#zyV69#fF zt#|4D`g?X9p36o)&kUaVTXvzSi1&mY^-uLCK`C!%PIhl5in3%4-0Cf9|4zaKNnKCI z&+m}A6 ze*O5OLmFDq4g}kO*L@cb0z?sxWiB9>9lJOdCy;c&j>R1aqiH~>018}CPIvHfW9(=k z4Rpqcq-KlEUNIyf_LZHY9>Md?Q=d0Y{b6OPFDIV?k4ef`=@l*2ZJT;}H$CHk&Ifol zIac)y^~RdZ-#xoDwgbR|w$9WOny{1G?`kNJ7BvO{DB0JV%{}CtFxY(|cuqA(ThFYa zZ!Zd$T?yo%f~u=Hd!ynqmoJBYRS>CU?dch2%iz9PpW(Vp&V2&85Td>s$Y5`(k0_rX>K$mEgX9U z%&diBACea|g4XVpjd#JoDi5;qVl`F@8ae+0BziGRi#aLmu>@hiY_VJv7@2A$r}Z%+ zOL=Ai(}Qa9XIj9nuUDN7yvXfJx)%Hn^CyFj;IE zdAW@*^|^`0p&E(r_>&SZEwCS2FjP{=sUrFxB3d72@{g)w`k&^tYuCBsf2?h3UNfiv znT=1`Z>P8P^Keb2W&J=3qftC!vz%qiC*_ASgPb2+7m+VbmtYx@c0aMxj7bSY2ufx< zF-YZd$g(i?>=G`2Y7orr#MKK$im_93ky2DAQn(C?h(*efZ4@4v#oH>a+!)Pli8nIE zi)J*KwBkkWoAe^(_|{sa7`uinHea|;7RQTE!Y==U>?*AUycEnc!<#E!$TuSmUTwxR zoRiVGZl+&q6jDmcj50ht77v8^&hFrd=SCp~xH1BY*(pQ$L%STsKW|Ey61xPDx2r37 zWWUFL?E*fau*JrTi0jWTLIZ$HZQvuj0FAIN6~ISg0Zzezu!pF{Vth>q#rPws7%VZ` zqqI8hGN!kT=`KSVh=g7G$S%Q_iHIEbNa)Bj0q{r!#ElzM!i~K!u#mh~#6oTax@XDs zB2S_OXI()@uBGObVhlvY8++u8Tp(z2^&ipU>Wiz5s;juNpwe)dlow^o0f0(@(%&Z zy%8W;qU0uS=&Hn%5M0ybNsnzNnARro6-}BE&s>#4SL(f>l#gdv=-vFKY1Fw=OH(%r zxwH#JWh`stGF~_d;WgtcA3*V^nx5Jla6{m&sk={ry?nhjl^~chE|LMphSJFfC5S&luFT{4 zR)s4$1|8F|(;MdSA#8Lbc@uJH9LO&_RuV4WVR6v>h4f0oX7^YeIRBGDWhXQ*aFtsn z^4?$Z1>$?Es3{exGE+q^>cOZ_&f%UgO)*T7iptxHV3mc*<{?yPhw1nntIC5Gd5(T`+7)q&Q0r@}K@TQc63Zj~kGpU~siv$kTHpRRS&|Lu>3BcfnY=9G*qNR=8 z*tp_PK$RJ+Jt$9Fryg3{!9ug|j$6VRwY<|JBv)F=xQK3QsSN4WVIKZdR6cTaC0n$e zn87cK1r%oIan-T_IJg&g0-W+#@T3(UWs2z`E4ya=6eZH^Flb6+?v8NB=SVa!2D=Dv zox zv12{c9+{L0NkQ0cOLyOJC-~e8*GLpE@nqT(u)E>?ouY}V5WFu1W3Oc?NkTisQdZ+NxS zCG+%rhh#pzZZm%v%?3r-fSgI-Np^B+Qy)u{1CBWk;s(kbq3U2QInTU<(-iFh8q}N2c!%EO>f!uNx=sb+Q1WO(v!oynXsE? zp@t+zGx$WV;dpfl3l@?|`bfg1uia@%OGOv6d`2qDiM;2MBSegYESB#cnL5j2VzN4G2umbLjTg7wO%dr_q%YkwRb=g8(m6X9z)&tc(f@nk`V0yuT+)%W_dR~y3W=|vO zZvazPJueD@p8k5gTHcaPc`65<-JcJ5m78)RUeDIOm%j~ASrKZV6I?yoC`D1f5_g~O zYuTgx26T%ZnaX>BtsEf~Fd1ZI;G^LzaI~ZCFx@5uG#DNn8tCfS;T-2!t|>z4MjS(E zD&`a!Z^}olxso2g9L*M~Zr2mgBPbR9h;|z4PB5;~AcwYzVM-L$bcu9ASNSD4NBk|I z8qI1D5(Sf-9=4KHyavgmBgG<>RFS$*PzaZ#A!W5uA9#Hx zYfONfD@#nufB_hT9b1RHd%K398F9DZm+=t>YF2Yh+2F#NA}`U#xO12*%xFdnI6p^l zfQ)%lm7#8uwp4K1CPSnCEwMl|quh7<;hlid-b^$lYC5M>XmQGlFg zOjZel#HBQzH;d{wBgz(0vxjwS8l>8qj)=B9v>W28Ud&w$Oo}SvFfb;vPFZf$&$gs!xjWMO*PPoqJB0If`KgITcM&yU(16U;g_nKIA>05O9fnw;{Jh6q>PwMG}F=;}#uGqrs zp*lWyAe=Ir?5B3PVI`%fQRYagd&qzBtbvC&F6r&)?zQDS@;$gGtW1TJU~o@JS+4}i z*Rz#9N*j5`o3tx-obOcZIA5%|(YN9&#DS5Y7hxM6qq?F3PGw?gGpT7A&-Po)OGF8< zUcfcM+qc3!Mu@Zl?Ym0hGpCGW$)#|=lJcPm=EM%kWiRu{QLfYK_OS#jvn~q*@k)9I z(NF=hV&@>JGpbJPUxbj=B)_|{QjHt&H6*)CI#MEejOD=C0sgIs+P709>x^&_a;||J zs8lXKPP3--Tv17F)Z&4@$nVo+O7D$9z!1sUQbA z@-Gam%@bPOnH{o4P*YG^7COaC6gX3)ObQNxrZL7k&f>u_ZBVF_dWvi`<(*+ZXKaqi z+LWf4Pa`M{ovB=}L?cn9u1=Und?a4jF;!2atU~f>N36u50jjW@ZWN(It`$;N<9jrX z@o1NTr<3z0H0|4WVSsJu@~FPb10vb4?2f`B#34sDR`%tP%y0l$WXn>h&0F`cbxxWWl`Co&@<)H&qcnwG9#u z*$51i-jW2h)cW%rHJyX&+*nwNowY8i1a}T?2`O$~!t0jXx>r6!df5fy2(xl9TyE{| z>4MDa$|xgQUWfi7BOOEz3y1g)bE}@z;9Ib6)N*c0chLhX*|1n=WYIeNqKJ^S(HKQY zh~FJr3WN@`B8kZ!W3rQ+h@knVSR|^gBg+Y2K=wWUrXkqcd{*mOYu7cOwKfu^oG2a!ERHbjhcf)-igvDn(y*4A|`YonAs>}4nL5)jLEyyW== zVHXn=NLJDqO{i1Bx`{B_8}V|OkFp_zM>A(ohdq*sh&3^6YH@;3{F)=*5p!$lfcU|@ zd~`T_!3Ed^cy-!r7K*sGSKdNukh2P4VT2HJ8uexC?sGUY(}Gd%+lJBo=mB22D2xWR zm)J~$GG)bX44H^V=srOi3zTkC0wV$Jgl>qecewMXkLd=+RZmKgg_I*bhblNng-m%| z88g`A3Hz?E32vjGeI#JO*FdrbY#QCxkyyOAain=PeLct)+?>FEQm zV(}U_mkF~KiA%DAzB@%VkTqB3nPQK`G%F_BsDcFMWAm$WBc}vSYmLNL(wt4W9Eo5J z$Z`}^!Vv_~At0D;h()6)xKnY!wckTFLWS^KW+`m({g?X_r0H{V(%N9Z6pE(Bvca^{ zpv0p5BX|%vWjAgROGu5J#XqzjO>`ejt7(Ixrw+mvWJBPJAf2oPn6nauZYZ<-JLfA* zo^WrhNBUB0?o;xo#QWdFvH>e<|J5Ax-v2hw-T%(U$F~0>$HKmyVgg|2$vk(sBO(NEK9#sf$j)#aG9&_(Nnn;6+>(}AKggRWYRXv74MMb2B`cg zC^Pk>&UR&N&(RghO;OF3+!P*1Mt!v3Pvx7p0rTbkvkN4xbgWr? zj}JT<0V7tXB1r-Jv&L9fO;N?5nzqV~Hnu&I0j`Z!0Q_#A@tv9xl)ZfrMY!30mT>zi zB{*roMIi`(uu75o$V%nYX&cv#q01Gi5sZroYT`yh3oG$lHj5dRO)Vq5OcE)CC+CUV zX2QCfPCg6XeVC3vjAS7kg zgO-X8311`HI8| zm^oGifN@snzmbR%xHuhvf2CpBgVx~mfH}TR$j}E!wF_Z>8j5FvFa{=bf}uE60$A9U z$B@o3w$C%|DR$B$q*in$WFAB;VJW-^(@ABR91{}S9!y84>=kk!Vvz`Y-9}aE#%?b` za|}3C4{66D@e-)V#tAR#BupedVY);Pjw|Vqr!1fc2keub2vDGhl?l)~V=XRA)( zB@B;Sq&_N90UhN;$Up0mFb^zaBGZvVwGf{ccMUg9x_^6+WWTjlsRf~hk%`zY5j0Q6 zC3%8GNX4SY?qL27LQV$Ae57ThQYwI+N`w_P>m>6e-({rpd|OCgEK6M~fvZlzMMrAj z63miC7_#9krM_6D2)vM{E@(mqu8b-ru$3~bIjqVq#k(if#hiQv`vMrj&slCk7yx}) zsExdE&{m|^h1y|R(R`ZVZwl3B`O$o8^EXBMX8Iw&CJLhv(|WP&UclhBjFcCbrXb|o z0L-nBqcE(9%#3fu7N2Ak*dm!+DicwYNv97TCKq}F(>I}z(>a5mw`DW#IE~K*_hvZ) zel|IUDyzI}N65Fv(8(WF+levlwy75)+kfbW?SzX};(UwnK3)>gv)aO#7e=-!f zlVPa<*v3N>4Tt1R!*QRz+7VjX1pN)y*O1njKq<`y?K0lx1y#-oEHje0CsCaQiQg{k zlTHw>cH(=(bV?Zg9_e%G+-G(^Mf5+pMCJ4Ut!rNA_5W{anbZHw#;4qOJ3Bk4ng0(d zjH-3cn#=!(4*@0YQmMSIe9DY{`IJ|RGvBnb5tfo15Xx9anUe0YVxw6jb%c@#mfosa zdaJMCEP-ULmXIZol&VaYz@j<+jB<g) ztO~r~b(|^{&K*d2$SXQ`AQ@lTatD&OuCiklLC8DupkP8ks6Y_zUu8yF0X-ln^jQf> z{(OL$PE~iWCT5bl3eNg7>DjOPt31!3=z;)bYX{|K;la6aEkuS?>TyF()YEvviU9(> zA|RQ-sB%+t2={B*F|{UX&@ZanX<+fRocLN+mej*LON?H=v7Ux4undC8Ci4XAs`D6*KG%fSVRQxuRRmtGNIfd4R7Cvbth0lYn{ElA?=TBeREjU}^>jgei6-nxDH?bkw#L&xd5qQU7?o1&dc*;R zjfO^rPQo0pIumaf?W*MpWG^k45~A39of-hJS@C1=5URLrXO&dlC(IcVtBbeWc_#`` z~BLI&cxhFlKLW%)FgZHKpTyGz&)Qdd*NYP5>~2 zLKdaztbIaM#a6#`tr{Hc0FPCM8xb+DYBn)I52q$&6>vr+yFTbaXN5ZyPRU!0J;lpxLiJcG3dRZ`Yz zull8gE06L3$|9$bH}WhANvNZXVQ!E-22@~XVs917X_ z>*P7u%_S@@->P*dEOralM+nz0&RHPwZRMHfVG2?uk@S(ty`G;{jp(k6C5cbX4v#uQ z;m%(62_6M8%I^pT1oAC;3!A0HjiM$&PTVL( zWZ^QJPwK>%T^ht!?WY9)k4oo%gh0XG{EzGA{6A*n!yN+PdcukQMSoS!H>6YTA{0fMHCG{r}}4?ILz z25Ad}y~XRz@%Wa!fZrmRxt zMOk|C{kafaWhCm5 zT>d^%Qu=l@`obbr%F6@Qp z)A7sGACDjb&M@pegnZ9eQ#)PPJkripRM(7NcIm=?c~F|(bC+70-tS1IXXd~s14@6F z;({lGJiU4j@ZNeD41Bkyn4sH*v%XEa7>zHN0pC(gh^WSQt7G6!27&YP_~Y>)p6&!m zq!(`ZAaK1r>uK$JPaiJ*EnP6eZ6HLv#;8N&WuwautwJ|46>|fuoCOUv zWz`apIcl~{Y4ZESQHh7$ZIB-Y?kHv2cip(rQ4Kr&p$Sd8aU*%*Z-`dJxuFt(@h*$P z<}a*P7C5`lqR{z^$d#Vce9*mGEcl9H)y3^+V8fTLqzT{AXZ?M62+eE%ojy9vzYlM; zd{iabfBX2~Ps;$jJQE|Be6M7jL^rim#sXU+#z1DnU}%@BTQnfH6Gzf?TUaWpWdUp$ z$kM)M;deKr70I%w(l%XwiX(Y?7&xV}ct`ZiW0UFi9IB&rmu1Su^5QE&V zOszJU@rD!1L@;M;!d%~Gj#MV`jy$rP1+eYvGd3$xJTIJciC?gb+4Z#Atiz#=>?Vv|z$LM8 zKU@*!F(b96oZ{H_ha}7&L)S`fjLZ?z%91ZZrW6%;fMfUv1vlC*lh{zi%%z91juWi} ze!`Uz=_)tm zx0a8I_<5uVR~@tHk}}iVotnIiEUTpqOY>n>#n_sMlhKx@%gSgik(bdYE@tLxTp~E( zotK@7d$Si;Qo!cxZ74gHL$@!d&d%+59L8(XBMSr*tGPRbw@7%6K| zUf+iu7-yOXv!ZKX*2xrK`(7=`5hBOIaZZndt_iN_30KX6E+IKpX>GT!rPGYb(#uuF zO=R4d@%klA=#cX^G0Cp7-kQ<7=dg2(AFMfS@-xWmf1mUJnU#<2|B1Rk$8(PUtfY5PQBP2v8@GZj z#^oTDscA*qqe8xHutS6+1BkDCEQr(X@()!Nvai6UJnhZT84^hw9gfaAQvOCh&XAPl z%AP^R93;ICji8Jx9Cs$j{xZ-*ewaow2k)SsXBUXT(~cZDe`nj2PUOYC+PFFbk7Y(qX%snm z%bARow-RoSe(h`8TAL+SUfvOxxj8bnPK}&c$a#Y~c9ge$mMa>?Y;qvUYFFg+tQHI~ z*Rl{R07-($>)~zeH?{H?%F`6}p&ANgkZ(q0D#*j~<75Yw112Ef7LrRj+aEr!YhbXu zua}H30CX7x?iZ-QD7w;+P#*LOYywb64F_7yjH_gCRmO>UlhERN3e$6E$O_TYmdck% zcRG`^;0rl=wkace8k8!mDbmmg*quTT30xx7h>;fO?aOU~5XGv~#>zZo$3F$T51Mky zbLwh6X68nM5RWl<(WM=Y7pjd{MjOu>z9hsPQ_%c5?#XY>Dvui3lxhV7wY9a;W^l}6 z&qt;#jntym;7HALhnI7B1hf5F!=iyf@UBxawXqb3k$Q#S66Uly=r-7E?pA0tgQ{!?y21)u}OlFe2fw( zK8TCXGT6loDIHc~Yb(zrH|KOvoU#?l(uJUefe%0~R2|6>p1CFv$`14Aie1!xBu!u3 z$dYNx7&PXrI)XB$-E29B=32A7D+DWO!yK034RLikn;4i+sQ{T1xVQmLd!Q*GtyQTU zu0YhCA{fkQM@Cikps(l~ z=W4>+Co5@>mULcd!1ACYO%eCNVW=XPwFfQ@olUTC<*c>P7z9WgH9#PMmt$Eql_E!a zvU|j{`iMr2C@|M93&O@cc0kt0mZ6RH1dxqNTiXU@y%`_ZQrgD0rl$2O9zS(!YGc!S zz{bXQ@(*d>+<5l-D{@+PYU8T)qgfSq*NxbWQ-d}JS6g~|)Y!Ob{kUOT8{5`{YaK0X zzjKOiyoeM~O>>frbmJvh3i~A`K!{q;cJhr)d+o0-W=Y0@x=q-@@ra$v#x-0l7GxhC z#WS2{veF4{RLv!=HWBOWnKGd!NkR0A($x4ky#Vv@TcM&Q%>%tJ3zJo;5qS;fi_8J@ zodUralf{m!6B=Xkng()@h6Xr^Hu{ik-Z&XVp5u58D;#a~8(0}qe1#RjFpGuG>vKa{ zn6$8hb4Hd7n=&ZWH)68R0Q{t;B8AmA)q|LN6`S_Gpn?W-6+MA&*+4dcOZv7_q5zx< zv>=(#FrO2;JPEYIT_v9`9HRz8t+Xvw%-UN9`D}Y4Kz7mm~RG+Y! z1nC?d^l;_sChvi)skENtn_Jqj@IAzWC;z}+Ci5UtRxtAbwSm|H*xwRSfbesRCdlS5 zurY}*B6b3`rm(e1EX&7DiDx4C+nM1 zZNZ)|4PI0`c?tQic6DuIZRC=MP%Swr*zMc!m>~`aZ4?@7mv>O9YkQ#-?!Bpr?jw=_ znf8p`ZjH2(E^+X<$XK7`{{`WwJsT!Kgy9Mg479xs$`vK{PZxXPZrk16W<1@}W@BL~(Xve}?}!CJ0sA7n5@;0?*aox_=NN}5 z0P%?`wk(q>`qP9-nyACtV*f;C4O3^3N-%HfDTQzIG+7AOF{3WNnKzjiGk&AIscIs1x>r?$~u{te38@rn=gv z4!ovnE0GZ(G-7GzJ3!VZ4GbzEVAVy}yVwz~Ee2S%e;s%uBAP8)UP-KFfAzx0szD73 zCjATBgv4{i@k-5Y!scZ5RxM1VYg?eR7-(v8RU<#dt;ZP{6E%d&@(X83{`GB<$%lwm ziKws(3esOmLLTFJ%2!)w>AslmX%rTNh!K4TC|+w^(e7| z9Llf+q0MQiDsd{~6r>s}dM`-V1K;hK9*P}A?BPqV1;!Q>$}_bH_wDnxMvq7~43ZXw zD~N2(mQ=@gSg`Gj9r$YBIPd@#tK;rOtS1ea)p3=V)?1(|ejr z$@ETG)Ir%dWA?)kyC;^fQ}W%SFap)hVS6VfeJgoeVAk+?+DPbGa-=bE-Lghz;~XYm zrrF0X=OpHkuuZ_u@yj`3xlIk6gOziO&geOpHq}wB4fvgv&1qr#HJ;Ld1v(v!Xk=0~ zTO9&x+wv?Bc-!U@ZfL)@&ZxY2lh0w|IV;RYC#(>pe^?Ck0r;zUsS_!NR^`IKK+WmK z7$sk6joDH!p>?*ih zhT`9Fnl^kGV`IzOXVr_f15NBW!fsTn-FII{+Ca0ypJMjEJjKr8^id@LORTkJt;_y* zU2`ltXa74JpK^P6FdJUjn20<#q9^q$sr?Ld<-mMhX?;(@3}9fG1KUU1n51TN*<8kI z1ZEpyB{EuCO_FnnF^aCb=&478mx43ngrSqIC}&PJPO7>EEg9(~Xa>pSNnk?_DAaW~ z^-)LPQB_a!;Mt>k)+9SxQjKd7#m8%eF9>RGyq2ZWiZwMiE73FCT3XtgXFXGm@K7Hk zcp(pK@@3L0+oo#A&BQ4s;&cKw$)-ti48$)^Mm1A#%VCZsWp<)v@r%I6wQFd&zptmq zl|(0FBpFtif77mx?xC%n!vp**0(H83-LH3vulsfmx!-T$?}N1d)vR0yJz|&(Baq-I zgxF(v$Pm#CUr&am2%Fr=7v7Og$d3F39z6j6XhO-1CRk+7(L`hvag8E%`3I65hR`4fvURuhKIU$bdgcCqgO0MAWp$OGl!Ij!%-S)fVsjZ z3<5dXszKey!;9EG5TS`QoSlL`8e$sc4z7kh7B+4&s9+s|5ruUNqG(0WR>-*tT~Mp{ zGJBpNmfk>~Ds^?>>zp>=XIFRc(0~wp#4crz1dDnKMEyo;7cwWIj6J=i!=Q-7I%%f6 z1_nYB;MjHgFJ!M(fZASbwn z9a)34AOt%?95zVLpiy_56%66b(j|z3Ef@)sVJ9m`JB&fvUft<1->4htPR)N!O20Jx z<=8kC+x(>s*0a$&DChfp@$JXGpD335rMQ_WWH(V7omwHKL2>UW5Wa>B2t+u9!x~Nor{tmRMZ7Gz^q2VH9JcfO6~yr5D;Z zwzwVyA=(&6t=yIv?Z|GW(7I@)*ICaA;WHQY1mHJR;cVr(Pi^j~o$@5`iec({puvf=*wMMtKb>b)*gk zx{nr`NdGOK$z!e;6}@^*fx{%gGs+yGti%>@Wr9{m=o8=KTBTjqLDx*FNQf?|w6`k~t%&T2H$Wg#!7_;=$HfFf zB}j@6B?+6Y)CHqo${z6OMh?iDw~W26#f845ueY~jbKk&FSEsbxdl zcUyZM)|#$|BN{m4p;H}Owa&PA_P(jNZ&z=Hk^`m_v$P;EIjFQ8#8A-?DKyMebHt4t zgnMv~s`PP#iBTY=@&^8*ag}_cIbC)aNv9;LcwOy zXDE2FaP`#+=LFDZzDZH4B{KQdMn0j=v**iWR%Ppm@ccP z0s0D!dNhbM;me-<`H)9KfE<>-1n80mcpt@>*shls6SIt2WMh^wJw_(;FMAqFllJ{M z+_ZVs%()F2s}H{sx9xVpB6$|M$xK)KjAVqF3j?LEquE(312j>TZ;18Pz)noV0pnd6XE*~EzrLzX3e*L?TTji&A zWm@E3MD|sV1ieq79rf%HJajiBqA$2J!IhdRNi5a3LPVLt+bg$WN)#wXjSLp1O48Bc}B z($&$~Indp^bFj-92hZTHCc!3t3fu~ErY4Ms*6bbx{jpGu6}QdiJvBPEZ0Q$?*{%LrXSGx08RmuKehm``TNdBMZSj#%E z|5t3z|7$ircK#oB0u)jJ*-wr-A2DB#ESkz^9dpQvHbvKA{)cGWno2rkl^r>o2Rjw+ zyELjNwelxR6wDg%M$2)PLM{t_QlO_tqhZ@~S}K=I>!y`p1xHDVv=|2&!s3`@QoxuZ zK^5L=+H!S;Cj-_36Bl6~@iJNVbDJ`oz+}+mg(*4s0|tdTIfzYj%T;g7=PPSo+8J>9h$Bg~X zW(=~fNC`H^LQ-xg&Nt@LJG~4(MfU&6S@8c}+tS?X-TzzW_W#-V9ErVsm!58EF6aP$ z#N4}WdZ+H)YaI9PC?p1KjS*|<+GnOnB%(M8hQ;&J zq~}=N{z~&g+cntH*)h~X=2PudEtQ`3cJ&Q(DwF5YBvJ!33_3 z=yC3DYKzpA=F=2=hKR=>VpBnv`yfT8*DrkrK7@rl(q(USo3%NFl(&6;| zSYhJR>>k1)^ueU2WrD#@5K2fBF>*|5utI*@G9_I(p^rnnc^zG4Ki4^*bNb2Sg{Ii* zFtD5jD-j}QQ?nOB9bm4#tGl_{&i2A6{IrbGA(41qn-xYiQ{cO&!vanxe z!hnM~DjnR;BZuQVqMEz8XNqOm&Xq!g(|47Gm`S$v0Y*5c?dvAEFt7;ruAc1Ea6U1I z9eYU$a-81T(}|Wqg3lDZaJ(kH#?6)Vk<>&d2*>eZT+L*(v{?xU$h4(M9(RsS0fT9b z8ds+Y4>ajkLU0bU3(N;y1HmZ`3@CMTEN5Cem{tm#43!dME{`5^{z@o-y~*(@7&db$ z5$X|H21aObx4OZ;o?%Lh@O`*zV4!cnaoMCEn|0KDU+jpq4TduSZB|2f7?n9LMF2VV zr2l%LrzkoUVW=NEKh9pL1aj%!X|e^-dI9R$qg(YR3$2cRKSmCGhryRs4(h>Z2P{U< zhA(ZRHIL#W86ly~#fd0?oQOO;;T09rpd2A1N4N9M%6d-Q6)NaB z4Iz;rKDL3G@Zw2bv$5v!>MNUnbxE5}KH8PG6zYx2D)YdN&i<0NMG^x9-rZ#Tl(OVXnS|>HU%%|Ae*Xvluj$^^bi_~Qso3?F3%yA=^Owbess)+#!b7L91f%o&o*4UA9Z* z-E+&~h%bku)G0eRjQ6B!b}S=gATi=r(zzTBD_gt!dN+6Xg_Sxe_-gdDmhlujf_QqB z`%o9W`#efqpxKLAx}YuO!u(2bNG4c3Y@g&wxle9&cSM|$VTYTsUozK=&cJUNFL$Tw z)r`PS)3Mp5yDjE<>_I;I_f;3x%23LGQ)E?Fa4X{3;RT4fPFO z&@WW$XQoZcWEPF@rZUu@C_nhUeb`K2zl+YekreZy%-er&-{8*ve!^yafPj6$%w-^M zhySnv^+P@_aGxgtzi1XwT{>dC!8%1W_I5b#x0%VvCvvP*f9KZ;?c)$4>z^LuAEHaz=C7=+&%A zBfA?6S-@5?Po14)d+FG+-M3mUjq2@ue1g<=ZB4vxB5Pza)P1LPCk`5; z)+F3_;9aWJmO4V_r^MZIi@5z`o;}E8uVwug-R7NJ1*X?)@M}ObqY@rkm}|Nu2)0;s zhX@MF5`+fw)dxx_Sa)#yPS@Ns`oSA1b=1;0tFbLtOA{Xi8`0T5AH)Wc>+v?y2gJf=88yY8cGdJRx z9~RzL&+8gs4ADjCyL8;fB8g;DnV?Q?XpmrxD&*)g=GPW!sJpj&sJo-58&U4d+6HrR z7!+JkJAQyjOj97bX<4!ZrTizQ6N%XYaa)#r$qn%O2+?*HMhh( z{{PW6bN>Ic@!|1*c6s9e>^h?He+tJ4@b%fJ0f1Ux?g4jtOHc zV4a{alpYQ@S`7Qb49=y$ISYt0ROkhF5Fa(K7h%uTeBt~|A&u@|F2oICR(Me zDM#nUKCg2AUu^zCV&BnqczqPv|D&yInqBk1wzXw0{@<*8hQMH!oIxgZhz19yy9zlc z7%7b11{9!}@vNQ!w@6SQSO#?)bNt4V`bbvIPSucR;4BBXsiZk_E=o>CYHEhY*#^e@ z0FABIR)exSG;d}nvJpag;?b+Ik@c))$w9*|8c(LJd_}3HJL!)cU~?Gh2MoudeU_I8 zoT&=Z%tMOT+sX$E)stGnwZ2=L>16UqaLp7L`YJ-CRz^gM` z&TJty?7Jc`xerDnkr1w6))Cm$(9l+(H&Lx%E}c>1yMt^-*M6J0RiYNt&Tv}^3Kp9p95@BSG zWE&dkn@S|Yh9SPoQhQVn9)ZyW;ZGj?OwXDCMrSLI0v29ajUjH~I~%@JVA_qlp^uMi z@!i~nFKDI6945nxmQ*t)#0WzdS|gJQqoq+;QIkpVKM3)Ae=DV|CpB;{63x&^6|jB_ z073)uTUG)zcwjVuyBN}9AO-u~2zPVQ5^Mta2TVvvMdrF}-)++taLoqj2F{Hted^QI z7s#cxJsBFPiuxVY*P8W#FuijI1W9$=paTTgcp#uHGtV8G%huMJhZHX){t(N(v+qz| z#4gMQ#erd|Nq_vZDO5JX93g;GiJ1?@(@d$O5$BKrx1Ix+4>kuJoSH&?8@u!L=R0sl z$ayg13qfJ3@ol3Rc)Uy@0P;*vNuA2`krx6t(n?tXg&^@6w&Epf@-Olt#thirHQd>? zdFM8VC@AXtlNu=HnQEqIX9v@`(83@MgC0JWfi&8-=8ZGEa{+99|u|&RSMK-U!$%RmO?3zAsx{+1dKD$Kt?*j zIeT6L{Jx8+rVzxAs8SH%n&}Z_{*Nr^41+hKkuZZWCL$EjUvwTo`#l_1CNQiTeW4@_ zk)S~DiZw5qxFm#(jW-_fVZ?|J)bYlX-~W&{5s zQvKVcDQkdV(b=vP0`)ywA_%SsY~jfZoQlSno|jM#5sJqnMC?pLg{D@qNG3+!lPyW# zqaZGrgqtOTe_&4_Oq&Sd0F#7g5{@HQZidPU!}Qjj@~NA3)oy{>S#{D|`%1a?$P^i~ zRJ9eVqEP6nIa#FUNG290f12S>3;b!VVN5G1A0h(eC+P%NHJ90I6QMv@rY=?~3E?ne zq1EEgX8C7}{IfO04=3o_NS8R{A>ch7i$pTb+G9d{#I>f#q)Ds_Ppa_Qr`#lYk#Y#EyONAJPYQ}XPmR~Vu zL1qHY_G3{Rb_J1K!)V+&``VlVnF={V1kukR7Ukp&Ex3xS7mh^Ys}ddB*}UFp(lD~f zjl_zy8e7t_s7=;BOOcVY|KcI#>HN-U-H`t4FTOZk&sPk`#Z1T^h>g?-s)3e;GbT() zURt3qXO~b2BQ7(Uu&-d19c*0}nhwc`Rb$Q3aC0oYZe6%Fye1qCuM4-V4Y#(2W6@~H z#f^`8+IrQJRxz>~SCgY$QgJ4*S)x3$bD7N^s*CyXCTNY#e6#B{2qvWIMp|ULdq2ho zDnuQzQl>6X-R7BX^F?UMMtteyM0Q7lH-VzibuTYTvA45JQ>e3I8VO;j;Fb!?$D%9@ zRgxKUa@N(PBhv?J!Cu>fpo6tUl*dlE-h)2MfE{swdDqE(`H+$l6wbo@gviyTgrw|u z9_CrE)R z!b)=kjGsCvCJ_-K=_D+wgPD#oR70o0S6{*KAkU4hMRwD5bAwIUrD&f6tX{x|MT|P+ zNTDzh1a+);3?a&Tnk{NZL{FQPv4x|Ckln0vR>`#h2)<-1vh{+r>$^|`Y9Oo##E6B9 z(6GFgN+Msp0`a3=I<>Pyrrd?Q(tOu;OrK-Dhs%0rk*)GsJE}OVi)1UoT#o>?zJmDc z4A^QV_^Ly^v&~uI8enQzCP2@H&2+9&Dtil4{AMK(D0r{p(wm{G+}&^Cs~UQnSY1sU zkQ0~k2-LQrj>1vQsSEE`u$jsoQFN2~*9YT#KG9_--bR2OO$0+Ubq=sY=~1xx(w1h( zCn{T4sBv&vVkx`w5{TU=ATi`~1rO6OqOq8m?wc#IaW-W|8_d@jB`ATD<`NlaR>=<^ zpvlwez)Xr41UXN0eoYBvSjmlu0VZxR^vv!sGp5q8cOQbY`lN1INsZBNz3<%90kA;8 z;3TRfG>cv&2Bx{?5cUby2rl_UM6}Nw1JehlOACNWsuO})RY2jS$SMkZ%z5=*l39<} zj%3WREb^kB;

@=p+Pl2R74UBM^_PJ`jnJB7_apD|*_r0Aa>xzQ$l0NMjsep{<0T zps_n?fI(g&tC_i^CAPvQXpFl*@}78Akr)fkEne2=n_Tx~7M-+wrxo{RYVXLoF_rv3 z0GeC)g#2gA#olQ!>ozd@fe@F>6B_)PA-0i9_%j!#FciYd0F$)}Zw7+I1SP16e2FnTVC{GT#%@McLX<@sxoU4o^(l-xix8uy z$+~N+s6_&m4{b@C@db~KkvBzx5(E(dQun6EAPA7fV&8|_6p3bJO2BL!0WiFcLTFME z6;M#Dm|xE*9ztSbl{o85mU>zH7(@Y14UTj|i*aiaaY}4j3cC!HDKW@NQj}n=2{#NH zBQ!tAA(5U$>B@Sg+0(dX7`tKnr5V}`J1lvyb_{#4_zi}%-WV4&j6~(=gl%ob2!*Fz zDuq&3x=AJPjLWl2OIY!YJil?9e&Qm5*ekB2KC-lrc$IUuo{`KBDkO7p%@J9QDAiF}J+ zLJE{(fyeUBbh~G&>5~M^H93RXXR(m;n3F)W&kQH>@(Ai$rMa+-2KZV56xcz7Tquyo z;%u5F52Y+%SC}glrVwuczJfTim!9LWL-tOY0&sy%f1>2bA*De9bt1YMVViP6Si-YC z0a*q?oS&N99MNtSAvBF6nS&=|lPe}n#3htRlTrFo5L59>@7 z+D>E%2^pzi3=e6};jg#?0FhrnX*1iaXCSX120giMvKg z&jc!mk>gP~$X11*_0^-R_Zt@#$<+g?IFcOiVT(^>OiIhZ~)B>P?{P&Qv+LWNaM1jVdRyc7zlN- zWiMVvL?dfL1uBlvijI37>YoTi^sltzQT?l z>XYx)ye6qhrXz6ZC$BrsNLEvKdo0a4xmifk9t6^9bJ;+T@E0L3Zz(iS1(v`6{P7s^UPEpZ1X9hc#YR)0|`V=LWe^Iv!9vDmPwm z#NwO^)_a7HP*((eM!gXxOy-`z%oa%rkI-J`9jc}VcccLGj-b8}G}b2R%j3Agck(a` zrpr$F>;^3W8!i8ihYtG(JJhhB2|a5~@gFF)3O^voB1jX$BQ9Wwk6;_%zfIR~damHV z?E7k7*a6ZM`?kdp;ei_%(+iA46!sGyD=}QNH&o+`MHJ|5EHYdvd2w*K2y?FNrQeYK z!hXiCMV%j(A^gNHm2x4<#!E23QVrVvJdElj#V0GuwFE+0uYSROx9T}-u*RrZ$j_d# zK+KBJOE`Lcgr!`!avUtG8WfHzw!R)~$#+3^+o&4jLt)LklxpsSG^@+WANO=p&n;bY zxW?5ifmqApg$xJ8@eYW2pRDsdY6h9o^{h2|mbdPi(b!pM`8=f;2c?zvZP*V2A3$UF zxY1Ec;m#K}8$8F4SIX^0Okx2yu2`l!l;%N#wU(VsxG(g>fQ~ZcO0G)t_I}R zrH&n#r3@)<;6>Rv=J#x!&qJqM@u>it_*fi*{9G7oDHZax?+=VG+zw78J5sQ$z??JkxFZg;U3f6#r32|U4N zSLVjIpJ|&9^o5EwmsU)GzDTjc(7Vu|$DFkI7z#{6k&^jGQfMk%H!K+PK~F2Sk>*h| z5ca#L!BYo0;2i1rMsuISpHkv~@fdA0?W0)yzqQRRp7>u7|8Xw@>awC<3y9c|fCt8(|P0&>YcK|XPu?QUjYgKq2Od4u}sXh7I5Wkn> z)-$s@|0S(|dMh_$7EmnycZ)mzXLEGzy1Df~D<9z!Oie(f&LAi$LN(P?l?Ohlx)Fhl zNkJO0Kad?E;!8ENdK;yhLuTH~t*EP=$aJG^&@c;5P(5njzT1hdT&BLJp3;+QHb|Xa zg>uY~!kE;uTpXcc=+KH7Os)g9CXGdhHcq07I#11JZ%w}-gDG>2DjvxfxMngj-#s(z zqv~^-Zi~D@>Bxw z#m17x2o8(mB8YZpVP&^A6;>wHBt+P$ra|lCVAw*SMU5|c&lK#MaM=4Ca5$nz{8qE1$gcPkuGVn$L`k>7$3+M`8It z7G1Np)gAx8rFky?_pE%jb#Fa$ow~1TU)787Gh0+Hzu^t#cOhxPAM_&N=5}J9gaN)AOW@7cBM-U}}HhYK(K z)TNhx`r?c4z3j5jjEvkrHg>5tOnlk0zBo1Y<*Tmx%A4Q( z)oZT#%3I(1*8ThU-+1GV?|kPwZ@u-_4}S22AN}Y@_wD=Y!Gj0yzWeTb@4ffapZ@d% z4?OVs&wu`lU;N^O4?cL^bq~GutzWz8rmw&4ZQpp;yS{ngz$5Q@&!g{s@3%kjf$x0a z1OMlvAN}4PcYN>8J0HLM?tlB_C!hG_C!hSsfBeDy_y6$z`=9#ffBw;zzx>mG`InzQ z^w2}!_{KLLee}_P{nvjzbm-@gJ@(iSe(-}I|MleRx z{y+ZXh3B68({FzB=Rf@6FE70C!t>9+NIrl1(_deF@o)I~e}Dh`-;Xp2y>dQb_ycR9 zYUxW=tEx}me&4}|u3P$=hKnD)?~bp(b=j(OKD7P*JHPSvQ(7+n$)opw?2&gXTi$kh z_h;|=)-A!of4KNtpS}A#?~m3tzpdN+<%a_MFOOXRaLYj7hZmkyd*g~fKCWyse{pQ! z(dW)RXZxl_ThEQY=9!P(weT6G|FVViPP(>lg>vrvuH}zx(Qf?7f&Cw=xxH)t9iKh@ z46XXs56xe&a@;&{&Wcsl?};9F*Nx{6Uc3M4Pwjut^^YC8x3~URH$Ss!)4uP#f6>rW z&wS$U6Blm3{q(b*9zD3?j3pmlzyFv2Gjed@*4qz#@<)$7{;qlR7Kbl8^uZVB|Kzw& zead>zrgt6Mmb!4;+ss2>*uFXaKIOJwJhtqnsxL2j?guYjv~IyqnofV|j>N`CF3axU zcKdBZiTAAxoG|afzklSbd;j)_s&N0tg1eMHHeQ@ueuc)u8QEEST>!#GQJ^d?|d}?{M zGSKj$eNQg@{xS0(U03&x z#^aaWvFyarhnKF{R`skuJ@$_$UvuV-pIq|&n(8;k zm#*AWefm&UhjIMSp^ob2r7IV|@fU3mKXTg>Z@Azex4!$7n-6yEKI7?M_AWT-g|{5r zHBz^)>N9KqL%XDpfD*LLfpCpWZaUN`yR zn%nOB&V$EQ#TGQ|*}wGunw(N~chj$ae6Z@Tsk=@-_uXBeyxcSLLcYagddfFYCe?9Nv#rqZ>_nv(>9`nbQ3+8?C+}p4C z-uf3`S9kXpzjfbRU)ntSpX+l^Y0{ZNBl@s?UEkVqCrM!JmC= z{ifq@IOB|Ke?IW0H>^B%N1J;6{I35!?bDks-G1P-1=iP3op|uai>l_G{M{8pTR-x? z`43()?>h6(+Y|3T_EXjwZ@K5bD}Vi^`V;;(@$*FoH;>)B`MnF?KJ@uh)YnEjcHZ#Y zPyPD%FTZfh*Tef3CKjH0@-fGbzGMA&=KW{YEz6GmVdLLl{PVq^d9dp2Qx@KI?7crs z4gcw{zgxQUJvSWqe|LW`{pSU5oSb;#v>$vWxHRnNiSWuDmInCR8_Jle5f;#VK8y7kb73%~Wu;&s`D+t=K+=(1z)JmtT)SA{$K zb}szub$|TQ$#)$5P2bM!)b$JB@`I0Dzv=EJQ^$U6*>%CHW1hNW;uCLw_=Ni&_*&I- zhgNnkeQYrB$3=@n#=F%I9s0qur#!NK+5THzyyNw&S3PvY!V@1oV=A-rcVDaj=6Ch_ z*KfIb=;7;^qAXT*LbM<@$~$ITe=Q5_xv@ysj4Abz2dk3bl}0q|M3Gq zUp==OM1V* z{PDo%Meh&Xwfy8w$^}yweDw3@J-qwpH@|Puo%bwT_v}5v>g_|DzkBeB|86|*{;%Hj zSo?x2pL%%fAG+p0c5vIT4pyaqk-YM?sh6I+> z7v8&S!=dy3{>K;YP;07Qv+t^>jyrMJ*_2uRFT)(UD zjsN(wGyWRdcijKZyX80U?0oHiUi8t4`RBbWv+VqBy_eGF)A!GN?gxLl^So&18=tS5_ut2z^7XG)@2mdyz8(AjXaCZF z_+9VaZDaf2(9$*UyZZL$UpugL*S~+^@_GMr?WPqS^N#!8(AVoOzHQOSriD#ccO0`J z+Hw6mzVx+lU845{^}3hdxh(L5MHe<~9(dQn_l|w%(v4qyT}#b%KY3x~+4HYo+P8A> zX?63z-S@MeMq=EUG=Tc|~H`XU;yM@zd##Dqi<_Jt=-YL`}5n{pTBDP3-ir4HoxVbk57KS z>T_@S#IOJNv2)iw_08>@)ta|_>dQ;N)x7e$OyltW4Zr={!ykC6=K88d!Ka^%bzS!3 zn>YNnYGdZQhH>?no_qFx_mpGrs9Jy8$~T>V`qqOhZrFaq#8V&X{aM$)Dj(VL*)O&4 zx$m{d{o9MD&HJaPZ~MO=`})$S{`FtBeCLYl)4%`d?|=2f=XckidUf-P?Posn&sGdiouw&gta^oLtNQ}^?;<_EqQxc=FBpIiIv?|T3H%bySa*OT!>pR2uZ=g${zx^w3z zPTjiU&Z;Nwp8VyHKK!?D{AtmZ_cm4iI2j>$koyR$qPTq3ar-oY&BQ#aBKx^ucAFQ+Iu{@i=FEW7g7f2$h3VOjTMji-00|5 zn!j*SRp_b9|8U~@*Bz|-!6%ka9k}GhwQv4Z{jxJoNiKM->LhdOQ@>2#{Pc+zD)W}T z=IjNVa`PVD|J5s&9P{|%t&dGC?O3$@{mZ`7y5`t>VvpZ>#?Y?ox7|7Kk~?$TZtGI3 zs($uN^U1mEjvv`^>_ba8Jhd#jul4<(>&^Y8D! z`9H?zJvP{X?xMSci4&Biftwe;@V;e#|BpABkIehg=Te7GdB=%W^UnU*h3~v?-ovd` zRm(Qr^JrkjzTS(gsun8i<~=>HxF1zYL-*10;dH>Bzf3@db z&yBz9-J6#DzIA2qLrYd&cGgMDCf;?R>&p77u}v$_e!Ahmr>?2@l7(fgNV5{o*OW#M4e8Y-v?O?P zwb8%m_$QTlmn}GU`I4noLvMWir6s*}lk=(;f4Od1@8o&UC6+xN%%1aTY|Vi!BhjkR zre)VGOCR%C)mLs=_NGI_fq5r&RBe6Z!TG_1^Us@l@A)^q_m8KndhNbNZ&u!L;IgIT z2j?IA#JuymcdTDk^@dHcUp%w)T4izFq3D853o~~uj=rX9-d)Qs|GKs6ig&E4YdPUH zw_O{$?XxGn@sy|My}oMRFAXc> z)0SWN*eS>E-+RT9mUm6ue(h72H9UD+*1Y|l=VdnHhZkl)KnwtG5zV7j+JO63f zm+v`$vTOHe|GF-F=H{FKw5#Evl~H}!yY4&d1ylX*^~vLN$%(tqQ106my!j2sJ+$P6 zmo8JS#k&ulH@5wS(@wZ=-TQ7_o;hGGI?{2Un{DORm4z z`pbtmPi*+|`xfs0_=llsrSbEN9j>d$`Rz*X=2==@*3?RBr~ zzb^Xvz#U6>?>q3@6VLw1_dmS&!p!-ZTe6QWTv~nml1(4Ic+292``VXZxbri=eEs}Q zRU?^O>hIWbLr&jwaNhiffrXiYdb< z+`q8qz=yQU-*d$mTb}vV$DVz-?U*K!8Ko4 zS=GLF`GWVn^@o3b=fYLXtW67+J>Po8(huF2?fC4L1z%XV{Q6BF56@d#{q(IX_Ad>7 z?6%u~`}zkTYP;{$mR+l=mi4#Xxa$)q#FlQ|x3Io#{rvq)wW@`6oBF@~m*}2vMo+wK z{-*xL?fOk$xqZd;%NBj_xA!i1eCbvFi!XS7!I{ezG~PFV_4D)BJ-=Yr8SiXUXz`-{dIp_xcK=Uzdh$o+kfzx`5lWsaL=dT zabRWdrcYG8{oZve$JgAy_^#XUyY7zHr27|EANcgL4=&3ppE;vr>9**Jr(Sh`&$$b0 zltuqmx8fa}7S$f}*~Jen-5nh}^)G*3{*FV77u@^V70Z`=;GU&V{KK;Fy#!%Z4{m$l zls}%lL%DB7Y}10+(ypf$W)3{C>8g?B(+k_LJ!Rm&#i_>@C%(P-oC6C3f4gtTX)87c zmTcP;tUh?>?#C7mKDKztzyI^)U;bS3$Dd38?Q{R{)MZueNA!&A`sCIB;T>9J+)5=6 zyN|;9zvfs=izol*nl*Fzzh~vMer0FhmZ1y!yA+serGMwG z<^1hKJ9?B@B&rNrSv_twHFfpkwRd3LvNCN=O_P(8k;#^bksWIq8fe-B4aJ})``Tz? zwMfEB1UA;JhiCAQrY1JxmF;>rO1c4;F@&IET)NL94HiMB#pOzP>~N>)p52$vS#5NK2s9=B zOxCzuBk%$Ig!m(I(+ps=lnnt(+haAs@1~74)$8H9S%K<}U@JATA+W_rTUy#`93q7S zXn#b0v05<9b_Ki+OwHP`b7*Vhnb6AmCOYu-BSvCsV@=Kagg&9@i4EY+VX1mr%Mu(_ zJC6x)iCo-*hwf*?Nn^|iY+SFFFfdX~PmL*Rl7QDks#$u*01GIJ^nhY!;{*gpb_lDzLzq(6!0H#`AR386r@4lA@PXEZ72gvgFLb#zFkIv^wBy1$JhE zjh*aUY4r$)vyALiVB>c3rOu#ZCM(w{t-78@^AbxR(UZDGn&}oFBvdl@r8N}K5|XgU zptoe}GztazZIoIY))6e2t!h$(HEEcx5v*@wlgu7SEv3|SPEBG{fsH%x2UN~K-9iO| z0zw=xa0{r>L)!%gAh$whJ(*-Q+Ks=w3#G)y2m(fRvi!H;zd4^3S7JkKQ3f`W#i9(- zA0<|WL|(scOjkl90Srl7&zjL6c^d{BZ9>U^O0^QbJ+HTIE&1t5> z-%n>YkfjAS)^*caNGJ5TM)vPfb%ZlT%gve#t^t~-UDr&u1~%&>N!_rtxM~(Af4L$d zU1PTnG_r+$DKH{eO;aQEmDH~!s2}8Cr&HTBks%J!FQt#%R5Lmo^k7GSw^-5DVO&d_ zoJaJ)FMD~5!=#8XEydRB3Jm- zE4h@a5OT@lGEkK(a+;FSvMC6UNmw&E&}8`X1&dG$isu^IB}3VP)LLVrk0*Ck`ubkZ`2H#Uedw@g;mi~AWTMT zYIYJ#CI~hrRD#GcEiLdm2i+$5@&DPo7Wk-&bH53Jgn*hv5Jc3I@Y?8-2M?ium?bPp z6q1kx@C|2oPm+b*JRLLMitH|uiq=jmLoiT)X_!JwJ5+~~?j0gt92?r`K`O?%Uk(Qkb83>>A_%J@Q zoSc$m;o}fe9JdUEYF=D%?NFe&CVxqpG^0EQ3~J9alglc~*c(Oe=c+9<GBrBBIDW+;*tGCv`ipufU{&U)TR< zRTAaw0;X}(3IuIaC1?(`fkCoqnCGEu;?N>h8>iC=hS_B|n9%Pk3r%DrRMPJ&(m4|* z0^cr85={kunNU$N`8*=T61*3F8&9%+*+rTxMi5XiLjGjPW-A(Glr>}$at#P4$-aVd*-nf!vh*Puavz~_Wl$=OJ#B}b%)3cSm%e5q8mzpT?w%1dURfxj?vf{Zqg z->)Ba8Ft)3_G!7OhU#ZC-o%KGg!~OtR+D7Tz&)Hue9r}C+;Y8mAyK=0(GG`MRIBm0 zVk-*CjwM}@F@YchtV7D*3a2~aQVYq+iV>M|rVJuav3b`F(2r(Po-GT<%5X`8io0}1 zIew$BwHzQ@MyAp%;)l#E1t+bdY+_Oi){_qfbWplCB)F*%?n=;jP6?C`0ylL=(@uvfICpu|YMQ9X(7M6N|zh}>)y zJ35%T%D4)^AQf_?!lvZ>rKRJO^jrcL0%@YaCsV1AkG7}s2yjT|y^33_l4?BhP&iGe zIRbw`G4t6m56R0~9In#;Sqn+4F$l-Q5C|hTwk%6_*jm*t4?Ch1vAcT%jls$Yo{&Z<-5WKV=c5iQWZ(j$4JL480{wM?W{8ywkEiyGmS)uftaNRu@+ zEPG&&stDz$WGtaeW;Vhff!^JFbRE=tjMyiLz0w`p<= zwIs<@;VztV3stSFMkYwKA##&|r9yFIL)KOhykv%@@Dh&vcgrLg_72BNX$w0U)X<8sFFT-k79-ARtD>quLP zEMhD{WUEf5iDeV$re{5R2yg4W14205mL&IeKrU%lQ2?87Zsg1&J5URlT9bQ8oZR&I z!mCuJ(V#dpSwzrl&3DhJ@hdEujhe3#1`M&?mjP+W>DAM&){^nIP?ByrB2Ebpr8*Os z>W^v_k-0SYSJY+<_Tz$pT*wF;&LOIs5+YQc1$R(jT(c+$^QlEcs@)A2c!J!e+TwC+ zSu7bCPu_(L*`id}kk9BQuQyBzF_o~V8_qLXs{GD(CYOpNrTTINwNo`}>~BJo{4Gh(9jc8j&(t0R)!{) zRifH6L2?5_vdt4w;*=)|8z>q%%XOZnyGB#m;37_ThUpQcl$pn=p{BG<@}=@Wyg-I? zpPnweVp#*|u_Ni(#ZjoeQM3}g1yF)L7`ao(e{9f~6UP^!rG zNMvYn1x6(3EunBiod(a0uWuON+~}P*zNOY%e@1ha%{hgGNvM=}o0TM-5HMepiBlj- zi25MlI#bLII2L;_xB4<;u;p9yOIz&3N7n_XNroHN(?PnNh(@OJ%F6PJiBjd%X_KZ-n>07dW`f=*Kbs%X|kutatPf|5Y)0(qv2g*OW;U zru4;seH%Z0@n3!MUxyk0Wm0bi)%M>f5-c^$sKgo;md=CT7ZKJM5!M$G))x`h7ZKJM z5%y0I5ylQ^Qvg_xQO$i(U|(Mp7}!CaqP^tP?rAf9?jBo}`BAO;tn$S!U zV5-Ge%NEPSoUwcbSO^x7)ZolA3C%7<%Zj5lR1;t4k^C|_d+4_qGM0$jSSG38gaOK$ zyfj3D24IB<8l-iXDtSmI!d-*#E0af-4UhLA?4_iJd=36}87-~}<{F^H zl6=6xt%6V%WIXd9GDji$pz&EH+7Y60ivjBiFV(iRG=isrww0Z)uX?y1Es!qj3tewC zi?cP4QXgsBb)^C-leNX0{Xcwtoe2*lLnAix>_}*Ep#6*uCqTKA$F?P=v;I7Qz#NKr zBw&Y>MGGo1HKeidonUfR2yOETxy{-uXl+8T;u=D0qhYzVWdLG3z+VxhE}uhQ#UPn+ zLdjqeX+ye(nJ=EN(>OkQULnaHG%q%~pJ?08&Q8{}w2Zk|($7~91|g)e#(f$J0ET`V zNO8L}qVe%i!AoD05M2J;0Kw!CeUHHz z=&`fqau7@`z!w-EB8PQJFr9Tr2W#q05dUf{K$cw&vvVLO2jeCQ6AIe;)OqKW0GW1< zjnj22xlzcc% z5o{0ROVyyKfnUoAz0olCMw4bJk(nHAct$z-gKTT~EJ@x0_2}qlf&&tweU@1-8PehT3u)`6mjo zVDMB3au-xMBV-T4aFekG;#V=#z>*9*GMw0?r28iKw|jRFo;qj(uTBlG$e57mAebCr$j1VFy3Vcl3b&KB=O@ivKi)wC{`m`8Iy~;(z+$ zfBNvB`l5dNqJH|Ke)^(*`l5dNqJI8Oqkj5upn8e`VrGDpkRRPV@O8xf%(cMeq{RF< zBk@cF2e|=PL%nZcHfRk&USmKGat{?@2neG9OI4hRH2^9ASQ~QHQK@6COf)7KPPe$a zl4yv8)L?gY^1SJZ?qioH)x`9G8Y3EZYl8j-rjVNY1p*Y5k<{VHNlb=h=q~@foNoJ5DQ%aXL-#DZ> z;f8&PPIp#)r2b=Hjmf*o~yLI!KJo%+0V*%ZUXcP(K|19FB% zu&iL(l>`(Ln6V5Q!Bq4%vySLrrIgzfak72G?Q)#imw6-HH%=1X!vasqjoX6_$+Frx zOFZbfqk@Hc56NBzT9Mh2|3;Wz1;3Jee;9s=B|*T!Z+b#B`CY?LaSh4-E+>54p%5O8 zo9KlH4+aT7MW38!$nXmQ(Y<>(Ulk(0P$l|tGtTs=J8>eXmY7S5d>kC$I4_` zJAg~k-H1M^0C*2-eUtO(NFfGoiX3CJwhFn-2F2tpw8 zC4zAP22ooS>70P58j(n4!oZpv=CmyGHu0=W;Ezx~_$^ zX;>iD&9i*yk?QKJ=PszLpWQ&aoLe`Kd_K0CQPoQcL%t*(m|j=iFwfUiUFV%!ceZWw z**-F$lrM;6Sul@0-r{STS62_SYnXMqk4%hAlPE!Yv%2~@O{q_p0WGTQnyMGnH@A%S zBD2(!F-YFIH4El>rG{q7yP&0^$%m6|XvP=S(+|k2sv8>5YO1TLZ6PylGTv3)P~TiP z+t)-!(=3sujpXmKUP`2ezPe_qv7rg5Ti1-_ZSvJEB=oAQHpbULyYdlo&i2+f(6=vW zY4Ym*d1uwlt(#4VLYhE#^L%v;l#2DFSxbZEK^(|jZ*^TmJ&uZe>;tk@H#9Yk^%?Uf zlUmT+0RPb$%6PTS_$0zr^L)+o8aOZZxu+!2v(o3B>ihYJ{y6&o1nb-3z9YT=Z_>mG z6DqCsU#3jx^Z$J-KYjkcKL1}|{(qk*u+J0dkS5E0e?4Z%_BjCi9Dscez&;0Hp9An; z)dBb|LjcS$P_pr~fS#RCj1)&909@PYej>azx`S9!B5b}SPn6I>GljY#sAOeYJx1_w zslcv;C$%K(M@0;X&*a>YV#zqG1=FiTLvojeW2I%%0<7f1depr(2vtA^$`Zq9k%TsK zhRCe+3r$Lbqy|V#lT@pm<>@8niXXHbixGg$>Qw~7So{D6L(ytslqOfM5aSQm1M0Yq z$nk&;o~7i58<$5qlU%!$M4+scrXhd>j8Is%pxiQE0Hv5GO(N1a_{h-tOJP0Pr-IU{ zS7MMgivG*i6IQ}JYnG=9-Y$Jki~_+F8W=`rO;{LQU`?lu8BLS$C3B{=^7jUmknU2z z5veg7hn|YHCm^j08pptC0Exb#2%KPS>0x>SGQ4uJZlIT<(|3b=3b8BofT9%vepIfVv1AMvQ@{#8Y<3*llv8I9e^sc9H1 zK*kl(4=P9j^%&mXppov24kQkl8|3H@)~ZdI?}Ys?>JNPOaDHp(W3+(p zJIhS5k&}QF{ktfB5(@H)O?@kJLWP1M3hEn7;)aRPiU18#RK#EpMO(2fgD3|WRdo<^ zEUqD(EADg$a4GH!%JgB_8DbZNMBMEKX*Rrk6&5cMq70BnTV-+t(R_1DEi8~8tV8al zCqoW|sLW(QzAE*>iSBI(nUOKI$JCi=@mXmYvP;1m9|MDZP%TTXuazbr^ReUK_^Erhz^h8 z(-uxyHEEo3rhp_G6rew1yx$JF$9%t~>W|YMH%0vcw`|5?GS0PP=yo!S#YoiIuPMvN zCXgAnmUP>zGJ3KNNK0lsJhN@SF zq;o{jW@*@{DY8k$X|xE>$|QSK*E*76&f+PM-e_W=KupeNhLp90dI(&LByT%VR+XPH&`9zsqd;y^(j!BXl#W>UZGA>0?u{=p?MlO9R zS|iXMEM|*ZzZR;zNN)XjHsgLc8Y+^69OPUMMeW~}^1b*nrH5{*ik7ZpQwyn$h3b(A?sbc@Db_4<(E*qU)HTJqSfYp@*K< zRZ|iXxib`vL1=&_0a*VgGXm2Guu>z%C`#>(e<>CLN<$PcM96{SMPv>@rs$?GTjKY6 zH)u)6b(B?#Rf82DK)vIVH35~p)XX=HIgQ=AXUsY6nGiV@>crZo1^2`tG`q~&Pgu~9 zI7SO;YlknO=s;l^0SzcxMAdH@ED#kC%i?jYkz$1%U=LbBeT1{pY7~XJ*&0UqVOgu+ zl@i=y?L-A0`Dg76M#{Xb!qvbQqan@iz>(XF9?Q2PFX-4}fX2k73LhDwGI?lGW4qCC zpa{Gh0LOyo(~SIJUK6;tSYHBp`%tkG&>VPlpA-v`+a0#B=K&pz0$(782V)(YxGI3r zF;$p?d)XnA=w_NUwM@_^0fQ>TiJH%vn5t*@p_>*mAgdPFK zF9(+C@C%2@18Op1D{qA_Z8*ST=y2o&AwW}+_#Yi&SzcQFD+TLC@`))CfYYc$lIa#H z4@Bs8FxAU!iX(i4!Ia{2z(Npws_XA`13^I}3DQ3n_= z=FRv8l7hT4<0_Y=BQnZ1A|z-xbLk(@j|VSX%%D(u$m@ygMc!dqN&d08hWe$OhtqOE zJ0NhJ0#`6GYsNJJLhE8kG!6iKrfqd-Zux-snyerC?ZMH6X2ei)V{0meTZ#$Q6xYX; zc!j9YVTOi7x(%uc8pe%#m)XkDrtGj4;f9T-4SGL}^WzuIk36n6O2fuYCThXD0^$0a zakURqA?Oe!lg^%Lp_f4m8Bv6zn$y*Wa)qGm3t{pGnjzR>S-iT66E}?59%&K$Q{CLm z%-JSdgFR3%E#SUa{R$BVprRtZ)i?m^fk8XYjscb8t|FBg&L=e1WTP${H3Tc6IK^+} z2Erb_xha4_%!vY*VK69qnC9RSx^?W;@bB8VaVbV37?C*PY%E83YB9UMv$oDJi4g|c zOs7&p9U_F>1-zfIOQo0@ji{0sM*aZt%Bt zh=^IMf17WDu*JV1^i1f8-Z$)eD#mAx?`dE9(5t*?Fopmuf4r{Sl zZtSZAO;Y!yu$j`Eg27zCC*WihSVcS~88Q~TTk9t#-7s20^bkPO8klv#Se?#+#Qc8D zI;`LL6a=+o;>s9brlf$`2^56oKyz9Agb8;Z;~*s31|n=3pj(EXZO2AtcQsowL%Jptaf2%jrz27E^o<=+3FFIf zJ_Rv#r$brg;Tk+vIo6$TEJ!D=hH?9QQp*zqXQ+63(fbIblgZ>@NIk=QEj02&trGdX zEG$#^zI5uT(l{mB77l6c0`J$v7C(5~TrIM8TC6is_OcHXO zMGB59E90*&D;sB)ftDvt64B;6F5qlmXh=hwHws_cywagxlNcRmlA`q%(FwW|E0s;p zOSnyoYlk;!Zj%i`tPmAU(9YC`)gRV0;l3njVLU&($5=eeJ~qc;d7vyUum{r!5X>Jf zUqs3z!{Tm6iRUIKJlgw8@roov@Rf+04W3}5c7#gX*Z5jWg=iF_H?nXp%mj|e2_6L^ zQJ1uh<=zxe)ycAj@9CZJy-IYf0)ACCV^VRYzO(xMJ%z@?R zy_KRwHLf{Cbm?1DkMK}U0Upe#VRDqxG6qD&66tG=Zm~;h=kI{3BQOYN2_c_iO=qUL zIz_tZK`Jc7g^UN2H&gFt#(fezlsZN;Rd=1bcZhaTSVC&hTz&+vijYDSrg z)5w8>az4;bj$JC`PZP>kI5-v>`Tpgb!ovA!?ca&|kc`Cj`>4fMOO|K?!NCYMS zgPcwixE2Z<3t$bL}lrxtqg$`EwjMNL$_`!0W5l5(=0x59)Fh6$`3C zz?$PGHXRTuEwavLV042N>Hd%sCBdB8^eSG?ey)}zse z?K{1*G5o{cSZ?4~cI9yFE;H+mcp?5{k#NIouX?jLult z$kIz-NT05SgH)9LYCMPzB^}p2C_-={zB}FedIcND&>`W*cH!dGCZu&D>UX9b_d5BjS;Bk z@E#-DPJb1lgMVcLEm&#$b?g(a5_$j-+#`g}Q%YyhN*Ubz!t25SfEW$Ur&=o)285|1 zkU=jnhYfz$vj3fDg*(HkigfoOCSO+(mFt48+{wBd>sPi^y+uhC7SXj-p|aVS8eRAN`y2#bI5zwj|X#4P}B*C=b z2S@e)?Z*-S$sD6`Snuco|7l9aq?GzElPV|l;Xi#FKYjR5efUp(_)mTKPks1LeU)JT z9{@oy;gpK|)FZrCANW%r_|rc>_){PH)4u}xli7f-ixSM6PZcNJDDHJi0I-Q^F@+5= zh#xVt-M%ogLi0_)4n^a^s2@&CpcTciXmaO<&a5SZjZ;7afcffq1?3JUdQI&lHz?j% z5dePasZ2Y@5Mf}UW%^)L;@UZML@kjl_Lv)#^s48m4J-Ik@*69+>*Z)KdL>^|oD;L2 z^Bg<+l9a0GT+g-+a5{U8&C}*dHW<5y52F-xkE_9#f&LdlnZwCLUxqfacN9ZyOji{g zRxB#0AZR(}7GWUPZvdL0>Z&8as4~EEjCa#1T zmX#h!99288cSbhBH)YfhchjE8j9EveBKQ#uP45mpRp5T>Kp>*Hv4ez}1yz(UEX>E9 zGR{(SeR4J(HHHs|X{9BV>!t`BNMtE)U)TtzQs$}R`#OvRKe9~rYigJblTbd*CN{N`+%Y-P-oqxY zj)!Q%81M*tSZ4M%9g_z7;X5s8Y+1J2O>BuReFzD%=|odx85t_PAnmkR8_7*?#?m=d zLY_9?ALeX~J9f-p;7y5&uY|&+UmO9fQ@Lhc3W<-zF&5N#W{jjsy`7v_CgohLs>P6FIO;=-#FEinj9R5zH?tMO0dj*6wk=#7kp{E66 z;iw`EESAIyT0wZiu`>3BkRwb%FBPZL9<>*i_hN)2*hc;yqFQE*)rlm=xHBe7W9k55 z=W`Y?g45hWa0of}>3fYZ6LzjEI)RM1;6vbh`<<#O32NPqs6COv)Kqf&RW+>0(H>~w z#i(`Qbd3hELl$t59g!xhGDdbnlhpIHRTkrwA}lI8lL&AH4;vZ6VfD;U+`5>GfFVB= zN5&k2&VunATodg^EYeyL3~-0HPHHj%A)Y-h5^G1ei~O4byUyky zKlDoEptVsm17klS>Nj05zOfFNJgx`hGBw8@H3*|v*j8W@;3D7HE^at%*%5LWR7Dg{ zm_>S`>di7dwiaMwU5`XD-Hc`X;5tMDOGzQ1xCaQ8rSq z21Rn&Cy@ZEPq{E35RuXEjr;G+L zGb4lv@$>*+NcI>z-_0V?=zZiV8TcNIg zPD4hU!15+%VwoCBZt`0ODwN}a$>Q@Hg&I9FWY6Xn)*{n$iN%3`3*6LP-Bj1uvbf$m&u8YRuLTA)oe{wf z^3zasXw?P;hmI@MT;O1DjG$?oJ}+X*%hr!2|Gxc(Th5{^DNUH3=<;QRMd z4%y&TJ28f}X>VA=5zyD2vbd$Z$WUBgLUR(7Gg!xAZ<16X@HE5_TYihQ;CRhn3mI%l zU@ah!h6bjll3VFac%*NV5;k_CIE`;$fVdQH5R5np&<3!4mlc(W^-exEd_vyL3t^bb z(v2ee0n)&7N8umap^CC$i@;iLeF7<1w56s}NP=U+&Kc3e>!>X)^<^=g5QoMzcBLSk zxF)4-?;@g@r!)m+T`#r4z4DHp62mg82GQpJ(He;T6$wsXQeW})xGCZ_G*EA#}Yg5+% zc0)}oQtiumq-PFO>wgaR5P;_XjhVsL3{N$v9>P;}=b()XQ=a*CFcQ&A!y$hU7AxLH za+7~D_2r}*=@iLtL=E>)2Z@?3L_`(tbEJrMTz|EeK1%jPTWp4f{^CYLvhAnBr9%fq z5pE5KnYf;4%Xq(FI6Zc7(jsebwOHb4_Zry7UMg?a2s@<2RRn)`~z8IMAH z5CPB;YE$8oqA4sYRQKvzi?9d*z5wkZq7Xt1CfphT#E9t_hTWZ9HN#4WeAwP_p(0Uw zw!l_j15Yq#v}tKfD<{*1V)Z+NBH#RrFM{3GQ%~^#^4q6mpt-B3{Ev*{@11)|HNf$p z0~4iq;FQMRD{NK@5J$mp802Sf?P+3oWIB_oHDHpc7x14R*peRV40Tu66je$-48j)C zB{=9IV_^tT(}SboP~hNk%=}Fm3=eJ~3!WX!SIc03%2UG7WCriS(LbDg(FRD3DO}DR zCCAschaInI0Xdctd9h)JcFP_~Ymm}p)J%!F)13(!O$OmL60IR69L!)wLTk7_wE=7n z=_a%60WXWF)_olA)TsGVLGP4Rh9k|OKJ+rssI#$$;dlMnG%?u>{D^kA)F`oq=qMcH z#S8_DAsk#!HG_}PA`tqy8YQY`NKD+KudmdrEux~?p{8#>K_4oj);r*#$N}Y9wad{=ntT4umy7OV2bTPT&+S8ulMoy*kAui@s(z80lQ&BKZ zIZ=x@p%I%IgsS^kER~Qs;|_8mWrSr4u1lhN)hMj)82CDf_+ZuS5Nn%5M6qn;&Jd_h z`bE`{2J9nDtN^xhaHpr=$$@3*g00EdlDn*|tQRh9%x__gj$oFAF;*$S{2bj$IB4|} zAZZorSU8mEDNcd6$tb&kj~5~4xDtki-ZUyQG`*&X`6kRt0r65nY`xj1ws{HqDVB!i zS;{X=uE(@r%I^AYE7e_*T1k_T40ojIDYIEWrKG3rGZs5|YVF+Ar)&(NHf3;~p0ilV zZ0p>nK5I!sHT`MV-Vh3gkvg@NNuf6B%S^tO+CHVbwTHm#Tl=khsSk9=Cr^AXbp z#d2P$Ep;Q69;F_R*}l}I9GY~$bVIeI2bun~Z?6Y|=)c;vqf#q|g)QyAHMA2^`AADt z-HTv24pLje_x9i5ou64Ztlt?)j{G;fR;KVwQxv9STS_TYw3~BVv=f>F^&H!Fh;2K1 zXloiohvO(L;WeqTL8(ueatkc^0}gDO5_pkPp4Ryp9tU78XKMQdH@xb^9}tt;y>!qkca<{^!SexPN|qU#e)BM%B0H5KK#dTT5C5?b z|FIAMu@C?8{{jA^JpGh|OTp$deFjjxRO( zrZaFXo~aoKgBY?2miTZxnLXB{i$V>bR`5BobP-cU8H}-sBq7EIOQ3)pF>1_(JwiwT zJcq7-lr?dq4+h7?d|hy?$+Xy}7HXrFs(8>2uR=}K85Uk(Lu{t%3jN@mv_vSXiY1|> zh>8MFD5=YfWkCTs^!H2Nm>g(VJkq>SfCyK$H6hj2HG8BMH9|;E=zpe+Ay%v&6k9+A z7s3N+el+QGj;tl{mxvl%9EOsbbvRV?t9OKz1j|G+W@8kf@BpW_c_s?FuWT4dM#5ddgBkP z0hI^jnIhmQ03{%uSc+`v7+n}mV2O)X&BeDc1{dP?D7#=BxKPbWVedDG=9-FP(O7Lo ziYn1|hl*b;$SSB}gsdcZ@m1D8s}ip}^)au;)_3b*`A@R|*7Rw|C?%fc*li3i82I52;!%3;cw*CD=BH)7=dpzr0KYrjf?9^NtR><%9!EAvL@aI z026Umqt8lsX*@CiRKOkEskF zte*3`u(UkCqqkzHKL%YU2G0S)O!q-%&M5D^nTCyjbX z-T_o7j9=oYWV&1t&1JF1D`;67%MD`qR)+;l%9<(7S!E$t zr?FrwhDnNL{*+bJhbmZeAT1iVI0peimJrC5oC$}L?T`= zglf5Q-SVYMb&V2ENK0VFP6pgSZefxhoZH)X*P`ld^KK6Cf^SQC4Gr(sH;k}&RM$|_ z3kO={Hb}E>1S(kh0KZpkR=wBrteZ^^@g8+8Jb&4BFRtJBbV!>Jfb=;qLerdT={plE zJ+{L&-4S#KrI&V2Xo~{J7MP4A8B^j6GD1|OIXXj{9iiu)v0}gaLd1sqH0hN(Q%_ahw&m|R8Nt_54 zgD|6wnNMIxbTJRR2GEFpFv}*?@yt>{YanMjKwr~BUz5`SEmBI@AYi>Ahp~+I^Z<51 ziND$P&5(IuD^F3YQ948Z(APNJ#)c*bp=vfZ$TVv&rOtrBBvk$C#TMm5XliI_sBW0+ zOf|(uyB9BVX?0C;L%|lb8L^?$>wO-oX3yr-+%TtQk+&%gC%~M{3L9q5w;<5+Gw+1&YuL!CTK9wf_RZrWoP33!21b(Jz{ zzOKFo$ZiiL6s$vm9gNpA!rOHVfD$c*K{!@x5!FFNe9&uDq;#*3)2$`_NGULqk+V); zHnbTjoq=#N6c_aD)S64MwnE;S0xFsTE?~KKgJsa0Oth9q;o}hxMI65x19J`?0i6l6OC=5UGs(HeW^Nj=dB{?eophx@SsFRq zMxMo!p905k z>SZh9WQ~O6G^v-_X=xUwmneQLQA#$?hU3lYRWGcx&uq{c4fq?akCnnkw)KGY)pizU z7P&z=s98yjr!HE~Q4M+(AfZoMn<@>rMQs?5CTYWMIO!+aZz5@fEy=Y9Cx1{68<)#m zDClL=(nzQ11)pZLhi%370?)0LOEcF>@8M;>{}QAb^R#1ZQY3okw9 zn9B+aHw+!R@z`T8KmPddo^ZmIBSu_NTzu7-F;|zAY#K9Wb7|={rKQ(-Jl9U1d}C$h z^{1S2b7kdC)27`rZQ89fXWlkz)*Z8F-#%+rcWv#Rr=Nc3ym{N^&b_m-@$QzE@6Vrq z&!R=!&pPV|XPSDTzTb{*Ijqr_rCYNJMOq+&6=NgcXw~wwr%_N z?f2h*|HBVI{OF^PKK9sSPdxF&+O@kbyX+SmH$Hj!<-fe@s;4(?dghvIc3*$}b2s1o z{LMH2=N)(addrqyZ{50g+qU1_d+&?)-uu!IfB4FS55D@~gZqB`#x85#vA0T{m(q}&NI&(c=p)?&pr417hZUG z&z|>QeDM!2zx=_zeILH@#-Cn$?T>H0_11v{2lns(^ZW0=|K~sd`R%t4{{Hu$y#M~E zfB3^^fBMtspM3Jk!Gm9rpHDyi@{2G2ia-DR_rL%BAI(DlK0hA#2lj$1?5CKSTSb8<#pOSx0ZA*EnD~0#HNPZa)yrCQ1tO$sY-i$aLMlX=bv6%)ql?Xilg7U z^RAq?q{byVSwk;rD3a!9`wE|_RyO>0Q`epOxA?NRJT!8&GVr=vv-=gdYnx6l8a42m ziX-mYFu(bduKo9QU9)b_&h7Q%-rf9GRn?m3Z|vW)@2$JH4aup!W#o7Ew{{ne&b@6$ z*E@glcjwHxW#_%G?b&-(R@MN|lAYiCBKx;T+;?B%nyRaI)E}w z-czvA^?2_4uY7gRlzzW0ANkdm;LK;1#Jg&4xv3?1LvhJbSx@}^_Mcz)*FU*DjWY}9 z7Bm+1Ys&l4fb8dPo1Iq_9(iEa>Op(n>s~uJXaCxUF{N96SJgPux(w#?ksK`HR7fBx-a}} z`8Zd;H0F`(sv-rQjYYZl6%Le|Wtj}6pxGrbN{8O8PYcCk_ zhqtd8dFt|YH}sz`uPIvopS#u<*2SLN(~$r1=vQZ7GO7E#ZC|aP>0UEn`}v=3$liAB zQ*-KcJ84qv z*cDGqzUi*#pE$x*+3%#zuDl2Hlagy&`Ma-oyS|LvHEjOXzK7Ol?>}bruoI^@7Py`q z|KaBop7`|Rv6`#s{hc*G*!#_N_EdTY4 zFOD6%?XhQfT=vzh)<4cj?n@rMV?|APWbCOCvDKfyJ8Q!M*Q0losjH_v@w;bdR2{i~ z^yo|8Y&zqF;=%K#$?LLxe>?8}s`G0%9oH}MT<~pMLpaUhy^SH~sIn zUq?UdcjAhU7ms`8XYN^*?-zN0(mm~lU;gKW;qJ9xPRQPRZslEt?!Vmf-68i>-FsoK zKmYlwI!Y4RKiNOHaKZbo=#Zz^6vlR)tvtNDsPV;3bFQme_m#iotuH+9xQ;%sCU40u6224H!R5ca_z@I9k!+W4-E_AE7#>*`pWI= zs9DHZNTDNP^zAYVhfA^`Qc0BwG*ZVt*>+<$AmweoRK&g7QeCy6v4h(;$wxH|U zFSZAw;&3Vh8%!<}+o_yxUWe>b`?XN%hqC2Z)e``_K>Bmg{!`-f&uHviDtR8i8 z{NzW*j6N#otM+|=`z-H?QNH$B56{gjIcd#|z%6$j(IV#!y6M>QI|uHKW_MTnx+l#2 z(o^L+sbXN!2S3{M#NHp?{N~AR{m-3Rcu%Zr)oCZcSv#aFCsKM>&P7`5Ksm9u@XVZ( zmM*#TrJRCG)(`gIUR2!u(LVQ!n??+5AKta_z|>O)gpM3Nuw!ste&XzwO;7LMG<5z4 z+2yOU*Ebdii+8R4;s-yy`^JGgzkl?VImd7KX;s#Bb;S?7^>&T)Uq8EW>os@0{;X@{ z8K<9KF~^--|8n8pl3D$4EV-+2Se10v%Cqixbm3FW-rRgc|E>2FOgV6mdthzLtQWdp z{O|D#AN={oJ=6QG+V|9)Kl!rvbl1Gw?TWq~UUf|5tM|`)e(7CrE?M(XVb|ruc8-2M z?+t0k8#&uYow{@3-#`9ji=6K|dd&s9CJnp;5nCH^!55_CwbnbAH{_@2suA zan`goW3qEMygbjy`yMa6XWgQP z6My)-(O;IXIpS|w*Z$$k*~k3xoI5(Q7hV-BIJ2g{YQf^Mq5BSe=6Pmx!TPBsacRR% z-npR*_7-_Y7vxu!&l%a3_5LfLZ(Ue1`^1B;tp7e@_>(^$xMtvUYvy(Rr7Q0TAJ%W1 z*4A~xL|@hmq1uDTH03S&ub(W<`pYF%Mc%9*6+iuj zXKb+kD0%HyR~D4K(*Nv}W;I=vbA8+M=g)lX*opaTfBT95z?tjv8j73u%d>v7<9C1e zt$c35BOiWv)yc09m|U^6-!ZNcQ;YhKnL42;Sn$AUM~#1P_PE&I*FI{#^OwW79C`7I z;=exj*^M8(Hg4*u*Pc_}7&EV7*`qbn4_;9CNw#+4giG)F{)$IkkDPG#dw<(Af6Bh6 zYiG&%m)`ey-m?>m*T%*#?mG2@zdm*IzWjBr{_gz;Dt${{-+bx^u9>m5C$-Ci=HAow z!tlXcTr-XIp@)Q=fS$x9hh%uN(HW?CP)1u6SD-(7if7dQi>p zmMnIkv-;P^t{AiHqlbTd|ApgSle-H>@2SW+!PPZrdSymp*x$w>$D)+%|$W#23K z;|F_RzU}GdliNmrdhxQm-`V_^&YwJg@_XfPuXLT$-8gvPm(%VaH#&b-e8X`?(o40H z|NSFAI`XBBA3c1N`nTFMU;Q6-sx<6)*Z#fz+*QY1y5!GqR_(uHMAqzO!?sR5d(q!s zzWnx|KHc`a+xoTL=50&PE;+LD-u0C`|8(60W8eHvcFAKU>kec+a>{`Z>;L=lN8NvZ zDX{aAF*_E#nNziO!QCU~oVwNZ;^Zs7Sl*N%TF>!ilzKfABxdj+#s-t}z5 zpAI}f>cl%=x$Gj>?nS?GEi71n>i$QruP#`1-EUm2>kI1kj34Qh|2Ss#>uneB`uw;v zFYEXHNhe=;O2NiWxeK~;ul-`p$bf&){G4016*lh5sX7qfUbFhhGwW~2J?rOkmiNXy zAWvax%j?u1*3@L0mtErCP`PN``cwLSHDqftyJFSms`wk% zR%Wlc^s!f?B~vauvTJ$OKBJBME}#Fcg0oo8RUBkQS2E>}U-J-bVa z*3_Tta^*-%}BFi=4@v#NktV$||0Mva|#)X_IxQhL)vLr)yOKkIl`)}ZRrK`*x7 zu-7%>VAja)2`fLDSadLJ#GcC^{^a7ktp2}H3fJx#KDg_`<+&5D>bT{SeM?Sy>87}L z%asdb_dOe4^H^2Z&WrN9h8(-MeCv-29>3?z6~1K;eK{pQb=Kxj7oD`LxFS?=)sF9c zqRB6;3m=&bcWfIi?O5dAe8LgCa*z6IiJTa)tb1Ww?I*__wPVT+8wz8a68(n^y!GYV zUY|VY-YH|V8?SlvzuYIwO}XpNO?-aatd3J3zaeMY_lp|k{$GSzf^yk%=PeK6#--@bg?fU{#~#;%R;$;lgdOK#O2 z=T;BMSu?%x>;(_Jb9{D{%OAUT+?ILklcCP;tn7W~`-Uznyd+C$x_wku|A9NZ@4hxK z@XT!=tqi=d@woA^iL<8_U41a8^W%bhuf5`m&u=Zro>$Pl?5JIN^|5X9-}0=N`hEAy zk~hB$Jv-J_DJ?$g!JPa}w<=4oS^n6>x8A+;z*Ex(P0Vh|Eqto$u5lla|Eg&DfE7Pz z`~2uzuWO$ClVaEOQwsZCbJ?q3UYRqhAW_w?;NYa?dAII}dmpOq_me4w>#Dx*$;unJ z|GJ{CJolY9-SWZlPwbkuW5mQoqg(}z6E`fn`>4viIcsvpO`DP3m8ZCJ##S{x_jyI< z(-lLOWLGr~m>$~rvs;SR74-l02iyDY&AXs+z*z_TO)cm*enteQ^32wXZyo?d^Z_J@;R+ zskpxCZr69WPbqGn{NRAQZrQPR%hA!soPnF}FZf9v=SjuzAvs zqROg%m3hAXIk8O-S6$!_@6VZj$?&Ef10s6{1fLsl`lg(czwVfKT+z&u+?p!)!0xTf z_T)708Ib#5KVJIyBjMK{iT?GG{~b}_n*I;H<63?k?SDoB{b9eO2mBYX_FCSH5L}oeyB1-=*&n?GY-wP>{gcDAr~qqy_~dBP5G~aC>MlEMd799i%|7^y1ln3bYmWyYaAO`El&Xiv8h(zolCC_hACJz~6_4 z*iuV>ITV~0b}C3U3X$eLt>ia=$ijsCLjK92CfTP^2 z5g0HlUiRBciNjX+9$Cd3jB^Le}R%6l%@@hH8&{GJz>snP=zK*?--vHI3S|vFM zI3GAA@|Qsca$GZbl>mP)j3f#9C*hS`ZKF^OW%*~RNhu&l^%2PWoQ+{1MOE@v<3XHr zJQ;;akOp#erKFO##PfwFiFP>w30RP4qOop05_u1Ks+H&lFcet|hFWQ^ixig0E^miV z0RlQKPMM7f1`5RhH6=(XL-Ws+#7dZ@@oHRT4-Q+A1MTcn4?dG`eIaQMftvgeAR(*Y z90HIE=mhA8$TJ2>>4@@y4DhY-ZuZ(v86X_kEGe`Kd9bdoS%MU7in#)xP&Aja{FZjb zfC)BmA!PIWj3JX@8bt!q-izobDqU5mi z!^Y0fmo+T9I=QSue}%Y{xdIJsxf0Fck*bq%TohP7m@^p=bW>^5jiFORM}}Ulcg28! z)MPw>WxN#5Is8e&Ke*M&UP+-MSs1c{ZAw{GNt81}YTS^5*xq=`&w(}w_W`?_j?z3# zU4@5Mx*E@`nWQ4tEMzlh)8+|A=S-+5Z&qUE6DlfBInNxmYY+CZ09LIU)&B95%POTN zB~0XuLi#o9chI&PxK9%*<#N4}7tOGFre0ZLlnzGzWZZ7oxGq9S*nzwZIl0J9y*aZa z+GeFq*G)=<^i203jeia*{-j>I2C4^;Dba;S35bc>?79kx5`?}mE}O0q21A$Tq*JLi z)CqNj;|dTb2r}DvEgB85-UWX*JIl}%Q7ZIrq-e2N^>j=ivcSah)01Iffyo)M0NVk< z5Uipy^#BVKIyg^Xk9=3vFiHcH2l2m+K6Zfg z#4HOh3|rJnt&O26gKeXtZ**eA#I+C{nz5+B#6b@Gh0Ew<{AV`pN)jP;3Yu#njX=(k zCpUbwlKn2(mWso8a4VPOKIIfe1?V6$Rkkexj0zpsA(#4EkO@f}OMz@|63GTH6qoYA zodIVZBVmdA+-A>m7;bh(l{V4)Fd~_7o98@^K{=)A3p-R^mrCa^%stAJL;41zVVA)5 z6Y)ubGjcL3xMIQdumh$V+QODyRdAJGFbi^E6lI4dBX{Pu7=V1B;Fza$P%cGkfcP?U zBghLyJ3=DEFFg1F-Qlbt=4~;x^_Nem)NDq~STF2?luf*Z3ogtSV%o&Q0M(I^r6}Vc z*y))-Uc%8%XrW|D*k#9}^C-g3<}Nb|POntdU}R(|A(qkFA=`kZ6mCb>!h07DT^H*W zoC*BAX9H#d4Ni7|CIG3v6zgCiR(CQRj{*RA(z{tVXvqeL5gxBG| zU3_z6b9fJEU)dL`6z@U~DdNq~nW{yXF9y9@m3;))1o(9(<1rvUH-Khhe~sp3hnZ%> z)L^EwRyZE(u_E350rFW-L?sZoF;}=k!B%KZ%6P|?u^=0>!d5aK7LnZe{nkE|h4m@K zkQhto8C{4VJ4~|U<`uIHv3=Q25Vvun7_4d3*{GV#JZ;5{u>|ZS+)}_Fii6OCfvHP` zG5;a~(f|lY?B24N-C@|JdA=yLBbGE4hph;^p`kB7G-6&j5sN2{)@&Ru^iYa69sFL8 zJOZ>9FScyq=Po~O%sRszX@Dk)b;UAlGqDi}b^z?LYz4eE=Fw{yzd-(?VhJ-9>`L~s z64+rhzoD^y3GPAG^1PWMiPRC4es1HEBRKiWdnoYUR_9%vY;fHN)(A(#Dc}fs5mmuT z*u=av>QvfPAdOLWr|jW3N*MWYG)lZ5JJDnMMTgBSTa+={`r=00hlmNVU^`>16>+vZ zG_G_IJ!EG>;r$0SbR^RW*c-qpn7t5;jY|-KVGO5PrB*+9;)|7`RzkCxfB>KKO}6(S zEcG0?;nEVbZ_c<3Y0Fk)IFol8GiIbK9qtUKvXL@?UW7H&YR+B2o~cb&m%*lHVi4#T z(7nP&X!`Uiet630b07Rk5V{{o_gH&+8NtR~1T6#9-Tn+njj*&nM6gKkt!j0fjOE~0 zzVRCJz`|soiLx4~8g!7h9SLhd47n;1cPU#*3juTlgh|~=BDS!h&~hFpJV63%KO9*UFT z$sq=OD_e)QHP{!60%b-i8p!U9E)bT|QdQD4S|ygl*iO+1G`5M{K&qpl5EfhxS|;S4*4` zD|5Ui-x31OaNGhXWe^9Vq*BbVm>v=uqL9FXVSzEHgTliPikvlWlN3QO%4c__li5^z zELt0?sP@i+XTS!JYt|pS<>8_RHHA)iHqmSH+Y{r~TKoYL-4Gft0VL_^1Hi#K6JGN>-bH&ymgmejKx&uZu3G6fg_(rm6 zlgj`F$#m$WKv@JrV6zhhbx;8!(euL-#cCFufUqxkA~g5QW>Q&_8nUvvoue6Lbtb_m zu!n6Bly(byJ;qkWKx{5;jkIN9YaY}VwNO}UUtVbeY-lue!uB!}CfTE)u_tMOWG-Hv zW`oJniW0yEFJ_xWC<+yL9nf3eEmZ^oItGvw`jzIe-$4FU8Rd>b@^*(7yQQym+Y*i0_XcbxZ9tW#LEljY*Y(h> z>8J?`;Xy2EN=Peu@Jo3f=5kVvyero5v5t}PH`@ZZ`e=p(a`~!Nt9Vj>(2YbnmIWr+ zJPK-~o&yf9G&_N04&z$IDWZL?;uZ(RIJnJ;EYk4dh7LfRVG!8F05_e;urCDp-Zn6? z;bp0Pn9*z(xTQ3w7*vaR#kHBX^NUEeBqV$QF&&NT3|B3up8Wtd7#ODUH>iWn7;-&C zXAp(w!oEm<1it4c+p_h{?=G~O`Tb>+nBYh}X%(V5yow;EGkgQA;JJ{>(oBhYZlfjK z3%!rW$(ApcFkEY)@x(V`38QU2TLEC7$JO#3CafY{9=@!VMKb|h{a~bvN&JK2=hQ(3 zCjdXrMeGy|F@bHbgGGfZR4`@e3-^nrv3pz=S7sR3YXFbU~x{dB+JeoV*ILBLd)XC=Xqb?R5^ywzo z9B^9#K3-6|sK#QEuM)LbgpM-Pn>oD7*`i>7(Dr%Y-YjCtEN=Fi#(<5R(<@p>g?bj| zTqv1>XtM|GKW7PI8ZJA?3CK(h3@kuehQ;+j*p9Bkx6y>~PAfP*EY-k7MzVL1dQdZn z)**Qk7ie=bWhMsEXh=3-tD9INH_9k_gBCv8l_3AV91ORG(iffGlJv|@=g5EyY_SwE z^< zhKC&Yvr+Q}V<0y$=eiTlt?LN-vMCo~UUD>+9!!Vy^o9?vi33trFi^CUOHiaF(RYMm zL?qMw+*Hj@nV@)$Hs#8+U{k6h2FnWluiFOMMc8N`R5_j72klcH+Q+D@s)3jZ(?{)t z@_Y)||0rSo7S=HU{(EJ0MWxgJClngRe;<+0sQu5V{m=gZ{?n+{YUsMXJ?)z7Ha zYUC=S$!TL4L`C~op2@7F_N_ajSnn*BInYHGmNK!*ha*WQjKNFgF@_xEsgCKTqR z!RgME%BE8&#|P7(4htOQz#A$7agD7EiXcHhM_y;?WItoNKo8A|UC_9+EFN2F8mzG? z#+r6!ydGWSBH^MSJ}b!ISRL*lJs<=kbQ;0ATIErYM8r@iPlFCJHKPSn;Yt%-4jK&^ zh~hm#U5PAKCNh?HrNk+_V96r%PSQZ6K#dbiAcR#4!XZbvw%y=>M}xy2 za&xscR+?rC)vhp#X^;*O`cWLO^5l3vIuI&=O4?vX()d6bP5eat&(&X?Kc^SBh91|m1>8xxYDRECwFeuUy8|F}VYR&JMy{S&w!8|_HtUn%h7RP!8@DiW7sNBfX z42~3mY{QGeFebvd%m4{cRT+qZunzmeQe9tSrV&7d>V>gmz3WN?_6i_^!NOpR2kv%V zW&r0J76oGyKzNMK`vgk{b$W1_v0`kXSYgXbMq+4BWE+0c(2=vIw}t2M`U8aT#wZV$ z@`_h--Dxx=psfz^8pCN*4JfXLF#*xDhb_ARwle_O9ACE%`j8u8}mJ+QC&`yWI^lU&ge27rw-Pg?lm1Iv)Sf5U?DoLpwO)_eQ zHKN}nS9Fqw1-cdi0WH$Z8rzx;cO-kYZD8y4JC`K`<9n(K{*7Gp_s(}4~1>gO5Wx)%1^8!(nN zv@UE~+G?;A&2^2f2OCZEjk?Bzjr|)M=LJ0V2Q6u?Z)q`_nvI6VOBOZM&kGn0jdK?* zo!8K~z?j4GH8!;xiy9U;w6a25n+&Ls7u8VD^3C@wu5X^Zko~Ni)3B(a_27UpzoE4e z%AC&%tuvO?HMcg*UAm~Q*;ul)c}Y`CJ*$46r?IKAp>cjQtEGN%ePb&-B^p^(M*V^8 zhtaaIZqXvFs%|N3eKWRiZqt&3n;RA^Y&8}(Et*%~+~S#2&stVDXHh*>#X2>2QC-90 zfHALbaovJ?%+myGl3VpN{Q*AdM$mk{d& z^#eD&FovRl9#W(SZm}4X!aQ;}15;ViMzVoqh4ezT;1c8M38z0J0)^0wL0(l`>Ij1IVu+TLw1`M1h4-P~g^b6nJB;Y&=8o zv(zkVzJzV}@WxB|kTx|~f`Y?`ddwrp3qu6!$Z`oPyCEc#WJ#P5uFE~1j<6Mr5V)h6 zLQhsMxP|)!V}aNXwipqzl=-pV+Muzl8wLhqOQ;qggdUA7G+f4{$QO)+u=WDlg0MWY z9CjwM4rLq*n_{Do!#u1o4*m=>Yct)0tp$YxW5(F7V~aiD=|Isn>O};YF6b9xoftKw zmp$xBW)rBZ!Ppt#Bc-gb)!^3&sWAE2XZn%`V??@>(jOOd_W;a#Kuj}0ZN|X+f0-j- zibsRO1`Q3W2sN#aSW%{hs~T_%!ybuGtlfE_JD6Eg3fWp1d0e$3 z90F`4)~Q$;6;YNBojgdgke3!nbxHNCx^$#FmN9Ww7%i-})55U!7L`CT7&sJ@!$`-& z{b=!y3b&E*Tfb5zj^jpz+X@qDEPd zm9m*pV&rIOQDQu@L9m3d!~b1zV_F?kXW520%jqH`gAz#}9VRkJ8sYQ;zSaX5@0<`o z0*jOO4nOSdfr~8e0|&ktputnS$iqSH@kr7w13Dx|nJ1+%kNkwYl+R{H}py^2CvWN>DbY_rnRa@6&vdFyIV~ z%Yyn=^2TwLHWv}^Ir|}N*St&ej$+#E0?1*2{07fnustEKUU`=)m>H)V6!lc2bZ+56 z9109TfkvQLXyI1y4tInjD+SM)Ovk!nz(&Y!3yAw( z;dkFG+d>d*Ez_R@mJUzxJ_X}XJ(9KA#ulbBUq`_ZAeoMWLt2tYGSJ6bcTp3U@StZI zjXU7c+mvAz;ekWT%6c-gYCT@0ZNcc$9jPy6viTAe943f zOj-IMeh?sSpu@4^Px1=A0&rd-$#XWzqXnm9EK)Cb%%eMq1Tseq>NsN~1K4t7@qu&8 zIzdF$mrSozRHZ515zDy78nesu=+dam^qiMQqJCChxLOTCi4vID)WFPma#aa34`Ns}H}^nGcfRA| z9WG~dES*u~U`fQ3aI>jcM#GVz$|uZiYMd|XwO5eio9dxT3<>WptoHD#i|7`x{MpEh z0pg(V2AVEt*y;`oHq~szvk;*xEds8{H%fMj2v(uI7`Ip^TtKpr^C$U2MhFHbAEU3J zq&f}BU6GrpM4V^r5RhO#`H~~TnHUI3fsR|A#}WL+`Pv!&#RpeS#JkTc+y&kQBi6as zkn`SI1)gsO3#UV@Q1P}D&I(|hwQUP5FXrNs2|1b^o~Jt#&}U- za|zfc@O{3LuNNF9SldXsY^0TJa^(d>T|Wo47;y~0B82l&} z$;QJxj7d_P&Iq4Qd$Y69O^T1KuH5K?&JK(ghvZ67Uc3VWx24Kb05>_L7-fgZF2dzY zKZcfwkY_T)i6)((kgVb;V%$Uyzb-Cc9_P(R48O)T$1;f9Y4&6(Y#0g(fPdCl41ThD zP%@VUc@G8ZSZT_uZ3=|0gfhg(g>g~t3)1kZZ+=fPPZUkE>%Py+yW{nH%tX`=rKe4G zHe&!AG38QXg-|MC&ULA4sRmPE32xmVkZeLUS-A0B;OVu)CU`xCU=+ONnVwX+H*d#X z;6nVKJew;gHNLeE3EY|*lNo+#Lc*_ue;I?I3myS|B|x@-S9C`np&J{mvko&7CahN- zTuDxeb~5C<(8IZ#dq)~fXgs_i=ajnP&IxJ!4q-OQ9omGRY;_0R$fSRKvD9s z%DBIhaG9YNAwBcf&o^Zdw&XqSyV3RTY4!vd_2zYSy;w1=u zV1SYuY}2s*fC5|1ypQ^wi*$u6#Dn{&gWbv#36AbUvA=0&;X;ygN%DBwNB&{oGuRhX z+`VfJH(KF<+mX))yM;_p8)(}I$T`H+vg}ByoQsFsg#FSFSA9FzkE5sQRy^HF6afRmpw@(GZs%+t!Yi?1AuAF_1sdec3YP4OrA78mXFwl4RZl9>`3*LzNVHF7X&o zTJuY-+`{mfP{Ik^YuaiYfSSgWAQWO%w6h^>2gI3L<0wz@a&I}i3$Y zL1+!-4hBohX9Ha*W#4A7KY9{RF)T3q`DFv^6Y4CW3pSOOyx-fDtN@|}(pmDE;Rckj zZP7wq>Vo<5LQ7EC(Ri=)gxQ!tAw)2}>2RMHRi2On)z(}D&dP%@Z6;str2Mwu=RD#* z2a1@q#0u7^rc*zwcZ193xg3Gxf$OXbV3H>+`_0zVs^L|Jd559d;wr4E$^*tS_%pYq zg_Pz(=D<}Qc+QdFij#bHP{1BV{81@mB#TQE6}SYB8DImSwlatg%g+ms5aZxDX$6E}(37_p><@LoaS>22 z^xH)y=@Fxc>P$?)2wd|x#Z|k%O%ee_UZh$&auPD(Y?J<0;IuYtLma(0>^Oepp zkkceOFQYMw-Q@cP^9W_K-gp<9Y}pvglIeJKyjO_16jZj9^DC{8T6lwEk=20uBtyu$ z?OVRwgP_UmHQ*h4bOdE~KZ2iV4-UVzMj}YEeBrTSCgU%#%GS!D>#L)X@t94$qGDuD zDwH>@t#|w|RaM+6Ij#xit&TYD?F7RGFA|R$y!v@S2G~V|D-2ZBxQDgtA_c|F zkiZeRJ;N)*0edt)5vU}~*JFl-s07NUdj+G;YC%Lq^HqIx7RLKM959)SSHQ427NPZo zKy)f(rcMAm049%hoHM8tRg&E?J$Svvo-b7T*SQR^AaOAX+372$_H{=!8p++Dn%z z^OS2NFr^Oql5imS zB*&&<7%O&UP^- zUr^ubmxu)6Y$gdL0}bmuQ4_k$m4K>kVD+ObOu!ru=xJY!-Tsr@fj+OPpR3+VGrtmy zEjPiEY^~D(64_cAvL5f&MCGs<9j<1J9w&4>H%g*N7`aB5B6MxiB-eUgB&Nao$&dKnF7gxe5cXq5G^oc3E{Ghq`wXYnxqK?3rvyOZiES=iT>w`dGOfA zA)xWo8Y;fMZyH@zR+x4^+Yo$qDwoX$acw`AEsnCZhwxiTH5Zl^ym<5~k&ilKb0R0` zVE#eRQjW=Ow-Ln^Pd1d63?5C>M@6vLoO!gZWxc;Gu|z~P1xF_b(w$q93VoO@%77&< z{GPDBsd3fe_-TmwJd^|Ju0%()rnJ({JsL*MTwJYiZRQK<*i=}H*qbj+oEJ>~$#VK}4EG@k9Neq5&gv=%vuFIMPLo7}XI~_+GRkU0M(nW2N z9Vu~ETcSt&kO8Lo2p0#)%lq zjtU&06v8IVgYXftOxCso#mGSL8MLs4vkxzYY-iKYR5+G~4JNk?V}^uuK^U#sV!=rJ zcRUTdVJs8ZUDYR`2V-q&cfLn)3%Sq|BeE=OFRPi)Ds!I;dL`I{&iuR;Upgy1ySCByY z2o2H}xWuH{RRI*GFiBq9^mzSjaJ9WW7+I6piTVU>-tJaAcYrcCV~Y!61#V!r`|#u; z8&73#g{l7I)5ruEwn*}bcJ17QiE5J#AH$YnEY27l z#+DD-=?8EsSkBJ8@fhX}1|d^0h|kLTLsG9fbCk>K^a%pOrk&5&6V?Q|4N5B7*Uqr4JyQY9pS z13boflnuC#M1&OwT3*?O6i@ zxn7fm6a!Z>j4(w6Am0N5X52T*Dri4zAtph6`OnTEEdU>O_0zIKQLdX@o`ffHD@YGjuS`Kp7X~ zGx1ufHIVDB(mjSxDsmagNtK?Kxg)ZumBD?<=u;h=Dt^L>&BbU8?qM{rPhdE}Rj{LRpYT#hvl|oo zlZ=pg(Q1jhiZY$J5J1PB*bstBE3%O32EKW^kA%yK|tlpekV2ibc8G z2s_^D_Q6ptXb;L9RD&QPdjh&p+tq=jt++jGhL_!8%Y%1*TsmpE4&ec=mk5dYxg-uE zC3CVe;Gm@Bw;sxh+*cYnWO7Bt+ZWm|%c^-?G2!lx<>*R1ygK2smfp@a!RMgoA1i68WIxXFgu z<+FngsRgH=kX2yxDR#f)PF-o44Tia_hn=jRa5M_iAj2nX?Ka~nI8&XjHLQn>Zml#k zaD`wK!J3pXGv(-d-GVPrS|6J~= z;r3cA1GUK#QF3+!65mDqCU-~DwcjGS-PTLP0pK^Gt|YtQ@UuX27#?$jQ_kd6jwg|Tp3r(*KhNkWltO!QJ>#^YW zf7EJEF)@F1RH?T!I@VaVek`UHjSAW95Uw&7*jzuqzPY{`RDT5v(aaoeLktXm zJ1@iw^|+Mbp0lOC`M~<-_Qtx!_3V=8DK5^FY;JSIl2%Ga-2g9c#kRZF2%vmk-IkLN zGIS!KnR{A(!zDL+iiUNC$0KP$m_*a(&(mv_GM37d#LJTY3^xy4LV= z2?8=P-hi>1?T})Spuo1k&XMH>?_BAMM5&)8S&i*%k*Ybz5@%5Ua%N0mS_t=bun4or$b)c^JhqW31d)koyQ1 zdIxKP%pyoolohBI%Vh1Ml>c@7Z_QYU;J>Fy`0vU}qoT5=B2-ho&nW!&$b9nRf7@>n zTU1A3{O{^1)m2lS@jt7pt48s^0AxU$zenOTivK-||2>NTJ&OPRUyA=d8VU4&76_b^ zAPx6>K=k)f@b6LZ?=1lT9!3BD>Y{(!6_|2oL*a6F3za2*kc)T{bznE3$%sU65~4*4 z5{h`3MzT}cwhJwQTvlGq0zpGJgCk8S($eNcZ6Al4#0LJ0G4x+|-okhvj>P%ctk+{?() zePQ9v49ymt_s2c4OWn=fniF*83hKsgI$>V|1x8p5E&UsyAsFP)qH#7O5R_M7zzK03 zcm0I%XDy{+R|q3yAgP=U-KQym7UJ-3Q8L2M6>a*sF#$~y_DoNm(m+B~1dq@l?S*O*ZPeWGz}wH%-b#AgFeuFJ&gUfFpkR~M2FW=^$* z2lgZh<<4sOoHJBo$g3YtihnbgC~(K1TP@HJk;L$^Gco}4Vr^=705~HFS_FWeqtY}@ zC~bc@cf(QXln-TT)@PuPLz5C}8Z<&$vQa4jUB}AM#zC5T$+g7B5%aK)NSIu{c%XV+ zN-TY+u_)1M+&we6YdX3sfXvvJ(ZMAT7VjlMUf2*sh`n=3@syRr@{iRHTX)E zctXO|#ssc}4hZScA^;hn`G|?5Y{n%p4&}oZc*Uf0b|&@?1E4~ur?F%ZmA4Y{4wQVfU(tfFFUAT$_hp(w?zV^c zSq19S7D@o@kJ}W-d=1Hf$DDd=F7vCED`nOim`_V!cRYO__#` zLpq$W;?ic=j_J9#e49JM@|6=pmMZ2pxV$0>ID)xI6E0dPH?*oB3q%WcogApd0%`2zt`nLlAJOF*iDc;r^whwm z8;=vxf#CUVp3chAISVFCXxpO9sFm9^`CZ6R2Gl6C=Go zCHZddA@R}UR~$FBiMnNG?w{6}4jwC0;sro~@(>YGU(!67(O}0L6plfTIqv8` zH*U&1tOHBlc#477mVP#j)DqI%Pwb1xO-i#VE}fjQaQJR&0vrhrrK(l1PE+42_hAiA3)_Ely- z+AXC+n*M0+;f5}@lgD$w!VSOLS(Z%slyG#z*Cv@-x&fnM8^8a{JX zhMX>ktnZp2o<}Sov~1#%%rv^UN)S>}3VUEzmkIn*d$bHd*>G^)(Ij=r!F7wr4&-=U z-y)*DLwUa3cm&vZzdd@}-kO@kO*P^atGjA=WL+tHRhu#QZn5d|O@2<=O|z<+t70HB z!pzsL?KDLhljUF_1duD2onrl1CW;i)y2nW`Xt5PTvz;Cly%}Ihq*ir?Iu5a+QC%j8 zATM|x^X4nDJ4$WIAO~T6M1fKe&vPSAo9dP*z{n;t$tr&{hY01Ho}E%lc$ zkz6{f>)Wjup;lE)7u}A*TQ-?RU`oC*VNyg57{%Ve zFpdV*1Cs>SLQV;a9tqMd24t9y2A$a>ATB_l#lpBaA^Z&sv1b!jnnEv`I6WXRK+MbEg-tu7Ld}r`e5(R^!UX zbnrteNO0a^-Q*#4W4xuYJPan-&6wO^UblI7UgZ-Jt{ic@#cSaZ8CwQLa*I!ba^(Ki zec}F1y`Jl~Z-rzms1ngqGlGuM>k6*{n0nUOGRi1OH)AvfL>B^sacv>VPiPS!Q6=1B zD2ofdoQ6>_4xJcHM_~+>YgUoE!2n5o3h06)te&u;6840WJQEB>p`Bz}k#K5IBZ&zI zDe-U{#qc0iU3y12_(Gu$5P%4(ga^?JEw$kTd$Ir)GdM%-x~Pj7$7Y2rqZUB<0y$0E zC1_GhER&n5xfs9_vLT0Hq|(B1w!otOgat;;4UlkyC`7I~i9j|)v8y~;Fx&!b7_T-Y zi5S#^OZ1cuCn;10J5J@+YZtwsrn@%|RAlV6r z+kvOtyPyxk#Vhx;8|0}3k#-9V2L<8ma~63LK!8`feefZ$^;Q#c@P-UfPB|#O{S24 znD}-WuAvGV&EXh@tl&Muv7?KPkTWMF0;rWm(8Yj6d>_nk<{bbCXIaQ#81NT;!C-LE ziZvk98jG6ShcMVdib#mjZbZlQwzlZrsE)DC;` zBI!lz3M7v*0JziS$Yw8}cXxBIOWfKyo|m+-~JgTL-?#m-j(#N1Ri#@@!a^TWjNnoDZy z6!xS`Dt=yx!>CY+qSN_%t2>M7Q9E-}N_mDfdX1-CE46X4HYT-DQytzcwx90lrFL3= zbxTK-Dup1fZf_Nc8w{%j{!oRqtkqoxt zp9}3SxvO*b^e8f%9ghLQ;i~qL;BX=KwW=nxPfhjoQE<2+`{c!cljccVUPod4x610u zsnZd`9u#M)BW9@!v-A-$wD@M)BYNyYS!KQM|l5AY7pZFp32?iUqd? zSa73IaIR>K1pg+vgOSC61G#bwc^qOhbQ@&#-0(po2_z`T)R;SpCfG&Z%EpDwbf0u( z^aw*fv=b0MjX|T%fI^j%V@w2$05rLn)kEc?$puuad?P)Xr0`4Sz;Zo3*#yL<;i>|@ zk;p#Y!kk+48Y@T@^OC_{E8JmaFv>2uWI!J=xC+GI;V1(J$ZKP9aIoVa$2>4P2Z`PudMQPcWJp*tb|@G}4b@04Pi+Hggdl9}fYLLAc>`7n=f+ zIj8~%?T@^z7)ZH24KzmS5djLJSGJMo@O%*SAOS&(tZWKeYCLsMf>sh(58Y5G9e~pT|G9 zH7{TECQJ2;^i*1Z5PJZQU8N`POBx{Zg_EMj!@YqtKPb&mz_7g~45vKdzVesD>k28kV;w^w5RedPYeWVv;a)M!bV3t8CeO_4~l51fJZen*trMuFSAl+B-Y8;5_^%h__k~vbD^)P z9PaE)dV#*qZE9?-Z)|N}RNuIub)id#VJPEfqD%VF%EBZZ3wjsj52U(@Ey*+R;8O}} ztr*4)j77R-Q52p!lMxU*5*7hW#UtI&FhqDo>H%}HWNEAWxQiYkII39RVDB^NPAsTv ztzTAmaC-ymOY{7?xo$ma#e=RlX3@bWOB2qwV$x;284=PGeWq~Tp^r1LaWXSS*{Xp8 z%0=OWZne`(+1Xli6=OBfk6IRD8|FMy4~82&+-Wim5r2h!tVT)TLxD7<;YKWNbKNFu zK;8I-nq$Mi$k;|v8o9w%V?_kDUg+6GWFXdlIRt7*(RxfzF7Ya*Q4{YkpB1wD(SjX? zWm#~`=@9n9NC9k7tZ~}8b?GKeS`KD{bLx20M7&Tn<~q6-hvk7Wlj9H&%MR_M$%+L` zS`tyRFA696Wnp}}$}-8aRCm7>!@z)yedYGHu}$dJ0ZZ$f4{mR1ZEk2>kf%%fl-MZ& zEfQ+2ceYnY9i+}kmLc{b7vVRz3H85n8%K?{OkjsNBm|e+rfDWqj~;ZV|rDHU3=lg@04srhE|FW z&?3xyp${7PfHq6Wkl+}mO~xXcy&Tv>8?&IX)FQUuUb=JLvU=jNo*4J-=TU6YiDHw7 zXK72l+qxT0<_dGeKRV+)zaF&xW08^Q$8BZxi!4!+XVhd&4Yh|m0|yynaJRqnu{Z$x3kU;m*QAVHdHAt$6&*Y z{AVYISdMp=3F69;S~p=7wLq)|kFioql7xUPZeAn1-^XKN3#?{!vV|^kjP*d8n@X8s zjE_DvOYcyl?=RL&hQmBrI|&9**b^0r~}8+T*6!LX8Pm4~(^|@PHLREOshy33MfB)Fp(; zb(wUC>JEd%P++~Qw$q41fNKnjA;T9?{`TDbL7le*)M0ZKSyKWRB+xWDuqqtI+|!Ud z%xK<;;(`Vun>t2?lj+!zDhxuv-Mcnm1E3VI>5|GNL+m6;m{3U=TuCza#zwl6NeiJv zv}TiBBaOlaT4-7<5a8_5UX(AS9!^$ReiMOj`VFh!%CP6!G-8Q(Vp?u;qOiM51O`=) zYCa-vGCilLt`j7XLn5oAYD8QTya;b9q)tJP=p5K=-Jsl((7!S$d%DN)LV>cNa&+ew z5k=T{uhU(&Cu`Bz=ipPoJPAk?e)S_f61O4H;kVu9uaI9(fsx%rq#~|lG%Y)#i$ZCq zi?>)x12uC{O&q$ADQ?s42p0jf#l5qfL`;zfZ;P2JBjuP^&>jp8A&XHwstP)S<+;Xe z;nz1IKTDfPjb$4K*b!nACP=%HH;XcU<}_Pu&>@;9Thx$E+Mce#X7X)K!x_+n_NpB4 z@Ss=UAh!rbE#K7rv4uNB(BJ=c>s)CNiiWwB(?$(*|9|-8+W)e}RX((JfR*pGDO2*; z|Ki7C|63iJHnqr@GPKQb|NM{J|GLjV|2jl!%lBua*p<7{Xq{s-8XF#x-W7PYFQyGQC$hF#I*8? zDdnMRBUD{8Wok{Rl5w3qjKN1f!ZW0;^u&{(hiYFCAlsZ;`IW!nCW!0>$cq>!?X^QC zczL>bDmO_yCEkKfOYVDkD)V<*S_1Y|MU=Re_ zsuWyoS=K?M;^lR*J9B`?YzqKa+!;$m@e9b2()bONWRm>$`^Wru&@Jbe^awOku!@1MeQ~y z-&&e*h?NmBJ6HpG;+#aedEJWT_nle|s@AdxbItnS5!SBSdxzkvSc;7(71uNftHG5nUF>pQV)?xRRS^aJF;QygDP{w> zh-;4sGPpROhy**7_pR4}8Oi&)fW4GgQ}}r|zXn)&K7XP7D-u`$>#_8UK`j=C?QrI_ ziQSav5j2rz1h%5#qrdD)zrD!NOMd%sV%k>QBQ}*znEu!#Pw{2KQQno1ZQr-zu-CeO^83$r_p(F&~|CXhfVz zCgZ5>lE7lo{zSMZ7D0Q`6oQ_@_UZ{IVkxjHrch_lXf%36l>lrhb^x>=Sl`@YuVYHE zA{g=t3Pb)0N@V02+QX66AS8A?xG|pJXy+*8K`o9b0l5jujL@0R9;Szj;)b;Kyn(fb zo7{5vMoJfIyNm`tb`FMaN|u|2%dvBEiRU>Php=Pv*eDo-ydZ_bxZT0h^3q^XrU!B| zOfw)YCwNme0y$h`qrgObg@?jMtQASs0#w&(KZb3MCTs&F13`0%s0h5QVHz%NUZkx@ z2(9Z}ix6~GO9GH(Myn2Frw4uY33F`!aLtHYsBBL$<99eqi;umBg4ooWUE}o=UsGJn zxpnA+RqOS#C$UcI3{Ox@?|>rD_6FVXDt)}NVwm6JVh*tDE|Z651cOv0%VNTrG*A{B zT8vNP!C;TDYG5^>?qS(unqHDrrP2;aO+G4$oeRVk6vdu3$Zv(z>q1dyTrv(}_Z-&p z^5Age4TpYYm!v@n3@Tci4o@s;ZG3^rY!w0sDNO7S%fvSS@V*gqVCc7PjRx z!JrqeEtSK$&E|_iD`jh-l;e-b5Hwg4(T*_M(8l{ELL1v9sMUc}#t+2^Z5=lvggYtA zi5Z=~Q!(^)0f=Hf;I2`Mmw-}X=Zn8AEE>_U!H>+|D%lpXFfELPfG~gUO-oysENum6 z8u*RH(B0L*xIyTc7**?&a0)qY04orU$TCs3GyFPxly@`G78YDFGnel&%giX3>Ms2{#BQhsAvn zNw^aoKDGgh7v1ow=CQ$p#n;Y;74aBRf~LPWqDf*Fa0#?8Sl-n}f)j}}C^-mx$rei@ z7KaI@d6rK_df+74hp48{s|W&{(=IlrrLbcQ540DHAT|X54%__K3#U~PXC8KTL#GDU z2_X)$AOvI$EVcA-V&vB;LgOU3&Aoo?DRXV&5wry)qZJflH;|0b`jJLuHlBlgZ7{Ml z&mvJl^)iNQ)!E@wF-D&tDy&r~wne#g5HLR=iJlH!4`E~^i^@rc6wA#GCkW=1=IF2z zt2D@F41IBfD-tCZqYk1#tjwRoibCnW;Upkp0mV^!5 zyXLlXX4J|&2?5c{Q5?iOgRTXD8>*vL|boC1-V z$R@xP6)ywu3=V-BM3{xWz>9F(yhFW3=;}_Pn?-yJF9x{qYSBbo;#ufNE%`GyO8;iP zFbbNYqMZmE>h5G*3ve-{Q?F)T!*lc{c)N==NiIDbkwL|AfPon+RQJ*VHvj<={F^cCL_ca``G(ZUHn?AMOc#H`YH+?m7yZai(36dMeK)g z%#^H= zO93VV!r5!_YGRp@7PQMFRkG(k;X=wIo`%&53afjvpN5GL?eIQbtT|c`^h+vc=4_7K zK^wx^luK;D;CS-z(?Uk7#aKLmsz4mo-O@6_@R7z}m7okUfZ|3;_E=ql)3u3;os#=lLPX1A z*U#aaa;f$(eAFnZ<6#X_(RgSt+QM{o$Uqy>q&5Z~o9YMDJ6?}d_cLhK4+>jI*~Au+ zXkjQ2@}mf_T*`v@$cerLgJOu;H>%Bf6VFMCK=gTX4*&8LswkXtZm4hftPl%WTVvP( z=dwfu4m}a~A1%0kWg?#dXR0M2V(*u^G&TJk1zQQohO)&W+gz)f&+ZS@Y+N>wr3Mxb zu9#zLjneW`wFc3A1-0oothCq!b;F+dyd_pmc{%%2Vu5rAvhkYWyTiyybF22|e+{n8 zR1yS_87?6ZV%6cy4isZ1Jm8`VYfCDRZc)~OaTHGc@Omk%ly9Oht`y@SkX4gKf$ZXC3qe&RnR#KT&)Zdab)rIL}fxLx1h{( z9H2N3PJxVw;;m6uA8Pm`hz+2Xh1-x@ImoU8#v74RpCa1Mwgo-Kc8e|j7lH}cmZ<~h z#w+X_LFS|9wAn8@DzKM0uW9bm#Q-(c+|<JPF_mh@ zwT8%v?{#mMgx>MW0TL;Di6F3E_evBV`UZ*!dFbfphOHI7y#8Ww$mCRR>!vuF@|IU1 zv%MBLYmtnB<`ck504WC#URsZMmO4!{bw~{_o~wv=Aqi#D%22>SG^;xbR3V7u=TPfw zfP+BZilZ?r5>7{j@F|=kT+CFEzi8*M0qx*~hB-L%*p6&=&XDPVWnNo)j+d4<2Z60o z9!(r3zKZ9X#76stZ*dH3aVX*UYCg(t;S?Qh&;gdbg16ErNej>bi!k?WL9;D+1tQ72 zh;464H(Cx@(+|aflf1Bo=F3QyQ)?WxS|eO|y7QOAAT1cQoX3rz30qTn`6wWo8Pwgk z(A8JJ`Dz#6VL6fOqEV^SvkksBYVC54bH)xW{mW2op%Uf2dZ5w0yo|E>Rx*qzpnTX7~c7|jUZjwg+sL0W|)>+VQERQ zG+>0JiJD`~YxylBH>1$_yXL^DaW>r9E$AwCMk=uZU5Jm2>W6#_M(mDlyxd-e&~Oin zG{30>t{+4b#QfRKj5$%@KHs#gb1ojajATwqr{n}BB2*>936aunxE3ipvK))l#yG?R zpaol%QQV@qg?LMXj9Cn}O}250&KZ-d1Il1MDJ}K44a3^Q-WYg8EX~4xxj-(4qS!qx-0!g|mFWnB&_D9XM zyju*DF3mE$wlH%xD-JuvhElzE^rHwA5e}s$ng?|yi!~*YR7Q(JRo%sr9b`Gm0sz;J z72~$40%V+x9yp5d>?HA2C>3If=&MZZ^5Ij)*?hZvoyw%FQ`nSsa+|VFJ2|$Qd?@Fz zPN(^pv;}EMAR+`7S|g3cjKf5UrDQh-HX`7e)j3?Y#OgN6aX9r*gM(T&Z2gP5*OrB{ z_#5Hb<9z03PoDDA8?L$2D6XX)+MIAE>?T<@zRbpyNw_38M!223oNB|6Tp18{F13by z9kBT`()c7-I>e%s%|0GtoatR|54DR4a>+WVKI1*p2w?+|j)bJ25w{Oa+^!O{+lOcM zkS}@0Pus?x##2Bg8sW|iHP4MZcFscD?21_|{Sd2~ZM?88obqNZZtk>e_#6Yw80j1% z*P&eLb8VCFwpQgO3QmR?>(1UeO$-H$vJhEzI^HdhwfPDzKD^Tna_vFdFMH`JtB9}4 z+S8+QZ`snbkMD4=ye56-aTMpmf`I=8?*u3Rj38h2Yeqokh;@ZG;Y(EuCt5U z%C*08U%1Vt1>75H5=$*|Sa+*94GB?@;pR?TJg_rwaUmC7kpJ1EO?jNGjjP|g;|O*0 zNrs~N&DF}eq>`-3K2rRd%ek<6ShyiBkJKbo!?d*kjSOc{ldI8%h+Y44#2;QjGzds5 zN56ZT6iXrulc;17!%mA1kNS_gDC+3gymEWgxvXluzYp^XYfdQAZ6!{ z^K;{77&VVNv}Up0o*!hu-lP@eL=PpaUT8`@)LQ7P777H3=K$_U5L$U5-V+=*PQe_bQEH!+l`UWH;m1HOm#DTLJGvF6)m{v)B_u@5be;{Xyd5k2*D5%APD(5_?76o`M+Q!CIWNT+1})mK7*=JQ&FbdQ1fL<&aKk)|SS}MOgFP&K z9$!9SQj1QcGGdk%J+ahKfiH6>3=d@;Ko~-Rs^C7hxCmUur41Ch+F*Hz}^Id-tyV7GiRX8TD_J>oqrVIb%Z_x zoc|bgc1sz60nY!a71h(6=l|4D#pwAz5}zTwZ;}v>mW)C1j{7~X_>XE?AwMyV<3CoH zho%DlV@0T@YB=#9^PxKGXlIO45dH?YlVMf%{Xc`HH|+CnyXSV=>v`-MI)TBQM<0s+H*5ZP%F_1+YwQFFsJ{t;CZYHrX9f)7zvF>JH!i2Nd%c%LR(tu&JwZG7>{$7R?5VGTW@b zXw3bNlf=q3CB|T2bDNs>Z>UEIB0LCHYVQm@aKr;Rf@auL0Q2JGKf!*?nlyv`4`zTf zynX^q;9$%YH`ih}IE)`FE|?jBKvq?$qYgY5urlH1V6?aMsny&ZWYxSRje_$rV+X9@ zeZ-MDJgZ@z34Z66MgiE>pKSsHa24T%fJS&%ty<;X!hO71TQZ7G6gyJeiuqXxC;w1u zgghASlox`1(aIVw(evo%EAT0J|Bt7(SoRN}!uS7BMRoO5$Nhiml&PcfA4cRe)Fe|f zHAbu1lY%JX8t_Ll?H&+<))~qILX{&d3~&vqzz*C_GtnDBZ3W%q13)3+VQz4RLaD{g z6Qd#IND;t@zt%NkLLrF)`z}n_l8FeU5_T^lJc4|#1xwH@kF+=o@**D$2K_^Sg6g(M z(WGHRix)u`7^lEmgRG+$h31innc{3%5@Ttm(p;6%88hQ-y&N{-Xk#X16N;o9C!|?m>I#7m=s@8VHHg6qpE%2`pHjgzddH0?s3l#dHq>TVE)K6oI_ng zOc06`%k=@d<#p!dCF^DPoSGAKtx*(u{eA2*eWiw>y-WLV~DT>M6VFFu- z*N1d6P8E0YYQ4VYD^{#XtSD^*{7dhO6(u1rsq$F@D-+9r?xl1^x)d0>(iNqXOW9Y7 z>z*+VQ`@%`?9UnV!xm2@!#F)hEi2MgdRjBI7Xm7y#PXGvSf&0M1~5^y#@W^#E*`Zt z9ZpzrVG^AYM3?P1F~e@l6)i$U&it!Jq=?FbhOqI9HpngrAXRM#3lCO({3jd@SBaxb zCSZh%+3f6KZ%abP>{;k#YD+tFd`VeJ*@Ov@W5NXZK1=12d2l7#^Ocl9mXZ>;{I7GK3`pNcDHlYn9ZZ5Wo53@==#cc0^w;Ll-WVpw@c~Wfmq=0&-+0g=y zJ?saMNQ74;YTs;MN#7*@a$`lNZIZ8cwjY~28=8wX`w5&BgqJZ=#u*)HGrW>^oiLU3 zA>1Tercfy6gJ3~y+w$zx1}>CEKTq`l75998V2>f#9^3S6;mttA4UQ%k;~Oa^Lu8AC zpxC_~GyvEHftAXd!iE8Q&Smk!1-$5OCM1{^1voi^O?r7C!kG*8io zAY#l(Cc!QY6#uB8hg-i}iAboFoj?|`;A~@{$B+VFQX7jh^sbTiSX5A1EKYVVk#M9N zWJ{b=f?v|@dT6Vc2NQ$8pT(0j_CdQ>(g=Vk%J!=47^>WMp8XRr zs{B-}t#$#4%Ze|A}SV)W0gU~aXZu?*!F0H&28;1$6^$q_W((uJ4--`XwoC3 zaPfX#fo6TYS?B^z3?drnwHT>9o5;Im)T+usGz&mE#33V6Mn*!wx*;sM zVj1LvGO*H-!bk=H2BD@>4hN?Y%3jxojG*>KnjPY$`<4cSISAVAaPLNrfejnyPul6` z&adhcIIr#S+Ai18p;mI!311$&2JO zX4SA%#lpUaVy&_V4xB&6?XZVAXhH0mfC~zz03@hA5|06DPY27t5|P%EL5{-%X>(wM z^56wQS_fbdFP}8t-iU@@j5@od1+N(`azY8|MM*3n_rmCPp5i3V5ESShUQxbtjpRsg zIoJ>lEIwN8D&G}!&4gs50F__LV=3 zWynQe+Of$I5As(zahB~9fcD!ue*-MG2IJHN91h4)%Ao^gxP8f+kjm|Vzz{%b$g<4f zF#qx~=Y2VtFRWf*KrpybDHL0ZF^;qX9U$pgCMz%pLLTRlFywQilj=>eOGY%2dWE^Bp zzU5GhnMa2Yd@0$=91BJ~E&K{LK><@b7Y_QW=#<$2Ll-S7o(uY+EW_v53?SMA+FF&! zJ^Hu@46jI1f(8^5yqZCT;Vmok27|H?n>##5Y~^kYj#~zu793a8Z9}1|#icJOLln7v z-O)6pR(%q0YRT4s0uu97j9>RHKeQxLV%4-w_SckHliAM|3HH4-pn@P_uY1FBvPcvN zdjg<{;F;kKuW30vfqN&*LRN{|`0zA#zh{2U(MABTWdMDYcOVR&+ks7zmZ1>~4l?=L z290_kF+9*G6h`JF7^%SKS>ixJ5r!4P3;*sx@i!fMY*4+|p2k z{9uG8n#{qfa=pDF-VnYEmVu5LwoMFRf!!p@pGw|UmgMe}EgesA#NuWZ&d0OUKDPYg7o6QB*C46{85L ztQesy2SSBtfmjQ8gZClqdD23(A$i;P6LA3BAV%M$(oW8~3uVAEDd3rpw^?l`t&n!s z4;UuC>?Nb8CGob&jNwd1?Lsz?&Vr=TFe*G8Z`no#n=ja`RxR6}wO*h+UVWEB`DnYv zhLx3q)h&m=YAf;&-;vTlo10FP(|_SpJ?OPTuzFV{7RM;DOXvB>Xg1d())BNVNYW1a zE@sP>F6e@fuu+;eyRz|cx|Gj7$|mR>D71TIA!_>wJ2$l<1lf)Q3NGJS8Z|GtZ$xPn zMLXY~(QB}89^InO4vjI$sacU&nvh@_IxWJ;_PJ;i?xPDcVH;WpbK}!kD!x`(i#~AnPARDV zLG2SP+cM3S2DlhxSfeWZYWvVakrm{{nAx%&l`}lH_>?s4xQWQ!R*w)UA%+d@geohO@@j2=QD%7#2|9HY-#Ug?L5{_@p`_-us`fm|_-#yn zUG3pY+*Chc3B|bA5kKZR+=+qvACEZprx!0-bWfLOFKFVS4z@zzpaey?+fl1dP|n9K zXQ|tWj}hk|9YeOmhzPDWS3+Rs#(MH3PM%XkMx=|Qyhfs_Q6$-uXNd)nd4yEC(a-eD zYk)g3rOi$=Z6+ez4I-n1!m~oqz>AeFI8CJiMZEZ^F!q}dvC`1PomL_@VUjIX9S)Nr zb1hkQsc7!XGo)KiMgMXUpqmwjO#o|0OQ{9yhH{kf+UfF2SSlp*}cRj=e3 z3ZP;@_cA6LR>U$vqai^SQ-Ht>5;-<7IGAi?y2I+Cg0c^OTe0$QW31e_((LEm_S>Pp zi4m5saTNSPqbX(Edln4>YM$ieQ%^*oXBZ3UOgL^Ob7nfmLE*7GVaX-q^;lmimNs#! z3LY2KK79dgSZt#pFMD#3-7ZOs5l;zeGf_nXOCON$(4okYu%n=+SeNz$+_(;URfzA9 zZP{GDgBow~;D`l;Z%93INegSICat3Ho?>14B%A2O4AXxJSr-0a`IU4;lcD%vsGX)$ zx&{;P@-&s)smxNWkCIS0@47zCWJ;v6+f5atU{amT9;&#D4;%S^3MybJ09r{TiN4`3 z(t}Y^%hXxRk3ie)P+bn~mD*{7ER1vZf@ziURDnxVT&{l9YX>SF1Gacs#o{EF%);P# z1!cx13dy-B`2;&ho#P^J$KVk`KmxXWIqbQ%HVP_%)`^q{Q(};jfT8)0C=UlcX%_9$?1uZH46oX9Rfw(kC2|tWEV1`+`MH?Sq>52+n66B`_sc`d7WoOO=sMgB`#anGhid65_rA<6`-b!;|C~c{R zF)-Q^6hQ*1z@^WF)F|eb_}WM$nHJ#)fEg553S>&WoUsvDpva-ND5fdb0M!Q}S_`YU4*f*HENoy>w?RYj)ZgHE)4NN^u7UN27@1y{T z5{uK1JQ*4c5WqHkD3Ov?F%lLDYFTz6OQb*G_@Zr;&6jb%@z_e!XlQ8h8(e)&1RK<7Iql+l0mji5=i|i&~d822VnGD-QaW5{}LWwYX zu&Pr+G0VCFhO>iyr{sBQ!pf%DB_(4U@EU{NRJ0oX!wZS|KlLeS|ECN$w#W!@ApFm1 zl~s28zsibG^(g+=hznzrnVpyUK&W6FkcCNHycUZ8e2R#weZ8ee7JQcJ;=-`z>R&tygoFT-eRgS8M z1j-5F_r)%Rx<|(l4vD%Sic1`8xnD=P2L6DwusQL;S;I;DBX4o+iJW=%1yaE2FT-vb zaCkXIQN{3FM>L^Y;nW2=PHQ!@1R%dONGL(bpNF8AbOnZJoXQyVr>p&xt;H3cLq zkMQ$0mnSNC{xb%SBxJ*S{!f_}nwES1PaQq~N8&T2#23NS(n6@pV>*{%Jh#4NdZk4e zb|@96NC+ZEYotFS0wah=$}1p=#&TJ<7`dgd6^oiOmaC0}ur1gx1zS{jaFgk`umGpK zr^{2D<+jr>Td*U^vxMY>V=i8{Z9Xpt@IG3DF$Ijlj(Wc>f@IpvpF7QN`>R|s z58((p;rKPgjwtL&Y;Cfoc#+nAB2&w ziNJ;Rf1+PDW|lEU4lcgH(G?TH{uT3J*oL~D$4HT+jlIkusy(h=HgfDmgby++UKTBT z-rgB#w*u|Gk^nw+@27AsrlD} z*i-t3%cRA;@wdxijL1tolNJkws*&buB^IS30)hQRYiAxB*wJ!KI;f^|(ie6%3D*zz zTo31O6D1p5qbThb4k)KYG@fwa+K7UmR!Dn5EE2Jt^)x&nTTWj}j>yvyA~l=4INX+H z+VtCK_iC@g8Ob@%$(|VANPWM&9{1)wodj`ZX-GHeN?M(xa0KgquMh&uOhjKCnS|$@ zFE>43M1#*j>K-YlR_Cu<|2V;SYr0;Af4DS^GJ=X&ptXu)0M|ym1*#{T%>NH?|09NN zSmQs0s;j3|<-~ue8jb%nBA+2$tVm1kQlKueQW@M#h#NeVE z>x`M{Qj4z#*C@%5x;+M(+NeS)^GV%rj19c^(30rn3G7}eq>pxsc0vOSYgWP?VYu6a znXj7|fK?_4hiGIZoY5$PE1;z%Q9*evZoQGlkG9@utXO#oMxtQ{x)@@%yQ2Q#u@+K@ z;+r}OL)eZS@bH*!FK3&6zX+(R+^hI=JqETJPP1H=?nuDRyv2~ZPE3M3ZTW4uLPRlq zA}0h3^AgApcfsnGzBwFBh|Kc@FO=3C+Qe+r{nY6tBUNW0{8yX9w&oghUOD^0GUI5e z#RW9T@J$z=VOmP|=39=11@GSp`oRTiNJCpoKp;i zPv9W~;z?wvY1ZziUN%H+}J%^S>&t&cXHFNDt@dxu7YBN=M`0&0j8U_@C!XdBpMGiTeY} zy)n>cs;L-cuX34N;v4&|moJ;dw@N*B+~#CeyH5%lyNv)#t5FJt+HGQo_X-OGVJWBL z7$fwfpH1NMu8C4YpvC>MRzA6xr7xrVz}9s0QeVi^=llELmR3gI zG>04888vI1xK>&quQoMw6~5)3xZ0ZZUQgV@1n74SqbFc+CE$v0p8w>}arS6lggkRH ze=&P@ov&+Piq(0~)Z37y+U&0`%E9cq&lcF4b8Dr1rmD+lLpmWpMsMEKfhcJR{nFwy zzWbKkyoi)!fB9QzOdVk4pFj�+2<0q?WSkfEG&b3{^wur0u)!H`f#%f6o=B)*bY;_+D;s9@b#z(s-0tC%)GAlpT;|^es5K*-Fg#duYjw!#ls5U2#of zylmC#nvgs9Bv7#j=7ouQ0h3*JjIR&6$J>(HH=-;AyB{2gQ> zB@^xCbnq7UN@baPYtrZMqp^KiUf|V7_jYs>KX*C>JesZ#C{Ev1 z<0EZtuN;PA8kIMA=KFGtoIs zfH(v73u0I<=h%|ld&Ki^c;q`yT;qy%(jA>Dc;ssvG|e|xn{_vKDoXWv#rRm)aJpod zz-8FFWO&fsk(kf(AC}Z!61b-2vj6c2YB`b#wJ^Bsn|qivz6|9q9vAUa5q(WDLAc); zU@2R?Zy!^btGV6*MR1N&BigJ!);!H(QW3j%S0NG9(tmv(^8o*iTVjiT?rNN*$lpI) zZaMJk-7i};gYl+qpL!|{ZUZ9&lc>c%pFEP0yv5pC`ycm3+dsFmq48}d|3I6x5bOGI zX3HnQ4!OG)4`20)Gdc>C6eY=z15{)50+Aap4eu{BNN7H3H10bzM@prKd|!CV%iH)@ zleh5UK)j10p3pmG8guzv-D~7djm+(&ZPt;fhU-sK*b~3Mh?0j$$aWSb-3$?UE$aNL zD{;{*DtEXmnIZi#DO~a=UQ<@5?aibA@LJ!#ef9XGT@c+YlgP{C=r&~PdhoGN^=h|; z!J~Ww$B$z|TwjOvuYc7FWD5CRez;k_sTWpLDNUCFp(w(b?UgC|3$zhPHx?pFhyoo(eYn` zC=MAN%plUnr1u0;JFH*WybA;BhbU)!SCe}WbuDjiMHJSuIC49eo6gg`2l;L%ia(BP zxfH4}&PF3#CQ1>kD4BB#jOO+N5!< z9rr6C@%~G}ufHYenRD3$`+pj|z?s68x?NuTzEeKQ2)H(ks%zA)FW_N zgqJzxF<9Sk;kTxx|9p1A>-A^qjMR&__mE3p^5Qrl-wM+lf4djZH)FmGjCS|*Jz!=G zK<4Ade+7KJ{-RbI*W2jfEg@e^g#JnPUv=Nyey~Vky1d9mr1G<5QQ%Jwr;{D#Oh@+X z40(5FHF^|A!+Uy?wrwO>G#J<~`z#Rz_4Fp?5gD};&j~{fT|Q{bf-M-UhPQ;dFF9ucJmGhd5ur(;Bwr9Q`tmDFf+K-@LzOFk{$_b`2O6ba1#Kz!?LS)w&qN{Al+$h12#h&K`u()N{0Z3jCng z?UvtxKnvz2Pb>Q*&)CpN0V54qVJN@$Nsdy4h3RbfOLYG9^F)xiIJ-RQ&a%|H#GPC6 z5c|Pvs?|bpX0{xKZY84qr|8}4i+PLJ#^S987pbhJ!3%RVsJWq1_p&g{1gX~u~peIIT$zD=6~>VoV$aP-sW`$>X{G} z6x-7;!z&&*w&|KTx?AWr6JT$S7z+ex$vwb^Cp1y7GO zO*(bYX^6VbkE?oR@th+He+W>c9`;ke{CAlaN!3)%cTA&d2q^R(vlvjG$#ik6~XwuVCQk<$F%DR~}Wd);B7WK=i zSD>fAwP1NU9uD*tAX*aD7@W&jLjFxkAP6V|j(Ri5??QX?n|#JLe*@&Yts`jvh_$^N z&-bQ9FgU$A{BSw*CZ*{sD1IcQgZ>U@<&4OMFVJFdTC33M>MV8G9C#)CbIllmN&YI1 z`l1?>N`SIx6e5f45gZ=|2RzhY?KswG-JV%|{n?di?1`&C2a&HalMAD%xh7A!g#`Vs(F*wzp&ElxMhR+9azS^+Qn&4%OauPnY% z7lbH^jPdSSOGVhWPNr6hUgmCo^(m@w=oXyhW?kaRS>Lj^Z@xO8@iw3;TU_tmg5cL~ zd6qxYEi^Q9aVYw2ea79Sb_a!ymWc`8wQ$p(rXI@NrdF-lKTBVRc^Qjqst(vp#wU6o zm184rX41~i^*$cayd744%J{P|$>EB>l8n2Yk5glmYK~b5Lz4Y81A2Y`M*8bG^S?m9 z7htw=QR52z}F#u0*nzb*-YG(3v-h%~g*CfuAD*p-_N$t+|tFZ0qt;KQ#HQ#80{^0%b zONP#(NsJW7qqiVAjTc~2JCHeWdzRwynt$2j*{|->YMp=6rN%!A)>e-ngzsN>08Ro4 zHsWV&Tk7(ZLDi#M*Rerx-y>-3n=|x9t5wzs=*dBpu;GJr{W|9hZrl>fjfB4~Sz*cv znw0X}C{=wmvNuy0IdFT}qT?A*&VugkH#U|Y?)R@H ztqPy~xkhuDF#smoK>zXua?;J$f+_MQIGxWf##_oa`N+)`qRmlwRd&{(4&75Ub3I-z zx_iCC!)B{S)DosTofvI>$8TpVr`?Qe-~*?c!n5HcxM%s*>w5{R|I)jb`J;YHls$ex zKjPFE$Ic8f9kvz~YyH#Oqf@WTd!NCaewBLVDO~PHNV)xn!QS*gHhA+{p1bT%()iANXb4So;-Ep4= z3qvl4Mn0BAp@6Mp+)izZfA`IkChMg#V&B!FHkN781D#Bk%fgrGej_;3Gw9qZmz*z0 z-pDX{)~cBP-FWD_(dwbl`^nv-90$tYH!Od zeDKLin?YBJbfu{q-xkK~O|16cyUMfo?@Gn=4TcS&^VX8|3QJ4VMC6+=QoEy*kkeg1 z;eNq9ak1W4L7ie1PuO;(r0Ytft9}lpcMV%)y0f<@OTDEVv*rGiHbI>R zgO}G?7k@>K$OuYFJ>uQpSNs#WmM;l=Rv(qz6hCs&xKjQhnfufIJL!8iU;2V>TfDu2 ztG#){gf+1V`|FW;>>m2&`g;)BbimHANowGRn50F^REN3DltA3z!`!gL4!!l-&nmYZ z9CS)cSt{t=?4rXGwK1YKwI-hmt%J1wNLHCLmMT}inwFYc-urFc9`Ef!f$n#AQor7g zca)L2BoM?#ee^xHkeVoM@trF3m`9t;d-Ocqr(>mAwD*x5e(Oayb(^+G$(%U*lJQS-sNolAXBzYu>^{ z%g@Sb{@qUh=U%;Rb5@<-Ujn`mye9`u@4rkr4#R#zK>nFBBEf# z^ys7`{V}Eo*{mxzS@<6zd zd{GDSrAsF+*_Q_YgAmRS^Yv1*1pAS?Slx_;(8T7xH-qyDF$gObP zN=^PED^SeGCiLY&iyNz$`u^< zeE6f^m+AR;0=i!O){AccNt@nBrxo86e?2?Rj<8E|RYvSgZe{q7^;RXE&z*BrEF~Tt zfIZWFUKhq6g58l)s>@XuvHb7#gxlG(69=Ky4|%Fbylg96lpMGPW{0m@J|ajYA$Amo zk$&_Ij?6O31ramC{Bw^x9oXhlRGMKYH?D&w+{C=-YW{xq{m}{#Plg#rTe}i3dC@mL zG$HjY9#MZd^dq;rLLxtk@{uSxJ3T{|xSpYp|C{kWL%|pGL$HPQs#}g~*Yzfs-rEMe z?FTD0;rVMUqv2mHK3`N{|Gh_BeC*!)*9At(2b@p|A4Tu5U14kbb%5a?O*z2yY+uN_ z@0>bD^G_M2f0TH4hc4Zizhrn>+oGvQE$23~Ov=sN?@vV-Sm57+*JY!mqONVqD0w_Y zXzL`ZV11M@OVY

2bm+X^54>e7*eCs3InBgzoH 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

+%Mc3Se$=H}jAx->R7 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

7vILk*vAofp%dpOsD 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 +#include +#include +#include +#include +#include +#include +#include +#include "axhttp.h" + +#define HTTP_VERSION "HTTP/1.1" + +static const char * index_file = "index.html"; + +static int special_read(struct connstruct *cn, void *buf, size_t count); +static int special_write(struct connstruct *cn, + const char *buf, size_t count); +static void send_error(struct connstruct *cn, int err); +static int hexit(char c); +static void urldecode(char *buf); +static void buildactualfile(struct connstruct *cn); +static int sanitizefile(const char *buf); +static int sanitizehost(char *buf); +static int htaccess_check(struct connstruct *cn); +static const char *getmimetype(const char *name); + +#if defined(CONFIG_HTTP_DIRECTORIES) +static void urlencode(const uint8_t *s, char *t); +static void procdirlisting(struct connstruct *cn); +#endif +#if defined(CONFIG_HTTP_HAS_CGI) +static void proccgi(struct connstruct *cn); +static void decode_path_info(struct connstruct *cn, char *path_info); +static int init_read_post_data(char *buf, char *data, struct connstruct *cn, int old_rv); +#endif +#ifdef CONFIG_HTTP_HAS_AUTHORIZATION +static int auth_check(struct connstruct *cn); +#endif + +#if AXDEBUG +#define AXDEBUGSTART \ + { \ + FILE *axdout; \ + axdout = fopen("/var/log/axdebug", "a"); \ + +#define AXDEBUGEND \ + fclose(axdout); \ + } +#else /* AXDEBUG */ +#define AXDEBUGSTART +#define AXDEBUGEND +#endif /* AXDEBUG */ + +/* Returns 1 if elems should continue being read, 0 otherwise */ +static int procheadelem(struct connstruct *cn, char *buf) +{ + char *delim, *value; + + if ((delim = strchr(buf, ' ')) == NULL) + return 0; + + *delim = 0; + value = delim+1; + + if (strcmp(buf, "GET") == 0 || strcmp(buf, "HEAD") == 0 || + strcmp(buf, "POST") == 0) + { + if (buf[0] == 'H') + cn->reqtype = TYPE_HEAD; + else if (buf[0] == 'P') + cn->reqtype = TYPE_POST; + + if ((delim = strchr(value, ' ')) == NULL) /* expect HTTP type */ + return 0; + + *delim = 0; + urldecode(value); + + if (sanitizefile(value) == 0) + { + send_error(cn, 403); + return 0; + } + +#if defined(CONFIG_HTTP_HAS_CGI) + decode_path_info(cn, value); +#else + my_strncpy(cn->filereq, value, MAXREQUESTLENGTH); +#endif + cn->if_modified_since = -1; + } + else if (strcmp(buf, "Host:") == 0) + { + if (sanitizehost(value) == 0) + { + removeconnection(cn); + return 0; + } + + my_strncpy(cn->server_name, value, MAXREQUESTLENGTH); + } + else if (strcmp(buf, "Connection:") == 0 && strcmp(value, "close") == 0) + { + cn->close_when_done = 1; + } + else if (strcmp(buf, "If-Modified-Since:") == 0) + { + cn->if_modified_since = tdate_parse(value); + } + else if (strcmp(buf, "Expect:") == 0) + { + send_error(cn, 417); /* expectation failed */ + return 0; + } +#ifdef CONFIG_HTTP_HAS_AUTHORIZATION + else if (strcmp(buf, "Authorization:") == 0 && + strncmp(value, "Basic ", 6) == 0) + { + int size; + if (base64_decode(&value[6], strlen(&value[6]), + (uint8_t *)cn->authorization, &size)) + cn->authorization[0] = 0; /* error */ + else + cn->authorization[size] = 0; + } +#endif +#if defined(CONFIG_HTTP_HAS_CGI) + else if (strcmp(buf, "Content-Length:") == 0) + { + sscanf(value, "%d", &cn->content_length); + } + else if (strcmp(buf, "Cookie:") == 0) + { + my_strncpy(cn->cookie, value, MAXREQUESTLENGTH); + } +#endif + + return 1; +} + +#if defined(CONFIG_HTTP_DIRECTORIES) +static void procdirlisting(struct connstruct *cn) +{ + char buf[MAXREQUESTLENGTH]; + char actualfile[1024]; + + if (cn->reqtype == TYPE_HEAD) + { + snprintf(buf, sizeof(buf), HTTP_VERSION + " 200 OK\nContent-Type: text/html\n\n"); + write(cn->networkdesc, buf, strlen(buf)); + removeconnection(cn); + return; + } + + strcpy(actualfile, cn->actualfile); + +#ifdef WIN32 + strcat(actualfile, "*"); + cn->dirp = FindFirstFile(actualfile, &cn->file_data); + + if (cn->dirp == INVALID_HANDLE_VALUE) + { + send_error(cn, 404); + return; + } +#else + if ((cn->dirp = opendir(actualfile)) == NULL) + { + send_error(cn, 404); + return; + } +#endif + + snprintf(buf, sizeof(buf), HTTP_VERSION + " 200 OK\nContent-Type: text/html\n\n" + "\nDirectory Listing\n" + "

Directory listing of %s://%s%s


\n", + cn->is_ssl ? "https" : "http", cn->server_name, cn->filereq); + special_write(cn, buf, strlen(buf)); + cn->state = STATE_DOING_DIR; +} + +void procdodir(struct connstruct *cn) +{ +#ifndef WIN32 + struct dirent *dp; +#endif + char buf[MAXREQUESTLENGTH]; + char encbuf[1024]; + char *file; + + do + { + buf[0] = 0; + +#ifdef WIN32 + if (!FindNextFile(cn->dirp, &cn->file_data)) +#else + if ((dp = readdir(cn->dirp)) == NULL) +#endif + { + snprintf(buf, sizeof(buf), "\n"); + special_write(cn, buf, strlen(buf)); + removeconnection(cn); +#ifndef WIN32 + closedir(cn->dirp); +#endif + return; + } + +#ifdef WIN32 + file = cn->file_data.cFileName; +#else + file = dp->d_name; +#endif + + /* if no index file, don't display the ".." directory */ + if (cn->filereq[0] == '/' && cn->filereq[1] == '\0' && + strcmp(file, "..") == 0) + continue; + + /* don't display files beginning with "." */ + if (file[0] == '.' && file[1] != '.') + continue; + + /* make sure a '/' is at the end of a directory */ + if (cn->filereq[strlen(cn->filereq)-1] != '/') + strcat(cn->filereq, "/"); + + /* see if the dir + file is another directory */ + snprintf(buf, sizeof(buf), "%s%s", cn->actualfile, file); + if (isdir(buf)) + strcat(file, "/"); + + urlencode((uint8_t *)file, encbuf); + snprintf(buf, sizeof(buf), "
%s
\n", + cn->filereq, encbuf, file); + } while (special_write(cn, buf, strlen(buf))); +} + +/* Encode funny chars -> %xx in newly allocated storage */ +/* (preserves '/' !) */ +static void urlencode(const uint8_t *s, char *t) +{ + const uint8_t *p = s; + char *tp = t; + + for (; *p; p++) + { + if ((*p > 0x00 && *p < ',') || + (*p > '9' && *p < 'A') || + (*p > 'Z' && *p < '_') || + (*p > '_' && *p < 'a') || + (*p > 'z' && *p < 0xA1)) + { + sprintf((char *)tp, "%%%02X", *p); + tp += 3; + } + else + { + *tp = *p; + tp++; + } + } + + *tp='\0'; +} + +#endif + +void procreadhead(struct connstruct *cn) +{ + char buf[MAXREQUESTLENGTH*4], *tp, *next; + int rv; + + memset(buf, 0, MAXREQUESTLENGTH*4); + rv = special_read(cn, buf, sizeof(buf)-1); + if (rv <= 0) + { + if (rv < 0) /* really dead? */ + removeconnection(cn); + return; + } + + buf[rv] = '\0'; + next = tp = buf; + +#ifdef CONFIG_HTTP_HAS_AUTHORIZATION + cn->authorization[0] = 0; +#endif + + /* Split up lines and send to procheadelem() */ + while (*next != '\0') + { + /* If we have a blank line, advance to next stage */ + if (*next == '\r' || *next == '\n') + { +#if defined(CONFIG_HTTP_HAS_CGI) + if (cn->reqtype == TYPE_POST && cn->content_length > 0) + { + if (init_read_post_data(buf,next,cn,rv) == 0) + return; + } +#endif + + buildactualfile(cn); + cn->state = STATE_WANT_TO_SEND_HEAD; + return; + } + + while (*next != '\r' && *next != '\n' && *next != '\0') + next++; + + if (*next == '\r') + { + *next = '\0'; + next += 2; + } + else if (*next == '\n') + *next++ = '\0'; + + if (procheadelem(cn, tp) == 0) + return; + + tp = next; + } +} + +/* In this function we assume that the file has been checked for + * maliciousness (".."s, etc) and has been decoded + */ +void procsendhead(struct connstruct *cn) +{ + char buf[MAXREQUESTLENGTH]; + struct stat stbuf; + time_t now = cn->timeout - CONFIG_HTTP_TIMEOUT; + char date[32]; + int file_exists; + + /* are we trying to access a file over the HTTP connection instead of a + * HTTPS connection? Or is this directory disabled? */ + if (htaccess_check(cn)) + { + send_error(cn, 403); + return; + } + +#ifdef CONFIG_HTTP_HAS_AUTHORIZATION + if (auth_check(cn)) /* see if there is a '.htpasswd' file */ + { +#ifdef CONFIG_HTTP_VERBOSE + printf("axhttpd: access to %s denied\n", cn->filereq); TTY_FLUSH(); +#endif + removeconnection(cn); + return; + } +#endif + + file_exists = stat(cn->actualfile, &stbuf); + +#if defined(CONFIG_HTTP_HAS_CGI) + + if (file_exists != -1 && cn->is_cgi) + { + if ((stbuf.st_mode & S_IEXEC) == 0 || isdir(cn->actualfile)) + { + /* A non-executable file, or directory? */ + send_error(cn, 403); + } + else + proccgi(cn); + + return; + } +#endif + + /* look for "index.html"? */ + if (isdir(cn->actualfile)) + { + char tbuf[MAXREQUESTLENGTH]; + snprintf(tbuf, MAXREQUESTLENGTH, "%s%s", cn->actualfile, index_file); + + if ((file_exists = stat(tbuf, &stbuf)) != -1) + my_strncpy(cn->actualfile, tbuf, MAXREQUESTLENGTH); + else + { +#if defined(CONFIG_HTTP_DIRECTORIES) + /* If not, we do a directory listing of it */ + procdirlisting(cn); +#else + send_error(cn, 404); +#endif + return; + } + } + + if (file_exists == -1) + { + send_error(cn, 404); + return; + } + + strcpy(date, ctime(&now)); + + /* has the file been read before? */ + if (cn->if_modified_since != -1 && (cn->if_modified_since == 0 || + cn->if_modified_since >= stbuf.st_mtime)) + { + snprintf(buf, sizeof(buf), HTTP_VERSION" 304 Not Modified\nServer: " + "%s\nDate: %s\n", server_version, date); + special_write(cn, buf, strlen(buf)); + cn->state = STATE_WANT_TO_READ_HEAD; + return; + } + + if (cn->reqtype == TYPE_HEAD) + { + removeconnection(cn); + return; + } + else + { + int flags = O_RDONLY; +#if defined(WIN32) || defined(CONFIG_PLATFORM_CYGWIN) + flags |= O_BINARY; +#endif + cn->filedesc = open(cn->actualfile, flags); + + if (cn->filedesc < 0) + { + send_error(cn, 404); + return; + } + + snprintf(buf, sizeof(buf), HTTP_VERSION" 200 OK\nServer: %s\n" + "Content-Type: %s\nContent-Length: %ld\n" + "Date: %sLast-Modified: %s\n", server_version, + getmimetype(cn->actualfile), (long) stbuf.st_size, + date, ctime(&stbuf.st_mtime)); /* ctime() has a \n on the end */ + + special_write(cn, buf, strlen(buf)); + +#ifdef CONFIG_HTTP_VERBOSE + printf("axhttpd: %s:/%s\n", cn->is_ssl ? "https" : "http", cn->filereq); + TTY_FLUSH(); +#endif + +#ifdef WIN32 + for (;;) + { + procreadfile(cn); + if (cn->filedesc == -1) + break; + + do + { + procsendfile(cn); + } while (cn->state != STATE_WANT_TO_READ_FILE); + } +#else + cn->state = STATE_WANT_TO_READ_FILE; +#endif + } +} + +void procreadfile(struct connstruct *cn) +{ + int rv = read(cn->filedesc, cn->databuf, BLOCKSIZE); + + if (rv <= 0) + { + close(cn->filedesc); + cn->filedesc = -1; + + if (cn->close_when_done) /* close immediately */ + removeconnection(cn); + else + { /* keep socket open - HTTP 1.1 */ + cn->state = STATE_WANT_TO_READ_HEAD; + cn->numbytes = 0; + } + + return; + } + + cn->numbytes = rv; + cn->state = STATE_WANT_TO_SEND_FILE; +} + +void procsendfile(struct connstruct *cn) +{ + int rv = special_write(cn, cn->databuf, cn->numbytes); + + if (rv < 0) + removeconnection(cn); + else if (rv == cn->numbytes) + { + cn->state = STATE_WANT_TO_READ_FILE; + } + else if (rv == 0) + { + /* Do nothing */ + } + else + { + memmove(cn->databuf, cn->databuf + rv, cn->numbytes - rv); + cn->numbytes -= rv; + } +} + +#if defined(CONFIG_HTTP_HAS_CGI) +/* Should this be a bit more dynamic? It would mean more calls to malloc etc */ +#define CGI_ARG_SIZE 17 + +static void proccgi(struct connstruct *cn) +{ + int tpipe[2], spipe[2]; + char *myargs[2]; + char cgienv[CGI_ARG_SIZE][MAXREQUESTLENGTH]; + char * cgiptr[CGI_ARG_SIZE+4]; + const char *type = "HEAD"; + int cgi_index = 0, i; + pid_t pid; +#ifdef WIN32 + int tmp_stdout; +#endif + + snprintf(cgienv[0], MAXREQUESTLENGTH, + HTTP_VERSION" 200 OK\nServer: %s\n%s", + server_version, (cn->reqtype == TYPE_HEAD) ? "\n" : ""); + special_write(cn, cgienv[0], strlen(cgienv[0])); + + if (cn->reqtype == TYPE_HEAD) + { + removeconnection(cn); + return; + } + +#ifdef CONFIG_HTTP_VERBOSE + printf("[CGI]: %s:/%s\n", cn->is_ssl ? "https" : "http", cn->filereq); + TTY_FLUSH(); +#endif + + /* win32 cgi is a bit too painful */ +#ifndef WIN32 + /* set up pipe that is used for sending POST query data to CGI script*/ + if (cn->reqtype == TYPE_POST) + { + if (pipe(spipe) == -1) + { + printf("[CGI]: could not create pipe"); + TTY_FLUSH(); + return; + } + } + + if (pipe(tpipe) == -1) + { + printf("[CGI]: could not create pipe"); + TTY_FLUSH(); + return; + } + + /* + * use vfork() instead of fork() for performance + */ + if ((pid = vfork()) > 0) /* parent */ + { + /* Send POST query data to CGI script */ + if ((cn->reqtype == TYPE_POST) && (cn->content_length > 0)) + { + write(spipe[1], cn->post_data, cn->content_length); + close(spipe[0]); + close(spipe[1]); + + /* free the memory that is allocated in read_post_data() */ + free(cn->post_data); + cn->post_data = NULL; + } + + /* Close the write descriptor */ + close(tpipe[1]); + cn->filedesc = tpipe[0]; + cn->state = STATE_WANT_TO_READ_FILE; + cn->close_when_done = 1; + return; + } + + if (pid < 0) /* vfork failed */ + exit(1); + + /* The problem child... */ + + /* Our stdout/stderr goes to the socket */ + dup2(tpipe[1], 1); + dup2(tpipe[1], 2); + + /* If it was a POST request, send the socket data to our stdin */ + if (cn->reqtype == TYPE_POST) + dup2(spipe[0], 0); + else /* Otherwise we can shutdown the read side of the sock */ + shutdown(cn->networkdesc, 0); + + myargs[0] = cn->actualfile; + myargs[1] = NULL; + + /* + * set the cgi args. A url is defined by: + * http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO?$QUERY_STRING + * TODO: other CGI parameters? + */ + sprintf(cgienv[cgi_index++], "SERVER_SOFTWARE=%s", server_version); + strcpy(cgienv[cgi_index++], "DOCUMENT_ROOT=" CONFIG_HTTP_WEBROOT); + snprintf(cgienv[cgi_index++], MAXREQUESTLENGTH, + "SERVER_NAME=%s", cn->server_name); + sprintf(cgienv[cgi_index++], "SERVER_PORT=%d", + cn->is_ssl ? CONFIG_HTTP_HTTPS_PORT : CONFIG_HTTP_PORT); + snprintf(cgienv[cgi_index++], MAXREQUESTLENGTH, + "REQUEST_URI=%s", cn->uri_request); + snprintf(cgienv[cgi_index++], MAXREQUESTLENGTH, + "SCRIPT_NAME=%s", cn->filereq); + snprintf(cgienv[cgi_index++], MAXREQUESTLENGTH, + "PATH_INFO=%s", cn->uri_path_info); + snprintf(cgienv[cgi_index++], MAXREQUESTLENGTH, + "QUERY_STRING=%s", cn->uri_query); + snprintf(cgienv[cgi_index++], MAXREQUESTLENGTH, + "REMOTE_ADDR=%s", cn->remote_addr); + snprintf(cgienv[cgi_index++], MAXREQUESTLENGTH, + "HTTP_COOKIE=%s", cn->cookie); /* note: small size */ +#if defined(CONFIG_HTTP_HAS_AUTHORIZATION) + snprintf(cgienv[cgi_index++], MAXREQUESTLENGTH, + "REMOTE_USER=%s", cn->authorization); +#endif + + switch (cn->reqtype) + { + case TYPE_GET: + type = "GET"; + break; + + case TYPE_POST: + type = "POST"; + sprintf(cgienv[cgi_index++], + "CONTENT_LENGTH=%d", cn->content_length); + strcpy(cgienv[cgi_index++], /* hard-code? */ + "CONTENT_TYPE=application/x-www-form-urlencoded"); + break; + } + + sprintf(cgienv[cgi_index++], "REQUEST_METHOD=%s", type); + + if (cn->is_ssl) + strcpy(cgienv[cgi_index++], "HTTPS=on"); + +#ifdef CONFIG_PLATFORM_CYGWIN + /* TODO: find out why Lua needs this */ + strcpy(cgienv[cgi_index++], "PATH=/usr/bin"); +#endif + + if (cgi_index >= CGI_ARG_SIZE) + { + printf("Content-type: text/plain\n\nToo many CGI args (%d, %d)\n", + cgi_index, CGI_ARG_SIZE); + _exit(1); + } + + /* copy across the pointer indexes */ + for (i = 0; i < cgi_index; i++) + cgiptr[i] = cgienv[i]; + + cgiptr[i++] = "AUTH_TYPE=Basic"; + cgiptr[i++] = "GATEWAY_INTERFACE=CGI/1.1"; + cgiptr[i++] = "SERVER_PROTOCOL="HTTP_VERSION; + cgiptr[i] = NULL; + + execve(myargs[0], myargs, cgiptr); + printf("Content-type: text/plain\n\nshouldn't get here\n"); + _exit(1); +#endif +} + +static char * cgi_filetype_match(struct connstruct *cn, const char *fn) +{ + struct cgiextstruct *tp = cgiexts; + + while (tp != NULL) + { + char *t; + + if ((t = strstr(fn, tp->ext)) != NULL) + { + t += strlen(tp->ext); + + if (*t == '/' || *t == '\0') + { +#ifdef CONFIG_HTTP_ENABLE_LUA + if (strcmp(tp->ext, ".lua") == 0 || strcmp(tp->ext, ".lp") == 0) + cn->is_lua = 1; +#endif + + return t; + } + else + return NULL; + + } + + tp = tp->next; + } + + return NULL; +} + +static void decode_path_info(struct connstruct *cn, char *path_info) +{ + char *cgi_delim; + + cn->is_cgi = 0; +#ifdef CONFIG_HTTP_ENABLE_LUA + cn->is_lua = 0; +#endif + *cn->uri_request = '\0'; + *cn->uri_path_info = '\0'; + *cn->uri_query = '\0'; + + my_strncpy(cn->uri_request, path_info, MAXREQUESTLENGTH); + + /* query info? */ + if ((cgi_delim = strchr(path_info, '?'))) + { + *cgi_delim = '\0'; + my_strncpy(cn->uri_query, cgi_delim+1, MAXREQUESTLENGTH); + } + + if ((cgi_delim = cgi_filetype_match(cn, path_info)) != NULL) + { + cn->is_cgi = 1; /* definitely a CGI script */ + + /* path info? */ + if (*cgi_delim != '\0') + { + my_strncpy(cn->uri_path_info, cgi_delim, MAXREQUESTLENGTH); + *cgi_delim = '\0'; + } + } + + /* the bit at the start must be the script name */ + my_strncpy(cn->filereq, path_info, MAXREQUESTLENGTH); +} + +static int init_read_post_data(char *buf, char *data, + struct connstruct *cn, int old_rv) +{ + char *next = data; + int rv = old_rv; + char *post_data; + + /* Too much Post data to send. MAXPOSTDATASIZE should be + configured (now it can be chaged in the header file) */ + if (cn->content_length > MAXPOSTDATASIZE) + { + send_error(cn, 418); + return 0; + } + + /* remove CRLF */ + while ((*next == '\r' || *next == '\n') && (next < &buf[rv])) + next++; + + if (cn->post_data == NULL) + { + cn->post_data = (char *) calloc(1, (cn->content_length + 1)); + /* Allocate buffer for the POST data that will be used by proccgi + to send POST data to the CGI script */ + + if (cn->post_data == NULL) + { + printf("axhttpd: could not allocate memory for POST data\n"); + TTY_FLUSH(); + send_error(cn, 599); + return 0; + } + } + + cn->post_state = 0; + cn->post_read = 0; + post_data = cn->post_data; + + while (next < &buf[rv]) + { + /*copy POST data to buffer*/ + *post_data = *next; + post_data++; + next++; + cn->post_read++; + if (cn->post_read == cn->content_length) + { + /* No more POST data to be copied */ + *post_data = '\0'; + return 1; + } + } + + /* More POST data has to be read. read_post_data will continue with that */ + cn->post_state = 1; + return 0; +} + +void read_post_data(struct connstruct *cn) +{ + char buf[MAXREQUESTLENGTH*4], *next; + char *post_data; + int rv; + + bzero(buf,MAXREQUESTLENGTH*4); + rv = special_read(cn, buf, sizeof(buf)-1); + if (rv <= 0) + { + if (rv < 0) /* really dead? */ + removeconnection(cn); + return; + } + + buf[rv] = '\0'; + next = buf; + + post_data = &cn->post_data[cn->post_read]; + + while (next < &buf[rv]) + { + *post_data = *next; + post_data++; + next++; + cn->post_read++; + if (cn->post_read == cn->content_length) + { + /* No more POST data to be copied */ + *post_data='\0'; + cn->post_state = 0; + buildactualfile(cn); + cn->state = STATE_WANT_TO_SEND_HEAD; + return; + } + } + + /* More POST data to read */ +} + +#endif /* CONFIG_HTTP_HAS_CGI */ + +/* Decode string %xx -> char (in place) */ +static void urldecode(char *buf) +{ + int v; + char *p, *s, *w; + + w = p = buf; + + while (*p) + { + v = 0; + + if (*p == '%') + { + s = p; + s++; + + if (isxdigit((int) s[0]) && isxdigit((int) s[1])) + { + v = hexit(s[0])*16 + hexit(s[1]); + + if (v) + { + /* do not decode %00 to null char */ + *w = (char)v; + p = &s[1]; + } + } + + } + + if (!v) *w=*p; + p++; + w++; + } + + *w='\0'; +} + +static int hexit(char c) +{ + if (c >= '0' && c <= '9') + return c - '0'; + else if (c >= 'a' && c <= 'f') + return c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + return c - 'A' + 10; + else + return 0; +} + +static void buildactualfile(struct connstruct *cn) +{ + char *cp; + snprintf(cn->actualfile, MAXREQUESTLENGTH, ".%s", cn->filereq); + +#ifndef WIN32 + /* Add directory slash if not there */ + if (isdir(cn->actualfile) && + cn->actualfile[strlen(cn->actualfile)-1] != '/') + strcat(cn->actualfile, "/"); + + /* work out the directory name */ + strncpy(cn->dirname, cn->actualfile, MAXREQUESTLENGTH); + if ((cp = strrchr(cn->dirname, '/')) == NULL) + cn->dirname[0] = 0; + else + *cp = 0; +#else + { + char curr_dir[MAXREQUESTLENGTH]; + char path[MAXREQUESTLENGTH]; + char *t = cn->actualfile; + + GetCurrentDirectory(MAXREQUESTLENGTH, curr_dir); + + /* convert all the forward slashes to back slashes */ + while ((t = strchr(t, '/'))) + *t++ = '\\'; + + snprintf(path, MAXREQUESTLENGTH, "%s%s", curr_dir, cn->actualfile); + memcpy(cn->actualfile, path, MAXREQUESTLENGTH); + + /* Add directory slash if not there */ + if (isdir(cn->actualfile) && + cn->actualfile[strlen(cn->actualfile)-1] != '\\') + strcat(cn->actualfile, "\\"); + + /* work out the directory name */ + strncpy(cn->dirname, cn->actualfile, MAXREQUESTLENGTH); + if ((cp = strrchr(cn->dirname, '\\')) == NULL) + cn->dirname[0] = 0; + else + *cp = 0; + } +#endif + +#if defined(CONFIG_HTTP_ENABLE_LUA) + /* + * Use the lua launcher if this file has a lua extension. Put this at the + * end as we need the directory name. + */ + if (cn->is_lua) + sprintf(cn->actualfile, "%s%s", CONFIG_HTTP_LUA_PREFIX, + CONFIG_HTTP_LUA_CGI_LAUNCHER); +#endif +} + +static int sanitizefile(const char *buf) +{ + int len, i; + + /* Don't accept anything not starting with a / */ + if (*buf != '/') + return 0; + + len = strlen(buf); + for (i = 0; i < len; i++) + { + /* Check for "/." i.e. don't send files starting with a . */ + if (buf[i] == '/' && buf[i+1] == '.') + return 0; + } + + return 1; +} + +static int sanitizehost(char *buf) +{ + while (*buf != '\0') + { + /* Handle the port */ + if (*buf == ':') + { + *buf = '\0'; + return 1; + } + + /* Enforce some basic URL rules... */ + if ((isalnum(*buf) == 0 && *buf != '-' && *buf != '.') || + (*buf == '.' && *(buf+1) == '.') || + (*buf == '.' && *(buf+1) == '-') || + (*buf == '-' && *(buf+1) == '.')) + return 0; + + buf++; + } + + return 1; +} + +static FILE * exist_check(struct connstruct *cn, const char *check_file) +{ + char pathname[MAXREQUESTLENGTH]; + snprintf(pathname, MAXREQUESTLENGTH, "%s/%s", cn->dirname, check_file); + return fopen(pathname, "r"); +} + +#ifdef CONFIG_HTTP_HAS_AUTHORIZATION +static void send_authenticate(struct connstruct *cn, const char *realm) +{ + char buf[1024]; + + snprintf(buf, sizeof(buf), HTTP_VERSION" 401 Unauthorized\n" + "WWW-Authenticate: Basic\n" + "realm=\"%s\"\n", realm); + special_write(cn, buf, strlen(buf)); +} + +static int check_digest(char *salt, const char *msg_passwd) +{ + uint8_t b256_salt[MAXREQUESTLENGTH]; + uint8_t real_passwd[MD5_SIZE]; + int salt_size; + char *b64_passwd; + uint8_t md5_result[MD5_SIZE]; + MD5_CTX ctx; + + /* retrieve the salt */ + if ((b64_passwd = strchr(salt, '$')) == NULL) + return -1; + + *b64_passwd++ = 0; + if (base64_decode(salt, strlen(salt), b256_salt, &salt_size)) + return -1; + + if (base64_decode(b64_passwd, strlen(b64_passwd), real_passwd, NULL)) + return -1; + + /* very simple MD5 crypt algorithm, but then the salt we use is large */ + MD5_Init(&ctx); + MD5_Update(&ctx, b256_salt, salt_size); /* process the salt */ + MD5_Update(&ctx, (uint8_t *)msg_passwd, strlen(msg_passwd)); + MD5_Final(md5_result, &ctx); + return memcmp(md5_result, real_passwd, MD5_SIZE);/* 0 = ok */ +} + +static int auth_check(struct connstruct *cn) +{ + char line[MAXREQUESTLENGTH]; + FILE *fp; + char *cp; + + if ((fp = exist_check(cn, ".htpasswd")) == NULL) + return 0; /* no .htpasswd file, so let though */ + + if (cn->authorization[0] == 0) + goto error; + + /* cn->authorization is in form "username:password" */ + if ((cp = strchr(cn->authorization, ':')) == NULL) + goto error; + else + *cp++ = 0; /* cp becomes the password */ + + while (fgets(line, sizeof(line), fp) != NULL) + { + char *b64_file_passwd; + int l = strlen(line); + + /* nuke newline */ + if (line[l-1] == '\n') + line[l-1] = 0; + + /* line is form "username:salt(b64)$password(b64)" */ + if ((b64_file_passwd = strchr(line, ':')) == NULL) + continue; + + *b64_file_passwd++ = 0; + + if (strcmp(line, cn->authorization)) /* our user? */ + continue; + + if (check_digest(b64_file_passwd, cp) == 0) + { + fclose(fp); + return 0; + } + } + +error: + fclose(fp); + send_authenticate(cn, cn->server_name); + return -1; +} +#endif + +static int htaccess_check(struct connstruct *cn) +{ + char line[MAXREQUESTLENGTH]; + FILE *fp; + int ret = 0; + + if ((fp = exist_check(cn, ".htaccess")) == NULL) + return 0; /* no .htaccess file, so let though */ + + while (fgets(line, sizeof(line), fp) != NULL) + { + if (strstr(line, "Deny all") || /* access to this dir denied */ + /* Access will be denied unless SSL is active */ + (!cn->is_ssl && strstr(line, "SSLRequireSSL")) || + /* Access will be denied if SSL is active */ + (cn->is_ssl && strstr(line, "SSLDenySSL"))) + { + ret = -1; + break; + } + } + + fclose(fp); + return ret; +} + +static void send_error(struct connstruct *cn, int err) +{ + char buf[MAXREQUESTLENGTH]; + char *title; + char *text; + + switch (err) + { + case 403: + title = "Forbidden"; + text = "File is protected"; +#ifdef CONFIG_HTTP_VERBOSE + printf("axhttpd: access to %s denied\n", cn->filereq); TTY_FLUSH(); +#endif + break; + + case 404: + title = "Not Found"; + text = title; + break; + + case 418: + title = "POST data size is to large"; + text = title; + break; + + default: + title = "Unknown"; + text = "Unknown"; + break; + } + + snprintf(buf, MAXREQUESTLENGTH, "HTTP/1.1 %d %s\n" + "Content-Type: text/html\n" + "Cache-Control: no-cache,no-store\n" + "Connection: close\n\n" + "\n\n%d %s\n" + "

%d %s

\n\n", + err, title, err, title, err, text); + special_write(cn, buf, strlen(buf)); + removeconnection(cn); +} + +static const char *getmimetype(const char *name) +{ + /* only bother with a few mime types - let the browser figure the rest out */ + if (strstr(name, ".htm")) + return "text/html"; + else if (strstr(name, ".css")) + return "text/css"; + else + return "application/octet-stream"; +} + +static int special_write(struct connstruct *cn, + const char *buf, size_t count) +{ + if (cn->is_ssl) + { + SSL *ssl = cn->ssl; + return ssl ? ssl_write(ssl, (uint8_t *)buf, count) : -1; + } + else + return SOCKET_WRITE(cn->networkdesc, buf, count); +} + +static int special_read(struct connstruct *cn, void *buf, size_t count) +{ + int res; + + if (cn->is_ssl) + { + uint8_t *read_buf; + if ((res = ssl_read(cn->ssl, &read_buf)) > SSL_OK) + { + memcpy(buf, read_buf, res > (int)count ? count : res); + } + } + else + res = SOCKET_READ(cn->networkdesc, buf, count); + + return res; +} + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/tdate_parse.c b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/tdate_parse.c new file mode 100644 index 0000000..813bdc5 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/httpd/tdate_parse.c @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include "axhttp.h" + +struct day_mon_map +{ + const char* s; + uint8_t l; +}; + +static struct day_mon_map wday_tab[] = +{ + { "Sun", 0 }, { "Mon", 1 }, { "Tue", 2 }, { "Wed", 3 }, + { "Thu", 4 }, { "Fri", 5 }, { "Sat", 6 }, +}; + +static struct day_mon_map mon_tab[] = +{ + { "Jan", 0 }, { "Feb", 1 }, { "Mar", 2 }, { "Apr", 3 }, + { "May", 4 }, { "Jun", 5 }, { "Jul", 6 }, { "Aug", 7 }, + { "Sep", 8 }, { "Oct", 9 }, { "Nov", 10 }, { "Dec", 11 }, +}; + +static int day_mon_map_compare(const char *v1, const char *v2) +{ + return strcmp(((struct day_mon_map*)v1)->s, ((struct day_mon_map*)v2)->s); +} + +void tdate_init(void) +{ + qsort(wday_tab, sizeof(wday_tab)/sizeof(struct day_mon_map), + sizeof(struct day_mon_map), + (int (*)(const void *, const void *))day_mon_map_compare); + qsort(mon_tab, sizeof(mon_tab)/sizeof(struct day_mon_map), + sizeof(struct day_mon_map), + (int (*)(const void *, const void *))day_mon_map_compare); +} + +static int8_t day_mon_map_search(const char* str, + const struct day_mon_map* tab, int n) +{ + struct day_mon_map *search = bsearch(&str, tab, n, + sizeof(struct day_mon_map), + (int (*)(const void *, const void *))day_mon_map_compare); + return search ? search->l : -1; +} + +time_t tdate_parse(const char* str) +{ + struct tm tm; + char str_mon[4], str_wday[4]; + int tm_sec, tm_min, tm_hour, tm_mday, tm_year; + + /* Initialize. */ + memset(&tm, 0, sizeof(struct tm)); + + /* wdy, DD mth YY HH:MM:SS GMT */ + if ((sscanf(str, "%3[a-zA-Z], %d %3[a-zA-Z] %d %d:%d:%d GMT", + str_wday, &tm_mday, str_mon, &tm_year, &tm_hour, &tm_min, + &tm_sec) == 7) || + /* wdy mth DD HH:MM:SS YY */ + (sscanf(str, "%3[a-zA-Z] %3[a-zA-Z] %d %d:%d:%d %d", + str_wday, str_mon, &tm_mday, &tm_hour, &tm_min, &tm_sec, + &tm_year) == 7)) + { + int8_t tm_wday = day_mon_map_search(str_wday, wday_tab, + sizeof(wday_tab)/sizeof(struct day_mon_map)); + int8_t tm_mon = day_mon_map_search(str_mon, mon_tab, + sizeof(mon_tab)/sizeof(struct day_mon_map)); + + if (tm_wday < 0 || tm_mon < 0) + return -1; + + tm.tm_wday = tm_wday; + tm.tm_mon = tm_mon; + tm.tm_mday = tm_mday; + tm.tm_hour = tm_hour; + tm.tm_min = tm_min; + tm.tm_sec = tm_sec; + tm.tm_year = tm_year - 1900; + return mktime(&tm); + } + + return -1; /* error */ +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/Config.in b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/Config.in new file mode 100644 index 0000000..ecad25e --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/Config.in @@ -0,0 +1,63 @@ +# +# For a description of the syntax of this configuration file, +# see scripts/config/Kconfig-language.txt +# +menu "Samples" + +config CONFIG_SAMPLES + bool "Create Samples" + default y + help + axTLS contains various sample code. + + Select Y here if you want to build the various samples. + +config CONFIG_C_SAMPLES + bool "axssl - C version" + default y + depends on CONFIG_SAMPLES + help + Build the "C" version of axssl. The features enabled are very + dependent on the build mode ('full' mode will give all features). + +config CONFIG_CSHARP_SAMPLES + bool "axssl - C# version" + default y + depends on CONFIG_SAMPLES && CONFIG_CSHARP_BINDINGS + help + Build the "C#" version of axssl. The features enabled are very + dependent on the build mode ('full' mode will give all features). + +config CONFIG_VBNET_SAMPLES + bool "axssl - VB.NET version" + default y + depends on CONFIG_SAMPLES && CONFIG_VBNET_BINDINGS + help + Build the "VB.NET" version of axssl. The features enabled are very + dependent on the build mode ('full' mode will give all features). + +config CONFIG_JAVA_SAMPLES + bool "axssl - Java version" + default y + depends on CONFIG_SAMPLES && CONFIG_JAVA_BINDINGS + help + Build the "Java" version of axssl. The features enabled are very + dependent on the build mode ('full' mode will give all features). + +config CONFIG_PERL_SAMPLES + bool "axssl - Perl version" + default y + depends on CONFIG_SAMPLES && CONFIG_PERL_BINDINGS + help + Build the "Perl" version of axssl. The features enabled are very + dependent on the build mode ('full' mode will give all features). + +config CONFIG_LUA_SAMPLES + bool "axssl - Lua version" + default y + depends on CONFIG_SAMPLES && CONFIG_LUA_BINDINGS + help + Build the "Lua" version of axssl. The features enabled are very + dependent on the build mode ('full' mode will give all features). +endmenu + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/Makefile new file mode 100644 index 0000000..afbdd43 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/Makefile @@ -0,0 +1,62 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +all: + +include ../config/.config +include ../config/makefile.conf + +all: +ifdef CONFIG_C_SAMPLES + $(MAKE) -C c +endif +ifdef CONFIG_CSHARP_SAMPLES + $(MAKE) -C csharp +endif +ifdef CONFIG_VBNET_SAMPLES + $(MAKE) -C vbnet +endif +ifdef CONFIG_JAVA_SAMPLES + $(MAKE) -C java +endif +ifdef CONFIG_PERL_SAMPLES + $(MAKE) -C perl +endif +ifdef CONFIG_LUA_SAMPLES + $(MAKE) -C lua +endif + +clean:: + $(MAKE) -C c clean + $(MAKE) -C csharp clean + $(MAKE) -C vbnet clean + $(MAKE) -C java clean + $(MAKE) -C perl clean + $(MAKE) -C lua clean diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/c/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/c/Makefile new file mode 100644 index 0000000..17cf9e7 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/c/Makefile @@ -0,0 +1,76 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +all : sample + +AXTLS_HOME=../.. + +include $(AXTLS_HOME)/config/.config +include $(AXTLS_HOME)/config/makefile.conf + +ifndef CONFIG_PLATFORM_WIN32 + +ifdef CONFIG_PLATFORM_CYGWIN +TARGET=$(AXTLS_HOME)/$(STAGE)/axssl.exe +else +TARGET=$(AXTLS_HOME)/$(STAGE)/axssl +endif # cygwin + +LIBS=$(AXTLS_HOME)/$(STAGE) +else +TARGET=$(AXTLS_HOME)/$(STAGE)/axssl.exe +endif + +ifndef CONFIG_C_SAMPLES +sample: + +else +sample : $(TARGET) +OBJ= axssl.o +include $(AXTLS_HOME)/config/makefile.post + +ifndef CONFIG_PLATFORM_WIN32 + +$(TARGET): $(OBJ) $(LIBS)/libaxtls.a + $(LD) $(LDFLAGS) -o $@ $(OBJ) -L$(LIBS) -laxtls +ifdef CONFIG_STRIP_UNWANTED_SECTIONS + $(STRIP) --remove-section=.comment $(TARGET) +endif # use strip +else # Win32 + +$(TARGET): $(OBJ) + $(LD) $(LDFLAGS) $(AXTLS_HOME)/config/axtls.res /out:$@ $^ /libpath:"$(AXTLS_HOME)/$(STAGE)" axtls.lib +endif + +endif # CONFIG_C_SAMPLES + +clean:: + -@rm -f $(AXTLS_HOME)/$(STAGE)/axssl* + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/c/axssl.c b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/c/axssl.c new file mode 100644 index 0000000..6892ee4 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/c/axssl.c @@ -0,0 +1,883 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Demonstrate the use of the axTLS library in C with a set of + * command-line parameters similar to openssl. In fact, openssl clients + * should be able to communicate with axTLS servers and visa-versa. + * + * This code has various bits enabled depending on the configuration. To enable + * the most interesting version, compile with the 'full mode' enabled. + * + * To see what options you have, run the following: + * > axssl s_server -? + * > axssl s_client -? + * + * The axtls shared library must be in the same directory or be found + * by the OS. + */ +#include +#include +#include +#include "ssl.h" + +/* define standard input */ +#ifndef STDIN_FILENO +#define STDIN_FILENO 0 +#endif + +static void do_server(int argc, char *argv[]); +static void print_options(char *option); +static void print_server_options(char *option); +static void do_client(int argc, char *argv[]); +static void print_client_options(char *option); +static void display_cipher(SSL *ssl); +static void display_session_id(SSL *ssl); + +/** + * Main entry point. Doesn't do much except works out whether we are a client + * or a server. + */ +int main(int argc, char *argv[]) +{ +#ifdef WIN32 + WSADATA wsaData; + WORD wVersionRequested = MAKEWORD(2, 2); + WSAStartup(wVersionRequested, &wsaData); +#elif !defined(CONFIG_PLATFORM_SOLARIS) + signal(SIGPIPE, SIG_IGN); /* ignore pipe errors */ +#endif + + if (argc == 2 && strcmp(argv[1], "version") == 0) + { + printf("axssl %s %s\n", ssl_version(), __DATE__); + exit(0); + } + + if (argc < 2 || ( + strcmp(argv[1], "s_server") && strcmp(argv[1], "s_client"))) + print_options(argc > 1 ? argv[1] : ""); + + strcmp(argv[1], "s_server") ? + do_client(argc, argv) : do_server(argc, argv); + return 0; +} + +/** + * Implement the SSL server logic. + */ +static void do_server(int argc, char *argv[]) +{ + int i = 2; + uint16_t port = 4433; + uint32_t options = SSL_DISPLAY_CERTS; + int client_fd; + SSL_CTX *ssl_ctx; + int server_fd, res = 0; + socklen_t client_len; +#ifndef CONFIG_SSL_SKELETON_MODE + char *private_key_file = NULL; + const char *password = NULL; + char **cert; + int cert_index = 0; + int cert_size = ssl_get_config(SSL_MAX_CERT_CFG_OFFSET); +#endif +#ifdef WIN32 + char yes = 1; +#else + int yes = 1; +#endif + struct sockaddr_in serv_addr; + struct sockaddr_in client_addr; + int quiet = 0; +#ifdef CONFIG_SSL_CERT_VERIFICATION + int ca_cert_index = 0; + int ca_cert_size = ssl_get_config(SSL_MAX_CA_CERT_CFG_OFFSET); + char **ca_cert = (char **)calloc(1, sizeof(char *)*ca_cert_size); +#endif + fd_set read_set; + +#ifndef CONFIG_SSL_SKELETON_MODE + cert = (char **)calloc(1, sizeof(char *)*cert_size); +#endif + + while (i < argc) + { + if (strcmp(argv[i], "-accept") == 0) + { + if (i >= argc-1) + { + print_server_options(argv[i]); + } + + port = atoi(argv[++i]); + } +#ifndef CONFIG_SSL_SKELETON_MODE + else if (strcmp(argv[i], "-cert") == 0) + { + if (i >= argc-1 || cert_index >= cert_size) + { + print_server_options(argv[i]); + } + + cert[cert_index++] = argv[++i]; + } + else if (strcmp(argv[i], "-key") == 0) + { + if (i >= argc-1) + { + print_server_options(argv[i]); + } + + private_key_file = argv[++i]; + options |= SSL_NO_DEFAULT_KEY; + } + else if (strcmp(argv[i], "-pass") == 0) + { + if (i >= argc-1) + { + print_server_options(argv[i]); + } + + password = argv[++i]; + } +#endif + else if (strcmp(argv[i], "-quiet") == 0) + { + quiet = 1; + options &= ~SSL_DISPLAY_CERTS; + } +#ifdef CONFIG_SSL_CERT_VERIFICATION + else if (strcmp(argv[i], "-verify") == 0) + { + options |= SSL_CLIENT_AUTHENTICATION; + } + else if (strcmp(argv[i], "-CAfile") == 0) + { + if (i >= argc-1 || ca_cert_index >= ca_cert_size) + { + print_server_options(argv[i]); + } + + ca_cert[ca_cert_index++] = argv[++i]; + } +#endif +#ifdef CONFIG_SSL_FULL_MODE + else if (strcmp(argv[i], "-debug") == 0) + { + options |= SSL_DISPLAY_BYTES; + } + else if (strcmp(argv[i], "-state") == 0) + { + options |= SSL_DISPLAY_STATES; + } + else if (strcmp(argv[i], "-show-rsa") == 0) + { + options |= SSL_DISPLAY_RSA; + } +#endif + else /* don't know what this is */ + { + print_server_options(argv[i]); + } + + i++; + } + + if ((ssl_ctx = ssl_ctx_new(options, SSL_DEFAULT_SVR_SESS)) == NULL) + { + fprintf(stderr, "Error: Server context is invalid\n"); + exit(1); + } + +#ifndef CONFIG_SSL_SKELETON_MODE + if (private_key_file) + { + int obj_type = SSL_OBJ_RSA_KEY; + + /* auto-detect the key type from the file extension */ + if (strstr(private_key_file, ".p8")) + obj_type = SSL_OBJ_PKCS8; + else if (strstr(private_key_file, ".p12")) + obj_type = SSL_OBJ_PKCS12; + + if (ssl_obj_load(ssl_ctx, obj_type, private_key_file, password)) + { + fprintf(stderr, "Error: Private key '%s' is undefined.\n", + private_key_file); + exit(1); + } + } + + for (i = 0; i < cert_index; i++) + { + if (ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CERT, cert[i], NULL)) + { + printf("Certificate '%s' is undefined.\n", cert[i]); + exit(1); + } + } +#endif + +#ifdef CONFIG_SSL_CERT_VERIFICATION + for (i = 0; i < ca_cert_index; i++) + { + if (ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CACERT, ca_cert[i], NULL)) + { + printf("Certificate '%s' is undefined.\n", ca_cert[i]); + exit(1); + } + } + + free(ca_cert); +#endif +#ifndef CONFIG_SSL_SKELETON_MODE + free(cert); +#endif + + /* Create socket for incoming connections */ + if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) + { + perror("socket"); + return; + } + + setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)); + + /* Construct local address structure */ + memset(&serv_addr, 0, sizeof(serv_addr)); /* Zero out structure */ + serv_addr.sin_family = AF_INET; /* Internet address family */ + serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ + serv_addr.sin_port = htons(port); /* Local port */ + + /* Bind to the local address */ + if (bind(server_fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) + { + perror("bind"); + exit(1); + } + + if (listen(server_fd, 5) < 0) + { + perror("listen"); + exit(1); + } + + client_len = sizeof(client_addr); + + /************************************************************************* + * This is where the interesting stuff happens. Up until now we've + * just been setting up sockets etc. Now we do the SSL handshake. + *************************************************************************/ + for (;;) + { + SSL *ssl; + int reconnected = 0; + + if (!quiet) + { + printf("ACCEPT\n"); + TTY_FLUSH(); + } + + if ((client_fd = accept(server_fd, + (struct sockaddr *)&client_addr, &client_len)) < 0) + { + res = 1; + break; + } + + ssl = ssl_server_new(ssl_ctx, client_fd); + + /* now read (and display) whatever the client sends us */ + for (;;) + { + /* allow parallel reading of client and standard input */ + FD_ZERO(&read_set); + FD_SET(client_fd, &read_set); + +#ifndef WIN32 + /* win32 doesn't like mixing up stdin and sockets */ + if (isatty(STDIN_FILENO))/* but only if we are in an active shell */ + { + FD_SET(STDIN_FILENO, &read_set); + } + + if ((res = select(client_fd+1, &read_set, NULL, NULL, NULL)) > 0) + { + uint8_t buf[1024]; + + /* read standard input? */ + if (FD_ISSET(STDIN_FILENO, &read_set)) + { + if (fgets((char *)buf, sizeof(buf), stdin) == NULL) + { + res = SSL_ERROR_CONN_LOST; + } + else + { + /* small hack to check renegotiation */ + if (buf[0] == 'r' && (buf[1] == '\n' || buf[1] == '\r')) + { + res = ssl_renegotiate(ssl); + } + else /* write our ramblings to the client */ + { + res = ssl_write(ssl, buf, strlen((char *)buf)+1); + } + } + } + else /* a socket read */ +#endif + { + /* keep reading until we get something interesting */ + uint8_t *read_buf; + + if ((res = ssl_read(ssl, &read_buf)) == SSL_OK) + { + /* are we in the middle of doing a handshake? */ + if (ssl_handshake_status(ssl) != SSL_OK) + { + reconnected = 0; + } + else if (!reconnected) + { + /* we are connected/reconnected */ + if (!quiet) + { + display_session_id(ssl); + display_cipher(ssl); + } + + reconnected = 1; + } + } + + if (res > SSL_OK) /* display our interesting output */ + { + printf("%s", read_buf); + TTY_FLUSH(); + } + else if (res < SSL_OK && !quiet) + { + ssl_display_error(res); + } + } +#ifndef WIN32 + } +#endif + + if (res < SSL_OK) + { + if (!quiet) + { + printf("CONNECTION CLOSED\n"); + TTY_FLUSH(); + } + + break; + } + } + + /* client was disconnected or the handshake failed. */ + ssl_free(ssl); + SOCKET_CLOSE(client_fd); + } + + ssl_ctx_free(ssl_ctx); +} + +/** + * Implement the SSL client logic. + */ +static void do_client(int argc, char *argv[]) +{ +#ifdef CONFIG_SSL_ENABLE_CLIENT + int res, i = 2; + uint16_t port = 4433; + uint32_t options = SSL_SERVER_VERIFY_LATER|SSL_DISPLAY_CERTS; + int client_fd; + char *private_key_file = NULL; + struct sockaddr_in client_addr; + struct hostent *hostent; + int reconnect = 0; + uint32_t sin_addr; + SSL_CTX *ssl_ctx; + SSL *ssl = NULL; + int quiet = 0; + int cert_index = 0, ca_cert_index = 0; + int cert_size, ca_cert_size; + char **ca_cert, **cert; + uint8_t session_id[SSL_SESSION_ID_SIZE]; + fd_set read_set; + const char *password = NULL; + + FD_ZERO(&read_set); + sin_addr = inet_addr("127.0.0.1"); + cert_size = ssl_get_config(SSL_MAX_CERT_CFG_OFFSET); + ca_cert_size = ssl_get_config(SSL_MAX_CA_CERT_CFG_OFFSET); + ca_cert = (char **)calloc(1, sizeof(char *)*ca_cert_size); + cert = (char **)calloc(1, sizeof(char *)*cert_size); + + while (i < argc) + { + if (strcmp(argv[i], "-connect") == 0) + { + char *host, *ptr; + + if (i >= argc-1) + { + print_client_options(argv[i]); + } + + host = argv[++i]; + if ((ptr = strchr(host, ':')) == NULL) + { + print_client_options(argv[i]); + } + + *ptr++ = 0; + port = atoi(ptr); + hostent = gethostbyname(host); + + if (hostent == NULL) + { + print_client_options(argv[i]); + } + + sin_addr = *((uint32_t **)hostent->h_addr_list)[0]; + } + else if (strcmp(argv[i], "-cert") == 0) + { + if (i >= argc-1 || cert_index >= cert_size) + { + print_client_options(argv[i]); + } + + cert[cert_index++] = argv[++i]; + } + else if (strcmp(argv[i], "-key") == 0) + { + if (i >= argc-1) + { + print_client_options(argv[i]); + } + + private_key_file = argv[++i]; + options |= SSL_NO_DEFAULT_KEY; + } + else if (strcmp(argv[i], "-CAfile") == 0) + { + if (i >= argc-1 || ca_cert_index >= ca_cert_size) + { + print_client_options(argv[i]); + } + + ca_cert[ca_cert_index++] = argv[++i]; + } + else if (strcmp(argv[i], "-verify") == 0) + { + options &= ~SSL_SERVER_VERIFY_LATER; + } + else if (strcmp(argv[i], "-reconnect") == 0) + { + reconnect = 4; + } + else if (strcmp(argv[i], "-quiet") == 0) + { + quiet = 1; + options &= ~SSL_DISPLAY_CERTS; + } + else if (strcmp(argv[i], "-pass") == 0) + { + if (i >= argc-1) + { + print_client_options(argv[i]); + } + + password = argv[++i]; + } +#ifdef CONFIG_SSL_FULL_MODE + else if (strcmp(argv[i], "-debug") == 0) + { + options |= SSL_DISPLAY_BYTES; + } + else if (strcmp(argv[i], "-state") == 0) + { + options |= SSL_DISPLAY_STATES; + } + else if (strcmp(argv[i], "-show-rsa") == 0) + { + options |= SSL_DISPLAY_RSA; + } +#endif + else /* don't know what this is */ + { + print_client_options(argv[i]); + } + + i++; + } + + if ((ssl_ctx = ssl_ctx_new(options, SSL_DEFAULT_CLNT_SESS)) == NULL) + { + fprintf(stderr, "Error: Client context is invalid\n"); + exit(1); + } + + if (private_key_file) + { + int obj_type = SSL_OBJ_RSA_KEY; + + /* auto-detect the key type from the file extension */ + if (strstr(private_key_file, ".p8")) + obj_type = SSL_OBJ_PKCS8; + else if (strstr(private_key_file, ".p12")) + obj_type = SSL_OBJ_PKCS12; + + if (ssl_obj_load(ssl_ctx, obj_type, private_key_file, password)) + { + fprintf(stderr, "Error: Private key '%s' is undefined.\n", + private_key_file); + exit(1); + } + } + + for (i = 0; i < cert_index; i++) + { + if (ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CERT, cert[i], NULL)) + { + printf("Certificate '%s' is undefined.\n", cert[i]); + exit(1); + } + } + + for (i = 0; i < ca_cert_index; i++) + { + if (ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CACERT, ca_cert[i], NULL)) + { + printf("Certificate '%s' is undefined.\n", ca_cert[i]); + exit(1); + } + } + + free(cert); + free(ca_cert); + + /************************************************************************* + * This is where the interesting stuff happens. Up until now we've + * just been setting up sockets etc. Now we do the SSL handshake. + *************************************************************************/ + client_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + memset(&client_addr, 0, sizeof(client_addr)); + client_addr.sin_family = AF_INET; + client_addr.sin_port = htons(port); + client_addr.sin_addr.s_addr = sin_addr; + + if (connect(client_fd, (struct sockaddr *)&client_addr, + sizeof(client_addr)) < 0) + { + perror("connect"); + exit(1); + } + + if (!quiet) + { + printf("CONNECTED\n"); + TTY_FLUSH(); + } + + /* Try session resumption? */ + if (reconnect) + { + while (reconnect--) + { + ssl = ssl_client_new(ssl_ctx, client_fd, session_id, + sizeof(session_id)); + if ((res = ssl_handshake_status(ssl)) != SSL_OK) + { + if (!quiet) + { + ssl_display_error(res); + } + + ssl_free(ssl); + exit(1); + } + + display_session_id(ssl); + memcpy(session_id, ssl_get_session_id(ssl), SSL_SESSION_ID_SIZE); + + if (reconnect) + { + ssl_free(ssl); + SOCKET_CLOSE(client_fd); + + client_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + connect(client_fd, (struct sockaddr *)&client_addr, + sizeof(client_addr)); + } + } + } + else + { + ssl = ssl_client_new(ssl_ctx, client_fd, NULL, 0); + } + + /* check the return status */ + if ((res = ssl_handshake_status(ssl)) != SSL_OK) + { + if (!quiet) + { + ssl_display_error(res); + } + + exit(1); + } + + if (!quiet) + { + const char *common_name = ssl_get_cert_dn(ssl, + SSL_X509_CERT_COMMON_NAME); + if (common_name) + { + printf("Common Name:\t\t\t%s\n", common_name); + } + + display_session_id(ssl); + display_cipher(ssl); + } + + for (;;) + { + uint8_t buf[1024]; + res = SSL_OK; + + /* allow parallel reading of server and standard input */ + FD_SET(client_fd, &read_set); +#ifndef WIN32 + /* win32 doesn't like mixing up stdin and sockets */ + FD_SET(STDIN_FILENO, &read_set); + + if ((res = select(client_fd+1, &read_set, NULL, NULL, NULL)) > 0) + { + /* read standard input? */ + if (FD_ISSET(STDIN_FILENO, &read_set)) +#endif + { + if (fgets((char *)buf, sizeof(buf), stdin) == NULL) + { + /* bomb out of here */ + ssl_free(ssl); + break; + } + else + { + /* small hack to check renegotiation */ + if (buf[0] == 'R' && (buf[1] == '\n' || buf[1] == '\r')) + { + res = ssl_renegotiate(ssl); + } + else + { + res = ssl_write(ssl, buf, strlen((char *)buf)+1); + } + } + } +#ifndef WIN32 + else /* a socket read */ + { + uint8_t *read_buf; + + res = ssl_read(ssl, &read_buf); + + if (res > 0) /* display our interesting output */ + { + printf("%s", read_buf); + TTY_FLUSH(); + } + } + } +#endif + + if (res < 0) + { + if (!quiet) + { + ssl_display_error(res); + } + + break; /* get outta here */ + } + } + + ssl_ctx_free(ssl_ctx); + SOCKET_CLOSE(client_fd); +#else + print_client_options(argv[1]); +#endif +} + +/** + * We've had some sort of command-line error. Print out the basic options. + */ +static void print_options(char *option) +{ + printf("axssl: Error: '%s' is an invalid command.\n", option); + printf("usage: axssl [s_server|s_client|version] [args ...]\n"); + exit(1); +} + +/** + * We've had some sort of command-line error. Print out the server options. + */ +static void print_server_options(char *option) +{ +#ifndef CONFIG_SSL_SKELETON_MODE + int cert_size = ssl_get_config(SSL_MAX_CERT_CFG_OFFSET); +#endif +#ifdef CONFIG_SSL_CERT_VERIFICATION + int ca_cert_size = ssl_get_config(SSL_MAX_CA_CERT_CFG_OFFSET); +#endif + + printf("unknown option %s\n", option); + printf("usage: s_server [args ...]\n"); + printf(" -accept arg\t- port to accept on (default is 4433)\n"); +#ifndef CONFIG_SSL_SKELETON_MODE + printf(" -cert arg\t- certificate file to add (in addition to default)" + " to chain -\n" + "\t\t Can repeat up to %d times\n", cert_size); + printf(" -key arg\t- Private key file to use\n"); + printf(" -pass\t\t- private key file pass phrase source\n"); +#endif + printf(" -quiet\t\t- No server output\n"); +#ifdef CONFIG_SSL_CERT_VERIFICATION + printf(" -verify\t- turn on peer certificate verification\n"); + printf(" -CAfile arg\t- Certificate authority\n"); + printf("\t\t Can repeat up to %d times\n", ca_cert_size); +#endif +#ifdef CONFIG_SSL_FULL_MODE + printf(" -debug\t\t- Print more output\n"); + printf(" -state\t\t- Show state messages\n"); + printf(" -show-rsa\t- Show RSA state\n"); +#endif + exit(1); +} + +/** + * We've had some sort of command-line error. Print out the client options. + */ +static void print_client_options(char *option) +{ +#ifdef CONFIG_SSL_ENABLE_CLIENT + int cert_size = ssl_get_config(SSL_MAX_CERT_CFG_OFFSET); + int ca_cert_size = ssl_get_config(SSL_MAX_CA_CERT_CFG_OFFSET); +#endif + + printf("unknown option %s\n", option); +#ifdef CONFIG_SSL_ENABLE_CLIENT + printf("usage: s_client [args ...]\n"); + printf(" -connect host:port - who to connect to (default " + "is localhost:4433)\n"); + printf(" -verify\t- turn on peer certificate verification\n"); + printf(" -cert arg\t- certificate file to use\n"); + printf("\t\t Can repeat up to %d times\n", cert_size); + printf(" -key arg\t- Private key file to use\n"); + printf(" -CAfile arg\t- Certificate authority\n"); + printf("\t\t Can repeat up to %d times\n", ca_cert_size); + printf(" -quiet\t\t- No client output\n"); + printf(" -reconnect\t- Drop and re-make the connection " + "with the same Session-ID\n"); + printf(" -pass\t\t- private key file pass phrase source\n"); +#ifdef CONFIG_SSL_FULL_MODE + printf(" -debug\t\t- Print more output\n"); + printf(" -state\t\t- Show state messages\n"); + printf(" -show-rsa\t- Show RSA state\n"); +#endif +#else + printf("Change configuration to allow this feature\n"); +#endif + exit(1); +} + +/** + * Display what cipher we are using + */ +static void display_cipher(SSL *ssl) +{ + printf("CIPHER is "); + switch (ssl_get_cipher_id(ssl)) + { + case SSL_AES128_SHA: + printf("AES128-SHA"); + break; + + case SSL_AES256_SHA: + printf("AES256-SHA"); + break; + + case SSL_RC4_128_SHA: + printf("RC4-SHA"); + break; + + case SSL_RC4_128_MD5: + printf("RC4-MD5"); + break; + + default: + printf("Unknown - %d", ssl_get_cipher_id(ssl)); + break; + } + + printf("\n"); + TTY_FLUSH(); +} + +/** + * Display what session id we have. + */ +static void display_session_id(SSL *ssl) +{ + int i; + const uint8_t *session_id = ssl_get_session_id(ssl); + int sess_id_size = ssl_get_session_id_size(ssl); + + if (sess_id_size > 0) + { + printf("-----BEGIN SSL SESSION PARAMETERS-----\n"); + for (i = 0; i < sess_id_size; i++) + { + printf("%02x", session_id[i]); + } + + printf("\n-----END SSL SESSION PARAMETERS-----\n"); + TTY_FLUSH(); + } +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/csharp/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/csharp/Makefile new file mode 100644 index 0000000..46c2421 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/csharp/Makefile @@ -0,0 +1,48 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +include ../../config/.config +include ../../config/makefile.conf +include ../../config/makefile.dotnet.conf + +all : sample +TARGET=../../$(STAGE)/axssl.csharp.exe +sample : $(TARGET) + +$(TARGET): ../../bindings/csharp/axTLS.cs ../../bindings/csharp/axInterface.cs axssl.cs +ifdef GO_DOT_NET + csc.exe /nologo /t:exe /out:"`cygpath -w $@`" $(foreach file, $^, "`cygpath -w $(file)`") +else # use mono to build + mcs -out:$@ $^ + +endif # ARCH + +clean:: + -@rm -f $(TARGET) diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/csharp/axssl.cs b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/csharp/axssl.cs new file mode 100644 index 0000000..dae2b8a --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/csharp/axssl.cs @@ -0,0 +1,758 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Demonstrate the use of the axTLS library in C# with a set of + * command-line parameters similar to openssl. In fact, openssl clients + * should be able to communicate with axTLS servers and visa-versa. + * + * This code has various bits enabled depending on the configuration. To enable + * the most interesting version, compile with the 'full mode' enabled. + * + * To see what options you have, run the following: + * > axssl.csharp.exe s_server -? + * > axssl.csharp.exe s_client -? + * + * The axtls shared library must be in the same directory or be found + * by the OS. + */ + +using System; +using System.Net; +using System.Net.Sockets; +using axTLS; + +public class axssl +{ + /* + * Main() + */ + public static void Main(string[] args) + { + if (args.Length == 1 && args[0] == "version") + { + Console.WriteLine("axssl.csharp " + SSLUtil.Version()); + Environment.Exit(0); + } + + axssl runner = new axssl(); + + if (args.Length < 1 || (args[0] != "s_server" && args[0] != "s_client")) + runner.print_options(args.Length > 0 ? args[0] : ""); + + int build_mode = SSLUtil.BuildMode(); + + if (args[0] == "s_server") + runner.do_server(build_mode, args); + else + runner.do_client(build_mode, args); + } + + /* + * do_server() + */ + private void do_server(int build_mode, string[] args) + { + int i = 1; + int port = 4433; + uint options = axtls.SSL_DISPLAY_CERTS; + bool quiet = false; + string password = null; + string private_key_file = null; + + /* organise the cert/ca_cert lists */ + int cert_size = SSLUtil.MaxCerts(); + int ca_cert_size = SSLUtil.MaxCACerts(); + string[] cert = new string[cert_size]; + string[] ca_cert = new string[ca_cert_size]; + int cert_index = 0; + int ca_cert_index = 0; + + while (i < args.Length) + { + if (args[i] == "-accept") + { + if (i >= args.Length-1) + { + print_server_options(build_mode, args[i]); + } + + port = Int32.Parse(args[++i]); + } + else if (args[i] == "-quiet") + { + quiet = true; + options &= ~(uint)axtls.SSL_DISPLAY_CERTS; + } + else if (build_mode >= axtls.SSL_BUILD_SERVER_ONLY) + { + if (args[i] == "-cert") + { + if (i >= args.Length-1 || cert_index >= cert_size) + { + print_server_options(build_mode, args[i]); + } + + cert[cert_index++] = args[++i]; + } + else if (args[i] == "-key") + { + if (i >= args.Length-1) + { + print_server_options(build_mode, args[i]); + } + + private_key_file = args[++i]; + options |= axtls.SSL_NO_DEFAULT_KEY; + } + else if (args[i] == "-pass") + { + if (i >= args.Length-1) + { + print_server_options(build_mode, args[i]); + } + + password = args[++i]; + } + else if (build_mode >= axtls.SSL_BUILD_ENABLE_VERIFICATION) + { + if (args[i] == "-verify") + { + options |= axtls.SSL_CLIENT_AUTHENTICATION; + } + else if (args[i] == "-CAfile") + { + if (i >= args.Length-1 || ca_cert_index >= ca_cert_size) + { + print_server_options(build_mode, args[i]); + } + + ca_cert[ca_cert_index++] = args[++i]; + } + else if (build_mode == axtls.SSL_BUILD_FULL_MODE) + { + if (args[i] == "-debug") + { + options |= axtls.SSL_DISPLAY_BYTES; + } + else if (args[i] == "-state") + { + options |= axtls.SSL_DISPLAY_STATES; + } + else if (args[i] == "-show-rsa") + { + options |= axtls.SSL_DISPLAY_RSA; + } + else + print_server_options(build_mode, args[i]); + } + else + print_server_options(build_mode, args[i]); + } + else + print_server_options(build_mode, args[i]); + } + else + print_server_options(build_mode, args[i]); + + i++; + } + + /* Create socket for incoming connections */ + IPEndPoint ep = new IPEndPoint(IPAddress.Any, port); + TcpListener server_sock = new TcpListener(ep); + server_sock.Start(); + + /********************************************************************** + * This is where the interesting stuff happens. Up until now we've + * just been setting up sockets etc. Now we do the SSL handshake. + **********************************************************************/ + SSLServer ssl_ctx = new SSLServer( + options, axtls.SSL_DEFAULT_SVR_SESS); + + if (ssl_ctx == null) + { + Console.Error.WriteLine("Error: Server context is invalid"); + Environment.Exit(1); + } + + if (private_key_file != null) + { + int obj_type = axtls.SSL_OBJ_RSA_KEY; + + if (private_key_file.EndsWith(".p8")) + obj_type = axtls.SSL_OBJ_PKCS8; + else if (private_key_file.EndsWith(".p12")) + obj_type = axtls.SSL_OBJ_PKCS12; + + if (ssl_ctx.ObjLoad(obj_type, + private_key_file, password) != axtls.SSL_OK) + { + Console.Error.WriteLine("Private key '" + private_key_file + + "' is undefined."); + Environment.Exit(1); + } + } + + for (i = 0; i < cert_index; i++) + { + if (ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CERT, + cert[i], null) != axtls.SSL_OK) + { + Console.WriteLine("Certificate '" + cert[i] + + "' is undefined."); + Environment.Exit(1); + } + } + + for (i = 0; i < ca_cert_index; i++) + { + if (ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CACERT, + ca_cert[i], null) != axtls.SSL_OK) + { + Console.WriteLine("Certificate '" + cert[i] + + "' is undefined."); + Environment.Exit(1); + } + } + + byte[] buf = null; + int res; + + for (;;) + { + if (!quiet) + { + Console.WriteLine("ACCEPT"); + } + + Socket client_sock = server_sock.AcceptSocket(); + + SSL ssl = ssl_ctx.Connect(client_sock); + + /* do the actual SSL handshake */ + while ((res = ssl_ctx.Read(ssl, out buf)) == axtls.SSL_OK) + { + /* check when the connection has been established */ + if (ssl.HandshakeStatus() == axtls.SSL_OK) + break; + + /* could do something else here */ + } + + if (res == axtls.SSL_OK) /* connection established and ok */ + { + if (!quiet) + { + display_session_id(ssl); + display_cipher(ssl); + } + + /* now read (and display) whatever the client sends us */ + for (;;) + { + /* keep reading until we get something interesting */ + while ((res = ssl_ctx.Read(ssl, out buf)) == axtls.SSL_OK) + { + /* could do something else here */ + } + + if (res < axtls.SSL_OK) + { + if (!quiet) + { + Console.WriteLine("CONNECTION CLOSED"); + } + + break; + } + + /* convert to string */ + char[] str = new char[res]; + for (i = 0; i < res; i++) + { + str[i] = (char)buf[i]; + } + + Console.Write(str); + } + } + else if (!quiet) + { + SSLUtil.DisplayError(res); + } + + /* client was disconnected or the handshake failed. */ + ssl.Dispose(); + client_sock.Close(); + } + + /* ssl_ctx.Dispose(); */ + } + + /* + * do_client() + */ + private void do_client(int build_mode, string[] args) + { + if (build_mode < axtls.SSL_BUILD_ENABLE_CLIENT) + { + print_client_options(build_mode, args[1]); + } + + int i = 1, res; + int port = 4433; + bool quiet = false; + string password = null; + int reconnect = 0; + string private_key_file = null; + string hostname = "127.0.0.1"; + + /* organise the cert/ca_cert lists */ + int cert_index = 0; + int ca_cert_index = 0; + int cert_size = SSLUtil.MaxCerts(); + int ca_cert_size = SSLUtil.MaxCACerts(); + string[] cert = new string[cert_size]; + string[] ca_cert = new string[ca_cert_size]; + + uint options = axtls.SSL_SERVER_VERIFY_LATER|axtls.SSL_DISPLAY_CERTS; + byte[] session_id = null; + + while (i < args.Length) + { + if (args[i] == "-connect") + { + string host_port; + + if (i >= args.Length-1) + { + print_client_options(build_mode, args[i]); + } + + host_port = args[++i]; + int index_colon; + + if ((index_colon = host_port.IndexOf(':')) < 0) + print_client_options(build_mode, args[i]); + + hostname = new string(host_port.ToCharArray(), + 0, index_colon); + port = Int32.Parse(new String(host_port.ToCharArray(), + index_colon+1, host_port.Length-index_colon-1)); + } + else if (args[i] == "-cert") + { + if (i >= args.Length-1 || cert_index >= cert_size) + { + print_client_options(build_mode, args[i]); + } + + cert[cert_index++] = args[++i]; + } + else if (args[i] == "-key") + { + if (i >= args.Length-1) + { + print_client_options(build_mode, args[i]); + } + + private_key_file = args[++i]; + options |= axtls.SSL_NO_DEFAULT_KEY; + } + else if (args[i] == "-CAfile") + { + if (i >= args.Length-1 || ca_cert_index >= ca_cert_size) + { + print_client_options(build_mode, args[i]); + } + + ca_cert[ca_cert_index++] = args[++i]; + } + else if (args[i] == "-verify") + { + options &= ~(uint)axtls.SSL_SERVER_VERIFY_LATER; + } + else if (args[i] == "-reconnect") + { + reconnect = 4; + } + else if (args[i] == "-quiet") + { + quiet = true; + options &= ~(uint)axtls.SSL_DISPLAY_CERTS; + } + else if (args[i] == "-pass") + { + if (i >= args.Length-1) + { + print_client_options(build_mode, args[i]); + } + + password = args[++i]; + } + else if (build_mode == axtls.SSL_BUILD_FULL_MODE) + { + if (args[i] == "-debug") + { + options |= axtls.SSL_DISPLAY_BYTES; + } + else if (args[i] == "-state") + { + options |= axtls.SSL_DISPLAY_STATES; + } + else if (args[i] == "-show-rsa") + { + options |= axtls.SSL_DISPLAY_RSA; + } + else + print_client_options(build_mode, args[i]); + } + else /* don't know what this is */ + print_client_options(build_mode, args[i]); + + i++; + } + + // IPHostEntry hostInfo = Dns.Resolve(hostname); + IPHostEntry hostInfo = Dns.GetHostEntry(hostname); + IPAddress[] addresses = hostInfo.AddressList; + IPEndPoint ep = new IPEndPoint(addresses[0], port); + Socket client_sock = new Socket(AddressFamily.InterNetwork, + SocketType.Stream, ProtocolType.Tcp); + client_sock.Connect(ep); + + if (!client_sock.Connected) + { + Console.WriteLine("could not connect"); + Environment.Exit(1); + } + + if (!quiet) + { + Console.WriteLine("CONNECTED"); + } + + /********************************************************************** + * This is where the interesting stuff happens. Up until now we've + * just been setting up sockets etc. Now we do the SSL handshake. + **********************************************************************/ + SSLClient ssl_ctx = new SSLClient(options, + axtls.SSL_DEFAULT_CLNT_SESS); + + if (ssl_ctx == null) + { + Console.Error.WriteLine("Error: Client context is invalid"); + Environment.Exit(1); + } + + if (private_key_file != null) + { + int obj_type = axtls.SSL_OBJ_RSA_KEY; + + if (private_key_file.EndsWith(".p8")) + obj_type = axtls.SSL_OBJ_PKCS8; + else if (private_key_file.EndsWith(".p12")) + obj_type = axtls.SSL_OBJ_PKCS12; + + if (ssl_ctx.ObjLoad(obj_type, + private_key_file, password) != axtls.SSL_OK) + { + Console.Error.WriteLine("Private key '" + private_key_file + + "' is undefined."); + Environment.Exit(1); + } + } + + for (i = 0; i < cert_index; i++) + { + if (ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CERT, + cert[i], null) != axtls.SSL_OK) + { + Console.WriteLine("Certificate '" + cert[i] + + "' is undefined."); + Environment.Exit(1); + } + } + + for (i = 0; i < ca_cert_index; i++) + { + if (ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CACERT, + ca_cert[i], null) != axtls.SSL_OK) + { + Console.WriteLine("Certificate '" + cert[i] + + "' is undefined."); + Environment.Exit(1); + } + } + + SSL ssl = new SSL(new IntPtr(0)); /* keep compiler happy */ + + /* Try session resumption? */ + if (reconnect > 0) + { + while (reconnect-- > 0) + { + ssl = ssl_ctx.Connect(client_sock, session_id); + + if ((res = ssl.HandshakeStatus()) != axtls.SSL_OK) + { + if (!quiet) + { + SSLUtil.DisplayError(res); + } + + ssl.Dispose(); + Environment.Exit(1); + } + + display_session_id(ssl); + session_id = ssl.GetSessionId(); + + if (reconnect > 0) + { + ssl.Dispose(); + client_sock.Close(); + + /* and reconnect */ + client_sock = new Socket(AddressFamily.InterNetwork, + SocketType.Stream, ProtocolType.Tcp); + client_sock.Connect(ep); + } + } + } + else + { + ssl = ssl_ctx.Connect(client_sock, null); + } + + /* check the return status */ + if ((res = ssl.HandshakeStatus()) != axtls.SSL_OK) + { + if (!quiet) + { + SSLUtil.DisplayError(res); + } + + Environment.Exit(1); + } + + if (!quiet) + { + string common_name = + ssl.GetCertificateDN(axtls.SSL_X509_CERT_COMMON_NAME); + + if (common_name != null) + { + Console.WriteLine("Common Name:\t\t\t" + common_name); + } + + display_session_id(ssl); + display_cipher(ssl); + } + + for (;;) + { + string user_input = Console.ReadLine(); + + if (user_input == null) + break; + + byte[] buf = new byte[user_input.Length+2]; + buf[buf.Length-2] = (byte)'\n'; /* add the carriage return */ + buf[buf.Length-1] = 0; /* null terminate */ + + for (i = 0; i < buf.Length-2; i++) + { + buf[i] = (byte)user_input[i]; + } + + if ((res = ssl_ctx.Write(ssl, buf, buf.Length)) < axtls.SSL_OK) + { + if (!quiet) + { + SSLUtil.DisplayError(res); + } + + break; + } + } + + ssl_ctx.Dispose(); + } + + /** + * We've had some sort of command-line error. Print out the basic options. + */ + private void print_options(string option) + { + Console.WriteLine("axssl: Error: '" + option + + "' is an invalid command."); + Console.WriteLine("usage: axssl.csharp [s_server|" + + "s_client|version] [args ...]"); + Environment.Exit(1); + } + + /** + * We've had some sort of command-line error. Print out the server options. + */ + private void print_server_options(int build_mode, string option) + { + int cert_size = SSLUtil.MaxCerts(); + int ca_cert_size = SSLUtil.MaxCACerts(); + + Console.WriteLine("unknown option " + option); + Console.WriteLine("usage: s_server [args ...]"); + Console.WriteLine(" -accept arg\t- port to accept on (default " + + "is 4433)"); + Console.WriteLine(" -quiet\t\t- No server output"); + + if (build_mode >= axtls.SSL_BUILD_SERVER_ONLY) + { + Console.WriteLine(" -cert arg\t- certificate file to add (in " + + "addition to default) to chain -"); + Console.WriteLine("\t\t Can repeat up to " + cert_size + " times"); + Console.WriteLine(" -key arg\t- Private key file to use"); + Console.WriteLine(" -pass\t\t- private key file pass phrase source"); + } + + if (build_mode >= axtls.SSL_BUILD_ENABLE_VERIFICATION) + { + Console.WriteLine(" -verify\t- turn on peer certificate " + + "verification"); + Console.WriteLine(" -CAfile arg\t- Certificate authority."); + Console.WriteLine("\t\t Can repeat up to " + + ca_cert_size + "times"); + } + + if (build_mode == axtls.SSL_BUILD_FULL_MODE) + { + Console.WriteLine(" -debug\t\t- Print more output"); + Console.WriteLine(" -state\t\t- Show state messages"); + Console.WriteLine(" -show-rsa\t- Show RSA state"); + } + + Environment.Exit(1); + } + + /** + * We've had some sort of command-line error. Print out the client options. + */ + private void print_client_options(int build_mode, string option) + { + int cert_size = SSLUtil.MaxCerts(); + int ca_cert_size = SSLUtil.MaxCACerts(); + + Console.WriteLine("unknown option " + option); + + if (build_mode >= axtls.SSL_BUILD_ENABLE_CLIENT) + { + Console.WriteLine("usage: s_client [args ...]"); + Console.WriteLine(" -connect host:port - who to connect to " + + "(default is localhost:4433)"); + Console.WriteLine(" -verify\t- turn on peer certificate " + + "verification"); + Console.WriteLine(" -cert arg\t- certificate file to use"); + Console.WriteLine("\t\t Can repeat up to %d times", cert_size); + Console.WriteLine(" -key arg\t- Private key file to use"); + Console.WriteLine(" -CAfile arg\t- Certificate authority."); + Console.WriteLine("\t\t Can repeat up to " + ca_cert_size + + " times"); + Console.WriteLine(" -quiet\t\t- No client output"); + Console.WriteLine(" -pass\t\t- private key file pass " + + "phrase source"); + Console.WriteLine(" -reconnect\t- Drop and re-make the " + + "connection with the same Session-ID"); + + if (build_mode == axtls.SSL_BUILD_FULL_MODE) + { + Console.WriteLine(" -debug\t\t- Print more output"); + Console.WriteLine(" -state\t\t- Show state messages"); + Console.WriteLine(" -show-rsa\t- Show RSA state"); + } + } + else + { + Console.WriteLine("Change configuration to allow this feature"); + } + + Environment.Exit(1); + } + + /** + * Display what cipher we are using + */ + private void display_cipher(SSL ssl) + { + Console.Write("CIPHER is "); + + switch (ssl.GetCipherId()) + { + case axtls.SSL_AES128_SHA: + Console.WriteLine("AES128-SHA"); + break; + + case axtls.SSL_AES256_SHA: + Console.WriteLine("AES256-SHA"); + break; + + case axtls.SSL_RC4_128_SHA: + Console.WriteLine("RC4-SHA"); + break; + + case axtls.SSL_RC4_128_MD5: + Console.WriteLine("RC4-MD5"); + break; + + default: + Console.WriteLine("Unknown - " + ssl.GetCipherId()); + break; + } + } + + /** + * Display what session id we have. + */ + private void display_session_id(SSL ssl) + { + byte[] session_id = ssl.GetSessionId(); + + if (session_id.Length > 0) + { + Console.WriteLine("-----BEGIN SSL SESSION PARAMETERS-----"); + foreach (byte b in session_id) + { + Console.Write("{0:x02}", b); + } + + Console.WriteLine("\n-----END SSL SESSION PARAMETERS-----"); + } + } +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/java/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/java/Makefile new file mode 100644 index 0000000..b10a79f --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/java/Makefile @@ -0,0 +1,51 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +include ../../config/.config +include ../../config/makefile.conf +include ../../config/makefile.java.conf + +all : sample +JAR=../../$(STAGE)/axtls.jar +CLASSES=../../bindings/java/classes +sample : $(JAR) + +$(JAR) : $(CLASSES)/axssl.class $(wildcard $(CLASSES)/axTLSj/*.class) + jar mcvf manifest.mf $@ -C $(CLASSES) axTLSj -C $(CLASSES) axssl.class + +JAVA_FILES=axssl.java +JAVA_CLASSES:=$(JAVA_FILES:%.java=$(CLASSES)/axTLSj/%.class) + +$(CLASSES)/%.class : %.java + javac -d $(CLASSES) -classpath $(CLASSES) $^ + +clean:: + -@rm -f $(TARGET) + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/java/axssl.java b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/java/axssl.java new file mode 100644 index 0000000..2057f29 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/java/axssl.java @@ -0,0 +1,760 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Demonstrate the use of the axTLS library in Java with a set of + * command-line parameters similar to openssl. In fact, openssl clients + * should be able to communicate with axTLS servers and visa-versa. * + * This code has various bits enabled depending on the configuration. To enable + * the most interesting version, compile with the 'full mode' enabled. + * + * To see what options you have, run the following: + * > java -jar axtls.jar s_server -? + * > java -jar axtls.jar s_client -? + * + * The axtls/axtlsj shared libraries must be in the same directory or be found + * by the OS. + */ + +import java.io.*; +import java.util.*; +import java.net.*; +import axTLSj.*; + +public class axssl +{ + /* + * Main() + */ + public static void main(String[] args) + { + if (args.length == 1 && args[0].equals("version")) + { + System.out.println("axtls.jar " + SSLUtil.version()); + System.exit(0); + } + + axssl runner = new axssl(); + + try + { + if (args.length < 1 || + (!args[0].equals("s_server") && + !args[0].equals("s_client"))) + { + runner.print_options(args.length > 0 ? args[0] : ""); + } + + int build_mode = SSLUtil.buildMode(); + + if (args[0].equals("s_server")) + runner.do_server(build_mode, args); + else + runner.do_client(build_mode, args); + } + catch (Exception e) + { + System.out.println(e); + } + } + + /* + * do_server() + */ + private void do_server(int build_mode, String[] args) + throws Exception + { + int i = 1; + int port = 4433; + int options = axtlsj.SSL_DISPLAY_CERTS; + boolean quiet = false; + String password = null; + String private_key_file = null; + + /* organise the cert/ca_cert lists */ + int cert_size = SSLUtil.maxCerts(); + int ca_cert_size = SSLUtil.maxCACerts(); + String[] cert = new String[cert_size]; + String[] ca_cert = new String[ca_cert_size]; + int cert_index = 0; + int ca_cert_index = 0; + + while (i < args.length) + { + if (args[i].equals("-accept")) + { + if (i >= args.length-1) + { + print_server_options(build_mode, args[i]); + } + + port = Integer.parseInt(args[++i]); + } + else if (args[i].equals("-quiet")) + { + quiet = true; + options &= ~(int)axtlsj.SSL_DISPLAY_CERTS; + } + else if (build_mode >= axtlsj.SSL_BUILD_SERVER_ONLY) + { + if (args[i].equals("-cert")) + { + if (i >= args.length-1 || cert_index >= cert_size) + { + print_server_options(build_mode, args[i]); + } + + cert[cert_index++] = args[++i]; + } + else if (args[i].equals("-key")) + { + if (i >= args.length-1) + { + print_server_options(build_mode, args[i]); + } + + private_key_file = args[++i]; + options |= axtlsj.SSL_NO_DEFAULT_KEY; + } + else if (args[i].equals("-pass")) + { + if (i >= args.length-1) + { + print_server_options(build_mode, args[i]); + } + + password = args[++i]; + } + else if (build_mode >= axtlsj.SSL_BUILD_ENABLE_VERIFICATION) + { + if (args[i].equals("-verify")) + { + options |= axtlsj.SSL_CLIENT_AUTHENTICATION; + } + else if (args[i].equals("-CAfile")) + { + if (i >= args.length-1 || ca_cert_index >= ca_cert_size) + { + print_server_options(build_mode, args[i]); + } + + ca_cert[ca_cert_index++] = args[++i]; + } + else if (build_mode == axtlsj.SSL_BUILD_FULL_MODE) + { + if (args[i].equals("-debug")) + { + options |= axtlsj.SSL_DISPLAY_BYTES; + } + else if (args[i].equals("-state")) + { + options |= axtlsj.SSL_DISPLAY_STATES; + } + else if (args[i].equals("-show-rsa")) + { + options |= axtlsj.SSL_DISPLAY_RSA; + } + else + print_server_options(build_mode, args[i]); + } + else + print_server_options(build_mode, args[i]); + } + else + print_server_options(build_mode, args[i]); + } + else + print_server_options(build_mode, args[i]); + + i++; + } + + /* Create socket for incoming connections */ + ServerSocket server_sock = new ServerSocket(port); + + /********************************************************************** + * This is where the interesting stuff happens. Up until now we've + * just been setting up sockets etc. Now we do the SSL handshake. + **********************************************************************/ + SSLServer ssl_ctx = new SSLServer(options, + axtlsj.SSL_DEFAULT_SVR_SESS); + + if (ssl_ctx == null) + throw new Exception("Error: Server context is invalid"); + + if (private_key_file != null) + { + int obj_type = axtlsj.SSL_OBJ_RSA_KEY; + + if (private_key_file.endsWith(".p8")) + obj_type = axtlsj.SSL_OBJ_PKCS8; + else if (private_key_file.endsWith(".p12")) + obj_type = axtlsj.SSL_OBJ_PKCS12; + + if (ssl_ctx.objLoad(obj_type, + private_key_file, password) != axtlsj.SSL_OK) + { + throw new Exception("Error: Private key '" + private_key_file + + "' is undefined."); + } + } + + for (i = 0; i < cert_index; i++) + { + if (ssl_ctx.objLoad(axtlsj.SSL_OBJ_X509_CERT, + cert[i], null) != axtlsj.SSL_OK) + { + throw new Exception("Certificate '" + cert[i] + + "' is undefined."); + } + } + + for (i = 0; i < ca_cert_index; i++) + { + if (ssl_ctx.objLoad(axtlsj.SSL_OBJ_X509_CACERT, + ca_cert[i], null) != axtlsj.SSL_OK) + { + throw new Exception("Certificate '" + ca_cert[i] + + "' is undefined."); + } + } + + int res; + SSLReadHolder rh = new SSLReadHolder(); + + for (;;) + { + if (!quiet) + { + System.out.println("ACCEPT"); + } + + Socket client_sock = server_sock.accept(); + + SSL ssl = ssl_ctx.connect(client_sock); + + while ((res = ssl_ctx.read(ssl, rh)) == axtlsj.SSL_OK) + { + /* check when the connection has been established */ + if (ssl.handshakeStatus() == axtlsj.SSL_OK) + break; + + /* could do something else here */ + } + + if (res == axtlsj.SSL_OK) /* connection established and ok */ + { + if (!quiet) + { + display_session_id(ssl); + display_cipher(ssl); + } + + /* now read (and display) whatever the client sends us */ + for (;;) + { + /* keep reading until we get something interesting */ + while ((res = ssl_ctx.read(ssl, rh)) == axtlsj.SSL_OK) + { + /* could do something else here */ + } + + if (res < axtlsj.SSL_OK) + { + if (!quiet) + { + System.out.println("CONNECTION CLOSED"); + } + + break; + } + + /* convert to String */ + byte[] buf = rh.getData(); + char[] str = new char[res]; + + for (i = 0; i < res; i++) + { + str[i] = (char)buf[i]; + } + + System.out.print(str); + } + } + else if (!quiet) + { + SSLUtil.displayError(res); + } + + /* client was disconnected or the handshake failed. */ + ssl.dispose(); + client_sock.close(); + } + + /* ssl_ctx.dispose(); */ + } + + /* + * do_client() + */ + private void do_client(int build_mode, String[] args) + throws Exception + { + if (build_mode < axtlsj.SSL_BUILD_ENABLE_CLIENT) + print_client_options(build_mode, args[1]); + + int i = 1, res; + int port = 4433; + boolean quiet = false; + String password = null; + int reconnect = 0; + String private_key_file = null; + String hostname = "127.0.0.1"; + + /* organise the cert/ca_cert lists */ + int cert_index = 0; + int ca_cert_index = 0; + int cert_size = SSLUtil.maxCerts(); + int ca_cert_size = SSLUtil.maxCACerts(); + String[] cert = new String[cert_size]; + String[] ca_cert = new String[ca_cert_size]; + + int options = axtlsj.SSL_SERVER_VERIFY_LATER|axtlsj.SSL_DISPLAY_CERTS; + byte[] session_id = null; + + while (i < args.length) + { + if (args[i].equals("-connect")) + { + String host_port; + + if (i >= args.length-1) + { + print_client_options(build_mode, args[i]); + } + + host_port = args[++i]; + int index_colon; + + if ((index_colon = host_port.indexOf(':')) < 0) + print_client_options(build_mode, args[i]); + + hostname = new String(host_port.toCharArray(), + 0, index_colon); + port = Integer.parseInt(new String(host_port.toCharArray(), + index_colon+1, host_port.length()-index_colon-1)); + } + else if (args[i].equals("-cert")) + { + if (i >= args.length-1 || cert_index >= cert_size) + { + print_client_options(build_mode, args[i]); + } + + cert[cert_index++] = args[++i]; + } + else if (args[i].equals("-CAfile")) + { + if (i >= args.length-1 || ca_cert_index >= ca_cert_size) + { + print_client_options(build_mode, args[i]); + } + + ca_cert[ca_cert_index++] = args[++i]; + } + else if (args[i].equals("-key")) + { + if (i >= args.length-1) + { + print_client_options(build_mode, args[i]); + } + + private_key_file = args[++i]; + options |= axtlsj.SSL_NO_DEFAULT_KEY; + } + else if (args[i].equals("-verify")) + { + options &= ~(int)axtlsj.SSL_SERVER_VERIFY_LATER; + } + else if (args[i].equals("-reconnect")) + { + reconnect = 4; + } + else if (args[i].equals("-quiet")) + { + quiet = true; + options &= ~(int)axtlsj.SSL_DISPLAY_CERTS; + } + else if (args[i].equals("-pass")) + { + if (i >= args.length-1) + { + print_server_options(build_mode, args[i]); + } + + password = args[++i]; + } + else if (build_mode == axtlsj.SSL_BUILD_FULL_MODE) + { + if (args[i].equals("-debug")) + { + options |= axtlsj.SSL_DISPLAY_BYTES; + } + else if (args[i].equals("-state")) + { + options |= axtlsj.SSL_DISPLAY_STATES; + } + else if (args[i].equals("-show-rsa")) + { + options |= axtlsj.SSL_DISPLAY_RSA; + } + else + print_client_options(build_mode, args[i]); + } + else /* don't know what this is */ + print_client_options(build_mode, args[i]); + + i++; + } + + Socket client_sock = new Socket(hostname, port); + + if (!client_sock.isConnected()) + { + System.out.println("could not connect"); + throw new Exception(); + } + + if (!quiet) + { + System.out.println("CONNECTED"); + } + + /********************************************************************** + * This is where the interesting stuff happens. Up until now we've + * just been setting up sockets etc. Now we do the SSL handshake. + **********************************************************************/ + SSLClient ssl_ctx = new SSLClient(options, + axtlsj.SSL_DEFAULT_CLNT_SESS); + + if (ssl_ctx == null) + { + throw new Exception("Error: Client context is invalid"); + } + + if (private_key_file != null) + { + int obj_type = axtlsj.SSL_OBJ_RSA_KEY; + + if (private_key_file.endsWith(".p8")) + obj_type = axtlsj.SSL_OBJ_PKCS8; + else if (private_key_file.endsWith(".p12")) + obj_type = axtlsj.SSL_OBJ_PKCS12; + + if (ssl_ctx.objLoad(obj_type, + private_key_file, password) != axtlsj.SSL_OK) + { + throw new Exception("Error: Private key '" + private_key_file + + "' is undefined."); + } + } + + for (i = 0; i < cert_index; i++) + { + if (ssl_ctx.objLoad(axtlsj.SSL_OBJ_X509_CERT, + cert[i], null) != axtlsj.SSL_OK) + { + throw new Exception("Certificate '" + cert[i] + + "' is undefined."); + } + } + + for (i = 0; i < ca_cert_index; i++) + { + if (ssl_ctx.objLoad(axtlsj.SSL_OBJ_X509_CACERT, + ca_cert[i], null) != axtlsj.SSL_OK) + { + throw new Exception("Certificate '" + ca_cert[i] + + "' is undefined."); + } + } + + SSL ssl = null; + + /* Try session resumption? */ + if (reconnect > 0) + { + while (reconnect-- > 0) + { + ssl = ssl_ctx.connect(client_sock, session_id); + + if ((res = ssl.handshakeStatus()) != axtlsj.SSL_OK) + { + if (!quiet) + { + SSLUtil.displayError(res); + } + + ssl.dispose(); + throw new Exception(); + } + + display_session_id(ssl); + session_id = ssl.getSessionId(); + + if (reconnect > 0) + { + ssl.dispose(); + client_sock.close(); + + /* and reconnect */ + client_sock = new Socket(hostname, port); + } + } + } + else + { + ssl = ssl_ctx.connect(client_sock, null); + } + + /* check the return status */ + if ((res = ssl.handshakeStatus()) != axtlsj.SSL_OK) + { + if (!quiet) + { + SSLUtil.displayError(res); + } + + throw new Exception(); + } + + if (!quiet) + { + String common_name = + ssl.getCertificateDN(axtlsj.SSL_X509_CERT_COMMON_NAME); + + if (common_name != null) + { + System.out.println("Common Name:\t\t\t" + common_name); + } + + display_session_id(ssl); + display_cipher(ssl); + } + + BufferedReader in = new BufferedReader( + new InputStreamReader(System.in)); + + for (;;) + { + String user_input = in.readLine(); + + if (user_input == null) + break; + + byte[] buf = new byte[user_input.length()+2]; + buf[buf.length-2] = (byte)'\n'; /* add the carriage return */ + buf[buf.length-1] = 0; /* null terminate */ + + for (i = 0; i < buf.length-2; i++) + { + buf[i] = (byte)user_input.charAt(i); + } + + if ((res = ssl_ctx.write(ssl, buf)) < axtlsj.SSL_OK) + { + if (!quiet) + { + SSLUtil.displayError(res); + } + + break; + } + } + + ssl_ctx.dispose(); + } + + /** + * We've had some sort of command-line error. Print out the basic options. + */ + private void print_options(String option) + { + System.out.println("axssl: Error: '" + option + + "' is an invalid command."); + System.out.println("usage: axtlsj.jar [s_server|s_client|version] " + + "[args ...]"); + System.exit(1); + } + + /** + * We've had some sort of command-line error. Print out the server options. + */ + private void print_server_options(int build_mode, String option) + { + int cert_size = SSLUtil.maxCerts(); + int ca_cert_size = SSLUtil.maxCACerts(); + + System.out.println("unknown option " + option); + System.out.println("usage: s_server [args ...]"); + System.out.println(" -accept arg\t- port to accept on (default " + + "is 4433)"); + System.out.println(" -quiet\t\t- No server output"); + + if (build_mode >= axtlsj.SSL_BUILD_SERVER_ONLY) + { + System.out.println(" -cert arg\t- certificate file to add (in " + + "addition to default) to chain -"); + System.out.println("\t\t Can repeat up to " + cert_size + " times"); + System.out.println(" -key arg\t- Private key file to use"); + System.out.println(" -pass\t\t- private key file pass phrase source"); + } + + if (build_mode >= axtlsj.SSL_BUILD_ENABLE_VERIFICATION) + { + System.out.println(" -verify\t- turn on peer certificate " + + "verification"); + System.out.println(" -CAfile arg\t- Certificate authority. "); + System.out.println("\t\t Can repeat up to " + + ca_cert_size + " times"); + } + + if (build_mode == axtlsj.SSL_BUILD_FULL_MODE) + { + System.out.println(" -debug\t\t- Print more output"); + System.out.println(" -state\t\t- Show state messages"); + System.out.println(" -show-rsa\t- Show RSA state"); + } + + System.exit(1); + } + + /** + * We've had some sort of command-line error. Print out the client options. + */ + private void print_client_options(int build_mode, String option) + { + int cert_size = SSLUtil.maxCerts(); + int ca_cert_size = SSLUtil.maxCACerts(); + + System.out.println("unknown option " + option); + + if (build_mode >= axtlsj.SSL_BUILD_ENABLE_CLIENT) + { + System.out.println("usage: s_client [args ...]"); + System.out.println(" -connect host:port - who to connect to " + + "(default is localhost:4433)"); + System.out.println(" -verify\t- turn on peer certificate " + + "verification"); + System.out.println(" -cert arg\t- certificate file to use"); + System.out.println(" -key arg\t- Private key file to use"); + System.out.println("\t\t Can repeat up to " + cert_size + + " times"); + System.out.println(" -CAfile arg\t- Certificate authority."); + System.out.println("\t\t Can repeat up to " + ca_cert_size + + " times"); + System.out.println(" -quiet\t\t- No client output"); + System.out.println(" -pass\t\t- private key file pass " + + "phrase source"); + System.out.println(" -reconnect\t- Drop and re-make the " + + "connection with the same Session-ID"); + + if (build_mode == axtlsj.SSL_BUILD_FULL_MODE) + { + System.out.println(" -debug\t\t- Print more output"); + System.out.println(" -state\t\t- Show state messages"); + System.out.println(" -show-rsa\t- Show RSA state"); + } + } + else + { + System.out.println("Change configuration to allow this feature"); + } + + System.exit(1); + } + + /** + * Display what cipher we are using + */ + private void display_cipher(SSL ssl) + { + System.out.print("CIPHER is "); + + byte ciph_id = ssl.getCipherId(); + + if (ciph_id == axtlsj.SSL_AES128_SHA) + System.out.println("AES128-SHA"); + else if (ciph_id == axtlsj.SSL_AES256_SHA) + System.out.println("AES256-SHA"); + else if (ciph_id == axtlsj.SSL_RC4_128_SHA) + System.out.println("RC4-SHA"); + else if (ciph_id == axtlsj.SSL_RC4_128_MD5) + System.out.println("RC4-MD5"); + else + System.out.println("Unknown - " + ssl.getCipherId()); + } + + public char toHexChar(int i) + { + if ((0 <= i) && (i <= 9 )) + return (char)('0' + i); + else + return (char)('a' + (i-10)); + } + + public void bytesToHex(byte[] data) + { + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < data.length; i++ ) + { + buf.append(toHexChar((data[i]>>>4)&0x0F)); + buf.append(toHexChar(data[i]&0x0F)); + } + + System.out.println(buf); + } + + + /** + * Display what session id we have. + */ + private void display_session_id(SSL ssl) + { + byte[] session_id = ssl.getSessionId(); + + if (session_id.length > 0) + { + System.out.println("-----BEGIN SSL SESSION PARAMETERS-----"); + bytesToHex(session_id); + System.out.println("-----END SSL SESSION PARAMETERS-----"); + } + } +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/java/manifest.mf b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/java/manifest.mf new file mode 100644 index 0000000..b906ed2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/java/manifest.mf @@ -0,0 +1 @@ +Main-Class: axssl diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/lua/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/lua/Makefile new file mode 100644 index 0000000..a460da3 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/lua/Makefile @@ -0,0 +1,43 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +include ../../config/.config +include ../../config/makefile.conf + +all: samples +TARGET=../../$(STAGE)/axssl.lua +samples: $(TARGET) + +$(TARGET): axssl.lua + install $< $@ + +clean:: + -@rm -f $(TARGET) + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/lua/axssl.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/lua/axssl.lua new file mode 100755 index 0000000..6ea26b6 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/lua/axssl.lua @@ -0,0 +1,562 @@ +#!/usr/local/bin/lua + +-- +-- Copyright (c) 2007, Cameron Rich +-- +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- * Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- * Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- * Neither the name of the axTLS project nor the names of its +-- contributors may be used to endorse or promote products derived +-- from this software without specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +-- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +-- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +-- OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +-- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- + +-- +-- Demonstrate the use of the axTLS library in Lua with a set of +-- command-line parameters similar to openssl. In fact, openssl clients +-- should be able to communicate with axTLS servers and visa-versa. +-- +-- This code has various bits enabled depending on the configuration. To enable +-- the most interesting version, compile with the 'full mode' enabled. +-- +-- To see what options you have, run the following: +-- > [lua] axssl s_server -? +-- > [lua] axssl s_client -? +-- +-- The axtls/axtlsl shared libraries must be in the same directory or be found +-- by the OS. +-- +-- +require "bit" +require("axtlsl") +local socket = require("socket") + +-- print version? +if #arg == 1 and arg[1] == "version" then + print("axssl.lua "..axtlsl.ssl_version()) + os.exit(1) +end + +-- +-- We've had some sort of command-line error. Print out the basic options. +-- +function print_options(option) + print("axssl: Error: '"..option.."' is an invalid command.") + print("usage: axssl [s_server|s_client|version] [args ...]") + os.exit(1) +end + +-- +-- We've had some sort of command-line error. Print out the server options. +-- +function print_server_options(build_mode, option) + local cert_size = axtlsl.ssl_get_config(axtlsl.SSL_MAX_CERT_CFG_OFFSET) + local ca_cert_size = axtlsl.ssl_get_config( + axtlsl.SSL_MAX_CA_CERT_CFG_OFFSET) + + print("unknown option "..option) + print("usage: s_server [args ...]") + print(" -accept\t- port to accept on (default is 4433)") + print(" -quiet\t\t- No server output") + + if build_mode >= axtlsl.SSL_BUILD_SERVER_ONLY then + print(" -cert arg\t- certificate file to add (in addition to ".. + "default) to chain -") + print("\t\t Can repeat up to "..cert_size.." times") + print(" -key arg\t- Private key file to use - default DER format") + print(" -pass\t\t- private key file pass phrase source") + end + + if build_mode >= axtlsl.SSL_BUILD_ENABLE_VERIFICATION then + print(" -verify\t- turn on peer certificate verification") + print(" -CAfile arg\t- Certificate authority - default DER format") + print("\t\t Can repeat up to "..ca_cert_size.." times") + end + + if build_mode == axtlsl.SSL_BUILD_FULL_MODE then + print(" -debug\t\t- Print more output") + print(" -state\t\t- Show state messages") + print(" -show-rsa\t- Show RSA state") + end + + os.exit(1) +end + +-- +-- We've had some sort of command-line error. Print out the client options. +-- +function print_client_options(build_mode, option) + local cert_size = axtlsl.ssl_get_config(axtlsl.SSL_MAX_CERT_CFG_OFFSET) + local ca_cert_size = axtlsl.ssl_get_config( + axtlsl.SSL_MAX_CA_CERT_CFG_OFFSET) + + print("unknown option "..option) + + if build_mode >= axtlsl.SSL_BUILD_ENABLE_CLIENT then + print("usage: s_client [args ...]") + print(" -connect host:port - who to connect to (default ".. + "is localhost:4433)") + print(" -verify\t- turn on peer certificate verification") + print(" -cert arg\t- certificate file to use - default DER format") + print(" -key arg\t- Private key file to use - default DER format") + print("\t\t Can repeat up to "..cert_size.." times") + print(" -CAfile arg\t- Certificate authority - default DER format") + print("\t\t Can repeat up to "..ca_cert_size.."times") + print(" -quiet\t\t- No client output") + print(" -pass\t\t- private key file pass phrase source") + print(" -reconnect\t- Drop and re-make the connection ".. + "with the same Session-ID") + + if build_mode == axtlsl.SSL_BUILD_FULL_MODE then + print(" -debug\t\t- Print more output") + print(" -state\t\t- Show state messages") + print(" -show-rsa\t- Show RSA state") + end + else + print("Change configuration to allow this feature") + end + + os.exit(1) +end + +-- Implement the SSL server logic. +function do_server(build_mode) + local i = 2 + local v + local port = 4433 + local options = axtlsl.SSL_DISPLAY_CERTS + local quiet = false + local password = "" + local private_key_file = nil + local cert_size = axtlsl.ssl_get_config(axtlsl.SSL_MAX_CERT_CFG_OFFSET) + local ca_cert_size = axtlsl. + ssl_get_config(axtlsl.SSL_MAX_CA_CERT_CFG_OFFSET) + local cert = {} + local ca_cert = {} + + while i <= #arg do + if arg[i] == "-accept" then + if i >= #arg then + print_server_options(build_mode, arg[i]) + end + + i = i + 1 + port = arg[i] + elseif arg[i] == "-quiet" then + quiet = true + options = bit.band(options, bit.bnot(axtlsl.SSL_DISPLAY_CERTS)) + elseif build_mode >= axtlsl.SSL_BUILD_SERVER_ONLY then + if arg[i] == "-cert" then + if i >= #arg or #cert >= cert_size then + print_server_options(build_mode, arg[i]) + end + + i = i + 1 + table.insert(cert, arg[i]) + elseif arg[i] == "-key" then + if i >= #arg then + print_server_options(build_mode, arg[i]) + end + + i = i + 1 + private_key_file = arg[i] + options = bit.bor(options, axtlsl.SSL_NO_DEFAULT_KEY) + elseif arg[i] == "-pass" then + if i >= #arg then + print_server_options(build_mode, arg[i]) + end + + i = i + 1 + password = arg[i] + elseif build_mode >= axtlsl.SSL_BUILD_ENABLE_VERIFICATION then + if arg[i] == "-verify" then + options = bit.bor(options, axtlsl.SSL_CLIENT_AUTHENTICATION) + elseif arg[i] == "-CAfile" then + if i >= #arg or #ca_cert >= ca_cert_size then + print_server_options(build_mode, arg[i]) + end + + i = i + 1 + table.insert(ca_cert, arg[i]) + elseif build_mode == axtlsl.SSL_BUILD_FULL_MODE then + if arg[i] == "-debug" then + options = bit.bor(options, axtlsl.SSL_DISPLAY_BYTES) + elseif arg[i] == "-state" then + options = bit.bor(options, axtlsl.SSL_DISPLAY_STATES) + elseif arg[i] == "-show-rsa" then + options = bit.bor(options, axtlsl.SSL_DISPLAY_RSA) + else + print_server_options(build_mode, arg[i]) + end + else + print_server_options(build_mode, arg[i]) + end + else + print_server_options(build_mode, arg[i]) + end + else + print_server_options(build_mode, arg[i]) + end + + i = i + 1 + end + + -- Create socket for incoming connections + local server_sock = socket.try(socket.bind("*", port)) + + --------------------------------------------------------------------------- + -- This is where the interesting stuff happens. Up until now we've + -- just been setting up sockets etc. Now we do the SSL handshake. + --------------------------------------------------------------------------- + local ssl_ctx = axtlsl.ssl_ctx_new(options, axtlsl.SSL_DEFAULT_SVR_SESS) + if ssl_ctx == nil then error("Error: Server context is invalid") end + + if private_key_file ~= nil then + local obj_type = axtlsl.SSL_OBJ_RSA_KEY + + if string.find(private_key_file, ".p8") then + obj_type = axtlsl.SSL_OBJ_PKCS8 + end + + if string.find(private_key_file, ".p12") then + obj_type = axtlsl.SSL_OBJ_PKCS12 + end + + if axtlsl.ssl_obj_load(ssl_ctx, obj_type, private_key_file, + password) ~= axtlsl.SSL_OK then + error("Private key '" .. private_key_file .. "' is undefined.") + end + end + + for _, v in ipairs(cert) do + if axtlsl.ssl_obj_load(ssl_ctx, axtlsl.SSL_OBJ_X509_CERT, v, "") ~= + axtlsl.SSL_OK then + error("Certificate '"..v .. "' is undefined.") + end + end + + for _, v in ipairs(ca_cert) do + if axtlsl.ssl_obj_load(ssl_ctx, axtlsl.SSL_OBJ_X509_CACERT, v, "") ~= + axtlsl.SSL_OK then + error("Certificate '"..v .."' is undefined.") + end + end + + while true do + if not quiet then print("ACCEPT") end + local client_sock = server_sock:accept(); + local ssl = axtlsl.ssl_server_new(ssl_ctx, client_sock:getfd()) + + -- do the actual SSL handshake + local connected = false + local res + local buf + + while true do + socket.select({client_sock}, nil) + res, buf = axtlsl.ssl_read(ssl) + + if res == axtlsl.SSL_OK then -- connection established and ok + if axtlsl.ssl_handshake_status(ssl) == axtlsl.SSL_OK then + if not quiet and not connected then + display_session_id(ssl) + display_cipher(ssl) + end + connected = true + end + end + + if res > axtlsl.SSL_OK then + for _, v in ipairs(buf) do + io.write(string.format("%c", v)) + end + elseif res < axtlsl.SSL_OK then + if not quiet then + axtlsl.ssl_display_error(res) + end + break + end + end + + -- client was disconnected or the handshake failed. + print("CONNECTION CLOSED") + axtlsl.ssl_free(ssl) + client_sock:close() + end + + axtlsl.ssl_ctx_free(ssl_ctx) +end + +-- +-- Implement the SSL client logic. +-- +function do_client(build_mode) + local i = 2 + local v + local port = 4433 + local options = + bit.bor(axtlsl.SSL_SERVER_VERIFY_LATER, axtlsl.SSL_DISPLAY_CERTS) + local private_key_file = nil + local reconnect = 0 + local quiet = false + local password = "" + local session_id = {} + local host = "127.0.0.1" + local cert_size = axtlsl.ssl_get_config(axtlsl.SSL_MAX_CERT_CFG_OFFSET) + local ca_cert_size = axtlsl. + ssl_get_config(axtlsl.SSL_MAX_CA_CERT_CFG_OFFSET) + local cert = {} + local ca_cert = {} + + while i <= #arg do + if arg[i] == "-connect" then + if i >= #arg then + print_client_options(build_mode, arg[i]) + end + + i = i + 1 + local t = string.find(arg[i], ":") + host = string.sub(arg[i], 1, t-1) + port = string.sub(arg[i], t+1) + elseif arg[i] == "-cert" then + if i >= #arg or #cert >= cert_size then + print_client_options(build_mode, arg[i]) + end + + i = i + 1 + table.insert(cert, arg[i]) + elseif arg[i] == "-key" then + if i >= #arg then + print_client_options(build_mode, arg[i]) + end + + i = i + 1 + private_key_file = arg[i] + options = bit.bor(options, axtlsl.SSL_NO_DEFAULT_KEY) + elseif arg[i] == "-CAfile" then + if i >= #arg or #ca_cert >= ca_cert_size then + print_client_options(build_mode, arg[i]) + end + + i = i + 1 + table.insert(ca_cert, arg[i]) + elseif arg[i] == "-verify" then + options = bit.band(options, + bit.bnot(axtlsl.SSL_SERVER_VERIFY_LATER)) + elseif arg[i] == "-reconnect" then + reconnect = 4 + elseif arg[i] == "-quiet" then + quiet = true + options = bit.band(options, bnot(axtlsl.SSL_DISPLAY_CERTS)) + elseif arg[i] == "-pass" then + if i >= #arg then + print_server_options(build_mode, arg[i]) + end + + i = i + 1 + password = arg[i] + elseif build_mode == axtlsl.SSL_BUILD_FULL_MODE then + if arg[i] == "-debug" then + options = bit.bor(options, axtlsl.SSL_DISPLAY_BYTES) + elseif arg[i] == "-state" then + options = bit.bor(axtlsl.SSL_DISPLAY_STATES) + elseif arg[i] == "-show-rsa" then + options = bit.bor(axtlsl.SSL_DISPLAY_RSA) + else -- don't know what this is + print_client_options(build_mode, arg[i]) + end + else -- don't know what this is + print_client_options(build_mode, arg[i]) + end + + i = i + 1 + end + + local client_sock = socket.try(socket.connect(host, port)) + local ssl + local res + + if not quiet then print("CONNECTED") end + + --------------------------------------------------------------------------- + -- This is where the interesting stuff happens. Up until now we've + -- just been setting up sockets etc. Now we do the SSL handshake. + --------------------------------------------------------------------------- + local ssl_ctx = axtlsl.ssl_ctx_new(options, axtlsl.SSL_DEFAULT_CLNT_SESS) + + if ssl_ctx == nil then + error("Error: Client context is invalid") + end + + if private_key_file ~= nil then + local obj_type = axtlsl.SSL_OBJ_RSA_KEY + + if string.find(private_key_file, ".p8") then + obj_type = axtlsl.SSL_OBJ_PKCS8 + end + + if string.find(private_key_file, ".p12") then + obj_type = axtlsl.SSL_OBJ_PKCS12 + end + + if axtlsl.ssl_obj_load(ssl_ctx, obj_type, private_key_file, + password) ~= axtlsl.SSL_OK then + error("Private key '"..private_key_file.."' is undefined.") + end + end + + for _, v in ipairs(cert) do + if axtlsl.ssl_obj_load(ssl_ctx, axtlsl.SSL_OBJ_X509_CERT, v, "") ~= + axtlsl.SSL_OK then + error("Certificate '"..v .. "' is undefined.") + end + end + + for _, v in ipairs(ca_cert) do + if axtlsl.ssl_obj_load(ssl_ctx, axtlsl.SSL_OBJ_X509_CACERT, v, "") ~= + axtlsl.SSL_OK then + error("Certificate '"..v .."' is undefined.") + end + end + + -- Try session resumption? + if reconnect ~= 0 then + local session_id = nil + local sess_id_size = 0 + + while reconnect > 0 do + reconnect = reconnect - 1 + ssl = axtlsl.ssl_client_new(ssl_ctx, + client_sock:getfd(), session_id, sess_id_size) + + res = axtlsl.ssl_handshake_status(ssl) + if res ~= axtlsl.SSL_OK then + if not quiet then axtlsl.ssl_display_error(res) end + axtlsl.ssl_free(ssl) + os.exit(1) + end + + display_session_id(ssl) + session_id = axtlsl.ssl_get_session_id(ssl) + sess_id_size = axtlsl.ssl_get_session_id_size(ssl) + + if reconnect > 0 then + axtlsl.ssl_free(ssl) + client_sock:close() + client_sock = socket.try(socket.connect(host, port)) + end + + end + else + ssl = axtlsl.ssl_client_new(ssl_ctx, client_sock:getfd(), nil, 0) + end + + -- check the return status + res = axtlsl.ssl_handshake_status(ssl) + if res ~= axtlsl.SSL_OK then + if not quiet then axtlsl.ssl_display_error(res) end + os.exit(1) + end + + if not quiet then + local common_name = axtlsl.ssl_get_cert_dn(ssl, + axtlsl.SSL_X509_CERT_COMMON_NAME) + + if common_name ~= nil then + print("Common Name:\t\t\t"..common_name) + end + + display_session_id(ssl) + display_cipher(ssl) + end + + while true do + local line = io.read() + if line == nil then break end + local bytes = {} + + for i = 1, #line do + bytes[i] = line.byte(line, i) + end + + bytes[#line+1] = 10 -- add carriage return, null + bytes[#line+2] = 0 + + res = axtlsl.ssl_write(ssl, bytes, #bytes) + if res < axtlsl.SSL_OK then + if not quiet then axtlsl.ssl_display_error(res) end + break + end + end + + axtlsl.ssl_ctx_free(ssl_ctx) + client_sock:close() +end + +-- +-- Display what cipher we are using +-- +function display_cipher(ssl) + io.write("CIPHER is ") + local cipher_id = axtlsl.ssl_get_cipher_id(ssl) + + if cipher_id == axtlsl.SSL_AES128_SHA then + print("AES128-SHA") + elseif cipher_id == axtlsl.SSL_AES256_SHA then + print("AES256-SHA") + elseif axtlsl.SSL_RC4_128_SHA then + print("RC4-SHA") + elseif axtlsl.SSL_RC4_128_MD5 then + print("RC4-MD5") + else + print("Unknown - "..cipher_id) + end +end + +-- +-- Display what session id we have. +-- +function display_session_id(ssl) + local session_id = axtlsl.ssl_get_session_id(ssl) + local v + + if #session_id > 0 then + print("-----BEGIN SSL SESSION PARAMETERS-----") + for _, v in ipairs(session_id) do + io.write(string.format("%02x", v)) + end + print("\n-----END SSL SESSION PARAMETERS-----") + end +end + +-- +-- Main entry point. Doesn't do much except works out whether we are a client +-- or a server. +-- +if #arg == 0 or (arg[1] ~= "s_server" and arg[1] ~= "s_client") then + print_options(#arg > 0 and arg[1] or "") +end + +local build_mode = axtlsl.ssl_get_config(axtlsl.SSL_BUILD_MODE) +_ = arg[1] == "s_server" and do_server(build_mode) or do_client(build_mode) +os.exit(0) + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/perl/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/perl/Makefile new file mode 100644 index 0000000..5200c43 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/perl/Makefile @@ -0,0 +1,43 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +include ../../config/.config +include ../../config/makefile.conf + +all: samples +TARGET=../../$(STAGE)/axssl.pl +samples: $(TARGET) + +$(TARGET): axssl.pl + install $< $@ + +clean:: + -@rm -f $(TARGET) + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/perl/axssl.pl b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/perl/axssl.pl new file mode 100755 index 0000000..e49d522 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/perl/axssl.pl @@ -0,0 +1,634 @@ +#!/usr/bin/perl -w +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# +# Demonstrate the use of the axTLS library in Perl with a set of +# command-line parameters similar to openssl. In fact, openssl clients +# should be able to communicate with axTLS servers and visa-versa. +# +# This code has various bits enabled depending on the configuration. To enable +# the most interesting version, compile with the 'full mode' enabled. +# +# To see what options you have, run the following: +# > [perl] axssl s_server -? +# > [perl] axssl s_client -? +# +# The axtls/axtlsp shared libraries must be in the same directory or be found +# by the OS. axtlsp.pm must be in this directory or be in @INC. +# +# Under Win32, ActivePerl was used (see +# http://www.activestate.com/Products/ActivePerl/?mp=1) +# +use axtlsp; +use IO::Socket; + +# To get access to Win32 file descriptor stuff +my $is_win32 = 0; + +if ($^O eq "MSWin32") +{ + eval("use Win32API::File 0.08 qw( :ALL )"); + $is_win32 = 1; +} + +use strict; + +# +# Win32 has some problems with socket handles +# +sub get_native_sock +{ + my ($sock) = @_; + return $is_win32 ? FdGetOsFHandle($sock) : $sock; +} + +# print version? +if ($#ARGV == 0 && $ARGV[0] eq "version") +{ + printf("axssl.pl ".axtlsp::ssl_version()."\n"); + exit 0; +} + +# +# Main entry point. Doesn't do much except works out whether we are a client +# or a server. +# +print_options($#ARGV > -1 ? $ARGV[0] : "") + if ($#ARGV < 0 || ($ARGV[0] ne "s_server" && $ARGV[0] ne "s_client")); + + +# Cygwin/Win32 issue - flush our output continuously +select STDOUT; +local $|=1; + +my $build_mode = axtlsp::ssl_get_config($axtlsp::SSL_BUILD_MODE); +$ARGV[0] eq "s_server" ? do_server($build_mode) : do_client($build_mode); + +# +# Implement the SSL server logic. +# +sub do_server +{ + my ($build_mode) = @_; + my $i = 1; + my $port = 4433; + my $options = $axtlsp::SSL_DISPLAY_CERTS; + my $quiet = 0; + my $password = undef; + my $private_key_file = undef; + my $cert_size = axtlsp::ssl_get_config($axtlsp::SSL_MAX_CERT_CFG_OFFSET); + my $ca_cert_size = axtlsp::ssl_get_config( + $axtlsp::SSL_MAX_CA_CERT_CFG_OFFSET); + my @cert; + my @ca_cert; + + while ($i <= $#ARGV) + { + if ($ARGV[$i] eq "-accept") + { + print_server_options($build_mode, $ARGV[$i]) if $i >= $#ARGV; + $port = $ARGV[++$i]; + } + elsif ($ARGV[$i] eq "-quiet") + { + $quiet = 1; + $options &= ~$axtlsp::SSL_DISPLAY_CERTS; + } + elsif ($build_mode >= $axtlsp::SSL_BUILD_SERVER_ONLY) + { + if ($ARGV[$i] eq "-cert") + { + print_server_options($build_mode, $ARGV[$i]) + if $i >= $#ARGV || $#cert >= $cert_size-1; + + push @cert, $ARGV[++$i]; + } + elsif ($ARGV[$i] eq "-key") + { + print_server_options($build_mode, $ARGV[$i]) if $i >= $#ARGV; + $private_key_file = $ARGV[++$i]; + $options |= $axtlsp::SSL_NO_DEFAULT_KEY; + } + elsif ($ARGV[$i] eq "-pass") + { + print_server_options($build_mode, $ARGV[$i]) if $i >= $#ARGV; + $password = $ARGV[++$i]; + } + elsif ($build_mode >= $axtlsp::SSL_BUILD_ENABLE_VERIFICATION) + { + if ($ARGV[$i] eq "-verify") + { + $options |= $axtlsp::SSL_CLIENT_AUTHENTICATION; + } + elsif ($ARGV[$i] eq "-CAfile") + { + print_server_options($build_mode, $ARGV[$i]) + if $i >= $#ARGV || $#ca_cert >= $ca_cert_size-1; + push @ca_cert, $ARGV[++$i]; + } + elsif ($build_mode == $axtlsp::SSL_BUILD_FULL_MODE) + { + if ($ARGV[$i] eq "-debug") + { + $options |= $axtlsp::SSL_DISPLAY_BYTES; + } + elsif ($ARGV[$i] eq "-state") + { + $options |= $axtlsp::SSL_DISPLAY_STATES; + } + elsif ($ARGV[$i] eq "-show-rsa") + { + $options |= $axtlsp::SSL_DISPLAY_RSA; + } + else + { + print_server_options($build_mode, $ARGV[$i]); + } + } + else + { + print_server_options($build_mode, $ARGV[$i]); + } + } + else + { + print_server_options($build_mode, $ARGV[$i]); + } + } + else + { + print_server_options($build_mode, $ARGV[$i]); + } + + $i++; + } + + # Create socket for incoming connections + my $server_sock = IO::Socket::INET->new(Proto => 'tcp', + LocalPort => $port, + Listen => 1, + Reuse => 1) or die $!; + + ########################################################################### + # This is where the interesting stuff happens. Up until now we've + # just been setting up sockets etc. Now we do the SSL handshake. + ########################################################################### + my $ssl_ctx = axtlsp::ssl_ctx_new($options, $axtlsp::SSL_DEFAULT_SVR_SESS); + die "Error: Server context is invalid" if not defined $ssl_ctx; + + if (defined $private_key_file) + { + my $obj_type = $axtlsp::SSL_OBJ_RSA_KEY; + + $obj_type = $axtlsp::SSL_OBJ_PKCS8 if $private_key_file =~ /.p8$/; + $obj_type = $axtlsp::SSL_OBJ_PKCS12 if $private_key_file =~ /.p12$/; + + die "Private key '$private_key_file' is undefined." if + axtlsp::ssl_obj_load($ssl_ctx, $obj_type, + $private_key_file, $password); + } + + foreach (@cert) + { + die "Certificate '$_' is undefined." + if axtlsp::ssl_obj_load($ssl_ctx, $axtlsp::SSL_OBJ_X509_CERT, + $_, undef) != $axtlsp::SSL_OK; + } + + foreach (@ca_cert) + { + die "Certificate '$_' is undefined." + if axtlsp::ssl_obj_load($ssl_ctx, $axtlsp::SSL_OBJ_X509_CACERT, + $_, undef) != $axtlsp::SSL_OK; + } + + for (;;) + { + printf("ACCEPT\n") if not $quiet; + my $client_sock = $server_sock->accept; + my $native_sock = get_native_sock($client_sock->fileno); + + # This doesn't work in Win32 - need to get file descriptor from socket. + my $ssl = axtlsp::ssl_server_new($ssl_ctx, $native_sock); + + # do the actual SSL handshake + my $res; + my $buf; + my $connected = 0; + + while (1) + { + ($res, $buf) = axtlsp::ssl_read($ssl, undef); + last if $res < $axtlsp::SSL_OK; + + if ($res == $axtlsp::SSL_OK) # connection established and ok + { + if (axtlsp::ssl_handshake_status($ssl) == $axtlsp::SSL_OK) + { + if (!$quiet && !$connected) + { + display_session_id($ssl); + display_cipher($ssl); + } + + $connected = 1; + } + } + + if ($res > $axtlsp::SSL_OK) + { + printf($$buf); + } + elsif ($res < $axtlsp::SSL_OK) + { + axtlsp::ssl_display_error($res) if not $quiet; + last; + } + } + + # client was disconnected or the handshake failed. + printf("CONNECTION CLOSED\n") if not $quiet; + axtlsp::ssl_free($ssl); + $client_sock->close; + } + + axtlsp::ssl_ctx_free($ssl_ctx); +} + +# +# Implement the SSL client logic. +# +sub do_client +{ + my ($build_mode) = @_; + my $i = 1; + my $port = 4433; + my $options = $axtlsp::SSL_SERVER_VERIFY_LATER|$axtlsp::SSL_DISPLAY_CERTS; + my $private_key_file = undef; + my $reconnect = 0; + my $quiet = 0; + my $password = undef; + my @session_id; + my $host = "127.0.0.1"; + my @cert; + my @ca_cert; + my $cert_size = axtlsp::ssl_get_config( + $axtlsp::SSL_MAX_CERT_CFG_OFFSET); + my $ca_cert_size = axtlsp::ssl_get_config( + $axtlsp::SSL_MAX_CA_CERT_CFG_OFFSET); + + while ($i <= $#ARGV) + { + if ($ARGV[$i] eq "-connect") + { + print_client_options($build_mode, $ARGV[$i]) if $i >= $#ARGV; + ($host, $port) = split(':', $ARGV[++$i]); + } + elsif ($ARGV[$i] eq "-cert") + { + print_client_options($build_mode, $ARGV[$i]) + if $i >= $#ARGV || $#cert >= $cert_size-1; + + push @cert, $ARGV[++$i]; + } + elsif ($ARGV[$i] eq "-key") + { + print_client_options($build_mode, $ARGV[$i]) if $i >= $#ARGV; + $private_key_file = $ARGV[++$i]; + $options |= $axtlsp::SSL_NO_DEFAULT_KEY; + } + elsif ($ARGV[$i] eq "-CAfile") + { + print_client_options($build_mode, $ARGV[$i]) + if $i >= $#ARGV || $#ca_cert >= $ca_cert_size-1; + + push @ca_cert, $ARGV[++$i]; + } + elsif ($ARGV[$i] eq "-verify") + { + $options &= ~$axtlsp::SSL_SERVER_VERIFY_LATER; + } + elsif ($ARGV[$i] eq "-reconnect") + { + $reconnect = 4; + } + elsif ($ARGV[$i] eq "-quiet") + { + $quiet = 1; + $options &= ~$axtlsp::SSL_DISPLAY_CERTS; + } + elsif ($ARGV[$i] eq "-pass") + { + print_server_options($build_mode, $ARGV[$i]) if $i >= $#ARGV; + $password = $ARGV[++$i]; + } + elsif ($build_mode == $axtlsp::SSL_BUILD_FULL_MODE) + { + if ($ARGV[$i] eq "-debug") + { + $options |= $axtlsp::SSL_DISPLAY_BYTES; + } + elsif ($ARGV[$i] eq "-state") + { + $options |= $axtlsp::SSL_DISPLAY_STATES; + } + elsif ($ARGV[$i] eq "-show-rsa") + { + $options |= $axtlsp::SSL_DISPLAY_RSA; + } + else # don't know what this is + { + print_client_options($build_mode, $ARGV[$i]); + } + } + else # don't know what this is + { + print_client_options($build_mode, $ARGV[$i]); + } + + $i++; + } + + my $client_sock = new IO::Socket::INET ( + PeerAddr => $host, PeerPort => $port, Proto => 'tcp') + || die ("no socket: $!"); + my $ssl; + my $res; + my $native_sock = get_native_sock($client_sock->fileno); + + printf("CONNECTED\n") if not $quiet; + + ########################################################################### + # This is where the interesting stuff happens. Up until now we've + # just been setting up sockets etc. Now we do the SSL handshake. + ########################################################################### + my $ssl_ctx = axtlsp::ssl_ctx_new($options, $axtlsp::SSL_DEFAULT_CLNT_SESS); + die "Error: Client context is invalid" if not defined $ssl_ctx; + + if (defined $private_key_file) + { + my $obj_type = $axtlsp::SSL_OBJ_RSA_KEY; + + $obj_type = $axtlsp::SSL_OBJ_PKCS8 if $private_key_file =~ /.p8$/; + $obj_type = $axtlsp::SSL_OBJ_PKCS12 if $private_key_file =~ /.p12$/; + + die "Private key '$private_key_file' is undefined." if + axtlsp::ssl_obj_load($ssl_ctx, $obj_type, + $private_key_file, $password); + } + + foreach (@cert) + { + die "Certificate '$_' is undefined." + if axtlsp::ssl_obj_load($ssl_ctx, $axtlsp::SSL_OBJ_X509_CERT, + $_, undef) != $axtlsp::SSL_OK; + } + + foreach (@ca_cert) + { + die "Certificate '$_' is undefined." + if axtlsp::ssl_obj_load($ssl_ctx, $axtlsp::SSL_OBJ_X509_CACERT, + $_, undef) != $axtlsp::SSL_OK; + } + + # Try session resumption? + if ($reconnect) + { + my $session_id = undef; + my $sess_id_size = 0; + + while ($reconnect--) + { + $ssl = axtlsp::ssl_client_new($ssl_ctx, $native_sock, + $session_id, $sess_id_size); + + $res = axtlsp::ssl_handshake_status($ssl); + if ($res != $axtlsp::SSL_OK) + { + axtlsp::ssl_display_error($res) if !$quiet; + axtlsp::ssl_free($ssl); + exit 1; + } + + display_session_id($ssl); + $session_id = axtlsp::ssl_get_session_id($ssl); + + if ($reconnect) + { + axtlsp::ssl_free($ssl); + $client_sock->close; + $client_sock = new IO::Socket::INET ( + PeerAddr => $host, PeerPort => $port, Proto => 'tcp') + || die ("no socket: $!"); + + } + } + } + else + { + $ssl = axtlsp::ssl_client_new($ssl_ctx, $native_sock, undef, 0); + } + + # check the return status + $res = axtlsp::ssl_handshake_status($ssl); + if ($res != $axtlsp::SSL_OK) + { + axtlsp::ssl_display_error($res) if not $quiet; + exit 1; + } + + if (!$quiet) + { + my $common_name = axtlsp::ssl_get_cert_dn($ssl, + $axtlsp::SSL_X509_CERT_COMMON_NAME); + + printf("Common Name:\t\t\t%s\n", $common_name) if defined $common_name; + display_session_id($ssl); + display_cipher($ssl); + } + + while () + { + my $cstring = pack("a*x", $_); # add null terminator + $res = axtlsp::ssl_write($ssl, \$cstring, length($cstring)); + if ($res < $axtlsp::SSL_OK) + { + axtlsp::ssl_display_error($res) if not $quiet; + last; + } + } + + axtlsp::ssl_ctx_free($ssl_ctx); + $client_sock->close; +} + +# +# We've had some sort of command-line error. Print out the basic options. +# +sub print_options +{ + my ($option) = @_; + printf("axssl: Error: '%s' is an invalid command.\n", $option); + printf("usage: axssl [s_server|s_client|version] [args ...]\n"); + exit 1; +} + +# +# We've had some sort of command-line error. Print out the server options. +# +sub print_server_options +{ + my ($build_mode, $option) = @_; + my $cert_size = axtlsp::ssl_get_config($axtlsp::SSL_MAX_CERT_CFG_OFFSET); + my $ca_cert_size = axtlsp::ssl_get_config( + $axtlsp::SSL_MAX_CA_CERT_CFG_OFFSET); + + printf("unknown option %s\n", $option); + printf("usage: s_server [args ...]\n"); + printf(" -accept arg\t- port to accept on (default is 4433)\n"); + printf(" -quiet\t\t- No server output\n"); + + if ($build_mode >= $axtlsp::SSL_BUILD_SERVER_ONLY) + { + printf(" -cert arg\t- certificate file to add (in addition to default)". + " to chain -\n". + "\t\t Can repeat up to %d times\n", $cert_size); + printf(" -key arg\t- Private key file to use - default DER format\n"); + printf(" -pass\t\t- private key file pass phrase source\n"); + } + + if ($build_mode >= $axtlsp::SSL_BUILD_ENABLE_VERIFICATION) + { + printf(" -verify\t- turn on peer certificate verification\n"); + printf(" -CAfile arg\t- Certificate authority - default DER format\n"); + printf("\t\t Can repeat up to %d times\n", $ca_cert_size); + } + + if ($build_mode == $axtlsp::SSL_BUILD_FULL_MODE) + { + printf(" -debug\t\t- Print more output\n"); + printf(" -state\t\t- Show state messages\n"); + printf(" -show-rsa\t- Show RSA state\n"); + } + + exit 1; +} + +# +# We've had some sort of command-line error. Print out the client options. +# +sub print_client_options +{ + my ($build_mode, $option) = @_; + my $cert_size = axtlsp::ssl_get_config($axtlsp::SSL_MAX_CERT_CFG_OFFSET); + my $ca_cert_size = axtlsp::ssl_get_config( + $axtlsp::SSL_MAX_CA_CERT_CFG_OFFSET); + + printf("unknown option %s\n", $option); + + if ($build_mode >= $axtlsp::SSL_BUILD_ENABLE_CLIENT) + { + printf("usage: s_client [args ...]\n"); + printf(" -connect host:port - who to connect to (default ". + "is localhost:4433)\n"); + printf(" -verify\t- turn on peer certificate verification\n"); + printf(" -cert arg\t- certificate file to use - default DER format\n"); + printf(" -key arg\t- Private key file to use - default DER format\n"); + printf("\t\t Can repeat up to %d times\n", $cert_size); + printf(" -CAfile arg\t- Certificate authority - default DER format\n"); + printf("\t\t Can repeat up to %d times\n", $ca_cert_size); + printf(" -quiet\t\t- No client output\n"); + printf(" -pass\t\t- private key file pass phrase source\n"); + printf(" -reconnect\t- Drop and re-make the connection ". + "with the same Session-ID\n"); + + if ($build_mode == $axtlsp::SSL_BUILD_FULL_MODE) + { + printf(" -debug\t\t- Print more output\n"); + printf(" -state\t\t- Show state messages\n"); + printf(" -show-rsa\t- Show RSA state\n"); + } + } + else + { + printf("Change configuration to allow this feature\n"); + } + + exit 1; +} + +# +# Display what cipher we are using +# +sub display_cipher +{ + my ($ssl) = @_; + printf("CIPHER is "); + my $cipher_id = axtlsp::ssl_get_cipher_id($ssl); + + if ($cipher_id == $axtlsp::SSL_AES128_SHA) + { + printf("AES128-SHA"); + } + elsif ($cipher_id == $axtlsp::SSL_AES256_SHA) + { + printf("AES256-SHA"); + } + elsif ($axtlsp::SSL_RC4_128_SHA) + { + printf("RC4-SHA"); + } + elsif ($axtlsp::SSL_RC4_128_MD5) + { + printf("RC4-MD5"); + } + else + { + printf("Unknown - %d", $cipher_id); + } + + printf("\n"); +} + +# +# Display what session id we have. +# +sub display_session_id +{ + my ($ssl) = @_; + my $session_id = axtlsp::ssl_get_session_id($ssl); + if (length($$session_id) > 0) + { + printf("-----BEGIN SSL SESSION PARAMETERS-----\n"); + printf(unpack("H*", $$session_id)); + printf("\n-----END SSL SESSION PARAMETERS-----\n"); + } +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/vbnet/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/vbnet/Makefile new file mode 100644 index 0000000..0984d4e --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/vbnet/Makefile @@ -0,0 +1,48 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +include ../../config/.config +include ../../config/makefile.conf +include ../../config/makefile.dotnet.conf + +# only build on Win32 platforms +ifdef GO_DOT_NET +all : sample +TARGET=../../$(STAGE)/axssl.vbnet.exe +sample : $(TARGET) + +$(TARGET): ../../bindings/vbnet/axTLSvb.vb ../../bindings/vbnet/axInterface.vb axssl.vb + vbc.exe /r:"`cygpath -w "$(CONFIG_DOT_NET_FRAMEWORK_BASE)/System.dll"`" /nologo /t:exe /out:"`cygpath -w $@`" $(foreach file, $^, "`cygpath -w $(file)`") + +endif # ARCH + +clean:: + -@rm -f $(TARGET) + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/samples/vbnet/axssl.vb b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/vbnet/axssl.vb new file mode 100644 index 0000000..1b423c8 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/samples/vbnet/axssl.vb @@ -0,0 +1,702 @@ +' +' Copyright (c) 2007, Cameron Rich +' +' All rights reserved. +' +' Redistribution and use in source and binary forms, with or without +' modification, are permitted provided that the following conditions are met: +' +' * Redistributions of source code must retain the above copyright notice, +' this list of conditions and the following disclaimer. +' * Redistributions in binary form must reproduce the above copyright +' notice, this list of conditions and the following disclaimer in the +' documentation and/or other materials provided with the distribution. +' * Neither the name of the axTLS project nor the names of its +' contributors may be used to endorse or promote products derived +' from this software without specific prior written permission. +' +' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +' "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +' LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +' A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +' CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +' SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +' TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +' DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +' OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +' NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +' THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +' + +' +' Demonstrate the use of the axTLS library in VB.NET with a set of +' command-line parameters similar to openssl. In fact, openssl clients +' should be able to communicate with axTLS servers and visa-versa. +' +' This code has various bits enabled depending on the configuration. To enable +' the most interesting version, compile with the 'full mode' enabled. +' +' To see what options you have, run the following: +' > axssl.vbnet.exe s_server -? +' > axssl.vbnet.exe s_client -? +' +' The axtls shared library must be in the same directory or be found +' by the OS. +' + +Imports System +Imports System.Net +Imports System.Net.Sockets +Imports Microsoft.VisualBasic +Imports axTLSvb + +Public Class axssl + ' + ' do_server() + ' + Public Sub do_server(ByVal build_mode As Integer, _ + ByVal args() As String) + Dim i As Integer = 1 + Dim port As Integer = 4433 + Dim options As Integer = axtls.SSL_DISPLAY_CERTS + Dim quiet As Boolean = False + Dim password As String = Nothing + Dim private_key_file As String = Nothing + + ' organise the cert/ca_cert lists + Dim cert_size As Integer = SSLUtil.MaxCerts() + Dim ca_cert_size As Integer = SSLUtil.MaxCACerts() + Dim cert(cert_size) As String + Dim ca_cert(ca_cert_size) As String + Dim cert_index As Integer = 0 + Dim ca_cert_index As Integer = 0 + + While i < args.Length + If args(i) = "-accept" Then + If i >= args.Length-1 + print_server_options(build_mode, args(i)) + End If + + i += 1 + port = Int32.Parse(args(i)) + ElseIf args(i) = "-quiet" + quiet = True + options = options And Not axtls.SSL_DISPLAY_CERTS + ElseIf build_mode >= axtls.SSL_BUILD_SERVER_ONLY + If args(i) = "-cert" + If i >= args.Length-1 Or cert_index >= cert_size + print_server_options(build_mode, args(i)) + End If + + i += 1 + cert(cert_index) = args(i) + cert_index += 1 + ElseIf args(i) = "-key" + If i >= args.Length-1 + print_server_options(build_mode, args(i)) + End If + + i += 1 + private_key_file = args(i) + options = options Or axtls.SSL_NO_DEFAULT_KEY + ElseIf args(i) = "-pass" + If i >= args.Length-1 + print_server_options(build_mode, args(i)) + End If + + i += 1 + password = args(i) + ElseIf build_mode >= axtls.SSL_BUILD_ENABLE_VERIFICATION + If args(i) = "-verify" Then + options = options Or axtls.SSL_CLIENT_AUTHENTICATION + ElseIf args(i) = "-CAfile" + If i >= args.Length-1 Or _ + ca_cert_index >= ca_cert_size Then + print_server_options(build_mode, args(i)) + End If + + i += 1 + ca_cert(ca_cert_index) = args(i) + ca_cert_index += 1 + ElseIf build_mode = axtls.SSL_BUILD_FULL_MODE + If args(i) = "-debug" Then + options = options Or axtls.SSL_DISPLAY_BYTES + ElseIf args(i) = "-state" + options = options Or axtls.SSL_DISPLAY_STATES + ElseIf args(i) = "-show-rsa" + options = options Or axtls.SSL_DISPLAY_RSA + Else + print_server_options(build_mode, args(i)) + End If + Else + print_server_options(build_mode, args(i)) + End If + Else + print_server_options(build_mode, args(i)) + End If + End If + + i += 1 + End While + + ' Create socket for incoming connections + Dim ep As IPEndPoint = New IPEndPoint(IPAddress.Any, port) + Dim server_sock As TcpListener = New TcpListener(ep) + server_sock.Start() + + '********************************************************************* + ' This is where the interesting stuff happens. Up until now we've + ' just been setting up sockets etc. Now we do the SSL handshake. + '*********************************************************************/ + Dim ssl_ctx As SSLServer = New SSLServer(options, _ + axtls.SSL_DEFAULT_SVR_SESS) + + If ssl_ctx Is Nothing Then + Console.Error.WriteLine("Error: Server context is invalid") + Environment.Exit(1) + End If + + If private_key_file <> Nothing Then + Dim obj_type As Integer = axtls.SSL_OBJ_RSA_KEY + + If private_key_file.EndsWith(".p8") Then + obj_type = axtls.SSL_OBJ_PKCS8 + Else If (private_key_file.EndsWith(".p12")) + obj_type = axtls.SSL_OBJ_PKCS12 + End If + + If ssl_ctx.ObjLoad(obj_type, private_key_file, _ + password) <> axtls.SSL_OK Then + Console.Error.WriteLine("Error: Private key '" & _ + private_key_file & "' is undefined.") + Environment.Exit(1) + End If + End If + + For i = 0 To cert_index-1 + If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CERT, _ + cert(i), Nothing) <> axtls.SSL_OK Then + Console.WriteLine("Certificate '" & cert(i) & _ + "' is undefined.") + Environment.Exit(1) + End If + Next + + For i = 0 To ca_cert_index-1 + If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CACERT, _ + ca_cert(i), Nothing) <> axtls.SSL_OK Then + Console.WriteLine("Certificate '" & ca_cert(i) & _ + "' is undefined.") + Environment.Exit(1) + End If + Next + + Dim buf As Byte() = Nothing + Dim res As Integer + Dim ssl As SSL + + While 1 + If Not quiet Then + Console.WriteLine("ACCEPT") + End If + + Dim client_sock As Socket = server_sock.AcceptSocket() + + ssl = ssl_ctx.Connect(client_sock) + + ' do the actual SSL handshake + While 1 + res = ssl_ctx.Read(ssl, buf) + If res <> axtls.SSL_OK Then + Exit While + End If + + ' check when the connection has been established + If ssl.HandshakeStatus() = axtls.SSL_OK + Exit While + End If + + ' could do something else here + End While + + If res = axtls.SSL_OK Then ' connection established and ok + If Not quiet + display_session_id(ssl) + display_cipher(ssl) + End If + + ' now read (and display) whatever the client sends us + While 1 + ' keep reading until we get something interesting + While 1 + res = ssl_ctx.Read(ssl, buf) + If res <> axtls.SSL_OK Then + Exit While + End If + + ' could do something else here + End While + + If res < axtls.SSL_OK + If Not quiet + Console.WriteLine("CONNECTION CLOSED") + End If + + Exit While + End If + + ' convert to String + Dim str(res) As Char + For i = 0 To res-1 + str(i) = Chr(buf(i)) + Next + + Console.Write(str) + End While + ElseIf Not quiet + SSLUtil.DisplayError(res) + End If + + ' client was disconnected or the handshake failed. */ + ssl.Dispose() + client_sock.Close() + End While + + ssl_ctx.Dispose() + End Sub + + ' + ' do_client() + ' + Public Sub do_client(ByVal build_mode As Integer, _ + ByVal args() As String) + + If build_mode < axtls.SSL_BUILD_ENABLE_CLIENT Then + print_client_options(build_mode, args(1)) + End If + + Dim i As Integer = 1 + Dim res As Integer + Dim port As Integer = 4433 + Dim quiet As Boolean = False + Dim password As String = Nothing + Dim reconnect As Integer = 0 + Dim private_key_file As String = Nothing + Dim hostname As String = "127.0.0.1" + + ' organise the cert/ca_cert lists + Dim ssl As SSL = Nothing + Dim cert_size As Integer = SSLUtil.MaxCerts() + Dim ca_cert_size As Integer = SSLUtil.MaxCACerts() + Dim cert(cert_size) As String + Dim ca_cert(ca_cert_size) As String + Dim cert_index As Integer = 0 + Dim ca_cert_index As Integer = 0 + + Dim options As Integer = _ + axtls.SSL_SERVER_VERIFY_LATER Or axtls.SSL_DISPLAY_CERTS + Dim session_id As Byte() = Nothing + + While i < args.Length + If args(i) = "-connect" Then + Dim host_port As String + + If i >= args.Length-1 + print_client_options(build_mode, args(i)) + End If + + i += 1 + host_port = args(i) + + Dim index_colon As Integer = host_port.IndexOf(":"C) + If index_colon < 0 Then + print_client_options(build_mode, args(i)) + End If + + hostname = New String(host_port.ToCharArray(), _ + 0, index_colon) + port = Int32.Parse(New String(host_port.ToCharArray(), _ + index_colon+1, host_port.Length-index_colon-1)) + ElseIf args(i) = "-cert" + If i >= args.Length-1 Or cert_index >= cert_size Then + print_client_options(build_mode, args(i)) + End If + + i += 1 + cert(cert_index) = args(i) + cert_index += 1 + ElseIf args(i) = "-key" + If i >= args.Length-1 + print_client_options(build_mode, args(i)) + End If + + i += 1 + private_key_file = args(i) + options = options Or axtls.SSL_NO_DEFAULT_KEY + ElseIf args(i) = "-CAfile" + If i >= args.Length-1 Or ca_cert_index >= ca_cert_size + print_client_options(build_mode, args(i)) + End If + + i += 1 + ca_cert(ca_cert_index) = args(i) + ca_cert_index += 1 + ElseIf args(i) = "-verify" + options = options And Not axtls.SSL_SERVER_VERIFY_LATER + ElseIf args(i) = "-reconnect" + reconnect = 4 + ElseIf args(i) = "-quiet" + quiet = True + options = options And Not axtls.SSL_DISPLAY_CERTS + ElseIf args(i) = "-pass" + If i >= args.Length-1 + print_client_options(build_mode, args(i)) + End If + + i += 1 + password = args(i) + ElseIf build_mode = axtls.SSL_BUILD_FULL_MODE + If args(i) = "-debug" Then + options = options Or axtls.SSL_DISPLAY_BYTES + ElseIf args(i) = "-state" + options = options Or axtls.SSL_DISPLAY_STATES + ElseIf args(i) = "-show-rsa" + options = options Or axtls.SSL_DISPLAY_RSA + Else + print_client_options(build_mode, args(i)) + End If + Else ' don't know what this is + print_client_options(build_mode, args(i)) + End If + + i += 1 + End While + + 'Dim hostInfo As IPHostEntry = Dns.Resolve(hostname) + Dim hostInfo As IPHostEntry = Dns.GetHostEntry(hostname) + Dim addresses As IPAddress() = hostInfo.AddressList + Dim ep As IPEndPoint = New IPEndPoint(addresses(0), port) + Dim client_sock As Socket = New Socket(AddressFamily.InterNetwork, _ + SocketType.Stream, ProtocolType.Tcp) + client_sock.Connect(ep) + + If Not client_sock.Connected Then + Console.WriteLine("could not connect") + Environment.Exit(1) + End If + + If Not quiet Then + Console.WriteLine("CONNECTED") + End If + + '********************************************************************* + ' This is where the interesting stuff happens. Up until now we've + ' just been setting up sockets etc. Now we do the SSL handshake. + '*********************************************************************/ + Dim ssl_ctx As SSLClient = New SSLClient(options, _ + axtls.SSL_DEFAULT_CLNT_SESS) + + If ssl_ctx Is Nothing Then + Console.Error.WriteLine("Error: Client context is invalid") + Environment.Exit(1) + End If + + If private_key_file <> Nothing Then + Dim obj_type As Integer = axtls.SSL_OBJ_RSA_KEY + + If private_key_file.EndsWith(".p8") Then + obj_type = axtls.SSL_OBJ_PKCS8 + Else If (private_key_file.EndsWith(".p12")) + obj_type = axtls.SSL_OBJ_PKCS12 + End If + + If ssl_ctx.ObjLoad(obj_type, private_key_file, _ + password) <> axtls.SSL_OK Then + Console.Error.WriteLine("Error: Private key '" & _ + private_key_file & "' is undefined.") + Environment.Exit(1) + End If + End If + + For i = 0 To cert_index-1 + If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CERT, _ + cert(i), Nothing) <> axtls.SSL_OK Then + Console.WriteLine("Certificate '" & cert(i) & _ + "' is undefined.") + Environment.Exit(1) + End If + Next + + For i = 0 To ca_cert_index-1 + If ssl_ctx.ObjLoad(axtls.SSL_OBJ_X509_CACERT, _ + ca_cert(i), Nothing) <> axtls.SSL_OK Then + Console.WriteLine("Certificate '" & ca_cert(i) & _ + "' is undefined.") + Environment.Exit(1) + End If + Next + + ' Try session resumption? + If reconnect > 0 Then + While reconnect > 0 + reconnect -= 1 + ssl = ssl_ctx.Connect(client_sock, session_id) + + res = ssl.HandshakeStatus() + If res <> axtls.SSL_OK Then + If Not quiet Then + SSLUtil.DisplayError(res) + End If + + ssl.Dispose() + Environment.Exit(1) + End If + + display_session_id(ssl) + session_id = ssl.GetSessionId() + + If reconnect > 0 Then + ssl.Dispose() + client_sock.Close() + + ' and reconnect + client_sock = New Socket(AddressFamily.InterNetwork, _ + SocketType.Stream, ProtocolType.Tcp) + client_sock.Connect(ep) + End If + End While + Else + ssl = ssl_ctx.Connect(client_sock, Nothing) + End If + + ' check the return status + res = ssl.HandshakeStatus() + If res <> axtls.SSL_OK Then + If Not quiet Then + SSLUtil.DisplayError(res) + End If + + Environment.Exit(1) + End If + + If Not quiet Then + Dim common_name As String = _ + ssl.GetCertificateDN(axtls.SSL_X509_CERT_COMMON_NAME) + + If common_name <> Nothing + Console.WriteLine("Common Name:" & _ + ControlChars.Tab & ControlChars.Tab & _ + ControlChars.Tab & common_name) + End If + + display_session_id(ssl) + display_cipher(ssl) + End If + + While (1) + Dim user_input As String = Console.ReadLine() + + If user_input = Nothing Then + Exit While + End If + + Dim buf(user_input.Length+1) As Byte + buf(buf.Length-2) = Asc(ControlChars.Lf) ' add the carriage return + buf(buf.Length-1) = 0 ' null terminate + + For i = 0 To user_input.Length-1 + buf(i) = Asc(user_input.Chars(i)) + Next + + res = ssl_ctx.Write(ssl, buf, buf.Length) + If res < axtls.SSL_OK Then + If Not quiet Then + SSLUtil.DisplayError(res) + End If + + Exit While + End If + End While + + ssl_ctx.Dispose() + End Sub + + ' + ' Display what cipher we are using + ' + Private Sub display_cipher(ByVal ssl As SSL) + Console.Write("CIPHER is ") + + Select ssl.GetCipherId() + Case axtls.SSL_AES128_SHA + Console.WriteLine("AES128-SHA") + + Case axtls.SSL_AES256_SHA + Console.WriteLine("AES256-SHA") + + Case axtls.SSL_RC4_128_SHA + Console.WriteLine("RC4-SHA") + + Case axtls.SSL_RC4_128_MD5 + Console.WriteLine("RC4-MD5") + + Case Else + Console.WriteLine("Unknown - " & ssl.GetCipherId()) + End Select + End Sub + + ' + ' Display what session id we have. + ' + Private Sub display_session_id(ByVal ssl As SSL) + Dim session_id As Byte() = ssl.GetSessionId() + + If session_id.Length > 0 Then + Console.WriteLine("-----BEGIN SSL SESSION PARAMETERS-----") + Dim b As Byte + For Each b In session_id + Console.Write("{0:x02}", b) + Next + + Console.WriteLine() + Console.WriteLine("-----END SSL SESSION PARAMETERS-----") + End If + End Sub + + ' + ' We've had some sort of command-line error. Print out the basic options. + ' + Public Sub print_options(ByVal options As String) + Console.WriteLine("axssl: Error: '" & options & _ + "' is an invalid command.") + Console.WriteLine("usage: axssl.vbnet [s_server|s_client|" & _ + "version] [args ...]") + Environment.Exit(1) + End Sub + + ' + ' We've had some sort of command-line error. Print out the server options. + ' + Private Sub print_server_options(ByVal build_mode As Integer, _ + ByVal options As String) + Dim cert_size As Integer = SSLUtil.MaxCerts() + Dim ca_cert_size As Integer = SSLUtil.MaxCACerts() + + Console.WriteLine("unknown option " & options) + Console.WriteLine("usage: s_server [args ...]") + Console.WriteLine(" -accept arg" & ControlChars.Tab & _ + "- port to accept on (default is 4433)") + Console.WriteLine(" -quiet" & ControlChars.Tab & ControlChars.Tab & _ + "- No server output") + If build_mode >= axtls.SSL_BUILD_SERVER_ONLY + Console.WriteLine(" -cert arg" & ControlChars.Tab & _ + "- certificate file to add (in addition to default) to chain -") + Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _ + " Can repeat up to " & cert_size & " times") + Console.WriteLine(" -key arg" & ControlChars.Tab & _ + "- Private key file to use") + Console.WriteLine(" -pass" & ControlChars.Tab & ControlChars.Tab & _ + "- private key file pass phrase source") + End If + + If build_mode >= axtls.SSL_BUILD_ENABLE_VERIFICATION + Console.WriteLine(" -verify" & ControlChars.Tab & _ + "- turn on peer certificate verification") + Console.WriteLine(" -CAfile arg" & ControlChars.Tab & _ + "- Certificate authority") + Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _ + " Can repeat up to " & ca_cert_size & " times") + End If + + If build_mode = axtls.SSL_BUILD_FULL_MODE + Console.WriteLine(" -debug" & _ + ControlChars.Tab & ControlChars.Tab & _ + "- Print more output") + Console.WriteLine(" -state" & _ + ControlChars.Tab & ControlChars.Tab & _ + "- Show state messages") + Console.WriteLine(" -show-rsa" & _ + ControlChars.Tab & "- Show RSA state") + End If + + Environment.Exit(1) + End Sub + + ' + ' We've had some sort of command-line error. Print out the client options. + ' + Private Sub print_client_options(ByVal build_mode As Integer, _ + ByVal options As String) + Dim cert_size As Integer = SSLUtil.MaxCerts() + Dim ca_cert_size As Integer = SSLUtil.MaxCACerts() + + Console.WriteLine("unknown option " & options) + + If build_mode >= axtls.SSL_BUILD_ENABLE_CLIENT Then + Console.WriteLine("usage: s_client [args ...]") + Console.WriteLine(" -connect host:port - who to connect to " & _ + "(default is localhost:4433)") + Console.WriteLine(" -verify" & ControlChars.Tab & _ + "- turn on peer certificate verification") + Console.WriteLine(" -cert arg" & ControlChars.Tab & _ + "- certificate file to use") + Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _ + " Can repeat up to " & cert_size & " times") + Console.WriteLine(" -key arg" & ControlChars.Tab & _ + "- Private key file to use") + Console.WriteLine(" -CAfile arg" & ControlChars.Tab & _ + "- Certificate authority") + Console.WriteLine(ControlChars.Tab & ControlChars.Tab & _ + " Can repeat up to " & ca_cert_size & " times") + Console.WriteLine(" -quiet" & _ + ControlChars.Tab & ControlChars.Tab & "- No client output") + Console.WriteLine(" -pass" & ControlChars.Tab & _ + ControlChars.Tab & _ + "- private key file pass phrase source") + Console.WriteLine(" -reconnect" & ControlChars.Tab & _ + "- Drop and re-make the " & _ + "connection with the same Session-ID") + + If build_mode = axtls.SSL_BUILD_FULL_MODE Then + Console.WriteLine(" -debug" & _ + ControlChars.Tab & ControlChars.Tab & _ + "- Print more output") + Console.WriteLine(" -state" & _ + ControlChars.Tab & ControlChars.Tab & _ + "- Show state messages") + Console.WriteLine(" -show-rsa" & ControlChars.Tab & _ + "- Show RSA state") + End If + Else + Console.WriteLine("Change configuration to allow this feature") + End If + + Environment.Exit(1) + End Sub + +End Class + +Public Module MyMain + Function Main(ByVal args() As String) As Integer + Dim runner As axssl = New axssl() + + If args.Length = 1 And args(0) = "version" Then + Console.WriteLine("axssl.vbnet " & SSLUtil.Version()) + Environment.Exit(0) + End If + + If args.Length < 1 + runner.print_options("") + ElseIf args(0) <> "s_server" And args(0) <> "s_client" + runner.print_options(args(0)) + End If + + Dim build_mode As Integer = SSLUtil.BuildMode() + + If args(0) = "s_server" Then + runner.do_server(build_mode, args) + Else + runner.do_client(build_mode, args) + End If + End Function +End Module diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/BigIntConfig.in b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/BigIntConfig.in new file mode 100644 index 0000000..04c7438 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/BigIntConfig.in @@ -0,0 +1,132 @@ +# +# For a description of the syntax of this configuration file, +# see scripts/config/Kconfig-language.txt +# + +menu "BigInt Options" + depends on !CONFIG_SSL_SKELETON_MODE + +choice + prompt "Reduction Algorithm" + default CONFIG_BIGINT_BARRETT + +config CONFIG_BIGINT_CLASSICAL + bool "Classical" + help + Classical uses standard division. It has no limitations and is + theoretically the slowest due to the divisions used. For this particular + implementation it is surprisingly quite fast. + +config CONFIG_BIGINT_MONTGOMERY + bool "Montgomery" + help + Montgomery uses simple addition and multiplication to achieve its + performance. In this implementation it is slower than classical, + and it has the limitation that 0 <= x, y < m, and so is not used + when CRT is active. + + This option will not be normally selected. + +config CONFIG_BIGINT_BARRETT + bool "Barrett" + help + Barrett performs expensive precomputation before reduction and partial + multiplies for computational speed. It can't be used with some of the + calculations when CRT is used, and so defaults to classical when this + occurs. + + It is about 40% faster than Classical/Montgomery with the expense of + about 2kB, and so this option is normally selected. + +endchoice + +config CONFIG_BIGINT_CRT + bool "Chinese Remainder Theorem (CRT)" + default y + help + Allow the Chinese Remainder Theorem (CRT) to be used. + + Uses a number of extra coefficients from the private key to improve the + performance of a decryption. This feature is one of the most + significant performance improvements (it reduces a decryption time by + over 3 times). + + This option should be selected. + +config CONFIG_BIGINT_KARATSUBA + bool "Karatsuba Multiplication" + default n + help + Allow Karasuba multiplication to be used. + + Uses 3 multiplications (plus a number of additions/subtractions) + instead of 4. Multiplications are O(N^2) but addition/subtraction + is O(N) hence for large numbers is beneficial. For this project, the + effect was only useful for 4096 bit keys. As these aren't likely to + be used, the feature is disabled by default. + + It costs about 2kB to enable it. + +config MUL_KARATSUBA_THRESH + int "Karatsuba Multiplication Theshold" + default 20 + depends on CONFIG_BIGINT_KARATSUBA + help + The minimum number of components needed before Karasuba muliplication + is used. + + This is very dependent on the speed/implementation of bi_add()/ + bi_subtract(). There is a bit of trial and error here and will be + at a different point for different architectures. + +config SQU_KARATSUBA_THRESH + int "Karatsuba Square Threshold" + default 40 + depends on CONFIG_BIGINT_KARATSUBA && CONFIG_BIGINT_SQUARE + help + The minimum number of components needed before Karatsuba squaring + is used. + + This is very dependent on the speed/implementation of bi_add()/ + bi_subtract(). There is a bit of trial and error here and will be + at a different point for different architectures. + +config CONFIG_BIGINT_SLIDING_WINDOW + bool "Sliding Window Exponentiation" + default y + help + Allow Sliding-Window Exponentiation to be used. + + Potentially processes more than 1 bit at a time when doing + exponentiation. The sliding-window technique reduces the number of + precomputations compared to other precomputed techniques. + + It results in a considerable performance improvement with it enabled + (it halves the decryption time) and so should be selected. + +config CONFIG_BIGINT_SQUARE + bool "Square Algorithm" + default y + help + Allow squaring to be used instead of a multiplication. + + Squaring is theoretically 50% faster than a standard multiply + (but is actually about 25% faster). + + It gives a 20% speed improvement and so should be selected. + +config CONFIG_BIGINT_CHECK_ON + bool "BigInt Integrity Checking" + default n if !CONFIG_DEBUG + default y if CONFIG_DEBUG + help + This is used when developing bigint algorithms. It performs a sanity + check on all operations at the expense of speed. + + This option is only selected when developing and should normally be + turned off. + +endmenu + + + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/Config.in b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/Config.in new file mode 100644 index 0000000..d047d42 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/Config.in @@ -0,0 +1,336 @@ +# +# For a description of the syntax of this configuration file, +# see scripts/config/Kconfig-language.txt +# + +menu "SSL Library" + +choice + prompt "Mode" + default CONFIG_SSL_FULL_MODE + +config CONFIG_SSL_SERVER_ONLY + bool "Server only - no verification" + help + Enable server functionality (no client functionality). + This mode still supports sessions and chaining (which can be turned + off in configuration). + + The axssl sample runs with the minimum of features. + + This is the most space efficient of the modes with the library + about 45kB in size. Use this mode if you are doing standard SSL server + work. + +config CONFIG_SSL_CERT_VERIFICATION + bool "Server only - with verification" + help + Enable server functionality with client authentication (no client + functionality). + + The axssl sample runs with the "-verify" and "-CAfile" options. + + This mode produces a library about 49kB in size. Use this mode if you + have an SSL server which requires client authentication (which is + uncommon in browser applications). + +config CONFIG_SSL_ENABLE_CLIENT + bool "Client/Server enabled" + help + Enable client/server functionality (including peer authentication). + + The axssl sample runs with the "s_client" option enabled. + + This mode produces a library about 51kB in size. Use this mode if you + require axTLS to use SSL client functionality (the SSL server code + is always enabled). + +config CONFIG_SSL_FULL_MODE + bool "Client/Server enabled with diagnostics" + help + Enable client/server functionality including diagnostics. Most of the + extra size in this mode is due to the storage of various strings that + are used. + + The axssl sample has 3 more options, "-debug", "-state" and "-show-rsa" + + This mode produces a library about 58kB in size. It is suggested that + this mode is used only during development, or systems that have more + generous memory limits. + + It is the default to demonstrate the features of axTLS. + +config CONFIG_SSL_SKELETON_MODE + bool "Skeleton mode - the smallest server mode" + help + This is an experiment to build the smallest library at the expense of + features and speed. + + * Server mode only. + * The AES cipher is disabled. + * No session resumption. + * No external keys/certificates are supported. + * The bigint library has most of the performance features disabled. + * Some other features/API calls may not work. + + This mode produces a library about 37kB in size. The main + disadvantage of this mode is speed - it will be much slower than the + other build modes. + +endchoice + +choice + prompt "Protocol Preference" + depends on !CONFIG_SSL_SKELETON_MODE + default CONFIG_SSL_PROT_MEDIUM + +config CONFIG_SSL_PROT_LOW + bool "Low" + help + Chooses the cipher in the order of RC4-SHA, AES128-SHA, AES256-SHA. + + This will use the fastest cipher(s) but at the expense of security. + +config CONFIG_SSL_PROT_MEDIUM + bool "Medium" + help + Chooses the cipher in the order of AES128-SHA, AES256-SHA, RC4-SHA. + + This mode is a balance between speed and security and is the default. + +config CONFIG_SSL_PROT_HIGH + bool "High" + help + Chooses the cipher in the order of AES256-SHA, AES128-SHA, RC4-SHA. + + This will use the strongest cipher(s) at the cost of speed. + +endchoice + +config CONFIG_SSL_USE_DEFAULT_KEY + bool "Enable default key" + depends on !CONFIG_SSL_SKELETON_MODE + default y + help + Some applications will not require the default private key/certificate + that is built in. This is one way to save on a couple of kB's if an + external private key/certificate is used. + + The private key is in ssl/private_key.h and the certificate is in + ssl/cert.h. + + The advantage of a built-in private key/certificate is that no file + system is required for access. Both the certificate and the private + key will be automatically loaded on a ssl_ctx_new(). + + However this private key/certificate can never be changed (without a + code update). + + This mode is enabled by default. Disable this mode if the + built-in key/certificate is not used. + +config CONFIG_SSL_PRIVATE_KEY_LOCATION + string "Private key file location" + depends on !CONFIG_SSL_USE_DEFAULT_KEY && !CONFIG_SSL_SKELETON_MODE + help + The file location of the private key which will be automatically + loaded on a ssl_ctx_new(). + +config CONFIG_SSL_PRIVATE_KEY_PASSWORD + string "Private key password" + depends on !CONFIG_SSL_USE_DEFAULT_KEY && CONFIG_SSL_HAS_PEM + help + The password required to decrypt a PEM-encoded password file. + +config CONFIG_SSL_X509_CERT_LOCATION + string "X.509 certificate file location" + depends on !CONFIG_SSL_GENERATE_X509_CERT && !CONFIG_SSL_USE_DEFAULT_KEY && !CONFIG_SSL_SKELETON_MODE + help + The file location of the X.509 certificate which will be automatically + loaded on a ssl_ctx_new(). + +config CONFIG_SSL_GENERATE_X509_CERT + bool "Generate X.509 Certificate" + default n + help + An X.509 certificate can be automatically generated on a + ssl_ctx_new(). A private key still needs to be provided (the private + key in ss/private_key.h will be used unless + CONFIG_SSL_PRIVATE_KEY_LOCATION is set). + + The certificate is generated on the fly, and so a minor start-up time + penalty is to be expected. This feature adds around 5kB to the + library. + + This feature is disabled by default. + +config CONFIG_SSL_X509_COMMON_NAME + string "X.509 Common Name" + depends on CONFIG_SSL_GENERATE_X509_CERT + help + The common name for the X.509 certificate. This should be the fully + qualified domain name (FQDN), e.g. www.foo.com. + + If this is blank, then this will be value from gethostname() and + getdomainname(). + +config CONFIG_SSL_X509_ORGANIZATION_NAME + string "X.509 Organization Name" + depends on CONFIG_SSL_GENERATE_X509_CERT + help + The organization name for the generated X.509 certificate. + + This field is optional. + +config CONFIG_SSL_X509_ORGANIZATION_UNIT_NAME + string "X.509 Organization Unit Name" + depends on CONFIG_SSL_GENERATE_X509_CERT + help + The organization unit name for the generated X.509 certificate. + + This field is optional. + +config CONFIG_SSL_ENABLE_V23_HANDSHAKE + bool "Enable v23 Handshake" + default y + help + Some browsers use the v23 handshake client hello message + (an SSL2 format message which all SSL servers can understand). + It may be used if SSL2 is enabled in the browser. + + Since this feature takes a kB or so, this feature may be disabled - at + the risk of making it incompatible with some browsers (IE6 is ok, + Firefox 1.5 and below use it). + + Disable if backwards compatibility is not an issue (i.e. the client is + always using TLS1.0) + +config CONFIG_SSL_HAS_PEM + bool "Enable PEM" + default n if !CONFIG_SSL_FULL_MODE + default y if CONFIG_SSL_FULL_MODE + depends on !CONFIG_SSL_SKELETON_MODE + help + Enable the use of PEM format for certificates and private keys. + + PEM is not normally needed - PEM files can be converted into DER files + quite easily. However they have the convenience of allowing multiple + certificates/keys in the same file. + + This feature will add a couple of kB to the library. + + Disable if PEM is not used (which will be in most cases). + +config CONFIG_SSL_USE_PKCS12 + bool "Use PKCS8/PKCS12" + default n if !CONFIG_SSL_FULL_MODE + default y if CONFIG_SSL_FULL_MODE + depends on !CONFIG_SSL_SERVER_ONLY && !CONFIG_SSL_SKELETON_MODE + help + PKCS#12 certificates combine private keys and certificates together in + one file. + + PKCS#8 private keys are also suppported (as it is a subset of PKCS#12). + + The decryption of these certificates uses RC4-128 (and these + certificates must be encrypted using this cipher). The actual + algorithm is "PBE-SHA1-RC4-128". + + Disable if PKCS#12 is not used (which will be in most cases). + +config CONFIG_SSL_EXPIRY_TIME + int "Session expiry time (in hours)" + depends on !CONFIG_SSL_SKELETON_MODE + default 24 + help + The time (in hours) before a session expires. + + A longer time means that the expensive parts of a handshake don't + need to be run when a client reconnects later. + + The default is 1 day. + +config CONFIG_X509_MAX_CA_CERTS + int "Maximum number of certificate authorites" + default 4 + depends on !CONFIG_SSL_SERVER_ONLY && !CONFIG_SSL_SKELETON_MODE + help + Determines the number of CA's allowed. + + Increase this figure if more trusted sites are allowed. Each + certificate adds about 300 bytes (when added). + + The default is to allow four certification authorities. + +config CONFIG_SSL_MAX_CERTS + int "Maximum number of chained certificates" + default 2 + help + Determines the number of certificates used in a certificate + chain. The chain length must be at least 1. + + Increase this figure if more certificates are to be added to the + chain. Each certificate adds about 300 bytes (when added). + + The default is to allow one certificate + 1 certificate in the chain + (which may be the certificate authority certificate). + +config CONFIG_SSL_CTX_MUTEXING + bool "Enable SSL_CTX mutexing" + default n + help + Normally mutexing is not required - each SSL_CTX object can deal with + many SSL objects (as long as each SSL_CTX object is using a single + thread). + + If the SSL_CTX object is not thread safe e.g. the case where a + new thread is created for each SSL object, then mutexing is required. + + Select y when a mutex on the SSL_CTX object is required. + +config CONFIG_USE_DEV_URANDOM + bool "Use /dev/urandom" + default y + depends on !CONFIG_PLATFORM_WIN32 + help + Use /dev/urandom. Otherwise a custom RNG is used. + + This will be the default on most Linux systems. + +config CONFIG_WIN32_USE_CRYPTO_LIB + bool "Use Win32 Crypto Library" + depends on CONFIG_PLATFORM_WIN32 + help + Microsoft produce a Crypto API which requires the Platform SDK to be + installed. It's used for the RNG. + + This will be the default on most Win32 systems. + +config CONFIG_OPENSSL_COMPATIBLE + bool "Enable openssl API compatibility" + default n + help + To ease the porting of openssl applications, a subset of the openssl + API is wrapped around the axTLS API. + + Note: not all the API is implemented, so parts may still break. And + it's definitely not 100% compatible. + +config CONFIG_PERFORMANCE_TESTING + bool "Build the bigint performance test tool" + default n + help + Used for performance testing of bigint. + + This is a testing tool and is normally disabled. + +config CONFIG_SSL_TEST + bool "Build the SSL testing tool" + default n + depends on CONFIG_SSL_FULL_MODE && !CONFIG_SSL_GENERATE_X509_CERT + help + Used for sanity checking the SSL handshaking. + + This is a testing tool and is normally disabled. + +endmenu diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/Makefile new file mode 100644 index 0000000..704d90a --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/Makefile @@ -0,0 +1,123 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +AXTLS_HOME=.. + +include $(AXTLS_HOME)/config/.config +include $(AXTLS_HOME)/config/makefile.conf + +all: libs +ifdef CONFIG_PERFORMANCE_TESTING + $(MAKE) -C test +else +ifdef CONFIG_SSL_TEST + $(MAKE) -C test +endif +endif + +ifndef CONFIG_PLATFORM_WIN32 +TARGET1=$(AXTLS_HOME)/$(STAGE)/libaxtls.a +BASETARGET=libaxtls.so +CRYPTO_PATH=$(AXTLS_HOME)/crypto/ +ifdef CONFIG_PLATFORM_CYGWIN +TARGET2=$(AXTLS_HOME)/$(STAGE)/libaxtls.dll.a +else +TARGET2=$(AXTLS_HOME)/$(STAGE)/$(LIBMINOR) +endif + +# shared library major/minor numbers +LIBMAJOR=$(BASETARGET).1 +LIBMINOR=$(BASETARGET).1.2 +else +TARGET1=$(AXTLS_HOME)/$(STAGE)/axtls.lib +TARGET2=$(AXTLS_HOME)/$(STAGE)/axtls.dll +STATIC_LIB=$(AXTLS_HOME)/$(STAGE)/axtls.static.lib +CRYPTO_PATH=$(AXTLS_HOME)\\crypto\\ +endif + +libs: $(TARGET1) $(TARGET2) + +CRYPTO_OBJ=\ + $(CRYPTO_PATH)aes.o \ + $(CRYPTO_PATH)bigint.o \ + $(CRYPTO_PATH)crypto_misc.o \ + $(CRYPTO_PATH)hmac.o \ + $(CRYPTO_PATH)md2.o \ + $(CRYPTO_PATH)md5.o \ + $(CRYPTO_PATH)rc4.o \ + $(CRYPTO_PATH)rsa.o \ + $(CRYPTO_PATH)sha1.o + +OBJ=\ + asn1.o \ + gen_cert.o \ + loader.o \ + openssl.o \ + os_port.o \ + p12.o \ + tls1.o \ + tls1_svr.o \ + tls1_clnt.o \ + x509.o + +include $(AXTLS_HOME)/config/makefile.post + +ifndef CONFIG_PLATFORM_WIN32 # Linux/Unix/Cygwin + +$(TARGET1) : $(OBJ) + $(AR) -r $@ $(CRYPTO_OBJ) $(OBJ) + +$(TARGET2) : $(OBJ) +ifndef CONFIG_PLATFORM_CYGWIN + $(LD) $(LDFLAGS) $(LDSHARED) -o $(AXTLS_HOME)/$(STAGE)/$(LIBMINOR) $(CRYPTO_OBJ) $(OBJ) + cd $(AXTLS_HOME)/$(STAGE); ln -sf $(LIBMINOR) $(LIBMAJOR); ln -sf $(LIBMAJOR) $(BASETARGET); cd - +else + $(LD) $(LDFLAGS) $(LDSHARED) -o $(AXTLS_HOME)/$(STAGE)/cygaxtls.dll \ + -Wl,--out-implib=$(AXTLS_HOME)/$(STAGE)/libaxtls.dll.a \ + -Wl,--export-all-symbols \ + -Wl,--enable-auto-import $(CRYPTO_OBJ) $(OBJ) +endif + +else # Win32 +CRYPTO_OBJ:=$(CRYPTO_OBJ:.o=.obj) + +$(TARGET1) : $(OBJ) + $(AR) /out:$@ $(CRYPTO_OBJ) $(OBJ) + +$(TARGET2) : $(OBJ) + cp $(TARGET1) $(STATIC_LIB) + $(LD) $(LDFLAGS) $(LDSHARED) /out:$@ $(CRYPTO_OBJ) $(OBJ) + +endif + +clean:: + $(MAKE) -C test clean + -@rm -f $(AXTLS_HOME)/$(STAGE)/* *.a $(TARGET1) $(TARGET2) + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/asn1.c b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/asn1.c new file mode 100644 index 0000000..4f2e6db --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/asn1.c @@ -0,0 +1,510 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Some primitive asn methods for extraction ASN.1 data. + */ + +#include +#include +#include +#include +#include "os_port.h" +#include "crypto.h" +#include "crypto_misc.h" + +#define SIG_OID_PREFIX_SIZE 8 +#define SIG_IIS6_OID_SIZE 5 + +/* Must be an RSA algorithm with either SHA1 or MD5 for verifying to work */ +static const uint8_t sig_oid_prefix[SIG_OID_PREFIX_SIZE] = +{ + 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01 +}; + +static const uint8_t sig_iis6_oid[SIG_IIS6_OID_SIZE] = +{ + 0x2b, 0x0e, 0x03, 0x02, 0x1d +}; + +/* CN, O, OU */ +static const uint8_t g_dn_types[] = { 3, 10, 11 }; + +int get_asn1_length(const uint8_t *buf, int *offset) +{ + int len, i; + + if (!(buf[*offset] & 0x80)) /* short form */ + { + len = buf[(*offset)++]; + } + else /* long form */ + { + int length_bytes = buf[(*offset)++]&0x7f; + len = 0; + for (i = 0; i < length_bytes; i++) + { + len <<= 8; + len += buf[(*offset)++]; + } + } + + return len; +} + +/** + * Skip the ASN1.1 object type and its length. Get ready to read the object's + * data. + */ +int asn1_next_obj(const uint8_t *buf, int *offset, int obj_type) +{ + if (buf[*offset] != obj_type) + return X509_NOT_OK; + (*offset)++; + return get_asn1_length(buf, offset); +} + +/** + * Skip over an ASN.1 object type completely. Get ready to read the next + * object. + */ +int asn1_skip_obj(const uint8_t *buf, int *offset, int obj_type) +{ + int len; + + if (buf[*offset] != obj_type) + return X509_NOT_OK; + (*offset)++; + len = get_asn1_length(buf, offset); + *offset += len; + return 0; +} + +/** + * Read an integer value for ASN.1 data + * Note: This function allocates memory which must be freed by the user. + */ +int asn1_get_int(const uint8_t *buf, int *offset, uint8_t **object) +{ + int len; + + if ((len = asn1_next_obj(buf, offset, ASN1_INTEGER)) < 0) + goto end_int_array; + + if (len > 1 && buf[*offset] == 0x00) /* ignore the negative byte */ + { + len--; + (*offset)++; + } + + *object = (uint8_t *)malloc(len); + memcpy(*object, &buf[*offset], len); + *offset += len; + +end_int_array: + return len; +} + +/** + * Get all the RSA private key specifics from an ASN.1 encoded file + */ +int asn1_get_private_key(const uint8_t *buf, int len, RSA_CTX **rsa_ctx) +{ + int offset = 7; + uint8_t *modulus = NULL, *priv_exp = NULL, *pub_exp = NULL; + int mod_len, priv_len, pub_len; +#ifdef CONFIG_BIGINT_CRT + uint8_t *p = NULL, *q = NULL, *dP = NULL, *dQ = NULL, *qInv = NULL; + int p_len, q_len, dP_len, dQ_len, qInv_len; +#endif + + /* not in der format */ + if (buf[0] != ASN1_SEQUENCE) /* basic sanity check */ + { +#ifdef CONFIG_SSL_FULL_MODE + printf("Error: This is not a valid ASN.1 file\n"); +#endif + return X509_INVALID_PRIV_KEY; + } + + /* initialise the RNG */ + RNG_initialize(buf, len); + + mod_len = asn1_get_int(buf, &offset, &modulus); + pub_len = asn1_get_int(buf, &offset, &pub_exp); + priv_len = asn1_get_int(buf, &offset, &priv_exp); + + if (mod_len <= 0 || pub_len <= 0 || priv_len <= 0) + return X509_INVALID_PRIV_KEY; + +#ifdef CONFIG_BIGINT_CRT + p_len = asn1_get_int(buf, &offset, &p); + q_len = asn1_get_int(buf, &offset, &q); + dP_len = asn1_get_int(buf, &offset, &dP); + dQ_len = asn1_get_int(buf, &offset, &dQ); + qInv_len = asn1_get_int(buf, &offset, &qInv); + + if (p_len <= 0 || q_len <= 0 || dP_len <= 0 || dQ_len <= 0 || qInv_len <= 0) + return X509_INVALID_PRIV_KEY; + + RSA_priv_key_new(rsa_ctx, + modulus, mod_len, pub_exp, pub_len, priv_exp, priv_len, + p, p_len, q, p_len, dP, dP_len, dQ, dQ_len, qInv, qInv_len); + + free(p); + free(q); + free(dP); + free(dQ); + free(qInv); +#else + RSA_priv_key_new(rsa_ctx, + modulus, mod_len, pub_exp, pub_len, priv_exp, priv_len); +#endif + + free(modulus); + free(priv_exp); + free(pub_exp); + return X509_OK; +} + +/** + * Get the time of a certificate. Ignore hours/minutes/seconds. + */ +static int asn1_get_utc_time(const uint8_t *buf, int *offset, time_t *t) +{ + int ret = X509_NOT_OK, len, t_offset; + struct tm tm; + + if (buf[(*offset)++] != ASN1_UTC_TIME) + goto end_utc_time; + len = get_asn1_length(buf, offset); + t_offset = *offset; + + memset(&tm, 0, sizeof(struct tm)); + tm.tm_year = (buf[t_offset] - '0')*10 + (buf[t_offset+1] - '0'); + + if (tm.tm_year <= 50) /* 1951-2050 thing */ + { + tm.tm_year += 100; + } + + tm.tm_mon = (buf[t_offset+2] - '0')*10 + (buf[t_offset+3] - '0') - 1; + tm.tm_mday = (buf[t_offset+4] - '0')*10 + (buf[t_offset+5] - '0'); + *t = mktime(&tm); + *offset += len; + ret = X509_OK; + +end_utc_time: + return ret; +} + +/** + * Get the version type of a certificate (which we don't actually care about) + */ +int asn1_version(const uint8_t *cert, int *offset, X509_CTX *x509_ctx) +{ + int ret = X509_NOT_OK; + + (*offset) += 2; /* get past explicit tag */ + if (asn1_skip_obj(cert, offset, ASN1_INTEGER)) + goto end_version; + + ret = X509_OK; +end_version: + return ret; +} + +/** + * Retrieve the notbefore and notafter certificate times. + */ +int asn1_validity(const uint8_t *cert, int *offset, X509_CTX *x509_ctx) +{ + return (asn1_next_obj(cert, offset, ASN1_SEQUENCE) < 0 || + asn1_get_utc_time(cert, offset, &x509_ctx->not_before) || + asn1_get_utc_time(cert, offset, &x509_ctx->not_after)); +} + +/** + * Get the components of a distinguished name + */ +static int asn1_get_oid_x520(const uint8_t *buf, int *offset) +{ + int dn_type = 0; + int len; + + if ((len = asn1_next_obj(buf, offset, ASN1_OID)) < 0) + goto end_oid; + + /* expect a sequence of 2.5.4.[x] where x is a one of distinguished name + components we are interested in. */ + if (len == 3 && buf[(*offset)++] == 0x55 && buf[(*offset)++] == 0x04) + dn_type = buf[(*offset)++]; + else + { + *offset += len; /* skip over it */ + } + +end_oid: + return dn_type; +} + +/** + * Obtain an ASN.1 printable string type. + */ +static int asn1_get_printable_str(const uint8_t *buf, int *offset, char **str) +{ + int len = X509_NOT_OK; + + /* some certs have this awful crud in them for some reason */ + if (buf[*offset] != ASN1_PRINTABLE_STR && + buf[*offset] != ASN1_TELETEX_STR && + buf[*offset] != ASN1_IA5_STR && + buf[*offset] != ASN1_UNICODE_STR) + goto end_pnt_str; + + (*offset)++; + len = get_asn1_length(buf, offset); + + if (buf[*offset - 1] == ASN1_UNICODE_STR) + { + int i; + *str = (char *)malloc(len/2+1); /* allow for null */ + + for (i = 0; i < len; i += 2) + (*str)[i/2] = buf[*offset + i + 1]; + + (*str)[len/2] = 0; /* null terminate */ + } + else + { + *str = (char *)malloc(len+1); /* allow for null */ + memcpy(*str, &buf[*offset], len); + (*str)[len] = 0; /* null terminate */ + } + + *offset += len; + +end_pnt_str: + return len; +} + +/** + * Get the subject name (or the issuer) of a certificate. + */ +int asn1_name(const uint8_t *cert, int *offset, char *dn[]) +{ + int ret = X509_NOT_OK; + int dn_type; + char *tmp = NULL; + + if (asn1_next_obj(cert, offset, ASN1_SEQUENCE) < 0) + goto end_name; + + while (asn1_next_obj(cert, offset, ASN1_SET) >= 0) + { + int i, found = 0; + + if (asn1_next_obj(cert, offset, ASN1_SEQUENCE) < 0 || + (dn_type = asn1_get_oid_x520(cert, offset)) < 0) + goto end_name; + + if (asn1_get_printable_str(cert, offset, &tmp) < 0) + { + free(tmp); + goto end_name; + } + + /* find the distinguished named type */ + for (i = 0; i < X509_NUM_DN_TYPES; i++) + { + if (dn_type == g_dn_types[i]) + { + if (dn[i] == NULL) + { + dn[i] = tmp; + found = 1; + break; + } + } + } + + if (found == 0) /* not found so get rid of it */ + { + free(tmp); + } + } + + ret = X509_OK; +end_name: + return ret; +} + +/** + * Read the modulus and public exponent of a certificate. + */ +int asn1_public_key(const uint8_t *cert, int *offset, X509_CTX *x509_ctx) +{ + int ret = X509_NOT_OK, mod_len, pub_len; + uint8_t *modulus = NULL, *pub_exp = NULL; + + if (asn1_next_obj(cert, offset, ASN1_SEQUENCE) < 0 || + asn1_skip_obj(cert, offset, ASN1_SEQUENCE) || + asn1_next_obj(cert, offset, ASN1_BIT_STRING) < 0) + goto end_pub_key; + + (*offset)++; /* ignore the padding bit field */ + + if (asn1_next_obj(cert, offset, ASN1_SEQUENCE) < 0) + goto end_pub_key; + + mod_len = asn1_get_int(cert, offset, &modulus); + pub_len = asn1_get_int(cert, offset, &pub_exp); + + RSA_pub_key_new(&x509_ctx->rsa_ctx, modulus, mod_len, pub_exp, pub_len); + + free(modulus); + free(pub_exp); + ret = X509_OK; + +end_pub_key: + return ret; +} + +#ifdef CONFIG_SSL_CERT_VERIFICATION +/** + * Read the signature of the certificate. + */ +int asn1_signature(const uint8_t *cert, int *offset, X509_CTX *x509_ctx) +{ + int ret = X509_NOT_OK; + + if (cert[(*offset)++] != ASN1_BIT_STRING) + goto end_sig; + + x509_ctx->sig_len = get_asn1_length(cert, offset)-1; + (*offset)++; /* ignore bit string padding bits */ + x509_ctx->signature = (uint8_t *)malloc(x509_ctx->sig_len); + memcpy(x509_ctx->signature, &cert[*offset], x509_ctx->sig_len); + *offset += x509_ctx->sig_len; + ret = X509_OK; + +end_sig: + return ret; +} + +/* + * Compare 2 distinguished name components for equality + * @return 0 if a match + */ +static int asn1_compare_dn_comp(const char *dn1, const char *dn2) +{ + int ret = 1; + + if ((dn1 && dn2 == NULL) || (dn1 == NULL && dn2)) goto err_no_match; + + ret = (dn1 && dn2) ? strcmp(dn1, dn2) : 0; + +err_no_match: + return ret; +} + +/** + * Clean up all of the CA certificates. + */ +void remove_ca_certs(CA_CERT_CTX *ca_cert_ctx) +{ + int i = 0; + + if (ca_cert_ctx == NULL) + return; + + while (i < CONFIG_X509_MAX_CA_CERTS && ca_cert_ctx->cert[i]) + { + x509_free(ca_cert_ctx->cert[i]); + ca_cert_ctx->cert[i++] = NULL; + } + + free(ca_cert_ctx); +} + +/* + * Compare 2 distinguished names for equality + * @return 0 if a match + */ +int asn1_compare_dn(char * const dn1[], char * const dn2[]) +{ + int i; + + for (i = 0; i < X509_NUM_DN_TYPES; i++) + { + if (asn1_compare_dn_comp(dn1[i], dn2[i])) + return 1; + } + + return 0; /* all good */ +} + +#endif + +/** + * Read the signature type of the certificate. We only support RSA-MD5 and + * RSA-SHA1 signature types. + */ +int asn1_signature_type(const uint8_t *cert, + int *offset, X509_CTX *x509_ctx) +{ + int ret = X509_NOT_OK, len; + + if (cert[(*offset)++] != ASN1_OID) + goto end_check_sig; + + len = get_asn1_length(cert, offset); + + if (len == 5 && memcmp(sig_iis6_oid, &cert[*offset], + SIG_IIS6_OID_SIZE) == 0) + { + x509_ctx->sig_type = SIG_TYPE_SHA1; + } + else + { + if (memcmp(sig_oid_prefix, &cert[*offset], SIG_OID_PREFIX_SIZE)) + goto end_check_sig; /* unrecognised cert type */ + + x509_ctx->sig_type = cert[*offset + SIG_OID_PREFIX_SIZE]; + } + + *offset += len; + asn1_skip_obj(cert, offset, ASN1_NULL); /* if it's there */ + ret = X509_OK; + +end_check_sig: + return ret; +} + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/cert.h b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/cert.h new file mode 100644 index 0000000..7a85d2d --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/cert.h @@ -0,0 +1,43 @@ +unsigned char default_certificate[] = { + 0x30, 0x82, 0x01, 0xd7, 0x30, 0x82, 0x01, 0x40, 0x02, 0x09, 0x00, 0xf1, + 0xc3, 0x87, 0xc0, 0xd4, 0xf4, 0x57, 0xc3, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x34, + 0x31, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x29, 0x61, + 0x78, 0x54, 0x4c, 0x53, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x20, 0x44, 0x6f, 0x64, 0x67, 0x79, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x36, 0x30, 0x36, + 0x30, 0x37, 0x31, 0x31, 0x34, 0x34, 0x33, 0x32, 0x5a, 0x17, 0x0d, 0x33, + 0x33, 0x31, 0x30, 0x32, 0x33, 0x31, 0x31, 0x34, 0x34, 0x33, 0x32, 0x5a, + 0x30, 0x2c, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, + 0x0d, 0x61, 0x78, 0x54, 0x4c, 0x53, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, + 0x09, 0x31, 0x32, 0x37, 0x2e, 0x30, 0x2e, 0x30, 0x2e, 0x31, 0x30, 0x81, + 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, + 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, + 0x81, 0x81, 0x00, 0xd8, 0xe0, 0xbf, 0x15, 0xde, 0xea, 0xaf, 0xe8, 0xd5, + 0xfd, 0x0b, 0xa8, 0xa8, 0xb3, 0xd7, 0x46, 0x5d, 0xa7, 0x26, 0x6c, 0x0c, + 0xb5, 0xd9, 0xbc, 0xc6, 0xf8, 0xc0, 0x78, 0xd0, 0xf6, 0x56, 0x65, 0xf8, + 0x29, 0x48, 0x0e, 0x7b, 0x0b, 0xa6, 0x25, 0x7e, 0xe8, 0x7b, 0x79, 0x6f, + 0x38, 0xe5, 0xb5, 0xb7, 0xf4, 0xe0, 0x9c, 0x91, 0x60, 0xf4, 0x06, 0xf3, + 0x40, 0x1e, 0xf9, 0x91, 0x19, 0xa9, 0x2f, 0x47, 0x43, 0xb5, 0x9b, 0x1e, + 0xdc, 0xf6, 0xaa, 0x1c, 0x49, 0x79, 0x21, 0x28, 0xcb, 0xaa, 0x49, 0x73, + 0xd9, 0x09, 0x05, 0x4c, 0x02, 0xf2, 0x4c, 0x4d, 0x6c, 0x1c, 0x80, 0xa7, + 0x14, 0x91, 0x44, 0xfc, 0x12, 0xb3, 0xe1, 0xe7, 0xe3, 0x4f, 0x44, 0xba, + 0x8c, 0xc3, 0x74, 0x39, 0xe8, 0x4c, 0xd0, 0xd4, 0x4c, 0x24, 0x61, 0xb4, + 0x40, 0x95, 0x8c, 0xc0, 0x0a, 0xb7, 0x02, 0x39, 0x31, 0x85, 0x93, 0x02, + 0x03, 0x01, 0x00, 0x01, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, + 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x0b, + 0x47, 0x24, 0x52, 0x7d, 0xb6, 0x63, 0x78, 0xbc, 0x80, 0xdd, 0x87, 0x6c, + 0x90, 0x4c, 0x33, 0xc3, 0x5c, 0xa7, 0x97, 0x09, 0x1c, 0x09, 0x4f, 0x9b, + 0x6e, 0xb3, 0x5a, 0x3e, 0x46, 0x92, 0x1a, 0xc7, 0x87, 0x15, 0x59, 0xe1, + 0x88, 0x5c, 0xce, 0x6a, 0xe2, 0x96, 0xaa, 0x32, 0xec, 0xc2, 0xed, 0x78, + 0x8b, 0xe0, 0x90, 0x66, 0x93, 0x14, 0xc3, 0x98, 0xab, 0x33, 0x35, 0xd3, + 0x7d, 0x5d, 0x51, 0x0a, 0x9c, 0xb9, 0x10, 0x58, 0x47, 0x7a, 0x98, 0x95, + 0x64, 0xff, 0x4c, 0x5d, 0x82, 0x19, 0xf9, 0xea, 0x0f, 0x5e, 0x9a, 0xcb, + 0x32, 0x27, 0x64, 0xca, 0x6f, 0x58, 0x8a, 0xd0, 0xc0, 0x36, 0xf4, 0xb9, + 0x63, 0x34, 0xa5, 0xda, 0x36, 0x50, 0x36, 0x49, 0xd2, 0xb7, 0x3a, 0x21, + 0x33, 0x5b, 0x3e, 0xd6, 0x5f, 0x0c, 0x99, 0x83, 0xb7, 0xb2, 0xf7, 0x8b, + 0x44, 0xc4, 0x5e, 0x73, 0x41, 0xa9, 0x02 +}; +unsigned int default_certificate_len = 475; diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/crypto_misc.h b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/crypto_misc.h new file mode 100644 index 0000000..97cb0f2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/crypto_misc.h @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** + * @file crypto_misc.h + */ + +#ifndef HEADER_CRYPTO_MISC_H +#define HEADER_CRYPTO_MISC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "crypto.h" +#include "bigint.h" + +/************************************************************************** + * X509 declarations + **************************************************************************/ +#define X509_OK 0 +#define X509_NOT_OK -1 +#define X509_VFY_ERROR_NO_TRUSTED_CERT -2 +#define X509_VFY_ERROR_BAD_SIGNATURE -3 +#define X509_VFY_ERROR_NOT_YET_VALID -4 +#define X509_VFY_ERROR_EXPIRED -5 +#define X509_VFY_ERROR_SELF_SIGNED -6 +#define X509_VFY_ERROR_INVALID_CHAIN -7 +#define X509_VFY_ERROR_UNSUPPORTED_DIGEST -8 +#define X509_INVALID_PRIV_KEY -9 + +/* + * The Distinguished Name + */ +#define X509_NUM_DN_TYPES 3 +#define X509_COMMON_NAME 0 +#define X509_ORGANIZATION 1 +#define X509_ORGANIZATIONAL_UNIT 2 + +struct _x509_ctx +{ + char *ca_cert_dn[X509_NUM_DN_TYPES]; + char *cert_dn[X509_NUM_DN_TYPES]; + time_t not_before; + time_t not_after; + uint8_t *signature; + uint16_t sig_len; + uint8_t sig_type; + RSA_CTX *rsa_ctx; + bigint *digest; + struct _x509_ctx *next; +}; + +typedef struct _x509_ctx X509_CTX; + +#ifdef CONFIG_SSL_CERT_VERIFICATION +typedef struct +{ + X509_CTX *cert[CONFIG_X509_MAX_CA_CERTS]; +} CA_CERT_CTX; +#endif + +int x509_new(const uint8_t *cert, int *len, X509_CTX **ctx); +void x509_free(X509_CTX *x509_ctx); +#ifdef CONFIG_SSL_CERT_VERIFICATION +int x509_verify(const CA_CERT_CTX *ca_cert_ctx, const X509_CTX *cert); +#endif +#ifdef CONFIG_SSL_FULL_MODE +void x509_print(const X509_CTX *cert, CA_CERT_CTX *ca_cert_ctx); +const char * x509_display_error(int error); +#endif + +/************************************************************************** + * ASN1 declarations + **************************************************************************/ +#define ASN1_INTEGER 0x02 +#define ASN1_BIT_STRING 0x03 +#define ASN1_OCTET_STRING 0x04 +#define ASN1_NULL 0x05 +#define ASN1_OID 0x06 +#define ASN1_PRINTABLE_STR 0x13 +#define ASN1_TELETEX_STR 0x14 +#define ASN1_IA5_STR 0x16 +#define ASN1_UTC_TIME 0x17 +#define ASN1_UNICODE_STR 0x1e +#define ASN1_SEQUENCE 0x30 +#define ASN1_SET 0x31 +#define ASN1_IMPLICIT_TAG 0x80 +#define ASN1_EXPLICIT_TAG 0xa0 + +#define SIG_TYPE_MD2 0x02 +#define SIG_TYPE_MD5 0x04 +#define SIG_TYPE_SHA1 0x05 + +int get_asn1_length(const uint8_t *buf, int *offset); +int asn1_get_private_key(const uint8_t *buf, int len, RSA_CTX **rsa_ctx); +int asn1_next_obj(const uint8_t *buf, int *offset, int obj_type); +int asn1_skip_obj(const uint8_t *buf, int *offset, int obj_type); +int asn1_get_int(const uint8_t *buf, int *offset, uint8_t **object); +int asn1_version(const uint8_t *cert, int *offset, X509_CTX *x509_ctx); +int asn1_validity(const uint8_t *cert, int *offset, X509_CTX *x509_ctx); +int asn1_name(const uint8_t *cert, int *offset, char *dn[]); +int asn1_public_key(const uint8_t *cert, int *offset, X509_CTX *x509_ctx); +#ifdef CONFIG_SSL_CERT_VERIFICATION +int asn1_signature(const uint8_t *cert, int *offset, X509_CTX *x509_ctx); +int asn1_compare_dn(char * const dn1[], char * const dn2[]); +#endif +int asn1_signature_type(const uint8_t *cert, + int *offset, X509_CTX *x509_ctx); + +/************************************************************************** + * MISC declarations + **************************************************************************/ +#define SALT_SIZE 8 + +extern const char * const unsupported_str; + +typedef void (*crypt_func)(void *, const uint8_t *, uint8_t *, int); +typedef void (*hmac_func)(const uint8_t *msg, int length, const uint8_t *key, + int key_len, uint8_t *digest); + +int get_file(const char *filename, uint8_t **buf); + +#if defined(CONFIG_SSL_FULL_MODE) || defined(WIN32) || defined(CONFIG_DEBUG) +EXP_FUNC void STDCALL print_blob(const char *format, const uint8_t *data, int size, ...); +#else + #define print_blob(...) +#endif + +EXP_FUNC int STDCALL base64_decode(const char *in, int len, + uint8_t *out, int *outlen); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/gen_cert.c b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/gen_cert.c new file mode 100644 index 0000000..94b7490 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/gen_cert.c @@ -0,0 +1,363 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" + +#ifdef CONFIG_SSL_GENERATE_X509_CERT +#include +#include +#include "ssl.h" + +/** + * Generate a basic X.509 certificate + */ + +static uint8_t set_gen_length(int len, uint8_t *buf, int *offset) +{ + if (len < 0x80) /* short form */ + { + buf[(*offset)++] = len; + return 1; + } + else /* long form */ + { + int i, length_bytes = 0; + + if (len & 0x00FF0000) + length_bytes = 3; + else if (len & 0x0000FF00) + length_bytes = 2; + else if (len & 0x000000FF) + length_bytes = 1; + + buf[(*offset)++] = 0x80 + length_bytes; + + for (i = length_bytes-1; i >= 0; i--) + { + buf[*offset+i] = len & 0xFF; + len >>= 8; + } + + *offset += length_bytes; + return length_bytes+1; + } +} + +static int pre_adjust_with_size(uint8_t type, + int *seq_offset, uint8_t *buf, int *offset) +{ + buf[(*offset)++] = type; + *seq_offset = *offset; + *offset += 4; /* fill in later */ + return *offset; +} + +static void adjust_with_size(int seq_size, int seq_start, + uint8_t *buf, int *offset) +{ + uint8_t seq_byte_size; + int orig_seq_size = seq_size; + int orig_seq_start = seq_start; + + seq_size = *offset-seq_size; + seq_byte_size = set_gen_length(seq_size, buf, &seq_start); + + if (seq_byte_size != 4) + { + memmove(&buf[orig_seq_start+seq_byte_size], + &buf[orig_seq_size], seq_size); + *offset -= 4-seq_byte_size; + } +} + +static void gen_serial_number(uint8_t *buf, int *offset) +{ + static const uint8_t ser_oid[] = { ASN1_INTEGER, 1, 0x7F }; + memcpy(&buf[*offset], ser_oid , sizeof(ser_oid)); + *offset += sizeof(ser_oid); +} + +static void gen_signature_alg(uint8_t *buf, int *offset) +{ + /* OBJECT IDENTIFIER sha1withRSAEncryption (1 2 840 113549 1 1 5) */ + static const uint8_t sig_oid[] = + { + ASN1_SEQUENCE, 0x0d, ASN1_OID, 0x09, + 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, + ASN1_NULL, 0x00 + }; + + memcpy(&buf[*offset], sig_oid, sizeof(sig_oid)); + *offset += sizeof(sig_oid); +} + +static int gen_dn(const char *name, uint8_t dn_type, + uint8_t *buf, int *offset) +{ + int ret = X509_OK; + int name_size = strlen(name); + + if (name_size > 0x70) /* just too big */ + { + ret = X509_NOT_OK; + goto error; + } + + buf[(*offset)++] = ASN1_SET; + set_gen_length(9+name_size, buf, offset); + buf[(*offset)++] = ASN1_SEQUENCE; + set_gen_length(7+name_size, buf, offset); + buf[(*offset)++] = ASN1_OID; + buf[(*offset)++] = 3; + buf[(*offset)++] = 0x55; + buf[(*offset)++] = 0x04; + buf[(*offset)++] = dn_type; + buf[(*offset)++] = ASN1_PRINTABLE_STR; + buf[(*offset)++] = name_size; + strcpy(&buf[*offset], name); + *offset += name_size; + +error: + return ret; +} + +static int gen_issuer(const char * dn[], uint8_t *buf, int *offset) +{ + int ret = X509_OK; + int seq_offset; + int seq_size = pre_adjust_with_size( + ASN1_SEQUENCE, &seq_offset, buf, offset); + char fqdn[128]; + + /* we need the common name, so if not configured, work out the fully + * qualified domain name */ + if (dn[X509_COMMON_NAME] == NULL || strlen(dn[X509_COMMON_NAME]) == 0) + { + int fqdn_len; + gethostname(fqdn, sizeof(fqdn)); + fqdn_len = strlen(fqdn); + fqdn[fqdn_len++] = '.'; + getdomainname(&fqdn[fqdn_len], sizeof(fqdn)-fqdn_len); + fqdn_len = strlen(fqdn); + + if (fqdn[fqdn_len-1] == '.') /* ensure '.' is not last char */ + fqdn[fqdn_len-1] = 0; + + dn[X509_COMMON_NAME] = fqdn; + } + + if ((ret = gen_dn(dn[X509_COMMON_NAME], 3, buf, offset))) + goto error; + + if (dn[X509_ORGANIZATION] != NULL && strlen(dn[X509_ORGANIZATION]) > 0) + { + if ((ret = gen_dn(dn[X509_ORGANIZATION], 10, buf, offset))) + goto error; + } + + if (dn[X509_ORGANIZATIONAL_UNIT] != NULL && + strlen(dn[X509_ORGANIZATIONAL_UNIT]) > 0) + { + if ((ret = gen_dn(dn[X509_ORGANIZATIONAL_UNIT], 11, buf, offset))) + goto error; + } + + adjust_with_size(seq_size, seq_offset, buf, offset); + +error: + return ret; +} + +static void gen_utc_time(uint8_t *buf, int *offset) +{ + static const uint8_t time_seq[] = + { + ASN1_SEQUENCE, 30, + ASN1_UTC_TIME, 13, + '0', '7', '0', '1', '0', '1', '0', '0', '0', '0', '0', '0', 'Z', + ASN1_UTC_TIME, 13, /* make it good for 30 or so years */ + '3', '8', '0', '1', '0', '1', '0', '0', '0', '0', '0', '0', 'Z' + }; + + /* fixed time */ + memcpy(&buf[*offset], time_seq, sizeof(time_seq)); + *offset += sizeof(time_seq); +} + +static void gen_pub_key2(const RSA_CTX *rsa_ctx, uint8_t *buf, int *offset) +{ + static const uint8_t pub_key_seq[] = + { + ASN1_INTEGER, 0x03, 0x01, 0x00, 0x01 /* INTEGER 65537 */ + }; + + int seq_offset; + int pub_key_size = rsa_ctx->num_octets; + uint8_t *block = (uint8_t *)alloca(pub_key_size); + int seq_size = pre_adjust_with_size( + ASN1_SEQUENCE, &seq_offset, buf, offset); + buf[(*offset)++] = ASN1_INTEGER; + bi_export(rsa_ctx->bi_ctx, rsa_ctx->m, block, pub_key_size); + + if (*block & 0x80) /* make integer positive */ + { + set_gen_length(pub_key_size+1, buf, offset); + buf[(*offset)++] = 0; + } + else + set_gen_length(pub_key_size, buf, offset); + + memcpy(&buf[*offset], block, pub_key_size); + *offset += pub_key_size; + memcpy(&buf[*offset], pub_key_seq, sizeof(pub_key_seq)); + *offset += sizeof(pub_key_seq); + adjust_with_size(seq_size, seq_offset, buf, offset); +} + +static void gen_pub_key1(const RSA_CTX *rsa_ctx, uint8_t *buf, int *offset) +{ + int seq_offset; + int seq_size = pre_adjust_with_size( + ASN1_BIT_STRING, &seq_offset, buf, offset); + buf[(*offset)++] = 0; /* bit string is multiple of 8 */ + gen_pub_key2(rsa_ctx, buf, offset); + adjust_with_size(seq_size, seq_offset, buf, offset); +} + +static void gen_pub_key(const RSA_CTX *rsa_ctx, uint8_t *buf, int *offset) +{ + /* OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1) */ + static const uint8_t rsa_enc_oid[] = + { + ASN1_SEQUENCE, 0x0d, ASN1_OID, 0x09, + 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, + ASN1_NULL, 0x00 + }; + + int seq_offset; + int seq_size = pre_adjust_with_size( + ASN1_SEQUENCE, &seq_offset, buf, offset); + + memcpy(&buf[*offset], rsa_enc_oid, sizeof(rsa_enc_oid)); + *offset += sizeof(rsa_enc_oid); + gen_pub_key1(rsa_ctx, buf, offset); + adjust_with_size(seq_size, seq_offset, buf, offset); +} + +static void gen_signature(const RSA_CTX *rsa_ctx, const uint8_t *sha_dgst, + uint8_t *buf, int *offset) +{ + static const uint8_t asn1_sig[] = + { + ASN1_SEQUENCE, 0x21, ASN1_SEQUENCE, 0x09, ASN1_OID, 0x05, + 0x2b, 0x0e, 0x03, 0x02, 0x1a, /* sha1 (1 3 14 3 2 26) */ + ASN1_NULL, 0x00, ASN1_OCTET_STRING, 0x14 + }; + + uint8_t *enc_block = (uint8_t *)alloca(rsa_ctx->num_octets); + uint8_t *block = (uint8_t *)alloca(sizeof(asn1_sig) + SHA1_SIZE); + int sig_size; + + /* add the digest as an embedded asn.1 sequence */ + memcpy(block, asn1_sig, sizeof(asn1_sig)); + memcpy(&block[sizeof(asn1_sig)], sha_dgst, SHA1_SIZE); + + sig_size = RSA_encrypt(rsa_ctx, block, + sizeof(asn1_sig) + SHA1_SIZE, enc_block, 1); + + buf[(*offset)++] = ASN1_BIT_STRING; + set_gen_length(sig_size+1, buf, offset); + buf[(*offset)++] = 0; /* bit string is multiple of 8 */ + memcpy(&buf[*offset], enc_block, sig_size); + *offset += sig_size; +} + +static int gen_tbs_cert(const char * dn[], + const RSA_CTX *rsa_ctx, uint8_t *buf, int *offset, + uint8_t *sha_dgst) +{ + int ret = X509_OK; + SHA1_CTX sha_ctx; + int seq_offset; + int begin_tbs = *offset; + int seq_size = pre_adjust_with_size( + ASN1_SEQUENCE, &seq_offset, buf, offset); + + gen_serial_number(buf, offset); + gen_signature_alg(buf, offset); + + /* CA certicate issuer */ + if ((ret = gen_issuer(dn, buf, offset))) + goto error; + + gen_utc_time(buf, offset); + + /* certificate issuer */ + if ((ret = gen_issuer(dn, buf, offset))) + goto error; + + gen_pub_key(rsa_ctx, buf, offset); + adjust_with_size(seq_size, seq_offset, buf, offset); + + SHA1_Init(&sha_ctx); + SHA1_Update(&sha_ctx, &buf[begin_tbs], *offset-begin_tbs); + SHA1_Final(sha_dgst, &sha_ctx); + +error: + return ret; +} + +/** + * Create a new certificate. + */ +EXP_FUNC int STDCALL ssl_x509_create(SSL_CTX *ssl_ctx, uint32_t options, const char * dn[], uint8_t **cert_data) +{ + int ret = X509_OK, offset = 0, seq_offset; + /* allocate enough space to load a new certificate */ + uint8_t *buf = (uint8_t *)alloca(ssl_ctx->rsa_ctx->num_octets*2 + 512); + uint8_t sha_dgst[SHA1_SIZE]; + int seq_size = pre_adjust_with_size(ASN1_SEQUENCE, + &seq_offset, buf, &offset); + + if ((ret = gen_tbs_cert(dn, ssl_ctx->rsa_ctx, buf, &offset, sha_dgst)) < 0) + goto error; + + gen_signature_alg(buf, &offset); + gen_signature(ssl_ctx->rsa_ctx, sha_dgst, buf, &offset); + adjust_with_size(seq_size, seq_offset, buf, &offset); + *cert_data = (uint8_t *)malloc(offset); /* create the exact memory for it */ + memcpy(*cert_data, buf, offset); + +error: + return ret < 0 ? ret : offset; +} + +#endif + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/loader.c b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/loader.c new file mode 100644 index 0000000..4232f7e --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/loader.c @@ -0,0 +1,465 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Load certificates/keys into memory. These can be in many different formats. + * PEM support and other formats can be processed here. + * + * The PEM private keys may be optionally encrypted with AES128 or AES256. + * The encrypted PEM keys were generated with something like: + * + * openssl genrsa -aes128 -passout pass:abcd -out axTLS.key_aes128.pem 512 + */ + +#include +#include +#include + +#include "ssl.h" + +static int do_obj(SSL_CTX *ssl_ctx, int obj_type, + SSLObjLoader *ssl_obj, const char *password); +#ifdef CONFIG_SSL_HAS_PEM +static int ssl_obj_PEM_load(SSL_CTX *ssl_ctx, int obj_type, + SSLObjLoader *ssl_obj, const char *password); +#endif + +/* + * Load a file into memory that is in binary DER (or ascii PEM) format. + */ +EXP_FUNC int STDCALL ssl_obj_load(SSL_CTX *ssl_ctx, int obj_type, + const char *filename, const char *password) +{ +#ifndef CONFIG_SSL_SKELETON_MODE + static const char * const begin = "-----BEGIN"; + int ret = SSL_OK; + SSLObjLoader *ssl_obj = NULL; + + if (filename == NULL) + { + ret = SSL_ERROR_INVALID_KEY; + goto error; + } + + ssl_obj = (SSLObjLoader *)calloc(1, sizeof(SSLObjLoader)); + ssl_obj->len = get_file(filename, &ssl_obj->buf); + if (ssl_obj->len <= 0) + { + ret = SSL_ERROR_INVALID_KEY; + goto error; + } + + /* is the file a PEM file? */ + if (strncmp((char *)ssl_obj->buf, begin, strlen(begin)) == 0) + { +#ifdef CONFIG_SSL_HAS_PEM + ret = ssl_obj_PEM_load(ssl_ctx, obj_type, ssl_obj, password); +#else + printf(unsupported_str); + ret = SSL_ERROR_NOT_SUPPORTED; +#endif + } + else + ret = do_obj(ssl_ctx, obj_type, ssl_obj, password); + +error: + ssl_obj_free(ssl_obj); + return ret; +#else + printf(unsupported_str); + return SSL_ERROR_NOT_SUPPORTED; +#endif /* CONFIG_SSL_SKELETON_MODE */ +} + +/* + * Transfer binary data into the object loader. + */ +EXP_FUNC int STDCALL ssl_obj_memory_load(SSL_CTX *ssl_ctx, int mem_type, + const uint8_t *data, int len, const char *password) +{ + int ret; + SSLObjLoader *ssl_obj; + + ssl_obj = (SSLObjLoader *)calloc(1, sizeof(SSLObjLoader)); + ssl_obj->buf = (uint8_t *)malloc(len); + memcpy(ssl_obj->buf, data, len); + ssl_obj->len = len; + ret = do_obj(ssl_ctx, mem_type, ssl_obj, password); + ssl_obj_free(ssl_obj); + return ret; +} + +/* + * Actually work out what we are doing + */ +static int do_obj(SSL_CTX *ssl_ctx, int obj_type, + SSLObjLoader *ssl_obj, const char *password) +{ + int ret = SSL_OK; + + switch (obj_type) + { + case SSL_OBJ_RSA_KEY: + ret = add_private_key(ssl_ctx, ssl_obj); + break; + + case SSL_OBJ_X509_CERT: + ret = add_cert(ssl_ctx, ssl_obj->buf, ssl_obj->len); + break; + +#ifdef CONFIG_SSL_CERT_VERIFICATION + case SSL_OBJ_X509_CACERT: + ret = add_cert_auth(ssl_ctx, ssl_obj->buf, ssl_obj->len); + break; +#endif + +#ifdef CONFIG_SSL_USE_PKCS12 + case SSL_OBJ_PKCS8: + ret = pkcs8_decode(ssl_ctx, ssl_obj, password); + break; + + case SSL_OBJ_PKCS12: + ret = pkcs12_decode(ssl_ctx, ssl_obj, password); + break; +#endif + default: + printf(unsupported_str); + ret = SSL_ERROR_NOT_SUPPORTED; + break; + } + + return ret; +} + +/* + * Clean up our mess. + */ +void ssl_obj_free(SSLObjLoader *ssl_obj) +{ + if (ssl_obj) + { + free(ssl_obj->buf); + free(ssl_obj); + } +} + +/* + * Support for PEM encoded keys/certificates. + */ +#ifdef CONFIG_SSL_HAS_PEM + +#define NUM_PEM_TYPES 3 +#define IV_SIZE 16 +#define IS_RSA_PRIVATE_KEY 0 +#define IS_ENCRYPTED_PRIVATE_KEY 1 +#define IS_CERTIFICATE 2 + +static const char * const begins[NUM_PEM_TYPES] = +{ + "-----BEGIN RSA PRIVATE KEY-----", + "-----BEGIN ENCRYPTED PRIVATE KEY-----", + "-----BEGIN CERTIFICATE-----", +}; + +static const char * const ends[NUM_PEM_TYPES] = +{ + "-----END RSA PRIVATE KEY-----", + "-----END ENCRYPTED PRIVATE KEY-----", + "-----END CERTIFICATE-----", +}; + +static const char * const aes_str[2] = +{ + "DEK-Info: AES-128-CBC,", + "DEK-Info: AES-256-CBC," +}; + +/** + * Take a base64 blob of data and decrypt it (using AES) into its + * proper ASN.1 form. + */ +static int pem_decrypt(const char *where, const char *end, + const char *password, SSLObjLoader *ssl_obj) +{ + int ret = -1; + int is_aes_256 = 0; + char *start = NULL; + uint8_t iv[IV_SIZE]; + int i, pem_size; + MD5_CTX md5_ctx; + AES_CTX aes_ctx; + uint8_t key[32]; /* AES256 size */ + + if (password == NULL || strlen(password) == 0) + { +#ifdef CONFIG_SSL_FULL_MODE + printf("Error: Need a password for this PEM file\n"); TTY_FLUSH(); +#endif + goto error; + } + + if ((start = strstr((const char *)where, aes_str[0]))) /* AES128? */ + { + start += strlen(aes_str[0]); + } + else if ((start = strstr((const char *)where, aes_str[1]))) /* AES256? */ + { + is_aes_256 = 1; + start += strlen(aes_str[1]); + } + else + { +#ifdef CONFIG_SSL_FULL_MODE + printf("Error: Unsupported password cipher\n"); TTY_FLUSH(); +#endif + goto error; + } + + /* convert from hex to binary - assumes uppercase hex */ + for (i = 0; i < IV_SIZE; i++) + { + char c = *start++ - '0'; + iv[i] = (c > 9 ? c + '0' - 'A' + 10 : c) << 4; + c = *start++ - '0'; + iv[i] += (c > 9 ? c + '0' - 'A' + 10 : c); + } + + while (*start == '\r' || *start == '\n') + start++; + + /* turn base64 into binary */ + pem_size = (int)(end-start); + if (base64_decode(start, pem_size, ssl_obj->buf, &ssl_obj->len) != 0) + goto error; + + /* work out the key */ + MD5_Init(&md5_ctx); + MD5_Update(&md5_ctx, (const uint8_t *)password, strlen(password)); + MD5_Update(&md5_ctx, iv, SALT_SIZE); + MD5_Final(key, &md5_ctx); + + if (is_aes_256) + { + MD5_Init(&md5_ctx); + MD5_Update(&md5_ctx, key, MD5_SIZE); + MD5_Update(&md5_ctx, (const uint8_t *)password, strlen(password)); + MD5_Update(&md5_ctx, iv, SALT_SIZE); + MD5_Final(&key[MD5_SIZE], &md5_ctx); + } + + /* decrypt using the key/iv */ + AES_set_key(&aes_ctx, key, iv, is_aes_256 ? AES_MODE_256 : AES_MODE_128); + AES_convert_key(&aes_ctx); + AES_cbc_decrypt(&aes_ctx, ssl_obj->buf, ssl_obj->buf, ssl_obj->len); + ret = 0; + +error: + return ret; +} + +/** + * Take a base64 blob of data and turn it into its proper ASN.1 form. + */ +static int new_pem_obj(SSL_CTX *ssl_ctx, int is_cacert, char *where, + int remain, const char *password) +{ + int ret = SSL_OK; + SSLObjLoader *ssl_obj = NULL; + int i, pem_size, obj_type; + char *start = NULL, *end = NULL; + + for (i = 0; i < NUM_PEM_TYPES; i++) + { + if ((start = strstr(where, begins[i])) && + (end = strstr(where, ends[i]))) + { + remain -= (int)(end-start); + start += strlen(begins[i]); + pem_size = (int)(end-start); + + ssl_obj = (SSLObjLoader *)calloc(1, sizeof(SSLObjLoader)); + + /* 4/3 bigger than what we need but so what */ + ssl_obj->buf = (uint8_t *)calloc(1, pem_size); + + if (i == IS_RSA_PRIVATE_KEY && + strstr(start, "Proc-Type:") && + strstr(start, "4,ENCRYPTED")) + { + /* check for encrypted PEM file */ + if (pem_decrypt(start, end, password, ssl_obj) < 0) + goto error; + } + else if (base64_decode(start, pem_size, + ssl_obj->buf, &ssl_obj->len) != 0) + goto error; + + switch (i) + { + case IS_RSA_PRIVATE_KEY: + obj_type = SSL_OBJ_RSA_KEY; + break; + + case IS_ENCRYPTED_PRIVATE_KEY: + obj_type = SSL_OBJ_PKCS8; + break; + + case IS_CERTIFICATE: + obj_type = is_cacert ? + SSL_OBJ_X509_CACERT : SSL_OBJ_X509_CERT; + break; + + default: + goto error; + } + + /* In a format we can now understand - so process it */ + if ((ret = do_obj(ssl_ctx, obj_type, ssl_obj, password))) + goto error; + + end += strlen(ends[i]); + remain -= strlen(ends[i]); + while (remain > 0 && (*end == '\r' || *end == '\n')) + { + end++; + remain--; + } + + break; + } + } + + if (i == NUM_PEM_TYPES) + goto error; + + /* more PEM stuff to process? */ + if (remain) + ret = new_pem_obj(ssl_ctx, is_cacert, end, remain, password); + +error: + ssl_obj_free(ssl_obj); + return ret; +} + +/* + * Load a file into memory that is in ASCII PEM format. + */ +static int ssl_obj_PEM_load(SSL_CTX *ssl_ctx, int obj_type, + SSLObjLoader *ssl_obj, const char *password) +{ + char *start; + + /* add a null terminator */ + ssl_obj->len++; + ssl_obj->buf = (uint8_t *)realloc(ssl_obj->buf, ssl_obj->len); + ssl_obj->buf[ssl_obj->len-1] = 0; + start = (char *)ssl_obj->buf; + return new_pem_obj(ssl_ctx, obj_type == SSL_OBJ_X509_CACERT, + start, ssl_obj->len, password); +} +#endif /* CONFIG_SSL_HAS_PEM */ + +/** + * Load the key/certificates in memory depending on compile-time and user + * options. + */ +int load_key_certs(SSL_CTX *ssl_ctx) +{ + int ret = SSL_OK; + uint32_t options = ssl_ctx->options; +#ifdef CONFIG_SSL_GENERATE_X509_CERT + uint8_t *cert_data = NULL; + int cert_size; + static const char *dn[] = + { + CONFIG_SSL_X509_COMMON_NAME, + CONFIG_SSL_X509_ORGANIZATION_NAME, + CONFIG_SSL_X509_ORGANIZATION_UNIT_NAME + }; +#endif + + /* do the private key first */ + if (strlen(CONFIG_SSL_PRIVATE_KEY_LOCATION) > 0) + { + if ((ret = ssl_obj_load(ssl_ctx, SSL_OBJ_RSA_KEY, + CONFIG_SSL_PRIVATE_KEY_LOCATION, + CONFIG_SSL_PRIVATE_KEY_PASSWORD)) < 0) + goto error; + } + else if (!(options & SSL_NO_DEFAULT_KEY)) + { +#if defined(CONFIG_SSL_USE_DEFAULT_KEY) || defined(CONFIG_SSL_SKELETON_MODE) + static const /* saves a few more bytes */ +#include "private_key.h" + + ssl_obj_memory_load(ssl_ctx, SSL_OBJ_RSA_KEY, default_private_key, + default_private_key_len, NULL); +#endif + } + + /* now load the certificate */ +#ifdef CONFIG_SSL_GENERATE_X509_CERT + if ((cert_size = ssl_x509_create(ssl_ctx, 0, dn, &cert_data)) < 0) + { + ret = cert_size; + goto error; + } + + ssl_obj_memory_load(ssl_ctx, SSL_OBJ_X509_CERT, cert_data, cert_size, NULL); + free(cert_data); +#else + if (strlen(CONFIG_SSL_X509_CERT_LOCATION)) + { + if ((ret = ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CERT, + CONFIG_SSL_X509_CERT_LOCATION, NULL)) < 0) + goto error; + } + else if (!(options & SSL_NO_DEFAULT_KEY)) + { +#if defined(CONFIG_SSL_USE_DEFAULT_KEY) || defined(CONFIG_SSL_SKELETON_MODE) + static const /* saves a few bytes and RAM */ +#include "cert.h" + ssl_obj_memory_load(ssl_ctx, SSL_OBJ_X509_CERT, + default_certificate, default_certificate_len, NULL); +#endif + } +#endif + +error: +#ifdef CONFIG_SSL_FULL_MODE + if (ret) + { + printf("Error: Certificate or key not loaded\n"); TTY_FLUSH(); + } +#endif + + return ret; + +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/openssl.c b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/openssl.c new file mode 100644 index 0000000..b6b9550 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/openssl.c @@ -0,0 +1,322 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Enable a subset of openssl compatible functions. We don't aim to be 100% + * compatible - just to be able to do basic ports etc. + * + * Only really tested on mini_httpd, so I'm not too sure how extensive this + * port is. + */ + +#include "config.h" + +#ifdef CONFIG_OPENSSL_COMPATIBLE +#include +#include +#include +#include "ssl.h" + +#define OPENSSL_CTX_ATTR ((OPENSSL_CTX *)ssl_ctx->bonus_attr) + +static char *key_password = NULL; + +void *SSLv23_server_method(void) { return NULL; } +void *SSLv3_server_method(void) { return NULL; } +void *TLSv1_server_method(void) { return NULL; } +void *SSLv23_client_method(void) { return NULL; } +void *SSLv3_client_method(void) { return NULL; } +void *TLSv1_client_method(void) { return NULL; } + +typedef void * (*ssl_func_type_t)(void); +typedef void * (*bio_func_type_t)(void); + +typedef struct +{ + ssl_func_type_t ssl_func_type; +} OPENSSL_CTX; + +SSL_CTX * SSL_CTX_new(ssl_func_type_t meth) +{ + SSL_CTX *ssl_ctx = ssl_ctx_new(0, 5); + ssl_ctx->bonus_attr = malloc(sizeof(OPENSSL_CTX)); + OPENSSL_CTX_ATTR->ssl_func_type = meth; + return ssl_ctx; +} + +void SSL_CTX_free(SSL_CTX * ssl_ctx) +{ + free(ssl_ctx->bonus_attr); + ssl_ctx_free(ssl_ctx); +} + +SSL * SSL_new(SSL_CTX *ssl_ctx) +{ + SSL *ssl; + ssl_func_type_t ssl_func_type; + + ssl = ssl_new(ssl_ctx, -1); /* fd is set later */ + ssl_func_type = OPENSSL_CTX_ATTR->ssl_func_type; + +#ifdef CONFIG_SSL_ENABLE_CLIENT + if (ssl_func_type == SSLv23_client_method || + ssl_func_type == SSLv3_client_method || + ssl_func_type == TLSv1_client_method) + { + SET_SSL_FLAG(SSL_IS_CLIENT); + } + else +#endif + { + ssl->next_state = HS_CLIENT_HELLO; + } + + return ssl; +} + +int SSL_set_fd(SSL *s, int fd) +{ + s->client_fd = fd; + return 1; /* always succeeds */ +} + +int SSL_accept(SSL *ssl) +{ + while (ssl_read(ssl, NULL) == SSL_OK) + { + if (ssl->next_state == HS_CLIENT_HELLO) + return 1; /* we're done */ + } + + return -1; +} + +#ifdef CONFIG_SSL_ENABLE_CLIENT +int SSL_connect(SSL *ssl) +{ + return do_client_connect(ssl) == SSL_OK ? 1 : -1; +} +#endif + +void SSL_free(SSL *ssl) +{ + ssl_free(ssl); +} + +int SSL_read(SSL *ssl, void *buf, int num) +{ + uint8_t *read_buf; + int ret; + + while ((ret = ssl_read(ssl, &read_buf)) == SSL_OK); + + if (ret > SSL_OK) + { + memcpy(buf, read_buf, ret > num ? num : ret); + } + + return ret; +} + +int SSL_write(SSL *ssl, const void *buf, int num) +{ + return ssl_write(ssl, buf, num); +} + +int SSL_CTX_use_certificate_file(SSL_CTX *ssl_ctx, const char *file, int type) +{ + return (ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CERT, file, NULL) == SSL_OK); +} + +int SSL_CTX_use_PrivateKey_file(SSL_CTX *ssl_ctx, const char *file, int type) +{ + return (ssl_obj_load(ssl_ctx, SSL_OBJ_RSA_KEY, file, key_password) == SSL_OK); +} + +int SSL_CTX_use_certificate_ASN1(SSL_CTX *ssl_ctx, int len, const uint8_t *d) +{ + return (ssl_obj_memory_load(ssl_ctx, + SSL_OBJ_X509_CERT, d, len, NULL) == SSL_OK); +} + +int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, + unsigned int sid_ctx_len) +{ + return 1; +} + +int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx) +{ + return 1; +} + +int SSL_CTX_use_certificate_chain_file(SSL_CTX *ssl_ctx, const char *file) +{ + return (ssl_obj_load(ssl_ctx, + SSL_OBJ_X509_CERT, file, NULL) == SSL_OK); +} + +int SSL_shutdown(SSL *ssl) +{ + return 1; +} + +/*** get/set session ***/ +SSL_SESSION *SSL_get1_session(SSL *ssl) +{ + return (SSL_SESSION *)ssl_get_session_id(ssl); /* note: wrong cast */ +} + +int SSL_set_session(SSL *ssl, SSL_SESSION *session) +{ + memcpy(ssl->session_id, (uint8_t *)session, SSL_SESSION_ID_SIZE); + return 1; +} + +void SSL_SESSION_free(SSL_SESSION *session) { } +/*** end get/set session ***/ + +long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) +{ + return 0; +} + +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, + int (*verify_callback)(int, void *)) { } + +void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth) { } + +int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, + const char *CApath) +{ + return 1; +} + +void *SSL_load_client_CA_file(const char *file) +{ + return (void *)file; +} + +void SSL_CTX_set_client_CA_list(SSL_CTX *ssl_ctx, void *file) +{ + + ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CERT, (const char *)file, NULL); +} + +void SSLv23_method(void) { } + +void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, void *cb) { } + +void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u) +{ + key_password = (char *)u; +} + +int SSL_peek(SSL *ssl, void *buf, int num) +{ + memcpy(buf, ssl->bm_data, num); + return num; +} + +void SSL_set_bio(SSL *ssl, void *rbio, void *wbio) { } + +long SSL_get_verify_result(const SSL *ssl) +{ + return ssl_handshake_status(ssl); +} + +int SSL_state(SSL *ssl) +{ + return 0x03; // ok state +} + +/** end of could do better list */ + +void *SSL_get_peer_certificate(const SSL *ssl) +{ + return &ssl->ssl_ctx->certs[0]; +} + +int SSL_clear(SSL *ssl) +{ + return 1; +} + + +int SSL_CTX_check_private_key(const SSL_CTX *ctx) +{ + return 1; +} + +int SSL_CTX_set_cipher_list(SSL *s, const char *str) +{ + return 1; +} + +int SSL_get_error(const SSL *ssl, int ret) +{ + ssl_display_error(ret); + return 0; /* TODO: return proper return code */ +} + +void SSL_CTX_set_options(SSL_CTX *ssl_ctx, int option) {} +int SSL_library_init(void ) { return 1; } +void SSL_load_error_strings(void ) {} +void ERR_print_errors_fp(FILE *fp) {} + +#ifndef CONFIG_SSL_SKELETON_MODE +long SSL_CTX_get_timeout(const SSL_CTX *ssl_ctx) { + return CONFIG_SSL_EXPIRY_TIME*3600; } +long SSL_CTX_set_timeout(SSL_CTX *ssl_ctx, long t) { + return SSL_CTX_get_timeout(ssl_ctx); } +#endif +void BIO_printf(FILE *f, const char *format, ...) +{ + va_list(ap); + va_start(ap, format); + vfprintf(f, format, ap); + va_end(ap); +} + +void* BIO_s_null(void) { return NULL; } +FILE *BIO_new(bio_func_type_t func) +{ + if (func == BIO_s_null) + return fopen("/dev/null", "r"); + else + return NULL; +} + +FILE *BIO_new_fp(FILE *stream, int close_flag) { return stream; } +int BIO_free(FILE *a) { if (a != stdout && a != stderr) fclose(a); return 1; } + + + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/os_port.c b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/os_port.c new file mode 100644 index 0000000..6a71000 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/os_port.c @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file os_port.c + * + * OS specific functions. + */ +#include +#include +#include +#include +#include "os_port.h" + +#ifdef WIN32 +/** + * gettimeofday() not in Win32 + */ +EXP_FUNC void STDCALL gettimeofday(struct timeval* t, void* timezone) +{ +#if defined(_WIN32_WCE) + t->tv_sec = time(NULL); + t->tv_usec = 0; /* 1sec precision only */ +#else + struct _timeb timebuffer; + _ftime(&timebuffer); + t->tv_sec = (long)timebuffer.time; + t->tv_usec = 1000 * timebuffer.millitm; /* 1ms precision */ +#endif +} + +/** + * strcasecmp() not in Win32 + */ +EXP_FUNC int STDCALL strcasecmp(const char *s1, const char *s2) +{ + while (tolower(*s1) == tolower(*s2++)) + { + if (*s1++ == '\0') + { + return 0; + } + } + + return *(unsigned char *)s1 - *(unsigned char *)(s2 - 1); +} + + +EXP_FUNC int STDCALL getdomainname(char *buf, int buf_size) +{ + HKEY hKey; + unsigned long datatype; + unsigned long bufferlength = buf_size; + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, + TEXT("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters"), + 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS) + return -1; + + RegQueryValueEx(hKey, "Domain", NULL, &datatype, buf, &bufferlength); + RegCloseKey(hKey); + return 0; +} +#endif + +#undef malloc +#undef realloc +#undef calloc + +static const char * out_of_mem_str = "out of memory"; +static const char * file_open_str = "Could not open file \"%s\""; + +/* + * Some functions that call display some error trace and then call abort(). + * This just makes life much easier on embedded systems, since we're + * suffering major trauma... + */ +EXP_FUNC void * STDCALL ax_malloc(size_t s) +{ + void *x; + + if ((x = malloc(s)) == NULL) + exit_now(out_of_mem_str); + + return x; +} + +EXP_FUNC void * STDCALL ax_realloc(void *y, size_t s) +{ + void *x; + + if ((x = realloc(y, s)) == NULL) + exit_now(out_of_mem_str); + + return x; +} + +EXP_FUNC void * STDCALL ax_calloc(size_t n, size_t s) +{ + void *x; + + if ((x = calloc(n, s)) == NULL) + exit_now(out_of_mem_str); + + return x; +} + +EXP_FUNC int STDCALL ax_open(const char *pathname, int flags) +{ + int x; + + if ((x = open(pathname, flags)) < 0) + exit_now(file_open_str, pathname); + + return x; +} + +/** + * This is a call which will deliberately exit an application, but will + * display some information before dying. + */ +void exit_now(const char *format, ...) +{ + va_list argp; + + va_start(argp, format); + vfprintf(stderr, format, argp); + va_end(argp); + abort(); +} + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/os_port.h b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/os_port.h new file mode 100644 index 0000000..262c4dd --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/os_port.h @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file os_port.h + * + * Some stuff to minimise the differences between windows and linux/unix + */ + +#ifndef HEADER_OS_PORT_H +#define HEADER_OS_PORT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#if defined(WIN32) +#define STDCALL __stdcall +#define EXP_FUNC __declspec(dllexport) +#else +#define STDCALL +#define EXP_FUNC +#endif + +#if defined(_WIN32_WCE) +#undef WIN32 +#define WIN32 +#endif + +#ifdef WIN32 + +/* Windows CE stuff */ +#if defined(_WIN32_WCE) +#include +#define abort() exit(1) +#else +#include +#include +#include +#include +#endif /* _WIN32_WCE */ + +#include +#include +#undef getpid +#undef open +#undef close +#undef sleep +#undef gettimeofday +#undef dup2 +#undef unlink + +#define SOCKET_READ(A,B,C) recv(A,B,C,0) +#define SOCKET_WRITE(A,B,C) send(A,B,C,0) +#define SOCKET_CLOSE(A) closesocket(A) +#define SOCKET_BLOCK(A) u_long argp = 0; \ + ioctlsocket(A, FIONBIO, &argp) +#define srandom(A) srand(A) +#define random() rand() +#define getpid() _getpid() +#define snprintf _snprintf +#define open(A,B) _open(A,B) +#define dup2(A,B) _dup2(A,B) +#define unlink(A) _unlink(A) +#define close(A) _close(A) +#define read(A,B,C) _read(A,B,C) +#define write(A,B,C) _write(A,B,C) +#define sleep(A) Sleep(A*1000) +#define usleep(A) Sleep(A/1000) +#define strdup(A) _strdup(A) +#define chroot(A) _chdir(A) +#define chdir(A) _chdir(A) +#define alloca(A) _alloca(A) +#ifndef lseek +#define lseek(A,B,C) _lseek(A,B,C) +#endif + +/* This fix gets around a problem where a win32 application on a cygwin xterm + doesn't display regular output (until a certain buffer limit) - but it works + fine under a normal DOS window. This is a hack to get around the issue - + see http://www.khngai.com/emacs/tty.php */ +#define TTY_FLUSH() if (!_isatty(_fileno(stdout))) fflush(stdout); + +/* + * automatically build some library dependencies. + */ +#pragma comment(lib, "WS2_32.lib") +#pragma comment(lib, "AdvAPI32.lib") + +typedef UINT8 uint8_t; +typedef INT8 int8_t; +typedef UINT16 uint16_t; +typedef INT16 int16_t; +typedef UINT32 uint32_t; +typedef INT32 int32_t; +typedef UINT64 uint64_t; +typedef INT64 int64_t; +typedef int socklen_t; + +EXP_FUNC void STDCALL gettimeofday(struct timeval* t,void* timezone); +EXP_FUNC int STDCALL strcasecmp(const char *s1, const char *s2); +EXP_FUNC int STDCALL getdomainname(char *buf, int buf_size); + +#else /* Not Win32 */ + +#ifdef CONFIG_PLATFORM_SOLARIS +#include +#else +#include +#endif /* Not Solaris */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SOCKET_READ(A,B,C) read(A,B,C) +#define SOCKET_WRITE(A,B,C) write(A,B,C) +#define SOCKET_CLOSE(A) close(A) +#define SOCKET_BLOCK(A) int fd = fcntl(A, F_GETFL, NULL); \ + fcntl(A, F_SETFL, fd & ~O_NONBLOCK) +#define TTY_FLUSH() + +#endif /* Not Win32 */ + +/* some functions to mutate the way these work */ +#define malloc(A) ax_malloc(A) +#ifndef realloc +#define realloc(A,B) ax_realloc(A,B) +#endif +#define calloc(A,B) ax_calloc(A,B) + +EXP_FUNC void * STDCALL ax_malloc(size_t s); +EXP_FUNC void * STDCALL ax_realloc(void *y, size_t s); +EXP_FUNC void * STDCALL ax_calloc(size_t n, size_t s); +EXP_FUNC int STDCALL ax_open(const char *pathname, int flags); + +#ifdef CONFIG_PLATFORM_LINUX +void exit_now(const char *format, ...) __attribute((noreturn)); +#else +void exit_now(const char *format, ...); +#endif + +/* Mutexing definitions */ +#if defined(CONFIG_SSL_CTX_MUTEXING) +#if defined(WIN32) +#define SSL_CTX_MUTEX_TYPE HANDLE +#define SSL_CTX_MUTEX_INIT(A) A=CreateMutex(0, FALSE, 0) +#define SSL_CTX_MUTEX_DESTROY(A) CloseHandle(A) +#define SSL_CTX_LOCK(A) WaitForSingleObject(A, INFINITE) +#define SSL_CTX_UNLOCK(A) ReleaseMutex(A) +#else +#include +#define SSL_CTX_MUTEX_TYPE pthread_mutex_t +#define SSL_CTX_MUTEX_INIT(A) pthread_mutex_init(&A, NULL) +#define SSL_CTX_MUTEX_DESTROY(A) pthread_mutex_destroy(&A) +#define SSL_CTX_LOCK(A) pthread_mutex_lock(&A) +#define SSL_CTX_UNLOCK(A) pthread_mutex_unlock(&A) +#endif +#else /* no mutexing */ +#define SSL_CTX_MUTEX_INIT(A) +#define SSL_CTX_MUTEX_DESTROY(A) +#define SSL_CTX_LOCK(A) +#define SSL_CTX_UNLOCK(A) +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/p12.c b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/p12.c new file mode 100644 index 0000000..6ed92e4 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/p12.c @@ -0,0 +1,486 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Process PKCS#8/PKCS#12 keys. + * + * The decoding of a PKCS#12 key is fairly specific - this code was tested on a + * key generated with: + * + * openssl pkcs12 -export -in axTLS.x509_1024.pem -inkey axTLS.key_1024.pem + * -keypbe PBE-SHA1-RC4-128 -certpbe PBE-SHA1-RC4-128 + * -name "p12_withoutCA" -out axTLS.withoutCA.p12 -password pass:abcd + * + * or with a certificate chain: + * + * openssl pkcs12 -export -in axTLS.x509_1024.pem -inkey axTLS.key_1024.pem + * -certfile axTLS.ca_x509.pem -keypbe PBE-SHA1-RC4-128 -certpbe + * PBE-SHA1-RC4-128 -name "p12_withCA" -out axTLS.withCA.p12 -password pass:abcd + * + * Note that the PBE has to be specified with PBE-SHA1-RC4-128. The + * private/public keys/certs have to use RSA encryption. Both the integrity + * and privacy passwords are the same. + * + * The PKCS#8 files were generated with something like: + * + * PEM format: + * openssl pkcs8 -in axTLS.key_512.pem -passout pass:abcd -topk8 -v1 + * PBE-SHA1-RC4-128 -out axTLS.encrypted_pem.p8 + * + * DER format: + * openssl pkcs8 -in axTLS.key_512.pem -passout pass:abcd -topk8 -outform DER + * -v1 PBE-SHA1-RC4-128 -out axTLS.encrypted.p8 + */ + +#include +#include +#include + +#include "ssl.h" + +/* all commented out if not used */ +#ifdef CONFIG_SSL_USE_PKCS12 + +#define BLOCK_SIZE 64 +#define PKCS12_KEY_ID 1 +#define PKCS12_IV_ID 2 +#define PKCS12_MAC_ID 3 + +static char *make_uni_pass(const char *password, int *uni_pass_len); +static int p8_decrypt(const char *uni_pass, int uni_pass_len, + const uint8_t *salt, int iter, + uint8_t *priv_key, int priv_key_len, int id); +static int p8_add_key(SSL_CTX *ssl_ctx, uint8_t *priv_key); +static int get_pbe_params(uint8_t *buf, int *offset, + const uint8_t **salt, int *iterations); + +/* + * Take a raw pkcs8 block and then decrypt it and turn it into a normal key. + */ +int pkcs8_decode(SSL_CTX *ssl_ctx, SSLObjLoader *ssl_obj, const char *password) +{ + uint8_t *buf = ssl_obj->buf; + int len, offset = 0; + int iterations; + int ret = SSL_NOT_OK; + uint8_t *version = NULL; + const uint8_t *salt; + uint8_t *priv_key; + int uni_pass_len; + char *uni_pass = make_uni_pass(password, &uni_pass_len); + + if (asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0) + { +#ifdef CONFIG_SSL_FULL_MODE + printf("Error: Invalid p8 ASN.1 file\n"); +#endif + goto error; + } + + /* unencrypted key? */ + if (asn1_get_int(buf, &offset, &version) > 0 && *version == 0) + { + ret = p8_add_key(ssl_ctx, buf); + goto error; + } + + if (get_pbe_params(buf, &offset, &salt, &iterations) < 0) + goto error; + + if ((len = asn1_next_obj(buf, &offset, ASN1_OCTET_STRING)) < 0) + goto error; + + priv_key = &buf[offset]; + + p8_decrypt(uni_pass, uni_pass_len, salt, + iterations, priv_key, len, PKCS12_KEY_ID); + ret = p8_add_key(ssl_ctx, priv_key); + +error: + free(version); + free(uni_pass); + return ret; +} + +/* + * Take the unencrypted pkcs8 and turn it into a private key + */ +static int p8_add_key(SSL_CTX *ssl_ctx, uint8_t *priv_key) +{ + uint8_t *buf = priv_key; + int len, offset = 0; + int ret = SSL_NOT_OK; + + /* Skip the preamble and go straight to the private key. + We only support rsaEncryption (1.2.840.113549.1.1.1) */ + if (asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + asn1_skip_obj(buf, &offset, ASN1_INTEGER) < 0 || + asn1_skip_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + (len = asn1_next_obj(buf, &offset, ASN1_OCTET_STRING)) < 0) + goto error; + + ret = asn1_get_private_key(&buf[offset], len, &ssl_ctx->rsa_ctx); + +error: + return ret; +} + +/* + * Create the unicode password + */ +static char *make_uni_pass(const char *password, int *uni_pass_len) +{ + int pass_len = 0, i; + char *uni_pass; + + if (password == NULL) + { + password = ""; + } + + uni_pass = (char *)malloc((strlen(password)+1)*2); + + /* modify the password into a unicode version */ + for (i = 0; i < (int)strlen(password); i++) + { + uni_pass[pass_len++] = 0; + uni_pass[pass_len++] = password[i]; + } + + uni_pass[pass_len++] = 0; /* null terminate */ + uni_pass[pass_len++] = 0; + *uni_pass_len = pass_len; + return uni_pass; +} + +/* + * Decrypt a pkcs8 block. + */ +static int p8_decrypt(const char *uni_pass, int uni_pass_len, + const uint8_t *salt, int iter, + uint8_t *priv_key, int priv_key_len, int id) +{ + uint8_t p[BLOCK_SIZE*2]; + uint8_t d[BLOCK_SIZE]; + uint8_t Ai[SHA1_SIZE]; + SHA1_CTX sha_ctx; + RC4_CTX rc4_ctx; + int i; + + for (i = 0; i < BLOCK_SIZE; i++) + { + p[i] = salt[i % SALT_SIZE]; + p[BLOCK_SIZE+i] = uni_pass[i % uni_pass_len]; + d[i] = id; + } + + /* get the key - no IV since we are using RC4 */ + SHA1_Init(&sha_ctx); + SHA1_Update(&sha_ctx, d, sizeof(d)); + SHA1_Update(&sha_ctx, p, sizeof(p)); + SHA1_Final(Ai, &sha_ctx); + + for (i = 1; i < iter; i++) + { + SHA1_Init(&sha_ctx); + SHA1_Update(&sha_ctx, Ai, SHA1_SIZE); + SHA1_Final(Ai, &sha_ctx); + } + + /* do the decryption */ + if (id == PKCS12_KEY_ID) + { + RC4_setup(&rc4_ctx, Ai, 16); + RC4_crypt(&rc4_ctx, priv_key, priv_key, priv_key_len); + } + else /* MAC */ + memcpy(priv_key, Ai, SHA1_SIZE); + + return 0; +} + +/* + * Take a raw pkcs12 block and the decrypt it and turn it into a certificate(s) + * and keys. + */ +int pkcs12_decode(SSL_CTX *ssl_ctx, SSLObjLoader *ssl_obj, const char *password) +{ + uint8_t *buf = ssl_obj->buf; + int all_ok = 0, len, iterations, auth_safes_start, + auth_safes_end, auth_safes_len, key_offset, offset = 0; + int all_certs = 0; + uint8_t *version = NULL, *auth_safes = NULL, *cert, *orig_mac; + uint8_t key[SHA1_SIZE]; + uint8_t mac[SHA1_SIZE]; + const uint8_t *salt; + int uni_pass_len, ret; + int error_code = SSL_ERROR_NOT_SUPPORTED; + char *uni_pass = make_uni_pass(password, &uni_pass_len); + static const uint8_t pkcs_data[] = /* pkc7 data */ + { 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x01 }; + static const uint8_t pkcs_encrypted[] = /* pkc7 encrypted */ + { 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x06 }; + static const uint8_t pkcs8_key_bag[] = /* 1.2.840.113549.1.12.10.1.2 */ + { 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x0a, 0x01, 0x02 }; + + if (asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0) + { +#ifdef CONFIG_SSL_FULL_MODE + printf("Error: Invalid p12 ASN.1 file\n"); +#endif + goto error; + } + + if (asn1_get_int(buf, &offset, &version) < 0 || *version != 3) + { + error_code = SSL_ERROR_INVALID_VERSION; + goto error; + } + + /* remove all the boring pcks7 bits */ + if (asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + (len = asn1_next_obj(buf, &offset, ASN1_OID)) < 0 || + len != sizeof(pkcs_data) || + memcmp(&buf[offset], pkcs_data, sizeof(pkcs_data))) + goto error; + + offset += len; + + if (asn1_next_obj(buf, &offset, ASN1_EXPLICIT_TAG) < 0 || + asn1_next_obj(buf, &offset, ASN1_OCTET_STRING) < 0) + goto error; + + /* work out the MAC start/end points (done on AuthSafes) */ + auth_safes_start = offset; + auth_safes_end = offset; + if (asn1_skip_obj(buf, &auth_safes_end, ASN1_SEQUENCE) < 0) + goto error; + + auth_safes_len = auth_safes_end - auth_safes_start; + auth_safes = malloc(auth_safes_len); + + memcpy(auth_safes, &buf[auth_safes_start], auth_safes_len); + + if (asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + (len = asn1_next_obj(buf, &offset, ASN1_OID)) < 0 || + (len != sizeof(pkcs_encrypted) || + memcmp(&buf[offset], pkcs_encrypted, sizeof(pkcs_encrypted)))) + goto error; + + offset += len; + + if (asn1_next_obj(buf, &offset, ASN1_EXPLICIT_TAG) < 0 || + asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + asn1_skip_obj(buf, &offset, ASN1_INTEGER) < 0 || + asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + (len = asn1_next_obj(buf, &offset, ASN1_OID)) < 0 || + len != sizeof(pkcs_data) || + memcmp(&buf[offset], pkcs_data, sizeof(pkcs_data))) + goto error; + + offset += len; + + /* work out the salt for the certificate */ + if (get_pbe_params(buf, &offset, &salt, &iterations) < 0 || + (len = asn1_next_obj(buf, &offset, ASN1_IMPLICIT_TAG)) < 0) + goto error; + + /* decrypt the certificate */ + cert = &buf[offset]; + if ((ret = p8_decrypt(uni_pass, uni_pass_len, salt, iterations, cert, + len, PKCS12_KEY_ID)) < 0) + goto error; + + offset += len; + + /* load the certificate */ + key_offset = 0; + all_certs = asn1_next_obj(cert, &key_offset, ASN1_SEQUENCE); + + /* keep going until all certs are loaded */ + while (key_offset < all_certs) + { + int cert_offset = key_offset; + + if (asn1_skip_obj(cert, &cert_offset, ASN1_SEQUENCE) < 0 || + asn1_next_obj(cert, &key_offset, ASN1_SEQUENCE) < 0 || + asn1_skip_obj(cert, &key_offset, ASN1_OID) < 0 || + asn1_next_obj(cert, &key_offset, ASN1_EXPLICIT_TAG) < 0 || + asn1_next_obj(cert, &key_offset, ASN1_SEQUENCE) < 0 || + asn1_skip_obj(cert, &key_offset, ASN1_OID) < 0 || + asn1_next_obj(cert, &key_offset, ASN1_EXPLICIT_TAG) < 0 || + (len = asn1_next_obj(cert, &key_offset, ASN1_OCTET_STRING)) < 0) + goto error; + + if ((ret = add_cert(ssl_ctx, &cert[key_offset], len)) < 0) + goto error; + + key_offset = cert_offset; + } + + if (asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + (len = asn1_next_obj(buf, &offset, ASN1_OID)) < 0 || + len != sizeof(pkcs_data) || + memcmp(&buf[offset], pkcs_data, sizeof(pkcs_data))) + goto error; + + offset += len; + + if (asn1_next_obj(buf, &offset, ASN1_EXPLICIT_TAG) < 0 || + asn1_next_obj(buf, &offset, ASN1_OCTET_STRING) < 0 || + asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + (len = asn1_next_obj(buf, &offset, ASN1_OID)) < 0 || + (len != sizeof(pkcs8_key_bag)) || + memcmp(&buf[offset], pkcs8_key_bag, sizeof(pkcs8_key_bag))) + goto error; + + offset += len; + + /* work out the salt for the private key */ + if (asn1_next_obj(buf, &offset, ASN1_EXPLICIT_TAG) < 0 || + asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + get_pbe_params(buf, &offset, &salt, &iterations) < 0 || + (len = asn1_next_obj(buf, &offset, ASN1_OCTET_STRING)) < 0) + goto error; + + /* decrypt the private key */ + cert = &buf[offset]; + if ((ret = p8_decrypt(uni_pass, uni_pass_len, salt, iterations, cert, + len, PKCS12_KEY_ID)) < 0) + goto error; + + offset += len; + + /* load the private key */ + if ((ret = p8_add_key(ssl_ctx, cert)) < 0) + goto error; + + /* miss out on friendly name, local key id etc */ + if (asn1_skip_obj(buf, &offset, ASN1_SET) < 0) + goto error; + + /* work out the MAC */ + if (asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + asn1_next_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + asn1_skip_obj(buf, &offset, ASN1_SEQUENCE) < 0 || + (len = asn1_next_obj(buf, &offset, ASN1_OCTET_STRING)) < 0 || + len != SHA1_SIZE) + goto error; + + orig_mac = &buf[offset]; + offset += len; + + /* get the salt */ + if ((len = asn1_next_obj(buf, &offset, ASN1_OCTET_STRING)) < 0 || len != 8) + goto error; + + salt = &buf[offset]; + + /* work out what the mac should be */ + if ((ret = p8_decrypt(uni_pass, uni_pass_len, salt, iterations, + key, SHA1_SIZE, PKCS12_MAC_ID)) < 0) + goto error; + + hmac_sha1(auth_safes, auth_safes_len, key, SHA1_SIZE, mac); + + if (memcmp(mac, orig_mac, SHA1_SIZE)) + { + error_code = SSL_ERROR_INVALID_HMAC; + goto error; + } + + all_ok = 1; + +error: + free(version); + free(uni_pass); + free(auth_safes); + return all_ok ? SSL_OK : error_code; +} + +/* + * Retrieve the salt/iteration details from a PBE block. + */ +static int get_pbe_params(uint8_t *buf, int *offset, + const uint8_t **salt, int *iterations) +{ + static const uint8_t pbeSH1RC4[] = /* pbeWithSHAAnd128BitRC4 */ + { 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0c, 0x01, 0x01 }; + + int i, len; + uint8_t *iter = NULL; + int error_code = SSL_ERROR_NOT_SUPPORTED; + + /* Get the PBE type */ + if (asn1_next_obj(buf, offset, ASN1_SEQUENCE) < 0 || + (len = asn1_next_obj(buf, offset, ASN1_OID)) < 0) + goto error; + + /* we expect pbeWithSHAAnd128BitRC4 (1.2.840.113549.1.12.1.1) + which is the only algorithm we support */ + if (len != sizeof(pbeSH1RC4) || + memcmp(&buf[*offset], pbeSH1RC4, sizeof(pbeSH1RC4))) + { +#ifdef CONFIG_SSL_FULL_MODE + printf("Error: pkcs8/pkcs12 must use \"PBE-SHA1-RC4-128\"\n"); +#endif + goto error; + } + + *offset += len; + + if (asn1_next_obj(buf, offset, ASN1_SEQUENCE) < 0 || + (len = asn1_next_obj(buf, offset, ASN1_OCTET_STRING)) < 0 || + len != 8) + goto error; + + *salt = &buf[*offset]; + *offset += len; + + if ((len = asn1_get_int(buf, offset, &iter)) < 0) + goto error; + + *iterations = 0; + for (i = 0; i < len; i++) + { + (*iterations) <<= 8; + (*iterations) += iter[i]; + } + + free(iter); + error_code = SSL_OK; /* got here - we are ok */ + +error: + return error_code; +} + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/private_key.h b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/private_key.h new file mode 100644 index 0000000..96a5253 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/private_key.h @@ -0,0 +1,54 @@ +unsigned char default_private_key[] = { + 0x30, 0x82, 0x02, 0x5d, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xd8, + 0xe0, 0xbf, 0x15, 0xde, 0xea, 0xaf, 0xe8, 0xd5, 0xfd, 0x0b, 0xa8, 0xa8, + 0xb3, 0xd7, 0x46, 0x5d, 0xa7, 0x26, 0x6c, 0x0c, 0xb5, 0xd9, 0xbc, 0xc6, + 0xf8, 0xc0, 0x78, 0xd0, 0xf6, 0x56, 0x65, 0xf8, 0x29, 0x48, 0x0e, 0x7b, + 0x0b, 0xa6, 0x25, 0x7e, 0xe8, 0x7b, 0x79, 0x6f, 0x38, 0xe5, 0xb5, 0xb7, + 0xf4, 0xe0, 0x9c, 0x91, 0x60, 0xf4, 0x06, 0xf3, 0x40, 0x1e, 0xf9, 0x91, + 0x19, 0xa9, 0x2f, 0x47, 0x43, 0xb5, 0x9b, 0x1e, 0xdc, 0xf6, 0xaa, 0x1c, + 0x49, 0x79, 0x21, 0x28, 0xcb, 0xaa, 0x49, 0x73, 0xd9, 0x09, 0x05, 0x4c, + 0x02, 0xf2, 0x4c, 0x4d, 0x6c, 0x1c, 0x80, 0xa7, 0x14, 0x91, 0x44, 0xfc, + 0x12, 0xb3, 0xe1, 0xe7, 0xe3, 0x4f, 0x44, 0xba, 0x8c, 0xc3, 0x74, 0x39, + 0xe8, 0x4c, 0xd0, 0xd4, 0x4c, 0x24, 0x61, 0xb4, 0x40, 0x95, 0x8c, 0xc0, + 0x0a, 0xb7, 0x02, 0x39, 0x31, 0x85, 0x93, 0x02, 0x03, 0x01, 0x00, 0x01, + 0x02, 0x81, 0x81, 0x00, 0x94, 0x07, 0x72, 0xe5, 0xbe, 0xad, 0x79, 0x3b, + 0xf7, 0x33, 0x2c, 0x8e, 0x05, 0xf8, 0x1a, 0x6b, 0xd0, 0xe8, 0x91, 0xf5, + 0x16, 0x07, 0xd9, 0x82, 0x5c, 0x5c, 0xd5, 0x22, 0xa1, 0x9e, 0x42, 0x02, + 0x7f, 0x8b, 0xcd, 0xbe, 0xf4, 0x85, 0x52, 0xf6, 0x2c, 0xd5, 0x09, 0xd2, + 0x2c, 0xf4, 0x2c, 0xf6, 0x07, 0x85, 0x80, 0xf9, 0xdc, 0xd0, 0xcc, 0x3f, + 0x22, 0x31, 0x15, 0xf3, 0x49, 0xf2, 0xb5, 0xe2, 0x69, 0x99, 0x04, 0x04, + 0x49, 0x21, 0xdb, 0x9f, 0xa1, 0x54, 0x5a, 0xfa, 0xe4, 0xd9, 0xf9, 0x07, + 0x05, 0xff, 0x9a, 0x65, 0xa4, 0xeb, 0xf2, 0x47, 0xce, 0x56, 0xc7, 0x72, + 0x49, 0x48, 0x5c, 0xe8, 0x14, 0xd7, 0x8f, 0x25, 0xcc, 0x49, 0x29, 0x06, + 0x6a, 0x54, 0x7b, 0x17, 0xdc, 0x9e, 0xd4, 0x53, 0xf0, 0xf5, 0x9e, 0x85, + 0x25, 0xa1, 0xeb, 0x3d, 0xe9, 0x2f, 0xb9, 0x9c, 0xf6, 0xe1, 0x80, 0x81, + 0x02, 0x41, 0x00, 0xee, 0x02, 0x78, 0xc7, 0x78, 0x85, 0x04, 0x97, 0xcc, + 0x36, 0xbd, 0xd6, 0x11, 0xe2, 0xc7, 0x39, 0xd9, 0x34, 0x51, 0x72, 0x6f, + 0x8a, 0x0f, 0xcd, 0x88, 0x32, 0x33, 0x9b, 0xc7, 0xa7, 0x03, 0x77, 0xd9, + 0x82, 0x35, 0xb6, 0xdd, 0x1f, 0xc2, 0xc1, 0x13, 0x40, 0x83, 0x55, 0xeb, + 0x60, 0xeb, 0x81, 0x8e, 0x0c, 0x16, 0x62, 0xb4, 0xb4, 0x3c, 0xeb, 0x08, + 0x80, 0x9c, 0x79, 0xd3, 0x38, 0xca, 0xf1, 0x02, 0x41, 0x00, 0xe9, 0x45, + 0x5f, 0x2e, 0x16, 0xcc, 0x93, 0x50, 0x40, 0xb6, 0x79, 0xbc, 0x38, 0xe0, + 0x56, 0x68, 0x50, 0xd3, 0x2f, 0x73, 0x8c, 0x8c, 0x2a, 0x0e, 0x81, 0x4a, + 0x8a, 0xbb, 0xcc, 0xf0, 0x64, 0x34, 0x46, 0x9f, 0x07, 0x7d, 0x22, 0xb6, + 0xf9, 0x46, 0xac, 0x57, 0x23, 0x8c, 0x1e, 0xeb, 0xd3, 0x05, 0x4d, 0xa8, + 0x83, 0x6a, 0x67, 0xf6, 0xa6, 0xb1, 0xab, 0x8e, 0xc1, 0xef, 0xef, 0x7d, + 0xf0, 0xc3, 0x02, 0x40, 0x2f, 0xc6, 0x59, 0x3e, 0x18, 0xe8, 0x02, 0x73, + 0x01, 0xef, 0xdf, 0x0d, 0x30, 0x4b, 0xe8, 0x17, 0xa9, 0x8c, 0xc1, 0xe8, + 0x89, 0x91, 0x19, 0xf8, 0xf4, 0xa4, 0xb7, 0x0d, 0x46, 0xf7, 0x34, 0x50, + 0x03, 0x5e, 0x0a, 0xb0, 0x29, 0x14, 0xae, 0x00, 0x19, 0x80, 0x32, 0x9c, + 0xb5, 0x81, 0x9f, 0xe4, 0x42, 0x82, 0x14, 0xa0, 0x3d, 0x8b, 0x8c, 0x4a, + 0xd5, 0x4b, 0x13, 0x9d, 0xb4, 0x93, 0x4a, 0xd1, 0x02, 0x40, 0x64, 0x8c, + 0x83, 0x77, 0x61, 0x5a, 0x73, 0x11, 0x3f, 0xa3, 0xa8, 0x1b, 0x8a, 0xc4, + 0xa0, 0x5a, 0x3c, 0xa4, 0x9b, 0x2a, 0x8a, 0x65, 0x8c, 0x67, 0x4e, 0x31, + 0xac, 0x55, 0x41, 0x04, 0x49, 0x9d, 0x02, 0xe7, 0xdf, 0x99, 0x7f, 0xd2, + 0x30, 0xe6, 0xd6, 0xb8, 0x84, 0xd9, 0x0c, 0x27, 0x08, 0x81, 0x9b, 0xb4, + 0xcc, 0x58, 0x9c, 0x51, 0x84, 0x0e, 0xc7, 0x6d, 0x34, 0x89, 0x50, 0xc9, + 0x0f, 0x73, 0x02, 0x41, 0x00, 0xda, 0xde, 0x5e, 0x1a, 0xac, 0x1d, 0x1d, + 0xd7, 0xb9, 0x65, 0x26, 0x00, 0xf5, 0xd4, 0xe4, 0x28, 0x84, 0x86, 0x2f, + 0x00, 0x9c, 0x41, 0x00, 0x52, 0xe1, 0x47, 0x91, 0xc0, 0x52, 0x05, 0x4e, + 0x0f, 0x2f, 0x0d, 0xca, 0x9b, 0x3d, 0x89, 0x41, 0xbf, 0xee, 0x9f, 0xa1, + 0xe6, 0x9d, 0xa4, 0xeb, 0x45, 0x7f, 0xe3, 0xcb, 0xa4, 0x6b, 0x0a, 0xe2, + 0x7e, 0xb0, 0x87, 0x5c, 0x40, 0xb1, 0x51, 0x11, 0x1d +}; +unsigned int default_private_key_len = 609; diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/ssl.h b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/ssl.h new file mode 100644 index 0000000..539d0a3 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/ssl.h @@ -0,0 +1,474 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @mainpage axTLS API + * + * @image html axolotl.jpg + * + * The axTLS library has features such as: + * - The TLSv1 SSL client/server protocol + * - No requirement to use any openssl libraries. + * - A choice between AES block (128/256 bit) and RC4 (128 bit) stream ciphers. + * - RSA encryption/decryption with variable sized keys (up to 4096 bits). + * - Certificate chaining and peer authentication. + * - Session resumption, session renegotiation. + * - ASN.1, X.509, PKCS#8, PKCS#12 keys/certificates with DER/PEM encoding. + * - Highly configurable compile time options. + * - Portable across many platforms (written in ANSI C), and has language + * bindings in C, C#, VB.NET, Java, Perl and Lua. + * - Partial openssl API compatibility (via a wrapper). + * - A very small footprint (around 50-60kB for the library in 'server-only' + * mode). + * - No dependencies on sockets - can use serial connections for example. + * - A very simple API - ~ 20 functions/methods. + * + * A list of these functions/methods are described below. + * + * @ref c_api + * + * @ref bigint_api + * + * @ref csharp_api + * + * @ref java_api + */ +#ifndef HEADER_SSL_H +#define HEADER_SSL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +//#include "crypto.h" + +/* need to predefine before ssl_lib.h gets to it */ +#define SSL_SESSION_ID_SIZE 32 + +#include "tls1.h" + +/* The optional parameters that can be given to the client/server SSL engine */ +#define SSL_CLIENT_AUTHENTICATION 0x00010000 +#define SSL_SERVER_VERIFY_LATER 0x00020000 +#define SSL_NO_DEFAULT_KEY 0x00040000 +#define SSL_DISPLAY_STATES 0x00080000 +#define SSL_DISPLAY_BYTES 0x00100000 +#define SSL_DISPLAY_CERTS 0x00200000 +#define SSL_DISPLAY_RSA 0x00400000 + +/* errors that can be generated */ +#define SSL_OK 0 +#define SSL_NOT_OK -1 +#define SSL_ERROR_DEAD -2 +#define SSL_ERROR_CONN_LOST -256 +#define SSL_ERROR_SOCK_SETUP_FAILURE -258 +#define SSL_ERROR_INVALID_HANDSHAKE -260 +#define SSL_ERROR_INVALID_PROT_MSG -261 +#define SSL_ERROR_INVALID_HMAC -262 +#define SSL_ERROR_INVALID_VERSION -263 +#define SSL_ERROR_INVALID_SESSION -265 +#define SSL_ERROR_NO_CIPHER -266 +#define SSL_ERROR_BAD_CERTIFICATE -268 +#define SSL_ERROR_INVALID_KEY -269 +#define SSL_ERROR_FINISHED_INVALID -271 +#define SSL_ERROR_NO_CERT_DEFINED -272 +#define SSL_ERROR_NOT_SUPPORTED -274 +#define SSL_X509_OFFSET -512 +#define SSL_X509_ERROR(A) (SSL_X509_OFFSET+A) + +/* these are all the alerts that are recognized */ +#define SSL_ALERT_CLOSE_NOTIFY 0 +#define SSL_ALERT_UNEXPECTED_MESSAGE 10 +#define SSL_ALERT_BAD_RECORD_MAC 20 +#define SSL_ALERT_HANDSHAKE_FAILURE 40 +#define SSL_ALERT_BAD_CERTIFICATE 42 +#define SSL_ALERT_ILLEGAL_PARAMETER 47 +#define SSL_ALERT_DECODE_ERROR 50 +#define SSL_ALERT_DECRYPT_ERROR 51 +#define SSL_ALERT_INVALID_VERSION 70 + +/* The ciphers that are supported */ +#define SSL_AES128_SHA 0x2f +#define SSL_AES256_SHA 0x35 +#define SSL_RC4_128_SHA 0x05 +#define SSL_RC4_128_MD5 0x04 + +/* build mode ids' */ +#define SSL_BUILD_SKELETON_MODE 0x01 +#define SSL_BUILD_SERVER_ONLY 0x02 +#define SSL_BUILD_ENABLE_VERIFICATION 0x03 +#define SSL_BUILD_ENABLE_CLIENT 0x04 +#define SSL_BUILD_FULL_MODE 0x05 + +/* offsets to retrieve configuration information */ +#define SSL_BUILD_MODE 0 +#define SSL_MAX_CERT_CFG_OFFSET 1 +#define SSL_MAX_CA_CERT_CFG_OFFSET 2 +#define SSL_HAS_PEM 3 + +/* default session sizes */ +#define SSL_DEFAULT_SVR_SESS 5 +#define SSL_DEFAULT_CLNT_SESS 1 + +/* X.509/X.520 distinguished name types */ +#define SSL_X509_CERT_COMMON_NAME 0 +#define SSL_X509_CERT_ORGANIZATION 1 +#define SSL_X509_CERT_ORGANIZATIONAL_NAME 2 +#define SSL_X509_CA_CERT_COMMON_NAME 3 +#define SSL_X509_CA_CERT_ORGANIZATION 4 +#define SSL_X509_CA_CERT_ORGANIZATIONAL_NAME 5 + +/* SSL object loader types */ +#define SSL_OBJ_X509_CERT 1 +#define SSL_OBJ_X509_CACERT 2 +#define SSL_OBJ_RSA_KEY 3 +#define SSL_OBJ_PKCS8 4 +#define SSL_OBJ_PKCS12 5 + +/** + * @defgroup c_api Standard C API + * @brief The standard interface in C. + * @{ + */ + +/** + * @brief Establish a new client/server context. + * + * This function is called before any client/server SSL connections are made. + * + * Each new connection will use the this context's private key and + * certificate chain. If a different certificate chain is required, then a + * different context needs to be be used. + * + * There are two threading models supported - a single thread with one + * SSL_CTX can support any number of SSL connections - and multiple threads can + * support one SSL_CTX object each (the default). But if a single SSL_CTX + * object uses many SSL objects in individual threads, then the + * CONFIG_SSL_CTX_MUTEXING option needs to be configured. + * + * @param options [in] Any particular options. At present the options + * supported are: + * - SSL_SERVER_VERIFY_LATER (client only): Don't stop a handshake if the server + * authentication fails. The certificate can be authenticated later with a + * call to ssl_verify_cert(). + * - SSL_CLIENT_AUTHENTICATION (server only): Enforce client authentication + * i.e. each handshake will include a "certificate request" message from the + * server. Only available if verification has been enabled. + * - SSL_DISPLAY_BYTES (full mode build only): Display the byte sequences + * during the handshake. + * - SSL_DISPLAY_STATES (full mode build only): Display the state changes + * during the handshake. + * - SSL_DISPLAY_CERTS (full mode build only): Display the certificates that + * are passed during a handshake. + * - SSL_DISPLAY_RSA (full mode build only): Display the RSA key details that + * are passed during a handshake. + * + * @param num_sessions [in] The number of sessions to be used for session + * caching. If this value is 0, then there is no session caching. This option + * is not used in skeleton mode. + * @return A client/server context. + */ +EXP_FUNC SSL_CTX * STDCALL ssl_ctx_new(uint32_t options, int num_sessions); + +/** + * @brief Remove a client/server context. + * + * Frees any used resources used by this context. Each connection will be + * sent a "Close Notify" alert (if possible). + * @param ssl_ctx [in] The client/server context. + */ +EXP_FUNC void STDCALL ssl_ctx_free(SSL_CTX *ssl_ctx); + +/** + * @brief (server only) Establish a new SSL connection to an SSL client. + * + * It is up to the application to establish the logical connection (whether it + * is a socket, serial connection etc). + * @param ssl_ctx [in] The server context. + * @param client_fd [in] The client's file descriptor. + * @return An SSL object reference. + */ +EXP_FUNC SSL * STDCALL ssl_server_new(SSL_CTX *ssl_ctx, int client_fd); + +/** + * @brief (client only) Establish a new SSL connection to an SSL server. + * + * It is up to the application to establish the initial logical connection + * (whether it is a socket, serial connection etc). + * + * This is a blocking call - it will finish when the handshake is complete (or + * has failed). + * @param ssl_ctx [in] The client context. + * @param client_fd [in] The client's file descriptor. + * @param session_id [in] A 32 byte session id for session resumption. This + * can be null if no session resumption is being used or required. This option + * is not used in skeleton mode. + * @param sess_id_size The size of the session id (max 32) + * @return An SSL object reference. Use ssl_handshake_status() to check + * if a handshake succeeded. + */ +EXP_FUNC SSL * STDCALL ssl_client_new(SSL_CTX *ssl_ctx, int client_fd, const uint8_t *session_id, uint8_t sess_id_size); + +/** + * @brief Free any used resources on this connection. + + * A "Close Notify" message is sent on this connection (if possible). It is up + * to the application to close the socket or file descriptor. + * @param ssl [in] The ssl object reference. + */ +EXP_FUNC void STDCALL ssl_free(SSL *ssl); + +/** + * @brief Read the SSL data stream. + * The socket must be in blocking mode. + * @param ssl [in] An SSL object reference. + * @param in_data [out] If the read was successful, a pointer to the read + * buffer will be here. Do NOT ever free this memory as this buffer is used in + * sucessive calls. If the call was unsuccessful, this value will be null. + * @return The number of decrypted bytes: + * - if > 0, then the handshaking is complete and we are returning the number + * of decrypted bytes. + * - SSL_OK if the handshaking stage is successful (but not yet complete). + * - < 0 if an error. + * @see ssl.h for the error code list. + * @note Use in_data before doing any successive ssl calls. + */ +EXP_FUNC int STDCALL ssl_read(SSL *ssl, uint8_t **in_data); + +/** + * @brief Write to the SSL data stream. + * The socket must be in blocking mode. + * @param ssl [in] An SSL obect reference. + * @param out_data [in] The data to be written + * @param out_len [in] The number of bytes to be written. + * @return The number of bytes sent, or if < 0 if an error. + * @see ssl.h for the error code list. + */ +EXP_FUNC int STDCALL ssl_write(SSL *ssl, const uint8_t *out_data, int out_len); + +/** + * @brief Find an ssl object based on a file descriptor. + * + * Goes through the list of SSL objects maintained in a client/server context + * to look for a file descriptor match. + * @param ssl_ctx [in] The client/server context. + * @param client_fd [in] The file descriptor. + * @return A reference to the SSL object. Returns null if the object could not + * be found. + */ +EXP_FUNC SSL * STDCALL ssl_find(SSL_CTX *ssl_ctx, int client_fd); + +/** + * @brief Get the session id for a handshake. + * + * This will be a 32 byte sequence and is available after the first + * handshaking messages are sent. + * @param ssl [in] An SSL object reference. + * @return The session id as a 32 byte sequence. + * @note A SSLv23 handshake may have only 16 valid bytes. + */ +EXP_FUNC const uint8_t * STDCALL ssl_get_session_id(const SSL *ssl); + +/** + * @brief Get the session id size for a handshake. + * + * This will normally be 32 but could be 0 (no session id) or something else. + * @param ssl [in] An SSL object reference. + * @return The size of the session id. + */ +EXP_FUNC uint8_t STDCALL ssl_get_session_id_size(const SSL *ssl); + +/** + * @brief Return the cipher id (in the SSL form). + * @param ssl [in] An SSL object reference. + * @return The cipher id. This will be one of the following: + * - SSL_AES128_SHA (0x2f) + * - SSL_AES256_SHA (0x35) + * - SSL_RC4_128_SHA (0x05) + * - SSL_RC4_128_MD5 (0x04) + */ +EXP_FUNC uint8_t STDCALL ssl_get_cipher_id(const SSL *ssl); + +/** + * @brief Return the status of the handshake. + * @param ssl [in] An SSL object reference. + * @return SSL_OK if the handshake is complete and ok. + * @see ssl.h for the error code list. + */ +EXP_FUNC int STDCALL ssl_handshake_status(const SSL *ssl); + +/** + * @brief Retrieve various parameters about the axTLS engine. + * @param offset [in] The configuration offset. It will be one of the following: + * - SSL_BUILD_MODE The build mode. This will be one of the following: + * - SSL_BUILD_SERVER_ONLY (basic server mode) + * - SSL_BUILD_ENABLE_VERIFICATION (server can do client authentication) + * - SSL_BUILD_ENABLE_CLIENT (client/server capabilties) + * - SSL_BUILD_FULL_MODE (client/server with diagnostics) + * - SSL_BUILD_SKELETON_MODE (skeleton mode) + * - SSL_MAX_CERT_CFG_OFFSET The maximum number of certificates allowed. + * - SSL_MAX_CA_CERT_CFG_OFFSET The maximum number of CA certificates allowed. + * - SSL_HAS_PEM 1 if supported + * @return The value of the requested parameter. + */ +EXP_FUNC int STDCALL ssl_get_config(int offset); + +/** + * @brief Display why the handshake failed. + * + * This call is only useful in a 'full mode' build. The output is to stdout. + * @param error_code [in] An error code. + * @see ssl.h for the error code list. + */ +EXP_FUNC void STDCALL ssl_display_error(int error_code); + +/** + * @brief Authenticate a received certificate. + * + * This call is usually made by a client after a handshake is complete and the + * context is in SSL_SERVER_VERIFY_LATER mode. + * @param ssl [in] An SSL object reference. + * @return SSL_OK if the certificate is verified. + */ +EXP_FUNC int STDCALL ssl_verify_cert(const SSL *ssl); + +/** + * @brief Retrieve an X.509 distinguished name component. + * + * When a handshake is complete and a certificate has been exchanged, then the + * details of the remote certificate can be retrieved. + * + * This will usually be used by a client to check that the server's common + * name matches the URL. + * + * A full handshake needs to occur for this call to work properly. + * + * @param ssl [in] An SSL object reference. + * @param component [in] one of: + * - SSL_X509_CERT_COMMON_NAME + * - SSL_X509_CERT_ORGANIZATION + * - SSL_X509_CERT_ORGANIZATIONAL_NAME + * - SSL_X509_CA_CERT_COMMON_NAME + * - SSL_X509_CA_CERT_ORGANIZATION + * - SSL_X509_CA_CERT_ORGANIZATIONAL_NAME + * @return The appropriate string (or null if not defined) + * @note Verification build mode must be enabled. + */ +EXP_FUNC const char * STDCALL ssl_get_cert_dn(const SSL *ssl, int component); + +/** + * @brief Force the client to perform its handshake again. + * + * For a client this involves sending another "client hello" message. + * For the server is means sending a "hello request" message. + * + * This is a blocking call on the client (until the handshake completes). + * + * @param ssl [in] An SSL object reference. + * @return SSL_OK if renegotiation instantiation was ok + */ +EXP_FUNC int STDCALL ssl_renegotiate(SSL *ssl); + +/** + * @brief Process a file that is in binary DER or ASCII PEM format. + * + * These are temporary objects that are used to load private keys, + * certificates etc into memory. + * @param ssl_ctx [in] The client/server context. + * @param obj_type [in] The format of the file. Can be one of: + * - SSL_OBJ_X509_CERT (no password required) + * - SSL_OBJ_X509_CACERT (no password required) + * - SSL_OBJ_RSA_KEY (AES128/AES256 PEM encryption supported) + * - SSL_OBJ_PKCS8 (RC4-128 encrypted data supported) + * - SSL_OBJ_PKCS12 (RC4-128 encrypted data supported) + * + * PEM files are automatically detected (if supported). The object type is + * also detected, and so is not relevant for these types of files. + * @param filename [in] The location of a file in DER/PEM format. + * @param password [in] The password used. Can be null if not required. + * @return SSL_OK if all ok + * @note Not available in skeleton build mode. + */ +EXP_FUNC int STDCALL ssl_obj_load(SSL_CTX *ssl_ctx, int obj_type, const char *filename, const char *password); + +/** + * @brief Process binary data. + * + * These are temporary objects that are used to load private keys, + * certificates etc into memory. + * @param ssl_ctx [in] The client/server context. + * @param obj_type [in] The format of the memory data. + * @param data [in] The binary data to be loaded. + * @param len [in] The amount of data to be loaded. + * @param password [in] The password used. Can be null if not required. + * @return SSL_OK if all ok + * @see ssl_obj_load for more details on obj_type. + */ +EXP_FUNC int STDCALL ssl_obj_memory_load(SSL_CTX *ssl_ctx, int obj_type, const uint8_t *data, int len, const char *password); + +#ifdef CONFIG_SSL_GENERATE_X509_CERT +/** + * @brief Create an X.509 certificate. + * + * This certificate is a self-signed v1 cert with a fixed start/stop validity + * times. It is signed with an internal private key in ssl_ctx. + * + * @param ssl_ctx [in] The client/server context. + * @param options [in] Not used yet. + * @param dn [in] An array of distinguished name strings. The array is defined + * by: + * - SSL_X509_CERT_COMMON_NAME (0) + * - If SSL_X509_CERT_COMMON_NAME is empty or not defined, then the + * hostname will be used. + * - SSL_X509_CERT_ORGANIZATION (1) + * - If SSL_X509_CERT_ORGANIZATION is empty or not defined, then $USERNAME + * will be used. + * - SSL_X509_CERT_ORGANIZATIONAL_NAME (2) + * - SSL_X509_CERT_ORGANIZATIONAL_NAME is optional. + * @param cert_data [out] The certificate as a sequence of bytes. + * @return < 0 if an error, or the size of the certificate in bytes. + * @note cert_data must be freed when there is no more need for it. + */ +EXP_FUNC int STDCALL ssl_x509_create(SSL_CTX *ssl_ctx, uint32_t options, const char * dn[], uint8_t **cert_data); +#endif + +/** + * @brief Return the axTLS library version as a string. + */ +EXP_FUNC const char * STDCALL ssl_version(void); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/Makefile b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/Makefile new file mode 100644 index 0000000..56c711f --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/Makefile @@ -0,0 +1,97 @@ +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +all: + +AXTLS_HOME=../.. + +include $(AXTLS_HOME)/config/.config +include $(AXTLS_HOME)/config/makefile.conf + +ifdef CONFIG_PERFORMANCE_TESTING +all: performance +endif + +ifdef CONFIG_SSL_TEST +all: ssltesting +endif + +include $(AXTLS_HOME)/config/makefile.post + +ifndef CONFIG_PLATFORM_WIN32 +performance: $(AXTLS_HOME)/$(STAGE)/perf_bigint +ssltesting: $(AXTLS_HOME)/$(STAGE)/ssltest +LIBS=$(AXTLS_HOME)/$(STAGE) + +$(AXTLS_HOME)/$(STAGE)/perf_bigint: perf_bigint.o $(LIBS)/libaxtls.a + $(CC) $(LDFLAGS) -o $@ $^ -L $(LIBS) -laxtls + +$(AXTLS_HOME)/$(STAGE)/ssltest: ssltest.o $(LIBS)/libaxtls.a + $(CC) $(LDFLAGS) -o $@ $^ -lpthread -L $(LIBS) -laxtls +else +performance: $(AXTLS_HOME)/$(STAGE)/perf_bigint.exe +ssltesting: $(AXTLS_HOME)/$(STAGE)/ssltest.exe + +CRYPTO_PATH="$(AXTLS_INCLUDE)crypto\\" +AXTLS_SSL_PATH="$(AXTLS_INCLUDE)ssl\\" + +CRYPTO_OBJ=\ + $(CRYPTO_PATH)aes.obj \ + $(CRYPTO_PATH)bigint.obj \ + $(CRYPTO_PATH)crypto_misc.obj \ + $(CRYPTO_PATH)hmac.obj \ + $(CRYPTO_PATH)md2.obj \ + $(CRYPTO_PATH)md5.obj \ + $(CRYPTO_PATH)rc4.obj \ + $(CRYPTO_PATH)rsa.obj \ + $(CRYPTO_PATH)sha1.obj + +OBJ=\ + $(AXTLS_SSL_PATH)asn1.obj \ + $(AXTLS_SSL_PATH)gen_cert.obj \ + $(AXTLS_SSL_PATH)loader.obj \ + $(AXTLS_SSL_PATH)openssl.obj \ + $(AXTLS_SSL_PATH)os_port.obj \ + $(AXTLS_SSL_PATH)p12.obj \ + $(AXTLS_SSL_PATH)x509.obj \ + $(AXTLS_SSL_PATH)tls1.obj \ + $(AXTLS_SSL_PATH)tls1_svr.obj \ + $(AXTLS_SSL_PATH)tls1_clnt.obj + +$(AXTLS_HOME)/$(STAGE)/perf_bigint.exe: perf_bigint.obj + $(LD) $(LDFLAGS) /out:$@ $? $(CRYPTO_OBJ) $(OBJ) + +$(AXTLS_HOME)/$(STAGE)/ssltest.exe: ssltest.obj + $(LD) $(LDFLAGS) /out:$@ $? $(CRYPTO_OBJ) $(OBJ) +endif + +clean:: + -@rm -f $(AXTLS_HOME)/$(STAGE)/perf_bigint* $(AXTLS_HOME)/$(STAGE)/ssltest* + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.ca_key.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.ca_key.pem new file mode 100644 index 0000000..7c8ac8a --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.ca_key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQCnZdk20fYWh8O6kDTt0AuJWyp0YIrb7W1UNNMPXI5wA4J59IVj +Nmk5wocm9+Hqzbg7rORAN/mHPBhzLAjhnm1HODs36hW15DtbDkkH4wCM/Tsyv79m +n0xq1V6peK3t9vi2D4p/IRjHkYR2jm+BeknopijhY0kHHfpGTHa2DnVirwIDAQAB +AoGAd4Ia5SxYiBU9A0BYyT8yPUm8sYELIaAL4YYk+F6Xwhh/Whnb8MyzquzaGFP4 +Ee30jYYNHlvX5VheDDtvy8OTN5FgKNNdzvW15iA4Hxje04ZI7W87G7OIxm7aYRid +sG4XqZBtsOdj33IRd9hgozywGJ2qRqS6nn2KxRv1w07RniECQQDZAlKxijdn+vQ7 +8/8mXzC+FwQtzeTUCuLrBJcos9I/591ABoxYkWcYLxpFqgCEVwb1qfPBJkL07JPt +Fu6CTnBFAkEAxXmUBs47x5QM99qyBO5UwW0Ksrm/WD4guaaxzQShMt/HzgJl613z +/x4FtxiQJHAr6r2K0t5xTJx89LVKuouYYwJAImue6DAvJ5wDfzrtXo28snn+HLHK +uONdKL/apgcXszE4w74GJsoxWwGlniUf3d3b6b1iP2GtPyIDOJjpjduZLQJAE4jS +VtYB3d1MZxxQLeKxqayyuTlcr0r+C79sqT5C//hZGIzuLhlOMLd0k0cvwxsBjSgQ +2ok8pfp49fAVI1z5xwJAVmJgLc/mSti5A2q3c8HW8qvMJEDPWbpb7p8pg4ePtpa8 +EE3TO4O4J2H+k40C397km4yZXdkNQsiT1zVljJZpiw== +-----END RSA PRIVATE KEY----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.ca_x509.cer b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.ca_x509.cer new file mode 100644 index 0000000000000000000000000000000000000000..9c9936b8e98d0b7475e522377e64ee5cb7d9858c GIT binary patch literal 483 zcmXqLV!UtA#OT4q$uKvs*kYO0(kKI7HcqWJkGAi;jEtmp zDoN&tJf@_eyO<6*KV zyX-GFpR#RyrAh0Vm>C%uk(~z&JZ7M~WVst|nJiE@P*UHyEW+SG%xvc~wa?bgyU%&o z__O9cjynut$9A5`TwES67IMd>m+OQ}^u4t{;lgJg9l!sr3OSV*OvR3NHYY8-f#GI I<)^zO0PSqO5dZ)H literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.ca_x509.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.ca_x509.pem new file mode 100644 index 0000000..86f6597 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.ca_x509.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB3zCCAUgCCQCdbnM4pjqlWjANBgkqhkiG9w0BAQUFADA0MTIwMAYDVQQKEylh +eFRMUyBQcm9qZWN0IERvZGd5IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNjA2 +MDcxMTQ0MzJaFw0zMzEwMjMxMTQ0MzJaMDQxMjAwBgNVBAoTKWF4VExTIFByb2pl +Y3QgRG9kZ3kgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQCnZdk20fYWh8O6kDTt0AuJWyp0YIrb7W1UNNMPXI5wA4J59IVj +Nmk5wocm9+Hqzbg7rORAN/mHPBhzLAjhnm1HODs36hW15DtbDkkH4wCM/Tsyv79m +n0xq1V6peK3t9vi2D4p/IRjHkYR2jm+BeknopijhY0kHHfpGTHa2DnVirwIDAQAB +MA0GCSqGSIb3DQEBBQUAA4GBAB0LgNo0oCcwIie5plgwwFybQ8x95q6e3wndM/Mp +3gjcAFbGuchpo3dfFlTcRI0KyERb3q1MVxPM4sff9nT7EdHVyK9s8/ITkP2dcTKc +flbcTEfJVIeM8L2P5F41Hvn9GuGcMW8EmsC06gdbp1LLnqsdrXdMNBsAUBXfgPrU ++UcZ +-----END CERTIFICATE----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.device_key b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.device_key new file mode 100644 index 0000000000000000000000000000000000000000..4e981d143e1383828b8a76e18c57e0b0f59b202f GIT binary patch literal 609 zcmV-n0-pUaf&yIv0RRGlfdJGZ4h<43zjh$NmAe*gFd;CkIEWYaUz#Bpms2~d;TZ=+ zk`Pe_4BeOCv@NwmC65?N)gXrn?#|TyB9lU`OINiLyb68LKj!YuC$?l`)u2L1ZuNgc z=Sux+ln*4$Nfhl{gttWP`YNkiPpo0p0h3)_$nwg2s|lRS$t9_kyc+@o0RRC4fq?*^ zL=H=j!{3Frp6Ni0WB0Agp#h-CLCM~qOnu)|K)UjF%r+-Ic-(fn!L=2LAE_OnV2@ezYPqfv?7EVw ztnGa>p_(hpRr+n(N$Ooc;-Ug;rmFgzfA1^_2-*k;^0%11vl#+G0M`^95MJ-`(OR-i zBA|9yFh78sA*+l|0wMujX*I%@o4%O>ok-BGDtQP3_l0oh2@5c16ixpA!QhEf#zLZF zQvyK%tS>_pbrT+q^2G&mI(6scS|AxC&V>TLsLms2K>j$f{xgTlW2bz`iWbV^SZp~M zSQa|OOK(li0kpVqV}#k^0zZ3z5inI#a)-o>oxVh6us#Gh)Z2ij5G5&LpFzr;@!ous zU+nPW;~#)v8B_>M%wA;5u?2*padHnE!MbMQTY+(0Wgg|0 v3cKQF;e2bA5N6M*E~R!7Tl|5&J97n<934}R7|5Rx8jwm@UwAr_9k^bwbVnG3 literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.device_key.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.device_key.pem new file mode 100644 index 0000000..2bcf5e3 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.device_key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQDUIg4NEiu/diDAlbsWbTAhMKw4iBf2X5ohGJdTO6vhGQdEkhBR +Bgzdl9+0LbVDJY8YStUghwnuztT+IpNCrUtXtRK8Cn3QP+buzSe2ZGPVoEJIbvV/ +QudK/WuUDyTNSRTtW4S3RO36KqtbT6xh1QGTXV3I8sp7qwmcysklqZW8GwIDAQAB +AoGBAKBEDkuPw9+Ftp7pQIxj963LoQGgyEHJ3p9Mfd9TQLrydsw2cf9Uy9mKiWcN +9VkCgkZ/Gt/VRgrW1pIduxXv6O+8S14An+2mTayy3Ga1N6MulD7OHQP9kqR4j8TT +xaYPR/1skjhQ+Y0Uw4NEa3OkQp6lAUEp1aVX/mTfIZBguaUxAkEA/H543Ha6wbUV +iB+pHaBgj1nzarmuEey6kqqs7X0zoZory1X6bdpJ6l0/4qICa6aq+pt/7ywJCNoI +CPK3mL2zGQJBANcUHRBe7/HRWrJNIqB2WDA/gJshq4xOAiIBXWk1wpabvpkCnUjQ +rip5CAL3hXDnCQswZxRN/v7B4IlSxkKiY1MCQQCsL0MUdRMejfLFBXI6defjWiAZ +I86FAr6oziNnQP44sf4zh8pjp3zIihbK4lhsORhYFjrES29NzgG0uHBjhNnhAj97 +gBEwVVNyh8SMnb5EZbA+BDjU24CmECUpYZ9Bypzx3nyTX+zw4uMfgGAZVAhLzF5l +DmYiQqcpoipMsDsoCBcCQQCxBYSicXIPG8G6ZuFbgXFcZR7llgq74mbhfGuVEGbP +qS6ldhJb/IG9O3MFlRwdU44YyJ8QGpBKWF94OpIduF6w +-----END RSA PRIVATE KEY----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.encrypted.p8 b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.encrypted.p8 new file mode 100644 index 0000000000000000000000000000000000000000..8b0a7eb4117de421cfb917de7f03055fdfe2c28f GIT binary patch literal 385 zcmV-{0e=24f&qOn90m$1hDe6@4FL=R0Wb~(2zv&jLbrq;i2?!$00e>oTecB0S5Ch{ zHl7H=qA4HIOB;)ah$8h!;8it(u3j>D`liQs0*+k*%XW@PAMoO|ZVtaORrZR~IdUoh zNf*1NZ0jCJOsIuor2OuhY5SBS)gmT$Plt&Ub|ujkSvY}HF3T6ZV$+;=Cj1_ zqiV0Xy#~l}wq>xTcs~vcY@+sZ^yo(jDeDIm8}2%S8s3H&bnWkZz@9kPK8*&28D$i9 z3|2M?_7i99)`(fX3rvXr@m91pnk>4N^QQR5XPP=(qj)V!5qKV+KU4NR01UFqcL=0O z)N0{uLA$ f>0oNt1g(0Zzb?&!uhc`Lu&kDME*dK^i&ZfFoN%%v literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.encrypted_pem.p8 b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.encrypted_pem.p8 new file mode 100644 index 0000000..19ca3c5 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.encrypted_pem.p8 @@ -0,0 +1,11 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIBfTAcBgoqhkiG9w0BDAEBMA4ECN+YmhCv0ILdAgIIAASCAVu0QEfMkp0xUsNq +0Ek4Nsa/uxcs8N/2P7Ae7qCakkvsdRvvPPH0y+wuj5NgrG6WpPeeEx9fI2oNNTfC +pwncH0Xm99ofVrgMX6XC45LDZtzXNSZd4TdBP6xvlYXbuGegp5GPJ8emzscHCFhC +JfPHemRAcB7DhiWukPosuSUr5R8OluEMJrQLHuQtlDAvMjLEI98lSchPxF8LKCk3 +SS2uCcmc+4WiR0nHG9BOaGi38+PytHAnbfo1mfVSQzLfgLicMAVGysfQ9QOgpQOO +ygYfM/s7Duwbl0rshyXVJP+7BpYJnPtHvO4BTiizU7ZEr4WBiEnnANDrupSdsxeH ++cxZo70YJVdoPdgMd2ke6EIkUhp7HughFg+okldlEtJA4muKeEzwAxZu0TqxOtZ8 +UYRS4Ygk+rN7Y0qTKSYwSkrFBwUDkpctYjRUOeAZ/mYMKWmMn1ejAb5Is7bjEIxl +tw== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_1024 b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_1024 new file mode 100644 index 0000000000000000000000000000000000000000..5b6ba1d037b002b0d62c9903a3582daac05f77e2 GIT binary patch literal 609 zcmV-n0-pUaf&yIv0RRGlfdJUxzZKro+(m=R>yKlNL=U?*N-L4NhtAFS(rd;edexK>+Roc*l5!1eeSb!19#biHMZR!!od?jgH`Kb>w%687GkutJnIO6oO#nY%JBk00O>_vE*8v_P(ZeM zyg1-iXi(EHbBv5C4uMLFyUg%pG)A8XeImB`MyyvOj2`RL1x=`fYG?MQv8#^3@9%x^ z!va7r##ufX=mK*A@81nDOXwG=jKS!Mks0{(q_+)5_cTxgUJ9@&6s`anfHIu5fuH0; zf)t=Vi;POuOB0>6lS0gAIAV!eeFdnK&`0|5X50)hbn0KrYIAk0gtB;cu1_*7~DLp$s41j1L{dy$8u z>Q{6SrHuFJ5=4!AZ6f&-rB0VNk}EF%GnIau0>!zBGX8BCm(}Gomw{5otF4q+j_!p^p1sm3^l)5OV-`8fG^47KzM3=dOYqWQN}Mx08R?P zYG(QI^V0Ya2D(mOHZ6n3J@*&>6Q$zUudW;ASZ zQzH5(Vi)P&Q`Izs^HP*fY*{R7YiqEtv!@=|O8tlwC^M*Cwj0|J48 z0LvBOMMw2v^dO~mza7xFv4n50Qe?_on9muo``SJVw9twDxz;$tm3C(+A5JQ?3KbZA zjJgHmx*IBX4Ilw`JwQ-@w86>Eta4z4TXD9^xK10mFm*b9*FGd6pGoDEYM0?EA=1$? zAh{7-VIk);QUektIB7B1=h0D7V+h(3j{<>!Ay@B-IXxJRi!d!JY9)Q_y>BYaL$g&; zytn>PR~(ZYzYOl@OGA*<38Cgn$53>6_^#wDST1{Xw-R%AJ5f%kWK&JFV-I!P2AUax z?0^i4+Xou6@fpn6>Md z0)c=X@A}4A#y*Q%XsE;Fq)6I8SgLZZ^7^m458-?+{^(mFM#e>F-0j)c{*7c|js3Dusa$NJOJF%*s<_@CX`P5&9Zxl{ zJ26krm{pSK35pUk>#y4J{_H2XK9P;o*ErV#fq*qDV<*E0RC9D5w-*D^YaVVcH?W@L z7s;4%??z;ZXmnf~khf-nE#R3RkTMy4Ep0;5M@#wpmeJ?wh-{#-F%}3)vYB3 ztJJUoqYbWSsq{2`FhC1&(maox?BB8At*_qHegN_Cm(UerlhGFqSp+Cz&}#6X`{ z2H3(|N2wGExlD97fXsOeCn^W`4Pn++s+M#D>;O(~wfl~y;qgj?b^u`WqW``cC|ig? z96y!M7XS2>*B=ru_+Qy_9la*KLK^5a-5uR~wh=@#U7Tn=6AH}gihl`NTe>q(s6__@ z%!kaMhJ)^ct&_f>W0CD_-U+Y4I0SM3pkvJ2 zC5#@2b&4ibCx^XoK}a?;7P^WLB95^r%-L{Z^TI${%`T)LB-5txgX;UR9*9tfG zp0JoMr}gZ3&ElIoiQP({zW|?|Q29=N}D%WseeY63jXE#yASA&jVGam|+W!jT0{up!{AH7z;XMwF|1&oLlT zIf-10|5X50)heo0Ic&e?J7A6sOJ1oEf|dfVdPFl7nV#Utbk!IcE+x| zwzL2mzN#?8R)=NF$soY8eCHCB3H|LyF9zTm1EmhU@HP^xA!jo7)<0XT9bP4MXZ}Tg z9vpLn130B*c(tPYd~`tvpU+SK#>$+(${mFip2Fs^tL+p5xrw4e0R9cryNig*Qm99AT2>K`J_ZtV`sYF+WVfz|JC5a< z32|_d#wA0pmA>Jqt>Mq+?{md{55I*UK^tnI4QyYb3M%J`W?RySWV>v6a0W~ptFc#8 z2+k-`_?PuZljI(Z0ycu)f%7=#+3so6_4~q}&izudsVk7dFnzrcH(x^A=H{OU7it9{ zgYY)1WTAuDc>i}P!P>*jVZ-o?Z5mw5N5SWmc^m+(>O|VI_8zn(F&6&QuB}9w1$fl; zoTz0hq;ReN$wnV{J0^Im88if^GkC^Y=)-Cng#lZ*eux-L-x(rbUK01LbXkwx0H)&siZdBsGY zPMq(uI&?)?UC^J;$pV4_0RaDqB(do1D>>Gq+(e`t>wW2jmbau)pXl!~H>zdxJy}70 zFQJ@~IHF5WD^efq<~`Y-ZapdE=Lvf^%`bxIV>8_ zpi17`dW!em{S$qPsQ zzinB>N&dd23n`lgx*LKC_VcD7mz0m(-cw6)yAq_15GEpUr!x{xm4s%+;_{m6IW3%P zUSyYXejLf2KjE=QU6-!scDoFt6`f&l+0&(85wU;4{*%q6qPV8GmC(8`8*ZrUuiq8z;aBT#Uur zDKGrMBOFWEVn`AV4MGdUv>t%IN_x}+7WbM=`KGAls{0t4O86`nN}ZmdaAZh%0M=q= z(+Zh=EN$fYA?`prE2p~xf&l+H9=lOdxG5_)MY;GlVN!q)iERlQWT;`HHkO%rFj6$8Eo2%|Sb z{rF3nAU+bOCGW7&gx08o=COjKnG9OXBv*(*XA_7DIoHpF9f_YHl z6Rf__Wk*KocnrQNJq$tmKXqr5#tV-L-)jzV4sP&t6|KgmadNx7o=1RY_L`XR=my%F zxJ*{_68OcU5|vB!271W?f&l>lq7j)r+-H%^f<*}JSZVtPV&|7V_uzNj4B0wPZU%(I z!-#xJMnItAM}A*#OO?#rh~@QEQ+PsjlRKVqeTyM#dxk0l02_r9_ zBsL~(g-PWYbR%PVYD*$Dua&VxhCu}x`T7lBNtJ2|fQF1p@+xlc!^9lFEq)(oD{-AG zMv3>^$8)&&Cqm9W>bB2ITLy^6lMzc_-U;tIQITU0U)4vV zu^PNP`(&Igf`#YYx+c>R;XC3`YZg5g(tGs#J^3oGTnXfccDQZ1E2^{1-{SxQU()Tj Tbx&XXcZMQG44N=;lHrQ{Y;S%h literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_4096.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_4096.pem new file mode 100644 index 0000000..9929467 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_4096.pem @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_512 b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_512 new file mode 100644 index 0000000000000000000000000000000000000000..7ae50f23bdc90e48f165aff330220508a99699f5 GIT binary patch literal 321 zcmV-H0lxk)f&o1O0RRF)0MR=zU#S5?J%(*^zCdnK!AXBtb)hXb<-t7_Lcx{!|rfVZ|0=xRXKgPd)!Gy#fOP009C)0Fimb?T$65*W6;Z_#YNk zQ@#a*O7BqLt*OZgemVyg$o&?(z~q?GMVVlAY-DAL#~wAJ%@hSVITaeX4+WM10RkZa z=2Ex*d>@xxG0k=x#?fIqh)t}0wDn9_HXM@#5)1QLVZv(dI{VJ z<#zME>JR1d(>*U^;{HF#AygqJ2JGkYa5*N@$(u= Tmj7@iAR3)zxTTMr$9H6O@syE# literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_512.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_512.pem new file mode 100644 index 0000000..1e2fb41 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_512.pem @@ -0,0 +1,9 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIBPQIBAAJBANE7MF+pAUI9hm1yvkBuUcFJf1d1oS025cE9DyAa0SNt+nTSPiOw +cPygat7sQYiE/lQVa2HFFmK4k0HxTz3/Lr0CAwEAAQJBAJF5xO2ONajX3GK2+B8W +VVO+BYNK71DfranJCX46BxXI/Ra7wOSY0UWZYHVsZGWJxx41os0UBTg5FRq4DwWW +AQECIQDo69eo39iQqjwhpAQxatMh2CWYT7gokyu56V+5o2V3fQIhAOX2b+tQxDsB +w0J9UDN6CdwI5XbzveoP5fHTPS9j4rhBAiEA3c+y6Zx6dZHYf8TdRV5QwDtB2iGY +4/L7Qimvwm6Lc1UCIQDDXWrVsocTTjsReJ6zLOHFcjVnqklU2W7T1E8tvKE3QQIh +AMRpCFM7MrS2axuc8/HzGkqW/3AlIBqdZbilj5zHd2R0 +-----END RSA PRIVATE KEY----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_aes128.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_aes128.pem new file mode 100644 index 0000000..8961bd9 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_aes128.pem @@ -0,0 +1,12 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,B3A0D2BCEF4DE916D0BBA30A6885251B + +v8y74AGReaPLmDt6O8wir6hX1Ze8K4fVNkrLqfDMdW5E7jBXKO8riCMNmSjQ9fyh +eTicej93+8krcIvSXKW18TdO+EWezQevgnLrAZQWaNPH2j4B+K5gm701uiiKFKVa +1zngAOByePYlN6z4JLbiCyJRhxSo5zCaUYkKC2eGh8mlE64QmokPSCAj0wcCDzGh +hdhBg1vm0GmaQwIDVn+8zMfahscXVMtBmyQf5YP4PQW2nqOt7aZHjBNdg9qnBpGw +b6YuY7eZ4FgQvYcsNCi34NroJb9pkTrrF2F9Meb6+3So7jtMFG/YaJdCuXtf01g/ +Qm+XA5pJUtIUr/hLQjhkaOVUtXv/k0o/MR4k5CbAmboLt6YHf5V8+01vk0bvv5dI +70pVdXMmx26xDZOGmjYzd93PWc+75jak3GN2fbWryQs= +-----END RSA PRIVATE KEY----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_aes256.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_aes256.pem new file mode 100644 index 0000000..7671a30 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.key_aes256.pem @@ -0,0 +1,12 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-256-CBC,F076229CDC2BCB3B8722E3865855B45C + +WFV9QWzr4tNmD+1OeQ7BceQg5LVQHp20Jo1Ax29lq8JTPzeObhtaU2MUHlcPKHUS +vK4FyQxJ25CyMubbnaZqCCz9pNbseFuJ1tob9UqRmXkZ8HV3snRjJRbcctD+V9x+ +Ymi1GreXoDQtMp0FtMiFjPvIYciBQnaRv2ChMAnGXNbZXCxWWA9E5S3a+yWzo+gd +wEcowL+SUac1PEDGHokhKn7nctvI9cC4hE6JmKM1sD68/U3rRPXMGqmC7umqyT5P +gjWBb1uu0iRjFC9eQUsaKPxey5Be710GFlyf/Ff/tep7RhkryIWEPvIzYCBf6rhk +3pysFgTjfiUuBYUNumjXr/q5hgdtb75788XUDxKwAoUx+m8gi0nJg35CN2nmQ054 +VJxcZlNv0wqnJ+GTTZeN6fiAhTpVtHsqHQomRSfaBiw= +-----END RSA PRIVATE KEY----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.noname.p12 b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.noname.p12 new file mode 100644 index 0000000000000000000000000000000000000000..9d27999fa053e524fa4ca893c2d13ce9ed49bb7c GIT binary patch literal 1483 zcmXqLVm;2p$ZXKW+RMhN)#lOmotKfFaX}Mn9ZM5y6;Qa$poyspA;q?!i76W>l+MJ+ z0HhKSGK>Z?Y+O(ico-QC_*gicZ@+tPGI5?Z6B7qRLlcv+>xsu7BXuG}7WFyS3yN1O zJiB%z_haDaFJk>AMt=^4KDj&FlSO0x2df3KgsbB{=vL6^R#b?e&OS-QcS zGCN$J5|-cmTV%e54S!)2?UI zWu*`8Kl-TagceQVV7aLOe%rD0rav=xK9;Py<7Mxpy7}0RueYwx?_+3MS>c%f$vi$Y z>qPY0e-jNE!}i!EIz_nZJDZx%Fa4AynB5}RZoGR%m9)iXor?9S-~7oa}kp z&%|qA>g?W->CVE3V>Q*gZY|2(~y2WNWEVzf?I z<(U-KKKn^n)b)LfN?Z=|E{NH6jr(|qli}4W=1uv^j~B=u=E~*SW5W}$okLAO`S{IP zm&N{b_Df#*e&uoyfd~wEuSU-w(_`~mv6zJ zXND(%Y3vJ98Uv=jrz}lO4}rpWf%qmHH!Q_*F){%q7Xk(6VkShcPs!1(#%Z>ogb37L z{j#quvpMaUTGqUyQ-7E)zkJ$hUr<88Ndd{X+aJDG=s(t#T=rr1MYoSPrQV;Yy}z+m zy?`~c?A~9^kPHi*)!q-?Fa37Dv_6naZgJ(Ox~e3WYP$wqCBy$MnR+L9v^ugY2xd#-gtrp&?V z%1b_dxY9+VRUwb~ASsUAx z{&$<{bAPTu(cML_!?$=aJkI&ra-Px8)p5DT#2>Fzt$sAlbPs*aYTIDLJE^z&&fe?l z^Sk%Vzox!;X90tFQ`-xh6V7XQZrpS%wK>%Iy6xiU|AVYWX5_w_yT7M+A7@N?Xa9pO zC+yntHF^4$pPv6HK!{B^ccmIv%Zd0HP5-EE{lWK-zxlMywZ@@flle{ob(fXKCWfJZ z_vby)@(Da^SW$QG_ddtyKiO82(qFgbfBiarGH zyBpJ1of*Za&nY)6zS(c*82^(q&7^aotL?qtXSb}Jpn6Gv1;=%GfA;Bu!uO$&LNQUoK`?>=Jpus$0zm-LJ1}3V0YW{7 zZF0UqZc)KWe^+&(EjH!BJr5un(Iaj8bkaT}uyFjKYToQYh=l%B6>DL|7Gk)QLGe#L z|1P}(0|5X50zm+gdBp9GHK^CzVz&4n7FAQe1%pcOP~WYo$q9Zs2NlTu7Q4XYn9)U< zV0CO{Wr@cgHKNTF1vohs8n_PymH`0*Apq#>*Qnpvkg7Z(qy#Z)(;?U;m`}JUlPkID zU%8`YcYOjO0Oj^?>rliy0mDLlP&0Z7+z91%^S$a1{HF-OsY=oO*SU z*nh;`MP5+AJ3-nZnB(&MLMgApZi{nO0wDmyU24^`hZ9aa5qO@nEaAm+HD{_xRM~FR t)K4wEp*KMSAppc_2va*Uw6<#-ob&PX8cLS`a3vrbon^SCkDSMMWONLcmL~uJ literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.unencrypted_pem.p8 b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.unencrypted_pem.p8 new file mode 100644 index 0000000..e07375a --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.unencrypted_pem.p8 @@ -0,0 +1,10 @@ +-----BEGIN PRIVATE KEY----- +MIIBVwIBADANBgkqhkiG9w0BAQEFAASCAUEwggE9AgEAAkEA0TswX6kBQj2GbXK+ +QG5RwUl/V3WhLTblwT0PIBrRI236dNI+I7Bw/KBq3uxBiIT+VBVrYcUWYriTQfFP +Pf8uvQIDAQABAkEAkXnE7Y41qNfcYrb4HxZVU74Fg0rvUN+tqckJfjoHFcj9FrvA +5JjRRZlgdWxkZYnHHjWizRQFODkVGrgPBZYBAQIhAOjr16jf2JCqPCGkBDFq0yHY +JZhPuCiTK7npX7mjZXd9AiEA5fZv61DEOwHDQn1QM3oJ3AjldvO96g/l8dM9L2Pi +uEECIQDdz7LpnHp1kdh/xN1FXlDAO0HaIZjj8vtCKa/CbotzVQIhAMNdatWyhxNO +OxF4nrMs4cVyNWeqSVTZbtPUTy28oTdBAiEAxGkIUzsytLZrG5zz8fMaSpb/cCUg +Gp1luKWPnMd3ZHQ= +-----END PRIVATE KEY----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.withCA.p12 b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.withCA.p12 new file mode 100644 index 0000000000000000000000000000000000000000..ae029dee0fd45e90460d0eacd15f9be1882756ea GIT binary patch literal 2089 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 E1>TCewg3PC literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_1024.cer b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_1024.cer new file mode 100644 index 0000000000000000000000000000000000000000..fc92d056429c92b14fdc609505a5528a38ddd3da GIT binary patch literal 475 zcmXqLV!Uq9#OT1p$?)-T`++N8!VeqpvT6)$}FigkQ3)MFatt!Lqii2 zW1}c>USnfJ10!Q7*FeWm%s>QUDldwuhC&7cAaQ14PD3MeJp&*#G-#ZU>?%f92Ij_I z27|^t7JSY6*W$;@+`i|$?C)O$;UTG zreV3rM3+B8n;$-Z?C-Lx=WvPT3!e*Dd{h#*I85z1z_p#p(y(l}<|sS2Nm9q#MI#?}#GK1|G;Nj9n?r9a zx*tqPn=Ep8#%g2J%eAqATyu5`M7USYn40q6C$>rQ=PUlWS*MNEQ%>babX_=L_GM?X j$6)$}FigkQ3)MFatt!Lqii2 zW1}c>USnfJ10!Q7*FeWm%s>QUDldwuhC&7cAaQ14PD3MeJp&*#1iDZO*;$ON49rc8 z{0u;GE~X|%MutNR_TT<>zJSeT^Za|gwm0>UnA?6&&rWT6+_6ixVL4aXImM&>R`J}R!t z+jA&U_kPRFCBl9a^}ihQSF@EY+r99L$0v8O9WpZ)@!zhFOWnlzWtp*8&m^W2_0?9l zw)n8tFa2|oB|f!S?S*U#tJV9Eu!NU)c8mVMWhyc4la_L1xyOI0f}@sf*H3S3R=#}F zSLVfo6y=MD+>iH`Cet R9GogVhX2<0z0YoW4gkCo^O*nu literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_2048.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_2048.pem new file mode 100644 index 0000000..1ed0141 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_2048.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICWzCCAcQCCQDxw4fA1PRXxDANBgkqhkiG9w0BAQQFADA0MTIwMAYDVQQKEylh +eFRMUyBQcm9qZWN0IERvZGd5IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNjA2 +MDcxMTQ0MzJaFw0zMzEwMjMxMTQ0MzJaMCwxFjAUBgNVBAoTDWF4VExTIFByb2pl +Y3QxEjAQBgNVBAMTCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMKgv9v6z3AGRLOf3o092S/ENz33Z2tlguOIuh2Apwp2ziHFvul7m9iF +xsEcEARcvpkRPVo6ifJLjhJErenvvMAIS3WoO1lyenMaGoNddLeRRB0snRn7xRcl +DYzCYS3fhJmkE06RL/TCTyY9GXa7odRI8kcWuByZog/be15lsgn0pjNKjJICdCer +Otq0TAV/pfzRBF9lcyboHWQFOu9UVmDp3LsV/9o1GJbyKiNZd0j/GnDFOQbXy7GD +I9PJTRzo4GQj0cJHY7JelORKiIsymcoMNRTboFRAx5y9jAGF8Ks196Rq/+9gYsvi +eE0h+pbdLLbM0uZvAYqzIGK9hRR7Ja0CAwEAATANBgkqhkiG9w0BAQQFAAOBgQA8 +L1Zz9K6M/PQCYWrfnTjbPKY2rTB1OvSV0Uwy5KKPQRS1+oK9dx4K0miX+1ZvI1bo +f7/1aFXOsW3dpTwYUSjJvTMjSwNUPKiB/q/xwA1mzsbIZsbnhIITU95mOJ3xFhgc +YFdJ4saL7pppTzfOxZ+h9jWbDwgJJAwx/q+O72uE5w== +-----END CERTIFICATE----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_4096.cer b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_4096.cer new file mode 100644 index 0000000000000000000000000000000000000000..40bbe94fdd8d5fc57dd7463e4e9530b9d661e7c6 GIT binary patch literal 863 zcmXqLVvaUwVmiXa$?)-T`++N8!jBs8vT6)$}FigkQ3)MFatt!Lqii2 zW1}c>USnfJ10!Q7*FeWm%s>QUDldwuhC&7cAaQ14PD3MeJp&*#1iDZO*;$ON49rbT z{0u;GE~X|XMutD?TV}>;ow{Ja^XqY}Kx&Zef|Au{+XOz`xm&ZC_3Bzx*40-wFfQg@ zm%j3gNv(kccj0BVI|(i7yZNjX1&Wq@zCAtZ{?bm~_lpMDeGtww(0oyI-?vNu6 z^TXM09Ex^dDZ;tar^LMBOeK%H7W;SJ#A{)zrj;HmnoStPqxZLgEm3zNIDcdNGvx){gK$*>jXI`gWlo-;Cf zm$Cl}S9azz?Puni3$k++BCg c{uLH|{+cssT4etA3m$>ump}GawD^_-0G~{BVE_OC literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_4096.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_4096.pem new file mode 100644 index 0000000..b7aed1c --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_4096.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDWzCCAsQCCQDxw4fA1PRXxTANBgkqhkiG9w0BAQQFADA0MTIwMAYDVQQKEylh +eFRMUyBQcm9qZWN0IERvZGd5IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNjA2 +MDcxMTQ0MzJaFw0zMzEwMjMxMTQ0MzJaMCwxFjAUBgNVBAoTDWF4VExTIFByb2pl +Y3QxEjAQBgNVBAMTCTEyNy4wLjAuMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC +AgoCggIBAPwntJldKsrQMAz6410QZVIdoHSrNrYQ8NzdfKMF1a0lBavUsAGjDa5n +qfQ0fTBAC3HTJtxghCe7DjohEHKk89uXYt+liQ3vo6Nc+Zw9l2bDyLKffpOdVc/l +tweL7FyQIM1fl2W5r/S9OffFRMJKXiN1HPXrfGYRrwz6B2cgUBtSgI+odwCmdfjb +Ya4Wo8Za53UGeQ7v0eQ0lEDgXAhx3c2YIoXXxfe2J/5KdZnpXtRJWTJaoAbaQ4tU +xECfVwbYwltHqRQJuUx0N4DMeQwnKgf3DWHWVqqWdALsAE5utfuOpuHxSoN2AGDz +ov++GihbiEAcP5XPFv/0ldcfEi/4X9lyHb0mvUIa6DTdHd17thFEM12caD0TCszq +in8JWVu6M0+oRQcDzIfMn4aD7oKtk76gY5HtbN4Jr8E4BHH/oGPe6l4mQl+W4f3o +Zp2e7yG5WBVA9sjJbCmlxiWMHod1iiZUJ4e9cEFINjMWuooPIo6xKMzZcGHzwkBa +zS6kHyTsHcfdHcu4aVMlJ9cKN/aesJgup/XseM3imzuJ3UqfvwCfneUKfM6DM8J3 +mFfSwUBvK8uLsMw5Elim/1oIbBG0PTt7BiLiNd0pU/weuL92y2+QB2oCPM0t5D7L +IYyoZHHNlvTCkQVNsCHgrDUtOdpGlKt6zzEgUTqwC5i5N3p/w6uPAgMBAAEwDQYJ +KoZIhvcNAQEEBQADgYEAcrCtPXmZyPX01uNMh2X1VkgmUn/zLemierou7WD/h7xL +dOl4eeKjFBqIiC19382m1DK4h1F8MceqaMgTueCJpLM7A2cwN3ta8/pGP2yEVhdp +h10PkdRPF/AU8JmxnFaADsc6+6xWbbrdNv5xcvP1bJKWWW+30EhRF9PxjXiETXc= +-----END CERTIFICATE----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_512.cer b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_512.cer new file mode 100644 index 0000000000000000000000000000000000000000..48c6e13aa0af5678668c7d4a3245a3304030f01e GIT binary patch literal 406 zcmXqLVw_~q_=ky;;p5@<16RI;A2Q%&R#QM#fOCfsUb=fe6G@UKCReg$x8h;>^OFhDPRk20&Zk9;ChBUA P9b0QY{GW6AgzOst>~fQg literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_512.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_512.pem new file mode 100644 index 0000000..8191e48 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_512.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBkjCB/AIJAPHDh8DU9FfCMA0GCSqGSIb3DQEBBQUAMDQxMjAwBgNVBAoTKWF4 +VExTIFByb2plY3QgRG9kZ3kgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA2MDYw +NzExNDQzMloXDTMzMTAyMzExNDQzMlowLDEWMBQGA1UEChMNYXhUTFMgUHJvamVj +dDESMBAGA1UEAxMJMTI3LjAuMC4xMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANE7 +MF+pAUI9hm1yvkBuUcFJf1d1oS025cE9DyAa0SNt+nTSPiOwcPygat7sQYiE/lQV +a2HFFmK4k0HxTz3/Lr0CAwEAATANBgkqhkiG9w0BAQUFAAOBgQAKRT6LwFr1xedJ +b4qrvjB+EwV/0p4TNNXUS9S30rMSFvRar7VxvLP1lpYj9PR1JGSZMG/B6hR4yumF +Rjwel9FPgNcWCW4DXAWqz3UQF7oZtJL6K+XJpQ0gwC+Nxc+RRGNLMlK7dLiqFh/V +qZLej5Xy93M0JyZBiLV88P+c08gd7A== +-----END CERTIFICATE----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_aes128.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_aes128.pem new file mode 100644 index 0000000..9a75fe9 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_aes128.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBkjCB/AIJAPHDh8DU9FfHMA0GCSqGSIb3DQEBBQUAMDQxMjAwBgNVBAoTKWF4 +VExTIFByb2plY3QgRG9kZ3kgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA2MDYw +NzExNDQzMloXDTMzMTAyMzExNDQzMlowLDEWMBQGA1UEChMNYXhUTFMgUHJvamVj +dDESMBAGA1UEAxMJMTI3LjAuMC4xMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMDo +g6K2iXFftW+Qk+rrzkMGWrtfY6YSxPstPRrI7akluUEoyWGITXbK6L3QfERrf2eu +CnWyciQiHVRoHC0EgZUCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBT6YhR8x/bBteK +lr8E0l4mATOnYlsmge+z/SFYs4bDBofqlwQCVJXNSBA4ZsEjgP9qIWTu/85QrVGq +LrkewSM6Oeh95LGnE+uhJVtIX++O+Hsex3H1UL067dCG99XmDhqbEU9AI6YSZu2p +cjoSowFELtOoG667+id9QObfV3EQoQ== +-----END CERTIFICATE----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_aes256.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_aes256.pem new file mode 100644 index 0000000..4f3074e --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_aes256.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBkjCB/AIJAPHDh8DU9FfIMA0GCSqGSIb3DQEBBQUAMDQxMjAwBgNVBAoTKWF4 +VExTIFByb2plY3QgRG9kZ3kgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA2MDYw +NzExNDQzMloXDTMzMTAyMzExNDQzMlowLDEWMBQGA1UEChMNYXhUTFMgUHJvamVj +dDESMBAGA1UEAxMJMTI3LjAuMC4xMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANAW +9PdXa5u4gWi5VB5p/eQmOtteRq9/54JkiEs8cVNrTQgZsjjU1LGedE3JwBqZ1EIW +HGPjcGg5dVxFjkn7RekCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBmJMt0Crdd/BPn +EdmzsVXou0zTizTC8wyUPMVpg/KzzP7fhZux/ZIrH9/RVcJd9y+B2/mXc3C+K99+ +TXQoYKsLGArfDPzmpy1wPrdEcB1A9gkWDl1Uq6xRyvrVm3gX8NTITRuGKL9njgWx +2SrApIBtOOUOinYtfH3745cVVl5HOA== +-----END CERTIFICATE----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_bad_after.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_bad_after.pem new file mode 100644 index 0000000..79eb9cc --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_bad_after.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBkjCB/AIJAPHDh8DU9FfKMA0GCSqGSIb3DQEBBQUAMDQxMjAwBgNVBAoTKWF4 +VExTIFByb2plY3QgRG9kZ3kgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA2MDYw +NzExNDQzMloXDTA1MDYwNzExNDQzMlowLDEWMBQGA1UEChMNYXhUTFMgUHJvamVj +dDESMBAGA1UEAxMJMTI3LjAuMC4xMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANE7 +MF+pAUI9hm1yvkBuUcFJf1d1oS025cE9DyAa0SNt+nTSPiOwcPygat7sQYiE/lQV +a2HFFmK4k0HxTz3/Lr0CAwEAATANBgkqhkiG9w0BAQUFAAOBgQCmPSs9EceViMZD +ZTXDZpQWJFcXaeInrXWgYWyVgnHBY/eSuqNCxkV/ehv/Wc5pWBGnrX+4cSvQ+TpQ +FdZegeOjvgipjtJb/0TJCcvgcdHTntEM0h7VXjfbsJXAHwJPFzWIKxV4jeFXnaaw +W+YHrj9GQ8PnFmapPuh4h/y6LyHAcg== +-----END CERTIFICATE----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_bad_before.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_bad_before.pem new file mode 100644 index 0000000..fe72b54 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_bad_before.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBkjCB/AIJAPHDh8DU9FfJMA0GCSqGSIb3DQEBBQUAMDQxMjAwBgNVBAoTKWF4 +VExTIFByb2plY3QgRG9kZ3kgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTI0MTIz +MTE0MDAwMFoXDTI1MTIzMTE0MDAwMFowLDEWMBQGA1UEChMNYXhUTFMgUHJvamVj +dDESMBAGA1UEAxMJMTI3LjAuMC4xMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANE7 +MF+pAUI9hm1yvkBuUcFJf1d1oS025cE9DyAa0SNt+nTSPiOwcPygat7sQYiE/lQV +a2HFFmK4k0HxTz3/Lr0CAwEAATANBgkqhkiG9w0BAQUFAAOBgQApbldYefE8A0ez +SYvAuCtYxx/2KHwBRD/cR0q7widl9WGjVC/dsnbFo109vHEr3FP1HVYSI0aweiaK +XZmpUyJ9DprbbWQqaLuDnqIH8X7kfiMuO7/LGQc812iDJI2Akxp9cIlPBFBD8GVx ++0EphzSodDDlLD8bPqLaWTE+8Ydtjw== +-----END CERTIFICATE----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_device.cer b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/axTLS.x509_device.cer new file mode 100644 index 0000000000000000000000000000000000000000..c966743c9ca724ecb81928d0f6ad7e62b29eab92 GIT binary patch literal 401 zcmXqLV(c|&Vl-#sWcYZv{lJwk;l~Vk**LY@JlekVGBUEVG8pI>iW!KoF^95n3G*ga zg!lw21Qg|Gr6!jc3KRT4UNq841mzkKu(<3zzhh@4Gm39jE$nid5w(?4UCMT zTmx-GO#^j^X$mN&DY>WhSR8IHwksWTs^%CzhldG|oqM3?nN8b7L=qL1QOVVA zB|csu?fqp62d3^8%Qa9mSYy#4{w;o%qQvxI>(vh>*4W)IqNC%Ho9fI z%iCXCtE2tbBwl5l92 +#include +#include "ssl.h" + +int main(int argc, char *argv[]) +{ + bigint *m1, *m2, *d; + BI_CTX *ctx = bi_initialize(); + char cmp1[1024], cmp2[1024]; + + const char *plaintext = /* 128 byte number */ + "01aaaaaaaaaabbbbbbbbbbbbbbbccccccccccccccdddddddddddddeeeeeeeeee" + "01aaaaaaaaaabbbbbbbbbbbbbbbccccccccccccccdddddddddddddeeeeeeeeee"; + d = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext)); + memset(cmp1, 0, sizeof(cmp1)); + + while (1) + { + bi_set_mod(ctx, bi_clone(ctx, d), 0); + m1 = bi_square(ctx, bi_copy(d)); + m2 = bi_residue(ctx, m1); + bi_free_mod(ctx, 0); + + //bi_export(ctx, bi_copy(d), cmp1, sizeof(cmp1)); + bi_export(ctx, m2, cmp2, sizeof(cmp2)); + + if (memcmp(cmp1, cmp2, sizeof(cmp1)) != 0) + { + printf("Error!\n"); TTY_FLUSH(); + break; + } + + d = bi_add(ctx, d, int_to_bi(ctx, 1)); + } + + bi_free(ctx, d); + bi_terminate(ctx); + printf("all good\n"); TTY_FLUSH(); + return 0; + +} + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/datatest.c.old b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/datatest.c.old new file mode 100644 index 0000000..a5703fb --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/datatest.c.old @@ -0,0 +1,280 @@ +#include "crypto.h" + +#include +#include +//#define DEBUG_TEST + +typedef enum { + encrypt, decrypt +} CryptoMode; + +void hex_dump(const char* header, const unsigned char* data, const unsigned int data_length) +{ + unsigned int byte_count; + printf("%s (%d bytes):\n", header, data_length); + for(byte_count = 0; byte_count < data_length; ++byte_count) + { + printf("%02X", data[byte_count]); + } + printf("\n"); +} + +void do_rsa(const CryptoMode crypto_mode, + const unsigned char* data, const unsigned int data_length, + const unsigned char* modulus, const unsigned int modulus_length, + const unsigned char* exponent, const unsigned int exponent_length, + unsigned char* result, const unsigned int result_length) +{ + RSA_CTX* rsa_context = NULL; + BI_CTX *bi_ctx; + bigint *plaintext_bi; + bigint *enc_data_bi, *dec_data_bi; + +#ifdef DEBUG_TEST + printf("do_rsa:\n"); + hex_dump("data", data, data_length); + hex_dump("modulus", modulus, modulus_length); + hex_dump("exponent", exponent, exponent_length); +#endif + + RSA_priv_key_new(&rsa_context, modulus, modulus_length, exponent, exponent_length, exponent, exponent_length); + memset(result, 0, result_length); + bi_ctx = rsa_context->bi_ctx; + + switch(crypto_mode) + { + case encrypt: +#ifdef DEBUG_TEST + printf("encrypt\n"); +#endif + plaintext_bi = bi_import(bi_ctx, data, data_length); + enc_data_bi = RSA_public(rsa_context, plaintext_bi); + bi_export(bi_ctx, enc_data_bi, result, result_length); + break; + + case decrypt: + +#ifdef DEBUG_TEST + printf("decrypt\n"); +#endif + plaintext_bi = bi_import(bi_ctx, data, data_length); + dec_data_bi = RSA_private(rsa_context, plaintext_bi); + bi_export(bi_ctx, dec_data_bi, result, result_length); + break; + } +#ifdef DEBUG_TEST + hex_dump("result", result, result_length); +#endif + + RSA_free(rsa_context); +} + +void test_matching(char* test_description, + const unsigned char* expected, const unsigned int expected_length, + const unsigned char* result, const unsigned int result_length) +{ + int test_result = memcmp(expected, result, expected_length); + printf("Testing %s ... ", test_description); + if(test_result == 0) + { + printf("ok.\n"); + } + else + { + printf("failed!\n"); + hex_dump("should be", expected, expected_length); + hex_dump("but is", result, result_length); + } +} + +void encrypt_decrypt_should_yield_original(char* test_description, + const unsigned char* data, const unsigned int data_length, + const unsigned char* modulus, const unsigned int modulus_length, + const unsigned char* private_exponent, const unsigned int private_exponent_length, + const unsigned char* public_exponent, const unsigned int public_exponent_length, + const unsigned char* cryptogram, const unsigned int cryptogram_length) +{ + const unsigned int calculated_cryptogram_length = modulus_length; + unsigned char* calculated_cryptogram = malloc(calculated_cryptogram_length); + const unsigned int decrypted_data_length = modulus_length; + unsigned char* decrypted_data = malloc(decrypted_data_length); + + printf("\nRunning \"%s\" ...\n", test_description); + +#ifdef DEBUG_TEST + printf("encrypt_decrypt_should_yield_original:\n"); + hex_dump("data", data, data_length); + hex_dump("modulus", modulus, modulus_length); + hex_dump("private_exponent", private_exponent, private_exponent_length); + hex_dump("public_exponent", public_exponent, public_exponent_length); + hex_dump("cryptogram", cryptogram, cryptogram_length); +#endif + + do_rsa(encrypt, data, data_length, + modulus, modulus_length, + private_exponent, private_exponent_length, + calculated_cryptogram, calculated_cryptogram_length); + +#ifdef DEBUG_TEST + hex_dump("calculated_cryptogram", calculated_cryptogram, calculated_cryptogram_length); +#endif + + if(cryptogram != NULL) + { + test_matching("cryptogram", cryptogram, cryptogram_length, + calculated_cryptogram, calculated_cryptogram_length); + } + + do_rsa(decrypt, calculated_cryptogram, calculated_cryptogram_length, + modulus, modulus_length, + public_exponent, public_exponent_length, + decrypted_data, decrypted_data_length); + + test_matching("decrypted plaintext", data, data_length, + decrypted_data, decrypted_data_length); + + free(calculated_cryptogram); + free(decrypted_data); +} + +/* configure without CRT! + + prepare data with: + > echo "" | + ruby -ne '$_.gsub!(/ /, "").scan(/../).each_with_index \ + { |b, i| print "\"\n\"" if i % 16 == 0; print "\\x" + b;}' */ +int main(int argc, char *argv[]) +{ +#if 0 + unsigned char stuff[] = { + 0x22, 0x33, 0x44, 0x81, + 0xF1, 0xFF, 0xAA, 0xBB, + 0xCC, 0xDD, 0xEE , 0x01, + 0x45, 0x44, 0xfa, 0x8d, + 0xfa, 0x20, 0x99, 0xFF, + 0xab, 0xda, 0xac, 0x40 }; + unsigned char resA[sizeof(stuff)*2], resB[sizeof(stuff)*2]; + + BI_CTX *bi_ctx = bi_initialize(); + bigint *bi_data1, *bi_data2, *res1, *res2; + bi_data1 = bi_import(bi_ctx, stuff, sizeof(stuff)); + bi_data2 = bi_import(bi_ctx, stuff, sizeof(stuff)); + + res1 = bi_multiply(bi_ctx, bi_copy(bi_data1), bi_copy(bi_data2)); + res2 = bi_multiply(bi_ctx, bi_data1, bi_data2); + bi_print("MULTIPLY", res1); + bi_print("SQUARE", res2); + bi_export(bi_ctx, res1, resA, sizeof(resA)); + bi_export(bi_ctx, res2, resB, sizeof(resB)); + if (memcmp(resA, resB, sizeof(resA))) + printf("OUCH - difference!\n"); + bi_terminate(bi_ctx); + + exit(0); +#endif + encrypt_decrypt_should_yield_original("Works only with Montgomery", + (const unsigned char*) /* data */ + "\xBC\xD3\x12\x6C\x93\x13\x14\x4C\x00\x5D\xFD\xBF\xDE\xE4\xD3\x60" + "\x29\xB8\xAE\x47\xBE\x0B\xB6\x0A\x39\x88\xB7\x93\x19\x14\xE8\x88" + "\x4A\xDE\x00\x46\x89\x5A\x11\x1A\xC4\x8F\xE8\xF7\x27\xAC\x59\x80" + "\x03\xC1\x93\x14\x01\x00\x93\x15\x07\x00\x00\x00\x01\x01\x05\x20" + "\x93\x16\x0F\x42\x34\x33\x3A\x58\x30\x30\x30\x31\x30\x31\x30\x30" + "\x30\x31\x92\x6B\x10\x6C\x69\x62\x65\x6C\x6D\x65\x74\x72\x65\x65" + "\x2E\x73\x6F\x2E\x30\x93\x18\x02\xA5\x92\x92\x6C\x03\x96\xE3\x0C" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB7\xBE", 128, + (const unsigned char*) /* modulus */ + "\xc4\x5a\xcb\x35\x95\xad\x32\x4a\xcf\x9c\x82\x45\x13\xb7\x42\x35" + "\x22\x32\x6d\x2e\x6d\x26\x2e\x6d\x00\x9b\xae\x2d\x9e\x78\x1e\xdd" + "\x40\x23\x17\xa8\xbb\xa1\x07\x86\xb4\x3c\xbc\xe8\xd5\xfc\xd9\xeb" + "\x3c\xad\x63\x11\xf3\x1d\x64\x81\x96\xf2\xf5\xfe\xca\x5a\xf7\x8a" + "\x15\xcb\x90\x81\x68\xae\x59\xb4\xe1\xa4\x41\x99\xcd\xf3\x98\xbd" + "\x3c\x48\x37\xdb\xa1\xc3\x1c\x6f\x43\xd1\x89\x23\xe5\x3d\xa3\xa5" + "\x92\x7b\x19\x14\x1e\x7a\xf3\x88\x8a\x36\x21\x3e\x16\x40\x3c\xd7" + "\xd3\xdb\x13\xaf\xc9\x68\x45\x84\xb3\x39\x8f\x02\xed\x28\x02\x5f", 128, + (const unsigned char*) /* private exponent */ + "\x5d\x19\xb7\xb4\x66\x8d\xc2\x84\xda\x3f\x99\x3c\xeb\x86\x3e\xec" + "\x36\x94\xb6\x54\x07\x08\xcd\x86\x7d\x7d\x53\x6e\xe9\xee\x86\xa3" + "\xdd\x5f\x46\x3e\x89\x08\x67\x2b\x25\x96\x8e\xf3\xcf\x52\x9e\x78" + "\xfd\x42\x30\xf1\x37\xd6\xbd\xea\xfc\x09\xa3\x3d\xf5\xf0\x7f\xe1" + "\xb1\xe0\x69\x13\x44\xf9\x8b\x95\x58\x2a\x81\xb3\xa8\x15\xce\x7e" + "\xd3\xea\x97\x0a\xa2\x14\xd4\xae\xc7\x75\xbb\x9f\x68\xa5\x53\x0e" + "\x85\x29\x88\x48\x6c\xc9\xcc\xde\x72\x40\x3a\x4c\x82\xde\x3c\xfb" + "\x08\xf8\x2c\x26\xb5\xd4\xea\xc4\xca\x98\x6e\x43\x3e\x67\x54\xc1", 128, + (const unsigned char*) /* public exponent */ + "\x01\x00\x01", 3, + (const unsigned char*) /* precalculated encrypted data */ + "\x93\xE8\x1F\xF9\x70\xFA\xAA\xED\x54\xFD\x48\x37\xC9\x71\x9A\x11" + "\x69\x80\xB4\x22\x0C\xAD\x5A\x95\x65\xCA\x7C\xF7\x70\x56\x92\xCB" + "\x45\x6D\x58\x84\x21\x80\x23\x76\x21\x4A\x61\x99\xC1\x11\x9C\x0F" + "\x40\xED\x80\x9C\x8F\x3A\x4F\x01\xB5\x72\xC3\x24\xAE\xF3\x6B\x98" + "\xA8\x60\xAC\xAF\x95\x98\x9A\xAA\xA4\x28\xF2\x02\x05\xFC\xF3\xDD" + "\xB0\x5A\x4E\xDE\x3C\x41\x4B\x1C\x5B\x1F\xF6\x3D\xAF\x93\x43\xCB" + "\xD8\xC7\x24\x97\x8F\x49\xE5\x5B\x10\x51\x3B\x1E\xA6\x39\xEA\x4E" + "\xA5\xE0\x71\x8C\xCA\x34\x8C\x2F\x6C\x5C\x78\x34\x86\x7C\x54\x6A", 128); + + encrypt_decrypt_should_yield_original("Works only with Barrett", + (const unsigned char*) /* data */ + "\x36\x42\x32\xe4\x1e\x78\x02\x8e\xfb\x64\x5f\x0c\xfc\x5a\xd7\x5c" + "\xe4\xb5\x91\x5c\x4b\x00\x87\x28\x87\x9b\xa0\x4b\x09\xc2\x6b\x64" + "\xac\x4b\xcf\xa5\xee\x8a\xb7\xc9\xc9\x90\x02\xc1\xa3\x47\x5c\x6b" + "\x71\x5d\x5d\x49\x27\xe1\x15\xc6\xcf\x37\x9e\xa7\x0f\xa1\xad\x96" + "\x83\xef\x4b\x53\x68\xcd\x77\xfc\x14\x5f\xf5\xb7\x78\xb0\x10\xeb" + "\x0d\x61\x94\x01\xf6\xaa\x1b\x19\x23\x39\xa7\xcc\x6c\x42\x4a\x87" + "\x79\x27\x04\xc6\xec\x8e\x50\xba\xb9\x26\x89\xd4\x00\x01\x25\xe5" + "\xf3\x9e\x98\x0c\x8d\x2e\x43\x1e\xe9\x29\x90\xd2\x75\x61\x85\xe7", 128, + (const unsigned char*) /* modulus */ + "\x37\x0c\x32\xe4\x1e\x78\x02\x8e\xfb\x64\x5f\x0c\xfc\x5a\xd7\x5c" + "\xe4\xb5\x91\x5c\x4b\x00\x87\x28\x87\x9b\xa0\x4b\x09\xc2\x6b\x64" + "\xac\x4b\xcf\xa5\xee\x8a\xb7\xc9\xc9\x90\x02\xc1\xa3\x47\x5c\x6b" + "\x71\x5d\x5d\x49\x27\xe1\x15\xc6\xcf\x37\x9e\xa7\x0f\xa1\xad\x96" + "\x83\xef\x4b\x53\x68\xcd\x77\xfc\x14\x5f\xf5\xb7\x78\xb0\x10\xeb" + "\x0d\x61\x94\x01\xf6\xaa\x1b\x19\x23\x39\xa7\xcc\x6c\x42\x4a\x87" + "\x79\x27\x04\xc6\xec\x8e\x50\xba\xb9\x26\x89\xd4\x00\x01\x25\xe5" + "\xf3\x9e\x98\x0c\x8d\x2e\x43\x1e\xe9\x29\x90\xd2\x75\x61\x85\xe7", 128, + (const unsigned char*) /* private exponent */ + "\x16\x3a\x76\xd2\x66\xfb\x4f\x0d\x2d\xb6\x7a\x2b\x64\x3b\xca\x7b" + "\x58\x5f\x79\x33\x2b\x96\x2a\xfd\xd2\xc4\xa5\x15\xa7\xfb\x3a\x22" + "\x8c\xf0\x90\x09\x11\x2a\x32\xcc\xe8\xf7\x9e\x25\x53\x29\x9d\xc8" + "\x45\x1e\xce\x6c\x9c\x0d\xe8\x1d\x3f\xcf\xd5\xe0\xe0\x0f\x09\x69" + "\x2d\xe7\xd5\xe6\xe5\x10\xd9\x4e\x20\xdb\xbd\xa1\x04\x6b\xe6\x1d" + "\x4c\x79\x28\x47\x30\x11\xde\x14\xb4\x6e\x35\x98\x38\x50\x44\x82" + "\xbd\xc4\xfb\x03\xb3\xf6\x5e\x5a\x29\xfa\x29\xaa\xde\xe4\xfd\x15" + "\xbe\xed\x4f\x93\x9d\x0d\x29\xe8\xd7\xa3\xf4\x18\xc8\x98\xb1\x01", 128, + (const unsigned char*) /* public exponent */ + "\x01\x00\x01", 3, + NULL, 0); + + encrypt_decrypt_should_yield_original("Works always", + (const unsigned char*) /* data */ + "\xB9\x42\x32\xe4\x1e\x78\x02\x8e\xfb\x64\x5f\x0c\xfc\x5a\xd7\x5c" + "\xe4\xb5\x91\x5c\x4b\x00\x87\x28\x87\x9b\xa0\x4b\x09\xc2\x6b\x64" + "\xac\x4b\xcf\xa5\xee\x8a\xb7\xc9\xc9\x90\x02\xc1\xa3\x47\x5c\x6b" + "\x71\x5d\x5d\x49\x27\xe1\x15\xc6\xcf\x37\x9e\xa7\x0f\xa1\xad\x96" + "\x83\xef\x4b\x53\x68\xcd\x77\xfc\x14\x5f\xf5\xb7\x78\xb0\x10\xeb" + "\x0d\x61\x94\x01\xf6\xaa\x1b\x19\x23\x39\xa7\xcc\x6c\x42\x4a\x87" + "\x79\x27\x04\xc6\xec\x8e\x50\xba\xb9\x26\x89\xd4\x00\x01\x25\xe5" + "\xf3\x9e\x98\x0c\x8d\x2e\x43\x1e\xe9\x29\x90\xd2\x75\x61\x85\xe7", 128, + (const unsigned char*) /* modulus */ + "\xB9\x77\xEC\x83\x95\xAF\xB1\xF8\x21\x21\xFF\x05\x5E\x0C\x91\x0C" + "\x2E\xD5\xD2\x94\x1C\x38\x5E\xED\x5A\xCF\x84\xD0\x12\x8B\xAA\x4B" + "\x3A\x63\x65\x78\x13\xED\x24\x4E\x83\xF2\xF5\x02\x66\x5D\xFC\xC1" + "\x80\x5B\x78\x78\xB4\x0B\x45\xE5\x22\xC6\xCD\xEB\xCC\x74\x0B\x0B" + "\xD8\x8B\x91\x99\x48\x8E\x74\xA9\xD0\x1A\x39\x94\xC2\xD4\x2E\x9A" + "\x8C\x0C\x35\x0D\x97\x8F\xC4\x62\x20\xE9\x78\x40\x97\x05\x98\xE6" + "\x22\x48\x3D\x3D\xCA\x6A\x3F\xEF\xB0\x23\x14\x30\xDA\x35\x46\x65" + "\x55\xEF\xEB\xA1\xA9\xCF\x83\xE7\xEF\xF2\x83\x6D\x38\xEA\x88\xED", 128, + (const unsigned char*) /* private exponent */ + "\x52\x2A\x68\xE3\x9A\xAA\xED\xA3\x49\xBA\x6F\xEA\x86\xD1\xF6\x68" + "\x79\x4F\x4D\x2D\x44\x9B\x4C\xA2\xC6\xBA\x6C\xD2\x69\x84\xEA\x7A" + "\xCD\x71\x3F\x80\xC5\x03\x28\x34\x88\x8C\x58\x33\x29\xFA\xB5\x81" + "\x5C\x46\x29\xC6\xFF\xAC\x86\xD8\x8E\x61\x98\xD4\xC0\x0D\x20\xDE" + "\xEB\x61\x1C\x0C\x3C\x19\xA3\x75\x10\x7D\xDA\xA9\x55\xA7\x64\x5F" + "\xE0\xB6\x35\x62\x00\xD9\xD2\xF7\xA4\xDF\x85\xFF\xDF\x86\x75\x29" + "\x66\x16\x03\x8C\xC0\xB0\x3F\xAB\xBA\x41\xB3\x3C\x76\x58\xB6\xE2" + "\x1F\x36\x47\x5F\x1F\x0E\x4C\xB5\x29\x90\xDC\xA1\xF8\xFA\x58\x19", 128, + (const unsigned char*) /* public exponent */ + "\x01\x00\x01", 3, + NULL, 0); + + return 0; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/deutsche_telecom.x509_ca b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/deutsche_telecom.x509_ca new file mode 100644 index 0000000000000000000000000000000000000000..0f4b96a0d5b66ac34b258e34a8943630d55feacc GIT binary patch literal 670 zcmXqLVwz>p#KgRSnTe5!iBZLXmyJ`a&7xk*W}qnv{YLwX`%aH?TA`G&V6Xh!W>D1apmyO)Y`kfpAje zeB^LpWMyD(>}4=$>||7N?y$<5%!OzF zERzTg``9Ao-X*XBQfdA{s)V1MQHyO zWy#)aHLqswC)*oOrXGIdcj#m4Y98-5?oH8;9tM=&_?EauBId2}0<I-~KIoDw&uW z85kEk890CgUzU$Wj73Dm@KODoQ$kaJe=JbA?W-YN=#+TOfFBt2vcfDJ25gLs|CtzB z4fsF;{6G#13o!QCki7_udS;;C=E@5EntVbwMZq<0PCjey;-LEFE80^xr_VBLt0)o^ z{eRuHSc9>xWA4OP_pWJj^Vlt(S>nKR=8eFEls^UAc3BFke~M!W*vfs)>;B68FPk|v z8vb08JMyN$t<~qA>juWD7Hh=jyLr9SJ-zpI>PD-l%e+~<`HcU|RG(;Raeo+<;^qYa DuXy4z literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/equifax.x509_ca b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/equifax.x509_ca new file mode 100644 index 0000000000000000000000000000000000000000..79b0a3f98764a07fdf6cae1a80eebf704d1f8796 GIT binary patch literal 646 zcmXqLVrnvIVtl=TnTe5!iIK&CmyJ`a&7A-4f18*?ZNn=n&ou%V2B z6o|tmEbLlXnwgeZp%9#!Tw0W>;F*`KXQ*bN0+MAGmPM0Ibt)~+%u6jUR&aLIH8hYD z=e4vnFf%eVFfjmvC~;mR10*hOENz^R>^DYM2Ij_I27|^_GV!Yaq78vdHv|ahSG);D}~qW z>v(UKw>nj0}v6(+pA!1lc$f+B_KBemDWcpM{x;f!%-~7^bqq zjEw(TSPhtglz}`*K$%6tK&(N;tHLNq@OGq_S={}DB4!R*?lnFO4P-$I_*lePuuG#x zF*DHrrO_*9GYdX@8Rm2L=SrUgyt6)^NzHtwT6QLK`?Zk6vS(+mk-WR5_38uLKS>J9 zTf8GuKR)_7Rnh+ImAVKy_x2FGh=p6X{?K|~_^nW3?Pk)dG}kZXa&H83}nHjo5q@oeRF+y~C}AK5 zF_#}?pk8`jX-Q78UVc%!LE{``H!w0c_AnSUb}%(IT;CP5elgDny_M==tAhJhysmF7 z^~s*G&+FB8xgXw#vyR;2W!Uk`M_ArWZ1TOL_s5pRZOYqrimM~Ebi%Z^%fk2YSeNlm zm)raDP5tGSZ+^F?EXZEqajv|sc#fg)f7=u5mL}xg+}0B{D}UR*`B{6He^_9w{&lI0t~bUk(V|yzt>L6d&agTOlQ%<1HtMiK21dqF;?crMuy~AZ)cCC zcar#4F@K*Wyr$(`=edOf)X_qG#W2@k=EugP0m@R{;Q^*WZi) literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/header_issue.dat b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/header_issue.dat new file mode 100755 index 0000000000000000000000000000000000000000..a48d23d2b937820a533bc1394d6c155fd28c1959 GIT binary patch literal 1159 zcmWe*W@Kq%Vqj2XW^_B{aBjXp>E)wm*3`MA7YKbx?VUNb&ow+D@R^CtrU!`(45kd+ z3@iZ*EWQj(j0R1Ne}Q;86SDvVivceir&gOs+jm|@Mpjk^gU02C@&>YO%%Ln?!eYS% znMJ92B?`{@xw)lznaPPInfZCehI|G*AO+mQtO1U?;Q@xK2Fh?lI2pynic1R$@{39w ziXqyQ^K_r&^DUdsvg@wz@%k`ix z(#=UO2Kme&200WNSs9qU84Ns_92wpo`5|5!qql9!X6NU%!l&1>n0uS&D5^(1N_N=q zT3#1Xo$~t3DZM?rcUCRjoTpWPC&fDJUdopHOj#EUEFSSFWs-_7#%qy;W$R;IY>2#oGL(LO(Mop($Bszg1H5j-<7 zYyB}vW~D>tw?BFLXek4en?Vzk6EF?DVd7-C`OWT+eQSgcnmt1@C72qS8d)Mz0)#t+ ze1a<>?d5STc=(BH&V_n5t}ZuuwkKi#Kd5eDJK@OGejq5*ct+H>r89oKDBiP7sKoTQ zuBR~j#nTEypxQCB{fdK$z?p#a& literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/killopenssl.sh b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/killopenssl.sh new file mode 100755 index 0000000..17950fb --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/killopenssl.sh @@ -0,0 +1,2 @@ +#!/bin/sh +ps -ef|grep openssl | /usr/bin/awk '{print $2}' |xargs kill -9 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/make_certs.sh b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/make_certs.sh new file mode 100755 index 0000000..dfc39d4 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/make_certs.sh @@ -0,0 +1,174 @@ +#!/bin/sh + +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# +# Generate the certificates and keys for testing. +# + +PROJECT_NAME="axTLS Project" + +# Generate the openssl configuration files. +cat > ca_cert.conf << EOF +[ req ] +distinguished_name = req_distinguished_name +prompt = no + +[ req_distinguished_name ] + O = $PROJECT_NAME Dodgy Certificate Authority +EOF + +cat > certs.conf << EOF +[ req ] +distinguished_name = req_distinguished_name +prompt = no + +[ req_distinguished_name ] + O = $PROJECT_NAME + CN = 127.0.0.1 +EOF + +cat > device_cert.conf << EOF +[ req ] +distinguished_name = req_distinguished_name +prompt = no + +[ req_distinguished_name ] + O = $PROJECT_NAME Device Certificate +EOF + +# private key generation +openssl genrsa -out axTLS.ca_key.pem 1024 +openssl genrsa -out axTLS.key_512.pem 512 +openssl genrsa -out axTLS.key_1024.pem 1024 +openssl genrsa -out axTLS.key_2048.pem 2048 +openssl genrsa -out axTLS.key_4096.pem 4096 +openssl genrsa -out axTLS.device_key.pem 1024 +openssl genrsa -aes128 -passout pass:abcd -out axTLS.key_aes128.pem 512 +openssl genrsa -aes256 -passout pass:abcd -out axTLS.key_aes256.pem 512 + +# convert private keys into DER format +openssl rsa -in axTLS.key_512.pem -out axTLS.key_512 -outform DER +openssl rsa -in axTLS.key_1024.pem -out axTLS.key_1024 -outform DER +openssl rsa -in axTLS.key_2048.pem -out axTLS.key_2048 -outform DER +openssl rsa -in axTLS.key_4096.pem -out axTLS.key_4096 -outform DER +openssl rsa -in axTLS.device_key.pem -out axTLS.device_key -outform DER + +# cert requests +openssl req -out axTLS.ca_x509.req -key axTLS.ca_key.pem -new \ + -config ./ca_cert.conf +openssl req -out axTLS.x509_512.req -key axTLS.key_512.pem -new \ + -config ./certs.conf +openssl req -out axTLS.x509_1024.req -key axTLS.key_1024.pem -new \ + -config ./certs.conf +openssl req -out axTLS.x509_2048.req -key axTLS.key_2048.pem -new \ + -config ./certs.conf +openssl req -out axTLS.x509_4096.req -key axTLS.key_4096.pem -new \ + -config ./certs.conf +openssl req -out axTLS.x509_device.req -key axTLS.device_key.pem -new \ + -config ./device_cert.conf +openssl req -out axTLS.x509_aes128.req -key axTLS.key_aes128.pem \ + -new -config ./certs.conf -passin pass:abcd +openssl req -out axTLS.x509_aes256.req -key axTLS.key_aes256.pem \ + -new -config ./certs.conf -passin pass:abcd + +# generate the actual certs. +openssl x509 -req -in axTLS.ca_x509.req -out axTLS.ca_x509.pem \ + -sha1 -days 10000 -signkey axTLS.ca_key.pem +openssl x509 -req -in axTLS.x509_512.req -out axTLS.x509_512.pem \ + -sha1 -CAcreateserial -days 10000 \ + -CA axTLS.ca_x509.pem -CAkey axTLS.ca_key.pem +openssl x509 -req -in axTLS.x509_1024.req -out axTLS.x509_1024.pem \ + -sha1 -CAcreateserial -days 10000 \ + -CA axTLS.ca_x509.pem -CAkey axTLS.ca_key.pem +openssl x509 -req -in axTLS.x509_2048.req -out axTLS.x509_2048.pem \ + -md5 -CAcreateserial -days 10000 \ + -CA axTLS.ca_x509.pem -CAkey axTLS.ca_key.pem +openssl x509 -req -in axTLS.x509_4096.req -out axTLS.x509_4096.pem \ + -md5 -CAcreateserial -days 10000 \ + -CA axTLS.ca_x509.pem -CAkey axTLS.ca_key.pem +openssl x509 -req -in axTLS.x509_device.req -out axTLS.x509_device.pem \ + -sha1 -CAcreateserial -days 10000 \ + -CA axTLS.x509_512.pem -CAkey axTLS.key_512.pem +openssl x509 -req -in axTLS.x509_aes128.req \ + -out axTLS.x509_aes128.pem \ + -sha1 -CAcreateserial -days 10000 \ + -CA axTLS.ca_x509.pem -CAkey axTLS.ca_key.pem +openssl x509 -req -in axTLS.x509_aes256.req \ + -out axTLS.x509_aes256.pem \ + -sha1 -CAcreateserial -days 10000 \ + -CA axTLS.ca_x509.pem -CAkey axTLS.ca_key.pem + +# note: must be root to do this +DATE_NOW=`date` +if date -s "Jan 1 2025"; then +openssl x509 -req -in axTLS.x509_512.req -out axTLS.x509_bad_before.pem \ + -sha1 -CAcreateserial -days 365 \ + -CA axTLS.ca_x509.pem -CAkey axTLS.ca_key.pem +date -s "$DATE_NOW" +touch axTLS.x509_bad_before.pem +fi +openssl x509 -req -in axTLS.x509_512.req -out axTLS.x509_bad_after.pem \ + -sha1 -CAcreateserial -days -365 \ + -CA axTLS.ca_x509.pem -CAkey axTLS.ca_key.pem + +# some cleanup +rm axTLS*.req +rm axTLS.srl +rm *.conf + +# need this for the client tests +openssl x509 -in axTLS.ca_x509.pem -outform DER -out axTLS.ca_x509.cer +openssl x509 -in axTLS.x509_512.pem -outform DER -out axTLS.x509_512.cer +openssl x509 -in axTLS.x509_1024.pem -outform DER -out axTLS.x509_1024.cer +openssl x509 -in axTLS.x509_2048.pem -outform DER -out axTLS.x509_2048.cer +openssl x509 -in axTLS.x509_4096.pem -outform DER -out axTLS.x509_4096.cer +openssl x509 -in axTLS.x509_device.pem -outform DER -out axTLS.x509_device.cer + +# generate pkcs8 files (use RC4-128 for encryption) +openssl pkcs8 -in axTLS.key_512.pem -passout pass:abcd -topk8 -v1 PBE-SHA1-RC4-128 -out axTLS.encrypted_pem.p8 +openssl pkcs8 -in axTLS.key_512.pem -passout pass:abcd -topk8 -outform DER -v1 PBE-SHA1-RC4-128 -out axTLS.encrypted.p8 +openssl pkcs8 -in axTLS.key_512.pem -nocrypt -topk8 -out axTLS.unencrypted_pem.p8 +openssl pkcs8 -in axTLS.key_512.pem -nocrypt -topk8 -outform DER -out axTLS.unencrypted.p8 + +# generate pkcs12 files (use RC4-128 for encryption) +openssl pkcs12 -export -in axTLS.x509_1024.pem -inkey axTLS.key_1024.pem -certfile axTLS.ca_x509.pem -keypbe PBE-SHA1-RC4-128 -certpbe PBE-SHA1-RC4-128 -name "p12_with_CA" -out axTLS.withCA.p12 -password pass:abcd +openssl pkcs12 -export -in axTLS.x509_1024.pem -inkey axTLS.key_1024.pem -keypbe PBE-SHA1-RC4-128 -certpbe PBE-SHA1-RC4-128 -name "p12_without_CA" -out axTLS.withoutCA.p12 -password pass:abcd +openssl pkcs12 -export -in axTLS.x509_1024.pem -inkey axTLS.key_1024.pem -keypbe PBE-SHA1-RC4-128 -certpbe PBE-SHA1-RC4-128 -out axTLS.noname.p12 -password pass:abcd + +# PEM certificate chain +cat axTLS.ca_x509.pem >> axTLS.x509_device.pem + +# set default key/cert for use in the server +xxd -i axTLS.x509_1024.cer | sed -e \ + "s/axTLS_x509_1024_cer/default_certificate/" > ../../ssl/cert.h +xxd -i axTLS.key_1024 | sed -e \ + "s/axTLS_key_1024/default_private_key/" > ../../ssl/private_key.h diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/microsoft.x509_ca b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/microsoft.x509_ca new file mode 100644 index 0000000000000000000000000000000000000000..b90803452b6cd92749d3e34c60420fd20e5b1c4f GIT binary patch literal 1046 zcmXqLVi7WEV*0g!nTe5!iJ##hL${4hhu}rKZ^>`&I~ee?acZ@Bw0-AgWMpAwFeot8 zHqc~a4rSpMR&vfSs4U7%&nQvQNY+#^w6ru=@Xbsv$}i4OD^YOHFDlS8lrxZlC>BMP z$uCMQ$;{6)R5XwW$ukQ}AmoGc^Gg&QOG`5Hi!w_p4dldmEzJ!K4Gj#;4S*m@oY%;} z(8$;j${hd~H8Cn72MZ%B19KB2KZ8LNBNtN>BO}8~ro9IXo>_nLlh&9&y&}%w)uNTX zs_{SmP4!v4{omY03U)Pti)JtCPcX{9=#*0VZcW+AkXxT#&uNqCpWl+U`Dk`klJYfK zn|u6>lU__avR^lC)~pP*nHQ{d_Va9wP&?@MoXgH)n$AiM%N1`to1GrF@b8|L6PmcD zsb*n!o!TfGUH;@z+EkjRPZ-kzwi!?gPD_ zr%RZ=-NC4Gqg?QFOoGw;dEBS%SSNP$pR{_W_~}FVWSy-G+)pIE|8xC}wRO}=vyjYx zD!KM2&#bz~T65R1*LJ=@LDuenLjDq&2mV}eek>TJ;QuPAdi^TN6WZpgy8BWW3U#US zColdUBJ)%6pZD?vZDNP*#d?OS@s7n znRPvI6k1`LC7pHK^x+j5mM1G*Sx!V5Tjcr5@Fs2NTGVs-YKXntS((sf1-FH)+9#LJ IUw&x;05YnPSO5S3 literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/microsoft.x509_ca.pem b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/microsoft.x509_ca.pem new file mode 100644 index 0000000..478e60b --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/microsoft.x509_ca.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIIEEjCCAvqgAwIBAgIPAMEAizw8iBHRPvZj7N9AMA0GCSqGSIb3DQEBBAUAMHAx +KzApBgNVBAsTIkNvcHlyaWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAc +BgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0 +IFJvb3QgQXV0aG9yaXR5MB4XDTk3MDExMDA3MDAwMFoXDTIwMTIzMTA3MDAwMFow +cDErMCkGA1UECxMiQ29weXJpZ2h0IChjKSAxOTk3IE1pY3Jvc29mdCBDb3JwLjEe +MBwGA1UECxMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3Nv +ZnQgUm9vdCBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCpAr3BcOY78k4bKJ+XeF4w6qKpjSVf+P6VTKO3/p2iID58UaKboo9gMmvRQmR5 +7qx2yVTa8uuchhyPn4Rms8VremIj1h083g8BkuiWxL8tZpqaaCaZ0Dosvwy1WCbB +RucKPjiWLKkoOajsSYNC44QPu5psVWGsgnyhYC13TOmZtGQ7mlAcMQgkFJ+p55Er +GOY9mGMUYFgFZZ8dN1KH96fvlALGG9O/VUWziYC/OuxUlE6u/ad6bXROrxjMlgko +IQBXkGBpN7tLEgc8Vv9b+6RmCgim0oFWV++2O14WgXcE2va+roCV/rDNf9anGnJc +PMq88AijIjCzBoXJsyB3E4XfAgMBAAGjgagwgaUwgaIGA1UdAQSBmjCBl4AQW9Bw +72lyniNRfhSyTY7/y6FyMHAxKzApBgNVBAsTIkNvcHlyaWdodCAoYykgMTk5NyBN +aWNyb3NvZnQgQ29ycC4xHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEh +MB8GA1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5gg8AwQCLPDyIEdE+9mPs +30AwDQYJKoZIhvcNAQEEBQADggEBAJXoC8CN85cYNe24ASTYdxHzXGAyn54Lyz4F +kYiPyTrmIfLwV5MstaBHyGLv/NfMOztaqTZUaf4kbT/JzKreBXzdMY09nxBwarv+ +Ek8YacD80EPjEVogT+pie6+qGcgrNyUtvmWhEoolD2Oj91Qc+SHJ1hXzUqxuQzIH +/YIX+OVnbA1R9r3xUse958Qw/CAxCYgdlSkaTdUdAqXxgOADtFv0sd3IV+5lScdS +VLa0AygS/5DW8AiPfriXxas3LOR65Kh343agANBqP8HSNorgQRKoNWobats14dQc +BOSoRQTIWjM4bk0cDWK3CqKM09VUP0bNHFWmcNsSOoeTdZ+n0qA= +-----END CERTIFICATE----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/ms_iis.cer b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/ms_iis.cer new file mode 100755 index 0000000..250b926 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/ms_iis.cer @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB5jCCAVOgAwIBAgIQWPe7KyA+U7lLUohulwW2HDAJBgUrDgMCHQUAMCExHzAd +BgNVBAMTFmF4dGxzLmNlcm9jY2x1Yi5jb20uYXUwHhcNMDgwMzE3MTAyMTA2WhcN +MDkwMzE3MTAyMTA2WjAhMR8wHQYDVQQDExZheHRscy5jZXJvY2NsdWIuY29tLmF1 +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9JqHlQjrQMt3JW8yxcGhFagDa +D4QiIY8+KItTt13fIBt5g1AG4VXniaylSqKKYNPwVzqSWl7WhxMmoFU73veF8o4M +G0Zc5qbVB6ukrSV4WaTgHrIO6pWkyiaQ4L/eYfCo/2pByhl0IUKkf/TMN346/rFg +JgrElx01l6QHNQrzVQIDAQABoycwJTATBgNVHSUEDDAKBggrBgEFBQcDATAOBgNV +HQ8EBwMFALAAAAAwCQYFKw4DAh0FAAOBgQAbH94H1fryngROJ//Oa0D3vvTO8CJ3 +8VW+3gQEwrPBOWmN6RV8OM0dE6pf8wD3s7PTCcM5+/HI1Qk53nUGrNiOmKM1s0JB +bvsO9RT+UF8mtdbo/n30M0MHMWPCC76baW3R+ANBp/V/z4l1ytpUTt+MHvz0VlUs +J4uJA3s3uh23Tg== +-----END CERTIFICATE----- diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/perf_bigint.c b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/perf_bigint.c new file mode 100644 index 0000000..a4ffab6a --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/perf_bigint.c @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Some performance testing of bigint. + */ + +#include +#include +#include +#include "ssl.h" + +/************************************************************************** + * BIGINT tests + * + **************************************************************************/ + +int main(int argc, char *argv[]) +{ +#ifdef CONFIG_SSL_CERT_VERIFICATION + RSA_CTX *rsa_ctx; + BI_CTX *ctx; + bigint *bi_data, *bi_res; + int diff, res = 1; + struct timeval tv_old, tv_new; + const char *plaintext; + uint8_t compare[MAX_KEY_BYTE_SIZE]; + int i, max_biggie = 10; /* really crank performance */ + int len; + uint8_t *buf; + + /** + * 512 bit key + */ + plaintext = /* 64 byte number */ + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"; + + len = get_file("../ssl/test/axTLS.key_512", &buf); + asn1_get_private_key(buf, len, &rsa_ctx); + ctx = rsa_ctx->bi_ctx; + bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext)); + bi_res = RSA_public(rsa_ctx, bi_data); + bi_data = bi_res; /* reuse again */ + + gettimeofday(&tv_old, NULL); + for (i = 0; i < max_biggie; i++) + { + bi_res = RSA_private(rsa_ctx, bi_copy(bi_data)); + if (i < max_biggie-1) + { + bi_free(ctx, bi_res); + } + } + + gettimeofday(&tv_new, NULL); + bi_free(ctx, bi_data); + + diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 + + (tv_new.tv_usec-tv_old.tv_usec)/1000; + printf("512 bit decrypt time: %dms\n", diff/max_biggie); + TTY_FLUSH(); + bi_export(ctx, bi_res, compare, 64); + RSA_free(rsa_ctx); + free(buf); + if (memcmp(plaintext, compare, 64) != 0) + goto end; + + /** + * 1024 bit key + */ + plaintext = /* 128 byte number */ + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^" + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"; + + len = get_file("../ssl/test/axTLS.key_1024", &buf); + asn1_get_private_key(buf, len, &rsa_ctx); + ctx = rsa_ctx->bi_ctx; + bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext)); + bi_res = RSA_public(rsa_ctx, bi_data); + bi_data = bi_res; /* reuse again */ + + gettimeofday(&tv_old, NULL); + for (i = 0; i < max_biggie; i++) + { + bi_res = RSA_private(rsa_ctx, bi_copy(bi_data)); + if (i < max_biggie-1) + { + bi_free(ctx, bi_res); + } + } + + gettimeofday(&tv_new, NULL); + bi_free(ctx, bi_data); + + diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 + + (tv_new.tv_usec-tv_old.tv_usec)/1000; + printf("1024 bit decrypt time: %dms\n", diff/max_biggie); + TTY_FLUSH(); + bi_export(ctx, bi_res, compare, 128); + RSA_free(rsa_ctx); + free(buf); + if (memcmp(plaintext, compare, 128) != 0) + goto end; + + /** + * 2048 bit key + */ + plaintext = /* 256 byte number */ + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^" + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^" + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^" + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"; + + len = get_file("../ssl/test/axTLS.key_2048", &buf); + asn1_get_private_key(buf, len, &rsa_ctx); + ctx = rsa_ctx->bi_ctx; + bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext)); + bi_res = RSA_public(rsa_ctx, bi_data); + bi_data = bi_res; /* reuse again */ + + gettimeofday(&tv_old, NULL); + for (i = 0; i < max_biggie; i++) + { + bi_res = RSA_private(rsa_ctx, bi_copy(bi_data)); + if (i < max_biggie-1) + { + bi_free(ctx, bi_res); + } + } + gettimeofday(&tv_new, NULL); + bi_free(ctx, bi_data); + + diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 + + (tv_new.tv_usec-tv_old.tv_usec)/1000; + printf("2048 bit decrypt time: %dms\n", diff/max_biggie); + TTY_FLUSH(); + bi_export(ctx, bi_res, compare, 256); + RSA_free(rsa_ctx); + free(buf); + if (memcmp(plaintext, compare, 256) != 0) + goto end; + + /** + * 4096 bit key + */ + plaintext = /* 512 byte number */ + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^" + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^" + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^" + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^" + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^" + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^" + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^" + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"; + + len = get_file("../ssl/test/axTLS.key_4096", &buf); + asn1_get_private_key(buf, len, &rsa_ctx); + ctx = rsa_ctx->bi_ctx; + bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext)); + gettimeofday(&tv_old, NULL); + bi_res = RSA_public(rsa_ctx, bi_data); + gettimeofday(&tv_new, NULL); + diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 + + (tv_new.tv_usec-tv_old.tv_usec)/1000; + printf("4096 bit encrypt time: %dms\n", diff); + TTY_FLUSH(); + bi_data = bi_res; /* reuse again */ + + gettimeofday(&tv_old, NULL); + for (i = 0; i < max_biggie; i++) + { + bi_res = RSA_private(rsa_ctx, bi_copy(bi_data)); + if (i < max_biggie-1) + { + bi_free(ctx, bi_res); + } + } + + gettimeofday(&tv_new, NULL); + bi_free(ctx, bi_data); + + diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 + + (tv_new.tv_usec-tv_old.tv_usec)/1000; + printf("4096 bit decrypt time: %dms\n", diff/max_biggie); + TTY_FLUSH(); + bi_export(ctx, bi_res, compare, 512); + RSA_free(rsa_ctx); + free(buf); + if (memcmp(plaintext, compare, 512) != 0) + goto end; + + /* done */ + printf("Bigint performance testing complete\n"); + res = 0; + +end: + return res; +#else + return 0; +#endif +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/socgen.cer b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/socgen.cer new file mode 100755 index 0000000000000000000000000000000000000000..a4278705b77b573b2d248ed305c22b2d09adcacd GIT binary patch literal 980 zcmXqLV!mL|#B95OnTe5!NkD_`!T z;QZvw)RI&M_td=9qQsn3Lm2}pu`Kb zlb2eeSDc@mo|>nZoS$pZI3GE97+D#Z8+#dmE@WzKWVoD|Jf%l(uZI1`=4qA=*RJJA z?chpsFj>bp<>2Cnn~pKH_~~}+WSdv5Vp-g~=R*{W@9c}qf6Ug-cl@VZLQQ_OCeH@^h`oXZ!fnJj3XJKJxVqIWh1LDZD zm>L)x7%tFXpxdUMQBqQ1rLUh{l%ofXrp)5Zbg*Cbf$tUR59|fBpSpoj9n0I5NQx@ z5Gux*nVXoNs-K>jW}s*wZ@|vRs?EpDB*h}q|Map{+nV0K?8E09vaWbY=u}JU8K{aW zL+t=2fqWD@^vjCDVjz=Ha|v@D1BdA4&`;!%a z`ZjicJXrPWUp61x_6yT?-1OPGnCp)Bskw&pd3$HgaIL> +#include +#include +#include +#include +#include +#include + +#ifndef WIN32 +#include +#endif + +#include "ssl.h" + +#define DEFAULT_CERT "../ssl/test/axTLS.x509_512.cer" +#define DEFAULT_KEY "../ssl/test/axTLS.key_512" +//#define DEFAULT_SVR_OPTION SSL_DISPLAY_BYTES|SSL_DISPLAY_STATES +#define DEFAULT_SVR_OPTION 0 +#define DEFAULT_CLNT_OPTION 0 +//#define DEFAULT_CLNT_OPTION SSL_DISPLAY_BYTES|SSL_DISPLAY_STATES + +static int g_port = 19001; + +/************************************************************************** + * AES tests + * + * Run through a couple of the RFC3602 tests to verify that AES is correct. + **************************************************************************/ +#define TEST1_SIZE 16 +#define TEST2_SIZE 32 + +static int AES_test(BI_CTX *bi_ctx) +{ + AES_CTX aes_key; + int res = 1; + uint8_t key[TEST1_SIZE]; + uint8_t iv[TEST1_SIZE]; + + { + /* + Case #1: Encrypting 16 bytes (1 block) using AES-CBC + Key : 0x06a9214036b8a15b512e03d534120006 + IV : 0x3dafba429d9eb430b422da802c9fac41 + Plaintext : "Single block msg" + Ciphertext: 0xe353779c1079aeb82708942dbe77181a + + */ + char *in_str = "Single block msg"; + uint8_t ct[TEST1_SIZE]; + uint8_t enc_data[TEST1_SIZE]; + uint8_t dec_data[TEST1_SIZE]; + + bigint *key_bi = bi_str_import( + bi_ctx, "06A9214036B8A15B512E03D534120006"); + bigint *iv_bi = bi_str_import( + bi_ctx, "3DAFBA429D9EB430B422DA802C9FAC41"); + bigint *ct_bi = bi_str_import( + bi_ctx, "E353779C1079AEB82708942DBE77181A"); + bi_export(bi_ctx, key_bi, key, TEST1_SIZE); + bi_export(bi_ctx, iv_bi, iv, TEST1_SIZE); + bi_export(bi_ctx, ct_bi, ct, TEST1_SIZE); + + AES_set_key(&aes_key, key, iv, AES_MODE_128); + AES_cbc_encrypt(&aes_key, (const uint8_t *)in_str, + enc_data, sizeof(enc_data)); + if (memcmp(enc_data, ct, sizeof(ct))) + { + printf("Error: AES ENCRYPT #1 failed\n"); + goto end; + } + + AES_set_key(&aes_key, key, iv, AES_MODE_128); + AES_convert_key(&aes_key); + AES_cbc_decrypt(&aes_key, enc_data, dec_data, sizeof(enc_data)); + + if (memcmp(dec_data, in_str, sizeof(dec_data))) + { + printf("Error: AES DECRYPT #1 failed\n"); + goto end; + } + } + + { + /* + Case #2: Encrypting 32 bytes (2 blocks) using AES-CBC + Key : 0xc286696d887c9aa0611bbb3e2025a45a + IV : 0x562e17996d093d28ddb3ba695a2e6f58 + Plaintext : 0x000102030405060708090a0b0c0d0e0f + 101112131415161718191a1b1c1d1e1f + Ciphertext: 0xd296cd94c2cccf8a3a863028b5e1dc0a + 7586602d253cfff91b8266bea6d61ab1 + */ + uint8_t in_data[TEST2_SIZE]; + uint8_t ct[TEST2_SIZE]; + uint8_t enc_data[TEST2_SIZE]; + uint8_t dec_data[TEST2_SIZE]; + + bigint *in_bi = bi_str_import(bi_ctx, + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F"); + bigint *key_bi = bi_str_import( + bi_ctx, "C286696D887C9AA0611BBB3E2025A45A"); + bigint *iv_bi = bi_str_import( + bi_ctx, "562E17996D093D28DDB3BA695A2E6F58"); + bigint *ct_bi = bi_str_import(bi_ctx, + "D296CD94C2CCCF8A3A863028B5E1DC0A7586602D253CFFF91B8266BEA6D61AB1"); + bi_export(bi_ctx, in_bi, in_data, TEST2_SIZE); + bi_export(bi_ctx, key_bi, key, TEST1_SIZE); + bi_export(bi_ctx, iv_bi, iv, TEST1_SIZE); + bi_export(bi_ctx, ct_bi, ct, TEST2_SIZE); + + AES_set_key(&aes_key, key, iv, AES_MODE_128); + AES_cbc_encrypt(&aes_key, (const uint8_t *)in_data, + enc_data, sizeof(enc_data)); + + if (memcmp(enc_data, ct, sizeof(ct))) + { + printf("Error: ENCRYPT #2 failed\n"); + goto end; + } + + AES_set_key(&aes_key, key, iv, AES_MODE_128); + AES_convert_key(&aes_key); + AES_cbc_decrypt(&aes_key, enc_data, dec_data, sizeof(enc_data)); + if (memcmp(dec_data, in_data, sizeof(dec_data))) + { + printf("Error: DECRYPT #2 failed\n"); + goto end; + } + } + + res = 0; + printf("All AES tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * RC4 tests + * + * ARC4 tests vectors from OpenSSL (crypto/rc4/rc4test.c) + **************************************************************************/ +static const uint8_t keys[7][30]= +{ + {8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}, + {8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}, + {8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, + {4,0xef,0x01,0x23,0x45}, + {8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}, + {4,0xef,0x01,0x23,0x45}, +}; + +static const uint8_t data_len[7]={8,8,8,20,28,10}; +static uint8_t data[7][30]= +{ + {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xff}, + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff}, + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff}, + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xff}, + {0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0, + 0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0, + 0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0, + 0x12,0x34,0x56,0x78,0xff}, + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff}, + {0}, +}; + +static const uint8_t output[7][30]= +{ + {0x75,0xb7,0x87,0x80,0x99,0xe0,0xc5,0x96,0x00}, + {0x74,0x94,0xc2,0xe7,0x10,0x4b,0x08,0x79,0x00}, + {0xde,0x18,0x89,0x41,0xa3,0x37,0x5d,0x3a,0x00}, + {0xd6,0xa1,0x41,0xa7,0xec,0x3c,0x38,0xdf, + 0xbd,0x61,0x5a,0x11,0x62,0xe1,0xc7,0xba, + 0x36,0xb6,0x78,0x58,0x00}, + {0x66,0xa0,0x94,0x9f,0x8a,0xf7,0xd6,0x89, + 0x1f,0x7f,0x83,0x2b,0xa8,0x33,0xc0,0x0c, + 0x89,0x2e,0xbe,0x30,0x14,0x3c,0xe2,0x87, + 0x40,0x01,0x1e,0xcf,0x00}, + {0xd6,0xa1,0x41,0xa7,0xec,0x3c,0x38,0xdf,0xbd,0x61,0x00}, + {0}, +}; + +static int RC4_test(BI_CTX *bi_ctx) +{ + int i, res = 1; + RC4_CTX s; + + for (i = 0; i < 6; i++) + { + RC4_setup(&s, &keys[i][1], keys[i][0]); + RC4_crypt(&s, data[i], data[i], data_len[i]); + + if (memcmp(data[i], output[i], data_len[i])) + { + printf("Error: RC4 CRYPT #%d failed\n", i); + goto end; + } + } + + res = 0; + printf("All RC4 tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * SHA1 tests + * + * Run through a couple of the RFC3174 tests to verify that SHA1 is correct. + **************************************************************************/ +static int SHA1_test(BI_CTX *bi_ctx) +{ + SHA1_CTX ctx; + uint8_t ct[SHA1_SIZE]; + uint8_t digest[SHA1_SIZE]; + int res = 1; + + { + const char *in_str = "abc"; + bigint *ct_bi = bi_str_import(bi_ctx, + "A9993E364706816ABA3E25717850C26C9CD0D89D"); + bi_export(bi_ctx, ct_bi, ct, SHA1_SIZE); + + SHA1_Init(&ctx); + SHA1_Update(&ctx, (const uint8_t *)in_str, strlen(in_str)); + SHA1_Final(digest, &ctx); + + if (memcmp(digest, ct, sizeof(ct))) + { + printf("Error: SHA1 #1 failed\n"); + goto end; + } + } + + { + const char *in_str = + "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; + bigint *ct_bi = bi_str_import(bi_ctx, + "84983E441C3BD26EBAAE4AA1F95129E5E54670F1"); + bi_export(bi_ctx, ct_bi, ct, SHA1_SIZE); + + SHA1_Init(&ctx); + SHA1_Update(&ctx, (const uint8_t *)in_str, strlen(in_str)); + SHA1_Final(digest, &ctx); + + if (memcmp(digest, ct, sizeof(ct))) + { + printf("Error: SHA1 #2 failed\n"); + goto end; + } + } + + res = 0; + printf("All SHA1 tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * MD5 tests + * + * Run through a couple of the RFC1321 tests to verify that MD5 is correct. + **************************************************************************/ +static int MD5_test(BI_CTX *bi_ctx) +{ + MD5_CTX ctx; + uint8_t ct[MD5_SIZE]; + uint8_t digest[MD5_SIZE]; + int res = 1; + + { + const char *in_str = "abc"; + bigint *ct_bi = bi_str_import(bi_ctx, + "900150983CD24FB0D6963F7D28E17F72"); + bi_export(bi_ctx, ct_bi, ct, MD5_SIZE); + + MD5_Init(&ctx); + MD5_Update(&ctx, (const uint8_t *)in_str, strlen(in_str)); + MD5_Final(digest, &ctx); + + if (memcmp(digest, ct, sizeof(ct))) + { + printf("Error: MD5 #1 failed\n"); + goto end; + } + } + + { + const char *in_str = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + bigint *ct_bi = bi_str_import( + bi_ctx, "D174AB98D277D9F5A5611C2C9F419D9F"); + bi_export(bi_ctx, ct_bi, ct, MD5_SIZE); + + MD5_Init(&ctx); + MD5_Update(&ctx, (const uint8_t *)in_str, strlen(in_str)); + MD5_Final(digest, &ctx); + + if (memcmp(digest, ct, sizeof(ct))) + { + printf("Error: MD5 #2 failed\n"); + goto end; + } + } + res = 0; + printf("All MD5 tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * HMAC tests + * + * Run through a couple of the RFC2202 tests to verify that HMAC is correct. + **************************************************************************/ +static int HMAC_test(BI_CTX *bi_ctx) +{ + uint8_t key[SHA1_SIZE]; + uint8_t ct[SHA1_SIZE]; + uint8_t dgst[SHA1_SIZE]; + int res = 1; + const char *key_str; + + const char *data_str = "Hi There"; + bigint *key_bi = bi_str_import(bi_ctx, "0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B"); + bigint *ct_bi = bi_str_import(bi_ctx, "9294727A3638BB1C13F48EF8158BFC9D"); + bi_export(bi_ctx, key_bi, key, MD5_SIZE); + bi_export(bi_ctx, ct_bi, ct, MD5_SIZE); + hmac_md5((const uint8_t *)data_str, 8, key, MD5_SIZE, dgst); + if (memcmp(dgst, ct, MD5_SIZE)) + { + printf("HMAC MD5 #1 failed\n"); + goto end; + } + + data_str = "what do ya want for nothing?"; + key_str = "Jefe"; + ct_bi = bi_str_import(bi_ctx, "750C783E6AB0B503EAA86E310A5DB738"); + bi_export(bi_ctx, ct_bi, ct, MD5_SIZE); + hmac_md5((const uint8_t *)data_str, 28, (const uint8_t *)key_str, 4, dgst); + if (memcmp(dgst, ct, MD5_SIZE)) + { + printf("HMAC MD5 #2 failed\n"); + goto end; + } + + data_str = "Hi There"; + key_bi = bi_str_import(bi_ctx, "0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B"); + bi_export(bi_ctx, key_bi, key, SHA1_SIZE); + ct_bi = bi_str_import(bi_ctx, "B617318655057264E28BC0B6FB378C8EF146BE00"); + bi_export(bi_ctx, ct_bi, ct, SHA1_SIZE); + + hmac_sha1((const uint8_t *)data_str, 8, + (const uint8_t *)key, SHA1_SIZE, dgst); + if (memcmp(dgst, ct, SHA1_SIZE)) + { + printf("HMAC SHA1 #1 failed\n"); + goto end; + } + + data_str = "what do ya want for nothing?"; + key_str = "Jefe"; + ct_bi = bi_str_import(bi_ctx, "EFFCDF6AE5EB2FA2D27416D5F184DF9C259A7C79"); + bi_export(bi_ctx, ct_bi, ct, SHA1_SIZE); + + hmac_sha1((const uint8_t *)data_str, 28, (const uint8_t *)key_str, 5, dgst); + if (memcmp(dgst, ct, SHA1_SIZE)) + { + printf("HMAC SHA1 failed\n"); + exit(1); + } + + res = 0; + printf("All HMAC tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * BIGINT tests + * + **************************************************************************/ +static int BIGINT_test(BI_CTX *ctx) +{ + int res = 1; + bigint *bi_data, *bi_exp, *bi_res; + const char *expnt, *plaintext, *mod; + uint8_t compare[MAX_KEY_BYTE_SIZE]; + + /** + * 512 bit key + */ + plaintext = /* 64 byte number */ + "01aaaaaaaaaabbbbbbbbbbbbbbbccccccccccccccdddddddddddddeeeeeeeeee"; + + mod = "C30773C8ABE09FCC279EE0E5343370DE" + "8B2FFDB6059271E3005A7CEEF0D35E0A" + "1F9915D95E63560836CC2EB2C289270D" + "BCAE8CAF6F5E907FC2759EE220071E1B"; + + expnt = "A1E556CD1738E10DF539E35101334E97" + "BE8D391C57A5C89A7AD9A2EA2ACA1B3D" + "F3140F5091CC535CBAA47CEC4159EE1F" + "B6A3661AFF1AB758426EAB158452A9B9"; + + bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext)); + bi_exp = int_to_bi(ctx, 0x10001); + bi_set_mod(ctx, bi_str_import(ctx, mod), 0); + bi_res = bi_mod_power(ctx, bi_data, bi_exp); + + bi_data = bi_res; /* resuse again - see if we get the original */ + + bi_exp = bi_str_import(ctx, expnt); + bi_res = bi_mod_power(ctx, bi_data, bi_exp); + bi_free_mod(ctx, 0); + + bi_export(ctx, bi_res, compare, 64); + if (memcmp(plaintext, compare, 64) != 0) + goto end; + + printf("All BIGINT tests passed\n"); + res = 0; + +end: + return res; +} + +/************************************************************************** + * RSA tests + * + * Use the results from openssl to verify PKCS1 etc + **************************************************************************/ +static int RSA_test(void) +{ + int res = 1; + const char *plaintext = /* 128 byte hex number */ + "1aaaaaaaaaabbbbbbbbbbbbbbbccccccccccccccdddddddddddddeeeeeeeeee2" + "1aaaaaaaaaabbbbbbbbbbbbbbbccccccccccccccdddddddddddddeeeeeeeee2\012"; + uint8_t enc_data[128], dec_data[128]; + RSA_CTX *rsa_ctx = NULL; + BI_CTX *bi_ctx; + bigint *plaintext_bi; + bigint *enc_data_bi, *dec_data_bi; + uint8_t enc_data2[128], dec_data2[128]; + int size; + int len; + uint8_t *buf; + + /* extract the private key elements */ + len = get_file("../ssl/test/axTLS.key_1024", &buf); + if (asn1_get_private_key(buf, len, &rsa_ctx) < 0) + { + goto end; + } + + free(buf); + bi_ctx = rsa_ctx->bi_ctx; + plaintext_bi = bi_import(bi_ctx, + (const uint8_t *)plaintext, strlen(plaintext)); + + /* basic rsa encrypt */ + enc_data_bi = RSA_public(rsa_ctx, plaintext_bi); + bi_export(bi_ctx, bi_copy(enc_data_bi), enc_data, sizeof(enc_data)); + + /* basic rsa decrypt */ + dec_data_bi = RSA_private(rsa_ctx, enc_data_bi); + bi_export(bi_ctx, dec_data_bi, dec_data, sizeof(dec_data)); + + if (memcmp(dec_data, plaintext, strlen(plaintext))) + { + printf("Error: DECRYPT #1 failed\n"); + goto end; + } + + RSA_encrypt(rsa_ctx, (const uint8_t *)"abc", 3, enc_data2, 0); + size = RSA_decrypt(rsa_ctx, enc_data2, dec_data2, 1); + if (memcmp("abc", dec_data2, 3)) + { + printf("Error: ENCRYPT/DECRYPT #2 failed\n"); + goto end; + } + + RSA_free(rsa_ctx); + res = 0; + printf("All RSA tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * Cert Testing + * + **************************************************************************/ +static int cert_tests(void) +{ + int res = -1, len; + X509_CTX *x509_ctx; + SSL_CTX *ssl_ctx; + uint8_t *buf; + + /* check a bunch of 3rd party certificates */ + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/microsoft.x509_ca", &buf); + if ((res = add_cert_auth(ssl_ctx, buf, len)) < 0) + { + printf("Cert #1\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/thawte.x509_ca", &buf); + if ((res = add_cert_auth(ssl_ctx, buf, len)) < 0) + { + printf("Cert #2\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/deutsche_telecom.x509_ca", &buf); + if ((res = add_cert_auth(ssl_ctx, buf, len)) < 0) + { + printf("Cert #3\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/equifax.x509_ca", &buf); + if ((res = add_cert_auth(ssl_ctx, buf, len)) < 0) + { + printf("Cert #4\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/gnutls.cer", &buf); + if ((res = add_cert(ssl_ctx, buf, len)) < 0) + { + printf("Cert #5\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/socgen.cer", &buf); + if ((res = add_cert(ssl_ctx, buf, len)) < 0) + { + printf("Cert #6\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/verisign.x509_ca", &buf); + if ((res = add_cert_auth(ssl_ctx, buf, len)) <0) + { + printf("Cert #7\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + if (get_file("../ssl/test/verisign.x509_my_cert", &buf) < 0 || + x509_new(buf, &len, &x509_ctx)) + { + printf("Cert #8\n"); + ssl_display_error(res); + goto bad_cert; + } + + x509_free(x509_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + if ((res = ssl_obj_load(ssl_ctx, + SSL_OBJ_X509_CERT, "../ssl/test/ms_iis.cer", NULL)) != SSL_OK) + { + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + res = 0; /* all ok */ + printf("All Certificate tests passed\n"); + +bad_cert: + if (res) + printf("Error: A certificate test failed\n"); + return res; +} + +/** + * init a server socket. + */ +static int server_socket_init(int *port) +{ + struct sockaddr_in serv_addr; + int server_fd; + char yes = 1; + + /* Create socket for incoming connections */ + if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) + { + return -1; + } + + setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)); + +go_again: + /* Construct local address structure */ + memset(&serv_addr, 0, sizeof(serv_addr)); /* Zero out structure */ + serv_addr.sin_family = AF_INET; /* Internet address family */ + serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ + serv_addr.sin_port = htons(*port); /* Local port */ + + /* Bind to the local address */ + if (bind(server_fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) + { + (*port)++; + goto go_again; + } + /* Mark the socket so it will listen for incoming connections */ + if (listen(server_fd, 3000) < 0) + { + return -1; + } + + return server_fd; +} + +/** + * init a client socket. + */ +static int client_socket_init(uint16_t port) +{ + struct sockaddr_in address; + int client_fd; + + address.sin_family = AF_INET; + address.sin_port = htons(port); + address.sin_addr.s_addr = inet_addr("127.0.0.1"); + client_fd = socket(AF_INET, SOCK_STREAM, 0); + if (connect(client_fd, (struct sockaddr *)&address, sizeof(address)) < 0) + { + perror("socket"); + SOCKET_CLOSE(client_fd); + client_fd = -1; + } + + return client_fd; +} + +/************************************************************************** + * SSL Server Testing + * + **************************************************************************/ +typedef struct +{ + /* not used as yet */ + int dummy; +} SVR_CTX; + +typedef struct +{ + const char *testname; + const char *openssl_option; +} client_t; + +static void do_client(client_t *clnt) +{ + char openssl_buf[2048]; + + /* make sure the main thread goes first */ + sleep(0); + + /* show the session ids in the reconnect test */ + if (strcmp(clnt->testname, "Session Reuse") == 0) + { + sprintf(openssl_buf, "echo \"hello client\" | openssl s_client " + "-connect localhost:%d %s 2>&1 | grep \"Session-ID:\"", + g_port, clnt->openssl_option); + } + else + { + sprintf(openssl_buf, "echo \"hello client\" | openssl s_client " +#ifdef WIN32 + "-connect localhost:%d -quiet %s", +#else + "-connect localhost:%d -quiet %s > /dev/null 2>&1", +#endif + g_port, clnt->openssl_option); + } + + system(openssl_buf); +} + +static int SSL_server_test( + const char *testname, + const char *openssl_option, + const char *device_cert, + const char *product_cert, + const char *private_key, + const char *ca_cert, + const char *password, + int axtls_option) +{ + int server_fd, ret = 0; + SSL_CTX *ssl_ctx = NULL; + struct sockaddr_in client_addr; + uint8_t *read_buf; + socklen_t clnt_len = sizeof(client_addr); + client_t client_data; +#ifndef WIN32 + pthread_t thread; +#endif + g_port++; + + client_data.testname = testname; + client_data.openssl_option = openssl_option; + + if ((server_fd = server_socket_init(&g_port)) < 0) + goto error; + + if (private_key) + { + axtls_option |= SSL_NO_DEFAULT_KEY; + } + + if ((ssl_ctx = ssl_ctx_new(axtls_option, SSL_DEFAULT_SVR_SESS)) == NULL) + { + ret = SSL_ERROR_INVALID_KEY; + goto error; + } + + if (private_key) + { + int obj_type = SSL_OBJ_RSA_KEY; + + if (strstr(private_key, ".p8")) + obj_type = SSL_OBJ_PKCS8; + else if (strstr(private_key, ".p12")) + obj_type = SSL_OBJ_PKCS12; + + if (ssl_obj_load(ssl_ctx, obj_type, private_key, password)) + { + ret = SSL_ERROR_INVALID_KEY; + goto error; + } + } + + if (device_cert) /* test chaining */ + { + if ((ret = ssl_obj_load(ssl_ctx, + SSL_OBJ_X509_CERT, device_cert, NULL)) != SSL_OK) + goto error; + } + + if (product_cert) /* test chaining */ + { + if ((ret = ssl_obj_load(ssl_ctx, + SSL_OBJ_X509_CERT, product_cert, NULL)) != SSL_OK) + goto error; + } + + if (ca_cert) /* test adding certificate authorities */ + { + if ((ret = ssl_obj_load(ssl_ctx, + SSL_OBJ_X509_CACERT, ca_cert, NULL)) != SSL_OK) + goto error; + } + +#ifndef WIN32 + pthread_create(&thread, NULL, + (void *(*)(void *))do_client, (void *)&client_data); + pthread_detach(thread); +#else + CreateThread(NULL, 1024, (LPTHREAD_START_ROUTINE)do_client, + (LPVOID)&client_data, 0, NULL); +#endif + + for (;;) + { + int client_fd, size = 0; + SSL *ssl; + + /* Wait for a client to connect */ + if ((client_fd = accept(server_fd, + (struct sockaddr *)&client_addr, &clnt_len)) < 0) + { + ret = SSL_ERROR_SOCK_SETUP_FAILURE; + goto error; + } + + /* we are ready to go */ + ssl = ssl_server_new(ssl_ctx, client_fd); + while ((size = ssl_read(ssl, &read_buf)) == SSL_OK); + SOCKET_CLOSE(client_fd); + + if (size < SSL_OK) /* got some alert or something nasty */ + { + ret = size; + + if (ret == SSL_ERROR_CONN_LOST) + { + ret = SSL_OK; + continue; + } + + break; /* we've got a problem */ + } + else /* looks more promising */ + { + if (strstr("hello client", (char *)read_buf) == NULL) + { + printf("SSL server test \"%s\" passed\n", testname); + TTY_FLUSH(); + ret = 0; + break; + } + } + + ssl_free(ssl); + } + + SOCKET_CLOSE(server_fd); + +error: + ssl_ctx_free(ssl_ctx); + return ret; +} + +int SSL_server_tests(void) +{ + int ret = -1; + struct stat stat_buf; + SVR_CTX svr_test_ctx; + memset(&svr_test_ctx, 0, sizeof(SVR_CTX)); + + printf("### starting server tests\n"); TTY_FLUSH(); + + /* Go through the algorithms */ + + /* + * TLS1 client hello + */ + if ((ret = SSL_server_test("TLSv1", "-cipher RC4-SHA -tls1", + NULL, NULL, NULL, NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * AES128-SHA + */ + if ((ret = SSL_server_test("AES256-SHA", "-cipher AES128-SHA", + DEFAULT_CERT, NULL, DEFAULT_KEY, NULL, NULL, + DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * AES256-SHA + */ + if ((ret = SSL_server_test("AES256-SHA", "-cipher AES128-SHA", + DEFAULT_CERT, NULL, DEFAULT_KEY, NULL, NULL, + DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * RC4-SHA + */ + if ((ret = SSL_server_test("RC4-SHA", "-cipher RC4-SHA", + DEFAULT_CERT, NULL, DEFAULT_KEY, NULL, NULL, + DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * RC4-MD5 + */ + if ((ret = SSL_server_test("RC4-MD5", "-cipher RC4-MD5", + DEFAULT_CERT, NULL, DEFAULT_KEY, NULL, NULL, + DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * Session Reuse + * all the session id's should match for session resumption. + */ + if ((ret = SSL_server_test("Session Reuse", + "-cipher RC4-SHA -reconnect", + DEFAULT_CERT, NULL, DEFAULT_KEY, NULL, NULL, + DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * 512 bit RSA key + */ + if ((ret = SSL_server_test("512 bit key", "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_512.cer", NULL, + "../ssl/test/axTLS.key_512", + NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * 1024 bit RSA key (check certificate chaining) + */ + if ((ret = SSL_server_test("1024 bit key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_device.cer", + "../ssl/test/axTLS.x509_512.cer", + "../ssl/test/axTLS.device_key", + NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * 2048 bit RSA key + */ + if ((ret = SSL_server_test("2048 bit key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_2048.cer", NULL, + "../ssl/test/axTLS.key_2048", + NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * 4096 bit RSA key + */ + if ((ret = SSL_server_test("4096 bit key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_4096.cer", NULL, + "../ssl/test/axTLS.key_4096", + NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * Client Verification + */ + if ((ret = SSL_server_test("Client Verification", + "-cipher RC4-SHA -tls1 " + "-cert ../ssl/test/axTLS.x509_2048.pem " + "-key ../ssl/test/axTLS.key_2048.pem ", + NULL, NULL, NULL, + "../ssl/test/axTLS.ca_x509.cer", NULL, + DEFAULT_SVR_OPTION|SSL_CLIENT_AUTHENTICATION))) + goto cleanup; + + /* this test should fail */ + if (stat("../ssl/test/axTLS.x509_bad_before.pem", &stat_buf) >= 0) + { + if ((ret = SSL_server_test("Error: Bad Before Cert", + "-cipher RC4-SHA -tls1 " + "-cert ../ssl/test/axTLS.x509_bad_before.pem " + "-key ../ssl/test/axTLS.key_512.pem ", + NULL, NULL, NULL, + "../ssl/test/axTLS.ca_x509.cer", NULL, + DEFAULT_SVR_OPTION|SSL_CLIENT_AUTHENTICATION)) != + SSL_X509_ERROR(X509_VFY_ERROR_NOT_YET_VALID)) + goto cleanup; + + printf("SSL server test \"%s\" passed\n", "Bad Before Cert"); + TTY_FLUSH(); + ret = 0; /* is ok */ + } + + /* this test should fail */ + if ((ret = SSL_server_test("Error: Bad After Cert", + "-cipher RC4-SHA -tls1 " + "-cert ../ssl/test/axTLS.x509_bad_after.pem " + "-key ../ssl/test/axTLS.key_512.pem ", + NULL, NULL, NULL, + "../ssl/test/axTLS.ca_x509.cer", NULL, + DEFAULT_SVR_OPTION|SSL_CLIENT_AUTHENTICATION)) != + SSL_X509_ERROR(X509_VFY_ERROR_EXPIRED)) + goto cleanup; + + printf("SSL server test \"%s\" passed\n", "Bad After Cert"); + TTY_FLUSH(); + + /* + * No trusted cert + */ + if ((ret = SSL_server_test("Error: No trusted certificate", + "-cipher RC4-SHA -tls1 " + "-cert ../ssl/test/axTLS.x509_512.pem " + "-key ../ssl/test/axTLS.key_512.pem ", + NULL, NULL, NULL, + NULL, NULL, + DEFAULT_SVR_OPTION|SSL_CLIENT_AUTHENTICATION)) != + SSL_X509_ERROR(X509_VFY_ERROR_NO_TRUSTED_CERT)) + goto cleanup; + + printf("SSL server test \"%s\" passed\n", "No trusted certificate"); + TTY_FLUSH(); + + /* + * Self-signed (from the server) + */ + if ((ret = SSL_server_test("Error: Self-signed certificate (from server)", + "-cipher RC4-SHA -tls1 " + "-cert ../ssl/test/axTLS.x509_512.pem " + "-key ../ssl/test/axTLS.key_512.pem " + "-CAfile ../ssl/test/axTLS.ca_x509.pem ", + NULL, NULL, NULL, + NULL, NULL, + DEFAULT_SVR_OPTION|SSL_CLIENT_AUTHENTICATION)) != + SSL_X509_ERROR(X509_VFY_ERROR_SELF_SIGNED)) + goto cleanup; + + printf("SSL server test \"%s\" passed\n", + "Self-signed certificate (from server)"); + TTY_FLUSH(); + + /* + * Self-signed (from the client) + */ + if ((ret = SSL_server_test("Self-signed certificate (from client)", + "-cipher RC4-SHA -tls1 " + "-cert ../ssl/test/axTLS.x509_512.pem " + "-key ../ssl/test/axTLS.key_512.pem ", + NULL, NULL, NULL, + "../ssl/test/axTLS.ca_x509.cer", + NULL, + DEFAULT_SVR_OPTION|SSL_CLIENT_AUTHENTICATION))) + goto cleanup; + + /* + * Key in PEM format + */ + if ((ret = SSL_server_test("Key in PEM format", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_512.cer", NULL, + "../ssl/test/axTLS.key_512.pem", NULL, + NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * Cert in PEM format + */ + if ((ret = SSL_server_test("Cert in PEM format", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_512.pem", NULL, + "../ssl/test/axTLS.key_512.pem", NULL, + NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * Cert chain in PEM format + */ + if ((ret = SSL_server_test("Cert chain in PEM format", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_device.pem", + NULL, "../ssl/test/axTLS.device_key.pem", + "../ssl/test/axTLS.ca_x509.pem", NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * AES128 Encrypted key + */ + if ((ret = SSL_server_test("AES128 encrypted key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_aes128.pem", NULL, + "../ssl/test/axTLS.key_aes128.pem", + NULL, "abcd", DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * AES256 Encrypted key + */ + if ((ret = SSL_server_test("AES256 encrypted key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_aes256.pem", NULL, + "../ssl/test/axTLS.key_aes256.pem", + NULL, "abcd", DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * AES128 Encrypted invalid key + */ + if ((ret = SSL_server_test("AES128 encrypted invalid key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_aes128.pem", NULL, + "../ssl/test/axTLS.key_aes128.pem", + NULL, "xyz", DEFAULT_SVR_OPTION)) != SSL_ERROR_INVALID_KEY) + goto cleanup; + + printf("SSL server test \"%s\" passed\n", "AES128 encrypted invalid key"); + TTY_FLUSH(); + + /* + * PKCS#8 key (encrypted) + */ + if ((ret = SSL_server_test("pkcs#8 encrypted", "-cipher RC4-SHA", + DEFAULT_CERT, NULL, "../ssl/test/axTLS.encrypted.p8", + NULL, "abcd", DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * PKCS#8 key (unencrypted) + */ + if ((ret = SSL_server_test("pkcs#8 unencrypted", "-cipher RC4-SHA", + DEFAULT_CERT, NULL, "../ssl/test/axTLS.unencrypted.p8", + NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * PKCS#12 key/certificate + */ + if ((ret = SSL_server_test("pkcs#12 with CA", "-cipher RC4-SHA", + NULL, NULL, "../ssl/test/axTLS.withCA.p12", + NULL, "abcd", DEFAULT_SVR_OPTION))) + goto cleanup; + + if ((ret = SSL_server_test("pkcs#12 no CA", "-cipher RC4-SHA", + DEFAULT_CERT, NULL, "../ssl/test/axTLS.withoutCA.p12", + NULL, "abcd", DEFAULT_SVR_OPTION))) + goto cleanup; + + ret = 0; + +cleanup: + if (ret) + { + printf("Error: A server test failed\n"); + ssl_display_error(ret); + exit(1); + } + else + { + printf("All server tests passed\n"); TTY_FLUSH(); + } + + return ret; +} + +/************************************************************************** + * SSL Client Testing + * + **************************************************************************/ +typedef struct +{ + uint8_t session_id[SSL_SESSION_ID_SIZE]; +#ifndef WIN32 + pthread_t server_thread; +#endif + int start_server; + int stop_server; + int do_reneg; +} CLNT_SESSION_RESUME_CTX; + +typedef struct +{ + const char *testname; + const char *openssl_option; +} server_t; + +static void do_server(server_t *svr) +{ + char openssl_buf[2048]; +#ifndef WIN32 + pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); +#endif + sprintf(openssl_buf, "openssl s_server -tls1 " + "-accept %d -quiet %s ", g_port, svr->openssl_option); + system(openssl_buf); +} + +static int SSL_client_test( + const char *test, + SSL_CTX **ssl_ctx, + const char *openssl_option, + CLNT_SESSION_RESUME_CTX *sess_resume, + uint32_t client_options, + const char *private_key, + const char *password, + const char *cert) +{ + server_t server_data; + SSL *ssl = NULL; + int client_fd = -1; + uint8_t *session_id = NULL; + int ret = 1; +#ifndef WIN32 + pthread_t thread; +#endif + + if (sess_resume == NULL || sess_resume->start_server) + { + g_port++; + server_data.openssl_option = openssl_option; + +#ifndef WIN32 + pthread_create(&thread, NULL, + (void *(*)(void *))do_server, (void *)&server_data); + pthread_detach(thread); +#else + CreateThread(NULL, 1024, (LPTHREAD_START_ROUTINE)do_server, + (LPVOID)&server_data, 0, NULL); +#endif + } + + usleep(200000); /* allow server to start */ + + if (*ssl_ctx == NULL) + { + if (private_key) + { + client_options |= SSL_NO_DEFAULT_KEY; + } + + if ((*ssl_ctx = ssl_ctx_new( + client_options, SSL_DEFAULT_CLNT_SESS)) == NULL) + { + ret = SSL_ERROR_INVALID_KEY; + goto client_test_exit; + } + + if (private_key) + { + int obj_type = SSL_OBJ_RSA_KEY; + + if (strstr(private_key, ".p8")) + obj_type = SSL_OBJ_PKCS8; + else if (strstr(private_key, ".p12")) + obj_type = SSL_OBJ_PKCS12; + + if (ssl_obj_load(*ssl_ctx, obj_type, private_key, password)) + { + ret = SSL_ERROR_INVALID_KEY; + goto client_test_exit; + } + } + + if (cert) + { + if ((ret = ssl_obj_load(*ssl_ctx, + SSL_OBJ_X509_CERT, cert, NULL)) != SSL_OK) + { + printf("could not add cert %s (%d)\n", cert, ret); + TTY_FLUSH(); + goto client_test_exit; + } + } + + if (ssl_obj_load(*ssl_ctx, SSL_OBJ_X509_CACERT, + "../ssl/test/axTLS.ca_x509.cer", NULL)) + { + printf("could not add cert auth\n"); TTY_FLUSH(); + goto client_test_exit; + } + } + + if (sess_resume && !sess_resume->start_server) + { + session_id = sess_resume->session_id; + } + + if ((client_fd = client_socket_init(g_port)) < 0) + { + printf("could not start socket on %d\n", g_port); TTY_FLUSH(); + goto client_test_exit; + } + + ssl = ssl_client_new(*ssl_ctx, client_fd, session_id, sizeof(session_id)); + + /* check the return status */ + if ((ret = ssl_handshake_status(ssl))) + goto client_test_exit; + + /* renegotiate client */ + if (sess_resume && sess_resume->do_reneg) + { + if (ssl_renegotiate(ssl) < 0) + goto client_test_exit; + } + + if (sess_resume) + { + memcpy(sess_resume->session_id, + ssl_get_session_id(ssl), SSL_SESSION_ID_SIZE); + } + + if (IS_SET_SSL_FLAG(SSL_SERVER_VERIFY_LATER) && + (ret = ssl_verify_cert(ssl))) + { + goto client_test_exit; + } + + ssl_write(ssl, (uint8_t *)"hello world\n", 13); + if (sess_resume) + { + const uint8_t *sess_id = ssl_get_session_id(ssl); + int i; + + printf(" Session-ID: "); + for (i = 0; i < SSL_SESSION_ID_SIZE; i++) + { + printf("%02X", sess_id[i]); + } + printf("\n"); + TTY_FLUSH(); + } + + ret = 0; + +client_test_exit: + ssl_free(ssl); + SOCKET_CLOSE(client_fd); + usleep(200000); /* allow openssl to say something */ + + if (sess_resume) + { + if (sess_resume->stop_server) + { + ssl_ctx_free(*ssl_ctx); + *ssl_ctx = NULL; +#ifndef WIN32 + pthread_cancel(sess_resume->server_thread); +#endif + } + else if (sess_resume->start_server) + { +#ifndef WIN32 + sess_resume->server_thread = thread; +#endif + } + } + else + { + ssl_ctx_free(*ssl_ctx); + *ssl_ctx = NULL; +#ifndef WIN32 + pthread_cancel(thread); +#endif + } + + if (ret == 0) + { + printf("SSL client test \"%s\" passed\n", test); + TTY_FLUSH(); + } + + return ret; +} + +int SSL_client_tests(void) +{ + int ret = -1; + SSL_CTX *ssl_ctx = NULL; + CLNT_SESSION_RESUME_CTX sess_resume; + memset(&sess_resume, 0, sizeof(CLNT_SESSION_RESUME_CTX)); + + sess_resume.start_server = 1; + printf("### starting client tests\n"); + + if ((ret = SSL_client_test("512 bit key", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_512.pem " + "-key ../ssl/test/axTLS.key_512.pem", &sess_resume, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + /* all the session id's should match for session resumption */ + sess_resume.start_server = 0; + if ((ret = SSL_client_test("Client session resumption #1", + &ssl_ctx, NULL, &sess_resume, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + sess_resume.do_reneg = 1; + if ((ret = SSL_client_test("Client renegotiation", + &ssl_ctx, NULL, &sess_resume, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + sess_resume.do_reneg = 0; + + sess_resume.stop_server = 1; + if ((ret = SSL_client_test("Client session resumption #2", + &ssl_ctx, NULL, &sess_resume, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + if ((ret = SSL_client_test("1024 bit key", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_1024.pem " + "-key ../ssl/test/axTLS.key_1024.pem", NULL, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + if ((ret = SSL_client_test("2048 bit key", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_2048.pem " + "-key ../ssl/test/axTLS.key_2048.pem", NULL, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + if ((ret = SSL_client_test("4096 bit key", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_4096.pem " + "-key ../ssl/test/axTLS.key_4096.pem", NULL, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + if ((ret = SSL_client_test("Server cert chaining", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_device.pem " + "-key ../ssl/test/axTLS.device_key.pem " + "-CAfile ../ssl/test/axTLS.x509_512.pem ", NULL, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + /* Check the server can verify the client */ + if ((ret = SSL_client_test("Client peer authentication", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_2048.pem " + "-key ../ssl/test/axTLS.key_2048.pem " + "-CAfile ../ssl/test/axTLS.ca_x509.pem " + "-verify 1 ", NULL, DEFAULT_CLNT_OPTION, + "../ssl/test/axTLS.key_1024", NULL, + "../ssl/test/axTLS.x509_1024.cer"))) + goto cleanup; + + /* Should get an "ERROR" from openssl (as the handshake fails as soon as + * the certificate verification fails) */ + if ((ret = SSL_client_test("Error: Expired cert (verify now)", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_bad_after.pem " + "-key ../ssl/test/axTLS.key_512.pem", NULL, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL)) != + SSL_X509_ERROR(X509_VFY_ERROR_EXPIRED)) + { + printf("*** Error: %d\n", ret); + goto cleanup; + } + + printf("SSL client test \"Expired cert (verify now)\" passed\n"); + + /* There is no "ERROR" from openssl */ + if ((ret = SSL_client_test("Error: Expired cert (verify later)", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_bad_after.pem " + "-key ../ssl/test/axTLS.key_512.pem", NULL, + DEFAULT_CLNT_OPTION|SSL_SERVER_VERIFY_LATER, NULL, + NULL, NULL)) != SSL_X509_ERROR(X509_VFY_ERROR_EXPIRED)) + { + printf("*** Error: %d\n", ret); + goto cleanup; + } + + printf("SSL client test \"Expired cert (verify later)\" passed\n"); + ret = 0; + +cleanup: + if (ret) + { + ssl_display_error(ret); + printf("Error: A client test failed\n"); + exit(1); + } + else + { + printf("All client tests passed\n"); TTY_FLUSH(); + } + + return ret; +} + +/************************************************************************** + * SSL Basic Testing (test a big packet handshake) + * + **************************************************************************/ +static uint8_t basic_buf[256*1024]; + +static void do_basic(void) +{ + int client_fd; + SSL *ssl_clnt; + SSL_CTX *ssl_clnt_ctx = ssl_ctx_new( + DEFAULT_CLNT_OPTION, SSL_DEFAULT_CLNT_SESS); + usleep(200000); /* allow server to start */ + + if ((client_fd = client_socket_init(g_port)) < 0) + goto error; + + if (ssl_obj_load(ssl_clnt_ctx, SSL_OBJ_X509_CACERT, + "../ssl/test/axTLS.ca_x509.cer", NULL)) + goto error; + + ssl_clnt = ssl_client_new(ssl_clnt_ctx, client_fd, NULL, 0); + + /* check the return status */ + if (ssl_handshake_status(ssl_clnt) < 0) + { + printf("YA YA\n"); + ssl_display_error(ssl_handshake_status(ssl_clnt)); + goto error; + } + + ssl_write(ssl_clnt, basic_buf, sizeof(basic_buf)); + ssl_free(ssl_clnt); + +error: + ssl_ctx_free(ssl_clnt_ctx); + SOCKET_CLOSE(client_fd); + + /* exit this thread */ +} + +static int SSL_basic_test(void) +{ + int server_fd, client_fd, ret = 0, size = 0, offset = 0; + SSL_CTX *ssl_svr_ctx = NULL; + struct sockaddr_in client_addr; + uint8_t *read_buf; + socklen_t clnt_len = sizeof(client_addr); + SSL *ssl_svr; +#ifndef WIN32 + pthread_t thread; +#endif + memset(basic_buf, 0xA5, sizeof(basic_buf)/2); + memset(&basic_buf[sizeof(basic_buf)/2], 0x5A, sizeof(basic_buf)/2); + + if ((server_fd = server_socket_init(&g_port)) < 0) + goto error; + + ssl_svr_ctx = ssl_ctx_new(DEFAULT_SVR_OPTION, SSL_DEFAULT_SVR_SESS); + +#ifndef WIN32 + pthread_create(&thread, NULL, + (void *(*)(void *))do_basic, NULL); + pthread_detach(thread); +#else + CreateThread(NULL, 1024, (LPTHREAD_START_ROUTINE)do_basic, NULL, 0, NULL); +#endif + + /* Wait for a client to connect */ + if ((client_fd = accept(server_fd, + (struct sockaddr *) &client_addr, &clnt_len)) < 0) + { + ret = SSL_ERROR_SOCK_SETUP_FAILURE; + goto error; + } + + /* we are ready to go */ + ssl_svr = ssl_server_new(ssl_svr_ctx, client_fd); + + do + { + while ((size = ssl_read(ssl_svr, &read_buf)) == SSL_OK); + + if (size < SSL_OK) /* got some alert or something nasty */ + { + printf("Server "); + ssl_display_error(size); + ret = size; + break; + } + else /* looks more promising */ + { + if (memcmp(read_buf, &basic_buf[offset], size) != 0) + { + ret = SSL_NOT_OK; + break; + } + } + + offset += size; + } while (offset < sizeof(basic_buf)); + + printf(ret == SSL_OK && offset == sizeof(basic_buf) ? + "SSL basic test passed\n" : + "SSL basic test failed\n"); + TTY_FLUSH(); + + ssl_free(ssl_svr); + SOCKET_CLOSE(server_fd); + SOCKET_CLOSE(client_fd); + +error: + ssl_ctx_free(ssl_svr_ctx); + return ret; +} + +#if !defined(WIN32) && defined(CONFIG_SSL_CTX_MUTEXING) +/************************************************************************** + * Multi-Threading Tests + * + **************************************************************************/ +#define NUM_THREADS 100 + +typedef struct +{ + SSL_CTX *ssl_clnt_ctx; + int port; + int thread_id; +} multi_t; + +void do_multi_clnt(multi_t *multi_data) +{ + int res = 1, client_fd, i; + SSL *ssl = NULL; + char tmp[5]; + + if ((client_fd = client_socket_init(multi_data->port)) < 0) + goto client_test_exit; + + sleep(1); + ssl = ssl_client_new(multi_data->ssl_clnt_ctx, client_fd, NULL, 0); + + if ((res = ssl_handshake_status(ssl))) + { + printf("Client "); + ssl_display_error(res); + goto client_test_exit; + } + + sprintf(tmp, "%d\n", multi_data->thread_id); + for (i = 0; i < 10; i++) + ssl_write(ssl, (uint8_t *)tmp, strlen(tmp)+1); + +client_test_exit: + ssl_free(ssl); + SOCKET_CLOSE(client_fd); + free(multi_data); +} + +void do_multi_svr(SSL *ssl) +{ + uint8_t *read_buf; + int *res_ptr = malloc(sizeof(int)); + int res; + + for (;;) + { + res = ssl_read(ssl, &read_buf); + + /* kill the client */ + if (res != SSL_OK) + { + if (res == SSL_ERROR_CONN_LOST) + { + SOCKET_CLOSE(ssl->client_fd); + ssl_free(ssl); + break; + } + else if (res > 0) + { + /* do nothing */ + } + else /* some problem */ + { + printf("Server "); + ssl_display_error(res); + goto error; + } + } + } + + res = SSL_OK; +error: + *res_ptr = res; + pthread_exit(res_ptr); +} + +int multi_thread_test(void) +{ + int server_fd = -1; + SSL_CTX *ssl_server_ctx; + SSL_CTX *ssl_clnt_ctx; + pthread_t clnt_threads[NUM_THREADS]; + pthread_t svr_threads[NUM_THREADS]; + int i, res = 0; + struct sockaddr_in client_addr; + socklen_t clnt_len = sizeof(client_addr); + + printf("Do multi-threading test (takes a minute)\n"); + + ssl_server_ctx = ssl_ctx_new(DEFAULT_SVR_OPTION, SSL_DEFAULT_SVR_SESS); + ssl_clnt_ctx = ssl_ctx_new(DEFAULT_CLNT_OPTION, SSL_DEFAULT_CLNT_SESS); + + if (ssl_obj_load(ssl_clnt_ctx, SSL_OBJ_X509_CACERT, + "../ssl/test/axTLS.ca_x509.cer", NULL)) + goto error; + + if ((server_fd = server_socket_init(&g_port)) < 0) + goto error; + + for (i = 0; i < NUM_THREADS; i++) + { + multi_t *multi_data = (multi_t *)malloc(sizeof(multi_t)); + multi_data->ssl_clnt_ctx = ssl_clnt_ctx; + multi_data->port = g_port; + multi_data->thread_id = i+1; + pthread_create(&clnt_threads[i], NULL, + (void *(*)(void *))do_multi_clnt, (void *)multi_data); + pthread_detach(clnt_threads[i]); + } + + for (i = 0; i < NUM_THREADS; i++) + { + SSL *ssl_svr; + int client_fd = accept(server_fd, + (struct sockaddr *)&client_addr, &clnt_len); + + if (client_fd < 0) + goto error; + + ssl_svr = ssl_server_new(ssl_server_ctx, client_fd); + + pthread_create(&svr_threads[i], NULL, + (void *(*)(void *))do_multi_svr, (void *)ssl_svr); + } + + /* make sure we've run all of the threads */ + for (i = 0; i < NUM_THREADS; i++) + { + void *thread_res; + pthread_join(svr_threads[i], &thread_res); + + if (*((int *)thread_res) != 0) + res = 1; + + free(thread_res); + } + + if (res) + goto error; + + printf("Multi-thread test passed (%d)\n", NUM_THREADS); +error: + ssl_ctx_free(ssl_server_ctx); + ssl_ctx_free(ssl_clnt_ctx); + SOCKET_CLOSE(server_fd); + return res; +} +#endif /* !defined(WIN32) && defined(CONFIG_SSL_CTX_MUTEXING) */ + +/************************************************************************** + * Header issue + * + **************************************************************************/ +static void do_header_issue(void) +{ + char axtls_buf[2048]; +#ifndef WIN32 + pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); +#endif + sprintf(axtls_buf, "./axssl s_client -connect localhost:%d", g_port); + system(axtls_buf); +} + +static int header_issue(void) +{ + FILE *f = fopen("../ssl/test/header_issue.dat", "r"); + int server_fd = -1, client_fd = -1, ret = 1; + uint8_t buf[2048]; + int size = 0; + struct sockaddr_in client_addr; + socklen_t clnt_len = sizeof(client_addr); +#ifndef WIN32 + pthread_t thread; +#endif + + if (f == NULL || (server_fd = server_socket_init(&g_port)) < 0) + goto error; + +#ifndef WIN32 + pthread_create(&thread, NULL, + (void *(*)(void *))do_header_issue, NULL); + pthread_detach(thread); +#else + CreateThread(NULL, 1024, (LPTHREAD_START_ROUTINE)do_header_issue, + NULL, 0, NULL); +#endif + if ((client_fd = accept(server_fd, + (struct sockaddr *) &client_addr, &clnt_len)) < 0) + { + ret = SSL_ERROR_SOCK_SETUP_FAILURE; + goto error; + } + + size = fread(buf, 1, sizeof(buf), f); + SOCKET_WRITE(client_fd, buf, size); + usleep(200000); + + ret = 0; +error: + fclose(f); + SOCKET_CLOSE(client_fd); + SOCKET_CLOSE(server_fd); + TTY_FLUSH(); + system("killall axssl"); + return ret; +} + +/************************************************************************** + * main() + * + **************************************************************************/ +int main(int argc, char *argv[]) +{ + int ret = 1; + BI_CTX *bi_ctx; + int fd; + +#ifdef WIN32 + WSADATA wsaData; + WORD wVersionRequested = MAKEWORD(2, 2); + WSAStartup(wVersionRequested, &wsaData); + fd = _open("test_result.txt", O_WRONLY|O_TEMPORARY|O_CREAT, _S_IWRITE); + dup2(fd, 2); /* write stderr to this file */ +#else + fd = open("/dev/null", O_WRONLY); /* write stderr to /dev/null */ + signal(SIGPIPE, SIG_IGN); /* ignore pipe errors */ + dup2(fd, 2); +#endif + + /* can't do testing in this mode */ +#if defined CONFIG_SSL_GENERATE_X509_CERT + printf("Error: Must compile with default key/certificates\n"); + exit(1); +#endif + + bi_ctx = bi_initialize(); + + if (AES_test(bi_ctx)) + { + printf("AES tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (RC4_test(bi_ctx)) + { + printf("RC4 tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (MD5_test(bi_ctx)) + { + printf("MD5 tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (SHA1_test(bi_ctx)) + { + printf("SHA1 tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (HMAC_test(bi_ctx)) + { + printf("HMAC tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (BIGINT_test(bi_ctx)) + { + printf("BigInt tests failed!\n"); + goto cleanup; + } + TTY_FLUSH(); + + bi_terminate(bi_ctx); + + if (RSA_test()) + { + printf("RSA tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (cert_tests()) + { + printf("CERT tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + +#if !defined(WIN32) && defined(CONFIG_SSL_CTX_MUTEXING) + if (multi_thread_test()) + goto cleanup; +#endif + + if (SSL_basic_test()) + goto cleanup; + + system("sh ../ssl/test/killopenssl.sh"); + + if (SSL_client_tests()) + goto cleanup; + + system("sh ../ssl/test/killopenssl.sh"); + + if (SSL_server_tests()) + goto cleanup; + + system("sh ../ssl/test/killopenssl.sh"); + + if (header_issue()) + { + printf("Header tests failed\n"); TTY_FLUSH(); + goto cleanup; + } + + ret = 0; /* all ok */ + printf("**** ALL TESTS PASSED ****\n"); TTY_FLUSH(); +cleanup: + + if (ret) + printf("Error: Some tests failed!\n"); + + close(fd); + return ret; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/ssltest.c.bak b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/ssltest.c.bak new file mode 100644 index 0000000..ca9637f --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/ssltest.c.bak @@ -0,0 +1,1940 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * The testing of the crypto and ssl stuff goes here. Keeps the individual code + * modules from being uncluttered with test code. + * + * This is test code - I make no apologies for the quality! + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifndef WIN32 +#include +#endif + +#include "ssl.h" + +#define DEFAULT_CERT "../ssl/test/axTLS.x509_512.cer" +#define DEFAULT_KEY "../ssl/test/axTLS.key_512" +//#define DEFAULT_SVR_OPTION SSL_DISPLAY_BYTES|SSL_DISPLAY_STATES +#define DEFAULT_SVR_OPTION 0 +#define DEFAULT_CLNT_OPTION 0 +//#define DEFAULT_CLNT_OPTION SSL_DISPLAY_BYTES|SSL_DISPLAY_STATES + +static int g_port = 19001; + +/************************************************************************** + * AES tests + * + * Run through a couple of the RFC3602 tests to verify that AES is correct. + **************************************************************************/ +#define TEST1_SIZE 16 +#define TEST2_SIZE 32 + +static int AES_test(BI_CTX *bi_ctx) +{ + AES_CTX aes_key; + int res = 1; + uint8_t key[TEST1_SIZE]; + uint8_t iv[TEST1_SIZE]; + + { + /* + Case #1: Encrypting 16 bytes (1 block) using AES-CBC + Key : 0x06a9214036b8a15b512e03d534120006 + IV : 0x3dafba429d9eb430b422da802c9fac41 + Plaintext : "Single block msg" + Ciphertext: 0xe353779c1079aeb82708942dbe77181a + + */ + char *in_str = "Single block msg"; + uint8_t ct[TEST1_SIZE]; + uint8_t enc_data[TEST1_SIZE]; + uint8_t dec_data[TEST1_SIZE]; + + bigint *key_bi = bi_str_import( + bi_ctx, "06A9214036B8A15B512E03D534120006"); + bigint *iv_bi = bi_str_import( + bi_ctx, "3DAFBA429D9EB430B422DA802C9FAC41"); + bigint *ct_bi = bi_str_import( + bi_ctx, "E353779C1079AEB82708942DBE77181A"); + bi_export(bi_ctx, key_bi, key, TEST1_SIZE); + bi_export(bi_ctx, iv_bi, iv, TEST1_SIZE); + bi_export(bi_ctx, ct_bi, ct, TEST1_SIZE); + + AES_set_key(&aes_key, key, iv, AES_MODE_128); + AES_cbc_encrypt(&aes_key, (const uint8_t *)in_str, + enc_data, sizeof(enc_data)); + if (memcmp(enc_data, ct, sizeof(ct))) + { + printf("Error: AES ENCRYPT #1 failed\n"); + goto end; + } + + AES_set_key(&aes_key, key, iv, AES_MODE_128); + AES_convert_key(&aes_key); + AES_cbc_decrypt(&aes_key, enc_data, dec_data, sizeof(enc_data)); + + if (memcmp(dec_data, in_str, sizeof(dec_data))) + { + printf("Error: AES DECRYPT #1 failed\n"); + goto end; + } + } + + { + /* + Case #2: Encrypting 32 bytes (2 blocks) using AES-CBC + Key : 0xc286696d887c9aa0611bbb3e2025a45a + IV : 0x562e17996d093d28ddb3ba695a2e6f58 + Plaintext : 0x000102030405060708090a0b0c0d0e0f + 101112131415161718191a1b1c1d1e1f + Ciphertext: 0xd296cd94c2cccf8a3a863028b5e1dc0a + 7586602d253cfff91b8266bea6d61ab1 + */ + uint8_t in_data[TEST2_SIZE]; + uint8_t ct[TEST2_SIZE]; + uint8_t enc_data[TEST2_SIZE]; + uint8_t dec_data[TEST2_SIZE]; + + bigint *in_bi = bi_str_import(bi_ctx, + "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F"); + bigint *key_bi = bi_str_import( + bi_ctx, "C286696D887C9AA0611BBB3E2025A45A"); + bigint *iv_bi = bi_str_import( + bi_ctx, "562E17996D093D28DDB3BA695A2E6F58"); + bigint *ct_bi = bi_str_import(bi_ctx, + "D296CD94C2CCCF8A3A863028B5E1DC0A7586602D253CFFF91B8266BEA6D61AB1"); + bi_export(bi_ctx, in_bi, in_data, TEST2_SIZE); + bi_export(bi_ctx, key_bi, key, TEST1_SIZE); + bi_export(bi_ctx, iv_bi, iv, TEST1_SIZE); + bi_export(bi_ctx, ct_bi, ct, TEST2_SIZE); + + AES_set_key(&aes_key, key, iv, AES_MODE_128); + AES_cbc_encrypt(&aes_key, (const uint8_t *)in_data, + enc_data, sizeof(enc_data)); + + if (memcmp(enc_data, ct, sizeof(ct))) + { + printf("Error: ENCRYPT #2 failed\n"); + goto end; + } + + AES_set_key(&aes_key, key, iv, AES_MODE_128); + AES_convert_key(&aes_key); + AES_cbc_decrypt(&aes_key, enc_data, dec_data, sizeof(enc_data)); + if (memcmp(dec_data, in_data, sizeof(dec_data))) + { + printf("Error: DECRYPT #2 failed\n"); + goto end; + } + } + + res = 0; + printf("All AES tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * RC4 tests + * + * ARC4 tests vectors from OpenSSL (crypto/rc4/rc4test.c) + **************************************************************************/ +static const uint8_t keys[7][30]= +{ + {8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}, + {8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}, + {8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, + {4,0xef,0x01,0x23,0x45}, + {8,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}, + {4,0xef,0x01,0x23,0x45}, +}; + +static const uint8_t data_len[7]={8,8,8,20,28,10}; +static uint8_t data[7][30]= +{ + {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xff}, + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff}, + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff}, + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xff}, + {0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0, + 0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0, + 0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0, + 0x12,0x34,0x56,0x78,0xff}, + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff}, + {0}, +}; + +static const uint8_t output[7][30]= +{ + {0x75,0xb7,0x87,0x80,0x99,0xe0,0xc5,0x96,0x00}, + {0x74,0x94,0xc2,0xe7,0x10,0x4b,0x08,0x79,0x00}, + {0xde,0x18,0x89,0x41,0xa3,0x37,0x5d,0x3a,0x00}, + {0xd6,0xa1,0x41,0xa7,0xec,0x3c,0x38,0xdf, + 0xbd,0x61,0x5a,0x11,0x62,0xe1,0xc7,0xba, + 0x36,0xb6,0x78,0x58,0x00}, + {0x66,0xa0,0x94,0x9f,0x8a,0xf7,0xd6,0x89, + 0x1f,0x7f,0x83,0x2b,0xa8,0x33,0xc0,0x0c, + 0x89,0x2e,0xbe,0x30,0x14,0x3c,0xe2,0x87, + 0x40,0x01,0x1e,0xcf,0x00}, + {0xd6,0xa1,0x41,0xa7,0xec,0x3c,0x38,0xdf,0xbd,0x61,0x00}, + {0}, +}; + +static int RC4_test(BI_CTX *bi_ctx) +{ + int i, res = 1; + RC4_CTX s; + + for (i = 0; i < 6; i++) + { + RC4_setup(&s, &keys[i][1], keys[i][0]); + RC4_crypt(&s, data[i], data[i], data_len[i]); + + if (memcmp(data[i], output[i], data_len[i])) + { + printf("Error: RC4 CRYPT #%d failed\n", i); + goto end; + } + } + + res = 0; + printf("All RC4 tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * SHA1 tests + * + * Run through a couple of the RFC3174 tests to verify that SHA1 is correct. + **************************************************************************/ +static int SHA1_test(BI_CTX *bi_ctx) +{ + SHA1_CTX ctx; + uint8_t ct[SHA1_SIZE]; + uint8_t digest[SHA1_SIZE]; + int res = 1; + + { + const char *in_str = "abc"; + bigint *ct_bi = bi_str_import(bi_ctx, + "A9993E364706816ABA3E25717850C26C9CD0D89D"); + bi_export(bi_ctx, ct_bi, ct, SHA1_SIZE); + + SHA1_Init(&ctx); + SHA1_Update(&ctx, (const uint8_t *)in_str, strlen(in_str)); + SHA1_Final(digest, &ctx); + + if (memcmp(digest, ct, sizeof(ct))) + { + printf("Error: SHA1 #1 failed\n"); + goto end; + } + } + + { + const char *in_str = + "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; + bigint *ct_bi = bi_str_import(bi_ctx, + "84983E441C3BD26EBAAE4AA1F95129E5E54670F1"); + bi_export(bi_ctx, ct_bi, ct, SHA1_SIZE); + + SHA1_Init(&ctx); + SHA1_Update(&ctx, (const uint8_t *)in_str, strlen(in_str)); + SHA1_Final(digest, &ctx); + + if (memcmp(digest, ct, sizeof(ct))) + { + printf("Error: SHA1 #2 failed\n"); + goto end; + } + } + + res = 0; + printf("All SHA1 tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * MD5 tests + * + * Run through a couple of the RFC1321 tests to verify that MD5 is correct. + **************************************************************************/ +static int MD5_test(BI_CTX *bi_ctx) +{ + MD5_CTX ctx; + uint8_t ct[MD5_SIZE]; + uint8_t digest[MD5_SIZE]; + int res = 1; + + { + const char *in_str = "abc"; + bigint *ct_bi = bi_str_import(bi_ctx, + "900150983CD24FB0D6963F7D28E17F72"); + bi_export(bi_ctx, ct_bi, ct, MD5_SIZE); + + MD5_Init(&ctx); + MD5_Update(&ctx, (const uint8_t *)in_str, strlen(in_str)); + MD5_Final(digest, &ctx); + + if (memcmp(digest, ct, sizeof(ct))) + { + printf("Error: MD5 #1 failed\n"); + goto end; + } + } + + { + const char *in_str = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + bigint *ct_bi = bi_str_import( + bi_ctx, "D174AB98D277D9F5A5611C2C9F419D9F"); + bi_export(bi_ctx, ct_bi, ct, MD5_SIZE); + + MD5_Init(&ctx); + MD5_Update(&ctx, (const uint8_t *)in_str, strlen(in_str)); + MD5_Final(digest, &ctx); + + if (memcmp(digest, ct, sizeof(ct))) + { + printf("Error: MD5 #2 failed\n"); + goto end; + } + } + res = 0; + printf("All MD5 tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * HMAC tests + * + * Run through a couple of the RFC2202 tests to verify that HMAC is correct. + **************************************************************************/ +static int HMAC_test(BI_CTX *bi_ctx) +{ + uint8_t key[SHA1_SIZE]; + uint8_t ct[SHA1_SIZE]; + uint8_t dgst[SHA1_SIZE]; + int res = 1; + const char *key_str; + + const char *data_str = "Hi There"; + bigint *key_bi = bi_str_import(bi_ctx, "0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B"); + bigint *ct_bi = bi_str_import(bi_ctx, "9294727A3638BB1C13F48EF8158BFC9D"); + bi_export(bi_ctx, key_bi, key, MD5_SIZE); + bi_export(bi_ctx, ct_bi, ct, MD5_SIZE); + hmac_md5((const uint8_t *)data_str, 8, key, MD5_SIZE, dgst); + if (memcmp(dgst, ct, MD5_SIZE)) + { + printf("HMAC MD5 #1 failed\n"); + goto end; + } + + data_str = "what do ya want for nothing?"; + key_str = "Jefe"; + ct_bi = bi_str_import(bi_ctx, "750C783E6AB0B503EAA86E310A5DB738"); + bi_export(bi_ctx, ct_bi, ct, MD5_SIZE); + hmac_md5((const uint8_t *)data_str, 28, (const uint8_t *)key_str, 4, dgst); + if (memcmp(dgst, ct, MD5_SIZE)) + { + printf("HMAC MD5 #2 failed\n"); + goto end; + } + + data_str = "Hi There"; + key_bi = bi_str_import(bi_ctx, "0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B"); + bi_export(bi_ctx, key_bi, key, SHA1_SIZE); + ct_bi = bi_str_import(bi_ctx, "B617318655057264E28BC0B6FB378C8EF146BE00"); + bi_export(bi_ctx, ct_bi, ct, SHA1_SIZE); + + hmac_sha1((const uint8_t *)data_str, 8, + (const uint8_t *)key, SHA1_SIZE, dgst); + if (memcmp(dgst, ct, SHA1_SIZE)) + { + printf("HMAC SHA1 #1 failed\n"); + goto end; + } + + data_str = "what do ya want for nothing?"; + key_str = "Jefe"; + ct_bi = bi_str_import(bi_ctx, "EFFCDF6AE5EB2FA2D27416D5F184DF9C259A7C79"); + bi_export(bi_ctx, ct_bi, ct, SHA1_SIZE); + + hmac_sha1((const uint8_t *)data_str, 28, (const uint8_t *)key_str, 5, dgst); + if (memcmp(dgst, ct, SHA1_SIZE)) + { + printf("HMAC SHA1 failed\n"); + exit(1); + } + + res = 0; + printf("All HMAC tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * BIGINT tests + * + **************************************************************************/ +static int BIGINT_test(BI_CTX *ctx) +{ + int res = 1; + bigint *bi_data, *bi_exp, *bi_res; + const char *expnt, *plaintext, *mod; + uint8_t compare[MAX_KEY_BYTE_SIZE]; + + /** + * 512 bit key + */ + plaintext = /* 64 byte number */ + "01aaaaaaaaaabbbbbbbbbbbbbbbccccccccccccccdddddddddddddeeeeeeeeee"; + + mod = "C30773C8ABE09FCC279EE0E5343370DE" + "8B2FFDB6059271E3005A7CEEF0D35E0A" + "1F9915D95E63560836CC2EB2C289270D" + "BCAE8CAF6F5E907FC2759EE220071E1B"; + + expnt = "A1E556CD1738E10DF539E35101334E97" + "BE8D391C57A5C89A7AD9A2EA2ACA1B3D" + "F3140F5091CC535CBAA47CEC4159EE1F" + "B6A3661AFF1AB758426EAB158452A9B9"; + + bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext)); + bi_exp = int_to_bi(ctx, 0x10001); + bi_set_mod(ctx, bi_str_import(ctx, mod), 0); + bi_res = bi_mod_power(ctx, bi_data, bi_exp); + + bi_data = bi_res; /* resuse again - see if we get the original */ + + bi_exp = bi_str_import(ctx, expnt); + bi_res = bi_mod_power(ctx, bi_data, bi_exp); + bi_free_mod(ctx, 0); + + bi_export(ctx, bi_res, compare, 64); + if (memcmp(plaintext, compare, 64) != 0) + goto end; + + printf("All BIGINT tests passed\n"); + res = 0; + +end: + return res; +} + +/************************************************************************** + * RSA tests + * + * Use the results from openssl to verify PKCS1 etc + **************************************************************************/ +static int RSA_test(void) +{ + int res = 1; + const char *plaintext = /* 128 byte hex number */ + "1aaaaaaaaaabbbbbbbbbbbbbbbccccccccccccccdddddddddddddeeeeeeeeee2" + "1aaaaaaaaaabbbbbbbbbbbbbbbccccccccccccccdddddddddddddeeeeeeeee2\012"; + uint8_t enc_data[128], dec_data[128]; + RSA_CTX *rsa_ctx = NULL; + BI_CTX *bi_ctx; + bigint *plaintext_bi; + bigint *enc_data_bi, *dec_data_bi; + uint8_t enc_data2[128], dec_data2[128]; + int size; + int len; + uint8_t *buf; + + /* extract the private key elements */ + len = get_file("../ssl/test/axTLS.key_1024", &buf); + if (asn1_get_private_key(buf, len, &rsa_ctx) < 0) + { + goto end; + } + + free(buf); + bi_ctx = rsa_ctx->bi_ctx; + plaintext_bi = bi_import(bi_ctx, + (const uint8_t *)plaintext, strlen(plaintext)); + + /* basic rsa encrypt */ + enc_data_bi = RSA_public(rsa_ctx, plaintext_bi); + bi_export(bi_ctx, bi_copy(enc_data_bi), enc_data, sizeof(enc_data)); + + /* basic rsa decrypt */ + dec_data_bi = RSA_private(rsa_ctx, enc_data_bi); + bi_export(bi_ctx, dec_data_bi, dec_data, sizeof(dec_data)); + + if (memcmp(dec_data, plaintext, strlen(plaintext))) + { + printf("Error: DECRYPT #1 failed\n"); + goto end; + } + + RSA_encrypt(rsa_ctx, (const uint8_t *)"abc", 3, enc_data2, 0); + size = RSA_decrypt(rsa_ctx, enc_data2, dec_data2, 1); + if (memcmp("abc", dec_data2, 3)) + { + printf("Error: ENCRYPT/DECRYPT #2 failed\n"); + goto end; + } + + RSA_free(rsa_ctx); + res = 0; + printf("All RSA tests passed\n"); + +end: + return res; +} + +/************************************************************************** + * Cert Testing + * + **************************************************************************/ +static int cert_tests(void) +{ + int res = -1, len; + X509_CTX *x509_ctx; + SSL_CTX *ssl_ctx; + uint8_t *buf; + + /* check a bunch of 3rd party certificates */ + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/microsoft.x509_ca", &buf); + if ((res = add_cert_auth(ssl_ctx, buf, len)) < 0) + { + printf("Cert #1\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/thawte.x509_ca", &buf); + if ((res = add_cert_auth(ssl_ctx, buf, len)) < 0) + { + printf("Cert #2\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/deutsche_telecom.x509_ca", &buf); + if ((res = add_cert_auth(ssl_ctx, buf, len)) < 0) + { + printf("Cert #3\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/equifax.x509_ca", &buf); + if ((res = add_cert_auth(ssl_ctx, buf, len)) < 0) + { + printf("Cert #4\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/gnutls.cer", &buf); + if ((res = add_cert(ssl_ctx, buf, len)) < 0) + { + printf("Cert #5\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/socgen.cer", &buf); + if ((res = add_cert(ssl_ctx, buf, len)) < 0) + { + printf("Cert #6\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + len = get_file("../ssl/test/verisign.x509_ca", &buf); + if ((res = add_cert_auth(ssl_ctx, buf, len)) <0) + { + printf("Cert #7\n"); + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + free(buf); + + if (get_file("../ssl/test/verisign.x509_my_cert", &buf) < 0 || + x509_new(buf, &len, &x509_ctx)) + { + printf("Cert #8\n"); + ssl_display_error(res); + goto bad_cert; + } + + x509_free(x509_ctx); + free(buf); + + ssl_ctx = ssl_ctx_new(0, 0); + if ((res = ssl_obj_load(ssl_ctx, + SSL_OBJ_X509_CERT, "../ssl/test/ms_iis.cer", NULL)) != SSL_OK) + { + ssl_display_error(res); + goto bad_cert; + } + + ssl_ctx_free(ssl_ctx); + res = 0; /* all ok */ + printf("All Certificate tests passed\n"); + +bad_cert: + if (res) + printf("Error: A certificate test failed\n"); + return res; +} + +/** + * init a server socket. + */ +static int server_socket_init(int *port) +{ + struct sockaddr_in serv_addr; + int server_fd; + char yes = 1; + + /* Create socket for incoming connections */ + if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) + { + return -1; + } + + setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)); + +go_again: + /* Construct local address structure */ + memset(&serv_addr, 0, sizeof(serv_addr)); /* Zero out structure */ + serv_addr.sin_family = AF_INET; /* Internet address family */ + serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */ + serv_addr.sin_port = htons(*port); /* Local port */ + + /* Bind to the local address */ + if (bind(server_fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) + { + (*port)++; + goto go_again; + } + /* Mark the socket so it will listen for incoming connections */ + if (listen(server_fd, 3000) < 0) + { + return -1; + } + + return server_fd; +} + +/** + * init a client socket. + */ +static int client_socket_init(uint16_t port) +{ + struct sockaddr_in address; + int client_fd; + + address.sin_family = AF_INET; + address.sin_port = htons(port); + address.sin_addr.s_addr = inet_addr("127.0.0.1"); + client_fd = socket(AF_INET, SOCK_STREAM, 0); + if (connect(client_fd, (struct sockaddr *)&address, sizeof(address)) < 0) + { + perror("socket"); + SOCKET_CLOSE(client_fd); + client_fd = -1; + } + + return client_fd; +} + +/************************************************************************** + * SSL Server Testing + * + **************************************************************************/ +typedef struct +{ + /* not used as yet */ + int dummy; +} SVR_CTX; + +typedef struct +{ + const char *testname; + const char *openssl_option; +} client_t; + +static void do_client(client_t *clnt) +{ + char openssl_buf[2048]; + + /* make sure the main thread goes first */ + sleep(0); + + /* show the session ids in the reconnect test */ + if (strcmp(clnt->testname, "Session Reuse") == 0) + { + sprintf(openssl_buf, "echo \"hello client\" | openssl s_client " + "-connect localhost:%d %s 2>&1 | grep \"Session-ID:\"", + g_port, clnt->openssl_option); + } + else + { + sprintf(openssl_buf, "echo \"hello client\" | openssl s_client " +#ifdef WIN32 + "-connect localhost:%d -quiet %s", +#else + "-connect localhost:%d -quiet %s > /dev/null 2>&1", +#endif + g_port, clnt->openssl_option); + } + + system(openssl_buf); +} + +static int SSL_server_test( + const char *testname, + const char *openssl_option, + const char *device_cert, + const char *product_cert, + const char *private_key, + const char *ca_cert, + const char *password, + int axolotls_option) +{ + int server_fd, ret = 0; + SSL_CTX *ssl_ctx = NULL; + struct sockaddr_in client_addr; + uint8_t *read_buf; + socklen_t clnt_len = sizeof(client_addr); + client_t client_data; +#ifndef WIN32 + pthread_t thread; +#endif + g_port++; + + client_data.testname = testname; + client_data.openssl_option = openssl_option; + + if ((server_fd = server_socket_init(&g_port)) < 0) + goto error; + + if (private_key) + { + axolotls_option |= SSL_NO_DEFAULT_KEY; + } + + if ((ssl_ctx = ssl_ctx_new(axolotls_option, SSL_DEFAULT_SVR_SESS)) == NULL) + { + ret = SSL_ERROR_INVALID_KEY; + goto error; + } + + if (private_key) + { + int obj_type = SSL_OBJ_RSA_KEY; + + if (strstr(private_key, ".p8")) + obj_type = SSL_OBJ_PKCS8; + else if (strstr(private_key, ".p12")) + obj_type = SSL_OBJ_PKCS12; + + if (ssl_obj_load(ssl_ctx, obj_type, private_key, password)) + { + ret = SSL_ERROR_INVALID_KEY; + goto error; + } + } + + if (device_cert) /* test chaining */ + { + if ((ret = ssl_obj_load(ssl_ctx, + SSL_OBJ_X509_CERT, device_cert, NULL)) != SSL_OK) + goto error; + } + + if (product_cert) /* test chaining */ + { + if ((ret = ssl_obj_load(ssl_ctx, + SSL_OBJ_X509_CERT, product_cert, NULL)) != SSL_OK) + goto error; + } + + if (ca_cert) /* test adding certificate authorities */ + { + if ((ret = ssl_obj_load(ssl_ctx, + SSL_OBJ_X509_CACERT, ca_cert, NULL)) != SSL_OK) + goto error; + } + +#ifndef WIN32 + pthread_create(&thread, NULL, + (void *(*)(void *))do_client, (void *)&client_data); + pthread_detach(thread); +#else + CreateThread(NULL, 1024, (LPTHREAD_START_ROUTINE)do_client, + (LPVOID)&client_data, 0, NULL); +#endif + + for (;;) + { + int client_fd, size = 0; + SSL *ssl; + + /* Wait for a client to connect */ + if ((client_fd = accept(server_fd, + (struct sockaddr *)&client_addr, &clnt_len)) < 0) + { + ret = SSL_ERROR_SOCK_SETUP_FAILURE; + goto error; + } + + /* we are ready to go */ + ssl = ssl_server_new(ssl_ctx, client_fd); + while ((size = ssl_read(ssl, &read_buf)) == SSL_OK); + SOCKET_CLOSE(client_fd); + + if (size < SSL_OK) /* got some alert or something nasty */ + { + ret = size; + + if (ret == SSL_ERROR_CONN_LOST) + { + ret = SSL_OK; + continue; + } + + break; /* we've got a problem */ + } + else /* looks more promising */ + { + if (strstr("hello client", (char *)read_buf) == NULL) + { + printf("SSL server test \"%s\" passed\n", testname); + TTY_FLUSH(); + ret = 0; + break; + } + } + + ssl_free(ssl); + } + + SOCKET_CLOSE(server_fd); + +error: + ssl_ctx_free(ssl_ctx); + return ret; +} + +int SSL_server_tests(void) +{ + int ret = -1; + struct stat stat_buf; + SVR_CTX svr_test_ctx; + memset(&svr_test_ctx, 0, sizeof(SVR_CTX)); + + printf("### starting server tests\n"); TTY_FLUSH(); + + /* Go through the algorithms */ + + /* + * TLS1 client hello + */ + if ((ret = SSL_server_test("TLSv1", "-cipher RC4-SHA -tls1", + NULL, NULL, NULL, NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * AES128-SHA + */ + if ((ret = SSL_server_test("AES256-SHA", "-cipher AES128-SHA", + DEFAULT_CERT, NULL, DEFAULT_KEY, NULL, NULL, + DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * AES256-SHA + */ + if ((ret = SSL_server_test("AES256-SHA", "-cipher AES128-SHA", + DEFAULT_CERT, NULL, DEFAULT_KEY, NULL, NULL, + DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * RC4-SHA + */ + if ((ret = SSL_server_test("RC4-SHA", "-cipher RC4-SHA", + DEFAULT_CERT, NULL, DEFAULT_KEY, NULL, NULL, + DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * RC4-MD5 + */ + if ((ret = SSL_server_test("RC4-MD5", "-cipher RC4-MD5", + DEFAULT_CERT, NULL, DEFAULT_KEY, NULL, NULL, + DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * Session Reuse + * all the session id's should match for session resumption. + */ + if ((ret = SSL_server_test("Session Reuse", + "-cipher RC4-SHA -reconnect", + DEFAULT_CERT, NULL, DEFAULT_KEY, NULL, NULL, + DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * 512 bit RSA key + */ + if ((ret = SSL_server_test("512 bit key", "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_512.cer", NULL, + "../ssl/test/axTLS.key_512", + NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * 1024 bit RSA key (check certificate chaining) + */ + if ((ret = SSL_server_test("1024 bit key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_device.cer", + "../ssl/test/axTLS.x509_512.cer", + "../ssl/test/axTLS.device_key", + NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * 2048 bit RSA key + */ + if ((ret = SSL_server_test("2048 bit key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_2048.cer", NULL, + "../ssl/test/axTLS.key_2048", + NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * 4096 bit RSA key + */ + if ((ret = SSL_server_test("4096 bit key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_4096.cer", NULL, + "../ssl/test/axTLS.key_4096", + NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * Client Verification + */ + if ((ret = SSL_server_test("Client Verification", + "-cipher RC4-SHA -tls1 " + "-cert ../ssl/test/axTLS.x509_2048.pem " + "-key ../ssl/test/axTLS.key_2048.pem ", + NULL, NULL, NULL, + "../ssl/test/axTLS.ca_x509.cer", NULL, + DEFAULT_SVR_OPTION|SSL_CLIENT_AUTHENTICATION))) + goto cleanup; + + /* this test should fail */ + if (stat("../ssl/test/axTLS.x509_bad_before.pem", &stat_buf) >= 0) + { + if ((ret = SSL_server_test("Bad Before Cert", + "-cipher RC4-SHA -tls1 " + "-cert ../ssl/test/axTLS.x509_bad_before.pem " + "-key ../ssl/test/axTLS.key_512.pem ", + NULL, NULL, NULL, + "../ssl/test/axTLS.ca_x509.cer", NULL, + DEFAULT_SVR_OPTION|SSL_CLIENT_AUTHENTICATION)) != + SSL_X509_ERROR(X509_VFY_ERROR_NOT_YET_VALID)) + goto cleanup; + + printf("SSL server test \"%s\" passed\n", "Bad Before Cert"); + TTY_FLUSH(); + ret = 0; /* is ok */ + } + + /* this test should fail */ + if ((ret = SSL_server_test("Bad After Cert", + "-cipher RC4-SHA -tls1 " + "-cert ../ssl/test/axTLS.x509_bad_after.pem " + "-key ../ssl/test/axTLS.key_512.pem ", + NULL, NULL, NULL, + "../ssl/test/axTLS.ca_x509.cer", NULL, + DEFAULT_SVR_OPTION|SSL_CLIENT_AUTHENTICATION)) != + SSL_X509_ERROR(X509_VFY_ERROR_EXPIRED)) + goto cleanup; + + printf("SSL server test \"%s\" passed\n", "Bad After Cert"); + TTY_FLUSH(); + + /* + * Key in PEM format + */ + if ((ret = SSL_server_test("Key in PEM format", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_512.cer", NULL, + "../ssl/test/axTLS.key_512.pem", NULL, + NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * Cert in PEM format + */ + if ((ret = SSL_server_test("Cert in PEM format", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_512.pem", NULL, + "../ssl/test/axTLS.key_512.pem", NULL, + NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * Cert chain in PEM format + */ + if ((ret = SSL_server_test("Cert chain in PEM format", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_device.pem", + NULL, "../ssl/test/axTLS.device_key.pem", + "../ssl/test/axTLS.ca_x509.pem", NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * AES128 Encrypted key + */ + if ((ret = SSL_server_test("AES128 encrypted key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_aes128.pem", NULL, + "../ssl/test/axTLS.key_aes128.pem", + NULL, "abcd", DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * AES256 Encrypted key + */ + if ((ret = SSL_server_test("AES256 encrypted key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_aes256.pem", NULL, + "../ssl/test/axTLS.key_aes256.pem", + NULL, "abcd", DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * AES128 Encrypted invalid key + */ + if ((ret = SSL_server_test("AES128 encrypted invalid key", + "-cipher RC4-SHA", + "../ssl/test/axTLS.x509_aes128.pem", NULL, + "../ssl/test/axTLS.key_aes128.pem", + NULL, "xyz", DEFAULT_SVR_OPTION)) != SSL_ERROR_INVALID_KEY) + goto cleanup; + + printf("SSL server test \"%s\" passed\n", "AES128 encrypted invalid key"); + TTY_FLUSH(); + + /* + * PKCS#8 key (encrypted) + */ + if ((ret = SSL_server_test("pkcs#8 encrypted", "-cipher RC4-SHA", + DEFAULT_CERT, NULL, "../ssl/test/axTLS.encrypted.p8", + NULL, "abcd", DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * PKCS#8 key (unencrypted) + */ + if ((ret = SSL_server_test("pkcs#8 unencrypted", "-cipher RC4-SHA", + DEFAULT_CERT, NULL, "../ssl/test/axTLS.unencrypted.p8", + NULL, NULL, DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * PKCS#12 key/certificate + */ + if ((ret = SSL_server_test("pkcs#12 with CA", "-cipher RC4-SHA", + NULL, NULL, "../ssl/test/axTLS.withCA.p12", + NULL, "abcd", DEFAULT_SVR_OPTION))) + goto cleanup; + + if ((ret = SSL_server_test("pkcs#12 no CA", "-cipher RC4-SHA", + DEFAULT_CERT, NULL, "../ssl/test/axTLS.withoutCA.p12", + NULL, "abcd", DEFAULT_SVR_OPTION))) + goto cleanup; + + /* + * + */ + + ret = 0; + +cleanup: + if (ret) + { + printf("Error: A server test failed\n"); + ssl_display_error(ret); + exit(1); + } + else + { + printf("All server tests passed\n"); TTY_FLUSH(); + } + + return ret; +} + +/************************************************************************** + * SSL Client Testing + * + **************************************************************************/ +typedef struct +{ + uint8_t session_id[SSL_SESSION_ID_SIZE]; +#ifndef WIN32 + pthread_t server_thread; +#endif + int start_server; + int stop_server; + int do_reneg; +} CLNT_SESSION_RESUME_CTX; + +typedef struct +{ + const char *testname; + const char *openssl_option; +} server_t; + +static void do_server(server_t *svr) +{ + char openssl_buf[2048]; +#ifndef WIN32 + pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); +#endif + sprintf(openssl_buf, "openssl s_server -tls1 " + "-accept %d -quiet %s ", g_port, svr->openssl_option); + system(openssl_buf); +} + +static int SSL_client_test( + const char *test, + SSL_CTX **ssl_ctx, + const char *openssl_option, + CLNT_SESSION_RESUME_CTX *sess_resume, + uint32_t client_options, + const char *private_key, + const char *password, + const char *cert) +{ + server_t server_data; + SSL *ssl = NULL; + int client_fd = -1; + uint8_t *session_id = NULL; + int ret = 1; +#ifndef WIN32 + pthread_t thread; +#endif + + if (sess_resume == NULL || sess_resume->start_server) + { + g_port++; + server_data.openssl_option = openssl_option; + +#ifndef WIN32 + pthread_create(&thread, NULL, + (void *(*)(void *))do_server, (void *)&server_data); + pthread_detach(thread); +#else + CreateThread(NULL, 1024, (LPTHREAD_START_ROUTINE)do_server, + (LPVOID)&server_data, 0, NULL); +#endif + } + + usleep(200000); /* allow server to start */ + + if (*ssl_ctx == NULL) + { + if (private_key) + { + client_options |= SSL_NO_DEFAULT_KEY; + } + + if ((*ssl_ctx = ssl_ctx_new( + client_options, SSL_DEFAULT_CLNT_SESS)) == NULL) + { + ret = SSL_ERROR_INVALID_KEY; + goto client_test_exit; + } + + if (private_key) + { + int obj_type = SSL_OBJ_RSA_KEY; + + if (strstr(private_key, ".p8")) + obj_type = SSL_OBJ_PKCS8; + else if (strstr(private_key, ".p12")) + obj_type = SSL_OBJ_PKCS12; + + if (ssl_obj_load(*ssl_ctx, obj_type, private_key, password)) + { + ret = SSL_ERROR_INVALID_KEY; + goto client_test_exit; + } + } + + if (cert) + { + if ((ret = ssl_obj_load(*ssl_ctx, + SSL_OBJ_X509_CERT, cert, NULL)) != SSL_OK) + { + printf("could not add cert %s (%d)\n", cert, ret); + TTY_FLUSH(); + goto client_test_exit; + } + } + + if (ssl_obj_load(*ssl_ctx, SSL_OBJ_X509_CACERT, + "../ssl/test/axTLS.ca_x509.cer", NULL)) + { + printf("could not add cert auth\n"); TTY_FLUSH(); + goto client_test_exit; + } + } + + if (sess_resume && !sess_resume->start_server) + { + session_id = sess_resume->session_id; + } + + if ((client_fd = client_socket_init(g_port)) < 0) + { + printf("could not start socket on %d\n", g_port); TTY_FLUSH(); + goto client_test_exit; + } + + ssl = ssl_client_new(*ssl_ctx, client_fd, session_id, sizeof(session_id)); + + /* check the return status */ + if ((ret = ssl_handshake_status(ssl))) + goto client_test_exit; + + /* renegotiate client */ + if (sess_resume && sess_resume->do_reneg) + { + if (ssl_renegotiate(ssl) < 0) + goto client_test_exit; + } + + if (sess_resume) + { + memcpy(sess_resume->session_id, + ssl_get_session_id(ssl), SSL_SESSION_ID_SIZE); + } + + if (IS_SET_SSL_FLAG(SSL_SERVER_VERIFY_LATER) && + (ret = ssl_verify_cert(ssl))) + { + goto client_test_exit; + } + + ssl_write(ssl, (uint8_t *)"hello world\n", 13); + if (sess_resume) + { + const uint8_t *sess_id = ssl_get_session_id(ssl); + int i; + + printf(" Session-ID: "); + for (i = 0; i < SSL_SESSION_ID_SIZE; i++) + { + printf("%02X", sess_id[i]); + } + printf("\n"); + TTY_FLUSH(); + } + + ret = 0; + +client_test_exit: + ssl_free(ssl); + SOCKET_CLOSE(client_fd); + usleep(200000); /* allow openssl to say something */ + + if (sess_resume) + { + if (sess_resume->stop_server) + { + ssl_ctx_free(*ssl_ctx); + *ssl_ctx = NULL; +#ifndef WIN32 + pthread_cancel(sess_resume->server_thread); +#endif + } + else if (sess_resume->start_server) + { +#ifndef WIN32 + sess_resume->server_thread = thread; +#endif + } + } + else + { + ssl_ctx_free(*ssl_ctx); + *ssl_ctx = NULL; +#ifndef WIN32 + pthread_cancel(thread); +#endif + } + + if (ret == 0) + { + printf("SSL client test \"%s\" passed\n", test); + TTY_FLUSH(); + } + + return ret; +} + +int SSL_client_tests(void) +{ + int ret = -1; + SSL_CTX *ssl_ctx = NULL; + CLNT_SESSION_RESUME_CTX sess_resume; + memset(&sess_resume, 0, sizeof(CLNT_SESSION_RESUME_CTX)); + + sess_resume.start_server = 1; + printf("### starting client tests\n"); + + if ((ret = SSL_client_test("512 bit key", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_512.pem " + "-key ../ssl/test/axTLS.key_512.pem", &sess_resume, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + /* all the session id's should match for session resumption */ + sess_resume.start_server = 0; + if ((ret = SSL_client_test("Client session resumption #1", + &ssl_ctx, NULL, &sess_resume, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + sess_resume.do_reneg = 1; + if ((ret = SSL_client_test("Client renegotiation", + &ssl_ctx, NULL, &sess_resume, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + sess_resume.do_reneg = 0; + + sess_resume.stop_server = 1; + if ((ret = SSL_client_test("Client session resumption #2", + &ssl_ctx, NULL, &sess_resume, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + if ((ret = SSL_client_test("1024 bit key", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_1024.pem " + "-key ../ssl/test/axTLS.key_1024.pem", NULL, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + if ((ret = SSL_client_test("2048 bit key", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_2048.pem " + "-key ../ssl/test/axTLS.key_2048.pem", NULL, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + if ((ret = SSL_client_test("4096 bit key", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_4096.pem " + "-key ../ssl/test/axTLS.key_4096.pem", NULL, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + if ((ret = SSL_client_test("Server cert chaining", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_device.pem " + "-key ../ssl/test/axTLS.device_key.pem " + "-CAfile ../ssl/test/axTLS.x509_512.pem ", NULL, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL))) + goto cleanup; + + /* Check the server can verify the client */ + if ((ret = SSL_client_test("Client peer authentication", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_2048.pem " + "-key ../ssl/test/axTLS.key_2048.pem " + "-CAfile ../ssl/test/axTLS.ca_x509.pem " + "-verify 1 ", NULL, DEFAULT_CLNT_OPTION, + "../ssl/test/axTLS.key_1024", NULL, + "../ssl/test/axTLS.x509_1024.cer"))) + goto cleanup; + + /* Should get an "ERROR" from openssl (as the handshake fails as soon as + * the certificate verification fails) */ + if ((ret = SSL_client_test("Error: Expired cert (verify now)", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_bad_after.pem " + "-key ../ssl/test/axTLS.key_512.pem", NULL, + DEFAULT_CLNT_OPTION, NULL, NULL, NULL)) != + SSL_X509_ERROR(X509_VFY_ERROR_EXPIRED)) + { + printf("*** Error: %d\n", ret); + goto cleanup; + } + + printf("SSL client test \"Expired cert (verify now)\" passed\n"); + + /* There is no "ERROR" from openssl */ + if ((ret = SSL_client_test("Error: Expired cert (verify later)", + &ssl_ctx, + "-cert ../ssl/test/axTLS.x509_bad_after.pem " + "-key ../ssl/test/axTLS.key_512.pem", NULL, + DEFAULT_CLNT_OPTION|SSL_SERVER_VERIFY_LATER, NULL, + NULL, NULL)) != SSL_X509_ERROR(X509_VFY_ERROR_EXPIRED)) + { + printf("*** Error: %d\n", ret); + goto cleanup; + } + + printf("SSL client test \"Expired cert (verify later)\" passed\n"); + ret = 0; + +cleanup: + if (ret) + { + ssl_display_error(ret); + printf("Error: A client test failed\n"); + exit(1); + } + else + { + printf("All client tests passed\n"); TTY_FLUSH(); + } + + return ret; +} + +/************************************************************************** + * SSL Basic Testing (test a big packet handshake) + * + **************************************************************************/ +static uint8_t basic_buf[256*1024]; + +static void do_basic(void) +{ + int client_fd; + SSL *ssl_clnt; + SSL_CTX *ssl_clnt_ctx = ssl_ctx_new( + DEFAULT_CLNT_OPTION, SSL_DEFAULT_CLNT_SESS); + usleep(200000); /* allow server to start */ + + if ((client_fd = client_socket_init(g_port)) < 0) + goto error; + + if (ssl_obj_load(ssl_clnt_ctx, SSL_OBJ_X509_CACERT, + "../ssl/test/axTLS.ca_x509.cer", NULL)) + goto error; + + ssl_clnt = ssl_client_new(ssl_clnt_ctx, client_fd, NULL, 0); + + /* check the return status */ + if (ssl_handshake_status(ssl_clnt) < 0) + { + printf("YA YA\n"); + ssl_display_error(ssl_handshake_status(ssl_clnt)); + goto error; + } + + ssl_write(ssl_clnt, basic_buf, sizeof(basic_buf)); + ssl_free(ssl_clnt); + +error: + ssl_ctx_free(ssl_clnt_ctx); + SOCKET_CLOSE(client_fd); + + /* exit this thread */ +} + +static int SSL_basic_test(void) +{ + int server_fd, client_fd, ret = 0, size = 0, offset = 0; + SSL_CTX *ssl_svr_ctx = NULL; + struct sockaddr_in client_addr; + uint8_t *read_buf; + socklen_t clnt_len = sizeof(client_addr); + SSL *ssl_svr; +#ifndef WIN32 + pthread_t thread; +#endif + memset(basic_buf, 0xA5, sizeof(basic_buf)/2); + memset(&basic_buf[sizeof(basic_buf)/2], 0x5A, sizeof(basic_buf)/2); + + if ((server_fd = server_socket_init(&g_port)) < 0) + goto error; + + ssl_svr_ctx = ssl_ctx_new(DEFAULT_SVR_OPTION, SSL_DEFAULT_SVR_SESS); + +#ifndef WIN32 + pthread_create(&thread, NULL, + (void *(*)(void *))do_basic, NULL); + pthread_detach(thread); +#else + CreateThread(NULL, 1024, (LPTHREAD_START_ROUTINE)do_basic, NULL, 0, NULL); +#endif + + /* Wait for a client to connect */ + if ((client_fd = accept(server_fd, + (struct sockaddr *) &client_addr, &clnt_len)) < 0) + { + ret = SSL_ERROR_SOCK_SETUP_FAILURE; + goto error; + } + + /* we are ready to go */ + ssl_svr = ssl_server_new(ssl_svr_ctx, client_fd); + + do + { + while ((size = ssl_read(ssl_svr, &read_buf)) == SSL_OK); + + if (size < SSL_OK) /* got some alert or something nasty */ + { + printf("Server "); + ssl_display_error(size); + ret = size; + break; + } + else /* looks more promising */ + { + if (memcmp(read_buf, &basic_buf[offset], size) != 0) + { + ret = SSL_NOT_OK; + break; + } + } + + offset += size; + } while (offset < sizeof(basic_buf)); + + printf(ret == SSL_OK && offset == sizeof(basic_buf) ? + "SSL basic test passed\n" : + "SSL basic test failed\n"); + TTY_FLUSH(); + + ssl_free(ssl_svr); + SOCKET_CLOSE(server_fd); + SOCKET_CLOSE(client_fd); + +error: + ssl_ctx_free(ssl_svr_ctx); + return ret; +} + +#if !defined(WIN32) && defined(CONFIG_SSL_CTX_MUTEXING) +/************************************************************************** + * Multi-Threading Tests + * + **************************************************************************/ +#define NUM_THREADS 100 + +typedef struct +{ + SSL_CTX *ssl_clnt_ctx; + int port; + int thread_id; +} multi_t; + +void do_multi_clnt(multi_t *multi_data) +{ + int res = 1, client_fd, i; + SSL *ssl = NULL; + char tmp[5]; + + if ((client_fd = client_socket_init(multi_data->port)) < 0) + goto client_test_exit; + + sleep(1); + ssl = ssl_client_new(multi_data->ssl_clnt_ctx, client_fd, NULL, 0); + + if ((res = ssl_handshake_status(ssl))) + { + printf("Client "); + ssl_display_error(res); + goto client_test_exit; + } + + sprintf(tmp, "%d\n", multi_data->thread_id); + for (i = 0; i < 10; i++) + ssl_write(ssl, (uint8_t *)tmp, strlen(tmp)+1); + +client_test_exit: + ssl_free(ssl); + SOCKET_CLOSE(client_fd); + free(multi_data); +} + +void do_multi_svr(SSL *ssl) +{ + uint8_t *read_buf; + int *res_ptr = malloc(sizeof(int)); + int res; + + for (;;) + { + res = ssl_read(ssl, &read_buf); + + /* kill the client */ + if (res != SSL_OK) + { + if (res == SSL_ERROR_CONN_LOST) + { + SOCKET_CLOSE(ssl->client_fd); + ssl_free(ssl); + break; + } + else if (res > 0) + { + /* do nothing */ + } + else /* some problem */ + { + printf("Server "); + ssl_display_error(res); + goto error; + } + } + } + + res = SSL_OK; +error: + *res_ptr = res; + pthread_exit(res_ptr); +} + +int multi_thread_test(void) +{ + int server_fd = -1; + SSL_CTX *ssl_server_ctx; + SSL_CTX *ssl_clnt_ctx; + pthread_t clnt_threads[NUM_THREADS]; + pthread_t svr_threads[NUM_THREADS]; + int i, res = 0; + struct sockaddr_in client_addr; + socklen_t clnt_len = sizeof(client_addr); + + printf("Do multi-threading test (takes a minute)\n"); + + ssl_server_ctx = ssl_ctx_new(DEFAULT_SVR_OPTION, SSL_DEFAULT_SVR_SESS); + ssl_clnt_ctx = ssl_ctx_new(DEFAULT_CLNT_OPTION, SSL_DEFAULT_CLNT_SESS); + + if (ssl_obj_load(ssl_clnt_ctx, SSL_OBJ_X509_CACERT, + "../ssl/test/axTLS.ca_x509.cer", NULL)) + goto error; + + if ((server_fd = server_socket_init(&g_port)) < 0) + goto error; + + for (i = 0; i < NUM_THREADS; i++) + { + multi_t *multi_data = (multi_t *)malloc(sizeof(multi_t)); + multi_data->ssl_clnt_ctx = ssl_clnt_ctx; + multi_data->port = g_port; + multi_data->thread_id = i+1; + pthread_create(&clnt_threads[i], NULL, + (void *(*)(void *))do_multi_clnt, (void *)multi_data); + pthread_detach(clnt_threads[i]); + } + + for (i = 0; i < NUM_THREADS; i++) + { + SSL *ssl_svr; + int client_fd = accept(server_fd, + (struct sockaddr *)&client_addr, &clnt_len); + + if (client_fd < 0) + goto error; + + ssl_svr = ssl_server_new(ssl_server_ctx, client_fd); + + pthread_create(&svr_threads[i], NULL, + (void *(*)(void *))do_multi_svr, (void *)ssl_svr); + } + + /* make sure we've run all of the threads */ + for (i = 0; i < NUM_THREADS; i++) + { + void *thread_res; + pthread_join(svr_threads[i], &thread_res); + + if (*((int *)thread_res) != 0) + res = 1; + + free(thread_res); + } + + if (res) + goto error; + + printf("Multi-thread test passed (%d)\n", NUM_THREADS); +error: + ssl_ctx_free(ssl_server_ctx); + ssl_ctx_free(ssl_clnt_ctx); + SOCKET_CLOSE(server_fd); + return res; +} +#endif /* !defined(WIN32) && defined(CONFIG_SSL_CTX_MUTEXING) */ + +/************************************************************************** + * Header issue + * + **************************************************************************/ +static void do_header_issue(void) +{ + char axtls_buf[2048]; +#ifndef WIN32 + pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); +#endif + sprintf(axtls_buf, "./axssl s_client -connect localhost:%d", g_port); + system(axtls_buf); +} + +static int header_issue(void) +{ + FILE *f = fopen("../ssl/test/header_issue.dat", "r"); + int server_fd = -1, client_fd = -1, ret = 1; + uint8_t buf[2048]; + int size = 0; + struct sockaddr_in client_addr; + socklen_t clnt_len = sizeof(client_addr); +#ifndef WIN32 + pthread_t thread; +#endif + + if (f == NULL || (server_fd = server_socket_init(&g_port)) < 0) + goto error; + +#ifndef WIN32 + pthread_create(&thread, NULL, + (void *(*)(void *))do_header_issue, NULL); + pthread_detach(thread); +#else + CreateThread(NULL, 1024, (LPTHREAD_START_ROUTINE)do_header_issue, + NULL, 0, NULL); +#endif + if ((client_fd = accept(server_fd, + (struct sockaddr *) &client_addr, &clnt_len)) < 0) + { + ret = SSL_ERROR_SOCK_SETUP_FAILURE; + goto error; + } + + size = fread(buf, 1, sizeof(buf), f); + SOCKET_WRITE(client_fd, buf, size); + usleep(200000); + + ret = 0; +error: + fclose(f); + SOCKET_CLOSE(client_fd); + SOCKET_CLOSE(server_fd); + TTY_FLUSH(); + system("killall axssl"); + return ret; +} + +/************************************************************************** + * main() + * + **************************************************************************/ +int main(int argc, char *argv[]) +{ + int ret = 1; + BI_CTX *bi_ctx; + int fd; + +#ifdef WIN32 + WSADATA wsaData; + WORD wVersionRequested = MAKEWORD(2, 2); + WSAStartup(wVersionRequested, &wsaData); + fd = _open("test_result.txt", O_WRONLY|O_TEMPORARY|O_CREAT, _S_IWRITE); + dup2(fd, 2); /* write stderr to this file */ +#else + fd = open("/dev/null", O_WRONLY); /* write stderr to /dev/null */ + signal(SIGPIPE, SIG_IGN); /* ignore pipe errors */ + dup2(fd, 2); +#endif + + /* can't do testing in this mode */ +#if defined CONFIG_SSL_GENERATE_X509_CERT + printf("Error: Must compile with default key/certificates\n"); + exit(1); +#endif + + bi_ctx = bi_initialize(); + + if (AES_test(bi_ctx)) + { + printf("AES tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (RC4_test(bi_ctx)) + { + printf("RC4 tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (MD5_test(bi_ctx)) + { + printf("MD5 tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (SHA1_test(bi_ctx)) + { + printf("SHA1 tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (HMAC_test(bi_ctx)) + { + printf("HMAC tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (BIGINT_test(bi_ctx)) + { + printf("BigInt tests failed!\n"); + goto cleanup; + } + TTY_FLUSH(); + + bi_terminate(bi_ctx); + + if (RSA_test()) + { + printf("RSA tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + + if (cert_tests()) + { + printf("CERT tests failed\n"); + goto cleanup; + } + TTY_FLUSH(); + +#if !defined(WIN32) && defined(CONFIG_SSL_CTX_MUTEXING) + if (multi_thread_test()) + goto cleanup; +#endif + + if (SSL_basic_test()) + goto cleanup; + + system("sh ../ssl/test/killopenssl.sh"); + + if (SSL_client_tests()) + goto cleanup; + + system("sh ../ssl/test/killopenssl.sh"); + + if (SSL_server_tests()) + goto cleanup; + + system("sh ../ssl/test/killopenssl.sh"); + + if (header_issue()) + { + printf("Header tests failed\n"); TTY_FLUSH(); + goto cleanup; + } + + ret = 0; /* all ok */ + printf("**** ALL TESTS PASSED ****\n"); TTY_FLUSH(); +cleanup: + + if (ret) + printf("Error: Some tests failed!\n"); + + close(fd); + return ret; +} diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/test_axssl.sh b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/test_axssl.sh new file mode 100755 index 0000000..acf11a6 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/test_axssl.sh @@ -0,0 +1,163 @@ +#!/bin/sh + +# +# Copyright (c) 2007, Cameron Rich +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the axTLS project nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# +# Test the various axssl bindings. To run it, got to the _install directory +# and run this script from there. +# + +if grep "CONFIG_PLATFORM_WIN32=y" "../config/.config" > /dev/null; then + JAVA_EXE="$JAVA_HOME/bin/java.exe" + PERL_BIN="/cygdrive/c/Perl/bin/perl" + KILL_AXSSL="kill %1" + KILL_CSHARP="kill %1" + KILL_PERL="kill %1" + KILL_JAVA="kill %1" + KILL_LUA="kill %1" +else + if grep "CONFIG_PLATFORM_CYGWIN=y" "../config/.config" > /dev/null; then + # no .net or java on cygwin + PERL_BIN=/usr/bin/perl + KILL_AXSSL="killall axssl" + KILL_PERL="killall /usr/bin/perl" + KILL_LUA="killall /usr/local/bin/lua" + else # Linux + JAVA_EXE=/usr/java/default/bin/java + PERL_BIN=/usr/bin/perl + KILL_AXSSL="killall axssl" + KILL_CSHARP="killall mono" + KILL_PERL="killall /usr/bin/perl" + RUN_CSHARP="mono" + KILL_JAVA="killall $JAVA_EXE" + KILL_LUA="killall /usr/local/bin/lua" + fi +fi + +BASE=.. +SERVER_ARGS="s_server -accept 15001 -verify -CAfile $BASE/ssl/test/axTLS.ca_x509.cer" +CLIENT_ARGS="s_client -reconnect -connect localhost:15001 -verify -CAfile $BASE/ssl/test/axTLS.ca_x509.cer -key $BASE/ssl/test/axTLS.key_1024 -cert $BASE/ssl/test/axTLS.x509_1024.cer" + +# check pem arguments +SERVER_PEM_ARGS="s_server -accept 15001 -pass abcd -key $BASE/ssl/test/axTLS.key_aes128.pem -cert $BASE/ssl/test/axTLS.x509_aes128.pem" +CLIENT_PEM_ARGS="s_client -connect localhost:15001 -CAfile $BASE/ssl/test/axTLS.ca_x509.pem -key $BASE/ssl/test/axTLS.key_1024.pem -cert $BASE/ssl/test/axTLS.x509_1024.pem" + +export LD_LIBRARY_PATH=.:`perl -e 'use Config; print $Config{archlib};'`/CORE + +if [ -x ./axssl ]; then +echo "############################# C SAMPLE ###########################" +./axssl $SERVER_ARGS & +echo "C Test passed" | ./axssl $CLIENT_ARGS +$KILL_AXSSL +sleep 1 + +./axssl $SERVER_PEM_ARGS & +echo "C Test passed" | ./axssl $CLIENT_PEM_ARGS +$KILL_AXSSL +sleep 1 +echo "### C tests complete" +fi + +if [ -f ./axtls.jar ]; then +echo "########################## JAVA SAMPLE ###########################" +"$JAVA_EXE" -jar ./axtls.jar $SERVER_ARGS & +echo "Java Test passed" | "$JAVA_EXE" -jar ./axtls.jar $CLIENT_ARGS +$KILL_JAVA +sleep 1 + +"$JAVA_EXE" -jar ./axtls.jar $SERVER_PEM_ARGS & +echo "Java Test passed" | "$JAVA_EXE" -jar ./axtls.jar $CLIENT_PEM_ARGS +$KILL_JAVA +sleep 1 + +echo "### Java tests complete" +fi + +if [ -x ./axssl.csharp.exe ]; then +echo "############################ C# SAMPLE ###########################" +$RUN_CSHARP ./axssl.csharp.exe $SERVER_ARGS & +echo "C# Test passed" | $RUN_CSHARP ./axssl.csharp.exe $CLIENT_ARGS +$KILL_CSHARP +sleep 1 + +$RUN_CSHARP ./axssl.csharp.exe $SERVER_PEM_ARGS & +echo "C# Test passed" | $RUN_CSHARP ./axssl.csharp.exe $CLIENT_PEM_ARGS +$KILL_CSHARP +sleep 1 + +echo "### C# tests complete" +fi + +if [ -x ./axssl.vbnet.exe ]; then +echo "######################## VB.NET SAMPLE ###########################" +echo $SERVER_ARGS +echo $CLIENT_ARGS +./axssl.vbnet $SERVER_ARGS & +echo "VB.NET Test passed" | ./axssl.vbnet.exe $CLIENT_ARGS +kill %1 +sleep 1 + +./axssl.vbnet $SERVER_PEM_ARGS & +echo "VB.NET Test passed" | ./axssl.vbnet.exe $CLIENT_PEM_ARGS +kill %1 +sleep 1 +echo "### VB.NET tests complete" +fi + +if [ -f ./axssl.pl ]; then +echo "########################## PERL SAMPLE ###########################" +"$PERL_BIN" ./axssl.pl $SERVER_ARGS & +echo "Perl Test passed" | "$PERL_BIN" ./axssl.pl $CLIENT_ARGS +$KILL_PERL +sleep 1 + +"$PERL_BIN" ./axssl.pl $SERVER_PEM_ARGS & +echo "Perl Test passed" | "$PERL_BIN" ./axssl.pl $CLIENT_PEM_ARGS +$KILL_PERL +sleep 1 +echo "### Perl tests complete" +fi + +if [ -f ./axssl.lua ]; then +echo "########################## LUA SAMPLE ###########################" +./axssl.lua $SERVER_ARGS & +echo "Lua Test passed" | ./axssl.lua $CLIENT_ARGS +$KILL_LUA +sleep 1 + +./axssl.lua $SERVER_PEM_ARGS & +echo "Lua Test passed" | ./axssl.lua $CLIENT_PEM_ARGS +$KILL_LUA +sleep 1 +echo "### Lua tests complete" +fi + +echo "########################## ALL TESTS COMPLETE ###########################" diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/thawte.x509_ca b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/test/thawte.x509_ca new file mode 100644 index 0000000000000000000000000000000000000000..59b1059f84086fa580dc1001303c4db4e070e572 GIT binary patch literal 811 zcmXqLVpcb3Vw$jknTe5!iILHOmyJ`a&71aK>;=YaCsSi1!zDAbtnTZF zqUYUebWG~Ec<0FydhNn{8R@BF?(Zc$Os#^xXlJqYTkF3Hd%V7_cb@q7d0SFTnS9@$ z=3Jy0cw_d3^b5OqC$WhXUzvP*x)#Hn7(bppzeI!nd~(UVCFqsMF<)Qz@y}IOZN=N% zf+J3JvhHmb+)-@5ioN%XlkanfxiaQV%!~|-i-ipY4fugEEGx{&_@9N=wue#B(wSB};{CmAjN`|kTB z=H&c*ca+=jgU1BrKYDG@a65VUh*RyJU#lbYu5J(P5PZC(RWiHDX9`CKd5-@#z5p&(TMr~SNx>{S1)iXw~p883_fotvm7>@WOHLUXNt;H*b_ z|IQe^xO{Hv`^QNljGg@tW>o80?|dhoUHjsH8z1xKWBTV_tO(!D#LURRi0nLIbTb3p zWwp-Y-R7SHR;@y@?^|{x`0o6ab&@xk`Ta5fEloQwoG`H15dW%Sy}DTBd%Xlc@q%Y{ zucp0BS^d~*aFB_*;n@8JsUPeY%RtAH{ z9z$*ePB!LH7B*p~&|pJx15pr%OPDV#wJ0+>?aaMVZA(iFv7pk_O@+AubVt#ESf!{1BgDg@B^`tkmQZ zLs0`^kQBEFkD-B)i9%9li9&X2rJZKq+vngJKw%B24vwDh#|p1}Oj&s-uBD8&^V`2V>h0S4MVG149FSHV$nz zVA5n~ViZ#b8D9)EA5X{|$b!sLWf3zFf$3ysgtM3oOkiwAMivbNH3JnG-+-}A0_yzy zjW}s*wZ@|vRs?EpDB*h}q z|Map{+nV0K?8E09vaWbY=u}JU8K^@10Q5pmetJHN9r|U(U@?$MsF{)(m>{%MIgMNe zF3gcp;g*^HXwj|JH%sakW^XY%?K}Ip+slNyvt8M1?Uz`5cz$g&-`l2-@0b62`(fXd z*3a*ARU9g<^p4fEd +#include +#include +#include +#include "ssl.h" + +/* The session expiry time */ +#define SSL_EXPIRY_TIME (CONFIG_SSL_EXPIRY_TIME*3600) + +static const uint8_t g_hello_request[] = { HS_HELLO_REQUEST, 0, 0, 0 }; +static const uint8_t g_chg_cipher_spec_pkt[] = { 1 }; +static const char * server_finished = "server finished"; +static const char * client_finished = "client finished"; + +static int do_handshake(SSL *ssl, uint8_t *buf, int read_len); +static void set_key_block(SSL *ssl, int is_write); +static int verify_digest(SSL *ssl, int mode, const uint8_t *buf, int read_len); +static void *crypt_new(SSL *ssl, uint8_t *key, uint8_t *iv, int is_decrypt); +static int send_raw_packet(SSL *ssl, uint8_t protocol); + +/** + * The server will pick the cipher based on the order that the order that the + * ciphers are listed. This order is defined at compile time. + */ +#ifdef CONFIG_SSL_SKELETON_MODE +const uint8_t ssl_prot_prefs[NUM_PROTOCOLS] = +{ SSL_RC4_128_SHA }; +#else +static void session_free(SSL_SESSION *ssl_sessions[], int sess_index); + +const uint8_t ssl_prot_prefs[NUM_PROTOCOLS] = +#ifdef CONFIG_SSL_PROT_LOW /* low security, fast speed */ +{ SSL_RC4_128_SHA, SSL_AES128_SHA, SSL_AES256_SHA, SSL_RC4_128_MD5 }; +#elif CONFIG_SSL_PROT_MEDIUM /* medium security, medium speed */ +{ SSL_AES128_SHA, SSL_AES256_SHA, SSL_RC4_128_SHA, SSL_RC4_128_MD5 }; +#else /* CONFIG_SSL_PROT_HIGH */ /* high security, low speed */ +{ SSL_AES256_SHA, SSL_AES128_SHA, SSL_RC4_128_SHA, SSL_RC4_128_MD5 }; +#endif +#endif /* CONFIG_SSL_SKELETON_MODE */ + +/** + * The cipher map containing all the essentials for each cipher. + */ +#ifdef CONFIG_SSL_SKELETON_MODE +static const cipher_info_t cipher_info[NUM_PROTOCOLS] = +{ + { /* RC4-SHA */ + SSL_RC4_128_SHA, /* RC4-SHA */ + 16, /* key size */ + 0, /* iv size */ + 2*(SHA1_SIZE+16), /* key block size */ + 0, /* no padding */ + SHA1_SIZE, /* digest size */ + hmac_sha1, /* hmac algorithm */ + (crypt_func)RC4_crypt, /* encrypt */ + (crypt_func)RC4_crypt /* decrypt */ + }, +}; +#else +static const cipher_info_t cipher_info[NUM_PROTOCOLS] = +{ + { /* AES128-SHA */ + SSL_AES128_SHA, /* AES128-SHA */ + 16, /* key size */ + 16, /* iv size */ + 2*(SHA1_SIZE+16+16), /* key block size */ + 16, /* block padding size */ + SHA1_SIZE, /* digest size */ + hmac_sha1, /* hmac algorithm */ + (crypt_func)AES_cbc_encrypt, /* encrypt */ + (crypt_func)AES_cbc_decrypt /* decrypt */ + }, + { /* AES256-SHA */ + SSL_AES256_SHA, /* AES256-SHA */ + 32, /* key size */ + 16, /* iv size */ + 2*(SHA1_SIZE+32+16), /* key block size */ + 16, /* block padding size */ + SHA1_SIZE, /* digest size */ + hmac_sha1, /* hmac algorithm */ + (crypt_func)AES_cbc_encrypt, /* encrypt */ + (crypt_func)AES_cbc_decrypt /* decrypt */ + }, + { /* RC4-SHA */ + SSL_RC4_128_SHA, /* RC4-SHA */ + 16, /* key size */ + 0, /* iv size */ + 2*(SHA1_SIZE+16), /* key block size */ + 0, /* no padding */ + SHA1_SIZE, /* digest size */ + hmac_sha1, /* hmac algorithm */ + (crypt_func)RC4_crypt, /* encrypt */ + (crypt_func)RC4_crypt /* decrypt */ + }, + /* + * This protocol is from SSLv2 days and is unlikely to be used - but was + * useful for testing different possible digest algorithms. + */ + { /* RC4-MD5 */ + SSL_RC4_128_MD5, /* RC4-MD5 */ + 16, /* key size */ + 0, /* iv size */ + 2*(MD5_SIZE+16), /* key block size */ + 0, /* no padding */ + MD5_SIZE, /* digest size */ + hmac_md5, /* hmac algorithm */ + (crypt_func)RC4_crypt, /* encrypt */ + (crypt_func)RC4_crypt /* decrypt */ + }, +}; +#endif + +static void prf(const uint8_t *sec, int sec_len, uint8_t *seed, int seed_len, + uint8_t *out, int olen); +static const cipher_info_t *get_cipher_info(uint8_t cipher); +static void increment_read_sequence(SSL *ssl); +static void increment_write_sequence(SSL *ssl); +static void add_hmac_digest(SSL *ssl, int snd, uint8_t *hmac_header, + const uint8_t *buf, int buf_len, uint8_t *hmac_buf); + +/* win32 VC6.0 doesn't have variadic macros */ +#if defined(WIN32) && !defined(CONFIG_SSL_FULL_MODE) +void DISPLAY_BYTES(SSL *ssl, const char *format, + const uint8_t *data, int size, ...) {} +#endif + +/** + * Establish a new client/server context. + */ +EXP_FUNC SSL_CTX *STDCALL ssl_ctx_new(uint32_t options, int num_sessions) +{ + SSL_CTX *ssl_ctx = (SSL_CTX *)calloc(1, sizeof (SSL_CTX)); + ssl_ctx->options = options; + + if (load_key_certs(ssl_ctx) < 0) + { + free(ssl_ctx); /* can't load our key/certificate pair, so die */ + return NULL; + } + +#ifndef CONFIG_SSL_SKELETON_MODE + ssl_ctx->num_sessions = num_sessions; +#endif + + SSL_CTX_MUTEX_INIT(ssl_ctx->mutex); + +#ifndef CONFIG_SSL_SKELETON_MODE + if (num_sessions) + { + ssl_ctx->ssl_sessions = (SSL_SESSION **) + calloc(1, num_sessions*sizeof(SSL_SESSION *)); + } +#endif + + return ssl_ctx; +} + +/* + * Remove a client/server context. + */ +EXP_FUNC void STDCALL ssl_ctx_free(SSL_CTX *ssl_ctx) +{ + SSL *ssl; + int i; + + if (ssl_ctx == NULL) + return; + + ssl = ssl_ctx->head; + + /* clear out all the ssl entries */ + while (ssl) + { + SSL *next = ssl->next; + ssl_free(ssl); + ssl = next; + } + +#ifndef CONFIG_SSL_SKELETON_MODE + /* clear out all the sessions */ + for (i = 0; i < ssl_ctx->num_sessions; i++) + session_free(ssl_ctx->ssl_sessions, i); + + free(ssl_ctx->ssl_sessions); +#endif + + i = 0; + while (i < CONFIG_SSL_MAX_CERTS && ssl_ctx->certs[i].buf) + { + free(ssl_ctx->certs[i].buf); + ssl_ctx->certs[i++].buf = NULL; + } + +#ifdef CONFIG_SSL_CERT_VERIFICATION + remove_ca_certs(ssl_ctx->ca_cert_ctx); +#endif + ssl_ctx->chain_length = 0; + SSL_CTX_MUTEX_DESTROY(ssl_ctx->mutex); + RSA_free(ssl_ctx->rsa_ctx); + RNG_terminate(); + free(ssl_ctx); +} + +/* + * Free any used resources used by this connection. + */ +EXP_FUNC void STDCALL ssl_free(SSL *ssl) +{ + SSL_CTX *ssl_ctx; + + if (ssl == NULL) /* just ignore null pointers */ + return; + + /* spec says we must notify when we are dying */ + send_alert(ssl, SSL_ALERT_CLOSE_NOTIFY); + + ssl_ctx = ssl->ssl_ctx; + + SSL_CTX_LOCK(ssl_ctx->mutex); + + /* adjust the server SSL list */ + if (ssl->prev) + ssl->prev->next = ssl->next; + else + ssl_ctx->head = ssl->next; + + if (ssl->next) + ssl->next->prev = ssl->prev; + else + ssl_ctx->tail = ssl->prev; + + SSL_CTX_UNLOCK(ssl_ctx->mutex); + + /* may already be free - but be sure */ + free(ssl->encrypt_ctx); + free(ssl->decrypt_ctx); + disposable_free(ssl); +#ifdef CONFIG_SSL_CERT_VERIFICATION + x509_free(ssl->x509_ctx); +#endif + + free(ssl); +} + +/* + * Read the SSL connection and send any alerts for various errors. + */ +EXP_FUNC int STDCALL ssl_read(SSL *ssl, uint8_t **in_data) +{ + int ret = basic_read(ssl, in_data); + + /* check for return code so we can send an alert */ + if (ret < SSL_OK) + { + if (ret != SSL_ERROR_CONN_LOST) + { + send_alert(ssl, ret); +#ifndef CONFIG_SSL_SKELETON_MODE + /* something nasty happened, so get rid of this session */ + kill_ssl_session(ssl->ssl_ctx->ssl_sessions, ssl); +#endif + } + } + + return ret; +} + +/* + * Write application data to the client + */ +EXP_FUNC int STDCALL ssl_write(SSL *ssl, const uint8_t *out_data, int out_len) +{ + int n = out_len, nw, i, tot = 0; + + /* maximum size of a TLS packet is around 16kB, so fragment */ + do + { + nw = n; + + if (nw > RT_MAX_PLAIN_LENGTH) /* fragment if necessary */ + nw = RT_MAX_PLAIN_LENGTH; + + if ((i = send_packet(ssl, PT_APP_PROTOCOL_DATA, + &out_data[tot], nw)) <= 0) + { + out_len = i; /* an error */ + break; + } + + tot += i; + n -= i; + } while (n > 0); + + return out_len; +} + +/** + * Add a certificate to the certificate chain. + */ +int add_cert(SSL_CTX *ssl_ctx, const uint8_t *buf, int len) +{ + int ret = SSL_ERROR_NO_CERT_DEFINED, i = 0; + SSL_CERT *ssl_cert; + X509_CTX *cert = NULL; + int offset; + + while (ssl_ctx->certs[i].buf && i < CONFIG_SSL_MAX_CERTS) + i++; + + if (i == CONFIG_SSL_MAX_CERTS) /* too many certs */ + { +#ifdef CONFIG_SSL_FULL_MODE + printf("Error: maximum number of certs added - change of " + "compile-time configuration required\n"); +#endif + goto error; + } + + if ((ret = x509_new(buf, &offset, &cert))) + goto error; + +#if defined (CONFIG_SSL_FULL_MODE) + if (ssl_ctx->options & SSL_DISPLAY_CERTS) + x509_print(cert, NULL); +#endif + + ssl_cert = &ssl_ctx->certs[i]; + ssl_cert->size = len; + ssl_cert->buf = (uint8_t *)malloc(len); + memcpy(ssl_cert->buf, buf, len); + ssl_ctx->chain_length++; + len -= offset; + ret = SSL_OK; /* ok so far */ + + /* recurse? */ + if (len > 0) + { + ret = add_cert(ssl_ctx, &buf[offset], len); + } + +error: + x509_free(cert); /* don't need anymore */ + return ret; +} + +#ifdef CONFIG_SSL_CERT_VERIFICATION +/** + * Add a certificate authority. + */ +int add_cert_auth(SSL_CTX *ssl_ctx, const uint8_t *buf, int len) +{ + int ret = SSL_ERROR_NO_CERT_DEFINED; + int i = 0; + int offset; + CA_CERT_CTX *ca_cert_ctx; + + if (ssl_ctx->ca_cert_ctx == NULL) + ssl_ctx->ca_cert_ctx = (CA_CERT_CTX *)calloc(1, sizeof(CA_CERT_CTX)); + + ca_cert_ctx = ssl_ctx->ca_cert_ctx; + + while (i < CONFIG_X509_MAX_CA_CERTS && ca_cert_ctx->cert[i]) + i++; + + if (i > CONFIG_X509_MAX_CA_CERTS) + { +#ifdef CONFIG_SSL_FULL_MODE + printf("Error: maximum number of CA certs added - change of " + "compile-time configuration required\n"); +#endif + goto error; + } + + if ((ret = x509_new(buf, &offset, &ca_cert_ctx->cert[i]))) + goto error; + + len -= offset; + ret = SSL_OK; /* ok so far */ + + /* recurse? */ + if (len > 0) + ret = add_cert_auth(ssl_ctx, &buf[offset], len); + +error: + return ret; +} + +/* + * Retrieve an X.509 distinguished name component + */ +EXP_FUNC const char * STDCALL ssl_get_cert_dn(const SSL *ssl, int component) +{ + if (ssl->x509_ctx == NULL) + return NULL; + + switch (component) + { + case SSL_X509_CERT_COMMON_NAME: + return ssl->x509_ctx->cert_dn[X509_COMMON_NAME]; + + case SSL_X509_CERT_ORGANIZATION: + return ssl->x509_ctx->cert_dn[X509_ORGANIZATION]; + + case SSL_X509_CERT_ORGANIZATIONAL_NAME: + return ssl->x509_ctx->cert_dn[X509_ORGANIZATIONAL_UNIT]; + + case SSL_X509_CA_CERT_COMMON_NAME: + return ssl->x509_ctx->ca_cert_dn[X509_COMMON_NAME]; + + case SSL_X509_CA_CERT_ORGANIZATION: + return ssl->x509_ctx->ca_cert_dn[X509_ORGANIZATION]; + + case SSL_X509_CA_CERT_ORGANIZATIONAL_NAME: + return ssl->x509_ctx->ca_cert_dn[X509_ORGANIZATIONAL_UNIT]; + + default: + return NULL; + } +} + +#endif + +/* + * Find an ssl object based on the client's file descriptor. + */ +EXP_FUNC SSL * STDCALL ssl_find(SSL_CTX *ssl_ctx, int client_fd) +{ + SSL *ssl; + + SSL_CTX_LOCK(ssl_ctx->mutex); + ssl = ssl_ctx->head; + + /* search through all the ssl entries */ + while (ssl) + { + if (ssl->client_fd == client_fd) + { + SSL_CTX_UNLOCK(ssl_ctx->mutex); + return ssl; + } + + ssl = ssl->next; + } + + SSL_CTX_UNLOCK(ssl_ctx->mutex); + return NULL; +} + +/* + * Force the client to perform its handshake again. + */ +EXP_FUNC int STDCALL ssl_renegotiate(SSL *ssl) +{ + int ret = SSL_OK; + + disposable_new(ssl); +#ifdef CONFIG_SSL_ENABLE_CLIENT + if (IS_SET_SSL_FLAG(SSL_IS_CLIENT)) + { + ret = do_client_connect(ssl); + } + else +#endif + { + send_packet(ssl, PT_HANDSHAKE_PROTOCOL, + g_hello_request, sizeof(g_hello_request)); + SET_SSL_FLAG(SSL_NEED_RECORD); + } + + return ret; +} + +/** + * @brief Get what we need for key info. + * @param cipher [in] The cipher information we are after + * @param key_size [out] The key size for the cipher + * @param iv_size [out] The iv size for the cipher + * @return The amount of key information we need. + */ +static const cipher_info_t *get_cipher_info(uint8_t cipher) +{ + int i; + + for (i = 0; i < NUM_PROTOCOLS; i++) + { + if (cipher_info[i].cipher == cipher) + { + return &cipher_info[i]; + } + } + + return NULL; /* error */ +} + +/* + * Get a new ssl context for a new connection. + */ +SSL *ssl_new(SSL_CTX *ssl_ctx, int client_fd) +{ + SSL *ssl = (SSL *)calloc(1, sizeof(SSL)); + ssl->ssl_ctx = ssl_ctx; + ssl->need_bytes = SSL_RECORD_SIZE; /* need a record */ + ssl->client_fd = client_fd; + ssl->flag = SSL_NEED_RECORD; + ssl->bm_data = ssl->bm_all_data+BM_RECORD_OFFSET; /* space at the start */ + ssl->hs_status = SSL_NOT_OK; /* not connected */ +#ifdef CONFIG_ENABLE_VERIFICATION + ssl->ca_cert_ctx = ssl_ctx->ca_cert_ctx; +#endif + disposable_new(ssl); + + /* a bit hacky but saves a few bytes of memory */ + ssl->flag |= ssl_ctx->options; + SSL_CTX_LOCK(ssl_ctx->mutex); + + if (ssl_ctx->head == NULL) + { + ssl_ctx->head = ssl; + ssl_ctx->tail = ssl; + } + else + { + ssl->prev = ssl_ctx->tail; + ssl_ctx->tail->next = ssl; + ssl_ctx->tail = ssl; + } + + SSL_CTX_UNLOCK(ssl_ctx->mutex); + return ssl; +} + +/* + * Add a private key to a context. + */ +int add_private_key(SSL_CTX *ssl_ctx, SSLObjLoader *ssl_obj) +{ + int ret = SSL_OK; + + /* get the private key details */ + if (asn1_get_private_key(ssl_obj->buf, ssl_obj->len, &ssl_ctx->rsa_ctx)) + { + ret = SSL_ERROR_INVALID_KEY; + goto error; + } + +error: + return ret; +} + +/** + * Increment the read sequence number (as a 64 bit endian indepenent #) + */ +static void increment_read_sequence(SSL *ssl) +{ + int i; + + for (i = 7; i >= 0; i--) + { + if (++ssl->read_sequence[i]) + break; + } +} + +/** + * Increment the read sequence number (as a 64 bit endian indepenent #) + */ +static void increment_write_sequence(SSL *ssl) +{ + int i; + + for (i = 7; i >= 0; i--) + { + if (++ssl->write_sequence[i]) + break; + } +} + +/** + * Work out the HMAC digest in a packet. + */ +static void add_hmac_digest(SSL *ssl, int mode, uint8_t *hmac_header, + const uint8_t *buf, int buf_len, uint8_t *hmac_buf) +{ + int hmac_len = buf_len + 8 + SSL_RECORD_SIZE; + uint8_t *t_buf = (uint8_t *)alloca(hmac_len+10); + + memcpy(t_buf, (mode == SSL_SERVER_WRITE || mode == SSL_CLIENT_WRITE) ? + ssl->write_sequence : ssl->read_sequence, 8); + memcpy(&t_buf[8], hmac_header, SSL_RECORD_SIZE); + memcpy(&t_buf[8+SSL_RECORD_SIZE], buf, buf_len); + + ssl->cipher_info->hmac(t_buf, hmac_len, + (mode == SSL_SERVER_WRITE || mode == SSL_CLIENT_READ) ? + ssl->server_mac : ssl->client_mac, + ssl->cipher_info->digest_size, hmac_buf); + +#if 0 + print_blob("record", ssl->hmac_tx, SSL_RECORD_SIZE); + print_blob("buf", buf, buf_len); + if (mode == SSL_SERVER_WRITE || mode == SSL_CLIENT_WRITE) + { + print_blob("write seq", ssl->write_sequence, 8); + } + else + { + print_blob("read seq", ssl->read_sequence, 8); + } + + if (mode == SSL_SERVER_WRITE || mode == SSL_CLIENT_READ) + { + print_blob("server mac", + ssl->server_mac, ssl->cipher_info->digest_size); + } + else + { + print_blob("client mac", + ssl->client_mac, ssl->cipher_info->digest_size); + } + print_blob("hmac", hmac_buf, SHA1_SIZE); +#endif +} + +/** + * Verify that the digest of a packet is correct. + */ +static int verify_digest(SSL *ssl, int mode, const uint8_t *buf, int read_len) +{ + uint8_t hmac_buf[SHA1_SIZE]; + int hmac_offset; + + if (ssl->cipher_info->padding_size) + { + hmac_offset = read_len-buf[read_len-1]-ssl->cipher_info->digest_size-1; + } + else + { + hmac_offset = read_len - ssl->cipher_info->digest_size; + } + + /* sanity check the offset */ + if (hmac_offset < 0) + { + return SSL_ERROR_INVALID_HMAC; + } + + ssl->hmac_header[3] = hmac_offset >> 8; /* insert size */ + ssl->hmac_header[4] = hmac_offset & 0xff; + add_hmac_digest(ssl, mode, ssl->hmac_header, buf, hmac_offset, hmac_buf); + + if (memcmp(hmac_buf, &buf[hmac_offset], ssl->cipher_info->digest_size)) + { + return SSL_ERROR_INVALID_HMAC; + } + + return hmac_offset; +} + +/** + * Add a packet to the end of our sent and received packets, so that we may use + * it to calculate the hash at the end. + */ +void add_packet(SSL *ssl, const uint8_t *pkt, int len) +{ + MD5_Update(&ssl->dc->md5_ctx, pkt, len); + SHA1_Update(&ssl->dc->sha1_ctx, pkt, len); +} + +/** + * Work out the MD5 PRF. + */ +static void p_hash_md5(const uint8_t *sec, int sec_len, + uint8_t *seed, int seed_len, uint8_t *out, int olen) +{ + uint8_t a1[128]; + + /* A(1) */ + hmac_md5(seed, seed_len, sec, sec_len, a1); + memcpy(&a1[MD5_SIZE], seed, seed_len); + hmac_md5(a1, MD5_SIZE+seed_len, sec, sec_len, out); + + while (olen > MD5_SIZE) + { + uint8_t a2[MD5_SIZE]; + out += MD5_SIZE; + olen -= MD5_SIZE; + + /* A(N) */ + hmac_md5(a1, MD5_SIZE, sec, sec_len, a2); + memcpy(a1, a2, MD5_SIZE); + + /* work out the actual hash */ + hmac_md5(a1, MD5_SIZE+seed_len, sec, sec_len, out); + } +} + +/** + * Work out the SHA1 PRF. + */ +static void p_hash_sha1(const uint8_t *sec, int sec_len, + uint8_t *seed, int seed_len, uint8_t *out, int olen) +{ + uint8_t a1[128]; + + /* A(1) */ + hmac_sha1(seed, seed_len, sec, sec_len, a1); + memcpy(&a1[SHA1_SIZE], seed, seed_len); + hmac_sha1(a1, SHA1_SIZE+seed_len, sec, sec_len, out); + + while (olen > SHA1_SIZE) + { + uint8_t a2[SHA1_SIZE]; + out += SHA1_SIZE; + olen -= SHA1_SIZE; + + /* A(N) */ + hmac_sha1(a1, SHA1_SIZE, sec, sec_len, a2); + memcpy(a1, a2, SHA1_SIZE); + + /* work out the actual hash */ + hmac_sha1(a1, SHA1_SIZE+seed_len, sec, sec_len, out); + } +} + +/** + * Work out the PRF. + */ +static void prf(const uint8_t *sec, int sec_len, uint8_t *seed, int seed_len, + uint8_t *out, int olen) +{ + int len, i; + const uint8_t *S1, *S2; + uint8_t xbuf[256]; /* needs to be > the amount of key data */ + uint8_t ybuf[256]; /* needs to be > the amount of key data */ + + len = sec_len/2; + S1 = sec; + S2 = &sec[len]; + len += (sec_len & 1); /* add for odd, make longer */ + + p_hash_md5(S1, len, seed, seed_len, xbuf, olen); + p_hash_sha1(S2, len, seed, seed_len, ybuf, olen); + + for (i = 0; i < olen; i++) + out[i] = xbuf[i] ^ ybuf[i]; +} + +/** + * Generate a master secret based on the client/server random data and the + * premaster secret. + */ +void generate_master_secret(SSL *ssl, const uint8_t *premaster_secret) +{ + uint8_t buf[128]; /* needs to be > 13+32+32 in size */ + strcpy((char *)buf, "master secret"); + memcpy(&buf[13], ssl->dc->client_random, SSL_RANDOM_SIZE); + memcpy(&buf[45], ssl->dc->server_random, SSL_RANDOM_SIZE); + prf(premaster_secret, SSL_SECRET_SIZE, buf, 77, ssl->dc->master_secret, + SSL_SECRET_SIZE); +} + +/** + * Generate a 'random' blob of data used for the generation of keys. + */ +static void generate_key_block(uint8_t *client_random, uint8_t *server_random, + uint8_t *master_secret, uint8_t *key_block, int key_block_size) +{ + uint8_t buf[128]; + strcpy((char *)buf, "key expansion"); + memcpy(&buf[13], server_random, SSL_RANDOM_SIZE); + memcpy(&buf[45], client_random, SSL_RANDOM_SIZE); + prf(master_secret, SSL_SECRET_SIZE, buf, 77, key_block, key_block_size); +} + +/** + * Calculate the digest used in the finished message. This function also + * doubles up as a certificate verify function. + */ +void finished_digest(SSL *ssl, const char *label, uint8_t *digest) +{ + uint8_t mac_buf[128]; + uint8_t *q = mac_buf; + MD5_CTX md5_ctx = ssl->dc->md5_ctx; + SHA1_CTX sha1_ctx = ssl->dc->sha1_ctx; + + if (label) + { + strcpy((char *)q, label); + q += strlen(label); + } + + MD5_Final(q, &md5_ctx); + q += MD5_SIZE; + + SHA1_Final(q, &sha1_ctx); + q += SHA1_SIZE; + + if (label) + { + prf(ssl->dc->master_secret, SSL_SECRET_SIZE, mac_buf, (int)(q-mac_buf), + digest, SSL_FINISHED_HASH_SIZE); + } + else /* for use in a certificate verify */ + { + memcpy(digest, mac_buf, MD5_SIZE + SHA1_SIZE); + } + +#if 0 + printf("label: %s\n", label); + print_blob("master secret", ssl->dc->master_secret, 48); + print_blob("mac_buf", mac_buf, q-mac_buf); + print_blob("finished digest", digest, SSL_FINISHED_HASH_SIZE); +#endif +} + +/** + * Retrieve (and initialise) the context of a cipher. + */ +static void *crypt_new(SSL *ssl, uint8_t *key, uint8_t *iv, int is_decrypt) +{ + switch (ssl->cipher) + { +#ifndef CONFIG_SSL_SKELETON_MODE + case SSL_AES128_SHA: + { + AES_CTX *aes_ctx = (AES_CTX *)malloc(sizeof(AES_CTX)); + AES_set_key(aes_ctx, key, iv, AES_MODE_128); + + if (is_decrypt) + { + AES_convert_key(aes_ctx); + } + + return (void *)aes_ctx; + } + + case SSL_AES256_SHA: + { + AES_CTX *aes_ctx = (AES_CTX *)malloc(sizeof(AES_CTX)); + AES_set_key(aes_ctx, key, iv, AES_MODE_256); + + if (is_decrypt) + { + AES_convert_key(aes_ctx); + } + + return (void *)aes_ctx; + } + break; + + case SSL_RC4_128_MD5: +#endif + case SSL_RC4_128_SHA: + { + RC4_CTX *rc4_ctx = (RC4_CTX *)malloc(sizeof(RC4_CTX)); + RC4_setup(rc4_ctx, key, 16); + return (void *)rc4_ctx; + } + break; + } + + return NULL; /* its all gone wrong */ +} + +/** + * Send a packet over the socket. + */ +static int send_raw_packet(SSL *ssl, uint8_t protocol) +{ + uint8_t *rec_buf = ssl->bm_all_data; + int pkt_size = SSL_RECORD_SIZE+ssl->bm_index; + int sent = 0; + int ret = SSL_OK; + + rec_buf[0] = protocol; + rec_buf[1] = 0x03; /* version = 3.1 (TLS) */ + rec_buf[2] = 0x01; + rec_buf[3] = ssl->bm_index >> 8; + rec_buf[4] = ssl->bm_index & 0xff; + + DISPLAY_BYTES(ssl, "sending %d bytes", ssl->bm_all_data, + pkt_size, pkt_size); + + while (sent < pkt_size) + { + if ((ret = SOCKET_WRITE(ssl->client_fd, + &ssl->bm_all_data[sent], pkt_size)) < 0) + { + ret = SSL_ERROR_CONN_LOST; + break; + } + + sent += ret; + + /* keep going until the write buffer has some space */ + if (sent != pkt_size) + { + fd_set wfds; + FD_ZERO(&wfds); + FD_SET(ssl->client_fd, &wfds); + + if (select(ssl->client_fd + 1, NULL, &wfds, NULL, NULL) < 0) + { + ret = SSL_ERROR_CONN_LOST; + break; + } + } + } + + SET_SSL_FLAG(SSL_NEED_RECORD); /* reset for next time */ + ssl->bm_index = 0; + + if (protocol != PT_APP_PROTOCOL_DATA) + { + /* always return SSL_OK during handshake */ + ret = SSL_OK; + } + + return ret; +} + +/** + * Send an encrypted packet with padding bytes if necessary. + */ +int send_packet(SSL *ssl, uint8_t protocol, const uint8_t *in, int length) +{ + int msg_length = length; + int ret, pad_bytes = 0; + ssl->bm_index = msg_length; + + /* if our state is bad, don't bother */ + if (ssl->hs_status == SSL_ERROR_DEAD) + return SSL_ERROR_CONN_LOST; + + if (in) /* has the buffer already been initialised? */ + { + memcpy(ssl->bm_data, in, length); + } + + if (IS_SET_SSL_FLAG(SSL_TX_ENCRYPTED)) + { + int mode = IS_SET_SSL_FLAG(SSL_IS_CLIENT) ? + SSL_CLIENT_WRITE : SSL_SERVER_WRITE; + uint8_t hmac_header[SSL_RECORD_SIZE]; + + hmac_header[0] = protocol; + hmac_header[1] = 0x03; + hmac_header[2] = 0x01; + hmac_header[3] = length >> 8; + hmac_header[4] = length & 0xff; + + if (protocol == PT_HANDSHAKE_PROTOCOL) + { + DISPLAY_STATE(ssl, 1, ssl->bm_data[0], 0); + + if (ssl->bm_data[0] != HS_HELLO_REQUEST) + { + add_packet(ssl, ssl->bm_data, ssl->bm_index); + } + } + + /* add the packet digest */ + msg_length += ssl->cipher_info->digest_size; + ssl->bm_index = msg_length; + add_hmac_digest(ssl, mode, hmac_header, ssl->bm_data, length, + &ssl->bm_data[length]); + + /* add padding? */ + if (ssl->cipher_info->padding_size) + { + int last_blk_size = msg_length%ssl->cipher_info->padding_size; + pad_bytes = ssl->cipher_info->padding_size - last_blk_size; + + /* ensure we always have at least 1 padding byte */ + if (pad_bytes == 0) + pad_bytes += ssl->cipher_info->padding_size; + + memset(&ssl->bm_data[msg_length], pad_bytes-1, pad_bytes); + msg_length += pad_bytes; + ssl->bm_index = msg_length; + } + + DISPLAY_BYTES(ssl, "unencrypted write", ssl->bm_data, msg_length); + increment_write_sequence(ssl); + + /* now encrypt the packet */ + ssl->cipher_info->encrypt(ssl->encrypt_ctx, ssl->bm_data, + ssl->bm_data, msg_length); + } + else if (protocol == PT_HANDSHAKE_PROTOCOL) + { + DISPLAY_STATE(ssl, 1, ssl->bm_data[0], 0); + + if (ssl->bm_data[0] != HS_HELLO_REQUEST) + { + add_packet(ssl, ssl->bm_data, ssl->bm_index); + } + } + + if ((ret = send_raw_packet(ssl, protocol)) <= 0) + return ret; + + return length; /* just return what we wanted to send */ +} + +/** + * Work out the cipher keys we are going to use for this session based on the + * master secret. + */ +static void set_key_block(SSL *ssl, int is_write) +{ + const cipher_info_t *ciph_info = get_cipher_info(ssl->cipher); + uint8_t *q; + uint8_t client_key[32], server_key[32]; /* big enough for AES256 */ + uint8_t client_iv[16], server_iv[16]; /* big enough for AES128/256 */ + int is_client = IS_SET_SSL_FLAG(SSL_IS_CLIENT); + + /* only do once in a handshake */ + if (ssl->dc->key_block == NULL) + { + ssl->dc->key_block = (uint8_t *)malloc(ciph_info->key_block_size); + +#if 0 + print_blob("client", ssl->dc->client_random, 32); + print_blob("server", ssl->dc->server_random, 32); + print_blob("master", ssl->dc->master_secret, SSL_SECRET_SIZE); +#endif + generate_key_block(ssl->dc->client_random, ssl->dc->server_random, + ssl->dc->master_secret, ssl->dc->key_block, + ciph_info->key_block_size); +#if 0 + print_blob("keyblock", ssl->key_block, ciph_info->key_block_size); +#endif + } + + q = ssl->dc->key_block; + + if ((is_client && is_write) || (!is_client && !is_write)) + { + memcpy(ssl->client_mac, q, ciph_info->digest_size); + } + + q += ciph_info->digest_size; + + if ((!is_client && is_write) || (is_client && !is_write)) + { + memcpy(ssl->server_mac, q, ciph_info->digest_size); + } + + q += ciph_info->digest_size; + memcpy(client_key, q, ciph_info->key_size); + q += ciph_info->key_size; + memcpy(server_key, q, ciph_info->key_size); + q += ciph_info->key_size; + +#ifndef CONFIG_SSL_SKELETON_MODE + if (ciph_info->iv_size) /* RC4 has no IV, AES does */ + { + memcpy(client_iv, q, ciph_info->iv_size); + q += ciph_info->iv_size; + memcpy(server_iv, q, ciph_info->iv_size); + q += ciph_info->iv_size; + } +#endif + + free(is_write ? ssl->encrypt_ctx : ssl->decrypt_ctx); + + /* now initialise the ciphers */ + if (is_client) + { + finished_digest(ssl, server_finished, ssl->dc->final_finish_mac); + + if (is_write) + ssl->encrypt_ctx = crypt_new(ssl, client_key, client_iv, 0); + else + ssl->decrypt_ctx = crypt_new(ssl, server_key, server_iv, 1); + } + else + { + finished_digest(ssl, client_finished, ssl->dc->final_finish_mac); + + if (is_write) + ssl->encrypt_ctx = crypt_new(ssl, server_key, server_iv, 0); + else + ssl->decrypt_ctx = crypt_new(ssl, client_key, client_iv, 1); + } + + ssl->cipher_info = ciph_info; +} + +/** + * Read the SSL connection. + */ +int basic_read(SSL *ssl, uint8_t **in_data) +{ + int ret = SSL_OK; + int read_len, is_client = IS_SET_SSL_FLAG(SSL_IS_CLIENT); + uint8_t *buf = ssl->bm_data; + + read_len = SOCKET_READ(ssl->client_fd, &buf[ssl->bm_read_index], + ssl->need_bytes-ssl->got_bytes); + + /* connection has gone, so die */ + if (read_len <= 0) + { + ret = SSL_ERROR_CONN_LOST; + ssl->hs_status = SSL_ERROR_DEAD; /* make sure it stays dead */ + goto error; + } + + DISPLAY_BYTES(ssl, "received %d bytes", + &ssl->bm_data[ssl->bm_read_index], read_len, read_len); + + ssl->got_bytes += read_len; + ssl->bm_read_index += read_len; + + /* haven't quite got what we want, so try again later */ + if (ssl->got_bytes < ssl->need_bytes) + return SSL_OK; + + read_len = ssl->got_bytes; + ssl->got_bytes = 0; + + if (IS_SET_SSL_FLAG(SSL_NEED_RECORD)) + { + /* check for sslv2 "client hello" */ + if (buf[0] & 0x80 && buf[2] == 1 && buf[3] == 0x03) + { +#ifdef CONFIG_SSL_ENABLE_V23_HANDSHAKE + DISPLAY_BYTES(ssl, "ssl2 record", buf, 5); + add_packet(ssl, &buf[2], 3); + ret = process_sslv23_client_hello(ssl); +#else + printf("Error: no SSLv23 handshaking allowed\n"); TTY_FLUSH(); + ret = SSL_ERROR_NOT_SUPPORTED; +#endif + goto error; /* not an error - just get out of here */ + } + + ssl->need_bytes = (buf[3] << 8) + buf[4]; + + /* do we violate the spec with the message size? */ + if (ssl->need_bytes > RT_MAX_PLAIN_LENGTH+RT_EXTRA-BM_RECORD_OFFSET) + { + ret = SSL_ERROR_INVALID_PROT_MSG; + goto error; + } + + CLR_SSL_FLAG(SSL_NEED_RECORD); + memcpy(ssl->hmac_header, buf, 3); /* store for hmac */ + ssl->record_type = buf[0]; + goto error; /* no error, we're done */ + } + + /* for next time - just do it now in case of an error */ + SET_SSL_FLAG(SSL_NEED_RECORD); + ssl->need_bytes = SSL_RECORD_SIZE; + + /* decrypt if we need to */ + if (IS_SET_SSL_FLAG(SSL_RX_ENCRYPTED)) + { + ssl->cipher_info->decrypt(ssl->decrypt_ctx, buf, buf, read_len); + read_len = verify_digest(ssl, + is_client ? SSL_CLIENT_READ : SSL_SERVER_READ, buf, read_len); + + /* does the hmac work? */ + if (read_len < 0) + { + ret = read_len; + goto error; + } + + DISPLAY_BYTES(ssl, "decrypted", buf, read_len); + increment_read_sequence(ssl); + } + + /* The main part of the SSL packet */ + switch (ssl->record_type) + { + case PT_HANDSHAKE_PROTOCOL: + ssl->dc->bm_proc_index = 0; + ret = do_handshake(ssl, buf, read_len); + break; + + case PT_CHANGE_CIPHER_SPEC: + if (ssl->next_state != HS_FINISHED) + { + ret = SSL_ERROR_INVALID_HANDSHAKE; + goto error; + } + + /* all encrypted from now on */ + SET_SSL_FLAG(SSL_RX_ENCRYPTED); + set_key_block(ssl, 0); + memset(ssl->read_sequence, 0, 8); + break; + + case PT_APP_PROTOCOL_DATA: + if (in_data) + { + *in_data = ssl->bm_data; /* point to the work buffer */ + (*in_data)[read_len] = 0; /* null terminate just in case */ + } + + ret = read_len; + break; + + case PT_ALERT_PROTOCOL: + /* return the alert # with alert bit set */ + ret = -buf[1]; + DISPLAY_ALERT(ssl, buf[1]); + break; + + default: + ret = SSL_ERROR_INVALID_PROT_MSG; + break; + } + +error: + ssl->bm_read_index = 0; /* reset to go again */ + + if (ret < SSL_OK && in_data)/* if all wrong, then clear this buffer ptr */ + *in_data = NULL; + + return ret; +} + +/** + * Do some basic checking of data and then perform the appropriate handshaking. + */ +static int do_handshake(SSL *ssl, uint8_t *buf, int read_len) +{ + int hs_len = (buf[2]<<8) + buf[3]; + uint8_t handshake_type = buf[0]; + int ret = SSL_OK; + int is_client = IS_SET_SSL_FLAG(SSL_IS_CLIENT); + + /* some integrity checking on the handshake */ + PARANOIA_CHECK(read_len-SSL_HS_HDR_SIZE, hs_len); + + if (handshake_type != ssl->next_state) + { + /* handle a special case on the client */ + if (!is_client || handshake_type != HS_CERT_REQ || + ssl->next_state != HS_SERVER_HELLO_DONE) + { + ret = SSL_ERROR_INVALID_HANDSHAKE; + goto error; + } + } + + hs_len += SSL_HS_HDR_SIZE; /* adjust for when adding packets */ + ssl->bm_index = hs_len; /* store the size and check later */ + DISPLAY_STATE(ssl, 0, handshake_type, 0); + + if (handshake_type != HS_CERT_VERIFY && handshake_type != HS_HELLO_REQUEST) + add_packet(ssl, buf, hs_len); + +#if defined(CONFIG_SSL_ENABLE_CLIENT) + ret = is_client ? + do_clnt_handshake(ssl, handshake_type, buf, hs_len) : + do_svr_handshake(ssl, handshake_type, buf, hs_len); +#else + ret = do_svr_handshake(ssl, handshake_type, buf, hs_len); +#endif + + /* just use recursion to get the rest */ + if (hs_len < read_len && ret == SSL_OK) + ret = do_handshake(ssl, &buf[hs_len], read_len-hs_len); + +error: + return ret; +} + +/** + * Sends the change cipher spec message. We have just read a finished message + * from the client. + */ +int send_change_cipher_spec(SSL *ssl) +{ + int ret = send_packet(ssl, PT_CHANGE_CIPHER_SPEC, + g_chg_cipher_spec_pkt, sizeof(g_chg_cipher_spec_pkt)); + SET_SSL_FLAG(SSL_TX_ENCRYPTED); + set_key_block(ssl, 1); + memset(ssl->write_sequence, 0, 8); + return ret; +} + +/** + * Send a "finished" message + */ +int send_finished(SSL *ssl) +{ + uint8_t *buf = ssl->bm_data; + + buf[0] = HS_FINISHED; + buf[1] = 0; + buf[2] = 0; + buf[3] = SSL_FINISHED_HASH_SIZE; + + /* now add the finished digest mac (12 bytes) */ + finished_digest(ssl, + IS_SET_SSL_FLAG(SSL_IS_CLIENT) ? + client_finished : server_finished, &buf[4]); + +#ifndef CONFIG_SSL_SKELETON_MODE + /* store in the session cache */ + if (!IS_SET_SSL_FLAG(SSL_SESSION_RESUME) && ssl->ssl_ctx->num_sessions) + { + memcpy(ssl->session->master_secret, + ssl->dc->master_secret, SSL_SECRET_SIZE); + } +#endif + + return send_packet(ssl, PT_HANDSHAKE_PROTOCOL, + NULL, SSL_FINISHED_HASH_SIZE+4); +} + +/** + * Send an alert message. + * Return 1 if the alert was an "error". + */ +int send_alert(SSL *ssl, int error_code) +{ + int alert_num = 0; + int is_warning = 0; + uint8_t buf[2]; + + /* Don't bother we're already dead */ + if (ssl->hs_status == SSL_ERROR_DEAD) + { + return SSL_ERROR_CONN_LOST; + } + +#ifdef CONFIG_SSL_FULL_MODE + if (IS_SET_SSL_FLAG(SSL_DISPLAY_STATES)) + ssl_display_error(error_code); +#endif + + switch (error_code) + { + case SSL_ALERT_CLOSE_NOTIFY: + is_warning = 1; + alert_num = SSL_ALERT_CLOSE_NOTIFY; + break; + + case SSL_ERROR_CONN_LOST: /* don't send alert just yet */ + is_warning = 1; + break; + + case SSL_ERROR_INVALID_HANDSHAKE: + case SSL_ERROR_INVALID_PROT_MSG: + alert_num = SSL_ALERT_HANDSHAKE_FAILURE; + break; + + case SSL_ERROR_INVALID_HMAC: + case SSL_ERROR_FINISHED_INVALID: + alert_num = SSL_ALERT_BAD_RECORD_MAC; + break; + + case SSL_ERROR_INVALID_VERSION: + alert_num = SSL_ALERT_INVALID_VERSION; + break; + + case SSL_ERROR_INVALID_SESSION: + case SSL_ERROR_NO_CIPHER: + case SSL_ERROR_INVALID_KEY: + alert_num = SSL_ALERT_ILLEGAL_PARAMETER; + break; + + case SSL_ERROR_BAD_CERTIFICATE: + alert_num = SSL_ALERT_BAD_CERTIFICATE; + break; + + default: + /* a catch-all for any badly verified certificates */ + alert_num = (error_code <= SSL_X509_OFFSET) ? + SSL_ALERT_BAD_CERTIFICATE : SSL_ALERT_UNEXPECTED_MESSAGE; + break; + } + + buf[0] = is_warning ? 1 : 2; + buf[1] = alert_num; + send_packet(ssl, PT_ALERT_PROTOCOL, buf, sizeof(buf)); + DISPLAY_ALERT(ssl, alert_num); + return is_warning ? 0 : 1; +} + +/** + * Process a client finished message. + */ +int process_finished(SSL *ssl, int hs_len) +{ + uint8_t *buf = ssl->bm_data; + int ret = SSL_OK; + int is_client = IS_SET_SSL_FLAG(SSL_IS_CLIENT); + int resume = IS_SET_SSL_FLAG(SSL_SESSION_RESUME); + + PARANOIA_CHECK(ssl->bm_index, SSL_FINISHED_HASH_SIZE+4); + + /* check that we all work before we continue */ + if (memcmp(ssl->dc->final_finish_mac, &buf[4], SSL_FINISHED_HASH_SIZE)) + return SSL_ERROR_FINISHED_INVALID; + + if ((!is_client && !resume) || (is_client && resume)) + { + if ((ret = send_change_cipher_spec(ssl)) == SSL_OK) + ret = send_finished(ssl); + } + + /* if we ever renegotiate */ + ssl->next_state = is_client ? HS_HELLO_REQUEST : HS_CLIENT_HELLO; + ssl->hs_status = ret; /* set the final handshake status */ + +error: + return ret; +} + +/** + * Send a certificate. + */ +int send_certificate(SSL *ssl) +{ + int i = 0; + uint8_t *buf = ssl->bm_data; + int offset = 7; + int chain_length; + + buf[0] = HS_CERTIFICATE; + buf[1] = 0; + buf[4] = 0; + + while (i < ssl->ssl_ctx->chain_length) + { + SSL_CERT *cert = &ssl->ssl_ctx->certs[i]; + buf[offset++] = 0; + buf[offset++] = cert->size >> 8; /* cert 1 length */ + buf[offset++] = cert->size & 0xff; + memcpy(&buf[offset], cert->buf, cert->size); + offset += cert->size; + i++; + } + + chain_length = offset - 7; + buf[5] = chain_length >> 8; /* cert chain length */ + buf[6] = chain_length & 0xff; + chain_length += 3; + buf[2] = chain_length >> 8; /* handshake length */ + buf[3] = chain_length & 0xff; + ssl->bm_index = offset; + return send_packet(ssl, PT_HANDSHAKE_PROTOCOL, NULL, offset); +} + +/** + * Create a blob of memory that we'll get rid of once the handshake is + * complete. + */ +void disposable_new(SSL *ssl) +{ + if (ssl->dc == NULL) + { + ssl->dc = (DISPOSABLE_CTX *)calloc(1, sizeof(DISPOSABLE_CTX)); + MD5_Init(&ssl->dc->md5_ctx); + SHA1_Init(&ssl->dc->sha1_ctx); + } +} + +/** + * Remove the temporary blob of memory. + */ +void disposable_free(SSL *ssl) +{ + if (ssl->dc) + { + free(ssl->dc->key_block); + memset(ssl->dc, 0, sizeof(DISPOSABLE_CTX)); + free(ssl->dc); + ssl->dc = NULL; + } + +} + +#ifndef CONFIG_SSL_SKELETON_MODE /* no session resumption in this mode */ +/** + * Find if an existing session has the same session id. If so, use the + * master secret from this session for session resumption. + */ +SSL_SESSION *ssl_session_update(int max_sessions, SSL_SESSION *ssl_sessions[], + SSL *ssl, const uint8_t *session_id) +{ + time_t tm = time(NULL); + time_t oldest_sess_time = tm; + SSL_SESSION *oldest_sess = NULL; + int i; + + /* no sessions? Then bail */ + if (max_sessions == 0) + return NULL; + + SSL_CTX_LOCK(ssl->ssl_ctx->mutex); + if (session_id) + { + for (i = 0; i < max_sessions; i++) + { + if (ssl_sessions[i]) + { + /* kill off any expired sessions */ + if (tm > ssl_sessions[i]->conn_time + SSL_EXPIRY_TIME) + { + session_free(ssl_sessions, i); + continue; + } + + /* if the session id matches, it must still be less than + the expiry time */ + if (memcmp(ssl_sessions[i]->session_id, session_id, + SSL_SESSION_ID_SIZE) == 0) + { + ssl->session_index = i; + memcpy(ssl->dc->master_secret, + ssl_sessions[i]->master_secret, SSL_SECRET_SIZE); + SET_SSL_FLAG(SSL_SESSION_RESUME); + SSL_CTX_UNLOCK(ssl->ssl_ctx->mutex); + return ssl_sessions[i]; /* a session was found */ + } + } + } + } + + /* If we've got here, no matching session was found - so create one */ + for (i = 0; i < max_sessions; i++) + { + if (ssl_sessions[i] == NULL) + { + /* perfect, this will do */ + ssl_sessions[i] = (SSL_SESSION *)calloc(1, sizeof(SSL_SESSION)); + ssl_sessions[i]->conn_time = tm; + ssl->session_index = i; + SSL_CTX_UNLOCK(ssl->ssl_ctx->mutex); + return ssl_sessions[i]; /* return the session object */ + } + else if (ssl_sessions[i]->conn_time <= oldest_sess_time) + { + /* find the oldest session */ + oldest_sess_time = ssl_sessions[i]->conn_time; + oldest_sess = ssl_sessions[i]; + ssl->session_index = i; + } + } + + /* ok, we've used up all of our sessions. So blow the oldest session away */ + oldest_sess->conn_time = tm; + memset(oldest_sess->session_id, 0, sizeof(SSL_SESSION_ID_SIZE)); + memset(oldest_sess->master_secret, 0, sizeof(SSL_SECRET_SIZE)); + SSL_CTX_UNLOCK(ssl->ssl_ctx->mutex); + return oldest_sess; +} + +/** + * Free an existing session. + */ +static void session_free(SSL_SESSION *ssl_sessions[], int sess_index) +{ + if (ssl_sessions[sess_index]) + { + free(ssl_sessions[sess_index]); + ssl_sessions[sess_index] = NULL; + } +} + +/** + * This ssl object doesn't want this session anymore. + */ +void kill_ssl_session(SSL_SESSION **ssl_sessions, SSL *ssl) +{ + SSL_CTX_LOCK(ssl->ssl_ctx->mutex); + + if (ssl->ssl_ctx->num_sessions) + { + session_free(ssl_sessions, ssl->session_index); + ssl->session = NULL; + } + + SSL_CTX_UNLOCK(ssl->ssl_ctx->mutex); +} +#endif /* CONFIG_SSL_SKELETON_MODE */ + +/* + * Get the session id for a handshake. This will be a 32 byte sequence. + */ +EXP_FUNC const uint8_t * STDCALL ssl_get_session_id(const SSL *ssl) +{ + return ssl->session_id; +} + +/* + * Get the session id size for a handshake. + */ +EXP_FUNC uint8_t STDCALL ssl_get_session_id_size(const SSL *ssl) +{ + return ssl->sess_id_size; +} + +/* + * Return the cipher id (in the SSL form). + */ +EXP_FUNC uint8_t STDCALL ssl_get_cipher_id(const SSL *ssl) +{ + return ssl->cipher; +} + +/* + * Return the status of the handshake. + */ +EXP_FUNC int STDCALL ssl_handshake_status(const SSL *ssl) +{ + return ssl->hs_status; +} + +/* + * Retrieve various parameters about the SSL engine. + */ +EXP_FUNC int STDCALL ssl_get_config(int offset) +{ + switch (offset) + { + /* return the appropriate build mode */ + case SSL_BUILD_MODE: +#if defined(CONFIG_SSL_FULL_MODE) + return SSL_BUILD_FULL_MODE; +#elif defined(CONFIG_SSL_ENABLE_CLIENT) + return SSL_BUILD_ENABLE_CLIENT; +#elif defined(CONFIG_ENABLE_VERIFICATION) + return SSL_BUILD_ENABLE_VERIFICATION; +#elif defined(CONFIG_SSL_SERVER_ONLY ) + return SSL_BUILD_SERVER_ONLY; +#else + return SSL_BUILD_SKELETON_MODE; +#endif + + case SSL_MAX_CERT_CFG_OFFSET: + return CONFIG_SSL_MAX_CERTS; + +#ifdef CONFIG_SSL_CERT_VERIFICATION + case SSL_MAX_CA_CERT_CFG_OFFSET: + return CONFIG_X509_MAX_CA_CERTS; +#endif +#ifdef CONFIG_SSL_HAS_PEM + case SSL_HAS_PEM: + return 1; +#endif + default: + return 0; + } +} + +#ifdef CONFIG_SSL_CERT_VERIFICATION +/** + * Authenticate a received certificate. + */ +EXP_FUNC int STDCALL ssl_verify_cert(const SSL *ssl) +{ + int ret; + SSL_CTX_LOCK(ssl->ssl_ctx->mutex); + ret = x509_verify(ssl->ssl_ctx->ca_cert_ctx, ssl->x509_ctx); + SSL_CTX_UNLOCK(ssl->ssl_ctx->mutex); + + if (ret) /* modify into an SSL error type */ + { + ret = SSL_X509_ERROR(ret); + } + + return ret; +} + +/** + * Process a certificate message. + */ +int process_certificate(SSL *ssl, X509_CTX **x509_ctx) +{ + int ret = SSL_OK; + uint8_t *buf = &ssl->bm_data[ssl->dc->bm_proc_index]; + int pkt_size = ssl->bm_index; + int cert_size, offset = 5; + int total_cert_size = (buf[offset]<<8) + buf[offset+1]; + int is_client = IS_SET_SSL_FLAG(SSL_IS_CLIENT); + X509_CTX **chain = x509_ctx; + offset += 2; + + PARANOIA_CHECK(total_cert_size, offset); + + while (offset < total_cert_size) + { + offset++; /* skip empty char */ + cert_size = (buf[offset]<<8) + buf[offset+1]; + offset += 2; + + if (x509_new(&buf[offset], NULL, chain)) + { + ret = SSL_ERROR_BAD_CERTIFICATE; + goto error; + } + + /* DISPLAY_CERT(ssl, *chain); */ + chain = &((*chain)->next); + offset += cert_size; + } + + PARANOIA_CHECK(pkt_size, offset); + + /* if we are client we can do the verify now or later */ + if (is_client && !IS_SET_SSL_FLAG(SSL_SERVER_VERIFY_LATER)) + { + ret = ssl_verify_cert(ssl); + } + + ssl->next_state = is_client ? HS_SERVER_HELLO_DONE : HS_CLIENT_KEY_XCHG; + ssl->dc->bm_proc_index += offset; +error: + return ret; +} + +#endif /* CONFIG_SSL_CERT_VERIFICATION */ + +/** + * Debugging routine to display SSL handshaking stuff. + */ +#ifdef CONFIG_SSL_FULL_MODE +/** + * Debugging routine to display SSL states. + */ +void DISPLAY_STATE(SSL *ssl, int is_send, uint8_t state, int not_ok) +{ + const char *str; + + if (!IS_SET_SSL_FLAG(SSL_DISPLAY_STATES)) + return; + + printf(not_ok ? "Error - invalid State:\t" : "State:\t"); + printf(is_send ? "sending " : "receiving "); + + switch (state) + { + case HS_HELLO_REQUEST: + str = "Hello Request (0)"; + break; + + case HS_CLIENT_HELLO: + str = "Client Hello (1)"; + break; + + case HS_SERVER_HELLO: + str = "Server Hello (2)"; + break; + + case HS_CERTIFICATE: + str = "Certificate (11)"; + break; + + case HS_SERVER_KEY_XCHG: + str = "Certificate Request (12)"; + break; + + case HS_CERT_REQ: + str = "Certificate Request (13)"; + break; + + case HS_SERVER_HELLO_DONE: + str = "Server Hello Done (14)"; + break; + + case HS_CERT_VERIFY: + str = "Certificate Verify (15)"; + break; + + case HS_CLIENT_KEY_XCHG: + str = "Client Key Exchange (16)"; + break; + + case HS_FINISHED: + str = "Finished (16)"; + break; + + default: + str = "Error (Unknown)"; + + break; + } + + printf("%s\n", str); + TTY_FLUSH(); +} + +/** + * Debugging routine to display X509 certificates. + */ +void DISPLAY_CERT(SSL *ssl, const X509_CTX *x509_ctx) +{ + if (!IS_SET_SSL_FLAG(SSL_DISPLAY_CERTS)) + return; + + x509_print(x509_ctx, ssl->ssl_ctx->ca_cert_ctx); + TTY_FLUSH(); +} + +/** + * Debugging routine to display RSA objects + */ +void DISPLAY_RSA(SSL *ssl, const RSA_CTX *rsa_ctx) +{ + if (!IS_SET_SSL_FLAG(SSL_DISPLAY_RSA)) + return; + + RSA_print(rsa_ctx); + TTY_FLUSH(); +} + +/** + * Debugging routine to display SSL handshaking bytes. + */ +void DISPLAY_BYTES(SSL *ssl, const char *format, + const uint8_t *data, int size, ...) +{ + va_list(ap); + + if (!IS_SET_SSL_FLAG(SSL_DISPLAY_BYTES)) + return; + + va_start(ap, size); + print_blob(format, data, size, va_arg(ap, char *)); + va_end(ap); + TTY_FLUSH(); +} + +/** + * Debugging routine to display SSL handshaking errors. + */ +EXP_FUNC void STDCALL ssl_display_error(int error_code) +{ + if (error_code == SSL_OK) + return; + + printf("Error: "); + + /* X509 error? */ + if (error_code < SSL_X509_OFFSET) + { + printf("%s\n", x509_display_error(error_code - SSL_X509_OFFSET)); + return; + } + + /* SSL alert error code */ + if (error_code > SSL_ERROR_CONN_LOST) + { + printf("SSL error %d\n", -error_code); + return; + } + + switch (error_code) + { + case SSL_ERROR_DEAD: + printf("connection dead"); + break; + + case SSL_ERROR_INVALID_HANDSHAKE: + printf("invalid handshake"); + break; + + case SSL_ERROR_INVALID_PROT_MSG: + printf("invalid protocol message"); + break; + + case SSL_ERROR_INVALID_HMAC: + printf("invalid mac"); + break; + + case SSL_ERROR_INVALID_VERSION: + printf("invalid version"); + break; + + case SSL_ERROR_INVALID_SESSION: + printf("invalid session"); + break; + + case SSL_ERROR_NO_CIPHER: + printf("no cipher"); + break; + + case SSL_ERROR_CONN_LOST: + printf("connection lost"); + break; + + case SSL_ERROR_BAD_CERTIFICATE: + printf("bad certificate"); + break; + + case SSL_ERROR_INVALID_KEY: + printf("invalid key"); + break; + + case SSL_ERROR_FINISHED_INVALID: + printf("finished invalid"); + break; + + case SSL_ERROR_NO_CERT_DEFINED: + printf("no certificate defined"); + break; + + case SSL_ERROR_NOT_SUPPORTED: + printf("Option not supported"); + break; + + default: + printf("undefined as yet - %d", error_code); + break; + } + + printf("\n"); + TTY_FLUSH(); +} + +/** + * Debugging routine to display alerts. + */ +void DISPLAY_ALERT(SSL *ssl, int alert) +{ + if (!IS_SET_SSL_FLAG(SSL_DISPLAY_STATES)) + return; + + printf("Alert: "); + + switch (alert) + { + case SSL_ALERT_CLOSE_NOTIFY: + printf("close notify"); + break; + + case SSL_ALERT_INVALID_VERSION: + printf("invalid version"); + break; + + case SSL_ALERT_BAD_CERTIFICATE: + printf("bad certificate"); + break; + + case SSL_ALERT_UNEXPECTED_MESSAGE: + printf("unexpected message"); + break; + + case SSL_ALERT_BAD_RECORD_MAC: + printf("bad record mac"); + break; + + case SSL_ALERT_HANDSHAKE_FAILURE: + printf("handshake failure"); + break; + + case SSL_ALERT_ILLEGAL_PARAMETER: + printf("illegal parameter"); + break; + + case SSL_ALERT_DECODE_ERROR: + printf("decode error"); + break; + + case SSL_ALERT_DECRYPT_ERROR: + printf("decrypt error"); + break; + + default: + printf("alert - (unknown %d)", alert); + break; + } + + printf("\n"); + TTY_FLUSH(); +} + +#endif /* CONFIG_SSL_FULL_MODE */ + +/** + * Return the version of this library. + */ +EXP_FUNC const char * STDCALL ssl_version() +{ + static const char * axtls_version = AXTLS_VERSION; + return axtls_version; +} + +/** + * Enable the various language bindings to work regardless of the + * configuration - they just return an error statement and a bad return code. + */ +#if !defined(CONFIG_SSL_FULL_MODE) +EXP_FUNC void STDCALL ssl_display_error(int error_code) {} +#endif + +#ifdef CONFIG_BINDINGS +#if !defined(CONFIG_SSL_ENABLE_CLIENT) +EXP_FUNC SSL * STDCALL ssl_client_new(SSL_CTX *ssl_ctx, int client_fd, const + uint8_t *session_id, uint8_t sess_id_size) +{ + printf(unsupported_str); + return NULL; +} +#endif + +#if !defined(CONFIG_SSL_CERT_VERIFICATION) +EXP_FUNC int STDCALL ssl_verify_cert(const SSL *ssl) +{ + printf(unsupported_str); + return -1; +} + +EXP_FUNC const char * STDCALL ssl_get_cert_dn(const SSL *ssl, int component) +{ + printf(unsupported_str); + return NULL; +} + +#endif /* CONFIG_SSL_CERT_VERIFICATION */ + +#endif /* CONFIG_BINDINGS */ + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/tls1.h b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/tls1.h new file mode 100755 index 0000000..b64b4fd --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/tls1.h @@ -0,0 +1,289 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file tls1.h + * + * @brief The definitions for the TLS library. + */ +#ifndef HEADER_SSL_LIB_H +#define HEADER_SSL_LIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "version.h" +#include "crypto.h" +#include "os_port.h" +#include "crypto_misc.h" + +#define SSL_RANDOM_SIZE 32 +#define SSL_SECRET_SIZE 48 +#define SSL_FINISHED_HASH_SIZE 12 +#define SSL_RECORD_SIZE 5 +#define SSL_SERVER_READ 0 +#define SSL_SERVER_WRITE 1 +#define SSL_CLIENT_READ 2 +#define SSL_CLIENT_WRITE 3 +#define SSL_HS_HDR_SIZE 4 + +/* the flags we use while establishing a connection */ +#define SSL_NEED_RECORD 0x0001 +#define SSL_TX_ENCRYPTED 0x0002 +#define SSL_RX_ENCRYPTED 0x0004 +#define SSL_SESSION_RESUME 0x0008 +#define SSL_IS_CLIENT 0x0010 +#define SSL_HAS_CERT_REQ 0x0020 + +/* some macros to muck around with flag bits */ +#define SET_SSL_FLAG(A) (ssl->flag |= A) +#define CLR_SSL_FLAG(A) (ssl->flag &= ~A) +#define IS_SET_SSL_FLAG(A) (ssl->flag & A) + +#define MAX_KEY_BYTE_SIZE 512 /* for a 4096 bit key */ +#define RT_MAX_PLAIN_LENGTH 16384 +#define RT_EXTRA 1024 +#define BM_RECORD_OFFSET 5 + +#ifdef CONFIG_SSL_SKELETON_MODE +#define NUM_PROTOCOLS 1 +#else +#define NUM_PROTOCOLS 4 +#endif + +#define PARANOIA_CHECK(A, B) if (A < B) { \ + ret = SSL_ERROR_INVALID_HANDSHAKE; goto error; } + +/* protocol types */ +enum +{ + PT_CHANGE_CIPHER_SPEC = 20, + PT_ALERT_PROTOCOL, + PT_HANDSHAKE_PROTOCOL, + PT_APP_PROTOCOL_DATA +}; + +/* handshaking types */ +enum +{ + HS_HELLO_REQUEST, + HS_CLIENT_HELLO, + HS_SERVER_HELLO, + HS_CERTIFICATE = 11, + HS_SERVER_KEY_XCHG, + HS_CERT_REQ, + HS_SERVER_HELLO_DONE, + HS_CERT_VERIFY, + HS_CLIENT_KEY_XCHG, + HS_FINISHED = 20 +}; + +typedef struct +{ + uint8_t cipher; + uint8_t key_size; + uint8_t iv_size; + uint8_t key_block_size; + uint8_t padding_size; + uint8_t digest_size; + hmac_func hmac; + crypt_func encrypt; + crypt_func decrypt; +} cipher_info_t; + +struct _SSLObjLoader +{ + uint8_t *buf; + int len; +}; + +typedef struct _SSLObjLoader SSLObjLoader; + +typedef struct +{ + time_t conn_time; + uint8_t session_id[SSL_SESSION_ID_SIZE]; + uint8_t master_secret[SSL_SECRET_SIZE]; +} SSL_SESSION; + +typedef struct +{ + uint8_t *buf; + int size; +} SSL_CERT; + +typedef struct +{ + MD5_CTX md5_ctx; + SHA1_CTX sha1_ctx; + uint8_t final_finish_mac[SSL_FINISHED_HASH_SIZE]; + uint8_t *key_block; + uint8_t master_secret[SSL_SECRET_SIZE]; + uint8_t client_random[SSL_RANDOM_SIZE]; /* client's random sequence */ + uint8_t server_random[SSL_RANDOM_SIZE]; /* server's random sequence */ + uint16_t bm_proc_index; +} DISPOSABLE_CTX; + +struct _SSL +{ + uint32_t flag; + uint16_t need_bytes; + uint16_t got_bytes; + uint8_t record_type; + uint8_t cipher; + uint8_t sess_id_size; + int16_t next_state; + int16_t hs_status; + DISPOSABLE_CTX *dc; /* temporary data which we'll get rid of soon */ + int client_fd; + const cipher_info_t *cipher_info; + void *encrypt_ctx; + void *decrypt_ctx; + uint8_t bm_all_data[RT_MAX_PLAIN_LENGTH+RT_EXTRA]; + uint8_t *bm_data; + uint16_t bm_index; + uint16_t bm_read_index; + struct _SSL *next; /* doubly linked list */ + struct _SSL *prev; + struct _SSL_CTX *ssl_ctx; /* back reference to a clnt/svr ctx */ +#ifndef CONFIG_SSL_SKELETON_MODE + uint16_t session_index; + SSL_SESSION *session; +#endif +#ifdef CONFIG_SSL_CERT_VERIFICATION + X509_CTX *x509_ctx; +#endif + + uint8_t session_id[SSL_SESSION_ID_SIZE]; + uint8_t client_mac[SHA1_SIZE]; /* for HMAC verification */ + uint8_t server_mac[SHA1_SIZE]; /* for HMAC verification */ + uint8_t read_sequence[8]; /* 64 bit sequence number */ + uint8_t write_sequence[8]; /* 64 bit sequence number */ + uint8_t hmac_header[SSL_RECORD_SIZE]; /* rx hmac */ +}; + +typedef struct _SSL SSL; + +struct _SSL_CTX +{ + uint32_t options; + uint8_t chain_length; + RSA_CTX *rsa_ctx; +#ifdef CONFIG_SSL_CERT_VERIFICATION + CA_CERT_CTX *ca_cert_ctx; +#endif + SSL *head; + SSL *tail; + SSL_CERT certs[CONFIG_SSL_MAX_CERTS]; +#ifndef CONFIG_SSL_SKELETON_MODE + uint16_t num_sessions; + SSL_SESSION **ssl_sessions; +#endif +#ifdef CONFIG_SSL_CTX_MUTEXING + SSL_CTX_MUTEX_TYPE mutex; +#endif +#ifdef CONFIG_OPENSSL_COMPATIBLE + void *bonus_attr; +#endif +}; + +typedef struct _SSL_CTX SSL_CTX; + +/* backwards compatibility */ +typedef struct _SSL_CTX SSLCTX; + +extern const uint8_t ssl_prot_prefs[NUM_PROTOCOLS]; + +SSL *ssl_new(SSL_CTX *ssl_ctx, int client_fd); +void disposable_new(SSL *ssl); +void disposable_free(SSL *ssl); +int send_packet(SSL *ssl, uint8_t protocol, + const uint8_t *in, int length); +int do_svr_handshake(SSL *ssl, int handshake_type, uint8_t *buf, int hs_len); +int do_clnt_handshake(SSL *ssl, int handshake_type, uint8_t *buf, int hs_len); +int process_finished(SSL *ssl, int hs_len); +int process_sslv23_client_hello(SSL *ssl); +int send_alert(SSL *ssl, int error_code); +int send_finished(SSL *ssl); +int send_certificate(SSL *ssl); +int basic_read(SSL *ssl, uint8_t **in_data); +int send_change_cipher_spec(SSL *ssl); +void finished_digest(SSL *ssl, const char *label, uint8_t *digest); +void generate_master_secret(SSL *ssl, const uint8_t *premaster_secret); +void add_packet(SSL *ssl, const uint8_t *pkt, int len); +int add_cert(SSL_CTX *ssl_ctx, const uint8_t *buf, int len); +int add_private_key(SSL_CTX *ssl_ctx, SSLObjLoader *ssl_obj); +void ssl_obj_free(SSLObjLoader *ssl_obj); +int pkcs8_decode(SSL_CTX *ssl_ctx, SSLObjLoader *ssl_obj, const char *password); +int pkcs12_decode(SSL_CTX *ssl_ctx, SSLObjLoader *ssl_obj, const char *password); +int load_key_certs(SSL_CTX *ssl_ctx); +#ifdef CONFIG_SSL_CERT_VERIFICATION +int add_cert_auth(SSL_CTX *ssl_ctx, const uint8_t *buf, int len); +void remove_ca_certs(CA_CERT_CTX *ca_cert_ctx); +#endif +#ifdef CONFIG_SSL_ENABLE_CLIENT +int do_client_connect(SSL *ssl); +#endif + +#ifdef CONFIG_SSL_FULL_MODE +void DISPLAY_STATE(SSL *ssl, int is_send, uint8_t state, int not_ok); +void DISPLAY_BYTES(SSL *ssl, const char *format, + const uint8_t *data, int size, ...); +void DISPLAY_CERT(SSL *ssl, const X509_CTX *x509_ctx); +void DISPLAY_RSA(SSL *ssl, const RSA_CTX *rsa_ctx); +void DISPLAY_ALERT(SSL *ssl, int alert); +#else +#define DISPLAY_STATE(A,B,C,D) +#define DISPLAY_CERT(A,B) +#define DISPLAY_RSA(A,B) +#define DISPLAY_ALERT(A, B) +#ifdef WIN32 +void DISPLAY_BYTES(SSL *ssl, const char *format,/* win32 has no variadic macros */ + const uint8_t *data, int size, ...); +#else +#define DISPLAY_BYTES(A,B,C,D,...) +#endif +#endif + +#ifdef CONFIG_SSL_CERT_VERIFICATION +int process_certificate(SSL *ssl, X509_CTX **x509_ctx); +#endif + +SSL_SESSION *ssl_session_update(int max_sessions, + SSL_SESSION *ssl_sessions[], SSL *ssl, + const uint8_t *session_id); +void kill_ssl_session(SSL_SESSION **ssl_sessions, SSL *ssl); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/tls1_clnt.c b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/tls1_clnt.c new file mode 100644 index 0000000..9131433 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/tls1_clnt.c @@ -0,0 +1,386 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include + +#include "ssl.h" + +#ifdef CONFIG_SSL_ENABLE_CLIENT /* all commented out if no client */ + +static int send_client_hello(SSL *ssl); +static int process_server_hello(SSL *ssl); +static int process_server_hello_done(SSL *ssl); +static int send_client_key_xchg(SSL *ssl); +static int process_cert_req(SSL *ssl); +static int send_cert_verify(SSL *ssl); + +/* + * Establish a new SSL connection to an SSL server. + */ +EXP_FUNC SSL * STDCALL ssl_client_new(SSL_CTX *ssl_ctx, int client_fd, const + uint8_t *session_id, uint8_t sess_id_size) +{ + SSL *ssl; + int ret; + + SOCKET_BLOCK(client_fd); /* ensure blocking mode */ + ssl = ssl_new(ssl_ctx, client_fd); + + if (session_id && ssl_ctx->num_sessions) + { + if (sess_id_size > SSL_SESSION_ID_SIZE) /* validity check */ + { + ssl_free(ssl); + return NULL; + } + + memcpy(ssl->session_id, session_id, sess_id_size); + ssl->sess_id_size = sess_id_size; + SET_SSL_FLAG(SSL_SESSION_RESUME); /* just flag for later */ + } + + SET_SSL_FLAG(SSL_IS_CLIENT); + ret = do_client_connect(ssl); + return ssl; +} + +/* + * Process the handshake record. + */ +int do_clnt_handshake(SSL *ssl, int handshake_type, uint8_t *buf, int hs_len) +{ + int ret = SSL_OK; + + /* To get here the state must be valid */ + switch (handshake_type) + { + case HS_SERVER_HELLO: + ret = process_server_hello(ssl); + break; + + case HS_CERTIFICATE: + ret = process_certificate(ssl, &ssl->x509_ctx); + break; + + case HS_SERVER_HELLO_DONE: + if ((ret = process_server_hello_done(ssl)) == SSL_OK) + { + if (IS_SET_SSL_FLAG(SSL_HAS_CERT_REQ)) + { + if ((ret = send_certificate(ssl)) == SSL_OK && + (ret = send_client_key_xchg(ssl)) == SSL_OK) + { + send_cert_verify(ssl); + } + } + else + { + ret = send_client_key_xchg(ssl); + } + + if (ret == SSL_OK && + (ret = send_change_cipher_spec(ssl)) == SSL_OK) + { + ret = send_finished(ssl); + } + } + break; + + case HS_CERT_REQ: + ret = process_cert_req(ssl); + break; + + case HS_FINISHED: + ret = process_finished(ssl, hs_len); + disposable_free(ssl); /* free up some memory */ + break; + + case HS_HELLO_REQUEST: + disposable_new(ssl); + ret = do_client_connect(ssl); + break; + } + + return ret; +} + +/* + * Do the handshaking from the beginning. + */ +int do_client_connect(SSL *ssl) +{ + int ret = SSL_OK; + + send_client_hello(ssl); /* send the client hello */ + ssl->bm_read_index = 0; + ssl->next_state = HS_SERVER_HELLO; + ssl->hs_status = SSL_NOT_OK; /* not connected */ + x509_free(ssl->x509_ctx); + + /* sit in a loop until it all looks good */ + while (ssl->hs_status != SSL_OK) + { + ret = basic_read(ssl, NULL); + + if (ret < SSL_OK) + { + if (ret != SSL_ERROR_CONN_LOST) + { + /* let the server know we are dying and why */ + if (send_alert(ssl, ret)) + { + /* something nasty happened, so get rid of it */ + kill_ssl_session(ssl->ssl_ctx->ssl_sessions, ssl); + } + } + + break; + } + } + + ssl->hs_status = ret; /* connected? */ + return ret; +} + +/* + * Send the initial client hello. + */ +static int send_client_hello(SSL *ssl) +{ + uint8_t *buf = ssl->bm_data; + time_t tm = time(NULL); + uint8_t *tm_ptr = &buf[6]; /* time will go here */ + int i, offset; + + buf[0] = HS_CLIENT_HELLO; + buf[1] = 0; + buf[2] = 0; + /* byte 3 is calculated later */ + buf[4] = 0x03; + buf[5] = 0x01; + + /* client random value - spec says that 1st 4 bytes are big endian time */ + *tm_ptr++ = (uint8_t)(((long)tm & 0xff000000) >> 24); + *tm_ptr++ = (uint8_t)(((long)tm & 0x00ff0000) >> 16); + *tm_ptr++ = (uint8_t)(((long)tm & 0x0000ff00) >> 8); + *tm_ptr++ = (uint8_t)(((long)tm & 0x000000ff)); + get_random(SSL_RANDOM_SIZE-4, &buf[10]); + memcpy(ssl->dc->client_random, &buf[6], SSL_RANDOM_SIZE); + offset = 6 + SSL_RANDOM_SIZE; + + /* give session resumption a go */ + if (IS_SET_SSL_FLAG(SSL_SESSION_RESUME)) /* set initially by user */ + { + buf[offset++] = ssl->sess_id_size; + memcpy(&buf[offset], ssl->session_id, ssl->sess_id_size); + offset += ssl->sess_id_size; + CLR_SSL_FLAG(SSL_SESSION_RESUME); /* clear so we can set later */ + } + else + { + /* no session id - because no session resumption just yet */ + buf[offset++] = 0; + } + + buf[offset++] = 0; /* number of ciphers */ + buf[offset++] = NUM_PROTOCOLS*2;/* number of ciphers */ + + /* put all our supported protocols in our request */ + for (i = 0; i < NUM_PROTOCOLS; i++) + { + buf[offset++] = 0; /* cipher we are using */ + buf[offset++] = ssl_prot_prefs[i]; + } + + buf[offset++] = 1; /* no compression */ + buf[offset++] = 0; + buf[3] = offset - 4; /* handshake size */ + + return send_packet(ssl, PT_HANDSHAKE_PROTOCOL, NULL, offset); +} + +/* + * Process the server hello. + */ +static int process_server_hello(SSL *ssl) +{ + uint8_t *buf = ssl->bm_data; + int pkt_size = ssl->bm_index; + int version = (buf[4] << 4) + buf[5]; + int num_sessions = ssl->ssl_ctx->num_sessions; + uint8_t sess_id_size; + int offset, ret = SSL_OK; + + /* check that we are talking to a TLSv1 server */ + if (version != 0x31) + return SSL_ERROR_INVALID_VERSION; + + /* get the server random value */ + memcpy(ssl->dc->server_random, &buf[6], SSL_RANDOM_SIZE); + offset = 6 + SSL_RANDOM_SIZE; /* skip of session id size */ + sess_id_size = buf[offset++]; + + if (num_sessions) + { + ssl->session = ssl_session_update(num_sessions, + ssl->ssl_ctx->ssl_sessions, ssl, &buf[offset]); + memcpy(ssl->session->session_id, &buf[offset], sess_id_size); + + /* pad the rest with 0's */ + if (sess_id_size < SSL_SESSION_ID_SIZE) + { + memset(&ssl->session->session_id[sess_id_size], 0, + SSL_SESSION_ID_SIZE-sess_id_size); + } + } + + memcpy(ssl->session_id, &buf[offset], sess_id_size); + ssl->sess_id_size = sess_id_size; + offset += sess_id_size; + + /* get the real cipher we are using */ + ssl->cipher = buf[++offset]; + ssl->next_state = IS_SET_SSL_FLAG(SSL_SESSION_RESUME) ? + HS_FINISHED : HS_CERTIFICATE; + + offset++; // skip the compr + PARANOIA_CHECK(pkt_size, offset); + ssl->dc->bm_proc_index = offset+1; + +error: + return ret; +} + +/** + * Process the server hello done message. + */ +static int process_server_hello_done(SSL *ssl) +{ + ssl->next_state = HS_FINISHED; + return SSL_OK; +} + +/* + * Send a client key exchange message. + */ +static int send_client_key_xchg(SSL *ssl) +{ + uint8_t *buf = ssl->bm_data; + uint8_t premaster_secret[SSL_SECRET_SIZE]; + int enc_secret_size = -1; + + buf[0] = HS_CLIENT_KEY_XCHG; + buf[1] = 0; + + premaster_secret[0] = 0x03; /* encode the version number */ + premaster_secret[1] = 0x01; + get_random(SSL_SECRET_SIZE-2, &premaster_secret[2]); + DISPLAY_RSA(ssl, ssl->x509_ctx->rsa_ctx); + + /* rsa_ctx->bi_ctx is not thread-safe */ + SSL_CTX_LOCK(ssl->ssl_ctx->mutex); + enc_secret_size = RSA_encrypt(ssl->x509_ctx->rsa_ctx, premaster_secret, + SSL_SECRET_SIZE, &buf[6], 0); + SSL_CTX_UNLOCK(ssl->ssl_ctx->mutex); + + buf[2] = (enc_secret_size + 2) >> 8; + buf[3] = (enc_secret_size + 2) & 0xff; + buf[4] = enc_secret_size >> 8; + buf[5] = enc_secret_size & 0xff; + + generate_master_secret(ssl, premaster_secret); + return send_packet(ssl, PT_HANDSHAKE_PROTOCOL, NULL, enc_secret_size+6); +} + +/* + * Process the certificate request. + */ +static int process_cert_req(SSL *ssl) +{ + uint8_t *buf = &ssl->bm_data[ssl->dc->bm_proc_index]; + int ret = SSL_OK; + int offset = (buf[2] << 4) + buf[3]; + int pkt_size = ssl->bm_index; + + /* don't do any processing - we will send back an RSA certificate anyway */ + ssl->next_state = HS_SERVER_HELLO_DONE; + SET_SSL_FLAG(SSL_HAS_CERT_REQ); + ssl->dc->bm_proc_index += offset; + PARANOIA_CHECK(pkt_size, offset); +error: + return ret; +} + +/* + * Send a certificate verify message. + */ +static int send_cert_verify(SSL *ssl) +{ + uint8_t *buf = ssl->bm_data; + uint8_t dgst[MD5_SIZE+SHA1_SIZE]; + RSA_CTX *rsa_ctx = ssl->ssl_ctx->rsa_ctx; + int n = 0, ret; + + DISPLAY_RSA(ssl, rsa_ctx); + + buf[0] = HS_CERT_VERIFY; + buf[1] = 0; + + finished_digest(ssl, NULL, dgst); /* calculate the digest */ + + /* rsa_ctx->bi_ctx is not thread-safe */ + if (rsa_ctx) + { + SSL_CTX_LOCK(ssl->ssl_ctx->mutex); + n = RSA_encrypt(rsa_ctx, dgst, sizeof(dgst), &buf[6], 1); + SSL_CTX_UNLOCK(ssl->ssl_ctx->mutex); + + if (n == 0) + { + ret = SSL_ERROR_INVALID_KEY; + goto error; + } + } + + buf[4] = n >> 8; /* add the RSA size (not officially documented) */ + buf[5] = n & 0xff; + n += 2; + buf[2] = n >> 8; + buf[3] = n & 0xff; + ret = send_packet(ssl, PT_HANDSHAKE_PROTOCOL, NULL, n+4); + +error: + return ret; +} + +#endif /* CONFIG_SSL_ENABLE_CLIENT */ diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/tls1_svr.c b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/tls1_svr.c new file mode 100644 index 0000000..45b9bec --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/tls1_svr.c @@ -0,0 +1,476 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include + +#include "ssl.h" + +static const uint8_t g_hello_done[] = { HS_SERVER_HELLO_DONE, 0, 0, 0 }; + +static int process_client_hello(SSL *ssl); +static int send_server_hello_sequence(SSL *ssl); +static int send_server_hello(SSL *ssl); +static int send_server_hello_done(SSL *ssl); +static int process_client_key_xchg(SSL *ssl); +#ifdef CONFIG_SSL_CERT_VERIFICATION +static int send_certificate_request(SSL *ssl); +static int process_cert_verify(SSL *ssl); +#endif + +/* + * Establish a new SSL connection to an SSL client. + */ +EXP_FUNC SSL * STDCALL ssl_server_new(SSL_CTX *ssl_ctx, int client_fd) +{ + SSL *ssl; + + ssl = ssl_new(ssl_ctx, client_fd); + ssl->next_state = HS_CLIENT_HELLO; + +#ifdef CONFIG_SSL_FULL_MODE + if (ssl_ctx->chain_length == 0) + printf("Warning - no server certificate defined\n"); TTY_FLUSH(); +#endif + + return ssl; +} + +/* + * Process the handshake record. + */ +int do_svr_handshake(SSL *ssl, int handshake_type, uint8_t *buf, int hs_len) +{ + int ret = SSL_OK; + ssl->hs_status = SSL_NOT_OK; /* not connected */ + + /* To get here the state must be valid */ + switch (handshake_type) + { + case HS_CLIENT_HELLO: + if ((ret = process_client_hello(ssl)) == SSL_OK) + ret = send_server_hello_sequence(ssl); + break; + +#ifdef CONFIG_SSL_CERT_VERIFICATION + case HS_CERTIFICATE:/* the client sends its cert */ + ret = process_certificate(ssl, &ssl->x509_ctx); + + if (ret == SSL_OK) /* verify the cert */ + { + int cert_res; + cert_res = x509_verify( + ssl->ssl_ctx->ca_cert_ctx, ssl->x509_ctx); + ret = (cert_res == 0) ? SSL_OK : SSL_X509_ERROR(cert_res); + } + break; + + case HS_CERT_VERIFY: + ret = process_cert_verify(ssl); + add_packet(ssl, buf, hs_len); /* needs to be done after */ + break; +#endif + case HS_CLIENT_KEY_XCHG: + ret = process_client_key_xchg(ssl); + break; + + case HS_FINISHED: + ret = process_finished(ssl, hs_len); + disposable_free(ssl); /* free up some memory */ + break; + } + + return ret; +} + +/* + * Process a client hello message. + */ +static int process_client_hello(SSL *ssl) +{ + uint8_t *buf = ssl->bm_data; + uint8_t *record_buf = ssl->hmac_header; + int pkt_size = ssl->bm_index; + int i, j, cs_len, id_len, offset = 6 + SSL_RANDOM_SIZE; + int version = (record_buf[1] << 4) + record_buf[2]; + int ret = SSL_OK; + + /* should be v3.1 (TLSv1) or better - we'll send in v3.1 mode anyway */ + if (version < 0x31) + { + ret = SSL_ERROR_INVALID_VERSION; + ssl_display_error(ret); + goto error; + } + + memcpy(ssl->dc->client_random, &buf[6], SSL_RANDOM_SIZE); + + /* process the session id */ + id_len = buf[offset++]; + if (id_len > SSL_SESSION_ID_SIZE) + { + return SSL_ERROR_INVALID_SESSION; + } + +#ifndef CONFIG_SSL_SKELETON_MODE + ssl->session = ssl_session_update(ssl->ssl_ctx->num_sessions, + ssl->ssl_ctx->ssl_sessions, ssl, id_len ? &buf[offset] : NULL); +#endif + + offset += id_len; + cs_len = (buf[offset]<<8) + buf[offset+1]; + offset += 3; /* add 1 due to all cipher suites being 8 bit */ + + PARANOIA_CHECK(pkt_size, offset); + + /* work out what cipher suite we are going to use */ + for (j = 0; j < NUM_PROTOCOLS; j++) + { + for (i = 0; i < cs_len; i += 2) + { + if (ssl_prot_prefs[j] == buf[offset+i]) /* got a match? */ + { + ssl->cipher = ssl_prot_prefs[j]; + goto do_state; + } + } + } + + /* ouch! protocol is not supported */ + ret = SSL_ERROR_NO_CIPHER; + +do_state: +error: + return ret; +} + +#ifdef CONFIG_SSL_ENABLE_V23_HANDSHAKE +/* + * Some browsers use a hybrid SSLv2 "client hello" + */ +int process_sslv23_client_hello(SSL *ssl) +{ + uint8_t *buf = ssl->bm_data; + int bytes_needed = ((buf[0] & 0x7f) << 8) + buf[1]; + int version = (buf[3] << 4) + buf[4]; + int ret = SSL_OK; + + /* we have already read 3 extra bytes so far */ + int read_len = SOCKET_READ(ssl->client_fd, buf, bytes_needed-3); + int cs_len = buf[1]; + int id_len = buf[3]; + int ch_len = buf[5]; + int i, j, offset = 8; /* start at first cipher */ + int random_offset = 0; + + DISPLAY_BYTES(ssl, "received %d bytes", buf, read_len, read_len); + + /* should be v3.1 (TLSv1) or better - we'll send in v3.1 mode anyway */ + if (version < 0x31) + { + return SSL_ERROR_INVALID_VERSION; + } + + add_packet(ssl, buf, read_len); + + /* connection has gone, so die */ + if (bytes_needed < 0) + { + return SSL_ERROR_CONN_LOST; + } + + /* now work out what cipher suite we are going to use */ + for (j = 0; j < NUM_PROTOCOLS; j++) + { + for (i = 0; i < cs_len; i += 3) + { + if (ssl_prot_prefs[j] == buf[offset+i]) + { + ssl->cipher = ssl_prot_prefs[j]; + goto server_hello; + } + } + } + + /* ouch! protocol is not supported */ + ret = SSL_ERROR_NO_CIPHER; + goto error; + +server_hello: + /* get the session id */ + offset += cs_len - 2; /* we've gone 2 bytes past the end */ +#ifndef CONFIG_SSL_SKELETON_MODE + ssl->session = ssl_session_update(ssl->ssl_ctx->num_sessions, + ssl->ssl_ctx->ssl_sessions, ssl, id_len ? &buf[offset] : NULL); +#endif + + /* get the client random data */ + offset += id_len; + + /* random can be anywhere between 16 and 32 bytes long - so it is padded + * with 0's to the left */ + if (ch_len == 0x10) + { + random_offset += 0x10; + } + + memcpy(&ssl->dc->client_random[random_offset], &buf[offset], ch_len); + ret = send_server_hello_sequence(ssl); + +error: + return ret; +} +#endif + +/* + * Send the entire server hello sequence + */ +static int send_server_hello_sequence(SSL *ssl) +{ + int ret; + + if ((ret = send_server_hello(ssl)) == SSL_OK) + { +#ifndef CONFIG_SSL_SKELETON_MODE + /* resume handshake? */ + if (IS_SET_SSL_FLAG(SSL_SESSION_RESUME)) + { + if ((ret = send_change_cipher_spec(ssl)) == SSL_OK) + { + ret = send_finished(ssl); + ssl->next_state = HS_FINISHED; + } + } + else +#endif + if ((ret = send_certificate(ssl)) == SSL_OK) + { +#ifdef CONFIG_SSL_CERT_VERIFICATION + /* ask the client for its certificate */ + if (IS_SET_SSL_FLAG(SSL_CLIENT_AUTHENTICATION)) + { + if ((ret = send_certificate_request(ssl)) == SSL_OK) + { + ret = send_server_hello_done(ssl); + ssl->next_state = HS_CERTIFICATE; + } + } + else +#endif + { + ret = send_server_hello_done(ssl); + ssl->next_state = HS_CLIENT_KEY_XCHG; + } + } + } + + return ret; +} + +/* + * Send a server hello message. + */ +static int send_server_hello(SSL *ssl) +{ + uint8_t *buf = ssl->bm_data; + int offset = 0; + + buf[0] = HS_SERVER_HELLO; + buf[1] = 0; + buf[2] = 0; + /* byte 3 is calculated later */ + buf[4] = 0x03; + buf[5] = 0x01; + + /* server random value */ + get_random(SSL_RANDOM_SIZE, &buf[6]); + memcpy(ssl->dc->server_random, &buf[6], SSL_RANDOM_SIZE); + offset = 6 + SSL_RANDOM_SIZE; + +#ifndef CONFIG_SSL_SKELETON_MODE + if (IS_SET_SSL_FLAG(SSL_SESSION_RESUME)) + { + /* retrieve id from session cache */ + buf[offset++] = SSL_SESSION_ID_SIZE; + memcpy(&buf[offset], ssl->session->session_id, SSL_SESSION_ID_SIZE); + memcpy(ssl->session_id, ssl->session->session_id, SSL_SESSION_ID_SIZE); + ssl->sess_id_size = SSL_SESSION_ID_SIZE; + offset += SSL_SESSION_ID_SIZE; + } + else /* generate our own session id */ +#endif + { +#ifndef CONFIG_SSL_SKELETON_MODE + buf[offset++] = SSL_SESSION_ID_SIZE; + get_random(SSL_SESSION_ID_SIZE, &buf[offset]); + memcpy(ssl->session_id, &buf[offset], SSL_SESSION_ID_SIZE); + ssl->sess_id_size = SSL_SESSION_ID_SIZE; + + /* store id in session cache */ + if (ssl->ssl_ctx->num_sessions) + { + memcpy(ssl->session->session_id, + ssl->session_id, SSL_SESSION_ID_SIZE); + } + + offset += SSL_SESSION_ID_SIZE; +#else + buf[offset++] = 0; /* don't bother with session id in skelton mode */ +#endif + } + + buf[offset++] = 0; /* cipher we are using */ + buf[offset++] = ssl->cipher; + buf[offset++] = 0; /* no compression */ + buf[3] = offset - 4; /* handshake size */ + return send_packet(ssl, PT_HANDSHAKE_PROTOCOL, NULL, offset); +} + +/* + * Send the server hello done message. + */ +static int send_server_hello_done(SSL *ssl) +{ + return send_packet(ssl, PT_HANDSHAKE_PROTOCOL, + g_hello_done, sizeof(g_hello_done)); +} + +/* + * Pull apart a client key exchange message. Decrypt the pre-master key (using + * our RSA private key) and then work out the master key. Initialise the + * ciphers. + */ +static int process_client_key_xchg(SSL *ssl) +{ + uint8_t *buf = &ssl->bm_data[ssl->dc->bm_proc_index]; + int pkt_size = ssl->bm_index; + int premaster_size, secret_length = (buf[2] << 8) + buf[3]; + uint8_t premaster_secret[MAX_KEY_BYTE_SIZE]; + RSA_CTX *rsa_ctx = ssl->ssl_ctx->rsa_ctx; + int offset = 4; + int ret = SSL_OK; + + if (rsa_ctx == NULL) + { + ret = SSL_ERROR_NO_CERT_DEFINED; + goto error; + } + + /* is there an extra size field? */ + if ((secret_length - 2) == rsa_ctx->num_octets) + offset += 2; + + PARANOIA_CHECK(pkt_size, rsa_ctx->num_octets+offset); + + /* rsa_ctx->bi_ctx is not thread-safe */ + SSL_CTX_LOCK(ssl->ssl_ctx->mutex); + premaster_size = RSA_decrypt(rsa_ctx, &buf[offset], premaster_secret, 1); + SSL_CTX_UNLOCK(ssl->ssl_ctx->mutex); + + if (premaster_size != SSL_SECRET_SIZE || + premaster_secret[0] != 0x03 || /* check version is 3.1 (TLS) */ + premaster_secret[1] != 0x01) + { + /* guard against a Bleichenbacher attack */ + memset(premaster_secret, 0, SSL_SECRET_SIZE); + /* and continue - will die eventually when checking the mac */ + } + +#if 0 + print_blob("pre-master", premaster_secret, SSL_SECRET_SIZE); +#endif + + generate_master_secret(ssl, premaster_secret); + +#ifdef CONFIG_SSL_CERT_VERIFICATION + ssl->next_state = IS_SET_SSL_FLAG(SSL_CLIENT_AUTHENTICATION) ? + HS_CERT_VERIFY : HS_FINISHED; +#else + ssl->next_state = HS_FINISHED; +#endif +error: + ssl->dc->bm_proc_index += rsa_ctx->num_octets+offset; + return ret; +} + +#ifdef CONFIG_SSL_CERT_VERIFICATION +static const uint8_t g_cert_request[] = { HS_CERT_REQ, 0, 0, 4, 1, 0, 0, 0 }; + +/* + * Send the certificate request message. + */ +static int send_certificate_request(SSL *ssl) +{ + return send_packet(ssl, PT_HANDSHAKE_PROTOCOL, + g_cert_request, sizeof(g_cert_request)); +} + +/* + * Ensure the client has the private key by first decrypting the packet and + * then checking the packet digests. + */ +static int process_cert_verify(SSL *ssl) +{ + uint8_t *buf = &ssl->bm_data[ssl->dc->bm_proc_index]; + int pkt_size = ssl->bm_index; + uint8_t dgst_buf[MAX_KEY_BYTE_SIZE]; + uint8_t dgst[MD5_SIZE+SHA1_SIZE]; + X509_CTX *x509_ctx = ssl->x509_ctx; + int ret = SSL_OK; + int n; + + PARANOIA_CHECK(pkt_size, x509_ctx->rsa_ctx->num_octets+6); + DISPLAY_RSA(ssl, x509_ctx->rsa_ctx); + + /* rsa_ctx->bi_ctx is not thread-safe */ + SSL_CTX_LOCK(ssl->ssl_ctx->mutex); + n = RSA_decrypt(x509_ctx->rsa_ctx, &buf[6], dgst_buf, 0); + SSL_CTX_UNLOCK(ssl->ssl_ctx->mutex); + + if (n != SHA1_SIZE + MD5_SIZE) + { + ret = SSL_ERROR_INVALID_KEY; + goto end_cert_vfy; + } + + finished_digest(ssl, NULL, dgst); /* calculate the digest */ + if (memcmp(dgst_buf, dgst, MD5_SIZE + SHA1_SIZE)) + { + ret = SSL_ERROR_INVALID_KEY; + } + +end_cert_vfy: + ssl->next_state = HS_FINISHED; +error: + return ret; +} + +#endif diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/version.h b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/version.h new file mode 100644 index 0000000..72260bf --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/version.h @@ -0,0 +1 @@ +#define AXTLS_VERSION "1.2.1" diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/x509.c b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/x509.c new file mode 100644 index 0000000..37db7f4 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/ssl/x509.c @@ -0,0 +1,502 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file x509.c + * + * Certificate processing. + */ + +#include +#include +#include +#include +#include "os_port.h" +#include "crypto_misc.h" + +#ifdef CONFIG_SSL_CERT_VERIFICATION +/** + * Retrieve the signature from a certificate. + */ +static const uint8_t *get_signature(const uint8_t *asn1_sig, int *len) +{ + int offset = 0; + const uint8_t *ptr = NULL; + + if (asn1_next_obj(asn1_sig, &offset, ASN1_SEQUENCE) < 0 || + asn1_skip_obj(asn1_sig, &offset, ASN1_SEQUENCE)) + goto end_get_sig; + + if (asn1_sig[offset++] != ASN1_OCTET_STRING) + goto end_get_sig; + *len = get_asn1_length(asn1_sig, &offset); + ptr = &asn1_sig[offset]; /* all ok */ + +end_get_sig: + return ptr; +} + +#endif + +/** + * Construct a new x509 object. + * @return 0 if ok. < 0 if there was a problem. + */ +int x509_new(const uint8_t *cert, int *len, X509_CTX **ctx) +{ + int begin_tbs, end_tbs; + int ret = X509_NOT_OK, offset = 0, cert_size = 0; + X509_CTX *x509_ctx; + BI_CTX *bi_ctx; + + *ctx = (X509_CTX *)calloc(1, sizeof(X509_CTX)); + x509_ctx = *ctx; + + /* get the certificate size */ + asn1_skip_obj(cert, &cert_size, ASN1_SEQUENCE); + + if (asn1_next_obj(cert, &offset, ASN1_SEQUENCE) < 0) + goto end_cert; + + begin_tbs = offset; /* start of the tbs */ + end_tbs = begin_tbs; /* work out the end of the tbs */ + asn1_skip_obj(cert, &end_tbs, ASN1_SEQUENCE); + + if (asn1_next_obj(cert, &offset, ASN1_SEQUENCE) < 0) + goto end_cert; + + if (cert[offset] == ASN1_EXPLICIT_TAG) /* optional version */ + { + if (asn1_version(cert, &offset, x509_ctx)) + goto end_cert; + } + + if (asn1_skip_obj(cert, &offset, ASN1_INTEGER) || /* serial number */ + asn1_next_obj(cert, &offset, ASN1_SEQUENCE) < 0) + goto end_cert; + + /* make sure the signature is ok */ + if (asn1_signature_type(cert, &offset, x509_ctx)) + { + ret = X509_VFY_ERROR_UNSUPPORTED_DIGEST; + goto end_cert; + } + + if (asn1_name(cert, &offset, x509_ctx->ca_cert_dn) || + asn1_validity(cert, &offset, x509_ctx) || + asn1_name(cert, &offset, x509_ctx->cert_dn) || + asn1_public_key(cert, &offset, x509_ctx)) + goto end_cert; + + bi_ctx = x509_ctx->rsa_ctx->bi_ctx; + +#ifdef CONFIG_SSL_CERT_VERIFICATION /* only care if doing verification */ + /* use the appropriate signature algorithm (SHA1/MD5/MD2) */ + if (x509_ctx->sig_type == SIG_TYPE_MD5) + { + MD5_CTX md5_ctx; + uint8_t md5_dgst[MD5_SIZE]; + MD5_Init(&md5_ctx); + MD5_Update(&md5_ctx, &cert[begin_tbs], end_tbs-begin_tbs); + MD5_Final(md5_dgst, &md5_ctx); + x509_ctx->digest = bi_import(bi_ctx, md5_dgst, MD5_SIZE); + } + else if (x509_ctx->sig_type == SIG_TYPE_SHA1) + { + SHA1_CTX sha_ctx; + uint8_t sha_dgst[SHA1_SIZE]; + SHA1_Init(&sha_ctx); + SHA1_Update(&sha_ctx, &cert[begin_tbs], end_tbs-begin_tbs); + SHA1_Final(sha_dgst, &sha_ctx); + x509_ctx->digest = bi_import(bi_ctx, sha_dgst, SHA1_SIZE); + } + else if (x509_ctx->sig_type == SIG_TYPE_MD2) + { + MD2_CTX md2_ctx; + uint8_t md2_dgst[MD2_SIZE]; + MD2_Init(&md2_ctx); + MD2_Update(&md2_ctx, &cert[begin_tbs], end_tbs-begin_tbs); + MD2_Final(md2_dgst, &md2_ctx); + x509_ctx->digest = bi_import(bi_ctx, md2_dgst, MD2_SIZE); + } + + offset = end_tbs; /* skip the v3 data */ + if (asn1_skip_obj(cert, &offset, ASN1_SEQUENCE) || + asn1_signature(cert, &offset, x509_ctx)) + goto end_cert; +#endif + + if (len) + { + *len = cert_size; + } + + ret = X509_OK; +end_cert: + +#ifdef CONFIG_SSL_FULL_MODE + if (ret) + { + printf("Error: Invalid X509 ASN.1 file\n"); + } +#endif + + return ret; +} + +/** + * Free an X.509 object's resources. + */ +void x509_free(X509_CTX *x509_ctx) +{ + X509_CTX *next; + int i; + + if (x509_ctx == NULL) /* if already null, then don't bother */ + return; + + for (i = 0; i < X509_NUM_DN_TYPES; i++) + { + free(x509_ctx->ca_cert_dn[i]); + free(x509_ctx->cert_dn[i]); + } + + free(x509_ctx->signature); + +#ifdef CONFIG_SSL_CERT_VERIFICATION + if (x509_ctx->digest) + { + bi_free(x509_ctx->rsa_ctx->bi_ctx, x509_ctx->digest); + } +#endif + + RSA_free(x509_ctx->rsa_ctx); + + next = x509_ctx->next; + free(x509_ctx); + x509_free(next); /* clear the chain */ +} + +#ifdef CONFIG_SSL_CERT_VERIFICATION +/** + * Take a signature and decrypt it. + */ +static bigint *sig_verify(BI_CTX *ctx, const uint8_t *sig, int sig_len, + bigint *modulus, bigint *pub_exp) +{ + int i, size; + bigint *decrypted_bi, *dat_bi; + bigint *bir = NULL; + uint8_t *block = (uint8_t *)alloca(sig_len); + + /* decrypt */ + dat_bi = bi_import(ctx, sig, sig_len); + ctx->mod_offset = BIGINT_M_OFFSET; + + /* convert to a normal block */ + decrypted_bi = bi_mod_power2(ctx, dat_bi, modulus, pub_exp); + + bi_export(ctx, decrypted_bi, block, sig_len); + ctx->mod_offset = BIGINT_M_OFFSET; + + i = 10; /* start at the first possible non-padded byte */ + while (block[i++] && i < sig_len); + size = sig_len - i; + + /* get only the bit we want */ + if (size > 0) + { + int len; + const uint8_t *sig_ptr = get_signature(&block[i], &len); + + if (sig_ptr) + { + bir = bi_import(ctx, sig_ptr, len); + } + } + + /* save a few bytes of memory */ + bi_clear_cache(ctx); + return bir; +} + +/** + * Do some basic checks on the certificate chain. + * + * Certificate verification consists of a number of checks: + * - The date of the certificate is after the start date. + * - The date of the certificate is before the finish date. + * - A root certificate exists in the certificate store. + * - That the certificate(s) are not self-signed. + * - The certificate chain is valid. + * - The signature of the certificate is valid. + */ +int x509_verify(const CA_CERT_CTX *ca_cert_ctx, const X509_CTX *cert) +{ + int ret = X509_OK, i = 0; + bigint *cert_sig; + X509_CTX *next_cert = NULL; + BI_CTX *ctx = NULL; + bigint *mod = NULL, *expn = NULL; + int match_ca_cert = 0; + struct timeval tv; + uint8_t is_self_signed = 0; + + if (cert == NULL) + { + ret = X509_VFY_ERROR_NO_TRUSTED_CERT; + goto end_verify; + } + + /* a self-signed certificate that is not in the CA store - use this + to check the signature */ + if (asn1_compare_dn(cert->ca_cert_dn, cert->cert_dn) == 0) + { + is_self_signed = 1; + ctx = cert->rsa_ctx->bi_ctx; + mod = cert->rsa_ctx->m; + expn = cert->rsa_ctx->e; + } + + gettimeofday(&tv, NULL); + + /* check the not before date */ + if (tv.tv_sec < cert->not_before) + { + ret = X509_VFY_ERROR_NOT_YET_VALID; + goto end_verify; + } + + /* check the not after date */ + if (tv.tv_sec > cert->not_after) + { + ret = X509_VFY_ERROR_EXPIRED; + goto end_verify; + } + + next_cert = cert->next; + + /* last cert in the chain - look for a trusted cert */ + if (next_cert == NULL) + { + if (ca_cert_ctx != NULL) + { + /* go thu the CA store */ + while (i < CONFIG_X509_MAX_CA_CERTS && ca_cert_ctx->cert[i]) + { + if (asn1_compare_dn(cert->ca_cert_dn, + ca_cert_ctx->cert[i]->cert_dn) == 0) + { + /* use this CA certificate for signature verification */ + match_ca_cert = 1; + ctx = ca_cert_ctx->cert[i]->rsa_ctx->bi_ctx; + mod = ca_cert_ctx->cert[i]->rsa_ctx->m; + expn = ca_cert_ctx->cert[i]->rsa_ctx->e; + break; + } + + i++; + } + } + + /* couldn't find a trusted cert (& let self-signed errors be returned) */ + if (!match_ca_cert && !is_self_signed) + { + ret = X509_VFY_ERROR_NO_TRUSTED_CERT; + goto end_verify; + } + } + else if (asn1_compare_dn(cert->ca_cert_dn, next_cert->cert_dn) != 0) + { + /* check the chain */ + ret = X509_VFY_ERROR_INVALID_CHAIN; + goto end_verify; + } + else /* use the next certificate in the chain for signature verify */ + { + ctx = next_cert->rsa_ctx->bi_ctx; + mod = next_cert->rsa_ctx->m; + expn = next_cert->rsa_ctx->e; + } + + /* cert is self signed */ + if (!match_ca_cert && is_self_signed) + { + ret = X509_VFY_ERROR_SELF_SIGNED; + goto end_verify; + } + + /* check the signature */ + cert_sig = sig_verify(ctx, cert->signature, cert->sig_len, + bi_clone(ctx, mod), bi_clone(ctx, expn)); + + if (cert_sig && cert->digest) + { + if (bi_compare(cert_sig, cert->digest) != 0) + ret = X509_VFY_ERROR_BAD_SIGNATURE; + + + bi_free(ctx, cert_sig); + } + else + { + ret = X509_VFY_ERROR_BAD_SIGNATURE; + } + + if (ret) + goto end_verify; + + /* go down the certificate chain using recursion. */ + if (next_cert != NULL) + { + ret = x509_verify(ca_cert_ctx, next_cert); + } + +end_verify: + return ret; +} +#endif + +#if defined (CONFIG_SSL_FULL_MODE) +/** + * Used for diagnostics. + */ +static const char *not_part_of_cert = ""; +void x509_print(const X509_CTX *cert, CA_CERT_CTX *ca_cert_ctx) +{ + if (cert == NULL) + return; + + printf("=== CERTIFICATE ISSUED TO ===\n"); + printf("Common Name (CN):\t\t"); + printf("%s\n", cert->cert_dn[X509_COMMON_NAME] ? + cert->cert_dn[X509_COMMON_NAME] : not_part_of_cert); + + printf("Organization (O):\t\t"); + printf("%s\n", cert->cert_dn[X509_ORGANIZATION] ? + cert->cert_dn[X509_ORGANIZATION] : not_part_of_cert); + + printf("Organizational Unit (OU):\t"); + printf("%s\n", cert->cert_dn[X509_ORGANIZATIONAL_UNIT] ? + cert->cert_dn[X509_ORGANIZATIONAL_UNIT] : not_part_of_cert); + + printf("=== CERTIFICATE ISSUED BY ===\n"); + printf("Common Name (CN):\t\t"); + printf("%s\n", cert->ca_cert_dn[X509_COMMON_NAME] ? + cert->ca_cert_dn[X509_COMMON_NAME] : not_part_of_cert); + + printf("Organization (O):\t\t"); + printf("%s\n", cert->ca_cert_dn[X509_ORGANIZATION] ? + cert->ca_cert_dn[X509_ORGANIZATION] : not_part_of_cert); + + printf("Organizational Unit (OU):\t"); + printf("%s\n", cert->ca_cert_dn[X509_ORGANIZATIONAL_UNIT] ? + cert->ca_cert_dn[X509_ORGANIZATIONAL_UNIT] : not_part_of_cert); + + printf("Not Before:\t\t\t%s", ctime(&cert->not_before)); + printf("Not After:\t\t\t%s", ctime(&cert->not_after)); + printf("RSA bitsize:\t\t\t%d\n", cert->rsa_ctx->num_octets*8); + printf("Sig Type:\t\t\t"); + switch (cert->sig_type) + { + case SIG_TYPE_MD5: + printf("MD5\n"); + break; + case SIG_TYPE_SHA1: + printf("SHA1\n"); + break; + case SIG_TYPE_MD2: + printf("MD2\n"); + break; + default: + printf("Unrecognized: %d\n", cert->sig_type); + break; + } + + if (ca_cert_ctx) + { + printf("Verify:\t\t\t\t%s\n", + x509_display_error(x509_verify(ca_cert_ctx, cert))); + } + +#if 0 + print_blob("Signature", cert->signature, cert->sig_len); + bi_print("Modulus", cert->rsa_ctx->m); + bi_print("Pub Exp", cert->rsa_ctx->e); +#endif + + if (ca_cert_ctx) + { + x509_print(cert->next, ca_cert_ctx); + } + + TTY_FLUSH(); +} + +const char * x509_display_error(int error) +{ + switch (error) + { + case X509_OK: + return "Certificate verify successful"; + + case X509_NOT_OK: + return "X509 not ok"; + + case X509_VFY_ERROR_NO_TRUSTED_CERT: + return "No trusted cert is available"; + + case X509_VFY_ERROR_BAD_SIGNATURE: + return "Bad signature"; + + case X509_VFY_ERROR_NOT_YET_VALID: + return "Cert is not yet valid"; + + case X509_VFY_ERROR_EXPIRED: + return "Cert has expired"; + + case X509_VFY_ERROR_SELF_SIGNED: + return "Cert is self-signed"; + + case X509_VFY_ERROR_INVALID_CHAIN: + return "Chain is invalid (check order of certs)"; + + case X509_VFY_ERROR_UNSUPPORTED_DIGEST: + return "Unsupported digest"; + + case X509_INVALID_PRIV_KEY: + return "Invalid private key"; + + default: + return "Unknown"; + } +} +#endif /* CONFIG_SSL_FULL_MODE */ + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/bin/.htaccess b/feeds/luci/libs/luci-lib-nixio/axTLS/www/bin/.htaccess new file mode 100644 index 0000000..4496fa9 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/bin/.htaccess @@ -0,0 +1,2 @@ +Deny all + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/favicon.ico b/feeds/luci/libs/luci-lib-nixio/axTLS/www/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9f6f30e4c6de09f2e93be5e3cbde8a97850b1989 GIT binary patch literal 22486 zcmeHu30zf2nr~sceZHA_-90^TmN&28Jk8Qcr;~KLlTO^lBt}i5G10h0RE&xU3Kv;K z5JYwq1!TJ*!ezg*URf{uWl>gTQ2|8(#Rd0WP}KkX*TEZUC+SY+b-$VSn-qMv>YP)j z>Z`BnRMo$}?-RmAj23UcDHx9t+MftvA%qw^_Q~}aA%5~xA%6C=;cLqu3sLZo;z|Co zLi>^s|MI_#`FYKJ2j4U1A1f?>B!ta;AzopbtU{QRWIZx?{FM?7|Cl^Y0}vh_9=zef zSosyby}jgVtk7sQ!ra_kco=wX&a{Vyl{4#DbD=R9gsG-in3Lqq-d3gZD`0B%u*xK$x0q$fJh5YsfF_A+H*ep|@8I4h{-uXJ_H>?=SlM`$b({o#^cB z6k4rT==FM`R;$Gz+pkhN3tjJ^Xt^;cH2ON0rxhBlPSmw@l9zs=>l|dhK><>5u%2c2 z3q${)P&unuzDjto{9v^|%h9qftqAtl@tWmpTZG=wA`G3qthZO_T4Y%_gueHNs3U1v zuAb!>SZ^oES;ewE{Dpt8KV!8}S!!4g+c!%qoXL~QQY$>1wL-0t{4vdX{8^7irx*Tg zd$88Pb{T{^xK5~bEkaw@!ZwpyT7=HfDRgz6LNAH!GLTv*3x9nt^Yscn`Ku$T4gI2p z?dznxdP#cnTh~vXTgWSAR7Za6$ZIc2rLrVH&Xj|PaQ5&Jv&Q=iOUq!UgDHn#VYyf> zELCdCOii8`Q{EblTFiP=BP`ixmTaHOSwk6W*cT)X+iI#6mTa&2Vz!rLDcenQmTmW^ zeARq5OUL)vcD7$FNkh`=gjS~$ix=zpo}Tj33lEZ|C1pdhR5A9@vu_x)57m-nA8GVL zOHykoN0OGLraX0$^z3VrzrTUc3@o29<*PSP)|xuXo20AbI3{sysr4;3JxEpO`7 zytXM9CC{T>rjD6*c-qv7t5;7PGiHy>{N6kn6lvP@18nw;+hGgX8HwrxB0mwu37!r zy!Upmed`O|oH>T7DnsI$;Lj#Z9K(jYOqnue^u_VrWBB%j;CY`P4qCNp>wEVn+#h;t zPV?f$i#KgL>FT=0&D(S^Ji2z)@maInyl4B5A3tU4gn7FUga!xS%~=(+bkvag!Gd4> zV$;d4cY4gsmM!aBabb$uYEIJ<*S636CV5Grp)=bv*G5K!yIuLxGVE4Z^Dj2N z^Nx?tj*rfrI~O?D%vYP$v%7#f z+y2&P$GLOn<{zE$@hvV}(zq`2a~sFQM?A)lUovxJr~8-fUo0#w*6X#&v0?VD+nD`t zFMV|G{Xp}}@A&w(RZX}b9K3qM#ON{8rd;ee)al;g>^fu797AJS>4r2-OY636+k7r9 zJNN#lfggReWBI!k>fO;15uZPvFk#f5+U{dB+Gljk=-9Y1*Df<-{elJMGrCUr_?-L5 z{QXZqUHQ@b0q3_qNC{7f3y&CMI)CEC=sf2|b}E&f!=mb3)q(}7v0)9ao@SKH`|r#A z@4vr%dt+E^vQ!*&%TeKl{n0#T7igbpH}}_qhSfmVf%y2iJFfu=D&} zzh1|tw--Cgn04T5oM_t+g(;E}hd*`r+a)y_PRuzEbAjwS2B`Vs!2C z%{5ClH#wCS?0YM6_Nh~zo+ppmXQ=FE9Gc;$GDqI`7%$R>w&{}o&)~2C}A##xK4xc(& znGNR8x0oMeS+FqoV2izdc2R0+d-LL+xhpPQ@SDBvix1nEY=|BcZECtVA@yy3z~etL z0W2&m5(+oO$4C9Hq`)fu?egYRbLXz`_4b%vXQL@~b&Aido7^_7G;87TByscRz`Rir zsg!VXY^+sr*`k({US3~%&%VkTp(*~uhQ-AnsxqQ1vy$H)&Tm16a8I35tSu-^U-(5v z&QG14J7)EdpFW+>{VRW0=+sbHP*9M(e)e#F{(gLR^2~5`>06d>g-66B+2lE%zWT|> z%ztD2C#Qd^Td=-i!+Lf2tgo}n#KlQVXWA^CsoMg_r zoy~Q`LBym_Fp|VQ8e$%edKfe6h-nOU65G@fC)N=I5xWq>NbDlb zl-s;l)MDN&%1vTXb2al*jwBC>MOpy1S~5*i@TrRU)cFZc_2)T2@GxEtCT3NWG^AiH%NWo8kp1GUBag(fq+l6) z@E-B3g6o5MPtAMmGX>i+*2%QQxTboxNiS5A=8+cb6};=OV%nK$4?X2a+)4^2Ir}qB zlGxXo<5W2_;27}N5bKg8{*|~_o+IcD%wx&38fOFfG7u*-<~Wh(3;x8w5(le^gC!Q$ z5(oRMiF--@5)YGfBsFodMiQ~Ho}}ft(v!3tTM{R?kTmKRzC+?z3noeItRrc8UZUZc zlV=x349ySw-!=R>*6(r8z53#dFOC~$Vlr+V6H4l7xxDw%3k+-t2W@ zVC5RC*KKWo{hHZ93yTL>!RIFoOD+3~8{T|#hSvw?<^z9YWo!Gom6gS@H=dt7>g5+! zkGruHk01YbK}Tz$_Ne)qHP)}c{rlHnf9-cWO-=ngpC9$|OJ6QJ+J5%8pOtCyWZ@=;Puf27>sJk|A z_isLa?zxp$3T7wG{3u2Lt3#J8Uwchu|IRxb-&$O`eA%+g&2PS+wffSQs@4Pei(YmS6|9HtO>X%nMD4QP{nfrO^s+IQ_HGbM`c8||(rhj0uYt-|j z+`Qvnr0}-~?3g|;yW&X8r?VFhTD|qwx(&KivxVXDb3U2XV=`g9iG#!Bt#7^=96Yza zZPCiLmg`h5|51DeQ_N3vR~hM*JRwp36q{?95>Nq z0yF$M!oTas$I6HI3r~Ol()>KFX*ebKDLiUd_A17Gis^{Gi5QXQ8{*NUN8-VQhvMPT zBQZ4ePz*g}n)e<*ek>k80`EOyp2y-5uko1cJ|2q8SFVT)m(Gcb@@A2|r&<)`)ryL` zdePp~qnu+u#v@VJcv5KM>xCxfptx}UD(e^$TYMeF7H=0}`&FD+yH+b!EYu3mZ8<_y z)+U;IFNsUnuZj4?GU2gBFMNH|h0WSHu_v@v?9DF_Q8^_dD6T@pmeh;wdn<*_szQ;H z+aU~RZ;R%O*F?;|8ljHL5J4e+B0hDmh}EQtj`nk+@o_-Bf;%4!jlRw3fJHtfwh zAa;i33yY;G!o@X5#2)AtF$XV;obCZp&^sXXr*4RCj;UhVyzRo(B|yZ)M2bT49vPP) z;AyM9SN5n z-Me>%E;~zjdHD!;4^L58T_eis8-$gGov>ATiS1!oB6M$wh)b_#yZ4KYR$E1iHdmC_ z91?BqC&V4T-`(9U4jecr_U%g(Zd=^M{{7h^DM=&T-L?pO)ka}wV=J7UoJ2xmoXFv` zl;lKVs3;e=Z{HT}?d{^^$&=#Nty|*i)vKcGWS6pcyl~+H#|Xqjju+>NKUc`WvGx8$ zGx6#BUx*oV7l^Ub=ZdlOXNU!}=Zg7e)5RPaFZf(6`1Et}hSf^3lH>HoyFXV*j@eI0 z(?~MBLHb^0nQ`13ej<(@|A~0`J>DJ9ypu@svyk78tkZUtqgZ3(AjYn=A^&TH!#W#b zPyRQ^*kPk^u-zzB%=>@CtLe{vE+ozS9(78YO=f8MAxTm@y_M0o!*3n(W*a6dYn=GG>em&m7&idTjIb^7ird^S82Izrn^< zWw+7Z!O>}x^X7k8%EPf0<}1HiwR(*Oml>;%KbbT4(|MnLK7YX%3l}Y3^5vw-Q>IQc zo&MhYAI$i0=B(Kt{ra`n-}ud&zx~}?Z~y+CcgIhd_`m+;e~%sa{0lF>^vjoD`PHi? zCO`ez-~RmX{`=qmgULVs)BpJA|2gUx#rT^K3BQGse$8fA-p#PsYadH{~%t|4YZRZX+Kf>oVSd z_TI?*+;1!I%6MpK2>0*bSBU$lKe#_K-^jEqTV5OQjjZdN?mhe5n8z58d_FQQd6vO= zZ)AR%mV9$Rh@PGvoH}(1JZHq6J9of6BQ9OKgv*yNE9rap?kRcYJH{Z}D&MEg3%IYu z_3PJh?b%aNU( zjUv4s_4W0rud72vMFnaO9KeYaCqQjAxCd9>k?+a0yeHp1a^whVYinUJ7*JYTs!&Nu zi4xb;)S$V!1zlZTN`7NoWEms*k!d4OvYkf$zbTe7lXAIo<%%NXUh+`Mx|5QV5w2E) z=er0E4Mj*u2+~uvXliIc&*{^+c;&LvAF{6w9XbS_0V5?P1yNB^2o4TLU|=A4K8%2X z0QmWleEqO%*G@!6Mj$aUQIV09#rgB+m9`lBNAf}CFix`$o^_+IuTSAi@+kXuWP4;A z<=Bw<8pu~eV7}&o!v&*JJ|ENBeuA1QQDZEp02dJxVRXVm6eeF zQ&d!h%*;%rrKMrtzJ18b%0g9D6^R0Agcfk(iKxh|n;~)er9O?%3?SnLIlwygHCadwcS2uY$_X zma(0}yUI?b+_QJEQ}S)1OuW3jzV4%)J9n~wb}84}wt0fO26%aUVJGiN8P(R-Dg4TB zNA@{w$&jC)kKDXGXvzD|;2`GrM?wn62*+qbQWAW9{Gd|VBcADy-MiuF;)-qF-q`9! zIXgN)MfuuE{>YP!Y6EO+Z5eNbjg15BRj$}*YZ!9AtL&@*w zza3jWec-Uk0bATWk(io^<7Y3R@9sU+A3uqb$_BKb?MKbw7DPlQz{@j`JgMO1sNxv0 zB`+J{=;Q&9tx@pwjEAp(8UnWOM_5P+c_=_+coCBJ79b_I7;!QA2#-!;`+Z?=vmTD@ zE6KaBuQxRDdpTd^qptQKT3Zg2nsM~#F?4peqpRmQ&YbO4#*gH`t*uS@hUA#`*t!k= zK7nxFL^*Aw4B78)e*Vx^RHOIC0J^T+LD%&=sA@S1m8~6A8*Jh1v>7TZ6>P0G!NW5a zp}UI7S1tCWG((-*ggxoa*qhmcJ-TKjlyo4crVH5y(t#7mZ|Fip%X!4aM8Rq$$ED?V z>(calyB08 zJ$E0WXnaB}y9o$UtLZPVc?Hequc7@! z7c4&w#EO|2*d0=g?EGrz%R7-eW*U%kK)=6)U|e_x%DLHpldv;8eSvPbvcNR zi-)tjheEMh9kR*}!7nTwp6-$G_6&yGmLS;L>_&cFCr%9BLsiFd*jvS6`mg=*&!g61 z<^+EP#y7$xtOlXF79>@i!rrQrP?uf6p7OKMAGw3`G3j}T*A;^{hA3<~hSH;bNH1)LAHTmK?_BJ5D#8v+J-oikhu5+K z*nF0WMbne<*_(SX>s@aI#u>0Py9EK6UD%y}0{(fuu-tVV8~sjUf6F~&9UDY!=OFf< z89?!=0i?7KprC62Nd*@XQF;Z3&iA7%zmfAxE}UI9aqi+cwzuNkumO&o$F?{*A%OGe zZmxxKoUe9s^RFm1NK{Yz@2NR zhnoxMCKt|e&e+B|CYyh$V&d zo7fSZ1Mko*xcjHW#yW%RP6kvq``{m1h}ir(?BTZ>T-gnE^*O}W^ds@`HDnyWhvd#X z$m||K<%NeRzjz<|vjc3?Aad9b1zp!*;9OF6r~{u*+k!Qp#>2)k2rkZvur?>H4T0;n zK*Yy$Y{#e(ygLZneSNTo43wYH}4mea#>9-_T<5q!^gZ+5?N( z=~(k|BG$1zDXB#$GgP3io_j~`|5CXZh>eTozA_6zQF(B4p-fk5;jlr6)n930wk!=R zmZidBa~{^Nr<^zCz;SCfR;);NrNcrA41vX2dKaF5C=(hmj_UObqGc0ZlS8@I;wjwqP(;gYVT}#+v*TtSB|ag z3^02;3tzmH4YN-)*kBU|JEvf{dxaw*IU6TW_M)Tnm_p(4Rq*o5g7dl*s21+S>W|3V z)Kn~=oC32C7=N@6%P0pcKC}Hi4K@q*VavKq1iR%!y(0(us#X-Vb)x79_u8i}BLCPG z>_2`Dg?+bCe&s$4*N1TE_G28o{s?uq9-(!B?O+=!`^bAwKRT{n#u3hs`8hS%pI(Ld z=n8(vt%%y$2=CQZSW9`WSr(6F3*xbG?ryky#38?k>*<;ExOwLmw1>_kt?@L%v+J;B zdk*Z@rNZf}bhxfagNs=j92Y0SZIu>2RvB<#oru7#xd;i;W7p0~t_!7DWtk3j@)1+E~6Il;mrtitcKm<61HU@+&q)8%_jsseHRd4cO0pQ zPC(mmlGKBk18oQ^Y=w{3fQ>$B*t#nZ+xHY>udW_@a;p$qa1g<%6|i6*EM8QMY47fX zwM9Ovj-AGltAiX5*HL=<25K(eL+gzp9J@6{{vV+6+FcyE`v47Buc5sAJWk#kKzdd! zKAU3!FAsMF2ZbOjSI7NgGg{l)aj>=tc?JCTBEk@@-iw05QWTdSLZE*MY}O~i$t?o0 z$r;#_U4*@P<%lghh`5r&(AFPAe03XkCRIaS(h7CyG594^WB2}QXb&`VFVKXLcmvj$ z=W_2*jCBi(;OCTw(u$Kv%0G%7+D2qH_M`UvZ5+OS7j3s5;Lwdb=(ux_^1g({U%A0I zG7o32-Nf#IY^++b1+JSN;p*rLAMR&EcZY&TxCjdk#ug86*g13G9JHMn#DHtJuHY)M z=lSzDP~UKbW2g@yd&03RI)XBe!uGv;5t5>TXGjV*tkxj0unzl=b|Q;oJ1F}wLMSi4 zm=ZX8k#DZV@gq}0RSlJnsXVh0x&xNLTTo0~iLzHV@F-Nd=h7wguCAz7P=p6*i^ z9Jv1kVm~%QZS0KVdJ*Z59bo|ojM#zTm{9J`V`2AMK5;-cB6Mkp$SuU~v_|;Fm%}fy z5>}3xSj#bE&To19mI7pEH6b*y0ekoLAeDQc%ClEc!|~tTe+x&i-bDMkOT?KMuroXX z-rgx#WxfxoS?#DU?tqt53VcGNph?y!d;PGm-H41(BPLD_7ni+Q`gsz+=Q0co-2EEs z4-HAoFZV!?INxu<)<8FS1$n|J*c1LC0dP{qzAixAGna9I@gdGHP2D{>a`GhiT#t~cFGlDd z&T$qAaNEXjRDTBQT{TcSXy6-_iri8?4sedIuBu02aS1$J3$WzFBJAYaBlnwM_DApmMdrR}P2#F%zjNFcZV1KyzI#bqbVX-s{HgmGzYt8ZgWd@wS$b+kSKDMpT#7-|A{C%~= znEMctl!w&%YV14Mh|~jzkW<@+8seKvSFYjV1D?gm^AGYa`Imu`L+`oE*ppO(FU=yb zd3_n8gX^5zL=f`o7L$!!|&dBCiIv}YvWmvj7Nt198>*Q zFXBK`17ef1uxiy#tX&$zF`h##kN^i&G<>%uz{-9noV?iP*eFCMCn7o_1 z{nSa^;#hsiJ^B#KyHEZfkRFpB4L!sF_r1Un+D~^Qy}S}W+q1FWCKc8*AodG&^2&1#GbLQPc>@0L*#!rnFRG*5&nf*jG<1LXU5*`D#>ikS*BCz<(bw#3Svheg zzx5}tJ$N+0+rwjFWH~Y|%aG&5SeA@=@dw$AZISJJ$o_c1{C9|DFWtUQS@od*;$^m7 z&XdFEk#e4S^!Ndbk@AqmJw2y1)=Aq3h0lkKmA+;y`&-IMVtnQN?!kQw@XTw7ZF#_Z z4|v`sN%osDpVF5sU&h9=N4CY7HulZX!w0xKIKa8_0n1`N6J7W|*xYYI2c3H78G1_0q zShhj(C(DraNxmemlq78wq|UaMdaR?2OUp_XdkQ-{J8Y+oL`6jf&pvCR%hu7}B1+NA zZ`$NU-HSbSy3{K%A05kK?`X&Kt<8$PLeBmi#eSizv`n!#NT5wcGTT*FR)#ZY&L}dJ zwi7KaEs8x!iZ&HNLAz02S*6&fczRH8>>mIR+5qeb+)16KC-vC0b6|Zow(F_awxzz< zp871_vtdl4O*huBx1!$Kfi@MJv1N-Je0;nSKsy9!XAv9}gf!YbbaZqmGLSYI5fKs8 zZ~MbV+E&o!V86Z;$If4XfqLQ=>M-}lr&7O2U6aEGY*g7&kK@PlKI+l8)21LOkNTTJ zMDNk_Jg=Dg;5^E04;(kz!O`B4^#xJ}`KYa{Rr>63%Mlzu)kQu31qDMlvafg1u7Nhh z2-q18=Pg@dZM_ZwyTWkn+%;Sp0-|H$uy&Ob&kVOvcOC_Qbq)4rAHiNd&(w=fA*1Fj zGMg_Vr}Yxbk6ywto=?W9_rd(*P-qegP*vA~%En$CY&i?Vp)PcEo#z-BVE;cvT6Qk$ z3WbO7c4U{-VOIq8C0oO=-pU`IemO97^uyaL53l{5Gp4-Gv&fhR1f(89Z21Z7qE0uV z@*;H9hefyDM8c8VDC)S05}q-pQ%A4*xR83$^VC(JL{{-(6gC{gftC&&@9Dt+&n9F@ z$krn|Rfqi*wJ1N*jrg=01bFd$&8`6UUu404X&#o$NXPI0-W%4o@z|Z$fnB;zY)d~0 zRbVgD>Te;wV*qITbhPn% z8sJ$%a#1ZZ4UNzrZbx?A5oA}lAWB<|uqGLP>&QHQ2fCg?&{ve_l+^!Gw^?%L7IY?D=FNfF}!*b!HXh>S8s?&G<1Y7RF0Wx$sD$VGEfv20;H;<6g3N8nlX zp$m%5Ko)iHX+6|?QEz9sa348+tiSgTbz(Q*?V5@?uZCmId<|BAoQgGHhI1Tip)V;! zc4j*3k5<0L9icgJuujH$vs9RUmVy=Ysjpw1g>}@USbmj;Wglf=&0LAHk9D_pRdb7QO~9_6&< zD&l+`#WU3i+LhJT9m4+XRs`AAo zm9TLx!m`hE5$aWhlznZ~wXjX?v=O;}k8Qt?lUHtIi+dETRq?1f*aLTm-SFJz4j0x16Bn$p^oE*tJy)*wE8m?woRVu;Km_N;P+#iv{jqghB%I805D=M!9mzRx2`YqB zKna$A$+O$9vaokgHA0gPLsxqiRcEiEf%?7{+993lJCD%lR9IQ3B0Zx6d&A1GZC4bM z(h_J}mX5S6o&!_=8yRBY8qTxH2Xf6BQr7d;b}OkTSPeVZ^{{txhwYLK*euGz=O6FE zXH(;0_E8obsPhQ+q3%1m8k*{M6jL8iLA_*0?|EG2`YX@uj`yCTO#sJ_Di;Y6ZE&+I zg(r39fwUj+a?8bnDV(Ee$0EZ+p7R;k7|(fi?m1oKc=d8utZHGKRR@(KXeGkaTRqj^?Xjfz`!`SD;bw51|mQ^U{vr?Aa zi#%XEqz+7;Da&@zKTpw>7hC#^0e> z*#=qtH?`$Y-IL5J?>~wERQ{*WpT0K&3jC1#Pbh(B2mD`J1kcv@hkm> zsX9MFdw^x+15xIrIo(1)8?l6G%v<3Jy7W4D987JFduAW|V6#{l{r%O&i6SgWNA%RmKo~$iFV<+Y)m9e7cN1)gv3{ wd^r{+DSI!jjm9Q)Ue*Z7#&-;ea|MdHoYJBhi0G)?VF8}}l literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/index.html b/feeds/luci/libs/luci-lib-nixio/axTLS/www/index.html new file mode 100755 index 0000000..25cd2e6 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/index.html @@ -0,0 +1,7106 @@ + + + + + + + + + + + + axTLS Embedded SSL - changes, notes and errata + + + + + + + + + + + + + +
+
+
+
+
changes, notes and errata
+
Type the text for 'YourName'
+
@@bgcolor(#ff0000):color(#ffffff):Changes for 1.2.1@@\n\n!!__SSL Library__\n* Certificate verification now works for Firefox.\n* Extended the openssl API.\n\n@@bgcolor(#ff0000):color(#ffffff):Changes for 1.2.0@@\n\n!!__SSL Library__\n* A self-signed certificate will be verified as ok provided that that it is on the certificate authority list.\n* Certificates are not verified when added as certificate authorities (since self-signed and expired certificates can be added to browsers etc)\n\n@@bgcolor(#ff0000):color(#ffffff):Changes for 1.1.9@@\n\n!!__SSL Library__\n* Now support MS IIS resource kit certificates (thanks to Carsten Sørensen).\n* Fixed a memory leak when freeing more than one CA certificate.\n* The bigint library had a problem with squaring which affected classical reduction (thanks to Manuel Klimek).\n\n!!__axhttpd__\n* Brought back setuid()/setgid() as an option.\n\n!@@bgcolor(#ff0000):color(#ffffff):Changes for 1.1.8@@\n\n!!__SSL Library__\n* Now using a BSD style license.\n* Self-signed certificates can now be automatically generated (the keys still need to be provided).\n* A new API call //ssl_x509_create()// can be used to programatically create the certificate.\n* Certificate/keys can be loaded automatically given a file location.\n\n!@@bgcolor(#ff0000):color(#ffffff):Changes for 1.1.7@@\n\n!!__SSL Library__\n\n* Variable sized session id's is now better handled for session caching. It has meant a new API call //ssl_get_session_id_size()// and a change to //ssl_client_new()// to define the session id size.\n* Muliple records with a single header are now better supported (thanks to Hervé Sibert).\n* ~MD2 added for Verisign root cert verification (thanks to Byron Rakitzis).\n* The ~MD5/~SHA1 digests are calculated incrementally to reduce memory (thanks to Byron Rakitzis).\n* The bigint cache is now cleared regularly to reduce memory.\n\n!!__axhttpd__\n\n* Improved the POST handling (thanks to Christian Melki).\n* CSS files now work properly.\n* Lua's CGI launcher location is configurable.\n* //vfork()// is now used for CGI for performance reasons.\n\n!@@bgcolor(#ff0000):color(#ffffff):Changes for 1.1.6@@\n\n!!__SSL Library__\n\n* ~RC4 speed improvements\n* Lua samples/bindings now work properly\n\n!@@bgcolor(#ff0000):color(#ffffff):Changes for 1.1.5@@\n\n!!__SSL Library__\n\n* Session id's can now be variable lengths in server hello messages.\n* 0 length client certificates are now supported.\n* ssl_version() now returns just the version and not the date.\n* ssl_write() was not sending complete packets under load.\n\n!!__axhttpd__\n\n* Completely updated the CGI code.\n* Lua now integrated - Lua scripts and Lua Pages now run.\n\n!@@bgcolor(#ff0000):color(#ffffff):Changes for 1.1.4@@\n\n!!__SSL Library__\n\n* Fixed a Win32 crypto library issue with non-Administrator users\n* Removed compiler warnings that showed up in ~FC6.\n* GNU TLS certificates are now accepted.\n* Separated the send/receive headers for HMAC calculations.\n* Fixed a compilation problem with swig/perl/~FC6.\n* Fixed an issue with loading PEM CA certificates.\n\n!!__axhttpd__\n\n* Made //setuid()/setgid()// call an mconf option.\n* Made //chroot()// an mconf option. Default to //chdir()// instead.\n* Removed optional permissions checking.\n\n!@@bgcolor(#ff0000):color(#ffffff):Changes for 1.1.1@@\n\n!!__SSL Library__\n\n* AES should now work on 16bit processors (there was an alignment problem).\n* Various freed objects are cleared before freeing.\n* Header files now installed in ///usr/local/include/axTLS//.\n* -DCYGWIN replaced with -~DCONFIG_PLATFORM_CYGWIN (and the same for Solaris).\n* removed "-noextern" option in Swig. Fixed some other warnings in Win32.\n* SSLCTX changed to ~SSL_CTX (to be consistent with openssl). SSLCTX still exists for backwards compatibility.\n* malloc() and friends call abort() on failure.\n* Fixed a memory leak in directory listings.\n* Added openssl() compatibility functions.\n* Fixed Cygwin 'make install' issue.\n\n!!__axhttpd__\n\n* main.c now becomes axhttpd.c.\n* Header file issue fixed (in mime_types.c).\n* //chroot()// now used for better security.\n* Basic authentication implemented (via .htpasswd).\n* SSL access/denial protection implemented (via .htaccess).\n* Directory access protection implemented (via .htaccess).\n* Can now have more than one CGI file extension in mconf.\n* "~If-Modified-Since" request now handled properly.\n* Performance tweaks to remove //ssl_find()//.
+
[[Read Me]]
+
axTLS uses a BSD style license:\n\nCopyright (c) 2008, Cameron Rich All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer. Redistributions in binary\nform must reproduce the above copyright notice, this list of conditions and\nthe following disclaimer in the documentation and/or other materials\nprovided with the distribution. Neither the name of the axTLS Project nor\nthe names of its contributors may be used to endorse or promote products\nderived from this software without specific prior written permission. \n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\nOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.
+
[[Read Me]] \n[[Changelog]]\n[[axhttpd]]\n[[License]]
+
<div class='header' macro='gradient vert #390108 #900'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<div class='headerForeground'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu'>\n<div refresh='content' tiddler='MainMenu'></div>\n</div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>
+
!@@bgcolor(#ff0000):color(#ffffff):axTLS Quick Start Guide@@\n\nThis is a guide to get a small SSL web-server up and running quickly.\n\n!!__Introduction__\n\nThe axTLS project is an SSL client/server library using the ~TLSv1 protocol. It is designed to be small and fast, and is suited to embedded projects. A web server is included.\n\nThe basic web server + SSL library is around 60-70kB and is configurable for features or size.\n\n!!__Compilation__\n\nAll platforms require GNU make. This means on Win32 that Cygwin needs to be installed with "make" and various developer options selected.\n\nConfiguration now uses a tool called "mconf" which gives a nice way to configure options (similar to what is used in ~BusyBox and the Linux kernel).\n\nYou should be able to compile axTLS simply by extracting it, change into the extracted directory and typing:\n\n{{indent{{{{> make}}}\n\nSelect your platform type, save the configuration, exit, and then type "make" again.\n\nIf all goes well, you should end up with an executable called "axhttpd" (or axhttpd.exe) in the //_stage// directory.\n\nTo play with all the various axTLS options, type:\n\n{{indent{{{{> make menuconfig}}}\n\nSave the new configuration and rebuild.\n\n!!__Running it__\n\nTo run it, go to the //_stage// directory, and type (as superuser):\n\n{{indent{{{{> axhttpd}}}\n\nNote: you may have to set your ~LD_LIBRARY_PATH - e.g. go to //_stage// and type //export ~LD_LIBRARY_PATH=`pwd`//\n\nAnd then point your browser at https://127.0.0.1 And you should see a this html page with a padlock appearing on your browser. or type http://127.0.0.1 to see the same page unencrypted.\n\n!!__The axssl utilities__\n\nThe axssl suite of tools are the SSL test tools in the various language bindings. They are:\n\n* axssl - C sample\n* axssl.csharp - C# sample\n* axssl.vbnet - VB.NET sample\n* axtls.jar - Java sample\n* axssl.pl - Perl sample\n* axssl.lua - Lua sample\n\nAll the tools have identical command-line parameters. e.g. to run something interesting:\n\n{{indent{{{{> axssl s_server -verify -CAfile ../ssl/test/axTLS.ca_x509}}}\n\nand\n\n{{indent{{{{> axssl s_client -cert ../ssl/test/axTLS.x509_1024 -key ../ssl/test/axTLS.key_1024 -reconnect}}}\n\n!!!!C#\n\nIf building under Linux or other non-Win32 platforms, Mono must be installed and the executable is run as:\n\n{{indent{{{{> mono axssl.csharp.exe ...}}}\n\n!!!!Java\n\nThe java version is run as:\n\n{{indent{{{{> java -jar axtls.jar <options>}}}\n\n!!!!Perl\n\n{{indent{{{{> [perl] ./axssl.pl <options>}}}\n\nIf running under Win32, be sure to use the correct version of Perl (i.e. ~ActiveState's version works ok).\n\n!!!!Lua\n\n{{indent{{{{> [lua] ./axssl.lua <options>}}}\n\n!__Known Issues__\n\n* Firefox doesn't handle legacy ~SSLv2 at all well. Disabling ~SSLv2 still initiates a ~SSLv23 handshake (v1.5). And continuous pressing of the "Reload" page instigates a change to ~SSLv3 for some reason (even though the TLS 1.0 option is selected). This will cause a "Firefox and <server> cannot communicate securely because they have no common encryption algorithms" (v1.5), or "Firefox can't connect to <server> because the site uses a security protocol which isn't enabled" (v2.0). See bugzilla issues 343543 and 359484 (Comment #7). It's all broken (hopefully fixed soon).\n* Perl/Java bindings don't work on 64 bit Linux machines. I can't even compile the latest version of Perl on an ~AMD64 box (using ~FC3).\n* Java 1.4 or better is required for the Java interfaces.\n* Processes that fork can't use session resumption unless some form of IPC is used.\n* Ensure libperl.so and libaxtls.so are in the shared library path when running with the perl bindings. A way to do this is with:\n\n{{indent{{{{> export LD_LIBRARY_PATH=`perl -e 'use Config; print $Config{archlib};'`/CORE:.}}}\n* The lua sample requires the luabit library from http://luaforge.net/projects/bit.\n\n!!!!Win32 issues\n\n* Be careful about doing .NET executions on network drives - .NET complains with security exceptions on the binary. //TODO: Add a manifest file to prevent this.//\n* CGI has been removed from Win32 - it needs a lot more work to get it right.\n* The default Microsoft .NET SDK is v2.0.50727. Download from: http://msdn.microsoft.com/netframework/downloads/updates/default.aspx.\n\n!!!!Solaris issues\n\n* mconf doesn't work well - some manual tweaking is required for string values.\n* GNU make is required and needs to be in $PATH.\n* To get swig's library dependencies to work (and for the C library to be found), I needed to type:\n\n{{indent{{{{> export LD_LIBRARY_PATH=/usr/local/gcc-3.3.1/lib:.}}}\n\n!!!!Cygwin issues\n\n* The bindings all compile but don't run under Cygwin with the exception of Perl. This is due to win32 executables being incompatible with Cygwin libraries.\n\n
+
changes, notes and errata
+
axTLS Embedded SSL
+
http://axtls.cerocclub.com.au
+
/***\nhttp://tiddlystyles.com/#theme:DevFire\nAuthor: Clint Checketts\n***/\n\n/*{{{*/\nbody {\nbackground: #000;\n}\n/*}}}*/\n/***\n!Link styles /% ============================================================= %/\n***/\n/*{{{*/\na,\na.button,\n#mainMenu a.button,\n#sidebarOptions .sliderPanel a{\n color: #ffbf00;\n border: 0;\n background: transparent;\n}\n\na:hover,\na.button:hover,\n#mainMenu a.button:hover,\n#sidebarOptions .sliderPanel a:hover\n#sidebarOptions .sliderPanel a:active{\n color: #ff7f00;\n border: 0;\n border-bottom: #ff7f00 1px dashed;\n background: transparent;\n text-decoration: none;\n}\n\n#displayArea .button.highlight{\n color: #ffbf00;\n background: #4c4c4c;\n}\n/*}}}*/\n/***\n!Header styles /% ============================================================= %/\n***/\n/*{{{*/\n.header{\n border-bottom: 2px solid #ffbf00;\n color: #fff;\n}\n\n.headerForeground a {\n color: #fff;\n}\n\n.header a:hover {\n border-bottom: 1px dashed #fff;\n}\n/*}}}*/\n/***\n!Main menu styles /% ============================================================= %/\n***/\n/*{{{*/\n#mainMenu {color: #fff;}\n#mainMenu h1{\n font-size: 1.1em;\n}\n#mainMenu li,#mainMenu ul{\n list-style: none;\n margin: 0;\n padding: 0;\n}\n/*}}}*/\n/***\n!Sidebar styles /% ============================================================= %/\n***/\n/*{{{*/\n#sidebar {\n right: 0;\n color: #fff;\n border: 2px solid #ffbf00;\n border-width: 0 0 2px 2px;\n}\n#sidebarOptions {\n background-color: #4c4c4c;\n padding: 0;\n}\n\n#sidebarOptions a{\n margin: 0;\n color: #ffbf00;\n border: 0;\n}\n#sidebarOptions a:hover {\n color: #4c4c4c;\n background-color: #ffbf00;\n\n}\n\n#sidebarOptions a:active {\n color: #ffbf00;\n background-color: transparent;\n}\n\n#sidebarOptions .sliderPanel {\n background-color: #333;\n margin: 0;\n}\n\n#sidebarTabs {background-color: #4c4c4c;}\n#sidebarTabs .tabSelected {\n padding: 3px 3px;\n cursor: default;\n color: #ffbf00;\n background-color: #666;\n}\n#sidebarTabs .tabUnselected {\n color: #ffbf00;\n background-color: #5f5f5f;\n padding: 0 4px;\n}\n\n#sidebarTabs .tabUnselected:hover,\n#sidebarTabs .tabContents {\n background-color: #666;\n}\n\n.listTitle{color: #FFF;}\n#sidebarTabs .tabContents a{\n color: #ffbf00;\n}\n\n#sidebarTabs .tabContents a:hover{\n color: #ff7f00;\n background: transparent;\n}\n\n#sidebarTabs .txtMoreTab .tabSelected,\n#sidebarTabs .txtMoreTab .tab:hover,\n#sidebarTabs .txtMoreTab .tabContents{\n color: #ffbf00;\n background: #4c4c4c;\n}\n\n#sidebarTabs .txtMoreTab .tabUnselected {\n color: #ffbf00;\n background: #5f5f5f;\n}\n\n.tab.tabSelected, .tab.tabSelected:hover{color: #ffbf00; border: 0; background-color: #4c4c4c;cursor:default;}\n.tab.tabUnselected {background-color: #666;}\n.tab.tabUnselected:hover{color:#ffbf00; border: 0;background-color: #4c4c4c;}\n.tabContents {\n background-color: #4c4c4c;\n border: 0;\n}\n.tabContents .tabContents{background: #666;}\n.tabContents .tabSelected{background: #666;}\n.tabContents .tabUnselected{background: #5f5f5f;}\n.tabContents .tab:hover{background: #666;}\n/*}}}*/\n/***\n!Message area styles /% ============================================================= %/\n***/\n/*{{{*/\n#messageArea {background-color: #666; color: #fff; border: 2px solid #ffbf00;}\n#messageArea a:link, #messageArea a:visited {color: #ffbf00; text-decoration:none;}\n#messageArea a:hover {color: #ff7f00;}\n#messageArea a:active {color: #ff7f00;}\n#messageArea .messageToolbar a{\n border: 1px solid #ffbf00;\n background: #4c4c4c;\n}\n/*}}}*/\n/***\n!Popup styles /% ============================================================= %/\n***/\n/*{{{*/\n.popup {color: #fff; background-color: #4c4c4c; border: 1px solid #ffbf00;}\n.popup li.disabled{color: #fff;}\n.popup a {color: #ffbf00; }\n.popup a:hover { background: transparent; color: #ff7f00; border: 0;}\n.popup hr {color: #ffbf00; background: #ffbf00;}\n/*}}}*/\n/***\n!Tiddler Display styles /% ============================================================= %/\n***/\n/*{{{*/\n.title{color: #fff;}\nh1, h2, h3, h4, h5 {\n color: #fff;\n background-color: transparent;\n border-bottom: 1px solid #333;\n}\n\n.subtitle{\n color: #666;\n}\n\n.viewer {color: #fff; }\n\n.viewer table{background: #666; color: #fff;}\n\n.viewer th {background-color: #996; color: #fff;}\n\n.viewer pre, .viewer code {color: #ddd; background-color: #4c4c4c; border: 1px solid #ffbf00;}\n\n.viewer hr {color: #666;}\n\n.tiddler .button {color: #4c4c4c;}\n.tiddler .button:hover { color: #ffbf00; background-color: #4c4c4c;}\n.tiddler .button:active {color: #ffbf00; background-color: #4c4c4c;}\n\n.toolbar {\n color: #4c4c4c;\n}\n\n.toolbar a.button,\n.toolbar a.button:hover,\n.toolbar a.button:active,\n.editorFooter a{\n border: 0;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selected .footer {\n color: #888;\n}\n\n.highlight, .marked {\n color: #000;\n background-color: #ffe72f;\n}\n.editorFooter {\n color: #aaa;\n}\n\n.tab{\n-moz-border-radius-topleft: 3px;\n-moz-border-radius-topright: 3px;\n}\n\n.tagging,\n.tagged{\n background: #4c4c4c;\n border: 1px solid #4c4c4c; \n}\n\n.selected .tagging,\n.selected .tagged{\n background-color: #333;\n border: 1px solid #ffbf00;\n}\n\n.tagging .listTitle,\n.tagged .listTitle{\n color: #fff;\n}\n\n.tagging .button,\n.tagged .button{\n color: #ffbf00;\n border: 0;\n padding: 0;\n}\n\n.tagging .button:hover,\n.tagged .button:hover{\nbackground: transparent;\n}\n\n.selected .isTag .tagging.simple,\n.selected .tagged.simple,\n.isTag .tagging.simple,\n.tagged.simple {\n float: none;\n display: inline;\n border: 0;\n background: transparent;\n color: #fff;\n margin: 0;\n}\n\n.cascade {\n background: #4c4c4c;\n color: #ddd;\n border: 1px solid #ffbf00;\n}\n/*}}}*/
+
axhttpd is a small embedded web server using the axTLS library. It is based originally on the web server written by Doug Currie which is at http://www.hcsw.org/awhttpd.\n\n!@@bgcolor(#ff0000):color(#ffffff):axhttpd Features@@ \n\n!!__Basic Authentication__\n\nBasic Authentication uses a password file called ".htpasswd", in the directory to be protected. This file is formatted as the familiar colon-separated username/encrypted-password pair, records delimited by newlines. The protection does not carry over to subdirectories. The utility program htpasswd is included to help manually edit .htpasswd files.\n\nThe encryption of this password uses a proprietary algorithm due to the dependency of many crypt libraries on DES. An example is in [[/test_dir/no_http|https://127.0.0.1/test_dir/no_http]] (username 'abcd', password is '1234').\n\n//Note: This is an mconf enabled configuration option.//\n\n!!__SSL Protection__\n\nDirectories/files can be accessed using the 'http' or 'https' uri prefix. If normal http access for a directory needs to be disabled, then put "~SSLRequireSSL" into a '.htaccess' file in the directory to be protected. \n\nConversely, use "~SSLDenySSL" to deny access to directories via SSL.\n\nAn example is in [[/test_dir/no_http|http://127.0.0.1/test_dir/no_http]] and [[/test_dir/no_ssl|https://127.0.0.1/test_dir/no_ssl]].\n\nEntire directories can be denied access with a "Deny all" directive (regardless of SSL or authentication). An example is in [[/test_dir/bin|http://127.0.0.1/test_dir/bin]]\n\n!!__CGI__\n\nMost of the CGI 1.1 variables are now placed into the script environment and should work as normal.\n\n!!__Lua and Lua Pages__\n\nThis is a small scripting language gaining popularity in embedded applications due to its small footprint and fast speed.\n\nLua has been incorporated into the build, so simply select it and it will automatically install. Try pointing your browser at [[test_main.html]|http://127.0.0.1/lua/test_main.html]] to see an example of Lua Pages.\n\n//Note: This is an mconf enabled configuration option.//\n\n!!__Directory Listing__\n\nAn mconf option. Allow the files in directories to be displayed. An example is in [[/test_dir|http://127.0.0.1/test_dir]]\n\n!!__Other Features__\n\n* Timeout - HTTP 1.1 allows for persistent connections. This is the time allowed for this connection in seconds.\n* Daemon - Puts the process in daemon mode. \n* SSL session cache size - The size of the session cache (a heavily loaded server should maintain many sessions). A session will save on expensive SSL handshaking.\n\n
+
+ + + + + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/download.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/download.lua new file mode 100644 index 0000000..2ee1a71 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/download.lua @@ -0,0 +1,75 @@ +#!/usr/local/bin/lua + +require"luasocket" + +function receive (connection) + connection:settimeout(0) + local s, status = connection:receive (2^10) + if status == "timeout" then + coroutine.yield (connection) + end + return s, status +end + +function download (host, file, outfile) + --local f = assert (io.open (outfile, "w")) + local c = assert (socket.connect (host, 80)) + c:send ("GET "..file.." HTTP/1.0\r\n\r\n") + while true do + local s, status = receive (c) + --f:write (s) + if status == "closed" then + break + end + end + c:close() + --f:close() +end + +local threads = {} +function get (host, file, outfile) + print (string.format ("Downloading %s from %s to %s", file, host, outfile)) + local co = coroutine.create (function () + return download (host, file, outfile) + end) + table.insert (threads, co) +end + +function dispatcher () + while true do + local n = table.getn (threads) + if n == 0 then + break + end + local connections = {} + for i = 1, n do + local status, res = coroutine.resume (threads[i]) + if not res then + table.remove (threads, i) + break + else + table.insert (connections, res) + end + end + if table.getn (connections) == n then + socket.select (connections) + end + end +end + +local url = arg[1] +if not url then + print (string.format ("usage: %s url [times]", arg[0])) + os.exit() +end +local times = arg[2] or 5 + +url = string.gsub (url, "^http.?://", "") +local _, _, host, file = string.find (url, "^([^/]+)(/.*)") +local _, _, fn = string.find (file, "([^/]+)$") + +for i = 1, times do + get (host, file, fn..i) +end + +dispatcher () diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/env.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/env.lua new file mode 100644 index 0000000..c429847 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/env.lua @@ -0,0 +1,26 @@ +-- This file should be executed before any script in this directory +-- according to the configuration (cgilua/conf.lua). + +pcall (cgilua.enablesession) + +local put, mkurlpath = cgilua.put, cgilua.mkurlpath + +cgilua.addclosefunction (function () + put [[ +

CGILua installation overview

+ + + + + + + + + + + + + +
Version + Copyright + Description +
<%= tostring(_G[l[2]]) %> + + +
<%= idx(p,"VERSION") %> + <%= idx(p,"COPYRIGHT") %> + <%= idx(p,"DESCRIPTION") %> +
+ + + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/prepara_sql2.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/prepara_sql2.lua new file mode 100644 index 0000000..6a37c2f --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/prepara_sql2.lua @@ -0,0 +1,31 @@ +#!/usr/local/bin/lua + +MAX_ROWS = arg[1] or 10 + +require"postgres" + +local env = assert (luasql.postgres ()) +local conn = assert (env:connect ("luasql-test", "tomas")) + +-- Apaga restos de outros testes. +conn:execute "drop table t2" +conn:execute "drop table t1" + +-- Criando as tabelas. +assert (conn:execute [[create table t1 ( + a int, + b int +)]]) +assert (conn:execute [[create table t2 ( + c int, + d int +)]]) + +-- Preenchedo as tabelas. +for i = 1, MAX_ROWS do + local ii = 2*i + assert (conn:execute (string.format ([[ +insert into t1 values (%d, %d); +insert into t2 values (%d, %d);]], + ii, i, ii, i))) +end diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_conc.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_conc.lua new file mode 100644 index 0000000..bbb9be7 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_conc.lua @@ -0,0 +1,38 @@ +cgilua.htmlheader() +if ap then + local pid, ppid = ap.pid () + if not ppid then + ppid = "no parent pid" + end + cgilua.put ("pid = "..pid.." ("..ppid..")".."\n") +end + +assert(type(stable.get) == "function") +assert(type(stable.set) == "function") + +cgilua.put"stable.pairs = {
\n" +for i, v in stable.pairs () do + cgilua.put (i.." = "..tostring(v).."
\n") +end +cgilua.put"}
\n" + +local counter = stable.get"counter" or 0 +stable.set ("counter", counter + 1) + +local f = stable.get"f" +if not f then + local d = os.date() + stable.set ("f", function () return d end) +else + cgilua.put ("f() = "..tostring (f ())) +end + +cgilua.put"
\n" +for i = 1,800 do + cgilua.put (i) + for ii = 1,1000 do + cgilua.put ("") + end + cgilua.put ("\n") +end +cgilua.put ("End") diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_cookies.lp b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_cookies.lp new file mode 100644 index 0000000..932b9c5 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_cookies.lp @@ -0,0 +1,13 @@ + + +

Testing Cookies library

+ +<%= CL_COOKIE%> = <%= tostring(test)%>
+Assigning current date to cookie!
+Reload this script to check cookie's value! diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_cookies.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_cookies.lua new file mode 100644 index 0000000..6af935e --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_cookies.lua @@ -0,0 +1,14 @@ +local cookies = require"cgilua.cookies" +CL_COOKIE = "cgilua_cookie" + +local test = cookies.get (CL_COOKIE) +cookies.set (CL_COOKIE, os.date()) + +cgilua.htmlheader () +cgilua.put ([[ +

Testing Cookies library

+ +]]..CL_COOKIE..' = '..tostring(test)..[[
+Assigning current date to cookie!
+Reload this script to check cookie's value! +]]) diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_err.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_err.lua new file mode 100644 index 0000000..4d6ffc9 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_err.lua @@ -0,0 +1,4 @@ +cgilua.htmlheader() +cgilua.put"Oi!" +--io.write"something\n" +cgilua.errorlog ("eca", "emerg") diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_fs.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_fs.lua new file mode 100644 index 0000000..566ed8b --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_fs.lua @@ -0,0 +1,23 @@ +function link_dir (dir, base) + local path = base.."/"..dir + local mode = lfs.attributes (path).mode + if mode == "directory" then + return string.format ('%s', + cgilua.mkurlpath ("test_fs.lua", { dir = path }), + dir) + else + return dir + end +end + +cgilua.htmlheader () +cgilua.put ("

Testing Filesystem library

\n") +cgilua.put ("\n") +cgilua.put ("\n") +local i = 0 +local dir = cgi.dir or "." +for file in lfs.dir (dir) do + i = i+1 + cgilua.put ("\n") +end +cgilua.put ("
Testing dir
"..i..""..link_dir(file, dir).."
\n") diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_htk.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_htk.lua new file mode 100644 index 0000000..ac1de6c --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_htk.lua @@ -0,0 +1,22 @@ +require"htk" + +local a_table = {} +for i = 1, 20 do + local l = {} + for j = 1, 20 do + table.insert (l, HTK.TD { "cell "..i..","..j }) + end + table.insert (a_table, HTK.TR (l)) +end + +cgilua.htmlheader() +cgilua.put (HTK.HTML { + HTK.HEAD { HTK.TITLE { "Titulo da Pagina" } }, + HTK.BODY { + bgcolor = "#FFFFFF", + HTK.H1 { "Titulo da Pagina" }, + HTK.P {}, + "Uma pgina qualquer", + HTK.TABLE (a_table), + } +}) diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_lib.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_lib.lua new file mode 100644 index 0000000..5041253 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_lib.lua @@ -0,0 +1,31 @@ +local function getfield (t, f) + for w in string.gfind(f, "[%w_]+") do + if not t then return nil end + t = t[w] + end + return t +end + +function test_lib (libname) + local ok, err = pcall (require, libname) + if not ok then + cgilua.put ("Library "..libname.." not found
\n".. + err) + else + cgilua.put ("Library "..libname.."
\n") + local t = getfield (_G, libname) + if type(t) ~= "table" then + cgilua.put (tostring(t)) + else + for i, v in pairs (t) do + cgilua.put ("  "..tostring(i).." = "..tostring(v).."
\n") + end + end + end + cgilua.put ("\n

\n") +end + +cgilua.htmlheader () +for _, lib in ipairs { "lfs", "socket", "luasql.postgres", "luasql", "lxp", "lxp.lom", "lualdap", "htk", "xmlrpc", "xmlrpc.http" } do + test_lib (lib) +end diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_main.html b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_main.html new file mode 100644 index 0000000..a50dd63 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_main.html @@ -0,0 +1,127 @@ + +Test Page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GET: +
Lua scriptmodule
HTML templatemodule
POST: +
+
+ + + + + + + + + + + + +
+ field 1:
+ field 2:
+ field 3: + op 1 + op 2 + op 3 +
Lua script + module +
HTML template + module +
+
+
POST (with upload): +
+
+ + + + + + + + + + + + +
+ field 1:
+ file (binary!):
+
Lua script + module +
HTML template + module +
+
+
Cookies: +
Lua scriptmodule
HTML templatemodule
Filesystem: +
Lua scriptmodule
Session: +
Lua scriptmodule
CGI Variables: +
HTML templatemodule
Library Overview: +
HTML templatemodule
Concurrency +
Lua scriptmodule
+ diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_main.lp b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_main.lp new file mode 100644 index 0000000..917ee1e --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_main.lp @@ -0,0 +1,31 @@ + +Embeded Lua Test + + +cgi = { +\n", vv, a, tostring(b)) + end + v = vv.."}" + end +?> +<%= i %> = <%= tostring(v) %>
+<% +end +%> +} +
+Remote address: <%= cgilua.servervariable"REMOTE_ADDR" %> +
+Is persistent = <%= tostring (SAPI.Info.ispersistent) %> +
+ap =
+lfcgi = <% = tostring(lfcgi) %>
+<%= (ap and ap.handler()) or "" %>
+ + + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_main.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_main.lua new file mode 100644 index 0000000..0e997a2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_main.lua @@ -0,0 +1,46 @@ +cgilua.htmlheader() +cgilua.put[[ + +Script Lua Test + + +cgi = { +]] + +for i,v in pairs (cgi) do + if type(v) == "table" then + local vv = "{" + for a,b in pairs(v) do + vv = string.format ("%s%s = %s
\n", vv, a, tostring(b)) + end + v = vv.."}" + end + cgilua.put (string.format ("%s = %s
\n", i, tostring(v))) +end +cgilua.put "}
\n" +cgilua.put ("Remote address: "..cgilua.servervariable"REMOTE_ADDR") +cgilua.put "
\n" +cgilua.put ("Is persistent = "..tostring (SAPI.Info.ispersistent).."
\n") +cgilua.put ("ap="..tostring(ap).."
\n") +cgilua.put ("lfcgi="..tostring(lfcgi).."
\n") + +-- Checking Virtual Environment +local my_output = cgilua.put +cgilua.put = nil +local status, err = pcall (function () + assert (cgilua.put == nil, "cannot change cgilua.put value") +end) +cgilua.put = my_output +assert (status == true, err) + +-- Checking require +local status, err = pcall (function () require"unknown_module" end) +assert (status == false, "unknown_module loaded!") +-- assert (package == nil, "Access to package table allowed!") + +cgilua.put[[ +

+ + +]] +cgilua = nil diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_session.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_session.lua new file mode 100644 index 0000000..d97cc45 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_session.lua @@ -0,0 +1,43 @@ +cgilua.enablesession () + +function pt (tab) + for i, v in pairs (tab) do + local vv = v + if type(v) == "table" then + vv = "" + for _i, _v in pairs (v) do + vv = vv..string.format ("%s = %q, ", _i, _v) + end + vv = '{'..vv..'}' + end + cgilua.put (string.format ("%s = %s
\n", tostring (i), tostring (vv))) + end +end + + +if cgi.field then + if not cgilua.session.data.field then + cgilua.session.data.field = {} + end + table.insert (cgilua.session.data.field, cgi.field) +end +cgilua.htmlheader() +if cgilua.session then + cgilua.put "cgi = {
\n" + pt (cgi) + cgilua.put "}
\n" + cgilua.put "cgilua.session.data = {
\n" + pt (cgilua.session.data) + cgilua.put "}
\n" + + cgilua.put [[

+ field:
+
+
]] +else + cgilua.put "Sessions library is not available or not well configured" +end diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_sql.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_sql.lua new file mode 100644 index 0000000..085ce97 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_sql.lua @@ -0,0 +1,13 @@ +local s = require"luasql.postgres" + +local env = assert (luasql.postgres ()) +local conn = assert (env:connect ("luasql-test", "tomas")) +local cur = assert (conn:execute ("select count(*) from fetch_test")) + +cgilua.htmlheader() +cgilua.put ("Total lines at table fetch_test is "..cur:fetch()) +cgilua.put (string.format ("
\n%s == %s
\n", tostring(s), tostring(luasql))) + +cur:close() +conn:close() +env:close() diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_sql2.lua b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_sql2.lua new file mode 100644 index 0000000..a2f6ee1 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_sql2.lua @@ -0,0 +1,24 @@ +require"postgres" + +local env = assert (luasql.postgres ()) +local conn = assert (env:connect ("luasql-test", "tomas")) +local cur = assert (conn:execute ("select count(*) from t1")) +local total = tonumber (cur:fetch()) +cur:close() +local aleatorio = math.random(total) +local cur = assert (conn:execute ("select * from t1, t2 where b = d and a != "..2*aleatorio)) + +cgilua.htmlheader() +cgilua.put ("Aleatorio = "..aleatorio.."
\n") + +local a,b,c,d = cur:fetch() +cgilua.put ("\n") +while a do +-- cgilua.put ("") + a,b,c,d = cur:fetch() +end +cgilua.put ("
",a,"",b,"",c,"",d,"
\n") + +cur:close() +conn:close() +env:close() diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_variables.lp b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_variables.lp new file mode 100644 index 0000000..c1ac332 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/test_variables.lp @@ -0,0 +1,14 @@ + +<% for _, var in pairs { "SERVER_SOFTWARE", "SERVER_NAME", "GATEWAY_INTERFACE", "SERVER_PROTOCOL", "SERVER_PORT", "REQUEST_METHOD", "PATH_INFO", "PATH_TRANSLATED", "SCRIPT_NAME", "QUERY_STRING", "REMOTE_HOST", "REMOTE_ADDR", "AUTH_TYPE", "REMOTE_USER", "REMOTE_IDENT", "CONTENT_TYPE", "CONTENT_LENGTH", "HTTP_REFERER", "HTTP_COOKIE", "SCRIPT_FILENAME", "DOCUMENT_ROOT", } do %> + +<% end %> +
<%= var %>="<%= cgilua.servervariable(var) or "not defined"%>"
+ +

+ +<% for _, var in ipairs { "script_file", "script_path", "script_pdir", "script_vdir", "script_vpath", "urlpath", } do %> + +<% end %> +
<%= var %>="<%= cgilua[var] %>"
+ +

diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/bin/.htaccess b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/bin/.htaccess new file mode 100644 index 0000000..8fd8c46 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/bin/.htaccess @@ -0,0 +1 @@ +Deny all diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_http/.htaccess b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_http/.htaccess new file mode 100644 index 0000000..3e20076 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_http/.htaccess @@ -0,0 +1 @@ +SSLRequireSSL diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_http/.htpasswd b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_http/.htpasswd new file mode 100644 index 0000000..0471b01 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_http/.htpasswd @@ -0,0 +1,2 @@ +abcd:CQhgDPyy0rvEU8OMxnQIvg==$YdJfIKZimFLYxPf/rbnhtQ== +yaya:Syuss5jE2FNGVdr0kKGoHg==$WLw/SgHZFuAoOuml3GTJVw== diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_http/index.html b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_http/index.html new file mode 100644 index 0000000..8b86eba --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_http/index.html @@ -0,0 +1,6 @@ + +axhttpd is running + +Looks like you got to this directory. + + diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_ssl/.htaccess b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_ssl/.htaccess new file mode 100644 index 0000000..d980d26 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_ssl/.htaccess @@ -0,0 +1 @@ +SSLDenySSL diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_ssl/index.html b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_ssl/index.html new file mode 100644 index 0000000..8b86eba --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/test_dir/no_ssl/index.html @@ -0,0 +1,6 @@ + +axhttpd is running + +Looks like you got to this directory. + + diff --git a/feeds/luci/libs/luci-lib-nixio/axtls-config/.config b/feeds/luci/libs/luci-lib-nixio/axtls-config/.config new file mode 100644 index 0000000..46cd061 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axtls-config/.config @@ -0,0 +1,112 @@ +# +# Automatically generated make config: don't edit +# +HAVE_DOT_CONFIG=y +CONFIG_PLATFORM_LINUX=y +# CONFIG_PLATFORM_CYGWIN is not set +# CONFIG_PLATFORM_WIN32 is not set + +# +# General Configuration +# +PREFIX="/usr" +# CONFIG_DEBUG is not set +CONFIG_STRIP_UNWANTED_SECTIONS=y +# CONFIG_VISUAL_STUDIO_7_0 is not set +# CONFIG_VISUAL_STUDIO_8_0 is not set +CONFIG_VISUAL_STUDIO_7_0_BASE="" +CONFIG_VISUAL_STUDIO_8_0_BASE="" +CONFIG_EXTRA_CFLAGS_OPTIONS="-fpic" +CONFIG_EXTRA_LDFLAGS_OPTIONS="" + +# +# SSL Library +# +# CONFIG_SSL_SERVER_ONLY is not set +# CONFIG_SSL_CERT_VERIFICATION is not set +# CONFIG_SSL_ENABLE_CLIENT is not set +CONFIG_SSL_FULL_MODE=y +# CONFIG_SSL_SKELETON_MODE is not set +# CONFIG_SSL_PROT_LOW is not set +CONFIG_SSL_PROT_MEDIUM=y +# CONFIG_SSL_PROT_HIGH is not set +# CONFIG_SSL_USE_DEFAULT_KEY is not set +CONFIG_SSL_PRIVATE_KEY_LOCATION="/etc/nixio/rsa_main.der" +CONFIG_SSL_PRIVATE_KEY_PASSWORD="" +CONFIG_SSL_X509_CERT_LOCATION="" +# CONFIG_SSL_GENERATE_X509_CERT is not set +CONFIG_SSL_X509_COMMON_NAME="" +CONFIG_SSL_X509_ORGANIZATION_NAME="" +CONFIG_SSL_X509_ORGANIZATION_UNIT_NAME="" +# CONFIG_SSL_ENABLE_V23_HANDSHAKE is not set +# CONFIG_SSL_HAS_PEM is not set +# CONFIG_SSL_USE_PKCS12 is not set +CONFIG_SSL_EXPIRY_TIME=24 +CONFIG_X509_MAX_CA_CERTS=4 +CONFIG_SSL_MAX_CERTS=2 +CONFIG_SSL_CTX_MUTEXING=y +CONFIG_USE_DEV_URANDOM=y +# CONFIG_WIN32_USE_CRYPTO_LIB is not set +# CONFIG_OPENSSL_COMPATIBLE is not set +# CONFIG_PERFORMANCE_TESTING is not set +# CONFIG_SSL_TEST is not set +# CONFIG_AXHTTPD is not set +# CONFIG_HTTP_STATIC_BUILD is not set +CONFIG_HTTP_PORT=0 +CONFIG_HTTP_HTTPS_PORT=0 +CONFIG_HTTP_SESSION_CACHE_SIZE=0 +CONFIG_HTTP_WEBROOT="" +CONFIG_HTTP_TIMEOUT=0 +# CONFIG_HTTP_HAS_CGI is not set +CONFIG_HTTP_CGI_EXTENSIONS="" +# CONFIG_HTTP_ENABLE_LUA is not set +CONFIG_HTTP_LUA_PREFIX="" +CONFIG_HTTP_LUA_CGI_LAUNCHER="" +# CONFIG_HTTP_BUILD_LUA is not set +# CONFIG_HTTP_DIRECTORIES is not set +# CONFIG_HTTP_HAS_AUTHORIZATION is not set +# CONFIG_HTTP_HAS_IPV6 is not set +# CONFIG_HTTP_ENABLE_DIFFERENT_USER is not set +CONFIG_HTTP_USER="" +# CONFIG_HTTP_VERBOSE is not set +# CONFIG_HTTP_IS_DAEMON is not set + +# +# Language Bindings +# +# CONFIG_BINDINGS is not set +# CONFIG_CSHARP_BINDINGS is not set +# CONFIG_VBNET_BINDINGS is not set +CONFIG_DOT_NET_FRAMEWORK_BASE="" +# CONFIG_JAVA_BINDINGS is not set +CONFIG_JAVA_HOME="" +# CONFIG_PERL_BINDINGS is not set +CONFIG_PERL_CORE="" +CONFIG_PERL_LIB="" +# CONFIG_LUA_BINDINGS is not set +CONFIG_LUA_CORE="" + +# +# Samples +# +# CONFIG_SAMPLES is not set +# CONFIG_C_SAMPLES is not set +# CONFIG_CSHARP_SAMPLES is not set +# CONFIG_VBNET_SAMPLES is not set +# CONFIG_JAVA_SAMPLES is not set +# CONFIG_PERL_SAMPLES is not set +# CONFIG_LUA_SAMPLES is not set + +# +# BigInt Options +# +# CONFIG_BIGINT_CLASSICAL is not set +# CONFIG_BIGINT_MONTGOMERY is not set +CONFIG_BIGINT_BARRETT=y +CONFIG_BIGINT_CRT=y +# CONFIG_BIGINT_KARATSUBA is not set +MUL_KARATSUBA_THRESH=0 +SQU_KARATSUBA_THRESH=0 +CONFIG_BIGINT_SLIDING_WINDOW=y +CONFIG_BIGINT_SQUARE=y +# CONFIG_BIGINT_CHECK_ON is not set diff --git a/feeds/luci/libs/luci-lib-nixio/axtls-config/config.h b/feeds/luci/libs/luci-lib-nixio/axtls-config/config.h new file mode 100644 index 0000000..0f861f3 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axtls-config/config.h @@ -0,0 +1,113 @@ +/* + * Automatically generated header file: don't edit + */ + +#define HAVE_DOT_CONFIG 1 +#define CONFIG_PLATFORM_LINUX 1 +#undef CONFIG_PLATFORM_CYGWIN +#undef CONFIG_PLATFORM_WIN32 + +/* + * General Configuration + */ +#define PREFIX "/usr" +#undef CONFIG_DEBUG +#define CONFIG_STRIP_UNWANTED_SECTIONS 1 +#undef CONFIG_VISUAL_STUDIO_7_0 +#undef CONFIG_VISUAL_STUDIO_8_0 +#define CONFIG_VISUAL_STUDIO_7_0_BASE "" +#define CONFIG_VISUAL_STUDIO_8_0_BASE "" +#define CONFIG_EXTRA_CFLAGS_OPTIONS "-fpic" +#define CONFIG_EXTRA_LDFLAGS_OPTIONS "" + +/* + * SSL Library + */ +#undef CONFIG_SSL_SERVER_ONLY +#undef CONFIG_SSL_CERT_VERIFICATION +#undef CONFIG_SSL_ENABLE_CLIENT +#define CONFIG_SSL_FULL_MODE 1 +#undef CONFIG_SSL_SKELETON_MODE +#undef CONFIG_SSL_PROT_LOW +#define CONFIG_SSL_PROT_MEDIUM 1 +#undef CONFIG_SSL_PROT_HIGH +#undef CONFIG_SSL_USE_DEFAULT_KEY +#define CONFIG_SSL_PRIVATE_KEY_LOCATION "/etc/nixio/rsa_main.der" +#define CONFIG_SSL_PRIVATE_KEY_PASSWORD "" +#define CONFIG_SSL_X509_CERT_LOCATION "" +#undef CONFIG_SSL_GENERATE_X509_CERT +#define CONFIG_SSL_X509_COMMON_NAME "" +#define CONFIG_SSL_X509_ORGANIZATION_NAME "" +#define CONFIG_SSL_X509_ORGANIZATION_UNIT_NAME "" +#undef CONFIG_SSL_ENABLE_V23_HANDSHAKE +#undef CONFIG_SSL_HAS_PEM +#undef CONFIG_SSL_USE_PKCS12 +#define CONFIG_SSL_EXPIRY_TIME 24 +#define CONFIG_X509_MAX_CA_CERTS 4 +#define CONFIG_SSL_MAX_CERTS 2 +#define CONFIG_SSL_CTX_MUTEXING 1 +#define CONFIG_USE_DEV_URANDOM 1 +#undef CONFIG_WIN32_USE_CRYPTO_LIB +#undef CONFIG_OPENSSL_COMPATIBLE +#undef CONFIG_PERFORMANCE_TESTING +#undef CONFIG_SSL_TEST +#undef CONFIG_AXHTTPD +#undef CONFIG_HTTP_STATIC_BUILD +#define CONFIG_HTTP_PORT +#define CONFIG_HTTP_HTTPS_PORT +#define CONFIG_HTTP_SESSION_CACHE_SIZE +#define CONFIG_HTTP_WEBROOT "" +#define CONFIG_HTTP_TIMEOUT +#undef CONFIG_HTTP_HAS_CGI +#define CONFIG_HTTP_CGI_EXTENSIONS "" +#undef CONFIG_HTTP_ENABLE_LUA +#define CONFIG_HTTP_LUA_PREFIX "" +#define CONFIG_HTTP_LUA_CGI_LAUNCHER "" +#undef CONFIG_HTTP_BUILD_LUA +#undef CONFIG_HTTP_DIRECTORIES +#undef CONFIG_HTTP_HAS_AUTHORIZATION +#undef CONFIG_HTTP_HAS_IPV6 +#undef CONFIG_HTTP_ENABLE_DIFFERENT_USER +#define CONFIG_HTTP_USER "" +#undef CONFIG_HTTP_VERBOSE +#undef CONFIG_HTTP_IS_DAEMON + +/* + * Language Bindings + */ +#undef CONFIG_BINDINGS +#undef CONFIG_CSHARP_BINDINGS +#undef CONFIG_VBNET_BINDINGS +#define CONFIG_DOT_NET_FRAMEWORK_BASE "" +#undef CONFIG_JAVA_BINDINGS +#define CONFIG_JAVA_HOME "" +#undef CONFIG_PERL_BINDINGS +#define CONFIG_PERL_CORE "" +#define CONFIG_PERL_LIB "" +#undef CONFIG_LUA_BINDINGS +#define CONFIG_LUA_CORE "" + +/* + * Samples + */ +#undef CONFIG_SAMPLES +#undef CONFIG_C_SAMPLES +#undef CONFIG_CSHARP_SAMPLES +#undef CONFIG_VBNET_SAMPLES +#undef CONFIG_JAVA_SAMPLES +#undef CONFIG_PERL_SAMPLES +#undef CONFIG_LUA_SAMPLES + +/* + * BigInt Options + */ +#undef CONFIG_BIGINT_CLASSICAL +#undef CONFIG_BIGINT_MONTGOMERY +#define CONFIG_BIGINT_BARRETT 1 +#define CONFIG_BIGINT_CRT 1 +#undef CONFIG_BIGINT_KARATSUBA +#define MUL_KARATSUBA_THRESH +#define SQU_KARATSUBA_THRESH +#define CONFIG_BIGINT_SLIDING_WINDOW 1 +#define CONFIG_BIGINT_SQUARE 1 +#undef CONFIG_BIGINT_CHECK_ON diff --git a/feeds/luci/libs/luci-lib-nixio/axtls-root/etc/nixio/rsa_main.der b/feeds/luci/libs/luci-lib-nixio/axtls-root/etc/nixio/rsa_main.der new file mode 100644 index 0000000000000000000000000000000000000000..e17fdc0a0c70ea2783896858d75539f404048eb5 GIT binary patch literal 609 zcmV-n0-pUaf&yIv0RRGlfdJOj{f-NB6s=ZkK6xsdxjSkca%)`@KJMk(U>WOiS|#Eb zoAWdEN;`Dk9cL|zgXLJx;E>AL(m2eAPKsA&nS6t2IO9Qqj~%MAO&FPJUne3v)6C7X8x$f3Ls#j((1AIKfm6r=>2r<0Rlk)+8ds;3PW2BHX@!+ z+hK(B+-P4Vyf!w#%h*Q09HYMjiPTw>^`#K{_${>*UNAhjLe-QzEC>oUjDg(3zP*dP*_& zi#Mt6_9p@(1-mBPhHL=>Km>PKQkFe7+8AfC5;cv}sUoyUZh$#O63X*%B~P~IB8~c# zVPqw*4(qG<0Z7UDPfU{PVAo~A%Nw}+xVzm)(E>pL>Dj&i5m%8UI~~REC*EW9J5XLU*A84D;RtmF~=XW literal 0 HcmV?d00001 diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/CHANGELOG.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/CHANGELOG.lua new file mode 100644 index 0000000..aa31841 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/CHANGELOG.lua @@ -0,0 +1,29 @@ +--- Changes and improvements. +module "nixio.CHANGELOG" + +--- Service Release. +--

    +--
  • Added getifaddrs() function.
  • +--
  • Added getsockopt(), setsockopt(), getsockname() and getpeername() +-- directly to TLS-socket objects unifying the socket interface.
  • +--
  • Added support for CyaSSL as cryptographical backend.
  • +--
  • Added support for x509 certificates in DER format.
  • +--
  • Added support for splice() in UnifiedIO.copyz().
  • +--
  • Added interface to inject chunks into UnifiedIO.linesource() buffer.
  • +--
  • Changed TLS behaviour to explicitely separate servers and clients.
  • +--
  • Fixed usage of signed datatype breaking Base64 decoding.
  • +--
  • Fixed namespace clashes for nixio.fs.
  • +--
  • Fixed splice() support for some exotic C libraries.
  • +--
  • Reconfigure axTLS cryptographical provider and mark it as obsolete.
  • +--
+-- @class table +-- @name 0.3 +-- @return ! + +--- Initial Release. +--
    +--
  • Initial Release
  • +--
+-- @class table +-- @name 0.2 +-- @return ! diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/README.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/README.lua new file mode 100644 index 0000000..ee3e3a2 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/README.lua @@ -0,0 +1,95 @@ +--- General Information. +module "nixio.README" + +--- General error handling information. +--
    +--
  • Most of the functions available in this library may fail. If any error +-- occurs the function returns nil or false, an error code +-- (usually errno) and an additional error message text (if avaialable).
  • +--
  • At the moment false is only returned when a non-blocking I/O function +-- fails with EAGAIN, EWOULDBLOCK or WSAEWOULDBLOCK for any others nil is +-- returned as first parameter. Therefore you can use false to write portable +-- non-blocking I/O applications.
  • +--
  • Note that the function documentation does only mention the return values +-- in case of a successful operation.
  • +--
  • You can find a table of common error numbers and other useful constants +-- like signal numbers in nixio.const e.g. nixio.const.EINVAL, +-- nixio.const.SIGTERM, etc. For portability there is a second error constant +-- table nixio.const_sock for socket error codes. This might +-- be important if you are dealing with Windows applications, on POSIX however +-- const_sock is just an alias for const.
  • +--
  • With some exceptions - which are explicitely stated in the function +-- documentation - all blocking functions are signal-protected and will not fail +-- with EINTR.
  • +--
  • On POSIX the SIGPIPE signal will be set to ignore upon initialization. +-- You should restore the default behaviour or set a custom signal handler +-- in your program after loading nixio if you need this behaviour.
  • +--
+-- @class table +-- @name Errorhandling +-- @return ! + +--- Function conventions. +--
In general all functions are namend and behave like their POSIX API +-- counterparts - where applicable - applying the following rules: +--
    +--
  • Functions should be named like the underlying POSIX API function ommiting +-- prefixes or suffixes - especially when placed in an object-context ( +-- lockf -> File:lock, fsync -> File:sync, dup2 -> dup, ...)
  • +--
  • If you are unclear about the behaviour of a function you should consult +-- your OS API documentation (e.g. the manpages).
  • +--
  • If the name is significantly different from the POSIX-function, the +-- underlying function(s) are stated in the documentation.
  • +--
  • Parameters should reflect those of the C-API, buffer length arguments and +-- by-reference parameters should be ommitted for pratical purposes.
  • +--
  • If a C function accepts a bitfield as parameter, it should be translated +-- into lower case string flags representing the flags if the bitfield is the +-- last parameter and also ommiting prefixes or suffixes. (e.g. waitpid +-- (pid, &s, WNOHANG | WUNTRACED) -> waitpid(pid, "nohang", "untraced"), +-- getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) -> +-- Socket:getopt("socket", "reuseaddr"), etc.)
  • +--
  • If it is not applicable to provide a string representation of the +-- bitfield a bitfield generator helper is provided. It is named FUNCTION_flags. +-- (open("/tmp/test", O_RDONLY | O_NONBLOCK) -> open("/tmp/test", open_flags( +-- "rdonly", "nonblock")))
  • +--
+-- @class table +-- @name Functions +-- @return ! + +--- Platform information. +--
    +--
  • The minimum platform requirements are a decent POSIX 2001 support. +-- Builds are more or less tested on Linux, Solaris and FreeBSD. Builds for +-- Windows XP SP1 and later can be compiled with MinGW either from Windows +-- itself or using the MinGW cross-compiler. Earlier versions of Windows are not +-- supported.
  • +--
  • In general all functions which don't have any remarks +-- in their documentation are available on all platforms.
  • +--
  • Functions with a (POSIX), (Linux) or similar prefix are only available +-- on these specific platforms. Same appplies to parameters of functions +-- with a similar suffix.
  • +--
  • Some functions might have limitations on some platforms. This should +-- be stated in the documentation. Please also consult your OS API +-- documentation.
  • +--
+-- @usage Tes +-- @class table +-- @name Platforms +-- @return ! + +--- Cryptography and TLS libraries. +--
    +--
  • Currently 3 underlying cryptography libraries are supported: openssl, +-- cyassl and axTLS. The name of the library in use is written to +-- nixio.tls_provider
  • +--
  • You should whenever possible use openssl or cyassl as axTLS has only +-- limited support. It does not provide support for non-blocking sockets and +-- is probably less audited than the other ones.
  • +--
  • As the supported Windows versions are not suitable for embedded devices +-- axTLS is at the moment not supported on Windows.
  • +--
+-- @usage Tes +-- @class table +-- @name TLS-Crypto +-- @return ! diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.CryptoHash.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.CryptoHash.lua new file mode 100644 index 0000000..a08b48d --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.CryptoHash.lua @@ -0,0 +1,17 @@ +--- Cryptographical Hash and HMAC object. +-- @cstyle instance +module "nixio.CryptoHash" + +--- Add another chunk of data to be hashed. +-- @class function +-- @name CryptoHash.update +-- @param chunk Chunk of data +-- @return CryptoHash object (self) + +--- Finalize the hash and return the digest. +-- @class function +-- @name CryptoHash.final +-- @usage You cannot call update on a hash object that was already finalized +-- you can however call final multiple times to get the digest. +-- @return hexdigest +-- @return buffer containing binary digest \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.File.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.File.lua new file mode 100644 index 0000000..368562a --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.File.lua @@ -0,0 +1,109 @@ +--- Large File Object. +-- Large file operations are supported up to 52 bits if the Lua number type is +-- double (default). +-- @cstyle instance +module "nixio.File" + +--- Write to the file descriptor. +-- @class function +-- @name File.write +-- @usage Warning: It is not guaranteed that all data +-- in the buffer is written at once especially when dealing with pipes. +-- You have to check the return value - the number of bytes actually written - +-- or use the safe IO functions in the high-level IO utility module. +-- @usage Unlike standard Lua indexing the lowest offset and default is 0. +-- @param buffer Buffer holding the data to be written. +-- @param offset Offset to start reading the buffer from. (optional) +-- @param length Length of chunk to read from the buffer. (optional) +-- @return number of bytes written + +--- Read from a file descriptor. +-- @class function +-- @name File.read +-- @usage Warning: It is not guaranteed that all requested data +-- is read at once especially when dealing with pipes. +-- You have to check the return value - the length of the buffer actually read - +-- or use the safe IO functions in the high-level IO utility module. +-- @usage The length of the return buffer is limited by the (compile time) +-- nixio buffersize which is nixio.const.buffersize (8192 by default). +-- Any read request greater than that will be safely truncated to this value. +-- @param length Amount of data to read (in Bytes). +-- @return buffer containing data successfully read + +--- Reposition read / write offset of the file descriptor. +-- The seek will be done either from the beginning of the file or relative +-- to the current position or relative to the end. +-- @class function +-- @name File.seek +-- @usage This function calls lseek(). +-- @param offset File Offset +-- @param whence Starting point ["set", "cur", "end"] +-- @return new (absolute) offset position + +--- Return the current read / write offset of the file descriptor. +-- @class function +-- @name File.tell +-- @usage This function calls lseek() with offset 0 from the current position. +-- @return offset position + +--- Synchronizes the file with the storage device. +-- Returns when the file is successfully written to the disk. +-- @class function +-- @name File.sync +-- @usage This function calls fsync() when data_only equals false +-- otherwise fdatasync(), on Windows _commit() is used instead. +-- @usage fdatasync() is only supported by Linux and Solaris. For other systems +-- the data_only parameter is ignored and fsync() is always called. +-- @param data_only Do not synchronize the metadata. (optional, boolean) +-- @return true + +--- Apply or test a lock on the file. +-- @class function +-- @name File.lock +-- @usage This function calls lockf() on POSIX and _locking() on Windows. +-- @usage The "lock" command is blocking, "tlock" is non-blocking, +-- "ulock" unlocks and "test" only tests for the lock. +-- @usage The "test" command is not available on Windows. +-- @usage Locks are by default advisory on POSIX, but mandatory on Windows. +-- @param command Locking Command ["lock", "tlock", "ulock", "test"] +-- @param length Amount of Bytes to lock from current offset (optional) +-- @return true + +--- Get file status and attributes. +-- @class function +-- @name File.stat +-- @param field Only return a specific field, not the whole table (optional) +-- @usage This function calls fstat(). +-- @return Table containing:
    +--
  • atime = Last access timestamp
  • +--
  • blksize = Blocksize (POSIX only)
  • +--
  • blocks = Blocks used (POSIX only)
  • +--
  • ctime = Creation timestamp
  • +--
  • dev = Device ID
  • +--
  • gid = Group ID
  • +--
  • ino = Inode
  • +--
  • modedec = Mode converted into a decimal number
  • +--
  • modestr = Mode as string as returned by `ls -l`
  • +--
  • mtime = Last modification timestamp
  • +--
  • nlink = Number of links
  • +--
  • rdev = Device ID (if special file)
  • +--
  • size = Size in bytes
  • +--
  • type = ["reg", "dir", "chr", "blk", "fifo", "lnk", "sock"]
  • +--
  • uid = User ID
  • +--
+ +--- Close the file descriptor. +-- @class function +-- @name File.close +-- @return true + +--- Get the number of the filedescriptor. +-- @class function +-- @name File.fileno +-- @return file descriptor number + +--- (POSIX) Set the blocking mode of the file descriptor. +-- @class function +-- @name File.setblocking +-- @param blocking (boolean) +-- @return true \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.Socket.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.Socket.lua new file mode 100644 index 0000000..7123393 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.Socket.lua @@ -0,0 +1,170 @@ +--- Socket Object. +-- Supports IPv4, IPv6 and UNIX (POSIX only) families. +-- @cstyle instance +module "nixio.Socket" + +--- Get the local address of a socket. +-- @class function +-- @name Socket.getsockname +-- @return IP-Address +-- @return Port + +--- Get the peer address of a socket. +-- @class function +-- @name Socket.getpeername +-- @return IP-Address +-- @return Port + +--- Bind the socket to a network address. +-- @class function +-- @name Socket.bind +-- @usage This function calls getaddrinfo() and bind() but NOT listen(). +-- @usage If host is a domain name it will be looked up and bind() +-- tries the IP-Addresses in the order returned by the DNS resolver +-- until the bind succeeds. +-- @usage UNIX sockets ignore the port, +-- and interpret host as a socket path. +-- @param host Host (optional, default: all addresses) +-- @param port Port or service description +-- @return true + +--- Connect the socket to a network address. +-- @class function +-- @name Socket.connect +-- @usage This function calls getaddrinfo() and connect(). +-- @usage If host is a domain name it will be looked up and connect() +-- tries the IP-Addresses in the order returned by the DNS resolver +-- until the connect succeeds. +-- @usage UNIX sockets ignore the port, +-- and interpret host as a socket path. +-- @param host Hostname or IP-Address (optional, default: localhost) +-- @param port Port or service description +-- @return true + +--- Listen for connections on the socket. +-- @class function +-- @name Socket.listen +-- @param backlog Length of queue for pending connections +-- @return true + +--- Accept a connection on the socket. +-- @class function +-- @name Socket.accept +-- @return Socket Object +-- @return Peer IP-Address +-- @return Peer Port + +--- Send a message on the socket specifying the destination. +-- @class function +-- @name Socket.sendto +-- @usage Warning: It is not guaranteed that all data +-- in the buffer is written at once. +-- You have to check the return value - the number of bytes actually written - +-- or use the safe IO functions in the high-level IO utility module. +-- @usage Unlike standard Lua indexing the lowest offset and default is 0. +-- @param buffer Buffer holding the data to be written. +-- @param host Target IP-Address +-- @param port Target Port +-- @param offset Offset to start reading the buffer from. (optional) +-- @param length Length of chunk to read from the buffer. (optional) +-- @return number of bytes written + +--- Send a message on the socket. +-- This function is identical to sendto except for the missing destination +-- paramters. See the sendto description for a detailed description. +-- @class function +-- @name Socket.send +-- @param buffer Buffer holding the data to be written. +-- @param offset Offset to start reading the buffer from. (optional) +-- @param length Length of chunk to read from the buffer. (optional) +-- @see Socket.sendto +-- @return number of bytes written + +--- Send a message on the socket (This is an alias for send). +-- See the sendto description for a detailed description. +-- @class function +-- @name Socket.write +-- @param buffer Buffer holding the data to be written. +-- @param offset Offset to start reading the buffer from. (optional) +-- @param length Length of chunk to read from the buffer. (optional) +-- @see Socket.sendto +-- @return number of bytes written + +--- Receive a message on the socket including the senders source address. +-- @class function +-- @name Socket.recvfrom +-- @usage Warning: It is not guaranteed that all requested data +-- is read at once. +-- You have to check the return value - the length of the buffer actually read - +-- or use the safe IO functions in the high-level IO utility module. +-- @usage The length of the return buffer is limited by the (compile time) +-- nixio buffersize which is nixio.const.buffersize (8192 by default). +-- Any read request greater than that will be safely truncated to this value. +-- @param length Amount of data to read (in Bytes). +-- @return buffer containing data successfully read +-- @return host IP-Address of the sender +-- @return port Port of the sender + +--- Receive a message on the socket. +-- This function is identical to recvfrom except that it does not return +-- the sender's source address. See the recvfrom description for more details. +-- @class function +-- @name Socket.recv +-- @param length Amount of data to read (in Bytes). +-- @see Socket.recvfrom +-- @return buffer containing data successfully read + +--- Receive a message on the socket (This is an alias for recv). +-- See the recvfrom description for more details. +-- @class function +-- @name Socket.read +-- @param length Amount of data to read (in Bytes). +-- @see Socket.recvfrom +-- @return buffer containing data successfully read + +--- Close the socket. +-- @class function +-- @name Socket.close +-- @return true + +--- Shut down part of a full-duplex connection. +-- @class function +-- @name Socket.shutdown +-- @param how (optional, default: rdwr) ["rdwr", "rd", "wr"] +-- @return true + +--- Get the number of the filedescriptor. +-- @class function +-- @name Socket.fileno +-- @return file descriptor number + +--- Set the blocking mode of the socket. +-- @class function +-- @name Socket.setblocking +-- @param blocking (boolean) +-- @return true + +--- Set a socket option. +-- @class function +-- @name Socket.setopt +-- @param level Level ["socket", "tcp", "ip", "ipv6"] +-- @param option Option ["keepalive", "reuseaddr", "sndbuf", "rcvbuf", +-- "priority", "broadcast", "linger", "sndtimeo", "rcvtimeo", "dontroute", +-- "bindtodevice", "error", "oobinline", "cork" (TCP), "nodelay" (TCP), +-- "mtu" (IP, IPv6), "hdrincl" (IP), "multicast_ttl" (IP), "multicast_loop" +-- (IP, IPv6), "multicast_if" (IP, IPv6), "v6only" (IPv6), "multicast_hops" +-- (IPv6), "add_membership" (IP, IPv6), "drop_membership" (IP, IPv6)] +-- @param value Value +-- @return true + +--- Get a socket option. +-- @class function +-- @name Socket.getopt +-- @param level Level ["socket", "tcp", "ip", "ipv6"] +-- @param option Option ["keepalive", "reuseaddr", "sndbuf", "rcvbuf", +-- "priority", "broadcast", "linger", "sndtimeo", "rcvtimeo", "dontroute", +-- "bindtodevice", "error", "oobinline", "cork" (TCP), "nodelay" (TCP), +-- "mtu" (IP, IPv6), "hdrincl" (IP), "multicast_ttl" (IP), "multicast_loop" +-- (IP, IPv6), "multicast_if" (IP, IPv6), "v6only" (IPv6), "multicast_hops" +-- (IPv6), "add_membership" (IP, IPv6), "drop_membership" (IP, IPv6)] +-- @return Value \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.TLSContext.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.TLSContext.lua new file mode 100644 index 0000000..7cc0711 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.TLSContext.lua @@ -0,0 +1,46 @@ +--- Transport Layer Security Context Object. +-- @cstyle instance +module "nixio.TLSContext" + +--- Create a TLS Socket from a socket descriptor. +-- @class function +-- @name TLSContext.create +-- @param socket Socket Object +-- @return TLSSocket Object + +--- Assign a PEM certificate to this context. +-- @class function +-- @name TLSContext.set_cert +-- @usage This function calls SSL_CTX_use_certificate_chain_file(). +-- @param path Certificate File path +-- @return true + +--- Assign a PEM private key to this context. +-- @class function +-- @name TLSContext.set_key +-- @usage This function calls SSL_CTX_use_PrivateKey_file(). +-- @param path Private Key File path +-- @return true + +--- Set the available ciphers for this context. +-- @class function +-- @name TLSContext.set_ciphers +-- @usage This function calls SSL_CTX_set_cipher_list(). +-- @param cipherlist String containing a list of ciphers +-- @return true + +--- Set the verification depth of this context. +-- @class function +-- @name TLSContext.set_verify_depth +-- @usage This function calls SSL_CTX_set_verify_depth(). +-- @param depth Depth +-- @return true + +--- Set the verification flags of this context. +-- @class function +-- @name TLSContext.set_verify +-- @usage This function calls SSL_CTX_set_verify(). +-- @param flag1 First Flag ["none", "peer", "verify_fail_if_no_peer_cert", +-- "client_once"] +-- @param ... More Flags [-"-] +-- @return true \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.TLSSocket.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.TLSSocket.lua new file mode 100644 index 0000000..b932cde --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.TLSSocket.lua @@ -0,0 +1,73 @@ +--- TLS Socket Object. +-- TLS Sockets contain the underlying socket and context in the fields +-- "socket" and "context". +-- @cstyle instance +module "nixio.TLSSocket" + +--- Initiate the TLS handshake as client with the server. +-- @class function +-- @name TLSSocket.connect +-- @usage This function calls SSL_connect(). +-- @usage You have to call either connect or accept before transmitting data. +-- @see TLSSocket.accept +-- @return true + +--- Wait for a TLS handshake from a client. +-- @class function +-- @name TLSSocket.accept +-- @usage This function calls SSL_accept(). +-- @usage You have to call either connect or accept before transmitting data. +-- @see TLSSocket.connect +-- @return true + +--- Send a message to the socket. +-- @class function +-- @name TLSSocket.send +-- @usage This function calls SSL_write(). +-- @usage Warning: It is not guaranteed that all data +-- in the buffer is written at once. +-- You have to check the return value - the number of bytes actually written - +-- or use the safe IO functions in the high-level IO utility module. +-- @usage Unlike standard Lua indexing the lowest offset and default is 0. +-- @param buffer Buffer holding the data to be written. +-- @param offset Offset to start reading the buffer from. (optional) +-- @param length Length of chunk to read from the buffer. (optional) +-- @return number of bytes written + +--- Send a message on the socket (This is an alias for send). +-- See the send description for a detailed description. +-- @class function +-- @name TLSSocket.write +-- @param buffer Buffer holding the data to be written. +-- @param offset Offset to start reading the buffer from. (optional) +-- @param length Length of chunk to read from the buffer. (optional) +-- @see TLSSocket.send +-- @return number of bytes written + +--- Receive a message on the socket. +-- @class function +-- @name TLSSocket.recv +-- @usage This function calls SSL_read(). +-- @usage Warning: It is not guaranteed that all requested data +-- is read at once. +-- You have to check the return value - the length of the buffer actually read - +-- or use the safe IO functions in the high-level IO utility module. +-- @usage The length of the return buffer is limited by the (compile time) +-- nixio buffersize which is nixio.const.buffersize (8192 by default). +-- Any read request greater than that will be safely truncated to this value. +-- @param length Amount of data to read (in Bytes). +-- @return buffer containing data successfully read + +--- Receive a message on the socket (This is an alias for recv). +-- See the recv description for more details. +-- @class function +-- @name TLSSocket.read +-- @param length Amount of data to read (in Bytes). +-- @see TLSSocket.recv +-- @return buffer containing data successfully read + +--- Shut down the TLS connection. +-- @class function +-- @name TLSSocket.shutdown +-- @usage This function calls SSL_shutdown(). +-- @return true \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.UnifiedIO.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.UnifiedIO.lua new file mode 100644 index 0000000..6e407ff --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.UnifiedIO.lua @@ -0,0 +1,129 @@ +--- Unified high-level I/O utility API for Files, Sockets and TLS-Sockets. +-- These functions are added to the object function tables by doing +-- require "nixio.util", can be used on all nixio IO Descriptors and +-- are based on the shared low-level read() and write() functions. +-- @cstyle instance +module "nixio.UnifiedIO" + +--- Test whether the I/O-Descriptor is a socket. +-- @class function +-- @name UnifiedIO.is_socket +-- @return boolean + +--- Test whether the I/O-Descriptor is a TLS socket. +-- @class function +-- @name UnifiedIO.is_tls_socket +-- @return boolean + +--- Test whether the I/O-Descriptor is a file. +-- @class function +-- @name UnifiedIO.is_file +-- @return boolean + +--- Read a block of data and wait until all data is available. +-- @class function +-- @name UnifiedIO.readall +-- @usage This function uses the low-level read function of the descriptor. +-- @usage If the length parameter is ommited, this function returns all data +-- that can be read before an end-of-file, end-of-stream, connection shutdown +-- or similar happens. +-- @usage If the descriptor is non-blocking this function may fail with EAGAIN. +-- @param length Bytes to read (optional) +-- @return data that was successfully read if no error occured +-- @return - reserved for error code - +-- @return - reserved for error message - +-- @return data that was successfully read even if an error occured + +--- Write a block of data and wait until all data is written. +-- @class function +-- @name UnifiedIO.writeall +-- @usage This function uses the low-level write function of the descriptor. +-- @usage If the descriptor is non-blocking this function may fail with EAGAIN. +-- @param block Bytes to write +-- @return bytes that were successfully written if no error occured +-- @return - reserved for error code - +-- @return - reserved for error message - +-- @return bytes that were successfully written even if an error occured + +--- Create a line-based iterator. +-- Lines may end with either \n or \r\n, these control chars are not included +-- in the return value. +-- @class function +-- @name UnifiedIO.linesource +-- @usage This function uses the low-level read function of the descriptor. +-- @usage Note: This function uses an internal buffer to read +-- ahead. Do NOT mix calls to read(all) and the returned iterator. If you want +-- to stop reading line-based and want to use the read(all) functions instead +-- you can pass "true" to the iterator which will flush the buffer +-- and return the bufferd data. +-- @usage If the limit parameter is ommited, this function uses the nixio +-- buffersize (8192B by default). +-- @usage If the descriptor is non-blocking the iterator may fail with EAGAIN. +-- @usage The iterator can be used as an LTN12 source. +-- @param limit Line limit +-- @return Line-based Iterator + +--- Create a block-based iterator. +-- @class function +-- @name UnifiedIO.blocksource +-- @usage This function uses the low-level read function of the descriptor. +-- @usage The blocksize given is only advisory and to be seen as an upper limit, +-- if an underlying read returns less bytes the chunk is nevertheless returned. +-- @usage If the limit parameter is ommited, the iterator returns data +-- until an end-of-file, end-of-stream, connection shutdown or similar happens. +-- @usage The iterator will not buffer so it is safe to mix with calls to read. +-- @usage If the descriptor is non-blocking the iterator may fail with EAGAIN. +-- @usage The iterator can be used as an LTN12 source. +-- @param blocksize Advisory blocksize (optional) +-- @param limit Amount of data to consume (optional) +-- @return Block-based Iterator + +--- Create a sink. +-- This sink will simply write all data that it receives and optionally +-- close the descriptor afterwards. +-- @class function +-- @name UnifiedIO.sink +-- @usage This function uses the writeall function of the descriptor. +-- @usage If the descriptor is non-blocking the sink may fail with EAGAIN. +-- @usage The iterator can be used as an LTN12 sink. +-- @param close_when_done (optional, boolean) +-- @return Sink + +--- Copy data from the current descriptor to another one. +-- @class function +-- @name UnifiedIO.copy +-- @usage This function uses the blocksource function of the source descriptor +-- and the sink function of the target descriptor. +-- @usage If the limit parameter is ommited, data is copied +-- until an end-of-file, end-of-stream, connection shutdown or similar happens. +-- @usage If the descriptor is non-blocking the function may fail with EAGAIN. +-- @param fdout Target Descriptor +-- @param size Bytes to copy (optional) +-- @return bytes that were successfully written if no error occured +-- @return - reserved for error code - +-- @return - reserved for error message - +-- @return bytes that were successfully written even if an error occured + +--- Copy data from the current descriptor to another one using kernel-space +-- copying if possible. +-- @class function +-- @name UnifiedIO.copyz +-- @usage This function uses the sendfile() syscall to copy the data or the +-- blocksource function of the source descriptor and the sink function +-- of the target descriptor as a fallback mechanism. +-- @usage If the limit parameter is ommited, data is copied +-- until an end-of-file, end-of-stream, connection shutdown or similar happens. +-- @usage If the descriptor is non-blocking the function may fail with EAGAIN. +-- @param fdout Target Descriptor +-- @param size Bytes to copy (optional) +-- @return bytes that were successfully written if no error occured +-- @return - reserved for error code - +-- @return - reserved for error message - +-- @return bytes that were successfully written even if an error occured + +--- Close the descriptor. +-- @class function +-- @name UnifiedIO.close +-- @usage If the descriptor is a TLS-socket the underlying descriptor is +-- closed without touching the TLS connection. +-- @return true \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.bin.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.bin.lua new file mode 100644 index 0000000..13e125d --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.bin.lua @@ -0,0 +1,33 @@ +--- Binary operations and conversion. +module "nixio.bin" + +--- Return a hexadecimal ASCII represantation of the content of a buffer. +-- @class function +-- @name hexlify +-- @param buffer Buffer +-- @return representation using characters [0-9a-f] + +--- Return a binary buffer from a hexadecimal ASCII representation. +-- @class function +-- @name unhexlify +-- @param hexvalue representation using characters [0-9a-f] +-- @return binary data + +--- Calculate the CRC32 value of a buffer. +-- @class function +-- @name crc32 +-- @param buffer Buffer +-- @param initial Initial CRC32 value (optional) +-- @return crc32 value + +--- Base64 encode a given buffer. +-- @class function +-- @name b64encode +-- @param buffer Buffer +-- @return base64 encoded buffer + +--- Base64 decode a given buffer. +-- @class function +-- @name b64decode +-- @param buffer Base 64 Encoded data +-- @return binary data \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.bit.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.bit.lua new file mode 100644 index 0000000..6951dd5 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.bit.lua @@ -0,0 +1,92 @@ +--- Bitfield operators and mainpulation functions. +-- Can be used as a drop-in replacement for bitlib. +module "nixio.bit" + +--- Bitwise OR several numbers. +-- @class function +-- @name bor +-- @param oper1 First Operand +-- @param oper2 Second Operand +-- @param ... More Operands +-- @return number + +--- Invert given number. +-- @class function +-- @name bnot +-- @param oper Operand +-- @return number + +--- Bitwise AND several numbers. +-- @class function +-- @name band +-- @param oper1 First Operand +-- @param oper2 Second Operand +-- @param ... More Operands +-- @return number + +--- Bitwise XOR several numbers. +-- @class function +-- @name bxor +-- @param oper1 First Operand +-- @param oper2 Second Operand +-- @param ... More Operands +-- @return number + +--- Left shift a number. +-- @class function +-- @name lshift +-- @param oper number +-- @param shift bits to shift +-- @return number + +--- Right shift a number. +-- @class function +-- @name rshift +-- @param oper number +-- @param shift bits to shift +-- @return number + +--- Arithmetically right shift a number. +-- @class function +-- @name arshift +-- @param oper number +-- @param shift bits to shift +-- @return number + +--- Integer division of 2 or more numbers. +-- @class function +-- @name div +-- @param oper1 Operand 1 +-- @param oper2 Operand 2 +-- @param ... More Operands +-- @return number + +--- Cast a number to the bit-operating range. +-- @class function +-- @name cast +-- @param oper number +-- @return number + +--- Sets one or more flags of a bitfield. +-- @class function +-- @name set +-- @param bitfield Bitfield +-- @param flag1 First Flag +-- @param ... More Flags +-- @return altered bitfield + +--- Unsets one or more flags of a bitfield. +-- @class function +-- @name unset +-- @param bitfield Bitfield +-- @param flag1 First Flag +-- @param ... More Flags +-- @return altered bitfield + +--- Checks whether given flags are set in a bitfield. +-- @class function +-- @name check +-- @param bitfield Bitfield +-- @param flag1 First Flag +-- @param ... More Flags +-- @return true when all flags are set, otherwise false \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.crypto.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.crypto.lua new file mode 100644 index 0000000..158d0fc --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.crypto.lua @@ -0,0 +1,15 @@ +--- Cryptographical library. +module "nixio.crypto" + +--- Create a hash object. +-- @class function +-- @name nixio.crypto.hash +-- @param algo Algorithm ["sha1", "md5"] +-- @return CryptoHash Object + +--- Create a HMAC object. +-- @class function +-- @name nixio.crypto.hmac +-- @param algo Algorithm ["sha1", "md5"] +-- @param key HMAC-Key +-- @return CryptoHash Object \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.fs.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.fs.lua new file mode 100644 index 0000000..5d08719 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.fs.lua @@ -0,0 +1,265 @@ +--- Low-level and high-level filesystem manipulation library. +module "nixio.fs" + + +--- Check user's permission on a file. +-- @class function +-- @name nixio.fs.access +-- @param path Path +-- @param mode1 First Mode to check ["f", "r", "w", "x"] +-- @param ... More Modes to check [-"-] +-- @return true + +--- Strip the directory part from a path. +-- @class function +-- @name nixio.fs.basename +-- @usage This function cannot fail and will never return nil. +-- @param path Path +-- @return basename + +--- Strip the base from a path. +-- @class function +-- @name nixio.fs.dirname +-- @usage This function cannot fail and will never return nil. +-- @param path Path +-- @return dirname + +--- Return the cannonicalized absolute pathname. +-- @class function +-- @name nixio.fs.realpath +-- @param path Path +-- @return absolute path + +--- Remove a file or directory. +-- @class function +-- @name nixio.fs.remove +-- @param path Path +-- @return true + +--- Delete a name and - if no links are left - the associated file. +-- @class function +-- @name nixio.fs.unlink +-- @param path Path +-- @return true + +--- Renames a file or directory. +-- @class function +-- @name nixio.fs.rename +-- @param src Source path +-- @param dest Destination path +-- @usage It is normally not possible to rename files accross fileystems. +-- @return true + +--- Remove an empty directory. +-- @class function +-- @name nixio.fs.rmdir +-- @param path Path +-- @return true + +--- Create a new directory. +-- @class function +-- @name nixio.fs.mkdir +-- @param path Path +-- @param mode File mode (optional, see chmod and umask) +-- @see nixio.fs.chmod +-- @see nixio.umask +-- @return true + +--- Change the file mode. +-- @class function +-- @name nixio.fs.chmod +-- @usage Windows only supports setting the write-protection through the +-- "Writable to others" bit. +-- @usage Notice: The mode-flag for the functions +-- open, mkdir, mkfifo are affected by the umask. +-- @param path Path +-- @param mode File mode +-- [decimal mode number, "[-r][-w][-xsS][-r][-w][-xsS][-r][-w][-xtT]"] +-- @see nixio.umask +-- @return true + +--- Iterate over the entries of a directory. +-- @class function +-- @name nixio.fs.dir +-- @usage The special entries "." and ".." are omitted. +-- @param path Path +-- @return directory iterator returning one entry per call + +--- Create a hard link. +-- @class function +-- @name nixio.fs.link +-- @usage This function calls link() on POSIX and CreateHardLink() on Windows. +-- @param oldpath Path +-- @param newpath Path +-- @return true + +--- Change file last access and last modification time. +-- @class function +-- @name nixio.fs.utimes +-- @param path Path +-- @param actime Last access timestamp (optional, default: current time) +-- @param mtime Last modification timestamp (optional, default: actime) +-- @return true + +--- Get file status and attributes. +-- @class function +-- @name nixio.fs.stat +-- @param path Path +-- @param field Only return a specific field, not the whole table (optional) +-- @return Table containing:
    +--
  • atime = Last access timestamp
  • +--
  • blksize = Blocksize (POSIX only)
  • +--
  • blocks = Blocks used (POSIX only)
  • +--
  • ctime = Creation timestamp
  • +--
  • dev = Device ID
  • +--
  • gid = Group ID
  • +--
  • ino = Inode
  • +--
  • modedec = Mode converted into a decimal number
  • +--
  • modestr = Mode as string as returned by `ls -l`
  • +--
  • mtime = Last modification timestamp
  • +--
  • nlink = Number of links
  • +--
  • rdev = Device ID (if special file)
  • +--
  • size = Size in bytes
  • +--
  • type = ["reg", "dir", "chr", "blk", "fifo", "lnk", "sock"]
  • +--
  • uid = User ID
  • +--
+ +--- Get file status and attributes and do not resolve if target is a symlink. +-- @class function +-- @name nixio.fs.lstat +-- @param path Path +-- @param field Only return a specific field, not the whole table (optional) +-- @see nixio.fs.stat +-- @return Table containing attributes (see stat for a detailed description) + +--- (POSIX) Change owner and group of a file. +-- @class function +-- @name nixio.fs.chown +-- @param path Path +-- @param user User ID or Username (optional) +-- @param group Group ID or Groupname (optional) +-- @return true + +--- (POSIX) Change owner and group of a file and do not resolve +-- if target is a symlink. +-- @class function +-- @name nixio.fs.lchown +-- @param path Path +-- @param user User ID or Username (optional) +-- @param group Group ID or Groupname (optional) +-- @return true + +--- (POSIX) Create a FIFO (named pipe). +-- @class function +-- @name nixio.fs.mkfifo +-- @param path Path +-- @param mode File mode (optional, see chmod and umask) +-- @see nixio.fs.chmod +-- @see nixio.umask +-- @return true + +--- (POSIX) Create a symbolic link. +-- @class function +-- @name nixio.fs.symlink +-- @param oldpath Path +-- @param newpath Path +-- @return true + +--- (POSIX) Read the target of a symbolic link. +-- @class function +-- @name nixio.fs.readlink +-- @param path Path +-- @return target path + +--- (POSIX) Find pathnames matching a pattern. +-- @class function +-- @name nixio.fs.glob +-- @param pattern Pattern +-- @return path iterator +-- @return number of matches + +--- (POSIX) Get filesystem statistics. +-- @class function +-- @name nixio.fs.statvfs +-- @param path Path to any file within the filesystem. +-- @return Table containing:
    +--
  • bavail = available blocks
  • +--
  • bfree = free blocks
  • +--
  • blocks = number of fragments
  • +--
  • frsize = fragment size
  • +--
  • favail = available inodes
  • +--
  • ffree = free inodes
  • +--
  • files = inodes
  • +--
  • flag = flags
  • +--
  • fsid = filesystem ID
  • +--
  • namemax = maximum filename length
  • +--
+ +--- Read the contents of a file into a buffer. +-- @class function +-- @name nixio.fs.readfile +-- @param path Path +-- @param limit Maximum bytes to read (optional) +-- @return file contents + +--- Write a buffer into a file truncating the file first. +-- @class function +-- @name nixio.fs.writefile +-- @param path Path +-- @param data Data to write +-- @return true + +--- Copy data between files. +-- @class function +-- @name nixio.fs.datacopy +-- @param src Source file path +-- @param dest Destination file path +-- @param limit Maximum bytes to copy (optional) +-- @return true + +--- Copy a file, directory or symlink non-recursively preserving file mode, +-- timestamps, owner and group. +-- @class function +-- @name nixio.fs.copy +-- @usage The destination must always be a full destination path e.g. do not +-- omit the basename even if source and destination basename are equal. +-- @param src Source path +-- @param dest Destination path +-- @return true + +--- Rename a file, directory or symlink non-recursively across filesystems. +-- @class function +-- @name nixio.fs.move +-- @usage The destination must always be a full destination path e.g. do not +-- omit the basename even if source and destination basename are equal. +-- @param src Source path +-- @param dest Destination path +-- @return true + +--- Create a directory and all needed parent directories recursively. +-- @class function +-- @name nixio.fs.mkdirr +-- @param dest Destination path +-- @param mode File mode (optional, see chmod and umask) +-- @see nixio.fs.chmod +-- @see nixio.umask +-- @return true + +--- Rename a file, directory or symlink recursively across filesystems. +-- @class function +-- @name nixio.fs.mover +-- @usage The destination must always be a full destination path e.g. do not +-- omit the basename even if source and destination basename are equal. +-- @param src Source path +-- @param dest Destination path +-- @return true + +--- Copy a file, directory or symlink recursively preserving file mode, +-- timestamps, owner and group. +-- @class function +-- @name nixio.fs.copyr +-- @usage The destination must always be a full destination path e.g. do not +-- omit the basename even if source and destination basename are equal. +-- @param src Source path +-- @param dest Destination path +-- @return true \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.lua b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.lua new file mode 100644 index 0000000..1b434d7 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/docsrc/nixio.lua @@ -0,0 +1,467 @@ +--- General POSIX IO library. +module "nixio" + +--- Look up a hostname and service via DNS. +-- @class function +-- @name nixio.getaddrinfo +-- @param host hostname to lookup (optional) +-- @param family address family ["any", "inet", "inet6"] +-- @param service service name or port (optional) +-- @return Table containing one or more tables containing:
    +--
  • family = ["inet", "inet6"]
  • +--
  • socktype = ["stream", "dgram", "raw"]
  • +--
  • address = Resolved IP-Address
  • +--
  • port = Resolved Port (if service was given)
  • +--
+ +--- Reverse look up an IP-Address via DNS. +-- @class function +-- @name nixio.getnameinfo +-- @param ipaddr IPv4 or IPv6-Address +-- @return FQDN + +--- (Linux, BSD) Get a list of available network interfaces and their addresses. +-- @class function +-- @name nixio.getifaddrs +-- @return Table containing one or more tables containing:
    +--
  • name = Interface Name
  • +--
  • family = ["inet", "inet6", "packet"]
  • +--
  • addr = Interface Address (IPv4, IPv6, MAC, ...)
  • +--
  • broadaddr = Broadcast Address
  • +--
  • dstaddr = Destination Address (Point-to-Point)
  • +--
  • netmask = Netmask (if available)
  • +--
  • prefix = Prefix (if available)
  • +--
  • flags = Table of interface flags (up, multicast, loopback, ...)
  • +--
  • data = Statistics (Linux, "packet"-family)
  • +--
  • hatype = Hardware Type Identifier (Linix, "packet"-family)
  • +--
  • ifindex = Interface Index (Linux, "packet"-family)
  • +--
+ +--- Get protocol entry by name. +-- @usage This function returns nil if the given protocol is unknown. +-- @class function +-- @name nixio.getprotobyname +-- @param name protocol name to lookup +-- @return Table containing the following fields:
    +--
  • name = Protocol Name
  • +--
  • proto = Protocol Number
  • +--
  • aliases = Table of alias names
  • +--
+ +--- Get protocol entry by number. +-- @usage This function returns nil if the given protocol is unknown. +-- @class function +-- @name nixio.getprotobynumber +-- @param proto protocol number to lookup +-- @return Table containing the following fields:
    +--
  • name = Protocol Name
  • +--
  • proto = Protocol Number
  • +--
  • aliases = Table of alias names
  • +--
+ +--- Get all or a specifc proto entry. +-- @class function +-- @name nixio.getproto +-- @param proto protocol number or name to lookup (optional) +-- @return Table (or if no parameter is given, a table of tables) +-- containing the following fields:
    +--
  • name = Protocol Name
  • +--
  • proto = Protocol Number
  • +--
  • aliases = Table of alias names
  • +--
+ +--- Create a new socket and bind it to a network address. +-- This function is a shortcut for calling nixio.socket and then bind() +-- on the socket object. +-- @usage This functions calls getaddrinfo(), socket(), +-- setsockopt() and bind() but NOT listen(). +-- @usage The reuseaddr-option is automatically set before binding. +-- @class function +-- @name nixio.bind +-- @param host Hostname or IP-Address (optional, default: all addresses) +-- @param port Port or service description +-- @param family Address family ["any", "inet", "inet6"] +-- @param socktype Socket Type ["stream", "dgram"] +-- @return Socket Object + +--- Create a new socket and connect to a network address. +-- This function is a shortcut for calling nixio.socket and then connect() +-- on the socket object. +-- @usage This functions calls getaddrinfo(), socket() and connect(). +-- @class function +-- @name nixio.connect +-- @param host Hostname or IP-Address (optional, default: localhost) +-- @param port Port or service description +-- @param family Address family ["any", "inet", "inet6"] +-- @param socktype Socket Type ["stream", "dgram"] +-- @return Socket Object + +--- Open a file. +-- @class function +-- @name nixio.open +-- @usage Although this function also supports the traditional fopen() +-- file flags it does not create a file stream but uses the open() syscall. +-- @param path Filesystem path to open +-- @param flags Flag string or number (see open_flags). +-- ["r", "r+", "w", "w+", "a", "a+"] +-- @param mode File mode for newly created files (see chmod, umask). +-- @see nixio.umask +-- @see nixio.open_flags +-- @return File Object + +--- Generate flags for a call to open(). +-- @class function +-- @name nixio.open_flags +-- @usage This function cannot fail and will never return nil. +-- @usage The "nonblock" and "ndelay" flags are aliases. +-- @usage The "nonblock", "ndelay" and "sync" flags are no-ops on Windows. +-- @param flag1 First Flag ["append", "creat", "excl", "nonblock", "ndelay", +-- "sync", "trunc", "rdonly", "wronly", "rdwr"] +-- @param ... More Flags [-"-] +-- @return flag to be used as second paramter to open + +--- Duplicate a file descriptor. +-- @class function +-- @name nixio.dup +-- @usage This funcation calls dup2() if newfd is set, otherwise dup(). +-- @param oldfd Old descriptor [File Object, Socket Object (POSIX only)] +-- @param newfd New descriptor to serve as copy (optional) +-- @return File Object of new descriptor + +--- Create a pipe. +-- @class function +-- @name nixio.pipe +-- @return File Object of the read end +-- @return File Object of the write end + +--- Get the last system error code. +-- @class function +-- @name nixio.errno +-- @return Error code + +--- Get the error message for the corresponding error code. +-- @class function +-- @name nixio.strerror +-- @param errno System error code +-- @return Error message + +--- Sleep for a specified amount of time. +-- @class function +-- @usage Not all systems support nanosecond precision but you can expect +-- to have at least maillisecond precision. +-- @usage This function is not signal-protected and may fail with EINTR. +-- @param seconds Seconds to wait (optional) +-- @param nanoseconds Nanoseconds to wait (optional) +-- @name nixio.nanosleep +-- @return true + +--- Generate events-bitfield or parse revents-bitfield for poll. +-- @class function +-- @name nixio.poll_flags +-- @param mode1 revents-Flag bitfield returned from poll to parse OR +-- ["in", "out", "err", "pri" (POSIX), "hup" (POSIX), "nval" (POSIX)] +-- @param ... More mode strings for generating the flag [-"-] +-- @see nixio.poll +-- @return table with boolean fields reflecting the mode parameter +-- OR bitfield to use for the events-Flag field + +--- Wait for some event on a file descriptor. +-- poll() sets the revents-field of the tables provided by fds to a bitfield +-- indicating the events that occured. +-- @class function +-- @usage This function works in-place on the provided table and only +-- writes the revents field, you can use other fields on your demand. +-- @usage All metamethods on the tables provided as fds are ignored. +-- @usage The revents-fields are not reset when the call times out. +-- You have to check the first return value to be 0 to handle this case. +-- @usage If you want to wait on a TLS-Socket you have to use the underlying +-- socket instead. +-- @usage On Windows poll is emulated through select(), can only be used +-- on socket descriptors and cannot take more than 64 descriptors per call. +-- @usage This function is not signal-protected and may fail with EINTR. +-- @param fds Table containing one or more tables containing
    +--
  • fd = I/O Descriptor [Socket Object, File Object (POSIX)]
  • +--
  • events = events to wait for (bitfield generated with poll_flags)
  • +--
+-- @param timeout Timeout in milliseconds +-- @name nixio.poll +-- @see nixio.poll_flags +-- @return number of ready IO descriptors +-- @return the fds-table with revents-fields set + +--- (POSIX) Clone the current process. +-- @class function +-- @name nixio.fork +-- @return the child process id for the parent process, 0 for the child process + +--- (POSIX) Send a signal to one or more processes. +-- @class function +-- @name nixio.kill +-- @param target Target process of process group. +-- @param signal Signal to send +-- @return true + +--- (POSIX) Get the parent process id of the current process. +-- @class function +-- @name nixio.getppid +-- @return parent process id + +--- (POSIX) Get the user id of the current process. +-- @class function +-- @name nixio.getuid +-- @return process user id + +--- (POSIX) Get the group id of the current process. +-- @class function +-- @name nixio.getgid +-- @return process group id + +--- (POSIX) Set the group id of the current process. +-- @class function +-- @name nixio.setgid +-- @param gid New Group ID +-- @return true + +--- (POSIX) Set the user id of the current process. +-- @class function +-- @name nixio.setuid +-- @param gid New User ID +-- @return true + +--- (POSIX) Change priority of current process. +-- @class function +-- @name nixio.nice +-- @param nice Nice Value +-- @return true + +--- (POSIX) Create a new session and set the process group ID. +-- @class function +-- @name nixio.setsid +-- @return session id + +--- (POSIX) Wait for a process to change state. +-- @class function +-- @name nixio.waitpid +-- @usage If the "nohang" is given this function becomes non-blocking. +-- @param pid Process ID (optional, default: any childprocess) +-- @param flag1 Flag (optional) ["nohang", "untraced", "continued"] +-- @param ... More Flags [-"-] +-- @return process id of child or 0 if no child has changed state +-- @return ["exited", "signaled", "stopped"] +-- @return [exit code, terminate signal, stop signal] + +--- (POSIX) Get process times. +-- @class function +-- @name nixio.times +-- @return Table containing:
    +--
  • utime = user time
  • +--
  • utime = system time
  • +--
  • cutime = children user time
  • +--
  • cstime = children system time
  • +--
+ +--- (POSIX) Get information about current system and kernel. +-- @class function +-- @name nixio.uname +-- @return Table containing:
    +--
  • sysname = operating system
  • +--
  • nodename = network name (usually hostname)
  • +--
  • release = OS release
  • +--
  • version = OS version
  • +--
  • machine = hardware identifier
  • +--
+ +--- Change the working directory. +-- @class function +-- @name nixio.chdir +-- @param path New working directory +-- @return true + +--- Ignore or use set the default handler for a signal. +-- @class function +-- @name nixio.signal +-- @param signal Signal +-- @param handler ["ign", "dfl"] +-- @return true + +--- Get the ID of the current process. +-- @class function +-- @name nixio.getpid +-- @return process id + +--- Get the current working directory. +-- @class function +-- @name nixio.getcwd +-- @return workign directory + +--- Get the current environment table or a specific environment variable. +-- @class function +-- @name nixio.getenv +-- @param variable Variable (optional) +-- @return environment table or single environment variable + +--- Set or unset a environment variable. +-- @class function +-- @name nixio.setenv +-- @usage The environment variable will be unset if value is ommited. +-- @param variable Variable +-- @param value Value (optional) +-- @return true + +--- Execute a file to replace the current process. +-- @class function +-- @name nixio.exec +-- @usage The name of the executable is automatically passed as argv[0] +-- @usage This function does not return on success. +-- @param executable Executable +-- @param ... Parameters + +--- Invoke the shell and execute a file to replace the current process. +-- @class function +-- @name nixio.execp +-- @usage The name of the executable is automatically passed as argv[0] +-- @usage This function does not return on success. +-- @param executable Executable +-- @param ... Parameters + +--- Execute a file with a custom environment to replace the current process. +-- @class function +-- @name nixio.exece +-- @usage The name of the executable is automatically passed as argv[0] +-- @usage This function does not return on success. +-- @param executable Executable +-- @param arguments Argument Table +-- @param environment Environment Table (optional) + +--- Sets the file mode creation mask. +-- @class function +-- @name nixio.umask +-- @param mask New creation mask (see chmod for format specifications) +-- @return the old umask as decimal mode number +-- @return the old umask as mode string + +--- (Linux) Get overall system statistics. +-- @class function +-- @name nixio.sysinfo +-- @return Table containing:
    +--
  • uptime = system uptime in seconds
  • +--
  • loads = {loadavg1, loadavg5, loadavg15}
  • +--
  • totalram = total RAM
  • +--
  • freeram = free RAM
  • +--
  • sharedram = shared RAM
  • +--
  • bufferram = buffered RAM
  • +--
  • totalswap = total SWAP
  • +--
  • freeswap = free SWAP
  • +--
  • procs = number of running processes
  • +--
+ +--- Create a new socket. +-- @class function +-- @name nixio.socket +-- @param domain Domain ["inet", "inet6", "unix"] +-- @param type Type ["stream", "dgram", "raw"] +-- @return Socket Object + +--- (POSIX) Send data from a file to a socket in kernel-space. +-- @class function +-- @name nixio.sendfile +-- @param socket Socket Object +-- @param file File Object +-- @param length Amount of data to send (in Bytes). +-- @return bytes sent + +--- (Linux) Send data from / to a pipe in kernel-space. +-- @class function +-- @name nixio.splice +-- @param fdin Input I/O descriptor +-- @param fdout Output I/O descriptor +-- @param length Amount of data to send (in Bytes). +-- @param flags (optional, bitfield generated by splice_flags) +-- @see nixio.splice_flags +-- @return bytes sent + +--- (Linux) Generate a flag bitfield for a call to splice. +-- @class function +-- @name nixio.splice_flags +-- @param flag1 First Flag ["move", "nonblock", "more"] +-- @param ... More flags [-"-] +-- @see nixio.splice +-- @return Flag bitfield + +--- (POSIX) Open a connection to the system logger. +-- @class function +-- @name nixio.openlog +-- @param ident Identifier +-- @param flag1 Flag 1 ["cons", "nowait", "pid", "perror", "ndelay", "odelay"] +-- @param ... More flags [-"-] + +--- (POSIX) Close the connection to the system logger. +-- @class function +-- @name nixio.closelog + +--- (POSIX) Write a message to the system logger. +-- @class function +-- @name nixio.syslog +-- @param priority Priority ["emerg", "alert", "crit", "err", "warning", +-- "notice", "info", "debug"] +-- @param message + +--- (POSIX) Set the logmask of the system logger for current process. +-- @class function +-- @name nixio.setlogmask +-- @param priority Priority ["emerg", "alert", "crit", "err", "warning", +-- "notice", "info", "debug"] + +--- (POSIX) Encrypt a user password. +-- @class function +-- @name nixio.crypt +-- @param key Key +-- @param salt Salt +-- @return password hash + +--- (POSIX) Get all or a specific user group. +-- @class function +-- @name nixio.getgr +-- @param group Group ID or groupname (optional) +-- @return Table containing:
    +--
  • name = Group Name
  • +--
  • gid = Group ID
  • +--
  • passwd = Password
  • +--
  • mem = {Member #1, Member #2, ...}
  • +--
+ +--- (POSIX) Get all or a specific user account. +-- @class function +-- @name nixio.getpw +-- @param user User ID or username (optional) +-- @return Table containing:
    +--
  • name = Name
  • +--
  • uid = ID
  • +--
  • gid = Group ID
  • +--
  • passwd = Password
  • +--
  • dir = Home directory
  • +--
  • gecos = Information
  • +--
  • shell = Shell
  • +--
+ +--- (Linux, Solaris) Get all or a specific shadow password entry. +-- @class function +-- @name nixio.getsp +-- @param user username (optional) +-- @return Table containing:
    +--
  • namp = Name
  • +--
  • expire = Expiration Date
  • +--
  • flag = Flags
  • +--
  • inact = Inactivity Date
  • +--
  • lstchg = Last change
  • +--
  • max = Maximum
  • +--
  • min = Minimum
  • +--
  • warn = Warning
  • +--
  • pwdp = Password Hash
  • +--
+ +--- Create a new TLS context. +-- @class function +-- @name nixio.tls +-- @param mode TLS-Mode ["client", "server"] +-- @return TLSContext Object diff --git a/feeds/luci/libs/luci-lib-nixio/nixio-0.3-1.rockspec b/feeds/luci/libs/luci-lib-nixio/nixio-0.3-1.rockspec new file mode 100644 index 0000000..755cf81 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/nixio-0.3-1.rockspec @@ -0,0 +1,37 @@ +package = "nixio" +version = "0.3-1" +source = { + url = "http://dev.luci.freifunk-halle.net/nixio/nixio-0.3.tar.bz2" +} +description = { + summary = "System, Networking and I/O library for Lua", + detailed = [[ + Nixio is a multi-platform library offering a wide variety + of features such as IPv4, IPv6 and UNIX networking, large file I/O, file + system operations, system and process control, POSIX user/group management, + basic cryptographical hashing, hmac and TLS support, bit operations and + binary conversion. + ]], + homepage = "http://luci.subsignal.org", + license = "Apache 2.0", + maintainer = "Steven Barth", +} +dependencies = { + "lua >= 5.1" +} +external_dependencies = { + OPENSSL = { + header = "openssl/ssl.h", + } +} +build = { + type = "make", + build_variables = { + NIXIO_LDFLAGS = "-lcrypt -L$(OPENSSL_LIBDIR) -I$(OPENSSL_INCDIR)", + LUA_CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR)", + }, + install_variables = { + LUA_MODULEDIR = "$(LUADIR)", + LUA_LIBRARYDIR = "$(LIBDIR)", + }, +} diff --git a/feeds/luci/libs/luci-lib-nixio/root/lib/upgrade/luci-add-conffiles.sh b/feeds/luci/libs/luci-lib-nixio/root/lib/upgrade/luci-add-conffiles.sh new file mode 100644 index 0000000..77399b9 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/root/lib/upgrade/luci-add-conffiles.sh @@ -0,0 +1,16 @@ +add_luci_conffiles() +{ + local filelist="$1" + + # save ssl certs + if [ -d /etc/nixio ]; then + find /etc/nixio -type f >> $filelist + fi + + # save uhttpd certs + [ -f "/etc/uhttpd.key" ] && echo /etc/uhttpd.key >> $filelist + [ -f "/etc/uhttpd.crt" ] && echo /etc/uhttpd.crt >> $filelist +} + +sysupgrade_init_conffiles="$sysupgrade_init_conffiles add_luci_conffiles" + diff --git a/feeds/luci/libs/luci-lib-nixio/root/usr/lib/lua/nixio/fs.lua b/feeds/luci/libs/luci-lib-nixio/root/usr/lib/lua/nixio/fs.lua new file mode 100644 index 0000000..8883835 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/root/usr/lib/lua/nixio/fs.lua @@ -0,0 +1,175 @@ +--[[ +nixio - Linux I/O library for lua + +Copyright 2009 Steven Barth + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ +]]-- + +local table = require "table" +local nixio = require "nixio" +local type, ipairs, setmetatable = type, ipairs, setmetatable +require "nixio.util" + + +module ("nixio.fs", function(m) setmetatable(m, {__index = nixio.fs}) end) + + +function readfile(path, limit) + local fd, code, msg = nixio.open(path, "r") + local data + if not fd then + return nil, code, msg + end + + data, code, msg = fd:readall(limit) + + fd:close() + return data, code, msg +end + + +function writefile(path, data) + local fd, code, msg, stat = nixio.open(path, "w") + if not fd then + return nil, code, msg + end + + stat, code, msg = fd:writeall(data) + + fd:close() + return stat, code, msg +end + +function datacopy(src, dest, size) + local fdin, code, msg = nixio.open(src, "r") + if not fdin then + return nil, code, msg + end + + local fdout, code, msg = nixio.open(dest, "w") + if not fdout then + return nil, code, msg + end + + local stat, code, msg, sent = fdin:copy(fdout, size) + fdin:close() + fdout:close() + + return stat, code, msg, sent +end + +function copy(src, dest) + local stat, code, msg, res = nixio.fs.lstat(src) + if not stat then + return nil, code, msg + end + + if stat.type == "dir" then + if nixio.fs.stat(dest, type) ~= "dir" then + res, code, msg = nixio.fs.mkdir(dest) + else + stat = true + end + elseif stat.type == "lnk" then + res, code, msg = nixio.fs.symlink(nixio.fs.readlink(src), dest) + elseif stat.type == "reg" then + res, code, msg = datacopy(src, dest) + end + + if not res then + return nil, code, msg + end + + nixio.fs.utimes(dest, stat.atime, stat.mtime) + + if nixio.fs.lchown then + nixio.fs.lchown(dest, stat.uid, stat.gid) + end + + if stat.type ~= "lnk" then + nixio.fs.chmod(dest, stat.modedec) + end + + return true +end + +function move(src, dest) + local stat, code, msg = nixio.fs.rename(src, dest) + if not stat and code == nixio.const.EXDEV then + stat, code, msg = copy(src, dest) + if stat then + stat, code, msg = nixio.fs.unlink(src) + end + end + return stat, code, msg +end + +function mkdirr(dest, mode) + if nixio.fs.stat(dest, "type") == "dir" then + return true + else + local stat, code, msg = nixio.fs.mkdir(dest, mode) + if not stat and code == nixio.const.ENOENT then + stat, code, msg = mkdirr(nixio.fs.dirname(dest), mode) + if stat then + stat, code, msg = nixio.fs.mkdir(dest, mode) + end + end + return stat, code, msg + end +end + +local function _recurse(cb, src, dest) + local type = nixio.fs.lstat(src, "type") + if type ~= "dir" then + return cb(src, dest) + else + local stat, se, code, msg, s, c, m = true, nixio.const.sep + if dest then + s, c, m = cb(src, dest) + stat, code, msg = stat and s, c or code, m or msg + end + + for e in nixio.fs.dir(src) do + if dest then + s, c, m = _recurse(cb, src .. se .. e, dest .. se .. e) + else + s, c, m = _recurse(cb, src .. se .. e) + end + stat, code, msg = stat and s, c or code, m or msg + end + + if not dest then -- Postfix + s, c, m = cb(src) + stat, code, msg = stat and s, c or code, m or msg + end + + return stat, code, msg + end +end + +function copyr(src, dest) + return _recurse(copy, src, dest) +end + +function mover(src, dest) + local stat, code, msg = nixio.fs.rename(src, dest) + if not stat and code == nixio.const.EXDEV then + stat, code, msg = _recurse(copy, src, dest) + if stat then + stat, code, msg = _recurse(nixio.fs.remove, src) + end + end + return stat, code, msg +end + +function remover(src) + return _recurse(nixio.fs.remove, src) +end \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-nixio/root/usr/lib/lua/nixio/util.lua b/feeds/luci/libs/luci-lib-nixio/root/usr/lib/lua/nixio/util.lua new file mode 100644 index 0000000..63d2f62 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/root/usr/lib/lua/nixio/util.lua @@ -0,0 +1,270 @@ +--[[ +nixio - Linux I/O library for lua + +Copyright 2009 Steven Barth + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ +]]-- + +local table = require "table" +local nixio = require "nixio" +local getmetatable, assert, pairs, type = getmetatable, assert, pairs, type +local tostring = tostring + +module "nixio.util" + +local BUFFERSIZE = nixio.const.buffersize +local ZIOBLKSIZE = 65536 +local socket = nixio.meta_socket +local tls_socket = nixio.meta_tls_socket +local file = nixio.meta_file +local uname = nixio.uname() +local ZBUG = uname.sysname == "Linux" and uname.release:sub(1, 3) == "2.4" + +function consume(iter, append) + local tbl = append or {} + if iter then + for obj in iter do + tbl[#tbl+1] = obj + end + end + return tbl +end + +local meta = {} + +function meta.is_socket(self) + return (getmetatable(self) == socket) +end + +function meta.is_tls_socket(self) + return (getmetatable(self) == tls_socket) +end + +function meta.is_file(self) + return (getmetatable(self) == file) +end + +function meta.readall(self, len) + local block, code, msg = self:read(len or BUFFERSIZE) + + if not block then + return nil, code, msg, "" + elseif #block == 0 then + return "", nil, nil, "" + end + + local data, total = {block}, #block + + while not len or len > total do + block, code, msg = self:read(len and (len - total) or BUFFERSIZE) + + if not block then + return nil, code, msg, table.concat(data) + elseif #block == 0 then + break + end + + data[#data+1], total = block, total + #block + end + + local data = #data > 1 and table.concat(data) or data[1] + return data, nil, nil, data +end +meta.recvall = meta.readall + +function meta.writeall(self, data) + data = tostring(data) + local sent, code, msg = self:write(data) + + if not sent then + return nil, code, msg, 0 + end + + local total = sent + + while total < #data do + sent, code, msg = self:write(data, total) + + if not sent then + return nil, code, msg, total + end + + total = total + sent + end + + return total, nil, nil, total +end +meta.sendall = meta.writeall + +function meta.linesource(self, limit) + limit = limit or BUFFERSIZE + local buffer = "" + local bpos = 0 + return function(flush) + local line, endp, _ + + if flush then + line = buffer:sub(bpos + 1) + buffer = type(flush) == "string" and flush or "" + bpos = 0 + return line + end + + while not line do + _, endp, line = buffer:find("(.-)\r?\n", bpos + 1) + if line then + bpos = endp + return line + elseif #buffer < limit + bpos then + local newblock, code, msg = self:read(limit + bpos - #buffer) + if not newblock then + return nil, code, msg + elseif #newblock == 0 then + return nil + end + buffer = buffer:sub(bpos + 1) .. newblock + bpos = 0 + else + return nil, 0 + end + end + end +end + +function meta.blocksource(self, bs, limit) + bs = bs or BUFFERSIZE + return function() + local toread = bs + if limit then + if limit < 1 then + return nil + elseif limit < toread then + toread = limit + end + end + + local block, code, msg = self:read(toread) + + if not block then + return nil, code, msg + elseif #block == 0 then + return nil + else + if limit then + limit = limit - #block + end + + return block + end + end +end + +function meta.sink(self, close) + return function(chunk, src_err) + if not chunk and not src_err and close then + if self.shutdown then + self:shutdown() + end + self:close() + elseif chunk and #chunk > 0 then + return self:writeall(chunk) + end + return true + end +end + +function meta.copy(self, fdout, size) + local source = self:blocksource(nil, size) + local sink = fdout:sink() + local sent, chunk, code, msg = 0 + + repeat + chunk, code, msg = source() + sink(chunk, code, msg) + sent = chunk and (sent + #chunk) or sent + until not chunk + return not code and sent or nil, code, msg, sent +end + +function meta.copyz(self, fd, size) + local sent, lsent, code, msg = 0 + local splicable + + if not ZBUG and self:is_file() then + local ftype = self:stat("type") + if nixio.sendfile and fd:is_socket() and ftype == "reg" then + repeat + lsent, code, msg = nixio.sendfile(fd, self, size or ZIOBLKSIZE) + if lsent then + sent = sent + lsent + size = size and (size - lsent) + end + until (not lsent or lsent == 0 or (size and size == 0)) + if lsent or (not lsent and sent == 0 and + code ~= nixio.const.ENOSYS and code ~= nixio.const.EINVAL) then + return lsent and sent, code, msg, sent + end + elseif nixio.splice and not fd:is_tls_socket() and ftype == "fifo" then + splicable = true + end + end + + if nixio.splice and fd:is_file() and not splicable then + splicable = not self:is_tls_socket() and fd:stat("type") == "fifo" + end + + if splicable then + repeat + lsent, code, msg = nixio.splice(self, fd, size or ZIOBLKSIZE) + if lsent then + sent = sent + lsent + size = size and (size - lsent) + end + until (not lsent or lsent == 0 or (size and size == 0)) + if lsent or (not lsent and sent == 0 and + code ~= nixio.const.ENOSYS and code ~= nixio.const.EINVAL) then + return lsent and sent, code, msg, sent + end + end + + return self:copy(fd, size) +end + +if tls_socket then + function tls_socket.close(self) + return self.socket:close() + end + + function tls_socket.getsockname(self) + return self.socket:getsockname() + end + + function tls_socket.getpeername(self) + return self.socket:getpeername() + end + + function tls_socket.getsockopt(self, ...) + return self.socket:getsockopt(...) + end + tls_socket.getopt = tls_socket.getsockopt + + function tls_socket.setsockopt(self, ...) + return self.socket:setsockopt(...) + end + tls_socket.setopt = tls_socket.setsockopt +end + +for k, v in pairs(meta) do + file[k] = v + socket[k] = v + if tls_socket then + tls_socket[k] = v + end +end diff --git a/feeds/luci/libs/luci-lib-nixio/src/Makefile b/feeds/luci/libs/luci-lib-nixio/src/Makefile new file mode 100644 index 0000000..a7e9a77 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/Makefile @@ -0,0 +1,120 @@ +OS = Linux +AXTLS_VERSION = 1.2.1 +AXTLS_DIR = axTLS +AXTLS_FILE = $(AXTLS_DIR)-$(AXTLS_VERSION).tar.gz +#NIXIO_TLS ?= openssl +NIXIO_SHADOW ?= $(shell echo 'int main(void){ return !getspnam("root"); }' | $(CC) $(CFLAGS) -include shadow.h -xc -o/dev/null - 2>/dev/null && echo yes) +NIXIO_SO = nixio.so +NIXIO_LDFLAGS = -llua -lm -ldl +CFLAGS += -std=gnu99 + +ifeq (,$(findstring Darwin,$(OS))) + NIXIO_LDFLAGS += -lcrypt -shared +else + NIXIO_LDFLAGS += -bundle -undefined dynamic_lookup + EXTRA_CFLAGS += -D__DARWIN__ +endif + +NIXIO_OBJ = nixio.o socket.o sockopt.o bind.o address.o \ + protoent.o poll.o io.o file.o splice.o process.o \ + syslog.o bit.o binary.o fs.o user.o \ + $(if $(NIXIO_TLS),tls-crypto.o tls-context.o tls-socket.o,) + +ifeq ($(NIXIO_TLS),axtls) + TLS_CFLAGS = -IaxTLS/ssl -IaxTLS/crypto -IaxTLS/config -include axtls-compat.h + TLS_DEPENDS = axtls-compat.o + NIXIO_OBJ += axtls-compat.o libaxtls.a +endif + +ifeq ($(NIXIO_TLS),openssl) + NIXIO_LDFLAGS += -lssl -lcrypto +endif + +ifeq ($(NIXIO_TLS),cyassl) + NIXIO_LDFLAGS += -lcyassl + TLS_DEPENDS = cyassl-compat.o + TLS_CFLAGS = -include cyassl-compat.h + NIXIO_OBJ += cyassl-compat.o +endif + +ifeq ($(NIXIO_TLS),) + NIXIO_CFLAGS += -DNO_TLS +endif + +ifneq ($(NIXIO_SHADOW),yes) + NIXIO_CFLAGS += -DNO_SHADOW +endif + + +ifeq ($(OS),SunOS) + NIXIO_LDFLAGS += -lsocket -lnsl -lsendfile +endif + +ifneq (,$(findstring MINGW,$(OS))$(findstring mingw,$(OS))$(findstring Windows,$(OS))) + NIXIO_CROSS_CC:=$(shell which i586-mingw32msvc-cc) +ifneq (,$(NIXIO_CROSS_CC)) + CC:=$(NIXIO_CROSS_CC) +endif + NIXIO_OBJ += mingw-compat.o + NIXIO_LDFLAGS_POST:=-llua -lssl -lcrypto -lws2_32 -lgdi32 + FPIC:= + EXTRA_CFLAGS += -D_WIN32_WINNT=0x0501 + LUA_CFLAGS:= + NIXIO_SO:=nixio.dll + NIXIO_LDFLAGS:= +endif + + +%.o: %.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(NIXIO_CFLAGS) $(LUA_CFLAGS) $(FPIC) -c -o $@ $< + +ifneq ($(NIXIO_TLS),) +tls-crypto.o: $(TLS_DEPENDS) tls-crypto.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(NIXIO_CFLAGS) $(LUA_CFLAGS) $(FPIC) $(TLS_CFLAGS) -c -o $@ tls-crypto.c + +tls-context.o: $(TLS_DEPENDS) tls-context.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(NIXIO_CFLAGS) $(LUA_CFLAGS) $(FPIC) $(TLS_CFLAGS) -c -o $@ tls-context.c + +tls-socket.o: $(TLS_DEPENDS) tls-socket.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(NIXIO_CFLAGS) $(LUA_CFLAGS) $(FPIC) $(TLS_CFLAGS) -c -o $@ tls-socket.c + +axtls-compat.o: libaxtls.a axtls-compat.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(NIXIO_CFLAGS) $(LUA_CFLAGS) $(FPIC) $(TLS_CFLAGS) -c -o $@ axtls-compat.c + mkdir -p dist + cp -pR axtls-root/* dist/ +endif + +compile: $(NIXIO_OBJ) + $(CC) $(LDFLAGS) $(SHLIB_FLAGS) -o $(NIXIO_SO) $(NIXIO_OBJ) $(NIXIO_LDFLAGS) $(NIXIO_LDFLAGS_POST) + mkdir -p dist/usr/lib/lua + cp $(NIXIO_SO) dist/usr/lib/lua/$(NIXIO_SO) + +$(AXTLS_DIR)/.prepared: + #rm -rf $(AXTLS_DIR) + #tar xvfz $(AXTLS_FILE) + cp axtls-config/.config axtls-config/config.h $(AXTLS_DIR)/config + touch $@ + +libaxtls.a: $(AXTLS_DIR)/.prepared + $(MAKE) -C $(AXTLS_DIR) CC="$(CC)" CFLAGS="$(CFLAGS) $(EXTRA_CFLAGS) $(FPIC) -Wall -pedantic -I../config -I../ssl -I../crypto" LDFLAGS="$(LDFLAGS)" OS="$(OS)" clean all + cp -p $(AXTLS_DIR)/_stage/libaxtls.a src + # ************************************************************************* + # + # + # + # *** WARNING *** + # The use of the axTLS cryptographical provider is discouraged! + # Please switch to either CyaSSL or OpenSSL. + # Support for axTLS might be removed in the near future. + # + # + # + #************************************************************************** + +clean: + rm -f *.o *.so *.a *.dll + rm -f $(AXTLS_DIR)/.prepared + +install: compile + mkdir -p $(DESTDIR) + cp -pR dist/* $(DESTDIR)/ diff --git a/feeds/luci/libs/luci-lib-nixio/src/address.c b/feeds/luci/libs/luci-lib-nixio/src/address.c new file mode 100644 index 0000000..8ab4fa8 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/address.c @@ -0,0 +1,567 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include +#include +#include + +#ifdef __linux__ + +#include +#include +#include + +/* setjmp() / longjmp() stuff */ +static jmp_buf nixio__jump_alarm; +static void nixio__handle_alarm(int sig) { longjmp(nixio__jump_alarm, 1); } + +#include + +/* struct net_device_stats is buggy on amd64, redefine it */ +struct nixio__nds { + uint32_t rx_packets; + uint32_t tx_packets; + uint32_t rx_bytes; + uint32_t tx_bytes; + uint32_t rx_errors; + uint32_t tx_errors; + uint32_t rx_dropped; + uint32_t tx_dropped; + uint32_t multicast; + uint32_t collisions; + + uint32_t rx_length_errors; + uint32_t rx_over_errors; + uint32_t rx_crc_errors; + uint32_t rx_frame_errors; + uint32_t rx_fifo_errors; + uint32_t rx_missed_errors; + + uint32_t tx_aborted_errors; + uint32_t tx_carrier_errors; + uint32_t tx_fifo_errors; + uint32_t tx_heartbeat_errors; + uint32_t tx_window_errors; + + uint32_t rx_compressed; + uint32_t tx_compressed; +}; +#endif + +#ifndef NI_MAXHOST +#define NI_MAXHOST 1025 +#endif + +/** + * address pushing helper + */ +int nixio__addr_parse(nixio_addr *addr, struct sockaddr *saddr) { + void *baddr; + + addr->family = saddr->sa_family; + if (saddr->sa_family == AF_INET) { + struct sockaddr_in *inetaddr = (struct sockaddr_in*)saddr; + addr->port = ntohs(inetaddr->sin_port); + baddr = &inetaddr->sin_addr; + } else if (saddr->sa_family == AF_INET6) { + struct sockaddr_in6 *inet6addr = (struct sockaddr_in6*)saddr; + addr->port = ntohs(inet6addr->sin6_port); + baddr = &inet6addr->sin6_addr; +#ifdef AF_PACKET + } else if (saddr->sa_family == AF_PACKET) { + struct sockaddr_ll *etheradddr = (struct sockaddr_ll*)saddr; + addr->prefix = etheradddr->sll_hatype; + addr->port = etheradddr->sll_ifindex; + char *c = addr->host; + for (size_t i = 0; i < etheradddr->sll_halen; i++) { + *c++ = nixio__bin2hex[(etheradddr->sll_addr[i] & 0xf0) >> 4]; + *c++ = nixio__bin2hex[(etheradddr->sll_addr[i] & 0x0f)]; + *c++ = ':'; + } + *(c-1) = 0; + return 0; +#endif + } else { + errno = EAFNOSUPPORT; + return -1; + } + + if (!inet_ntop(saddr->sa_family, baddr, addr->host, sizeof(addr->host))) { + return -1; + } + + return 0; +} + +/** + * address pulling helper + */ +int nixio__addr_write(nixio_addr *addr, struct sockaddr *saddr) { + if (addr->family == AF_UNSPEC) { + if (strchr(addr->host, ':')) { + addr->family = AF_INET6; + } else { + addr->family = AF_INET; + } + } + if (addr->family == AF_INET) { + struct sockaddr_in *inetaddr = (struct sockaddr_in *)saddr; + memset(inetaddr, 0, sizeof(struct sockaddr_in)); + + if (inet_pton(AF_INET, addr->host, &inetaddr->sin_addr) < 1) { + return -1; + } + + inetaddr->sin_family = AF_INET; + inetaddr->sin_port = htons((uint16_t)addr->port); + return 0; + } else if (addr->family == AF_INET6) { + struct sockaddr_in6 *inet6addr = (struct sockaddr_in6 *)saddr; + memset(inet6addr, 0, sizeof(struct sockaddr_in6)); + + if (inet_pton(AF_INET6, addr->host, &inet6addr->sin6_addr) < 1) { + return -1; + } + + inet6addr->sin6_family = AF_INET6; + inet6addr->sin6_port = htons((uint16_t)addr->port); + return 0; + } else { + errno = EAFNOSUPPORT; + return -1; + } +} + +/** + * netmask to prefix helper + */ +int nixio__addr_prefix(struct sockaddr *saddr) { + int prefix = 0; + size_t len; + uint8_t *addr; + + if (saddr->sa_family == AF_INET) { + addr = (uint8_t*)(&((struct sockaddr_in*)saddr)->sin_addr); + len = 4; + } else if (saddr->sa_family == AF_INET6) { + addr = (uint8_t*)(&((struct sockaddr_in6*)saddr)->sin6_addr); + len = 16; + } else { + errno = EAFNOSUPPORT; + return -1; + } + + for (size_t i = 0; i < len; i++) { + if (addr[i] == 0xff) { + prefix += 8; + } else if (addr[i] == 0x00) { + break; + } else { + for (uint8_t c = addr[i]; c; c <<= 1) { + prefix++; + } + } + } + + return prefix; +} + +/** + * getaddrinfo(host, family, port) + */ +static int nixio_getaddrinfo(lua_State *L) { + const char *host = NULL; + if (!lua_isnoneornil(L, 1)) { + host = luaL_checklstring(L, 1, NULL); + } + const char *family = luaL_optlstring(L, 2, "any", NULL); + const char *port = lua_tolstring(L, 3, NULL); + + struct addrinfo hints, *result, *rp; + memset(&hints, 0, sizeof(hints)); + + if (!strcmp(family, "any")) { + hints.ai_family = AF_UNSPEC; + } else if (!strcmp(family, "inet")) { + hints.ai_family = AF_INET; + } else if (!strcmp(family, "inet6")) { + hints.ai_family = AF_INET6; + } else { + return luaL_argerror(L, 2, "supported values: any, inet, inet6"); + } + + hints.ai_socktype = 0; + hints.ai_protocol = 0; + + int aistat = getaddrinfo(host, port, &hints, &result); + if (aistat) { + lua_pushnil(L); + lua_pushinteger(L, aistat); + lua_pushstring(L, gai_strerror(aistat)); + return 3; + } + + /* create socket object */ + lua_newtable(L); + int i = 1; + + for (rp = result; rp != NULL; rp = rp->ai_next) { + /* avoid duplicate results */ +#ifndef __WINNT__ + if (!port && rp->ai_socktype != SOCK_STREAM) { + continue; + } +#endif + + if (rp->ai_family == AF_INET || rp->ai_family == AF_INET6) { + lua_createtable(L, 0, port ? 4 : 2); + if (rp->ai_family == AF_INET) { + lua_pushliteral(L, "inet"); + } else if (rp->ai_family == AF_INET6) { + lua_pushliteral(L, "inet6"); + } + lua_setfield(L, -2, "family"); + + if (port) { + switch (rp->ai_socktype) { + case SOCK_STREAM: + lua_pushliteral(L, "stream"); + break; + case SOCK_DGRAM: + lua_pushliteral(L, "dgram"); + break; + case SOCK_RAW: + lua_pushliteral(L, "raw"); + break; + default: + lua_pushnil(L); + break; + } + lua_setfield(L, -2, "socktype"); + } + + nixio_addr addr; + if (nixio__addr_parse(&addr, rp->ai_addr)) { + freeaddrinfo(result); + return nixio__perror_s(L); + } + + if (port) { + lua_pushinteger(L, addr.port); + lua_setfield(L, -2, "port"); + } + + lua_pushstring(L, addr.host); + lua_setfield(L, -2, "address"); + lua_rawseti(L, -2, i++); + } + } + + freeaddrinfo(result); + + return 1; +} + +/** + * getnameinfo(address, family[, timeout]) + */ +static int nixio_getnameinfo(lua_State *L) { + const char *ip = luaL_checkstring(L, 1); + const char *family = luaL_optstring(L, 2, NULL); + +#ifdef __linux__ + struct sigaction sa_new, sa_old; + int timeout = luaL_optnumber(L, 3, 0); + if (timeout > 0 && timeout < 1000) + { + sa_new.sa_handler = nixio__handle_alarm; + sa_new.sa_flags = 0; + sigemptyset(&sa_new.sa_mask); + sigaction(SIGALRM, &sa_new, &sa_old); + + /* user timeout exceeded */ + if (setjmp(nixio__jump_alarm)) + { + sigaction(SIGALRM, &sa_old, NULL); + + lua_pushnil(L); + lua_pushinteger(L, EAI_AGAIN); + lua_pushstring(L, gai_strerror(EAI_AGAIN)); + + return 3; + } + + ualarm(timeout * 1000, 0); + } +#endif + + char host[NI_MAXHOST]; + + struct sockaddr_storage saddr; + nixio_addr addr; + memset(&addr, 0, sizeof(addr)); + strncpy(addr.host, ip, sizeof(addr.host) - 1); + + if (!family) { + addr.family = AF_UNSPEC; + } else if (!strcmp(family, "inet")) { + addr.family = AF_INET; + } else if (!strcmp(family, "inet6")) { + addr.family = AF_INET6; + } else { + return luaL_argerror(L, 2, "supported values: inet, inet6"); + } + + nixio__addr_write(&addr, (struct sockaddr *)&saddr); + + int res = getnameinfo((struct sockaddr *)&saddr, + (saddr.ss_family == AF_INET) + ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), + host, sizeof(host), NULL, 0, NI_NAMEREQD); + +#ifdef __linux__ + if (timeout > 0 && timeout < 1000) + { + ualarm(0, 0); + sigaction(SIGALRM, &sa_old, NULL); + } +#endif + + if (res) { + lua_pushnil(L); + lua_pushinteger(L, res); + lua_pushstring(L, gai_strerror(res)); + return 3; + } else { + lua_pushstring(L, host); + return 1; + } +} + +/** + * getsockname() + */ +static int nixio_sock_getsockname(lua_State *L) { + int sockfd = nixio__checksockfd(L); + struct sockaddr_storage saddr; + socklen_t addrlen = sizeof(saddr); + nixio_addr addr; + + if (getsockname(sockfd, (struct sockaddr*)&saddr, &addrlen) || + nixio__addr_parse(&addr, (struct sockaddr*)&saddr)) { + return nixio__perror_s(L); + } + + lua_pushstring(L, addr.host); + lua_pushinteger(L, addr.port); + return 2; +} + +/** + * getpeername() + */ +static int nixio_sock_getpeername(lua_State *L) { + int sockfd = nixio__checksockfd(L); + struct sockaddr_storage saddr; + socklen_t addrlen = sizeof(saddr); + nixio_addr addr; + + if (getpeername(sockfd, (struct sockaddr*)&saddr, &addrlen) || + nixio__addr_parse(&addr, (struct sockaddr*)&saddr)) { + return nixio__perror_s(L); + } + + lua_pushstring(L, addr.host); + lua_pushinteger(L, addr.port); + return 2; +} + +#if defined(__linux__) || defined(BSD) +#ifdef BSD +#include +#endif +#include + +static int nixio_getifaddrs(lua_State *L) { + nixio_addr addr; + struct ifaddrs *ifaddr, *c; + if (getifaddrs(&ifaddr) == -1) { + return nixio__perror(L); + } + + lua_newtable(L); + unsigned int i = 1; + + for (c = ifaddr; c; c = c->ifa_next) { + lua_newtable(L); + + lua_pushstring(L, c->ifa_name); + lua_setfield(L, -2, "name"); + + lua_createtable(L, 0, 7); + lua_pushboolean(L, c->ifa_flags & IFF_UP); + lua_setfield(L, -2, "up"); + + lua_pushboolean(L, c->ifa_flags & IFF_BROADCAST); + lua_setfield(L, -2, "broadcast"); + + lua_pushboolean(L, c->ifa_flags & IFF_LOOPBACK); + lua_setfield(L, -2, "loopback"); + + lua_pushboolean(L, c->ifa_flags & IFF_POINTOPOINT); + lua_setfield(L, -2, "pointtopoint"); + + lua_pushboolean(L, c->ifa_flags & IFF_NOARP); + lua_setfield(L, -2, "noarp"); + + lua_pushboolean(L, c->ifa_flags & IFF_PROMISC); + lua_setfield(L, -2, "promisc"); + + lua_pushboolean(L, c->ifa_flags & IFF_MULTICAST); + lua_setfield(L, -2, "multicast"); + lua_setfield(L, -2, "flags"); + + if (c->ifa_addr) { + if (!nixio__addr_parse(&addr, c->ifa_addr)) { + lua_pushstring(L, addr.host); + lua_setfield(L, -2, "addr"); + } + + if (c->ifa_addr->sa_family == AF_INET) { + lua_pushliteral(L, "inet"); + } else if (c->ifa_addr->sa_family == AF_INET6) { + lua_pushliteral(L, "inet6"); +#ifdef AF_PACKET + } else if (c->ifa_addr->sa_family == AF_PACKET) { + lua_pushliteral(L, "packet"); +#endif + } else { + lua_pushliteral(L, "unknown"); + } + lua_setfield(L, -2, "family"); + +#ifdef __linux__ + if (c->ifa_addr->sa_family == AF_PACKET) { + lua_pushinteger(L, addr.port); + lua_setfield(L, -2, "ifindex"); + + lua_pushinteger(L, addr.prefix); + lua_setfield(L, -2, "hatype"); + } +#endif + } + +#ifdef __linux__ + if (c->ifa_data && (!c->ifa_addr + || c->ifa_addr->sa_family == AF_PACKET)) { + if (!c->ifa_addr) { + lua_pushliteral(L, "packet"); + lua_setfield(L, -2, "family"); + } + + lua_createtable(L, 0, 10); + struct nixio__nds *stats = c->ifa_data; + + lua_pushnumber(L, stats->rx_packets); + lua_setfield(L, -2, "rx_packets"); + + lua_pushnumber(L, stats->tx_packets); + lua_setfield(L, -2, "tx_packets"); + + lua_pushnumber(L, stats->rx_bytes); + lua_setfield(L, -2, "rx_bytes"); + + lua_pushnumber(L, stats->tx_bytes); + lua_setfield(L, -2, "tx_bytes"); + + lua_pushnumber(L, stats->rx_errors); + lua_setfield(L, -2, "rx_errors"); + + lua_pushnumber(L, stats->tx_errors); + lua_setfield(L, -2, "tx_errors"); + + lua_pushnumber(L, stats->rx_dropped); + lua_setfield(L, -2, "rx_dropped"); + + lua_pushnumber(L, stats->tx_dropped); + lua_setfield(L, -2, "tx_dropped"); + + lua_pushnumber(L, stats->multicast); + lua_setfield(L, -2, "multicast"); + + lua_pushnumber(L, stats->collisions); + lua_setfield(L, -2, "collisions"); + } else { + lua_newtable(L); + } + lua_setfield(L, -2, "data"); +#endif + + if (c->ifa_netmask && !nixio__addr_parse(&addr, c->ifa_netmask)) { + lua_pushstring(L, addr.host); + lua_setfield(L, -2, "netmask"); + + lua_pushinteger(L, nixio__addr_prefix(c->ifa_netmask)); + lua_setfield(L, -2, "prefix"); + } + + if (c->ifa_broadaddr && !nixio__addr_parse(&addr, c->ifa_broadaddr)) { + lua_pushstring(L, addr.host); + lua_setfield(L, -2, "broadaddr"); + } + + if (c->ifa_dstaddr && !nixio__addr_parse(&addr, c->ifa_dstaddr)) { + lua_pushstring(L, addr.host); + lua_setfield(L, -2, "dstaddr"); + } + + lua_rawseti(L, -2, i++); + } + + freeifaddrs(ifaddr); + return 1; +} +#endif + + +/* module table */ +static const luaL_reg R[] = { +#if defined(__linux__) || defined(BSD) + {"getifaddrs", nixio_getifaddrs}, +#endif + {"getaddrinfo", nixio_getaddrinfo}, + {"getnameinfo", nixio_getnameinfo}, + {NULL, NULL} +}; + +/* object table */ +static const luaL_reg M[] = { + {"getsockname", nixio_sock_getsockname}, + {"getpeername", nixio_sock_getpeername}, + {NULL, NULL} +}; + +void nixio_open_address(lua_State *L) { + luaL_register(L, NULL, R); + + lua_pushvalue(L, -2); + luaL_register(L, NULL, M); + lua_pop(L, 1); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/axtls-compat.c b/feeds/luci/libs/luci-lib-nixio/src/axtls-compat.c new file mode 100644 index 0000000..2c5b746 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/axtls-compat.c @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Enable a subset of openssl compatible functions. We don't aim to be 100% + * compatible - just to be able to do basic ports etc. + * + * Only really tested on mini_httpd, so I'm not too sure how extensive this + * port is. + */ + +#include "config.h" + +#include +#include +#include +#include "ssl.h" + +static char *key_password = NULL; + +void *SSLv23_server_method(void) { return NULL; } +void *SSLv3_server_method(void) { return NULL; } +void *TLSv1_server_method(void) { return NULL; } +void *SSLv23_client_method(void) { return NULL; } +void *SSLv3_client_method(void) { return NULL; } +void *TLSv1_client_method(void) { return NULL; } +void *SSLv23_method(void) { return NULL; } +void *TLSv1_method(void) { return NULL; } + +SSL_CTX * SSL_CTX_new(void *meth) +{ + SSL_CTX *ssl_ctx = ssl_ctx_new(SSL_SERVER_VERIFY_LATER, 5); + return ssl_ctx; +} + +void SSL_CTX_free(SSL_CTX * ssl_ctx) +{ + ssl_ctx_free(ssl_ctx); +} + +SSL * SSL_new(SSL_CTX *ssl_ctx) +{ + SSL *ssl; + + ssl = ssl_new(ssl_ctx, -1); /* fd is set later */ + + return ssl; +} + +int SSL_set_fd(SSL *s, int fd) +{ + s->client_fd = fd; + return 1; /* always succeeds */ +} + +int SSL_accept(SSL *ssl) +{ + ssl->next_state = HS_CLIENT_HELLO; + while (ssl_read(ssl, NULL) == SSL_OK) + { + if (ssl->next_state == HS_CLIENT_HELLO) + return 1; /* we're done */ + } + + return -1; +} + +int SSL_connect(SSL *ssl) +{ + SET_SSL_FLAG(SSL_IS_CLIENT); + int stat = do_client_connect(ssl); + ssl_display_error(stat); + return (stat == SSL_OK) ? 1 : -1; +} + +void SSL_free(SSL *ssl) +{ + ssl_free(ssl); +} + +int SSL_read(SSL *ssl, void *buf, int num) +{ + uint8_t *read_buf; + int ret; + + while ((ret = ssl_read(ssl, &read_buf)) == SSL_OK); + + if (ret > SSL_OK) + { + memcpy(buf, read_buf, ret > num ? num : ret); + } + + return ret; +} + +int SSL_write(SSL *ssl, const void *buf, int num) +{ + return ssl_write(ssl, buf, num); +} + +int SSL_CTX_use_certificate_file(SSL_CTX *ssl_ctx, const char *file, int type) +{ + return (ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CERT, file, NULL) == SSL_OK); +} + +int SSL_CTX_use_PrivateKey_file(SSL_CTX *ssl_ctx, const char *file, int type) +{ + return (ssl_obj_load(ssl_ctx, SSL_OBJ_RSA_KEY, file, key_password) == SSL_OK); +} + +int SSL_CTX_use_certificate_ASN1(SSL_CTX *ssl_ctx, int len, const uint8_t *d) +{ + return (ssl_obj_memory_load(ssl_ctx, + SSL_OBJ_X509_CERT, d, len, NULL) == SSL_OK); +} + +int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, + unsigned int sid_ctx_len) +{ + return 1; +} + +int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx) +{ + return 1; +} + +int SSL_CTX_use_certificate_chain_file(SSL_CTX *ssl_ctx, const char *file) +{ + return (ssl_obj_load(ssl_ctx, + SSL_OBJ_X509_CERT, file, NULL) == SSL_OK); +} + +int SSL_shutdown(SSL *ssl) +{ + return 1; +} + +/*** get/set session ***/ +SSL_SESSION *SSL_get1_session(SSL *ssl) +{ + return (SSL_SESSION *)ssl_get_session_id(ssl); /* note: wrong cast */ +} + +int SSL_set_session(SSL *ssl, SSL_SESSION *session) +{ + memcpy(ssl->session_id, (uint8_t *)session, SSL_SESSION_ID_SIZE); + return 1; +} + +void SSL_SESSION_free(SSL_SESSION *session) { } +/*** end get/set session ***/ + +long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) +{ + return 0; +} + +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, + int (*verify_callback)(int, void *)) { + if (mode & SSL_VERIFY_PEER) { + ctx->options &= ~SSL_SERVER_VERIFY_LATER; + ctx->options |= SSL_CLIENT_AUTHENTICATION; + } else { + ctx->options |= SSL_SERVER_VERIFY_LATER; + ctx->options &= ~SSL_CLIENT_AUTHENTICATION; + } +} + +void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth) { } + +int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, + const char *CApath) +{ + return 1; +} + +void *SSL_load_client_CA_file(const char *file) +{ + return (void *)file; +} + +void SSL_CTX_set_client_CA_list(SSL_CTX *ssl_ctx, void *file) +{ + + ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CERT, (const char *)file, NULL); +} + +void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, void *cb) { } + +void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u) +{ + key_password = (char *)u; +} + +int SSL_peek(SSL *ssl, void *buf, int num) +{ + memcpy(buf, ssl->bm_data, num); + return num; +} + +void SSL_set_bio(SSL *ssl, void *rbio, void *wbio) { } + +long SSL_get_verify_result(const SSL *ssl) +{ + return ssl_handshake_status(ssl); +} + +int SSL_state(SSL *ssl) +{ + return 0x03; // ok state +} + +/** end of could do better list */ + +void *SSL_get_peer_certificate(const SSL *ssl) +{ + return &ssl->ssl_ctx->certs[0]; +} + +int SSL_clear(SSL *ssl) +{ + return 1; +} + + +int SSL_CTX_check_private_key(const SSL_CTX *ctx) +{ + return 1; +} + +int SSL_CTX_set_cipher_list(SSL_CTX *s, const char *str) +{ + return 1; +} + +int SSL_get_error(const SSL *ssl, int ret) +{ + ssl_display_error(ret); + return ret; /* TODO: return proper return code */ +} + +void SSL_CTX_set_options(SSL_CTX *ssl_ctx, int option) {} +int SSL_library_init(void ) { return 1; } +void SSL_load_error_strings(void ) {} +void ERR_print_errors_fp(FILE *fp) {} + +long SSL_CTX_get_timeout(const SSL_CTX *ssl_ctx) { + return CONFIG_SSL_EXPIRY_TIME*3600; } +long SSL_CTX_set_timeout(SSL_CTX *ssl_ctx, long t) { + return SSL_CTX_get_timeout(ssl_ctx); } +void BIO_printf(FILE *f, const char *format, ...) +{ + va_list(ap); + va_start(ap, format); + vfprintf(f, format, ap); + va_end(ap); +} + +void* BIO_s_null(void) { return NULL; } +FILE *BIO_new(bio_func_type_t func) +{ + if (func == BIO_s_null) + return fopen("/dev/null", "r"); + else + return NULL; +} + +FILE *BIO_new_fp(FILE *stream, int close_flag) { return stream; } +int BIO_free(FILE *a) { if (a != stdout && a != stderr) fclose(a); return 1; } diff --git a/feeds/luci/libs/luci-lib-nixio/src/axtls-compat.h b/feeds/luci/libs/luci-lib-nixio/src/axtls-compat.h new file mode 100644 index 0000000..aee24f5 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/axtls-compat.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2007, Cameron Rich + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the axTLS project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Enable a subset of openssl compatible functions. We don't aim to be 100% + * compatible - just to be able to do basic ports etc. + * + * Only really tested on mini_httpd, so I'm not too sure how extensive this + * port is. + */ + +#include "nixio.h" +#include "config.h" + +#define WITH_AXTLS 1 +#define WITHOUT_OPENSSL 1 +#define SSL_OP_NO_SSLv3 0x02000000L +#define SSL_OP_NO_SSLv2 0x01000000L +#define SSL_FILETYPE_PEM 1 +#define SSL_FILETYPE_ASN1 2 +#define SSL_VERIFY_NONE 0x00 +#define SSL_VERIFY_PEER 0x01 +#define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 +#define SSL_VERIFY_CLIENT_ONCE 0x03 +#define MD5_DIGEST_LENGTH 16 +#define SHA_DIGEST_LENGTH 20 + +#include +#include +#include +#include "ssl.h" + +typedef SHA1_CTX SHA_CTX; + +void *SSLv23_server_method(void); +void *SSLv3_server_method(void); +void *TLSv1_server_method(void); +void *SSLv23_client_method(void); +void *SSLv3_client_method(void); +void *TLSv1_client_method(void); +void *SSLv23_method(void); +void *TLSv1_method(void); + + +typedef void * (*ssl_func_type_t)(void); +typedef void * (*bio_func_type_t)(void); + +SSL_CTX * SSL_CTX_new(void *meth); +void SSL_CTX_free(SSL_CTX * ssl_ctx); +SSL * SSL_new(SSL_CTX *ssl_ctx); +int SSL_set_fd(SSL *s, int fd); +int SSL_accept(SSL *ssl); +int SSL_connect(SSL *ssl); +void SSL_free(SSL *ssl); +int SSL_read(SSL *ssl, void *buf, int num); +int SSL_write(SSL *ssl, const void *buf, int num); +int SSL_CTX_use_certificate_file(SSL_CTX *ssl_ctx, const char *file, int type); +int SSL_CTX_use_PrivateKey_file(SSL_CTX *ssl_ctx, const char *file, int type); +int SSL_CTX_use_certificate_ASN1(SSL_CTX *ssl_ctx, int len, const uint8_t *d); +int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); +int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +int SSL_CTX_use_certificate_chain_file(SSL_CTX *ssl_ctx, const char *file); +int SSL_shutdown(SSL *ssl); + +/*** get/set session ***/ +SSL_SESSION *SSL_get1_session(SSL *ssl); +int SSL_set_session(SSL *ssl, SSL_SESSION *session); +void SSL_SESSION_free(SSL_SESSION *session); +/*** end get/set session ***/ + +long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, + int (*verify_callback)(int, void *)); + +void SSL_CTX_set_verify_depth(SSL_CTX *ctx,int depth); + +int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, + const char *CApath); + +void *SSL_load_client_CA_file(const char *file); + +void SSL_CTX_set_client_CA_list(SSL_CTX *ssl_ctx, void *file); + +void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, void *cb); + +void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); + +int SSL_peek(SSL *ssl, void *buf, int num); + +void SSL_set_bio(SSL *ssl, void *rbio, void *wbio); + +long SSL_get_verify_result(const SSL *ssl); + +int SSL_state(SSL *ssl); + +/** end of could do better list */ + +void *SSL_get_peer_certificate(const SSL *ssl); + +int SSL_clear(SSL *ssl); + + +int SSL_CTX_check_private_key(const SSL_CTX *ctx); + +int SSL_CTX_set_cipher_list(SSL_CTX *s, const char *str); + +int SSL_get_error(const SSL *ssl, int ret); + +void SSL_CTX_set_options(SSL_CTX *ssl_ctx, int option); +int SSL_library_init(void ); +void SSL_load_error_strings(void ); +void ERR_print_errors_fp(FILE *fp); + +long SSL_CTX_get_timeout(const SSL_CTX *ssl_ctx); +long SSL_CTX_set_timeout(SSL_CTX *ssl_ctx, long t); +void BIO_printf(FILE *f, const char *format, ...); + +void* BIO_s_null(void); +FILE *BIO_new(bio_func_type_t func); + +FILE *BIO_new_fp(FILE *stream, int close_flag); +int BIO_free(FILE *a); diff --git a/feeds/luci/libs/luci-lib-nixio/src/binary.c b/feeds/luci/libs/luci-lib-nixio/src/binary.c new file mode 100644 index 0000000..2c41622 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/binary.c @@ -0,0 +1,313 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include + +const char nixio__bin2hex[16] = { +'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' +}; + +static unsigned char nixio__b64encode_tbl[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +static unsigned char nixio__b64decode_tbl[] = { + 0x3e, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0xff, + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x1b, + 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33 +}; + +static const uint32_t nixio__crc32_tbl[] = { + 0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U, + 0x706af48fU, 0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U, + 0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U, + 0x90bf1d91U, 0x1db71064U, 0x6ab020f2U, 0xf3b97148U, 0x84be41deU, + 0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U, 0x136c9856U, + 0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U, + 0xfa0f3d63U, 0x8d080df5U, 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U, + 0xa2677172U, 0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU, + 0x35b5a8faU, 0x42b2986cU, 0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U, + 0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U, 0x26d930acU, 0x51de003aU, + 0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U, 0xcfba9599U, + 0xb8bda50fU, 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U, + 0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU, 0x76dc4190U, + 0x01db7106U, 0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU, + 0x9fbfe4a5U, 0xe8b8d433U, 0x7807c9a2U, 0x0f00f934U, 0x9609a88eU, + 0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU, 0x91646c97U, 0xe6635c01U, + 0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU, 0x6c0695edU, + 0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U, 0x65b0d9c6U, 0x12b7e950U, + 0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U, + 0xfbd44c65U, 0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U, + 0x4adfa541U, 0x3dd895d7U, 0xa4d1c46dU, 0xd3d6f4fbU, 0x4369e96aU, + 0x346ed9fcU, 0xad678846U, 0xda60b8d0U, 0x44042d73U, 0x33031de5U, + 0xaa0a4c5fU, 0xdd0d7cc9U, 0x5005713cU, 0x270241aaU, 0xbe0b1010U, + 0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU, + 0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U, + 0x2eb40d81U, 0xb7bd5c3bU, 0xc0ba6cadU, 0xedb88320U, 0x9abfb3b6U, + 0x03b6e20cU, 0x74b1d29aU, 0xead54739U, 0x9dd277afU, 0x04db2615U, + 0x73dc1683U, 0xe3630b12U, 0x94643b84U, 0x0d6d6a3eU, 0x7a6a5aa8U, + 0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U, 0xf00f9344U, + 0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU, + 0x196c3671U, 0x6e6b06e7U, 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU, + 0x67dd4accU, 0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U, + 0xd6d6a3e8U, 0xa1d1937eU, 0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U, + 0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU, 0xd80d2bdaU, 0xaf0a1b4cU, + 0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U, 0x316e8eefU, + 0x4669be79U, 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U, + 0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU, 0xc5ba3bbeU, + 0xb2bd0b28U, 0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U, + 0x2cd99e8bU, 0x5bdeae1dU, 0x9b64c2b0U, 0xec63f226U, 0x756aa39cU, + 0x026d930aU, 0x9c0906a9U, 0xeb0e363fU, 0x72076785U, 0x05005713U, + 0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U, 0x92d28e9bU, + 0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U, 0x86d3d2d4U, 0xf1d4e242U, + 0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U, + 0x18b74777U, 0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU, + 0x8f659effU, 0xf862ae69U, 0x616bffd3U, 0x166ccf45U, 0xa00ae278U, + 0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U, 0xa7672661U, 0xd06016f7U, + 0x4969474dU, 0x3e6e77dbU, 0xaed16a4aU, 0xd9d65adcU, 0x40df0b66U, + 0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U, + 0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U, + 0xcdd70693U, 0x54de5729U, 0x23d967bfU, 0xb3667a2eU, 0xc4614ab8U, + 0x5d681b02U, 0x2a6f2b94U, 0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU, + 0x2d02ef8dU +}; + +static int nixio_bin_crc32(lua_State *L) { + size_t len; + const char *buffer = luaL_checklstring(L, 1, &len); + uint32_t value = luaL_optinteger(L, 2, 0); + + value = ~value; + for (size_t i=0; i> 8); + } + + lua_pushinteger(L, (int)(value ^ 0xffffffffU)); + return 1; +} + +static int nixio_bin_hexlify(lua_State *L) { + size_t len, lenout; + luaL_checktype(L, 1, LUA_TSTRING); + const unsigned char *data = (unsigned char*)lua_tolstring(L, 1, &len); + + if (len == 0) { + lua_pushvalue(L, 1); + return 1; + } + + lenout = len * 2; + luaL_argcheck(L, lenout > len, 1, "size overflow"); + + char *out = malloc(lenout); + if (!out) { + return luaL_error(L, NIXIO_OOM); + } + + for (size_t i=0; i < len; i++) { + out[2*i] = nixio__bin2hex[(data[i] & 0xf0) >> 4]; + out[2*i+1] = nixio__bin2hex[(data[i] & 0x0f)]; + } + + lua_pushlstring(L, out, lenout); + free(out); + + return 1; +} + + +static int nixio_bin_unhexlify(lua_State *L) { + size_t len, lenout; + const char *data = luaL_checklstring(L, 1, &len); + + if (len == 0) { + lua_pushvalue(L, 1); + return 1; + } else if (len % 2) { + errno = EINVAL; + return nixio__perror(L); + } + + lenout = len / 2; + char *out = malloc(lenout); + if (!out) { + return luaL_error(L, NIXIO_OOM); + } + + for (size_t i=0; i < lenout; i++) { + char c = data[2*i]; + if (c >= '0' && c <= '9') { + out[i] = (c - '0') << 4; + } else if (c >= 'a' && c <= 'f') { + out[i] = (c - 'a' + 10) << 4; + } else if (data[2*i] >= 'A' && c <= 'F') { + out[i] = (c - 'A' + 10) << 4; + } else { + free(out); + errno = EINVAL; + return nixio__perror(L); + } + + c = data[2*i+1]; + if (c >= '0' && c <= '9') { + out[i] += c - '0'; + } else if (c >= 'a' && c <= 'f') { + out[i] += c - 'a' + 10; + } else if (c >= 'A' && c <= 'F') { + out[i] += c - 'A' + 10; + } else { + free(out); + errno = EINVAL; + return nixio__perror(L); + } + } + + lua_pushlstring(L, out, lenout); + free(out); + + return 1; +} + +static int nixio_bin_b64encode(lua_State *L) { + size_t len, lenout, pad, i; + const uint8_t *data = (const uint8_t*)luaL_checklstring(L, 1, &len); + + lenout = len / 3; + lenout *= 4; + + pad = len % 3; + + if (len == 0) { + lua_pushvalue(L, 1); + return 1; + } else if (pad) { + lenout += 4; + } + + luaL_argcheck(L, lenout > len, 1, "size overflow"); + + char *out = malloc(lenout); + if (!out) { + return luaL_error(L, NIXIO_OOM); + } + + uint8_t *o = (uint8_t*)out; + for (i = 0; i < len; i += 3) { + uint32_t cv = (data[i] << 16) | (data[i+1] << 8) | data[i+2]; + *(o+3) = nixio__b64encode_tbl[ cv & 0x3f]; + *(o+2) = nixio__b64encode_tbl[(cv >> 6) & 0x3f]; + *(o+1) = nixio__b64encode_tbl[(cv >> 12) & 0x3f]; + *o = nixio__b64encode_tbl[(cv >> 18) & 0x3f]; + o += 4; + } + + if (pad) { + uint32_t cv = data[len-pad] << 16; + *(o-1) = '='; + *(o-2) = '='; + if (pad == 2) { + cv |= data[len-pad+1] << 8; + *(o-2) = nixio__b64encode_tbl[(cv >> 6) & 0x3f]; + } + *(o-3) = nixio__b64encode_tbl[(cv >> 12) & 0x3f]; + *(o-4) = nixio__b64encode_tbl[(cv >> 18) & 0x3f]; + } + + lua_pushlstring(L, out, lenout); + free(out); + return 1; +} + +static int nixio_bin_b64decode(lua_State *L) { + size_t len, lenout, i; + const char *dt = luaL_checklstring(L, 1, &len); + + if (len == 0) { + lua_pushvalue(L, 1); + return 1; + } else if (len % 4) { + errno = EINVAL; + return nixio__perror(L); + } + + lenout = len / 4 * 3; + + unsigned char *out = malloc(lenout); + if (!out) { + return luaL_error(L, NIXIO_OOM); + } + + unsigned char *o = out; + for (i = 0; i < len; i += 4) { + uint32_t cv = 0; + for (int j = 0; j < 4; j++) { + unsigned char c = dt[i + j] - 43; + if (c > 79 || (c = nixio__b64decode_tbl[c]) == 0xff) { + free(out); + errno = EINVAL; + return nixio__perror(L); + } + + cv |= c; + if (j != 3) { + cv <<= 6; + } + } + + *(o+2) = (unsigned char)(cv & 0xff); + *(o+1) = (unsigned char)((cv >> 8) & 0xff); + *o = (unsigned char)((cv >> 16) & 0xff); + o += 3; + } + + if (dt[len-1] == '=') { + lenout--; + } + + if (dt[len-2] == '=') { + lenout--; + } + + lua_pushlstring(L, (char*)out, lenout); + free(out); + return 1; +} + +/* module table */ +static const luaL_reg R[] = { + {"hexlify", nixio_bin_hexlify}, + {"unhexlify", nixio_bin_unhexlify}, + {"crc32", nixio_bin_crc32}, + {"b64encode", nixio_bin_b64encode}, + {"b64decode", nixio_bin_b64decode}, + {NULL, NULL} +}; + + +void nixio_open_bin(lua_State *L) { + lua_newtable(L); + luaL_register(L, NULL, R); + lua_setfield(L, -2, "bin"); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/bind.c b/feeds/luci/libs/luci-lib-nixio/src/bind.c new file mode 100644 index 0000000..68e1df8 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/bind.c @@ -0,0 +1,293 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include +#include +#include + + +/** + * connect()/bind() shortcut + */ +static int nixio__bind_connect(lua_State *L, int do_bind) { + const char *host = NULL; + if (!lua_isnoneornil(L, 1)) { + host = luaL_checklstring(L, 1, NULL); + } + const char *port = luaL_checklstring(L, 2, NULL); + const char *family = luaL_optlstring(L, 3, "any", NULL); + const char *socktype = luaL_optlstring(L, 4, "stream", NULL); + + struct addrinfo hints, *result, *rp; + memset(&hints, 0, sizeof(hints)); + + if (!strcmp(family, "any")) { + hints.ai_family = AF_UNSPEC; + } else if (!strcmp(family, "inet")) { + hints.ai_family = AF_INET; + } else if (!strcmp(family, "inet6")) { + hints.ai_family = AF_INET6; + } else { + return luaL_argerror(L, 3, "supported values: any, inet, inet6"); + } + + if (!strcmp(socktype, "any")) { + hints.ai_socktype = 0; + } else if (!strcmp(socktype, "stream")) { + hints.ai_socktype = SOCK_STREAM; + } else if (!strcmp(socktype, "dgram")) { + hints.ai_socktype = SOCK_DGRAM; + } else { + return luaL_argerror(L, 4, "supported values: any, stream, dgram"); + } + + if (do_bind) { + hints.ai_flags |= AI_PASSIVE; + } + + hints.ai_protocol = 0; + + int aistat = getaddrinfo(host, port, &hints, &result); + if (aistat) { + lua_pushnil(L); + lua_pushinteger(L, aistat); + lua_pushstring(L, gai_strerror(aistat)); + return 3; + } + + /* create socket object */ + nixio_sock *sock = lua_newuserdata(L, sizeof(nixio_sock)); + int status = -1, clstat; + + for (rp = result; rp != NULL; rp = rp->ai_next) { + sock->fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if (sock->fd == -1) { + continue; + } + + if (do_bind) { + int one = 1; + setsockopt(sock->fd, SOL_SOCKET, SO_REUSEADDR, + (char*)&one, sizeof(one)); + status = bind(sock->fd, rp->ai_addr, rp->ai_addrlen); + } else { + do { + status = connect(sock->fd, rp->ai_addr, rp->ai_addrlen); + } while (status == -1 && errno == EINTR); + } + + /* on success */ + if (!status) { + sock->domain = rp->ai_family; + sock->type = rp->ai_socktype; + sock->protocol = rp->ai_protocol; + break; + } + + do { +#ifndef __WINNT__ + clstat = close(sock->fd); +#else + clstat = closesocket(sock->fd); +#endif + } while (clstat == -1 && errno == EINTR); + } + + freeaddrinfo(result); + + /* on failure */ + if (status) { + return nixio__perror_s(L); + } + + luaL_getmetatable(L, NIXIO_META); + lua_setmetatable(L, -2); + + return 1; +} + +/** + * bind(host, port, [family=any], [type=any]) shortcut + */ +static int nixio_bind(lua_State *L) { + return nixio__bind_connect(L, 1); +} + +/** + * connect(host, port, [family=any], [type=any]) shortcut + */ +static int nixio_connect(lua_State *L) { + return nixio__bind_connect(L, 0); +} + +/** + * bind()/connect() helper + */ +static int nixio_sock__bind_connect(lua_State *L, int do_bind) { + nixio_sock *sock = nixio__checksock(L); + int status = -1; + + if (sock->domain == AF_INET || sock->domain == AF_INET6) { + const char *host = NULL; + if (!lua_isnoneornil(L, 2)) { + host = luaL_checklstring(L, 2, NULL); + } + const char *port = luaL_checklstring(L, 3, NULL); + + struct addrinfo hints, *result, *rp; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = sock->domain; + hints.ai_socktype = sock->type; + hints.ai_protocol = sock->protocol; + + if (do_bind) { + hints.ai_flags |= AI_PASSIVE; + } + + int aistat = getaddrinfo(host, port, &hints, &result); + if (aistat) { + lua_pushnil(L); + lua_pushinteger(L, aistat); + lua_pushstring(L, gai_strerror(aistat)); + return 3; + } + + for (rp = result; rp != NULL; rp = rp->ai_next) { + if (do_bind) { + status = bind(sock->fd, rp->ai_addr, rp->ai_addrlen); + } else { + do { + status = connect(sock->fd, rp->ai_addr, rp->ai_addrlen); + } while (status == -1 && errno == EINTR); + } + + /* on success */ + if (!status || errno == EINPROGRESS) { + break; + } + } + + freeaddrinfo(result); +#ifndef __WINNT__ + } else if (sock->domain == AF_UNIX) { + size_t pathlen; + const char *path = luaL_checklstring(L, 2, &pathlen); + + struct sockaddr_un addr; + addr.sun_family = AF_UNIX; + luaL_argcheck(L, pathlen <= sizeof(addr.sun_path), 2, "out of range"); + memcpy(addr.sun_path, path, pathlen); + socklen_t alen = sizeof(sa_family_t) + pathlen; + + if (do_bind) { + status = bind(sock->fd, (struct sockaddr*)&addr, alen); + } else { + do { + status = connect(sock->fd, (struct sockaddr*)&addr, alen); + } while (status == -1 && errno == EINTR); + } +#endif + } else { + return luaL_error(L, "not supported"); + } + return nixio__pstatus_s(L, !status); +} + +/** + * bind() + */ +static int nixio_sock_bind(lua_State *L) { + return nixio_sock__bind_connect(L, 1); +} + +/** + * connect() + */ +static int nixio_sock_connect(lua_State *L) { + return nixio_sock__bind_connect(L, 0); +} + +/** + * listen() + */ +static int nixio_sock_listen(lua_State *L) { + int sockfd = nixio__checksockfd(L); + int backlog = luaL_checkinteger(L, 2); + return nixio__pstatus_s(L, !listen(sockfd, backlog)); +} + +/** + * accept() + */ +static int nixio_sock_accept(lua_State *L) { + nixio_sock *sock = nixio__checksock(L); + struct sockaddr_storage saddr; + nixio_addr addr; + socklen_t saddrlen = sizeof(saddr); + int newfd; + + do { + newfd = accept(sock->fd, (struct sockaddr *)&saddr, &saddrlen); + } while (newfd == -1 && errno == EINTR); + if (newfd < 0) { + return nixio__perror_s(L); + } + + /* create userdata */ + nixio_sock *clsock = lua_newuserdata(L, sizeof(nixio_sock)); + luaL_getmetatable(L, NIXIO_META); + lua_setmetatable(L, -2); + + memcpy(clsock, sock, sizeof(clsock)); + clsock->fd = newfd; + + if (!nixio__addr_parse(&addr, (struct sockaddr *)&saddr)) { + lua_pushstring(L, addr.host); + lua_pushinteger(L, addr.port); + return 3; + } else { + return 1; + } +} + +/* module table */ +static const luaL_reg R[] = { + {"bind", nixio_bind}, + {"connect", nixio_connect}, + {NULL, NULL} +}; + +/* object table */ +static const luaL_reg M[] = { + {"bind", nixio_sock_bind}, + {"connect", nixio_sock_connect}, + {"listen", nixio_sock_listen}, + {"accept", nixio_sock_accept}, + {NULL, NULL} +}; + +void nixio_open_bind(lua_State *L) { + luaL_register(L, NULL, R); + + lua_pushvalue(L, -2); + luaL_register(L, NULL, M); + lua_pop(L, 1); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/bit.c b/feeds/luci/libs/luci-lib-nixio/src/bit.c new file mode 100644 index 0000000..1b352c5 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/bit.c @@ -0,0 +1,149 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include + +/* 52 bit maximum precision */ +#ifdef NIXIO_DOUBLE +#define NIXIO_BIT_BMAX 52 +#define NIXIO_BIT_NMAX 0xfffffffffffff +#else +#define NIXIO_BIT_BMAX 32 +#define NIXIO_BIT_NMAX 0xffffffff +#endif + +#define NIXIO_BIT_XOP(BIT_XOP) \ + uint64_t oper = nixio__checknumber(L, 1); \ + const int args = lua_gettop(L); \ + \ + for (int i = 2; i <= args; i++) { \ + uint64_t oper2 = nixio__checknumber(L, i); \ + oper BIT_XOP oper2; \ + } \ + \ + nixio__pushnumber(L, oper); \ + return 1; \ + + +static int nixio_bit_or(lua_State *L) { + NIXIO_BIT_XOP(|=); +} + +static int nixio_bit_and(lua_State *L) { + NIXIO_BIT_XOP(&=); +} + +static int nixio_bit_xor(lua_State *L) { + NIXIO_BIT_XOP(^=); +} + +static int nixio_bit_unset(lua_State *L) { + NIXIO_BIT_XOP(&= ~); +} + +static int nixio_bit_not(lua_State *L) { + nixio__pushnumber(L, + (~((uint64_t)nixio__checknumber(L, 1))) & NIXIO_BIT_NMAX); + return 1; +} + +static int nixio_bit_shl(lua_State *L) { + uint64_t oper = nixio__checknumber(L, 1); + oper <<= luaL_checkinteger(L, 2); + if (oper > NIXIO_BIT_NMAX) { + return luaL_error(L, "arithmetic overflow"); + } else { + nixio__pushnumber(L, oper); + return 1; + } +} + +static int nixio_bit_ashr(lua_State *L) { + int64_t oper = nixio__checknumber(L, 1); + nixio__pushnumber(L, oper >> luaL_checkinteger(L, 2)); + return 1; +} + +static int nixio_bit_shr(lua_State *L) { + uint64_t oper = nixio__checknumber(L, 1); + nixio__pushnumber(L, oper >> luaL_checkinteger(L, 2)); + return 1; +} + +static int nixio_bit_div(lua_State *L) { + uint64_t oper = luaL_checknumber(L, 1); + const int args = lua_gettop(L); + + for (int i = 2; i <= args; i++) { + uint64_t oper2 = nixio__checknumber(L, i); + oper /= oper2; + } + + nixio__pushnumber(L, oper); + return 1; +} + +static int nixio_bit_check(lua_State *L) { + uint64_t oper = nixio__checknumber(L, 1); + uint64_t oper2 = nixio__checknumber(L, 2); + lua_pushboolean(L, (oper & oper2) == oper2); + return 1; +} + +static int nixio_bit_cast(lua_State *L) { + nixio__pushnumber(L, ((uint64_t)nixio__checknumber(L, 1)) & NIXIO_BIT_NMAX); + return 1; +} + +static int nixio_bit_swap(lua_State *L) { + uint64_t op = nixio__checknumber(L, 1); + op = (op >> 24) | ((op >> 8) & 0xff00) | ((op & 0xff00) << 8) | (op << 24); + nixio__pushnumber(L, op); + return 1; +} + +/* module table */ +static const luaL_reg R[] = { + {"bor", nixio_bit_or}, + {"set", nixio_bit_or}, + {"band", nixio_bit_and}, + {"bxor", nixio_bit_xor}, + {"unset", nixio_bit_unset}, + {"bnot", nixio_bit_not}, + {"rshift", nixio_bit_shr}, + {"arshift", nixio_bit_ashr}, + {"lshift", nixio_bit_shl}, + {"div", nixio_bit_div}, + {"check", nixio_bit_check}, + {"cast", nixio_bit_cast}, + {"tobit", nixio_bit_cast}, + {"bswap", nixio_bit_swap}, + {NULL, NULL} +}; + +void nixio_open_bit(lua_State *L) { + lua_newtable(L); + luaL_register(L, NULL, R); + nixio__pushnumber(L, NIXIO_BIT_BMAX); + lua_setfield(L, -2, "bits"); + nixio__pushnumber(L, NIXIO_BIT_NMAX); + lua_setfield(L, -2, "max"); + lua_setfield(L, -2, "bit"); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/cyassl-compat.c b/feeds/luci/libs/luci-lib-nixio/src/cyassl-compat.c new file mode 100644 index 0000000..a483119 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/cyassl-compat.c @@ -0,0 +1,31 @@ +#include "cyassl-compat.h" + +int MD5_Init(MD5_CTX *md5) { + InitMd5(md5); + return 1; +} + +int MD5_Update(MD5_CTX *md5, void *input, unsigned long sz) { + Md5Update(md5, input, (word32)sz); + return 1; +} + +int MD5_Final(void *input, MD5_CTX *md5) { + Md5Final(md5, input); + return 1; +} + +int SHA1_Init(SHA_CTX *sha) { + InitSha(sha); + return 1; +} + +int SHA1_Update(SHA_CTX *sha, void *input, unsigned long sz) { + ShaUpdate(sha, input, (word32)sz); + return 1; +} + +int SHA1_Final(void *input, SHA_CTX *sha) { + ShaFinal(sha, input); + return 1; +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/cyassl-compat.h b/feeds/luci/libs/luci-lib-nixio/src/cyassl-compat.h new file mode 100644 index 0000000..b2cdc92 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/cyassl-compat.h @@ -0,0 +1,32 @@ +#define WITH_CYASSL +#define WITHOUT_OPENSSL +#include + +typedef unsigned int word32; + + +#define MD5_DIGEST_LENGTH 16 +typedef struct MD5_CTX { + int dummy[24]; +} MD5_CTX; + +void InitMd5(MD5_CTX*); +void Md5Update(MD5_CTX*, void*, word32); +void Md5Final(MD5_CTX*, void*); + + +#define SHA_DIGEST_LENGTH 20 +typedef struct SHA_CTX { + int dummy[24]; +} SHA_CTX; + +void InitSha(SHA_CTX*); +void ShaUpdate(SHA_CTX*, void*, word32); +void ShaFinal(SHA_CTX*, void*); + +int MD5_Init(MD5_CTX *md5); +int MD5_Update(MD5_CTX *md5, void *input, unsigned long sz); +int MD5_Final(void *input, MD5_CTX *md5); +int SHA1_Init(SHA_CTX *md5); +int SHA1_Update(SHA_CTX *sha, void *input, unsigned long sz); +int SHA1_Final(void *input, SHA_CTX *sha); diff --git a/feeds/luci/libs/luci-lib-nixio/src/file.c b/feeds/luci/libs/luci-lib-nixio/src/file.c new file mode 100644 index 0000000..cfa35df --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/file.c @@ -0,0 +1,435 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +static int nixio_open(lua_State *L) { + const char *filename = luaL_checklstring(L, 1, NULL); + int flags; + + if (lua_isnoneornil(L, 2)) { + flags = O_RDONLY; + } else if (lua_isnumber(L, 2)) { + flags = lua_tointeger(L, 2); + } else if (lua_isstring(L, 2)) { + const char *str = lua_tostring(L, 2); + if (!strcmp(str, "r")) { + flags = O_RDONLY; + } else if (!strcmp(str, "r+")) { + flags = O_RDWR; + } else if (!strcmp(str, "w")) { + flags = O_WRONLY | O_CREAT | O_TRUNC; + } else if (!strcmp(str, "w+")) { + flags = O_RDWR | O_CREAT | O_TRUNC; + } else if (!strcmp(str, "a")) { + flags = O_WRONLY | O_CREAT | O_APPEND; + } else if (!strcmp(str, "a+")) { + flags = O_RDWR | O_CREAT | O_APPEND; + } else { + return luaL_argerror(L, 2, "supported values: r, r+, w, w+, a, a+"); + } + } else { + return luaL_argerror(L, 2, "open flags or string expected"); + } + + int fd; + + do { + fd = open(filename, flags, nixio__check_mode(L, 3, 0666)); + } while (fd == -1 && errno == EINTR); + if (fd == -1) { + return nixio__perror(L); + } + + int *udata = lua_newuserdata(L, sizeof(int)); + if (!udata) { + return luaL_error(L, "out of memory"); + } + + *udata = fd; + + luaL_getmetatable(L, NIXIO_FILE_META); + lua_setmetatable(L, -2); + + return 1; +} + +static int nixio_mkstemp(lua_State *L) { + const char *intemplate = luaL_checklstring(L, 1, NULL); + size_t len = lua_strlen(L, 1); + char *template = (char *)lua_newuserdata(L, 13 + len); + if (!template) { + return luaL_error(L, "out of memory"); + } + snprintf(template, 13 + len, "/tmp/%s.XXXXXX", intemplate); + + int fd; + + do { + fd = mkstemp(template); + } while (fd == -1 && errno == EINTR); + if (fd == -1) { + return nixio__perror(L); + } + unlink(template); + + int *udata = lua_newuserdata(L, sizeof(int)); + if (!udata) { + return luaL_error(L, "out of memory"); + } + + *udata = fd; + + luaL_getmetatable(L, NIXIO_FILE_META); + lua_setmetatable(L, -2); + + return 1; +} + +static int nixio_open_flags(lua_State *L) { + int mode = 0; + const int j = lua_gettop(L); + for (int i=1; i<=j; i++) { + const char *flag = luaL_checkstring(L, i); + if (!strcmp(flag, "append")) { + mode |= O_APPEND; + } else if (!strcmp(flag, "creat")) { + mode |= O_CREAT; + } else if (!strcmp(flag, "excl")) { + mode |= O_EXCL; + } else if (!strcmp(flag, "nonblock") || !strcmp(flag, "ndelay")) { +#ifndef __WINNT__ + mode |= O_NONBLOCK; +#endif + } else if (!strcmp(flag, "sync")) { +#ifndef __WINNT__ + mode |= O_SYNC; +#endif + } else if (!strcmp(flag, "trunc")) { + mode |= O_TRUNC; + } else if (!strcmp(flag, "rdonly")) { + mode |= O_RDONLY; + } else if (!strcmp(flag, "wronly")) { + mode |= O_WRONLY; + } else if (!strcmp(flag, "rdwr")) { + mode |= O_RDWR; + } else { + return luaL_argerror(L, i, "supported values: append, creat, " + "excl, nonblock, ndelay, sync, trunc"); + } + } + lua_pushinteger(L, mode); + return 1; +} + +static int nixio_dup(lua_State *L) { + int oldfd = nixio__checkfd(L, 1); + int newfd = (lua_gettop(L) > 1) ? nixio__checkfd(L, 2) : -1; + int stat = (newfd == -1) ? dup(oldfd) : dup2(oldfd, newfd); + + if (stat == -1) { + return nixio__perror(L); + } else { + if (newfd == -1) { + int *udata = lua_newuserdata(L, sizeof(int)); + if (!udata) { + return luaL_error(L, "out of memory"); + } + + *udata = stat; + luaL_getmetatable(L, NIXIO_FILE_META); + lua_setmetatable(L, -2); + } else { + lua_pushvalue(L, 2); + } + return 1; + } +} + +static int nixio_pipe(lua_State *L) { + int pipefd[2], *udata; + if (pipe(pipefd)) { + return nixio__perror(L); + } + + luaL_getmetatable(L, NIXIO_FILE_META); + udata = lua_newuserdata(L, sizeof(int)); + if (!udata) { + return luaL_error(L, "out of memory"); + } + + *udata = pipefd[0]; + lua_pushvalue(L, -2); + lua_setmetatable(L, -2); + + + udata = lua_newuserdata(L, sizeof(int)); + if (!udata) { + return luaL_error(L, "out of memory"); + } + + *udata = pipefd[1]; + lua_pushvalue(L, -3); + lua_setmetatable(L, -2); + + return 2; +} + +static int nixio_file_write(lua_State *L) { + int fd = nixio__checkfd(L, 1); + size_t len; + ssize_t sent; + const char *data = luaL_checklstring(L, 2, &len); + + if (lua_gettop(L) > 2) { + int offset = luaL_optint(L, 3, 0); + if (offset) { + if (offset < len) { + data += offset; + len -= offset; + } else { + len = 0; + } + } + + unsigned int wlen = luaL_optint(L, 4, len); + if (wlen < len) { + len = wlen; + } + } + + do { + sent = write(fd, data, len); + } while(sent == -1 && errno == EINTR); + if (sent >= 0) { + lua_pushinteger(L, sent); + return 1; + } else { + return nixio__perror(L); + } +} + +static int nixio_file_read(lua_State *L) { + int fd = nixio__checkfd(L, 1); + char buffer[NIXIO_BUFFERSIZE]; + uint req = luaL_checkinteger(L, 2); + int readc; + + /* We limit the readsize to NIXIO_BUFFERSIZE */ + req = (req > NIXIO_BUFFERSIZE) ? NIXIO_BUFFERSIZE : req; + + do { + readc = read(fd, buffer, req); + } while (readc == -1 && errno == EINTR); + + if (readc < 0) { + return nixio__perror(L); + } else { + lua_pushlstring(L, buffer, readc); + return 1; + } +} + + +static int nixio_file_seek(lua_State *L) { + int fd = nixio__checkfd(L, 1); + off_t len = (off_t)nixio__checknumber(L, 2); + int whence; + const char *whstr = luaL_optlstring(L, 3, "set", NULL); + if (!strcmp(whstr, "set")) { + whence = SEEK_SET; + } else if (!strcmp(whstr, "cur")) { + whence = SEEK_CUR; + } else if (!strcmp(whstr, "end")) { + whence = SEEK_END; + } else { + return luaL_argerror(L, 3, "supported values: set, cur, end"); + } + len = lseek(fd, len, whence); + if (len == -1) { + return nixio__perror(L); + } else { + nixio__pushnumber(L, len); + return 1; + } +} + +static int nixio_file_tell(lua_State *L) { + int fd = nixio__checkfd(L, 1); + off_t pos = lseek(fd, 0, SEEK_CUR); + if (pos < 0) { + return nixio__perror(L); + } else { + nixio__pushnumber(L, pos); + return 1; + } +} + +static int nixio_file_stat(lua_State *L) { + nixio_stat_t buf; + if (fstat(nixio__checkfd(L, 1), &buf)) { + return nixio__perror(L); + } else { + nixio__push_stat(L, &buf); + if (lua_isstring(L, 2)) { + lua_getfield(L, -1, lua_tostring(L, 2)); + } + return 1; + } +} + +static int nixio_file_sync(lua_State *L) { + int fd = nixio__checkfd(L, 1); + int stat; +#if (!defined BSD && !defined __WINNT__) + int dataonly = lua_toboolean(L, 2); + do { + stat = (dataonly) ? fdatasync(fd) : fsync(fd); + } while (stat == -1 && errno == EINTR); + return nixio__pstatus(L, !stat); +#else + do { + stat = fsync(fd); + } while (stat == -1 && errno == EINTR); + return nixio__pstatus(L, !stat); +#endif +} + +static int nixio_file_lock(lua_State *L) { + int fd = nixio__checkfd(L, 1); + const char *flag = luaL_checkstring(L, 2); + off_t len = (off_t)nixio__optnumber(L, 3, 0); + int stat; + + int cmd = 0; + if (!strcmp(flag, "lock")) { + cmd = F_LOCK; + } else if (!strcmp(flag, "tlock")) { + cmd = F_TLOCK; + } else if (!strcmp(flag, "ulock")) { + cmd = F_ULOCK; + } else if (!strcmp(flag, "test")) { + cmd = F_TEST; + } else { + return luaL_argerror(L, 2, + "supported values: lock, tlock, ulock, test"); + } + + do { + stat = lockf(fd, cmd, len); + } while (stat == -1 && errno == EINTR); + + return nixio__pstatus(L, !stat); +} + +static int nixio_file_close(lua_State *L) { + int *fdp = luaL_checkudata(L, 1, NIXIO_FILE_META); + luaL_argcheck(L, *fdp != -1, 1, "invalid file object"); + int res; + do { + res = close(*fdp); + } while (res == -1 && errno == EINTR); + *fdp = -1; + return nixio__pstatus(L, !res); +} + +static int nixio_file__gc(lua_State *L) { + int *fdp = luaL_checkudata(L, 1, NIXIO_FILE_META); + int res; + if (*fdp > 2) { + do { + res = close(*fdp); + } while (res == -1 && errno == EINTR); + *fdp = -1; + } + return 0; +} + +/** + * string representation + */ +static int nixio_file__tostring(lua_State *L) { + lua_pushfstring(L, "nixio file %d", nixio__tofd(L, 1)); + return 1; +} + +/* method table */ +static const luaL_reg M[] = { + {"write", nixio_file_write}, + {"read", nixio_file_read}, + {"tell", nixio_file_tell}, + {"seek", nixio_file_seek}, + {"stat", nixio_file_stat}, + {"sync", nixio_file_sync}, + {"lock", nixio_file_lock}, + {"close", nixio_file_close}, + {"__gc", nixio_file__gc}, + {"__tostring", nixio_file__tostring}, + {NULL, NULL} +}; + +/* module table */ +static const luaL_reg R[] = { + {"dup", nixio_dup}, + {"open", nixio_open}, + {"open_flags", nixio_open_flags}, + {"mkstemp", nixio_mkstemp}, + {"pipe", nixio_pipe}, + {NULL, NULL} +}; + +void nixio_open_file(lua_State *L) { + luaL_register(L, NULL, R); + + luaL_newmetatable(L, NIXIO_FILE_META); + luaL_register(L, NULL, M); + lua_pushvalue(L, -1); + lua_setfield(L, -2, "__index"); + + int *uin = lua_newuserdata(L, sizeof(int)); + int *uout = lua_newuserdata(L, sizeof(int)); + int *uerr = lua_newuserdata(L, sizeof(int)); + + if (!uin || !uout || !uerr) { + luaL_error(L, "out of memory"); + } + + *uin = STDIN_FILENO; + *uout = STDOUT_FILENO; + *uerr = STDERR_FILENO; + + for (int i = -4; i < -1; i++) { + lua_pushvalue(L, -4); + lua_setmetatable(L, i); + } + + lua_setfield(L, -5, "stderr"); + lua_setfield(L, -4, "stdout"); + lua_setfield(L, -3, "stdin"); + lua_setfield(L, -2, "meta_file"); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/fs.c b/feeds/luci/libs/luci-lib-nixio/src/fs.c new file mode 100644 index 0000000..12ca111 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/fs.c @@ -0,0 +1,566 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Reads argument from given index and transforms it into a mode bitfield */ +int nixio__check_mode(lua_State *L, int idx, int def) { + if (lua_isnoneornil(L, idx) && def > 0) { + return def; + } else if (lua_isstring(L, idx) && lua_objlen(L, idx) == 9) { + int mode = 0; + const char *modestr = lua_tostring(L, idx); + int i; + for (i=0; i<9; i++) { + if (i % 3 == 0) { /* read flags */ + if (modestr[i] == 'r') { + mode |= 1 << (8 - i); + } else if (modestr[i] != '-') { + break; + } + } else if (i % 3 == 1) { /* write flags */ + if (modestr[i] == 'w') { + mode |= 1 << (8 - i); + } else if (modestr[i] != '-') { + break; + } + } else if (i == 2) { + if (modestr[i] == 'x') { + mode |= 00100; + } else if (modestr[i] == 's') { + mode |= 04100; + } else if (modestr[i] == 'S') { + mode |= 04000; + } else if (modestr[i] != '-') { + break; + } + } else if (i == 5) { + if (modestr[i] == 'x') { + mode |= 00010; + } else if (modestr[i] == 's') { + mode |= 02010; + } else if (modestr[i] == 'S') { + mode |= 02000; + } else if (modestr[i] != '-') { + break; + } + } else if (i == 8) { + if (modestr[i] == 'x') { + mode |= 00001; + } else if (modestr[i] == 't') { + mode |= 01001; + } else if (modestr[i] == 'T') { + mode |= 01000; + } else if (modestr[i] != '-') { + break; + } + } + } + if (i == 9) { /* successfully parsed */ + return mode; + } + } else if (lua_isnumber(L, idx)) { + int decmode = lua_tointeger(L, idx); + int s = (decmode % 10000) / 1000; + int u = (decmode % 1000) / 100; + int g = (decmode % 100) / 10; + int o = (decmode % 10); + + if (s>=0 && s<=7 && u>=0 && u<=7 && g>=0 && g<=7 && o>=0 && o<=7) { + return (s << 9) + (u << 6) + (g << 3) + o; + } + } + + return luaL_argerror(L, idx, "supported values: [0-7]?[0-7][0-7][0-7], " + "[-r][-w][-xsS][-r][-w][-xsS][-r][-w][-xtT]"); +} + +/* Transforms a mode into the modestring */ +int nixio__mode_write(int mode, char *modestr) { + if (modestr) { + modestr[0] = (mode & 00400) ? 'r' : '-'; + modestr[1] = (mode & 00200) ? 'w' : '-'; + modestr[2] = ((mode & 04100) == 04100) ? 's' : + (mode & 04000) ? 'S' : (mode & 00100) ? 'x' : '-'; + modestr[3] = (mode & 00040) ? 'r' : '-'; + modestr[4] = (mode & 00020) ? 'w' : '-'; + modestr[5] = ((mode & 02010) == 02010) ? 's' : + (mode & 02000) ? 'S' : (mode & 00010) ? 'x' : '-'; + modestr[6] = (mode & 00004) ? 'r' : '-'; + modestr[7] = (mode & 00002) ? 'w' : '-'; + modestr[8] = ((mode & 01001) == 01001) ? 't' : + (mode & 01000) ? 'T' : (mode & 00001) ? 'x' : '-'; + } + + return (mode & 00007) + ((mode & 00070) >> 3) * 10 + + ((mode & 00700) >> 6) * 100 + ((mode & 07000) >> 9) * 1000; +} + +static int nixio_access(lua_State *L) { + const char *path = luaL_checkstring(L, 1); + int mode = F_OK; + + for (const char *s = luaL_optstring(L, 2, "f"); *s; s++) { + if (*s == 'r') { + mode |= R_OK; + } else if (*s == 'w') { + mode |= W_OK; + } else if (*s == 'x') { + mode |= X_OK; + } else if (*s != 'f') { + return luaL_argerror(L, 2, "supported values: [frwx]"); + } + } + + return nixio__pstatus(L, !access(path, mode)); +} + +static int nixio_basename(lua_State *L) { + const char *path = luaL_checkstring(L, 1); + char base[PATH_MAX]; + base[PATH_MAX-1] = 0; + + strncpy(base, path, PATH_MAX-1); + lua_pushstring(L, basename(base)); + return 1; +} + +static int nixio_dirname(lua_State *L) { + const char *path = luaL_checkstring(L, 1); + char base[PATH_MAX]; + base[PATH_MAX-1] = 0; + + strncpy(base, path, PATH_MAX-1); + lua_pushstring(L, dirname(base)); + return 1; +} + +static int nixio_realpath(lua_State *L) { + const char *path = luaL_checkstring(L, 1); + char real[PATH_MAX]; + + if (!realpath(path, real)) { + return nixio__perror(L); + } else { + lua_pushstring(L, real); + return 1; + } +} + +static int nixio_remove(lua_State *L) { + return nixio__pstatus(L, !remove(luaL_checkstring(L, 1))); +} + +static int nixio_unlink(lua_State *L) { + return nixio__pstatus(L, !unlink(luaL_checkstring(L, 1))); +} + +static int nixio_rename(lua_State *L) { + return nixio__pstatus(L, + !rename(luaL_checkstring(L, 1), luaL_checkstring(L, 2))); +} + +static int nixio_rmdir(lua_State *L) { + return nixio__pstatus(L, !rmdir(luaL_checkstring(L, 1))); +} + +static int nixio_mkdir(lua_State *L) { + return nixio__pstatus(L, + !mkdir(luaL_checkstring(L, 1), nixio__check_mode(L, 2, 0777))); +} + +static int nixio_chmod(lua_State *L) { + return nixio__pstatus(L, + !chmod(luaL_checkstring(L, 1), nixio__check_mode(L, 2, -1))); +} + +static int nixio_dir__gc(lua_State *L) { + DIR **dirp = lua_touserdata(L, 1); + if (dirp && *dirp) { + closedir(*dirp); + *dirp = NULL; + } + return 0; +} + +static int nixio_dir__iter(lua_State *L) { + DIR **dirp = lua_touserdata(L, lua_upvalueindex(1)); + struct dirent *entry; + const char *n = NULL; + + if (*dirp) { + do { + entry = readdir(*dirp); + n = (entry) ? entry->d_name : NULL; + } while(n && n[0] == '.' && (n[1] == 0 || (n[1] == '.' && n[2] == 0))); + } + + if (n) { + lua_pushstring(L, n); + } else { + if (*dirp) { + closedir(*dirp); + *dirp = NULL; + } + lua_pushnil(L); + } + + return 1; +} + +static int nixio_dir(lua_State *L) { + const char *path = luaL_optstring(L, 1, "."); + DIR **dirp = lua_newuserdata(L, sizeof(DIR *)); + + *dirp = opendir(path); + if (!*dirp) { + return nixio__perror(L); + } else { + luaL_getmetatable(L, NIXIO_DIR_META); + lua_setmetatable(L, -2); + lua_pushcclosure(L, nixio_dir__iter, 1); + return 1; + } +} + +static int nixio_link(lua_State *L) { + return nixio__pstatus(L, + !link(luaL_checkstring(L, 1), luaL_checkstring(L, 2))); +} + +static int nixio_utimes(lua_State *L) { + const char *path = luaL_checkstring(L, 1); + if (lua_gettop(L) < 2 || (lua_isnoneornil(L, 2) && lua_isnoneornil(L, 3))) { + return nixio__pstatus(L, !utimes(path, NULL)); + } else { + double atime = nixio__checknumber(L, 2); + double mtime = nixio__optnumber(L, 3, atime); + struct timeval times[2]; + + times[0].tv_sec = atime; + times[0].tv_usec = 0; + times[1].tv_sec = mtime; + times[1].tv_usec = 0; + + return nixio__pstatus(L, !utimes(path, times)); + } +} + +int nixio__push_stat(lua_State *L, nixio_stat_t *buf) { + lua_createtable(L, 0, 15); + + lua_pushinteger(L, buf->st_dev); + lua_setfield(L, -2, "dev"); + + lua_pushinteger(L, buf->st_ino); + lua_setfield(L, -2, "ino"); + + if (S_ISREG(buf->st_mode)) { + lua_pushliteral(L, "reg"); + } else if (S_ISDIR(buf->st_mode)) { + lua_pushliteral(L, "dir"); + } else if (S_ISCHR(buf->st_mode)) { + lua_pushliteral(L, "chr"); + } else if (S_ISBLK(buf->st_mode)) { + lua_pushliteral(L, "blk"); + } else if (S_ISFIFO(buf->st_mode)) { + lua_pushliteral(L, "fifo"); + } else if (S_ISLNK(buf->st_mode)) { + lua_pushliteral(L, "lnk"); + } else if (S_ISSOCK(buf->st_mode)) { + lua_pushliteral(L, "sock"); + } else { + lua_pushliteral(L, "unknown"); + } + lua_setfield(L, -2, "type"); + + char modestr[9]; + lua_pushinteger(L, nixio__mode_write(buf->st_mode, modestr)); + lua_setfield(L, -2, "modedec"); + + lua_pushlstring(L, modestr, 9); + lua_setfield(L, -2, "modestr"); + + lua_pushinteger(L, buf->st_nlink); + lua_setfield(L, -2, "nlink"); + + lua_pushinteger(L, buf->st_uid); + lua_setfield(L, -2, "uid"); + + lua_pushinteger(L, buf->st_gid); + lua_setfield(L, -2, "gid"); + + lua_pushinteger(L, buf->st_rdev); + lua_setfield(L, -2, "rdev"); + + nixio__pushnumber(L, buf->st_size); + lua_setfield(L, -2, "size"); + + lua_pushinteger(L, buf->st_atime); + lua_setfield(L, -2, "atime"); + + lua_pushinteger(L, buf->st_mtime); + lua_setfield(L, -2, "mtime"); + + lua_pushinteger(L, buf->st_ctime); + lua_setfield(L, -2, "ctime"); + +#ifndef __WINNT__ + lua_pushinteger(L, buf->st_blksize); + lua_setfield(L, -2, "blksize"); + + lua_pushinteger(L, buf->st_blocks); + lua_setfield(L, -2, "blocks"); +#endif + + return 1; +} + +static int nixio_stat(lua_State *L) { + nixio_stat_t buf; + if (stat(luaL_checkstring(L, 1), &buf)) { + return nixio__perror(L); + } else { + nixio__push_stat(L, &buf); + if (lua_isstring(L, 2)) { + lua_getfield(L, -1, lua_tostring(L, 2)); + } + return 1; + } +} + +static int nixio_lstat(lua_State *L) { + nixio_stat_t buf; + if (stat(luaL_checkstring(L, 1), &buf)) { + return nixio__perror(L); + } else { + nixio__push_stat(L, &buf); + if (lua_isstring(L, 2)) { + lua_getfield(L, -1, lua_tostring(L, 2)); + } + return 1; + } +} + +#ifndef __WINNT__ + +static int nixio_chown(lua_State *L) { + return nixio__pstatus(L, + !chown( + luaL_checkstring(L, 1), + lua_isnoneornil(L, 2) ? -1 : nixio__check_user(L, 2), + lua_isnoneornil(L, 3) ? -1 : nixio__check_group(L, 3) + ) + ); +} + +static int nixio_lchown(lua_State *L) { + return nixio__pstatus(L, + !lchown( + luaL_checkstring(L, 1), + lua_isnoneornil(L, 2) ? -1 : nixio__check_user(L, 2), + lua_isnoneornil(L, 3) ? -1 : nixio__check_group(L, 3) + ) + ); +} + +static int nixio_mkfifo(lua_State *L) { + return nixio__pstatus(L, + !mkfifo(luaL_checkstring(L, 1), nixio__check_mode(L, 2, -1))); +} + +static int nixio_symlink(lua_State *L) { + return nixio__pstatus(L, + !symlink(luaL_checkstring(L, 1), luaL_checkstring(L, 2))); +} + +static int nixio_readlink(lua_State *L) { + char dest[PATH_MAX]; + ssize_t res = readlink(luaL_checkstring(L, 1), dest, sizeof(dest)); + if (res < 0) { + return nixio__perror(L); + } else { + lua_pushlstring(L, dest, res); + return 1; + } +} + +#include + +typedef struct { + glob_t gl; + size_t pos; + int freed; +} nixio_glob_t; + +static int nixio_glob__iter(lua_State *L) { + nixio_glob_t *globres = lua_touserdata(L, lua_upvalueindex(1)); + if (!globres->freed && globres->pos < globres->gl.gl_pathc) { + lua_pushstring(L, globres->gl.gl_pathv[(globres->pos)++]); + } else { + if (!globres->freed) { + globfree(&globres->gl); + globres->freed = 1; + } + lua_pushnil(L); + } + return 1; +} + +static int nixio_glob__gc(lua_State *L) { + nixio_glob_t *globres = lua_touserdata(L, 1); + if (globres && !globres->freed) { + globres->freed = 1; + globfree(&globres->gl); + } + return 0; +} + +static int nixio_glob(lua_State *L) { + const char *pattern = luaL_optstring(L, 1, "*"); + nixio_glob_t *globres = lua_newuserdata(L, sizeof(nixio_glob_t)); + if (!globres) { + return luaL_error(L, NIXIO_OOM); + } + globres->pos = 0; + globres->freed = 0; + + int globstat = glob(pattern, 0, NULL, &globres->gl); + if (globstat == GLOB_NOMATCH) { + lua_pushcfunction(L, nixio__nulliter); + lua_pushinteger(L, 0); + } else if (globstat) { + return nixio__perror(L); + } else { + luaL_getmetatable(L, NIXIO_GLOB_META); + lua_setmetatable(L, -2); + lua_pushcclosure(L, nixio_glob__iter, 1); + lua_pushinteger(L, globres->gl.gl_pathc); + } + return 2; +} + +#include + +static int nixio__push_statvfs(lua_State *L, struct statvfs *buf) { + lua_createtable(L, 0, 12); + + nixio__pushnumber(L, buf->f_bavail); + lua_setfield(L, -2, "bavail"); + + nixio__pushnumber(L, buf->f_bfree); + lua_setfield(L, -2, "bfree"); + + nixio__pushnumber(L, buf->f_blocks); + lua_setfield(L, -2, "blocks"); + + nixio__pushnumber(L, buf->f_bsize); + lua_setfield(L, -2, "bsize"); + + nixio__pushnumber(L, buf->f_frsize); + lua_setfield(L, -2, "frsize"); + + nixio__pushnumber(L, buf->f_favail); + lua_setfield(L, -2, "favail"); + + nixio__pushnumber(L, buf->f_ffree); + lua_setfield(L, -2, "ffree"); + + nixio__pushnumber(L, buf->f_files); + lua_setfield(L, -2, "files"); + + nixio__pushnumber(L, buf->f_flag); + lua_setfield(L, -2, "flag"); + + nixio__pushnumber(L, buf->f_fsid); + lua_setfield(L, -2, "fsid"); + + nixio__pushnumber(L, buf->f_namemax); + lua_setfield(L, -2, "namemax"); + + return 1; +} + +static int nixio_statvfs(lua_State *L) { + struct statvfs buf; + if (statvfs(luaL_optstring(L, 1, "."), &buf)) { + return nixio__perror(L); + } else { + return nixio__push_statvfs(L, &buf); + } +} + +#endif /* !__WINNT__ */ + + + +/* module table */ +static const luaL_reg R[] = { +#ifndef __WINNT__ + {"glob", nixio_glob}, + {"mkfifo", nixio_mkfifo}, + {"symlink", nixio_symlink}, + {"readlink", nixio_readlink}, + {"chown", nixio_chown}, + {"lchown", nixio_lchown}, + {"statvfs", nixio_statvfs}, +#endif + {"chmod", nixio_chmod}, + {"access", nixio_access}, + {"basename", nixio_basename}, + {"dir", nixio_dir}, + {"dirname", nixio_dirname}, + {"realpath", nixio_realpath}, + {"mkdir", nixio_mkdir}, + {"rmdir", nixio_rmdir}, + {"link", nixio_link}, + {"unlink", nixio_unlink}, + {"utimes", nixio_utimes}, + {"rename", nixio_rename}, + {"remove", nixio_remove}, + {"stat", nixio_stat}, + {"lstat", nixio_lstat}, + {NULL, NULL} +}; + +void nixio_open_fs(lua_State *L) { + lua_newtable(L); + luaL_register(L, NULL, R); + lua_setfield(L, -2, "fs"); + + luaL_newmetatable(L, NIXIO_DIR_META); + lua_pushcfunction(L, nixio_dir__gc); + lua_setfield(L, -2, "__gc"); + lua_pop(L, 1); + +#ifndef __WINNT__ + luaL_newmetatable(L, NIXIO_GLOB_META); + lua_pushcfunction(L, nixio_glob__gc); + lua_setfield(L, -2, "__gc"); + lua_pop(L, 1); +#endif +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/io.c b/feeds/luci/libs/luci-lib-nixio/src/io.c new file mode 100644 index 0000000..12d5c7d --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/io.c @@ -0,0 +1,225 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include +#include +#include +#include + + +/** + * send() / sendto() helper + */ +static int nixio_sock__sendto(lua_State *L, int to) { + nixio_sock *sock = nixio__checksock(L); + struct sockaddr_storage addr_in; +#ifndef __WINNT__ + struct sockaddr_un addr_un; +#endif + struct sockaddr *addr = NULL; + socklen_t alen = 0; + int argoff = 2; + + if (to) { + argoff += 2; + if (sock->domain == AF_INET || sock->domain == AF_INET6) { + const char *address = luaL_checkstring(L, 3); + addr = (struct sockaddr*)&addr_in; + alen = sizeof(addr_in); + + nixio_addr naddr; + memset(&naddr, 0, sizeof(naddr)); + strncpy(naddr.host, address, sizeof(naddr.host) - 1); + naddr.port = (uint16_t)luaL_checkinteger(L, 4); + naddr.family = sock->domain; + + if (nixio__addr_write(&naddr, addr)) { + return nixio__perror_s(L); + } + } + +#ifndef __WINNT__ + else if (sock->domain == AF_UNIX) { + size_t pathlen; + const char *path = luaL_checklstring(L, 3, &pathlen); + + addr_un.sun_family = AF_UNIX; + luaL_argcheck(L, pathlen <= sizeof(addr_un.sun_path), 3, "out of range"); + memcpy(addr_un.sun_path, path, pathlen); + + addr = (struct sockaddr*)&addr_un; + alen = sizeof(sa_family_t) + pathlen; + } +#endif + } + + size_t len; + ssize_t sent; + const char *data = luaL_checklstring(L, 2, &len); + + if (lua_gettop(L) > argoff) { + int offset = luaL_optint(L, argoff + 1, 0); + if (offset) { + if (offset < len) { + data += offset; + len -= offset; + } else { + len = 0; + } + } + + unsigned int wlen = luaL_optint(L, argoff + 2, len); + if (wlen < len) { + len = wlen; + } + } + + do { + sent = sendto(sock->fd, data, len, 0, addr, alen); + } while(sent == -1 && errno == EINTR); + if (sent >= 0) { + lua_pushinteger(L, sent); + return 1; + } else { + return nixio__perror_s(L); + } +} + +/** + * send(data) + */ +static int nixio_sock_send(lua_State *L) { + return nixio_sock__sendto(L, 0); +} + +/** + * sendto(data, address, port) + */ +static int nixio_sock_sendto(lua_State *L) { + return nixio_sock__sendto(L, 1); +} + + +/** + * recv() / recvfrom() helper + */ +static int nixio_sock__recvfrom(lua_State *L, int from) { + nixio_sock *sock = nixio__checksock(L); + char buffer[NIXIO_BUFFERSIZE]; + struct sockaddr_storage addr_in; +#ifndef __WINNT__ + struct sockaddr_un addr_un; +#endif + struct sockaddr *addr = NULL; + socklen_t alen = 0; + uint req = luaL_checkinteger(L, 2); + int readc; + + if (sock->domain == AF_INET || sock->domain == AF_INET6) { + addr = (from) ? (struct sockaddr*)&addr_in : NULL; + alen = (from) ? sizeof(addr_in) : 0; + } +#ifndef __WINNT__ + else if (sock->domain == AF_UNIX) { + addr = (from) ? (struct sockaddr*)&addr_un : NULL; + alen = (from) ? sizeof(addr_un) : 0; + } +#endif + + /* We limit the readsize to NIXIO_BUFFERSIZE */ + req = (req > NIXIO_BUFFERSIZE) ? NIXIO_BUFFERSIZE : req; + + do { + readc = recvfrom(sock->fd, buffer, req, 0, addr, &alen); + } while (readc == -1 && errno == EINTR); + +#ifdef __WINNT__ + if (readc < 0) { + int e = WSAGetLastError(); + if (e == WSAECONNRESET || e == WSAECONNABORTED || e == WSAESHUTDOWN) { + readc = 0; + } + } +#endif + + if (readc < 0) { + return nixio__perror_s(L); + } else { + lua_pushlstring(L, buffer, readc); + + if (!from) { + return 1; + } + /* push address. */ + if (sock->domain == AF_INET || sock->domain == AF_INET6) { + nixio_addr naddr; + if (!nixio__addr_parse(&naddr, (struct sockaddr *)&addr_in)) { + lua_pushstring(L, naddr.host); + lua_pushinteger(L, naddr.port); + return 3; + } else { + return 1; + } + } +#ifndef __WINNT__ + else if (sock->domain == AF_UNIX && alen > sizeof(sa_family_t)) { + /* if first char is non-null then the path is not in the + abstract namespace and alen includes the trailing null */ + if (addr_un.sun_path[0]) + --alen; + lua_pushlstring(L, addr_un.sun_path, alen - sizeof(sa_family_t)); + return 2; + } +#endif + } + return 1; +} + +/** + * recv(count) + */ +static int nixio_sock_recv(lua_State *L) { + return nixio_sock__recvfrom(L, 0); +} + +/** + * recvfrom(count) + */ +static int nixio_sock_recvfrom(lua_State *L) { + return nixio_sock__recvfrom(L, 1); +} + + +/* module table */ +static const luaL_reg M[] = { + {"send", nixio_sock_send}, + {"sendto", nixio_sock_sendto}, + {"recv", nixio_sock_recv}, + {"recvfrom",nixio_sock_recvfrom}, + {"write", nixio_sock_send}, + {"read", nixio_sock_recv}, + {NULL, NULL} +}; + +void nixio_open_io(lua_State *L) { + lua_pushvalue(L, -2); + luaL_register(L, NULL, M); + lua_pop(L, 1); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/mingw-compat.c b/feeds/luci/libs/luci-lib-nixio/src/mingw-compat.c new file mode 100644 index 0000000..02be504 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/mingw-compat.c @@ -0,0 +1,220 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include +#include +#include +#include +#include + +void nixio_open__mingw(lua_State *L) { + _fmode = _O_BINARY; + + WSADATA wsa; + + if (WSAStartup(MAKEWORD(2, 2), &wsa)) { + luaL_error(L, "Unable to initialize Winsock"); + } + + lua_newtable(L); + + NIXIO_WSA_CONSTANT(WSAEACCES); + NIXIO_WSA_CONSTANT(WSAEINTR); + NIXIO_WSA_CONSTANT(WSAEINVAL); + NIXIO_WSA_CONSTANT(WSAEBADF); + NIXIO_WSA_CONSTANT(WSAEFAULT); + NIXIO_WSA_CONSTANT(WSAEMFILE); + NIXIO_WSA_CONSTANT(WSAENAMETOOLONG); + NIXIO_WSA_CONSTANT(WSAELOOP); + NIXIO_WSA_CONSTANT(WSAEAFNOSUPPORT); + NIXIO_WSA_CONSTANT(WSAENOBUFS); + NIXIO_WSA_CONSTANT(WSAEPROTONOSUPPORT); + NIXIO_WSA_CONSTANT(WSAENOPROTOOPT); + NIXIO_WSA_CONSTANT(WSAEADDRINUSE); + NIXIO_WSA_CONSTANT(WSAENETDOWN); + NIXIO_WSA_CONSTANT(WSAENETUNREACH); + NIXIO_WSA_CONSTANT(WSAECONNABORTED); + NIXIO_WSA_CONSTANT(WSAECONNRESET); + + lua_setfield(L, -2, "const_sock"); +} + +const char* nixio__mgw_inet_ntop +(int af, const void *src, char *dst, socklen_t size) { + struct sockaddr_storage saddr; + memset(&saddr, 0, sizeof(saddr)); + + DWORD hostlen = size, sl; + if (af == AF_INET) { + struct sockaddr_in *saddr4 = (struct sockaddr_in *)&saddr; + memcpy(&saddr4->sin_addr, src, sizeof(saddr4->sin_addr)); + saddr4->sin_family = AF_INET; + saddr4->sin_port = 0; + sl = sizeof(struct sockaddr_in); + } else if (af == AF_INET6) { + struct sockaddr_in6 *saddr6 = (struct sockaddr_in6 *)&saddr; + memcpy(&saddr6->sin6_addr, src, sizeof(saddr6->sin6_addr)); + saddr6->sin6_family = AF_INET6; + saddr6->sin6_port = 0; + sl = sizeof(struct sockaddr_in6); + } else { + return NULL; + } + if (WSAAddressToString((struct sockaddr*)&saddr, sl, NULL, dst, &hostlen)) { + return NULL; + } + return dst; +} + +int nixio__mgw_inet_pton (int af, const char *src, void *dst) { + struct sockaddr_storage sa; + int sl = sizeof(sa); + + if (!WSAStringToAddress((char*)src, af, NULL, (struct sockaddr*)&sa, &sl)) { + if (af == AF_INET) { + struct in_addr ina = ((struct sockaddr_in *)&sa)->sin_addr; + memcpy(dst, &ina, sizeof(ina)); + return 1; + } else if (af == AF_INET6) { + struct in_addr6 ina6 = ((struct sockaddr_in6 *)&sa)->sin6_addr; + memcpy(dst, &ina6, sizeof(ina6)); + return 1; + } else { + WSASetLastError(WSAEAFNOSUPPORT); + return -1; + } + } else { + return -1; + } +} + +int nixio__mgw_nanosleep(const struct timespec *req, struct timespec *rem) { + if (rem) { + rem->tv_sec = 0; + rem->tv_nsec = 0; + } + Sleep(req->tv_sec * 1000 + req->tv_nsec * 1000000); + return 0; +} + +int nixio__mgw_poll(struct pollfd *fds, int nfds, int timeout) { + if (!fds || !nfds) { + Sleep(timeout); + return 0; + } + + struct timeval tv; + int high = 0, rf = 0, wf = 0, ef = 0; + fd_set rfds, wfds, efds; + FD_ZERO(&rfds); + FD_ZERO(&wfds); + FD_ZERO(&efds); + + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout % 1000) * 1000; + + for (int i = 0; i < nfds; i++) { + if (fds->events & POLLIN) { + FD_SET(fds->fd, &rfds); + rf++; + } + if (fds->events & POLLOUT) { + FD_SET(fds->fd, &wfds); + wf++; + } + if (fds->events & POLLERR) { + FD_SET(fds->fd, &efds); + ef++; + } + if (fds->fd > high) { + high = fds->fd; + } + } + + int stat = select(high + 1, (rf) ? &rfds : NULL, + (wf) ? &wfds : NULL, (ef) ? &efds : NULL, &tv); + if (stat < 1) { + errno = WSAGetLastError(); + return stat; + } + + high = 0; + + for (int i = 0; i < nfds; i++) { + fds->revents = 0; + if ((fds->events & POLLIN) && FD_ISSET(fds->fd, &rfds)) { + fds->revents |= POLLIN; + } + if ((fds->events & POLLOUT) && FD_ISSET(fds->fd, &wfds)) { + fds->revents |= POLLOUT; + } + if ((fds->events & POLLERR) && FD_ISSET(fds->fd, &efds)) { + fds->revents |= POLLERR; + } + if (fds->revents) { + high++; + } + } + + return high; +} + +int nixio__mgw_lockf(int fd, int cmd, off_t len) { + int stat; + if (cmd == F_LOCK) { + do { + stat = _locking(fd, _LK_LOCK, len); + } while (stat == -1 && errno == EDEADLOCK); + } else if (cmd == F_TLOCK) { + stat = _locking(fd, _LK_NBLCK, len); + } else if (cmd == F_ULOCK) { + stat = _locking(fd, _LK_UNLCK, len); + } else { + stat = -1; + errno = EINVAL; + } + return stat; +} + +char* nixio__mgw_realpath(const char *path, char *resolved) { + if (GetFullPathName(path, PATH_MAX, resolved, NULL)) { + return resolved; + } else { + errno = GetLastError(); + return NULL; + } +} + +int nixio__mgw_link(const char *oldpath, const char *newpath) { + if (!CreateHardLink(newpath, oldpath, NULL)) { + errno = GetLastError(); + return -1; + } else { + return 0; + } +} + +int nixio__mgw_utimes(const char *filename, const struct timeval times[2]) { + struct _utimbuf timebuffer; + timebuffer.actime = times[0].tv_sec; + timebuffer.modtime = times[1].tv_sec; + + return _utime(filename, &timebuffer); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/mingw-compat.h b/feeds/luci/libs/luci-lib-nixio/src/mingw-compat.h new file mode 100644 index 0000000..a26a4be --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/mingw-compat.h @@ -0,0 +1,112 @@ +#ifndef NIXIO_MINGW_COMPAT_H_ +#define NIXIO_MINGW_COMPAT_H_ + +#include +#include +#include +#include +#include +#include +#include + +typedef unsigned int uint; +typedef unsigned long ulong; + +#define S_ISLNK(m) 0 +#define S_ISSOCK(m) 0 + +#define EWOULDBLOCK WSAEWOULDBLOCK +#define EAFNOSUPPORT WSAEAFNOSUPPORT +#define ENOPROTOOPT WSAENOPROTOOPT + +#define SHUT_RD SD_RECEIVE +#define SHUT_WR SD_SEND +#define SHUT_RDWR SD_BOTH + +#define pipe(fds) _pipe(fds, 65536, 0) +#define fsync _commit +#define lseek lseek64 +#define stat _stati64 +#define lstat _stati64 +#define fstat _fstati64 + + +#define F_LOCK 1 +#define F_ULOCK 0 +#define F_TLOCK 2 +#define F_TEST 3 +int nixio__mgw_lockf(int fd, int cmd, off_t len); +#define lockf nixio__mgw_lockf + +const char* nixio__mgw_inet_ntop +(int af, const void *src, char *dst, socklen_t size); +#define inet_ntop nixio__mgw_inet_ntop + +int nixio__mgw_inet_pton (int af, const char *src, void *dst); +#define inet_pton nixio__mgw_inet_pton + + +#ifndef POLLIN +#define POLLIN 0x001 +#define POLLOUT 0x004 +#define POLLERR 0x008 +struct pollfd { + int fd; + short events; + short revents; +}; +#endif + +typedef int nfds_t; +int nixio__mgw_poll(struct pollfd *fds, nfds_t nfds, int timeout); +#define poll nixio__mgw_poll + + +struct timespec { + time_t tv_sec; + long tv_nsec; +}; + +int nixio__mgw_nanosleep(const struct timespec *req, struct timespec *rem); +#define nanosleep nixio__mgw_nanosleep + + +char* nixio__mgw_realpath(const char *path, char *resolved); +#define realpath nixio__mgw_realpath + + +int nixio__mgw_link(const char *oldpath, const char *newpath); +#define link nixio__mgw_link + + +int nixio__mgw_utimes(const char *filename, const struct timeval times[2]); +#define utimes nixio__mgw_utimes + + +#define setenv(k, v, o) !SetEnvironmentVariable(k, v) +#define unsetenv(k) !SetEnvironmentVariable(k, NULL) + +#define execv(p, a) execv(p, (const char* const*)a) +#define execvp(p, a) execvp(p, (const char* const*)a) +#define execve(p, a, e) execve(p, (const char* const*)a, (const char* const*)e) + +#define mkdir(p, m) mkdir(p) + + +#define nixio__perror_s(L) \ + errno = WSAGetLastError(); \ + return nixio__perror(L); + +#define nixio__pstatus_s(L, c) \ + errno = WSAGetLastError(); \ + return nixio__pstatus(L, c); + + + +#define NIXIO_WSA_CONSTANT(x) \ + lua_pushinteger(L, x); \ + lua_setfield(L, -2, #x+3); + +void nixio_open__mingw(lua_State *L); + +#endif /* NIXIO_MINGW_COMPAT_H_ */ diff --git a/feeds/luci/libs/luci-lib-nixio/src/nixio-tls.h b/feeds/luci/libs/luci-lib-nixio/src/nixio-tls.h new file mode 100644 index 0000000..0fac5a9 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/nixio-tls.h @@ -0,0 +1,53 @@ +#ifndef NIXIO_TLS_H_ +#define NIXIO_TLS_H_ + +#include "nixio.h" +#include + +#ifndef WITHOUT_OPENSSL +#include +#include +#include +#endif + +#define NIXIO_TLS_CTX_META "nixio.tls.ctx" +#define NIXIO_TLS_SOCK_META "nixio.tls.sock" + +typedef struct nixio_tls_socket { + SSL *socket; +#ifdef WITH_AXTLS + char connected; + size_t pbufsiz; + char *pbufpos; + char *pbuffer; +#endif +} nixio_tls_sock; + +#define NIXIO_CRYPTO_HASH_META "nixio.crypto.hash" +#define NIXIO_DIGEST_SIZE 64 +#define NIXIO_CRYPTO_BLOCK_SIZE 64 + +#define NIXIO_HASH_NONE 0 +#define NIXIO_HASH_MD5 0x01 +#define NIXIO_HASH_SHA1 0x02 + +#define NIXIO_HMAC_BIT 0x40 + +typedef int(*nixio_hash_initcb)(void *); +typedef int(*nixio_hash_updatecb)(void *, const void *, unsigned long); +typedef int(*nixio_hash_finalcb)(unsigned char *, void *); + +typedef struct nixio_hash_obj { + uint type; + unsigned char digest[NIXIO_DIGEST_SIZE]; + size_t digest_size; + unsigned char key[NIXIO_CRYPTO_BLOCK_SIZE]; + size_t key_size; + size_t block_size; + void *ctx; + nixio_hash_initcb init; + nixio_hash_updatecb update; + nixio_hash_finalcb final; +} nixio_hash; + +#endif /* NIXIO_TLS_H_ */ diff --git a/feeds/luci/libs/luci-lib-nixio/src/nixio.c b/feeds/luci/libs/luci-lib-nixio/src/nixio.c new file mode 100644 index 0000000..ae81c6f --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/nixio.c @@ -0,0 +1,240 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include +#include +#include + +#define VERSION 0.4 + + +/* pushes nil, error number and errstring on the stack */ +int nixio__perror(lua_State *L) { + if (errno == EAGAIN || errno == EWOULDBLOCK) { + lua_pushboolean(L, 0); + } else { + lua_pushnil(L); + } + lua_pushinteger(L, errno); + lua_pushstring(L, strerror(errno)); + return 3; +} + +/* pushes true, if operation succeeded, otherwise call nixio__perror */ +int nixio__pstatus(lua_State *L, int condition) { + if (condition) { + lua_pushboolean(L, 1); + return 1; + } else { + return nixio__perror(L); + } +} + +/* checks whether the first argument is a socket and returns it */ +nixio_sock* nixio__checksock(lua_State *L) { + nixio_sock *sock = (nixio_sock*)luaL_checkudata(L, 1, NIXIO_META); + luaL_argcheck(L, sock->fd != -1, 1, "invalid socket object"); + return sock; +} + +/* read fd from nixio_sock object */ +int nixio__checksockfd(lua_State *L) { + return nixio__checksock(L)->fd; +} + +/* return any possible fd, otherwise error out */ +int nixio__checkfd(lua_State *L, int ud) { + int fd = nixio__tofd(L, ud); + return (fd != -1) ? fd : luaL_argerror(L, ud, "invalid file descriptor"); +} + +/* return any possible fd */ +int nixio__tofd(lua_State *L, int ud) { + void *udata = lua_touserdata(L, ud); + int fd = -1; + if (lua_getmetatable(L, ud)) { + luaL_getmetatable(L, NIXIO_META); + luaL_getmetatable(L, NIXIO_FILE_META); + luaL_getmetatable(L, LUA_FILEHANDLE); + if (lua_rawequal(L, -3, -4)) { + fd = ((nixio_sock*)udata)->fd; + } else if (lua_rawequal(L, -2, -4)) { + fd = *((int*)udata); + } else if (lua_rawequal(L, -1, -4)) { + fd = (*((FILE **)udata)) ? fileno(*((FILE **)udata)) : -1; + } + lua_pop(L, 4); + } + return fd; +} + +/* An empty iterator */ +int nixio__nulliter(lua_State *L) { + lua_pushnil(L); + return 1; +} + +static int nixio_errno(lua_State *L) { + lua_pushinteger(L, errno); + return 1; +} + +static int nixio_strerror(lua_State *L) { + lua_pushstring(L, strerror(luaL_checkinteger(L, 1))); + return 1; +} + +/* object table */ +static const luaL_reg R[] = { + {"errno", nixio_errno}, + {"strerror", nixio_strerror}, + {NULL, NULL} +}; + +/* entry point */ +NIXIO_API int luaopen_nixio(lua_State *L) { + /* create metatable */ + luaL_newmetatable(L, NIXIO_META); + + /* metatable.__index = metatable */ + lua_pushvalue(L, -1); + lua_setfield(L, -2, "__index"); + + /* register module */ + luaL_register(L, "nixio", R); + + /* register metatable as socket_meta */ + lua_pushvalue(L, -2); + lua_setfield(L, -2, "meta_socket"); + + /* register methods */ +#ifdef __WINNT__ + nixio_open__mingw(L); +#endif + nixio_open_file(L); + nixio_open_socket(L); + nixio_open_sockopt(L); + nixio_open_bind(L); + nixio_open_address(L); + nixio_open_protoent(L); + nixio_open_poll(L); + nixio_open_io(L); + nixio_open_splice(L); + nixio_open_process(L); + nixio_open_syslog(L); + nixio_open_bit(L); + nixio_open_bin(L); + nixio_open_fs(L); + nixio_open_user(L); + +#ifndef NO_TLS + nixio_open_tls_crypto(L); + nixio_open_tls_context(L); + nixio_open_tls_socket(L); +#endif + + /* module version */ + lua_pushinteger(L, VERSION); + lua_setfield(L, -2, "version"); + + /* some constants */ + lua_newtable(L); + + lua_pushliteral(L, NIXIO_SEP); + lua_setfield(L, -2, "sep"); + + lua_pushliteral(L, NIXIO_PATHSEP); + lua_setfield(L, -2, "pathsep"); + + lua_pushinteger(L, NIXIO_BUFFERSIZE); + lua_setfield(L, -2, "buffersize"); + + NIXIO_PUSH_CONSTANT(EACCES); + NIXIO_PUSH_CONSTANT(EINTR); + NIXIO_PUSH_CONSTANT(ENOSYS); + NIXIO_PUSH_CONSTANT(EINVAL); + NIXIO_PUSH_CONSTANT(EAGAIN); + NIXIO_PUSH_CONSTANT(ENOMEM); + NIXIO_PUSH_CONSTANT(ENOENT); + NIXIO_PUSH_CONSTANT(ECHILD); + NIXIO_PUSH_CONSTANT(EIO); + NIXIO_PUSH_CONSTANT(EBADF); + NIXIO_PUSH_CONSTANT(EFAULT); + NIXIO_PUSH_CONSTANT(EFBIG); + NIXIO_PUSH_CONSTANT(ENOSPC); + NIXIO_PUSH_CONSTANT(EPIPE); + NIXIO_PUSH_CONSTANT(ESPIPE); + NIXIO_PUSH_CONSTANT(EISDIR); + NIXIO_PUSH_CONSTANT(EPERM); + NIXIO_PUSH_CONSTANT(EEXIST); + NIXIO_PUSH_CONSTANT(EMFILE); + NIXIO_PUSH_CONSTANT(ENAMETOOLONG); + NIXIO_PUSH_CONSTANT(ENFILE); + NIXIO_PUSH_CONSTANT(ENODEV); + NIXIO_PUSH_CONSTANT(EXDEV); + NIXIO_PUSH_CONSTANT(ENOTDIR); + NIXIO_PUSH_CONSTANT(ENXIO); + NIXIO_PUSH_CONSTANT(EROFS); + NIXIO_PUSH_CONSTANT(EBUSY); + NIXIO_PUSH_CONSTANT(ESRCH); + NIXIO_PUSH_CONSTANT(SIGINT); + NIXIO_PUSH_CONSTANT(SIGTERM); + NIXIO_PUSH_CONSTANT(SIGSEGV); + +#ifndef __WINNT__ + NIXIO_PUSH_CONSTANT(EALREADY); + NIXIO_PUSH_CONSTANT(EINPROGRESS); + NIXIO_PUSH_CONSTANT(EWOULDBLOCK); + NIXIO_PUSH_CONSTANT(ELOOP); + NIXIO_PUSH_CONSTANT(EOVERFLOW); + NIXIO_PUSH_CONSTANT(ETXTBSY); + NIXIO_PUSH_CONSTANT(EAFNOSUPPORT); + NIXIO_PUSH_CONSTANT(ENOBUFS); + NIXIO_PUSH_CONSTANT(EPROTONOSUPPORT); + NIXIO_PUSH_CONSTANT(ENOPROTOOPT); + NIXIO_PUSH_CONSTANT(EADDRINUSE); + NIXIO_PUSH_CONSTANT(ENETDOWN); + NIXIO_PUSH_CONSTANT(ENETUNREACH); + + NIXIO_PUSH_CONSTANT(SIGALRM); + NIXIO_PUSH_CONSTANT(SIGKILL); + NIXIO_PUSH_CONSTANT(SIGHUP); + NIXIO_PUSH_CONSTANT(SIGSTOP); + NIXIO_PUSH_CONSTANT(SIGCONT); + NIXIO_PUSH_CONSTANT(SIGCHLD); + NIXIO_PUSH_CONSTANT(SIGQUIT); + NIXIO_PUSH_CONSTANT(SIGUSR1); + NIXIO_PUSH_CONSTANT(SIGUSR2); + NIXIO_PUSH_CONSTANT(SIGIO); + NIXIO_PUSH_CONSTANT(SIGURG); + NIXIO_PUSH_CONSTANT(SIGPIPE); + + lua_pushvalue(L, -1); + lua_setfield(L, -3, "const_sock"); + + signal(SIGPIPE, SIG_IGN); +#endif /* !__WINNT__ */ + lua_setfield(L, -2, "const"); + + /* remove meta table */ + lua_remove(L, -2); + + return 1; +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/nixio.h b/feeds/luci/libs/luci-lib-nixio/src/nixio.h new file mode 100644 index 0000000..8802e92 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/nixio.h @@ -0,0 +1,133 @@ +#ifndef NIXIO_H_ +#define NIXIO_H_ + +#define NIXIO_OOM "out of memory" + +#define NIXIO_META "nixio.socket" +#define NIXIO_FILE_META "nixio.file" +#define NIXIO_GLOB_META "nixio.glob" +#define NIXIO_DIR_META "nixio.dir" +#define _FILE_OFFSET_BITS 64 + +#define NIXIO_PUSH_CONSTANT(x) \ + lua_pushinteger(L, x); \ + lua_setfield(L, -2, #x); + +/* uClibc: broken as always */ +#define _LARGEFILE_SOURCE + +#include +#include +#include +#include + +#define NIXIO_BUFFERSIZE 8192 + +typedef struct nixio_socket { + int fd; + int domain; + int type; + int protocol; +} nixio_sock; + +typedef struct nixio_address { + int family; + char host[128]; + int port; + int prefix; +} nixio_addr; + +int nixio__perror(lua_State *L); +int nixio__pstatus(lua_State *L, int condition); + +#if defined(LUA_NUMBER_DOUBLE) || defined(LNUM_DOUBLE) || defined(LNUM_LDOUBLE) +#define NIXIO_DOUBLE 1 +#define nixio__checknumber luaL_checknumber +#define nixio__pushnumber lua_pushnumber +#define nixio__optnumber luaL_optnumber +#else +#define nixio__checknumber luaL_checkinteger +#define nixio__pushnumber lua_pushinteger +#define nixio__optnumber luaL_optinteger +#endif + + +#ifndef __WINNT__ + +#define NIXIO_API extern + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define NIXIO_SEP "/" +#define NIXIO_PATHSEP ":" + +#define nixio__perror_s nixio__perror +#define nixio__pstatus_s nixio__pstatus + +int nixio__check_group(lua_State *L, int idx); +int nixio__check_user(lua_State *L, int idx); + +typedef struct stat nixio_stat_t; + +#else /* __WINNT__ */ + +#define NIXIO_API extern __declspec(dllexport) +#define NIXIO_SEP "\\" +#define NIXIO_PATHSEP ";" +#include "mingw-compat.h" + +typedef struct _stati64 nixio_stat_t; + +#endif + +nixio_sock* nixio__checksock(lua_State *L); +int nixio__checksockfd(lua_State *L); +int nixio__checkfd(lua_State *L, int ud); +int nixio__tofd(lua_State *L, int ud); +int nixio__nulliter(lua_State *L); + +int nixio__addr_parse(nixio_addr *addr, struct sockaddr *saddr); +int nixio__addr_write(nixio_addr *addr, struct sockaddr *saddr); + +int nixio__check_mode(lua_State *L, int idx, int def); +int nixio__mode_write(int mode, char *modestr); + +int nixio__push_stat(lua_State *L, nixio_stat_t *buf); + +const char nixio__bin2hex[16]; + +/* Module functions */ +void nixio_open_file(lua_State *L); +void nixio_open_socket(lua_State *L); +void nixio_open_sockopt(lua_State *L); +void nixio_open_bind(lua_State *L); +void nixio_open_address(lua_State *L); +void nixio_open_protoent(lua_State *L); +void nixio_open_poll(lua_State *L); +void nixio_open_io(lua_State *L); +void nixio_open_splice(lua_State *L); +void nixio_open_process(lua_State *L); +void nixio_open_syslog(lua_State *L); +void nixio_open_bit(lua_State *L); +void nixio_open_bin(lua_State *L); +void nixio_open_fs(lua_State *L); +void nixio_open_user(lua_State *L); + +#ifndef NO_TLS +void nixio_open_tls_crypto(lua_State *L); +void nixio_open_tls_context(lua_State *L); +void nixio_open_tls_socket(lua_State *L); +#endif + +/* Method functions */ + +#endif /* NIXIO_H_ */ diff --git a/feeds/luci/libs/luci-lib-nixio/src/poll.c b/feeds/luci/libs/luci-lib-nixio/src/poll.c new file mode 100644 index 0000000..1211bc7 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/poll.c @@ -0,0 +1,210 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include +#include +#include +#include + + +static int nixio_gettimeofday(lua_State *L) { + struct timeval tv; + gettimeofday(&tv, NULL); + nixio__pushnumber(L, tv.tv_sec); + nixio__pushnumber(L, tv.tv_usec); + return 2; +} + + +/** + * nanosleep() + */ +static int nixio_nanosleep(lua_State *L) { + struct timespec req, rem; + req.tv_sec = luaL_optint(L, 1, 0); + req.tv_nsec = luaL_optint(L, 2, 0); + + int status = nanosleep(&req, &rem); + if (!status) { + lua_pushboolean(L, 1); + return 1; + } else { + if (errno == EINTR) { + lua_pushboolean(L, 0); + lua_pushinteger(L, rem.tv_sec); + lua_pushinteger(L, rem.tv_nsec); + return 3; + } else { + return nixio__perror(L); + } + } +} + +/** + * Checks whether a flag is set in the bitmap and sets the matching table value + */ +static void nixio_poll_flags__r(lua_State *L, int *map, int f, const char *t) { + lua_pushstring(L, t); + if (*map & f) { + lua_pushboolean(L, 1); + } else { + lua_pushnil(L); + } + lua_rawset(L, -3); +} + +/** + * Translate integer to poll flags and vice versa + */ +static int nixio_poll_flags(lua_State *L) { + int flags; + if (lua_isnumber(L, 1)) { + flags = luaL_checkinteger(L, 1); + lua_newtable(L); + nixio_poll_flags__r(L, &flags, POLLIN, "in"); + nixio_poll_flags__r(L, &flags, POLLOUT, "out"); + nixio_poll_flags__r(L, &flags, POLLERR, "err"); +#ifndef __WINNT__ + nixio_poll_flags__r(L, &flags, POLLPRI, "pri"); + nixio_poll_flags__r(L, &flags, POLLHUP, "hup"); + nixio_poll_flags__r(L, &flags, POLLNVAL, "nval"); +#endif + } else { + flags = 0; + const int j = lua_gettop(L); + for (int i=1; i<=j; i++) { + const char *flag = luaL_checkstring(L, i); + if (!strcmp(flag, "in")) { + flags |= POLLIN; + } else if (!strcmp(flag, "out")) { + flags |= POLLOUT; + } else if (!strcmp(flag, "err")) { + flags |= POLLERR; + } else if (!strcmp(flag, "pri")) { +#ifndef __WINNT__ + flags |= POLLPRI; +#endif + } else if (!strcmp(flag, "hup")) { +#ifndef __WINNT__ + flags |= POLLHUP; +#endif + } else if (!strcmp(flag, "nval")) { +#ifndef __WINNT__ + flags |= POLLNVAL; +#endif + } else { + return luaL_argerror(L, i, + "supported values: in, pri, out, err, hup, nval"); + } + } + lua_pushinteger(L, flags); + } + return 1; +} + +/** + * poll({{fd = socket, events = FLAGS}, ...}, timeout) + */ +static int nixio_poll(lua_State *L) { + int len = lua_objlen(L, 1); + int i, fd; + int timeout = luaL_optint(L, 2, 0); + int status = -1; + + /* we are being abused as sleep() replacement... */ + if (lua_isnoneornil(L, 1) || len < 1) { + if (!poll(NULL, 0, timeout)) { + lua_pushinteger(L, 0); + return 1; + } else { + return nixio__perror(L); + } + } + + luaL_checktype(L, 1, LUA_TTABLE); + struct pollfd *fds = calloc(len, sizeof(struct pollfd)); + if (!fds) { + return luaL_error(L, NIXIO_OOM); + } + + for (i = 0; i < len; i++) { + lua_rawgeti(L, 1, i+1); + if (!lua_istable(L, -1)) { + free(fds); + return luaL_argerror(L, 1, "invalid datastructure"); + } + + lua_pushliteral(L, "fd"); + lua_rawget(L, -2); + fd = nixio__tofd(L, -1); + if (fd == -1) { + free(fds); + return luaL_argerror(L, 1, "invalid fd in datastructure"); + } + fds[i].fd = fd; + + lua_pushliteral(L, "events"); + lua_rawget(L, -3); + fds[i].events = (short)lua_tointeger(L, -1); + + lua_pop(L, 3); + } + + status = poll(fds, (nfds_t)len, timeout); + + if (status == 0) { + free(fds); + lua_pushboolean(L, 0); + return 1; + } else if (status < 0) { + free(fds); + return nixio__perror(L); + } + + for (i = 0; i < len; i++) { + lua_rawgeti(L, 1, i+1); + + lua_pushliteral(L, "revents"); + lua_pushinteger(L, fds[i].revents); + lua_rawset(L, -3); + + lua_pop(L, 1); + } + + free(fds); + + lua_pushinteger(L, status); + lua_pushvalue(L, 1); + + return 2; +} + +/* module table */ +static const luaL_reg R[] = { + {"gettimeofday", nixio_gettimeofday}, + {"nanosleep", nixio_nanosleep}, + {"poll", nixio_poll}, + {"poll_flags", nixio_poll_flags}, + {NULL, NULL} +}; + +void nixio_open_poll(lua_State *L) { + luaL_register(L, NULL, R); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/process.c b/feeds/luci/libs/luci-lib-nixio/src/process.c new file mode 100644 index 0000000..5ae9b82 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/process.c @@ -0,0 +1,450 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include +#include +#include +#include +#include +#include + +#define NIXIO_EXECVE 0x01 +#define NIXIO_EXECV 0x02 +#define NIXIO_EXECVP 0x03 + +int nixio__exec(lua_State *L, int m) { + const char *path = luaL_checkstring(L, 1); + const char *arg; + int argn, i; + + if (m == NIXIO_EXECVE) { + luaL_checktype(L, 2, LUA_TTABLE); + argn = lua_objlen(L, 2) + 1; + } else { + argn = lua_gettop(L); + } + + char **args = lua_newuserdata(L, sizeof(char*) * (argn + 1)); + args[argn] = NULL; + args[0] = (char *)path; + + if (m == NIXIO_EXECVE) { + for (i = 1; i < argn; i++) { + lua_rawgeti(L, 2, i); + arg = lua_tostring(L, -1); + luaL_argcheck(L, arg, 2, "invalid argument"); + args[i] = (char *)arg; + } + + if (lua_isnoneornil(L, 3)) { + execv(path, args); + } else { + luaL_checktype(L, 3, LUA_TTABLE); + argn = 0; + lua_pushnil(L); + while (lua_next(L, 3)) { + if (!lua_checkstack(L, 1)) { + lua_settop(L, 0); + return luaL_error(L, "stack overflow"); + } + + if (lua_type(L, -2) != LUA_TSTRING || !lua_isstring(L, -1)) { + return luaL_argerror(L, 3, "invalid environment"); + } + + lua_pushfstring(L, "%s=%s", + lua_tostring(L, -2), lua_tostring(L, -1)); + + lua_insert(L, 5); + lua_pop(L, 1); + argn++; + } + + char **env = lua_newuserdata(L, sizeof(char*) * (argn + 1)); + env[argn] = NULL; + + for (i = 1; i <= argn; i++) { + env[i-1] = (char *)lua_tostring(L, -(i+1)); + } + + execve(path, args, env); + } + } else { + for (i = 2; i <= argn; i++) { + arg = luaL_checkstring(L, i); + args[i-1] = (char *)arg; + } + + if (m == NIXIO_EXECV) { + execv(path, args); + } else { + execvp(path, args); + } + } + + return nixio__perror(L); +} + +#ifndef __WINNT__ +#include +#include +#include +#include +#include + +static int nixio_fork(lua_State *L) { + pid_t pid = fork(); + if (pid == -1) { + return nixio__perror(L); + } else { + lua_pushinteger(L, pid); + return 1; + } +} + +static int nixio_kill(lua_State *L) { + return nixio__pstatus(L, !kill(luaL_checkint(L, 1), luaL_checkint(L, 2))); +} + +static int nixio_getppid(lua_State *L) { + lua_pushinteger(L, getppid()); + return 1; +} + +static int nixio_getuid(lua_State *L) { + lua_pushinteger(L, getuid()); + return 1; +} + +static int nixio_getgid(lua_State *L) { + lua_pushinteger(L, getgid()); + return 1; +} + +static int nixio_setgid(lua_State *L) { + return nixio__pstatus(L, !setgid(nixio__check_group(L, 1))); +} + +static int nixio_setuid(lua_State *L) { + return nixio__pstatus(L, !setuid(nixio__check_user(L, 1))); +} + +static int nixio_nice(lua_State *L) { + int nval = luaL_checkint(L, 1); + + errno = 0; + nval = nice(nval); + + if (nval == -1 && errno) { + return nixio__perror(L); + } else { + lua_pushinteger(L, nval); + return 1; + } +} + +static int nixio_setsid(lua_State *L) { + pid_t pid = setsid(); + + if (pid == -1) { + return nixio__perror(L); + } else { + lua_pushinteger(L, pid); + return 1; + } +} + +static int nixio_wait(lua_State *L) { + pid_t pidin = luaL_optinteger(L, 1, -1), pidout; + int options = 0, status; + + const int j = lua_gettop(L); + for (int i=2; i<=j; i++) { + const char *flag = luaL_checkstring(L, i); + if (!strcmp(flag, "nohang")) { + options |= WNOHANG; + } else if (!strcmp(flag, "untraced")) { + options |= WUNTRACED; + } else if (!strcmp(flag, "continued")) { + options |= WCONTINUED; + } else { + return luaL_argerror(L, i, + "supported values: nohang, untraced, continued"); + } + } + + do { + pidout = waitpid(pidin, &status, options); + } while (pidout == -1 && errno == EINTR); + + if (pidout == 0) { + lua_pushboolean(L, 0); + return 1; + } else if (pidout == -1) { + return nixio__perror(L); + } else { + lua_pushinteger(L, pidout); + } + + if (WIFEXITED(status)) { + lua_pushliteral(L, "exited"); + lua_pushinteger(L, WEXITSTATUS(status)); + } else if (WIFSIGNALED(status)) { + lua_pushliteral(L, "signaled"); + lua_pushinteger(L, WTERMSIG(status)); + } else if (WIFSTOPPED(status)) { + lua_pushliteral(L, "stopped"); + lua_pushinteger(L, WSTOPSIG(status)); + } else { + return 1; + } + + return 3; +} + +static int nixio_times(lua_State *L) { + struct tms buf; + if (times(&buf) == -1) { + return nixio__perror(L); + } else { + lua_createtable(L, 0, 4); + nixio__pushnumber(L, buf.tms_cstime); + lua_setfield(L, -2, "cstime"); + + nixio__pushnumber(L, buf.tms_cutime); + lua_setfield(L, -2, "cutime"); + + nixio__pushnumber(L, buf.tms_stime); + lua_setfield(L, -2, "stime"); + + nixio__pushnumber(L, buf.tms_utime); + lua_setfield(L, -2, "utime"); + + return 1; + } +} + +static int nixio_uname(lua_State *L) { + struct utsname buf; + if (uname(&buf)) { + return nixio__perror(L); + } + + lua_createtable(L, 0, 5); + + lua_pushstring(L, buf.machine); + lua_setfield(L, -2, "machine"); + + lua_pushstring(L, buf.version); + lua_setfield(L, -2, "version"); + + lua_pushstring(L, buf.release); + lua_setfield(L, -2, "release"); + + lua_pushstring(L, buf.nodename); + lua_setfield(L, -2, "nodename"); + + lua_pushstring(L, buf.sysname); + lua_setfield(L, -2, "sysname"); + + return 1; +} + +#endif /* !__WINNT__ */ + +static int nixio_chdir(lua_State *L) { + return nixio__pstatus(L, !chdir(luaL_checkstring(L, 1))); +} + +static int nixio_signal(lua_State *L) { + int sig = luaL_checkinteger(L, 1); + const char *val = luaL_checkstring(L, 2); + + if (!strcmp(val, "ign") || !strcmp(val, "ignore")) { + return nixio__pstatus(L, signal(sig, SIG_IGN) != SIG_ERR); + } else if (!strcmp(val, "dfl") || !strcmp(val, "default")) { + return nixio__pstatus(L, signal(sig, SIG_DFL) != SIG_ERR); + } else { + return luaL_argerror(L, 2, "supported values: ign, dfl"); + } +} + +static int nixio_getpid(lua_State *L) { + lua_pushinteger(L, getpid()); + return 1; +} + +static int nixio_getenv(lua_State *L) { + const char *key = luaL_optstring(L, 1, NULL); + if (key) { + const char *val = getenv(key); + if (val) { + lua_pushstring(L, val); + } else { + lua_pushnil(L); + } + } else { + lua_newtable(L); + extern char **environ; + for (char **c = environ; *c; c++) { + const char *delim = strchr(*c, '='); + if (!delim) { + return luaL_error(L, "invalid environment"); + } + lua_pushlstring(L, *c, delim-*c); + lua_pushstring(L, delim + 1); + lua_rawset(L, -3); + } + } + return 1; +} + +static int nixio_setenv(lua_State *L) { + const char *key = luaL_checkstring(L, 1); + const char *val = luaL_optstring(L, 2, NULL); + return nixio__pstatus(L, (val) ? !setenv(key, val, 1) : !unsetenv(key)); +} + +static int nixio_exec(lua_State *L) { + return nixio__exec(L, NIXIO_EXECV); +} + +static int nixio_execp(lua_State *L) { + return nixio__exec(L, NIXIO_EXECVP); +} + +static int nixio_exece(lua_State *L) { + return nixio__exec(L, NIXIO_EXECVE); +} + +static int nixio_getcwd(lua_State *L) { + char path[PATH_MAX]; + + if (getcwd(path, sizeof(path))) { + lua_pushstring(L, path); + return 1; + } else { + return nixio__perror(L); + } +} + +static int nixio_umask(lua_State *L) { + char mask[9]; + lua_pushinteger(L, + nixio__mode_write(umask(nixio__check_mode(L, 1, -1)), mask)); + lua_pushlstring(L, mask, 9); + return 2; +} + +#ifdef __linux__ + +#include + +static int nixio_sysinfo(lua_State *L) { + struct sysinfo info; + if (sysinfo(&info)) { + return nixio__perror(L); + } + + lua_createtable(L, 0, 12); + + nixio__pushnumber(L, info.bufferram); + lua_setfield(L, -2, "bufferram"); + + nixio__pushnumber(L, info.freehigh); + lua_setfield(L, -2, "freehigh"); + + nixio__pushnumber(L, info.freeram); + lua_setfield(L, -2, "freeram"); + + nixio__pushnumber(L, info.freeswap); + lua_setfield(L, -2, "freeswap"); + + lua_createtable(L, 0, 3); + for (int i=0; i<3; i++) { + lua_pushnumber(L, info.loads[i] / 65536.); + lua_rawseti(L, -2, i+1); + } + lua_setfield(L, -2, "loads"); + + lua_pushinteger(L, info.mem_unit); + lua_setfield(L, -2, "mem_unit"); + + lua_pushinteger(L, info.procs); + lua_setfield(L, -2, "procs"); + + nixio__pushnumber(L, info.sharedram); + lua_setfield(L, -2, "sharedram"); + + nixio__pushnumber(L, info.totalhigh); + lua_setfield(L, -2, "totalhigh"); + + nixio__pushnumber(L, info.totalram); + lua_setfield(L, -2, "totalram"); + + nixio__pushnumber(L, info.totalswap); + lua_setfield(L, -2, "totalswap"); + + lua_pushinteger(L, info.uptime); + lua_setfield(L, -2, "uptime"); + + return 1; +} + +#endif + + +/* module table */ +static const luaL_reg R[] = { +#ifdef __linux__ + {"sysinfo", nixio_sysinfo}, +#endif +#ifndef __WINNT__ + {"fork", nixio_fork}, + {"kill", nixio_kill}, + {"nice", nixio_nice}, + {"getppid", nixio_getppid}, + {"getuid", nixio_getuid}, + {"getgid", nixio_getgid}, + {"setuid", nixio_setuid}, + {"setgid", nixio_setgid}, + {"setsid", nixio_setsid}, + {"wait", nixio_wait}, + {"waitpid", nixio_wait}, + {"times", nixio_times}, + {"uname", nixio_uname}, +#endif + {"chdir", nixio_chdir}, + {"signal", nixio_signal}, + {"getpid", nixio_getpid}, + {"getenv", nixio_getenv}, + {"setenv", nixio_setenv}, + {"putenv", nixio_setenv}, + {"exec", nixio_exec}, + {"execp", nixio_execp}, + {"exece", nixio_exece}, + {"getcwd", nixio_getcwd}, + {"umask", nixio_umask}, + {NULL, NULL} +}; + +void nixio_open_process(lua_State *L) { + luaL_register(L, NULL, R); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/protoent.c b/feeds/luci/libs/luci-lib-nixio/src/protoent.c new file mode 100644 index 0000000..bda68a5 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/protoent.c @@ -0,0 +1,103 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2011 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" + +#ifndef __WINNT__ +#include +#endif + +/** + * protoent conversion helper + */ +static int nixio__pushprotoent(lua_State *L, struct protoent *e) { + int i; + if (e) { + lua_newtable(L); + + lua_pushstring(L, e->p_name); + lua_setfield(L, -2, "name"); + + lua_pushnumber(L, e->p_proto); + lua_setfield(L, -2, "proto"); + + lua_newtable(L); + for (i = 0; e->p_aliases[i]; i++) { + lua_pushstring(L, e->p_aliases[i]); + lua_rawseti(L, -2, i+1); + } + lua_setfield(L, -2, "aliases"); + return 1; + } else { + return 0; + } +} + +/** + * getprotobyname(name) + */ +static int nixio_getprotobyname(lua_State *L) { + const char *name = luaL_checkstring(L, 1); + struct protoent *res = getprotobyname(name); + return nixio__pushprotoent(L, res); +} + +/** + * getprotobynumber(proto) + */ +static int nixio_getprotobynumber(lua_State *L) { + int proto = luaL_checkinteger(L, 1); + struct protoent *res = getprotobynumber(proto); + return nixio__pushprotoent(L, res); +} + +/** + * getproto(name_or_proto) + */ +static int nixio_getproto(lua_State *L) { + int i = 1; + struct protoent *res; + if (lua_isnumber(L, 1)) { + return nixio_getprotobynumber(L); + } else if (lua_isstring(L, 1)) { + return nixio_getprotobyname(L); + } else if (lua_isnoneornil(L, 1)) { + setprotoent(1); + lua_newtable(L); + while ((res = getprotoent()) != NULL) { + nixio__pushprotoent(L, res); + lua_rawseti(L, -2, i++); + } + endprotoent(); + return 1; + } else { + return luaL_argerror(L, 1, "supported values: , "); + } +} + +/* module table */ +static const luaL_reg R[] = { + {"getprotobyname", nixio_getprotobyname}, + {"getprotobynumber", nixio_getprotobynumber}, + {"getproto", nixio_getproto}, + {NULL, NULL} +}; + +void nixio_open_protoent(lua_State *L) { + luaL_register(L, NULL, R); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/socket.c b/feeds/luci/libs/luci-lib-nixio/src/socket.c new file mode 100644 index 0000000..17c6afc --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/socket.c @@ -0,0 +1,173 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include +#include + + +/** + * create new socket + */ +static int nixio_socket(lua_State *L) { + const char *domain = luaL_optlstring(L, 1, "", NULL); + const char *type = luaL_optlstring(L, 2, "", NULL); + const char *proto = lua_tolstring(L, 3, NULL); + + nixio_sock *sock = lua_newuserdata(L, sizeof(nixio_sock)); + if (!sock) { + return luaL_error(L, "out of memory"); + } + + if (!strcmp(domain, "inet")) { + sock->domain = AF_INET; + } else if (!strcmp(domain, "inet6")) { + sock->domain = AF_INET6; + } else if (!strcmp(domain, "unix")) { + sock->domain = AF_UNIX; + /*} else if (!strcmp(domain, "packet")) { + sock->domain = AF_PACKET;*/ + } else { + return luaL_argerror(L, 1, + "supported values: inet, inet6, unix, packet" + ); + } + + if (!strcmp(type, "stream")) { + sock->type = SOCK_STREAM; + } else if (!strcmp(type, "dgram")) { + sock->type = SOCK_DGRAM; + } else if (!strcmp(type, "raw")) { + sock->type = SOCK_RAW; + } else { + return luaL_argerror(L, 2, "supported values: stream, dgram, raw"); + } + + if (!proto) { + sock->protocol = 0; + } else if (!strcmp(proto, "icmp")) { + sock->protocol = IPPROTO_ICMP; + } else if (!strcmp(proto, "icmpv6")) { + sock->protocol = IPPROTO_ICMPV6; + } else { + return luaL_argerror(L, 3, "supported values: [empty], icmp, icmpv6"); + } + + /* create userdata */ + luaL_getmetatable(L, NIXIO_META); + lua_setmetatable(L, -2); + + sock->fd = socket(sock->domain, sock->type, sock->protocol); + + if (sock->fd < 0) { + return nixio__perror_s(L); + } + + return 1; +} + +/** + * close a socket + */ +static int nixio_sock_close(lua_State *L) { + nixio_sock *sock = nixio__checksock(L); + int sockfd = sock->fd; + int res; + sock->fd = -1; + + do { +#ifndef __WINNT__ + res = close(sockfd); +#else + res = closesocket(sockfd); +#endif + } while (res == -1 && errno == EINTR); + + return nixio__pstatus_s(L, !res); +} + +/** + * garbage collector + */ +static int nixio_sock__gc(lua_State *L) { + nixio_sock *sock = (nixio_sock*)luaL_checkudata(L, 1, NIXIO_META); + int res; + if (sock && sock->fd != -1) { + do { +#ifndef __WINNT__ + res = close(sock->fd); +#else + res = closesocket(sock->fd); +#endif + } while (res == -1 && errno == EINTR); + } + return 0; +} + +/** + * string representation + */ +static int nixio_sock__tostring(lua_State *L) { + lua_pushfstring(L, "nixio socket %d", nixio__checksockfd(L)); + return 1; +} + +/** + * shutdown a socket + */ +static int nixio_sock_shutdown(lua_State *L) { + int sockfd = nixio__checksockfd(L); + const char *what = luaL_optlstring(L, 2, "rdwr", NULL); + int how; + + if (!strcmp(what, "rdwr") || !strcmp(what, "both")) { + how = SHUT_RDWR; + } else if (!strcmp(what, "rd") || !strcmp(what, "read")) { + how = SHUT_RD; + } else if (!strcmp(what, "wr") || !strcmp(what, "write")) { + how = SHUT_WR; + } else { + return luaL_argerror(L, 2, "supported values: both, read, write"); + } + + return nixio__pstatus_s(L, !shutdown(sockfd, how)); +} + +/* module table */ +static const luaL_reg R[] = { + {"socket", nixio_socket}, + {NULL, NULL} +}; + +/* object table */ +static const luaL_reg M[] = { + {"close", nixio_sock_close}, + {"shutdown", nixio_sock_shutdown}, + {"__gc", nixio_sock__gc}, + {"__tostring", nixio_sock__tostring}, + {NULL, NULL} +}; + +void nixio_open_socket(lua_State *L) { + luaL_register(L, NULL, R); + + lua_pushvalue(L, -2); + luaL_register(L, NULL, M); + lua_pop(L, 1); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/sockopt.c b/feeds/luci/libs/luci-lib-nixio/src/sockopt.c new file mode 100644 index 0000000..cede884 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/sockopt.c @@ -0,0 +1,390 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" + +#ifndef __WINNT__ +#include +#endif + +#include +#include +#include +#include +#include + +#ifndef IPV6_ADD_MEMBERSHIP +#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP +#endif + +#ifndef IPV6_DROP_MEMBERSHIP +#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP +#endif + +static int nixio_sock_fileno(lua_State *L) { + lua_pushinteger(L, nixio__checkfd(L, 1)); + return 1; +} + +/** + * setblocking() + */ +static int nixio_sock_setblocking(lua_State *L) { + int fd = nixio__checkfd(L, 1); + luaL_checkany(L, 2); + int set = lua_toboolean(L, 2); + +#ifndef __WINNT__ + + int flags = fcntl(fd, F_GETFL); + + if (flags == -1) { + return nixio__perror(L); + } + + if (!set) { + flags |= O_NONBLOCK; + } else { + flags &= ~O_NONBLOCK; + } + + return nixio__pstatus(L, !fcntl(fd, F_SETFL, flags)); + +#else /* __WINNT__ */ + + lua_getmetatable(L, 1); + luaL_getmetatable(L, NIXIO_META); + if (lua_equal(L, -1, -2)) { /* Socket */ + unsigned long val = !set; + return nixio__pstatus_s(L, !ioctlsocket(fd, FIONBIO, &val)); + } else { /* File */ + WSASetLastError(WSAENOTSOCK); + return nixio__perror_s(L); + } + +#endif /* __WINNT__ */ +} + +static int nixio__gso_int(lua_State *L, int fd, int level, int opt, int set) { + int value; + socklen_t optlen = sizeof(value); + if (!set) { + if (!getsockopt(fd, level, opt, (char *)&value, &optlen)) { + lua_pushinteger(L, value); + return 1; + } + } else { + value = luaL_checkinteger(L, set); + if (!setsockopt(fd, level, opt, (char *)&value, optlen)) { + lua_pushboolean(L, 1); + return 1; + } + } + return nixio__perror_s(L); +} + +static int nixio__gso_ling(lua_State *L, int fd, int level, int opt, int set) { + struct linger value; + socklen_t optlen = sizeof(value); + if (!set) { + if (!getsockopt(fd, level, opt, (char *)&value, &optlen)) { + lua_pushinteger(L, value.l_onoff ? value.l_linger : 0); + return 1; + } + } else { + value.l_linger = luaL_checkinteger(L, set); + value.l_onoff = value.l_linger ? 1 : 0; + if (!setsockopt(fd, level, opt, (char *)&value, optlen)) { + lua_pushboolean(L, 1); + return 1; + } + } + return nixio__perror_s(L); +} + +static int nixio__gso_timev(lua_State *L, int fd, int level, int opt, int set) { + struct timeval value; + socklen_t optlen = sizeof(value); + if (!set) { + if (!getsockopt(fd, level, opt, (char *)&value, &optlen)) { + lua_pushinteger(L, value.tv_sec); + lua_pushinteger(L, value.tv_usec); + return 2; + } + } else { + value.tv_sec = luaL_checkinteger(L, set); + value.tv_usec = luaL_optinteger(L, set + 1, 0); + if (!setsockopt(fd, level, opt, (char *)&value, optlen)) { + lua_pushboolean(L, 1); + return 1; + } + } + return nixio__perror_s(L); +} + +#ifdef SO_BINDTODEVICE + +static int nixio__gso_b(lua_State *L, int fd, int level, int opt, int set) { + if (!set) { + socklen_t optlen = IFNAMSIZ; + char ifname[IFNAMSIZ]; + if (!getsockopt(fd, level, opt, (char *)ifname, &optlen)) { + lua_pushlstring(L, ifname, optlen); + return 1; + } + } else { + size_t valuelen; + const char *value = luaL_checklstring(L, set, &valuelen); + luaL_argcheck(L, valuelen <= IFNAMSIZ, set, "invalid interface name"); + if (!setsockopt(fd, level, opt, (char *)value, valuelen)) { + lua_pushboolean(L, 1); + return 1; + } + } + return nixio__perror_s(L); +} + +#endif /* SO_BINDTODEVICE */ + +static int nixio__gso_mreq4(lua_State *L, int fd, int level, int opt, int set) { + struct ip_mreq value; + socklen_t optlen = sizeof(value); + if (!set) { + char buf[INET_ADDRSTRLEN]; + if (!getsockopt(fd, level, opt, (char *)&value, &optlen)) { + if (!inet_ntop(AF_INET, &value.imr_multiaddr, buf, sizeof(buf))) { + return nixio__perror_s(L); + } + lua_pushstring(L, buf); + if (!inet_ntop(AF_INET, &value.imr_interface, buf, sizeof(buf))) { + return nixio__perror_s(L); + } + lua_pushstring(L, buf); + return 2; + } + } else { + const char *maddr = luaL_checkstring(L, set); + const char *iface = luaL_optstring(L, set + 1, "0.0.0.0"); + if (inet_pton(AF_INET, maddr, &value.imr_multiaddr) < 1) { + return nixio__perror_s(L); + } + if (inet_pton(AF_INET, iface, &value.imr_interface) < 1) { + return nixio__perror_s(L); + } + if (!setsockopt(fd, level, opt, (char *)&value, optlen)) { + lua_pushboolean(L, 1); + return 1; + } + } + return nixio__perror_s(L); +} + +static int nixio__gso_mreq6(lua_State *L, int fd, int level, int opt, int set) { + struct ipv6_mreq val; + socklen_t optlen = sizeof(val); + if (!set) { + char buf[INET_ADDRSTRLEN]; + if (!getsockopt(fd, level, opt, (char *)&val, &optlen)) { + if (!inet_ntop(AF_INET6, &val.ipv6mr_multiaddr, buf, sizeof(buf))) { + return nixio__perror_s(L); + } + lua_pushstring(L, buf); + lua_pushinteger(L, val.ipv6mr_interface); + return 2; + } + } else { + const char *maddr = luaL_checkstring(L, set); + if (inet_pton(AF_INET6, maddr, &val.ipv6mr_multiaddr) < 1) { + return nixio__perror_s(L); + } + val.ipv6mr_interface = luaL_optlong(L, set + 1, 0); + if (!setsockopt(fd, level, opt, (char *)&val, optlen)) { + lua_pushboolean(L, 1); + return 1; + } + } + return nixio__perror_s(L); +} + +/** + * get/setsockopt() helper + */ +static int nixio__getsetsockopt(lua_State *L, int set) { + nixio_sock *sock = nixio__checksock(L); + const char *level = luaL_optlstring(L, 2, "", NULL); + const char *option = luaL_optlstring(L, 3, "", NULL); + set = (set) ? 4 : 0; + + if (!strcmp(level, "socket")) { + if (!strcmp(option, "keepalive")) { + return nixio__gso_int(L, sock->fd, SOL_SOCKET, SO_KEEPALIVE, set); + } else if (!strcmp(option, "reuseaddr")) { + return nixio__gso_int(L, sock->fd, SOL_SOCKET, SO_REUSEADDR, set); + } else if (!strcmp(option, "rcvbuf")) { + return nixio__gso_int(L, sock->fd, SOL_SOCKET, SO_RCVBUF, set); + } else if (!strcmp(option, "sndbuf")) { + return nixio__gso_int(L, sock->fd, SOL_SOCKET, SO_SNDBUF, set); + } else if (!strcmp(option, "priority")) { +#ifdef SO_PRIORITY + return nixio__gso_int(L, sock->fd, SOL_SOCKET, SO_PRIORITY, set); +#else + return nixio__pstatus(L, !(errno = ENOPROTOOPT)); +#endif + } else if (!strcmp(option, "broadcast")) { + return nixio__gso_int(L, sock->fd, SOL_SOCKET, SO_BROADCAST, set); + } else if (!strcmp(option, "dontroute")) { + return nixio__gso_int(L, sock->fd, SOL_SOCKET, SO_DONTROUTE, set); + } else if (!strcmp(option, "error")) { + return nixio__gso_int(L, sock->fd, SOL_SOCKET, SO_ERROR, set); + } else if (!strcmp(option, "oobinline")) { + return nixio__gso_int(L, sock->fd, SOL_SOCKET, SO_OOBINLINE, set); + } else if (!strcmp(option, "linger")) { + return nixio__gso_ling(L, sock->fd, SOL_SOCKET, SO_LINGER, set); + } else if (!strcmp(option, "sndtimeo")) { + return nixio__gso_timev(L, sock->fd, SOL_SOCKET, SO_SNDTIMEO, set); + } else if (!strcmp(option, "rcvtimeo")) { + return nixio__gso_timev(L, sock->fd, SOL_SOCKET, SO_RCVTIMEO, set); + } else if (!strcmp(option, "bindtodevice")) { +#ifdef SO_BINDTODEVICE + return nixio__gso_b(L, sock->fd, SOL_SOCKET, SO_BINDTODEVICE, set); +#else + return nixio__pstatus(L, !(errno = ENOPROTOOPT)); +#endif + } else { + return luaL_argerror(L, 3, "supported values: keepalive, reuseaddr," + " sndbuf, rcvbuf, priority, broadcast, linger, sndtimeo, rcvtimeo," + " dontroute, bindtodevice, error, oobinline" + ); + } + } else if (!strcmp(level, "tcp")) { + if (!strcmp(option, "cork")) { +#ifdef TCP_CORK + return nixio__gso_int(L, sock->fd, IPPROTO_TCP, TCP_CORK, set); +#else + return nixio__pstatus(L, !(errno = ENOPROTOOPT)); +#endif + } else if (!strcmp(option, "nodelay")) { + return nixio__gso_int(L, sock->fd, IPPROTO_TCP, TCP_NODELAY, set); + } else { + return luaL_argerror(L, 3, "supported values: cork, nodelay"); + } + } else if (!strcmp(level, "ip")) { + if (!strcmp(option, "mtu")) { +#ifdef IP_MTU + return nixio__gso_int(L, sock->fd, IPPROTO_IP, IP_MTU, set); +#else + return nixio__pstatus(L, !(errno = ENOPROTOOPT)); +#endif + } else if (!strcmp(option, "hdrincl")) { + return nixio__gso_int(L, sock->fd, IPPROTO_IP, IP_HDRINCL, + set); + } else if (!strcmp(option, "multicast_loop")) { + return nixio__gso_int(L, sock->fd, IPPROTO_IP, IP_MULTICAST_LOOP, + set); + } else if (!strcmp(option, "multicast_ttl")) { + return nixio__gso_int(L, sock->fd, IPPROTO_IP, IP_MULTICAST_TTL, + set); + } else if (!strcmp(option, "multicast_if")) { + return nixio__gso_mreq4(L, sock->fd, IPPROTO_IP, IP_MULTICAST_IF, + set); + } else if (!strcmp(option, "add_membership")) { + return nixio__gso_mreq4(L, sock->fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, + set); + } else if (!strcmp(option, "drop_membership")) { + return nixio__gso_mreq4(L, sock->fd, IPPROTO_IP, IP_DROP_MEMBERSHIP, + set); + } else { + return luaL_argerror(L, 3, + "supported values: hdrincl, mtu, multicast_loop, " + "multicast_ttl, multicast_if, add_membership, drop_membership"); + } + } else if (!strcmp(level, "ipv6")) { + if (!strcmp(option, "mtu")) { +#ifdef IPV6_MTU + return nixio__gso_int(L, sock->fd, IPPROTO_IPV6, IPV6_MTU, set); +#else + return nixio__pstatus(L, !(errno = ENOPROTOOPT)); +#endif + } else if (!strcmp(option, "v6only")) { +#ifdef IPV6_V6ONLY + return nixio__gso_int(L, sock->fd, IPPROTO_IPV6, IPV6_V6ONLY, set); +#else + return nixio__pstatus(L, !(errno = ENOPROTOOPT)); +#endif + } else if (!strcmp(option, "multicast_loop")) { + return nixio__gso_int(L, sock->fd, IPPROTO_IPV6, + IPV6_MULTICAST_LOOP, set); + } else if (!strcmp(option, "multicast_hops")) { + return nixio__gso_int(L, sock->fd, IPPROTO_IPV6, + IPV6_MULTICAST_HOPS, set); + } else if (!strcmp(option, "multicast_if")) { + return nixio__gso_mreq6(L, sock->fd, IPPROTO_IPV6, + IPV6_MULTICAST_IF, set); + } else if (!strcmp(option, "add_membership")) { + return nixio__gso_mreq6(L, sock->fd, IPPROTO_IPV6, + IPV6_ADD_MEMBERSHIP, set); + } else if (!strcmp(option, "drop_membership")) { + return nixio__gso_mreq6(L, sock->fd, IPPROTO_IPV6, + IPV6_DROP_MEMBERSHIP, set); + } else { + return luaL_argerror(L, 3, + "supported values: v6only, mtu, multicast_loop, multicast_hops," + " multicast_if, add_membership, drop_membership"); + } + } else { + return luaL_argerror(L, 2, "supported values: socket, tcp, ip, ipv6"); + } +} + +/** + * getsockopt() + */ +static int nixio_sock_getsockopt(lua_State *L) { + return nixio__getsetsockopt(L, 0); +} + +/** + * setsockopt() + */ +static int nixio_sock_setsockopt(lua_State *L) { + return nixio__getsetsockopt(L, 1); +} + +/* module table */ +static const luaL_reg M[] = { + {"setblocking", nixio_sock_setblocking}, + {"getsockopt", nixio_sock_getsockopt}, + {"setsockopt", nixio_sock_setsockopt}, + {"getopt", nixio_sock_getsockopt}, + {"setopt", nixio_sock_setsockopt}, + {"fileno", nixio_sock_fileno}, + {NULL, NULL} +}; + +void nixio_open_sockopt(lua_State *L) { + lua_pushvalue(L, -2); + luaL_register(L, NULL, M); + lua_pop(L, 1); + + luaL_getmetatable(L, NIXIO_FILE_META); + lua_pushcfunction(L, nixio_sock_setblocking); + lua_setfield(L, -2, "setblocking"); + lua_pushcfunction(L, nixio_sock_fileno); + lua_setfield(L, -2, "fileno"); + lua_pop(L, 1); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/splice.c b/feeds/luci/libs/luci-lib-nixio/src/splice.c new file mode 100644 index 0000000..db63ea9 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/splice.c @@ -0,0 +1,185 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifdef __linux__ +#define _GNU_SOURCE +#endif + +#include "nixio.h" +#include +#include +#include +#include +#include + + +#ifndef __WINNT__ + +#ifndef BSD +#include +#else +#include +#include +#include +#endif + +#ifdef _GNU_SOURCE +#ifdef SPLICE_F_MOVE + +/* guess what sucks... */ +#ifdef __UCLIBC__ +#include +#include + +ssize_t splice(int __fdin, __off64_t *__offin, int __fdout, + __off64_t *__offout, size_t __len, unsigned int __flags) { +#ifdef __NR_splice + return syscall(__NR_splice, __fdin, __offin, __fdout, __offout, __len, __flags); +#else + (void)__fdin; + (void)__offin; + (void)__fdout; + (void)__offout; + (void)__len; + (void)__flags; + errno = ENOSYS; + return -1; +#endif +} + +#undef SPLICE_F_MOVE +#undef SPLICE_F_NONBLOCK +#undef SPLICE_F_MORE + +#define SPLICE_F_MOVE 1 +#define SPLICE_F_NONBLOCK 2 +#define SPLICE_F_MORE 4 + +#endif /* __UCLIBC__ */ + +/** + * splice(fd_in, fd_out, length, flags) + */ +static int nixio_splice(lua_State *L) { + int fd_in = nixio__checkfd(L, 1); + int fd_out = nixio__checkfd(L, 2); + size_t len = luaL_checkinteger(L, 3); + int flags = luaL_optinteger(L, 4, 0); + long spliced; + + do { + spliced = splice(fd_in, NULL, fd_out, NULL, len, flags); + } while (spliced == -1 && errno == EINTR); + + if (spliced < 0) { + return nixio__perror(L); + } + + lua_pushinteger(L, spliced); + return 1; +} + +/** + * Translate splice flags to integer + */ +static int nixio_splice_flags(lua_State *L) { + const int j = lua_gettop(L); + int flags = 0; + for (int i=1; i<=j; i++) { + const char *flag = luaL_checkstring(L, i); + if (!strcmp(flag, "move")) { + flags |= SPLICE_F_MOVE; + } else if (!strcmp(flag, "nonblock")) { + flags |= SPLICE_F_NONBLOCK; + } else if (!strcmp(flag, "more")) { + flags |= SPLICE_F_MORE; + } else { + return luaL_argerror(L, i, "supported values: " + "move, nonblock, more"); + } + } + lua_pushinteger(L, flags); + + return 1; +} + +#endif /* SPLICE_F_MOVE */ +#endif /* _GNU_SOURCE */ + +/** + * sendfile(outfd, infd, length) + */ +static int nixio_sendfile(lua_State *L) { + int sock = nixio__checksockfd(L); + int infd = nixio__checkfd(L, 2); + size_t len = luaL_checkinteger(L, 3); + off_t spliced; + +#ifndef BSD + do { + spliced = sendfile(sock, infd, NULL, len); + } while (spliced == -1 && errno == EINTR); + + if (spliced == -1) { + return nixio__perror(L); + } +#else + int r; + const off_t offset = lseek(infd, 0, SEEK_CUR); + + do { +#ifdef __DARWIN__ + r = sendfile(infd, sock, offset, (off_t *)&len, NULL, 0); + spliced = r; +#else + r = sendfile(infd, sock, offset, len, NULL, &spliced, 0); +#endif + } while (r == -1 && errno == EINTR); + + if (r == -1) { + return nixio__perror(L); + } +#endif + + lua_pushinteger(L, spliced); + return 1; +} + +/* module table */ +static const luaL_reg R[] = { +#ifdef _GNU_SOURCE +#ifdef SPLICE_F_MOVE + {"splice", nixio_splice}, + {"splice_flags", nixio_splice_flags}, +#endif +#endif + {"sendfile", nixio_sendfile}, + {NULL, NULL} +}; + + +void nixio_open_splice(lua_State *L) { + luaL_register(L, NULL, R); +} + +#else /* __WINNT__ */ + +void nixio_open_splice(lua_State *L) { +} + +#endif /* !__WINNT__ */ diff --git a/feeds/luci/libs/luci-lib-nixio/src/syslog.c b/feeds/luci/libs/luci-lib-nixio/src/syslog.c new file mode 100644 index 0000000..89f1b1d --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/syslog.c @@ -0,0 +1,122 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include + +#ifndef __WINNT__ +#include + + +static int nixio_openlog(lua_State *L) { + int option = 0, facility = LOG_USER; + + const char *ident = luaL_optstring(L, 1, "nixio"); + const int j = lua_gettop(L); + for (int i=2; i<=j; i++) { + const char *flag = luaL_checkstring(L, i); + if (!strcmp(flag, "cons")) { + option |= LOG_CONS; + } else if (!strcmp(flag, "nowait")) { + option |= LOG_NOWAIT; + } else if (!strcmp(flag, "pid")) { + option |= LOG_PID; + } else if (!strcmp(flag, "perror")) { +#ifdef LOG_PERROR + option |= LOG_PERROR; +#endif + } else if (!strcmp(flag, "ndelay")) { + option |= LOG_NDELAY; + } else if (!strcmp(flag, "odelay")) { + option |= LOG_ODELAY; + } else { + return luaL_argerror(L, i, + "supported values: cons, nowait, pid, perror, ndelay, odelay"); + } + } + + openlog(ident, option, facility); + return 0; +} + +static int nixio_closelog(lua_State *L) { + closelog(); + return 0; +} + +static int nixio__syslogmask(lua_State *L, int dolog) { + int priority; + + const char *flag = luaL_checkstring(L, 1); + if (!strcmp(flag, "emerg")) { + priority = LOG_EMERG; + } else if (!strcmp(flag, "alert")) { + priority = LOG_ALERT; + } else if (!strcmp(flag, "crit")) { + priority = LOG_CRIT; + } else if (!strcmp(flag, "err")) { + priority = LOG_ERR; + } else if (!strcmp(flag, "warning")) { + priority = LOG_WARNING; + } else if (!strcmp(flag, "notice")) { + priority = LOG_NOTICE; + } else if (!strcmp(flag, "info")) { + priority = LOG_INFO; + } else if (!strcmp(flag, "debug")) { + priority = LOG_DEBUG; + } else { + return luaL_argerror(L, 1, "supported values: emerg, alert, crit, err, " + "warning, notice, info, debug"); + } + + if (dolog) { + const char *msg = luaL_checkstring(L, 2); + syslog(priority, "%s", msg); + } else { + setlogmask(LOG_UPTO(priority)); + } + return 0; +} + +static int nixio_setlogmask(lua_State *L) { + return nixio__syslogmask(L, 0); +} + +static int nixio_syslog(lua_State *L) { + return nixio__syslogmask(L, 1); +} + +/* module table */ +static const luaL_reg R[] = { + {"openlog", nixio_openlog}, + {"syslog", nixio_syslog}, + {"setlogmask", nixio_setlogmask}, + {"closelog", nixio_closelog}, + {NULL, NULL} +}; + +void nixio_open_syslog(lua_State *L) { + luaL_register(L, NULL, R); +} + +#else /* __WINNT__ */ + +void nixio_open_syslog(lua_State *L) { +} + +#endif /* __WINNT__ */ diff --git a/feeds/luci/libs/luci-lib-nixio/src/tls-context.c b/feeds/luci/libs/luci-lib-nixio/src/tls-context.c new file mode 100644 index 0000000..e9a833f --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/tls-context.c @@ -0,0 +1,248 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio-tls.h" +#include + +static SSL_CTX* nixio__checktlsctx(lua_State *L) { + SSL_CTX **ctx = (SSL_CTX **)luaL_checkudata(L, 1, NIXIO_TLS_CTX_META); + luaL_argcheck(L, *ctx, 1, "invalid context"); + return *ctx; +} + +static int nixio__tls_perror(lua_State *L, int code) { + lua_pushnil(L); + lua_pushinteger(L, code); + return 2; +} + +static int nixio__tls_pstatus(lua_State *L, int code) { + if (code == 1) { + lua_pushboolean(L, 1); + return 1; + } else { + return nixio__tls_perror(L, code); + } +} + +static int nixio_tls_ctx(lua_State * L) { + const char *method = luaL_optlstring(L, 1, "client", NULL); + + luaL_getmetatable(L, NIXIO_TLS_CTX_META); + SSL_CTX **ctx = lua_newuserdata(L, sizeof(SSL_CTX *)); + if (!ctx) { + return luaL_error(L, "out of memory"); + } + + /* create userdata */ + lua_pushvalue(L, -2); + lua_setmetatable(L, -2); + + if (!strcmp(method, "client")) { + *ctx = SSL_CTX_new(TLSv1_client_method()); + } else if (!strcmp(method, "server")) { + *ctx = SSL_CTX_new(TLSv1_server_method()); + } else { + return luaL_argerror(L, 1, "supported values: client, server"); + } + + if (!(*ctx)) { + return luaL_error(L, "unable to create TLS context"); + } + +#ifdef WITH_CYASSL + SSL_CTX_set_verify(*ctx, SSL_VERIFY_NONE, NULL); +#endif + + return 1; +} + +static int nixio_tls_ctx_create(lua_State *L) { + SSL_CTX *ctx = nixio__checktlsctx(L); + int fd = nixio__checkfd(L, 2); + + lua_createtable(L, 0, 3); + nixio_tls_sock *sock = lua_newuserdata(L, sizeof(nixio_tls_sock)); + if (!sock) { + return luaL_error(L, "out of memory"); + } + memset(sock, 0, sizeof(nixio_tls_sock)); + + /* create userdata */ + luaL_getmetatable(L, NIXIO_TLS_SOCK_META); + lua_pushvalue(L, -1); + lua_setmetatable(L, -3); + + sock->socket = SSL_new(ctx); + if (!sock->socket) { + return nixio__tls_perror(L, 0); + } + + if (SSL_set_fd(sock->socket, fd) != 1) { + return nixio__tls_perror(L, 0); + } + + /* save context and socket to prevent GC from collecting them */ + lua_setmetatable(L, -3); + lua_setfield(L, -2, "connection"); + + lua_pushvalue(L, 1); + lua_setfield(L, -2, "context"); + + lua_pushvalue(L, 2); + lua_setfield(L, -2, "socket"); + + return 1; +} + +static int nixio_tls_ctx_set_cert(lua_State *L) { + SSL_CTX *ctx = nixio__checktlsctx(L); + const char *cert = luaL_checkstring(L, 2); + const char *type = luaL_optstring(L, 3, "chain"); + int ktype; + + if (!strcmp(type, "chain")) { + return nixio__tls_pstatus(L, + SSL_CTX_use_certificate_chain_file(ctx, cert)); + } else if (!strcmp(type, "pem")) { + ktype = SSL_FILETYPE_PEM; + } else if (!strcmp(type, "asn1")) { + ktype = SSL_FILETYPE_ASN1; + } else { + return luaL_argerror(L, 3, "supported values: chain, pem, asn1"); + } + + return nixio__tls_pstatus(L, + SSL_CTX_use_certificate_file(ctx, cert, ktype)); +} + +static int nixio_tls_ctx_set_verify_locations(lua_State *L) { + SSL_CTX *ctx = nixio__checktlsctx(L); + const char *CAfile = luaL_optstring(L, 2, NULL); + const char *CApath = luaL_optstring(L, 3, NULL); + return nixio__tls_pstatus(L, SSL_CTX_load_verify_locations(ctx, + CAfile, CApath)); +} + +static int nixio_tls_ctx_set_key(lua_State *L) { + SSL_CTX *ctx = nixio__checktlsctx(L); + const char *cert = luaL_checkstring(L, 2); + const char *type = luaL_optstring(L, 3, "pem"); + int ktype; + + if (!strcmp(type, "pem")) { + ktype = SSL_FILETYPE_PEM; + } else if (!strcmp(type, "asn1")) { + ktype = SSL_FILETYPE_ASN1; + } else { + return luaL_argerror(L, 3, "supported values: pem, asn1"); + } + + return nixio__tls_pstatus(L, SSL_CTX_use_PrivateKey_file(ctx, cert, ktype)); +} + +static int nixio_tls_ctx_set_ciphers(lua_State *L) { + SSL_CTX *ctx = nixio__checktlsctx(L); + size_t len; + const char *ciphers = luaL_checklstring(L, 2, &len); + luaL_argcheck(L, len < 255, 2, "cipher string too long"); + return nixio__tls_pstatus(L, SSL_CTX_set_cipher_list(ctx, ciphers)); +} + +static int nixio_tls_ctx_set_verify(lua_State *L) { + SSL_CTX *ctx = nixio__checktlsctx(L); + const int j = lua_gettop(L); + int flags = 0; + for (int i=2; i<=j; i++) { + const char *flag = luaL_checkstring(L, i); + if (!strcmp(flag, "none")) { + flags |= SSL_VERIFY_NONE; + } else if (!strcmp(flag, "peer")) { + flags |= SSL_VERIFY_PEER; + } else if (!strcmp(flag, "verify_fail_if_no_peer_cert")) { + flags |= SSL_VERIFY_FAIL_IF_NO_PEER_CERT; + } else if (!strcmp(flag, "client_once")) { + flags |= SSL_VERIFY_CLIENT_ONCE; + } else { + return luaL_argerror(L, i, "supported values: none, peer, " + "verify_fail_if_no_peer_cert, client_once"); + } + } + SSL_CTX_set_verify(ctx, flags, NULL); + return 0; +} + +static int nixio_tls_ctx__gc(lua_State *L) { + SSL_CTX **ctx = (SSL_CTX **)luaL_checkudata(L, 1, NIXIO_TLS_CTX_META); + if (*ctx) { + SSL_CTX_free(*ctx); + *ctx = NULL; + } + return 0; +} + +static int nixio_tls_ctx__tostring(lua_State *L) { + SSL_CTX *ctx = nixio__checktlsctx(L); + lua_pushfstring(L, "nixio TLS context: %p", ctx); + return 1; +} + +/* module table */ +static const luaL_reg R[] = { + {"tls", nixio_tls_ctx}, + {NULL, NULL} +}; + +/* ctx function table */ +static const luaL_reg CTX_M[] = { + {"set_cert", nixio_tls_ctx_set_cert}, + {"set_verify_locations", nixio_tls_ctx_set_verify_locations}, + {"set_key", nixio_tls_ctx_set_key}, + {"set_ciphers", nixio_tls_ctx_set_ciphers}, + {"set_verify", nixio_tls_ctx_set_verify}, + {"create", nixio_tls_ctx_create}, + {"__gc", nixio_tls_ctx__gc}, + {"__tostring", nixio_tls_ctx__tostring}, + {NULL, NULL} +}; + + +void nixio_open_tls_context(lua_State *L) { + /* initialize tls library */ + SSL_load_error_strings(); + SSL_library_init(); + + /* register module functions */ + luaL_register(L, NULL, R); + +#if defined (WITH_AXTLS) + lua_pushliteral(L, "axtls"); +#elif defined (WITH_CYASSL) + lua_pushliteral(L, "cyassl"); +#else + lua_pushliteral(L, "openssl"); +#endif + lua_setfield(L, -2, "tls_provider"); + + /* create context metatable */ + luaL_newmetatable(L, NIXIO_TLS_CTX_META); + lua_pushvalue(L, -1); + lua_setfield(L, -2, "__index"); + luaL_register(L, NULL, CTX_M); + lua_setfield(L, -2, "meta_tls_context"); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/tls-crypto.c b/feeds/luci/libs/luci-lib-nixio/src/tls-crypto.c new file mode 100644 index 0000000..714ec4e --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/tls-crypto.c @@ -0,0 +1,185 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio-tls.h" +#include +#include +#include +#include +#include + +static int nixio_crypto_hash__init(lua_State *L, int hmac) { + const char *type = luaL_checkstring(L, 1); + nixio_hash *hash = lua_newuserdata(L, sizeof(nixio_hash)); + + if (!strcmp(type, "md5")) { + hash->type = NIXIO_HASH_MD5; + hash->digest_size = MD5_DIGEST_LENGTH; + hash->block_size = 64; + hash->ctx = malloc(sizeof(MD5_CTX)); + if (!hash->ctx) { + return luaL_error(L, NIXIO_OOM); + } + MD5_Init((MD5_CTX*)hash->ctx); + hash->init = (nixio_hash_initcb)MD5_Init; + hash->update = (nixio_hash_updatecb)MD5_Update; + hash->final = (nixio_hash_finalcb)MD5_Final; + } else if (!strcmp(type, "sha1")) { + hash->type = NIXIO_HASH_SHA1; + hash->digest_size = SHA_DIGEST_LENGTH; + hash->block_size = 64; + hash->ctx = malloc(sizeof(SHA_CTX)); + if (!hash->ctx) { + return luaL_error(L, NIXIO_OOM); + } + SHA1_Init((SHA_CTX*)hash->ctx); + hash->init = (nixio_hash_initcb)SHA1_Init; + hash->update = (nixio_hash_updatecb)SHA1_Update; + hash->final = (nixio_hash_finalcb)SHA1_Final; + } else { + luaL_argerror(L, 1, "supported values: md5, sha1"); + } + + luaL_getmetatable(L, NIXIO_CRYPTO_HASH_META); + lua_setmetatable(L, -2); + + if (hmac) { + const char *key = luaL_checklstring(L, 2, &hash->key_size); + if (hash->key_size > hash->block_size) { + hash->update(hash->ctx, key, hash->key_size); + hash->final(hash->digest, hash->ctx); + hash->init(hash->ctx); + hash->key_size = hash->digest_size; + memcpy(hash->key, hash->digest, hash->key_size); + } else { + memcpy(hash->key, key, hash->key_size); + } + + unsigned char pad[NIXIO_CRYPTO_BLOCK_SIZE]; + for (uint i = 0; i < hash->block_size; i++) { + pad[i] = (i < hash->key_size) ? (0x36 ^ hash->key[i]) : 0x36; + } + hash->update(hash->ctx, pad, hash->block_size); + hash->type |= NIXIO_HMAC_BIT; + } + + return 1; +} + +static int nixio_crypto_hash(lua_State *L) { + return nixio_crypto_hash__init(L, 0); +} + +static int nixio_crypto_hmac(lua_State *L) { + return nixio_crypto_hash__init(L, 1); +} + +static int nixio_crypto_hash_update(lua_State *L) { + nixio_hash *hash = luaL_checkudata(L, 1, NIXIO_CRYPTO_HASH_META); + if (hash->type) { + size_t len; + const char *chunk = luaL_checklstring(L, 2, &len); + hash->update(hash->ctx, chunk, len); + lua_pushvalue(L, 1); + return 1; + } else { + return luaL_error(L, "Tried to update finalized hash object."); + } +} + +static int nixio_crypto_hash_final(lua_State *L) { + nixio_hash *hash = luaL_checkudata(L, 1, NIXIO_CRYPTO_HASH_META); + if (hash->type & NIXIO_HMAC_BIT) { + hash->final(hash->digest, hash->ctx); + hash->init(hash->ctx); + + unsigned char pad[NIXIO_CRYPTO_BLOCK_SIZE]; + for (uint i = 0; i < hash->block_size; i++) { + pad[i] = (i < hash->key_size) ? (0x5c ^ hash->key[i]) : 0x5c; + } + + hash->update(hash->ctx, pad, hash->block_size); + hash->update(hash->ctx, hash->digest, hash->digest_size); + } + + if (hash->type) { + hash->type = NIXIO_HASH_NONE; + hash->final(hash->digest, hash->ctx); + free(hash->ctx); + } + + char hashdigest[NIXIO_DIGEST_SIZE*2]; + for (uint i=0; i < hash->digest_size; i++) { + hashdigest[2*i] = nixio__bin2hex[(hash->digest[i] & 0xf0) >> 4]; + hashdigest[2*i+1] = nixio__bin2hex[(hash->digest[i] & 0x0f)]; + } + + lua_pushlstring(L, hashdigest, hash->digest_size * 2); + memcpy(hashdigest, hash->digest, hash->digest_size); + lua_pushlstring(L, hashdigest, hash->digest_size); + + return 2; +} + +static int nixio_crypto_hash__gc(lua_State *L) { + nixio_hash *hash = luaL_checkudata(L, 1, NIXIO_CRYPTO_HASH_META); + if (hash->type) { + hash->final(hash->digest, hash->ctx); + free(hash->ctx); + hash->type = NIXIO_HASH_NONE; + } + return 0; +} + +static int nixio_crypto_hash__tostring(lua_State *L) { + nixio_hash *hash = luaL_checkudata(L, 1, NIXIO_CRYPTO_HASH_META); + lua_pushfstring(L, "nixio hash object: %p", hash); + return 1; +} + + +/* module table */ +static const luaL_reg R[] = { + {"hash", nixio_crypto_hash}, + {"hmac", nixio_crypto_hmac}, + {NULL, NULL} +}; + +/* hash table */ +static const luaL_reg M[] = { + {"update", nixio_crypto_hash_update}, + {"final", nixio_crypto_hash_final}, + {"__gc", nixio_crypto_hash__gc}, + {"__tostring", nixio_crypto_hash__tostring}, + {NULL, NULL} +}; + + + +void nixio_open_tls_crypto(lua_State *L) { + luaL_newmetatable(L, NIXIO_CRYPTO_HASH_META); + luaL_register(L, NULL, M); + lua_pushvalue(L, -1); + lua_setfield(L, -2, "__index"); + lua_pop(L, 1); + + lua_newtable(L); + luaL_register(L, NULL, R); + + lua_setfield(L, -2, "crypto"); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/tls-socket.c b/feeds/luci/libs/luci-lib-nixio/src/tls-socket.c new file mode 100644 index 0000000..fe4cb60 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/tls-socket.c @@ -0,0 +1,263 @@ + /* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio-tls.h" +#include +#include + +static int nixio__tls_sock_perror(lua_State *L, SSL *sock, int code) { + lua_pushnil(L); + lua_pushinteger(L, SSL_get_error(sock, code)); + return 2; +} + +static int nixio__tls_sock_pstatus(lua_State *L, SSL *sock, int code) { + if (code > 0) { + lua_pushboolean(L, 1); + return 1; + } else { + return nixio__tls_sock_perror(L, sock, code); + } +} + +static SSL* nixio__checktlssock(lua_State *L) { + if (lua_istable(L, 1)) { + lua_getfield(L, 1, "connection"); + lua_replace(L, 1); + } + nixio_tls_sock *sock = luaL_checkudata(L, 1, NIXIO_TLS_SOCK_META); + luaL_argcheck(L, sock->socket, 1, "invalid context"); + return sock->socket; +} + +#ifndef WITH_AXTLS +#define nixio_tls__check_connected(L) ; + +#define nixio_tls__set_connected(L, val) ; +#else +#define nixio_tls__check_connected(L) \ + nixio_tls_sock *ctsock = luaL_checkudata(L, 1, NIXIO_TLS_SOCK_META); \ + if (!ctsock->connected) { \ + lua_pushnil(L); \ + lua_pushinteger(L, 1); \ + return 2; \ + } + +#define nixio_tls__set_connected(L, val) \ +((nixio_tls_sock*)luaL_checkudata(L, 1, NIXIO_TLS_SOCK_META))->connected = val; +#endif /* WITH_AXTLS */ + +static int nixio_tls_sock_recv(lua_State *L) { + SSL *sock = nixio__checktlssock(L); + nixio_tls__check_connected(L); + uint req = luaL_checkinteger(L, 2); + + luaL_argcheck(L, req >= 0, 2, "out of range"); + + /* We limit the readsize to NIXIO_BUFFERSIZE */ + req = (req > NIXIO_BUFFERSIZE) ? NIXIO_BUFFERSIZE : req; + +#ifndef WITH_AXTLS + + char buffer[NIXIO_BUFFERSIZE]; + int readc = SSL_read(sock, buffer, req); + + if (readc < 0) { + return nixio__tls_sock_pstatus(L, sock, readc); + } else { + lua_pushlstring(L, buffer, readc); + return 1; + } + +#else + + if (!req) { + lua_pushliteral(L, ""); + return 1; + } + + nixio_tls_sock *t = lua_touserdata(L, 1); + + /* AXTLS doesn't handle buffering for us, so we have to hack around*/ + if (req < t->pbufsiz) { + lua_pushlstring(L, t->pbufpos, req); + t->pbufpos += req; + t->pbufsiz -= req; + return 1; + } else { + uint8_t *axbuf; + int axread; + + /* while handshake pending */ + while ((axread = ssl_read(sock, &axbuf)) == SSL_OK); + + if (t->pbufsiz) { + lua_pushlstring(L, t->pbufpos, t->pbufsiz); + } + + if (axread < 0) { + /* There is an error */ + free(t->pbuffer); + t->pbuffer = t->pbufpos = NULL; + + if (axread != SSL_ERROR_CONN_LOST) { + t->pbufsiz = 0; + return nixio__tls_sock_perror(L, sock, axread); + } else { + if (!t->pbufsiz) { + lua_pushliteral(L, ""); + } else { + t->pbufsiz = 0; + } + } + } else { + int stillwant = req - t->pbufsiz; + if (stillwant < axread) { + /* we got more data than we need */ + lua_pushlstring(L, (char *)axbuf, stillwant); + if(t->pbufsiz) { + lua_concat(L, 2); + } + + /* remaining data goes into the buffer */ + t->pbufpos = t->pbuffer; + t->pbufsiz = axread - stillwant; + t->pbuffer = realloc(t->pbuffer, t->pbufsiz); + if (!t->pbuffer) { + free(t->pbufpos); + t->pbufpos = NULL; + t->pbufsiz = 0; + return luaL_error(L, "out of memory"); + } + + t->pbufpos = t->pbuffer; + memcpy(t->pbufpos, axbuf + stillwant, t->pbufsiz); + } else { + lua_pushlstring(L, (char *)axbuf, axread); + if(t->pbufsiz) { + lua_concat(L, 2); + } + + /* free buffer */ + free(t->pbuffer); + t->pbuffer = t->pbufpos = NULL; + t->pbufsiz = 0; + } + } + return 1; + } + +#endif /* WITH_AXTLS */ + +} + +static int nixio_tls_sock_send(lua_State *L) { + SSL *sock = nixio__checktlssock(L); + nixio_tls__check_connected(L); + size_t len; + ssize_t sent; + const char *data = luaL_checklstring(L, 2, &len); + + if (lua_gettop(L) > 2) { + int offset = luaL_optint(L, 3, 0); + if (offset) { + if (offset < len) { + data += offset; + len -= offset; + } else { + len = 0; + } + } + + unsigned int wlen = luaL_optint(L, 4, len); + if (wlen < len) { + len = wlen; + } + } + + sent = SSL_write(sock, data, len); + if (sent > 0) { + lua_pushinteger(L, sent); + return 1; + } else { + return nixio__tls_sock_pstatus(L, sock, sent); + } +} + +static int nixio_tls_sock_accept(lua_State *L) { + SSL *sock = nixio__checktlssock(L); + const int stat = SSL_accept(sock); + nixio_tls__set_connected(L, stat == 1); + return nixio__tls_sock_pstatus(L, sock, stat); +} + +static int nixio_tls_sock_connect(lua_State *L) { + SSL *sock = nixio__checktlssock(L); + const int stat = SSL_connect(sock); + nixio_tls__set_connected(L, stat == 1); + return nixio__tls_sock_pstatus(L, sock, stat); +} + +static int nixio_tls_sock_shutdown(lua_State *L) { + SSL *sock = nixio__checktlssock(L); + nixio_tls__set_connected(L, 0); + return nixio__tls_sock_pstatus(L, sock, SSL_shutdown(sock)); +} + +static int nixio_tls_sock__gc(lua_State *L) { + nixio_tls_sock *sock = luaL_checkudata(L, 1, NIXIO_TLS_SOCK_META); + if (sock->socket) { + SSL_free(sock->socket); + sock->socket = NULL; +#ifdef WITH_AXTLS + free(sock->pbuffer); +#endif + } + return 0; +} + +static int nixio_tls_sock__tostring(lua_State *L) { + SSL *sock = nixio__checktlssock(L); + lua_pushfstring(L, "nixio TLS connection: %p", sock); + return 1; +} + + +/* ctx function table */ +static const luaL_reg M[] = { + {"recv", nixio_tls_sock_recv}, + {"send", nixio_tls_sock_send}, + {"read", nixio_tls_sock_recv}, + {"write", nixio_tls_sock_send}, + {"accept", nixio_tls_sock_accept}, + {"connect", nixio_tls_sock_connect}, + {"shutdown", nixio_tls_sock_shutdown}, + {"__gc", nixio_tls_sock__gc}, + {"__tostring", nixio_tls_sock__tostring}, + {NULL, NULL} +}; + + +void nixio_open_tls_socket(lua_State *L) { + /* create socket metatable */ + luaL_newmetatable(L, NIXIO_TLS_SOCK_META); + luaL_register(L, NULL, M); + lua_pushvalue(L, -1); + lua_setfield(L, -2, "__index"); + lua_setfield(L, -2, "meta_tls_socket"); +} diff --git a/feeds/luci/libs/luci-lib-nixio/src/user.c b/feeds/luci/libs/luci-lib-nixio/src/user.c new file mode 100644 index 0000000..b701bac --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/src/user.c @@ -0,0 +1,263 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2009 Steven Barth + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" +#include +#include +#include +#include + +#ifndef __WINNT__ + +#include +#include + +#ifndef BSD +#ifndef NO_SHADOW +#include +#endif +#include +#endif + +int nixio__check_group(lua_State *L, int idx) { + if (lua_isnumber(L, idx)) { + return lua_tointeger(L, idx); + } else if (lua_isstring(L, idx)) { + struct group *g = getgrnam(lua_tostring(L, idx)); + return (!g) ? -1 : g->gr_gid; + } else { + return luaL_argerror(L, idx, "supported values: , "); + } +} + +int nixio__check_user(lua_State *L, int idx) { + if (lua_isnumber(L, idx)) { + return lua_tointeger(L, idx); + } else if (lua_isstring(L, idx)) { + struct passwd *p = getpwnam(lua_tostring(L, idx)); + return (!p) ? -1 : p->pw_uid; + } else { + return luaL_argerror(L, idx, "supported values: , "); + } +} + + +static int nixio__push_group(lua_State *L, struct group *gr) { + lua_createtable(L, 0, 4); + lua_pushstring(L, gr->gr_name); + lua_setfield(L, -2, "name"); + lua_pushstring(L, gr->gr_passwd); + lua_setfield(L, -2, "passwd"); + lua_pushinteger(L, gr->gr_gid); + lua_setfield(L, -2, "gid"); + lua_newtable(L); + + for (int i=0; gr->gr_mem[i]; i++) { + lua_pushstring(L, gr->gr_mem[i]); + lua_rawseti(L, -2, i+1); + } + + lua_setfield(L, -2, "mem"); + return 1; +} + +static int nixio_getgr(lua_State *L) { + struct group *gr; + errno = 0; + if (lua_isnumber(L, 1)) { + gr = getgrgid(lua_tointeger(L, 1)); + } else if (lua_isstring(L, 1)) { + gr = getgrnam(lua_tostring(L, 1)); + } else if (lua_isnoneornil(L, 1)) { + lua_newtable(L); + int i = 0; + + setgrent(); + while ((gr = getgrent())) { + nixio__push_group(L, gr); + lua_rawseti(L, -2, ++i); + } + + if (errno) { + return nixio__perror(L); + } + + endgrent(); + return 1; + } else { + return luaL_argerror(L, 1, "supported values: , "); + } + + if (!gr) { + return nixio__perror(L); + } else { + return nixio__push_group(L, gr); + } +} + +static int nixio__push_passwd(lua_State *L, struct passwd *pw) { + lua_createtable(L, 0, 7); + lua_pushstring(L, pw->pw_name); + lua_setfield(L, -2, "name"); + lua_pushstring(L, pw->pw_passwd); + lua_setfield(L, -2, "passwd"); + lua_pushinteger(L, pw->pw_gid); + lua_setfield(L, -2, "gid"); + lua_pushinteger(L, pw->pw_uid); + lua_setfield(L, -2, "uid"); + lua_pushstring(L, pw->pw_dir); + lua_setfield(L, -2, "dir"); + lua_pushstring(L, pw->pw_gecos); + lua_setfield(L, -2, "gecos"); + lua_pushstring(L, pw->pw_shell); + lua_setfield(L, -2, "shell"); + return 1; +} + +static int nixio_getpw(lua_State *L) { + struct passwd *pw; + errno = 0; + if (lua_isnumber(L, 1)) { + pw = getpwuid(lua_tointeger(L, 1)); + } else if (lua_isstring(L, 1)) { + pw = getpwnam(lua_tostring(L, 1)); + } else if (lua_isnoneornil(L, 1)) { + lua_newtable(L); + int i = 0; + + setpwent(); + while ((pw = getpwent())) { + nixio__push_passwd(L, pw); + lua_rawseti(L, -2, ++i); + } + + if (errno) { + return nixio__perror(L); + } + + endpwent(); + return 1; + } else { + return luaL_argerror(L, 1, "supported values: , "); + } + + if (!pw) { + return nixio__perror(L); + } else { + return nixio__push_passwd(L, pw); + } +} + +#ifndef BSD +#ifndef NO_SHADOW +static int nixio__push_spwd(lua_State *L, struct spwd *sp) { + lua_createtable(L, 0, 9); + lua_pushstring(L, sp->sp_namp); + lua_setfield(L, -2, "namp"); + lua_pushinteger(L, sp->sp_expire); + lua_setfield(L, -2, "expire"); + lua_pushinteger(L, sp->sp_flag); + lua_setfield(L, -2, "flag"); + lua_pushinteger(L, sp->sp_inact); + lua_setfield(L, -2, "inact"); + lua_pushinteger(L, sp->sp_lstchg); + lua_setfield(L, -2, "lstchg"); + lua_pushinteger(L, sp->sp_max); + lua_setfield(L, -2, "max"); + lua_pushinteger(L, sp->sp_min); + lua_setfield(L, -2, "min"); + lua_pushinteger(L, sp->sp_warn); + lua_setfield(L, -2, "warn"); + lua_pushstring(L, sp->sp_pwdp); + lua_setfield(L, -2, "pwdp"); + return 1; +} + +static int nixio_getsp(lua_State *L) { + struct spwd *sp; + errno = 0; + if (lua_isstring(L, 1)) { + sp = getspnam(lua_tostring(L, 1)); + } else if (lua_isnoneornil(L, 1)) { + lua_newtable(L); + int i = 0; + + setspent(); + while ((sp = getspent())) { + nixio__push_spwd(L, sp); + lua_rawseti(L, -2, ++i); + } + + if (errno) { + return nixio__perror(L); + } + + endspent(); + return 1; + } else { + return luaL_argerror(L, 1, "supported values: "); + } + + if (!sp) { + return nixio__perror(L); + } else { + return nixio__push_spwd(L, sp); + } +} +#endif /* !NO_SHADOW */ +#endif /* !BSD */ + +static int nixio_crypt(lua_State *L) { + const char *key = luaL_checkstring(L, 1); + const char *salt = luaL_checkstring(L, 2); + const char *hash = crypt(key, salt); + + if (hash) { + lua_pushstring(L, hash); + } else { + lua_pushnil(L); + } + + return 1; +} + + +/* module table */ +static const luaL_reg R[] = { + {"crypt", nixio_crypt}, + {"getgr", nixio_getgr}, + {"getpw", nixio_getpw}, +#ifndef BSD +#ifndef NO_SHADOW + {"getsp", nixio_getsp}, +#endif +#endif + {NULL, NULL} +}; + +#else /* __WINNT__ */ + +static const luaL_reg R[] = { + {NULL, NULL} +}; + +#endif + +void nixio_open_user(lua_State *L) { + luaL_register(L, NULL, R); +} diff --git a/feeds/luci/libs/luci-lib-px5g/Makefile b/feeds/luci/libs/luci-lib-px5g/Makefile new file mode 100644 index 0000000..70b95e8 --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/Makefile @@ -0,0 +1,16 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=RSA/X.509 Key Generator (required for LuCId SSL support) +LUCI_DEPENDS:=+liblua + +PKG_USE_MIPS16:=0 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/libs/luci-lib-px5g/lua/px5g/util.lua b/feeds/luci/libs/luci-lib-px5g/lua/px5g/util.lua new file mode 100644 index 0000000..0f07c81 --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/lua/px5g/util.lua @@ -0,0 +1,44 @@ +--[[ + * px5g - Embedded x509 key and certificate generator based on PolarSSL + * + * Copyright (C) 2009 Steven Barth + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License, version 2.1 as published by the Free Software Foundation. +]]-- + +local nixio = require "nixio" +local table = require "table" + +module "px5g.util" + +local preamble = { + key = "-----BEGIN RSA PRIVATE KEY-----", + cert = "-----BEGIN CERTIFICATE-----", + request = "-----BEGIN CERTIFICATE REQUEST-----" +} + +local postamble = { + key = "-----END RSA PRIVATE KEY-----", + cert = "-----END CERTIFICATE-----", + request = "-----END CERTIFICATE REQUEST-----" +} + +function der2pem(data, type) + local b64 = nixio.bin.b64encode(data) + + local outdata = {preamble[type]} + for i = 1, #b64, 64 do + outdata[#outdata + 1] = b64:sub(i, i + 63) + end + outdata[#outdata + 1] = postamble[type] + outdata[#outdata + 1] = "" + + return table.concat(outdata, "\n") +end + +function pem2der(data) + local b64 = data:gsub({["\n"] = "", ["%-%-%-%-%-.-%-%-%-%-%-"] = ""}) + return nixio.bin.b64decode(b64) +end \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-px5g/root/usr/sbin/px5g-genkeys b/feeds/luci/libs/luci-lib-px5g/root/usr/sbin/px5g-genkeys new file mode 100755 index 0000000..87a66bf --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/root/usr/sbin/px5g-genkeys @@ -0,0 +1,19 @@ +#!/usr/bin/lua +local keyfile = "/etc/nixio/rsa_main.der" +local certfile = "/etc/nixio/cert_main.der" + +local px5g = require "px5g" +local nixio = require "nixio" +local fs = require "nixio.fs" +local os = require "os" +nixio.umask(77) + +if not fs.access(certfile) then + local key = px5g.genkey(2048) + fs.writefile(keyfile, key:asn1()) + + local cert = key:create_selfsigned( + {CN=nixio.uname().nodename, O="LuCI Keymaster"}, + os.time(), os.time() + 3600 * 24 * 366 * 15) + fs.writefile(certfile, cert) +end diff --git a/feeds/luci/libs/luci-lib-px5g/src/Makefile b/feeds/luci/libs/luci-lib-px5g/src/Makefile new file mode 100644 index 0000000..755565e --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/Makefile @@ -0,0 +1,17 @@ +PX5G_CFLAGS = -I. -include polarssl/rsa.h -include polarssl/x509.h -std=gnu99 +PX5G_LDFLAGS = -llua -lm +PX5G_OBJ = px5g.o library/bignum.o library/havege.o library/rsa.o library/sha1.o library/timing.o library/x509write.o +PX5G_LIB = px5g.so + +%.o: %.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(LUA_CFLAGS) $(PX5G_CFLAGS) $(FPIC) -c -o $@ $< + +compile: $(PX5G_OBJ) + $(CC) $(LDFLAGS) -shared -o $(PX5G_LIB) $(PX5G_OBJ) $(PX5G_LDFLAGS) + +install: compile + mkdir -p $(DESTDIR)/usr/lib/lua + cp $(PX5G_LIB) $(DESTDIR)/usr/lib/lua/$(PX5G_LIB) + +clean: + rm -f *.o *.so diff --git a/feeds/luci/libs/luci-lib-px5g/src/library/bignum.c b/feeds/luci/libs/luci-lib-px5g/src/library/bignum.c new file mode 100644 index 0000000..8b7c12f --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/library/bignum.c @@ -0,0 +1,2010 @@ +/* + * Multi-precision integer library + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * This MPI implementation is based on: + * + * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf + * http://www.stillhq.com/extracted/gnupg-api/mpi/ + * http://math.libtomcrypt.com/files/tommath.pdf + */ + +#include "polarssl/config.h" + +#if defined(POLARSSL_BIGNUM_C) + +#include "polarssl/bignum.h" +#include "polarssl/bn_mul.h" + +#include +#include +#include + +#define ciL ((int) sizeof(t_int)) /* chars in limb */ +#define biL (ciL << 3) /* bits in limb */ +#define biH (ciL << 2) /* half limb size */ + +/* + * Convert between bits/chars and number of limbs + */ +#define BITS_TO_LIMBS(i) (((i) + biL - 1) / biL) +#define CHARS_TO_LIMBS(i) (((i) + ciL - 1) / ciL) + +/* + * Initialize one or more mpi + */ +void mpi_init( mpi *X, ... ) +{ + va_list args; + + va_start( args, X ); + + while( X != NULL ) + { + X->s = 1; + X->n = 0; + X->p = NULL; + + X = va_arg( args, mpi* ); + } + + va_end( args ); +} + +/* + * Unallocate one or more mpi + */ +void mpi_free( mpi *X, ... ) +{ + va_list args; + + va_start( args, X ); + + while( X != NULL ) + { + if( X->p != NULL ) + { + memset( X->p, 0, X->n * ciL ); + free( X->p ); + } + + X->s = 1; + X->n = 0; + X->p = NULL; + + X = va_arg( args, mpi* ); + } + + va_end( args ); +} + +/* + * Enlarge to the specified number of limbs + */ +int mpi_grow( mpi *X, int nblimbs ) +{ + t_int *p; + + if( X->n < nblimbs ) + { + if( ( p = (t_int *) malloc( nblimbs * ciL ) ) == NULL ) + return( 1 ); + + memset( p, 0, nblimbs * ciL ); + + if( X->p != NULL ) + { + memcpy( p, X->p, X->n * ciL ); + memset( X->p, 0, X->n * ciL ); + free( X->p ); + } + + X->n = nblimbs; + X->p = p; + } + + return( 0 ); +} + +/* + * Copy the contents of Y into X + */ +int mpi_copy( mpi *X, mpi *Y ) +{ + int ret, i; + + if( X == Y ) + return( 0 ); + + for( i = Y->n - 1; i > 0; i-- ) + if( Y->p[i] != 0 ) + break; + i++; + + X->s = Y->s; + + MPI_CHK( mpi_grow( X, i ) ); + + memset( X->p, 0, X->n * ciL ); + memcpy( X->p, Y->p, i * ciL ); + +cleanup: + + return( ret ); +} + +/* + * Swap the contents of X and Y + */ +void mpi_swap( mpi *X, mpi *Y ) +{ + mpi T; + + memcpy( &T, X, sizeof( mpi ) ); + memcpy( X, Y, sizeof( mpi ) ); + memcpy( Y, &T, sizeof( mpi ) ); +} + +/* + * Set value from integer + */ +int mpi_lset( mpi *X, int z ) +{ + int ret; + + MPI_CHK( mpi_grow( X, 1 ) ); + memset( X->p, 0, X->n * ciL ); + + X->p[0] = ( z < 0 ) ? -z : z; + X->s = ( z < 0 ) ? -1 : 1; + +cleanup: + + return( ret ); +} + +/* + * Return the number of least significant bits + */ +int mpi_lsb( mpi *X ) +{ + int i, j, count = 0; + + for( i = 0; i < X->n; i++ ) + for( j = 0; j < (int) biL; j++, count++ ) + if( ( ( X->p[i] >> j ) & 1 ) != 0 ) + return( count ); + + return( 0 ); +} + +/* + * Return the number of most significant bits + */ +int mpi_msb( mpi *X ) +{ + int i, j; + + for( i = X->n - 1; i > 0; i-- ) + if( X->p[i] != 0 ) + break; + + for( j = biL - 1; j >= 0; j-- ) + if( ( ( X->p[i] >> j ) & 1 ) != 0 ) + break; + + return( ( i * biL ) + j + 1 ); +} + +/* + * Return the total size in bytes + */ +int mpi_size( mpi *X ) +{ + return( ( mpi_msb( X ) + 7 ) >> 3 ); +} + +/* + * Convert an ASCII character to digit value + */ +static int mpi_get_digit( t_int *d, int radix, char c ) +{ + *d = 255; + + if( c >= 0x30 && c <= 0x39 ) *d = c - 0x30; + if( c >= 0x41 && c <= 0x46 ) *d = c - 0x37; + if( c >= 0x61 && c <= 0x66 ) *d = c - 0x57; + + if( *d >= (t_int) radix ) + return( POLARSSL_ERR_MPI_INVALID_CHARACTER ); + + return( 0 ); +} + +/* + * Import from an ASCII string + */ +int mpi_read_string( mpi *X, int radix, char *s ) +{ + int ret, i, j, n; + t_int d; + mpi T; + + if( radix < 2 || radix > 16 ) + return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); + + mpi_init( &T, NULL ); + + if( radix == 16 ) + { + n = BITS_TO_LIMBS( strlen( s ) << 2 ); + + MPI_CHK( mpi_grow( X, n ) ); + MPI_CHK( mpi_lset( X, 0 ) ); + + for( i = strlen( s ) - 1, j = 0; i >= 0; i--, j++ ) + { + if( i == 0 && s[i] == '-' ) + { + X->s = -1; + break; + } + + MPI_CHK( mpi_get_digit( &d, radix, s[i] ) ); + X->p[j / (2 * ciL)] |= d << ( (j % (2 * ciL)) << 2 ); + } + } + else + { + MPI_CHK( mpi_lset( X, 0 ) ); + + for( i = 0; i < (int) strlen( s ); i++ ) + { + if( i == 0 && s[i] == '-' ) + { + X->s = -1; + continue; + } + + MPI_CHK( mpi_get_digit( &d, radix, s[i] ) ); + MPI_CHK( mpi_mul_int( &T, X, radix ) ); + MPI_CHK( mpi_add_int( X, &T, d ) ); + } + } + +cleanup: + + mpi_free( &T, NULL ); + + return( ret ); +} + +/* + * Helper to write the digits high-order first + */ +static int mpi_write_hlp( mpi *X, int radix, char **p ) +{ + int ret; + t_int r; + + if( radix < 2 || radix > 16 ) + return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); + + MPI_CHK( mpi_mod_int( &r, X, radix ) ); + MPI_CHK( mpi_div_int( X, NULL, X, radix ) ); + + if( mpi_cmp_int( X, 0 ) != 0 ) + MPI_CHK( mpi_write_hlp( X, radix, p ) ); + + if( r < 10 ) + *(*p)++ = (char)( r + 0x30 ); + else + *(*p)++ = (char)( r + 0x37 ); + +cleanup: + + return( ret ); +} + +/* + * Export into an ASCII string + */ +int mpi_write_string( mpi *X, int radix, char *s, int *slen ) +{ + int ret = 0, n; + char *p; + mpi T; + + if( radix < 2 || radix > 16 ) + return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); + + n = mpi_msb( X ); + if( radix >= 4 ) n >>= 1; + if( radix >= 16 ) n >>= 1; + n += 3; + + if( *slen < n ) + { + *slen = n; + return( POLARSSL_ERR_MPI_BUFFER_TOO_SMALL ); + } + + p = s; + mpi_init( &T, NULL ); + + if( X->s == -1 ) + *p++ = '-'; + + if( radix == 16 ) + { + int c, i, j, k; + + for( i = X->n - 1, k = 0; i >= 0; i-- ) + { + for( j = ciL - 1; j >= 0; j-- ) + { + c = ( X->p[i] >> (j << 3) ) & 0xFF; + + if( c == 0 && k == 0 && (i + j) != 0 ) + continue; + + p += sprintf( p, "%02X", c ); + k = 1; + } + } + } + else + { + MPI_CHK( mpi_copy( &T, X ) ); + MPI_CHK( mpi_write_hlp( &T, radix, &p ) ); + } + + *p++ = '\0'; + *slen = p - s; + +cleanup: + + mpi_free( &T, NULL ); + + return( ret ); +} + +/* + * Read X from an opened file + */ +int mpi_read_file( mpi *X, int radix, FILE *fin ) +{ + t_int d; + int slen; + char *p; + char s[1024]; + + memset( s, 0, sizeof( s ) ); + if( fgets( s, sizeof( s ) - 1, fin ) == NULL ) + return( POLARSSL_ERR_MPI_FILE_IO_ERROR ); + + slen = strlen( s ); + if( s[slen - 1] == '\n' ) { slen--; s[slen] = '\0'; } + if( s[slen - 1] == '\r' ) { slen--; s[slen] = '\0'; } + + p = s + slen; + while( --p >= s ) + if( mpi_get_digit( &d, radix, *p ) != 0 ) + break; + + return( mpi_read_string( X, radix, p + 1 ) ); +} + +/* + * Write X into an opened file (or stdout if fout == NULL) + */ +int mpi_write_file( char *p, mpi *X, int radix, FILE *fout ) +{ + int n, ret; + size_t slen; + size_t plen; + char s[1024]; + + n = sizeof( s ); + memset( s, 0, n ); + n -= 2; + + MPI_CHK( mpi_write_string( X, radix, s, (int *) &n ) ); + + if( p == NULL ) p = ""; + + plen = strlen( p ); + slen = strlen( s ); + s[slen++] = '\r'; + s[slen++] = '\n'; + + if( fout != NULL ) + { + if( fwrite( p, 1, plen, fout ) != plen || + fwrite( s, 1, slen, fout ) != slen ) + return( POLARSSL_ERR_MPI_FILE_IO_ERROR ); + } + else + printf( "%s%s", p, s ); + +cleanup: + + return( ret ); +} + +/* + * Import X from unsigned binary data, big endian + */ +int mpi_read_binary( mpi *X, unsigned char *buf, int buflen ) +{ + int ret, i, j, n; + + for( n = 0; n < buflen; n++ ) + if( buf[n] != 0 ) + break; + + MPI_CHK( mpi_grow( X, CHARS_TO_LIMBS( buflen - n ) ) ); + MPI_CHK( mpi_lset( X, 0 ) ); + + for( i = buflen - 1, j = 0; i >= n; i--, j++ ) + X->p[j / ciL] |= ((t_int) buf[i]) << ((j % ciL) << 3); + +cleanup: + + return( ret ); +} + +/* + * Export X into unsigned binary data, big endian + */ +int mpi_write_binary( mpi *X, unsigned char *buf, int buflen ) +{ + int i, j, n; + + n = mpi_size( X ); + + if( buflen < n ) + return( POLARSSL_ERR_MPI_BUFFER_TOO_SMALL ); + + memset( buf, 0, buflen ); + + for( i = buflen - 1, j = 0; n > 0; i--, j++, n-- ) + buf[i] = (unsigned char)( X->p[j / ciL] >> ((j % ciL) << 3) ); + + return( 0 ); +} + +/* + * Left-shift: X <<= count + */ +int mpi_shift_l( mpi *X, int count ) +{ + int ret, i, v0, t1; + t_int r0 = 0, r1; + + v0 = count / (biL ); + t1 = count & (biL - 1); + + i = mpi_msb( X ) + count; + + if( X->n * (int) biL < i ) + MPI_CHK( mpi_grow( X, BITS_TO_LIMBS( i ) ) ); + + ret = 0; + + /* + * shift by count / limb_size + */ + if( v0 > 0 ) + { + for( i = X->n - 1; i >= v0; i-- ) + X->p[i] = X->p[i - v0]; + + for( ; i >= 0; i-- ) + X->p[i] = 0; + } + + /* + * shift by count % limb_size + */ + if( t1 > 0 ) + { + for( i = v0; i < X->n; i++ ) + { + r1 = X->p[i] >> (biL - t1); + X->p[i] <<= t1; + X->p[i] |= r0; + r0 = r1; + } + } + +cleanup: + + return( ret ); +} + +/* + * Right-shift: X >>= count + */ +int mpi_shift_r( mpi *X, int count ) +{ + int i, v0, v1; + t_int r0 = 0, r1; + + v0 = count / biL; + v1 = count & (biL - 1); + + /* + * shift by count / limb_size + */ + if( v0 > 0 ) + { + for( i = 0; i < X->n - v0; i++ ) + X->p[i] = X->p[i + v0]; + + for( ; i < X->n; i++ ) + X->p[i] = 0; + } + + /* + * shift by count % limb_size + */ + if( v1 > 0 ) + { + for( i = X->n - 1; i >= 0; i-- ) + { + r1 = X->p[i] << (biL - v1); + X->p[i] >>= v1; + X->p[i] |= r0; + r0 = r1; + } + } + + return( 0 ); +} + +/* + * Compare unsigned values + */ +int mpi_cmp_abs( mpi *X, mpi *Y ) +{ + int i, j; + + for( i = X->n - 1; i >= 0; i-- ) + if( X->p[i] != 0 ) + break; + + for( j = Y->n - 1; j >= 0; j-- ) + if( Y->p[j] != 0 ) + break; + + if( i < 0 && j < 0 ) + return( 0 ); + + if( i > j ) return( 1 ); + if( j > i ) return( -1 ); + + for( ; i >= 0; i-- ) + { + if( X->p[i] > Y->p[i] ) return( 1 ); + if( X->p[i] < Y->p[i] ) return( -1 ); + } + + return( 0 ); +} + +/* + * Compare signed values + */ +int mpi_cmp_mpi( mpi *X, mpi *Y ) +{ + int i, j; + + for( i = X->n - 1; i >= 0; i-- ) + if( X->p[i] != 0 ) + break; + + for( j = Y->n - 1; j >= 0; j-- ) + if( Y->p[j] != 0 ) + break; + + if( i < 0 && j < 0 ) + return( 0 ); + + if( i > j ) return( X->s ); + if( j > i ) return( -X->s ); + + if( X->s > 0 && Y->s < 0 ) return( 1 ); + if( Y->s > 0 && X->s < 0 ) return( -1 ); + + for( ; i >= 0; i-- ) + { + if( X->p[i] > Y->p[i] ) return( X->s ); + if( X->p[i] < Y->p[i] ) return( -X->s ); + } + + return( 0 ); +} + +/* + * Compare signed values + */ +int mpi_cmp_int( mpi *X, int z ) +{ + mpi Y; + t_int p[1]; + + *p = ( z < 0 ) ? -z : z; + Y.s = ( z < 0 ) ? -1 : 1; + Y.n = 1; + Y.p = p; + + return( mpi_cmp_mpi( X, &Y ) ); +} + +/* + * Unsigned addition: X = |A| + |B| (HAC 14.7) + */ +int mpi_add_abs( mpi *X, mpi *A, mpi *B ) +{ + int ret, i, j; + t_int *o, *p, c; + + if( X == B ) + { + mpi *T = A; A = X; B = T; + } + + if( X != A ) + MPI_CHK( mpi_copy( X, A ) ); + + for( j = B->n - 1; j >= 0; j-- ) + if( B->p[j] != 0 ) + break; + + MPI_CHK( mpi_grow( X, j + 1 ) ); + + o = B->p; p = X->p; c = 0; + + for( i = 0; i <= j; i++, o++, p++ ) + { + *p += c; c = ( *p < c ); + *p += *o; c += ( *p < *o ); + } + + while( c != 0 ) + { + if( i >= X->n ) + { + MPI_CHK( mpi_grow( X, i + 1 ) ); + p = X->p + i; + } + + *p += c; c = ( *p < c ); i++; + } + +cleanup: + + return( ret ); +} + +/* + * Helper for mpi substraction + */ +static void mpi_sub_hlp( int n, t_int *s, t_int *d ) +{ + int i; + t_int c, z; + + for( i = c = 0; i < n; i++, s++, d++ ) + { + z = ( *d < c ); *d -= c; + c = ( *d < *s ) + z; *d -= *s; + } + + while( c != 0 ) + { + z = ( *d < c ); *d -= c; + c = z; i++; d++; + } +} + +/* + * Unsigned substraction: X = |A| - |B| (HAC 14.9) + */ +int mpi_sub_abs( mpi *X, mpi *A, mpi *B ) +{ + mpi TB; + int ret, n; + + if( mpi_cmp_abs( A, B ) < 0 ) + return( POLARSSL_ERR_MPI_NEGATIVE_VALUE ); + + mpi_init( &TB, NULL ); + + if( X == B ) + { + MPI_CHK( mpi_copy( &TB, B ) ); + B = &TB; + } + + if( X != A ) + MPI_CHK( mpi_copy( X, A ) ); + + ret = 0; + + for( n = B->n - 1; n >= 0; n-- ) + if( B->p[n] != 0 ) + break; + + mpi_sub_hlp( n + 1, B->p, X->p ); + +cleanup: + + mpi_free( &TB, NULL ); + + return( ret ); +} + +/* + * Signed addition: X = A + B + */ +int mpi_add_mpi( mpi *X, mpi *A, mpi *B ) +{ + int ret, s = A->s; + + if( A->s * B->s < 0 ) + { + if( mpi_cmp_abs( A, B ) >= 0 ) + { + MPI_CHK( mpi_sub_abs( X, A, B ) ); + X->s = s; + } + else + { + MPI_CHK( mpi_sub_abs( X, B, A ) ); + X->s = -s; + } + } + else + { + MPI_CHK( mpi_add_abs( X, A, B ) ); + X->s = s; + } + +cleanup: + + return( ret ); +} + +/* + * Signed substraction: X = A - B + */ +int mpi_sub_mpi( mpi *X, mpi *A, mpi *B ) +{ + int ret, s = A->s; + + if( A->s * B->s > 0 ) + { + if( mpi_cmp_abs( A, B ) >= 0 ) + { + MPI_CHK( mpi_sub_abs( X, A, B ) ); + X->s = s; + } + else + { + MPI_CHK( mpi_sub_abs( X, B, A ) ); + X->s = -s; + } + } + else + { + MPI_CHK( mpi_add_abs( X, A, B ) ); + X->s = s; + } + +cleanup: + + return( ret ); +} + +/* + * Signed addition: X = A + b + */ +int mpi_add_int( mpi *X, mpi *A, int b ) +{ + mpi _B; + t_int p[1]; + + p[0] = ( b < 0 ) ? -b : b; + _B.s = ( b < 0 ) ? -1 : 1; + _B.n = 1; + _B.p = p; + + return( mpi_add_mpi( X, A, &_B ) ); +} + +/* + * Signed substraction: X = A - b + */ +int mpi_sub_int( mpi *X, mpi *A, int b ) +{ + mpi _B; + t_int p[1]; + + p[0] = ( b < 0 ) ? -b : b; + _B.s = ( b < 0 ) ? -1 : 1; + _B.n = 1; + _B.p = p; + + return( mpi_sub_mpi( X, A, &_B ) ); +} + +/* + * Helper for mpi multiplication + */ +static void mpi_mul_hlp( int i, t_int *s, t_int *d, t_int b ) +{ + t_int c = 0, t = 0; + +#if defined(MULADDC_HUIT) + for( ; i >= 8; i -= 8 ) + { + MULADDC_INIT + MULADDC_HUIT + MULADDC_STOP + } + + for( ; i > 0; i-- ) + { + MULADDC_INIT + MULADDC_CORE + MULADDC_STOP + } +#else + for( ; i >= 16; i -= 16 ) + { + MULADDC_INIT + MULADDC_CORE MULADDC_CORE + MULADDC_CORE MULADDC_CORE + MULADDC_CORE MULADDC_CORE + MULADDC_CORE MULADDC_CORE + + MULADDC_CORE MULADDC_CORE + MULADDC_CORE MULADDC_CORE + MULADDC_CORE MULADDC_CORE + MULADDC_CORE MULADDC_CORE + MULADDC_STOP + } + + for( ; i >= 8; i -= 8 ) + { + MULADDC_INIT + MULADDC_CORE MULADDC_CORE + MULADDC_CORE MULADDC_CORE + + MULADDC_CORE MULADDC_CORE + MULADDC_CORE MULADDC_CORE + MULADDC_STOP + } + + for( ; i > 0; i-- ) + { + MULADDC_INIT + MULADDC_CORE + MULADDC_STOP + } +#endif + + t++; + + do { + *d += c; c = ( *d < c ); d++; + } + while( c != 0 ); +} + +/* + * Baseline multiplication: X = A * B (HAC 14.12) + */ +int mpi_mul_mpi( mpi *X, mpi *A, mpi *B ) +{ + int ret, i, j; + mpi TA, TB; + + mpi_init( &TA, &TB, NULL ); + + if( X == A ) { MPI_CHK( mpi_copy( &TA, A ) ); A = &TA; } + if( X == B ) { MPI_CHK( mpi_copy( &TB, B ) ); B = &TB; } + + for( i = A->n - 1; i >= 0; i-- ) + if( A->p[i] != 0 ) + break; + + for( j = B->n - 1; j >= 0; j-- ) + if( B->p[j] != 0 ) + break; + + MPI_CHK( mpi_grow( X, i + j + 2 ) ); + MPI_CHK( mpi_lset( X, 0 ) ); + + for( i++; j >= 0; j-- ) + mpi_mul_hlp( i, A->p, X->p + j, B->p[j] ); + + X->s = A->s * B->s; + +cleanup: + + mpi_free( &TB, &TA, NULL ); + + return( ret ); +} + +/* + * Baseline multiplication: X = A * b + */ +int mpi_mul_int( mpi *X, mpi *A, t_int b ) +{ + mpi _B; + t_int p[1]; + + _B.s = 1; + _B.n = 1; + _B.p = p; + p[0] = b; + + return( mpi_mul_mpi( X, A, &_B ) ); +} + +/* + * Division by mpi: A = Q * B + R (HAC 14.20) + */ +int mpi_div_mpi( mpi *Q, mpi *R, mpi *A, mpi *B ) +{ + int ret, i, n, t, k; + mpi X, Y, Z, T1, T2; + + if( mpi_cmp_int( B, 0 ) == 0 ) + return( POLARSSL_ERR_MPI_DIVISION_BY_ZERO ); + + mpi_init( &X, &Y, &Z, &T1, &T2, NULL ); + + if( mpi_cmp_abs( A, B ) < 0 ) + { + if( Q != NULL ) MPI_CHK( mpi_lset( Q, 0 ) ); + if( R != NULL ) MPI_CHK( mpi_copy( R, A ) ); + return( 0 ); + } + + MPI_CHK( mpi_copy( &X, A ) ); + MPI_CHK( mpi_copy( &Y, B ) ); + X.s = Y.s = 1; + + MPI_CHK( mpi_grow( &Z, A->n + 2 ) ); + MPI_CHK( mpi_lset( &Z, 0 ) ); + MPI_CHK( mpi_grow( &T1, 2 ) ); + MPI_CHK( mpi_grow( &T2, 3 ) ); + + k = mpi_msb( &Y ) % biL; + if( k < (int) biL - 1 ) + { + k = biL - 1 - k; + MPI_CHK( mpi_shift_l( &X, k ) ); + MPI_CHK( mpi_shift_l( &Y, k ) ); + } + else k = 0; + + n = X.n - 1; + t = Y.n - 1; + mpi_shift_l( &Y, biL * (n - t) ); + + while( mpi_cmp_mpi( &X, &Y ) >= 0 ) + { + Z.p[n - t]++; + mpi_sub_mpi( &X, &X, &Y ); + } + mpi_shift_r( &Y, biL * (n - t) ); + + for( i = n; i > t ; i-- ) + { + if( X.p[i] >= Y.p[t] ) + Z.p[i - t - 1] = ~0; + else + { +#if defined(POLARSSL_HAVE_LONGLONG) + t_dbl r; + + r = (t_dbl) X.p[i] << biL; + r |= (t_dbl) X.p[i - 1]; + r /= Y.p[t]; + if( r > ((t_dbl) 1 << biL) - 1) + r = ((t_dbl) 1 << biL) - 1; + + Z.p[i - t - 1] = (t_int) r; +#else + /* + * __udiv_qrnnd_c, from gmp/longlong.h + */ + t_int q0, q1, r0, r1; + t_int d0, d1, d, m; + + d = Y.p[t]; + d0 = ( d << biH ) >> biH; + d1 = ( d >> biH ); + + q1 = X.p[i] / d1; + r1 = X.p[i] - d1 * q1; + r1 <<= biH; + r1 |= ( X.p[i - 1] >> biH ); + + m = q1 * d0; + if( r1 < m ) + { + q1--, r1 += d; + while( r1 >= d && r1 < m ) + q1--, r1 += d; + } + r1 -= m; + + q0 = r1 / d1; + r0 = r1 - d1 * q0; + r0 <<= biH; + r0 |= ( X.p[i - 1] << biH ) >> biH; + + m = q0 * d0; + if( r0 < m ) + { + q0--, r0 += d; + while( r0 >= d && r0 < m ) + q0--, r0 += d; + } + r0 -= m; + + Z.p[i - t - 1] = ( q1 << biH ) | q0; +#endif + } + + Z.p[i - t - 1]++; + do + { + Z.p[i - t - 1]--; + + MPI_CHK( mpi_lset( &T1, 0 ) ); + T1.p[0] = (t < 1) ? 0 : Y.p[t - 1]; + T1.p[1] = Y.p[t]; + MPI_CHK( mpi_mul_int( &T1, &T1, Z.p[i - t - 1] ) ); + + MPI_CHK( mpi_lset( &T2, 0 ) ); + T2.p[0] = (i < 2) ? 0 : X.p[i - 2]; + T2.p[1] = (i < 1) ? 0 : X.p[i - 1]; + T2.p[2] = X.p[i]; + } + while( mpi_cmp_mpi( &T1, &T2 ) > 0 ); + + MPI_CHK( mpi_mul_int( &T1, &Y, Z.p[i - t - 1] ) ); + MPI_CHK( mpi_shift_l( &T1, biL * (i - t - 1) ) ); + MPI_CHK( mpi_sub_mpi( &X, &X, &T1 ) ); + + if( mpi_cmp_int( &X, 0 ) < 0 ) + { + MPI_CHK( mpi_copy( &T1, &Y ) ); + MPI_CHK( mpi_shift_l( &T1, biL * (i - t - 1) ) ); + MPI_CHK( mpi_add_mpi( &X, &X, &T1 ) ); + Z.p[i - t - 1]--; + } + } + + if( Q != NULL ) + { + mpi_copy( Q, &Z ); + Q->s = A->s * B->s; + } + + if( R != NULL ) + { + mpi_shift_r( &X, k ); + mpi_copy( R, &X ); + + R->s = A->s; + if( mpi_cmp_int( R, 0 ) == 0 ) + R->s = 1; + } + +cleanup: + + mpi_free( &X, &Y, &Z, &T1, &T2, NULL ); + + return( ret ); +} + +/* + * Division by int: A = Q * b + R + * + * Returns 0 if successful + * 1 if memory allocation failed + * POLARSSL_ERR_MPI_DIVISION_BY_ZERO if b == 0 + */ +int mpi_div_int( mpi *Q, mpi *R, mpi *A, int b ) +{ + mpi _B; + t_int p[1]; + + p[0] = ( b < 0 ) ? -b : b; + _B.s = ( b < 0 ) ? -1 : 1; + _B.n = 1; + _B.p = p; + + return( mpi_div_mpi( Q, R, A, &_B ) ); +} + +/* + * Modulo: R = A mod B + */ +int mpi_mod_mpi( mpi *R, mpi *A, mpi *B ) +{ + int ret; + + MPI_CHK( mpi_div_mpi( NULL, R, A, B ) ); + + while( mpi_cmp_int( R, 0 ) < 0 ) + MPI_CHK( mpi_add_mpi( R, R, B ) ); + + while( mpi_cmp_mpi( R, B ) >= 0 ) + MPI_CHK( mpi_sub_mpi( R, R, B ) ); + +cleanup: + + return( ret ); +} + +/* + * Modulo: r = A mod b + */ +int mpi_mod_int( t_int *r, mpi *A, int b ) +{ + int i; + t_int x, y, z; + + if( b == 0 ) + return( POLARSSL_ERR_MPI_DIVISION_BY_ZERO ); + + if( b < 0 ) + b = -b; + + /* + * handle trivial cases + */ + if( b == 1 ) + { + *r = 0; + return( 0 ); + } + + if( b == 2 ) + { + *r = A->p[0] & 1; + return( 0 ); + } + + /* + * general case + */ + for( i = A->n - 1, y = 0; i >= 0; i-- ) + { + x = A->p[i]; + y = ( y << biH ) | ( x >> biH ); + z = y / b; + y -= z * b; + + x <<= biH; + y = ( y << biH ) | ( x >> biH ); + z = y / b; + y -= z * b; + } + + *r = y; + + return( 0 ); +} + +/* + * Fast Montgomery initialization (thanks to Tom St Denis) + */ +static void mpi_montg_init( t_int *mm, mpi *N ) +{ + t_int x, m0 = N->p[0]; + + x = m0; + x += ( ( m0 + 2 ) & 4 ) << 1; + x *= ( 2 - ( m0 * x ) ); + + if( biL >= 16 ) x *= ( 2 - ( m0 * x ) ); + if( biL >= 32 ) x *= ( 2 - ( m0 * x ) ); + if( biL >= 64 ) x *= ( 2 - ( m0 * x ) ); + + *mm = ~x + 1; +} + +/* + * Montgomery multiplication: A = A * B * R^-1 mod N (HAC 14.36) + */ +static void mpi_montmul( mpi *A, mpi *B, mpi *N, t_int mm, mpi *T ) +{ + int i, n, m; + t_int u0, u1, *d; + + memset( T->p, 0, T->n * ciL ); + + d = T->p; + n = N->n; + m = ( B->n < n ) ? B->n : n; + + for( i = 0; i < n; i++ ) + { + /* + * T = (T + u0*B + u1*N) / 2^biL + */ + u0 = A->p[i]; + u1 = ( d[0] + u0 * B->p[0] ) * mm; + + mpi_mul_hlp( m, B->p, d, u0 ); + mpi_mul_hlp( n, N->p, d, u1 ); + + *d++ = u0; d[n + 1] = 0; + } + + memcpy( A->p, d, (n + 1) * ciL ); + + if( mpi_cmp_abs( A, N ) >= 0 ) + mpi_sub_hlp( n, N->p, A->p ); + else + /* prevent timing attacks */ + mpi_sub_hlp( n, A->p, T->p ); +} + +/* + * Montgomery reduction: A = A * R^-1 mod N + */ +static void mpi_montred( mpi *A, mpi *N, t_int mm, mpi *T ) +{ + t_int z = 1; + mpi U; + + U.n = U.s = z; + U.p = &z; + + mpi_montmul( A, &U, N, mm, T ); +} + +/* + * Sliding-window exponentiation: X = A^E mod N (HAC 14.85) + */ +int mpi_exp_mod( mpi *X, mpi *A, mpi *E, mpi *N, mpi *_RR ) +{ + int ret, i, j, wsize, wbits; + int bufsize, nblimbs, nbits; + t_int ei, mm, state; + mpi RR, T, W[64]; + + if( mpi_cmp_int( N, 0 ) < 0 || ( N->p[0] & 1 ) == 0 ) + return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); + + /* + * Init temps and window size + */ + mpi_montg_init( &mm, N ); + mpi_init( &RR, &T, NULL ); + memset( W, 0, sizeof( W ) ); + + i = mpi_msb( E ); + + wsize = ( i > 671 ) ? 6 : ( i > 239 ) ? 5 : + ( i > 79 ) ? 4 : ( i > 23 ) ? 3 : 1; + + j = N->n + 1; + MPI_CHK( mpi_grow( X, j ) ); + MPI_CHK( mpi_grow( &W[1], j ) ); + MPI_CHK( mpi_grow( &T, j * 2 ) ); + + /* + * If 1st call, pre-compute R^2 mod N + */ + if( _RR == NULL || _RR->p == NULL ) + { + MPI_CHK( mpi_lset( &RR, 1 ) ); + MPI_CHK( mpi_shift_l( &RR, N->n * 2 * biL ) ); + MPI_CHK( mpi_mod_mpi( &RR, &RR, N ) ); + + if( _RR != NULL ) + memcpy( _RR, &RR, sizeof( mpi ) ); + } + else + memcpy( &RR, _RR, sizeof( mpi ) ); + + /* + * W[1] = A * R^2 * R^-1 mod N = A * R mod N + */ + if( mpi_cmp_mpi( A, N ) >= 0 ) + mpi_mod_mpi( &W[1], A, N ); + else mpi_copy( &W[1], A ); + + mpi_montmul( &W[1], &RR, N, mm, &T ); + + /* + * X = R^2 * R^-1 mod N = R mod N + */ + MPI_CHK( mpi_copy( X, &RR ) ); + mpi_montred( X, N, mm, &T ); + + if( wsize > 1 ) + { + /* + * W[1 << (wsize - 1)] = W[1] ^ (wsize - 1) + */ + j = 1 << (wsize - 1); + + MPI_CHK( mpi_grow( &W[j], N->n + 1 ) ); + MPI_CHK( mpi_copy( &W[j], &W[1] ) ); + + for( i = 0; i < wsize - 1; i++ ) + mpi_montmul( &W[j], &W[j], N, mm, &T ); + + /* + * W[i] = W[i - 1] * W[1] + */ + for( i = j + 1; i < (1 << wsize); i++ ) + { + MPI_CHK( mpi_grow( &W[i], N->n + 1 ) ); + MPI_CHK( mpi_copy( &W[i], &W[i - 1] ) ); + + mpi_montmul( &W[i], &W[1], N, mm, &T ); + } + } + + nblimbs = E->n; + bufsize = 0; + nbits = 0; + wbits = 0; + state = 0; + + while( 1 ) + { + if( bufsize == 0 ) + { + if( nblimbs-- == 0 ) + break; + + bufsize = sizeof( t_int ) << 3; + } + + bufsize--; + + ei = (E->p[nblimbs] >> bufsize) & 1; + + /* + * skip leading 0s + */ + if( ei == 0 && state == 0 ) + continue; + + if( ei == 0 && state == 1 ) + { + /* + * out of window, square X + */ + mpi_montmul( X, X, N, mm, &T ); + continue; + } + + /* + * add ei to current window + */ + state = 2; + + nbits++; + wbits |= (ei << (wsize - nbits)); + + if( nbits == wsize ) + { + /* + * X = X^wsize R^-1 mod N + */ + for( i = 0; i < wsize; i++ ) + mpi_montmul( X, X, N, mm, &T ); + + /* + * X = X * W[wbits] R^-1 mod N + */ + mpi_montmul( X, &W[wbits], N, mm, &T ); + + state--; + nbits = 0; + wbits = 0; + } + } + + /* + * process the remaining bits + */ + for( i = 0; i < nbits; i++ ) + { + mpi_montmul( X, X, N, mm, &T ); + + wbits <<= 1; + + if( (wbits & (1 << wsize)) != 0 ) + mpi_montmul( X, &W[1], N, mm, &T ); + } + + /* + * X = A^E * R * R^-1 mod N = A^E mod N + */ + mpi_montred( X, N, mm, &T ); + +cleanup: + + for( i = (1 << (wsize - 1)); i < (1 << wsize); i++ ) + mpi_free( &W[i], NULL ); + + if( _RR != NULL ) + mpi_free( &W[1], &T, NULL ); + else mpi_free( &W[1], &T, &RR, NULL ); + + return( ret ); +} + +/* + * Greatest common divisor: G = gcd(A, B) (HAC 14.54) + */ +int mpi_gcd( mpi *G, mpi *A, mpi *B ) +{ + int ret, lz, lzt; + mpi TG, TA, TB; + + mpi_init( &TG, &TA, &TB, NULL ); + + MPI_CHK( mpi_copy( &TA, A ) ); + MPI_CHK( mpi_copy( &TB, B ) ); + + lz = mpi_lsb( &TA ); + lzt = mpi_lsb( &TB ); + + if ( lzt < lz ) + lz = lzt; + + MPI_CHK( mpi_shift_r( &TA, lz ) ); + MPI_CHK( mpi_shift_r( &TB, lz ) ); + + TA.s = TB.s = 1; + + while( mpi_cmp_int( &TA, 0 ) != 0 ) + { + MPI_CHK( mpi_shift_r( &TA, mpi_lsb( &TA ) ) ); + MPI_CHK( mpi_shift_r( &TB, mpi_lsb( &TB ) ) ); + + if( mpi_cmp_mpi( &TA, &TB ) >= 0 ) + { + MPI_CHK( mpi_sub_abs( &TA, &TA, &TB ) ); + MPI_CHK( mpi_shift_r( &TA, 1 ) ); + } + else + { + MPI_CHK( mpi_sub_abs( &TB, &TB, &TA ) ); + MPI_CHK( mpi_shift_r( &TB, 1 ) ); + } + } + + MPI_CHK( mpi_shift_l( &TB, lz ) ); + MPI_CHK( mpi_copy( G, &TB ) ); + +cleanup: + + mpi_free( &TB, &TA, &TG, NULL ); + + return( ret ); +} + +#if defined(POLARSSL_GENPRIME) + +/* + * Modular inverse: X = A^-1 mod N (HAC 14.61 / 14.64) + */ +int mpi_inv_mod( mpi *X, mpi *A, mpi *N ) +{ + int ret; + mpi G, TA, TU, U1, U2, TB, TV, V1, V2; + + if( mpi_cmp_int( N, 0 ) <= 0 ) + return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); + + mpi_init( &TA, &TU, &U1, &U2, &G, + &TB, &TV, &V1, &V2, NULL ); + + MPI_CHK( mpi_gcd( &G, A, N ) ); + + if( mpi_cmp_int( &G, 1 ) != 0 ) + { + ret = POLARSSL_ERR_MPI_NOT_ACCEPTABLE; + goto cleanup; + } + + MPI_CHK( mpi_mod_mpi( &TA, A, N ) ); + MPI_CHK( mpi_copy( &TU, &TA ) ); + MPI_CHK( mpi_copy( &TB, N ) ); + MPI_CHK( mpi_copy( &TV, N ) ); + + MPI_CHK( mpi_lset( &U1, 1 ) ); + MPI_CHK( mpi_lset( &U2, 0 ) ); + MPI_CHK( mpi_lset( &V1, 0 ) ); + MPI_CHK( mpi_lset( &V2, 1 ) ); + + do + { + while( ( TU.p[0] & 1 ) == 0 ) + { + MPI_CHK( mpi_shift_r( &TU, 1 ) ); + + if( ( U1.p[0] & 1 ) != 0 || ( U2.p[0] & 1 ) != 0 ) + { + MPI_CHK( mpi_add_mpi( &U1, &U1, &TB ) ); + MPI_CHK( mpi_sub_mpi( &U2, &U2, &TA ) ); + } + + MPI_CHK( mpi_shift_r( &U1, 1 ) ); + MPI_CHK( mpi_shift_r( &U2, 1 ) ); + } + + while( ( TV.p[0] & 1 ) == 0 ) + { + MPI_CHK( mpi_shift_r( &TV, 1 ) ); + + if( ( V1.p[0] & 1 ) != 0 || ( V2.p[0] & 1 ) != 0 ) + { + MPI_CHK( mpi_add_mpi( &V1, &V1, &TB ) ); + MPI_CHK( mpi_sub_mpi( &V2, &V2, &TA ) ); + } + + MPI_CHK( mpi_shift_r( &V1, 1 ) ); + MPI_CHK( mpi_shift_r( &V2, 1 ) ); + } + + if( mpi_cmp_mpi( &TU, &TV ) >= 0 ) + { + MPI_CHK( mpi_sub_mpi( &TU, &TU, &TV ) ); + MPI_CHK( mpi_sub_mpi( &U1, &U1, &V1 ) ); + MPI_CHK( mpi_sub_mpi( &U2, &U2, &V2 ) ); + } + else + { + MPI_CHK( mpi_sub_mpi( &TV, &TV, &TU ) ); + MPI_CHK( mpi_sub_mpi( &V1, &V1, &U1 ) ); + MPI_CHK( mpi_sub_mpi( &V2, &V2, &U2 ) ); + } + } + while( mpi_cmp_int( &TU, 0 ) != 0 ); + + while( mpi_cmp_int( &V1, 0 ) < 0 ) + MPI_CHK( mpi_add_mpi( &V1, &V1, N ) ); + + while( mpi_cmp_mpi( &V1, N ) >= 0 ) + MPI_CHK( mpi_sub_mpi( &V1, &V1, N ) ); + + MPI_CHK( mpi_copy( X, &V1 ) ); + +cleanup: + + mpi_free( &V2, &V1, &TV, &TB, &G, + &U2, &U1, &TU, &TA, NULL ); + + return( ret ); +} + +static const int small_prime[] = +{ + 3, 5, 7, 11, 13, 17, 19, 23, + 29, 31, 37, 41, 43, 47, 53, 59, + 61, 67, 71, 73, 79, 83, 89, 97, + 101, 103, 107, 109, 113, 127, 131, 137, + 139, 149, 151, 157, 163, 167, 173, 179, + 181, 191, 193, 197, 199, 211, 223, 227, + 229, 233, 239, 241, 251, 257, 263, 269, + 271, 277, 281, 283, 293, 307, 311, 313, + 317, 331, 337, 347, 349, 353, 359, 367, + 373, 379, 383, 389, 397, 401, 409, 419, + 421, 431, 433, 439, 443, 449, 457, 461, + 463, 467, 479, 487, 491, 499, 503, 509, + 521, 523, 541, 547, 557, 563, 569, 571, + 577, 587, 593, 599, 601, 607, 613, 617, + 619, 631, 641, 643, 647, 653, 659, 661, + 673, 677, 683, 691, 701, 709, 719, 727, + 733, 739, 743, 751, 757, 761, 769, 773, + 787, 797, 809, 811, 821, 823, 827, 829, + 839, 853, 857, 859, 863, 877, 881, 883, + 887, 907, 911, 919, 929, 937, 941, 947, + 953, 967, 971, 977, 983, 991, 997, -103 +}; + +/* + * Miller-Rabin primality test (HAC 4.24) + */ +int mpi_is_prime( mpi *X, int (*f_rng)(void *), void *p_rng ) +{ + int ret, i, j, n, s, xs; + mpi W, R, T, A, RR; + unsigned char *p; + + if( mpi_cmp_int( X, 0 ) == 0 ) + return( 0 ); + + mpi_init( &W, &R, &T, &A, &RR, NULL ); + + xs = X->s; X->s = 1; + + /* + * test trivial factors first + */ + if( ( X->p[0] & 1 ) == 0 ) + return( POLARSSL_ERR_MPI_NOT_ACCEPTABLE ); + + for( i = 0; small_prime[i] > 0; i++ ) + { + t_int r; + + if( mpi_cmp_int( X, small_prime[i] ) <= 0 ) + return( 0 ); + + MPI_CHK( mpi_mod_int( &r, X, small_prime[i] ) ); + + if( r == 0 ) + return( POLARSSL_ERR_MPI_NOT_ACCEPTABLE ); + } + + /* + * W = |X| - 1 + * R = W >> lsb( W ) + */ + s = mpi_lsb( &W ); + MPI_CHK( mpi_sub_int( &W, X, 1 ) ); + MPI_CHK( mpi_copy( &R, &W ) ); + MPI_CHK( mpi_shift_r( &R, s ) ); + + i = mpi_msb( X ); + /* + * HAC, table 4.4 + */ + n = ( ( i >= 1300 ) ? 2 : ( i >= 850 ) ? 3 : + ( i >= 650 ) ? 4 : ( i >= 350 ) ? 8 : + ( i >= 250 ) ? 12 : ( i >= 150 ) ? 18 : 27 ); + + for( i = 0; i < n; i++ ) + { + /* + * pick a random A, 1 < A < |X| - 1 + */ + MPI_CHK( mpi_grow( &A, X->n ) ); + + p = (unsigned char *) A.p; + for( j = 0; j < A.n * ciL; j++ ) + *p++ = (unsigned char) f_rng( p_rng ); + + j = mpi_msb( &A ) - mpi_msb( &W ); + MPI_CHK( mpi_shift_r( &A, j + 1 ) ); + A.p[0] |= 3; + + /* + * A = A^R mod |X| + */ + MPI_CHK( mpi_exp_mod( &A, &A, &R, X, &RR ) ); + + if( mpi_cmp_mpi( &A, &W ) == 0 || + mpi_cmp_int( &A, 1 ) == 0 ) + continue; + + j = 1; + while( j < s && mpi_cmp_mpi( &A, &W ) != 0 ) + { + /* + * A = A * A mod |X| + */ + MPI_CHK( mpi_mul_mpi( &T, &A, &A ) ); + MPI_CHK( mpi_mod_mpi( &A, &T, X ) ); + + if( mpi_cmp_int( &A, 1 ) == 0 ) + break; + + j++; + } + + /* + * not prime if A != |X| - 1 or A == 1 + */ + if( mpi_cmp_mpi( &A, &W ) != 0 || + mpi_cmp_int( &A, 1 ) == 0 ) + { + ret = POLARSSL_ERR_MPI_NOT_ACCEPTABLE; + break; + } + } + +cleanup: + + X->s = xs; + + mpi_free( &RR, &A, &T, &R, &W, NULL ); + + return( ret ); +} + +/* + * Prime number generation + */ +int mpi_gen_prime( mpi *X, int nbits, int dh_flag, + int (*f_rng)(void *), void *p_rng ) +{ + int ret, k, n; + unsigned char *p; + mpi Y; + + if( nbits < 3 ) + return( POLARSSL_ERR_MPI_BAD_INPUT_DATA ); + + mpi_init( &Y, NULL ); + + n = BITS_TO_LIMBS( nbits ); + + MPI_CHK( mpi_grow( X, n ) ); + MPI_CHK( mpi_lset( X, 0 ) ); + + p = (unsigned char *) X->p; + for( k = 0; k < X->n * ciL; k++ ) + *p++ = (unsigned char) f_rng( p_rng ); + + k = mpi_msb( X ); + if( k < nbits ) MPI_CHK( mpi_shift_l( X, nbits - k ) ); + if( k > nbits ) MPI_CHK( mpi_shift_r( X, k - nbits ) ); + + X->p[0] |= 3; + + if( dh_flag == 0 ) + { + while( ( ret = mpi_is_prime( X, f_rng, p_rng ) ) != 0 ) + { + if( ret != POLARSSL_ERR_MPI_NOT_ACCEPTABLE ) + goto cleanup; + + MPI_CHK( mpi_add_int( X, X, 2 ) ); + } + } + else + { + MPI_CHK( mpi_sub_int( &Y, X, 1 ) ); + MPI_CHK( mpi_shift_r( &Y, 1 ) ); + + while( 1 ) + { + if( ( ret = mpi_is_prime( X, f_rng, p_rng ) ) == 0 ) + { + if( ( ret = mpi_is_prime( &Y, f_rng, p_rng ) ) == 0 ) + break; + + if( ret != POLARSSL_ERR_MPI_NOT_ACCEPTABLE ) + goto cleanup; + } + + if( ret != POLARSSL_ERR_MPI_NOT_ACCEPTABLE ) + goto cleanup; + + MPI_CHK( mpi_add_int( &Y, X, 1 ) ); + MPI_CHK( mpi_add_int( X, X, 2 ) ); + MPI_CHK( mpi_shift_r( &Y, 1 ) ); + } + } + +cleanup: + + mpi_free( &Y, NULL ); + + return( ret ); +} + +#endif + +#if defined(POLARSSL_SELF_TEST) + +#define GCD_PAIR_COUNT 3 + +static const int gcd_pairs[GCD_PAIR_COUNT][3] = +{ + { 693, 609, 21 }, + { 1764, 868, 28 }, + { 768454923, 542167814, 1 } +}; + +/* + * Checkup routine + */ +int mpi_self_test( int verbose ) +{ + int ret, i; + mpi A, E, N, X, Y, U, V; + + mpi_init( &A, &E, &N, &X, &Y, &U, &V, NULL ); + + MPI_CHK( mpi_read_string( &A, 16, + "EFE021C2645FD1DC586E69184AF4A31E" \ + "D5F53E93B5F123FA41680867BA110131" \ + "944FE7952E2517337780CB0DB80E61AA" \ + "E7C8DDC6C5C6AADEB34EB38A2F40D5E6" ) ); + + MPI_CHK( mpi_read_string( &E, 16, + "B2E7EFD37075B9F03FF989C7C5051C20" \ + "34D2A323810251127E7BF8625A4F49A5" \ + "F3E27F4DA8BD59C47D6DAABA4C8127BD" \ + "5B5C25763222FEFCCFC38B832366C29E" ) ); + + MPI_CHK( mpi_read_string( &N, 16, + "0066A198186C18C10B2F5ED9B522752A" \ + "9830B69916E535C8F047518A889A43A5" \ + "94B6BED27A168D31D4A52F88925AA8F5" ) ); + + MPI_CHK( mpi_mul_mpi( &X, &A, &N ) ); + + MPI_CHK( mpi_read_string( &U, 16, + "602AB7ECA597A3D6B56FF9829A5E8B85" \ + "9E857EA95A03512E2BAE7391688D264A" \ + "A5663B0341DB9CCFD2C4C5F421FEC814" \ + "8001B72E848A38CAE1C65F78E56ABDEF" \ + "E12D3C039B8A02D6BE593F0BBBDA56F1" \ + "ECF677152EF804370C1A305CAF3B5BF1" \ + "30879B56C61DE584A0F53A2447A51E" ) ); + + if( verbose != 0 ) + printf( " MPI test #1 (mul_mpi): " ); + + if( mpi_cmp_mpi( &X, &U ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + printf( "passed\n" ); + + MPI_CHK( mpi_div_mpi( &X, &Y, &A, &N ) ); + + MPI_CHK( mpi_read_string( &U, 16, + "256567336059E52CAE22925474705F39A94" ) ); + + MPI_CHK( mpi_read_string( &V, 16, + "6613F26162223DF488E9CD48CC132C7A" \ + "0AC93C701B001B092E4E5B9F73BCD27B" \ + "9EE50D0657C77F374E903CDFA4C642" ) ); + + if( verbose != 0 ) + printf( " MPI test #2 (div_mpi): " ); + + if( mpi_cmp_mpi( &X, &U ) != 0 || + mpi_cmp_mpi( &Y, &V ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + printf( "passed\n" ); + + MPI_CHK( mpi_exp_mod( &X, &A, &E, &N, NULL ) ); + + MPI_CHK( mpi_read_string( &U, 16, + "36E139AEA55215609D2816998ED020BB" \ + "BD96C37890F65171D948E9BC7CBAA4D9" \ + "325D24D6A3C12710F10A09FA08AB87" ) ); + + if( verbose != 0 ) + printf( " MPI test #3 (exp_mod): " ); + + if( mpi_cmp_mpi( &X, &U ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + printf( "passed\n" ); + + MPI_CHK( mpi_inv_mod( &X, &A, &N ) ); + + MPI_CHK( mpi_read_string( &U, 16, + "003A0AAEDD7E784FC07D8F9EC6E3BFD5" \ + "C3DBA76456363A10869622EAC2DD84EC" \ + "C5B8A74DAC4D09E03B5E0BE779F2DF61" ) ); + + if( verbose != 0 ) + printf( " MPI test #4 (inv_mod): " ); + + if( mpi_cmp_mpi( &X, &U ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + printf( "passed\n" ); + + if( verbose != 0 ) + printf( " MPI test #5 (simple gcd): " ); + + for ( i = 0; i < GCD_PAIR_COUNT; i++) + { + MPI_CHK( mpi_lset( &X, gcd_pairs[i][0] ) ); + MPI_CHK( mpi_lset( &Y, gcd_pairs[i][1] ) ); + + MPI_CHK( mpi_gcd( &A, &X, &Y ) ); + + if( mpi_cmp_int( &A, gcd_pairs[i][2] ) != 0 ) + { + if( verbose != 0 ) + printf( "failed at %d\n", i ); + + return( 1 ); + } + } + + if( verbose != 0 ) + printf( "passed\n" ); + +cleanup: + + if( ret != 0 && verbose != 0 ) + printf( "Unexpected error, return code = %08X\n", ret ); + + mpi_free( &V, &U, &Y, &X, &N, &E, &A, NULL ); + + if( verbose != 0 ) + printf( "\n" ); + + return( ret ); +} + +#endif + +#endif diff --git a/feeds/luci/libs/luci-lib-px5g/src/library/havege.c b/feeds/luci/libs/luci-lib-px5g/src/library/havege.c new file mode 100644 index 0000000..266299d --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/library/havege.c @@ -0,0 +1,276 @@ +/* + * HAVEGE: HArdware Volatile Entropy Gathering and Expansion + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * The HAVEGE RNG was designed by Andre Seznec in 2002. + * + * http://www.irisa.fr/caps/projects/hipsor/publi.php + * + * Contact: seznec(at)irisa_dot_fr - orocheco(at)irisa_dot_fr + */ + +#include +#include + +#include "polarssl/config.h" + +#if defined(POLARSSL_HAVEGE_C) + +#include "polarssl/havege.h" +#include "polarssl/timing.h" + +/* ------------------------------------------------------------------------ + * On average, one iteration accesses two 8-word blocks in the havege WALK + * table, and generates 16 words in the RES array. + * + * The data read in the WALK table is updated and permuted after each use. + * The result of the hardware clock counter read is used for this update. + * + * 25 conditional tests are present. The conditional tests are grouped in + * two nested groups of 12 conditional tests and 1 test that controls the + * permutation; on average, there should be 6 tests executed and 3 of them + * should be mispredicted. + * ------------------------------------------------------------------------ + */ + +#define SWAP(X,Y) { int *T = X; X = Y; Y = T; } + +#define TST1_ENTER if( PTEST & 1 ) { PTEST ^= 3; PTEST >>= 1; +#define TST2_ENTER if( PTEST & 1 ) { PTEST ^= 3; PTEST >>= 1; + +#define TST1_LEAVE U1++; } +#define TST2_LEAVE U2++; } + +#define ONE_ITERATION \ + \ + PTEST = PT1 >> 20; \ + \ + TST1_ENTER TST1_ENTER TST1_ENTER TST1_ENTER \ + TST1_ENTER TST1_ENTER TST1_ENTER TST1_ENTER \ + TST1_ENTER TST1_ENTER TST1_ENTER TST1_ENTER \ + \ + TST1_LEAVE TST1_LEAVE TST1_LEAVE TST1_LEAVE \ + TST1_LEAVE TST1_LEAVE TST1_LEAVE TST1_LEAVE \ + TST1_LEAVE TST1_LEAVE TST1_LEAVE TST1_LEAVE \ + \ + PTX = (PT1 >> 18) & 7; \ + PT1 &= 0x1FFF; \ + PT2 &= 0x1FFF; \ + CLK = (int) hardclock(); \ + \ + i = 0; \ + A = &WALK[PT1 ]; RES[i++] ^= *A; \ + B = &WALK[PT2 ]; RES[i++] ^= *B; \ + C = &WALK[PT1 ^ 1]; RES[i++] ^= *C; \ + D = &WALK[PT2 ^ 4]; RES[i++] ^= *D; \ + \ + IN = (*A >> (1)) ^ (*A << (31)) ^ CLK; \ + *A = (*B >> (2)) ^ (*B << (30)) ^ CLK; \ + *B = IN ^ U1; \ + *C = (*C >> (3)) ^ (*C << (29)) ^ CLK; \ + *D = (*D >> (4)) ^ (*D << (28)) ^ CLK; \ + \ + A = &WALK[PT1 ^ 2]; RES[i++] ^= *A; \ + B = &WALK[PT2 ^ 2]; RES[i++] ^= *B; \ + C = &WALK[PT1 ^ 3]; RES[i++] ^= *C; \ + D = &WALK[PT2 ^ 6]; RES[i++] ^= *D; \ + \ + if( PTEST & 1 ) SWAP( A, C ); \ + \ + IN = (*A >> (5)) ^ (*A << (27)) ^ CLK; \ + *A = (*B >> (6)) ^ (*B << (26)) ^ CLK; \ + *B = IN; CLK = (int) hardclock(); \ + *C = (*C >> (7)) ^ (*C << (25)) ^ CLK; \ + *D = (*D >> (8)) ^ (*D << (24)) ^ CLK; \ + \ + A = &WALK[PT1 ^ 4]; \ + B = &WALK[PT2 ^ 1]; \ + \ + PTEST = PT2 >> 1; \ + \ + PT2 = (RES[(i - 8) ^ PTY] ^ WALK[PT2 ^ PTY ^ 7]); \ + PT2 = ((PT2 & 0x1FFF) & (~8)) ^ ((PT1 ^ 8) & 0x8); \ + PTY = (PT2 >> 10) & 7; \ + \ + TST2_ENTER TST2_ENTER TST2_ENTER TST2_ENTER \ + TST2_ENTER TST2_ENTER TST2_ENTER TST2_ENTER \ + TST2_ENTER TST2_ENTER TST2_ENTER TST2_ENTER \ + \ + TST2_LEAVE TST2_LEAVE TST2_LEAVE TST2_LEAVE \ + TST2_LEAVE TST2_LEAVE TST2_LEAVE TST2_LEAVE \ + TST2_LEAVE TST2_LEAVE TST2_LEAVE TST2_LEAVE \ + \ + C = &WALK[PT1 ^ 5]; \ + D = &WALK[PT2 ^ 5]; \ + \ + RES[i++] ^= *A; \ + RES[i++] ^= *B; \ + RES[i++] ^= *C; \ + RES[i++] ^= *D; \ + \ + IN = (*A >> ( 9)) ^ (*A << (23)) ^ CLK; \ + *A = (*B >> (10)) ^ (*B << (22)) ^ CLK; \ + *B = IN ^ U2; \ + *C = (*C >> (11)) ^ (*C << (21)) ^ CLK; \ + *D = (*D >> (12)) ^ (*D << (20)) ^ CLK; \ + \ + A = &WALK[PT1 ^ 6]; RES[i++] ^= *A; \ + B = &WALK[PT2 ^ 3]; RES[i++] ^= *B; \ + C = &WALK[PT1 ^ 7]; RES[i++] ^= *C; \ + D = &WALK[PT2 ^ 7]; RES[i++] ^= *D; \ + \ + IN = (*A >> (13)) ^ (*A << (19)) ^ CLK; \ + *A = (*B >> (14)) ^ (*B << (18)) ^ CLK; \ + *B = IN; \ + *C = (*C >> (15)) ^ (*C << (17)) ^ CLK; \ + *D = (*D >> (16)) ^ (*D << (16)) ^ CLK; \ + \ + PT1 = ( RES[(i - 8) ^ PTX] ^ \ + WALK[PT1 ^ PTX ^ 7] ) & (~1); \ + PT1 ^= (PT2 ^ 0x10) & 0x10; \ + \ + for( n++, i = 0; i < 16; i++ ) \ + hs->pool[n % COLLECT_SIZE] ^= RES[i]; + +/* + * Entropy gathering function + */ +static void havege_fill( havege_state *hs ) +{ + int i, n = 0; + int U1, U2, *A, *B, *C, *D; + int PT1, PT2, *WALK, RES[16]; + int PTX, PTY, CLK, PTEST, IN; + + WALK = hs->WALK; + PT1 = hs->PT1; + PT2 = hs->PT2; + + PTX = U1 = 0; + PTY = U2 = 0; + + memset( RES, 0, sizeof( RES ) ); + + while( n < COLLECT_SIZE * 4 ) + { + ONE_ITERATION + ONE_ITERATION + ONE_ITERATION + ONE_ITERATION + } + + hs->PT1 = PT1; + hs->PT2 = PT2; + + hs->offset[0] = 0; + hs->offset[1] = COLLECT_SIZE / 2; +} + +/* + * HAVEGE initialization + */ +void havege_init( havege_state *hs ) +{ + memset( hs, 0, sizeof( havege_state ) ); + + havege_fill( hs ); +} + +/* + * HAVEGE rand function + */ +int havege_rand( void *p_rng ) +{ + int ret; + havege_state *hs = (havege_state *) p_rng; + + if( hs->offset[1] >= COLLECT_SIZE ) + havege_fill( hs ); + + ret = hs->pool[hs->offset[0]++]; + ret ^= hs->pool[hs->offset[1]++]; + + return( ret ); +} + +#if defined(POLARSSL_RAND_TEST) + +#include + +int main( int argc, char *argv[] ) +{ + FILE *f; + time_t t; + int i, j, k; + havege_state hs; + unsigned char buf[1024]; + + if( argc < 2 ) + { + fprintf( stderr, "usage: %s \n", argv[0] ); + return( 1 ); + } + + if( ( f = fopen( argv[1], "wb+" ) ) == NULL ) + { + printf( "failed to open '%s' for writing.\n", argv[0] ); + return( 1 ); + } + + havege_init( &hs ); + + t = time( NULL ); + + for( i = 0, k = 32768; i < k; i++ ) + { + for( j = 0; j < sizeof( buf ); j++ ) + buf[j] = havege_rand( &hs ); + + fwrite( buf, sizeof( buf ), 1, f ); + + printf( "Generating 32Mb of data in file '%s'... %04.1f" \ + "%% done\r", argv[1], (100 * (float) (i + 1)) / k ); + fflush( stdout ); + } + + if( t == time( NULL ) ) + t--; + + fclose( f ); + return( 0 ); +} + +#endif + +#endif diff --git a/feeds/luci/libs/luci-lib-px5g/src/library/rsa.c b/feeds/luci/libs/luci-lib-px5g/src/library/rsa.c new file mode 100644 index 0000000..131b6c6 --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/library/rsa.c @@ -0,0 +1,750 @@ +/* + * The RSA public-key cryptosystem + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * RSA was designed by Ron Rivest, Adi Shamir and Len Adleman. + * + * http://theory.lcs.mit.edu/~rivest/rsapaper.pdf + * http://www.cacr.math.uwaterloo.ca/hac/about/chap8.pdf + */ + +#include "polarssl/config.h" + +#if defined(POLARSSL_RSA_C) + +#include "polarssl/rsa.h" + +#include +#include +#include + +/* + * Initialize an RSA context + */ +void rsa_init( rsa_context *ctx, + int padding, + int hash_id, + int (*f_rng)(void *), + void *p_rng ) +{ + memset( ctx, 0, sizeof( rsa_context ) ); + + ctx->padding = padding; + ctx->hash_id = hash_id; + + ctx->f_rng = f_rng; + ctx->p_rng = p_rng; +} + +#if defined(POLARSSL_GENPRIME) + +/* + * Generate an RSA keypair + */ +int rsa_gen_key( rsa_context *ctx, int nbits, int exponent ) +{ + int ret; + mpi P1, Q1, H, G; + + if( ctx->f_rng == NULL || nbits < 128 || exponent < 3 ) + return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); + + mpi_init( &P1, &Q1, &H, &G, NULL ); + + /* + * find primes P and Q with Q < P so that: + * GCD( E, (P-1)*(Q-1) ) == 1 + */ + MPI_CHK( mpi_lset( &ctx->E, exponent ) ); + + do + { + MPI_CHK( mpi_gen_prime( &ctx->P, ( nbits + 1 ) >> 1, 0, + ctx->f_rng, ctx->p_rng ) ); + + MPI_CHK( mpi_gen_prime( &ctx->Q, ( nbits + 1 ) >> 1, 0, + ctx->f_rng, ctx->p_rng ) ); + + if( mpi_cmp_mpi( &ctx->P, &ctx->Q ) < 0 ) + mpi_swap( &ctx->P, &ctx->Q ); + + if( mpi_cmp_mpi( &ctx->P, &ctx->Q ) == 0 ) + continue; + + MPI_CHK( mpi_mul_mpi( &ctx->N, &ctx->P, &ctx->Q ) ); + if( mpi_msb( &ctx->N ) != nbits ) + continue; + + MPI_CHK( mpi_sub_int( &P1, &ctx->P, 1 ) ); + MPI_CHK( mpi_sub_int( &Q1, &ctx->Q, 1 ) ); + MPI_CHK( mpi_mul_mpi( &H, &P1, &Q1 ) ); + MPI_CHK( mpi_gcd( &G, &ctx->E, &H ) ); + } + while( mpi_cmp_int( &G, 1 ) != 0 ); + + /* + * D = E^-1 mod ((P-1)*(Q-1)) + * DP = D mod (P - 1) + * DQ = D mod (Q - 1) + * QP = Q^-1 mod P + */ + MPI_CHK( mpi_inv_mod( &ctx->D , &ctx->E, &H ) ); + MPI_CHK( mpi_mod_mpi( &ctx->DP, &ctx->D, &P1 ) ); + MPI_CHK( mpi_mod_mpi( &ctx->DQ, &ctx->D, &Q1 ) ); + MPI_CHK( mpi_inv_mod( &ctx->QP, &ctx->Q, &ctx->P ) ); + + ctx->len = ( mpi_msb( &ctx->N ) + 7 ) >> 3; + +cleanup: + + mpi_free( &G, &H, &Q1, &P1, NULL ); + + if( ret != 0 ) + { + rsa_free( ctx ); + return( POLARSSL_ERR_RSA_KEY_GEN_FAILED | ret ); + } + + return( 0 ); +} + +#endif + +/* + * Check a public RSA key + */ +int rsa_check_pubkey( rsa_context *ctx ) +{ + if( ( ctx->N.p[0] & 1 ) == 0 || + ( ctx->E.p[0] & 1 ) == 0 ) + return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); + + if( mpi_msb( &ctx->N ) < 128 || + mpi_msb( &ctx->N ) > 4096 ) + return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); + + if( mpi_msb( &ctx->E ) < 2 || + mpi_msb( &ctx->E ) > 64 ) + return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); + + return( 0 ); +} + +/* + * Check a private RSA key + */ +int rsa_check_privkey( rsa_context *ctx ) +{ + int ret; + mpi PQ, DE, P1, Q1, H, I, G; + + if( ( ret = rsa_check_pubkey( ctx ) ) != 0 ) + return( ret ); + + mpi_init( &PQ, &DE, &P1, &Q1, &H, &I, &G, NULL ); + + MPI_CHK( mpi_mul_mpi( &PQ, &ctx->P, &ctx->Q ) ); + MPI_CHK( mpi_mul_mpi( &DE, &ctx->D, &ctx->E ) ); + MPI_CHK( mpi_sub_int( &P1, &ctx->P, 1 ) ); + MPI_CHK( mpi_sub_int( &Q1, &ctx->Q, 1 ) ); + MPI_CHK( mpi_mul_mpi( &H, &P1, &Q1 ) ); + MPI_CHK( mpi_mod_mpi( &I, &DE, &H ) ); + MPI_CHK( mpi_gcd( &G, &ctx->E, &H ) ); + + if( mpi_cmp_mpi( &PQ, &ctx->N ) == 0 && + mpi_cmp_int( &I, 1 ) == 0 && + mpi_cmp_int( &G, 1 ) == 0 ) + { + mpi_free( &G, &I, &H, &Q1, &P1, &DE, &PQ, NULL ); + return( 0 ); + } + +cleanup: + + mpi_free( &G, &I, &H, &Q1, &P1, &DE, &PQ, NULL ); + return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED | ret ); +} + +/* + * Do an RSA public key operation + */ +int rsa_public( rsa_context *ctx, + unsigned char *input, + unsigned char *output ) +{ + int ret, olen; + mpi T; + + mpi_init( &T, NULL ); + + MPI_CHK( mpi_read_binary( &T, input, ctx->len ) ); + + if( mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) + { + mpi_free( &T, NULL ); + return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); + } + + olen = ctx->len; + MPI_CHK( mpi_exp_mod( &T, &T, &ctx->E, &ctx->N, &ctx->RN ) ); + MPI_CHK( mpi_write_binary( &T, output, olen ) ); + +cleanup: + + mpi_free( &T, NULL ); + + if( ret != 0 ) + return( POLARSSL_ERR_RSA_PUBLIC_FAILED | ret ); + + return( 0 ); +} + +/* + * Do an RSA private key operation + */ +int rsa_private( rsa_context *ctx, + unsigned char *input, + unsigned char *output ) +{ + int ret, olen; + mpi T, T1, T2; + + mpi_init( &T, &T1, &T2, NULL ); + + MPI_CHK( mpi_read_binary( &T, input, ctx->len ) ); + + if( mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) + { + mpi_free( &T, NULL ); + return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); + } + +#if 0 + MPI_CHK( mpi_exp_mod( &T, &T, &ctx->D, &ctx->N, &ctx->RN ) ); +#else + /* + * faster decryption using the CRT + * + * T1 = input ^ dP mod P + * T2 = input ^ dQ mod Q + */ + MPI_CHK( mpi_exp_mod( &T1, &T, &ctx->DP, &ctx->P, &ctx->RP ) ); + MPI_CHK( mpi_exp_mod( &T2, &T, &ctx->DQ, &ctx->Q, &ctx->RQ ) ); + + /* + * T = (T1 - T2) * (Q^-1 mod P) mod P + */ + MPI_CHK( mpi_sub_mpi( &T, &T1, &T2 ) ); + MPI_CHK( mpi_mul_mpi( &T1, &T, &ctx->QP ) ); + MPI_CHK( mpi_mod_mpi( &T, &T1, &ctx->P ) ); + + /* + * output = T2 + T * Q + */ + MPI_CHK( mpi_mul_mpi( &T1, &T, &ctx->Q ) ); + MPI_CHK( mpi_add_mpi( &T, &T2, &T1 ) ); +#endif + + olen = ctx->len; + MPI_CHK( mpi_write_binary( &T, output, olen ) ); + +cleanup: + + mpi_free( &T, &T1, &T2, NULL ); + + if( ret != 0 ) + return( POLARSSL_ERR_RSA_PRIVATE_FAILED | ret ); + + return( 0 ); +} + +/* + * Add the message padding, then do an RSA operation + */ +int rsa_pkcs1_encrypt( rsa_context *ctx, + int mode, int ilen, + unsigned char *input, + unsigned char *output ) +{ + int nb_pad, olen; + unsigned char *p = output; + + olen = ctx->len; + + switch( ctx->padding ) + { + case RSA_PKCS_V15: + + if( ilen < 0 || olen < ilen + 11 ) + return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); + + nb_pad = olen - 3 - ilen; + + *p++ = 0; + *p++ = RSA_CRYPT; + + while( nb_pad-- > 0 ) + { + do { + *p = (unsigned char) rand(); + } while( *p == 0 ); + p++; + } + *p++ = 0; + memcpy( p, input, ilen ); + break; + + default: + + return( POLARSSL_ERR_RSA_INVALID_PADDING ); + } + + return( ( mode == RSA_PUBLIC ) + ? rsa_public( ctx, output, output ) + : rsa_private( ctx, output, output ) ); +} + +/* + * Do an RSA operation, then remove the message padding + */ +int rsa_pkcs1_decrypt( rsa_context *ctx, + int mode, int *olen, + unsigned char *input, + unsigned char *output, + int output_max_len) +{ + int ret, ilen; + unsigned char *p; + unsigned char buf[512]; + + ilen = ctx->len; + + if( ilen < 16 || ilen > (int) sizeof( buf ) ) + return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); + + ret = ( mode == RSA_PUBLIC ) + ? rsa_public( ctx, input, buf ) + : rsa_private( ctx, input, buf ); + + if( ret != 0 ) + return( ret ); + + p = buf; + + switch( ctx->padding ) + { + case RSA_PKCS_V15: + + if( *p++ != 0 || *p++ != RSA_CRYPT ) + return( POLARSSL_ERR_RSA_INVALID_PADDING ); + + while( *p != 0 ) + { + if( p >= buf + ilen - 1 ) + return( POLARSSL_ERR_RSA_INVALID_PADDING ); + p++; + } + p++; + break; + + default: + + return( POLARSSL_ERR_RSA_INVALID_PADDING ); + } + + if (ilen - (int)(p - buf) > output_max_len) + return( POLARSSL_ERR_RSA_OUTPUT_TO_LARGE ); + + *olen = ilen - (int)(p - buf); + memcpy( output, p, *olen ); + + return( 0 ); +} + +/* + * Do an RSA operation to sign the message digest + */ +int rsa_pkcs1_sign( rsa_context *ctx, + int mode, + int hash_id, + int hashlen, + unsigned char *hash, + unsigned char *sig ) +{ + int nb_pad, olen; + unsigned char *p = sig; + + olen = ctx->len; + + switch( ctx->padding ) + { + case RSA_PKCS_V15: + + switch( hash_id ) + { + case RSA_RAW: + nb_pad = olen - 3 - hashlen; + break; + + case RSA_MD2: + case RSA_MD4: + case RSA_MD5: + nb_pad = olen - 3 - 34; + break; + + case RSA_SHA1: + nb_pad = olen - 3 - 35; + break; + + default: + return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); + } + + if( nb_pad < 8 ) + return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); + + *p++ = 0; + *p++ = RSA_SIGN; + memset( p, 0xFF, nb_pad ); + p += nb_pad; + *p++ = 0; + break; + + default: + + return( POLARSSL_ERR_RSA_INVALID_PADDING ); + } + + switch( hash_id ) + { + case RSA_RAW: + memcpy( p, hash, hashlen ); + break; + + case RSA_MD2: + memcpy( p, ASN1_HASH_MDX, 18 ); + memcpy( p + 18, hash, 16 ); + p[13] = 2; break; + + case RSA_MD4: + memcpy( p, ASN1_HASH_MDX, 18 ); + memcpy( p + 18, hash, 16 ); + p[13] = 4; break; + + case RSA_MD5: + memcpy( p, ASN1_HASH_MDX, 18 ); + memcpy( p + 18, hash, 16 ); + p[13] = 5; break; + + case RSA_SHA1: + memcpy( p, ASN1_HASH_SHA1, 15 ); + memcpy( p + 15, hash, 20 ); + break; + + default: + return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); + } + + return( ( mode == RSA_PUBLIC ) + ? rsa_public( ctx, sig, sig ) + : rsa_private( ctx, sig, sig ) ); +} + +/* + * Do an RSA operation and check the message digest + */ +int rsa_pkcs1_verify( rsa_context *ctx, + int mode, + int hash_id, + int hashlen, + unsigned char *hash, + unsigned char *sig ) +{ + int ret, len, siglen; + unsigned char *p, c; + unsigned char buf[512]; + + siglen = ctx->len; + + if( siglen < 16 || siglen > (int) sizeof( buf ) ) + return( POLARSSL_ERR_RSA_BAD_INPUT_DATA ); + + ret = ( mode == RSA_PUBLIC ) + ? rsa_public( ctx, sig, buf ) + : rsa_private( ctx, sig, buf ); + + if( ret != 0 ) + return( ret ); + + p = buf; + + switch( ctx->padding ) + { + case RSA_PKCS_V15: + + if( *p++ != 0 || *p++ != RSA_SIGN ) + return( POLARSSL_ERR_RSA_INVALID_PADDING ); + + while( *p != 0 ) + { + if( p >= buf + siglen - 1 || *p != 0xFF ) + return( POLARSSL_ERR_RSA_INVALID_PADDING ); + p++; + } + p++; + break; + + default: + + return( POLARSSL_ERR_RSA_INVALID_PADDING ); + } + + len = siglen - (int)( p - buf ); + + if( len == 34 ) + { + c = p[13]; + p[13] = 0; + + if( memcmp( p, ASN1_HASH_MDX, 18 ) != 0 ) + return( POLARSSL_ERR_RSA_VERIFY_FAILED ); + + if( ( c == 2 && hash_id == RSA_MD2 ) || + ( c == 4 && hash_id == RSA_MD4 ) || + ( c == 5 && hash_id == RSA_MD5 ) ) + { + if( memcmp( p + 18, hash, 16 ) == 0 ) + return( 0 ); + else + return( POLARSSL_ERR_RSA_VERIFY_FAILED ); + } + } + + if( len == 35 && hash_id == RSA_SHA1 ) + { + if( memcmp( p, ASN1_HASH_SHA1, 15 ) == 0 && + memcmp( p + 15, hash, 20 ) == 0 ) + return( 0 ); + else + return( POLARSSL_ERR_RSA_VERIFY_FAILED ); + } + + if( len == hashlen && hash_id == RSA_RAW ) + { + if( memcmp( p, hash, hashlen ) == 0 ) + return( 0 ); + else + return( POLARSSL_ERR_RSA_VERIFY_FAILED ); + } + + return( POLARSSL_ERR_RSA_INVALID_PADDING ); +} + +/* + * Free the components of an RSA key + */ +void rsa_free( rsa_context *ctx ) +{ + mpi_free( &ctx->RQ, &ctx->RP, &ctx->RN, + &ctx->QP, &ctx->DQ, &ctx->DP, + &ctx->Q, &ctx->P, &ctx->D, + &ctx->E, &ctx->N, NULL ); +} + +#if defined(POLARSSL_SELF_TEST) + +#include "polarssl/sha1.h" + +/* + * Example RSA-1024 keypair, for test purposes + */ +#define KEY_LEN 128 + +#define RSA_N "9292758453063D803DD603D5E777D788" \ + "8ED1D5BF35786190FA2F23EBC0848AEA" \ + "DDA92CA6C3D80B32C4D109BE0F36D6AE" \ + "7130B9CED7ACDF54CFC7555AC14EEBAB" \ + "93A89813FBF3C4F8066D2D800F7C38A8" \ + "1AE31942917403FF4946B0A83D3D3E05" \ + "EE57C6F5F5606FB5D4BC6CD34EE0801A" \ + "5E94BB77B07507233A0BC7BAC8F90F79" + +#define RSA_E "10001" + +#define RSA_D "24BF6185468786FDD303083D25E64EFC" \ + "66CA472BC44D253102F8B4A9D3BFA750" \ + "91386C0077937FE33FA3252D28855837" \ + "AE1B484A8A9A45F7EE8C0C634F99E8CD" \ + "DF79C5CE07EE72C7F123142198164234" \ + "CABB724CF78B8173B9F880FC86322407" \ + "AF1FEDFDDE2BEB674CA15F3E81A1521E" \ + "071513A1E85B5DFA031F21ECAE91A34D" + +#define RSA_P "C36D0EB7FCD285223CFB5AABA5BDA3D8" \ + "2C01CAD19EA484A87EA4377637E75500" \ + "FCB2005C5C7DD6EC4AC023CDA285D796" \ + "C3D9E75E1EFC42488BB4F1D13AC30A57" + +#define RSA_Q "C000DF51A7C77AE8D7C7370C1FF55B69" \ + "E211C2B9E5DB1ED0BF61D0D9899620F4" \ + "910E4168387E3C30AA1E00C339A79508" \ + "8452DD96A9A5EA5D9DCA68DA636032AF" + +#define RSA_DP "C1ACF567564274FB07A0BBAD5D26E298" \ + "3C94D22288ACD763FD8E5600ED4A702D" \ + "F84198A5F06C2E72236AE490C93F07F8" \ + "3CC559CD27BC2D1CA488811730BB5725" + +#define RSA_DQ "4959CBF6F8FEF750AEE6977C155579C7" \ + "D8AAEA56749EA28623272E4F7D0592AF" \ + "7C1F1313CAC9471B5C523BFE592F517B" \ + "407A1BD76C164B93DA2D32A383E58357" + +#define RSA_QP "9AE7FBC99546432DF71896FC239EADAE" \ + "F38D18D2B2F0E2DD275AA977E2BF4411" \ + "F5A3B2A5D33605AEBBCCBA7FEB9F2D2F" \ + "A74206CEC169D74BF5A8C50D6F48EA08" + +#define PT_LEN 24 +#define RSA_PT "\xAA\xBB\xCC\x03\x02\x01\x00\xFF\xFF\xFF\xFF\xFF" \ + "\x11\x22\x33\x0A\x0B\x0C\xCC\xDD\xDD\xDD\xDD\xDD" + +/* + * Checkup routine + */ +int rsa_self_test( int verbose ) +{ + int len; + rsa_context rsa; + unsigned char sha1sum[20]; + unsigned char rsa_plaintext[PT_LEN]; + unsigned char rsa_decrypted[PT_LEN]; + unsigned char rsa_ciphertext[KEY_LEN]; + + memset( &rsa, 0, sizeof( rsa_context ) ); + + rsa.len = KEY_LEN; + mpi_read_string( &rsa.N , 16, RSA_N ); + mpi_read_string( &rsa.E , 16, RSA_E ); + mpi_read_string( &rsa.D , 16, RSA_D ); + mpi_read_string( &rsa.P , 16, RSA_P ); + mpi_read_string( &rsa.Q , 16, RSA_Q ); + mpi_read_string( &rsa.DP, 16, RSA_DP ); + mpi_read_string( &rsa.DQ, 16, RSA_DQ ); + mpi_read_string( &rsa.QP, 16, RSA_QP ); + + if( verbose != 0 ) + printf( " RSA key validation: " ); + + if( rsa_check_pubkey( &rsa ) != 0 || + rsa_check_privkey( &rsa ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + printf( "passed\n PKCS#1 encryption : " ); + + memcpy( rsa_plaintext, RSA_PT, PT_LEN ); + + if( rsa_pkcs1_encrypt( &rsa, RSA_PUBLIC, PT_LEN, + rsa_plaintext, rsa_ciphertext ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + printf( "passed\n PKCS#1 decryption : " ); + + if( rsa_pkcs1_decrypt( &rsa, RSA_PRIVATE, &len, + rsa_ciphertext, rsa_decrypted, + sizeof(rsa_decrypted) ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( memcmp( rsa_decrypted, rsa_plaintext, len ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + printf( "passed\n PKCS#1 data sign : " ); + + sha1( rsa_plaintext, PT_LEN, sha1sum ); + + if( rsa_pkcs1_sign( &rsa, RSA_PRIVATE, RSA_SHA1, 20, + sha1sum, rsa_ciphertext ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + printf( "passed\n PKCS#1 sig. verify: " ); + + if( rsa_pkcs1_verify( &rsa, RSA_PUBLIC, RSA_SHA1, 20, + sha1sum, rsa_ciphertext ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + printf( "passed\n\n" ); + + rsa_free( &rsa ); + + return( 0 ); +} + +#endif + +#endif diff --git a/feeds/luci/libs/luci-lib-px5g/src/library/sha1.c b/feeds/luci/libs/luci-lib-px5g/src/library/sha1.c new file mode 100644 index 0000000..54a4416 --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/library/sha1.c @@ -0,0 +1,622 @@ +/* + * FIPS-180-1 compliant SHA-1 implementation + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * The SHA-1 standard was published by NIST in 1993. + * + * http://www.itl.nist.gov/fipspubs/fip180-1.htm + */ + +#include "polarssl/config.h" + +#if defined(POLARSSL_SHA1_C) + +#include "polarssl/sha1.h" + +#include +#include + +/* + * 32-bit integer manipulation macros (big endian) + */ +#ifndef GET_ULONG_BE +#define GET_ULONG_BE(n,b,i) \ +{ \ + (n) = ( (unsigned long) (b)[(i) ] << 24 ) \ + | ( (unsigned long) (b)[(i) + 1] << 16 ) \ + | ( (unsigned long) (b)[(i) + 2] << 8 ) \ + | ( (unsigned long) (b)[(i) + 3] ); \ +} +#endif + +#ifndef PUT_ULONG_BE +#define PUT_ULONG_BE(n,b,i) \ +{ \ + (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ + (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ + (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ + (b)[(i) + 3] = (unsigned char) ( (n) ); \ +} +#endif + +/* + * SHA-1 context setup + */ +void sha1_starts( sha1_context *ctx ) +{ + ctx->total[0] = 0; + ctx->total[1] = 0; + + ctx->state[0] = 0x67452301; + ctx->state[1] = 0xEFCDAB89; + ctx->state[2] = 0x98BADCFE; + ctx->state[3] = 0x10325476; + ctx->state[4] = 0xC3D2E1F0; +} + +static void sha1_process( sha1_context *ctx, unsigned char data[64] ) +{ + unsigned long temp, W[16], A, B, C, D, E; + + GET_ULONG_BE( W[ 0], data, 0 ); + GET_ULONG_BE( W[ 1], data, 4 ); + GET_ULONG_BE( W[ 2], data, 8 ); + GET_ULONG_BE( W[ 3], data, 12 ); + GET_ULONG_BE( W[ 4], data, 16 ); + GET_ULONG_BE( W[ 5], data, 20 ); + GET_ULONG_BE( W[ 6], data, 24 ); + GET_ULONG_BE( W[ 7], data, 28 ); + GET_ULONG_BE( W[ 8], data, 32 ); + GET_ULONG_BE( W[ 9], data, 36 ); + GET_ULONG_BE( W[10], data, 40 ); + GET_ULONG_BE( W[11], data, 44 ); + GET_ULONG_BE( W[12], data, 48 ); + GET_ULONG_BE( W[13], data, 52 ); + GET_ULONG_BE( W[14], data, 56 ); + GET_ULONG_BE( W[15], data, 60 ); + +#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) + +#define R(t) \ +( \ + temp = W[(t - 3) & 0x0F] ^ W[(t - 8) & 0x0F] ^ \ + W[(t - 14) & 0x0F] ^ W[ t & 0x0F], \ + ( W[t & 0x0F] = S(temp,1) ) \ +) + +#define P(a,b,c,d,e,x) \ +{ \ + e += S(a,5) + F(b,c,d) + K + x; b = S(b,30); \ +} + + A = ctx->state[0]; + B = ctx->state[1]; + C = ctx->state[2]; + D = ctx->state[3]; + E = ctx->state[4]; + +#define F(x,y,z) (z ^ (x & (y ^ z))) +#define K 0x5A827999 + + P( A, B, C, D, E, W[0] ); + P( E, A, B, C, D, W[1] ); + P( D, E, A, B, C, W[2] ); + P( C, D, E, A, B, W[3] ); + P( B, C, D, E, A, W[4] ); + P( A, B, C, D, E, W[5] ); + P( E, A, B, C, D, W[6] ); + P( D, E, A, B, C, W[7] ); + P( C, D, E, A, B, W[8] ); + P( B, C, D, E, A, W[9] ); + P( A, B, C, D, E, W[10] ); + P( E, A, B, C, D, W[11] ); + P( D, E, A, B, C, W[12] ); + P( C, D, E, A, B, W[13] ); + P( B, C, D, E, A, W[14] ); + P( A, B, C, D, E, W[15] ); + P( E, A, B, C, D, R(16) ); + P( D, E, A, B, C, R(17) ); + P( C, D, E, A, B, R(18) ); + P( B, C, D, E, A, R(19) ); + +#undef K +#undef F + +#define F(x,y,z) (x ^ y ^ z) +#define K 0x6ED9EBA1 + + P( A, B, C, D, E, R(20) ); + P( E, A, B, C, D, R(21) ); + P( D, E, A, B, C, R(22) ); + P( C, D, E, A, B, R(23) ); + P( B, C, D, E, A, R(24) ); + P( A, B, C, D, E, R(25) ); + P( E, A, B, C, D, R(26) ); + P( D, E, A, B, C, R(27) ); + P( C, D, E, A, B, R(28) ); + P( B, C, D, E, A, R(29) ); + P( A, B, C, D, E, R(30) ); + P( E, A, B, C, D, R(31) ); + P( D, E, A, B, C, R(32) ); + P( C, D, E, A, B, R(33) ); + P( B, C, D, E, A, R(34) ); + P( A, B, C, D, E, R(35) ); + P( E, A, B, C, D, R(36) ); + P( D, E, A, B, C, R(37) ); + P( C, D, E, A, B, R(38) ); + P( B, C, D, E, A, R(39) ); + +#undef K +#undef F + +#define F(x,y,z) ((x & y) | (z & (x | y))) +#define K 0x8F1BBCDC + + P( A, B, C, D, E, R(40) ); + P( E, A, B, C, D, R(41) ); + P( D, E, A, B, C, R(42) ); + P( C, D, E, A, B, R(43) ); + P( B, C, D, E, A, R(44) ); + P( A, B, C, D, E, R(45) ); + P( E, A, B, C, D, R(46) ); + P( D, E, A, B, C, R(47) ); + P( C, D, E, A, B, R(48) ); + P( B, C, D, E, A, R(49) ); + P( A, B, C, D, E, R(50) ); + P( E, A, B, C, D, R(51) ); + P( D, E, A, B, C, R(52) ); + P( C, D, E, A, B, R(53) ); + P( B, C, D, E, A, R(54) ); + P( A, B, C, D, E, R(55) ); + P( E, A, B, C, D, R(56) ); + P( D, E, A, B, C, R(57) ); + P( C, D, E, A, B, R(58) ); + P( B, C, D, E, A, R(59) ); + +#undef K +#undef F + +#define F(x,y,z) (x ^ y ^ z) +#define K 0xCA62C1D6 + + P( A, B, C, D, E, R(60) ); + P( E, A, B, C, D, R(61) ); + P( D, E, A, B, C, R(62) ); + P( C, D, E, A, B, R(63) ); + P( B, C, D, E, A, R(64) ); + P( A, B, C, D, E, R(65) ); + P( E, A, B, C, D, R(66) ); + P( D, E, A, B, C, R(67) ); + P( C, D, E, A, B, R(68) ); + P( B, C, D, E, A, R(69) ); + P( A, B, C, D, E, R(70) ); + P( E, A, B, C, D, R(71) ); + P( D, E, A, B, C, R(72) ); + P( C, D, E, A, B, R(73) ); + P( B, C, D, E, A, R(74) ); + P( A, B, C, D, E, R(75) ); + P( E, A, B, C, D, R(76) ); + P( D, E, A, B, C, R(77) ); + P( C, D, E, A, B, R(78) ); + P( B, C, D, E, A, R(79) ); + +#undef K +#undef F + + ctx->state[0] += A; + ctx->state[1] += B; + ctx->state[2] += C; + ctx->state[3] += D; + ctx->state[4] += E; +} + +/* + * SHA-1 process buffer + */ +void sha1_update( sha1_context *ctx, unsigned char *input, int ilen ) +{ + int fill; + unsigned long left; + + if( ilen <= 0 ) + return; + + left = ctx->total[0] & 0x3F; + fill = 64 - left; + + ctx->total[0] += ilen; + ctx->total[0] &= 0xFFFFFFFF; + + if( ctx->total[0] < (unsigned long) ilen ) + ctx->total[1]++; + + if( left && ilen >= fill ) + { + memcpy( (void *) (ctx->buffer + left), + (void *) input, fill ); + sha1_process( ctx, ctx->buffer ); + input += fill; + ilen -= fill; + left = 0; + } + + while( ilen >= 64 ) + { + sha1_process( ctx, input ); + input += 64; + ilen -= 64; + } + + if( ilen > 0 ) + { + memcpy( (void *) (ctx->buffer + left), + (void *) input, ilen ); + } +} + +static const unsigned char sha1_padding[64] = +{ + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* + * SHA-1 final digest + */ +void sha1_finish( sha1_context *ctx, unsigned char output[20] ) +{ + unsigned long last, padn; + unsigned long high, low; + unsigned char msglen[8]; + + high = ( ctx->total[0] >> 29 ) + | ( ctx->total[1] << 3 ); + low = ( ctx->total[0] << 3 ); + + PUT_ULONG_BE( high, msglen, 0 ); + PUT_ULONG_BE( low, msglen, 4 ); + + last = ctx->total[0] & 0x3F; + padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); + + sha1_update( ctx, (unsigned char *) sha1_padding, padn ); + sha1_update( ctx, msglen, 8 ); + + PUT_ULONG_BE( ctx->state[0], output, 0 ); + PUT_ULONG_BE( ctx->state[1], output, 4 ); + PUT_ULONG_BE( ctx->state[2], output, 8 ); + PUT_ULONG_BE( ctx->state[3], output, 12 ); + PUT_ULONG_BE( ctx->state[4], output, 16 ); +} + +/* + * output = SHA-1( input buffer ) + */ +void sha1( unsigned char *input, int ilen, unsigned char output[20] ) +{ + sha1_context ctx; + + sha1_starts( &ctx ); + sha1_update( &ctx, input, ilen ); + sha1_finish( &ctx, output ); + + memset( &ctx, 0, sizeof( sha1_context ) ); +} + +/* + * output = SHA-1( file contents ) + */ +int sha1_file( char *path, unsigned char output[20] ) +{ + FILE *f; + size_t n; + sha1_context ctx; + unsigned char buf[1024]; + + if( ( f = fopen( path, "rb" ) ) == NULL ) + return( 1 ); + + sha1_starts( &ctx ); + + while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) + sha1_update( &ctx, buf, (int) n ); + + sha1_finish( &ctx, output ); + + memset( &ctx, 0, sizeof( sha1_context ) ); + + if( ferror( f ) != 0 ) + { + fclose( f ); + return( 2 ); + } + + fclose( f ); + return( 0 ); +} + +/* + * SHA-1 HMAC context setup + */ +void sha1_hmac_starts( sha1_context *ctx, unsigned char *key, int keylen ) +{ + int i; + unsigned char sum[20]; + + if( keylen > 64 ) + { + sha1( key, keylen, sum ); + keylen = 20; + key = sum; + } + + memset( ctx->ipad, 0x36, 64 ); + memset( ctx->opad, 0x5C, 64 ); + + for( i = 0; i < keylen; i++ ) + { + ctx->ipad[i] = (unsigned char)( ctx->ipad[i] ^ key[i] ); + ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); + } + + sha1_starts( ctx ); + sha1_update( ctx, ctx->ipad, 64 ); + + memset( sum, 0, sizeof( sum ) ); +} + +/* + * SHA-1 HMAC process buffer + */ +void sha1_hmac_update( sha1_context *ctx, unsigned char *input, int ilen ) +{ + sha1_update( ctx, input, ilen ); +} + +/* + * SHA-1 HMAC final digest + */ +void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] ) +{ + unsigned char tmpbuf[20]; + + sha1_finish( ctx, tmpbuf ); + sha1_starts( ctx ); + sha1_update( ctx, ctx->opad, 64 ); + sha1_update( ctx, tmpbuf, 20 ); + sha1_finish( ctx, output ); + + memset( tmpbuf, 0, sizeof( tmpbuf ) ); +} + +/* + * output = HMAC-SHA-1( hmac key, input buffer ) + */ +void sha1_hmac( unsigned char *key, int keylen, + unsigned char *input, int ilen, + unsigned char output[20] ) +{ + sha1_context ctx; + + sha1_hmac_starts( &ctx, key, keylen ); + sha1_hmac_update( &ctx, input, ilen ); + sha1_hmac_finish( &ctx, output ); + + memset( &ctx, 0, sizeof( sha1_context ) ); +} + +#if defined(POLARSSL_SELF_TEST) +/* + * FIPS-180-1 test vectors + */ +static unsigned char sha1_test_buf[3][57] = +{ + { "abc" }, + { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, + { "" } +}; + +static const int sha1_test_buflen[3] = +{ + 3, 56, 1000 +}; + +static const unsigned char sha1_test_sum[3][20] = +{ + { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, + 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D }, + { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, + 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 }, + { 0x34, 0xAA, 0x97, 0x3C, 0xD4, 0xC4, 0xDA, 0xA4, 0xF6, 0x1E, + 0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F } +}; + +/* + * RFC 2202 test vectors + */ +static unsigned char sha1_hmac_test_key[7][26] = +{ + { "\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B" + "\x0B\x0B\x0B\x0B" }, + { "Jefe" }, + { "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" + "\xAA\xAA\xAA\xAA" }, + { "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10" + "\x11\x12\x13\x14\x15\x16\x17\x18\x19" }, + { "\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C" + "\x0C\x0C\x0C\x0C" }, + { "" }, /* 0xAA 80 times */ + { "" } +}; + +static const int sha1_hmac_test_keylen[7] = +{ + 20, 4, 20, 25, 20, 80, 80 +}; + +static unsigned char sha1_hmac_test_buf[7][74] = +{ + { "Hi There" }, + { "what do ya want for nothing?" }, + { "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" + "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" + "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" + "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" + "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" }, + { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" + "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" }, + { "Test With Truncation" }, + { "Test Using Larger Than Block-Size Key - Hash Key First" }, + { "Test Using Larger Than Block-Size Key and Larger" + " Than One Block-Size Data" } +}; + +static const int sha1_hmac_test_buflen[7] = +{ + 8, 28, 50, 50, 20, 54, 73 +}; + +static const unsigned char sha1_hmac_test_sum[7][20] = +{ + { 0xB6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xE2, 0x8B, + 0xC0, 0xB6, 0xFB, 0x37, 0x8C, 0x8E, 0xF1, 0x46, 0xBE, 0x00 }, + { 0xEF, 0xFC, 0xDF, 0x6A, 0xE5, 0xEB, 0x2F, 0xA2, 0xD2, 0x74, + 0x16, 0xD5, 0xF1, 0x84, 0xDF, 0x9C, 0x25, 0x9A, 0x7C, 0x79 }, + { 0x12, 0x5D, 0x73, 0x42, 0xB9, 0xAC, 0x11, 0xCD, 0x91, 0xA3, + 0x9A, 0xF4, 0x8A, 0xA1, 0x7B, 0x4F, 0x63, 0xF1, 0x75, 0xD3 }, + { 0x4C, 0x90, 0x07, 0xF4, 0x02, 0x62, 0x50, 0xC6, 0xBC, 0x84, + 0x14, 0xF9, 0xBF, 0x50, 0xC8, 0x6C, 0x2D, 0x72, 0x35, 0xDA }, + { 0x4C, 0x1A, 0x03, 0x42, 0x4B, 0x55, 0xE0, 0x7F, 0xE7, 0xF2, + 0x7B, 0xE1 }, + { 0xAA, 0x4A, 0xE5, 0xE1, 0x52, 0x72, 0xD0, 0x0E, 0x95, 0x70, + 0x56, 0x37, 0xCE, 0x8A, 0x3B, 0x55, 0xED, 0x40, 0x21, 0x12 }, + { 0xE8, 0xE9, 0x9D, 0x0F, 0x45, 0x23, 0x7D, 0x78, 0x6D, 0x6B, + 0xBA, 0xA7, 0x96, 0x5C, 0x78, 0x08, 0xBB, 0xFF, 0x1A, 0x91 } +}; + +/* + * Checkup routine + */ +int sha1_self_test( int verbose ) +{ + int i, j, buflen; + unsigned char buf[1024]; + unsigned char sha1sum[20]; + sha1_context ctx; + + /* + * SHA-1 + */ + for( i = 0; i < 3; i++ ) + { + if( verbose != 0 ) + printf( " SHA-1 test #%d: ", i + 1 ); + + sha1_starts( &ctx ); + + if( i == 2 ) + { + memset( buf, 'a', buflen = 1000 ); + + for( j = 0; j < 1000; j++ ) + sha1_update( &ctx, buf, buflen ); + } + else + sha1_update( &ctx, sha1_test_buf[i], + sha1_test_buflen[i] ); + + sha1_finish( &ctx, sha1sum ); + + if( memcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + printf( "passed\n" ); + } + + if( verbose != 0 ) + printf( "\n" ); + + for( i = 0; i < 7; i++ ) + { + if( verbose != 0 ) + printf( " HMAC-SHA-1 test #%d: ", i + 1 ); + + if( i == 5 || i == 6 ) + { + memset( buf, '\xAA', buflen = 80 ); + sha1_hmac_starts( &ctx, buf, buflen ); + } + else + sha1_hmac_starts( &ctx, sha1_hmac_test_key[i], + sha1_hmac_test_keylen[i] ); + + sha1_hmac_update( &ctx, sha1_hmac_test_buf[i], + sha1_hmac_test_buflen[i] ); + + sha1_hmac_finish( &ctx, sha1sum ); + + buflen = ( i == 4 ) ? 12 : 20; + + if( memcmp( sha1sum, sha1_hmac_test_sum[i], buflen ) != 0 ) + { + if( verbose != 0 ) + printf( "failed\n" ); + + return( 1 ); + } + + if( verbose != 0 ) + printf( "passed\n" ); + } + + if( verbose != 0 ) + printf( "\n" ); + + return( 0 ); +} + +#endif + +#endif diff --git a/feeds/luci/libs/luci-lib-px5g/src/library/timing.c b/feeds/luci/libs/luci-lib-px5g/src/library/timing.c new file mode 100644 index 0000000..6b7ab74 --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/library/timing.c @@ -0,0 +1,265 @@ +/* + * Portable interface to the CPU cycle counter + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "polarssl/config.h" + +#if defined(POLARSSL_TIMING_C) + +#include "polarssl/timing.h" + +#if defined(WIN32) + +#include +#include + +struct _hr_time +{ + LARGE_INTEGER start; +}; + +#else + +#include +#include +#include +#include +#include + +struct _hr_time +{ + struct timeval start; +}; + +#endif + +#if (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__) + +unsigned long hardclock( void ) +{ + unsigned long tsc; + __asm rdtsc + __asm mov [tsc], eax + return( tsc ); +} + +#else +#if defined(__GNUC__) && defined(__i386__) + +unsigned long hardclock( void ) +{ + unsigned long tsc; + asm( "rdtsc" : "=a" (tsc) ); + return( tsc ); +} + +#else +#if defined(__GNUC__) && (defined(__amd64__) || defined(__x86_64__)) + +unsigned long hardclock( void ) +{ + unsigned long lo, hi; + asm( "rdtsc" : "=a" (lo), "=d" (hi) ); + return( lo | (hi << 32) ); +} + +#else +#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) + +unsigned long hardclock( void ) +{ + unsigned long tbl, tbu0, tbu1; + + do + { + asm( "mftbu %0" : "=r" (tbu0) ); + asm( "mftb %0" : "=r" (tbl ) ); + asm( "mftbu %0" : "=r" (tbu1) ); + } + while( tbu0 != tbu1 ); + + return( tbl ); +} + +#else +#if defined(__GNUC__) && defined(__sparc__) + +unsigned long hardclock( void ) +{ + unsigned long tick; + asm( ".byte 0x83, 0x41, 0x00, 0x00" ); + asm( "mov %%g1, %0" : "=r" (tick) ); + return( tick ); +} + +#else +#if defined(__GNUC__) && defined(__alpha__) + +unsigned long hardclock( void ) +{ + unsigned long cc; + asm( "rpcc %0" : "=r" (cc) ); + return( cc & 0xFFFFFFFF ); +} + +#else +#if defined(__GNUC__) && defined(__ia64__) + +unsigned long hardclock( void ) +{ + unsigned long itc; + asm( "mov %0 = ar.itc" : "=r" (itc) ); + return( itc ); +} + +#else + +static int hardclock_init = 0; +static struct timeval tv_init; + +unsigned long hardclock( void ) +{ + struct timeval tv_cur; + + if( hardclock_init == 0 ) + { + gettimeofday( &tv_init, NULL ); + hardclock_init = 1; + } + + gettimeofday( &tv_cur, NULL ); + return( ( tv_cur.tv_sec - tv_init.tv_sec ) * 1000000 + + ( tv_cur.tv_usec - tv_init.tv_usec ) ); +} + +#endif /* generic */ +#endif /* IA-64 */ +#endif /* Alpha */ +#endif /* SPARC8 */ +#endif /* PowerPC */ +#endif /* AMD64 */ +#endif /* i586+ */ + +int alarmed = 0; + +#if defined(WIN32) + +unsigned long get_timer( struct hr_time *val, int reset ) +{ + unsigned long delta; + LARGE_INTEGER offset, hfreq; + struct _hr_time *t = (struct _hr_time *) val; + + QueryPerformanceCounter( &offset ); + QueryPerformanceFrequency( &hfreq ); + + delta = (unsigned long)( ( 1000 * + ( offset.QuadPart - t->start.QuadPart ) ) / + hfreq.QuadPart ); + + if( reset ) + QueryPerformanceCounter( &t->start ); + + return( delta ); +} + +DWORD WINAPI TimerProc( LPVOID uElapse ) +{ + Sleep( (DWORD) uElapse ); + alarmed = 1; + return( TRUE ); +} + +void set_alarm( int seconds ) +{ + DWORD ThreadId; + + alarmed = 0; + CloseHandle( CreateThread( NULL, 0, TimerProc, + (LPVOID) ( seconds * 1000 ), 0, &ThreadId ) ); +} + +void m_sleep( int milliseconds ) +{ + Sleep( milliseconds ); +} + +#else + +unsigned long get_timer( struct hr_time *val, int reset ) +{ + unsigned long delta; + struct timeval offset; + struct _hr_time *t = (struct _hr_time *) val; + + gettimeofday( &offset, NULL ); + + delta = ( offset.tv_sec - t->start.tv_sec ) * 1000 + + ( offset.tv_usec - t->start.tv_usec ) / 1000; + + if( reset ) + { + t->start.tv_sec = offset.tv_sec; + t->start.tv_usec = offset.tv_usec; + } + + return( delta ); +} + +static void sighandler( int signum ) +{ + alarmed = 1; + signal( signum, sighandler ); +} + +void set_alarm( int seconds ) +{ + alarmed = 0; + signal( SIGALRM, sighandler ); + alarm( seconds ); +} + +void m_sleep( int milliseconds ) +{ + struct timeval tv; + + tv.tv_sec = milliseconds / 1000; + tv.tv_usec = milliseconds * 1000; + + select( 0, NULL, NULL, NULL, &tv ); +} + +#endif + +#endif diff --git a/feeds/luci/libs/luci-lib-px5g/src/library/x509write.c b/feeds/luci/libs/luci-lib-px5g/src/library/x509write.c new file mode 100644 index 0000000..173610c --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/library/x509write.c @@ -0,0 +1,1137 @@ +/* + * X.509 certificate and private key writing + * + * Copyright (C) 2006-2007 Pascal Vizeli + * Modifications (C) 2009 Steven Barth + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License, version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +/* + * The ITU-T X.509 standard defines a certificat format for PKI. + * + * http://www.ietf.org/rfc/rfc2459.txt + * http://www.ietf.org/rfc/rfc3279.txt + * + * ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-1v2.asc + * + * http://www.itu.int/ITU-T/studygroups/com17/languages/X.680-0207.pdf + * http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf + * + * For CRS: + * http://www.faqs.org/rfcs/rfc2314.html + */ +#include "polarssl/config.h" +#include "polarssl/x509.h" +/* #include "polarssl/base64.h" */ +#include "polarssl/sha1.h" + +#include +#include +#include +#include +#include + +#define and && +#define or || + +#if defined _MSC_VER && !defined snprintf +#define snprintf _snprintf +#endif + +static int x509write_realloc_node(x509_node *node, size_t larger); +static int x509write_file(x509_node *node, char *path, int format, const char* pem_prolog, const char* pem_epilog); + +/* + * evaluate how mani octet have this integer + */ +static int asn1_eval_octet(unsigned int digit) +{ + int i, byte; + + for (byte = 4, i = 24; i >= 0; i -= 8, --byte) + if (((digit >> i) & 0xFF) != 0) + return byte; + + return 0; +} + +/* + * write the asn.1 lenght form into p + */ +static int asn1_add_len(unsigned int size, x509_node *node) +{ + if (size > 127) { + + /* long size */ + int byte = asn1_eval_octet(size); + int i = 0; + + *(node->p) = (0x80 | byte) & 0xFF; + ++node->p; + + for (i = byte; i > 0; --i) { + + *(node->p) = (size >> ((i - 1) * 8)) & 0xFF; + ++node->p; + } + + } else { + + /* short size */ + *(node->p) = size & 0xFF; + if (size != 0) + ++node->p; + } + + return 0; +} + +/* + * write a ans.1 object into p + */ +static int asn1_add_obj(unsigned char *value, unsigned int size, int tag, + x509_node *node) +{ + int tl = 2; + + if (tag == ASN1_BIT_STRING) + ++tl; + + if (size > 127) + x509write_realloc_node(node, (size_t) size + tl + + asn1_eval_octet(size)); + else + x509write_realloc_node(node, (size_t) size + tl); + + if (node->data == NULL) + return 1; + + /* tag */ + *(node->p) = tag & 0xFF; + ++node->p; + + /* len */ + if (tag == ASN1_BIT_STRING) { + asn1_add_len((unsigned int) size + 1, node); + *(node->p) = 0x00; + ++node->p; + } else { + asn1_add_len((unsigned int) size, node); + } + + /* value */ + if (size > 0) { + + memcpy(node->p, value, (size_t) size); + if ((node->p += size -1) != node->end) + return POLARSSL_ERR_X509_POINT_ERROR; + } else { + /* make nothing -> NULL */ + } + + return 0; +} + +/* + * write a asn.1 conform integer object + */ +static int asn1_add_int(signed int value, x509_node *node) +{ + signed int i = 0, neg = 1; + unsigned int byte, u_val = 0, tmp_val = 0; + + /* if negate? */ + if (value < 0) { + neg = -1; + u_val = ~value; + } else { + u_val = value; + } + + byte = asn1_eval_octet(u_val); + /* 0 isn't NULL */ + if (byte == 0) + byte = 1; + + /* ASN.1 integer is signed! */ + if (byte < 4 and ((u_val >> ((byte -1) * 8)) & 0xFF) == 0x80) + byte += 1; + + if (x509write_realloc_node(node, (size_t) byte + 2) != 0) + return 1; + + /* tag */ + *(node->p) = ASN1_INTEGER; + ++node->p; + + /* len */ + asn1_add_len(byte, node); + + /* value */ + for (i = byte; i > 0; --i) { + + tmp_val = (u_val >> ((i - 1) * 8)) & 0xFF; + if (neg == 1) + *(node->p) = tmp_val; + else + *(node->p) = ~tmp_val; + + if (i > 1) + ++node->p; + } + + if (node->p != node->end) + return POLARSSL_ERR_X509_POINT_ERROR; + + return 0; +} + +/* + * write a asn.1 conform mpi object + */ +static int asn1_add_mpi(mpi *value, int tag, x509_node *node) +{ + size_t size = (mpi_msb(value) / 8) + 1; + unsigned char *buf; + int buf_len = (int) size, tl = 2; + + if (tag == ASN1_BIT_STRING) + ++tl; + + if (size > 127) + x509write_realloc_node(node, size + (size_t) tl + + asn1_eval_octet((unsigned int)size)); + else + x509write_realloc_node(node, size + (size_t) tl); + + if (node->data == NULL) + return 1; + + buf = (unsigned char*) malloc(size); + if (mpi_write_binary(value, buf, buf_len) != 0) + return POLARSSL_ERR_MPI_BUFFER_TOO_SMALL; + + /* tag */ + *(node->p) = tag & 0xFF; + ++node->p; + + /* len */ + if (tag == ASN1_BIT_STRING) { + asn1_add_len((unsigned int) size + 1, node); + *(node->p) = 0x00; + ++node->p; + } else { + asn1_add_len((unsigned int) size, node); + } + + /* value */ + memcpy(node->p, buf, size); + free(buf); + + if ((node->p += (int) size -1) != node->end) + return POLARSSL_ERR_X509_POINT_ERROR; + + return 0; +} + +/* + * write a node into asn.1 conform object + */ +static int asn1_append_tag(x509_node *node, int tag) +{ + int tl = 2; + + x509_node tmp; + x509write_init_node(&tmp); + + if (tag == ASN1_BIT_STRING) + ++tl; + + if (node->len > 127) + x509write_realloc_node(&tmp, node->len + (size_t) tl + + asn1_eval_octet((unsigned int)node->len)); + else + x509write_realloc_node(&tmp, node->len + (size_t) tl); + + if (tmp.data == NULL) { + x509write_free_node(&tmp); + return 1; + } + + /* tag */ + *(tmp.p) = tag & 0xFF; + ++tmp.p; + + /* len */ + if (tag == ASN1_BIT_STRING) { + asn1_add_len((unsigned int) node->len + 1, &tmp); + *(tmp.p) = 0x00; + ++tmp.p; + } else { + asn1_add_len((unsigned int) node->len, &tmp); + } + + /* value */ + memcpy(tmp.p, node->data, node->len); + + /* good? */ + if ((tmp.p += (int) node->len -1) != tmp.end) { + x509write_free_node(&tmp); + return POLARSSL_ERR_X509_POINT_ERROR; + } + + free(node->data); + node->data = tmp.data; + node->p = tmp.p; + node->end = tmp.end; + node->len = tmp.len; + + return 0; +} + +/* + * write nodes into a asn.1 object + */ +static int asn1_append_nodes(x509_node *node, int tag, int anz, ...) +{ + va_list ap; + size_t size = 0; + x509_node *tmp; + int count; + + va_start(ap, anz); + count = anz; + + while (count--) { + + tmp = va_arg(ap, x509_node*); + if (tmp->data != NULL) + size += tmp->len; + } + + if ( size > 127) { + if (x509write_realloc_node(node, size + (size_t) 2 + + asn1_eval_octet(size)) != 0) + return 1; + } else { + if (x509write_realloc_node(node, size + (size_t) 2) != 0) + return 1; + } + + /* tag */ + *(node->p) = tag & 0xFF; + ++node->p; + + /* len */ + asn1_add_len(size, node); + + /* value */ + va_start(ap, anz); + count = anz; + + while (count--) { + + tmp = va_arg(ap, x509_node*); + if (tmp->data != NULL) { + + memcpy(node->p, tmp->data, tmp->len); + if ((node->p += (int) tmp->len -1) != node->end) + ++node->p; + } + } + + va_end(ap); + return 0; +} + +/* + * write a ASN.1 conform object identifiere include a "tag" + */ +static int asn1_add_oid(x509_node *node, unsigned char *oid, size_t len, + int tag, int tag_val, unsigned char *value, size_t val_len) +{ + int ret; + x509_node tmp; + + x509write_init_node(&tmp); + + /* OBJECT IDENTIFIER */ + if ((ret = asn1_add_obj(oid, len, ASN1_OID, &tmp)) != 0) { + x509write_free_node(&tmp); + return ret; + } + + /* value */ + if ((ret = asn1_add_obj(value, val_len, tag_val, &tmp)) != 0) { + x509write_free_node(&tmp); + return ret; + } + + /* SET/SEQUENCE */ + if ((ret = asn1_append_nodes(node, tag, 1, &tmp)) != 0) { + x509write_free_node(&tmp); + return ret; + } + + x509write_free_node(&tmp); + return 0; +} + +/* + * utcTime UTCTime + */ +static int asn1_add_date_utc(unsigned char *time, x509_node *node) +{ + unsigned char date[13], *sp; + x509_time xtime; + int ret; + + sscanf((char*)time, "%d-%d-%d %d:%d:%d", &xtime.year, &xtime.mon, + &xtime.day, &xtime.hour, &xtime.min, &xtime.sec); + + /* convert to YY */ + if (xtime.year > 2000) + xtime.year -= 2000; + else + xtime.year -= 1900; + + snprintf((char*)date, 13, "%2d%2d%2d%2d%2d%2d", xtime.year, xtime.mon, xtime.day, + xtime.hour, xtime.min, xtime.sec); + + /* replace ' ' to '0' */ + for (sp = date; *sp != '\0'; ++sp) + if (*sp == '\x20') + *sp = '\x30'; + + date[12] = 'Z'; + + if ((ret = asn1_add_obj(date, 13, ASN1_UTC_TIME, node)) != 0) + return ret; + + return 0; +} + +/* + * serialize an rsa key into DER + */ + +int x509write_serialize_key(rsa_context *rsa, x509_node *node) +{ + int ret = 0; + x509write_init_node(node); + + /* vers, n, e, d, p, q, dp, dq, pq */ + if ((ret = asn1_add_int(rsa->ver, node)) != 0) + return ret; + if ((ret = asn1_add_mpi(&rsa->N, ASN1_INTEGER, node)) != 0) + return ret; + if ((ret = asn1_add_mpi(&rsa->E, ASN1_INTEGER, node)) != 0) + return ret; + if ((ret = asn1_add_mpi(&rsa->D, ASN1_INTEGER, node)) != 0) + return ret; + if ((ret = asn1_add_mpi(&rsa->P, ASN1_INTEGER, node)) != 0) + return ret; + if ((ret = asn1_add_mpi(&rsa->Q, ASN1_INTEGER, node)) != 0) + return ret; + if ((ret = asn1_add_mpi(&rsa->DP, ASN1_INTEGER, node)) != 0) + return ret; + if ((ret = asn1_add_mpi(&rsa->DQ, ASN1_INTEGER, node)) != 0) + return ret; + if ((ret = asn1_add_mpi(&rsa->QP, ASN1_INTEGER, node)) != 0) + return ret; + if ((ret = asn1_append_tag(node, ASN1_CONSTRUCTED | ASN1_SEQUENCE)) != 0) + return ret; + + return 0; +} + +/* + * write a der/pem encoded rsa private key into a file + */ +int x509write_keyfile(rsa_context *rsa, char *path, int out_flag) +{ + int ret = 0; + const char key_beg[] = "-----BEGIN RSA PRIVATE KEY-----\n", + key_end[] = "-----END RSA PRIVATE KEY-----\n"; + x509_node node; + + x509write_init_node(&node); + if ((ret = x509write_serialize_key(rsa,&node)) != 0) { + x509write_free_node(&node); + return ret; + } + + ret = x509write_file(&node,path,out_flag,key_beg,key_end); + x509write_free_node(&node); + + return ret; +} + + +/* + * reasize the memory for node + */ +static int x509write_realloc_node(x509_node *node, size_t larger) +{ + /* init len */ + if (node->data == NULL) { + node->len = 0; + node->data = malloc(larger); + if(node->data == NULL) + return 1; + } else { + /* realloc memory */ + if ((node->data = realloc(node->data, node->len + larger)) == NULL) + return 1; + } + + /* init pointer */ + node->p = &node->data[node->len]; + node->len += larger; + node->end = &node->data[node->len -1]; + + return 0; +} + +/* + * init node + */ +void x509write_init_node(x509_node *node) +{ + memset(node, 0, sizeof(x509_node)); +} + +/* + * clean memory + */ +void x509write_free_node(x509_node *node) +{ + if (node->data != NULL) + free(node->data); + node->p = NULL; + node->end = NULL; + node->len = 0; +} + +/* + * write a x509 certificate into file + */ +int x509write_crtfile(x509_raw *chain, unsigned char *path, int out_flag) +{ + const char cer_beg[] = "-----BEGIN CERTIFICATE-----\n", + cer_end[] = "-----END CERTIFICATE-----\n"; + + return x509write_file(&chain->raw, (char*)path, out_flag, cer_beg, cer_end); +} + +/* + * write a x509 certificate into file + */ +int x509write_csrfile(x509_raw *chain, unsigned char *path, int out_flag) +{ + const char cer_beg[] = "-----BEGIN CERTIFICATE REQUEST-----\n", + cer_end[] = "-----END CERTIFICATE REQUEST-----\n"; + + return x509write_file(&chain->raw, (char*)path, out_flag, cer_beg, cer_end); +} + +/* + * write an x509 file + */ +static int x509write_file(x509_node *node, char *path, int format, + const char* pem_prolog, const char* pem_epilog) +{ + FILE *ofstream; + int is_err = 1/*, buf_len, i, n*/; + /* char* base_buf; */ + + if ((ofstream = fopen(path, "wb")) == NULL) + return 1; + + switch (format) { + case X509_OUTPUT_DER: + if (fwrite(node->data, 1, node->len, ofstream) + != node->len) + is_err = -1; + break; +/* + case X509_OUTPUT_PEM: + if (fprintf(ofstream,pem_prolog)<0) { + is_err = -1; + break; + } + + buf_len = node->len << 1; + base_buf = (char*) malloc((size_t)buf_len); + memset(base_buf,0,buf_len); + if (base64_encode(base_buf, &buf_len, node->data, + (int) node->len) != 0) { + is_err = -1; + break; + } + + n=strlen(base_buf); + for(i=0;isubpubkey; + + x509write_init_node(&n_tmp); + x509write_init_node(&n_tmp2); + + /* + * RSAPublicKey ::= SEQUENCE { + * modulus INTEGER, -- n + * publicExponent INTEGER -- e + * } + */ + if ((ret = asn1_add_mpi(&pubkey->N, ASN1_INTEGER, &n_tmp)) != 0) { + x509write_free_node(&n_tmp); + x509write_free_node(&n_tmp2); + return ret; + } + if ((ret = asn1_add_mpi(&pubkey->E, ASN1_INTEGER, &n_tmp)) != 0) { + x509write_free_node(&n_tmp); + x509write_free_node(&n_tmp2); + return ret; + } + if ((ret = asn1_append_tag(&n_tmp, ASN1_CONSTRUCTED | ASN1_SEQUENCE)) + != 0) { + x509write_free_node(&n_tmp); + x509write_free_node(&n_tmp2); + return ret; + } + + /* + * SubjectPublicKeyInfo ::= SEQUENCE { + * algorithm AlgorithmIdentifier, + * subjectPublicKey BIT STRING } + */ + if ((ret = asn1_append_tag(&n_tmp, ASN1_BIT_STRING)) != 0) { + x509write_free_node(&n_tmp); + x509write_free_node(&n_tmp2); + return ret; + } + if ((ret = asn1_add_oid(&n_tmp2, (unsigned char*)OID_PKCS1_RSA, 9, + ASN1_CONSTRUCTED | ASN1_SEQUENCE, ASN1_NULL, + (unsigned char *)"", 0)) != 0) { + x509write_free_node(&n_tmp); + x509write_free_node(&n_tmp2); + return ret; + } + + if ((ret = asn1_append_nodes(node, ASN1_CONSTRUCTED | ASN1_SEQUENCE, 2, + &n_tmp2, &n_tmp))) { + x509write_free_node(&n_tmp); + x509write_free_node(&n_tmp2); + return ret; + } + + x509write_free_node(&n_tmp); + x509write_free_node(&n_tmp2); + return 0; +} + +/* + * RelativeDistinguishedName ::= + * SET OF AttributeTypeAndValue + * + * AttributeTypeAndValue ::= SEQUENCE { + * type AttributeType, + * value AttributeValue } + */ +static int x509write_add_name(x509_node *node, unsigned char *oid, + unsigned int oid_len, unsigned char *value, int len, int value_tag) +{ + int ret; + x509_node n_tmp; + + x509write_init_node(&n_tmp); + + if ((ret = asn1_add_oid(&n_tmp, oid, oid_len, + ASN1_CONSTRUCTED | ASN1_SEQUENCE, value_tag, + value, len))) { + x509write_free_node(&n_tmp); + return ret; + } + + if ((asn1_append_nodes(node, ASN1_CONSTRUCTED | ASN1_SET, 1, &n_tmp)) + != 0) { + x509write_free_node(&n_tmp); + return ret; + } + + x509write_free_node(&n_tmp); + return 0; +} + +/* + * Parse the name string and add to node + */ +static int x509write_parse_names(x509_node *node, unsigned char *names) +{ + unsigned char *sp, *begin = NULL; + unsigned char oid[3] = OID_X520, tag[4], *tag_sp = tag; + unsigned char *C = NULL, *CN = NULL, *O = NULL, *OU = NULL, + *ST = NULL, *L = NULL, *R = NULL; + int C_len = 0, CN_len = 0, O_len = 0, OU_len = 0, ST_len = 0, + L_len = 0, R_len = 0; + int ret = 0, is_tag = 1, is_begin = -1, len = 0; + + + for (sp = names; ; ++sp) { + + /* filter tag */ + if (is_tag == 1) { + + if (tag_sp == &tag[3]) + return POLARSSL_ERR_X509_VALUE_TO_LENGTH; + + /* is tag end? */ + if (*sp == '=') { + is_tag = -1; + *tag_sp = '\0'; + is_begin = 1; + /* set len 0 (reset) */ + len = 0; + } else { + /* tag hasn't ' '! */ + if (*sp != ' ') { + *tag_sp = *sp; + ++tag_sp; + } + } + /* filter value */ + } else { + + /* set pointer of value begin */ + if (is_begin == 1) { + begin = sp; + is_begin = -1; + } + + /* is value at end? */ + if (*sp == ';' or *sp == '\0') { + is_tag = 1; + + /* common name */ + if (tag[0] == 'C' and tag[1] == 'N') { + CN = begin; + CN_len = len; + + /* organization */ + } else if (tag[0] == 'O' and tag[1] == '\0') { + O = begin; + O_len = len; + + /* country */ + } else if (tag[0] == 'C' and tag[1] == '\0') { + C = begin; + C_len = len; + + /* organisation unit */ + } else if (tag[0] == 'O' and tag[1] == 'U') { + OU = begin; + OU_len = len; + + /* state */ + } else if (tag[0] == 'S' and tag[1] == 'T') { + ST = begin; + ST_len = len; + + /* locality */ + } else if (tag[0] == 'L' and tag[1] == '\0') { + L = begin; + L_len = len; + + /* email */ + } else if (tag[0] == 'R' and tag[1] == '\0') { + R = begin; + R_len = len; + } + + /* set tag poiner to begin */ + tag_sp = tag; + + /* is at end? */ + if (*sp == '\0' or *(sp +1) == '\0') + break; + } else { + ++len; + } + } + + /* make saver */ + if (*sp == '\0') + break; + } /* end for */ + + /* country */ + if (C != NULL) { + oid[2] = X520_COUNTRY; + if ((ret = x509write_add_name(node, oid, 3, C, C_len, + ASN1_PRINTABLE_STRING)) != 0) + return ret; + } + + /* state */ + if (ST != NULL) { + oid[2] = X520_STATE; + if ((ret = x509write_add_name(node, oid, 3, ST, ST_len, + ASN1_PRINTABLE_STRING)) != 0) + return ret; + } + + /* locality */ + if (L != NULL) { + oid[2] = X520_LOCALITY; + if ((ret = x509write_add_name(node, oid, 3, L, L_len, + ASN1_PRINTABLE_STRING)) != 0) + return ret; + } + + /* organization */ + if (O != NULL) { + oid[2] = X520_ORGANIZATION; + if ((ret = x509write_add_name(node, oid, 3, O, O_len, + ASN1_PRINTABLE_STRING)) != 0) + return ret; + } + + /* organisation unit */ + if (OU != NULL) { + oid[2] = X520_ORG_UNIT; + if ((ret = x509write_add_name(node, oid, 3, OU, OU_len, + ASN1_PRINTABLE_STRING)) != 0) + return ret; + } + + /* common name */ + if (CN != NULL) { + oid[2] = X520_COMMON_NAME; + if ((ret = x509write_add_name(node, oid, 3, CN, CN_len, + ASN1_PRINTABLE_STRING)) != 0) + return ret; + } + + /* email */ + if (R != NULL) { + if ((ret = x509write_add_name(node, (unsigned char*)OID_PKCS9_EMAIL, + 9, R, R_len, ASN1_IA5_STRING)) != 0) + return ret; + } + + if ((asn1_append_tag(node, ASN1_CONSTRUCTED | ASN1_SEQUENCE)) != 0) + return ret; + + return 0; +} + +/* + * Copy raw data from orginal ca to node + */ +static int x509write_copy_from_raw(x509_node *node, x509_buf *raw) +{ + if (x509write_realloc_node(node, raw->len) != 0) + return 1; + + memcpy(node->p, raw->p, (size_t)raw->len); + if ((node->p += raw->len -1) != node->end) + return POLARSSL_ERR_X509_POINT_ERROR; + + return 0; +} + +/* + * Add the issuer + */ + +int x509write_add_issuer(x509_raw *crt, unsigned char *issuer) +{ + return x509write_parse_names(&crt->issuer, issuer); +} + +/* + * Add the subject + */ +int x509write_add_subject(x509_raw *crt, unsigned char *subject) +{ + return x509write_parse_names(&crt->subject, subject); +} + +/* + * Copy issuer line from another cert to issuer + */ +int x509write_copy_issuer(x509_raw *crt, x509_cert *from_crt) +{ + return x509write_copy_from_raw(&crt->issuer, &from_crt->issuer_raw); +} + +/* + * Copy subject line from another cert + */ +int x509write_copy_subject(x509_raw *crt, x509_cert *from_crt) +{ + return x509write_copy_from_raw(&crt->subject, &from_crt->subject_raw); +} + +/* + * Copy subject line form antoher cert into issuer + */ +int x509write_copy_issuer_form_subject(x509_raw *crt, + x509_cert *from_crt) +{ + return x509write_copy_from_raw(&crt->issuer, &from_crt->subject_raw); +} + +/* + * Copy issuer line from another cert into subject + */ +int x509write_copy_subject_from_issuer(x509_raw *crt, + x509_cert * from_crt) +{ + return x509write_copy_from_raw(&crt->subject, &from_crt->issuer_raw); +} + +/* + * Validity ::= SEQUENCE { + * notBefore Time, + * notAfter Time } + * + * Time ::= CHOICE { + * utcTime UTCTime, + * generalTime GeneralizedTime } + */ +/* TODO: No handle GeneralizedTime! */ +int x509write_add_validity(x509_raw *chain, unsigned char *befor, + unsigned char *after) +{ + int ret; + + x509_node *node = &chain->validity; + + /* notBefore */ + if ((ret = asn1_add_date_utc(befor, node)) != 0) + return ret; + + /* notAfter */ + if ((ret = asn1_add_date_utc(after, node)) != 0) + return ret; + + if ((ret = asn1_append_tag(node, ASN1_CONSTRUCTED | ASN1_SEQUENCE)) != 0) + return ret; + + return 0; +} + +/* + * make hash from tbs and sign that with private key + */ +static int x509write_make_sign(x509_raw *chain, rsa_context *privkey) +{ + int ret; + unsigned char hash[20], *sign; + size_t sign_len = (size_t) mpi_size(&privkey->N); + + /* make hash */ + sha1(chain->tbs.data, chain->tbs.len, hash); + + /* create sign */ + sign = (unsigned char *) malloc(sign_len); + if (sign == NULL) + return 1; + + if ((ret = rsa_pkcs1_sign(privkey, RSA_PRIVATE, RSA_SHA1, 20, hash, + sign)) != 0) + return ret; + + if ((ret = asn1_add_obj(sign, sign_len, ASN1_BIT_STRING, + &chain->sign)) != 0) + return ret; + + /* + * AlgorithmIdentifier ::= SEQUENCE { + * algorithm OBJECT IDENTIFIER, + * parameters ANY DEFINED BY algorithm OPTIONAL } + */ + return asn1_add_oid(&chain->signalg, (unsigned char*)OID_PKCS1_RSA_SHA, 9, + ASN1_CONSTRUCTED | ASN1_SEQUENCE, ASN1_NULL, + (unsigned char*)"", 0); +} + +/* + * Create a self signed certificate + */ +int x509write_create_sign(x509_raw *chain, rsa_context *privkey) +{ + int ret, serial; + + /* + * Version ::= INTEGER { v1(0), v2(1), v3(2) } + */ + if ((ret = asn1_add_int(2, &chain->version)) != 0) + return ret; + + if ((ret = asn1_append_tag(&chain->version, ASN1_CONTEXT_SPECIFIC | + ASN1_CONSTRUCTED)) != 0) + return ret; + + + /* + * CertificateSerialNumber ::= INTEGER + */ + srand((unsigned int) time(NULL)); + serial = rand(); + if ((ret = asn1_add_int(serial, &chain->serial)) != 0) + return ret; + + /* + * AlgorithmIdentifier ::= SEQUENCE { + * algorithm OBJECT IDENTIFIER, + * parameters ANY DEFINED BY algorithm OPTIONAL } + */ + if ((ret = asn1_add_oid(&chain->tbs_signalg, + (unsigned char*)OID_PKCS1_RSA_SHA, 9, ASN1_CONSTRUCTED | + ASN1_SEQUENCE, ASN1_NULL, (unsigned char*)"", 0)) != 0) + return ret; + + /* + * Create the tbs + */ + if ((ret = asn1_append_nodes(&chain->tbs, ASN1_CONSTRUCTED | + ASN1_SEQUENCE, 7, &chain->version, &chain->serial, + &chain->tbs_signalg, &chain->issuer, &chain->validity, + &chain->subject, &chain->subpubkey)) != 0) + return ret; + + /* make signing */ + if ((ret = x509write_make_sign(chain, privkey)) != 0) + return ret; + + /* finishing */ + if ((ret = asn1_append_nodes(&chain->raw, ASN1_CONSTRUCTED | + ASN1_SEQUENCE, 3, &chain->tbs, &chain->signalg, + &chain->sign)) != 0) + return ret; + + return 0; +} + +int x509write_create_selfsign(x509_raw *chain, rsa_context *privkey) +{ + /* + * On self signed certificate are subject and issuer the same + */ + x509write_free_node(&chain->issuer); + chain->issuer = chain->subject; + return x509write_create_sign(chain, privkey); +} + +/* + * CertificationRequestInfo ::= SEQUENCE { + * version Version, + * subject Name, + * subjectPublicKeyInfo SubjectPublicKeyInfo, + * attributes [0] IMPLICIT Attributes } + * + * CertificationRequest ::= SEQUENCE { + * certificationRequestInfo CertificationRequestInfo, + * signatureAlgorithm SignatureAlgorithmIdentifier, + * signature Signature } + * + * It use chain.serail for attributes! + * + */ +int x509write_create_csr(x509_raw *chain, rsa_context *privkey) +{ + int ret; + + /* version ::= INTEGER */ + if ((ret = asn1_add_int(0, &chain->version)) != 0) + return ret; + + /* write attributes */ + if ((ret = asn1_add_obj((unsigned char*)"", 0, ASN1_CONTEXT_SPECIFIC | + ASN1_CONSTRUCTED, &chain->serial)) != 0) + return ret; + + /* create CertificationRequestInfo */ + if ((ret = asn1_append_nodes(&chain->tbs, ASN1_CONSTRUCTED | + ASN1_SEQUENCE, 4, &chain->version, &chain->subject, + &chain->subpubkey, &chain->serial)) != 0) + return ret; + + /* make signing */ + if ((ret = x509write_make_sign(chain, privkey)) != 0) + return ret; + + /* finish */ + if ((ret = asn1_append_nodes(&chain->raw, ASN1_CONSTRUCTED | ASN1_SEQUENCE, + 3, &chain->tbs, &chain->signalg, &chain->sign)) != 0) + return ret; + + return ret; +} + +/* + * Free memory + */ +void x509write_free_raw(x509_raw *chain) +{ + x509write_free_node(&chain->raw); + x509write_free_node(&chain->tbs); + x509write_free_node(&chain->version); + x509write_free_node(&chain->serial); + x509write_free_node(&chain->tbs_signalg); + x509write_free_node(&chain->issuer); + x509write_free_node(&chain->validity); + if (chain->subject.data != chain->issuer.data) + x509write_free_node(&chain->subject); + x509write_free_node(&chain->subpubkey); + x509write_free_node(&chain->signalg); + x509write_free_node(&chain->sign); +} + +void x509write_init_raw(x509_raw *chain) +{ + memset((void *) chain, 0, sizeof(x509_raw)); +} + diff --git a/feeds/luci/libs/luci-lib-px5g/src/polarssl/bignum.h b/feeds/luci/libs/luci-lib-px5g/src/polarssl/bignum.h new file mode 100644 index 0000000..c667303 --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/polarssl/bignum.h @@ -0,0 +1,437 @@ +/** + * \file bignum.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef POLARSSL_BIGNUM_H +#define POLARSSL_BIGNUM_H + +#include + +#define POLARSSL_ERR_MPI_FILE_IO_ERROR -0x0002 +#define POLARSSL_ERR_MPI_BAD_INPUT_DATA -0x0004 +#define POLARSSL_ERR_MPI_INVALID_CHARACTER -0x0006 +#define POLARSSL_ERR_MPI_BUFFER_TOO_SMALL -0x0008 +#define POLARSSL_ERR_MPI_NEGATIVE_VALUE -0x000A +#define POLARSSL_ERR_MPI_DIVISION_BY_ZERO -0x000C +#define POLARSSL_ERR_MPI_NOT_ACCEPTABLE -0x000E + +#define MPI_CHK(f) if( ( ret = f ) != 0 ) goto cleanup + +/* + * Define the base integer type, architecture-wise + */ +#if defined(POLARSSL_HAVE_INT8) +typedef unsigned char t_int; +typedef unsigned short t_dbl; +#else +#if defined(POLARSSL_HAVE_INT16) +typedef unsigned short t_int; +typedef unsigned long t_dbl; +#else + typedef unsigned long t_int; + #if defined(_MSC_VER) && defined(_M_IX86) + typedef unsigned __int64 t_dbl; + #else + #if defined(__amd64__) || defined(__x86_64__) || \ + defined(__ppc64__) || defined(__powerpc64__) || \ + defined(__ia64__) || defined(__alpha__) + typedef unsigned int t_dbl __attribute__((mode(TI))); + #else + typedef unsigned long long t_dbl; + #endif + #endif +#endif +#endif + +/** + * \brief MPI structure + */ +typedef struct +{ + int s; /*!< integer sign */ + int n; /*!< total # of limbs */ + t_int *p; /*!< pointer to limbs */ +} +mpi; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Initialize one or more mpi + */ +void mpi_init( mpi *X, ... ); + +/** + * \brief Unallocate one or more mpi + */ +void mpi_free( mpi *X, ... ); + +/** + * \brief Enlarge to the specified number of limbs + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_grow( mpi *X, int nblimbs ); + +/** + * \brief Copy the contents of Y into X + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_copy( mpi *X, mpi *Y ); + +/** + * \brief Swap the contents of X and Y + */ +void mpi_swap( mpi *X, mpi *Y ); + +/** + * \brief Set value from integer + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_lset( mpi *X, int z ); + +/** + * \brief Return the number of least significant bits + */ +int mpi_lsb( mpi *X ); + +/** + * \brief Return the number of most significant bits + */ +int mpi_msb( mpi *X ); + +/** + * \brief Return the total size in bytes + */ +int mpi_size( mpi *X ); + +/** + * \brief Import from an ASCII string + * + * \param X destination mpi + * \param radix input numeric base + * \param s null-terminated string buffer + * + * \return 0 if successful, or an POLARSSL_ERR_MPI_XXX error code + */ +int mpi_read_string( mpi *X, int radix, char *s ); + +/** + * \brief Export into an ASCII string + * + * \param X source mpi + * \param radix output numeric base + * \param s string buffer + * \param slen string buffer size + * + * \return 0 if successful, or an POLARSSL_ERR_MPI_XXX error code + * + * \note Call this function with *slen = 0 to obtain the + * minimum required buffer size in *slen. + */ +int mpi_write_string( mpi *X, int radix, char *s, int *slen ); + +/** + * \brief Read X from an opened file + * + * \param X destination mpi + * \param radix input numeric base + * \param fin input file handle + * + * \return 0 if successful, or an POLARSSL_ERR_MPI_XXX error code + */ +int mpi_read_file( mpi *X, int radix, FILE *fin ); + +/** + * \brief Write X into an opened file, or stdout + * + * \param p prefix, can be NULL + * \param X source mpi + * \param radix output numeric base + * \param fout output file handle + * + * \return 0 if successful, or an POLARSSL_ERR_MPI_XXX error code + * + * \note Set fout == NULL to print X on the console. + */ +int mpi_write_file( char *p, mpi *X, int radix, FILE *fout ); + +/** + * \brief Import X from unsigned binary data, big endian + * + * \param X destination mpi + * \param buf input buffer + * \param buflen input buffer size + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_read_binary( mpi *X, unsigned char *buf, int buflen ); + +/** + * \brief Export X into unsigned binary data, big endian + * + * \param X source mpi + * \param buf output buffer + * \param buflen output buffer size + * + * \return 0 if successful, + * POLARSSL_ERR_MPI_BUFFER_TOO_SMALL if buf isn't large enough + * + * \note Call this function with *buflen = 0 to obtain the + * minimum required buffer size in *buflen. + */ +int mpi_write_binary( mpi *X, unsigned char *buf, int buflen ); + +/** + * \brief Left-shift: X <<= count + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_shift_l( mpi *X, int count ); + +/** + * \brief Right-shift: X >>= count + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_shift_r( mpi *X, int count ); + +/** + * \brief Compare unsigned values + * + * \return 1 if |X| is greater than |Y|, + * -1 if |X| is lesser than |Y| or + * 0 if |X| is equal to |Y| + */ +int mpi_cmp_abs( mpi *X, mpi *Y ); + +/** + * \brief Compare signed values + * + * \return 1 if X is greater than Y, + * -1 if X is lesser than Y or + * 0 if X is equal to Y + */ +int mpi_cmp_mpi( mpi *X, mpi *Y ); + +/** + * \brief Compare signed values + * + * \return 1 if X is greater than z, + * -1 if X is lesser than z or + * 0 if X is equal to z + */ +int mpi_cmp_int( mpi *X, int z ); + +/** + * \brief Unsigned addition: X = |A| + |B| + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_add_abs( mpi *X, mpi *A, mpi *B ); + +/** + * \brief Unsigned substraction: X = |A| - |B| + * + * \return 0 if successful, + * POLARSSL_ERR_MPI_NEGATIVE_VALUE if B is greater than A + */ +int mpi_sub_abs( mpi *X, mpi *A, mpi *B ); + +/** + * \brief Signed addition: X = A + B + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_add_mpi( mpi *X, mpi *A, mpi *B ); + +/** + * \brief Signed substraction: X = A - B + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_sub_mpi( mpi *X, mpi *A, mpi *B ); + +/** + * \brief Signed addition: X = A + b + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_add_int( mpi *X, mpi *A, int b ); + +/** + * \brief Signed substraction: X = A - b + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_sub_int( mpi *X, mpi *A, int b ); + +/** + * \brief Baseline multiplication: X = A * B + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_mul_mpi( mpi *X, mpi *A, mpi *B ); + +/** + * \brief Baseline multiplication: X = A * b + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_mul_int( mpi *X, mpi *A, t_int b ); + +/** + * \brief Division by mpi: A = Q * B + R + * + * \return 0 if successful, + * 1 if memory allocation failed, + * POLARSSL_ERR_MPI_DIVISION_BY_ZERO if B == 0 + * + * \note Either Q or R can be NULL. + */ +int mpi_div_mpi( mpi *Q, mpi *R, mpi *A, mpi *B ); + +/** + * \brief Division by int: A = Q * b + R + * + * \return 0 if successful, + * 1 if memory allocation failed, + * POLARSSL_ERR_MPI_DIVISION_BY_ZERO if b == 0 + * + * \note Either Q or R can be NULL. + */ +int mpi_div_int( mpi *Q, mpi *R, mpi *A, int b ); + +/** + * \brief Modulo: R = A mod B + * + * \return 0 if successful, + * 1 if memory allocation failed, + * POLARSSL_ERR_MPI_DIVISION_BY_ZERO if B == 0 + */ +int mpi_mod_mpi( mpi *R, mpi *A, mpi *B ); + +/** + * \brief Modulo: r = A mod b + * + * \return 0 if successful, + * 1 if memory allocation failed, + * POLARSSL_ERR_MPI_DIVISION_BY_ZERO if b == 0 + */ +int mpi_mod_int( t_int *r, mpi *A, int b ); + +/** + * \brief Sliding-window exponentiation: X = A^E mod N + * + * \return 0 if successful, + * 1 if memory allocation failed, + * POLARSSL_ERR_MPI_BAD_INPUT_DATA if N is negative or even + * + * \note _RR is used to avoid re-computing R*R mod N across + * multiple calls, which speeds up things a bit. It can + * be set to NULL if the extra performance is unneeded. + */ +int mpi_exp_mod( mpi *X, mpi *A, mpi *E, mpi *N, mpi *_RR ); + +/** + * \brief Greatest common divisor: G = gcd(A, B) + * + * \return 0 if successful, + * 1 if memory allocation failed + */ +int mpi_gcd( mpi *G, mpi *A, mpi *B ); + +/** + * \brief Modular inverse: X = A^-1 mod N + * + * \return 0 if successful, + * 1 if memory allocation failed, + * POLARSSL_ERR_MPI_BAD_INPUT_DATA if N is negative or nil + * POLARSSL_ERR_MPI_NOT_ACCEPTABLE if A has no inverse mod N + */ +int mpi_inv_mod( mpi *X, mpi *A, mpi *N ); + +/** + * \brief Miller-Rabin primality test + * + * \return 0 if successful (probably prime), + * 1 if memory allocation failed, + * POLARSSL_ERR_MPI_NOT_ACCEPTABLE if X is not prime + */ +int mpi_is_prime( mpi *X, int (*f_rng)(void *), void *p_rng ); + +/** + * \brief Prime number generation + * + * \param X destination mpi + * \param nbits required size of X in bits + * \param dh_flag if 1, then (X-1)/2 will be prime too + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 if successful (probably prime), + * 1 if memory allocation failed, + * POLARSSL_ERR_MPI_BAD_INPUT_DATA if nbits is < 3 + */ +int mpi_gen_prime( mpi *X, int nbits, int dh_flag, + int (*f_rng)(void *), void *p_rng ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int mpi_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* bignum.h */ diff --git a/feeds/luci/libs/luci-lib-px5g/src/polarssl/bn_mul.h b/feeds/luci/libs/luci-lib-px5g/src/polarssl/bn_mul.h new file mode 100644 index 0000000..f6d34da --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/polarssl/bn_mul.h @@ -0,0 +1,731 @@ +/** + * \file bn_mul.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * Multiply source vector [s] with b, add result + * to destination vector [d] and set carry c. + * + * Currently supports: + * + * . IA-32 (386+) . AMD64 / EM64T + * . IA-32 (SSE2) . Motorola 68000 + * . PowerPC, 32-bit . MicroBlaze + * . PowerPC, 64-bit . TriCore + * . SPARC v8 . ARM v3+ + * . Alpha . MIPS32 + * . C, longlong . C, generic + */ +#ifndef POLARSSL_BN_MUL_H +#define POLARSSL_BN_MUL_H + +#include "polarssl/config.h" + +#if defined(POLARSSL_HAVE_ASM) + +#if defined(__GNUC__) +#if defined(__i386__) + +#define MULADDC_INIT \ + asm( "movl %%ebx, %0 " : "=m" (t)); \ + asm( "movl %0, %%esi " :: "m" (s)); \ + asm( "movl %0, %%edi " :: "m" (d)); \ + asm( "movl %0, %%ecx " :: "m" (c)); \ + asm( "movl %0, %%ebx " :: "m" (b)); + +#define MULADDC_CORE \ + asm( "lodsl " ); \ + asm( "mull %ebx " ); \ + asm( "addl %ecx, %eax " ); \ + asm( "adcl $0, %edx " ); \ + asm( "addl (%edi), %eax " ); \ + asm( "adcl $0, %edx " ); \ + asm( "movl %edx, %ecx " ); \ + asm( "stosl " ); + +#if defined(POLARSSL_HAVE_SSE2) + +#define MULADDC_HUIT \ + asm( "movd %ecx, %mm1 " ); \ + asm( "movd %ebx, %mm0 " ); \ + asm( "movd (%edi), %mm3 " ); \ + asm( "paddq %mm3, %mm1 " ); \ + asm( "movd (%esi), %mm2 " ); \ + asm( "pmuludq %mm0, %mm2 " ); \ + asm( "movd 4(%esi), %mm4 " ); \ + asm( "pmuludq %mm0, %mm4 " ); \ + asm( "movd 8(%esi), %mm6 " ); \ + asm( "pmuludq %mm0, %mm6 " ); \ + asm( "movd 12(%esi), %mm7 " ); \ + asm( "pmuludq %mm0, %mm7 " ); \ + asm( "paddq %mm2, %mm1 " ); \ + asm( "movd 4(%edi), %mm3 " ); \ + asm( "paddq %mm4, %mm3 " ); \ + asm( "movd 8(%edi), %mm5 " ); \ + asm( "paddq %mm6, %mm5 " ); \ + asm( "movd 12(%edi), %mm4 " ); \ + asm( "paddq %mm4, %mm7 " ); \ + asm( "movd %mm1, (%edi) " ); \ + asm( "movd 16(%esi), %mm2 " ); \ + asm( "pmuludq %mm0, %mm2 " ); \ + asm( "psrlq $32, %mm1 " ); \ + asm( "movd 20(%esi), %mm4 " ); \ + asm( "pmuludq %mm0, %mm4 " ); \ + asm( "paddq %mm3, %mm1 " ); \ + asm( "movd 24(%esi), %mm6 " ); \ + asm( "pmuludq %mm0, %mm6 " ); \ + asm( "movd %mm1, 4(%edi) " ); \ + asm( "psrlq $32, %mm1 " ); \ + asm( "movd 28(%esi), %mm3 " ); \ + asm( "pmuludq %mm0, %mm3 " ); \ + asm( "paddq %mm5, %mm1 " ); \ + asm( "movd 16(%edi), %mm5 " ); \ + asm( "paddq %mm5, %mm2 " ); \ + asm( "movd %mm1, 8(%edi) " ); \ + asm( "psrlq $32, %mm1 " ); \ + asm( "paddq %mm7, %mm1 " ); \ + asm( "movd 20(%edi), %mm5 " ); \ + asm( "paddq %mm5, %mm4 " ); \ + asm( "movd %mm1, 12(%edi) " ); \ + asm( "psrlq $32, %mm1 " ); \ + asm( "paddq %mm2, %mm1 " ); \ + asm( "movd 24(%edi), %mm5 " ); \ + asm( "paddq %mm5, %mm6 " ); \ + asm( "movd %mm1, 16(%edi) " ); \ + asm( "psrlq $32, %mm1 " ); \ + asm( "paddq %mm4, %mm1 " ); \ + asm( "movd 28(%edi), %mm5 " ); \ + asm( "paddq %mm5, %mm3 " ); \ + asm( "movd %mm1, 20(%edi) " ); \ + asm( "psrlq $32, %mm1 " ); \ + asm( "paddq %mm6, %mm1 " ); \ + asm( "movd %mm1, 24(%edi) " ); \ + asm( "psrlq $32, %mm1 " ); \ + asm( "paddq %mm3, %mm1 " ); \ + asm( "movd %mm1, 28(%edi) " ); \ + asm( "addl $32, %edi " ); \ + asm( "addl $32, %esi " ); \ + asm( "psrlq $32, %mm1 " ); \ + asm( "movd %mm1, %ecx " ); + +#define MULADDC_STOP \ + asm( "emms " ); \ + asm( "movl %0, %%ebx " :: "m" (t)); \ + asm( "movl %%ecx, %0 " : "=m" (c)); \ + asm( "movl %%edi, %0 " : "=m" (d)); \ + asm( "movl %%esi, %0 " : "=m" (s) :: \ + "eax", "ecx", "edx", "esi", "edi" ); + +#else + +#define MULADDC_STOP \ + asm( "movl %0, %%ebx " :: "m" (t)); \ + asm( "movl %%ecx, %0 " : "=m" (c)); \ + asm( "movl %%edi, %0 " : "=m" (d)); \ + asm( "movl %%esi, %0 " : "=m" (s) :: \ + "eax", "ecx", "edx", "esi", "edi" ); + +#endif /* SSE2 */ +#endif /* i386 */ + +#if defined(__amd64__) || defined (__x86_64__) + +#define MULADDC_INIT \ + asm( "movq %0, %%rsi " :: "m" (s)); \ + asm( "movq %0, %%rdi " :: "m" (d)); \ + asm( "movq %0, %%rcx " :: "m" (c)); \ + asm( "movq %0, %%rbx " :: "m" (b)); \ + asm( "xorq %r8, %r8 " ); + +#define MULADDC_CORE \ + asm( "movq (%rsi),%rax " ); \ + asm( "mulq %rbx " ); \ + asm( "addq $8, %rsi " ); \ + asm( "addq %rcx, %rax " ); \ + asm( "movq %r8, %rcx " ); \ + asm( "adcq $0, %rdx " ); \ + asm( "nop " ); \ + asm( "addq %rax, (%rdi) " ); \ + asm( "adcq %rdx, %rcx " ); \ + asm( "addq $8, %rdi " ); + +#define MULADDC_STOP \ + asm( "movq %%rcx, %0 " : "=m" (c)); \ + asm( "movq %%rdi, %0 " : "=m" (d)); \ + asm( "movq %%rsi, %0 " : "=m" (s) :: \ + "rax", "rcx", "rdx", "rbx", "rsi", "rdi", "r8" ); + +#endif /* AMD64 */ + +#if defined(__mc68020__) || defined(__mcpu32__) + +#define MULADDC_INIT \ + asm( "movl %0, %%a2 " :: "m" (s)); \ + asm( "movl %0, %%a3 " :: "m" (d)); \ + asm( "movl %0, %%d3 " :: "m" (c)); \ + asm( "movl %0, %%d2 " :: "m" (b)); \ + asm( "moveq #0, %d0 " ); + +#define MULADDC_CORE \ + asm( "movel %a2@+, %d1 " ); \ + asm( "mulul %d2, %d4:%d1 " ); \ + asm( "addl %d3, %d1 " ); \ + asm( "addxl %d0, %d4 " ); \ + asm( "moveq #0, %d3 " ); \ + asm( "addl %d1, %a3@+ " ); \ + asm( "addxl %d4, %d3 " ); + +#define MULADDC_STOP \ + asm( "movl %%d3, %0 " : "=m" (c)); \ + asm( "movl %%a3, %0 " : "=m" (d)); \ + asm( "movl %%a2, %0 " : "=m" (s) :: \ + "d0", "d1", "d2", "d3", "d4", "a2", "a3" ); + +#define MULADDC_HUIT \ + asm( "movel %a2@+, %d1 " ); \ + asm( "mulul %d2, %d4:%d1 " ); \ + asm( "addxl %d3, %d1 " ); \ + asm( "addxl %d0, %d4 " ); \ + asm( "addl %d1, %a3@+ " ); \ + asm( "movel %a2@+, %d1 " ); \ + asm( "mulul %d2, %d3:%d1 " ); \ + asm( "addxl %d4, %d1 " ); \ + asm( "addxl %d0, %d3 " ); \ + asm( "addl %d1, %a3@+ " ); \ + asm( "movel %a2@+, %d1 " ); \ + asm( "mulul %d2, %d4:%d1 " ); \ + asm( "addxl %d3, %d1 " ); \ + asm( "addxl %d0, %d4 " ); \ + asm( "addl %d1, %a3@+ " ); \ + asm( "movel %a2@+, %d1 " ); \ + asm( "mulul %d2, %d3:%d1 " ); \ + asm( "addxl %d4, %d1 " ); \ + asm( "addxl %d0, %d3 " ); \ + asm( "addl %d1, %a3@+ " ); \ + asm( "movel %a2@+, %d1 " ); \ + asm( "mulul %d2, %d4:%d1 " ); \ + asm( "addxl %d3, %d1 " ); \ + asm( "addxl %d0, %d4 " ); \ + asm( "addl %d1, %a3@+ " ); \ + asm( "movel %a2@+, %d1 " ); \ + asm( "mulul %d2, %d3:%d1 " ); \ + asm( "addxl %d4, %d1 " ); \ + asm( "addxl %d0, %d3 " ); \ + asm( "addl %d1, %a3@+ " ); \ + asm( "movel %a2@+, %d1 " ); \ + asm( "mulul %d2, %d4:%d1 " ); \ + asm( "addxl %d3, %d1 " ); \ + asm( "addxl %d0, %d4 " ); \ + asm( "addl %d1, %a3@+ " ); \ + asm( "movel %a2@+, %d1 " ); \ + asm( "mulul %d2, %d3:%d1 " ); \ + asm( "addxl %d4, %d1 " ); \ + asm( "addxl %d0, %d3 " ); \ + asm( "addl %d1, %a3@+ " ); \ + asm( "addxl %d0, %d3 " ); + +#endif /* MC68000 */ + +#if defined(__powerpc__) || defined(__ppc__) +#if defined(__powerpc64__) || defined(__ppc64__) + +#if defined(__MACH__) && defined(__APPLE__) + +#define MULADDC_INIT \ + asm( "ld r3, %0 " :: "m" (s)); \ + asm( "ld r4, %0 " :: "m" (d)); \ + asm( "ld r5, %0 " :: "m" (c)); \ + asm( "ld r6, %0 " :: "m" (b)); \ + asm( "addi r3, r3, -8 " ); \ + asm( "addi r4, r4, -8 " ); \ + asm( "addic r5, r5, 0 " ); + +#define MULADDC_CORE \ + asm( "ldu r7, 8(r3) " ); \ + asm( "mulld r8, r7, r6 " ); \ + asm( "mulhdu r9, r7, r6 " ); \ + asm( "adde r8, r8, r5 " ); \ + asm( "ld r7, 8(r4) " ); \ + asm( "addze r5, r9 " ); \ + asm( "addc r8, r8, r7 " ); \ + asm( "stdu r8, 8(r4) " ); + +#define MULADDC_STOP \ + asm( "addze r5, r5 " ); \ + asm( "addi r4, r4, 8 " ); \ + asm( "addi r3, r3, 8 " ); \ + asm( "std r5, %0 " : "=m" (c)); \ + asm( "std r4, %0 " : "=m" (d)); \ + asm( "std r3, %0 " : "=m" (s) :: \ + "r3", "r4", "r5", "r6", "r7", "r8", "r9" ); + +#else + +#define MULADDC_INIT \ + asm( "ld %%r3, %0 " :: "m" (s)); \ + asm( "ld %%r4, %0 " :: "m" (d)); \ + asm( "ld %%r5, %0 " :: "m" (c)); \ + asm( "ld %%r6, %0 " :: "m" (b)); \ + asm( "addi %r3, %r3, -8 " ); \ + asm( "addi %r4, %r4, -8 " ); \ + asm( "addic %r5, %r5, 0 " ); + +#define MULADDC_CORE \ + asm( "ldu %r7, 8(%r3) " ); \ + asm( "mulld %r8, %r7, %r6 " ); \ + asm( "mulhdu %r9, %r7, %r6 " ); \ + asm( "adde %r8, %r8, %r5 " ); \ + asm( "ld %r7, 8(%r4) " ); \ + asm( "addze %r5, %r9 " ); \ + asm( "addc %r8, %r8, %r7 " ); \ + asm( "stdu %r8, 8(%r4) " ); + +#define MULADDC_STOP \ + asm( "addze %r5, %r5 " ); \ + asm( "addi %r4, %r4, 8 " ); \ + asm( "addi %r3, %r3, 8 " ); \ + asm( "std %%r5, %0 " : "=m" (c)); \ + asm( "std %%r4, %0 " : "=m" (d)); \ + asm( "std %%r3, %0 " : "=m" (s) :: \ + "r3", "r4", "r5", "r6", "r7", "r8", "r9" ); + +#endif + +#else /* PPC32 */ + +#if defined(__MACH__) && defined(__APPLE__) + +#define MULADDC_INIT \ + asm( "lwz r3, %0 " :: "m" (s)); \ + asm( "lwz r4, %0 " :: "m" (d)); \ + asm( "lwz r5, %0 " :: "m" (c)); \ + asm( "lwz r6, %0 " :: "m" (b)); \ + asm( "addi r3, r3, -4 " ); \ + asm( "addi r4, r4, -4 " ); \ + asm( "addic r5, r5, 0 " ); + +#define MULADDC_CORE \ + asm( "lwzu r7, 4(r3) " ); \ + asm( "mullw r8, r7, r6 " ); \ + asm( "mulhwu r9, r7, r6 " ); \ + asm( "adde r8, r8, r5 " ); \ + asm( "lwz r7, 4(r4) " ); \ + asm( "addze r5, r9 " ); \ + asm( "addc r8, r8, r7 " ); \ + asm( "stwu r8, 4(r4) " ); + +#define MULADDC_STOP \ + asm( "addze r5, r5 " ); \ + asm( "addi r4, r4, 4 " ); \ + asm( "addi r3, r3, 4 " ); \ + asm( "stw r5, %0 " : "=m" (c)); \ + asm( "stw r4, %0 " : "=m" (d)); \ + asm( "stw r3, %0 " : "=m" (s) :: \ + "r3", "r4", "r5", "r6", "r7", "r8", "r9" ); + +#else + +#define MULADDC_INIT \ + asm( "lwz %%r3, %0 " :: "m" (s)); \ + asm( "lwz %%r4, %0 " :: "m" (d)); \ + asm( "lwz %%r5, %0 " :: "m" (c)); \ + asm( "lwz %%r6, %0 " :: "m" (b)); \ + asm( "addi %r3, %r3, -4 " ); \ + asm( "addi %r4, %r4, -4 " ); \ + asm( "addic %r5, %r5, 0 " ); + +#define MULADDC_CORE \ + asm( "lwzu %r7, 4(%r3) " ); \ + asm( "mullw %r8, %r7, %r6 " ); \ + asm( "mulhwu %r9, %r7, %r6 " ); \ + asm( "adde %r8, %r8, %r5 " ); \ + asm( "lwz %r7, 4(%r4) " ); \ + asm( "addze %r5, %r9 " ); \ + asm( "addc %r8, %r8, %r7 " ); \ + asm( "stwu %r8, 4(%r4) " ); + +#define MULADDC_STOP \ + asm( "addze %r5, %r5 " ); \ + asm( "addi %r4, %r4, 4 " ); \ + asm( "addi %r3, %r3, 4 " ); \ + asm( "stw %%r5, %0 " : "=m" (c)); \ + asm( "stw %%r4, %0 " : "=m" (d)); \ + asm( "stw %%r3, %0 " : "=m" (s) :: \ + "r3", "r4", "r5", "r6", "r7", "r8", "r9" ); + +#endif + +#endif /* PPC32 */ +#endif /* PPC64 */ + +#if defined(__sparc__) + +#define MULADDC_INIT \ + asm( "ld %0, %%o0 " :: "m" (s)); \ + asm( "ld %0, %%o1 " :: "m" (d)); \ + asm( "ld %0, %%o2 " :: "m" (c)); \ + asm( "ld %0, %%o3 " :: "m" (b)); + +#define MULADDC_CORE \ + asm( "ld [%o0], %o4 " ); \ + asm( "inc 4, %o0 " ); \ + asm( "ld [%o1], %o5 " ); \ + asm( "umul %o3, %o4, %o4 " ); \ + asm( "addcc %o4, %o2, %o4 " ); \ + asm( "rd %y, %g1 " ); \ + asm( "addx %g1, 0, %g1 " ); \ + asm( "addcc %o4, %o5, %o4 " ); \ + asm( "st %o4, [%o1] " ); \ + asm( "addx %g1, 0, %o2 " ); \ + asm( "inc 4, %o1 " ); + +#define MULADDC_STOP \ + asm( "st %%o2, %0 " : "=m" (c)); \ + asm( "st %%o1, %0 " : "=m" (d)); \ + asm( "st %%o0, %0 " : "=m" (s) :: \ + "g1", "o0", "o1", "o2", "o3", "o4", "o5" ); + +#endif /* SPARCv8 */ + +#if defined(__microblaze__) || defined(microblaze) + +#define MULADDC_INIT \ + asm( "lwi r3, %0 " :: "m" (s)); \ + asm( "lwi r4, %0 " :: "m" (d)); \ + asm( "lwi r5, %0 " :: "m" (c)); \ + asm( "lwi r6, %0 " :: "m" (b)); \ + asm( "andi r7, r6, 0xffff" ); \ + asm( "bsrli r6, r6, 16 " ); + +#define MULADDC_CORE \ + asm( "lhui r8, r3, 0 " ); \ + asm( "addi r3, r3, 2 " ); \ + asm( "lhui r9, r3, 0 " ); \ + asm( "addi r3, r3, 2 " ); \ + asm( "mul r10, r9, r6 " ); \ + asm( "mul r11, r8, r7 " ); \ + asm( "mul r12, r9, r7 " ); \ + asm( "mul r13, r8, r6 " ); \ + asm( "bsrli r8, r10, 16 " ); \ + asm( "bsrli r9, r11, 16 " ); \ + asm( "add r13, r13, r8 " ); \ + asm( "add r13, r13, r9 " ); \ + asm( "bslli r10, r10, 16 " ); \ + asm( "bslli r11, r11, 16 " ); \ + asm( "add r12, r12, r10 " ); \ + asm( "addc r13, r13, r0 " ); \ + asm( "add r12, r12, r11 " ); \ + asm( "addc r13, r13, r0 " ); \ + asm( "lwi r10, r4, 0 " ); \ + asm( "add r12, r12, r10 " ); \ + asm( "addc r13, r13, r0 " ); \ + asm( "add r12, r12, r5 " ); \ + asm( "addc r5, r13, r0 " ); \ + asm( "swi r12, r4, 0 " ); \ + asm( "addi r4, r4, 4 " ); + +#define MULADDC_STOP \ + asm( "swi r5, %0 " : "=m" (c)); \ + asm( "swi r4, %0 " : "=m" (d)); \ + asm( "swi r3, %0 " : "=m" (s) :: \ + "r3", "r4" , "r5" , "r6" , "r7" , "r8" , \ + "r9", "r10", "r11", "r12", "r13" ); + +#endif /* MicroBlaze */ + +#if defined(__tricore__) + +#define MULADDC_INIT \ + asm( "ld.a %%a2, %0 " :: "m" (s)); \ + asm( "ld.a %%a3, %0 " :: "m" (d)); \ + asm( "ld.w %%d4, %0 " :: "m" (c)); \ + asm( "ld.w %%d1, %0 " :: "m" (b)); \ + asm( "xor %d5, %d5 " ); + +#define MULADDC_CORE \ + asm( "ld.w %d0, [%a2+] " ); \ + asm( "madd.u %e2, %e4, %d0, %d1 " ); \ + asm( "ld.w %d0, [%a3] " ); \ + asm( "addx %d2, %d2, %d0 " ); \ + asm( "addc %d3, %d3, 0 " ); \ + asm( "mov %d4, %d3 " ); \ + asm( "st.w [%a3+], %d2 " ); + +#define MULADDC_STOP \ + asm( "st.w %0, %%d4 " : "=m" (c)); \ + asm( "st.a %0, %%a3 " : "=m" (d)); \ + asm( "st.a %0, %%a2 " : "=m" (s) :: \ + "d0", "d1", "e2", "d4", "a2", "a3" ); + +#endif /* TriCore */ + +#if defined(__arm__) + +#define MULADDC_INIT \ + asm( "ldr r0, %0 " :: "m" (s)); \ + asm( "ldr r1, %0 " :: "m" (d)); \ + asm( "ldr r2, %0 " :: "m" (c)); \ + asm( "ldr r3, %0 " :: "m" (b)); + +#define MULADDC_CORE \ + asm( "ldr r4, [r0], #4 " ); \ + asm( "mov r5, #0 " ); \ + asm( "ldr r6, [r1] " ); \ + asm( "umlal r2, r5, r3, r4 " ); \ + asm( "adds r7, r6, r2 " ); \ + asm( "adc r2, r5, #0 " ); \ + asm( "str r7, [r1], #4 " ); + +#define MULADDC_STOP \ + asm( "str r2, %0 " : "=m" (c)); \ + asm( "str r1, %0 " : "=m" (d)); \ + asm( "str r0, %0 " : "=m" (s) :: \ + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7" ); + +#endif /* ARMv3 */ + +#if defined(__alpha__) + +#define MULADDC_INIT \ + asm( "ldq $1, %0 " :: "m" (s)); \ + asm( "ldq $2, %0 " :: "m" (d)); \ + asm( "ldq $3, %0 " :: "m" (c)); \ + asm( "ldq $4, %0 " :: "m" (b)); + +#define MULADDC_CORE \ + asm( "ldq $6, 0($1) " ); \ + asm( "addq $1, 8, $1 " ); \ + asm( "mulq $6, $4, $7 " ); \ + asm( "umulh $6, $4, $6 " ); \ + asm( "addq $7, $3, $7 " ); \ + asm( "cmpult $7, $3, $3 " ); \ + asm( "ldq $5, 0($2) " ); \ + asm( "addq $7, $5, $7 " ); \ + asm( "cmpult $7, $5, $5 " ); \ + asm( "stq $7, 0($2) " ); \ + asm( "addq $2, 8, $2 " ); \ + asm( "addq $6, $3, $3 " ); \ + asm( "addq $5, $3, $3 " ); + +#define MULADDC_STOP \ + asm( "stq $3, %0 " : "=m" (c)); \ + asm( "stq $2, %0 " : "=m" (d)); \ + asm( "stq $1, %0 " : "=m" (s) :: \ + "$1", "$2", "$3", "$4", "$5", "$6", "$7" ); + +#endif /* Alpha */ + +#if defined(__mips__) + +#define MULADDC_INIT \ + asm( "lw $10, %0 " :: "m" (s)); \ + asm( "lw $11, %0 " :: "m" (d)); \ + asm( "lw $12, %0 " :: "m" (c)); \ + asm( "lw $13, %0 " :: "m" (b)); + +#define MULADDC_CORE \ + asm( "lw $14, 0($10) " ); \ + asm( "multu $13, $14 " ); \ + asm( "addi $10, $10, 4 " ); \ + asm( "mflo $14 " ); \ + asm( "mfhi $9 " ); \ + asm( "addu $14, $12, $14 " ); \ + asm( "lw $15, 0($11) " ); \ + asm( "sltu $12, $14, $12 " ); \ + asm( "addu $15, $14, $15 " ); \ + asm( "sltu $14, $15, $14 " ); \ + asm( "addu $12, $12, $9 " ); \ + asm( "sw $15, 0($11) " ); \ + asm( "addu $12, $12, $14 " ); \ + asm( "addi $11, $11, 4 " ); + +#define MULADDC_STOP \ + asm( "sw $12, %0 " : "=m" (c)); \ + asm( "sw $11, %0 " : "=m" (d)); \ + asm( "sw $10, %0 " : "=m" (s) :: \ + "$9", "$10", "$11", "$12", "$13", "$14", "$15" ); + +#endif /* MIPS */ +#endif /* GNUC */ + +#if (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__) + +#define MULADDC_INIT \ + __asm mov esi, s \ + __asm mov edi, d \ + __asm mov ecx, c \ + __asm mov ebx, b + +#define MULADDC_CORE \ + __asm lodsd \ + __asm mul ebx \ + __asm add eax, ecx \ + __asm adc edx, 0 \ + __asm add eax, [edi] \ + __asm adc edx, 0 \ + __asm mov ecx, edx \ + __asm stosd + +#if defined(POLARSSL_HAVE_SSE2) + +#define EMIT __asm _emit + +#define MULADDC_HUIT \ + EMIT 0x0F EMIT 0x6E EMIT 0xC9 \ + EMIT 0x0F EMIT 0x6E EMIT 0xC3 \ + EMIT 0x0F EMIT 0x6E EMIT 0x1F \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCB \ + EMIT 0x0F EMIT 0x6E EMIT 0x16 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xD0 \ + EMIT 0x0F EMIT 0x6E EMIT 0x66 EMIT 0x04 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xE0 \ + EMIT 0x0F EMIT 0x6E EMIT 0x76 EMIT 0x08 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xF0 \ + EMIT 0x0F EMIT 0x6E EMIT 0x7E EMIT 0x0C \ + EMIT 0x0F EMIT 0xF4 EMIT 0xF8 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCA \ + EMIT 0x0F EMIT 0x6E EMIT 0x5F EMIT 0x04 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xDC \ + EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x08 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xEE \ + EMIT 0x0F EMIT 0x6E EMIT 0x67 EMIT 0x0C \ + EMIT 0x0F EMIT 0xD4 EMIT 0xFC \ + EMIT 0x0F EMIT 0x7E EMIT 0x0F \ + EMIT 0x0F EMIT 0x6E EMIT 0x56 EMIT 0x10 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xD0 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0x6E EMIT 0x66 EMIT 0x14 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xE0 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCB \ + EMIT 0x0F EMIT 0x6E EMIT 0x76 EMIT 0x18 \ + EMIT 0x0F EMIT 0xF4 EMIT 0xF0 \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x04 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0x6E EMIT 0x5E EMIT 0x1C \ + EMIT 0x0F EMIT 0xF4 EMIT 0xD8 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCD \ + EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x10 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xD5 \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x08 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCF \ + EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x14 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xE5 \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x0C \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCA \ + EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x18 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xF5 \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x10 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCC \ + EMIT 0x0F EMIT 0x6E EMIT 0x6F EMIT 0x1C \ + EMIT 0x0F EMIT 0xD4 EMIT 0xDD \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x14 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCE \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x18 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0xD4 EMIT 0xCB \ + EMIT 0x0F EMIT 0x7E EMIT 0x4F EMIT 0x1C \ + EMIT 0x83 EMIT 0xC7 EMIT 0x20 \ + EMIT 0x83 EMIT 0xC6 EMIT 0x20 \ + EMIT 0x0F EMIT 0x73 EMIT 0xD1 EMIT 0x20 \ + EMIT 0x0F EMIT 0x7E EMIT 0xC9 + +#define MULADDC_STOP \ + EMIT 0x0F EMIT 0x77 \ + __asm mov c, ecx \ + __asm mov d, edi \ + __asm mov s, esi \ + +#else + +#define MULADDC_STOP \ + __asm mov c, ecx \ + __asm mov d, edi \ + __asm mov s, esi \ + +#endif /* SSE2 */ +#endif /* MSVC */ + +#endif /* POLARSSL_HAVE_ASM */ + +#if !defined(MULADDC_CORE) +#if defined(POLARSSL_HAVE_LONGLONG) + +#define MULADDC_INIT \ +{ \ + t_dbl r; \ + t_int r0, r1; + +#define MULADDC_CORE \ + r = *(s++) * (t_dbl) b; \ + r0 = r; \ + r1 = r >> biL; \ + r0 += c; r1 += (r0 < c); \ + r0 += *d; r1 += (r0 < *d); \ + c = r1; *(d++) = r0; + +#define MULADDC_STOP \ +} + +#else +#define MULADDC_INIT \ +{ \ + t_int s0, s1, b0, b1; \ + t_int r0, r1, rx, ry; \ + b0 = ( b << biH ) >> biH; \ + b1 = ( b >> biH ); + +#define MULADDC_CORE \ + s0 = ( *s << biH ) >> biH; \ + s1 = ( *s >> biH ); s++; \ + rx = s0 * b1; r0 = s0 * b0; \ + ry = s1 * b0; r1 = s1 * b1; \ + r1 += ( rx >> biH ); \ + r1 += ( ry >> biH ); \ + rx <<= biH; ry <<= biH; \ + r0 += rx; r1 += (r0 < rx); \ + r0 += ry; r1 += (r0 < ry); \ + r0 += c; r1 += (r0 < c); \ + r0 += *d; r1 += (r0 < *d); \ + c = r1; *(d++) = r0; + +#define MULADDC_STOP \ +} + +#endif /* C (generic) */ +#endif /* C (longlong) */ + +#endif /* bn_mul.h */ diff --git a/feeds/luci/libs/luci-lib-px5g/src/polarssl/config.h b/feeds/luci/libs/luci-lib-px5g/src/polarssl/config.h new file mode 100644 index 0000000..6463e52 --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/polarssl/config.h @@ -0,0 +1,329 @@ +/** + * \file config.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This set of compile-time options may be used to enable + * or disable features selectively, and reduce the global + * memory footprint. + */ +#ifndef POLARSSL_CONFIG_H +#define POLARSSL_CONFIG_H + +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE 1 +#endif + +/* + * Uncomment if native integers are 8-bit wide. + * +#define POLARSSL_HAVE_INT8 + */ + +/* + * Uncomment if native integers are 16-bit wide. + * +#define POLARSSL_HAVE_INT16 + */ + +/* + * Uncomment if the compiler supports long long. + */ +#define POLARSSL_HAVE_LONGLONG + + +/* + * Uncomment to enable the use of assembly code. + */ +#define POLARSSL_HAVE_ASM + +/* + * Uncomment if the CPU supports SSE2 (IA-32 specific). + * +#define POLARSSL_HAVE_SSE2 + */ + +/* + * Enable all SSL/TLS debugging messages. + */ +#define POLARSSL_DEBUG_MSG + +/* + * Enable the checkup functions (*_self_test). + */ +#define POLARSSL_SELF_TEST + +/* + * Enable the prime-number generation code. + */ +#define POLARSSL_GENPRIME + +/* + * Uncomment this macro to store the AES tables in ROM. + * +#define POLARSSL_AES_ROM_TABLES + */ + +/* + * Module: library/aes.c + * Caller: library/ssl_tls.c + * + * This module enables the following ciphersuites: + * SSL_RSA_AES_128_SHA + * SSL_RSA_AES_256_SHA + * SSL_EDH_RSA_AES_256_SHA + */ +#define POLARSSL_AES_C + +/* + * Module: library/arc4.c + * Caller: library/ssl_tls.c + * + * This module enables the following ciphersuites: + * SSL_RSA_RC4_128_MD5 + * SSL_RSA_RC4_128_SHA + */ +#define POLARSSL_ARC4_C + +/* + * Module: library/base64.c + * Caller: library/x509parse.c + * + * This module is required for X.509 support. + */ +#define POLARSSL_BASE64_C + +/* + * Module: library/bignum.c + * Caller: library/dhm.c + * library/rsa.c + * library/ssl_tls.c + * library/x509parse.c + * + * This module is required for RSA and DHM support. + */ +#define POLARSSL_BIGNUM_C + +/* + * Module: library/camellia.c + * Caller: + * + * This module enabled the following cipher suites: + */ +#define POLARSSL_CAMELLIA_C + +/* + * Module: library/certs.c + * Caller: + * + * This module is used for testing (ssl_client/server). + */ +#define POLARSSL_CERTS_C + +/* + * Module: library/debug.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * + * This module provides debugging functions. + */ +#define POLARSSL_DEBUG_C + +/* + * Module: library/des.c + * Caller: library/ssl_tls.c + * + * This module enables the following ciphersuites: + * SSL_RSA_DES_168_SHA + * SSL_EDH_RSA_DES_168_SHA + */ +#define POLARSSL_DES_C + +/* + * Module: library/dhm.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * + * This module enables the following ciphersuites: + * SSL_EDH_RSA_DES_168_SHA + * SSL_EDH_RSA_AES_256_SHA + */ +#define POLARSSL_DHM_C + +/* + * Module: library/havege.c + * Caller: + * + * This module enables the HAVEGE random number generator. + */ +#define POLARSSL_HAVEGE_C + +/* + * Module: library/md2.c + * Caller: library/x509parse.c + * + * Uncomment to enable support for (rare) MD2-signed X.509 certs. + * +#define POLARSSL_MD2_C + */ + +/* + * Module: library/md4.c + * Caller: library/x509parse.c + * + * Uncomment to enable support for (rare) MD4-signed X.509 certs. + * +#define POLARSSL_MD4_C + */ + +/* + * Module: library/md5.c + * Caller: library/ssl_tls.c + * library/x509parse.c + * + * This module is required for SSL/TLS and X.509. + */ +#define POLARSSL_MD5_C + +/* + * Module: library/net.c + * Caller: + * + * This module provides TCP/IP networking routines. + */ +#define POLARSSL_NET_C + +/* + * Module: library/padlock.c + * Caller: library/aes.c + * + * This modules adds support for the VIA PadLock on x86. + */ +#define POLARSSL_PADLOCK_C + +/* + * Module: library/rsa.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * library/x509.c + * + * This module is required for SSL/TLS and MD5-signed certificates. + */ +#define POLARSSL_RSA_C + +/* + * Module: library/sha1.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * library/x509parse.c + * + * This module is required for SSL/TLS and SHA1-signed certificates. + */ +#define POLARSSL_SHA1_C + +/* + * Module: library/sha2.c + * Caller: + * + * This module adds support for SHA-224 and SHA-256. + */ +#define POLARSSL_SHA2_C + +/* + * Module: library/sha4.c + * Caller: + * + * This module adds support for SHA-384 and SHA-512. + */ +#define POLARSSL_SHA4_C + +/* + * Module: library/ssl_cli.c + * Caller: + * + * This module is required for SSL/TLS client support. + */ +#define POLARSSL_SSL_CLI_C + +/* + * Module: library/ssl_srv.c + * Caller: + * + * This module is required for SSL/TLS server support. + */ +#define POLARSSL_SSL_SRV_C + +/* + * Module: library/ssl_tls.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * + * This module is required for SSL/TLS. + */ +#define POLARSSL_SSL_TLS_C + +/* + * Module: library/timing.c + * Caller: library/havege.c + * + * This module is used by the HAVEGE random number generator. + */ +#define POLARSSL_TIMING_C + +/* + * Module: library/x509parse.c + * Caller: library/ssl_cli.c + * library/ssl_srv.c + * library/ssl_tls.c + * + * This module is required for X.509 certificate parsing. + */ +#define POLARSSL_X509_PARSE_C + +/* + * Module: library/x509_write.c + * Caller: + * + * This module is required for X.509 certificate writing. + */ +#define POLARSSL_X509_WRITE_C + +/* + * Module: library/xtea.c + * Caller: + */ +#define POLARSSL_XTEA_C + +#endif /* config.h */ diff --git a/feeds/luci/libs/luci-lib-px5g/src/polarssl/havege.h b/feeds/luci/libs/luci-lib-px5g/src/polarssl/havege.h new file mode 100644 index 0000000..c27ceca --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/polarssl/havege.h @@ -0,0 +1,75 @@ +/** + * \file havege.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef POLARSSL_HAVEGE_H +#define POLARSSL_HAVEGE_H + +#define COLLECT_SIZE 1024 + +/** + * \brief HAVEGE state structure + */ +typedef struct +{ + int PT1, PT2, offset[2]; + int pool[COLLECT_SIZE]; + int WALK[8192]; +} +havege_state; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief HAVEGE initialization + * + * \param hs HAVEGE state to be initialized + */ +void havege_init( havege_state *hs ); + +/** + * \brief HAVEGE rand function + * + * \param rng_st points to an HAVEGE state + * + * \return A random int + */ +int havege_rand( void *p_rng ); + +#ifdef __cplusplus +} +#endif + +#endif /* havege.h */ diff --git a/feeds/luci/libs/luci-lib-px5g/src/polarssl/rsa.h b/feeds/luci/libs/luci-lib-px5g/src/polarssl/rsa.h new file mode 100644 index 0000000..b31dc2f --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/polarssl/rsa.h @@ -0,0 +1,309 @@ +/** + * \file rsa.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef POLARSSL_RSA_H +#define POLARSSL_RSA_H + +#include "polarssl/bignum.h" + +#define POLARSSL_ERR_RSA_BAD_INPUT_DATA -0x0400 +#define POLARSSL_ERR_RSA_INVALID_PADDING -0x0410 +#define POLARSSL_ERR_RSA_KEY_GEN_FAILED -0x0420 +#define POLARSSL_ERR_RSA_KEY_CHECK_FAILED -0x0430 +#define POLARSSL_ERR_RSA_PUBLIC_FAILED -0x0440 +#define POLARSSL_ERR_RSA_PRIVATE_FAILED -0x0450 +#define POLARSSL_ERR_RSA_VERIFY_FAILED -0x0460 +#define POLARSSL_ERR_RSA_OUTPUT_TO_LARGE -0x0470 + +/* + * PKCS#1 constants + */ +#define RSA_RAW 0 +#define RSA_MD2 2 +#define RSA_MD4 3 +#define RSA_MD5 4 +#define RSA_SHA1 5 +#define RSA_SHA256 6 + +#define RSA_PUBLIC 0 +#define RSA_PRIVATE 1 + +#define RSA_PKCS_V15 0 +#define RSA_PKCS_V21 1 + +#define RSA_SIGN 1 +#define RSA_CRYPT 2 + +/* + * DigestInfo ::= SEQUENCE { + * digestAlgorithm DigestAlgorithmIdentifier, + * digest Digest } + * + * DigestAlgorithmIdentifier ::= AlgorithmIdentifier + * + * Digest ::= OCTET STRING + */ +#define ASN1_HASH_MDX \ + "\x30\x20\x30\x0C\x06\x08\x2A\x86\x48" \ + "\x86\xF7\x0D\x02\x00\x05\x00\x04\x10" + +#define ASN1_HASH_SHA1 \ + "\x30\x21\x30\x09\x06\x05\x2B\x0E\x03" \ + "\x02\x1A\x05\x00\x04\x14" + +/** + * \brief RSA context structure + */ +typedef struct +{ + int ver; /*!< always 0 */ + int len; /*!< size(N) in chars */ + + mpi N; /*!< public modulus */ + mpi E; /*!< public exponent */ + + mpi D; /*!< private exponent */ + mpi P; /*!< 1st prime factor */ + mpi Q; /*!< 2nd prime factor */ + mpi DP; /*!< D % (P - 1) */ + mpi DQ; /*!< D % (Q - 1) */ + mpi QP; /*!< 1 / (Q % P) */ + + mpi RN; /*!< cached R^2 mod N */ + mpi RP; /*!< cached R^2 mod P */ + mpi RQ; /*!< cached R^2 mod Q */ + + int padding; /*!< 1.5 or OAEP/PSS */ + int hash_id; /*!< hash identifier */ + int (*f_rng)(void *); /*!< RNG function */ + void *p_rng; /*!< RNG parameter */ +} +rsa_context; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Initialize an RSA context + * + * \param ctx RSA context to be initialized + * \param padding RSA_PKCS_V15 or RSA_PKCS_V21 + * \param hash_id RSA_PKCS_V21 hash identifier + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \note The hash_id parameter is actually ignored + * when using RSA_PKCS_V15 padding. + * + * \note Currently (xyssl-0.8), RSA_PKCS_V21 padding + * is not supported. + */ +void rsa_init( rsa_context *ctx, + int padding, + int hash_id, + int (*f_rng)(void *), + void *p_rng ); + +/** + * \brief Generate an RSA keypair + * + * \param ctx RSA context that will hold the key + * \param nbits size of the public key in bits + * \param exponent public exponent (e.g., 65537) + * + * \note rsa_init() must be called beforehand to setup + * the RSA context (especially f_rng and p_rng). + * + * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code + */ +int rsa_gen_key( rsa_context *ctx, int nbits, int exponent ); + +/** + * \brief Check a public RSA key + * + * \param ctx RSA context to be checked + * + * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code + */ +int rsa_check_pubkey( rsa_context *ctx ); + +/** + * \brief Check a private RSA key + * + * \param ctx RSA context to be checked + * + * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code + */ +int rsa_check_privkey( rsa_context *ctx ); + +/** + * \brief Do an RSA public key operation + * + * \param ctx RSA context + * \param input input buffer + * \param output output buffer + * + * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code + * + * \note This function does NOT take care of message + * padding. Also, be sure to set input[0] = 0. + * + * \note The input and output buffers must be large + * enough (eg. 128 bytes if RSA-1024 is used). + */ +int rsa_public( rsa_context *ctx, + unsigned char *input, + unsigned char *output ); + +/** + * \brief Do an RSA private key operation + * + * \param ctx RSA context + * \param input input buffer + * \param output output buffer + * + * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code + * + * \note The input and output buffers must be large + * enough (eg. 128 bytes if RSA-1024 is used). + */ +int rsa_private( rsa_context *ctx, + unsigned char *input, + unsigned char *output ); + +/** + * \brief Add the message padding, then do an RSA operation + * + * \param ctx RSA context + * \param mode RSA_PUBLIC or RSA_PRIVATE + * \param ilen contains the the plaintext length + * \param input buffer holding the data to be encrypted + * \param output buffer that will hold the ciphertext + * + * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code + * + * \note The output buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + */ +int rsa_pkcs1_encrypt( rsa_context *ctx, + int mode, int ilen, + unsigned char *input, + unsigned char *output ); + +/** + * \brief Do an RSA operation, then remove the message padding + * + * \param ctx RSA context + * \param mode RSA_PUBLIC or RSA_PRIVATE + * \param input buffer holding the encrypted data + * \param output buffer that will hold the plaintext + * \param olen will contain the plaintext length + * \param output_max_len maximum length of the output buffer + * + * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code + * + * \note The output buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise + * an error is thrown. + */ +int rsa_pkcs1_decrypt( rsa_context *ctx, + int mode, int *olen, + unsigned char *input, + unsigned char *output, + int output_max_len); + +/** + * \brief Do a private RSA to sign a message digest + * + * \param ctx RSA context + * \param mode RSA_PUBLIC or RSA_PRIVATE + * \param hash_id RSA_RAW, RSA_MD{2,4,5} or RSA_SHA{1,256} + * \param hashlen message digest length (for RSA_RAW only) + * \param hash buffer holding the message digest + * \param sig buffer that will hold the ciphertext + * + * \return 0 if the signing operation was successful, + * or an POLARSSL_ERR_RSA_XXX error code + * + * \note The "sig" buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + */ +int rsa_pkcs1_sign( rsa_context *ctx, + int mode, + int hash_id, + int hashlen, + unsigned char *hash, + unsigned char *sig ); + +/** + * \brief Do a public RSA and check the message digest + * + * \param ctx points to an RSA public key + * \param mode RSA_PUBLIC or RSA_PRIVATE + * \param hash_id RSA_RAW, RSA_MD{2,4,5} or RSA_SHA{1,256} + * \param hashlen message digest length (for RSA_RAW only) + * \param hash buffer holding the message digest + * \param sig buffer holding the ciphertext + * + * \return 0 if the verify operation was successful, + * or an POLARSSL_ERR_RSA_XXX error code + * + * \note The "sig" buffer must be as large as the size + * of ctx->N (eg. 128 bytes if RSA-1024 is used). + */ +int rsa_pkcs1_verify( rsa_context *ctx, + int mode, + int hash_id, + int hashlen, + unsigned char *hash, + unsigned char *sig ); + +/** + * \brief Free the components of an RSA key + */ +void rsa_free( rsa_context *ctx ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int rsa_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* rsa.h */ diff --git a/feeds/luci/libs/luci-lib-px5g/src/polarssl/sha1.h b/feeds/luci/libs/luci-lib-px5g/src/polarssl/sha1.h new file mode 100644 index 0000000..3ca7dc3 --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/polarssl/sha1.h @@ -0,0 +1,150 @@ +/** + * \file sha1.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef POLARSSL_SHA1_H +#define POLARSSL_SHA1_H + +/** + * \brief SHA-1 context structure + */ +typedef struct +{ + unsigned long total[2]; /*!< number of bytes processed */ + unsigned long state[5]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ + + unsigned char ipad[64]; /*!< HMAC: inner padding */ + unsigned char opad[64]; /*!< HMAC: outer padding */ +} +sha1_context; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief SHA-1 context setup + * + * \param ctx context to be initialized + */ +void sha1_starts( sha1_context *ctx ); + +/** + * \brief SHA-1 process buffer + * + * \param ctx SHA-1 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void sha1_update( sha1_context *ctx, unsigned char *input, int ilen ); + +/** + * \brief SHA-1 final digest + * + * \param ctx SHA-1 context + * \param output SHA-1 checksum result + */ +void sha1_finish( sha1_context *ctx, unsigned char output[20] ); + +/** + * \brief Output = SHA-1( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output SHA-1 checksum result + */ +void sha1( unsigned char *input, int ilen, unsigned char output[20] ); + +/** + * \brief Output = SHA-1( file contents ) + * + * \param path input file name + * \param output SHA-1 checksum result + * + * \return 0 if successful, 1 if fopen failed, + * or 2 if fread failed + */ +int sha1_file( char *path, unsigned char output[20] ); + +/** + * \brief SHA-1 HMAC context setup + * + * \param ctx HMAC context to be initialized + * \param key HMAC secret key + * \param keylen length of the HMAC key + */ +void sha1_hmac_starts( sha1_context *ctx, unsigned char *key, int keylen ); + +/** + * \brief SHA-1 HMAC process buffer + * + * \param ctx HMAC context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void sha1_hmac_update( sha1_context *ctx, unsigned char *input, int ilen ); + +/** + * \brief SHA-1 HMAC final digest + * + * \param ctx HMAC context + * \param output SHA-1 HMAC checksum result + */ +void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] ); + +/** + * \brief Output = HMAC-SHA-1( hmac key, input buffer ) + * + * \param key HMAC secret key + * \param keylen length of the HMAC key + * \param input buffer holding the data + * \param ilen length of the input data + * \param output HMAC-SHA-1 result + */ +void sha1_hmac( unsigned char *key, int keylen, + unsigned char *input, int ilen, + unsigned char output[20] ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int sha1_self_test( int verbose ); + +#ifdef __cplusplus +} +#endif + +#endif /* sha1.h */ diff --git a/feeds/luci/libs/luci-lib-px5g/src/polarssl/timing.h b/feeds/luci/libs/luci-lib-px5g/src/polarssl/timing.h new file mode 100644 index 0000000..62d627f --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/polarssl/timing.h @@ -0,0 +1,81 @@ +/** + * \file timing.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef POLARSSL_TIMING_H +#define POLARSSL_TIMING_H + +/** + * \brief timer structure + */ +struct hr_time +{ + unsigned char opaque[32]; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +extern int alarmed; + +/** + * \brief Return the CPU cycle counter value + */ +unsigned long hardclock( void ); + +/** + * \brief Return the elapsed time in milliseconds + * + * \param val points to a timer structure + * \param reset if set to 1, the timer is restarted + */ +unsigned long get_timer( struct hr_time *val, int reset ); + +/** + * \brief Setup an alarm clock + * + * \param seconds delay before the "alarmed" flag is set + */ +void set_alarm( int seconds ); + +/** + * \brief Sleep for a certain amount of time + */ +void m_sleep( int milliseconds ); + +#ifdef __cplusplus +} +#endif + +#endif /* timing.h */ diff --git a/feeds/luci/libs/luci-lib-px5g/src/polarssl/x509.h b/feeds/luci/libs/luci-lib-px5g/src/polarssl/x509.h new file mode 100644 index 0000000..908a1db --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/polarssl/x509.h @@ -0,0 +1,549 @@ +/** + * \file x509.h + * + * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine + * + * Copyright (C) 2009 Paul Bakker + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of PolarSSL or XySSL nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef POLARSSL_X509_H +#define POLARSSL_X509_H + +#include "polarssl/rsa.h" + +#define POLARSSL_ERR_ASN1_OUT_OF_DATA -0x0014 +#define POLARSSL_ERR_ASN1_UNEXPECTED_TAG -0x0016 +#define POLARSSL_ERR_ASN1_INVALID_LENGTH -0x0018 +#define POLARSSL_ERR_ASN1_LENGTH_MISMATCH -0x001A +#define POLARSSL_ERR_ASN1_INVALID_DATA -0x001C + +#define POLARSSL_ERR_X509_FEATURE_UNAVAILABLE -0x0020 +#define POLARSSL_ERR_X509_CERT_INVALID_PEM -0x0040 +#define POLARSSL_ERR_X509_CERT_INVALID_FORMAT -0x0060 +#define POLARSSL_ERR_X509_CERT_INVALID_VERSION -0x0080 +#define POLARSSL_ERR_X509_CERT_INVALID_SERIAL -0x00A0 +#define POLARSSL_ERR_X509_CERT_INVALID_ALG -0x00C0 +#define POLARSSL_ERR_X509_CERT_INVALID_NAME -0x00E0 +#define POLARSSL_ERR_X509_CERT_INVALID_DATE -0x0100 +#define POLARSSL_ERR_X509_CERT_INVALID_PUBKEY -0x0120 +#define POLARSSL_ERR_X509_CERT_INVALID_SIGNATURE -0x0140 +#define POLARSSL_ERR_X509_CERT_INVALID_EXTENSIONS -0x0160 +#define POLARSSL_ERR_X509_CERT_UNKNOWN_VERSION -0x0180 +#define POLARSSL_ERR_X509_CERT_UNKNOWN_SIG_ALG -0x01A0 +#define POLARSSL_ERR_X509_CERT_UNKNOWN_PK_ALG -0x01C0 +#define POLARSSL_ERR_X509_CERT_SIG_MISMATCH -0x01E0 +#define POLARSSL_ERR_X509_CERT_VERIFY_FAILED -0x0200 +#define POLARSSL_ERR_X509_KEY_INVALID_PEM -0x0220 +#define POLARSSL_ERR_X509_KEY_INVALID_VERSION -0x0240 +#define POLARSSL_ERR_X509_KEY_INVALID_FORMAT -0x0260 +#define POLARSSL_ERR_X509_KEY_INVALID_ENC_IV -0x0280 +#define POLARSSL_ERR_X509_KEY_UNKNOWN_ENC_ALG -0x02A0 +#define POLARSSL_ERR_X509_KEY_PASSWORD_REQUIRED -0x02C0 +#define POLARSSL_ERR_X509_KEY_PASSWORD_MISMATCH -0x02E0 +#define POLARSSL_ERR_X509_POINT_ERROR -0x0300 +#define POLARSSL_ERR_X509_VALUE_TO_LENGTH -0x0320 + +#define BADCERT_EXPIRED 1 +#define BADCERT_REVOKED 2 +#define BADCERT_CN_MISMATCH 4 +#define BADCERT_NOT_TRUSTED 8 + +/* + * DER constants + */ +#define ASN1_BOOLEAN 0x01 +#define ASN1_INTEGER 0x02 +#define ASN1_BIT_STRING 0x03 +#define ASN1_OCTET_STRING 0x04 +#define ASN1_NULL 0x05 +#define ASN1_OID 0x06 +#define ASN1_UTF8_STRING 0x0C +#define ASN1_SEQUENCE 0x10 +#define ASN1_SET 0x11 +#define ASN1_PRINTABLE_STRING 0x13 +#define ASN1_T61_STRING 0x14 +#define ASN1_IA5_STRING 0x16 +#define ASN1_UTC_TIME 0x17 +#define ASN1_UNIVERSAL_STRING 0x1C +#define ASN1_BMP_STRING 0x1E +#define ASN1_PRIMITIVE 0x00 +#define ASN1_CONSTRUCTED 0x20 +#define ASN1_CONTEXT_SPECIFIC 0x80 + +/* + * various object identifiers + */ +#define X520_COMMON_NAME 3 +#define X520_COUNTRY 6 +#define X520_LOCALITY 7 +#define X520_STATE 8 +#define X520_ORGANIZATION 10 +#define X520_ORG_UNIT 11 +#define PKCS9_EMAIL 1 + +#define X509_OUTPUT_DER 0x01 +#define X509_OUTPUT_PEM 0x02 +#define PEM_LINE_LENGTH 72 +#define X509_ISSUER 0x01 +#define X509_SUBJECT 0x02 + +#define OID_X520 "\x55\x04" +#define OID_CN "\x55\x04\x03" +#define OID_PKCS1 "\x2A\x86\x48\x86\xF7\x0D\x01\x01" +#define OID_PKCS1_RSA "\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01" +#define OID_PKCS1_RSA_SHA "\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05" +#define OID_PKCS9 "\x2A\x86\x48\x86\xF7\x0D\x01\x09" +#define OID_PKCS9_EMAIL "\x2A\x86\x48\x86\xF7\x0D\x01\x09\x01" + +/* + * Structures for parsing X.509 certificates + */ +typedef struct _x509_buf +{ + int tag; + int len; + unsigned char *p; +} +x509_buf; + +typedef struct _x509_name +{ + x509_buf oid; + x509_buf val; + struct _x509_name *next; +} +x509_name; + +typedef struct _x509_time +{ + int year, mon, day; + int hour, min, sec; +} +x509_time; + +typedef struct _x509_cert +{ + x509_buf raw; + x509_buf tbs; + + int version; + x509_buf serial; + x509_buf sig_oid1; + + x509_buf issuer_raw; + x509_buf subject_raw; + + x509_name issuer; + x509_name subject; + + x509_time valid_from; + x509_time valid_to; + + x509_buf pk_oid; + rsa_context rsa; + + x509_buf issuer_id; + x509_buf subject_id; + x509_buf v3_ext; + + int ca_istrue; + int max_pathlen; + + x509_buf sig_oid2; + x509_buf sig; + + struct _x509_cert *next; +} +x509_cert; + +/* + * Structures for writing X.509 certificates + */ +typedef struct _x509_node +{ + unsigned char *data; + unsigned char *p; + unsigned char *end; + + size_t len; +} +x509_node; + +typedef struct _x509_raw +{ + x509_node raw; + x509_node tbs; + + x509_node version; + x509_node serial; + x509_node tbs_signalg; + x509_node issuer; + x509_node validity; + x509_node subject; + x509_node subpubkey; + + x509_node signalg; + x509_node sign; +} +x509_raw; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Parse one or more certificates and add them + * to the chained list + * + * \param chain points to the start of the chain + * \param buf buffer holding the certificate data + * \param buflen size of the buffer + * + * \return 0 if successful, or a specific X509 error code + */ +int x509parse_crt( x509_cert *crt, unsigned char *buf, int buflen ); + +/** + * \brief Load one or more certificates and add them + * to the chained list + * + * \param chain points to the start of the chain + * \param path filename to read the certificates from + * + * \return 0 if successful, or a specific X509 error code + */ +int x509parse_crtfile( x509_cert *crt, char *path ); + +/** + * \brief Parse a private RSA key + * + * \param rsa RSA context to be initialized + * \param buf input buffer + * \param buflen size of the buffer + * \param pwd password for decryption (optional) + * \param pwdlen size of the password + * + * \return 0 if successful, or a specific X509 error code + */ +int x509parse_key( rsa_context *rsa, + unsigned char *buf, int buflen, + unsigned char *pwd, int pwdlen ); + +/** + * \brief Load and parse a private RSA key + * + * \param rsa RSA context to be initialized + * \param path filename to read the private key from + * \param pwd password to decrypt the file (can be NULL) + * + * \return 0 if successful, or a specific X509 error code + */ +int x509parse_keyfile( rsa_context *rsa, char *path, char *password ); + +/** + * \brief Store the certificate DN in printable form into buf; + * no more than (end - buf) characters will be written. + */ +int x509parse_dn_gets( char *buf, char *end, x509_name *dn ); + +/** + * \brief Returns an informational string about the + * certificate. + */ +char *x509parse_cert_info( char *prefix, x509_cert *crt ); + +/** + * \brief Return 0 if the certificate is still valid, + * or BADCERT_EXPIRED + */ +int x509parse_expired( x509_cert *crt ); + +/** + * \brief Verify the certificate signature + * + * \param crt a certificate to be verified + * \param trust_ca the trusted CA chain + * \param cn expected Common Name (can be set to + * NULL if the CN must not be verified) + * \param flags result of the verification + * + * \return 0 if successful or POLARSSL_ERR_X509_SIG_VERIFY_FAILED, + * in which case *flags will have one or more of + * the following values set: + * BADCERT_EXPIRED -- + * BADCERT_REVOKED -- + * BADCERT_CN_MISMATCH -- + * BADCERT_NOT_TRUSTED + * + * \note TODO: add two arguments, depth and crl + */ +int x509parse_verify( x509_cert *crt, + x509_cert *trust_ca, + char *cn, int *flags ); + +/** + * \brief Unallocate all certificate data + */ +void x509_free( x509_cert *crt ); + +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + */ +int x509_self_test( int verbose ); + +/** + * \brief Write a certificate info file + * + * \param chain points to the raw certificate data + * \param path filename to write the certificate to + * \param format X509_OUTPUT_DER or X509_OUTPUT_PEM + * + * \return 0 if successful, or a specific X509 error code + */ +int x509write_crtfile( x509_raw *chain, + unsigned char *path, + int format ); + +/** + * \brief Write a certificate signing request message format file + * + * \param chain points to the raw certificate (with x509write_create_csr) data + * \param path filename to write the certificate to + * \param format X509_OUTPUT_DER or X509_OUTPUT_PEM + * + * \return 0 if successful, or a specific X509 error code + */ +int x509write_csrfile( x509_raw *chain, + unsigned char *path, + int format ); + +/* + * \brief Write a private RSA key into a file + * + * \param rsa points to an RSA key + * \param path filename to write the key to + * \param format X509_OUTPUT_DER or X509_OUTPUT_PEM + * + * \return 0 if successful, or a specific X509 error code + */ +int x509write_keyfile( rsa_context *rsa, + char *path, + int format ); + +/** + * \brief Add a public key to certificate + * + * \param chain points to the raw certificate data + * \param pubkey points to an RSA key + * + * \return 0 if successful, or a specific X509 error code + */ +int x509write_add_pubkey( x509_raw *chain, rsa_context *pubkey ); + +/** + * \brief Create x509 subject/issuer field to raw certificate + * from string or CA cert. Make string NULL if you will + * use the CA copy function or make CA NULL then used + * the string parse. + * + * \param chain points to the raw certificate data + * \param names a string that can hold (separete with ";"): + * CN=CommonName + * -- O=Organization + * -- OU=OrgUnit + * -- ST=State + * -- L=Locality + * -- R=Email + * -- C=Country + * . Make that NULL if you didn't need that. + * \param flag flag is X509_ISSUER or X509_SUBJECT that defined + * where change + * \param ca the certificate for copy data. Make that NULL if you + * didn't need that. + * \param ca_flag set the ca field from copy to crt + * + * \return 0 if successful, or a specific X509 error code + */ +int x509write_add_customize ( x509_raw *crt, + unsigned char *names, + int flag, + x509_cert *ca, + int ca_flag ); + +/** +* \brief Add x509 issuer field +* +* \param chain points to the raw certificate data +* \param issuer a string holding (separete with ";"): +* CN=CommonName +* -- O=Organization +* -- OU=OrgUnit +* -- ST=State +* -- L=Locality +* -- R=Email +* -- C=Country +* . Set this to NULL if not needed. +* \return 0 if successful, or a specific X509 error code +*/ +int x509write_add_issuer( x509_raw *crt, unsigned char *issuer); + +/** + * \brief Add x509 subject field + * + * \param chain points to the raw certificate data + * \param subject a string holding (separete with ";"): + * CN=CommonName + * -- O=Organization + * -- OU=OrgUnit + * -- ST=State + * -- L=Locality + * -- R=Email + * -- C=Country + * . Set this to NULL if not needed. + * \return 0 if successful, or a specific X509 error code + */ +int x509write_add_subject( x509_raw *crt, unsigned char *subject); + +/** +* \brief Copy x509 issuer field from another certificate +* +* \param chain points to the raw certificate data +* \param from_crt the certificate whose issuer is to be copied. +* \return 0 if successful, or a specific X509 error code +*/ +int x509write_copy_issuer(x509_raw *crt, x509_cert *from_crt); + +/** +* \brief Copy x509 subject field from another certificate +* +* \param chain points to the raw certificate data +* \param from_crt the certificate whose subject is to be copied. +* \return 0 if successful, or a specific X509 error code +*/ +int x509write_copy_subject(x509_raw *crt, x509_cert *from_crt); + +/** +* \brief Copy x509 issuer field from the subject of another certificate +* +* \param chain points to the raw certificate data +* \param from_crt the certificate whose subject is to be copied. +* \return 0 if successful, or a specific X509 error code +*/ +int x509write_copy_issuer_from_subject(x509_raw *crt, x509_cert *from_crt); + +/** +* \brief Copy x509 subject field from the issuer of another certificate +* +* \param chain points to the raw certificate data +* \param from_crt the certificate whose issuer is to be copied. +* \return 0 if successful, or a specific X509 error code +*/ +int x509write_copy_subject_from_issuer(x509_raw *crt, x509_cert *from_crt); + +/** + * \brief Create x509 validity time in UTC + * + * \param chain points to the raw certificate data + * \param before valid not before in format YYYY-MM-DD hh:mm:ss + * \param after valid not after in format YYYY-MM-DD hh:mm:ss + * + * \return 0 if successful, or a specific X509 error code + */ +int x509write_add_validity( x509_raw *crt, + unsigned char *before, + unsigned char *after ); + +/** + * \brief Create a self-signed certificate + * + * \param chain points to the raw certificate data + * \param rsa a private key to sign the certificate + * + * \return 0 if successful, or a specific X509 error code + */ +int x509write_create_selfsign( x509_raw *crt, rsa_context *raw ); + +/** + * \brief Create a certificate + * + * \param chain points to the raw certificate data + * \param rsa a private key to sign the certificate + * + * \return 0 if successful, or a specific X509 error code + */ +int x509write_create_sign( x509_raw *crt, rsa_context *raw ); + +/** + * \brief Create a certificate signing request + * + * \param chain points to the raw certificate data. Didn't use the + * same chain that u have use for certificate. + * \param privkey a rsa private key + * + * \return 0 if successful, or a specific X509 error code + */ +int x509write_create_csr( x509_raw *chain, rsa_context *privkey ); + +/** + * \brief Serialize an rsa key into DER + * + * \param rsa a rsa key for output + * \param node a x509 node for write into + * + * \return 0 if successful, or a specific X509 error code + */ +int x509write_serialize_key( rsa_context *rsa, x509_node *node ); + +/** + * \brief Unallocate all raw certificate data + */ +void x509write_free_raw( x509_raw *crt ); + +/** + * \brief Allocate all raw certificate data + */ +void x509write_init_raw( x509_raw *crt ); + +/** + * \brief Unallocate all node certificate data + */ +void x509write_free_node( x509_node *crt_node ); + +/** + * \brief Allocate all node certificate data + */ +void x509write_init_node( x509_node *crt_node ); + +#ifdef __cplusplus +} +#endif + +#endif /* x509.h */ diff --git a/feeds/luci/libs/luci-lib-px5g/src/px5g.c b/feeds/luci/libs/luci-lib-px5g/src/px5g.c new file mode 100644 index 0000000..feecd01 --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/px5g.c @@ -0,0 +1,159 @@ +/* + * px5g - Embedded x509 key and certificate generator based on PolarSSL + * + * Copyright (C) 2009 Steven Barth + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License, version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +#include "px5g.h" +#include +#include +#define VERSION 0.1 + +static char *xfields[] = {"CN", "O", "C", "OU", "ST", "L", "R"}; + +static int px5g_genkey(lua_State *L) { + int keysize = luaL_checkint(L, 1), pexp = luaL_optint(L, 2, 65537), ret; + px5g_rsa *px5g = lua_newuserdata(L, sizeof(px5g_rsa)); + if (!px5g) { + return luaL_error(L, "out of memory"); + } + + px5g->stat = 1; + havege_init(&px5g->hs); + rsa_init(&px5g->rsa, RSA_PKCS_V15, 0, havege_rand, &px5g->hs); + + if ((ret = rsa_gen_key(&px5g->rsa, keysize, pexp))) { + lua_pushnil(L); + lua_pushinteger(L, ret); + return 2; + } + + luaL_getmetatable(L, PX5G_KEY_META); + lua_setmetatable(L, -2); + return 1; +} + +static int px5g_rsa_asn1(lua_State *L) { + int ret; + px5g_rsa *px5g = luaL_checkudata(L, 1, PX5G_KEY_META); + x509_node node; + + x509write_init_node(&node); + if ((ret = x509write_serialize_key(&px5g->rsa, &node))) { + x509write_free_node(&node); + lua_pushnil(L); + lua_pushinteger(L, ret); + return 2; + } + + lua_pushlstring(L, (char*)node.data, node.len); + x509write_free_node(&node); + return 1; +} + +static int px5g_rsa_create_selfsigned(lua_State *L) { + px5g_rsa *px5g = luaL_checkudata(L, 1, PX5G_KEY_META); + luaL_checktype(L, 2, LUA_TTABLE); + time_t from = (time_t)luaL_checknumber(L, 3); + time_t to = (time_t)luaL_checknumber(L, 4); + char fstr[20], tstr[20]; + + lua_pushliteral(L, "CN"); + lua_rawget(L, 2); + luaL_argcheck(L, lua_isstring(L, -1), 2, "CN missing"); + lua_pop(L, 1); + + luaL_argcheck(L, + strftime(fstr, sizeof(fstr), "%F %H:%M:%S", gmtime(&from)), + 3, "Invalid Time"); + + luaL_argcheck(L, + strftime(tstr, sizeof(tstr), "%F %H:%M:%S", gmtime(&to)), + 4, "Invalid Time"); + + size_t join = 1; + lua_pushliteral(L, ""); + for (int i = 0; i < (sizeof(xfields) / sizeof(*xfields)); i++) { + lua_pushstring(L, xfields[i]); + lua_rawget(L, 2); + if (lua_isstring(L, -1)) { + const char *val = lua_tostring(L, -1); + luaL_argcheck(L, !strchr(val, ';'), 2, "Invalid Value"); + lua_pushfstring(L, "%s=%s;", xfields[i], val); + lua_remove(L, -2); + join++; + } else { + lua_pop(L, 1); + } + } + lua_concat(L, join); + + x509_raw cert; + x509write_init_raw(&cert); + x509write_add_pubkey(&cert, &px5g->rsa); + x509write_add_subject(&cert, (unsigned char*)lua_tostring(L, -1)); + x509write_add_validity(&cert, (unsigned char*)fstr, (unsigned char*)tstr); + x509write_create_selfsign(&cert, &px5g->rsa); + + lua_pushlstring(L, (char*)cert.raw.data, cert.raw.len); + x509write_free_raw(&cert); + return 1; +} + +static int px5g_rsa__gc(lua_State *L) { + px5g_rsa *px5g = luaL_checkudata(L, 1, PX5G_KEY_META); + if (px5g->stat) { + rsa_free(&px5g->rsa); + px5g->stat = 0; + } + return 0; +} + +static int px5g_rsa__tostring(lua_State *L) { + px5g_rsa *px5g = luaL_checkudata(L, 1, PX5G_KEY_META); + lua_pushfstring(L, "px5g context %p", px5g); + return 1; +} + +/* method table */ +static const luaL_reg M[] = { + {"asn1", px5g_rsa_asn1}, + {"create_selfsigned", px5g_rsa_create_selfsigned}, + {"__gc", px5g_rsa__gc}, + {"__tostring", px5g_rsa__tostring}, + {NULL, NULL} +}; + +/* module table */ +static const luaL_reg R[] = { + {"genkey", px5g_genkey}, + {NULL, NULL} +}; + +int luaopen_px5g(lua_State *L) { + /* register module */ + luaL_register(L, "px5g", R); + + /* Meta Table */ + luaL_newmetatable(L, PX5G_KEY_META); + luaL_register(L, NULL, M); + lua_pushvalue(L, -1); + lua_setfield(L, -2, "__index"); + + lua_setfield(L, -2, "meta_key"); + return 1; +} diff --git a/feeds/luci/libs/luci-lib-px5g/src/px5g.h b/feeds/luci/libs/luci-lib-px5g/src/px5g.h new file mode 100644 index 0000000..47542b5 --- /dev/null +++ b/feeds/luci/libs/luci-lib-px5g/src/px5g.h @@ -0,0 +1,16 @@ +#include +#include +#include + +#include "polarssl/havege.h" +#include "polarssl/bignum.h" +#include "polarssl/x509.h" +#include "polarssl/rsa.h" + +#define PX5G_KEY_META "px5g.key" + +typedef struct px5g_rsa { + int stat; + havege_state hs; + rsa_context rsa; +} px5g_rsa; diff --git a/feeds/luci/libs/luci-lib-rpcc/Makefile b/feeds/luci/libs/luci-lib-rpcc/Makefile new file mode 100644 index 0000000..e0fea28 --- /dev/null +++ b/feeds/luci/libs/luci-lib-rpcc/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Support for AHCPd +LUCI_DEPENDS:=@BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc.lua b/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc.lua new file mode 100644 index 0000000..5558910 --- /dev/null +++ b/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc.lua @@ -0,0 +1,59 @@ +-- Copyright 2009 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local util = require "luci.util" +local json = require "luci.json" +local ltn12 = require "luci.ltn12" +local nixio = require "nixio", require "nixio.util" + +local tostring, assert, setmetatable = tostring, assert, setmetatable +local error = error + +module "luci.rpcc" + +RQLIMIT = 32 * nixio.const.buffersize + +Client = util.class() + +function Client.__init__(self, fd, v1) + self.fd = fd + self.uniqueid = tostring(self):match("0x([a-f0-9]+)") + self.msgid = 1 + self.v1 = v1 +end + +function Client.request(self, method, params, notification) + local oldchunk = self.decoder and self.decoder.chunk + self.decoder = json.ActiveDecoder(self.fd:blocksource(nil, RQLIMIT)) + self.decoder.chunk = oldchunk + + local reqid = self.msgid .. self.uniqueid + local reqdata = json.Encoder({ + id = (not notification) and (self.msgid .. self.uniqueid) or nil, + jsonrpc = (not self.v1) and "2.0" or nil, + method = method, + params = params + }) + ltn12.pump.all(reqdata:source(), self.fd:sink()) + if not notification then + self.msgid = self.msgid + 1 + local response = self.decoder:get() + assert(response.id == reqid, "Invalid response id") + if response.error then + error(response.error.message or response.error) + end + return response.result + end +end + +function Client.proxy(self, prefix) + prefix = prefix or "" + return setmetatable({}, { + __call = function(proxy, ...) + return self:request(prefix, {...}) + end, + __index = function(proxy, name) + return self:proxy(prefix .. name .. ".") + end + }) +end \ No newline at end of file diff --git a/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc.luadoc b/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc.luadoc new file mode 100644 index 0000000..5609bfd --- /dev/null +++ b/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc.luadoc @@ -0,0 +1,36 @@ +---[[ +LuCI RPC Client. + +@cstyle instance +]] +module "luci.rpcc" + +---[[ +Create a new JSON-RPC stream client. + +@class function +@param fd File descriptor +@param v1 Use protocol version 1.0 +@return RPC Client +]] + +---[[ +Request an RP call and get the response. + +@class function +@name Client.request +@param method Remote method +@param params Parameters +@param notification Notification only? +@return response +]] + +---[[ +Create a transparent RPC proxy. + +@class function +@name Client.proxy +@param prefix Method prefix +@return RPC Proxy object +]] + diff --git a/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc/ruci.lua b/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc/ruci.lua new file mode 100644 index 0000000..275c396 --- /dev/null +++ b/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc/ruci.lua @@ -0,0 +1,48 @@ +-- Copyright 2009 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local util = require "luci.util" +local rawget, setmetatable = rawget, setmetatable +local ipairs = ipairs + +module "luci.rpcc.ruci" + + +local Proxy = util.class() + +function factory(rpccl) + return { + cursor = function(...) + return Proxy(rpccl, rpccl:request("ruci.cursor", {...})) + end, + cursor_state = function(...) + return Proxy(rpccl, rpccl:request("ruci.cursor_state", {...})) + end + } +end + +function Proxy.__init__(self, rpccl, objid) + self.__rpccl = rpccl + self.__objid = objid + + setmetatable(self, { + __index = function(self, key) + return rawget(self, key) or Proxy[key] or function(self, ...) + local argv = {self.__objid, ...} + return self.__rpccl:request("ruci."..key, argv) + end + end + }) +end + +function Proxy.foreach(self, config, section, callback) + local sections = self.__rpccl:request("ruci.foreach", {self.__objid, config, section}) + if sections then + for _, s in ipairs(sections) do + callback(s) + end + return true + else + return false + end +end diff --git a/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc/ruci.luadoc b/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc/ruci.luadoc new file mode 100644 index 0000000..9c842c5 --- /dev/null +++ b/feeds/luci/libs/luci-lib-rpcc/luasrc/rpcc/ruci.luadoc @@ -0,0 +1,16 @@ +---[[ +Transparent UCI over RPC client. + +@cstyle instance +]] +module "luci.rpcc.ruci" + +---[[ +Create a new UCI over RPC proxy. + +@class function +@name factory +@param rpccl RPC client +@return Network transparent UCI module +]] + diff --git a/feeds/luci/luci.mk b/feeds/luci/luci.mk new file mode 100644 index 0000000..69aecaa --- /dev/null +++ b/feeds/luci/luci.mk @@ -0,0 +1,238 @@ +# +# Copyright (C) 2008-2015 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +LUCI_NAME?=$(notdir ${CURDIR}) +LUCI_TYPE?=$(word 2,$(subst -, ,$(LUCI_NAME))) +LUCI_BASENAME?=$(patsubst luci-$(LUCI_TYPE)-%,%,$(LUCI_NAME)) +LUCI_LANGUAGES:=$(filter-out templates,$(notdir $(wildcard ${CURDIR}/po/*))) +LUCI_DEFAULTS:=$(notdir $(wildcard ${CURDIR}/root/etc/uci-defaults/*)) +LUCI_PKGARCH?=$(if $(realpath src/Makefile),,all) + +# Language code titles +LUCI_LANG.ca=Català (Catalan) +LUCI_LANG.cs=Čeština (Czech) +LUCI_LANG.de=Deutsch (German) +LUCI_LANG.el=Ελληνικά (Greek) +LUCI_LANG.en=English +LUCI_LANG.es=Español (Spanish) +LUCI_LANG.fr=Français (French) +LUCI_LANG.he=עִבְרִית (Hebrew) +LUCI_LANG.hu=Magyar (Hungarian) +LUCI_LANG.it=Italiano (Italian) +LUCI_LANG.ja=日本語 (Japanese) +LUCI_LANG.ko=한국어 (Korean) +LUCI_LANG.ms=Bahasa Melayu (Malay) +LUCI_LANG.no=Norsk (Norwegian) +LUCI_LANG.pl=Polski (Polish) +LUCI_LANG.pt-br=Português do Brasil (Brazialian Portuguese) +LUCI_LANG.pt=Português (Portuguese) +LUCI_LANG.ro=Română (Romanian) +LUCI_LANG.ru=Русский (Russian) +LUCI_LANG.sk=Slovenčina (Slovak) +LUCI_LANG.sv=Svenska (Swedish) +LUCI_LANG.tr=Türkçe (Turkish) +LUCI_LANG.uk=украї́нська (Ukrainian) +LUCI_LANG.vi=Tiếng Việt (Vietnamese) +LUCI_LANG.zh-cn=普通话 (Chinese) +LUCI_LANG.zh-tw=臺灣華語 (Taiwanese) + +# Submenu titles +LUCI_MENU.col=1. Collections +LUCI_MENU.mod=2. Modules +LUCI_MENU.app=3. Applications +LUCI_MENU.theme=4. Themes +LUCI_MENU.proto=5. Protocols +LUCI_MENU.lib=6. Libraries + + +PKG_NAME?=$(LUCI_NAME) + +PKG_VERSION?=$(if $(DUMP),x,$(strip $(shell \ + if svn info >/dev/null 2>/dev/null; then \ + revision="svn-r$$(LC_ALL=C svn info | sed -ne 's/^Revision: //p')"; \ + elif git log -1 >/dev/null 2>/dev/null; then \ + revision="svn-r$$(LC_ALL=C git log -1 | sed -ne 's/.*git-svn-id: .*@\([0-9]\+\) .*/\1/p')"; \ + if [ "$$revision" = "svn-r" ]; then \ + set -- $$(git log -1 --format="%ct %h"); \ + secs="$$(($$1 % 86400))"; \ + yday="$$(date --utc --date="@$$1" "+%y.%j")"; \ + revision="$$(printf 'git-%s.%05d-%s' "$$yday" "$$secs" "$$2")"; \ + fi; \ + else \ + revision="unknown"; \ + fi; \ + echo "$$revision" \ +))) + +PKG_GITBRANCH?=$(if $(DUMP),x,$(strip $(shell \ + variant="LuCI"; \ + if git log -1 >/dev/null 2>/dev/null; then \ + branch="$$(git symbolic-ref --short -q HEAD 2>/dev/null)"; \ + if [ "$$branch" != "master" ]; then \ + variant="LuCI $$branch branch"; \ + else \ + variant="LuCI Master"; \ + fi; \ + fi; \ + echo "$$variant" \ +))) + +PKG_RELEASE?=1 +PKG_INSTALL:=$(if $(realpath src/Makefile),1) +PKG_BUILD_DEPENDS += lua/host luci-base/host $(LUCI_BUILD_DEPENDS) +PKG_CONFIG_DEPENDS += CONFIG_LUCI_SRCDIET + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/$(PKG_NAME) + SECTION:=luci + CATEGORY:=LuCI + SUBMENU:=$(if $(LUCI_MENU.$(LUCI_TYPE)),$(LUCI_MENU.$(LUCI_TYPE)),$(LUCI_MENU.app)) + TITLE:=$(if $(LUCI_TITLE),$(LUCI_TITLE),LuCI $(LUCI_NAME) $(LUCI_TYPE)) + DEPENDS:=$(LUCI_DEPENDS) + $(if $(LUCI_PKGARCH),PKGARCH:=$(LUCI_PKGARCH)) +endef + +ifneq ($(LUCI_DESCRIPTION),) + define Package/$(PKG_NAME)/description + $(strip $(LUCI_DESCRIPTION)) + endef +endif + +# Language selection for luci-base +ifeq ($(PKG_NAME),luci-base) + define Package/luci-base/config + config LUCI_SRCDIET + bool "Minify Lua sources" + default n + + menu "Translations"$(foreach lang,$(LUCI_LANGUAGES), + + config LUCI_LANG_$(lang) + tristate "$(shell echo '$(LUCI_LANG.$(lang))' | sed -e 's/^.* (\(.*\))$$/\1/') ($(lang))") + + endmenu + endef +endif + +define Build/Prepare + for d in luasrc htdocs root src; do \ + if [ -d ./$$$$d ]; then \ + mkdir -p $(PKG_BUILD_DIR)/$$$$d; \ + $(CP) ./$$$$d/* $(PKG_BUILD_DIR)/$$$$d/; \ + fi; \ + done + $(call Build/Prepare/Default) +endef + +define Build/Configure +endef + +ifneq ($(wildcard ${CURDIR}/src/Makefile),) + MAKE_PATH := src/ + MAKE_VARS += FPIC="$(FPIC)" LUCI_VERSION="$(PKG_VERSION)" LUCI_GITBRANCH="$(PKG_GITBRANCH)" + + define Build/Compile + $(call Build/Compile/Default,clean compile) + endef +else + define Build/Compile + endef +endif + +HTDOCS = /www +LUA_LIBRARYDIR = /usr/lib/lua +LUCI_LIBRARYDIR = $(LUA_LIBRARYDIR)/luci + +define SrcDiet + $(FIND) $(1) -type f -name '*.lua' | while read src; do \ + if LuaSrcDiet --noopt-binequiv -o "$$$$src.o" "$$$$src"; \ + then mv "$$$$src.o" "$$$$src"; fi; \ + done +endef + +define SubstituteVersion + $(FIND) $(1) -type f -name '*.htm' | while read src; do \ + $(SED) 's/<%# *\([^ ]*\)PKG_VERSION *%>/\1$(PKG_VERSION)/g' \ + -e 's/"\(<%= *\(media\|resource\) *%>[^"]*\.\(js\|css\)\)"/"\1?v=$(PKG_VERSION)"/g' \ + "$$$$src"; \ + done +endef + +define Package/$(PKG_NAME)/install + if [ -d $(PKG_BUILD_DIR)/luasrc ]; then \ + $(INSTALL_DIR) $(1)$(LUCI_LIBRARYDIR); \ + cp -pR $(PKG_BUILD_DIR)/luasrc/* $(1)$(LUCI_LIBRARYDIR)/; \ + $(FIND) $(1)$(LUCI_LIBRARYDIR)/ -type f -name '*.luadoc' | $(XARGS) rm; \ + $(if $(CONFIG_LUCI_SRCDIET),$(call SrcDiet,$(1)$(LUCI_LIBRARYDIR)/),true); \ + $(call SubstituteVersion,$(1)$(LUCI_LIBRARYDIR)/); \ + else true; fi + if [ -d $(PKG_BUILD_DIR)/htdocs ]; then \ + $(INSTALL_DIR) $(1)$(HTDOCS); \ + cp -pR $(PKG_BUILD_DIR)/htdocs/* $(1)$(HTDOCS)/; \ + else true; fi + if [ -d $(PKG_BUILD_DIR)/root ]; then \ + $(INSTALL_DIR) $(1)/; \ + cp -pR $(PKG_BUILD_DIR)/root/* $(1)/; \ + else true; fi + if [ -d $(PKG_BUILD_DIR)/src ]; then \ + $(call Build/Install/Default) \ + $(CP) $(PKG_INSTALL_DIR)/* $(1)/; \ + else true; fi +endef + +ifneq ($(LUCI_DEFAULTS),) +define Package/$(PKG_NAME)/postinst +[ -n "$${IPKG_INSTROOT}" ] || {$(foreach script,$(LUCI_DEFAULTS), + (. /etc/uci-defaults/$(script)) && rm -f /etc/uci-defaults/$(script)) + exit 0 +} +endef +endif + + +LUCI_BUILD_PACKAGES := $(PKG_NAME) + +define LuciTranslation + define Package/luci-i18n-$(LUCI_BASENAME)-$(1) + SECTION:=luci + CATEGORY:=LuCI + TITLE:=$(PKG_NAME) - $(1) translation + HIDDEN:=1 + DEFAULT:=LUCI_LANG_$(1)||(ALL&&m) + DEPENDS:=$(PKG_NAME) + PKGARCH:=all + endef + + define Package/luci-i18n-$(LUCI_BASENAME)-$(1)/description + Translation for $(PKG_NAME) - $(LUCI_LANG.$(1)) + endef + + define Package/luci-i18n-$(LUCI_BASENAME)-$(1)/install + $$(INSTALL_DIR) $$(1)/etc/uci-defaults + echo "uci set luci.languages.$(subst -,_,$(1))='$(LUCI_LANG.$(1))'; uci commit luci" \ + > $$(1)/etc/uci-defaults/luci-i18n-$(LUCI_BASENAME)-$(1) + $$(INSTALL_DIR) $$(1)$(LUCI_LIBRARYDIR)/i18n + $(foreach po,$(wildcard ${CURDIR}/po/$(1)/*.po), \ + po2lmo $(po) \ + $$(1)$(LUCI_LIBRARYDIR)/i18n/$(basename $(notdir $(po))).$(1).lmo;) + endef + + define Package/luci-i18n-$(LUCI_BASENAME)-$(1)/postinst + [ -n "$$$${IPKG_INSTROOT}" ] || { + (. /etc/uci-defaults/luci-i18n-$(LUCI_BASENAME)-$(1)) && rm -f /etc/uci-defaults/luci-i18n-$(LUCI_BASENAME)-$(1) + exit 0 + } + endef + + LUCI_BUILD_PACKAGES += luci-i18n-$(LUCI_BASENAME)-$(1) + +endef + +$(foreach lang,$(LUCI_LANGUAGES),$(eval $(call LuciTranslation,$(lang)))) +$(foreach pkg,$(LUCI_BUILD_PACKAGES),$(eval $(call BuildPackage,$(pkg)))) diff --git a/feeds/luci/modules/luci-base/Makefile b/feeds/luci/modules/luci-base/Makefile new file mode 100644 index 0000000..753ff25 --- /dev/null +++ b/feeds/luci/modules/luci-base/Makefile @@ -0,0 +1,48 @@ +# +# Copyright (C) 2008-2015 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-base + +LUCI_TYPE:=mod +LUCI_BASENAME:=base + +LUCI_TITLE:=LuCI core libraries +LUCI_DEPENDS:=+lua +libuci-lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +luci-lib-jsonc + +PKG_SOURCE:=LuaSrcDiet-0.12.1.tar.bz2 +PKG_SOURCE_URL:=https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/luasrcdiet +PKG_MD5SUM:=ed7680f2896269ae8633756e7edcf09050812f78c8f49e280e63c30d14f35aea + +HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/LuaSrcDiet-0.12.1 + +include $(INCLUDE_DIR)/host-build.mk + +define Package/luci-base/conffiles +/etc/luci-uploads +/etc/config/luci +endef + +include ../../luci.mk + +define Host/Configure +endef + +define Host/Compile + $(MAKE) -C src/ clean po2lmo + $(MAKE) -C $(HOST_BUILD_DIR) bin/LuaSrcDiet.lua +endef + +define Host/Install + $(INSTALL_DIR) $(1)/bin + $(INSTALL_BIN) src/po2lmo $(1)/bin/po2lmo + $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/LuaSrcDiet.lua $(1)/bin/LuaSrcDiet +endef + +$(eval $(call HostBuild)) + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/modules/luci-base/htdocs/cgi-bin/luci b/feeds/luci/modules/luci-base/htdocs/cgi-bin/luci new file mode 100755 index 0000000..529d1d0 --- /dev/null +++ b/feeds/luci/modules/luci-base/htdocs/cgi-bin/luci @@ -0,0 +1,5 @@ +#!/usr/bin/lua +require "luci.cacheloader" +require "luci.sgi.cgi" +luci.dispatcher.indexcache = "/tmp/luci-indexcache" +luci.sgi.cgi.run() \ No newline at end of file diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi.js b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi.js new file mode 100644 index 0000000..0ca7e26 --- /dev/null +++ b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi.js @@ -0,0 +1,1496 @@ +/* + LuCI - Lua Configuration Interface + + Copyright 2008 Steven Barth + Copyright 2008-2012 Jo-Philipp Wich + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 +*/ + +var cbi_d = []; +var cbi_t = []; +var cbi_strings = { path: {}, label: {} }; + +function Int(x) { + return (/^-?\d+$/.test(x) ? +x : NaN); +} + +function Dec(x) { + return (/^-?\d+(?:\.\d+)?$/.test(x) ? +x : NaN); +} + +var cbi_validators = { + + 'integer': function() + { + return !!Int(this); + }, + + 'uinteger': function() + { + return (Int(this) >= 0); + }, + + 'float': function() + { + return !!Dec(this); + }, + + 'ufloat': function() + { + return (Dec(this) >= 0); + }, + + 'ipaddr': function() + { + return cbi_validators.ip4addr.apply(this) || + cbi_validators.ip6addr.apply(this); + }, + + 'ip4addr': function() + { + if (this.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})(\/(\S+))?$/)) + { + return (RegExp.$1 >= 0) && (RegExp.$1 <= 255) && + (RegExp.$2 >= 0) && (RegExp.$2 <= 255) && + (RegExp.$3 >= 0) && (RegExp.$3 <= 255) && + (RegExp.$4 >= 0) && (RegExp.$4 <= 255) && + ((RegExp.$6.indexOf('.') < 0) + ? ((RegExp.$6 >= 0) && (RegExp.$6 <= 32)) + : (cbi_validators.ip4addr.apply(RegExp.$6))) + ; + } + + return false; + }, + + 'ip6addr': function() + { + if( this.match(/^([a-fA-F0-9:.]+)(\/(\d+))?$/) ) + { + if( !RegExp.$2 || ((RegExp.$3 >= 0) && (RegExp.$3 <= 128)) ) + { + var addr = RegExp.$1; + + if( addr == '::' ) + { + return true; + } + + if( addr.indexOf('.') > 0 ) + { + var off = addr.lastIndexOf(':'); + + if( !(off && cbi_validators.ip4addr.apply(addr.substr(off+1))) ) + return false; + + addr = addr.substr(0, off) + ':0:0'; + } + + if( addr.indexOf('::') >= 0 ) + { + var colons = 0; + var fill = '0'; + + for( var i = 1; i < (addr.length-1); i++ ) + if( addr.charAt(i) == ':' ) + colons++; + + if( colons > 7 ) + return false; + + for( var i = 0; i < (7 - colons); i++ ) + fill += ':0'; + + if (addr.match(/^(.*?)::(.*?)$/)) + addr = (RegExp.$1 ? RegExp.$1 + ':' : '') + fill + + (RegExp.$2 ? ':' + RegExp.$2 : ''); + } + + return (addr.match(/^(?:[a-fA-F0-9]{1,4}:){7}[a-fA-F0-9]{1,4}$/) != null); + } + } + + return false; + }, + + 'port': function() + { + var p = Int(this); + return (p >= 0 && p <= 65535); + }, + + 'portrange': function() + { + if (this.match(/^(\d+)-(\d+)$/)) + { + var p1 = +RegExp.$1; + var p2 = +RegExp.$2; + return (p1 <= p2 && p2 <= 65535); + } + + return cbi_validators.port.apply(this); + }, + + 'macaddr': function() + { + return (this.match(/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/) != null); + }, + + 'host': function(ipv4only) + { + return cbi_validators.hostname.apply(this) || + ((ipv4only != 1) && cbi_validators.ipaddr.apply(this)) || + ((ipv4only == 1) && cb_validators.ip4addr.apply(this)); + }, + + 'hostname': function() + { + if (this.length <= 253) + return (this.match(/^[a-zA-Z0-9]+$/) != null || + (this.match(/^[a-zA-Z0-9_][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$/) && + this.match(/[^0-9.]/))); + + return false; + }, + + 'network': function() + { + return cbi_validators.uciname.apply(this) || + cbi_validators.host.apply(this); + }, + + 'hostport': function(ipv4only) + { + var hp = this.split(/:/); + + if (hp.length == 2) + return (cbi_validators.host.apply(hp[0], ipv4only) && + cbi_validators.port.apply(hp[1])); + + return false; + }, + + 'ip4addrport': function() + { + var hp = this.split(/:/); + + if (hp.length == 2) + return (cbi_validators.ipaddr.apply(hp[0]) && + cbi_validators.port.apply(hp[1])); + return false; + }, + + 'ipaddrport': function(bracket) + { + if (this.match(/^([^\[\]:]+):([^:]+)$/)) { + var addr = RegExp.$1 + var port = RegExp.$2 + return (cbi_validators.ip4addr.apply(addr) && + cbi_validators.port.apply(port)); + } else if ((bracket == 1) && (this.match(/^\[(.+)\]:([^:]+)$/))) { + var addr = RegExp.$1 + var port = RegExp.$2 + return (cbi_validators.ip6addr.apply(addr) && + cbi_validators.port.apply(port)); + } else if ((bracket != 1) && (this.match(/^([^\[\]]+):([^:]+)$/))) { + var addr = RegExp.$1 + var port = RegExp.$2 + return (cbi_validators.ip6addr.apply(addr) && + cbi_validators.port.apply(port)); + } else { + return false; + } + }, + + 'wpakey': function() + { + var v = this; + + if( v.length == 64 ) + return (v.match(/^[a-fA-F0-9]{64}$/) != null); + else + return (v.length >= 8) && (v.length <= 63); + }, + + 'wepkey': function() + { + var v = this; + + if ( v.substr(0,2) == 's:' ) + v = v.substr(2); + + if( (v.length == 10) || (v.length == 26) ) + return (v.match(/^[a-fA-F0-9]{10,26}$/) != null); + else + return (v.length == 5) || (v.length == 13); + }, + + 'uciname': function() + { + return (this.match(/^[a-zA-Z0-9_]+$/) != null); + }, + + 'range': function(min, max) + { + var val = Dec(this); + return (val >= +min && val <= +max); + }, + + 'min': function(min) + { + return (Dec(this) >= +min); + }, + + 'max': function(max) + { + return (Dec(this) <= +max); + }, + + 'rangelength': function(min, max) + { + var val = '' + this; + return ((val.length >= +min) && (val.length <= +max)); + }, + + 'minlength': function(min) + { + return ((''+this).length >= +min); + }, + + 'maxlength': function(max) + { + return ((''+this).length <= +max); + }, + + 'or': function() + { + for (var i = 0; i < arguments.length; i += 2) + { + if (typeof arguments[i] != 'function') + { + if (arguments[i] == this) + return true; + i--; + } + else if (arguments[i].apply(this, arguments[i+1])) + { + return true; + } + } + return false; + }, + + 'and': function() + { + for (var i = 0; i < arguments.length; i += 2) + { + if (typeof arguments[i] != 'function') + { + if (arguments[i] != this) + return false; + i--; + } + else if (!arguments[i].apply(this, arguments[i+1])) + { + return false; + } + } + return true; + }, + + 'neg': function() + { + return cbi_validators.or.apply( + this.replace(/^[ \t]*![ \t]*/, ''), arguments); + }, + + 'list': function(subvalidator, subargs) + { + if (typeof subvalidator != 'function') + return false; + + var tokens = this.match(/[^ \t]+/g); + for (var i = 0; i < tokens.length; i++) + if (!subvalidator.apply(tokens[i], subargs)) + return false; + + return true; + }, + 'phonedigit': function() + { + return (this.match(/^[0-9\*#!\.]+$/) != null); + }, + 'timehhmmss': function() + { + return (this.match(/^[0-6][0-9]:[0-6][0-9]:[0-6][0-9]$/) != null); + }, + 'dateyyyymmdd': function() + { + if (this == null) { + return false; + } + if (this.match(/^(\d\d\d\d)-(\d\d)-(\d\d)/)) { + var year = RegExp.$1; + var month = RegExp.$2; + var day = RegExp.$2 + + var days_in_month = [ 31, 28, 31, 30, 31, 30, 31, 31, 30 , 31, 30, 31 ]; + function is_leap_year(year) { + return ((year % 4) == 0) && ((year % 100) != 0) || ((year % 400) == 0); + } + function get_days_in_month(month, year) { + if ((month == 2) && is_leap_year(year)) { + return 29; + } else { + return days_in_month[month]; + } + } + /* Firewall rules in the past don't make sense */ + if (year < 2015) { + return false; + } + if ((month <= 0) || (month > 12)) { + return false; + } + if ((day <= 0) || (day > get_days_in_month(month, year))) { + return false; + } + return true; + + } else { + return false; + } + } +}; + + +function cbi_d_add(field, dep, index) { + var obj = (typeof(field) === 'string') ? document.getElementById(field) : field; + if (obj) { + var entry + for (var i=0; i 0 && (tl[0].type == 'radio' || tl[0].type == 'checkbox')) + for( var i = 0; i < tl.length; i++ ) + if( tl[i].checked ) { + value = tl[i].value; + break; + } + + value = value ? value : ""; + } else if (!t.value) { + value = ""; + } else { + value = t.value; + + if (t.type == "checkbox") { + value = t.checked ? value : ""; + } + } + + return (value == ref) +} + +function cbi_d_check(deps) { + var reverse; + var def = false; + for (var i=0; i entry.index) { + break; + } + } + + if (!next) { + parent.appendChild(entry.node); + } else { + parent.insertBefore(entry.node, next); + } + + state = true; + } + + // hide optionals widget if no choices remaining + if (parent && parent.parentNode && parent.getAttribute('data-optionals')) + parent.parentNode.style.display = (parent.options.length <= 1) ? 'none' : ''; + } + + if (entry && entry.parent) { + if (!cbi_t_update()) + cbi_tag_last(parent); + } + + if (state) { + cbi_d_update(); + } +} + +function cbi_init() { + var nodes; + + nodes = document.querySelectorAll('[data-strings]'); + + for (var i = 0, node; (node = nodes[i]) !== undefined; i++) { + var str = JSON.parse(node.getAttribute('data-strings')); + for (var key in str) { + for (var key2 in str[key]) { + var dst = cbi_strings[key] || (cbi_strings[key] = { }); + dst[key2] = str[key][key2]; + } + } + } + + nodes = document.querySelectorAll('[data-depends]'); + + for (var i = 0, node; (node = nodes[i]) !== undefined; i++) { + var index = parseInt(node.getAttribute('data-index'), 10); + var depends = JSON.parse(node.getAttribute('data-depends')); + if (!isNaN(index) && depends.length > 0) { + for (var alt = 0; alt < depends.length; alt++) { + cbi_d_add(node, depends[alt], index); + } + } + } + + nodes = document.querySelectorAll('[data-update]'); + + for (var i = 0, node; (node = nodes[i]) !== undefined; i++) { + var events = node.getAttribute('data-update').split(' '); + for (var j = 0, event; (event = events[j]) !== undefined; j++) { + cbi_bind(node, event, cbi_d_update); + } + } + + nodes = document.querySelectorAll('[data-choices]'); + + for (var i = 0, node; (node = nodes[i]) !== undefined; i++) { + var choices = JSON.parse(node.getAttribute('data-choices')); + var options = {}; + + for (var j = 0; j < choices[0].length; j++) + options[choices[0][j]] = choices[1][j]; + + var def = (node.getAttribute('data-optional') === 'true') + ? node.placeholder || '' : null; + + cbi_combobox_init(node, options, def, + node.getAttribute('data-manual')); + } + + nodes = document.querySelectorAll('[data-dynlist]'); + + for (var i = 0, node; (node = nodes[i]) !== undefined; i++) { + var choices = JSON.parse(node.getAttribute('data-dynlist')); + var options = null; + + if (choices[0] && choices[0].length) { + options = {}; + + for (var j = 0; j < choices[0].length; j++) + options[choices[0][j]] = choices[1][j]; + } + + cbi_dynlist_init(node, choices[2], choices[3], options); + } + + nodes = document.querySelectorAll('[data-type]'); + + for (var i = 0, node; (node = nodes[i]) !== undefined; i++) { + cbi_validate_field(node, node.getAttribute('data-optional') === 'true', + node.getAttribute('data-type')); + } + + cbi_d_update(); +} + +function cbi_bind(obj, type, callback, mode) { + if (!obj.addEventListener) { + obj.attachEvent('on' + type, + function(){ + var e = window.event; + + if (!e.target && e.srcElement) + e.target = e.srcElement; + + return !!callback(e); + } + ); + } else { + obj.addEventListener(type, callback, !!mode); + } + return obj; +} + +function cbi_combobox(id, values, def, man, focus) { + var selid = "cbi.combobox." + id; + if (document.getElementById(selid)) { + return + } + + var obj = document.getElementById(id) + var sel = document.createElement("select"); + sel.id = selid; + sel.index = obj.index; + sel.className = obj.className.replace(/cbi-input-text/, 'cbi-input-select'); + + if (obj.nextSibling) { + obj.parentNode.insertBefore(sel, obj.nextSibling); + } else { + obj.parentNode.appendChild(sel); + } + + var dt = obj.getAttribute('cbi_datatype'); + var op = obj.getAttribute('cbi_optional'); + + if (dt) + cbi_validate_field(sel, op == 'true', dt); + + if (!values[obj.value]) { + if (obj.value == "") { + var optdef = document.createElement("option"); + optdef.value = ""; + optdef.appendChild(document.createTextNode(typeof(def) === 'string' ? def : cbi_strings.label.choose)); + sel.appendChild(optdef); + } else { + var opt = document.createElement("option"); + opt.value = obj.value; + opt.selected = "selected"; + opt.appendChild(document.createTextNode(obj.value)); + sel.appendChild(opt); + } + } + + for (var i in values) { + var opt = document.createElement("option"); + opt.value = i; + + if (obj.value == i) { + opt.selected = "selected"; + } + + opt.appendChild(document.createTextNode(values[i])); + sel.appendChild(opt); + } + + var optman = document.createElement("option"); + optman.value = ""; + optman.appendChild(document.createTextNode(typeof(man) === 'string' ? man : cbi_strings.label.custom)); + sel.appendChild(optman); + + obj.style.display = "none"; + + cbi_bind(sel, "change", function() { + if (sel.selectedIndex == sel.options.length - 1) { + obj.style.display = "inline"; + sel.blur(); + sel.parentNode.removeChild(sel); + obj.focus(); + } else { + obj.value = sel.options[sel.selectedIndex].value; + } + + try { + cbi_d_update(); + } catch (e) { + //Do nothing + } + }) + + // Retrigger validation in select + if (focus) { + sel.focus(); + sel.blur(); + } +} + +function cbi_combobox_init(id, values, def, man) { + var obj = (typeof(id) === 'string') ? document.getElementById(id) : id; + cbi_bind(obj, "blur", function() { + cbi_combobox(obj.id, values, def, man, true); + }); + cbi_combobox(obj.id, values, def, man, false); +} + +function cbi_filebrowser(id, defpath) { + var field = document.getElementById(id); + var browser = window.open( + cbi_strings.path.browser + ( field.value || defpath || '' ) + '?field=' + id, + "luci_filebrowser", "width=300,height=400,left=100,top=200,scrollbars=yes" + ); + + browser.focus(); +} + +function cbi_browser_init(id, defpath) +{ + function cbi_browser_btnclick(e) { + cbi_filebrowser(id, defpath); + return false; + } + + var field = document.getElementById(id); + + var btn = document.createElement('img'); + btn.className = 'cbi-image-button'; + btn.src = cbi_strings.path.resource + '/cbi/folder.gif'; + field.parentNode.insertBefore(btn, field.nextSibling); + + cbi_bind(btn, 'click', cbi_browser_btnclick); +} + +function cbi_dynlist_init(parent, datatype, optional, choices) +{ + var prefix = parent.getAttribute('data-prefix'); + var holder = parent.getAttribute('data-placeholder'); + + var values; + + function cbi_dynlist_redraw(focus, add, del) + { + values = [ ]; + + while (parent.firstChild) + { + var n = parent.firstChild; + var i = +n.index; + + if (i != del) + { + if (n.nodeName.toLowerCase() == 'input') + values.push(n.value || ''); + else if (n.nodeName.toLowerCase() == 'select') + values[values.length-1] = n.options[n.selectedIndex].value; + } + + parent.removeChild(n); + } + + if (add >= 0) + { + focus = add+1; + values.splice(focus, 0, ''); + } + else if (values.length == 0) + { + focus = 0; + values.push(''); + } + + for (var i = 0; i < values.length; i++) + { + var t = document.createElement('input'); + t.id = prefix + '.' + (i+1); + t.name = prefix; + t.value = values[i]; + t.type = 'text'; + t.index = i; + t.className = 'cbi-input-text'; + + if (i == 0 && holder) + { + t.placeholder = holder; + } + + var b = document.createElement('img'); + b.src = cbi_strings.path.resource + ((i+1) < values.length ? '/cbi/remove.gif' : '/cbi/add.gif'); + b.className = 'cbi-image-button'; + + parent.appendChild(t); + parent.appendChild(b); + if (datatype == 'file') + { + cbi_browser_init(t.id, parent.getAttribute('data-browser-path')); + } + + parent.appendChild(document.createElement('br')); + + if (datatype) + { + cbi_validate_field(t.id, ((i+1) == values.length) || optional, datatype); + } + + if (choices) + { + cbi_combobox_init(t.id, choices, '', cbi_strings.label.custom); + b.index = i; + + cbi_bind(b, 'keydown', cbi_dynlist_keydown); + cbi_bind(b, 'keypress', cbi_dynlist_keypress); + + if (i == focus || -i == focus) + b.focus(); + } + else + { + cbi_bind(t, 'keydown', cbi_dynlist_keydown); + cbi_bind(t, 'keypress', cbi_dynlist_keypress); + + if (i == focus) + { + t.focus(); + } + else if (-i == focus) + { + t.focus(); + + /* force cursor to end */ + var v = t.value; + t.value = ' ' + t.value = v; + } + } + + cbi_bind(b, 'click', cbi_dynlist_btnclick); + } + } + + function cbi_dynlist_keypress(ev) + { + ev = ev ? ev : window.event; + + var se = ev.target ? ev.target : ev.srcElement; + + if (se.nodeType == 3) + se = se.parentNode; + + switch (ev.keyCode) + { + /* backspace, delete */ + case 8: + case 46: + if (se.value.length == 0) + { + if (ev.preventDefault) + ev.preventDefault(); + + return false; + } + + return true; + + /* enter, arrow up, arrow down */ + case 13: + case 38: + case 40: + if (ev.preventDefault) + ev.preventDefault(); + + return false; + } + + return true; + } + + function cbi_dynlist_keydown(ev) + { + ev = ev ? ev : window.event; + + var se = ev.target ? ev.target : ev.srcElement; + + if (se.nodeType == 3) + se = se.parentNode; + + var prev = se.previousSibling; + while (prev && prev.name != prefix) + prev = prev.previousSibling; + + var next = se.nextSibling; + while (next && next.name != prefix) + next = next.nextSibling; + + /* advance one further in combobox case */ + if (next && next.nextSibling.name == prefix) + next = next.nextSibling; + + switch (ev.keyCode) + { + /* backspace, delete */ + case 8: + case 46: + var del = (se.nodeName.toLowerCase() == 'select') + ? true : (se.value.length == 0); + + if (del) + { + if (ev.preventDefault) + ev.preventDefault(); + + var focus = se.index; + if (ev.keyCode == 8) + focus = -focus+1; + + cbi_dynlist_redraw(focus, -1, se.index); + + return false; + } + + break; + + /* enter */ + case 13: + cbi_dynlist_redraw(-1, se.index, -1); + break; + + /* arrow up */ + case 38: + if (prev) + prev.focus(); + + break; + + /* arrow down */ + case 40: + if (next) + next.focus(); + + break; + } + + return true; + } + + function cbi_dynlist_btnclick(ev) + { + ev = ev ? ev : window.event; + + var se = ev.target ? ev.target : ev.srcElement; + var input = se.previousSibling; + while (input && input.name != prefix) { + input = input.previousSibling; + } + + if (se.src.indexOf('remove') > -1) + { + input.value = ''; + + cbi_dynlist_keydown({ + target: input, + keyCode: 8 + }); + } + else + { + cbi_dynlist_keydown({ + target: input, + keyCode: 13 + }); + } + + return false; + } + + cbi_dynlist_redraw(NaN, -1, -1); +} + + +function cbi_t_add(section, tab) { + var t = document.getElementById('tab.' + section + '.' + tab); + var c = document.getElementById('container.' + section + '.' + tab); + + if( t && c ) { + cbi_t[section] = (cbi_t[section] || [ ]); + cbi_t[section][tab] = { 'tab': t, 'container': c, 'cid': c.id }; + } +} + +function cbi_t_switch(section, tab) { + if( cbi_t[section] && cbi_t[section][tab] ) { + var o = cbi_t[section][tab]; + var h = document.getElementById('tab.' + section); + for( var tid in cbi_t[section] ) { + var o2 = cbi_t[section][tid]; + if( o.tab.id != o2.tab.id ) { + o2.tab.className = o2.tab.className.replace(/(^| )cbi-tab( |$)/, " cbi-tab-disabled "); + o2.container.style.display = 'none'; + } + else { + if(h) h.value = tab; + o2.tab.className = o2.tab.className.replace(/(^| )cbi-tab-disabled( |$)/, " cbi-tab "); + o2.container.style.display = 'block'; + } + } + } + return false +} + +function cbi_t_update() { + var hl_tabs = [ ]; + var updated = false; + + for( var sid in cbi_t ) + for( var tid in cbi_t[sid] ) + { + var t = cbi_t[sid][tid].tab; + var c = cbi_t[sid][tid].container; + + if (!c.firstElementChild) { + t.style.display = 'none'; + } + else if (t.style.display == 'none') { + t.style.display = ''; + t.className += ' cbi-tab-highlighted'; + hl_tabs.push(t); + } + + cbi_tag_last(c); + updated = true; + } + + if (hl_tabs.length > 0) + window.setTimeout(function() { + for( var i = 0; i < hl_tabs.length; i++ ) + hl_tabs[i].className = hl_tabs[i].className.replace(/ cbi-tab-highlighted/g, ''); + }, 750); + + return updated; +} + + +function cbi_validate_form(form, errmsg) +{ + /* if triggered by a section removal or addition, don't validate */ + if( form.cbi_state == 'add-section' || form.cbi_state == 'del-section' ) + return true; + + if( form.cbi_validators ) + { + for( var i = 0; i < form.cbi_validators.length; i++ ) + { + var validator = form.cbi_validators[i]; + if( !validator() && errmsg ) + { + alert(errmsg); + return false; + } + } + } + + return true; +} + +function cbi_validate_reset(form) +{ + window.setTimeout( + function() { cbi_validate_form(form, null) }, 100 + ); + + return true; +} + +function cbi_validate_compile(code) +{ + var pos = 0; + var esc = false; + var depth = 0; + var stack = [ ]; + + code += ','; + + for (var i = 0; i < code.length; i++) + { + if (esc) + { + esc = false; + continue; + } + + switch (code.charCodeAt(i)) + { + case 92: + esc = true; + break; + + case 40: + case 44: + if (depth <= 0) + { + if (pos < i) + { + var label = code.substring(pos, i); + label = label.replace(/\\(.)/g, '$1'); + label = label.replace(/^[ \t]+/g, ''); + label = label.replace(/[ \t]+$/g, ''); + + if (label && !isNaN(label)) + { + stack.push(parseFloat(label)); + } + else if (label.match(/^(['"]).*\1$/)) + { + stack.push(label.replace(/^(['"])(.*)\1$/, '$2')); + } + else if (typeof cbi_validators[label] == 'function') + { + stack.push(cbi_validators[label]); + stack.push(null); + } + else + { + throw "Syntax error, unhandled token '"+label+"'"; + } + } + pos = i+1; + } + depth += (code.charCodeAt(i) == 40); + break; + + case 41: + if (--depth <= 0) + { + if (typeof stack[stack.length-2] != 'function') + throw "Syntax error, argument list follows non-function"; + + stack[stack.length-1] = + arguments.callee(code.substring(pos, i)); + + pos = i+1; + } + break; + } + } + + return stack; +} + +function cbi_validate_field(cbid, optional, type) +{ + var field = (typeof cbid == "string") ? document.getElementById(cbid) : cbid; + var vstack; try { vstack = cbi_validate_compile(type); } catch(e) { }; + + if (field && vstack && typeof vstack[0] == "function") + { + var validator = function() + { + // is not detached + if( field.form ) + { + field.className = field.className.replace(/ cbi-input-invalid/g, ''); + + // validate value + var value = (field.options && field.options.selectedIndex > -1) + ? field.options[field.options.selectedIndex].value : field.value; + + if (!(((value.length == 0) && optional) || vstack[0].apply(value, vstack[1]))) + { + // invalid + field.className += ' cbi-input-invalid'; + return false; + } + } + + return true; + }; + + if( ! field.form.cbi_validators ) + field.form.cbi_validators = [ ]; + + field.form.cbi_validators.push(validator); + + cbi_bind(field, "blur", validator); + cbi_bind(field, "keyup", validator); + + if (field.nodeName == 'SELECT') + { + cbi_bind(field, "change", validator); + cbi_bind(field, "click", validator); + } + + field.setAttribute("cbi_validate", validator); + field.setAttribute("cbi_datatype", type); + field.setAttribute("cbi_optional", (!!optional).toString()); + + validator(); + + var fcbox = document.getElementById('cbi.combobox.' + field.id); + if (fcbox) + cbi_validate_field(fcbox, optional, type); + } +} + +function cbi_row_swap(elem, up, store) +{ + var tr = elem.parentNode; + while (tr && tr.nodeName.toLowerCase() != 'tr') + tr = tr.parentNode; + + if (!tr) + return false; + + var table = tr.parentNode; + while (table && table.nodeName.toLowerCase() != 'table') + table = table.parentNode; + + if (!table) + return false; + + var s = up ? 3 : 2; + var e = up ? table.rows.length : table.rows.length - 1; + + for (var idx = s; idx < e; idx++) + { + if (table.rows[idx] == tr) + { + if (up) + tr.parentNode.insertBefore(table.rows[idx], table.rows[idx-1]); + else + tr.parentNode.insertBefore(table.rows[idx+1], table.rows[idx]); + + break; + } + } + + var ids = [ ]; + for (idx = 2; idx < table.rows.length; idx++) + { + table.rows[idx].className = table.rows[idx].className.replace( + /cbi-rowstyle-[12]/, 'cbi-rowstyle-' + (1 + (idx % 2)) + ); + + if (table.rows[idx].id && table.rows[idx].id.match(/-([^\-]+)$/) ) + ids.push(RegExp.$1); + } + + var input = document.getElementById(store); + if (input) + input.value = ids.join(' '); + + return false; +} + +function cbi_tag_last(container) +{ + var last; + + for (var i = 0; i < container.childNodes.length; i++) + { + var c = container.childNodes[i]; + if (c.nodeType == 1 && c.nodeName.toLowerCase() == 'div') + { + c.className = c.className.replace(/ cbi-value-last$/, ''); + last = c; + } + } + + if (last) + { + last.className += ' cbi-value-last'; + } +} + +String.prototype.serialize = function() +{ + var o = this; + switch(typeof(o)) + { + case 'object': + // null + if( o == null ) + { + return 'null'; + } + + // array + else if( o.length ) + { + var i, s = ''; + + for( var i = 0; i < o.length; i++ ) + s += (s ? ', ' : '') + String.serialize(o[i]); + + return '[ ' + s + ' ]'; + } + + // object + else + { + var k, s = ''; + + for( k in o ) + s += (s ? ', ' : '') + k + ': ' + String.serialize(o[k]); + + return '{ ' + s + ' }'; + } + + break; + + case 'string': + // complex string + if( o.match(/[^a-zA-Z0-9_,.: -]/) ) + return 'decodeURIComponent("' + encodeURIComponent(o) + '")'; + + // simple string + else + return '"' + o + '"'; + + break; + + default: + return o.toString(); + } +} + +String.prototype.format = function() +{ + if (!RegExp) + return; + + var html_esc = [/&/g, '&', /"/g, '"', /'/g, ''', //g, '>']; + var quot_esc = [/"/g, '"', /'/g, ''']; + + function esc(s, r) { + if (typeof(s) !== 'string' && !(s instanceof String)) + return ''; + + for( var i = 0; i < r.length; i += 2 ) + s = s.replace(r[i], r[i+1]); + return s; + } + + var str = this; + var out = ''; + var re = /^(([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X|q|h|j|t|m))/; + var a = b = [], numSubstitutions = 0, numMatches = 0; + + while (a = re.exec(str)) + { + var m = a[1]; + var leftpart = a[2], pPad = a[3], pJustify = a[4], pMinLength = a[5]; + var pPrecision = a[6], pType = a[7]; + + numMatches++; + + if (pType == '%') + { + subst = '%'; + } + else + { + if (numSubstitutions < arguments.length) + { + var param = arguments[numSubstitutions++]; + + var pad = ''; + if (pPad && pPad.substr(0,1) == "'") + pad = leftpart.substr(1,1); + else if (pPad) + pad = pPad; + else + pad = ' '; + + var justifyRight = true; + if (pJustify && pJustify === "-") + justifyRight = false; + + var minLength = -1; + if (pMinLength) + minLength = +pMinLength; + + var precision = -1; + if (pPrecision && pType == 'f') + precision = +pPrecision.substring(1); + + var subst = param; + + switch(pType) + { + case 'b': + subst = (+param || 0).toString(2); + break; + + case 'c': + subst = String.fromCharCode(+param || 0); + break; + + case 'd': + subst = ~~(+param || 0); + break; + + case 'u': + subst = ~~Math.abs(+param || 0); + break; + + case 'f': + subst = (precision > -1) + ? ((+param || 0.0)).toFixed(precision) + : (+param || 0.0); + break; + + case 'o': + subst = (+param || 0).toString(8); + break; + + case 's': + subst = param; + break; + + case 'x': + subst = ('' + (+param || 0).toString(16)).toLowerCase(); + break; + + case 'X': + subst = ('' + (+param || 0).toString(16)).toUpperCase(); + break; + + case 'h': + subst = esc(param, html_esc); + break; + + case 'q': + subst = esc(param, quot_esc); + break; + + case 'j': + subst = String.serialize(param); + break; + + case 't': + var td = 0; + var th = 0; + var tm = 0; + var ts = (param || 0); + + if (ts > 60) { + tm = Math.floor(ts / 60); + ts = (ts % 60); + } + + if (tm > 60) { + th = Math.floor(tm / 60); + tm = (tm % 60); + } + + if (th > 24) { + td = Math.floor(th / 24); + th = (th % 24); + } + + subst = (td > 0) + ? String.format('%dd %dh %dm %ds', td, th, tm, ts) + : String.format('%dh %dm %ds', th, tm, ts); + + break; + + case 'm': + var mf = pMinLength ? +pMinLength : 1000; + var pr = pPrecision ? ~~(10 * +('0' + pPrecision)) : 2; + + var i = 0; + var val = (+param || 0); + var units = [ ' ', ' K', ' M', ' G', ' T', ' P', ' E' ]; + + for (i = 0; (i < units.length) && (val > mf); i++) + val /= mf; + + subst = (i ? val.toFixed(pr) : val) + units[i]; + pMinLength = null; + break; + } + } + } + + if (pMinLength) { + subst = subst.toString(); + for (var i = subst.length; i < pMinLength; i++) + if (pJustify == '-') + subst = subst + ' '; + else + subst = pad + subst; + } + + out += leftpart + subst; + str = str.substr(m.length); + } + + return out + str; +} + +String.prototype.nobr = function() +{ + return this.replace(/[\s\n]+/g, ' '); +} + +String.serialize = function() +{ + var a = [ ]; + for (var i = 1; i < arguments.length; i++) + a.push(arguments[i]); + return ''.serialize.apply(arguments[0], a); +} + +String.format = function() +{ + var a = [ ]; + for (var i = 1; i < arguments.length; i++) + a.push(arguments[i]); + return ''.format.apply(arguments[0], a); +} + +String.nobr = function() +{ + var a = [ ]; + for (var i = 1; i < arguments.length; i++) + a.push(arguments[i]); + return ''.nobr.apply(arguments[0], a); +} diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/add.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/add.gif new file mode 100644 index 0000000000000000000000000000000000000000..0888abf85ed10d3bdadb25b30b49e8c35b8233d9 GIT binary patch literal 378 zcmZ?wbhEHb6krfwxT?YM=;a5`&}?V#n2z-)rk?s^=Nj6%`^~-Q?==mbXC1h9`pm_a zJ=P67ET*3H=saLQ{j_)8HuL@?E|ZSCPdMs&_4bo#r@XE{|4_Brxch*^ymP;U605@t zCcgRjt!Rzz)3;yCrf*qt@%P5-e?EQtb>RNr-FN=3zVdt9tv~<4fPor7@h1x-1A_*G z4#+T&pBUJtADCR=A+xAY{q)Mqma1&c{a=cmxa4~mroT4KS#`QgUof=)~+&T;I{j*sYXaTd%6BpddF%U0!DD^qC5h za!gM1`zFkilw?>wPi9)j8Wt9I))h*%tJiLm*{Loqq9hZ|aDstdhKpl`^aUv?Mn)zk OR#uKC*E=qb4Aua>fQ#$^ literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/apply.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/apply.gif new file mode 100644 index 0000000000000000000000000000000000000000..82ae7ed821f7524c0356e40f79a0379fc634d535 GIT binary patch literal 268 zcmV+n0rUPxNk%w1VGsZi0K^{vM3g9B!ajxBR(;h{C|4L|#z9W1FZTQNam`88@5?V| z96pC8chOCN)>Mw(T#DRUiQ8Fv(@#mEENRI^ZOca`PZo5~OEz>Nz2>iuw1BeWp~dOA zBTNzi%BC{z2#%%nWDQ(& zkP#APQYdIRbsbb52orn(e?S)g~J1 z%8r<(-QeVRgO&gP{{R30A^8LW000gEEC2ui01E&M06+vZ(8)=q0AK`A2tAn4V1q?& p9d!Z1mQ}E{1V<7C3PltEGGGP@1A|xv9lPESaCFRSx11yb06WwgHGu#C literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/down.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/down.gif new file mode 100644 index 0000000000000000000000000000000000000000..f0bb6a4ea640d9b2beda344c7485d260f5761779 GIT binary patch literal 131 zcmZ?wbhEHb6krfw*v!o^>1^DDBbk%W#`m8Mo^~Z-=JluvXG6M=M%Jv0O73_44+acK zK=CIFBLf3BgAPaxWCjC^LBUDS)q5?HkM0ihoS_kK#PIl-D%-2j1P>Oa%ti-AnU~WT VI^xvQF6&qvTT*m#iwgsTH2{W9F7W^W literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/download.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/download.gif new file mode 100644 index 0000000000000000000000000000000000000000..f99a5383b23fc4270a45048cea54b7d84e4c632b GIT binary patch literal 189 zcmZ?wbhEHb6krfw*v!umwaLqI!OQM5F>k&+Z^fq|bvhXDvcW-zd1eeis_YHo#<8bh&USm7b|HfiTo^1C<- zB2&*9?YY;WqkfgAr7?@)##fnMrp5vd5e9?B>jf-W))_Q3ne(cwV{E9XUS-Jmz%6-U ohKzU%--1K~l{<@Algzi@uNL9X;o>Z>(Bsa^YtS>66lAal0Is`BfB*mh literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/edit.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/edit.gif new file mode 100644 index 0000000000000000000000000000000000000000..e06e37c7509d07a98a4acc6eeb5d40777fdb912f GIT binary patch literal 272 zcmV+r0q_1tNk%v~VGsZi0Q3L=V0V>>ugJjP{dk$Tr~sLS5q=$-yaxZ#SE11S zRIB!<(fT-LmH+?$EC2ui01yBW000G*;3tk`DMpS%Nm39Du;)pl6A@EB5xm!Np4!Af zBnlcnph84J6a~km2eJG}oCYZJ=Ydc~*KCvvDSSTxgcd_Cm=B`#5u?d;3!M!C{uwM9 zbQu_Bd3p~bei3zpcpDoG6^DHb2?~}900Ru06&HvI2?=-w0|2G~3!WbU5ePdx1QoIi W4i<=*mj?$A4;L2}RVKnBApkpjesy~Q literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/fieldadd.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/fieldadd.gif new file mode 100644 index 0000000000000000000000000000000000000000..eebe0fffe007105e4ce41a133cd245989df89116 GIT binary patch literal 371 zcmZ?wbh9u|6krfw_{zZW|GeMpEk^&ppZIqp{q-#2*GpypKk@m0DeV7?)PKK@zCNA$ z`dro2lOEGfdA01Zo^;&3Zkzdpqptt|eeXPA|NqbH{v$3`n~kTR_U=C5@c+lT*LU_b z?6CO%>(2l8{r~^I{r|G{^@*_mA7}snwCwdU*P=DL|Gypj|E%Km1>^spH~#;&>;M1% z43q&Kkamz?7}#bwOfB%x;WE_{^4uEG;IQ~&rq>>Ww&uf$2W&Y#d)-qvvCKHjo^RAt z=rCq4kYj3YZC6y3D zr`kV9R$fhWp_cOEnn}ymI22c}?ccD1gH4{*NnLLJyiIJo_iCwg%E_FTWYSo^f@PY2 SKp-O{D=W)wx4SNm4AubY36m`V literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/file.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/file.gif new file mode 100644 index 0000000000000000000000000000000000000000..342a8463d2912b82b01c3c2deb3ce92e7cf5e4a1 GIT binary patch literal 267 zcmZ?wbhEHb6krfw_#(~l=;a5`&}?V#n2z-)rk?s^=Nj6%`^~-Q?==mbXC1h9`pm_v zx1U^n{$bv^-$9Ah;RO@leEjzG?bovDTb5k>z47{=Pv3qWxc_(eoxiKE{N8r!&;S4b z8Bl@ZPZm}N25ANzkTA$j2G))RYJE?3%#~_R^t9#)(#g~~<{~i9eb2`WQa(qVRO0le zbsbdq3h6qUocb!mZs8H1wxE?+b8d7`YkJwm7Jjr4L_o{y)q5EzYtB;xTCWf;e!643y9FwiJ6z-cH%*eE2C&?LHF520~{Ks*+N*(+Kf z6ATMOGH`g(00>C|cno`e9u*=05rZ2M2z-c&9*lzt8600y!Ov2kE{g|XOkwd;Ab>T|a1bhhkywd#Ad>UFp6cDL<(x9okm?0&fIc)IU+y6}9u?s>cL zfV%E`yz-8@;ex#Gf4%XLy5fSp@qxbce!umEzVU^>^M=3jgu(QP!1I*9=ZV7fhQs%Y z!}W;8`Hsf-i^%(t$N7xO{E^A|kjnj(%lw$n{+-VKn$iE9(f_H_`l{6Xr`i9>)!(q% z|FPQtvD^Q);Q!Lxt%1@HYPm;<{lFCn#%1@HYA^uK7a%Ew3Wn>^? zc_2$=c4=-POmAarWh@{vFflPLFf%PMG$3Ygav)4~LrE?mAW~&)Wnpt=WFTp7bZ;PZ zXk{Q!bz*F3V<1FtZDDC{E&w6<1OW;Fe*i210000G01yBG2gQJYf`f#Ge|UL`iiU%E z4Fdv^0C9|ec>{8Eb8>YId5n1ib8n<>Ks|P;sdtD5UQ)1C8wn8(4i5?li3bZ45)%*> zXk1rRPHh5-0dQtyVqi@~J~=fnVacIvSW!$zKRPxsEGSyo0%}i4K|41xEh!};Rs@Lx zX+u0XGcGD7A|D)}m^+h$#)}mvMu6y$;erx+p~k=%M?p4qk8 z_sQn}X|3gLf|Hfa{4HFBMq+vzJXv+X|6!-#{r&xKvgu!?-l)&;*zNvYc8feuU~I4F zQ<~I5R%ieJ|NsC0A^8LW0018VEC2ui01yBW000Gt;3s}wX?kNyLPFa#5UP3^wk(CC zKe9+;gdm|(VMuts4zO}DT@VOK1m)={2pi9Zf$&VC9jdjm*+RV&K$v9RFu0|I!2+1F z6;Q;%BcIpB1z!^u289U*e{2p3gL?-F2^@(e8U&FXn3w5$p!k!8k%2*+K?fuc zvXg-|`GIQRqSUCAs4#&;3tm~By~MCQ%rwwORo7gy-yy?BWny%m`4$Z=kEQF}JtY=+ zUfLA?(#?Ar^XBeQKBmcC4v)^p`DK_cQ206RTqffIk;3UrB1Hyj7R*hC%3_Rs)g7Jc Jeaeaq)&Qp@T0Z~) literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/link.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/link.gif new file mode 100644 index 0000000000000000000000000000000000000000..f0bb78da6b1e2cb17aa1a0e21c80e02979f6321a GIT binary patch literal 279 zcmV+y0qFimNk%w1VGsZi0K^{vm&^Qekgn|U_T}yMiLlDm+vLaN{=MG)S8$O@RcrG0 z`m5CYWS!x)+5Dr>`-!{kQek_q(&TBN;zLVZ)#vbFn&Fzj)~L(g-skTrF+)B@RpROJ ze4)L|%+de<|NsC0A^8LW0018VEC2ui01yBW000G)peK&x_?;dVMVDm}1jhw|hep&O z==8z~GHrORSgnM6@HQ4;4*@!6xGR+fIw4vg zByI*g?ikQL90EyhXA2I80}~>FNeyv^hX5Oj9sz=0a*zN37#bo03T1_nn*yF52n7l~ d8?74{0v#Ej2(=Ip2?-Mu8X6f_CBY>j06X7qcdP&a literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/reload.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/reload.gif new file mode 100644 index 0000000000000000000000000000000000000000..8268958a19e016741fffb8309b1174e548f5ce19 GIT binary patch literal 248 zcmV51h?dP)!|<#Vc>gJ1)O z9Y&Xm98YHe08|T}nE5Daq{Qc(Rx3cM5 zjz9kQ*3j_j+pnL#{d)WH+j&{p|6ssC8=&};g^__li9rWsJjhQBZ1WCGDDaT!>RZ^( zEEK83!O|Nd>|`Z3*C*`uOEs;l0!ub)PUp?=f27@0VfU<`vGKzV%|l1oS?<>Z^@_<= zC~_&t)O6G|iMKeh$aQzhi;0Q%F-^$to;pK9LUxv-l;q?Z@dd)N%uel7=1K?)Gp=1y z$56M4m6eCxNh-frev|MX$^D9=LUJ*T=NWksPtC-3SYNk)IzaCG{5wQd4hOTmQRpBi`QrZFzZjOw5(w z;B+Ua|6ri_lZBCiL7qW}0SG{LGO*S^P_K*2tV;HB^Xpa+Tva9QCeXgnd6P%76fc9p zOamsHcy;@YDln|Vuw<0nl$s8=rCxw48uw_56lMa6}$ zEFa1XibC1A+uFH>WUA~WrMhG$PUPgWRp}FBoy96PRn(YYfNQZp@O&*5b=4JX)+#bs F0{{l~XioqD literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/save.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/save.gif new file mode 100644 index 0000000000000000000000000000000000000000..35e949963e4b7a5f04fd1c8932a980901e3d4385 GIT binary patch literal 263 zcmV+i0r>t$Nk%w1VGsZi0K^{vcEd+Ya4xgmmXXkDk(iA6{P)e~xr@?RgUwTMzeLpS z#Wqhu{H$s5p4O4v<)^3=A2^0_EulhRp%QGjIf`R%Ru$RUj;1k~O1%3=|$g0$`b{ z1p`T8E1%cF0ssJ7eF+Hu(2Z{06R}5X@39! literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/up.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/cbi/up.gif new file mode 100644 index 0000000000000000000000000000000000000000..e8234178efaea626368f6bb5fffaa716e862b596 GIT binary patch literal 130 zcmZ?wbhEHb6krfw*v!o^>1^DDBbk%W#`m8Mo^~Z-=JluvXG6M=M%Jv0O73_44+acK zK=CIFBLf3BgAPaxWCjC^e!)r4)q5>o$4-6JJxOK08WYFNxvd2&rdbFb5VArX{>gpqy}ZQ3xBIb z?{>Ooo8TtXQxO=NV3P1sT@;64^wK0*F2cjwY|!s`db?4bMa4uk*E7&^V9Dyc zWMgh=vYP%x-%#5Lzo6VH2U**iyVgo-P*q)tn%ZherM0YH!Rl3rPl$o4x=;vkIC|^| zw(QuBZoPXUD<=z2pFig03K>Y3T?fn??iKbO*bfhHFYq2bx(}&L0+H%=F_^H3a7>&! z4RaPO#Hg|3z`TVQ)bM-=^TdU&KDOJ=Ht$t+qiP=GM>G71}`5^Jb(H0!xPM{ zOsw+qbC8vlj>O~?gocO1%Ekt7@rG?s18rSR^}t|%+`N4WckbOlZb2sJ;pqyVg8#%t zOBPriIeHkkZr#AK6Nhm2+$p$uxZvKy+Z_J~YT~sW1A~LmYWOO|r5ABBMHRm(j7;-D^$<|pC8a`tf5)uos+eaaEy_4FOA8!W>Tvz&)h=PtGzKVhW(go$Ij6Ek4Y z0D5n_PI|dX)E>+gIwL151@jipDI%u%Jnv3gfl^G>NVrc#4d^TL7tE#4HoKJZr>E1T zV6Vzw9mu1 zt${s>86`@fKdIkozQe+?f{28^8zM})EplAS_Yt!|KZ$;;%cLFuHTKCnlMK4D)%383 P00000NkvXXu0mjfn6E|q literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e620b3a13f5cca1337f191465c02d38b5e0286 GIT binary patch literal 405 zcmV;G0c!qXgfdHy`b=G@5WUE}34>!TN1&;yD{=B@v35{pF6sd@);$7(esk@z{29 z=b&k7I+(gf%qyb-PB9Wg12Q3Kz>i#Hq8dQV5lT>y{D8uZ+YDwaM=3+7C{m`!keRLo z;Eo^^PvImrNy`IqkS3KTaF(5v-8Qs=d1D?^QQs- zdno3Hi-2>1bwCcN0yW?P;CsNZ2;8&RUV9BZ_0&@`Ffbs4gM;$**I&ys&pcySuU;Ji zw*rmRiS?No-Irf}`K>R!@WQe>3B_WOFbr9~d^v4xZR*fN56z8@jh)=n)3XBjbiPi` zIO?dQg2~BA`RS*hqO;FFdk4@146RwSX8hV~uhl>Q{Ik6J>Z@|fDW`)pd2Ymx<25tmS1+J;P__aIID3kAuNtyo%vIh0L~hmjuIiht{>oVU=t8d8IckQ$9GX4-i5Uq8`p@F2x|-|@RWy$V2s8l0j4@h5|nTV z88!ghrzLRCBGzOZAPN*fdUMYM<)Or(lmeA*tNQ5Up~&C^is?%hLG#Am``iMj$AB<>Tk_tZeN>Clz!Y zr-dUzMj%L9u&z-Z9zvYZ*s>DnnFE0{I31yr8pV-u!YCvO1FX?$nUGT`CuwB3I3VXc zoU{0a#<_OjA$}guYhYD-SJpv{a|ZB00U~MsSRGOs>Zj1yh}I2rBfwe&i&#xis*uFt z@6Wt3e?G1NPRE!yK;`l@HZP|#UYyhapyjB&n@?y~HL9aMgyl(s$^=n51toM?NpFfX zF_OeMQ3xJkwZzBYY~kCT!NESZ1ONhhU-hK6MM^5qlV z-QA0TC{tkPHP>7dEnT`)KK}S)nLBsxSfX$ie6)T0c3Hc2tsHmUaqj|u0%rhc)zsAd za_zO(rY3bg{q)l@@D?*A<9N8Ir$>JO{r3rA18^=-3Mk;Dj*gC<+qP|!$!vfX%#=e8 zIV9Y?d9!@=)mP)dN}vu<^0&pkP#Tm%sQ{geFDM`{f{1_!;rJ*v9w&+;thHzWtq}nir7%%QQQ&aK;JlE9yakjF z(Alr7X=x#jLu^KqH!*@nG~hknlqdQ|d-fmzis===JFK(VIA)}855}a4(qR%RN+)VW zz{VkdvV#IZK|xLoI=>)Apn{CZLTXz(sm*jz-`Yl9Yb&+Q&Do`ihUUi1xq9$|c%h`c zc6uF%w|JAr#1jnn4iKh8;xL7?CJB=Qh4PXp^HGX|z~j9mC@Pt51{w(p(Ylzr_O5IO z5#C!sg91bn|IUPr?cGIDNeRXjPcsAO5FFwRsgW__C?xsktwrU+Oa_^aQmBl|lCo;X z28O3q;DPVIc>lTs+AEpp+le)X*rahL!ih(t&_R+9i6%6niWnam;@1W10e%FW;$H~h z6bF|8moamG1il2mQ$U^?)B$Zk3sA`PaX=riQ<0wlC#dv%Ty38%Bo=6^tD}viZON)Y&0P5~{-( zLtK1pTJxqY4dhWlK|z6QNN_0f3vvknBf>A}djygsQ6B(gsD$y z6Q{$$-U;vC$Kuw_8vqEu&PN^Y8oZHDF~tpL{S8<5MbpiXxg+fI2mK2 zOim6mnT!t-PX23PVm}dvHd7E5>c#tqD2e4O=-#s{RxV!+?#0VjG3(Z?L1tDa{;%^N zBBT645`p7Y@eeVS55ONDJ$B@orj48ZZe?YOyn;N^(b8cn*Q`W~mMtKP0zkhmlBldg zR&EBLVq+7Pl;t2uMO0W=h>suNQ&B+?d-wYNw|V?b%gTKG^Z^|FyKVvZN3`#RQFAww zOH6wyHug20ICYdfyxqH?29KZJXMEz|Lc6X$J8I*78o%Ws#l?Q0sF;YosD)pLmEiE# zkiBn4Z@f!x4JPcW^QZ5q@NmE0_{O~9GDnv->xTR`aL>-xQ%`>AJm+j-!?8zRdUn|0 z2rjbk&Lg8Y+#yxJp1onwS=*)Ew*Q>lZk*U~?BUxz7G9)2i!W2(C6}q=tW(MV4%@rl zxAW%RV>aF%?bmtp|KQqAKSd+f-lRTDu2ApAm#E*;E5!dd8+Rblsp0e;)_;%e1IQTy zfOm(@hV@1tsuS94djtSA3^Qa$cQ)lvOhkBD{*#AFvsGe_I9$CHI*!i%#Z8Zt# jw$;|P%{mR>=K?+hqBApH$C)si00000NkvXXu0mjfvW!xT literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..d8792df54b1afe3286b9b8c1ca2d4bb404b5b6b1 GIT binary patch literal 399 zcmV;A0dW3_P)0Z>pUB%SGvNf`}Zp(Gfz!=yVwOyMTEC?wFqAe#*DnM@inpbc#k zIVcmxB^Qf5&j5C;I~zSspi z1Y`xSe*qmi32@iOHgfm#Ek{=E1lT$1=z&{L-`Rh2dv1AhByjDmP1xLBLwg-xboA8o zzrUmYMf?l@?DF9Lndi1g&nyN$23Yz03;rANKk8rf3+LTWH|?e$oa*;v$>o{wA7)P9 tdS}P^Z3pKqrUycQ8gPF2u^s^Ds0Tsmea{@!+>HPL002ovPDHLkV1n(dt;_%b literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/loading.gif b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..715431483265b3427e1fb8f74df570a11e5c9435 GIT binary patch literal 1786 zcmZXUdsLI>9mk)%ByVmI6GFHrBot#n64OX#lwk?TC4pdolmdpDpq4;E13@H+B?$?a zfR&p-5nW(l!{w|hN&$Z~%g9tB!2H8Qqwn78e?m(!jz&i4HKJm>j*e&_pq zp9D#~XsenDm|&R*Mn*XXo zXOYBCv@#bQe?5P0uNUD^c|uecaLe-o)rS&uYv^Sdaa0Q*%20MI>mnf>9^Kd9{kzEi z!4rvgYwytT$q{-dfAm7>`sPGkeM3psZxgF{M(T9^=k3s?mfSC?+5Wj-?~Kda20E(} zvT}HisJr3^J5#%LHIIl-mAPMOcw3)E>GD>pPVH%2-nT$U-wyLUHe2%n*s|k)X7>d? z$m}J^>@Jkhm6bBE<6Qksb(%%3nSSq7S}&t8GMUY#hxM%IVo33wMc!8L(9dyp_deOT z(+ay%2F=$v)ArWQL=Sl+LYQmK5VIETk~tO|4qP#x`M3T4>mMOEP;IUvn#`6eV|{ha zv8Lvh)`W_~l>bJsng<<_e%08(5xOQ7seTUGWjT%0ANVzgVixsuqR*`0sF%B?nD!*W z?UyBEJt3&gTn!QBVxGYL2KD3SIF*r&u4b`-dj<7_yR%a3fI+rF zJg{&Bf*Pe({{rJ|^oCs_3hUk6>tWnn&s);aF^P?s{YVSsWSNI;E>O2FH&0f)J>>X_ zf3_`H0>;Zktd6DELfB}+zH`J>3s({AVDlO}GCuGGz6gCEzwgZ8q;JR<@WZ6w_wi!G zd?w}*-n#1+iKF!3c3oL~{xL`&ZsB;zaVAGE-@ArsUA7M;)6NgB3@lcBdAzzj`PR|z zYQtX1fngH8yF;tluOY#_RM=0 zN8D+40jlpWR$@&1qXpifkF2BUApw&Nop$h55hazT9j%6C*|F_J=O@$d7v~Dq$r+XJ z{8TC)&M-glz8YC9a=2EUTL&CL_tB4{l>$9FJ%t^1sn5 z4C%?e%570*dj!QS{mlMh+pA~WP?i{{A8F&MhfYqhjdOJmVO}fRdF81^y{RW?8{;rc zE!F#(sF>2X>dXzbl~lqp-=kax7A{J`!^KH!d~nG7^hE*!=)%>iK%#Z(*VpFe^vuzt z8Y>iLC7W+&Yw6e8nr`k8xLJM(cC>QIaLlK2ySvI6cUdJ5CuQPCwo2t5fzQM(s_ZE2 z;6J*Kb2_*C9}K6YkDffw`qSy1opgorU=g*F7D>Zkt3^Q{g{={Q5cn@8DMti`a^`Q? z&U=8S9J89t5SkrKxkKF*YB>XfX(Opm80h&67(OL=b}?WR{P1p{W4{l({^#gRFYYg96bnnSK)2shuMFKyudSlG1c>~SVI;74b(f`tz!cOnAULT7 z#-wl`(_>E?C-bvUhBD%N_K)BA8%f9{lYei}FP=zfGi~q%BgZRJwWl z?)0fs0QkOt{N(Ym{3huu((X`D`dajA?&Fx=bG{MK5p-+hMYqL}bM}DdWqyHXCE^w9<&7 z?XKtMvO%}Y^SQ9&x%o_R>e{4_yiBtL;LHgx(>pb{%s~K(vx!BBDaE2w=|aSpd3Nb^JD@j+yipOgeimV!19i zn-8(NgJb7<}BxUtji%NWy-e@); zf2PUOx0>wx`q!U9yCdz|{##4m@3T4w{+d1mA)xGcVF)?q00000NkvXXu0mjfT&#A= literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png new file mode 100644 index 0000000000000000000000000000000000000000..8105e77d0878e1bd4a4f4953365ca1cab3a80ab5 GIT binary patch literal 1151 zcmV-_1c3XAP)SZE8N{(H@L3ZuW(pBwz#`XdY;Sp#FL4>q`mmNa~e(rhZ`&X za{HFBO`A5M|3?fyXPtd!TRZ>5x+VTc{qMi`A+tL=PbQdv5a#Vr_%aNggZ{uZ{~a>M zm{P(q6iIWt^=%DMRi)KW6S|E{2r!As;QY%kJ{RZ37IO}Vb8c>KWO!5%9MGldnmvFw zxkk;?C=*PsB}G;DEbO`c);kEH1U{4kqFgEGH*(8MOMoUAg9Az&imK>_(H2OPUo!-$ zUVrz!cazD4rfK)x^8lDq6s1@yW-^I#rP9c1+xBhncDr4N9CYZxha3v_b-8Z)Zgb7e zIn3kodfmS1$=NF|y9zvJvnjwya$S-nRn=ga+vPrB|AWssb#85aC6!8i^zp}o!@~pp z0gQ=Z8Sk96u4}nmZed|za&j`8%@TqQ&KaXjW7HIjga>D5_7#{APpmC1FUYbCv&!X4 zU;xmzXWl?Jvn%D&)@@sLUC-oFP#qr|kAx#Y1gg{F8XXz$>+Og3WGW8aTt4gb`k+dw z89BGq*)>?mW%Cnb6EMf+ad895s$8j=;S$Dbb)#4=RcmE}@ao!XCYy%#28$7f0B*6` z_chWqRgsl?U5Z3Qflxrz)oRs*YPyOnb^C~JD7u0m&{R5!KsFj%wmD?iy7{cS4l;Ce z95FL>2u?9JpU>wNRgV|BZr}r^2ah^rx?uv@G8(P{jj+wNALZAQZV3v+V#D`aZ@%@} zS3l;}UWN@~$Xu5mdi0SC&N@m_D6-Xvo)U14xzUz&i@-8uhY9wFX4SAi>fmms`CMdW zEwN*{=yJNTeeQ#Sa9?kqb;``6YapWqZRceP3IdQRef^U?AFuV#>=*3yQooP>7~3T= z&Ee?+bmO^UBL@RPfLU&YhHD#Z1!5OD6Bt#gnGDCzy!_oKvG{PHYkV}|^Lak`c2}JS z2BO|G4+}GpzzVLHR z=F`LdQxoBMy7Zm63{lP0Ebk*SyYI4=)wFQzl z{fdf;riKR~2a_9Hf+5$QIeu_h5k(O-YiJ}wE!i~QLj4W>$P1#T1X=l3%jX%go|` za_rc?@dpp@T^jA!v7>u){6~8C8L*(Hsy;DwHH}HDHZA71#DBz5axRCZMT-`&{IP*m z{I>GD_pf_MMD*7KRoD#jirdl71f0Z`o)1Eg9ojxuB=PUpaFv`MM4TZy^r--Owi8*!Dkh8?+;e{Y#DR&KQa&`fe)B_nM+cKT zf^wi3&=vI~OY;vY`SeW+^ZZ>3QXmP&?fi-iO`_t!$IK~ng87sQ9`LaN$#77C!UhH7Uo&zwJb-|X4H z>&e**r|ezWdvMpC_&#^>)V(b`H_iq^IsxeXpE?4-XJUD)9OopkBLDyZ07*qoM6N<$ Ef`h@~g#Z8m literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png new file mode 100644 index 0000000000000000000000000000000000000000..333b1557ba5d9b5df28ec13542337b338eec48fb GIT binary patch literal 439 zcmV;o0Z9IdP)VB?C7)^Q+7`6roe)<)}%aT%9QkNX%H1Fm4E;F zv4n&a+7?8`p~2Ck1O3B^1@jlJqoWi=AZ;hWS^Haj?1^pPg8zCde5ZIon;t2Cgq6$TK*3AK+y z|2LBXD-j_aDwG)nDsCZ9Shjr4?*87Pqk;55zWw+%+rmo3SO{nX$iPPZLcT_0H2$l< z5>fh}konY6wqpVynG|w?HktuRXdRlx6@y$v0W-`SBmy8GqSA(?Kp7>>su`CjkjOae zY7OMl)$`XLKfC|>(bM~H9zTEZ_Uxt8pJI+&x_aT`<7W?2j$FQe;bqBBoiqHT h<@V+U=6A{5fOuw`u$Hg{&b9ym002ovPDHLkV1i~b$#MVy literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png new file mode 100644 index 0000000000000000000000000000000000000000..b465de3f575fdf90a7919b23b77a1dd10da9cd29 GIT binary patch literal 465 zcmV;?0WSWDP)s)cFn?^oilHvOefO%C znIib>1z2&^$g$Cg;iD<4R<%ZJb3*_q{yITLpsHX@)y)h{iTq)|YA|~3xjAFjURpsn zAC>Q}rU)d*3k0xVT%cFm1{=l>Y7zZ3^aHoO!rA zV=f3280CZsYp(WZ-5^fWlA;DubywC6+>K2Fa6*^1wHJ*U*gB%=L)u5rUVf-3>Yy~I zCOIvrfb|2W}>*Zo>UOtNxxEMldqVPA5yXW35rwWi5@0o!WlU$Sg`@5 zs^Er_as2fHA5v}u#JnKJ3B_h|@gEyt+^W-urmeqmciQ^v_hxOpaew&oGf()LCapdD z`23|a_s(5B{mK5rdv1r%7cQTz$u^5N&ZZ}00000NkvXX Hu0mjfM=so5 literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png new file mode 100644 index 0000000000000000000000000000000000000000..cd7bcaf9a6da38490231f92e4045cfc1a2c96a4d GIT binary patch literal 467 zcmV;^0WAKBP)}w+VA|N6-#pf^H==)aw1TZRQM6G74 z^x)BprvT7u^-8@wJ=G8l#0RR?>i!K`M#d_y35ah1;r~zo&5yoh9~{uUK_mbG002ov JPDHLkV1k;>+e!cc literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a3658df8d05f8fa037d84cf8e920308980ff0e GIT binary patch literal 457 zcmV;)0XF`LP)i&y2E2m%z1ujWC~8`U6E(u`Fsh0%BnP z1;NFKFK-#Bt=B#?9YT_j7g@k{f#f$4j_%m@c;mX28?`?&HoJhtfuJH5=HNgjekSPT z#M7?Q3uPrszI8wZp$6(k9sKw>3TqQpRS>dh->Zrk4rKls_wQKSvvJ+3>pED{tigv* zU*=b@UI_~8)I$X1SOZUxl|&QsWmmmTfD#XATPcA+j1X$z2y%C^J%MOF*n6qaIdj8IyS|#sT~3kQ%j6VJ88XdU~E`7rD<6& zZ8hu<-`+qP}nXZvp5?Pb?D^ZfSPzX<+=ZQIs0=TbMr zC-QRmatHrG*>aVpmMdGK4**z}g+2Rrvc`J?$~wy7ru{l!D>qs~7P~D;S6-0Oa3OkU~I834@YSf0hvts9!~}e$)C9 z7EuuZptP~1o91fPxEhz z;*@e_%lG{}9Oo{a%@k4~?b>w+LJ-iRDNG$wcJG7ljobcK+mBK;gj{l!i7D zc-N@~n^N+A_5!#UuR<0?LOQg|G~(i}g+Wso)NS8fOn4r;A62(buBOiFUYL&F#Vq^G31 z!Dr62XPk)A0#^00F-{CiwYP-B6*z1ap}CPw)Kz Z-~-xuDw_#&s%ZcK002ovPDHLkV1j6fDJB2_ literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/switch.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/switch.png new file mode 100644 index 0000000000000000000000000000000000000000..be99b19badcd389e58cad6e04d067890a58943d8 GIT binary patch literal 680 zcmV;Z0$2TsP)lj+qP|YS0=WfgCF%C7XB6|J~7(z@#DwC0kHTJ zo40JDzrh6vM~)pKXLmOY7&-)V=g$QT2GeKFK)=C*;qK*$6Q_>9Zt!Izm>>YQZreN$WHc=56sz~O({2;Y~%XIU1C@?zM!EnPU|;opD$#cLxZ1$gn|8D73* zASp2t8~|JSuNyA7Ts{B>V`Zwr*}8Qzb?em)ty;Fi-Me?NaN#1neDM-Q1YJEHv~Jx7 z49fsS;BvSC2m}ro<|X(%KKMtE9}xyD4jwwdh>J?_Y^`na2UmvnEOP$CMP*GJSKkv4O4bxFI+f5 zOP4Jo1!Z|p{0tG{H5vEXRWX7+lsIu8UA%CX6qV&?;U}cLCgTl_uvsT#1-od3QPOlh zb&(i3IZD?^Mkr}ov1_5*mGAvD%$LT7{6`Fb)wQ{*A!nzIJz zFv?J-pI&P1AcK^wfx7YG9YpMP0knL#tq;UJCUq0{nACr`T|=u+7w`(`j$~?zc=-ST O0000xV zN&JuNb{n-C0>J26Gy2V*IcF3A6T6-JzV<4W04BGcHf__6Lmv(s2h}5&&u*VL z8srh%Ttj{TZdhBpN3|BDAVm89eGzZt^|#OHmO%+-z{2gvz8re9>-qYV<2DQ#Po3<` sdatcDr6y$ETn-6={HN7|8A8^HX`u0bX&RxdKL7v#07*qoM6N<$f`KlvegFUf literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png new file mode 100644 index 0000000000000000000000000000000000000000..63eabfef5901b6cfc80a4fabfce7aad6d24f8174 GIT binary patch literal 343 zcmV-d0jU0oP)gwjjB8mkP8rPB1zJ>Iz9b|Ry zBB^y#EbtB00#Wtrh;QCTUR4*2@*)%nDp^KI-4@L7qR4?MUX;3-;-#{(W=_7JoR_fL zbp#YG!jd&D7AUVQO&MuCj#7jieE???mfr_e9Z0~L`8Ec!%e9dvd z0@laWS5Sh;i~3=lP3G|B1Avgxt(PoL4ZuN(m#_DPFYX_2K|ka8TY~HSyx|d{uS&eE ptS|7z`nP^?xWjd!H~}3-&pYTsqv2#^;dcN4002ovPDHLkV1jqApAP^4 literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..ca79d81707c1a9476ce729e4cb88b3aa32ef0cc7 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6HhH=@hE&9r_HX1pWFX)gYrwiF z!GufeR!NA?0lqC41kCMN8x@k;R6HCU*>xu9@heOADLl8Id#7gZeM!O7_DXKanHkFu zPO9cR9net8y`ks#WXC?S6E`+~&v8EZV++?IHpMhyF3r9jy;cI-FKWNoAh_I~O9 zY<`n>*Dt@5yjxEeEV<7+N7FK}%#x#VowiBV;tu2E+>5hLO}KYm?M(Bcvd)u<-{u_+ j&Rz8(PO#35!!WKUd)o0e{wc9Q*E4v!`njxgN@xNAZp&FF literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png new file mode 100644 index 0000000000000000000000000000000000000000..be99b19badcd389e58cad6e04d067890a58943d8 GIT binary patch literal 680 zcmV;Z0$2TsP)lj+qP|YS0=WfgCF%C7XB6|J~7(z@#DwC0kHTJ zo40JDzrh6vM~)pKXLmOY7&-)V=g$QT2GeKFK)=C*;qK*$6Q_>9Zt!Izm>>YQZreN$WHc=56sz~O({2;Y~%XIU1C@?zM!EnPU|;opD$#cLxZ1$gn|8D73* zASp2t8~|JSuNyA7Ts{B>V`Zwr*}8Qzb?em)ty;Fi-Me?NaN#1neDM-Q1YJEHv~Jx7 z49fsS;BvSC2m}ro<|X(%KKMtE9}xyD4jwwdh>J?_Y^`na2UmvnEOP$CMP*GJSKkv4O4bxFI+f5 zOP4Jo1!Z|p{0tG{H5vEXRWX7+lsIu8UA%CX6qV&?;U}cLCgTl_uvsT#1-od3QPOlh zb&(i3IZD?^Mkr}ov1_5*mGAvD%$LT7{6`Fb)wQ{*A!nzIJz zFv?J-pI&P1AcK^wfx7YG9YpMP0knL#tq;UJCUq0{nACr`T|=u+7w`(`j$~?zc=-ST O0000xV zN&JuNb{n-C0>J26Gy2V*IcF3A6T6-JzV<4W04BGcHf__6Lmv(s2h}5&&u*VL z8srh%Ttj{TZdhBpN3|BDAVm89eGzZt^|#OHmO%+-z{2gvz8re9>-qYV<2DQ#Po3<` sdatcDr6y$ETn-6={HN7|8A8^HX`u0bX&RxdKL7v#07*qoM6N<$f`KlvegFUf literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png new file mode 100644 index 0000000000000000000000000000000000000000..80a23e8e9a740f8f69e1ad82f3bcdede9f05953b GIT binary patch literal 767 zcmVRjrQ2KZQGt{_t>^=+q1U!ukG4oe3Hto)cL*!S;#?C?#6}P zJQaRam(=}b5Zbl@2Y0-!Wfu-AyxsU-Hm&~Ujzj)6ljyF~dWoGZ{rF~G9Nh7S9Wsl~ zLJld%pTzf~dA5U@u#>J4QlFp~)l_N}*U^ZBJKnHEX1PQ5$ny_u(dGX4z&@YFbS-z& z32Vtz45*ni;`Ytb^jzOE4BX!uaeHU+h8;4i5GmMW80(QtCOBS+Afln|ymBjz=RTIrc z@KWX~DodfbyquaE>xWpL2-H0!<4uiK5W!8JLk8I;7iCU3!CYY~?H?H(f{xC1$~Vv- zIJPnKH$5AxZ#Y&os91PYQo>37AcWw5+#;QQ(m5cV{kY$!-?NB{2?u8v xhqe{6tDEC@WNq*!Bc1PMWbj!TH+QFR&R6-E(9NL9xs?C_002ovPDHLkV1lfHa5w+} literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png new file mode 100644 index 0000000000000000000000000000000000000000..9e466aebf41d819f6bfbf5dd70c5b193fb2a7295 GIT binary patch literal 2276 zcmZuzdpHve7sqlNBbN|!soZjJxvXiv$el9Rj4-!kHuEAhZM`Zgxvbn0D@+q6cZ!&j zOGJs>2~(NIu#wcutM7fjo}Taf&hwme{`)=Wch2ve=iEe`wgCa3)3x3e^Ni{pKt&5!WL$#m2%?^-hk8?(5)Y>(7b>OiyoXbG7~Gu1gZ z)lJPJN>*V{1j`caNzEUSvrazNU-O=}Gl-vm^b=qbaC&E?Ed57d+D@UZrLt@bMuL#f zSQwe9 zZSbSRYeG|jN@*{S;76|tc*P|_+V&{yuLRF1w~kSEK9N_~3p3L9`GMP*4@E;4N z1Rpb@b{|!&mA>@KVpWe5Ae}bQu4MT31%UllTi6)lo1NO{mv)vOGKn%A=qjq+`%F>(99P1SVjTc_>fv-om)yX^2EgyMWiTg6eP$f#XaW{ajd$Xpc5n}X25!I zarQFDY|8;x`|V5IpVaW<_Zm?XAB$0BE4AS)Wo`=Ht=9TN$Kg*)eJ<0>(qSB*`{qEe zmY99I-qo4I{M|zT#k3m?o~iVu8a|`2?6xcD2>2g0(dm5-KE=R3ot_M#h9CTs%7)#rFSs*#U+ z=KUOnrL0;LMRwL&!*`eI@k2+lH+22#^S8c#7cOs}u&M_&3ja@SYe3-j6%y*jUUFcc z+^dAN6O;?|A%ycmM#cKz!L)Tjg$g)JbV~ASFlwwPcxVG@ zuHofpP@uBZ5gdoS7eC6(34eMpIHawgdZClb0JN5>g(sre8M!ooZ?b0cxRTXJ_n4aO zthd=%@1KB-ytDI3g1!cAd{USo6_H$JBH&rnTDCQLxC{t$q^Y-*Jt zsBWcAM8FeuB~>)&0HR@l+6DMEdjWj}B-9|)*p3NF`wY7xERMU;jV2Cwm!pq%c zzjxV-A_y246KX{jX0-P7fz)c&m?2g%ydt73~O5o~tC`;=ugHXVrI7T!1%*oQqc> z8$!Q>Ny6#dO~jmlXq4{}sie7hC5*x6)C_RMn<;!x-!wMIvg){d2{nWB_?EGTa?#kD zqdX(5XrPtv6bM2Zp&GJo!_-m>5`T@sfqQ3tb=C}-lOKx;D7yP@U-!f2N;$wyC$ zNib9LTT)W!uhtcfRLuI0g;IXRnta!gU2~!6dZQ!33`zbo!R~7H4GoAow1#dn?C4%; zdXAwN9EtIWY@QmLd}mq8d^I#VX}fzI|1Fb-1?+GYsQHcP2hzyXb6tsnkv>dwIBxUJ z7zaOIUSzw8Lpw8(`OgviHM=B>#7RIDp^L*&6{N8%Hwe!@k^ z@r=C2a73Uhz_eXet5WAA&->wNYBW}>Lrs0KvyMUDgclebvv*tEQ-*tVDDLNi4}7Ps zCa9NA2W>i`d_eto6DnPS3PJHj=Tr`^+t$8B=?6R*wK&Fpa!`u)xv>nS2d})EJ;Q&J z+Zq;s$?+7(bg*H=L#tAgl4&RdmOXXA`5uwI@LEv2;lU%MbQBdW7W-o(rRorf0*E!W z!E`U)bnh5kx|c@_myl!cdpvNyRf7c?aQ*69R@!1U1)mxk8L@%0aIR5Oxw_|I#5FnL zW{6#GK_N+ePJpjHpqU_@r)Sw^-S8!4KbOmtYIq~%$-a{s%N?w)zFh%g@wOvpXsh?b z)|t_)mlBY?Tf%3k<>eV?^<)Lw*?ed;TD82-qRR=amVqkxVp6tpoaD0qJ#g9k;i1XF zLCzcGv0U!vt3b#K40ucEqCwR1>%i9S>C{61WSb+^w*h~Yd5T(_#&kL-nPrJ7o7yIJ ze2cSw)IN4vT-mG*TVRu}?CjBSf=DFNFHamWt4K*-LWhP@7ZtLKQ_>6B1a`bIjh^VP zS}rHO$a%1HiS;_yRey79%kVl*v>gRl#TdlJsA{ghMj#W(_ww>qKC%U~WF6}fcbC|`SfYQJ>-_e_&d2(& xku*L*e)UmY&*gGKE`9x5q0#8|PdlN1iO81h2~bp%`T4`}*jb&nd~AWb@;B83P-p-E literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..6f9fff3813e2e051a7429f042ebf8c23d7b42378 GIT binary patch literal 1512 zcmVP)kdg000HANkl%|aRV$s=WH#g7$s%iA``+cVZ5=$@wr$(C?YFiywrA35Rn^PMTF3X-#`m3H zH3;W;tya~(6;CLfV;lXAz;Xms732nW+l4CydYYNb-k+h4hB{ld3A=snZ2bLfftK=a zvUy4Y0h!WOxA=zAMNjrx2~4O$((h~y|5&f!sI$pW!;cG~K+g#%CzxrZCO0%g8ba4~ zL(4S9NBNY!);twg@i(UD@EbBMr#rHkwu&~@Dr=Lf?WL`14uC27rVTEq2nW71q&+=chG3&|Drw zl!Zos5e={c>idm;)X3VMimb&a%ka1kJ1HD}+-xaD(6#bM`UDS=n$ z@xzMhzz74R+ms9#c|C6Tgz0I1WvN35sQKjM-?;E=?DMQ#I{A2NM&M9ospgxWC*tyf7UI1CmZD8lnldMwa+5HbG26mI#uX1;#B~EXG0`kZGOKT@Q*rQO|5Rzt3G>U1 z4Y(=0DcgYMMwp*-rb@+r)Phr;R-a^&YN?5OLDE-g7fjINo=R(M6X~Mm`04dw=~gGb-RM1vy4$q@B7p_sbLNLAL<@fK7NsYA{C zT8H)1cngXhDnr^;j;VA=C|z}}7JDxI&ig0V-b7J8`L97pQXvb%)ut+4P+a0~$=34>sQ`>3{KLmuR$C++#n4 zIDU$Dw6O7C=8wvxietBD|Nh2t;F1Dh-{AUSk)Uk$-iDVw&HDD- zw)LMog-g(I8H+aEXN{wRFJYGAKdW672`4cVW6n+W6-lpkuQj>}r-17ie8LQdo)q+< z875*(%3(Ro$K#RVnd8yk>~D=Ln&0*`=lfGrEiZ|$Wk8_H3m)b6;zuwlj%>4=d4YAp zv~rzM=j5ibmkb&s)P?)p?>!$Mhq~H;Jtx1p|FQ0O!V@1o{MYv7UfElxmu0gayP_pu zSfi;;~d>% zZ?OAbjQ3q-@HWq$eh$7ZhClkAw?l!Sn^=7!5Li*WXVJP>`kNlje}v3??d%l>_LB6= zpPyFL^&Z3^WcAQF>bh!F{^X3et^DS10lr?w?h6Lj;#{0AEr7!P!T$mN&5K^5InvMo O0000ABo4#s3j+s?ntq}eo0cF9c^Zo0%oo$PkVPH#^MSR{H+VTPPnk0{#U)|srwX;)H35X4p3;r3=}AkO>7wGLvL9WPGSib5T{EQ{dK%z>rS0#6 z!u1F4mVyZ$OG-i;jPSr-q4&G6w2eLfz9UwV9`7jgapCkex<@Z5(qqKR-xvS518@`Z z2p*icMbqD2(%{qN>;)Q}@CbGj*}HJXKQHM%)&2+zk2@ZFHu2UQ0st@kM*zk<9?~Mc zqZf3Srk_qW-J;13paKUZ-cjrb%+LD;R3?q|yuV0S=p{k?@aL2dzCWP~4q_08IC$Wk kL*Lu{GVCeDQHlWk0fb(%J{%wa-T(jq07*qoM6N<$f_$*)IsgCw literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-base/htdocs/luci-static/resources/xhr.js b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/xhr.js new file mode 100644 index 0000000..701c12a --- /dev/null +++ b/feeds/luci/modules/luci-base/htdocs/luci-static/resources/xhr.js @@ -0,0 +1,241 @@ +/* + * xhr.js - XMLHttpRequest helper class + * (c) 2008-2010 Jo-Philipp Wich + */ + +XHR = function() +{ + this.reinit = function() + { + if (window.XMLHttpRequest) { + this._xmlHttp = new XMLHttpRequest(); + } + else if (window.ActiveXObject) { + this._xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); + } + else { + alert("xhr.js: XMLHttpRequest is not supported by this browser!"); + } + } + + this.busy = function() { + if (!this._xmlHttp) + return false; + + switch (this._xmlHttp.readyState) + { + case 1: + case 2: + case 3: + return true; + + default: + return false; + } + } + + this.abort = function() { + if (this.busy()) + this._xmlHttp.abort(); + } + + this.get = function(url,data,callback) + { + this.reinit(); + + var xhr = this._xmlHttp; + var code = this._encode(data); + + url = location.protocol + '//' + location.host + url; + + if (code) + if (url.substr(url.length-1,1) == '&') + url += code; + else + url += '?' + code; + + xhr.open('GET', url, true); + + xhr.onreadystatechange = function() + { + if (xhr.readyState == 4) { + var json = null; + if (xhr.getResponseHeader("Content-Type") == "application/json") { + try { + json = eval('(' + xhr.responseText + ')'); + } + catch(e) { + json = null; + } + } + + callback(xhr, json); + } + } + + xhr.send(null); + } + + this.post = function(url,data,callback) + { + this.reinit(); + + var xhr = this._xmlHttp; + var code = this._encode(data); + + xhr.onreadystatechange = function() + { + if (xhr.readyState == 4) + callback(xhr); + } + + xhr.open('POST', url, true); + xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Content-length', code.length); + xhr.setRequestHeader('Connection', 'close'); + xhr.send(code); + } + + this.cancel = function() + { + this._xmlHttp.onreadystatechange = function(){}; + this._xmlHttp.abort(); + } + + this.send_form = function(form,callback,extra_values) + { + var code = ''; + + for (var i = 0; i < form.elements.length; i++) + { + var e = form.elements[i]; + + if (e.options) + { + code += (code ? '&' : '') + + form.elements[i].name + '=' + encodeURIComponent( + e.options[e.selectedIndex].value + ); + } + else if (e.length) + { + for (var j = 0; j < e.length; j++) + if (e[j].name) { + code += (code ? '&' : '') + + e[j].name + '=' + encodeURIComponent(e[j].value); + } + } + else + { + code += (code ? '&' : '') + + e.name + '=' + encodeURIComponent(e.value); + } + } + + if (typeof extra_values == 'object') + for (var key in extra_values) + code += (code ? '&' : '') + + key + '=' + encodeURIComponent(extra_values[key]); + + return( + (form.method == 'get') + ? this.get(form.getAttribute('action'), code, callback) + : this.post(form.getAttribute('action'), code, callback) + ); + } + + this._encode = function(obj) + { + obj = obj ? obj : { }; + obj['_'] = Math.random(); + + if (typeof obj == 'object') + { + var code = ''; + var self = this; + + for (var k in obj) + code += (code ? '&' : '') + + k + '=' + encodeURIComponent(obj[k]); + + return code; + } + + return obj; + } +} + +XHR.get = function(url, data, callback) +{ + (new XHR()).get(url, data, callback); +} + +XHR.poll = function(interval, url, data, callback) +{ + if (isNaN(interval) || interval < 1) + interval = 5; + + if (!XHR._q) + { + XHR._t = 0; + XHR._q = [ ]; + XHR._r = function() { + for (var i = 0, e = XHR._q[0]; i < XHR._q.length; e = XHR._q[++i]) + { + if (!(XHR._t % e.interval) && !e.xhr.busy()) + e.xhr.get(e.url, e.data, e.callback); + } + + XHR._t++; + }; + } + + XHR._q.push({ + interval: interval, + callback: callback, + url: url, + data: data, + xhr: new XHR() + }); + + XHR.run(); +} + +XHR.halt = function() +{ + if (XHR._i) + { + /* show & set poll indicator */ + try { + document.getElementById('xhr_poll_status').style.display = ''; + document.getElementById('xhr_poll_status_on').style.display = 'none'; + document.getElementById('xhr_poll_status_off').style.display = ''; + } catch(e) { } + + window.clearInterval(XHR._i); + XHR._i = null; + } +} + +XHR.run = function() +{ + if (XHR._r && !XHR._i) + { + /* show & set poll indicator */ + try { + document.getElementById('xhr_poll_status').style.display = ''; + document.getElementById('xhr_poll_status_on').style.display = ''; + document.getElementById('xhr_poll_status_off').style.display = 'none'; + } catch(e) { } + + /* kick first round manually to prevent one second lag when setting up + * the poll interval */ + XHR._r(); + XHR._i = window.setInterval(XHR._r, 1000); + } +} + +XHR.running = function() +{ + return !!(XHR._r && XHR._i); +} diff --git a/feeds/luci/modules/luci-base/luasrc/cacheloader.lua b/feeds/luci/modules/luci-base/luasrc/cacheloader.lua new file mode 100644 index 0000000..11e5f69 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/cacheloader.lua @@ -0,0 +1,12 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local config = require "luci.config" +local ccache = require "luci.ccache" + +module "luci.cacheloader" + +if config.ccache and config.ccache.enable == "1" then + ccache.cache_ondemand() +end \ No newline at end of file diff --git a/feeds/luci/modules/luci-base/luasrc/cbi.lua b/feeds/luci/modules/luci-base/luasrc/cbi.lua new file mode 100644 index 0000000..2184395 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/cbi.lua @@ -0,0 +1,1942 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +module("luci.cbi", package.seeall) + +require("luci.template") +local util = require("luci.util") +require("luci.http") + + +--local event = require "luci.sys.event" +local fs = require("nixio.fs") +local uci = require("luci.model.uci") +local datatypes = require("luci.cbi.datatypes") +local dispatcher = require("luci.dispatcher") +local class = util.class +local instanceof = util.instanceof + +FORM_NODATA = 0 +FORM_PROCEED = 0 +FORM_VALID = 1 +FORM_DONE = 1 +FORM_INVALID = -1 +FORM_CHANGED = 2 +FORM_SKIP = 4 + +AUTO = true + +CREATE_PREFIX = "cbi.cts." +REMOVE_PREFIX = "cbi.rts." +RESORT_PREFIX = "cbi.sts." +FEXIST_PREFIX = "cbi.cbe." + +-- Loads a CBI map from given file, creating an environment and returns it +function load(cbimap, ...) + local fs = require "nixio.fs" + local i18n = require "luci.i18n" + require("luci.config") + require("luci.util") + + local upldir = "/etc/luci-uploads/" + local cbidir = luci.util.libpath() .. "/model/cbi/" + local func, err + + if fs.access(cbidir..cbimap..".lua") then + func, err = loadfile(cbidir..cbimap..".lua") + elseif fs.access(cbimap) then + func, err = loadfile(cbimap) + else + func, err = nil, "Model '" .. cbimap .. "' not found!" + end + + assert(func, err) + + local env = { + translate=i18n.translate, + translatef=i18n.translatef, + arg={...} + } + + setfenv(func, setmetatable(env, {__index = + function(tbl, key) + return rawget(tbl, key) or _M[key] or _G[key] + end})) + + local maps = { func() } + local uploads = { } + local has_upload = false + + for i, map in ipairs(maps) do + if not instanceof(map, Node) then + error("CBI map returns no valid map object!") + return nil + else + map:prepare() + if map.upload_fields then + has_upload = true + for _, field in ipairs(map.upload_fields) do + uploads[ + field.config .. '.' .. + (field.section.sectiontype or '1') .. '.' .. + field.option + ] = true + end + end + end + end + + if has_upload then + local uci = luci.model.uci.cursor() + local prm = luci.http.context.request.message.params + local fd, cbid + + luci.http.setfilehandler( + function( field, chunk, eof ) + if not field then return end + if field.name and not cbid then + local c, s, o = field.name:gmatch( + "cbid%.([^%.]+)%.([^%.]+)%.([^%.]+)" + )() + + if c and s and o then + local t = uci:get( c, s ) or s + if uploads[c.."."..t.."."..o] then + local path = upldir .. field.name + fd = io.open(path, "w") + if fd then + cbid = field.name + prm[cbid] = path + end + end + end + end + + if field.name == cbid and fd then + fd:write(chunk) + end + + if eof and fd then + fd:close() + fd = nil + cbid = nil + end + end + ) + end + + return maps +end + +-- +-- Compile a datatype specification into a parse tree for evaluation later on +-- +local cdt_cache = { } + +function compile_datatype(code) + local i + local pos = 0 + local esc = false + local depth = 0 + local stack = { } + + for i = 1, #code+1 do + local byte = code:byte(i) or 44 + if esc then + esc = false + elseif byte == 92 then + esc = true + elseif byte == 40 or byte == 44 then + if depth <= 0 then + if pos < i then + local label = code:sub(pos, i-1) + :gsub("\\(.)", "%1") + :gsub("^%s+", "") + :gsub("%s+$", "") + + if #label > 0 and tonumber(label) then + stack[#stack+1] = tonumber(label) + elseif label:match("^'.*'$") or label:match('^".*"$') then + stack[#stack+1] = label:gsub("[\"'](.*)[\"']", "%1") + elseif type(datatypes[label]) == "function" then + stack[#stack+1] = datatypes[label] + stack[#stack+1] = { } + else + error("Datatype error, bad token %q" % label) + end + end + pos = i + 1 + end + depth = depth + (byte == 40 and 1 or 0) + elseif byte == 41 then + depth = depth - 1 + if depth <= 0 then + if type(stack[#stack-1]) ~= "function" then + error("Datatype error, argument list follows non-function") + end + stack[#stack] = compile_datatype(code:sub(pos, i-1)) + pos = i + 1 + end + end + end + + return stack +end + +function verify_datatype(dt, value) + if dt and #dt > 0 then + if not cdt_cache[dt] then + local c = compile_datatype(dt) + if c and type(c[1]) == "function" then + cdt_cache[dt] = c + else + error("Datatype error, not a function expression") + end + end + if cdt_cache[dt] then + return cdt_cache[dt][1](value, unpack(cdt_cache[dt][2])) + end + end + return true +end + + +-- Node pseudo abstract class +Node = class() + +function Node.__init__(self, title, description) + self.children = {} + self.title = title or "" + self.description = description or "" + self.template = "cbi/node" +end + +-- hook helper +function Node._run_hook(self, hook) + if type(self[hook]) == "function" then + return self[hook](self) + end +end + +function Node._run_hooks(self, ...) + local f + local r = false + for _, f in ipairs(arg) do + if type(self[f]) == "function" then + self[f](self) + r = true + end + end + return r +end + +-- Prepare nodes +function Node.prepare(self, ...) + for k, child in ipairs(self.children) do + child:prepare(...) + end +end + +-- Append child nodes +function Node.append(self, obj) + table.insert(self.children, obj) +end + +-- Parse this node and its children +function Node.parse(self, ...) + for k, child in ipairs(self.children) do + child:parse(...) + end +end + +-- Render this node +function Node.render(self, scope) + scope = scope or {} + scope.self = self + + luci.template.render(self.template, scope) +end + +-- Render the children +function Node.render_children(self, ...) + local k, node + for k, node in ipairs(self.children) do + node.last_child = (k == #self.children) + node.index = k + node:render(...) + end +end + + +--[[ +A simple template element +]]-- +Template = class(Node) + +function Template.__init__(self, template) + Node.__init__(self) + self.template = template +end + +function Template.render(self) + luci.template.render(self.template, {self=self}) +end + +function Template.parse(self, readinput) + self.readinput = (readinput ~= false) + return Map.formvalue(self, "cbi.submit") and FORM_DONE or FORM_NODATA +end + + +--[[ +Map - A map describing a configuration file +]]-- +Map = class(Node) + +function Map.__init__(self, config, ...) + Node.__init__(self, ...) + + self.config = config + self.parsechain = {self.config} + self.template = "cbi/map" + self.apply_on_parse = nil + self.readinput = true + self.proceed = false + self.flow = {} + + self.uci = uci.cursor() + self.save = true + + self.changed = false + + local path = "%s/%s" %{ self.uci:get_confdir(), self.config } + if fs.stat(path, "type") ~= "reg" then + fs.writefile(path, "") + end + + local ok, err = self.uci:load(self.config) + if not ok then + local url = dispatcher.build_url(unpack(dispatcher.context.request)) + local source = self:formvalue("cbi.source") + if type(source) == "string" then + fs.writefile(path, source:gsub("\r\n", "\n")) + ok, err = self.uci:load(self.config) + if ok then + luci.http.redirect(url) + end + end + self.save = false + end + + if not ok then + self.template = "cbi/error" + self.error = err + self.source = fs.readfile(path) or "" + self.pageaction = false + end +end + +function Map.formvalue(self, key) + return self.readinput and luci.http.formvalue(key) or nil +end + +function Map.formvaluetable(self, key) + return self.readinput and luci.http.formvaluetable(key) or {} +end + +function Map.get_scheme(self, sectiontype, option) + if not option then + return self.scheme and self.scheme.sections[sectiontype] + else + return self.scheme and self.scheme.variables[sectiontype] + and self.scheme.variables[sectiontype][option] + end +end + +function Map.submitstate(self) + return self:formvalue("cbi.submit") +end + +-- Chain foreign config +function Map.chain(self, config) + table.insert(self.parsechain, config) +end + +function Map.state_handler(self, state) + return state +end + +-- Use optimized UCI writing +function Map.parse(self, readinput, ...) + if self:formvalue("cbi.skip") then + self.state = FORM_SKIP + elseif not self.save then + self.state = FORM_INVALID + elseif not self:submitstate() then + self.state = FORM_NODATA + end + + -- Back out early to prevent unauthorized changes on the subsequent parse + if self.state ~= nil then + return self:state_handler(self.state) + end + + self.readinput = (readinput ~= false) + self:_run_hooks("on_parse") + + Node.parse(self, ...) + + if self.save then + self:_run_hooks("on_save", "on_before_save") + for i, config in ipairs(self.parsechain) do + self.uci:save(config) + end + self:_run_hooks("on_after_save") + if (not self.proceed and self.flow.autoapply) or luci.http.formvalue("cbi.apply") then + self:_run_hooks("on_before_commit") + for i, config in ipairs(self.parsechain) do + self.uci:commit(config) + + -- Refresh data because commit changes section names + self.uci:load(config) + end + self:_run_hooks("on_commit", "on_after_commit", "on_before_apply") + if self.apply_on_parse then + self.uci:apply(self.parsechain) + self:_run_hooks("on_apply", "on_after_apply") + else + -- This is evaluated by the dispatcher and delegated to the + -- template which in turn fires XHR to perform the actual + -- apply actions. + self.apply_needed = true + end + + -- Reparse sections + Node.parse(self, true) + end + for i, config in ipairs(self.parsechain) do + self.uci:unload(config) + end + if type(self.commit_handler) == "function" then + self:commit_handler(self:submitstate()) + end + end + + if not self.save then + self.state = FORM_INVALID + elseif self.proceed then + self.state = FORM_PROCEED + elseif self.changed then + self.state = FORM_CHANGED + else + self.state = FORM_VALID + end + + return self:state_handler(self.state) +end + +function Map.render(self, ...) + self:_run_hooks("on_init") + Node.render(self, ...) +end + +-- Creates a child section +function Map.section(self, class, ...) + if instanceof(class, AbstractSection) then + local obj = class(self, ...) + self:append(obj) + return obj + else + error("class must be a descendent of AbstractSection") + end +end + +-- UCI add +function Map.add(self, sectiontype) + return self.uci:add(self.config, sectiontype) +end + +-- UCI set +function Map.set(self, section, option, value) + if type(value) ~= "table" or #value > 0 then + if option then + return self.uci:set(self.config, section, option, value) + else + return self.uci:set(self.config, section, value) + end + else + return Map.del(self, section, option) + end +end + +-- UCI del +function Map.del(self, section, option) + if option then + return self.uci:delete(self.config, section, option) + else + return self.uci:delete(self.config, section) + end +end + +-- UCI get +function Map.get(self, section, option) + if not section then + return self.uci:get_all(self.config) + elseif option then + return self.uci:get(self.config, section, option) + else + return self.uci:get_all(self.config, section) + end +end + +--[[ +Compound - Container +]]-- +Compound = class(Node) + +function Compound.__init__(self, ...) + Node.__init__(self) + self.template = "cbi/compound" + self.children = {...} +end + +function Compound.populate_delegator(self, delegator) + for _, v in ipairs(self.children) do + v.delegator = delegator + end +end + +function Compound.parse(self, ...) + local cstate, state = 0 + + for k, child in ipairs(self.children) do + cstate = child:parse(...) + state = (not state or cstate < state) and cstate or state + end + + return state +end + + +--[[ +Delegator - Node controller +]]-- +Delegator = class(Node) +function Delegator.__init__(self, ...) + Node.__init__(self, ...) + self.nodes = {} + self.defaultpath = {} + self.pageaction = false + self.readinput = true + self.allow_reset = false + self.allow_cancel = false + self.allow_back = false + self.allow_finish = false + self.template = "cbi/delegator" +end + +function Delegator.set(self, name, node) + assert(not self.nodes[name], "Duplicate entry") + + self.nodes[name] = node +end + +function Delegator.add(self, name, node) + node = self:set(name, node) + self.defaultpath[#self.defaultpath+1] = name +end + +function Delegator.insert_after(self, name, after) + local n = #self.chain + 1 + for k, v in ipairs(self.chain) do + if v == after then + n = k + 1 + break + end + end + table.insert(self.chain, n, name) +end + +function Delegator.set_route(self, ...) + local n, chain, route = 0, self.chain, {...} + for i = 1, #chain do + if chain[i] == self.current then + n = i + break + end + end + for i = 1, #route do + n = n + 1 + chain[n] = route[i] + end + for i = n + 1, #chain do + chain[i] = nil + end +end + +function Delegator.get(self, name) + local node = self.nodes[name] + + if type(node) == "string" then + node = load(node, name) + end + + if type(node) == "table" and getmetatable(node) == nil then + node = Compound(unpack(node)) + end + + return node +end + +function Delegator.parse(self, ...) + if self.allow_cancel and Map.formvalue(self, "cbi.cancel") then + if self:_run_hooks("on_cancel") then + return FORM_DONE + end + end + + if not Map.formvalue(self, "cbi.delg.current") then + self:_run_hooks("on_init") + end + + local newcurrent + self.chain = self.chain or self:get_chain() + self.current = self.current or self:get_active() + self.active = self.active or self:get(self.current) + assert(self.active, "Invalid state") + + local stat = FORM_DONE + if type(self.active) ~= "function" then + self.active:populate_delegator(self) + stat = self.active:parse() + else + self:active() + end + + if stat > FORM_PROCEED then + if Map.formvalue(self, "cbi.delg.back") then + newcurrent = self:get_prev(self.current) + else + newcurrent = self:get_next(self.current) + end + elseif stat < FORM_PROCEED then + return stat + end + + + if not Map.formvalue(self, "cbi.submit") then + return FORM_NODATA + elseif stat > FORM_PROCEED + and (not newcurrent or not self:get(newcurrent)) then + return self:_run_hook("on_done") or FORM_DONE + else + self.current = newcurrent or self.current + self.active = self:get(self.current) + if type(self.active) ~= "function" then + self.active:populate_delegator(self) + local stat = self.active:parse(false) + if stat == FORM_SKIP then + return self:parse(...) + else + return FORM_PROCEED + end + else + return self:parse(...) + end + end +end + +function Delegator.get_next(self, state) + for k, v in ipairs(self.chain) do + if v == state then + return self.chain[k+1] + end + end +end + +function Delegator.get_prev(self, state) + for k, v in ipairs(self.chain) do + if v == state then + return self.chain[k-1] + end + end +end + +function Delegator.get_chain(self) + local x = Map.formvalue(self, "cbi.delg.path") or self.defaultpath + return type(x) == "table" and x or {x} +end + +function Delegator.get_active(self) + return Map.formvalue(self, "cbi.delg.current") or self.chain[1] +end + +--[[ +Page - A simple node +]]-- + +Page = class(Node) +Page.__init__ = Node.__init__ +Page.parse = function() end + + +--[[ +SimpleForm - A Simple non-UCI form +]]-- +SimpleForm = class(Node) + +function SimpleForm.__init__(self, config, title, description, data) + Node.__init__(self, title, description) + self.config = config + self.data = data or {} + self.template = "cbi/simpleform" + self.dorender = true + self.pageaction = false + self.readinput = true +end + +SimpleForm.formvalue = Map.formvalue +SimpleForm.formvaluetable = Map.formvaluetable + +function SimpleForm.parse(self, readinput, ...) + self.readinput = (readinput ~= false) + + if self:formvalue("cbi.skip") then + return FORM_SKIP + end + + if self:formvalue("cbi.cancel") and self:_run_hooks("on_cancel") then + return FORM_DONE + end + + if self:submitstate() then + Node.parse(self, 1, ...) + end + + local valid = true + for k, j in ipairs(self.children) do + for i, v in ipairs(j.children) do + valid = valid + and (not v.tag_missing or not v.tag_missing[1]) + and (not v.tag_invalid or not v.tag_invalid[1]) + and (not v.error) + end + end + + local state = + not self:submitstate() and FORM_NODATA + or valid and FORM_VALID + or FORM_INVALID + + self.dorender = not self.handle + if self.handle then + local nrender, nstate = self:handle(state, self.data) + self.dorender = self.dorender or (nrender ~= false) + state = nstate or state + end + return state +end + +function SimpleForm.render(self, ...) + if self.dorender then + Node.render(self, ...) + end +end + +function SimpleForm.submitstate(self) + return self:formvalue("cbi.submit") +end + +function SimpleForm.section(self, class, ...) + if instanceof(class, AbstractSection) then + local obj = class(self, ...) + self:append(obj) + return obj + else + error("class must be a descendent of AbstractSection") + end +end + +-- Creates a child field +function SimpleForm.field(self, class, ...) + local section + for k, v in ipairs(self.children) do + if instanceof(v, SimpleSection) then + section = v + break + end + end + if not section then + section = self:section(SimpleSection) + end + + if instanceof(class, AbstractValue) then + local obj = class(self, section, ...) + obj.track_missing = true + section:append(obj) + return obj + else + error("class must be a descendent of AbstractValue") + end +end + +function SimpleForm.set(self, section, option, value) + self.data[option] = value +end + + +function SimpleForm.del(self, section, option) + self.data[option] = nil +end + + +function SimpleForm.get(self, section, option) + return self.data[option] +end + + +function SimpleForm.get_scheme() + return nil +end + + +Form = class(SimpleForm) + +function Form.__init__(self, ...) + SimpleForm.__init__(self, ...) + self.embedded = true +end + + +--[[ +AbstractSection +]]-- +AbstractSection = class(Node) + +function AbstractSection.__init__(self, map, sectiontype, ...) + Node.__init__(self, ...) + self.sectiontype = sectiontype + self.map = map + self.config = map.config + self.optionals = {} + self.defaults = {} + self.fields = {} + self.tag_error = {} + self.tag_invalid = {} + self.tag_deperror = {} + self.changed = false + + self.optional = true + self.addremove = false + self.dynamic = false +end + +-- Define a tab for the section +function AbstractSection.tab(self, tab, title, desc) + self.tabs = self.tabs or { } + self.tab_names = self.tab_names or { } + + self.tab_names[#self.tab_names+1] = tab + self.tabs[tab] = { + title = title, + description = desc, + childs = { } + } +end + +-- Check whether the section has tabs +function AbstractSection.has_tabs(self) + return (self.tabs ~= nil) and (next(self.tabs) ~= nil) +end + +-- Appends a new option +function AbstractSection.option(self, class, option, ...) + if instanceof(class, AbstractValue) then + local obj = class(self.map, self, option, ...) + self:append(obj) + self.fields[option] = obj + return obj + elseif class == true then + error("No valid class was given and autodetection failed.") + else + error("class must be a descendant of AbstractValue") + end +end + +-- Appends a new tabbed option +function AbstractSection.taboption(self, tab, ...) + + assert(tab and self.tabs and self.tabs[tab], + "Cannot assign option to not existing tab %q" % tostring(tab)) + + local l = self.tabs[tab].childs + local o = AbstractSection.option(self, ...) + + if o then l[#l+1] = o end + + return o +end + +-- Render a single tab +function AbstractSection.render_tab(self, tab, ...) + + assert(tab and self.tabs and self.tabs[tab], + "Cannot render not existing tab %q" % tostring(tab)) + + local k, node + for k, node in ipairs(self.tabs[tab].childs) do + node.last_child = (k == #self.tabs[tab].childs) + node.index = k + node:render(...) + end +end + +-- Parse optional options +function AbstractSection.parse_optionals(self, section, noparse) + if not self.optional then + return + end + + self.optionals[section] = {} + + local field = nil + if not noparse then + field = self.map:formvalue("cbi.opt."..self.config.."."..section) + end + + for k,v in ipairs(self.children) do + if v.optional and not v:cfgvalue(section) and not self:has_tabs() then + if field == v.option then + field = nil + self.map.proceed = true + else + table.insert(self.optionals[section], v) + end + end + end + + if field and #field > 0 and self.dynamic then + self:add_dynamic(field) + end +end + +-- Add a dynamic option +function AbstractSection.add_dynamic(self, field, optional) + local o = self:option(Value, field, field) + o.optional = optional +end + +-- Parse all dynamic options +function AbstractSection.parse_dynamic(self, section) + if not self.dynamic then + return + end + + local arr = luci.util.clone(self:cfgvalue(section)) + local form = self.map:formvaluetable("cbid."..self.config.."."..section) + for k, v in pairs(form) do + arr[k] = v + end + + for key,val in pairs(arr) do + local create = true + + for i,c in ipairs(self.children) do + if c.option == key then + create = false + end + end + + if create and key:sub(1, 1) ~= "." then + self.map.proceed = true + self:add_dynamic(key, true) + end + end +end + +-- Returns the section's UCI table +function AbstractSection.cfgvalue(self, section) + return self.map:get(section) +end + +-- Push events +function AbstractSection.push_events(self) + --luci.util.append(self.map.events, self.events) + self.map.changed = true +end + +-- Removes the section +function AbstractSection.remove(self, section) + self.map.proceed = true + return self.map:del(section) +end + +-- Creates the section +function AbstractSection.create(self, section) + local stat + + if section then + stat = section:match("^[%w_]+$") and self.map:set(section, nil, self.sectiontype) + else + section = self.map:add(self.sectiontype) + stat = section + end + + if stat then + for k,v in pairs(self.children) do + if v.default then + self.map:set(section, v.option, v.default) + end + end + + for k,v in pairs(self.defaults) do + self.map:set(section, k, v) + end + end + + self.map.proceed = true + + return stat +end + + +SimpleSection = class(AbstractSection) + +function SimpleSection.__init__(self, form, ...) + AbstractSection.__init__(self, form, nil, ...) + self.template = "cbi/nullsection" +end + + +Table = class(AbstractSection) + +function Table.__init__(self, form, data, ...) + local datasource = {} + local tself = self + datasource.config = "table" + self.data = data or {} + + datasource.formvalue = Map.formvalue + datasource.formvaluetable = Map.formvaluetable + datasource.readinput = true + + function datasource.get(self, section, option) + return tself.data[section] and tself.data[section][option] + end + + function datasource.submitstate(self) + return Map.formvalue(self, "cbi.submit") + end + + function datasource.del(...) + return true + end + + function datasource.get_scheme() + return nil + end + + AbstractSection.__init__(self, datasource, "table", ...) + self.template = "cbi/tblsection" + self.rowcolors = true + self.anonymous = true +end + +function Table.parse(self, readinput) + self.map.readinput = (readinput ~= false) + for i, k in ipairs(self:cfgsections()) do + if self.map:submitstate() then + Node.parse(self, k) + end + end +end + +function Table.cfgsections(self) + local sections = {} + + for i, v in luci.util.kspairs(self.data) do + table.insert(sections, i) + end + + return sections +end + +function Table.update(self, data) + self.data = data +end + + + +--[[ +NamedSection - A fixed configuration section defined by its name +]]-- +NamedSection = class(AbstractSection) + +function NamedSection.__init__(self, map, section, stype, ...) + AbstractSection.__init__(self, map, stype, ...) + + -- Defaults + self.addremove = false + self.template = "cbi/nsection" + self.section = section +end + +function NamedSection.prepare(self) + AbstractSection.prepare(self) + AbstractSection.parse_optionals(self, self.section, true) +end + +function NamedSection.parse(self, novld) + local s = self.section + local active = self:cfgvalue(s) + + if self.addremove then + local path = self.config.."."..s + if active then -- Remove the section + if self.map:formvalue("cbi.rns."..path) and self:remove(s) then + self:push_events() + return + end + else -- Create and apply default values + if self.map:formvalue("cbi.cns."..path) then + self:create(s) + return + end + end + end + + if active then + AbstractSection.parse_dynamic(self, s) + if self.map:submitstate() then + Node.parse(self, s) + end + AbstractSection.parse_optionals(self, s) + + if self.changed then + self:push_events() + end + end +end + + +--[[ +TypedSection - A (set of) configuration section(s) defined by the type + addremove: Defines whether the user can add/remove sections of this type + anonymous: Allow creating anonymous sections + validate: a validation function returning nil if the section is invalid +]]-- +TypedSection = class(AbstractSection) + +function TypedSection.__init__(self, map, type, ...) + AbstractSection.__init__(self, map, type, ...) + + self.template = "cbi/tsection" + self.deps = {} + self.anonymous = false +end + +function TypedSection.prepare(self) + AbstractSection.prepare(self) + + local i, s + for i, s in ipairs(self:cfgsections()) do + AbstractSection.parse_optionals(self, s, true) + end +end + +-- Return all matching UCI sections for this TypedSection +function TypedSection.cfgsections(self) + local sections = {} + self.map.uci:foreach(self.map.config, self.sectiontype, + function (section) + if self:checkscope(section[".name"]) then + table.insert(sections, section[".name"]) + end + end) + + return sections +end + +-- Limits scope to sections that have certain option => value pairs +function TypedSection.depends(self, option, value) + table.insert(self.deps, {option=option, value=value}) +end + +function TypedSection.parse(self, novld) + if self.addremove then + -- Remove + local crval = REMOVE_PREFIX .. self.config + local name = self.map:formvaluetable(crval) + for k,v in pairs(name) do + if k:sub(-2) == ".x" then + k = k:sub(1, #k - 2) + end + if self:cfgvalue(k) and self:checkscope(k) then + self:remove(k) + end + end + end + + local co + for i, k in ipairs(self:cfgsections()) do + AbstractSection.parse_dynamic(self, k) + if self.map:submitstate() then + Node.parse(self, k, novld) + end + AbstractSection.parse_optionals(self, k) + end + + if self.addremove then + -- Create + local created + local crval = CREATE_PREFIX .. self.config .. "." .. self.sectiontype + local origin, name = next(self.map:formvaluetable(crval)) + if self.anonymous then + if name then + created = self:create(nil, origin) + end + else + if name then + -- Ignore if it already exists + if self:cfgvalue(name) then + name = nil; + end + + name = self:checkscope(name) + + if not name then + self.err_invalid = true + end + + if name and #name > 0 then + created = self:create(name, origin) and name + if not created then + self.invalid_cts = true + end + end + end + end + + if created then + AbstractSection.parse_optionals(self, created) + end + end + + if self.sortable then + local stval = RESORT_PREFIX .. self.config .. "." .. self.sectiontype + local order = self.map:formvalue(stval) + if order and #order > 0 then + local sid + local num = 0 + for sid in util.imatch(order) do + self.map.uci:reorder(self.config, sid, num) + num = num + 1 + end + self.changed = (num > 0) + end + end + + if created or self.changed then + self:push_events() + end +end + +-- Verifies scope of sections +function TypedSection.checkscope(self, section) + -- Check if we are not excluded + if self.filter and not self:filter(section) then + return nil + end + + -- Check if at least one dependency is met + if #self.deps > 0 and self:cfgvalue(section) then + local stat = false + + for k, v in ipairs(self.deps) do + if self:cfgvalue(section)[v.option] == v.value then + stat = true + end + end + + if not stat then + return nil + end + end + + return self:validate(section) +end + + +-- Dummy validate function +function TypedSection.validate(self, section) + return section +end + + +--[[ +AbstractValue - An abstract Value Type + null: Value can be empty + valid: A function returning the value if it is valid otherwise nil + depends: A table of option => value pairs of which one must be true + default: The default value + size: The size of the input fields + rmempty: Unset value if empty + optional: This value is optional (see AbstractSection.optionals) +]]-- +AbstractValue = class(Node) + +function AbstractValue.__init__(self, map, section, option, ...) + Node.__init__(self, ...) + self.section = section + self.option = option + self.map = map + self.config = map.config + self.tag_invalid = {} + self.tag_missing = {} + self.tag_reqerror = {} + self.tag_error = {} + self.deps = {} + --self.cast = "string" + + self.track_missing = false + self.rmempty = true + self.default = nil + self.size = nil + self.optional = false +end + +function AbstractValue.prepare(self) + self.cast = self.cast or "string" +end + +-- Add a dependencie to another section field +function AbstractValue.depends(self, field, value) + local deps + if type(field) == "string" then + deps = {} + deps[field] = value + else + deps = field + end + + table.insert(self.deps, deps) +end + +-- Serialize dependencies +function AbstractValue.deplist2json(self, section, deplist) + local deps, i, d = { } + + if type(self.deps) == "table" then + for i, d in ipairs(deplist or self.deps) do + local a, k, v = { } + for k, v in pairs(d) do + if k:find("!", 1, true) then + a[k] = v + elseif k:find(".", 1, true) then + a['cbid.%s' % k] = v + else + a['cbid.%s.%s.%s' %{ self.config, section, k }] = v + end + end + deps[#deps+1] = a + end + end + + return util.serialize_json(deps) +end + +-- Generates the unique CBID +function AbstractValue.cbid(self, section) + return "cbid."..self.map.config.."."..section.."."..self.option +end + +-- Return whether this object should be created +function AbstractValue.formcreated(self, section) + local key = "cbi.opt."..self.config.."."..section + return (self.map:formvalue(key) == self.option) +end + +-- Returns the formvalue for this object +function AbstractValue.formvalue(self, section) + return self.map:formvalue(self:cbid(section)) +end + +function AbstractValue.additional(self, value) + self.optional = value +end + +function AbstractValue.mandatory(self, value) + self.rmempty = not value +end + +function AbstractValue.add_error(self, section, type, msg) + self.error = self.error or { } + self.error[section] = msg or type + + self.section.error = self.section.error or { } + self.section.error[section] = self.section.error[section] or { } + table.insert(self.section.error[section], msg or type) + + if type == "invalid" then + self.tag_invalid[section] = true + elseif type == "missing" then + self.tag_missing[section] = true + end + + self.tag_error[section] = true + self.map.save = false +end + +function AbstractValue.parse(self, section, novld) + local fvalue = self:formvalue(section) + local cvalue = self:cfgvalue(section) + + -- If favlue and cvalue are both tables and have the same content + -- make them identical + if type(fvalue) == "table" and type(cvalue) == "table" then + local equal = #fvalue == #cvalue + if equal then + for i=1, #fvalue do + if cvalue[i] ~= fvalue[i] then + equal = false + end + end + end + if equal then + fvalue = cvalue + end + end + + if fvalue and #fvalue > 0 then -- If we have a form value, write it to UCI + local val_err + fvalue, val_err = self:validate(fvalue, section) + fvalue = self:transform(fvalue) + + if not fvalue and not novld then + self:add_error(section, "invalid", val_err) + end + + if fvalue and (self.forcewrite or not (fvalue == cvalue)) then + if self:write(section, fvalue) then + -- Push events + self.section.changed = true + --luci.util.append(self.map.events, self.events) + end + end + else -- Unset the UCI or error + if self.rmempty or self.optional then + if self:remove(section) then + -- Push events + self.section.changed = true + --luci.util.append(self.map.events, self.events) + end + elseif cvalue ~= fvalue and not novld then + -- trigger validator with nil value to get custom user error msg. + local _, val_err = self:validate(nil, section) + self:add_error(section, "missing", val_err) + end + end +end + +-- Render if this value exists or if it is mandatory +function AbstractValue.render(self, s, scope) + if not self.optional or self.section:has_tabs() or self:cfgvalue(s) or self:formcreated(s) then + scope = scope or {} + scope.section = s + scope.cbid = self:cbid(s) + Node.render(self, scope) + end +end + +-- Return the UCI value of this object +function AbstractValue.cfgvalue(self, section) + local value + if self.tag_error[section] then + value = self:formvalue(section) + else + value = self.map:get(section, self.option) + end + + if not value then + return nil + elseif not self.cast or self.cast == type(value) then + return value + elseif self.cast == "string" then + if type(value) == "table" then + return value[1] + end + elseif self.cast == "table" then + return { value } + end +end + +-- Validate the form value +function AbstractValue.validate(self, value) + if self.datatype and value then + if type(value) == "table" then + local v + for _, v in ipairs(value) do + if v and #v > 0 and not verify_datatype(self.datatype, v) then + return nil + end + end + else + if not verify_datatype(self.datatype, value) then + return nil + end + end + end + + return value +end + +AbstractValue.transform = AbstractValue.validate + + +-- Write to UCI +function AbstractValue.write(self, section, value) + return self.map:set(section, self.option, value) +end + +-- Remove from UCI +function AbstractValue.remove(self, section) + return self.map:del(section, self.option) +end + + + + +--[[ +Value - A one-line value + maxlength: The maximum length +]]-- +Value = class(AbstractValue) + +function Value.__init__(self, ...) + AbstractValue.__init__(self, ...) + self.template = "cbi/value" + self.keylist = {} + self.vallist = {} + self.readonly = nil +end + +function Value.reset_values(self) + self.keylist = {} + self.vallist = {} +end + +function Value.value(self, key, val) + val = val or key + table.insert(self.keylist, tostring(key)) + table.insert(self.vallist, tostring(val)) +end + +function Value.parse(self, section, novld) + if self.readonly then return end + AbstractValue.parse(self, section, novld) +end + +-- DummyValue - This does nothing except being there +DummyValue = class(AbstractValue) + +function DummyValue.__init__(self, ...) + AbstractValue.__init__(self, ...) + self.template = "cbi/dvalue" + self.value = nil +end + +function DummyValue.cfgvalue(self, section) + local value + if self.value then + if type(self.value) == "function" then + value = self:value(section) + else + value = self.value + end + else + value = AbstractValue.cfgvalue(self, section) + end + return value +end + +function DummyValue.parse(self) + +end + + +--[[ +Flag - A flag being enabled or disabled +]]-- +Flag = class(AbstractValue) + +function Flag.__init__(self, ...) + AbstractValue.__init__(self, ...) + self.template = "cbi/fvalue" + + self.enabled = "1" + self.disabled = "0" + self.default = self.disabled +end + +-- A flag can only have two states: set or unset +function Flag.parse(self, section, novld) + local fexists = self.map:formvalue( + FEXIST_PREFIX .. self.config .. "." .. section .. "." .. self.option) + + if fexists then + local fvalue = self:formvalue(section) and self.enabled or self.disabled + local cvalue = self:cfgvalue(section) + local val_err + fvalue, val_err = self:validate(fvalue, section) + if not fvalue then + if not novld then + self:add_error(section, "invalid", val_err) + end + return + end + if fvalue == self.default and (self.optional or self.rmempty) then + self:remove(section) + else + self:write(section, fvalue) + end + if (fvalue ~= cvalue) then self.section.changed = true end + else + self:remove(section) + self.section.changed = true + end +end + +function Flag.cfgvalue(self, section) + return AbstractValue.cfgvalue(self, section) or self.default +end +function Flag.validate(self, value) + return value +end + +--[[ +ListValue - A one-line value predefined in a list + widget: The widget that will be used (select, radio) +]]-- +ListValue = class(AbstractValue) + +function ListValue.__init__(self, ...) + AbstractValue.__init__(self, ...) + self.template = "cbi/lvalue" + + self.size = 1 + self.widget = "select" + + self:reset_values() +end + +function ListValue.reset_values(self) + self.keylist = {} + self.vallist = {} + self.deplist = {} +end + +function ListValue.value(self, key, val, ...) + if luci.util.contains(self.keylist, key) then + return + end + + val = val or key + table.insert(self.keylist, tostring(key)) + table.insert(self.vallist, tostring(val)) + table.insert(self.deplist, {...}) +end + +function ListValue.validate(self, val) + if luci.util.contains(self.keylist, val) then + return val + else + return nil + end +end + + + +--[[ +MultiValue - Multiple delimited values + widget: The widget that will be used (select, checkbox) + delimiter: The delimiter that will separate the values (default: " ") +]]-- +MultiValue = class(AbstractValue) + +function MultiValue.__init__(self, ...) + AbstractValue.__init__(self, ...) + self.template = "cbi/mvalue" + + self.widget = "checkbox" + self.delimiter = " " + + self:reset_values() +end + +function MultiValue.render(self, ...) + if self.widget == "select" and not self.size then + self.size = #self.vallist + end + + AbstractValue.render(self, ...) +end + +function MultiValue.reset_values(self) + self.keylist = {} + self.vallist = {} + self.deplist = {} +end + +function MultiValue.value(self, key, val) + if luci.util.contains(self.keylist, key) then + return + end + + val = val or key + table.insert(self.keylist, tostring(key)) + table.insert(self.vallist, tostring(val)) +end + +function MultiValue.valuelist(self, section) + local val = self:cfgvalue(section) + + if not(type(val) == "string") then + return {} + end + + return luci.util.split(val, self.delimiter) +end + +function MultiValue.validate(self, val) + val = (type(val) == "table") and val or {val} + + local result + + for i, value in ipairs(val) do + if luci.util.contains(self.keylist, value) then + result = result and (result .. self.delimiter .. value) or value + end + end + + return result +end + + +StaticList = class(MultiValue) + +function StaticList.__init__(self, ...) + MultiValue.__init__(self, ...) + self.cast = "table" + self.valuelist = self.cfgvalue + + if not self.override_scheme + and self.map:get_scheme(self.section.sectiontype, self.option) then + local vs = self.map:get_scheme(self.section.sectiontype, self.option) + if self.value and vs.values and not self.override_values then + for k, v in pairs(vs.values) do + self:value(k, v) + end + end + end +end + +function StaticList.validate(self, value) + value = (type(value) == "table") and value or {value} + + local valid = {} + for i, v in ipairs(value) do + if luci.util.contains(self.keylist, v) then + table.insert(valid, v) + end + end + return valid +end + + +DynamicList = class(AbstractValue) + +function DynamicList.__init__(self, ...) + AbstractValue.__init__(self, ...) + self.template = "cbi/dynlist" + self.cast = "table" + self:reset_values() +end + +function DynamicList.reset_values(self) + self.keylist = {} + self.vallist = {} +end + +function DynamicList.value(self, key, val) + val = val or key + table.insert(self.keylist, tostring(key)) + table.insert(self.vallist, tostring(val)) +end + +function DynamicList.write(self, section, value) + local t = { } + + if type(value) == "table" then + local x + for _, x in ipairs(value) do + if x and #x > 0 then + t[#t+1] = x + end + end + else + t = { value } + end + + if self.cast == "string" then + value = table.concat(t, " ") + else + value = t + end + + return AbstractValue.write(self, section, value) +end + +function DynamicList.cfgvalue(self, section) + local value = AbstractValue.cfgvalue(self, section) + + if type(value) == "string" then + local x + local t = { } + for x in value:gmatch("%S+") do + if #x > 0 then + t[#t+1] = x + end + end + value = t + end + + return value +end + +function DynamicList.formvalue(self, section) + local value = AbstractValue.formvalue(self, section) + + if type(value) == "string" then + if self.cast == "string" then + local x + local t = { } + for x in value:gmatch("%S+") do + t[#t+1] = x + end + value = t + else + value = { value } + end + end + + return value +end + + +--[[ +TextValue - A multi-line value + rows: Rows +]]-- +TextValue = class(AbstractValue) + +function TextValue.__init__(self, ...) + AbstractValue.__init__(self, ...) + self.template = "cbi/tvalue" +end + +--[[ +Button +]]-- +Button = class(AbstractValue) + +function Button.__init__(self, ...) + AbstractValue.__init__(self, ...) + self.template = "cbi/button" + self.inputstyle = nil + self.rmempty = true + self.unsafeupload = false +end + + +FileUpload = class(AbstractValue) + +function FileUpload.__init__(self, ...) + AbstractValue.__init__(self, ...) + self.template = "cbi/upload" + if not self.map.upload_fields then + self.map.upload_fields = { self } + else + self.map.upload_fields[#self.map.upload_fields+1] = self + end +end + +function FileUpload.formcreated(self, section) + if self.unsafeupload then + return AbstractValue.formcreated(self, section) or + self.map:formvalue("cbi.rlf."..section.."."..self.option) or + self.map:formvalue("cbi.rlf."..section.."."..self.option..".x") or + self.map:formvalue("cbid."..self.map.config.."."..section.."."..self.option..".textbox") + else + return AbstractValue.formcreated(self, section) or + self.map:formvalue("cbid."..self.map.config.."."..section.."."..self.option..".textbox") + end +end + +function FileUpload.cfgvalue(self, section) + local val = AbstractValue.cfgvalue(self, section) + if val and fs.access(val) then + return val + end + return nil +end + +-- If we have a new value, use it +-- otherwise use old value +-- deletion should be managed by a separate button object +-- unless self.unsafeupload is set in which case if the user +-- choose to remove the old file we do so. +-- Also, allow to specify (via textbox) a file already on router +function FileUpload.formvalue(self, section) + local val = AbstractValue.formvalue(self, section) + if val then + if self.unsafeupload then + if not self.map:formvalue("cbi.rlf."..section.."."..self.option) and + not self.map:formvalue("cbi.rlf."..section.."."..self.option..".x") + then + return val + end + fs.unlink(val) + self.value = nil + return nil + elseif val ~= "" then + return val + end + end + val = luci.http.formvalue("cbid."..self.map.config.."."..section.."."..self.option..".textbox") + if val == "" then + val = nil + end + if not self.unsafeupload then + if not val then + val = self.map:formvalue("cbi.rlf."..section.."."..self.option) + end + end + return val +end + +function FileUpload.remove(self, section) + if self.unsafeupload then + local val = AbstractValue.formvalue(self, section) + if val and fs.access(val) then fs.unlink(val) end + return AbstractValue.remove(self, section) + else + return nil + end +end + +FileBrowser = class(AbstractValue) + +function FileBrowser.__init__(self, ...) + AbstractValue.__init__(self, ...) + self.template = "cbi/browser" +end diff --git a/feeds/luci/modules/luci-base/luasrc/cbi/datatypes.lua b/feeds/luci/modules/luci-base/luasrc/cbi/datatypes.lua new file mode 100644 index 0000000..626ad91 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/cbi/datatypes.lua @@ -0,0 +1,407 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local ip = require "luci.ip" +local math = require "math" +local util = require "luci.util" +local tonumber, tostring, type, unpack, select = tonumber, tostring, type, unpack, select + + +module "luci.cbi.datatypes" + + +_M['or'] = function(v, ...) + local i + for i = 1, select('#', ...), 2 do + local f = select(i, ...) + local a = select(i+1, ...) + if type(f) ~= "function" then + if f == v then + return true + end + i = i - 1 + elseif f(v, unpack(a)) then + return true + end + end + return false +end + +_M['and'] = function(v, ...) + local i + for i = 1, select('#', ...), 2 do + local f = select(i, ...) + local a = select(i+1, ...) + if type(f) ~= "function" then + if f ~= v then + return false + end + i = i - 1 + elseif not f(v, unpack(a)) then + return false + end + end + return true +end + +function neg(v, ...) + return _M['or'](v:gsub("^%s*!%s*", ""), ...) +end + +function list(v, subvalidator, subargs) + if type(subvalidator) ~= "function" then + return false + end + local token + for token in v:gmatch("%S+") do + if not subvalidator(token, unpack(subargs)) then + return false + end + end + return true +end + +function bool(val) + if val == "1" or val == "yes" or val == "on" or val == "true" then + return true + elseif val == "0" or val == "no" or val == "off" or val == "false" then + return true + elseif val == "" or val == nil then + return true + end + + return false +end + +function uinteger(val) + local n = tonumber(val) + if n ~= nil and math.floor(n) == n and n >= 0 then + return true + end + + return false +end + +function integer(val) + local n = tonumber(val) + if n ~= nil and math.floor(n) == n then + return true + end + + return false +end + +function ufloat(val) + local n = tonumber(val) + return ( n ~= nil and n >= 0 ) +end + +function float(val) + return ( tonumber(val) ~= nil ) +end + +function ipaddr(val) + return ip4addr(val) or ip6addr(val) +end + +function ip4addr(val) + if val then + return ip.IPv4(val) and true or false + end + + return false +end + +function ip4prefix(val) + val = tonumber(val) + return ( val and val >= 0 and val <= 32 ) +end + +function ip6addr(val) + if val then + return ip.IPv6(val) and true or false + end + + return false +end + +function ip6prefix(val) + val = tonumber(val) + return ( val and val >= 0 and val <= 128 ) +end + +function port(val) + val = tonumber(val) + return ( val and val >= 0 and val <= 65535 ) +end + +function portrange(val) + local p1, p2 = val:match("^(%d+)%-(%d+)$") + if p1 and p2 and port(p1) and port(p2) then + return true + else + return port(val) + end +end + +function macaddr(val) + if val and val:match( + "^[a-fA-F0-9]+:[a-fA-F0-9]+:[a-fA-F0-9]+:" .. + "[a-fA-F0-9]+:[a-fA-F0-9]+:[a-fA-F0-9]+$" + ) then + local parts = util.split( val, ":" ) + + for i = 1,6 do + parts[i] = tonumber( parts[i], 16 ) + if parts[i] < 0 or parts[i] > 255 then + return false + end + end + + return true + end + + return false +end + +function hostname(val) + if val and (#val < 254) and ( + val:match("^[a-zA-Z_]+$") or + (val:match("^[a-zA-Z0-9_][a-zA-Z0-9_%-%.]*[a-zA-Z0-9]$") and + val:match("[^0-9%.]")) + ) then + return true + end + return false +end + +function host(val, ipv4only) + return hostname(val) or ((ipv4only == 1) and ip4addr(val)) or ((not (ipv4only == 1)) and ipaddr(val)) +end + +function network(val) + return uciname(val) or host(val) +end + +function hostport(val, ipv4only) + local h, p = val:match("^([^:]+):([^:]+)$") + return not not (h and p and host(h, ipv4only) and port(p)) +end + +function ip4addrport(val, bracket) + local h, p = val:match("^([^:]+):([^:]+)$") + return (h and p and ip4addr(h) and port(p)) +end + +function ip4addrport(val) + local h, p = val:match("^([^:]+):([^:]+)$") + return (h and p and ip4addr(h) and port(p)) +end + +function ipaddrport(val, bracket) + local h, p = val:match("^([^%[%]:]+):([^:]+)$") + if (h and p and ip4addr(h) and port(p)) then + return true + elseif (bracket == 1) then + h, p = val:match("^%[(.+)%]:([^:]+)$") + if (h and p and ip6addr(h) and port(p)) then + return true + end + end + h, p = val:match("^([^%[%]]+):([^:]+)$") + return (h and p and ip6addr(h) and port(p)) +end + +function wpakey(val) + if #val == 64 then + return (val:match("^[a-fA-F0-9]+$") ~= nil) + else + return (#val >= 8) and (#val <= 63) + end +end + +function wepkey(val) + if val:sub(1, 2) == "s:" then + val = val:sub(3) + end + + if (#val == 10) or (#val == 26) then + return (val:match("^[a-fA-F0-9]+$") ~= nil) + else + return (#val == 5) or (#val == 13) + end +end + +function string(val) + return true -- Everything qualifies as valid string +end + +function directory( val, seen ) + local s = fs.stat(val) + seen = seen or { } + + if s and not seen[s.ino] then + seen[s.ino] = true + if s.type == "dir" then + return true + elseif s.type == "lnk" then + return directory( fs.readlink(val), seen ) + end + end + + return false +end + +function file( val, seen ) + local s = fs.stat(val) + seen = seen or { } + + if s and not seen[s.ino] then + seen[s.ino] = true + if s.type == "reg" then + return true + elseif s.type == "lnk" then + return file( fs.readlink(val), seen ) + end + end + + return false +end + +function device( val, seen ) + local s = fs.stat(val) + seen = seen or { } + + if s and not seen[s.ino] then + seen[s.ino] = true + if s.type == "chr" or s.type == "blk" then + return true + elseif s.type == "lnk" then + return device( fs.readlink(val), seen ) + end + end + + return false +end + +function uciname(val) + return (val:match("^[a-zA-Z0-9_]+$") ~= nil) +end + +function range(val, min, max) + val = tonumber(val) + min = tonumber(min) + max = tonumber(max) + + if val ~= nil and min ~= nil and max ~= nil then + return ((val >= min) and (val <= max)) + end + + return false +end + +function min(val, min) + val = tonumber(val) + min = tonumber(min) + + if val ~= nil and min ~= nil then + return (val >= min) + end + + return false +end + +function max(val, max) + val = tonumber(val) + max = tonumber(max) + + if val ~= nil and max ~= nil then + return (val <= max) + end + + return false +end + +function rangelength(val, min, max) + val = tostring(val) + min = tonumber(min) + max = tonumber(max) + + if val ~= nil and min ~= nil and max ~= nil then + return ((#val >= min) and (#val <= max)) + end + + return false +end + +function minlength(val, min) + val = tostring(val) + min = tonumber(min) + + if val ~= nil and min ~= nil then + return (#val >= min) + end + + return false +end + +function maxlength(val, max) + val = tostring(val) + max = tonumber(max) + + if val ~= nil and max ~= nil then + return (#val <= max) + end + + return false +end + +function phonedigit(val) + return (val:match("^[0-9\*#!%.]+$") ~= nil) +end + +function timehhmmss(val) + return (val:match("^[0-6][0-9]:[0-6][0-9]:[0-6][0-9]$") ~= nil) +end + +function dateyyyymmdd(val) + if val ~= nil then + yearstr, monthstr, daystr = val:match("^(%d%d%d%d)-(%d%d)-(%d%d)$") + if (yearstr == nil) or (monthstr == nil) or (daystr == nil) then + return false; + end + year = tonumber(yearstr) + month = tonumber(monthstr) + day = tonumber(daystr) + if (year == nil) or (month == nil) or (day == nil) then + return false; + end + + local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } + + local function is_leap_year(year) + return (year % 4 == 0) and ((year % 100 ~= 0) or (year % 400 == 0)) + end + + function get_days_in_month(month, year) + if (month == 2) and is_leap_year(year) then + return 29 + else + return days_in_month[month] + end + end + if (year < 2015) then + return false + end + if ((month == 0) or (month > 12)) then + return false + end + if ((day == 0) or (day > get_days_in_month(month, year))) then + return false + end + return true + end + return false +end + diff --git a/feeds/luci/modules/luci-base/luasrc/ccache.lua b/feeds/luci/modules/luci-base/luasrc/ccache.lua new file mode 100644 index 0000000..bcc76e6 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/ccache.lua @@ -0,0 +1,76 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local io = require "io" +local fs = require "nixio.fs" +local util = require "luci.util" +local nixio = require "nixio" +local debug = require "debug" +local string = require "string" +local package = require "package" + +local type, loadfile = type, loadfile + + +module "luci.ccache" + +function cache_ondemand(...) + if debug.getinfo(1, 'S').source ~= "=?" then + cache_enable(...) + end +end + +function cache_enable(cachepath, mode) + cachepath = cachepath or "/tmp/luci-modulecache" + mode = mode or "r--r--r--" + + local loader = package.loaders[2] + local uid = nixio.getuid() + + if not fs.stat(cachepath) then + fs.mkdir(cachepath) + end + + local function _encode_filename(name) + local encoded = "" + for i=1, #name do + encoded = encoded .. ("%2X" % string.byte(name, i)) + end + return encoded + end + + local function _load_sane(file) + local stat = fs.stat(file) + if stat and stat.uid == uid and stat.modestr == mode then + return loadfile(file) + end + end + + local function _write_sane(file, func) + if nixio.getuid() == uid then + local fp = io.open(file, "w") + if fp then + fp:write(util.get_bytecode(func)) + fp:close() + fs.chmod(file, mode) + end + end + end + + package.loaders[2] = function(mod) + local encoded = cachepath .. "/" .. _encode_filename(mod) + local modcons = _load_sane(encoded) + + if modcons then + return modcons + end + + -- No cachefile + modcons = loader(mod) + if type(modcons) == "function" then + _write_sane(encoded, modcons) + end + return modcons + end +end diff --git a/feeds/luci/modules/luci-base/luasrc/config.lua b/feeds/luci/modules/luci-base/luasrc/config.lua new file mode 100644 index 0000000..d01153f --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/config.lua @@ -0,0 +1,18 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local util = require "luci.util" +module("luci.config", + function(m) + if pcall(require, "luci.model.uci") then + local config = util.threadlocal() + setmetatable(m, { + __index = function(tbl, key) + if not config[key] then + config[key] = luci.model.uci.cursor():get_all("luci", key) + end + return config[key] + end + }) + end + end) diff --git a/feeds/luci/modules/luci-base/luasrc/controller/admin/servicectl.lua b/feeds/luci/modules/luci-base/luasrc/controller/admin/servicectl.lua new file mode 100644 index 0000000..1d73eb4 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/controller/admin/servicectl.lua @@ -0,0 +1,49 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.admin.servicectl", package.seeall) + +function index() + entry({"servicectl"}, alias("servicectl", "status")).sysauth = "root" + entry({"servicectl", "status"}, call("action_status")).leaf = true + entry({"servicectl", "restart"}, post("action_restart")).leaf = true +end + +function action_status() + local data = nixio.fs.readfile("/var/run/luci-reload-status") + if data then + luci.http.write("/etc/config/") + luci.http.write(data) + else + luci.http.write("finish") + end +end + +function action_restart(args) + local uci = require "luci.model.uci".cursor() + if args then + local service + local services = { } + + for service in args:gmatch("[%w_-]+") do + services[#services+1] = service + end + + local command = uci:apply(services, true) + if nixio.fork() == 0 then + local i = nixio.open("/dev/null", "r") + local o = nixio.open("/dev/null", "w") + + nixio.dup(i, nixio.stdin) + nixio.dup(o, nixio.stdout) + + i:close() + o:close() + + nixio.exec("/bin/sh", unpack(command)) + else + luci.http.write("OK") + os.exit(0) + end + end +end diff --git a/feeds/luci/modules/luci-base/luasrc/debug.lua b/feeds/luci/modules/luci-base/luasrc/debug.lua new file mode 100644 index 0000000..8ff1bb6 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/debug.lua @@ -0,0 +1,37 @@ +local debug = require "debug" +local io = require "io" +local collectgarbage, floor = collectgarbage, math.floor + +module "luci.debug" +__file__ = debug.getinfo(1, 'S').source:sub(2) + +-- Enables the memory tracer with given flags and returns a function to disable the tracer again +function trap_memtrace(flags, dest) + flags = flags or "clr" + local tracefile = io.open(dest or "/tmp/memtrace", "w") + local peak = 0 + + local function trap(what, line) + local info = debug.getinfo(2, "Sn") + local size = floor(collectgarbage("count")) + if size > peak then + peak = size + end + if tracefile then + tracefile:write( + "[", what, "] ", info.source, ":", (line or "?"), "\t", + (info.namewhat or ""), "\t", + (info.name or ""), "\t", + size, " (", peak, ")\n" + ) + end + end + + debug.sethook(trap, flags) + + return function() + debug.sethook() + tracefile:close() + end +end + diff --git a/feeds/luci/modules/luci-base/luasrc/dispatcher.lua b/feeds/luci/modules/luci-base/luasrc/dispatcher.lua new file mode 100644 index 0000000..0876ce6 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/dispatcher.lua @@ -0,0 +1,918 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008-2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local sys = require "luci.sys" +local util = require "luci.util" +local http = require "luci.http" +local nixio = require "nixio", require "nixio.util" + +module("luci.dispatcher", package.seeall) +context = util.threadlocal() +uci = require "luci.model.uci" +i18n = require "luci.i18n" +_M.fs = fs + +authenticator = {} + +-- Index table +local index = nil + +-- Fastindex +local fi + + +function build_url(...) + local path = {...} + local url = { http.getenv("SCRIPT_NAME") or "" } + + local p + for _, p in ipairs(path) do + if p:match("^[a-zA-Z0-9_%-%.%%/,;]+$") then + url[#url+1] = "/" + url[#url+1] = p + end + end + + if #path == 0 then + url[#url+1] = "/" + end + + return table.concat(url, "") +end + +function node_visible(node) + if node then + return not ( + (not node.title or #node.title == 0) or + (not node.target or node.hidden == true) or + (type(node.target) == "table" and node.target.type == "firstchild" and + (type(node.nodes) ~= "table" or not next(node.nodes))) + ) + end + return false +end + +function node_childs(node) + local rv = { } + if node then + local k, v + for k, v in util.spairs(node.nodes, + function(a, b) + return (node.nodes[a].order or 100) + < (node.nodes[b].order or 100) + end) + do + if node_visible(v) then + rv[#rv+1] = k + end + end + end + return rv +end + + +function error404(message) + http.status(404, "Not Found") + message = message or "Not Found" + + require("luci.template") + if not util.copcall(luci.template.render, "error404") then + http.prepare_content("text/plain") + http.write(message) + end + return false +end + +function error500(message) + util.perror(message) + if not context.template_header_sent then + http.status(500, "Internal Server Error") + http.prepare_content("text/plain") + http.write(message) + else + require("luci.template") + if not util.copcall(luci.template.render, "error500", {message=message}) then + http.prepare_content("text/plain") + http.write(message) + end + end + return false +end + +function authenticator.htmlauth(validator, accs, default) + local user = http.formvalue("luci_username") + local pass = http.formvalue("luci_password") + + if user and validator(user, pass) then + return user + end + + require("luci.i18n") + require("luci.template") + context.path = {} + http.status(403, "Forbidden") + luci.template.render("sysauth", {duser=default, fuser=user}) + + return false + +end + +function httpdispatch(request, prefix) + http.context.request = request + + local r = {} + context.request = r + + local pathinfo = http.urldecode(request:getenv("PATH_INFO") or "", true) + + if prefix then + for _, node in ipairs(prefix) do + r[#r+1] = node + end + end + + for node in pathinfo:gmatch("[^/]+") do + r[#r+1] = node + end + + local stat, err = util.coxpcall(function() + dispatch(context.request) + end, error500) + + http.close() + + --context._disable_memtrace() +end + +local function require_post_security(target) + if type(target) == "table" then + if type(target.post) == "table" then + local param_name, required_val, request_val + + for param_name, required_val in pairs(target.post) do + request_val = http.formvalue(param_name) + + if (type(required_val) == "string" and + request_val ~= required_val) or + (required_val == true and + (request_val == nil or request_val == "")) + then + return false + end + end + + return true + end + + return (target.post == true) + end + + return false +end + +function test_post_security() + if http.getenv("REQUEST_METHOD") ~= "POST" then + http.status(405, "Method Not Allowed") + http.header("Allow", "POST") + return false + end + + if http.formvalue("token") ~= context.authtoken then + http.status(403, "Forbidden") + luci.template.render("csrftoken") + return false + end + + return true +end + +function dispatch(request) + --context._disable_memtrace = require "luci.debug".trap_memtrace("l") + local ctx = context + ctx.path = request + + local conf = require "luci.config" + assert(conf.main, + "/etc/config/luci seems to be corrupt, unable to find section 'main'") + + local i18n = require "luci.i18n" + local lang = conf.main.lang or "auto" + if lang == "auto" then + local aclang = http.getenv("HTTP_ACCEPT_LANGUAGE") or "" + for lpat in aclang:gmatch("[%w-]+") do + lpat = lpat and lpat:gsub("-", "_") + if conf.languages[lpat] then + lang = lpat + break + end + end + end + if lang == "auto" then + lang = i18n.default + end + i18n.setlanguage(lang) + + local c = ctx.tree + local stat + if not c then + c = createtree() + end + + local track = {} + local args = {} + ctx.args = args + ctx.requestargs = ctx.requestargs or args + local n + local preq = {} + local freq = {} + + for i, s in ipairs(request) do + preq[#preq+1] = s + freq[#freq+1] = s + c = c.nodes[s] + n = i + if not c then + break + end + + util.update(track, c) + + if c.leaf then + break + end + end + + if c and c.leaf then + for j=n+1, #request do + args[#args+1] = request[j] + freq[#freq+1] = request[j] + end + end + + ctx.requestpath = ctx.requestpath or freq + ctx.path = preq + + if track.i18n then + i18n.loadc(track.i18n) + end + + -- Init template engine + if (c and c.index) or not track.notemplate then + local tpl = require("luci.template") + local media = track.mediaurlbase or luci.config.main.mediaurlbase + if not pcall(tpl.Template, "themes/%s/header" % fs.basename(media)) then + media = nil + for name, theme in pairs(luci.config.themes) do + if name:sub(1,1) ~= "." and pcall(tpl.Template, + "themes/%s/header" % fs.basename(theme)) then + media = theme + end + end + assert(media, "No valid theme found") + end + + local function _ifattr(cond, key, val) + if cond then + local env = getfenv(3) + local scope = (type(env.self) == "table") and env.self + if type(val) == "table" then + if not next(val) then + return '' + else + val = util.serialize_json(val) + end + end + return string.format( + ' %s="%s"', tostring(key), + util.pcdata(tostring( val + or (type(env[key]) ~= "function" and env[key]) + or (scope and type(scope[key]) ~= "function" and scope[key]) + or "" )) + ) + else + return '' + end + end + + tpl.context.viewns = setmetatable({ + write = http.write; + include = function(name) tpl.Template(name):render(getfenv(2)) end; + translate = i18n.translate; + translatef = i18n.translatef; + export = function(k, v) if tpl.context.viewns[k] == nil then tpl.context.viewns[k] = v end end; + striptags = util.striptags; + pcdata = util.pcdata; + media = media; + theme = fs.basename(media); + resource = luci.config.main.resourcebase; + ifattr = function(...) return _ifattr(...) end; + attr = function(...) return _ifattr(true, ...) end; + url = build_url; + }, {__index=function(table, key) + if key == "controller" then + return build_url() + elseif key == "REQUEST_URI" then + return build_url(unpack(ctx.requestpath)) + elseif key == "token" then + return ctx.authtoken + else + return rawget(table, key) or _G[key] + end + end}) + end + + track.dependent = (track.dependent ~= false) + assert(not track.dependent or not track.auto, + "Access Violation\nThe page at '" .. table.concat(request, "/") .. "/' " .. + "has no parent node so the access to this location has been denied.\n" .. + "This is a software bug, please report this message at " .. + "https://github.com/openwrt/luci/issues" + ) + + if track.sysauth then + local authen = type(track.sysauth_authenticator) == "function" + and track.sysauth_authenticator + or authenticator[track.sysauth_authenticator] + + local def = (type(track.sysauth) == "string") and track.sysauth + local accs = def and {track.sysauth} or track.sysauth + local sess = ctx.authsession + if not sess then + sess = http.getcookie("sysauth") + sess = sess and sess:match("^[a-f0-9]*$") + end + + local sdat = (util.ubus("session", "get", { ubus_rpc_session = sess }) or { }).values + local user, token + + if sdat then + user = sdat.user + token = sdat.token + else + local eu = http.getenv("HTTP_AUTH_USER") + local ep = http.getenv("HTTP_AUTH_PASS") + if eu and ep and sys.user.checkpasswd(eu, ep) then + authen = function() return eu end + end + end + + if not util.contains(accs, user) then + if authen then + local user, sess = authen(sys.user.checkpasswd, accs, def) + local token + if not user or not util.contains(accs, user) then + return + else + if not sess then + local sdat = util.ubus("session", "create", { timeout = tonumber(luci.config.sauth.sessiontime) }) + if sdat then + token = sys.uniqueid(16) + util.ubus("session", "set", { + ubus_rpc_session = sdat.ubus_rpc_session, + values = { + user = user, + token = token, + section = sys.uniqueid(16) + } + }) + sess = sdat.ubus_rpc_session + end + end + + if sess and token then + http.header("Set-Cookie", 'sysauth=%s; path=%s' %{ sess, build_url() }) + + ctx.authsession = sess + ctx.authtoken = token + ctx.authuser = user + + http.redirect(build_url(unpack(ctx.requestpath))) + end + end + else + http.status(403, "Forbidden") + return + end + else + ctx.authsession = sess + ctx.authtoken = token + ctx.authuser = user + end + end + + if c and require_post_security(c.target) then + if not test_post_security(c) then + return + end + end + + if track.setgroup then + sys.process.setgroup(track.setgroup) + end + + if track.setuser then + sys.process.setuser(track.setuser) + end + + local target = nil + if c then + if type(c.target) == "function" then + target = c.target + elseif type(c.target) == "table" then + target = c.target.target + end + end + + if c and (c.index or type(target) == "function") then + ctx.dispatched = c + ctx.requested = ctx.requested or ctx.dispatched + end + + if c and c.index then + local tpl = require "luci.template" + + if util.copcall(tpl.render, "indexer", {}) then + return true + end + end + + if type(target) == "function" then + util.copcall(function() + local oldenv = getfenv(target) + local module = require(c.module) + local env = setmetatable({}, {__index= + + function(tbl, key) + return rawget(tbl, key) or module[key] or oldenv[key] + end}) + + setfenv(target, env) + end) + + local ok, err + if type(c.target) == "table" then + ok, err = util.copcall(target, c.target, unpack(args)) + else + ok, err = util.copcall(target, unpack(args)) + end + assert(ok, + "Failed to execute " .. (type(c.target) == "function" and "function" or c.target.type or "unknown") .. + " dispatcher target for entry '/" .. table.concat(request, "/") .. "'.\n" .. + "The called action terminated with an exception:\n" .. tostring(err or "(unknown)")) + else + local root = node() + if not root or not root.target then + error404("No root node was registered, this usually happens if no module was installed.\n" .. + "Install luci-mod-admin-full and retry. " .. + "If the module is already installed, try removing the /tmp/luci-indexcache file.") + else + error404("No page is registered at '/" .. table.concat(request, "/") .. "'.\n" .. + "If this url belongs to an extension, make sure it is properly installed.\n" .. + "If the extension was recently installed, try removing the /tmp/luci-indexcache file.") + end + end +end + +function createindex() + local controllers = { } + local base = "%s/controller/" % util.libpath() + local _, path + + for path in (fs.glob("%s*.lua" % base) or function() end) do + controllers[#controllers+1] = path + end + + for path in (fs.glob("%s*/*.lua" % base) or function() end) do + controllers[#controllers+1] = path + end + + if indexcache then + local cachedate = fs.stat(indexcache, "mtime") + if cachedate then + local realdate = 0 + for _, obj in ipairs(controllers) do + local omtime = fs.stat(obj, "mtime") + realdate = (omtime and omtime > realdate) and omtime or realdate + end + + if cachedate > realdate and sys.process.info("uid") == 0 then + assert( + sys.process.info("uid") == fs.stat(indexcache, "uid") + and fs.stat(indexcache, "modestr") == "rw-------", + "Fatal: Indexcache is not sane!" + ) + + index = loadfile(indexcache)() + return index + end + end + end + + index = {} + + for _, path in ipairs(controllers) do + local modname = "luci.controller." .. path:sub(#base+1, #path-4):gsub("/", ".") + local mod = require(modname) + assert(mod ~= true, + "Invalid controller file found\n" .. + "The file '" .. path .. "' contains an invalid module line.\n" .. + "Please verify whether the module name is set to '" .. modname .. + "' - It must correspond to the file path!") + + local idx = mod.index + assert(type(idx) == "function", + "Invalid controller file found\n" .. + "The file '" .. path .. "' contains no index() function.\n" .. + "Please make sure that the controller contains a valid " .. + "index function and verify the spelling!") + + index[modname] = idx + end + + if indexcache then + local f = nixio.open(indexcache, "w", 600) + f:writeall(util.get_bytecode(index)) + f:close() + end +end + +-- Build the index before if it does not exist yet. +function createtree() + if not index then + createindex() + end + + local ctx = context + local tree = {nodes={}, inreq=true} + local modi = {} + + ctx.treecache = setmetatable({}, {__mode="v"}) + ctx.tree = tree + ctx.modifiers = modi + + -- Load default translation + require "luci.i18n".loadc("base") + + local scope = setmetatable({}, {__index = luci.dispatcher}) + + for k, v in pairs(index) do + scope._NAME = k + setfenv(v, scope) + v() + end + + local function modisort(a,b) + return modi[a].order < modi[b].order + end + + for _, v in util.spairs(modi, modisort) do + scope._NAME = v.module + setfenv(v.func, scope) + v.func() + end + + return tree +end + +function modifier(func, order) + context.modifiers[#context.modifiers+1] = { + func = func, + order = order or 0, + module + = getfenv(2)._NAME + } +end + +function assign(path, clone, title, order) + local obj = node(unpack(path)) + obj.nodes = nil + obj.module = nil + + obj.title = title + obj.order = order + + setmetatable(obj, {__index = _create_node(clone)}) + + return obj +end + +function entry(path, target, title, order) + local c = node(unpack(path)) + + c.target = target + c.title = title + c.order = order + c.module = getfenv(2)._NAME + + return c +end + +-- enabling the node. +function get(...) + return _create_node({...}) +end + +function node(...) + local c = _create_node({...}) + + c.module = getfenv(2)._NAME + c.auto = nil + + return c +end + +function _create_node(path) + if #path == 0 then + return context.tree + end + + local name = table.concat(path, ".") + local c = context.treecache[name] + + if not c then + local last = table.remove(path) + local parent = _create_node(path) + + c = {nodes={}, auto=true} + -- the node is "in request" if the request path matches + -- at least up to the length of the node path + if parent.inreq and context.path[#path+1] == last then + c.inreq = true + end + parent.nodes[last] = c + context.treecache[name] = c + end + return c +end + +-- Subdispatchers -- + +function _firstchild() + local path = { unpack(context.path) } + local name = table.concat(path, ".") + local node = context.treecache[name] + + local lowest + if node and node.nodes and next(node.nodes) then + local k, v + for k, v in pairs(node.nodes) do + if not lowest or + (v.order or 100) < (node.nodes[lowest].order or 100) + then + lowest = k + end + end + end + + assert(lowest ~= nil, + "The requested node contains no childs, unable to redispatch") + + path[#path+1] = lowest + dispatch(path) +end + +function firstchild() + return { type = "firstchild", target = _firstchild } +end + +function alias(...) + local req = {...} + return function(...) + for _, r in ipairs({...}) do + req[#req+1] = r + end + + dispatch(req) + end +end + +function rewrite(n, ...) + local req = {...} + return function(...) + local dispatched = util.clone(context.dispatched) + + for i=1,n do + table.remove(dispatched, 1) + end + + for i, r in ipairs(req) do + table.insert(dispatched, i, r) + end + + for _, r in ipairs({...}) do + dispatched[#dispatched+1] = r + end + + dispatch(dispatched) + end +end + + +local function _call(self, ...) + local func = getfenv()[self.name] + assert(func ~= nil, + 'Cannot resolve function "' .. self.name .. '". Is it misspelled or local?') + + assert(type(func) == "function", + 'The symbol "' .. self.name .. '" does not refer to a function but data ' .. + 'of type "' .. type(func) .. '".') + + if #self.argv > 0 then + return func(unpack(self.argv), ...) + else + return func(...) + end +end + +function call(name, ...) + return {type = "call", argv = {...}, name = name, target = _call} +end + +function post_on(params, name, ...) + return { + type = "call", + post = params, + argv = { ... }, + name = name, + target = _call + } +end + +function post(...) + return post_on(true, ...) +end + + +local _template = function(self, ...) + require "luci.template".render(self.view) +end + +function template(name) + return {type = "template", view = name, target = _template} +end + + +local function _cbi(self, ...) + local cbi = require "luci.cbi" + local tpl = require "luci.template" + local http = require "luci.http" + + local config = self.config or {} + local maps = cbi.load(self.model, ...) + + local state = nil + + for i, res in ipairs(maps) do + res.flow = config + local cstate = res:parse() + if cstate and (not state or cstate < state) then + state = cstate + end + end + + local function _resolve_path(path) + return type(path) == "table" and build_url(unpack(path)) or path + end + + if config.on_valid_to and state and state > 0 and state < 2 then + http.redirect(_resolve_path(config.on_valid_to)) + return + end + + if config.on_changed_to and state and state > 1 then + http.redirect(_resolve_path(config.on_changed_to)) + return + end + + if config.on_success_to and state and state > 0 then + http.redirect(_resolve_path(config.on_success_to)) + return + end + + if config.state_handler then + if not config.state_handler(state, maps) then + return + end + end + + http.header("X-CBI-State", state or 0) + + if not config.noheader then + tpl.render("cbi/header", {state = state}) + end + + local redirect + local messages + local applymap = false + local pageaction = true + local parsechain = { } + + for i, res in ipairs(maps) do + if res.apply_needed and res.parsechain then + local c + for _, c in ipairs(res.parsechain) do + parsechain[#parsechain+1] = c + end + applymap = true + end + + if res.redirect then + redirect = redirect or res.redirect + end + + if res.pageaction == false then + pageaction = false + end + + if res.message then + messages = messages or { } + messages[#messages+1] = res.message + end + end + + for i, res in ipairs(maps) do + res:render({ + firstmap = (i == 1), + applymap = applymap, + redirect = redirect, + messages = messages, + pageaction = pageaction, + parsechain = parsechain + }) + end + + if not config.nofooter then + tpl.render("cbi/footer", { + flow = config, + pageaction = pageaction, + redirect = redirect, + state = state, + autoapply = config.autoapply + }) + end +end + +function cbi(model, config) + return { + type = "cbi", + post = { ["cbi.submit"] = "1" }, + config = config, + model = model, + target = _cbi + } +end + + +local function _arcombine(self, ...) + local argv = {...} + local target = #argv > 0 and self.targets[2] or self.targets[1] + setfenv(target.target, self.env) + target:target(unpack(argv)) +end + +function arcombine(trg1, trg2) + return {type = "arcombine", env = getfenv(), target = _arcombine, targets = {trg1, trg2}} +end + + +local function _form(self, ...) + local cbi = require "luci.cbi" + local tpl = require "luci.template" + local http = require "luci.http" + + local maps = luci.cbi.load(self.model, ...) + local state = nil + + for i, res in ipairs(maps) do + local cstate = res:parse() + if cstate and (not state or cstate < state) then + state = cstate + end + end + + http.header("X-CBI-State", state or 0) + tpl.render("header") + for i, res in ipairs(maps) do + res:render() + end + tpl.render("footer") +end + +function form(model) + return { + type = "cbi", + post = { ["cbi.submit"] = "1" }, + model = model, + target = _form + } +end + +translate = i18n.translate + +-- This function does not actually translate the given argument but +-- is used by build/i18n-scan.pl to find translatable entries. +function _(text) + return text +end diff --git a/feeds/luci/modules/luci-base/luasrc/dispatcher.luadoc b/feeds/luci/modules/luci-base/luasrc/dispatcher.luadoc new file mode 100644 index 0000000..743463c --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/dispatcher.luadoc @@ -0,0 +1,220 @@ +---[[ +LuCI web dispatcher. +]] +module "luci.dispatcher" + +---[[ +Build the URL relative to the server webroot from given virtual path. + +@class function +@name build_url +@param ... Virtual path +@return Relative URL +]] + +---[[ +Check whether a dispatch node shall be visible + +@class function +@name node_visible +@param node Dispatch node +@return Boolean indicating whether the node should be visible +]] + +---[[ +Return a sorted table of visible childs within a given node + +@class function +@name node_childs +@param node Dispatch node +@return Ordered table of child node names +]] + +---[[ +Send a 404 error code and render the "error404" template if available. + +@class function +@name error404 +@param message Custom error message (optional) +@return false +]] + +---[[ +Send a 500 error code and render the "error500" template if available. + +@class function +@name error500 +@param message Custom error message (optional)# +@return false +]] + +---[[ +Dispatch an HTTP request. + +@class function +@name httpdispatch +@param request LuCI HTTP Request object +]] + +---[[ +Dispatches a LuCI virtual path. + +@class function +@name dispatch +@param request Virtual path +]] + +---[[ +Generate the dispatching index using the native file-cache based strategy. + + +@class function +@name createindex +]] + +---[[ +Create the dispatching tree from the index. + +Build the index before if it does not exist yet. + +@class function +@name createtree +]] + +---[[ +Register a tree modifier. + +@class function +@name modifier +@param func Modifier function +@param order Modifier order value (optional) +]] + +---[[ +Clone a node of the dispatching tree to another position. + +@class function +@name assign +@param path Virtual path destination +@param clone Virtual path source +@param title Destination node title (optional) +@param order Destination node order value (optional) +@return Dispatching tree node +]] + +---[[ +Create a new dispatching node and define common parameters. + +@class function +@name entry +@param path Virtual path +@param target Target function to call when dispatched. +@param title Destination node title +@param order Destination node order value (optional) +@return Dispatching tree node +]] + +---[[ +Fetch or create a dispatching node without setting the target module or + +enabling the node. +@class function +@name get +@param ... Virtual path +@return Dispatching tree node +]] + +---[[ +Fetch or create a new dispatching node. + +@class function +@name node +@param ... Virtual path +@return Dispatching tree node +]] + +---[[ +Alias the first (lowest order) page automatically + + +@class function +@name firstchild +]] + +---[[ +Create a redirect to another dispatching node. + +@class function +@name alias +@param ... Virtual path destination +]] + +---[[ +Rewrite the first x path values of the request. + +@class function +@name rewrite +@param n Number of path values to replace +@param ... Virtual path to replace removed path values with +]] + +---[[ +Create a function-call dispatching target. + +@class function +@name call +@param name Target function of local controller +@param ... Additional parameters passed to the function +]] + +---[[ +Create a template render dispatching target. + +@class function +@name template +@param name Template to be rendered +]] + +---[[ +Create a CBI model dispatching target. + +@class function +@name cbi +@param model CBI model to be rendered +]] + +---[[ +Create a combined dispatching target for non argv and argv requests. + +@class function +@name arcombine +@param trg1 Overview Target +@param trg2 Detail Target +]] + +---[[ +Create a CBI form model dispatching target. + +@class function +@name form +@param model CBI form model tpo be rendered +]] + +---[[ +Access the luci.i18n translate() api. + +@class function +@name translate +@param text Text to translate +]] + +---[[ +No-op function used to mark translation entries for menu labels. + +This function does not actually translate the given argument but +is used by build/i18n-scan.pl to find translatable entries. + +@class function +@name _ +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/http.lua b/feeds/luci/modules/luci-base/luasrc/http.lua new file mode 100644 index 0000000..8795dfc --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/http.lua @@ -0,0 +1,268 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local ltn12 = require "luci.ltn12" +local protocol = require "luci.http.protocol" +local util = require "luci.util" +local string = require "string" +local coroutine = require "coroutine" +local table = require "table" + +local ipairs, pairs, next, type, tostring, error = + ipairs, pairs, next, type, tostring, error + +module "luci.http" + +context = util.threadlocal() + +Request = util.class() +function Request.__init__(self, env, sourcein, sinkerr) + self.input = sourcein + self.error = sinkerr + + + -- File handler nil by default to let .content() work + self.filehandler = nil + + -- HTTP-Message table + self.message = { + env = env, + headers = {}, + params = protocol.urldecode_params(env.QUERY_STRING or ""), + } + + self.parsed_input = false +end + +function Request.formvalue(self, name, noparse) + if not noparse and not self.parsed_input then + self:_parse_input() + end + + if name then + return self.message.params[name] + else + return self.message.params + end +end + +function Request.formvaluetable(self, prefix) + local vals = {} + prefix = prefix and prefix .. "." or "." + + if not self.parsed_input then + self:_parse_input() + end + + local void = self.message.params[nil] + for k, v in pairs(self.message.params) do + if k:find(prefix, 1, true) == 1 then + vals[k:sub(#prefix + 1)] = tostring(v) + end + end + + return vals +end + +function Request.content(self) + if not self.parsed_input then + self:_parse_input() + end + + return self.message.content, self.message.content_length +end + +function Request.getcookie(self, name) + local c = string.gsub(";" .. (self:getenv("HTTP_COOKIE") or "") .. ";", "%s*;%s*", ";") + local p = ";" .. name .. "=(.-);" + local i, j, value = c:find(p) + return value and urldecode(value) +end + +function Request.getenv(self, name) + if name then + return self.message.env[name] + else + return self.message.env + end +end + +function Request.setfilehandler(self, callback) + self.filehandler = callback + + -- If input has already been parsed then any files are either in temporary files + -- or are in self.message.params[key] + if self.parsed_input then + for param, value in pairs(self.message.params) do + repeat + -- We're only interested in files + if (not value["file"]) then break end + -- If we were able to write to temporary file + if (value["fd"]) then + fd = value["fd"] + local eof = false + repeat + filedata = fd:read(1024) + if (filedata:len() < 1024) then + eof = true + end + callback({ name=value["name"], file=value["file"] }, filedata, eof) + until (eof) + fd:close() + value["fd"] = nil + -- We had to read into memory + else + -- There should only be one numbered value in table - the data + for k, v in ipairs(value) do + callback({ name=value["name"], file=value["file"] }, v, true) + end + end + until true + end + end +end + +function Request._parse_input(self) + protocol.parse_message_body( + self.input, + self.message, + self.filehandler + ) + self.parsed_input = true +end + +function close() + if not context.eoh then + context.eoh = true + coroutine.yield(3) + end + + if not context.closed then + context.closed = true + coroutine.yield(5) + end +end + +function content() + return context.request:content() +end + +function formvalue(name, noparse) + return context.request:formvalue(name, noparse) +end + +function formvaluetable(prefix) + return context.request:formvaluetable(prefix) +end + +function getcookie(name) + return context.request:getcookie(name) +end + +-- or the environment table itself. +function getenv(name) + return context.request:getenv(name) +end + +function setfilehandler(callback) + return context.request:setfilehandler(callback) +end + +function header(key, value) + if not context.headers then + context.headers = {} + end + context.headers[key:lower()] = value + coroutine.yield(2, key, value) +end + +function prepare_content(mime) + if not context.headers or not context.headers["content-type"] then + if mime == "application/xhtml+xml" then + if not getenv("HTTP_ACCEPT") or + not getenv("HTTP_ACCEPT"):find("application/xhtml+xml", nil, true) then + mime = "text/html; charset=UTF-8" + end + header("Vary", "Accept") + end + header("Content-Type", mime) + end +end + +function source() + return context.request.input +end + +function status(code, message) + code = code or 200 + message = message or "OK" + context.status = code + coroutine.yield(1, code, message) +end + +-- This function is as a valid LTN12 sink. +-- If the content chunk is nil this function will automatically invoke close. +function write(content, src_err) + if not content then + if src_err then + error(src_err) + else + close() + end + return true + elseif #content == 0 then + return true + else + if not context.eoh then + if not context.status then + status() + end + if not context.headers or not context.headers["content-type"] then + header("Content-Type", "text/html; charset=utf-8") + end + if not context.headers["cache-control"] then + header("Cache-Control", "no-cache") + header("Expires", "0") + end + + + context.eoh = true + coroutine.yield(3) + end + coroutine.yield(4, content) + return true + end +end + +function splice(fd, size) + coroutine.yield(6, fd, size) +end + +function redirect(url) + if url == "" then url = "/" end + status(302, "Found") + header("Location", url) + close() +end + +function build_querystring(q) + local s = { "?" } + + for k, v in pairs(q) do + if #s > 1 then s[#s+1] = "&" end + + s[#s+1] = urldecode(k) + s[#s+1] = "=" + s[#s+1] = urldecode(v) + end + + return table.concat(s, "") +end + +urldecode = protocol.urldecode + +urlencode = protocol.urlencode + +function write_json(x) + util.serialize_json(x, write) +end diff --git a/feeds/luci/modules/luci-base/luasrc/http.luadoc b/feeds/luci/modules/luci-base/luasrc/http.luadoc new file mode 100644 index 0000000..8a325db --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/http.luadoc @@ -0,0 +1,165 @@ +---[[ +LuCI Web Framework high-level HTTP functions. +]] +module "luci.http" + +---[[ +Close the HTTP-Connection. + + +@class function +@name close +]] + +---[[ +Return the request content if the request was of unknown type. + +@class function +@name content +@return HTTP request body +@return HTTP request body length +]] + +---[[ +Get a certain HTTP input value or a table of all input values. + +@class function +@name formvalue +@param name Name of the GET or POST variable to fetch +@param noparse Don't parse POST data before getting the value +@return HTTP input value or table of all input value +]] + +---[[ +Get a table of all HTTP input values with a certain prefix. + +@class function +@name formvaluetable +@param prefix Prefix +@return Table of all HTTP input values with given prefix +]] + +---[[ +Get the value of a certain HTTP-Cookie. + +@class function +@name getcookie +@param name Cookie Name +@return String containing cookie data +]] + +---[[ +Get the value of a certain HTTP environment variable + +or the environment table itself. +@class function +@name getenv +@param name Environment variable +@return HTTP environment value or environment table +]] + +---[[ +Set a handler function for incoming user file uploads. + +@class function +@name setfilehandler +@param callback Handler function +]] + +---[[ +Send a HTTP-Header. + +@class function +@name header +@param key Header key +@param value Header value +]] + +---[[ +Set the mime type of following content data. + +@class function +@name prepare_content +@param mime Mimetype of following content +]] + +---[[ +Get the RAW HTTP input source + +@class function +@name source +@return HTTP LTN12 source +]] + +---[[ +Set the HTTP status code and status message. + +@class function +@name status +@param code Status code +@param message Status message +]] + +---[[ +Send a chunk of content data to the client. + +This function is as a valid LTN12 sink. +If the content chunk is nil this function will automatically invoke close. +@class function +@name write +@param content Content chunk +@param src_err Error object from source (optional) +@see close +]] + +---[[ +Splice data from a filedescriptor to the client. + +@class function +@name splice +@param fp File descriptor +@param size Bytes to splice (optional) +]] + +---[[ +Redirects the client to a new URL and closes the connection. + +@class function +@name redirect +@param url Target URL +]] + +---[[ +Create a querystring out of a table of key - value pairs. + +@class function +@name build_querystring +@param table Query string source table +@return Encoded HTTP query string +]] + +---[[ +Return the URL-decoded equivalent of a string. + +@param str URL-encoded string +@param no_plus Don't decode + to " " +@return URL-decoded string +@see urlencode +]] + +---[[ +Return the URL-encoded equivalent of a string. + +@param str Source string +@return URL-encoded string +@see urldecode +]] + +---[[ +Send the given data as JSON encoded string. + +@class function +@name write_json +@param data Data to send +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/http/protocol.lua b/feeds/luci/modules/luci-base/luasrc/http/protocol.lua new file mode 100644 index 0000000..061c6ad --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/http/protocol.lua @@ -0,0 +1,649 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +-- This class contains several functions useful for http message- and content +-- decoding and to retrive form data from raw http messages. +module("luci.http.protocol", package.seeall) + +local ltn12 = require("luci.ltn12") + +HTTP_MAX_CONTENT = 1024*8 -- 8 kB maximum content size + +-- the "+" sign to " " - and return the decoded string. +function urldecode( str, no_plus ) + + local function __chrdec( hex ) + return string.char( tonumber( hex, 16 ) ) + end + + if type(str) == "string" then + if not no_plus then + str = str:gsub( "+", " " ) + end + + str = str:gsub( "%%([a-fA-F0-9][a-fA-F0-9])", __chrdec ) + end + + return str +end + +-- from given url or string. Returns a table with urldecoded values. +-- Simple parameters are stored as string values associated with the parameter +-- name within the table. Parameters with multiple values are stored as array +-- containing the corresponding values. +function urldecode_params( url, tbl ) + + local params = tbl or { } + + if url:find("?") then + url = url:gsub( "^.+%?([^?]+)", "%1" ) + end + + for pair in url:gmatch( "[^&;]+" ) do + + -- find key and value + local key = urldecode( pair:match("^([^=]+)") ) + local val = urldecode( pair:match("^[^=]+=(.+)$") ) + + -- store + if type(key) == "string" and key:len() > 0 then + if type(val) ~= "string" then val = "" end + + if not params[key] then + params[key] = val + elseif type(params[key]) ~= "table" then + params[key] = { params[key], val } + else + table.insert( params[key], val ) + end + end + end + + return params +end + +function urlencode( str ) + + local function __chrenc( chr ) + return string.format( + "%%%02x", string.byte( chr ) + ) + end + + if type(str) == "string" then + str = str:gsub( + "([^a-zA-Z0-9$_%-%.%~])", + __chrenc + ) + end + + return str +end + +-- separated by "&". Tables are encoded as parameters with multiple values by +-- repeating the parameter name with each value. +function urlencode_params( tbl ) + local enc = "" + + for k, v in pairs(tbl) do + if type(v) == "table" then + for i, v2 in ipairs(v) do + enc = enc .. ( #enc > 0 and "&" or "" ) .. + urlencode(k) .. "=" .. urlencode(v2) + end + else + enc = enc .. ( #enc > 0 and "&" or "" ) .. + urlencode(k) .. "=" .. urlencode(v) + end + end + + return enc +end + +-- (Internal function) +-- Initialize given parameter and coerce string into table when the parameter +-- already exists. +local function __initval( tbl, key ) + if tbl[key] == nil then + tbl[key] = "" + elseif type(tbl[key]) == "string" then + tbl[key] = { tbl[key], "" } + else + table.insert( tbl[key], "" ) + end +end + +-- (Internal function) +-- Initialize given file parameter. +local function __initfileval( tbl, key, filename, fd ) + if tbl[key] == nil then + tbl[key] = { file=filename, fd=fd, name=key, "" } + else + table.insert( tbl[key], "" ) + end +end + +-- (Internal function) +-- Append given data to given parameter, either by extending the string value +-- or by appending it to the last string in the parameter's value table. +local function __appendval( tbl, key, chunk ) + if type(tbl[key]) == "table" then + tbl[key][#tbl[key]] = tbl[key][#tbl[key]] .. chunk + else + tbl[key] = tbl[key] .. chunk + end +end + +-- (Internal function) +-- Finish the value of given parameter, either by transforming the string value +-- or - in the case of multi value parameters - the last element in the +-- associated values table. +local function __finishval( tbl, key, handler ) + if handler then + if type(tbl[key]) == "table" then + tbl[key][#tbl[key]] = handler( tbl[key][#tbl[key]] ) + else + tbl[key] = handler( tbl[key] ) + end + end +end + + +-- Table of our process states +local process_states = { } + +-- Extract "magic", the first line of a http message. +-- Extracts the message type ("get", "post" or "response"), the requested uri +-- or the status code if the line descripes a http response. +process_states['magic'] = function( msg, chunk, err ) + + if chunk ~= nil then + -- ignore empty lines before request + if #chunk == 0 then + return true, nil + end + + -- Is it a request? + local method, uri, http_ver = chunk:match("^([A-Z]+) ([^ ]+) HTTP/([01]%.[019])$") + + -- Yup, it is + if method then + + msg.type = "request" + msg.request_method = method:lower() + msg.request_uri = uri + msg.http_version = tonumber( http_ver ) + msg.headers = { } + + -- We're done, next state is header parsing + return true, function( chunk ) + return process_states['headers']( msg, chunk ) + end + + -- Is it a response? + else + + local http_ver, code, message = chunk:match("^HTTP/([01]%.[019]) ([0-9]+) ([^\r\n]+)$") + + -- Is a response + if code then + + msg.type = "response" + msg.status_code = code + msg.status_message = message + msg.http_version = tonumber( http_ver ) + msg.headers = { } + + -- We're done, next state is header parsing + return true, function( chunk ) + return process_states['headers']( msg, chunk ) + end + end + end + end + + -- Can't handle it + return nil, "Invalid HTTP message magic" +end + + +-- Extract headers from given string. +process_states['headers'] = function( msg, chunk ) + + if chunk ~= nil then + + -- Look for a valid header format + local hdr, val = chunk:match( "^([A-Za-z][A-Za-z0-9%-_]+): +(.+)$" ) + + if type(hdr) == "string" and hdr:len() > 0 and + type(val) == "string" and val:len() > 0 + then + msg.headers[hdr] = val + + -- Valid header line, proceed + return true, nil + + elseif #chunk == 0 then + -- Empty line, we won't accept data anymore + return false, nil + else + -- Junk data + return nil, "Invalid HTTP header received" + end + else + return nil, "Unexpected EOF" + end +end + + +-- data line by line with the trailing \r\n stripped of. +function header_source( sock ) + return ltn12.source.simplify( function() + + local chunk, err, part = sock:receive("*l") + + -- Line too long + if chunk == nil then + if err ~= "timeout" then + return nil, part + and "Line exceeds maximum allowed length" + or "Unexpected EOF" + else + return nil, err + end + + -- Line ok + elseif chunk ~= nil then + + -- Strip trailing CR + chunk = chunk:gsub("\r$","") + + return chunk, nil + end + end ) +end + +-- Content-Type. Stores all extracted data associated with its parameter name +-- in the params table withing the given message object. Multiple parameter +-- values are stored as tables, ordinary ones as strings. +-- If an optional file callback function is given then it is feeded with the +-- file contents chunk by chunk and only the extracted file name is stored +-- within the params table. The callback function will be called subsequently +-- with three arguments: +-- o Table containing decoded (name, file) and raw (headers) mime header data +-- o String value containing a chunk of the file data +-- o Boolean which indicates wheather the current chunk is the last one (eof) +function mimedecode_message_body( src, msg, filecb ) + + if msg and msg.env.CONTENT_TYPE then + msg.mime_boundary = msg.env.CONTENT_TYPE:match("^multipart/form%-data; boundary=(.+)$") + end + + if not msg.mime_boundary then + return nil, "Invalid Content-Type found" + end + + + local tlen = 0 + local inhdr = false + local field = nil + local store = nil + local lchunk = nil + + local function parse_headers( chunk, field ) + + local stat + repeat + chunk, stat = chunk:gsub( + "^([A-Z][A-Za-z0-9%-_]+): +([^\r\n]+)\r\n", + function(k,v) + field.headers[k] = v + return "" + end + ) + until stat == 0 + + chunk, stat = chunk:gsub("^\r\n","") + + -- End of headers + if stat > 0 then + if field.headers["Content-Disposition"] then + if field.headers["Content-Disposition"]:match("^form%-data; ") then + field.name = field.headers["Content-Disposition"]:match('name="(.-)"') + field.file = field.headers["Content-Disposition"]:match('filename="(.+)"$') + end + end + + if not field.headers["Content-Type"] then + field.headers["Content-Type"] = "text/plain" + end + + if field.name and field.file and filecb then + __initval( msg.params, field.name ) + __appendval( msg.params, field.name, field.file ) + + store = filecb + elseif field.name and field.file then + local nxf = require "nixio" + local fd = nxf.mkstemp(field.name) + __initfileval ( msg.params, field.name, field.file, fd ) + if fd then + store = function(hdr, buf, eof) + fd:write(buf) + if (eof) then + fd:seek(0, "set") + end + end + else + store = function( hdr, buf, eof ) + __appendval( msg.params, field.name, buf ) + end + end + elseif field.name then + __initval( msg.params, field.name ) + + store = function( hdr, buf, eof ) + __appendval( msg.params, field.name, buf ) + end + else + store = nil + end + + return chunk, true + end + + return chunk, false + end + + local function snk( chunk ) + + tlen = tlen + ( chunk and #chunk or 0 ) + + if msg.env.CONTENT_LENGTH and tlen > tonumber(msg.env.CONTENT_LENGTH) + 2 then + return nil, "Message body size exceeds Content-Length" + end + + if chunk and not lchunk then + lchunk = "\r\n" .. chunk + + elseif lchunk then + local data = lchunk .. ( chunk or "" ) + local spos, epos, found + + repeat + spos, epos = data:find( "\r\n--" .. msg.mime_boundary .. "\r\n", 1, true ) + + if not spos then + spos, epos = data:find( "\r\n--" .. msg.mime_boundary .. "--\r\n", 1, true ) + end + + + if spos then + local predata = data:sub( 1, spos - 1 ) + + if inhdr then + predata, eof = parse_headers( predata, field ) + + if not eof then + return nil, "Invalid MIME section header" + elseif not field.name then + return nil, "Invalid Content-Disposition header" + end + end + + if store then + store( field, predata, true ) + end + + + field = { headers = { } } + found = found or true + + data, eof = parse_headers( data:sub( epos + 1, #data ), field ) + inhdr = not eof + end + until not spos + + if found then + -- We found at least some boundary. Save + -- the unparsed remaining data for the + -- next chunk. + lchunk, data = data, nil + else + -- There was a complete chunk without a boundary. Parse it as headers or + -- append it as data, depending on our current state. + if inhdr then + lchunk, eof = parse_headers( data, field ) + inhdr = not eof + else + -- We're inside data, so append the data. Note that we only append + -- lchunk, not all of data, since there is a chance that chunk + -- contains half a boundary. Assuming that each chunk is at least the + -- boundary in size, this should prevent problems + store( field, lchunk, false ) + lchunk, chunk = chunk, nil + end + end + end + + return true + end + + return ltn12.pump.all( src, snk ) +end + +-- Content-Type. Stores all extracted data associated with its parameter name +-- in the params table withing the given message object. Multiple parameter +-- values are stored as tables, ordinary ones as strings. +function urldecode_message_body( src, msg ) + + local tlen = 0 + local lchunk = nil + + local function snk( chunk ) + + tlen = tlen + ( chunk and #chunk or 0 ) + + if msg.env.CONTENT_LENGTH and tlen > tonumber(msg.env.CONTENT_LENGTH) + 2 then + return nil, "Message body size exceeds Content-Length" + elseif tlen > HTTP_MAX_CONTENT then + return nil, "Message body size exceeds maximum allowed length" + end + + if not lchunk and chunk then + lchunk = chunk + + elseif lchunk then + local data = lchunk .. ( chunk or "&" ) + local spos, epos + + repeat + spos, epos = data:find("^.-[;&]") + + if spos then + local pair = data:sub( spos, epos - 1 ) + local key = pair:match("^(.-)=") + local val = pair:match("=([^%s]*)%s*$") + + if key and #key > 0 then + __initval( msg.params, key ) + __appendval( msg.params, key, val ) + __finishval( msg.params, key, urldecode ) + end + + data = data:sub( epos + 1, #data ) + end + until not spos + + lchunk = data + end + + return true + end + + return ltn12.pump.all( src, snk ) +end + +-- version, message headers and resulting CGI environment variables from the +-- given ltn12 source. +function parse_message_header( src ) + + local ok = true + local msg = { } + + local sink = ltn12.sink.simplify( + function( chunk ) + return process_states['magic']( msg, chunk ) + end + ) + + -- Pump input data... + while ok do + + -- get data + ok, err = ltn12.pump.step( src, sink ) + + -- error + if not ok and err then + return nil, err + + -- eof + elseif not ok then + + -- Process get parameters + if ( msg.request_method == "get" or msg.request_method == "post" ) and + msg.request_uri:match("?") + then + msg.params = urldecode_params( msg.request_uri ) + else + msg.params = { } + end + + -- Populate common environment variables + msg.env = { + CONTENT_LENGTH = msg.headers['Content-Length']; + CONTENT_TYPE = msg.headers['Content-Type'] or msg.headers['Content-type']; + REQUEST_METHOD = msg.request_method:upper(); + REQUEST_URI = msg.request_uri; + SCRIPT_NAME = msg.request_uri:gsub("?.+$",""); + SCRIPT_FILENAME = ""; -- XXX implement me + SERVER_PROTOCOL = "HTTP/" .. string.format("%.1f", msg.http_version); + QUERY_STRING = msg.request_uri:match("?") + and msg.request_uri:gsub("^.+?","") or "" + } + + -- Populate HTTP_* environment variables + for i, hdr in ipairs( { + 'Accept', + 'Accept-Charset', + 'Accept-Encoding', + 'Accept-Language', + 'Connection', + 'Cookie', + 'Host', + 'Referer', + 'User-Agent', + } ) do + local var = 'HTTP_' .. hdr:upper():gsub("%-","_") + local val = msg.headers[hdr] + + msg.env[var] = val + end + end + end + + return msg +end + +-- This function will examine the Content-Type within the given message object +-- to select the appropriate content decoder. +-- Currently the application/x-www-urlencoded and application/form-data +-- mime types are supported. If the encountered content encoding can't be +-- handled then the whole message body will be stored unaltered as "content" +-- property within the given message object. +function parse_message_body( src, msg, filecb ) + -- Is it multipart/mime ? + if msg.env.REQUEST_METHOD == "POST" and msg.env.CONTENT_TYPE and + msg.env.CONTENT_TYPE:match("^multipart/form%-data") + then + + return mimedecode_message_body( src, msg, filecb ) + + -- Is it application/x-www-form-urlencoded ? + elseif msg.env.REQUEST_METHOD == "POST" and msg.env.CONTENT_TYPE and + msg.env.CONTENT_TYPE:match("^application/x%-www%-form%-urlencoded") + then + return urldecode_message_body( src, msg, filecb ) + + + -- Unhandled encoding + -- If a file callback is given then feed it chunk by chunk, else + -- store whole buffer in message.content + else + + local sink + + -- If we have a file callback then feed it + if type(filecb) == "function" then + local meta = { + name = "raw", + encoding = msg.env.CONTENT_TYPE + } + sink = function( chunk ) + if chunk then + return filecb(meta, chunk, false) + else + return filecb(meta, nil, true) + end + end + -- ... else append to .content + else + msg.content = "" + msg.content_length = 0 + + sink = function( chunk ) + if chunk then + if ( msg.content_length + #chunk ) <= HTTP_MAX_CONTENT then + msg.content = msg.content .. chunk + msg.content_length = msg.content_length + #chunk + return true + else + return nil, "POST data exceeds maximum allowed length" + end + end + return true + end + end + + -- Pump data... + while true do + local ok, err = ltn12.pump.step( src, sink ) + + if not ok and err then + return nil, err + elseif not ok then -- eof + return true + end + end + + return true + end +end + +statusmsg = { + [200] = "OK", + [206] = "Partial Content", + [301] = "Moved Permanently", + [302] = "Found", + [304] = "Not Modified", + [400] = "Bad Request", + [403] = "Forbidden", + [404] = "Not Found", + [405] = "Method Not Allowed", + [408] = "Request Time-out", + [411] = "Length Required", + [412] = "Precondition Failed", + [416] = "Requested range not satisfiable", + [500] = "Internal Server Error", + [503] = "Server Unavailable", +} diff --git a/feeds/luci/modules/luci-base/luasrc/http/protocol.luadoc b/feeds/luci/modules/luci-base/luasrc/http/protocol.luadoc new file mode 100644 index 0000000..67a60d9 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/http/protocol.luadoc @@ -0,0 +1,142 @@ +---[[ +LuCI http protocol class. + +This class contains several functions useful for http message- and content +decoding and to retrive form data from raw http messages. +]] +module "luci.http.protocol" + +---[[ +Decode an urlencoded string - optionally without decoding + +the "+" sign to " " - and return the decoded string. +@class function +@name urldecode +@param str Input string in x-www-urlencoded format +@param no_plus Don't decode "+" signs to spaces +@return The decoded string +@see urlencode +]] + +---[[ +Extract and split urlencoded data pairs, separated bei either "&" or ";" + +from given url or string. Returns a table with urldecoded values. +Simple parameters are stored as string values associated with the parameter +name within the table. Parameters with multiple values are stored as array +containing the corresponding values. +@class function +@name urldecode_params +@param url The url or string which contains x-www-urlencoded form data +@param tbl Use the given table for storing values (optional) +@return Table containing the urldecoded parameters +@see urlencode_params +]] + +---[[ +Encode given string to x-www-urlencoded format. + +@class function +@name urlencode +@param str String to encode +@return String containing the encoded data +@see urldecode +]] + +---[[ +Encode each key-value-pair in given table to x-www-urlencoded format, + +separated by "&". Tables are encoded as parameters with multiple values by +repeating the parameter name with each value. +@class function +@name urlencode_params +@param tbl Table with the values +@return String containing encoded values +@see urldecode_params +]] + +---[[ +Creates a ltn12 source from the given socket. The source will return it's + +data line by line with the trailing \r\n stripped of. +@class function +@name header_source +@param sock Readable network socket +@return Ltn12 source function +]] + +---[[ +Decode a mime encoded http message body with multipart/form-data + +Content-Type. Stores all extracted data associated with its parameter name +in the params table withing the given message object. Multiple parameter +values are stored as tables, ordinary ones as strings. +If an optional file callback function is given then it is feeded with the +file contents chunk by chunk and only the extracted file name is stored +within the params table. The callback function will be called subsequently +with three arguments: + o Table containing decoded (name, file) and raw (headers) mime header data + o String value containing a chunk of the file data + o Boolean which indicates wheather the current chunk is the last one (eof) +@class function +@name mimedecode_message_body +@param src Ltn12 source function +@param msg HTTP message object +@param filecb File callback function (optional) +@return Value indicating successful operation (not nil means "ok") +@return String containing the error if unsuccessful +@see parse_message_header +]] + +---[[ +Decode an urlencoded http message body with application/x-www-urlencoded + +Content-Type. Stores all extracted data associated with its parameter name +in the params table withing the given message object. Multiple parameter +values are stored as tables, ordinary ones as strings. +@class function +@name urldecode_message_body +@param src Ltn12 source function +@param msg HTTP message object +@return Value indicating successful operation (not nil means "ok") +@return String containing the error if unsuccessful +@see parse_message_header +]] + +---[[ +Try to extract an http message header including information like protocol + +version, message headers and resulting CGI environment variables from the +given ltn12 source. +@class function +@name parse_message_header +@param src Ltn12 source function +@return HTTP message object +@see parse_message_body +]] + +---[[ +Try to extract and decode a http message body from the given ltn12 source. + +This function will examine the Content-Type within the given message object +to select the appropriate content decoder. +Currently the application/x-www-urlencoded and application/form-data +mime types are supported. If the encountered content encoding can't be +handled then the whole message body will be stored unaltered as "content" +property within the given message object. +@class function +@name parse_message_body +@param src Ltn12 source function +@param msg HTTP message object +@param filecb File data callback (optional, see mimedecode_message_body()) +@return Value indicating successful operation (not nil means "ok") +@return String containing the error if unsuccessful +@see parse_message_header +]] + +---[[ +Table containing human readable messages for several http status codes. + +@class table +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/http/protocol/conditionals.lua b/feeds/luci/modules/luci-base/luasrc/http/protocol/conditionals.lua new file mode 100644 index 0000000..d31a4e3 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/http/protocol/conditionals.lua @@ -0,0 +1,110 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +-- This class provides basic ETag handling and implements most of the +-- conditional HTTP/1.1 headers specified in RFC2616 Sct. 14.24 - 14.28 . +module("luci.http.protocol.conditionals", package.seeall) + +local date = require("luci.http.protocol.date") + + +function mk_etag( stat ) + if stat ~= nil then + return string.format( '"%x-%x-%x"', stat.ino, stat.size, stat.mtime ) + end +end + +-- Test whether the given message object contains an "If-Match" header and +-- compare it against the given stat object. +function if_match( req, stat ) + local h = req.headers + local etag = mk_etag( stat ) + + -- Check for matching resource + if type(h['If-Match']) == "string" then + for ent in h['If-Match']:gmatch("([^, ]+)") do + if ( ent == '*' or ent == etag ) and stat ~= nil then + return true + end + end + + return false, 412 + end + + return true +end + +-- Test whether the given message object contains an "If-Modified-Since" header +-- and compare it against the given stat object. +function if_modified_since( req, stat ) + local h = req.headers + + -- Compare mtimes + if type(h['If-Modified-Since']) == "string" then + local since = date.to_unix( h['If-Modified-Since'] ) + + if stat == nil or since < stat.mtime then + return true + end + + return false, 304, { + ["ETag"] = mk_etag( stat ); + ["Date"] = date.to_http( os.time() ); + ["Last-Modified"] = date.to_http( stat.mtime ) + } + end + + return true +end + +-- Test whether the given message object contains an "If-None-Match" header and +-- compare it against the given stat object. +function if_none_match( req, stat ) + local h = req.headers + local etag = mk_etag( stat ) + local method = req.env and req.env.REQUEST_METHOD or "GET" + + -- Check for matching resource + if type(h['If-None-Match']) == "string" then + for ent in h['If-None-Match']:gmatch("([^, ]+)") do + if ( ent == '*' or ent == etag ) and stat ~= nil then + if method == "GET" or method == "HEAD" then + return false, 304, { + ["ETag"] = etag; + ["Date"] = date.to_http( os.time() ); + ["Last-Modified"] = date.to_http( stat.mtime ) + } + else + return false, 412 + end + end + end + end + + return true +end + +-- The If-Range header is currently not implemented due to the lack of general +-- byte range stuff in luci.http.protocol . This function will always return +-- false, 412 to indicate a failed precondition. +function if_range( req, stat ) + -- Sorry, no subranges (yet) + return false, 412 +end + +-- Test whether the given message object contains an "If-Unmodified-Since" +-- header and compare it against the given stat object. +function if_unmodified_since( req, stat ) + local h = req.headers + + -- Compare mtimes + if type(h['If-Unmodified-Since']) == "string" then + local since = date.to_unix( h['If-Unmodified-Since'] ) + + if stat ~= nil and since <= stat.mtime then + return false, 412 + end + end + + return true +end diff --git a/feeds/luci/modules/luci-base/luasrc/http/protocol/conditionals.luadoc b/feeds/luci/modules/luci-base/luasrc/http/protocol/conditionals.luadoc new file mode 100644 index 0000000..9cfe02d --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/http/protocol/conditionals.luadoc @@ -0,0 +1,85 @@ +---[[ +LuCI http protocol implementation - HTTP/1.1 bits. + +This class provides basic ETag handling and implements most of the +conditional HTTP/1.1 headers specified in RFC2616 Sct. 14.24 - 14.28 . +]] +module "luci.http.protocol.conditionals" + +---[[ +Implement 14.19 / ETag. + +@class function +@name mk_etag +@param stat A file.stat structure +@return String containing the generated tag suitable for ETag headers +]] + +---[[ +14.24 / If-Match + +Test whether the given message object contains an "If-Match" header and +compare it against the given stat object. +@class function +@name if_match +@param req HTTP request message object +@param stat A file.stat object +@return Boolean indicating whether the precondition is ok +@return Alternative status code if the precondition failed +]] + +---[[ +14.25 / If-Modified-Since + +Test whether the given message object contains an "If-Modified-Since" header +and compare it against the given stat object. +@class function +@name if_modified_since +@param req HTTP request message object +@param stat A file.stat object +@return Boolean indicating whether the precondition is ok +@return Alternative status code if the precondition failed +@return Table containing extra HTTP headers if the precondition failed +]] + +---[[ +14.26 / If-None-Match + +Test whether the given message object contains an "If-None-Match" header and +compare it against the given stat object. +@class function +@name if_none_match +@param req HTTP request message object +@param stat A file.stat object +@return Boolean indicating whether the precondition is ok +@return Alternative status code if the precondition failed +@return Table containing extra HTTP headers if the precondition failed +]] + +---[[ +14.27 / If-Range + +The If-Range header is currently not implemented due to the lack of general +byte range stuff in luci.http.protocol . This function will always return +false, 412 to indicate a failed precondition. +@class function +@name if_range +@param req HTTP request message object +@param stat A file.stat object +@return Boolean indicating whether the precondition is ok +@return Alternative status code if the precondition failed +]] + +---[[ +14.28 / If-Unmodified-Since + +Test whether the given message object contains an "If-Unmodified-Since" +header and compare it against the given stat object. +@class function +@name if_unmodified_since +@param req HTTP request message object +@param stat A file.stat object +@return Boolean indicating whether the precondition is ok +@return Alternative status code if the precondition failed +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/http/protocol/date.lua b/feeds/luci/modules/luci-base/luasrc/http/protocol/date.lua new file mode 100644 index 0000000..e440219 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/http/protocol/date.lua @@ -0,0 +1,87 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +-- This class contains functions to parse, compare and format http dates. +module("luci.http.protocol.date", package.seeall) + +require("luci.sys.zoneinfo") + + +MONTHS = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", + "Sep", "Oct", "Nov", "Dec" +} + +function tz_offset(tz) + + if type(tz) == "string" then + + -- check for a numeric identifier + local s, v = tz:match("([%+%-])([0-9]+)") + if s == '+' then s = 1 else s = -1 end + if v then v = tonumber(v) end + + if s and v then + return s * 60 * ( math.floor( v / 100 ) * 60 + ( v % 100 ) ) + + -- lookup symbolic tz + elseif luci.sys.zoneinfo.OFFSET[tz:lower()] then + return luci.sys.zoneinfo.OFFSET[tz:lower()] + end + + end + + -- bad luck + return 0 +end + +function to_unix(date) + + local wd, day, mon, yr, hr, min, sec, tz = date:match( + "([A-Z][a-z][a-z]), ([0-9]+) " .. + "([A-Z][a-z][a-z]) ([0-9]+) " .. + "([0-9]+):([0-9]+):([0-9]+) " .. + "([A-Z0-9%+%-]+)" + ) + + if day and mon and yr and hr and min and sec then + -- find month + local month = 1 + for i = 1, 12 do + if MONTHS[i] == mon then + month = i + break + end + end + + -- convert to epoch time + return tz_offset(tz) + os.time( { + year = yr, + month = month, + day = day, + hour = hr, + min = min, + sec = sec + } ) + end + + return 0 +end + +function to_http(time) + return os.date( "%a, %d %b %Y %H:%M:%S GMT", time ) +end + +function compare(d1, d2) + + if d1:match("[^0-9]") then d1 = to_unix(d1) end + if d2:match("[^0-9]") then d2 = to_unix(d2) end + + if d1 == d2 then + return 0 + elseif d1 < d2 then + return -1 + else + return 1 + end +end diff --git a/feeds/luci/modules/luci-base/luasrc/http/protocol/date.luadoc b/feeds/luci/modules/luci-base/luasrc/http/protocol/date.luadoc new file mode 100644 index 0000000..d6f1c8d --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/http/protocol/date.luadoc @@ -0,0 +1,46 @@ +---[[ +LuCI http protocol implementation - date helper class. + +This class contains functions to parse, compare and format http dates. +]] +module "luci.http.protocol.date" + +---[[ +Return the time offset in seconds between the UTC and given time zone. + +@class function +@name tz_offset +@param tz Symbolic or numeric timezone specifier +@return Time offset to UTC in seconds +]] + +---[[ +Parse given HTTP date string and convert it to unix epoch time. + +@class function +@name to_unix +@param data String containing the date +@return Unix epoch time +]] + +---[[ +Convert the given unix epoch time to valid HTTP date string. + +@class function +@name to_http +@param time Unix epoch time +@return String containing the formatted date +]] + +---[[ +Compare two dates which can either be unix epoch times or HTTP date strings. + +@class function +@name compare +@param d1 The first date or epoch time to compare +@param d2 The first date or epoch time to compare +@return -1 - if d1 is lower then d2 +@return 0 - if both dates are equal +@return 1 - if d1 is higher then d2 +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/http/protocol/mime.lua b/feeds/luci/modules/luci-base/luasrc/http/protocol/mime.lua new file mode 100644 index 0000000..2b99d8e --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/http/protocol/mime.lua @@ -0,0 +1,78 @@ +-- Copyright 2008 Freifunk Leipzig / Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +-- This class provides functions to guess mime types from file extensions and +-- vice versa. +module("luci.http.protocol.mime", package.seeall) + +require("luci.util") + +MIME_TYPES = { + ["txt"] = "text/plain"; + ["js"] = "text/javascript"; + ["css"] = "text/css"; + ["htm"] = "text/html"; + ["html"] = "text/html"; + ["patch"] = "text/x-patch"; + ["c"] = "text/x-csrc"; + ["h"] = "text/x-chdr"; + ["o"] = "text/x-object"; + ["ko"] = "text/x-object"; + + ["bmp"] = "image/bmp"; + ["gif"] = "image/gif"; + ["png"] = "image/png"; + ["jpg"] = "image/jpeg"; + ["jpeg"] = "image/jpeg"; + ["svg"] = "image/svg+xml"; + + ["zip"] = "application/zip"; + ["pdf"] = "application/pdf"; + ["xml"] = "application/xml"; + ["xsl"] = "application/xml"; + ["doc"] = "application/msword"; + ["ppt"] = "application/vnd.ms-powerpoint"; + ["xls"] = "application/vnd.ms-excel"; + ["odt"] = "application/vnd.oasis.opendocument.text"; + ["odp"] = "application/vnd.oasis.opendocument.presentation"; + ["pl"] = "application/x-perl"; + ["sh"] = "application/x-shellscript"; + ["php"] = "application/x-php"; + ["deb"] = "application/x-deb"; + ["iso"] = "application/x-cd-image"; + ["tgz"] = "application/x-compressed-tar"; + + ["mp3"] = "audio/mpeg"; + ["ogg"] = "audio/x-vorbis+ogg"; + ["wav"] = "audio/x-wav"; + + ["mpg"] = "video/mpeg"; + ["mpeg"] = "video/mpeg"; + ["avi"] = "video/x-msvideo"; +} + +-- "application/octet-stream" if the extension is unknown. +function to_mime(filename) + if type(filename) == "string" then + local ext = filename:match("[^%.]+$") + + if ext and MIME_TYPES[ext:lower()] then + return MIME_TYPES[ext:lower()] + end + end + + return "application/octet-stream" +end + +-- given mime-type is unknown. +function to_ext(mimetype) + if type(mimetype) == "string" then + for ext, type in luci.util.kspairs( MIME_TYPES ) do + if type == mimetype then + return ext + end + end + end + + return nil +end diff --git a/feeds/luci/modules/luci-base/luasrc/http/protocol/mime.luadoc b/feeds/luci/modules/luci-base/luasrc/http/protocol/mime.luadoc new file mode 100644 index 0000000..195b5fc --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/http/protocol/mime.luadoc @@ -0,0 +1,34 @@ +---[[ +LuCI http protocol implementation - mime helper class. + +This class provides functions to guess mime types from file extensions and +vice versa. +]] +module "luci.http.protocol.mime" + +---[[ +MIME mapping table containg extension - mimetype relations. + +@class table +]] + +---[[ +Extract extension from a filename and return corresponding mime-type or + +"application/octet-stream" if the extension is unknown. +@class function +@name to_mime +@param filename The filename for which the mime type is guessed +@return String containign the determined mime type +]] + +---[[ +Return corresponding extension for a given mime type or nil if the + +given mime-type is unknown. +@class function +@name to_ext +@param mimetype The mimetype to retrieve the extension from +@return String with the extension or nil for unknown type +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/i18n.lua b/feeds/luci/modules/luci-base/luasrc/i18n.lua new file mode 100644 index 0000000..bcb16d5 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/i18n.lua @@ -0,0 +1,55 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +module("luci.i18n", package.seeall) +require("luci.util") + +local tparser = require "luci.template.parser" + +table = {} +i18ndir = luci.util.libpath() .. "/i18n/" +loaded = {} +context = luci.util.threadlocal() +default = "en" + +function clear() +end + +function load(file, lang, force) +end + +-- Alternatively load the translation of the fallback language. +function loadc(file, force) +end + +function setlanguage(lang) + context.lang = lang:gsub("_", "-") + context.parent = (context.lang:match("^([a-z][a-z])_")) + if not tparser.load_catalog(context.lang, i18ndir) then + if context.parent then + tparser.load_catalog(context.parent, i18ndir) + return context.parent + end + end + return context.lang +end + +function translate(key) + return tparser.translate(key) or key +end + +function translatef(key, ...) + return tostring(translate(key)):format(...) +end + +-- and ensure that the returned value is a Lua string value. +-- This is the same as calling tostring(translate(...)) +function string(key) + return tostring(translate(key)) +end + +-- Ensure that the returned value is a Lua string value. +-- This is the same as calling tostring(translatef(...)) +function stringf(key, ...) + return tostring(translate(key)):format(...) +end diff --git a/feeds/luci/modules/luci-base/luasrc/i18n.luadoc b/feeds/luci/modules/luci-base/luasrc/i18n.luadoc new file mode 100644 index 0000000..aa38841 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/i18n.luadoc @@ -0,0 +1,84 @@ +---[[ +LuCI translation library. +]] +module "luci.i18n" + +---[[ +Clear the translation table. + + +@class function +@name clear +]] + +---[[ +Load a translation and copy its data into the translation table. + +@class function +@name load +@param file Language file +@param lang Two-letter language code +@param force Force reload even if already loaded (optional) +@return Success status +]] + +---[[ +Load a translation file using the default translation language. + +Alternatively load the translation of the fallback language. +@class function +@name loadc +@param file Language file +@param force Force reload even if already loaded (optional) +]] + +---[[ +Set the context default translation language. + +@class function +@name setlanguage +@param lang Two-letter language code +]] + +---[[ +Return the translated value for a specific translation key. + +@class function +@name translate +@param key Default translation text +@return Translated string +]] + +---[[ +Return the translated value for a specific translation key and use it as sprintf pattern. + +@class function +@name translatef +@param key Default translation text +@param ... Format parameters +@return Translated and formatted string +]] + +---[[ +Return the translated value for a specific translation key + +and ensure that the returned value is a Lua string value. +This is the same as calling tostring(translate(...)) +@class function +@name string +@param key Default translation text +@return Translated string +]] + +---[[ +Return the translated value for a specific translation key and use it as sprintf pattern. + +Ensure that the returned value is a Lua string value. +This is the same as calling tostring(translatef(...)) +@class function +@name stringf +@param key Default translation text +@param ... Format parameters +@return Translated and formatted string +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/ltn12.lua b/feeds/luci/modules/luci-base/luasrc/ltn12.lua new file mode 100644 index 0000000..3a7268c --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/ltn12.lua @@ -0,0 +1,316 @@ +--[[ +LuaSocket 2.0.2 license +Copyright � 2004-2007 Diego Nehab + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +]]-- +--[[ + Changes made by LuCI project: + * Renamed to luci.ltn12 to avoid collisions with luasocket + * Added inline documentation +]]-- +----------------------------------------------------------------------------- +-- LTN12 - Filters, sources, sinks and pumps. +-- LuaSocket toolkit. +-- Author: Diego Nehab +-- RCS ID: $Id$ +----------------------------------------------------------------------------- + +----------------------------------------------------------------------------- +-- Declare module +----------------------------------------------------------------------------- +local string = require("string") +local table = require("table") +local base = _G + +-- See http://lua-users.org/wiki/FiltersSourcesAndSinks for design concepts +module("luci.ltn12") + +filter = {} +source = {} +sink = {} +pump = {} + +-- 2048 seems to be better in windows... +BLOCKSIZE = 2048 +_VERSION = "LTN12 1.0.1" + +----------------------------------------------------------------------------- +-- Filter stuff +----------------------------------------------------------------------------- + + +-- by passing it each chunk and updating a context between calls. +function filter.cycle(low, ctx, extra) + base.assert(low) + return function(chunk) + local ret + ret, ctx = low(ctx, chunk, extra) + return ret + end +end + +-- (thanks to Wim Couwenberg) +function filter.chain(...) + local n = table.getn(arg) + local top, index = 1, 1 + local retry = "" + return function(chunk) + retry = chunk and retry + while true do + if index == top then + chunk = arg[index](chunk) + if chunk == "" or top == n then return chunk + elseif chunk then index = index + 1 + else + top = top+1 + index = top + end + else + chunk = arg[index](chunk or "") + if chunk == "" then + index = index - 1 + chunk = retry + elseif chunk then + if index == n then return chunk + else index = index + 1 end + else base.error("filter returned inappropriate nil") end + end + end + end +end + +----------------------------------------------------------------------------- +-- Source stuff +----------------------------------------------------------------------------- + + +-- create an empty source +local function empty() + return nil +end + +function source.empty() + return empty +end + +function source.error(err) + return function() + return nil, err + end +end + +function source.file(handle, io_err) + if handle then + return function() + local chunk = handle:read(BLOCKSIZE) + if chunk and chunk:len() == 0 then chunk = nil end + if not chunk then handle:close() end + return chunk + end + else return source.error(io_err or "unable to open file") end +end + +function source.simplify(src) + base.assert(src) + return function() + local chunk, err_or_new = src() + src = err_or_new or src + if not chunk then return nil, err_or_new + else return chunk end + end +end + +function source.string(s) + if s then + local i = 1 + return function() + local chunk = string.sub(s, i, i+BLOCKSIZE-1) + i = i + BLOCKSIZE + if chunk ~= "" then return chunk + else return nil end + end + else return source.empty() end +end + +function source.rewind(src) + base.assert(src) + local t = {} + return function(chunk) + if not chunk then + chunk = table.remove(t) + if not chunk then return src() + else return chunk end + else + t[#t+1] = chunk + end + end +end + +function source.chain(src, f) + base.assert(src and f) + local last_in, last_out = "", "" + local state = "feeding" + local err + return function() + if not last_out then + base.error('source is empty!', 2) + end + while true do + if state == "feeding" then + last_in, err = src() + if err then return nil, err end + last_out = f(last_in) + if not last_out then + if last_in then + base.error('filter returned inappropriate nil') + else + return nil + end + elseif last_out ~= "" then + state = "eating" + if last_in then last_in = "" end + return last_out + end + else + last_out = f(last_in) + if last_out == "" then + if last_in == "" then + state = "feeding" + else + base.error('filter returned ""') + end + elseif not last_out then + if last_in then + base.error('filter returned inappropriate nil') + else + return nil + end + else + return last_out + end + end + end + end +end + +-- Sources will be used one after the other, as if they were concatenated +-- (thanks to Wim Couwenberg) +function source.cat(...) + local src = table.remove(arg, 1) + return function() + while src do + local chunk, err = src() + if chunk then return chunk end + if err then return nil, err end + src = table.remove(arg, 1) + end + end +end + +----------------------------------------------------------------------------- +-- Sink stuff +----------------------------------------------------------------------------- + + +function sink.table(t) + t = t or {} + local f = function(chunk, err) + if chunk then t[#t+1] = chunk end + return 1 + end + return f, t +end + +function sink.simplify(snk) + base.assert(snk) + return function(chunk, err) + local ret, err_or_new = snk(chunk, err) + if not ret then return nil, err_or_new end + snk = err_or_new or snk + return 1 + end +end + +function sink.file(handle, io_err) + if handle then + return function(chunk, err) + if not chunk then + handle:close() + return 1 + else return handle:write(chunk) end + end + else return sink.error(io_err or "unable to open file") end +end + +-- creates a sink that discards data +local function null() + return 1 +end + +function sink.null() + return null +end + +function sink.error(err) + return function() + return nil, err + end +end + +function sink.chain(f, snk) + base.assert(f and snk) + return function(chunk, err) + if chunk ~= "" then + local filtered = f(chunk) + local done = chunk and "" + while true do + local ret, snkerr = snk(filtered, err) + if not ret then return nil, snkerr end + if filtered == done then return 1 end + filtered = f(done) + end + else return 1 end + end +end + +----------------------------------------------------------------------------- +-- Pump stuff +----------------------------------------------------------------------------- + + +function pump.step(src, snk) + local chunk, src_err = src() + local ret, snk_err = snk(chunk, src_err) + if chunk and ret then return 1 + else return nil, src_err or snk_err end +end + +function pump.all(src, snk, step) + base.assert(src and snk) + step = step or pump.step + while true do + local ret, err = step(src, snk) + if not ret then + if err then return nil, err + else return 1 end + end + end +end + diff --git a/feeds/luci/modules/luci-base/luasrc/model/cbi/admin_network/proto_dhcp.lua b/feeds/luci/modules/luci-base/luasrc/model/cbi/admin_network/proto_dhcp.lua new file mode 100644 index 0000000..dc702e4 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/model/cbi/admin_network/proto_dhcp.lua @@ -0,0 +1,67 @@ +-- Copyright 2011-2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... +local ifc = net:get_interface() + +local hostname, accept_ra, send_rs +local bcast, defaultroute, peerdns, dns, metric, clientid, vendorclass + + +hostname = section:taboption("general", Value, "hostname", + translate("Hostname to send when requesting DHCP")) + +hostname.placeholder = luci.sys.hostname() +hostname.datatype = "hostname" + + +bcast = section:taboption("advanced", Flag, "broadcast", + translate("Use broadcast flag"), + translate("Required for certain ISPs, e.g. Charter with DOCSIS 3")) + +bcast.default = bcast.disabled + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +peerdns = section:taboption("advanced", Flag, "peerdns", + translate("Use DNS servers advertised by peer"), + translate("If unchecked, the advertised DNS server addresses are ignored")) + +peerdns.default = peerdns.enabled + + +dns = section:taboption("advanced", DynamicList, "dns", + translate("Use custom DNS servers")) + +dns:depends("peerdns", "") +dns.datatype = "ipaddr" +dns.cast = "string" + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" + + +clientid = section:taboption("advanced", Value, "clientid", + translate("Client ID to send when requesting DHCP")) + + +vendorclass = section:taboption("advanced", Value, "vendorid", + translate("Vendor Class to send when requesting DHCP")) + + +luci.tools.proto.opt_macaddr(section, ifc, translate("Override MAC address")) + + +mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU")) +mtu.placeholder = "1500" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/modules/luci-base/luasrc/model/cbi/admin_network/proto_none.lua b/feeds/luci/modules/luci-base/luasrc/model/cbi/admin_network/proto_none.lua new file mode 100644 index 0000000..6fdded9 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/model/cbi/admin_network/proto_none.lua @@ -0,0 +1,4 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... diff --git a/feeds/luci/modules/luci-base/luasrc/model/cbi/admin_network/proto_static.lua b/feeds/luci/modules/luci-base/luasrc/model/cbi/admin_network/proto_static.lua new file mode 100644 index 0000000..f49fed4 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/model/cbi/admin_network/proto_static.lua @@ -0,0 +1,81 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... +local ifc = net:get_interface() + +local ipaddr, netmask, gateway, broadcast, dns, accept_ra, send_rs, ip6addr, ip6gw +local mtu, metric + + +ipaddr = section:taboption("general", Value, "ipaddr", translate("IPv4 address")) +ipaddr.datatype = "ip4addr" + + +netmask = section:taboption("general", Value, "netmask", + translate("IPv4 netmask")) + +netmask.datatype = "ip4addr" +netmask:value("255.255.255.0") +netmask:value("255.255.0.0") +netmask:value("255.0.0.0") + + +gateway = section:taboption("general", Value, "gateway", translate("IPv4 gateway")) +gateway.datatype = "ip4addr" + + +broadcast = section:taboption("general", Value, "broadcast", translate("IPv4 broadcast")) +broadcast.datatype = "ip4addr" + + +dns = section:taboption("general", DynamicList, "dns", + translate("Use custom DNS servers")) + +dns.datatype = "ipaddr" +dns.cast = "string" + + +if luci.model.network:has_ipv6() then + + local ip6assign = section:taboption("general", Value, "ip6assign", translate("IPv6 assignment length"), + translate("Assign a part of given length of every public IPv6-prefix to this interface")) + ip6assign:value("", translate("disabled")) + ip6assign:value("64") + ip6assign.datatype = "max(64)" + + local ip6hint = section:taboption("general", Value, "ip6hint", translate("IPv6 assignment hint"), + translate("Assign prefix parts using this hexadecimal subprefix ID for this interface.")) + for i=33,64 do ip6hint:depends("ip6assign", i) end + + ip6addr = section:taboption("general", Value, "ip6addr", translate("IPv6 address")) + ip6addr.datatype = "ip6addr" + ip6addr:depends("ip6assign", "") + + + ip6gw = section:taboption("general", Value, "ip6gw", translate("IPv6 gateway")) + ip6gw.datatype = "ip6addr" + ip6gw:depends("ip6assign", "") + + + local ip6prefix = s:taboption("general", Value, "ip6prefix", translate("IPv6 routed prefix"), + translate("Public prefix routed to this device for distribution to clients.")) + ip6prefix.datatype = "ip6addr" + ip6prefix:depends("ip6assign", "") + +end + + +luci.tools.proto.opt_macaddr(section, ifc, translate("Override MAC address")) + + +mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU")) +mtu.placeholder = "1500" +mtu.datatype = "max(9200)" + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" diff --git a/feeds/luci/modules/luci-base/luasrc/model/firewall.lua b/feeds/luci/modules/luci-base/luasrc/model/firewall.lua new file mode 100644 index 0000000..5573a9b --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/model/firewall.lua @@ -0,0 +1,566 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local type, pairs, ipairs, table, luci, math + = type, pairs, ipairs, table, luci, math + +local tpl = require "luci.template.parser" +local utl = require "luci.util" +local uci = require "luci.model.uci" + +module "luci.model.firewall" + + +local uci_r, uci_s + +function _valid_id(x) + return (x and #x > 0 and x:match("^[a-zA-Z0-9_]+$")) +end + +function _get(c, s, o) + return uci_r:get(c, s, o) +end + +function _set(c, s, o, v) + if v ~= nil then + if type(v) == "boolean" then v = v and "1" or "0" end + return uci_r:set(c, s, o, v) + else + return uci_r:delete(c, s, o) + end +end + + +function init(cursor) + uci_r = cursor or uci_r or uci.cursor() + uci_s = uci_r:substate() + + return _M +end + +function save(self, ...) + uci_r:save(...) + uci_r:load(...) +end + +function commit(self, ...) + uci_r:commit(...) + uci_r:load(...) +end + +function get_defaults() + return defaults() +end + +function new_zone(self) + local name = "newzone" + local count = 1 + + while self:get_zone(name) do + count = count + 1 + name = "newzone%d" % count + end + + return self:add_zone(name) +end + +function add_zone(self, n) + if _valid_id(n) and not self:get_zone(n) then + local d = defaults() + local z = uci_r:section("firewall", "zone", nil, { + name = n, + network = " ", + input = d:input() or "DROP", + forward = d:forward() or "DROP", + output = d:output() or "DROP" + }) + + return z and zone(z) + end +end + +function get_zone(self, n) + if uci_r:get("firewall", n) == "zone" then + return zone(n) + else + local z + uci_r:foreach("firewall", "zone", + function(s) + if n and s.name == n then + z = s['.name'] + return false + end + end) + return z and zone(z) + end +end + +function get_zones(self) + local zones = { } + local znl = { } + + uci_r:foreach("firewall", "zone", + function(s) + if s.name then + znl[s.name] = zone(s['.name']) + end + end) + + local z + for z in utl.kspairs(znl) do + zones[#zones+1] = znl[z] + end + + return zones +end + +function get_zone_by_network(self, net) + local z + + uci_r:foreach("firewall", "zone", + function(s) + if s.name and net then + local n + for n in utl.imatch(s.network or s.name) do + if n == net then + z = s['.name'] + return false + end + end + end + end) + + return z and zone(z) +end + +function del_zone(self, n) + local r = false + + if uci_r:get("firewall", n) == "zone" then + local z = uci_r:get("firewall", n, "name") + r = uci_r:delete("firewall", n) + n = z + else + uci_r:foreach("firewall", "zone", + function(s) + if n and s.name == n then + r = uci_r:delete("firewall", s['.name']) + return false + end + end) + end + + if r then + uci_r:foreach("firewall", "rule", + function(s) + if s.src == n or s.dest == n then + uci_r:delete("firewall", s['.name']) + end + end) + + uci_r:foreach("firewall", "redirect", + function(s) + if s.src == n or s.dest == n then + uci_r:delete("firewall", s['.name']) + end + end) + + uci_r:foreach("firewall", "forwarding", + function(s) + if s.src == n or s.dest == n then + uci_r:delete("firewall", s['.name']) + end + end) + end + + return r +end + +function rename_zone(self, old, new) + local r = false + + if _valid_id(new) and not self:get_zone(new) then + uci_r:foreach("firewall", "zone", + function(s) + if old and s.name == old then + if not s.network then + uci_r:set("firewall", s['.name'], "network", old) + end + uci_r:set("firewall", s['.name'], "name", new) + r = true + return false + end + end) + + if r then + uci_r:foreach("firewall", "rule", + function(s) + if s.src == old then + uci_r:set("firewall", s['.name'], "src", new) + end + if s.dest == old then + uci_r:set("firewall", s['.name'], "dest", new) + end + end) + + uci_r:foreach("firewall", "redirect", + function(s) + if s.src == old then + uci_r:set("firewall", s['.name'], "src", new) + end + if s.dest == old then + uci_r:set("firewall", s['.name'], "dest", new) + end + end) + + uci_r:foreach("firewall", "forwarding", + function(s) + if s.src == old then + uci_r:set("firewall", s['.name'], "src", new) + end + if s.dest == old then + uci_r:set("firewall", s['.name'], "dest", new) + end + end) + end + end + + return r +end + +function del_network(self, net) + local z + if net then + for _, z in ipairs(self:get_zones()) do + z:del_network(net) + end + end +end + + +defaults = utl.class() +function defaults.__init__(self) + uci_r:foreach("firewall", "defaults", + function(s) + self.sid = s['.name'] + return false + end) + + self.sid = self.sid or uci_r:section("firewall", "defaults", nil, { }) +end + +function defaults.get(self, opt) + return _get("firewall", self.sid, opt) +end + +function defaults.set(self, opt, val) + return _set("firewall", self.sid, opt, val) +end + +function defaults.syn_flood(self) + return (self:get("syn_flood") == "1") +end + +function defaults.drop_invalid(self) + return (self:get("drop_invalid") == "1") +end + +function defaults.input(self) + return self:get("input") or "DROP" +end + +function defaults.forward(self) + return self:get("forward") or "DROP" +end + +function defaults.output(self) + return self:get("output") or "DROP" +end + + +zone = utl.class() +function zone.__init__(self, z) + if uci_r:get("firewall", z) == "zone" then + self.sid = z + self.data = uci_r:get_all("firewall", z) + else + uci_r:foreach("firewall", "zone", + function(s) + if s.name == z then + self.sid = s['.name'] + self.data = s + return false + end + end) + end +end + +function zone.get(self, opt) + return _get("firewall", self.sid, opt) +end + +function zone.set(self, opt, val) + return _set("firewall", self.sid, opt, val) +end + +function zone.masq(self) + return (self:get("masq") == "1") +end + +function zone.name(self) + return self:get("name") +end + +function zone.network(self) + return self:get("network") +end + +function zone.input(self) + return self:get("input") or defaults():input() or "DROP" +end + +function zone.forward(self) + return self:get("forward") or defaults():forward() or "DROP" +end + +function zone.output(self) + return self:get("output") or defaults():output() or "DROP" +end + +function zone.add_network(self, net) + if uci_r:get("network", net) == "interface" then + local nets = { } + + local n + for n in utl.imatch(self:get("network") or self:get("name")) do + if n ~= net then + nets[#nets+1] = n + end + end + + nets[#nets+1] = net + + _M:del_network(net) + self:set("network", table.concat(nets, " ")) + end +end + +function zone.del_network(self, net) + local nets = { } + + local n + for n in utl.imatch(self:get("network") or self:get("name")) do + if n ~= net then + nets[#nets+1] = n + end + end + + if #nets > 0 then + self:set("network", table.concat(nets, " ")) + else + self:set("network", " ") + end +end + +function zone.get_networks(self) + local nets = { } + + local n + for n in utl.imatch(self:get("network") or self:get("name")) do + nets[#nets+1] = n + end + + return nets +end + +function zone.clear_networks(self) + self:set("network", " ") +end + +function zone.get_forwardings_by(self, what) + local name = self:name() + local forwards = { } + + uci_r:foreach("firewall", "forwarding", + function(s) + if s.src and s.dest and s[what] == name then + forwards[#forwards+1] = forwarding(s['.name']) + end + end) + + return forwards +end + +function zone.add_forwarding_to(self, dest) + local exist, forward + + for _, forward in ipairs(self:get_forwardings_by('src')) do + if forward:dest() == dest then + exist = true + break + end + end + + if not exist and dest ~= self:name() and _valid_id(dest) then + local s = uci_r:section("firewall", "forwarding", nil, { + src = self:name(), + dest = dest + }) + + return s and forwarding(s) + end +end + +function zone.add_forwarding_from(self, src) + local exist, forward + + for _, forward in ipairs(self:get_forwardings_by('dest')) do + if forward:src() == src then + exist = true + break + end + end + + if not exist and src ~= self:name() and _valid_id(src) then + local s = uci_r:section("firewall", "forwarding", nil, { + src = src, + dest = self:name() + }) + + return s and forwarding(s) + end +end + +function zone.del_forwardings_by(self, what) + local name = self:name() + + uci_r:delete_all("firewall", "forwarding", + function(s) + return (s.src and s.dest and s[what] == name) + end) +end + +function zone.add_redirect(self, options) + options = options or { } + options.src = self:name() + + local s = uci_r:section("firewall", "redirect", nil, options) + return s and redirect(s) +end + +function zone.add_rule(self, options) + options = options or { } + options.src = self:name() + + local s = uci_r:section("firewall", "rule", nil, options) + return s and rule(s) +end + +function zone.get_color(self) + if self and self:name() == "lan" then + return "#90f090" + elseif self and self:name() == "wan" then + return "#f09090" + elseif self then + math.randomseed(tpl.hash(self:name())) + + local r = math.random(128) + local g = math.random(128) + local min = 0 + local max = 128 + + if ( r + g ) < 128 then + min = 128 - r - g + else + max = 255 - r - g + end + + local b = min + math.floor( math.random() * ( max - min ) ) + + return "#%02x%02x%02x" % { 0xFF - r, 0xFF - g, 0xFF - b } + else + return "#eeeeee" + end +end + + +forwarding = utl.class() +function forwarding.__init__(self, f) + self.sid = f +end + +function forwarding.src(self) + return uci_r:get("firewall", self.sid, "src") +end + +function forwarding.dest(self) + return uci_r:get("firewall", self.sid, "dest") +end + +function forwarding.src_zone(self) + return zone(self:src()) +end + +function forwarding.dest_zone(self) + return zone(self:dest()) +end + + +rule = utl.class() +function rule.__init__(self, f) + self.sid = f +end + +function rule.get(self, opt) + return _get("firewall", self.sid, opt) +end + +function rule.set(self, opt, val) + return _set("firewall", self.sid, opt, val) +end + +function rule.src(self) + return uci_r:get("firewall", self.sid, "src") +end + +function rule.dest(self) + return uci_r:get("firewall", self.sid, "dest") +end + +function rule.src_zone(self) + return zone(self:src()) +end + +function rule.dest_zone(self) + return zone(self:dest()) +end + + +redirect = utl.class() +function redirect.__init__(self, f) + self.sid = f +end + +function redirect.get(self, opt) + return _get("firewall", self.sid, opt) +end + +function redirect.set(self, opt, val) + return _set("firewall", self.sid, opt, val) +end + +function redirect.src(self) + return uci_r:get("firewall", self.sid, "src") +end + +function redirect.dest(self) + return uci_r:get("firewall", self.sid, "dest") +end + +function redirect.src_zone(self) + return zone(self:src()) +end + +function redirect.dest_zone(self) + return zone(self:dest()) +end diff --git a/feeds/luci/modules/luci-base/luasrc/model/ipkg.lua b/feeds/luci/modules/luci-base/luasrc/model/ipkg.lua new file mode 100644 index 0000000..e653b03 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/model/ipkg.lua @@ -0,0 +1,242 @@ +-- Copyright 2008-2011 Jo-Philipp Wich +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local os = require "os" +local io = require "io" +local fs = require "nixio.fs" +local util = require "luci.util" + +local type = type +local pairs = pairs +local error = error +local table = table + +local ipkg = "opkg --force-removal-of-dependent-packages --force-overwrite --nocase" +local icfg = "/etc/opkg.conf" + +module "luci.model.ipkg" + + +-- Internal action function +local function _action(cmd, ...) + local pkg = "" + for k, v in pairs({...}) do + pkg = pkg .. " '" .. v:gsub("'", "") .. "'" + end + + local c = "%s %s %s >/tmp/opkg.stdout 2>/tmp/opkg.stderr" %{ ipkg, cmd, pkg } + local r = os.execute(c) + local e = fs.readfile("/tmp/opkg.stderr") + local o = fs.readfile("/tmp/opkg.stdout") + + fs.unlink("/tmp/opkg.stderr") + fs.unlink("/tmp/opkg.stdout") + + return r, o or "", e or "" +end + +-- Internal parser function +local function _parselist(rawdata) + if type(rawdata) ~= "function" then + error("OPKG: Invalid rawdata given") + end + + local data = {} + local c = {} + local l = nil + + for line in rawdata do + if line:sub(1, 1) ~= " " then + local key, val = line:match("(.-): ?(.*)%s*") + + if key and val then + if key == "Package" then + c = {Package = val} + data[val] = c + elseif key == "Status" then + c.Status = {} + for j in val:gmatch("([^ ]+)") do + c.Status[j] = true + end + else + c[key] = val + end + l = key + end + else + -- Multi-line field + c[l] = c[l] .. "\n" .. line + end + end + + return data +end + +-- Internal lookup function +local function _lookup(act, pkg) + local cmd = ipkg .. " " .. act + if pkg then + cmd = cmd .. " '" .. pkg:gsub("'", "") .. "'" + end + + -- OPKG sometimes kills the whole machine because it sucks + -- Therefore we have to use a sucky approach too and use + -- tmpfiles instead of directly reading the output + local tmpfile = os.tmpname() + os.execute(cmd .. (" >%s 2>/dev/null" % tmpfile)) + + local data = _parselist(io.lines(tmpfile)) + os.remove(tmpfile) + return data +end + + +function info(pkg) + return _lookup("info", pkg) +end + +function status(pkg) + return _lookup("status", pkg) +end + +function install(...) + return _action("install", ...) +end + +function installed(pkg) + local p = status(pkg)[pkg] + return (p and p.Status and p.Status.installed) +end + +function remove(...) + return _action("remove", ...) +end + +function update() + return _action("update") +end + +function upgrade() + return _action("upgrade") +end + +-- List helper +local function _list(action, pat, cb) + local fd = io.popen(ipkg .. " " .. action .. + (pat and (" '%s'" % pat:gsub("'", "")) or "")) + + if fd then + local name, version, sz, desc + while true do + local line = fd:read("*l") + if not line then break end + + name, version, sz, desc = line:match("^(.-) %- (.-) %- (.-) %- (.+)") + + if not name then + name, version, sz = line:match("^(.-) %- (.-) %- (.+)") + desc = "" + end + + if name and version then + if #version > 26 then + version = version:sub(1,21) .. ".." .. version:sub(-3,-1) + end + + cb(name, version, sz, desc) + end + + name = nil + version = nil + sz = nil + desc = nil + end + + fd:close() + end +end + +function list_all(pat, cb) + _list("list --size", pat, cb) +end + +function list_installed(pat, cb) + _list("list_installed --size", pat, cb) +end + +function find(pat, cb) + _list("find --size", pat, cb) +end + + +function overlay_root() + local od = "/" + local fd = io.open(icfg, "r") + + if fd then + local ln + + repeat + ln = fd:read("*l") + if ln and ln:match("^%s*option%s+overlay_root%s+") then + od = ln:match("^%s*option%s+overlay_root%s+(%S+)") + + local s = fs.stat(od) + if not s or s.type ~= "dir" then + od = "/" + end + + break + end + until not ln + + fd:close() + end + + return od +end + +function compare_versions(ver1, comp, ver2) + if not ver1 or not ver2 + or not comp or not (#comp > 0) then + error("Invalid parameters") + return nil + end + -- correct compare string + if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~=" + elseif comp == "<=" or comp == "<" or comp == "=<" then comp = "<=" + elseif comp == ">=" or comp == ">" or comp == "=>" then comp = ">=" + elseif comp == "=" or comp == "==" then comp = "==" + elseif comp == "<<" then comp = "<" + elseif comp == ">>" then comp = ">" + else + error("Invalid compare string") + return nil + end + + local av1 = util.split(ver1, "[%.%-]", nil, true) + local av2 = util.split(ver2, "[%.%-]", nil, true) + + local max = table.getn(av1) + if (table.getn(av1) < table.getn(av2)) then + max = table.getn(av2) + end + + for i = 1, max, 1 do + local s1 = av1[i] or "" + local s2 = av2[i] or "" + + -- first "not equal" found return true + if comp == "~=" and (s1 ~= s2) then return true end + -- first "lower" found return true + if (comp == "<" or comp == "<=") and (s1 < s2) then return true end + -- first "greater" found return true + if (comp == ">" or comp == ">=") and (s1 > s2) then return true end + -- not equal then return false + if (s1 ~= s2) then return false end + end + + -- all equal and not compare greater or lower then true + return not (comp == "<" or comp == ">") +end diff --git a/feeds/luci/modules/luci-base/luasrc/model/ipkg.luadoc b/feeds/luci/modules/luci-base/luasrc/model/ipkg.luadoc new file mode 100644 index 0000000..4e1548d --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/model/ipkg.luadoc @@ -0,0 +1,125 @@ +---[[ +LuCI OPKG call abstraction library +]] +module "luci.model.ipkg" + +---[[ +Return information about installed and available packages. + +@class function +@name info +@param pkg Limit output to a (set of) packages +@return Table containing package information +]] + +---[[ +Return the package status of one or more packages. + +@class function +@name status +@param pkg Limit output to a (set of) packages +@return Table containing package status information +]] + +---[[ +Install one or more packages. + +@class function +@name install +@param ... List of packages to install +@return Boolean indicating the status of the action +@return OPKG return code, STDOUT and STDERR +]] + +---[[ +Determine whether a given package is installed. + +@class function +@name installed +@param pkg Package +@return Boolean +]] + +---[[ +Remove one or more packages. + +@class function +@name remove +@param ... List of packages to install +@return Boolean indicating the status of the action +@return OPKG return code, STDOUT and STDERR +]] + +---[[ +Update package lists. + +@class function +@name update +@return Boolean indicating the status of the action +@return OPKG return code, STDOUT and STDERR +]] + +---[[ +Upgrades all installed packages. + +@class function +@name upgrade +@return Boolean indicating the status of the action +@return OPKG return code, STDOUT and STDERR +]] + +---[[ +List all packages known to opkg. + +@class function +@name list_all +@param pat Only find packages matching this pattern, nil lists all packages +@param cb Callback function invoked for each package, receives name, version and description as arguments +@return nothing +]] + +---[[ +List installed packages. + +@class function +@name list_installed +@param pat Only find packages matching this pattern, nil lists all packages +@param cb Callback function invoked for each package, receives name, version and description as arguments +@return nothing +]] + +---[[ +Find packages that match the given pattern. + +@class function +@name find +@param pat Find packages whose names or descriptions match this pattern, nil results in zero results +@param cb Callback function invoked for each patckage, receives name, version and description as arguments +@return nothing +]] + +---[[ +Determines the overlay root used by opkg. + +@class function +@name overlay_root +@return String containing the directory path of the overlay root. +]] + +---[[ +lua version of opkg compare-versions + +@class function +@name compare_versions +@param ver1 string version 1 +@param ver2 string version 2 +@param comp string compare versions using + "<=" or "<" lower-equal + ">" or ">=" greater-equal + "=" equal + "<<" lower + ">>" greater + "~=" not equal +@return Boolean indicating the status of the compare +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/model/network.lua b/feeds/luci/modules/luci-base/luasrc/model/network.lua new file mode 100644 index 0000000..2d8336b --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/model/network.lua @@ -0,0 +1,1700 @@ +-- Copyright 2009-2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local type, next, pairs, ipairs, loadfile, table, select + = type, next, pairs, ipairs, loadfile, table, select + +local tonumber, tostring, math = tonumber, tostring, math + +local require = require + +local nxo = require "nixio" +local nfs = require "nixio.fs" +local ipc = require "luci.ip" +local sys = require "luci.sys" +local utl = require "luci.util" +local dsp = require "luci.dispatcher" +local uci = require "luci.model.uci" +local lng = require "luci.i18n" +local jsc = require "luci.jsonc" + +module "luci.model.network" + + +IFACE_PATTERNS_VIRTUAL = { } +IFACE_PATTERNS_IGNORE = { "^wmaster%d", "^wifi%d", "^hwsim%d", "^imq%d", "^ifb%d", "^mon%.wlan%d", "^sit%d", "^gre%d", "^gretap%d", "^ip6gre%d", "^ip6tnl%d", "^tunl%d", "^lo$" } +IFACE_PATTERNS_WIRELESS = { "^wlan%d", "^wl%d", "^ath%d", "^%w+%.network%d" } + + +protocol = utl.class() + +local _protocols = { } + +local _interfaces, _bridge, _switch, _tunnel, _swtopo +local _ubusnetcache, _ubusdevcache, _ubuswificache +local _uci + +function _filter(c, s, o, r) + local val = _uci:get(c, s, o) + if val then + local l = { } + if type(val) == "string" then + for val in val:gmatch("%S+") do + if val ~= r then + l[#l+1] = val + end + end + if #l > 0 then + _uci:set(c, s, o, table.concat(l, " ")) + else + _uci:delete(c, s, o) + end + elseif type(val) == "table" then + for _, val in ipairs(val) do + if val ~= r then + l[#l+1] = val + end + end + if #l > 0 then + _uci:set(c, s, o, l) + else + _uci:delete(c, s, o) + end + end + end +end + +function _append(c, s, o, a) + local val = _uci:get(c, s, o) or "" + if type(val) == "string" then + local l = { } + for val in val:gmatch("%S+") do + if val ~= a then + l[#l+1] = val + end + end + l[#l+1] = a + _uci:set(c, s, o, table.concat(l, " ")) + elseif type(val) == "table" then + local l = { } + for _, val in ipairs(val) do + if val ~= a then + l[#l+1] = val + end + end + l[#l+1] = a + _uci:set(c, s, o, l) + end +end + +function _stror(s1, s2) + if not s1 or #s1 == 0 then + return s2 and #s2 > 0 and s2 + else + return s1 + end +end + +function _get(c, s, o) + return _uci:get(c, s, o) +end + +function _set(c, s, o, v) + if v ~= nil then + if type(v) == "boolean" then v = v and "1" or "0" end + return _uci:set(c, s, o, v) + else + return _uci:delete(c, s, o) + end +end + +function _wifi_iface(x) + local _, p + for _, p in ipairs(IFACE_PATTERNS_WIRELESS) do + if x:match(p) then + return true + end + end + return false +end + +function _wifi_state(key, val, field) + local radio, radiostate, ifc, ifcstate + + if not next(_ubuswificache) then + _ubuswificache = utl.ubus("network.wireless", "status", {}) or {} + + -- workaround extended section format + for radio, radiostate in pairs(_ubuswificache) do + for ifc, ifcstate in pairs(radiostate.interfaces) do + if ifcstate.section and ifcstate.section:sub(1, 1) == '@' then + local s = _uci:get_all('wireless.%s' % ifcstate.section) + if s then + ifcstate.section = s['.name'] + end + end + end + end + end + + for radio, radiostate in pairs(_ubuswificache) do + for ifc, ifcstate in pairs(radiostate.interfaces) do + if ifcstate[key] == val then + return ifcstate[field] + end + end + end +end + +function _wifi_lookup(ifn) + -- got a radio#.network# pseudo iface, locate the corresponding section + local radio, ifnidx = ifn:match("^(%w+)%.network(%d+)$") + if radio and ifnidx then + local sid = nil + local num = 0 + + ifnidx = tonumber(ifnidx) + _uci:foreach("wireless", "wifi-iface", + function(s) + if s.device == radio then + num = num + 1 + if num == ifnidx then + sid = s['.name'] + return false + end + end + end) + + return sid + + -- looks like wifi, try to locate the section via ubus state + elseif _wifi_iface(ifn) then + return _wifi_state("ifname", ifn, "section") + end +end + +function _iface_virtual(x) + local _, p + for _, p in ipairs(IFACE_PATTERNS_VIRTUAL) do + if x:match(p) then + return true + end + end + return false +end + +function _iface_ignore(x) + local _, p + for _, p in ipairs(IFACE_PATTERNS_IGNORE) do + if x:match(p) then + return true + end + end + return false +end + +function init(cursor) + _uci = cursor or _uci or uci.cursor() + + _interfaces = { } + _bridge = { } + _switch = { } + _tunnel = { } + _swtopo = { } + + _ubusnetcache = { } + _ubusdevcache = { } + _ubuswificache = { } + + -- read interface information + local n, i + for n, i in ipairs(nxo.getifaddrs()) do + local name = i.name:match("[^:]+") + + if _iface_virtual(name) then + _tunnel[name] = true + end + + if _tunnel[name] or not (_iface_ignore(name) or _iface_virtual(name)) then + _interfaces[name] = _interfaces[name] or { + idx = i.ifindex or n, + name = name, + rawname = i.name, + flags = { }, + ipaddrs = { }, + ip6addrs = { } + } + + if i.family == "packet" then + _interfaces[name].flags = i.flags + _interfaces[name].stats = i.data + _interfaces[name].macaddr = i.addr + elseif i.family == "inet" then + _interfaces[name].ipaddrs[#_interfaces[name].ipaddrs+1] = ipc.IPv4(i.addr, i.netmask) + elseif i.family == "inet6" then + _interfaces[name].ip6addrs[#_interfaces[name].ip6addrs+1] = ipc.IPv6(i.addr, i.netmask) + end + end + end + + -- read bridge informaton + local b, l + for l in utl.execi("brctl show") do + if not l:match("STP") then + local r = utl.split(l, "%s+", nil, true) + if #r == 4 then + b = { + name = r[1], + id = r[2], + stp = r[3] == "yes", + ifnames = { _interfaces[r[4]] } + } + if b.ifnames[1] then + b.ifnames[1].bridge = b + end + _bridge[r[1]] = b + elseif b then + b.ifnames[#b.ifnames+1] = _interfaces[r[2]] + b.ifnames[#b.ifnames].bridge = b + end + end + end + + -- read switch topology + local boardinfo = jsc.parse(nfs.readfile("/etc/board.json") or "") + if type(boardinfo) == "table" and type(boardinfo.switch) == "table" then + local switch, layout + for switch, layout in pairs(boardinfo.switch) do + if type(layout) == "table" and type(layout.ports) == "table" then + local _, port + local ports = { } + local nports = { } + local netdevs = { } + + for _, port in ipairs(layout.ports) do + if type(port) == "table" and + type(port.num) == "number" and + (type(port.role) == "string" or + type(port.device) == "string") + then + local spec = { + num = port.num, + role = port.role or "cpu", + index = port.index or port.num + } + + if port.device then + spec.device = port.device + spec.tagged = port.need_tag + netdevs[tostring(port.num)] = port.device + end + + ports[#ports+1] = spec + + if port.role then + nports[port.role] = (nports[port.role] or 0) + 1 + end + end + end + + table.sort(ports, function(a, b) + if a.role ~= b.role then + return (a.role < b.role) + end + + return (a.index < b.index) + end) + + local pnum, role + for _, port in ipairs(ports) do + if port.role ~= role then + role = port.role + pnum = 1 + end + + if role == "cpu" then + port.label = "CPU (%s)" % port.device + elseif nports[role] > 1 then + port.label = "%s %d" %{ role:upper(), pnum } + pnum = pnum + 1 + else + port.label = role:upper() + end + + port.role = nil + port.index = nil + end + + _swtopo[switch] = { + ports = ports, + netdevs = netdevs + } + end + end + end + + return _M +end + +function save(self, ...) + _uci:save(...) + _uci:load(...) +end + +function commit(self, ...) + _uci:commit(...) + _uci:load(...) +end + +function ifnameof(self, x) + if utl.instanceof(x, interface) then + return x:name() + elseif utl.instanceof(x, protocol) then + return x:ifname() + elseif type(x) == "string" then + return x:match("^[^:]+") + end +end + +function get_protocol(self, protoname, netname) + local v = _protocols[protoname] + if v then + return v(netname or "__dummy__") + end +end + +function get_protocols(self) + local p = { } + local _, v + for _, v in ipairs(_protocols) do + p[#p+1] = v("__dummy__") + end + return p +end + +function register_protocol(self, protoname) + local proto = utl.class(protocol) + + function proto.__init__(self, name) + self.sid = name + end + + function proto.proto(self) + return protoname + end + + _protocols[#_protocols+1] = proto + _protocols[protoname] = proto + + return proto +end + +function register_pattern_virtual(self, pat) + IFACE_PATTERNS_VIRTUAL[#IFACE_PATTERNS_VIRTUAL+1] = pat +end + + +function has_ipv6(self) + return nfs.access("/proc/net/ipv6_route") +end + +function add_network(self, n, options) + local oldnet = self:get_network(n) + if n and #n > 0 and n:match("^[a-zA-Z0-9_]+$") and not oldnet then + if _uci:section("network", "interface", n, options) then + return network(n) + end + elseif oldnet and oldnet:is_empty() then + if options then + local k, v + for k, v in pairs(options) do + oldnet:set(k, v) + end + end + return oldnet + end +end + +function get_network(self, n) + if n and _uci:get("network", n) == "interface" then + return network(n) + end +end + +function get_networks(self) + local nets = { } + local nls = { } + + _uci:foreach("network", "interface", + function(s) + nls[s['.name']] = network(s['.name']) + end) + + local n + for n in utl.kspairs(nls) do + nets[#nets+1] = nls[n] + end + + return nets +end + +function del_network(self, n) + local r = _uci:delete("network", n) + if r then + _uci:delete_all("network", "alias", + function(s) return (s.interface == n) end) + + _uci:delete_all("network", "route", + function(s) return (s.interface == n) end) + + _uci:delete_all("network", "route6", + function(s) return (s.interface == n) end) + + _uci:foreach("wireless", "wifi-iface", + function(s) + local net + local rest = { } + for net in utl.imatch(s.network) do + if net ~= n then + rest[#rest+1] = net + end + end + if #rest > 0 then + _uci:set("wireless", s['.name'], "network", + table.concat(rest, " ")) + else + _uci:delete("wireless", s['.name'], "network") + end + end) + end + return r +end + +function rename_network(self, old, new) + local r + if new and #new > 0 and new:match("^[a-zA-Z0-9_]+$") and not self:get_network(new) then + r = _uci:section("network", "interface", new, _uci:get_all("network", old)) + + if r then + _uci:foreach("network", "alias", + function(s) + if s.interface == old then + _uci:set("network", s['.name'], "interface", new) + end + end) + + _uci:foreach("network", "route", + function(s) + if s.interface == old then + _uci:set("network", s['.name'], "interface", new) + end + end) + + _uci:foreach("network", "route6", + function(s) + if s.interface == old then + _uci:set("network", s['.name'], "interface", new) + end + end) + + _uci:foreach("wireless", "wifi-iface", + function(s) + local net + local list = { } + for net in utl.imatch(s.network) do + if net == old then + list[#list+1] = new + else + list[#list+1] = net + end + end + if #list > 0 then + _uci:set("wireless", s['.name'], "network", + table.concat(list, " ")) + end + end) + + _uci:delete("network", old) + end + end + return r or false +end + +function get_interface(self, i) + if _interfaces[i] or _wifi_iface(i) then + return interface(i) + else + local ifc + local num = { } + _uci:foreach("wireless", "wifi-iface", + function(s) + if s.device then + num[s.device] = num[s.device] and num[s.device] + 1 or 1 + if s['.name'] == i then + ifc = interface( + "%s.network%d" %{s.device, num[s.device] }) + return false + end + end + end) + return ifc + end +end + +function get_interfaces(self) + local iface + local ifaces = { } + local nfs = { } + + -- find normal interfaces + _uci:foreach("network", "interface", + function(s) + for iface in utl.imatch(s.ifname) do + if not _iface_ignore(iface) and not _iface_virtual(iface) and not _wifi_iface(iface) then + nfs[iface] = interface(iface) + end + end + end) + + for iface in utl.kspairs(_interfaces) do + if not (nfs[iface] or _iface_ignore(iface) or _iface_virtual(iface) or _wifi_iface(iface)) then + nfs[iface] = interface(iface) + end + end + + -- find vlan interfaces + _uci:foreach("network", "switch_vlan", + function(s) + if type(s.ports) ~= "string" or + type(s.device) ~= "string" or + type(_swtopo[s.device]) ~= "table" + then + return + end + + local pnum, ptag + for pnum, ptag in s.ports:gmatch("(%d+)([tu]?)") do + local netdev = _swtopo[s.device].netdevs[pnum] + if netdev then + if not nfs[netdev] then + nfs[netdev] = interface(netdev) + end + _switch[netdev] = true + + if ptag == "t" then + local vid = tonumber(s.vid or s.vlan) + if vid ~= nil and vid >= 0 and vid <= 4095 then + local iface = "%s.%d" %{ netdev, vid } + if not nfs[iface] then + nfs[iface] = interface(iface) + end + _switch[iface] = true + end + end + end + end + end) + + for iface in utl.kspairs(nfs) do + ifaces[#ifaces+1] = nfs[iface] + end + + -- find wifi interfaces + local num = { } + local wfs = { } + _uci:foreach("wireless", "wifi-iface", + function(s) + if s.device then + num[s.device] = num[s.device] and num[s.device] + 1 or 1 + local i = "%s.network%d" %{ s.device, num[s.device] } + wfs[i] = interface(i) + end + end) + + for iface in utl.kspairs(wfs) do + ifaces[#ifaces+1] = wfs[iface] + end + + return ifaces +end + +function ignore_interface(self, x) + return _iface_ignore(x) +end + +function get_wifidev(self, dev) + if _uci:get("wireless", dev) == "wifi-device" then + return wifidev(dev) + end +end + +function get_wifidevs(self) + local devs = { } + local wfd = { } + + _uci:foreach("wireless", "wifi-device", + function(s) wfd[#wfd+1] = s['.name'] end) + + local dev + for _, dev in utl.vspairs(wfd) do + devs[#devs+1] = wifidev(dev) + end + + return devs +end + +function get_wifinet(self, net) + local wnet = _wifi_lookup(net) + if wnet then + return wifinet(wnet) + end +end + +function add_wifinet(self, net, options) + if type(options) == "table" and options.device and + _uci:get("wireless", options.device) == "wifi-device" + then + local wnet = _uci:section("wireless", "wifi-iface", nil, options) + return wifinet(wnet) + end +end + +function del_wifinet(self, net) + local wnet = _wifi_lookup(net) + if wnet then + _uci:delete("wireless", wnet) + return true + end + return false +end + +function get_status_by_route(self, addr, mask) + local _, object + for _, object in ipairs(utl.ubus()) do + local net = object:match("^network%.interface%.(.+)") + if net then + local s = utl.ubus(object, "status", {}) + if s and s.route then + local rt + for _, rt in ipairs(s.route) do + if not rt.table and rt.target == addr and rt.mask == mask then + return net, s + end + end + end + end + end +end + +function get_status_by_address(self, addr) + local _, object + for _, object in ipairs(utl.ubus()) do + local net = object:match("^network%.interface%.(.+)") + if net then + local s = utl.ubus(object, "status", {}) + if s and s['ipv4-address'] then + local a + for _, a in ipairs(s['ipv4-address']) do + if a.address == addr then + return net, s + end + end + end + if s and s['ipv6-address'] then + local a + for _, a in ipairs(s['ipv6-address']) do + if a.address == addr then + return net, s + end + end + end + end + end +end + +function get_wannet(self) + local net, stat = self:get_status_by_route("0.0.0.0", 0) + return net and network(net, stat.proto) +end + +function get_wandev(self) + local _, stat = self:get_status_by_route("0.0.0.0", 0) + return stat and interface(stat.l3_device or stat.device) +end + +function get_wan6net(self) + local net, stat = self:get_status_by_route("::", 0) + return net and network(net, stat.proto) +end + +function get_wan6dev(self) + local _, stat = self:get_status_by_route("::", 0) + return stat and interface(stat.l3_device or stat.device) +end + +function get_switch_topologies(self) + return _swtopo +end + + +function network(name, proto) + if name then + local p = proto or _uci:get("network", name, "proto") + local c = p and _protocols[p] or protocol + return c(name) + end +end + +function protocol.__init__(self, name) + self.sid = name +end + +function protocol._get(self, opt) + local v = _uci:get("network", self.sid, opt) + if type(v) == "table" then + return table.concat(v, " ") + end + return v or "" +end + +function protocol._ubus(self, field) + if not _ubusnetcache[self.sid] then + _ubusnetcache[self.sid] = utl.ubus("network.interface.%s" % self.sid, + "status", { }) + end + if _ubusnetcache[self.sid] and field then + return _ubusnetcache[self.sid][field] + end + return _ubusnetcache[self.sid] +end + +function protocol.get(self, opt) + return _get("network", self.sid, opt) +end + +function protocol.set(self, opt, val) + return _set("network", self.sid, opt, val) +end + +function protocol.ifname(self) + local ifname + if self:is_floating() then + ifname = self:_ubus("l3_device") + else + ifname = self:_ubus("device") + end + if not ifname then + local num = { } + _uci:foreach("wireless", "wifi-iface", + function(s) + if s.device then + num[s.device] = num[s.device] + and num[s.device] + 1 or 1 + + local net + for net in utl.imatch(s.network) do + if net == self.sid then + ifname = "%s.network%d" %{ s.device, num[s.device] } + return false + end + end + end + end) + end + return ifname +end + +function protocol.proto(self) + return "none" +end + +function protocol.get_i18n(self) + local p = self:proto() + if p == "none" then + return lng.translate("Unmanaged") + elseif p == "static" then + return lng.translate("Static address") + elseif p == "dhcp" then + return lng.translate("DHCP client") + else + return lng.translate("Unknown") + end +end + +function protocol.type(self) + return self:_get("type") +end + +function protocol.name(self) + return self.sid +end + +function protocol.uptime(self) + return self:_ubus("uptime") or 0 +end + +function protocol.expires(self) + local u = self:_ubus("uptime") + local d = self:_ubus("data") + + if type(u) == "number" and type(d) == "table" and + type(d.leasetime) == "number" + then + local r = (d.leasetime - (u % d.leasetime)) + return r > 0 and r or 0 + end + + return -1 +end + +function protocol.metric(self) + return self:_ubus("metric") or 0 +end + +function protocol.ipaddr(self) + local addrs = self:_ubus("ipv4-address") + return addrs and #addrs > 0 and addrs[1].address +end + +function protocol.ipaddrs(self) + local addrs = self:_ubus("ipv4-address") + local rv = { } + + if type(addrs) == "table" then + local n, addr + for n, addr in ipairs(addrs) do + rv[#rv+1] = "%s/%d" %{ addr.address, addr.mask } + end + end + + return rv +end + +function protocol.netmask(self) + local addrs = self:_ubus("ipv4-address") + return addrs and #addrs > 0 and + ipc.IPv4("0.0.0.0/%d" % addrs[1].mask):mask():string() +end + +function protocol.gwaddr(self) + local _, route + for _, route in ipairs(self:_ubus("route") or { }) do + if route.target == "0.0.0.0" and route.mask == 0 then + return route.nexthop + end + end +end + +function protocol.dnsaddrs(self) + local dns = { } + local _, addr + for _, addr in ipairs(self:_ubus("dns-server") or { }) do + if not addr:match(":") then + dns[#dns+1] = addr + end + end + return dns +end + +function protocol.ip6addr(self) + local addrs = self:_ubus("ipv6-address") + if addrs and #addrs > 0 then + return "%s/%d" %{ addrs[1].address, addrs[1].mask } + else + addrs = self:_ubus("ipv6-prefix-assignment") + if addrs and #addrs > 0 then + return "%s/%d" %{ addrs[1].address, addrs[1].mask } + end + end +end + +function protocol.ip6addrs(self) + local addrs = self:_ubus("ipv6-address") + local rv = { } + local n, addr + + if type(addrs) == "table" then + for n, addr in ipairs(addrs) do + rv[#rv+1] = "%s/%d" %{ addr.address, addr.mask } + end + end + + addrs = self:_ubus("ipv6-prefix-assignment") + + if type(addrs) == "table" then + for n, addr in ipairs(addrs) do + rv[#rv+1] = "%s1/%d" %{ addr.address, addr.mask } + end + end + + return rv +end + +function protocol.gw6addr(self) + local _, route + for _, route in ipairs(self:_ubus("route") or { }) do + if route.target == "::" and route.mask == 0 then + return ipc.IPv6(route.nexthop):string() + end + end +end + +function protocol.dns6addrs(self) + local dns = { } + local _, addr + for _, addr in ipairs(self:_ubus("dns-server") or { }) do + if addr:match(":") then + dns[#dns+1] = addr + end + end + return dns +end + +function protocol.is_bridge(self) + return (not self:is_virtual() and self:type() == "bridge") +end + +function protocol.opkg_package(self) + return nil +end + +function protocol.is_installed(self) + return true +end + +function protocol.is_virtual(self) + return false +end + +function protocol.is_floating(self) + return false +end + +function protocol.is_empty(self) + if self:is_floating() then + return false + else + local rv = true + + if (self:_get("ifname") or ""):match("%S+") then + rv = false + end + + _uci:foreach("wireless", "wifi-iface", + function(s) + local n + for n in utl.imatch(s.network) do + if n == self.sid then + rv = false + return false + end + end + end) + + return rv + end +end + +function protocol.add_interface(self, ifname) + ifname = _M:ifnameof(ifname) + if ifname and not self:is_floating() then + -- if its a wifi interface, change its network option + local wif = _wifi_lookup(ifname) + if wif then + _append("wireless", wif, "network", self.sid) + + -- add iface to our iface list + else + _append("network", self.sid, "ifname", ifname) + end + end +end + +function protocol.del_interface(self, ifname) + ifname = _M:ifnameof(ifname) + if ifname and not self:is_floating() then + -- if its a wireless interface, clear its network option + local wif = _wifi_lookup(ifname) + if wif then _filter("wireless", wif, "network", self.sid) end + + -- remove the interface + _filter("network", self.sid, "ifname", ifname) + end +end + +function protocol.get_interface(self) + if self:is_virtual() then + _tunnel[self:proto() .. "-" .. self.sid] = true + return interface(self:proto() .. "-" .. self.sid, self) + elseif self:is_bridge() then + _bridge["br-" .. self.sid] = true + return interface("br-" .. self.sid, self) + else + local ifn = nil + local num = { } + for ifn in utl.imatch(_uci:get("network", self.sid, "ifname")) do + ifn = ifn:match("^[^:/]+") + return ifn and interface(ifn, self) + end + ifn = nil + _uci:foreach("wireless", "wifi-iface", + function(s) + if s.device then + num[s.device] = num[s.device] and num[s.device] + 1 or 1 + + local net + for net in utl.imatch(s.network) do + if net == self.sid then + ifn = "%s.network%d" %{ s.device, num[s.device] } + return false + end + end + end + end) + return ifn and interface(ifn, self) + end +end + +function protocol.get_interfaces(self) + if self:is_bridge() or (self:is_virtual() and not self:is_floating()) then + local ifaces = { } + + local ifn + local nfs = { } + for ifn in utl.imatch(self:get("ifname")) do + ifn = ifn:match("^[^:/]+") + nfs[ifn] = interface(ifn, self) + end + + for ifn in utl.kspairs(nfs) do + ifaces[#ifaces+1] = nfs[ifn] + end + + local num = { } + local wfs = { } + _uci:foreach("wireless", "wifi-iface", + function(s) + if s.device then + num[s.device] = num[s.device] and num[s.device] + 1 or 1 + + local net + for net in utl.imatch(s.network) do + if net == self.sid then + ifn = "%s.network%d" %{ s.device, num[s.device] } + wfs[ifn] = interface(ifn, self) + end + end + end + end) + + for ifn in utl.kspairs(wfs) do + ifaces[#ifaces+1] = wfs[ifn] + end + + return ifaces + end +end + +function protocol.contains_interface(self, ifname) + ifname = _M:ifnameof(ifname) + if not ifname then + return false + elseif self:is_virtual() and self:proto() .. "-" .. self.sid == ifname then + return true + elseif self:is_bridge() and "br-" .. self.sid == ifname then + return true + else + local ifn + for ifn in utl.imatch(self:get("ifname")) do + ifn = ifn:match("[^:]+") + if ifn == ifname then + return true + end + end + + local wif = _wifi_lookup(ifname) + if wif then + local n + for n in utl.imatch(_uci:get("wireless", wif, "network")) do + if n == self.sid then + return true + end + end + end + end + + return false +end + +function protocol.adminlink(self) + return dsp.build_url("admin", "network", "network", self.sid) +end + + +interface = utl.class() + +function interface.__init__(self, ifname, network) + local wif = _wifi_lookup(ifname) + if wif then + self.wif = wifinet(wif) + self.ifname = _wifi_state("section", wif, "ifname") + end + + self.ifname = self.ifname or ifname + self.dev = _interfaces[self.ifname] + self.network = network +end + +function interface._ubus(self, field) + if not _ubusdevcache[self.ifname] then + _ubusdevcache[self.ifname] = utl.ubus("network.device", "status", + { name = self.ifname }) + end + if _ubusdevcache[self.ifname] and field then + return _ubusdevcache[self.ifname][field] + end + return _ubusdevcache[self.ifname] +end + +function interface.name(self) + return self.wif and self.wif:ifname() or self.ifname +end + +function interface.mac(self) + local mac = self:_ubus("macaddr") + return mac and mac:upper() +end + +function interface.ipaddrs(self) + return self.dev and self.dev.ipaddrs or { } +end + +function interface.ip6addrs(self) + return self.dev and self.dev.ip6addrs or { } +end + +function interface.type(self) + if self.wif or _wifi_iface(self.ifname) then + return "wifi" + elseif _bridge[self.ifname] then + return "bridge" + elseif _tunnel[self.ifname] then + return "tunnel" + elseif self.ifname:match("%.") then + return "vlan" + elseif _switch[self.ifname] then + return "switch" + else + return "ethernet" + end +end + +function interface.shortname(self) + if self.wif then + return self.wif:shortname() + else + return self.ifname + end +end + +function interface.get_i18n(self) + if self.wif then + return "%s: %s %q" %{ + lng.translate("Wireless Network"), + self.wif:active_mode(), + self.wif:active_ssid() or self.wif:active_bssid() or self.wif:id() + } + else + return "%s: %q" %{ self:get_type_i18n(), self:name() } + end +end + +function interface.get_type_i18n(self) + local x = self:type() + if x == "wifi" then + return lng.translate("Wireless Adapter") + elseif x == "bridge" then + return lng.translate("Bridge") + elseif x == "switch" then + return lng.translate("Ethernet Switch") + elseif x == "vlan" then + if _switch[self.ifname] then + return lng.translate("Switch VLAN") + else + return lng.translate("Software VLAN") + end + elseif x == "tunnel" then + return lng.translate("Tunnel Interface") + else + return lng.translate("Ethernet Adapter") + end +end + +function interface.adminlink(self) + if self.wif then + return self.wif:adminlink() + end +end + +function interface.ports(self) + local members = self:_ubus("bridge-members") + if members then + local _, iface + local ifaces = { } + for _, iface in ipairs(members) do + ifaces[#ifaces+1] = interface(iface) + end + end +end + +function interface.bridge_id(self) + if self.br then + return self.br.id + else + return nil + end +end + +function interface.bridge_stp(self) + if self.br then + return self.br.stp + else + return false + end +end + +function interface.is_up(self) + return self:_ubus("up") or false +end + +function interface.is_bridge(self) + return (self:type() == "bridge") +end + +function interface.is_bridgeport(self) + return self.dev and self.dev.bridge and true or false +end + +function interface.tx_bytes(self) + local stat = self:_ubus("statistics") + return stat and stat.tx_bytes or 0 +end + +function interface.rx_bytes(self) + local stat = self:_ubus("statistics") + return stat and stat.rx_bytes or 0 +end + +function interface.tx_packets(self) + local stat = self:_ubus("statistics") + return stat and stat.tx_packets or 0 +end + +function interface.rx_packets(self) + local stat = self:_ubus("statistics") + return stat and stat.rx_packets or 0 +end + +function interface.get_network(self) + return self:get_networks()[1] +end + +function interface.get_networks(self) + if not self.networks then + local nets = { } + local _, net + for _, net in ipairs(_M:get_networks()) do + if net:contains_interface(self.ifname) or + net:ifname() == self.ifname + then + nets[#nets+1] = net + end + end + table.sort(nets, function(a, b) return a.sid < b.sid end) + self.networks = nets + return nets + else + return self.networks + end +end + +function interface.get_wifinet(self) + return self.wif +end + + +wifidev = utl.class() + +function wifidev.__init__(self, dev) + self.sid = dev + self.iwinfo = dev and sys.wifi.getiwinfo(dev) or { } +end + +function wifidev.get(self, opt) + return _get("wireless", self.sid, opt) +end + +function wifidev.set(self, opt, val) + return _set("wireless", self.sid, opt, val) +end + +function wifidev.name(self) + return self.sid +end + +function wifidev.hwmodes(self) + local l = self.iwinfo.hwmodelist + if l and next(l) then + return l + else + return { b = true, g = true } + end +end + +function wifidev.get_i18n(self) + local t = "Generic" + if self.iwinfo.type == "wl" then + t = "Broadcom" + elseif self.iwinfo.type == "madwifi" then + t = "Atheros" + end + + local m = "" + local l = self:hwmodes() + if l.a then m = m .. "a" end + if l.b then m = m .. "b" end + if l.g then m = m .. "g" end + if l.n then m = m .. "n" end + if l.ac then m = "ac" end + + return "%s 802.11%s Wireless Controller (%s)" %{ t, m, self:name() } +end + +function wifidev.is_up(self) + if _ubuswificache[self.sid] then + return (_ubuswificache[self.sid].up == true) + end + + return false +end + +function wifidev.get_wifinet(self, net) + if _uci:get("wireless", net) == "wifi-iface" then + return wifinet(net) + else + local wnet = _wifi_lookup(net) + if wnet then + return wifinet(wnet) + end + end +end + +function wifidev.get_wifinets(self) + local nets = { } + + _uci:foreach("wireless", "wifi-iface", + function(s) + if s.device == self.sid then + nets[#nets+1] = wifinet(s['.name']) + end + end) + + return nets +end + +function wifidev.add_wifinet(self, options) + options = options or { } + options.device = self.sid + + local wnet = _uci:section("wireless", "wifi-iface", nil, options) + if wnet then + return wifinet(wnet, options) + end +end + +function wifidev.del_wifinet(self, net) + if utl.instanceof(net, wifinet) then + net = net.sid + elseif _uci:get("wireless", net) ~= "wifi-iface" then + net = _wifi_lookup(net) + end + + if net and _uci:get("wireless", net, "device") == self.sid then + _uci:delete("wireless", net) + return true + end + + return false +end + + +wifinet = utl.class() + +function wifinet.__init__(self, net, data) + self.sid = net + + local n = 0 + local num = { } + local netid, sid + _uci:foreach("wireless", "wifi-iface", + function(s) + n = n + 1 + if s.device then + num[s.device] = num[s.device] and num[s.device] + 1 or 1 + if s['.name'] == self.sid then + sid = "@wifi-iface[%d]" % n + netid = "%s.network%d" %{ s.device, num[s.device] } + return false + end + end + end) + + if sid then + local _, k, r, i + for k, r in pairs(_ubuswificache) do + if type(r) == "table" and + type(r.interfaces) == "table" + then + for _, i in ipairs(r.interfaces) do + if type(i) == "table" and i.section == sid then + self._ubusdata = { + radio = k, + dev = r, + net = i + } + end + end + end + end + end + + local dev = _wifi_state("section", self.sid, "ifname") or netid + + self.netid = netid + self.wdev = dev + self.iwinfo = dev and sys.wifi.getiwinfo(dev) or { } +end + +function wifinet.ubus(self, ...) + local n, v = self._ubusdata + for n = 1, select('#', ...) do + if type(v) == "table" then + v = v[select(n, ...)] + else + return nil + end + end + return v +end + +function wifinet.get(self, opt) + return _get("wireless", self.sid, opt) +end + +function wifinet.set(self, opt, val) + return _set("wireless", self.sid, opt, val) +end + +function wifinet.mode(self) + return self:ubus("net", "config", "mode") or self:get("mode") or "ap" +end + +function wifinet.ssid(self) + return self:ubus("net", "config", "ssid") or self:get("ssid") +end + +function wifinet.bssid(self) + return self:ubus("net", "config", "bssid") or self:get("bssid") +end + +function wifinet.network(self) + local net, networks = nil, { } + for net in utl.imatch(self:ubus("net", "config", "network") or self:get("network")) do + networks[#networks+1] = net + end + return networks +end + +function wifinet.id(self) + return self.netid +end + +function wifinet.name(self) + return self.sid +end + +function wifinet.ifname(self) + local ifname = self:ubus("net", "ifname") or self.iwinfo.ifname + if not ifname or ifname:match("^wifi%d") or ifname:match("^radio%d") then + ifname = self.wdev + end + return ifname +end + +function wifinet.get_device(self) + local dev = self:ubus("radio") or self:get("device") + return dev and wifidev(dev) or nil +end + +function wifinet.is_up(self) + local ifc = self:get_interface() + return (ifc and ifc:is_up() or false) +end + +function wifinet.active_mode(self) + local m = self.iwinfo.mode or self:ubus("net", "config", "mode") or self:get("mode") or "ap" + + if m == "ap" then m = "Master" + elseif m == "sta" then m = "Client" + elseif m == "adhoc" then m = "Ad-Hoc" + elseif m == "mesh" then m = "Mesh" + elseif m == "monitor" then m = "Monitor" + end + + return m +end + +function wifinet.active_mode_i18n(self) + return lng.translate(self:active_mode()) +end + +function wifinet.active_ssid(self) + return self.iwinfo.ssid or self:ubus("net", "config", "ssid") or self:get("ssid") +end + +function wifinet.active_bssid(self) + return self.iwinfo.bssid or self:ubus("net", "config", "bssid") or self:get("bssid") +end + +function wifinet.active_encryption(self) + local enc = self.iwinfo and self.iwinfo.encryption + return enc and enc.description or "-" +end + +function wifinet.assoclist(self) + return self.iwinfo.assoclist or { } +end + +function wifinet.frequency(self) + local freq = self.iwinfo.frequency + if freq and freq > 0 then + return "%.03f" % (freq / 1000) + end +end + +function wifinet.bitrate(self) + local rate = self.iwinfo.bitrate + if rate and rate > 0 then + return (rate / 1000) + end +end + +function wifinet.channel(self) + return self.iwinfo.channel or self:ubus("dev", "config", "channel") or + tonumber(self:get("channel")) +end + +function wifinet.signal(self) + return self.iwinfo.signal or 0 +end + +function wifinet.noise(self) + return self.iwinfo.noise or 0 +end + +function wifinet.country(self) + return self.iwinfo.country or self:ubus("dev", "config", "country") or "00" +end + +function wifinet.txpower(self) + local pwr = (self.iwinfo.txpower or 0) + return pwr + self:txpower_offset() +end + +function wifinet.txpower_offset(self) + return self.iwinfo.txpower_offset or 0 +end + +function wifinet.signal_level(self, s, n) + if self:active_bssid() ~= "00:00:00:00:00:00" then + local signal = s or self:signal() + local noise = n or self:noise() + + if signal < 0 and noise < 0 then + local snr = -1 * (noise - signal) + return math.floor(snr / 5) + else + return 0 + end + else + return -1 + end +end + +function wifinet.signal_percent(self) + local qc = self.iwinfo.quality or 0 + local qm = self.iwinfo.quality_max or 0 + + if qc > 0 and qm > 0 then + return math.floor((100 / qm) * qc) + else + return 0 + end +end + +function wifinet.shortname(self) + return "%s %q" %{ + lng.translate(self:active_mode()), + self:active_ssid() or self:active_bssid() or self:id() + } +end + +function wifinet.get_i18n(self) + return "%s: %s %q (%s)" %{ + lng.translate("Wireless Network"), + lng.translate(self:active_mode()), + self:active_ssid() or self:active_bssid() or self:id(), + self:ifname() + } +end + +function wifinet.adminlink(self) + return dsp.build_url("admin", "network", "wireless", self.netid) +end + +function wifinet.get_network(self) + return self:get_networks()[1] +end + +function wifinet.get_networks(self) + local nets = { } + local net + for net in utl.imatch(self:ubus("net", "config", "network") or self:get("network")) do + if _uci:get("network", net) == "interface" then + nets[#nets+1] = network(net) + end + end + table.sort(nets, function(a, b) return a.sid < b.sid end) + return nets +end + +function wifinet.get_interface(self) + return interface(self:ifname()) +end + + +-- setup base protocols +_M:register_protocol("static") +_M:register_protocol("dhcp") +_M:register_protocol("none") + +-- load protocol extensions +local exts = nfs.dir(utl.libpath() .. "/model/network") +if exts then + local ext + for ext in exts do + if ext:match("%.lua$") then + require("luci.model.network." .. ext:gsub("%.lua$", "")) + end + end +end diff --git a/feeds/luci/modules/luci-base/luasrc/model/uci.lua b/feeds/luci/modules/luci-base/luasrc/model/uci.lua new file mode 100644 index 0000000..577c6cd --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/model/uci.lua @@ -0,0 +1,236 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local os = require "os" +local uci = require "uci" +local util = require "luci.util" +local table = require "table" + + +local setmetatable, rawget, rawset = setmetatable, rawget, rawset +local require, getmetatable = require, getmetatable +local error, pairs, ipairs = error, pairs, ipairs +local type, tostring, tonumber, unpack = type, tostring, tonumber, unpack + +-- The typical workflow for UCI is: Get a cursor instance from the +-- cursor factory, modify data (via Cursor.add, Cursor.delete, etc.), +-- save the changes to the staging area via Cursor.save and finally +-- Cursor.commit the data to the actual config files. +-- LuCI then needs to Cursor.apply the changes so deamons etc. are +-- reloaded. +module "luci.model.uci" + +cursor = uci.cursor + +APIVERSION = uci.APIVERSION + +function cursor_state() + return cursor(nil, "/var/state") +end + + +inst = cursor() +inst_state = cursor_state() + +local Cursor = getmetatable(inst) + +function Cursor.apply(self, configlist, command) + configlist = self:_affected(configlist) + if command then + return { "/sbin/luci-reload", unpack(configlist) } + else + return os.execute("/sbin/luci-reload %s >/dev/null 2>&1" + % table.concat(configlist, " ")) + end +end + + +-- returns a boolean whether to delete the current section (optional) +function Cursor.delete_all(self, config, stype, comparator) + local del = {} + + if type(comparator) == "table" then + local tbl = comparator + comparator = function(section) + for k, v in pairs(tbl) do + if section[k] ~= v then + return false + end + end + return true + end + end + + local function helper (section) + + if not comparator or comparator(section) then + del[#del+1] = section[".name"] + end + end + + self:foreach(config, stype, helper) + + for i, j in ipairs(del) do + self:delete(config, j) + end +end + +function Cursor.section(self, config, type, name, values) + local stat = true + if name then + stat = self:set(config, name, type) + else + name = self:add(config, type) + stat = name and true + end + + if stat and values then + stat = self:tset(config, name, values) + end + + return stat and name +end + +function Cursor.tset(self, config, section, values) + local stat = true + for k, v in pairs(values) do + if k:sub(1, 1) ~= "." then + stat = stat and self:set(config, section, k, v) + end + end + return stat +end + +function Cursor.get_bool(self, ...) + local val = self:get(...) + return ( val == "1" or val == "true" or val == "yes" or val == "on" ) +end + +function Cursor.get_list(self, config, section, option) + if config and section and option then + local val = self:get(config, section, option) + return ( type(val) == "table" and val or { val } ) + end + return {} +end + +function Cursor.get_first(self, conf, stype, opt, def) + local rv = def + + self:foreach(conf, stype, + function(s) + local val = not opt and s['.name'] or s[opt] + + if type(def) == "number" then + val = tonumber(val) + elseif type(def) == "boolean" then + val = (val == "1" or val == "true" or + val == "yes" or val == "on") + end + + if val ~= nil then + rv = val + return false + end + end) + + return rv +end + +function Cursor.set_list(self, config, section, option, value) + if config and section and option then + if not value or #value == 0 then + return self:delete(config, section, option) + end + return self:set( + config, section, option, + ( type(value) == "table" and value or { value } ) + ) + end + return false +end + +-- Return a list of initscripts affected by configuration changes. +function Cursor._affected(self, configlist) + configlist = type(configlist) == "table" and configlist or {configlist} + + local c = cursor() + c:load("ucitrack") + + -- Resolve dependencies + local reloadlist = {} + + local function _resolve_deps(name) + local reload = {name} + local deps = {} + + c:foreach("ucitrack", name, + function(section) + if section.affects then + for i, aff in ipairs(section.affects) do + deps[#deps+1] = aff + end + end + end) + + for i, dep in ipairs(deps) do + for j, add in ipairs(_resolve_deps(dep)) do + reload[#reload+1] = add + end + end + + return reload + end + + -- Collect initscripts + for j, config in ipairs(configlist) do + for i, e in ipairs(_resolve_deps(config)) do + if not util.contains(reloadlist, e) then + reloadlist[#reloadlist+1] = e + end + end + end + + return reloadlist +end + +-- curser, means it the parent unloads or loads configs, the sub state will +-- do so as well. +function Cursor.substate(self) + Cursor._substates = Cursor._substates or { } + Cursor._substates[self] = Cursor._substates[self] or cursor_state() + return Cursor._substates[self] +end + +local _load = Cursor.load +function Cursor.load(self, ...) + if Cursor._substates and Cursor._substates[self] then + _load(Cursor._substates[self], ...) + end + return _load(self, ...) +end + +local _unload = Cursor.unload +function Cursor.unload(self, ...) + if Cursor._substates and Cursor._substates[self] then + _unload(Cursor._substates[self], ...) + end + return _unload(self, ...) +end + + + + + + + + + + + + + + + + + diff --git a/feeds/luci/modules/luci-base/luasrc/model/uci.luadoc b/feeds/luci/modules/luci-base/luasrc/model/uci.luadoc new file mode 100644 index 0000000..49093c7 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/model/uci.luadoc @@ -0,0 +1,299 @@ +---[[ +LuCI UCI model library. + +The typical workflow for UCI is: Get a cursor instance from the +cursor factory, modify data (via Cursor.add, Cursor.delete, etc.), +save the changes to the staging area via Cursor.save and finally +Cursor.commit the data to the actual config files. +LuCI then needs to Cursor.apply the changes so deamons etc. are +reloaded. +@cstyle instance +]] +module "luci.model.uci" + +---[[ +Create a new UCI-Cursor. + +@class function +@name cursor +@return UCI-Cursor +]] + +---[[ +Create a new Cursor initialized to the state directory. + +@class function +@name cursor_state +@return UCI cursor +]] + +---[[ +Applies UCI configuration changes + +@class function +@name Cursor.apply +@param configlist List of UCI configurations +@param command Don't apply only return the command +]] + +---[[ +Delete all sections of a given type that match certain criteria. + +@class function +@name Cursor.delete_all +@param config UCI config +@param type UCI section type +@param comparator Function that will be called for each section and +returns a boolean whether to delete the current section (optional) +]] + +---[[ +Create a new section and initialize it with data. + +@class function +@name Cursor.section +@param config UCI config +@param type UCI section type +@param name UCI section name (optional) +@param values Table of key - value pairs to initialize the section with +@return Name of created section +]] + +---[[ +Updated the data of a section using data from a table. + +@class function +@name Cursor.tset +@param config UCI config +@param section UCI section name (optional) +@param values Table of key - value pairs to update the section with +]] + +---[[ +Get a boolean option and return it's value as true or false. + +@class function +@name Cursor.get_bool +@param config UCI config +@param section UCI section name +@param option UCI option +@return Boolean +]] + +---[[ +Get an option or list and return values as table. + +@class function +@name Cursor.get_list +@param config UCI config +@param section UCI section name +@param option UCI option +@return table. If the option was not found, you will simply get +-- an empty table. +]] + +---[[ +Get the given option from the first section with the given type. + +@class function +@name Cursor.get_first +@param config UCI config +@param type UCI section type +@param option UCI option (optional) +@param default Default value (optional) +@return UCI value +]] + +---[[ +Set given values as list. Setting a list option to an empty list +has the same effect as deleting the option. + +@class function +@name Cursor.set_list +@param config UCI config +@param section UCI section name +@param option UCI option +@param value value or table. Raw values will become a single item table. +@return Boolean whether operation succeeded +]] + +---[[ +Create a sub-state of this cursor. The sub-state is tied to the parent + +curser, means it the parent unloads or loads configs, the sub state will +do so as well. +@class function +@name Cursor.substate +@return UCI state cursor tied to the parent cursor +]] + +---[[ +Add an anonymous section. + +@class function +@name Cursor.add +@param config UCI config +@param type UCI section type +@return Name of created section +]] + +---[[ +Get a table of saved but uncommitted changes. + +@class function +@name Cursor.changes +@param config UCI config +@return Table of changes +@see Cursor.save +]] + +---[[ +Commit saved changes. + +@class function +@name Cursor.commit +@param config UCI config +@return Boolean whether operation succeeded +@see Cursor.revert +@see Cursor.save +]] + +---[[ +Deletes a section or an option. + +@class function +@name Cursor.delete +@param config UCI config +@param section UCI section name +@param option UCI option (optional) +@return Boolean whether operation succeeded +]] + +---[[ +Call a function for every section of a certain type. + +@class function +@name Cursor.foreach +@param config UCI config +@param type UCI section type +@param callback Function to be called +@return Boolean whether operation succeeded +]] + +---[[ +Get a section type or an option + +@class function +@name Cursor.get +@param config UCI config +@param section UCI section name +@param option UCI option (optional) +@return UCI value +]] + +---[[ +Get all sections of a config or all values of a section. + +@class function +@name Cursor.get_all +@param config UCI config +@param section UCI section name (optional) +@return Table of UCI sections or table of UCI values +]] + +---[[ +Manually load a config. + +@class function +@name Cursor.load +@param config UCI config +@return Boolean whether operation succeeded +@see Cursor.save +@see Cursor.unload +]] + +---[[ +Revert saved but uncommitted changes. + +@class function +@name Cursor.revert +@param config UCI config +@return Boolean whether operation succeeded +@see Cursor.commit +@see Cursor.save +]] + +---[[ +Saves changes made to a config to make them committable. + +@class function +@name Cursor.save +@param config UCI config +@return Boolean whether operation succeeded +@see Cursor.load +@see Cursor.unload +]] + +---[[ +Set a value or create a named section. + +When invoked with three arguments `config`, `sectionname`, `sectiontype`, +then a named section of the given type is created. + +When invoked with four arguments `config`, `sectionname`, `optionname` and +`optionvalue` then the value of the specified option is set to the given value. + +@class function +@name Cursor.set +@param config UCI config +@param section UCI section name +@param option UCI option or UCI section type +@param value UCI value or nothing if you want to create a section +@return Boolean whether operation succeeded +]] + +---[[ +Get the configuration directory. + +@class function +@name Cursor.get_confdir +@return Configuration directory +]] + +---[[ +Get the directory for uncomitted changes. + +@class function +@name Cursor.get_savedir +@return Save directory +]] + +---[[ +Set the configuration directory. + +@class function +@name Cursor.set_confdir +@param directory UCI configuration directory +@return Boolean whether operation succeeded +]] + +---[[ +Set the directory for uncommited changes. + +@class function +@name Cursor.set_savedir +@param directory UCI changes directory +@return Boolean whether operation succeeded +]] + +---[[ +Discard changes made to a config. + +@class function +@name Cursor.unload +@param config UCI config +@return Boolean whether operation succeeded +@see Cursor.load +@see Cursor.save +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/sgi/cgi.lua b/feeds/luci/modules/luci-base/luasrc/sgi/cgi.lua new file mode 100644 index 0000000..68ae17a --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/sgi/cgi.lua @@ -0,0 +1,73 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +exectime = os.clock() +module("luci.sgi.cgi", package.seeall) +local ltn12 = require("luci.ltn12") +require("nixio.util") +require("luci.http") +require("luci.sys") +require("luci.dispatcher") + +-- Limited source to avoid endless blocking +local function limitsource(handle, limit) + limit = limit or 0 + local BLOCKSIZE = ltn12.BLOCKSIZE + + return function() + if limit < 1 then + handle:close() + return nil + else + local read = (limit > BLOCKSIZE) and BLOCKSIZE or limit + limit = limit - read + + local chunk = handle:read(read) + if not chunk then handle:close() end + return chunk + end + end +end + +function run() + local r = luci.http.Request( + luci.sys.getenv(), + limitsource(io.stdin, tonumber(luci.sys.getenv("CONTENT_LENGTH"))), + ltn12.sink.file(io.stderr) + ) + + local x = coroutine.create(luci.dispatcher.httpdispatch) + local hcache = "" + local active = true + + while coroutine.status(x) ~= "dead" do + local res, id, data1, data2 = coroutine.resume(x, r) + + if not res then + print("Status: 500 Internal Server Error") + print("Content-Type: text/plain\n") + print(id) + break; + end + + if active then + if id == 1 then + io.write("Status: " .. tostring(data1) .. " " .. data2 .. "\r\n") + elseif id == 2 then + hcache = hcache .. data1 .. ": " .. data2 .. "\r\n" + elseif id == 3 then + io.write(hcache) + io.write("\r\n") + elseif id == 4 then + io.write(tostring(data1 or "")) + elseif id == 5 then + io.flush() + io.close() + active = false + elseif id == 6 then + data1:copyz(nixio.stdout, data2) + data1:close() + end + end + end +end diff --git a/feeds/luci/modules/luci-base/luasrc/sgi/uhttpd.lua b/feeds/luci/modules/luci-base/luasrc/sgi/uhttpd.lua new file mode 100644 index 0000000..2836bf0 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/sgi/uhttpd.lua @@ -0,0 +1,89 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require "nixio.util" +require "luci.http" +require "luci.sys" +require "luci.dispatcher" +require "luci.ltn12" + +function handle_request(env) + exectime = os.clock() + local renv = { + CONTENT_LENGTH = env.CONTENT_LENGTH, + CONTENT_TYPE = env.CONTENT_TYPE, + REQUEST_METHOD = env.REQUEST_METHOD, + REQUEST_URI = env.REQUEST_URI, + PATH_INFO = env.PATH_INFO, + SCRIPT_NAME = env.SCRIPT_NAME:gsub("/+$", ""), + SCRIPT_FILENAME = env.SCRIPT_NAME, + SERVER_PROTOCOL = env.SERVER_PROTOCOL, + QUERY_STRING = env.QUERY_STRING + } + + local k, v + for k, v in pairs(env.headers) do + k = k:upper():gsub("%-", "_") + renv["HTTP_" .. k] = v + end + + local len = tonumber(env.CONTENT_LENGTH) or 0 + local function recv() + if len > 0 then + local rlen, rbuf = uhttpd.recv(4096) + if rlen >= 0 then + len = len - rlen + return rbuf + end + end + return nil + end + + local send = uhttpd.send + + local req = luci.http.Request( + renv, recv, luci.ltn12.sink.file(io.stderr) + ) + + + local x = coroutine.create(luci.dispatcher.httpdispatch) + local hcache = { } + local active = true + + while coroutine.status(x) ~= "dead" do + local res, id, data1, data2 = coroutine.resume(x, req) + + if not res then + send("Status: 500 Internal Server Error\r\n") + send("Content-Type: text/plain\r\n\r\n") + send(tostring(id)) + break + end + + if active then + if id == 1 then + send("Status: ") + send(tostring(data1)) + send(" ") + send(tostring(data2)) + send("\r\n") + elseif id == 2 then + hcache[data1] = data2 + elseif id == 3 then + for k, v in pairs(hcache) do + send(tostring(k)) + send(": ") + send(tostring(v)) + send("\r\n") + end + send("\r\n") + elseif id == 4 then + send(tostring(data1 or "")) + elseif id == 5 then + active = false + elseif id == 6 then + data1:copyz(nixio.stdout, data2) + end + end + end +end diff --git a/feeds/luci/modules/luci-base/luasrc/store.lua b/feeds/luci/modules/luci-base/luasrc/store.lua new file mode 100644 index 0000000..34eb296 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/store.lua @@ -0,0 +1,6 @@ +-- Copyright 2009 Steven Barth +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local util = require "luci.util" +module("luci.store", util.threadlocal) \ No newline at end of file diff --git a/feeds/luci/modules/luci-base/luasrc/sys.lua b/feeds/luci/modules/luci-base/luasrc/sys.lua new file mode 100644 index 0000000..a972717 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/sys.lua @@ -0,0 +1,688 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local io = require "io" +local os = require "os" +local table = require "table" +local nixio = require "nixio" +local fs = require "nixio.fs" +local uci = require "luci.model.uci" + +local luci = {} +luci.util = require "luci.util" +luci.ip = require "luci.ip" + +local tonumber, ipairs, pairs, pcall, type, next, setmetatable, require, select = + tonumber, ipairs, pairs, pcall, type, next, setmetatable, require, select + + +module "luci.sys" + +function call(...) + return os.execute(...) / 256 +end + +exec = luci.util.exec + +function mounts() + local data = {} + local k = {"fs", "blocks", "used", "available", "percent", "mountpoint"} + local ps = luci.util.execi("df") + + if not ps then + return + else + ps() + end + + for line in ps do + local row = {} + + local j = 1 + for value in line:gmatch("[^%s]+") do + row[k[j]] = value + j = j + 1 + end + + if row[k[1]] then + + -- this is a rather ugly workaround to cope with wrapped lines in + -- the df output: + -- + -- /dev/scsi/host0/bus0/target0/lun0/part3 + -- 114382024 93566472 15005244 86% /mnt/usb + -- + + if not row[k[2]] then + j = 2 + line = ps() + for value in line:gmatch("[^%s]+") do + row[k[j]] = value + j = j + 1 + end + end + + table.insert(data, row) + end + end + + return data +end + +-- containing the whole environment is returned otherwise this function returns +-- the corresponding string value for the given name or nil if no such variable +-- exists. +getenv = nixio.getenv + +function hostname(newname) + if type(newname) == "string" and #newname > 0 then + fs.writefile( "/proc/sys/kernel/hostname", newname ) + return newname + else + return nixio.uname().nodename + end +end + +function httpget(url, stream, target) + if not target then + local source = stream and io.popen or luci.util.exec + return source("wget -qO- '"..url:gsub("'", "").."'") + else + return os.execute("wget -qO '%s' '%s'" % + {target:gsub("'", ""), url:gsub("'", "")}) + end +end + +function reboot() + return os.execute("reboot >/dev/null 2>&1") +end + +function syslog() + return luci.util.exec("logread") +end + +function dmesg() + return luci.util.exec("dmesg") +end + +function uniqueid(bytes) + local rand = fs.readfile("/dev/urandom", bytes) + return rand and nixio.bin.hexlify(rand) +end + +function uptime() + return nixio.sysinfo().uptime +end + + +net = {} + +-- The following fields are defined for arp entry objects: +-- { "IP address", "HW address", "HW type", "Flags", "Mask", "Device" } +function net.arptable(callback) + local arp = (not callback) and {} or nil + local e, r, v + if fs.access("/proc/net/arp") then + for e in io.lines("/proc/net/arp") do + local r = { }, v + for v in e:gmatch("%S+") do + r[#r+1] = v + end + + if r[1] ~= "IP" then + local x = { + ["IP address"] = r[1], + ["HW type"] = r[2], + ["Flags"] = r[3], + ["HW address"] = r[4], + ["Mask"] = r[5], + ["Device"] = r[6] + } + + if callback then + callback(x) + else + arp = arp or { } + arp[#arp+1] = x + end + end + end + end + return arp +end + +local function _nethints(what, callback) + local _, k, e, mac, ip, name + local cur = uci.cursor() + local ifn = { } + local hosts = { } + + local function _add(i, ...) + local k = select(i, ...) + if k then + if not hosts[k] then hosts[k] = { } end + hosts[k][1] = select(1, ...) or hosts[k][1] + hosts[k][2] = select(2, ...) or hosts[k][2] + hosts[k][3] = select(3, ...) or hosts[k][3] + hosts[k][4] = select(4, ...) or hosts[k][4] + end + end + + luci.ip.neighbors(nil, function(neigh) + if neigh.mac and neigh.family == 4 then + _add(what, neigh.mac:upper(), neigh.dest:string(), nil, nil) + elseif neigh.mac and neigh.family == 6 then + _add(what, neigh.mac:upper(), nil, neigh.dest:string(), nil) + end + end) + + if fs.access("/etc/ethers") then + for e in io.lines("/etc/ethers") do + mac, ip = e:match("^([a-f0-9]%S+) (%S+)") + if mac and ip then + _add(what, mac:upper(), ip, nil, nil) + end + end + end + + cur:foreach("dhcp", "dnsmasq", + function(s) + if s.leasefile and fs.access(s.leasefile) then + for e in io.lines(s.leasefile) do + mac, ip, name = e:match("^%d+ (%S+) (%S+) (%S+)") + if mac and ip then + _add(what, mac:upper(), ip, nil, name ~= "*" and name) + end + end + end + end + ) + + cur:foreach("dhcp", "host", + function(s) + for mac in luci.util.imatch(s.mac) do + _add(what, mac:upper(), s.ip, nil, s.name) + end + end) + + for _, e in ipairs(nixio.getifaddrs()) do + if e.name ~= "lo" then + ifn[e.name] = ifn[e.name] or { } + if e.family == "packet" and e.addr and #e.addr == 17 then + ifn[e.name][1] = e.addr:upper() + elseif e.family == "inet" then + ifn[e.name][2] = e.addr + elseif e.family == "inet6" then + ifn[e.name][3] = e.addr + end + end + end + + for _, e in pairs(ifn) do + if e[what] and (e[2] or e[3]) then + _add(what, e[1], e[2], e[3], e[4]) + end + end + + for _, e in luci.util.kspairs(hosts) do + callback(e[1], e[2], e[3], e[4]) + end +end + +-- Each entry contains the values in the following order: +-- [ "mac", "name" ] +function net.mac_hints(callback) + if callback then + _nethints(1, function(mac, v4, v6, name) + name = name or nixio.getnameinfo(v4 or v6, nil, 100) or v4 + if name and name ~= mac then + callback(mac, name or nixio.getnameinfo(v4 or v6, nil, 100) or v4) + end + end) + else + local rv = { } + _nethints(1, function(mac, v4, v6, name) + name = name or nixio.getnameinfo(v4 or v6, nil, 100) or v4 + if name and name ~= mac then + rv[#rv+1] = { mac, name or nixio.getnameinfo(v4 or v6, nil, 100) or v4 } + end + end) + return rv + end +end + +-- Each entry contains the values in the following order: +-- [ "ip", "name" ] +function net.ipv4_hints(callback) + if callback then + _nethints(2, function(mac, v4, v6, name) + name = name or nixio.getnameinfo(v4, nil, 100) or mac + if name and name ~= v4 then + callback(v4, name) + end + end) + else + local rv = { } + _nethints(2, function(mac, v4, v6, name) + name = name or nixio.getnameinfo(v4, nil, 100) or mac + if name and name ~= v4 then + rv[#rv+1] = { v4, name } + end + end) + return rv + end +end + +-- Each entry contains the values in the following order: +-- [ "ip", "name" ] +function net.ipv6_hints(callback) + if callback then + _nethints(3, function(mac, v4, v6, name) + name = name or nixio.getnameinfo(v6, nil, 100) or mac + if name and name ~= v6 then + callback(v6, name) + end + end) + else + local rv = { } + _nethints(3, function(mac, v4, v6, name) + name = name or nixio.getnameinfo(v6, nil, 100) or mac + if name and name ~= v6 then + rv[#rv+1] = { v6, name } + end + end) + return rv + end +end + +function net.host_hints(callback) + if callback then + _nethints(1, function(mac, v4, v6, name) + if mac and mac ~= "00:00:00:00:00:00" and (v4 or v6 or name) then + callback(mac, v4, v6, name) + end + end) + else + local rv = { } + _nethints(1, function(mac, v4, v6, name) + if mac and mac ~= "00:00:00:00:00:00" and (v4 or v6 or name) then + local e = { } + if v4 then e.ipv4 = v4 end + if v6 then e.ipv6 = v6 end + if name then e.name = name end + rv[mac] = e + end + end) + return rv + end +end + +function net.conntrack(callback) + local ok, nfct = pcall(io.lines, "/proc/net/nf_conntrack") + if not ok or not nfct then + return nil + end + + local line, connt = nil, (not callback) and { } + for line in nfct do + local fam, l3, l4, timeout, tuples = + line:match("^(ipv[46]) +(%d+) +%S+ +(%d+) +(%d+) +(.+)$") + + if fam and l3 and l4 and timeout and not tuples:match("^TIME_WAIT ") then + l4 = nixio.getprotobynumber(l4) + + local entry = { + bytes = 0, + packets = 0, + layer3 = fam, + layer4 = l4 and l4.name or "unknown", + timeout = tonumber(timeout, 10) + } + + local key, val + for key, val in tuples:gmatch("(%w+)=(%S+)") do + if key == "bytes" or key == "packets" then + entry[key] = entry[key] + tonumber(val, 10) + elseif key == "src" or key == "dst" then + if entry[key] == nil then + entry[key] = luci.ip.new(val):string() + end + elseif key == "sport" or key == "dport" then + if entry[key] == nil then + entry[key] = val + end + elseif val then + entry[key] = val + end + end + + if callback then + callback(entry) + else + connt[#connt+1] = entry + end + end + end + + return callback and true or connt +end + +function net.devices() + local devs = {} + for k, v in ipairs(nixio.getifaddrs()) do + if v.family == "packet" then + devs[#devs+1] = v.name + end + end + return devs +end + + +function net.deviceinfo() + local devs = {} + for k, v in ipairs(nixio.getifaddrs()) do + if v.family == "packet" then + local d = v.data + d[1] = d.rx_bytes + d[2] = d.rx_packets + d[3] = d.rx_errors + d[4] = d.rx_dropped + d[5] = 0 + d[6] = 0 + d[7] = 0 + d[8] = d.multicast + d[9] = d.tx_bytes + d[10] = d.tx_packets + d[11] = d.tx_errors + d[12] = d.tx_dropped + d[13] = 0 + d[14] = d.collisions + d[15] = 0 + d[16] = 0 + devs[v.name] = d + end + end + return devs +end + + +-- The following fields are defined for route entry tables: +-- { "dest", "gateway", "metric", "refcount", "usecount", "irtt", +-- "flags", "device" } +function net.routes(callback) + local routes = { } + + for line in io.lines("/proc/net/route") do + + local dev, dst_ip, gateway, flags, refcnt, usecnt, metric, + dst_mask, mtu, win, irtt = line:match( + "([^%s]+)\t([A-F0-9]+)\t([A-F0-9]+)\t([A-F0-9]+)\t" .. + "(%d+)\t(%d+)\t(%d+)\t([A-F0-9]+)\t(%d+)\t(%d+)\t(%d+)" + ) + + if dev then + gateway = luci.ip.Hex( gateway, 32, luci.ip.FAMILY_INET4 ) + dst_mask = luci.ip.Hex( dst_mask, 32, luci.ip.FAMILY_INET4 ) + dst_ip = luci.ip.Hex( + dst_ip, dst_mask:prefix(dst_mask), luci.ip.FAMILY_INET4 + ) + + local rt = { + dest = dst_ip, + gateway = gateway, + metric = tonumber(metric), + refcount = tonumber(refcnt), + usecount = tonumber(usecnt), + mtu = tonumber(mtu), + window = tonumber(window), + irtt = tonumber(irtt), + flags = tonumber(flags, 16), + device = dev + } + + if callback then + callback(rt) + else + routes[#routes+1] = rt + end + end + end + + return routes +end + +-- The following fields are defined for route entry tables: +-- { "source", "dest", "nexthop", "metric", "refcount", "usecount", +-- "flags", "device" } +function net.routes6(callback) + if fs.access("/proc/net/ipv6_route", "r") then + local routes = { } + + for line in io.lines("/proc/net/ipv6_route") do + + local dst_ip, dst_prefix, src_ip, src_prefix, nexthop, + metric, refcnt, usecnt, flags, dev = line:match( + "([a-f0-9]+) ([a-f0-9]+) " .. + "([a-f0-9]+) ([a-f0-9]+) " .. + "([a-f0-9]+) ([a-f0-9]+) " .. + "([a-f0-9]+) ([a-f0-9]+) " .. + "([a-f0-9]+) +([^%s]+)" + ) + + if dst_ip and dst_prefix and + src_ip and src_prefix and + nexthop and metric and + refcnt and usecnt and + flags and dev + then + src_ip = luci.ip.Hex( + src_ip, tonumber(src_prefix, 16), luci.ip.FAMILY_INET6, false + ) + + dst_ip = luci.ip.Hex( + dst_ip, tonumber(dst_prefix, 16), luci.ip.FAMILY_INET6, false + ) + + nexthop = luci.ip.Hex( nexthop, 128, luci.ip.FAMILY_INET6, false ) + + local rt = { + source = src_ip, + dest = dst_ip, + nexthop = nexthop, + metric = tonumber(metric, 16), + refcount = tonumber(refcnt, 16), + usecount = tonumber(usecnt, 16), + flags = tonumber(flags, 16), + device = dev, + + -- lua number is too small for storing the metric + -- add a metric_raw field with the original content + metric_raw = metric + } + + if callback then + callback(rt) + else + routes[#routes+1] = rt + end + end + end + + return routes + end +end + +function net.pingtest(host) + return os.execute("ping -c1 '"..host:gsub("'", '').."' >/dev/null 2>&1") +end + + +process = {} + +function process.info(key) + local s = {uid = nixio.getuid(), gid = nixio.getgid()} + return not key and s or s[key] +end + +function process.list() + local data = {} + local k + local ps = luci.util.execi("/bin/busybox top -bn1") + + if not ps then + return + end + + for line in ps do + local pid, ppid, user, stat, vsz, mem, cpu, cmd = line:match( + "^ *(%d+) +(%d+) +(%S.-%S) +([RSDZTW][W ][/dev/null 2>&1" + ) +end + + +wifi = {} + +function wifi.getiwinfo(ifname) + local stat, iwinfo = pcall(require, "iwinfo") + + if ifname then + local d, n = ifname:match("^(%w+)%.network(%d+)") + local wstate = luci.util.ubus("network.wireless", "status") or { } + + d = d or ifname + n = n and tonumber(n) or 1 + + if type(wstate[d]) == "table" and + type(wstate[d].interfaces) == "table" and + type(wstate[d].interfaces[n]) == "table" and + type(wstate[d].interfaces[n].ifname) == "string" + then + ifname = wstate[d].interfaces[n].ifname + else + ifname = d + end + + local t = stat and iwinfo.type(ifname) + local x = t and iwinfo[t] or { } + return setmetatable({}, { + __index = function(t, k) + if k == "ifname" then + return ifname + elseif x[k] then + return x[k](ifname) + end + end + }) + end +end + + +init = {} +init.dir = "/etc/init.d/" + +function init.names() + local names = { } + for name in fs.glob(init.dir.."*") do + names[#names+1] = fs.basename(name) + end + return names +end + +function init.index(name) + if fs.access(init.dir..name) then + return call("env -i sh -c 'source %s%s enabled; exit ${START:-255}' >/dev/null" + %{ init.dir, name }) + end +end + +local function init_action(action, name) + if fs.access(init.dir..name) then + return call("env -i %s%s %s >/dev/null" %{ init.dir, name, action }) + end +end + +function init.enabled(name) + return (init_action("enabled", name) == 0) +end + +function init.enable(name) + return (init_action("enable", name) == 1) +end + +function init.disable(name) + return (init_action("disable", name) == 0) +end + +function init.start(name) + return (init_action("start", name) == 0) +end + +function init.stop(name) + return (init_action("stop", name) == 0) +end diff --git a/feeds/luci/modules/luci-base/luasrc/sys.luadoc b/feeds/luci/modules/luci-base/luasrc/sys.luadoc new file mode 100644 index 0000000..1c1fa92 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/sys.luadoc @@ -0,0 +1,405 @@ +---[[ +LuCI Linux and POSIX system utilities. +]] +module "luci.sys" + +---[[ +Execute a given shell command and return the error code + +@class function +@name call +@param ... Command to call +@return Error code of the command +]] + +---[[ +Execute a given shell command and capture its standard output + +@class function +@name exec +@param command Command to call +@return String containg the return the output of the command +]] + +---[[ +Retrieve information about currently mounted file systems. + +@class function +@name mounts +@return Table containing mount information +]] + +---[[ +Retrieve environment variables. If no variable is given then a table + +containing the whole environment is returned otherwise this function returns +the corresponding string value for the given name or nil if no such variable +exists. +@class function +@name getenv +@param var Name of the environment variable to retrieve (optional) +@return String containg the value of the specified variable +@return Table containing all variables if no variable name is given +]] + +---[[ +Get or set the current hostname. + +@class function +@name hostname +@param String containing a new hostname to set (optional) +@return String containing the system hostname +]] + +---[[ +Returns the contents of a documented referred by an URL. + +@class function +@name httpget +@param url The URL to retrieve +@param stream Return a stream instead of a buffer +@param target Directly write to target file name +@return String containing the contents of given the URL +]] + +---[[ +Initiate a system reboot. + +@class function +@name reboot +@return Return value of os.execute() +]] + +---[[ +Retrieves the output of the "logread" command. + +@class function +@name syslog +@return String containing the current log buffer +]] + +---[[ +Retrieves the output of the "dmesg" command. + +@class function +@name dmesg +@return String containing the current log buffer +]] + +---[[ +Generates a random id with specified length. + +@class function +@name uniqueid +@param bytes Number of bytes for the unique id +@return String containing hex encoded id +]] + +---[[ +Returns the current system uptime stats. + +@class function +@name uptime +@return String containing total uptime in seconds +]] + +---[[ +LuCI system utilities / network related functions. + +@class module +@name luci.sys.net +]] + +---[[ +Returns the current arp-table entries as two-dimensional table. + +@class function +@name net.arptable +@return Table of table containing the current arp entries. +-- The following fields are defined for arp entry objects: +-- { "IP address", "HW address", "HW type", "Flags", "Mask", "Device" } +]] + +---[[ +Returns a two-dimensional table of mac address hints. + +@class function +@name net.mac_hints +@return Table of table containing known hosts from various sources. + Each entry contains the values in the following order: + [ "mac", "name" ] +]] + +---[[ +Returns a two-dimensional table of IPv4 address hints. + +@class function +@name net.ipv4_hints +@return Table of table containing known hosts from various sources. + Each entry contains the values in the following order: + [ "ip", "name" ] +]] + +---[[ +Returns a two-dimensional table of IPv6 address hints. + +@class function +@name net.ipv6_hints +@return Table of table containing known hosts from various sources. + Each entry contains the values in the following order: + [ "ip", "name" ] +]] + +---[[ +Returns a two-dimensional table of host hints. + +@class function +@name net.host_hints +@return Table of table containing known hosts from various sources, + indexed by mac address. Each subtable contains at least one + of the fields "name", "ipv4" or "ipv6". +]] + +---[[ +Returns conntrack information + +@class function +@name net.conntrack +@return Table with the currently tracked IP connections +]] + +---[[ +Determine the names of available network interfaces. + +@class function +@name net.devices +@return Table containing all current interface names +]] + +---[[ +Return information about available network interfaces. + +@class function +@name net.deviceinfo +@return Table containing all current interface names and their information +]] + +---[[ +Returns the current kernel routing table entries. + +@class function +@name net.routes +@return Table of tables with properties of the corresponding routes. +-- The following fields are defined for route entry tables: +-- { "dest", "gateway", "metric", "refcount", "usecount", "irtt", +-- "flags", "device" } +]] + +---[[ +Returns the current ipv6 kernel routing table entries. + +@class function +@name net.routes6 +@return Table of tables with properties of the corresponding routes. +-- The following fields are defined for route entry tables: +-- { "source", "dest", "nexthop", "metric", "refcount", "usecount", +-- "flags", "device" } +]] + +---[[ +Tests whether the given host responds to ping probes. + +@class function +@name net.pingtest +@param host String containing a hostname or IPv4 address +@return Number containing 0 on success and >= 1 on error +]] + +---[[ +LuCI system utilities / process related functions. + +@class module +@name luci.sys.process +]] + +---[[ +Get the current process id. + +@class function +@name process.info +@return Number containing the current pid +]] + +---[[ +Retrieve information about currently running processes. + +@class function +@name process.list +@return Table containing process information +]] + +---[[ +Set the gid of a process identified by given pid. + +@class function +@name process.setgroup +@param gid Number containing the Unix group id +@return Boolean indicating successful operation +@return String containing the error message if failed +@return Number containing the error code if failed +]] + +---[[ +Set the uid of a process identified by given pid. + +@class function +@name process.setuser +@param uid Number containing the Unix user id +@return Boolean indicating successful operation +@return String containing the error message if failed +@return Number containing the error code if failed +]] + +---[[ +Send a signal to a process identified by given pid. + +@class function +@name process.signal +@param pid Number containing the process id +@param sig Signal to send (default: 15 [SIGTERM]) +@return Boolean indicating successful operation +@return Number containing the error code if failed +]] + +---[[ +LuCI system utilities / user related functions. + +@class module +@name luci.sys.user +]] + +---[[ +Retrieve user informations for given uid. + +@class function +@name getuser +@param uid Number containing the Unix user id +@return Table containing the following fields: +-- { "uid", "gid", "name", "passwd", "dir", "shell", "gecos" } +]] + +---[[ +Retrieve the current user password hash. + +@class function +@name user.getpasswd +@param username String containing the username to retrieve the password for +@return String containing the hash or nil if no password is set. +@return Password database entry +]] + +---[[ +Test whether given string matches the password of a given system user. + +@class function +@name user.checkpasswd +@param username String containing the Unix user name +@param pass String containing the password to compare +@return Boolean indicating wheather the passwords are equal +]] + +---[[ +Change the password of given user. + +@class function +@name user.setpasswd +@param username String containing the Unix user name +@param password String containing the password to compare +@return Number containing 0 on success and >= 1 on error +]] + +---[[ +LuCI system utilities / wifi related functions. + +@class module +@name luci.sys.wifi +]] + +---[[ +Get wireless information for given interface. + +@class function +@name wifi.getiwinfo +@param ifname String containing the interface name +@return A wrapped iwinfo object instance +]] + +---[[ +LuCI system utilities / init related functions. + +@class module +@name luci.sys.init +]] + +---[[ +Get the names of all installed init scripts + +@class function +@name init.names +@return Table containing the names of all inistalled init scripts +]] + +---[[ +Get the index of he given init script + +@class function +@name init.index +@param name Name of the init script +@return Numeric index value +]] + +---[[ +Test whether the given init script is enabled + +@class function +@name init.enabled +@param name Name of the init script +@return Boolean indicating whether init is enabled +]] + +---[[ +Enable the given init script + +@class function +@name init.enable +@param name Name of the init script +@return Boolean indicating success +]] + +---[[ +Disable the given init script + +@class function +@name init.disable +@param name Name of the init script +@return Boolean indicating success +]] + +---[[ +Start the given init script + +@class function +@name init.start +@param name Name of the init script +@return Boolean indicating success +]] + +---[[ +Stop the given init script + +@class function +@name init.stop +@param name Name of the init script +@return Boolean indicating success +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/sys/iptparser.lua b/feeds/luci/modules/luci-base/luasrc/sys/iptparser.lua new file mode 100644 index 0000000..7ff665e --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/sys/iptparser.lua @@ -0,0 +1,374 @@ +--[[ + +Iptables parser and query library +(c) 2008-2009 Jo-Philipp Wich +(c) 2008-2009 Steven Barth + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +local luci = {} +luci.util = require "luci.util" +luci.sys = require "luci.sys" +luci.ip = require "luci.ip" + +local pcall = pcall +local io = require "io" +local tonumber, ipairs, table = tonumber, ipairs, table + +module("luci.sys.iptparser") + +IptParser = luci.util.class() + +function IptParser.__init__( self, family ) + self._family = (tonumber(family) == 6) and 6 or 4 + self._rules = { } + self._chains = { } + self._tables = { } + + local t = self._tables + local s = self:_supported_tables(self._family) + + if s.filter then t[#t+1] = "filter" end + if s.nat then t[#t+1] = "nat" end + if s.mangle then t[#t+1] = "mangle" end + if s.raw then t[#t+1] = "raw" end + + if self._family == 4 then + self._nulladdr = "0.0.0.0/0" + self._command = "iptables -t %s --line-numbers -nxvL" + else + self._nulladdr = "::/0" + self._command = "ip6tables -t %s --line-numbers -nxvL" + end + + self:_parse_rules() +end + +function IptParser._supported_tables( self, family ) + local tables = { } + local ok, lines = pcall(io.lines, + (family == 6) and "/proc/net/ip6_tables_names" + or "/proc/net/ip_tables_names") + + if ok and lines then + local line + for line in lines do + tables[line] = true + end + end + + return tables +end + +-- search criteria as only argument. If args is nil or an empty table then all +-- rules will be returned. +-- +-- The following keys in the args table are recognized: +--
    +--
  • table - Match rules that are located within the given table +--
  • chain - Match rules that are located within the given chain +--
  • target - Match rules with the given target +--
  • protocol - Match rules that match the given protocol, rules with +-- protocol "all" are always matched +--
  • source - Match rules with the given source, rules with source +-- "0.0.0.0/0" (::/0) are always matched +--
  • destination - Match rules with the given destination, rules with +-- destination "0.0.0.0/0" (::/0) are always matched +--
  • inputif - Match rules with the given input interface, rules +-- with input interface "*" (=all) are always matched +--
  • outputif - Match rules with the given output interface, rules +-- with output interface "*" (=all) are always matched +--
  • flags - Match rules that match the given flags, current +-- supported values are "-f" (--fragment) +-- and "!f" (! --fragment) +--
  • options - Match rules containing all given options +--
+-- The return value is a list of tables representing the matched rules. +-- Each rule table contains the following fields: +--
    +--
  • index - The index number of the rule +--
  • table - The table where the rule is located, can be one +-- of "filter", "nat" or "mangle" +--
  • chain - The chain where the rule is located, e.g. "INPUT" +-- or "postrouting_wan" +--
  • target - The rule target, e.g. "REJECT" or "DROP" +--
  • protocol The matching protocols, e.g. "all" or "tcp" +--
  • flags - Special rule options ("--", "-f" or "!f") +--
  • inputif - Input interface of the rule, e.g. "eth0.0" +-- or "*" for all interfaces +--
  • outputif - Output interface of the rule,e.g. "eth0.0" +-- or "*" for all interfaces +--
  • source - The source ip range, e.g. "0.0.0.0/0" (::/0) +--
  • destination - The destination ip range, e.g. "0.0.0.0/0" (::/0) +--
  • options - A list of specific options of the rule, +-- e.g. { "reject-with", "tcp-reset" } +--
  • packets - The number of packets matched by the rule +--
  • bytes - The number of total bytes matched by the rule +--
+-- Example: +--
+-- ip = luci.sys.iptparser.IptParser()
+-- result = ip.find( {
+-- 	target="REJECT",
+-- 	protocol="tcp",
+-- 	options={ "reject-with", "tcp-reset" }
+-- } )
+-- 
+-- This will match all rules with target "-j REJECT", +-- protocol "-p tcp" (or "-p all") +-- and the option "--reject-with tcp-reset". +function IptParser.find( self, args ) + + local args = args or { } + local rv = { } + + args.source = args.source and self:_parse_addr(args.source) + args.destination = args.destination and self:_parse_addr(args.destination) + + for i, rule in ipairs(self._rules) do + local match = true + + -- match table + if not ( not args.table or args.table:lower() == rule.table ) then + match = false + end + + -- match chain + if not ( match == true and ( + not args.chain or args.chain == rule.chain + ) ) then + match = false + end + + -- match target + if not ( match == true and ( + not args.target or args.target == rule.target + ) ) then + match = false + end + + -- match protocol + if not ( match == true and ( + not args.protocol or rule.protocol == "all" or + args.protocol:lower() == rule.protocol + ) ) then + match = false + end + + -- match source + if not ( match == true and ( + not args.source or rule.source == self._nulladdr or + self:_parse_addr(rule.source):contains(args.source) + ) ) then + match = false + end + + -- match destination + if not ( match == true and ( + not args.destination or rule.destination == self._nulladdr or + self:_parse_addr(rule.destination):contains(args.destination) + ) ) then + match = false + end + + -- match input interface + if not ( match == true and ( + not args.inputif or rule.inputif == "*" or + args.inputif == rule.inputif + ) ) then + match = false + end + + -- match output interface + if not ( match == true and ( + not args.outputif or rule.outputif == "*" or + args.outputif == rule.outputif + ) ) then + match = false + end + + -- match flags (the "opt" column) + if not ( match == true and ( + not args.flags or rule.flags == args.flags + ) ) then + match = false + end + + -- match specific options + if not ( match == true and ( + not args.options or + self:_match_options( rule.options, args.options ) + ) ) then + match = false + end + + -- insert match + if match == true then + rv[#rv+1] = rule + end + end + + return rv +end + + +-- through external commands. +function IptParser.resync( self ) + self._rules = { } + self._chain = nil + self:_parse_rules() +end + + +function IptParser.tables( self ) + return self._tables +end + + +function IptParser.chains( self, table ) + local lookup = { } + local chains = { } + for _, r in ipairs(self:find({table=table})) do + if not lookup[r.chain] then + lookup[r.chain] = true + chains[#chains+1] = r.chain + end + end + return chains +end + + +-- and "rules". The "rules" field is a table of rule tables. +function IptParser.chain( self, table, chain ) + return self._chains[table:lower()] and self._chains[table:lower()][chain] +end + + +function IptParser.is_custom_target( self, target ) + for _, r in ipairs(self._rules) do + if r.chain == target then + return true + end + end + return false +end + + +-- [internal] Parse address according to family. +function IptParser._parse_addr( self, addr ) + if self._family == 4 then + return luci.ip.IPv4(addr) + else + return luci.ip.IPv6(addr) + end +end + +-- [internal] Parse iptables output from all tables. +function IptParser._parse_rules( self ) + + for i, tbl in ipairs(self._tables) do + + self._chains[tbl] = { } + + for i, rule in ipairs(luci.util.execl(self._command % tbl)) do + + if rule:find( "^Chain " ) == 1 then + + local crefs + local cname, cpol, cpkt, cbytes = rule:match( + "^Chain ([^%s]*) %(policy (%w+) " .. + "(%d+) packets, (%d+) bytes%)" + ) + + if not cname then + cname, crefs = rule:match( + "^Chain ([^%s]*) %((%d+) references%)" + ) + end + + self._chain = cname + self._chains[tbl][cname] = { + policy = cpol, + packets = tonumber(cpkt or 0), + bytes = tonumber(cbytes or 0), + references = tonumber(crefs or 0), + rules = { } + } + + else + if rule:find("%d") == 1 then + + local rule_parts = luci.util.split( rule, "%s+", nil, true ) + local rule_details = { } + + -- cope with rules that have no target assigned + if rule:match("^%d+%s+%d+%s+%d+%s%s") then + table.insert(rule_parts, 4, nil) + end + + -- ip6tables opt column is usually zero-width + if self._family == 6 then + table.insert(rule_parts, 6, "--") + end + + rule_details["table"] = tbl + rule_details["chain"] = self._chain + rule_details["index"] = tonumber(rule_parts[1]) + rule_details["packets"] = tonumber(rule_parts[2]) + rule_details["bytes"] = tonumber(rule_parts[3]) + rule_details["target"] = rule_parts[4] + rule_details["protocol"] = rule_parts[5] + rule_details["flags"] = rule_parts[6] + rule_details["inputif"] = rule_parts[7] + rule_details["outputif"] = rule_parts[8] + rule_details["source"] = rule_parts[9] + rule_details["destination"] = rule_parts[10] + rule_details["options"] = { } + + for i = 11, #rule_parts do + if #rule_parts[i] > 0 then + rule_details["options"][i-10] = rule_parts[i] + end + end + + self._rules[#self._rules+1] = rule_details + + self._chains[tbl][self._chain].rules[ + #self._chains[tbl][self._chain].rules + 1 + ] = rule_details + end + end + end + end + + self._chain = nil +end + + +-- [internal] Return true if optlist1 contains all elements of optlist 2. +-- Return false in all other cases. +function IptParser._match_options( self, o1, o2 ) + + -- construct a hashtable of first options list to speed up lookups + local oh = { } + for i, opt in ipairs( o1 ) do oh[opt] = true end + + -- iterate over second options list + -- each string in o2 must be also present in o1 + -- if o2 contains a string which is not found in o1 then return false + for i, opt in ipairs( o2 ) do + if not oh[opt] then + return false + end + end + + return true +end diff --git a/feeds/luci/modules/luci-base/luasrc/sys/iptparser.luadoc b/feeds/luci/modules/luci-base/luasrc/sys/iptparser.luadoc new file mode 100644 index 0000000..071e7d5 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/sys/iptparser.luadoc @@ -0,0 +1,69 @@ +---[[ +LuCI iptables parser and query library + +@cstyle instance +]] +module "luci.sys.iptparser" + +---[[ +Create a new iptables parser object. + +@class function +@name IptParser +@param family Number specifying the address family. 4 for IPv4, 6 for IPv6 +@return IptParser instance +]] + +---[[ +Find all firewall rules that match the given criteria. Expects a table with + +search criteria as only argument. If args is nil or an empty table then all +rules will be returned. +]] + +---[[ +Rebuild the internal lookup table, for example when rules have changed + +through external commands. +@class function +@name IptParser.resync +@return nothing +]] + +---[[ +Find the names of all tables. + +@class function +@name IptParser.tables +@return Table of table names. +]] + +---[[ +Find the names of all chains within the given table name. + +@class function +@name IptParser.chains +@param table String containing the table name +@return Table of chain names in the order they occur. +]] + +---[[ +Return the given firewall chain within the given table name. + +@class function +@name IptParser.chain +@param table String containing the table name +@param chain String containing the chain name +@return Table containing the fields "policy", "packets", "bytes" +-- and "rules". The "rules" field is a table of rule tables. +]] + +---[[ +Test whether the given target points to a custom chain. + +@class function +@name IptParser.is_custom_target +@param target String containing the target action +@return Boolean indicating whether target is a custom chain. +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo.lua b/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo.lua new file mode 100644 index 0000000..aa054a2 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo.lua @@ -0,0 +1,19 @@ +-- Licensed to the public under the Apache License 2.0. + +local setmetatable, require, rawget, rawset = setmetatable, require, rawget, rawset + +module "luci.sys.zoneinfo" + +setmetatable(_M, { + __index = function(t, k) + if k == "TZ" and not rawget(t, k) then + local m = require "luci.sys.zoneinfo.tzdata" + rawset(t, k, rawget(m, k)) + elseif k == "OFFSET" and not rawget(t, k) then + local m = require "luci.sys.zoneinfo.tzoffset" + rawset(t, k, rawget(m, k)) + end + + return rawget(t, k) + end +}) diff --git a/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua b/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua new file mode 100644 index 0000000..465d7df --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua @@ -0,0 +1,430 @@ +-- Licensed to the public under the Apache License 2.0. + +module "luci.sys.zoneinfo.tzdata" + +TZ = { + { 'Africa/Abidjan', 'GMT0' }, + { 'Africa/Accra', 'GMT0' }, + { 'Africa/Addis Ababa', 'EAT-3' }, + { 'Africa/Algiers', 'CET-1' }, + { 'Africa/Asmara', 'EAT-3' }, + { 'Africa/Bamako', 'GMT0' }, + { 'Africa/Bangui', 'WAT-1' }, + { 'Africa/Banjul', 'GMT0' }, + { 'Africa/Bissau', 'GMT0' }, + { 'Africa/Blantyre', 'CAT-2' }, + { 'Africa/Brazzaville', 'WAT-1' }, + { 'Africa/Bujumbura', 'CAT-2' }, + { 'Africa/Cairo', 'EET-2' }, + { 'Africa/Casablanca', 'WET0WEST,M3.5.0,M10.5.0/3' }, + { 'Africa/Ceuta', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Africa/Conakry', 'GMT0' }, + { 'Africa/Dakar', 'GMT0' }, + { 'Africa/Dar es Salaam', 'EAT-3' }, + { 'Africa/Djibouti', 'EAT-3' }, + { 'Africa/Douala', 'WAT-1' }, + { 'Africa/El Aaiun', 'WET0WEST,M3.5.0,M10.5.0/3' }, + { 'Africa/Freetown', 'GMT0' }, + { 'Africa/Gaborone', 'CAT-2' }, + { 'Africa/Harare', 'CAT-2' }, + { 'Africa/Johannesburg', 'SAST-2' }, + { 'Africa/Juba', 'EAT-3' }, + { 'Africa/Kampala', 'EAT-3' }, + { 'Africa/Khartoum', 'EAT-3' }, + { 'Africa/Kigali', 'CAT-2' }, + { 'Africa/Kinshasa', 'WAT-1' }, + { 'Africa/Lagos', 'WAT-1' }, + { 'Africa/Libreville', 'WAT-1' }, + { 'Africa/Lome', 'GMT0' }, + { 'Africa/Luanda', 'WAT-1' }, + { 'Africa/Lubumbashi', 'CAT-2' }, + { 'Africa/Lusaka', 'CAT-2' }, + { 'Africa/Malabo', 'WAT-1' }, + { 'Africa/Maputo', 'CAT-2' }, + { 'Africa/Maseru', 'SAST-2' }, + { 'Africa/Mbabane', 'SAST-2' }, + { 'Africa/Mogadishu', 'EAT-3' }, + { 'Africa/Monrovia', 'GMT0' }, + { 'Africa/Nairobi', 'EAT-3' }, + { 'Africa/Ndjamena', 'WAT-1' }, + { 'Africa/Niamey', 'WAT-1' }, + { 'Africa/Nouakchott', 'GMT0' }, + { 'Africa/Ouagadougou', 'GMT0' }, + { 'Africa/Porto-Novo', 'WAT-1' }, + { 'Africa/Sao Tome', 'GMT0' }, + { 'Africa/Tripoli', 'EET-2' }, + { 'Africa/Tunis', 'CET-1' }, + { 'Africa/Windhoek', 'WAT-1WAST,M9.1.0,M4.1.0' }, + { 'America/Adak', 'HST10HDT,M3.2.0,M11.1.0' }, + { 'America/Anchorage', 'AKST9AKDT,M3.2.0,M11.1.0' }, + { 'America/Anguilla', 'AST4' }, + { 'America/Antigua', 'AST4' }, + { 'America/Araguaina', 'BRT3' }, + { 'America/Argentina/Buenos Aires', 'ART3' }, + { 'America/Argentina/Catamarca', 'ART3' }, + { 'America/Argentina/Cordoba', 'ART3' }, + { 'America/Argentina/Jujuy', 'ART3' }, + { 'America/Argentina/La Rioja', 'ART3' }, + { 'America/Argentina/Mendoza', 'ART3' }, + { 'America/Argentina/Rio Gallegos', 'ART3' }, + { 'America/Argentina/Salta', 'ART3' }, + { 'America/Argentina/San Juan', 'ART3' }, + { 'America/Argentina/San Luis', 'ART3' }, + { 'America/Argentina/Tucuman', 'ART3' }, + { 'America/Argentina/Ushuaia', 'ART3' }, + { 'America/Aruba', 'AST4' }, + { 'America/Asuncion', 'PYT4PYST,M10.1.0/0,M3.4.0/0' }, + { 'America/Atikokan', 'EST5' }, + { 'America/Bahia', 'BRT3' }, + { 'America/Bahia Banderas', 'CST6CDT,M4.1.0,M10.5.0' }, + { 'America/Barbados', 'AST4' }, + { 'America/Belem', 'BRT3' }, + { 'America/Belize', 'CST6' }, + { 'America/Blanc-Sablon', 'AST4' }, + { 'America/Boa Vista', 'AMT4' }, + { 'America/Bogota', 'COT5' }, + { 'America/Boise', 'MST7MDT,M3.2.0,M11.1.0' }, + { 'America/Cambridge Bay', 'MST7MDT,M3.2.0,M11.1.0' }, + { 'America/Campo Grande', 'AMT4AMST,M10.3.0/0,M2.3.0/0' }, + { 'America/Cancun', 'EST5' }, + { 'America/Caracas', 'VET4' }, + { 'America/Cayenne', 'GFT3' }, + { 'America/Cayman', 'EST5' }, + { 'America/Chicago', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/Chihuahua', 'MST7MDT,M4.1.0,M10.5.0' }, + { 'America/Costa Rica', 'CST6' }, + { 'America/Creston', 'MST7' }, + { 'America/Cuiaba', 'AMT4AMST,M10.3.0/0,M2.3.0/0' }, + { 'America/Curacao', 'AST4' }, + { 'America/Danmarkshavn', 'GMT0' }, + { 'America/Dawson', 'PST8PDT,M3.2.0,M11.1.0' }, + { 'America/Dawson Creek', 'MST7' }, + { 'America/Denver', 'MST7MDT,M3.2.0,M11.1.0' }, + { 'America/Detroit', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Dominica', 'AST4' }, + { 'America/Edmonton', 'MST7MDT,M3.2.0,M11.1.0' }, + { 'America/Eirunepe', 'ACT5' }, + { 'America/El Salvador', 'CST6' }, + { 'America/Fort Nelson', 'MST7' }, + { 'America/Fortaleza', 'BRT3' }, + { 'America/Glace Bay', 'AST4ADT,M3.2.0,M11.1.0' }, + { 'America/Godthab', 'WGT3WGST,M3.5.0/-2,M10.5.0/-1' }, + { 'America/Goose Bay', 'AST4ADT,M3.2.0,M11.1.0' }, + { 'America/Grand Turk', 'AST4' }, + { 'America/Grenada', 'AST4' }, + { 'America/Guadeloupe', 'AST4' }, + { 'America/Guatemala', 'CST6' }, + { 'America/Guayaquil', 'ECT5' }, + { 'America/Guyana', 'GYT4' }, + { 'America/Halifax', 'AST4ADT,M3.2.0,M11.1.0' }, + { 'America/Havana', 'CST5CDT,M3.2.0/0,M11.1.0/1' }, + { 'America/Hermosillo', 'MST7' }, + { 'America/Indiana/Indianapolis', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Indiana/Knox', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/Indiana/Marengo', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Indiana/Petersburg', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Indiana/Tell City', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/Indiana/Vevay', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Indiana/Vincennes', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Indiana/Winamac', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Inuvik', 'MST7MDT,M3.2.0,M11.1.0' }, + { 'America/Iqaluit', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Jamaica', 'EST5' }, + { 'America/Juneau', 'AKST9AKDT,M3.2.0,M11.1.0' }, + { 'America/Kentucky/Louisville', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Kentucky/Monticello', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Kralendijk', 'AST4' }, + { 'America/La Paz', 'BOT4' }, + { 'America/Lima', 'PET5' }, + { 'America/Los Angeles', 'PST8PDT,M3.2.0,M11.1.0' }, + { 'America/Lower Princes', 'AST4' }, + { 'America/Maceio', 'BRT3' }, + { 'America/Managua', 'CST6' }, + { 'America/Manaus', 'AMT4' }, + { 'America/Marigot', 'AST4' }, + { 'America/Martinique', 'AST4' }, + { 'America/Matamoros', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/Mazatlan', 'MST7MDT,M4.1.0,M10.5.0' }, + { 'America/Menominee', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/Merida', 'CST6CDT,M4.1.0,M10.5.0' }, + { 'America/Metlakatla', 'AKST9AKDT,M3.2.0,M11.1.0' }, + { 'America/Mexico City', 'CST6CDT,M4.1.0,M10.5.0' }, + { 'America/Miquelon', 'PMST3PMDT,M3.2.0,M11.1.0' }, + { 'America/Moncton', 'AST4ADT,M3.2.0,M11.1.0' }, + { 'America/Monterrey', 'CST6CDT,M4.1.0,M10.5.0' }, + { 'America/Montevideo', 'UYT3' }, + { 'America/Montserrat', 'AST4' }, + { 'America/Nassau', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/New York', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Nipigon', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Nome', 'AKST9AKDT,M3.2.0,M11.1.0' }, + { 'America/Noronha', 'FNT2' }, + { 'America/North Dakota/Beulah', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/North Dakota/Center', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/North Dakota/New Salem', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/Ojinaga', 'MST7MDT,M3.2.0,M11.1.0' }, + { 'America/Panama', 'EST5' }, + { 'America/Pangnirtung', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Paramaribo', 'SRT3' }, + { 'America/Phoenix', 'MST7' }, + { 'America/Port of Spain', 'AST4' }, + { 'America/Port-au-Prince', 'EST5' }, + { 'America/Porto Velho', 'AMT4' }, + { 'America/Puerto Rico', 'AST4' }, + { 'America/Rainy River', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/Rankin Inlet', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/Recife', 'BRT3' }, + { 'America/Regina', 'CST6' }, + { 'America/Resolute', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/Rio Branco', 'ACT5' }, + { 'America/Santarem', 'BRT3' }, + { 'America/Santiago', 'CLT4CLST,M8.2.6/24,M5.2.6/24' }, + { 'America/Santo Domingo', 'AST4' }, + { 'America/Sao Paulo', 'BRT3BRST,M10.3.0/0,M2.3.0/0' }, + { 'America/Scoresbysund', 'EGT1EGST,M3.5.0/0,M10.5.0/1' }, + { 'America/Sitka', 'AKST9AKDT,M3.2.0,M11.1.0' }, + { 'America/St Barthelemy', 'AST4' }, + { 'America/St Johns', 'NST3:30NDT,M3.2.0,M11.1.0' }, + { 'America/St Kitts', 'AST4' }, + { 'America/St Lucia', 'AST4' }, + { 'America/St Thomas', 'AST4' }, + { 'America/St Vincent', 'AST4' }, + { 'America/Swift Current', 'CST6' }, + { 'America/Tegucigalpa', 'CST6' }, + { 'America/Thule', 'AST4ADT,M3.2.0,M11.1.0' }, + { 'America/Thunder Bay', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Tijuana', 'PST8PDT,M3.2.0,M11.1.0' }, + { 'America/Toronto', 'EST5EDT,M3.2.0,M11.1.0' }, + { 'America/Tortola', 'AST4' }, + { 'America/Vancouver', 'PST8PDT,M3.2.0,M11.1.0' }, + { 'America/Whitehorse', 'PST8PDT,M3.2.0,M11.1.0' }, + { 'America/Winnipeg', 'CST6CDT,M3.2.0,M11.1.0' }, + { 'America/Yakutat', 'AKST9AKDT,M3.2.0,M11.1.0' }, + { 'America/Yellowknife', 'MST7MDT,M3.2.0,M11.1.0' }, + { 'Antarctica/Casey', '<+11>-11' }, + { 'Antarctica/Davis', '<+07>-7' }, + { 'Antarctica/DumontDUrville', '<+10>-10' }, + { 'Antarctica/Macquarie', 'MIST-11' }, + { 'Antarctica/Mawson', '<+05>-5' }, + { 'Antarctica/McMurdo', 'NZST-12NZDT,M9.5.0,M4.1.0/3' }, + { 'Antarctica/Palmer', 'CLT4CLST,M8.2.6/24,M5.2.6/24' }, + { 'Antarctica/Rothera', '<-03>3' }, + { 'Antarctica/Syowa', '<+03>-3' }, + { 'Antarctica/Troll', '<+00>0<+02>-2,M3.5.0/1,M10.5.0/3' }, + { 'Antarctica/Vostok', '<+06>-6' }, + { 'Arctic/Longyearbyen', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Asia/Aden', 'AST-3' }, + { 'Asia/Almaty', '<+06>-6' }, + { 'Asia/Amman', 'EET-2EEST,M3.5.4/24,M10.5.5/1' }, + { 'Asia/Anadyr', '<+12>-12' }, + { 'Asia/Aqtau', '<+05>-5' }, + { 'Asia/Aqtobe', '<+05>-5' }, + { 'Asia/Ashgabat', '<+05>-5' }, + { 'Asia/Atyrau', '<+05>-5' }, + { 'Asia/Baghdad', 'AST-3' }, + { 'Asia/Bahrain', 'AST-3' }, + { 'Asia/Baku', '<+04>-4' }, + { 'Asia/Bangkok', 'ICT-7' }, + { 'Asia/Barnaul', '<+07>-7' }, + { 'Asia/Beirut', 'EET-2EEST,M3.5.0/0,M10.5.0/0' }, + { 'Asia/Bishkek', '<+06>-6' }, + { 'Asia/Brunei', 'BNT-8' }, + { 'Asia/Chita', '<+09>-9' }, + { 'Asia/Choibalsan', 'CHOT-8CHOST,M3.5.6,M9.5.6/0' }, + { 'Asia/Colombo', '<+0530>-5:30' }, + { 'Asia/Damascus', 'EET-2EEST,M3.5.5/0,M10.5.5/0' }, + { 'Asia/Dhaka', 'BDT-6' }, + { 'Asia/Dili', 'TLT-9' }, + { 'Asia/Dubai', 'GST-4' }, + { 'Asia/Dushanbe', '<+05>-5' }, + { 'Asia/Famagusta', '<+03>-3' }, + { 'Asia/Gaza', 'EET-2EEST,M3.5.6/1,M10.5.6/1' }, + { 'Asia/Hebron', 'EET-2EEST,M3.5.6/1,M10.5.6/1' }, + { 'Asia/Ho Chi Minh', 'ICT-7' }, + { 'Asia/Hong Kong', 'HKT-8' }, + { 'Asia/Hovd', 'HOVT-7HOVST,M3.5.6,M9.5.6/0' }, + { 'Asia/Irkutsk', '<+08>-8' }, + { 'Asia/Jakarta', 'WIB-7' }, + { 'Asia/Jayapura', 'WIT-9' }, + { 'Asia/Jerusalem', 'IST-2IDT,M3.4.4/26,M10.5.0' }, + { 'Asia/Kabul', 'AFT-4:30' }, + { 'Asia/Kamchatka', '<+12>-12' }, + { 'Asia/Karachi', 'PKT-5' }, + { 'Asia/Kathmandu', 'NPT-5:45' }, + { 'Asia/Khandyga', '<+09>-9' }, + { 'Asia/Kolkata', 'IST-5:30' }, + { 'Asia/Krasnoyarsk', '<+07>-7' }, + { 'Asia/Kuala Lumpur', 'MYT-8' }, + { 'Asia/Kuching', 'MYT-8' }, + { 'Asia/Kuwait', 'AST-3' }, + { 'Asia/Macau', 'CST-8' }, + { 'Asia/Magadan', '<+11>-11' }, + { 'Asia/Makassar', 'WITA-8' }, + { 'Asia/Manila', 'PHT-8' }, + { 'Asia/Muscat', 'GST-4' }, + { 'Asia/Nicosia', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Asia/Novokuznetsk', '<+07>-7' }, + { 'Asia/Novosibirsk', '<+07>-7' }, + { 'Asia/Omsk', '<+06>-6' }, + { 'Asia/Oral', '<+05>-5' }, + { 'Asia/Phnom Penh', 'ICT-7' }, + { 'Asia/Pontianak', 'WIB-7' }, + { 'Asia/Pyongyang', 'KST-8:30' }, + { 'Asia/Qatar', 'AST-3' }, + { 'Asia/Qyzylorda', '<+06>-6' }, + { 'Asia/Riyadh', 'AST-3' }, + { 'Asia/Sakhalin', '<+11>-11' }, + { 'Asia/Samarkand', '<+05>-5' }, + { 'Asia/Seoul', 'KST-9' }, + { 'Asia/Shanghai', 'CST-8' }, + { 'Asia/Singapore', 'SGT-8' }, + { 'Asia/Srednekolymsk', '<+11>-11' }, + { 'Asia/Taipei', 'CST-8' }, + { 'Asia/Tashkent', '<+05>-5' }, + { 'Asia/Tbilisi', '<+04>-4' }, + { 'Asia/Tehran', 'IRST-3:30IRDT,J80/0,J264/0' }, + { 'Asia/Thimphu', 'BTT-6' }, + { 'Asia/Tokyo', 'JST-9' }, + { 'Asia/Tomsk', '<+07>-7' }, + { 'Asia/Ulaanbaatar', 'ULAT-8ULAST,M3.5.6,M9.5.6/0' }, + { 'Asia/Urumqi', 'XJT-6' }, + { 'Asia/Ust-Nera', '<+10>-10' }, + { 'Asia/Vientiane', 'ICT-7' }, + { 'Asia/Vladivostok', '<+10>-10' }, + { 'Asia/Yakutsk', '<+09>-9' }, + { 'Asia/Yangon', 'MMT-6:30' }, + { 'Asia/Yekaterinburg', '<+05>-5' }, + { 'Asia/Yerevan', '<+04>-4' }, + { 'Atlantic/Azores', 'AZOT1AZOST,M3.5.0/0,M10.5.0/1' }, + { 'Atlantic/Bermuda', 'AST4ADT,M3.2.0,M11.1.0' }, + { 'Atlantic/Canary', 'WET0WEST,M3.5.0/1,M10.5.0' }, + { 'Atlantic/Cape Verde', 'CVT1' }, + { 'Atlantic/Faroe', 'WET0WEST,M3.5.0/1,M10.5.0' }, + { 'Atlantic/Madeira', 'WET0WEST,M3.5.0/1,M10.5.0' }, + { 'Atlantic/Reykjavik', 'GMT0' }, + { 'Atlantic/South Georgia', 'GST2' }, + { 'Atlantic/St Helena', 'GMT0' }, + { 'Atlantic/Stanley', 'FKST3' }, + { 'Australia/Adelaide', 'ACST-9:30ACDT,M10.1.0,M4.1.0/3' }, + { 'Australia/Brisbane', 'AEST-10' }, + { 'Australia/Broken Hill', 'ACST-9:30ACDT,M10.1.0,M4.1.0/3' }, + { 'Australia/Currie', 'AEST-10AEDT,M10.1.0,M4.1.0/3' }, + { 'Australia/Darwin', 'ACST-9:30' }, + { 'Australia/Eucla', 'ACWST-8:45' }, + { 'Australia/Hobart', 'AEST-10AEDT,M10.1.0,M4.1.0/3' }, + { 'Australia/Lindeman', 'AEST-10' }, + { 'Australia/Lord Howe', 'LHST-10:30LHDT-11,M10.1.0,M4.1.0' }, + { 'Australia/Melbourne', 'AEST-10AEDT,M10.1.0,M4.1.0/3' }, + { 'Australia/Perth', 'AWST-8' }, + { 'Australia/Sydney', 'AEST-10AEDT,M10.1.0,M4.1.0/3' }, + { 'Europe/Amsterdam', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Andorra', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Astrakhan', '<+04>-4' }, + { 'Europe/Athens', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Belgrade', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Berlin', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Bratislava', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Brussels', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Bucharest', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Budapest', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Busingen', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Chisinau', 'EET-2EEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Copenhagen', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Dublin', 'GMT0IST,M3.5.0/1,M10.5.0' }, + { 'Europe/Gibraltar', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Guernsey', 'GMT0BST,M3.5.0/1,M10.5.0' }, + { 'Europe/Helsinki', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Isle of Man', 'GMT0BST,M3.5.0/1,M10.5.0' }, + { 'Europe/Istanbul', '<+03>-3' }, + { 'Europe/Jersey', 'GMT0BST,M3.5.0/1,M10.5.0' }, + { 'Europe/Kaliningrad', 'EET-2' }, + { 'Europe/Kiev', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Kirov', '<+03>-3' }, + { 'Europe/Lisbon', 'WET0WEST,M3.5.0/1,M10.5.0' }, + { 'Europe/Ljubljana', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/London', 'GMT0BST,M3.5.0/1,M10.5.0' }, + { 'Europe/Luxembourg', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Madrid', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Malta', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Mariehamn', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Minsk', '<+03>-3' }, + { 'Europe/Monaco', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Moscow', 'MSK-3' }, + { 'Europe/Oslo', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Paris', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Podgorica', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Prague', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Riga', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Rome', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Samara', '<+04>-4' }, + { 'Europe/San Marino', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Sarajevo', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Saratov', '<+04>-4' }, + { 'Europe/Simferopol', 'MSK-3' }, + { 'Europe/Skopje', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Sofia', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Stockholm', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Tallinn', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Tirane', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Ulyanovsk', '<+04>-4' }, + { 'Europe/Uzhgorod', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Vaduz', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Vatican', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Vienna', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Vilnius', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Volgograd', '<+03>-3' }, + { 'Europe/Warsaw', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Zagreb', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Europe/Zaporozhye', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Zurich', 'CET-1CEST,M3.5.0,M10.5.0/3' }, + { 'Indian/Antananarivo', 'EAT-3' }, + { 'Indian/Chagos', 'IOT-6' }, + { 'Indian/Christmas', 'CXT-7' }, + { 'Indian/Cocos', 'CCT-6:30' }, + { 'Indian/Comoro', 'EAT-3' }, + { 'Indian/Kerguelen', '<+05>-5' }, + { 'Indian/Mahe', 'SCT-4' }, + { 'Indian/Maldives', 'MVT-5' }, + { 'Indian/Mauritius', 'MUT-4' }, + { 'Indian/Mayotte', 'EAT-3' }, + { 'Indian/Reunion', 'RET-4' }, + { 'Pacific/Apia', 'WSST-13WSDT,M9.5.0/3,M4.1.0/4' }, + { 'Pacific/Auckland', 'NZST-12NZDT,M9.5.0,M4.1.0/3' }, + { 'Pacific/Bougainville', 'BST-11' }, + { 'Pacific/Chatham', 'CHAST-12:45CHADT,M9.5.0/2:45,M4.1.0/3:45' }, + { 'Pacific/Chuuk', 'CHUT-10' }, + { 'Pacific/Easter', 'EAST6EASST,M8.2.6/22,M5.2.6/22' }, + { 'Pacific/Efate', 'VUT-11' }, + { 'Pacific/Enderbury', 'PHOT-13' }, + { 'Pacific/Fakaofo', 'TKT-13' }, + { 'Pacific/Fiji', 'FJT-12FJST,M11.1.0,M1.3.0/3' }, + { 'Pacific/Funafuti', 'TVT-12' }, + { 'Pacific/Galapagos', 'GALT6' }, + { 'Pacific/Gambier', 'GAMT9' }, + { 'Pacific/Guadalcanal', 'SBT-11' }, + { 'Pacific/Guam', 'ChST-10' }, + { 'Pacific/Honolulu', 'HST10' }, + { 'Pacific/Johnston', 'HST10' }, + { 'Pacific/Kiritimati', 'LINT-14' }, + { 'Pacific/Kosrae', 'KOST-11' }, + { 'Pacific/Kwajalein', 'MHT-12' }, + { 'Pacific/Majuro', 'MHT-12' }, + { 'Pacific/Marquesas', 'MART9:30' }, + { 'Pacific/Midway', 'SST11' }, + { 'Pacific/Nauru', 'NRT-12' }, + { 'Pacific/Niue', 'NUT11' }, + { 'Pacific/Norfolk', 'NFT-11' }, + { 'Pacific/Noumea', 'NCT-11' }, + { 'Pacific/Pago Pago', 'SST11' }, + { 'Pacific/Palau', 'PWT-9' }, + { 'Pacific/Pitcairn', 'PST8' }, + { 'Pacific/Pohnpei', 'PONT-11' }, + { 'Pacific/Port Moresby', 'PGT-10' }, + { 'Pacific/Rarotonga', 'CKT10' }, + { 'Pacific/Saipan', 'ChST-10' }, + { 'Pacific/Tahiti', 'TAHT10' }, + { 'Pacific/Tarawa', 'GILT-12' }, + { 'Pacific/Tongatapu', '<+13>-13<+14>,M11.1.0,M1.3.0/3' }, + { 'Pacific/Wake', 'WAKT-12' }, + { 'Pacific/Wallis', 'WFT-12' }, +} diff --git a/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua b/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua new file mode 100644 index 0000000..e5da7c6 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua @@ -0,0 +1,138 @@ +-- Licensed to the public under the Apache License 2.0. + +module "luci.sys.zoneinfo.tzoffset" + +OFFSET = { + gmt = 0, -- GMT + eat = 10800, -- EAT + cet = 3600, -- CET + wat = 3600, -- WAT + cat = 7200, -- CAT + eet = 7200, -- EET + wet = 0, -- WET + sast = 7200, -- SAST + hst = -36000, -- HST + hdt = -32400, -- HDT + akst = -32400, -- AKST + akdt = -28800, -- AKDT + ast = -14400, -- AST + brt = -10800, -- BRT + art = -10800, -- ART + pyt = -14400, -- PYT + pyst = -10800, -- PYST + est = -18000, -- EST + cst = -21600, -- CST + cdt = -18000, -- CDT + amt = -14400, -- AMT + cot = -18000, -- COT + mst = -25200, -- MST + mdt = -21600, -- MDT + vet = -14400, -- VET + gft = -10800, -- GFT + pst = -28800, -- PST + pdt = -25200, -- PDT + act = -18000, -- ACT + wgt = -10800, -- WGT + wgst = -7200, -- WGST + ect = -18000, -- ECT + gyt = -14400, -- GYT + bot = -14400, -- BOT + pet = -18000, -- PET + pmst = -10800, -- PMST + pmdt = -7200, -- PMDT + uyt = -10800, -- UYT + fnt = -7200, -- FNT + srt = -10800, -- SRT + clt = -14400, -- CLT + clst = -10800, -- CLST + egt = -3600, -- EGT + egst = 0, -- EGST + nst = -12600, -- NST + ndt = -9000, -- NDT + mist = 39600, -- MIST + nzst = 43200, -- NZST + nzdt = 46800, -- NZDT + ict = 25200, -- ICT + bnt = 28800, -- BNT + chot = 28800, -- CHOT + chost = 32400, -- CHOST + bdt = 21600, -- BDT + tlt = 32400, -- TLT + gst = 14400, -- GST + hkt = 28800, -- HKT + hovt = 25200, -- HOVT + hovst = 28800, -- HOVST + wib = 25200, -- WIB + wit = 32400, -- WIT + ist = 7200, -- IST + idt = 10800, -- IDT + aft = 16200, -- AFT + pkt = 18000, -- PKT + npt = 20700, -- NPT + myt = 28800, -- MYT + wita = 28800, -- WITA + pht = 28800, -- PHT + kst = 30600, -- KST + sgt = 28800, -- SGT + irst = 12600, -- IRST + irdt = 16200, -- IRDT + btt = 21600, -- BTT + jst = 32400, -- JST + ulat = 28800, -- ULAT + ulast = 32400, -- ULAST + xjt = 21600, -- XJT + mmt = 23400, -- MMT + azot = -3600, -- AZOT + azost = 0, -- AZOST + cvt = -3600, -- CVT + fkst = -10800, -- FKST + acst = 34200, -- ACST + acdt = 37800, -- ACDT + aest = 36000, -- AEST + acwst = 31500, -- ACWST + lhst = 37800, -- LHST + lhdt = 39600, -- LHDT + awst = 28800, -- AWST + msk = 10800, -- MSK + iot = 21600, -- IOT + cxt = 25200, -- CXT + cct = 23400, -- CCT + sct = 14400, -- SCT + mvt = 18000, -- MVT + mut = 14400, -- MUT + ret = 14400, -- RET + wsst = 46800, -- WSST + wsdt = 50400, -- WSDT + bst = 39600, -- BST + chast = 45900, -- CHAST + chadt = 49500, -- CHADT + chut = 36000, -- CHUT + east = -21600, -- EAST + easst = -18000, -- EASST + vut = 39600, -- VUT + phot = 46800, -- PHOT + tkt = 46800, -- TKT + fjt = 43200, -- FJT + fjst = 46800, -- FJST + tvt = 43200, -- TVT + galt = -21600, -- GALT + gamt = -32400, -- GAMT + sbt = 39600, -- SBT + lint = 50400, -- LINT + kost = 39600, -- KOST + mht = 43200, -- MHT + mart = -34200, -- MART + sst = -39600, -- SST + nrt = 43200, -- NRT + nut = -39600, -- NUT + nft = 39600, -- NFT + nct = 39600, -- NCT + pwt = 32400, -- PWT + pont = 39600, -- PONT + pgt = 36000, -- PGT + ckt = -36000, -- CKT + taht = -36000, -- TAHT + gilt = 43200, -- GILT + wakt = 43200, -- WAKT + wft = 43200, -- WFT +} diff --git a/feeds/luci/modules/luci-base/luasrc/template.lua b/feeds/luci/modules/luci-base/luasrc/template.lua new file mode 100644 index 0000000..588028c --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/template.lua @@ -0,0 +1,100 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local util = require "luci.util" +local config = require "luci.config" +local tparser = require "luci.template.parser" + +local tostring, pairs, loadstring = tostring, pairs, loadstring +local setmetatable, loadfile = setmetatable, loadfile +local getfenv, setfenv, rawget = getfenv, setfenv, rawget +local assert, type, error = assert, type, error + +--- LuCI template library. +module "luci.template" + +config.template = config.template or {} +viewdir = config.template.viewdir or util.libpath() .. "/view" + + +-- Define the namespace for template modules +context = util.threadlocal() + +--- Render a certain template. +-- @param name Template name +-- @param scope Scope to assign to template (optional) +function render(name, scope) + return Template(name):render(scope or getfenv(2)) +end + +--- Render a template from a string. +-- @param template Template string +-- @param scope Scope to assign to template (optional) +function render_string(template, scope) + return Template(nil, template):render(scope or getfenv(2)) +end + + +-- Template class +Template = util.class() + +-- Shared template cache to store templates in to avoid unnecessary reloading +Template.cache = setmetatable({}, {__mode = "v"}) + + +-- Constructor - Reads and compiles the template on-demand +function Template.__init__(self, name, template) + if name then + self.template = self.cache[name] + self.name = name + else + self.name = "[string]" + end + + -- Create a new namespace for this template + self.viewns = context.viewns + + -- If we have a cached template, skip compiling and loading + if not self.template then + + -- Compile template + local err + local sourcefile + + if name then + sourcefile = viewdir .. "/" .. name .. ".htm" + self.template, _, err = tparser.parse(sourcefile) + else + sourcefile = "[string]" + self.template, _, err = tparser.parse_string(template) + end + + -- If we have no valid template throw error, otherwise cache the template + if not self.template then + error("Failed to load template '" .. name .. "'.\n" .. + "Error while parsing template '" .. sourcefile .. "':\n" .. + (err or "Unknown syntax error")) + elseif name then + self.cache[name] = self.template + end + end +end + + +-- Renders a template +function Template.render(self, scope) + scope = scope or getfenv(2) + + -- Put our predefined objects in the scope of the template + setfenv(self.template, setmetatable({}, {__index = + function(tbl, key) + return rawget(tbl, key) or self.viewns[key] or scope[key] + end})) + + -- Now finally render the thing + local stat, err = util.copcall(self.template) + if not stat then + error("Failed to execute template '" .. self.name .. "'.\n" .. + "A runtime error occured: " .. tostring(err or "(nil)")) + end +end diff --git a/feeds/luci/modules/luci-base/luasrc/tools/proto.lua b/feeds/luci/modules/luci-base/luasrc/tools/proto.lua new file mode 100644 index 0000000..147688d --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/tools/proto.lua @@ -0,0 +1,36 @@ +-- Copyright 2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.tools.proto", package.seeall) + +function opt_macaddr(s, ifc, ...) + local v = luci.cbi.Value + local o = s:taboption("advanced", v, "macaddr", ...) + + o.placeholder = ifc and ifc:mac() + o.datatype = "macaddr" + + function o.cfgvalue(self, section) + local w = ifc and ifc:get_wifinet() + if w then + return w:get("macaddr") + else + return v.cfgvalue(self, section) + end + end + + function o.write(self, section, value) + local w = ifc and ifc:get_wifinet() + if w then + w:set("macaddr", value) + elseif value then + v.write(self, section, value) + else + v.remove(self, section) + end + end + + function o.remove(self, section) + self:write(section, nil) + end +end diff --git a/feeds/luci/modules/luci-base/luasrc/tools/status.lua b/feeds/luci/modules/luci-base/luasrc/tools/status.lua new file mode 100644 index 0000000..4da0cf9 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/tools/status.lua @@ -0,0 +1,219 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.tools.status", package.seeall) + +local uci = require "luci.model.uci".cursor() + +local function dhcp_leases_common(family) + local rv = { } + local nfs = require "nixio.fs" + local leasefile = "/tmp/dhcp.leases" + + uci:foreach("dhcp", "dnsmasq", + function(s) + if s.leasefile and nfs.access(s.leasefile) then + leasefile = s.leasefile + return false + end + end) + + local fd = io.open(leasefile, "r") + if fd then + while true do + local ln = fd:read("*l") + if not ln then + break + else + local ts, mac, ip, name, duid = ln:match("^(%d+) (%S+) (%S+) (%S+) (%S+)") + if ts and mac and ip and name and duid then + if family == 4 and not ip:match(":") then + rv[#rv+1] = { + expires = os.difftime(tonumber(ts) or 0, os.time()), + macaddr = mac, + ipaddr = ip, + hostname = (name ~= "*") and name + } + elseif family == 6 and ip:match(":") then + rv[#rv+1] = { + expires = os.difftime(tonumber(ts) or 0, os.time()), + ip6addr = ip, + duid = (duid ~= "*") and duid, + hostname = (name ~= "*") and name + } + end + end + end + end + fd:close() + end + + local lease6file = "/tmp/hosts/odhcpd" + uci:foreach("dhcp", "odhcpd", + function(t) + if t.leasefile and nfs.access(t.leasefile) then + lease6file = t.leasefile + return false + end + end) + local fd = io.open(lease6file, "r") + if fd then + while true do + local ln = fd:read("*l") + if not ln then + break + else + local iface, duid, iaid, name, ts, id, length, ip = ln:match("^# (%S+) (%S+) (%S+) (%S+) (-?%d+) (%S+) (%S+) (.*)") + local expire = tonumber(ts) or 0 + if ip and iaid ~= "ipv4" and family == 6 then + rv[#rv+1] = { + expires = (expire >= 0) and os.difftime(expire, os.time()), + duid = duid, + ip6addr = ip, + hostname = (name ~= "-") and name + } + elseif ip and iaid == "ipv4" and family == 4 then + rv[#rv+1] = { + expires = (expire >= 0) and os.difftime(expire, os.time()), + macaddr = duid, + ipaddr = ip, + hostname = (name ~= "-") and name + } + end + end + end + fd:close() + end + + return rv +end + +function dhcp_leases() + return dhcp_leases_common(4) +end + +function dhcp6_leases() + return dhcp_leases_common(6) +end + +function wifi_networks() + local rv = { } + local ntm = require "luci.model.network".init() + + local dev + for _, dev in ipairs(ntm:get_wifidevs()) do + local rd = { + up = dev:is_up(), + device = dev:name(), + name = dev:get_i18n(), + networks = { } + } + + local net + for _, net in ipairs(dev:get_wifinets()) do + rd.networks[#rd.networks+1] = { + name = net:shortname(), + link = net:adminlink(), + up = net:is_up(), + mode = net:active_mode(), + ssid = net:active_ssid(), + bssid = net:active_bssid(), + encryption = net:active_encryption(), + frequency = net:frequency(), + channel = net:channel(), + signal = net:signal(), + quality = net:signal_percent(), + noise = net:noise(), + bitrate = net:bitrate(), + ifname = net:ifname(), + assoclist = net:assoclist(), + country = net:country(), + txpower = net:txpower(), + txpoweroff = net:txpower_offset(), + disabled = (dev:get("disabled") == "1" or + net:get("disabled") == "1") + } + end + + rv[#rv+1] = rd + end + + return rv +end + +function wifi_network(id) + local ntm = require "luci.model.network".init() + local net = ntm:get_wifinet(id) + if net then + local dev = net:get_device() + if dev then + return { + id = id, + name = net:shortname(), + link = net:adminlink(), + up = net:is_up(), + mode = net:active_mode(), + ssid = net:active_ssid(), + bssid = net:active_bssid(), + encryption = net:active_encryption(), + frequency = net:frequency(), + channel = net:channel(), + signal = net:signal(), + quality = net:signal_percent(), + noise = net:noise(), + bitrate = net:bitrate(), + ifname = net:ifname(), + assoclist = net:assoclist(), + country = net:country(), + txpower = net:txpower(), + txpoweroff = net:txpower_offset(), + disabled = (dev:get("disabled") == "1" or + net:get("disabled") == "1"), + device = { + up = dev:is_up(), + device = dev:name(), + name = dev:get_i18n() + } + } + end + end + return { } +end + +function switch_status(devs) + local dev + local switches = { } + for dev in devs:gmatch("[^%s,]+") do + local ports = { } + local swc = io.popen("swconfig dev %q show" % dev, "r") + if swc then + local l + repeat + l = swc:read("*l") + if l then + local port, up = l:match("port:(%d+) link:(%w+)") + if port then + local speed = l:match(" speed:(%d+)") + local duplex = l:match(" (%w+)-duplex") + local txflow = l:match(" (txflow)") + local rxflow = l:match(" (rxflow)") + local auto = l:match(" (auto)") + + ports[#ports+1] = { + port = tonumber(port) or 0, + speed = tonumber(speed) or 0, + link = (up == "up"), + duplex = (duplex == "full"), + rxflow = (not not rxflow), + txflow = (not not txflow), + auto = (not not auto) + } + end + end + until not l + swc:close() + end + switches[dev] = ports + end + return switches +end diff --git a/feeds/luci/modules/luci-base/luasrc/tools/webadmin.lua b/feeds/luci/modules/luci-base/luasrc/tools/webadmin.lua new file mode 100644 index 0000000..106810a --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/tools/webadmin.lua @@ -0,0 +1,105 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008-2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.tools.webadmin", package.seeall) + +local util = require "luci.util" +local uci = require "luci.model.uci" +local ip = require "luci.ip" + +function byte_format(byte) + local suff = {"B", "KB", "MB", "GB", "TB"} + for i=1, 5 do + if byte > 1024 and i < 5 then + byte = byte / 1024 + else + return string.format("%.2f %s", byte, suff[i]) + end + end +end + +function date_format(secs) + local suff = {"min", "h", "d"} + local mins = 0 + local hour = 0 + local days = 0 + + secs = math.floor(secs) + if secs > 60 then + mins = math.floor(secs / 60) + secs = secs % 60 + end + + if mins > 60 then + hour = math.floor(mins / 60) + mins = mins % 60 + end + + if hour > 24 then + days = math.floor(hour / 24) + hour = hour % 24 + end + + if days > 0 then + return string.format("%.0fd %02.0fh %02.0fmin %02.0fs", days, hour, mins, secs) + else + return string.format("%02.0fh %02.0fmin %02.0fs", hour, mins, secs) + end +end + +function cbi_add_networks(field) + uci.cursor():foreach("network", "interface", + function (section) + if section[".name"] ~= "loopback" then + field:value(section[".name"]) + end + end + ) + field.titleref = luci.dispatcher.build_url("admin", "network", "network") +end + +function cbi_add_knownips(field) + local _, n + for _, n in ipairs(ip.neighbors({ family = 4 })) do + if n.dest then + field:value(n.dest:string()) + end + end +end + +function firewall_find_zone(name) + local find + + luci.model.uci.cursor():foreach("firewall", "zone", + function (section) + if section.name == name then + find = section[".name"] + end + end + ) + + return find +end + +function iface_get_network(iface) + local link = ip.link(tostring(iface)) + if link.master then + iface = link.master + end + + local cur = uci.cursor() + local dump = util.ubus("network.interface", "dump", { }) + if dump then + local _, net + for _, net in ipairs(dump.interface) do + if net.l3_device == iface or net.device == iface then + -- cross check with uci to filter out @name style aliases + local uciname = cur:get("network", net.interface, "ifname") + if type(uciname) == "string" and uciname:sub(1,1) ~= "@" or uciname then + return net.interface + end + end + end + end +end diff --git a/feeds/luci/modules/luci-base/luasrc/util.lua b/feeds/luci/modules/luci-base/luasrc/util.lua new file mode 100644 index 0000000..0e7334b --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/util.lua @@ -0,0 +1,739 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local io = require "io" +local math = require "math" +local table = require "table" +local debug = require "debug" +local ldebug = require "luci.debug" +local string = require "string" +local coroutine = require "coroutine" +local tparser = require "luci.template.parser" +local json = require "luci.jsonc" + +local _ubus = require "ubus" +local _ubus_connection = nil + +local getmetatable, setmetatable = getmetatable, setmetatable +local rawget, rawset, unpack = rawget, rawset, unpack +local tostring, type, assert, error = tostring, type, assert, error +local ipairs, pairs, next, loadstring = ipairs, pairs, next, loadstring +local require, pcall, xpcall = require, pcall, xpcall +local collectgarbage, get_memory_limit = collectgarbage, get_memory_limit + +module "luci.util" + +-- +-- Pythonic string formatting extension +-- +getmetatable("").__mod = function(a, b) + local ok, res + + if not b then + return a + elseif type(b) == "table" then + local k, _ + for k, _ in pairs(b) do if type(b[k]) == "userdata" then b[k] = tostring(b[k]) end end + + ok, res = pcall(a.format, a, unpack(b)) + if not ok then + error(res, 2) + end + return res + else + if type(b) == "userdata" then b = tostring(b) end + + ok, res = pcall(a.format, a, b) + if not ok then + error(res, 2) + end + return res + end +end + + +-- +-- Class helper routines +-- + +-- Instantiates a class +local function _instantiate(class, ...) + local inst = setmetatable({}, {__index = class}) + + if inst.__init__ then + inst:__init__(...) + end + + return inst +end + +-- The class object can be instantiated by calling itself. +-- Any class functions or shared parameters can be attached to this object. +-- Attaching a table to the class object makes this table shared between +-- all instances of this class. For object parameters use the __init__ function. +-- Classes can inherit member functions and values from a base class. +-- Class can be instantiated by calling them. All parameters will be passed +-- to the __init__ function of this class - if such a function exists. +-- The __init__ function must be used to set any object parameters that are not shared +-- with other objects of this class. Any return values will be ignored. +function class(base) + return setmetatable({}, { + __call = _instantiate, + __index = base + }) +end + +function instanceof(object, class) + local meta = getmetatable(object) + while meta and meta.__index do + if meta.__index == class then + return true + end + meta = getmetatable(meta.__index) + end + return false +end + + +-- +-- Scope manipulation routines +-- + +local tl_meta = { + __mode = "k", + + __index = function(self, key) + local t = rawget(self, coxpt[coroutine.running()] + or coroutine.running() or 0) + return t and t[key] + end, + + __newindex = function(self, key, value) + local c = coxpt[coroutine.running()] or coroutine.running() or 0 + local r = rawget(self, c) + if not r then + rawset(self, c, { [key] = value }) + else + r[key] = value + end + end +} + +-- the current active coroutine. A thread local store is private a table object +-- whose values can't be accessed from outside of the running coroutine. +function threadlocal(tbl) + return setmetatable(tbl or {}, tl_meta) +end + + +-- +-- Debugging routines +-- + +function perror(obj) + return io.stderr:write(tostring(obj) .. "\n") +end + +function dumptable(t, maxdepth, i, seen) + i = i or 0 + seen = seen or setmetatable({}, {__mode="k"}) + + for k,v in pairs(t) do + perror(string.rep("\t", i) .. tostring(k) .. "\t" .. tostring(v)) + if type(v) == "table" and (not maxdepth or i < maxdepth) then + if not seen[v] then + seen[v] = true + dumptable(v, maxdepth, i+1, seen) + else + perror(string.rep("\t", i) .. "*** RECURSION ***") + end + end + end +end + + +-- +-- String and data manipulation routines +-- + +function pcdata(value) + return value and tparser.pcdata(tostring(value)) +end + +function striptags(value) + return value and tparser.striptags(tostring(value)) +end + +-- for bash, ash and similar shells single-quoted strings are taken +-- literally except for single quotes (which terminate the string) +-- (and the exception noted below for dash (-) at the start of a +-- command line parameter). +function shellsqescape(value) + local res + res, _ = string.gsub(value, "'", "'\\''") + return res +end + +-- bash, ash and other similar shells interpret a dash (-) at the start +-- of a command-line parameters as an option indicator regardless of +-- whether it is inside a single-quoted string. It must be backlash +-- escaped to resolve this. This requires in some funky special-case +-- handling. It may actually be a property of the getopt function +-- rather than the shell proper. +function shellstartsqescape(value) + res, _ = string.gsub(value, "^\-", "\\-") + res, _ = string.gsub(res, "^-", "\-") + return shellsqescape(value) +end + +-- containing the resulting substrings. The optional max parameter specifies +-- the number of bytes to process, regardless of the actual length of the given +-- string. The optional last parameter, regex, specifies whether the separator +-- sequence is interpreted as regular expression. +-- pattern as regular expression (optional, default is false) +function split(str, pat, max, regex) + pat = pat or "\n" + max = max or #str + + local t = {} + local c = 1 + + if #str == 0 then + return {""} + end + + if #pat == 0 then + return nil + end + + if max == 0 then + return str + end + + repeat + local s, e = str:find(pat, c, not regex) + max = max - 1 + if s and max < 0 then + t[#t+1] = str:sub(c) + else + t[#t+1] = str:sub(c, s and s - 1) + end + c = e and e + 1 or #str + 1 + until not s or max < 0 + + return t +end + +function trim(str) + return (str:gsub("^%s*(.-)%s*$", "%1")) +end + +function cmatch(str, pat) + local count = 0 + for _ in str:gmatch(pat) do count = count + 1 end + return count +end + +-- one token per invocation, the tokens are separated by whitespace. If the +-- input value is a table, it is transformed into a string first. A nil value +-- will result in a valid interator which aborts with the first invocation. +function imatch(v) + if type(v) == "table" then + local k = nil + return function() + k = next(v, k) + return v[k] + end + + elseif type(v) == "number" or type(v) == "boolean" then + local x = true + return function() + if x then + x = false + return tostring(v) + end + end + + elseif type(v) == "userdata" or type(v) == "string" then + return tostring(v):gmatch("%S+") + end + + return function() end +end + +-- value or 0 if the unit is unknown. Upper- or lower case is irrelevant. +-- Recognized units are: +-- o "y" - one year (60*60*24*366) +-- o "m" - one month (60*60*24*31) +-- o "w" - one week (60*60*24*7) +-- o "d" - one day (60*60*24) +-- o "h" - one hour (60*60) +-- o "min" - one minute (60) +-- o "kb" - one kilobyte (1024) +-- o "mb" - one megabyte (1024*1024) +-- o "gb" - one gigabyte (1024*1024*1024) +-- o "kib" - one si kilobyte (1000) +-- o "mib" - one si megabyte (1000*1000) +-- o "gib" - one si gigabyte (1000*1000*1000) +function parse_units(ustr) + + local val = 0 + + -- unit map + local map = { + -- date stuff + y = 60 * 60 * 24 * 366, + m = 60 * 60 * 24 * 31, + w = 60 * 60 * 24 * 7, + d = 60 * 60 * 24, + h = 60 * 60, + min = 60, + + -- storage sizes + kb = 1024, + mb = 1024 * 1024, + gb = 1024 * 1024 * 1024, + + -- storage sizes (si) + kib = 1000, + mib = 1000 * 1000, + gib = 1000 * 1000 * 1000 + } + + -- parse input string + for spec in ustr:lower():gmatch("[0-9%.]+[a-zA-Z]*") do + + local num = spec:gsub("[^0-9%.]+$","") + local spn = spec:gsub("^[0-9%.]+", "") + + if map[spn] or map[spn:sub(1,1)] then + val = val + num * ( map[spn] or map[spn:sub(1,1)] ) + else + val = val + num + end + end + + + return val +end + +-- also register functions above in the central string class for convenience +string.pcdata = pcdata +string.striptags = striptags +string.split = split +string.trim = trim +string.cmatch = cmatch +string.parse_units = parse_units + + +function append(src, ...) + for i, a in ipairs({...}) do + if type(a) == "table" then + for j, v in ipairs(a) do + src[#src+1] = v + end + else + src[#src+1] = a + end + end + return src +end + +function combine(...) + return append({}, ...) +end + +function contains(table, value) + for k, v in pairs(table) do + if value == v then + return k + end + end + return false +end + +-- Both table are - in fact - merged together. +function update(t, updates) + for k, v in pairs(updates) do + t[k] = v + end +end + +function keys(t) + local keys = { } + if t then + for k, _ in kspairs(t) do + keys[#keys+1] = k + end + end + return keys +end + +function clone(object, deep) + local copy = {} + + for k, v in pairs(object) do + if deep and type(v) == "table" then + v = clone(v, deep) + end + copy[k] = v + end + + return setmetatable(copy, getmetatable(object)) +end + + +function dtable() + return setmetatable({}, { __index = + function(tbl, key) + return rawget(tbl, key) + or rawget(rawset(tbl, key, dtable()), key) + end + }) +end + + +-- Serialize the contents of a table value. +function _serialize_table(t, seen) + assert(not seen[t], "Recursion detected.") + seen[t] = true + + local data = "" + local idata = "" + local ilen = 0 + + for k, v in pairs(t) do + if type(k) ~= "number" or k < 1 or math.floor(k) ~= k or ( k - #t ) > 3 then + k = serialize_data(k, seen) + v = serialize_data(v, seen) + data = data .. ( #data > 0 and ", " or "" ) .. + '[' .. k .. '] = ' .. v + elseif k > ilen then + ilen = k + end + end + + for i = 1, ilen do + local v = serialize_data(t[i], seen) + idata = idata .. ( #idata > 0 and ", " or "" ) .. v + end + + return idata .. ( #data > 0 and #idata > 0 and ", " or "" ) .. data +end + +-- with loadstring(). +function serialize_data(val, seen) + seen = seen or setmetatable({}, {__mode="k"}) + + if val == nil then + return "nil" + elseif type(val) == "number" then + return val + elseif type(val) == "string" then + return "%q" % val + elseif type(val) == "boolean" then + return val and "true" or "false" + elseif type(val) == "function" then + return "loadstring(%q)" % get_bytecode(val) + elseif type(val) == "table" then + return "{ " .. _serialize_table(val, seen) .. " }" + else + return '"[unhandled data type:' .. type(val) .. ']"' + end +end + +function restore_data(str) + return loadstring("return " .. str)() +end + + +-- +-- Byte code manipulation routines +-- + +-- will be stripped before it is returned. +function get_bytecode(val) + local code + + if type(val) == "function" then + code = string.dump(val) + else + code = string.dump( loadstring( "return " .. serialize_data(val) ) ) + end + + return code -- and strip_bytecode(code) +end + +-- numbers and debugging numbers will be discarded. Original version by +-- Peter Cawley (http://lua-users.org/lists/lua-l/2008-02/msg01158.html) +function strip_bytecode(code) + local version, format, endian, int, size, ins, num, lnum = code:byte(5, 12) + local subint + if endian == 1 then + subint = function(code, i, l) + local val = 0 + for n = l, 1, -1 do + val = val * 256 + code:byte(i + n - 1) + end + return val, i + l + end + else + subint = function(code, i, l) + local val = 0 + for n = 1, l, 1 do + val = val * 256 + code:byte(i + n - 1) + end + return val, i + l + end + end + + local function strip_function(code) + local count, offset = subint(code, 1, size) + local stripped = { string.rep("\0", size) } + local dirty = offset + count + offset = offset + count + int * 2 + 4 + offset = offset + int + subint(code, offset, int) * ins + count, offset = subint(code, offset, int) + for n = 1, count do + local t + t, offset = subint(code, offset, 1) + if t == 1 then + offset = offset + 1 + elseif t == 4 then + offset = offset + size + subint(code, offset, size) + elseif t == 3 then + offset = offset + num + elseif t == 254 or t == 9 then + offset = offset + lnum + end + end + count, offset = subint(code, offset, int) + stripped[#stripped+1] = code:sub(dirty, offset - 1) + for n = 1, count do + local proto, off = strip_function(code:sub(offset, -1)) + stripped[#stripped+1] = proto + offset = offset + off - 1 + end + offset = offset + subint(code, offset, int) * int + int + count, offset = subint(code, offset, int) + for n = 1, count do + offset = offset + subint(code, offset, size) + size + int * 2 + end + count, offset = subint(code, offset, int) + for n = 1, count do + offset = offset + subint(code, offset, size) + size + end + stripped[#stripped+1] = string.rep("\0", int * 3) + return table.concat(stripped), offset + end + + return code:sub(1,12) .. strip_function(code:sub(13,-1)) +end + + +-- +-- Sorting iterator functions +-- + +function _sortiter( t, f ) + local keys = { } + + local k, v + for k, v in pairs(t) do + keys[#keys+1] = k + end + + local _pos = 0 + + table.sort( keys, f ) + + return function() + _pos = _pos + 1 + if _pos <= #keys then + return keys[_pos], t[keys[_pos]], _pos + end + end +end + +-- the provided callback function. +function spairs(t,f) + return _sortiter( t, f ) +end + +-- The table pairs are sorted by key. +function kspairs(t) + return _sortiter( t ) +end + +-- The table pairs are sorted by value. +function vspairs(t) + return _sortiter( t, function (a,b) return t[a] < t[b] end ) +end + + +-- +-- System utility functions +-- + +function bigendian() + return string.byte(string.dump(function() end), 7) == 0 +end + +function exec(command) + local pp = io.popen(command) + local data = pp:read("*a") + pp:close() + + return data +end + +function execi(command) + local pp = io.popen(command) + + return pp and function() + local line = pp:read() + + if not line then + pp:close() + end + + return line + end +end + +-- Deprecated +function execl(command) + local pp = io.popen(command) + local line = "" + local data = {} + + while true do + line = pp:read() + if (line == nil) then break end + data[#data+1] = line + end + pp:close() + + return data +end + +function ubus(object, method, data) + if not _ubus_connection then + _ubus_connection = _ubus.connect() + assert(_ubus_connection, "Unable to establish ubus connection") + end + + if object and method then + if type(data) ~= "table" then + data = { } + end + return _ubus_connection:call(object, method, data) + elseif object then + return _ubus_connection:signatures(object) + else + return _ubus_connection:objects() + end +end + +function serialize_json(x, cb) + local js = json.stringify(x) + if type(cb) == "function" then + cb(js) + else + return js + end +end + + +function libpath() + return require "nixio.fs".dirname(ldebug.__file__) +end + +function checklib(fullpathexe, wantedlib) + local fs = require "nixio.fs" + local haveldd = fs.access('/usr/bin/ldd') + if not haveldd then + return false + end + local libs = exec("/usr/bin/ldd " .. fullpathexe) + if not libs then + return false + end + for k, v in ipairs(split(libs)) do + if v:find(wantedlib) then + return true + end + end + return false +end + +-- +-- Coroutine safe xpcall and pcall versions modified for Luci +-- original version: +-- coxpcall 1.13 - Copyright 2005 - Kepler Project (www.keplerproject.org) +-- +-- Copyright © 2005 Kepler Project. +-- Permission is hereby granted, free of charge, to any person obtaining a +-- copy of this software and associated documentation files (the "Software"), +-- to deal in the Software without restriction, including without limitation +-- the rights to use, copy, modify, merge, publish, distribute, sublicense, +-- and/or sell copies of the Software, and to permit persons to whom the +-- Software is furnished to do so, subject to the following conditions: +-- +-- The above copyright notice and this permission notice shall be +-- included in all copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +-- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +-- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +-- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +-- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +-- OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +local performResume, handleReturnValue +local oldpcall, oldxpcall = pcall, xpcall +coxpt = {} +setmetatable(coxpt, {__mode = "kv"}) + +-- Identity function for copcall +local function copcall_id(trace, ...) + return ... +end + +-- values of either the function or the error handler +function coxpcall(f, err, ...) + local res, co = oldpcall(coroutine.create, f) + if not res then + local params = {...} + local newf = function() return f(unpack(params)) end + co = coroutine.create(newf) + end + local c = coroutine.running() + coxpt[co] = coxpt[c] or c or 0 + + return performResume(err, co, ...) +end + +-- values of the function or the error object +function copcall(f, ...) + return coxpcall(f, copcall_id, ...) +end + +-- Handle return value of protected call +function handleReturnValue(err, co, status, ...) + if not status then + return false, err(debug.traceback(co, (...)), ...) + end + + if coroutine.status(co) ~= 'suspended' then + return true, ... + end + + return performResume(err, co, coroutine.yield(...)) +end + +-- Resume execution of protected function call +function performResume(err, co, ...) + return handleReturnValue(err, co, coroutine.resume(co, ...)) +end diff --git a/feeds/luci/modules/luci-base/luasrc/util.luadoc b/feeds/luci/modules/luci-base/luasrc/util.luadoc new file mode 100644 index 0000000..805eeb7 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/util.luadoc @@ -0,0 +1,378 @@ +---[[ +LuCI utility functions. +]] +module "luci.util" + +---[[ +Create a Class object (Python-style object model). + +The class object can be instantiated by calling itself. +Any class functions or shared parameters can be attached to this object. +Attaching a table to the class object makes this table shared between +all instances of this class. For object parameters use the __init__ function. +Classes can inherit member functions and values from a base class. +Class can be instantiated by calling them. All parameters will be passed +to the __init__ function of this class - if such a function exists. +The __init__ function must be used to set any object parameters that are not shared +with other objects of this class. Any return values will be ignored. +@class function +@name class +@param base The base class to inherit from (optional) +@return A class object +@see instanceof +@see clone +]] + +---[[ +Test whether the given object is an instance of the given class. + +@class function +@name instanceof +@param object Object instance +@param class Class object to test against +@return Boolean indicating whether the object is an instance +@see class +@see clone +]] + +---[[ +Create a new or get an already existing thread local store associated with + +the current active coroutine. A thread local store is private a table object +whose values can't be accessed from outside of the running coroutine. +@class function +@name threadlocal +@return Table value representing the corresponding thread local store +]] + +---[[ +Write given object to stderr. + +@class function +@name perror +@param obj Value to write to stderr +@return Boolean indicating whether the write operation was successful +]] + +---[[ +Recursively dumps a table to stdout, useful for testing and debugging. + +@class function +@name dumptable +@param t Table value to dump +@param maxdepth Maximum depth +@return Always nil +]] + +---[[ +Create valid XML PCDATA from given string. + +@class function +@name pcdata +@param value String value containing the data to escape +@return String value containing the escaped data +]] + +---[[ +Strip HTML tags from given string. + +@class function +@name striptags +@param value String containing the HTML text +@return String with HTML tags stripped of +]] + +---[[ +Splits given string on a defined separator sequence and return a table + +containing the resulting substrings. The optional max parameter specifies +the number of bytes to process, regardless of the actual length of the given +string. The optional last parameter, regex, specifies whether the separator +sequence is interpreted as regular expression. +@class function +@name split +@param str String value containing the data to split up +@param pat String with separator pattern (optional, defaults to "\n") +@param max Maximum times to split (optional) +@param regex Boolean indicating whether to interpret the separator +-- pattern as regular expression (optional, default is false) +@return Table containing the resulting substrings +]] + +---[[ +Remove leading and trailing whitespace from given string value. + +@class function +@name trim +@param str String value containing whitespace padded data +@return String value with leading and trailing space removed +]] + +---[[ +Count the occurences of given substring in given string. + +@class function +@name cmatch +@param str String to search in +@param pattern String containing pattern to find +@return Number of found occurences +]] + +---[[ +Return a matching iterator for the given value. The iterator will return + +one token per invocation, the tokens are separated by whitespace. If the +input value is a table, it is transformed into a string first. A nil value +will result in a valid interator which aborts with the first invocation. +@class function +@name imatch +@param val The value to scan (table, string or nil) +@return Iterator which returns one token per call +]] + +---[[ +Parse certain units from the given string and return the canonical integer + +value or 0 if the unit is unknown. Upper- or lower case is irrelevant. +Recognized units are: +-- o "y" - one year (60*60*24*366) + o "m" - one month (60*60*24*31) + o "w" - one week (60*60*24*7) + o "d" - one day (60*60*24) + o "h" - one hour (60*60) + o "min" - one minute (60) + o "kb" - one kilobyte (1024) + o "mb" - one megabyte (1024*1024) + o "gb" - one gigabyte (1024*1024*1024) + o "kib" - one si kilobyte (1000) + o "mib" - one si megabyte (1000*1000) + o "gib" - one si gigabyte (1000*1000*1000) +@class function +@name parse_units +@param ustr String containing a numerical value with trailing unit +@return Number containing the canonical value +]] + +---[[ +Appends numerically indexed tables or single objects to a given table. + +@class function +@name append +@param src Target table +@param ... Objects to insert +@return Target table +]] + +---[[ +Combines two or more numerically indexed tables and single objects into one table. + +@class function +@name combine +@param tbl1 Table value to combine +@param tbl2 Table value to combine +@param ... More tables to combine +@return Table value containing all values of given tables +]] + +---[[ +Checks whether the given table contains the given value. + +@class function +@name contains +@param table Table value +@param value Value to search within the given table +@return number indicating the first index at which the given value occurs +-- within table or false. +]] + +---[[ +Update values in given table with the values from the second given table. + +Both table are - in fact - merged together. +@class function +@name update +@param t Table which should be updated +@param updates Table containing the values to update +@return Always nil +]] + +---[[ +Retrieve all keys of given associative table. + +@class function +@name keys +@param t Table to extract keys from +@return Sorted table containing the keys +]] + +---[[ +Clones the given object and return it's copy. + +@class function +@name clone +@param object Table value to clone +@param deep Boolean indicating whether to do recursive cloning +@return Cloned table value +]] + +---[[ +Create a dynamic table which automatically creates subtables. + +@class function +@name dtable +@return Dynamic Table +]] + +---[[ +Recursively serialize given data to lua code, suitable for restoring + +with loadstring(). +@class function +@name serialize_data +@param val Value containing the data to serialize +@return String value containing the serialized code +@see restore_data +@see get_bytecode +]] + +---[[ +Restore data previously serialized with serialize_data(). + +@class function +@name restore_data +@param str String containing the data to restore +@return Value containing the restored data structure +@see serialize_data +@see get_bytecode +]] + +---[[ +Return the current runtime bytecode of the given data. The byte code + +will be stripped before it is returned. +@class function +@name get_bytecode +@param val Value to return as bytecode +@return String value containing the bytecode of the given data +]] + +---[[ +Strips unnescessary lua bytecode from given string. Information like line + +numbers and debugging numbers will be discarded. Original version by +Peter Cawley (http://lua-users.org/lists/lua-l/2008-02/msg01158.html) +@class function +@name strip_bytecode +@param code String value containing the original lua byte code +@return String value containing the stripped lua byte code +]] + +---[[ +Return a key, value iterator which returns the values sorted according to + +the provided callback function. +@class function +@name spairs +@param t The table to iterate +@param f A callback function to decide the order of elements +@return Function value containing the corresponding iterator +]] + +---[[ +Return a key, value iterator for the given table. + +The table pairs are sorted by key. +@class function +@name kspairs +@param t The table to iterate +@return Function value containing the corresponding iterator +]] + +---[[ +Return a key, value iterator for the given table. + +The table pairs are sorted by value. +@class function +@name vspairs +@param t The table to iterate +@return Function value containing the corresponding iterator +]] + +---[[ +Test whether the current system is operating in big endian mode. + +@class function +@name bigendian +@return Boolean value indicating whether system is big endian +]] + +---[[ +Execute given commandline and gather stdout. + +@class function +@name exec +@param command String containing command to execute +@return String containing the command's stdout +]] + +---[[ +Return a line-buffered iterator over the output of given command. + +@class function +@name execi +@param command String containing the command to execute +@return Iterator +]] + +---[[ +Issue an ubus call. + +@class function +@name ubus +@param object String containing the ubus object to call +@param method String containing the ubus method to call +@param values Table containing the values to pass +@return Table containin the ubus result +]] + +---[[ +Convert data structure to JSON + +@class function +@name serialize_json +@param data The data to serialize +@param writer A function to write a chunk of JSON data (optional) +@return String containing the JSON if called without write callback +]] + +---[[ +Returns the absolute path to LuCI base directory. + +@class function +@name libpath +@return String containing the directory path +]] + +---[[ +This is a coroutine-safe drop-in replacement for Lua's "xpcall"-function + +@class function +@name coxpcall +@param f Lua function to be called protected +@param err Custom error handler +@param ... Parameters passed to the function +@return A boolean whether the function call succeeded and the return +-- values of either the function or the error handler +]] + +---[[ +This is a coroutine-safe drop-in replacement for Lua's "pcall"-function + +@class function +@name copcall +@param f Lua function to be called protected +@param ... Parameters passed to the function +@return A boolean whether the function call succeeded and the returns +-- values of the function or the error object +]] + diff --git a/feeds/luci/modules/luci-base/luasrc/version.lua b/feeds/luci/modules/luci-base/luasrc/version.lua new file mode 100644 index 0000000..8af2e80 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/version.lua @@ -0,0 +1,9 @@ +-- Licensed to the public under the Apache License 2.0. + +module "luci.version" + +distname = "Host System" +distversion = "SDK" + +luciname = "LuCI" +luciversion = "SVN" diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/apply_xhr.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/apply_xhr.htm new file mode 100644 index 0000000..daa57c1 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/apply_xhr.htm @@ -0,0 +1,43 @@ +<% export("cbi_apply_xhr", function(id, configs, redirect) -%> +
+ <%:Applying changes%> + + + <%:Loading%> + <%:Waiting for changes to be applied...%> +
+<%- end) %> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/browser.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/browser.htm new file mode 100644 index 0000000..a181201 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/browser.htm @@ -0,0 +1,7 @@ +<% local v = self:cfgvalue(section) -%> +<%+cbi/valueheader%> + /> + +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/button.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/button.htm new file mode 100644 index 0000000..30f8ddf --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/button.htm @@ -0,0 +1,7 @@ +<%+cbi/valueheader%> + <% if self:cfgvalue(section) ~= false then %> + " type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> + <% else %> + - + <% end %> +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/cell_valuefooter.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/cell_valuefooter.htm new file mode 100644 index 0000000..786ee43 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/cell_valuefooter.htm @@ -0,0 +1,2 @@ + + diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/cell_valueheader.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/cell_valueheader.htm new file mode 100644 index 0000000..9c9c218 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/cell_valueheader.htm @@ -0,0 +1,2 @@ + +
" data-index="<%=self.index%>" data-depends="<%=pcdata(self:deplist2json(section))%>"> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/compound.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/compound.htm new file mode 100644 index 0000000..12d02bb --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/compound.htm @@ -0,0 +1 @@ +<%- self:render_children() %> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/delegator.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/delegator.htm new file mode 100644 index 0000000..4fd1926 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/delegator.htm @@ -0,0 +1,24 @@ +<%- self.active:render() %> +
+ +<% for _, x in ipairs(self.chain) do %> + +<% end %> +<% if not self.disallow_pageactions then %> +<% if self.allow_finish and not self:get_next(self.current) then %> + +<% elseif self:get_next(self.current) then %> + +<% end %> +<% if self.allow_cancel then %> + +<% end %> +<% if self.allow_reset then %> + +<% end %> +<% if self.allow_back and self:get_prev(self.current) then %> + +<% end %> +<% end %> + +
diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/dvalue.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/dvalue.htm new file mode 100644 index 0000000..78e6f32 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/dvalue.htm @@ -0,0 +1,13 @@ +<%+cbi/valueheader%> +<% if self.href then %><% end -%> + <% + local val = self:cfgvalue(section) or self.default or "" + if not self.rawhtml then + write(pcdata(val)) + else + write(val) + end + %> +<%- if self.href then %><%end%> +" /> +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/dynlist.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/dynlist.htm new file mode 100644 index 0000000..4d0b509 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/dynlist.htm @@ -0,0 +1,27 @@ +<%+cbi/valueheader%> +> +<% + local vals = self:cfgvalue(section) or {} + for i=1, #vals + 1 do + local val = vals[i] + if (val and #val > 0) or (i == 1) then +%> + />
+<% end end %> +
+<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/error.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/error.htm new file mode 100644 index 0000000..75ec108 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/error.htm @@ -0,0 +1,19 @@ +
+ <% if self.title and #self.title > 0 then %>

<%=self.title%>

<% end %> + <% if self.description and #self.description > 0 then %>
<%=self.description%>
<% end %> + +

+ <%: The configuration file could not be loaded due to the following error: %>
+ <%=pcdata(self.error)%> +

+ + + +

+ <%: Edit the raw configuration data above to fix any error and hit "Save" to reload the page. %> +

+ +
+ +
+
diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/filebrowser.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/filebrowser.htm new file mode 100644 index 0000000..a79beeb --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/filebrowser.htm @@ -0,0 +1,108 @@ + + + + + Filebrowser - LuCI + + + + + + <% + require("nixio.fs") + require("nixio.util") + require("luci.http") + require("luci.dispatcher") + + local field = luci.http.formvalue('field') + local request = luci.dispatcher.context.args + local path = { '' } + + for i = 1, #request do + if request[i] ~= '..' and #request[i] > 0 then + path[#path+1] = request[i] + end + end + + local filepath = table.concat( path, '/' ) + local filestat = nixio.fs.stat( filepath ) + local baseurl = luci.dispatcher.build_url('admin', 'filebrowser') + + if filestat and filestat.type == "reg" then + table.remove( path, #path ) + filepath = table.concat( path, '/' ) .. '/' + elseif not ( filestat and filestat.type == "dir" ) then + path = { '' } + filepath = '/' + else + filepath = filepath .. '/' + end + + local entries = nixio.util.consume((nixio.fs.dir(filepath))) + -%> +
+ Location: + <% for i, dir in ipairs(path) do %> + <% if i == 1 then %> + (root) + <% elseif next(path, i) then %> + <% baseurl = baseurl .. '/' .. dir %> + / <%=dir%> + <% else %> + <% baseurl = baseurl .. '/' .. dir %> + / <%=dir%> + <% end %> + <% end %> +
+ +
+ +
+
    + <% for _, e in luci.util.vspairs(entries) do + local stat = nixio.fs.stat(filepath..e) + if stat and stat.type == 'dir' then + -%> +
  • + <%:Directory%> + <%=e%>/ +
  • + <% end end -%> + + <% for _, e in luci.util.vspairs(entries) do + local stat = nixio.fs.stat(filepath..e) + if stat and stat.type ~= 'dir' then + -%> +
  • + <%:File%> + <%=e%> +
  • + <% end end -%> +
+
+ + diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/firewall_zoneforwards.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/firewall_zoneforwards.htm new file mode 100644 index 0000000..2a433b5 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/firewall_zoneforwards.htm @@ -0,0 +1,59 @@ +<%+cbi/valueheader%> + +<%- + local utl = require "luci.util" + local fwm = require "luci.model.firewall".init() + local nwm = require "luci.model.network".init() + + local zone, fwd, fz + local value = self:formvalue(section) + if not value or value == "-" then + value = self:cfgvalue(section) or self.default + end + + local def = fwm:get_defaults() + local zone = fwm:get_zone(value) + local empty = true +-%> + +<% if zone then %> +
+ +  ⇒  + <% for _, fwd in ipairs(zone:get_forwardings_by("src")) do + fz = fwd:dest_zone() + empty = false %> +   + <% end %> + <% if empty then %> + + <% end %> +
+<% end %> + +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/firewall_zonelist.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/firewall_zonelist.htm new file mode 100644 index 0000000..5cb3151 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/firewall_zonelist.htm @@ -0,0 +1,93 @@ +<%+cbi/valueheader%> + +<%- + local utl = require "luci.util" + local fwm = require "luci.model.firewall".init() + local nwm = require "luci.model.network".init() + + local zone, net, iface + local zones = fwm:get_zones() + local value = self:formvalue(section) + if not value or value == "-" then + value = self:cfgvalue(section) or self.default + end + + local selected = false + local checked = { } + + for value in utl.imatch(value) do + checked[value] = true + end + + if not next(checked) then + checked[""] = true + end +-%> + +
    + <% if self.allowlocal then %> +
  • + />   + > + style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge"> + <%:Device%> + <% if self.allowany and self.allowlocal then %>(<%:input%>)<% end %> + +
  • + <% end %> + <% if self.allowany then %> +
  • + />   + > + style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge"> + <%:Any zone%> + <% if self.allowany and self.allowlocal then %>(<%:forward%>)<% end %> + +
  • + <% end %> + <% + for _, zone in utl.spairs(zones, function(a,b) return (zones[a]:name() < zones[b]:name()) end) do + if zone:name() ~= self.exclude then + selected = selected or (value == zone:name()) + %> +
  • + />   + > + style="background-color:<%=zone:get_color()%>" class="zonebadge"> + <%=zone:name()%>: + <% + local zempty = true + for _, net in ipairs(zone:get_networks()) do + net = nwm:get_network(net) + if net then + zempty = false + %> + <%=net:name()%>: + <% + local nempty = true + for _, iface in ipairs(net:is_bridge() and net:get_interfaces() or { net:get_interface() }) do + nempty = false + %> + style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" /> + <% end %> + <% if nempty then %><%:(empty)%><% end %> + + <% end end %> + <% if zempty then %><%:(empty)%><% end %> + +
  • + <% end end %> + + <% if self.widget ~= "checkbox" and not self.nocreate then %> +
  • + />   + > +
    + <%:unspecified -or- create:%>  + onfocus="document.getElementById('<%=cbid%>_new').checked=true" /> +
    +
  • + <% end %> +
+ +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/footer.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/footer.htm new file mode 100644 index 0000000..4d332fd --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/footer.htm @@ -0,0 +1,27 @@ + <%- if pageaction then -%> +
+ <% if redirect then %> +
+ +
+ <% end %> + + <% if flow.skip then %> + + <% end %> + <% if not autoapply and not flow.hideapplybtn then %> + + <% end %> + <% if not flow.hidesavebtn then %> + + <% end %> + <% if not flow.hideresetbtn then %> + + <% end %> +
+ <%- end -%> + + + + +<%+footer%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/full_valuefooter.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/full_valuefooter.htm new file mode 100644 index 0000000..f780936 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/full_valuefooter.htm @@ -0,0 +1,13 @@ + <% if self.description and #self.description > 0 then -%> + <% if not luci.util.instanceof(self, luci.cbi.DynamicList) and (not luci.util.instanceof(self, luci.cbi.Flag) or self.orientation == "horizontal") then -%> +
+ <%- end %> +
+ <%:help%> + <%=self.description%> +
+ <%- end %> + <%- if self.title and #self.title > 0 then -%> + + <%- end -%> + diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/full_valueheader.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/full_valueheader.htm new file mode 100644 index 0000000..10a5543 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/full_valueheader.htm @@ -0,0 +1,9 @@ +
" data-index="<%=self.index%>" data-depends="<%=pcdata(self:deplist2json(section))%>"> + <%- if self.title and #self.title > 0 then -%> + +
+ <%- end -%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/fvalue.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/fvalue.htm new file mode 100644 index 0000000..197d03c --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/fvalue.htm @@ -0,0 +1,10 @@ +<%+cbi/valueheader%> + /> + /> + > +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/header.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/header.htm new file mode 100644 index 0000000..9710bae --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/header.htm @@ -0,0 +1,19 @@ +<%+header%> +
+
+ + + + +
diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/lvalue.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/lvalue.htm new file mode 100644 index 0000000..34d02ee --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/lvalue.htm @@ -0,0 +1,43 @@ +<% + local i, key + local br = self.orientation == "horizontal" and ' ' or '
' +%> + +<%+cbi/valueheader%> +<% if self.widget == "select" then %> + +<% elseif self.widget == "radio" then %> +
+ <% for i, key in pairs(self.keylist) do %> + > + /> + > + <%=pcdata(self.vallist[i])%> + + <% if i == self.size then write(br) end %> + <% end %> +
+<% end %> +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/map.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/map.htm new file mode 100644 index 0000000..e3210ad --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/map.htm @@ -0,0 +1,47 @@ +<%- if firstmap and messages then local msg; for _, msg in ipairs(messages) do -%> +
<%=pcdata(msg)%>
+<%- end end -%> + +<%-+cbi/apply_xhr-%> + +
+ <% if self.title and #self.title > 0 then %>

<%=self.title%>

<% end %> + <% if self.description and #self.description > 0 then %>
<%=self.description%>
<% end %> + <%- if firstmap and applymap then cbi_apply_xhr(self.config, parsechain, redirect) end -%> + + <% if self.tabbed then %> +
    + <%- self.selected_tab = luci.http.formvalue("tab.m-" .. self.config) %> + <% for i, section in ipairs(self.children) do %> + <%- if not self.selected_tab then self.selected_tab = section.sectiontype end %> +
  • + <%=section.title or section.section or section.sectiontype %> + <% if section.sectiontype == self.selected_tab then %><% end %> +
  • + <% end %> +
+
+ <% for i, section in ipairs(self.children) do %> +
style="display:none"<% end %>> + <% section:render() %> +
+ + <% end %> + + <% if not self.save then -%> +
+ <% for _, section in ipairs(self.children) do %> + <% if section.error and section.error[section.section] then -%> +
  • + <%:One or more invalid/required values on tab%>: <%=section.title or section.section or section.sectiontype%> +
+ <%- end %> + <% end %> +
+ <%- end %> + <% else %> + <%- self:render_children() %> + <% end %> + +
+
diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/mvalue.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/mvalue.htm new file mode 100644 index 0000000..246ef43 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/mvalue.htm @@ -0,0 +1,43 @@ +<% + local i, key + local v = self:valuelist(section) or {} +-%> + +<%+cbi/valueheader%> +<% if self.widget == "select" then %> + +<% elseif self.widget == "checkbox" then %> +
+ <% for i, key in pairs(self.keylist) do %> + > + /> + > + <%=pcdata(self.vallist[i])%> + + <% if i == self.size then write('
') end %> + <% end %> +
+<% end %> +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/network_ifacelist.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/network_ifacelist.htm new file mode 100644 index 0000000..62dbde7 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/network_ifacelist.htm @@ -0,0 +1,89 @@ +<%+cbi/valueheader%> + +<%- + local utl = require "luci.util" + local net = require "luci.model.network".init() + local cbeid = luci.cbi.FEXIST_PREFIX .. self.config .. "." .. section .. "." .. self.option + + local iface + local ifaces = net:get_interfaces() + local value + + if self.map:formvalue(cbeid) == "1" then + value = self:formvalue(section) or self.default or "" + else + value = self:cfgvalue(section) or self.default + end + + local checked = { } + + if value then + for value in utl.imatch(value) do + checked[value] = true + end + else + local n = self.network and net:get_network(self.network) + if n then + local i + for _, i in ipairs(n:get_interfaces() or { n:get_interface() }) do + checked[i:name()] = true + end + end + end +-%> + + +
    + <% for _, iface in ipairs(ifaces) do + local link = iface:adminlink() + if (not self.nobridges or not iface:is_bridge()) and + (not self.noinactive or iface:is_up()) and + iface:name() ~= self.exclude + then %> +
  • + " data-update="click change"<%= + attr("type", self.widget or "radio") .. + attr("id", cbid .. "." .. iface:name()) .. + attr("name", cbid) .. attr("value", iface:name()) .. + ifattr(checked[iface:name()], "checked", "checked") + %> /> + <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%> + > + <%- end -%> +   + > + <% if link then -%><% end -%> + style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" /> + <% if link then -%><% end -%> + <%=pcdata(iface:get_i18n())%> + <% local ns = iface:get_networks(); if #ns > 0 then %>( + <%- local i, n; for i, n in ipairs(ns) do -%> + <%-= (i>1) and ', ' -%> + <%=n:name()%> + <%- end -%> + )<% end %> + +
  • + <% end end %> + <% if not self.nocreate then %> +
  • + " data-update="click change"<%= + attr("type", self.widget or "radio") .. + attr("id", cbid .. "_custom") .. + attr("name", cbid) .. + attr("value", " ") + %> /> + <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%> + > + <%- end -%> +   + > + + <%:Custom Interface%>: + + +
  • + <% end %> +
+ +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/network_netinfo.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/network_netinfo.htm new file mode 100644 index 0000000..4fd8411 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/network_netinfo.htm @@ -0,0 +1,27 @@ +<%+cbi/valueheader%> + +<%- + local value = self:formvalue(section) + if not value or value == "-" then + value = self:cfgvalue(section) or self.default + end + + local nwm = require "luci.model.network".init() + local net = nwm:get_network(value) +-%> + +<% if net then %> +<%=net:name()%>: + <% + local empty = true + for _, iface in ipairs(net:get_interfaces() or { net:get_interface() }) do + if not iface:is_bridge() then + empty = false + %> + style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" /> + <% end end %> + <% if empty then %><%:(no interfaces attached)%><% end %> + +<% end %> + +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/network_netlist.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/network_netlist.htm new file mode 100644 index 0000000..8bf1a70 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/network_netlist.htm @@ -0,0 +1,85 @@ +<%+cbi/valueheader%> + +<%- + local utl = require "luci.util" + local nwm = require "luci.model.network".init() + + local net, iface + local networks = nwm:get_networks() + local value = self:formvalue(section) + + self.cast = nil + + if not value or value == "-" then + value = self:cfgvalue(section) or self.default + end + + local checked = { } + for value in utl.imatch(value) do + checked[value] = true + end +-%> + +
    + <% for _, net in ipairs(networks) do + if (net:name() ~= "loopback") and + (net:name() ~= self.exclude) and + (not self.novirtual or not net:is_virtual()) + then %> +
  • + " data-update="click change"<%= + attr("type", self.widget or "radio") .. + attr("id", cbid .. "." .. net:name()) .. + attr("name", cbid) .. attr("value", net:name()) .. + ifattr(checked[net:name()], "checked", "checked") + %> />   + > + <%=net:name()%>: + <% + local empty = true + for _, iface in ipairs(net:is_bridge() and net:get_interfaces() or { net:get_interface() }) do + if not iface:is_bridge() then + empty = false + %> + style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" /> + <% end end %> + <% if empty then %><%:(no interfaces attached)%><% end %> + + +
  • + <% end end %> + + <% if not self.nocreate then %> +
  • + " data-update="click change"<%=attr("type", self.widget or "radio") .. attr("id", cbid .. "_new") .. attr("name", cbid) .. attr("value", "-") .. ifattr(not value and self.widget ~= "checkbox", "checked", "checked")%> />   + <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%> + > + <%- end -%> +
    + > + <%- if self.widget == "checkbox" then -%> + <%:create:%> + <%- else -%> + <%:unspecified -or- create:%> + <%- end -%>  + + onfocus="document.getElementById('<%=cbid%>_new').checked=true" /> +
    +
  • + <% elseif self.widget ~= "checkbox" and self.unspecified then %> +
  • + " data-update="click change"<%= + attr("type", self.widget or "radio") .. + attr("id", cbid .. "_uns") .. + attr("name", cbid) .. + attr("value", "") .. + ifattr(not value or #value == 0, "checked", "checked") + %> />   +
    + ><%:unspecified%> +
    +
  • + <% end %> +
+ +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/nsection.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/nsection.htm new file mode 100644 index 0000000..abf6759 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/nsection.htm @@ -0,0 +1,31 @@ +<% if self:cfgvalue(self.section) then section = self.section %> +
+ <% if self.title and #self.title > 0 then -%> + <%=self.title%> + <%- end %> + <% if self.description and #self.description > 0 then -%> +
<%=self.description%>
+ <%- end %> + <% if self.addremove then -%> +
+ +
+ <%- end %> + <%+cbi/tabmenu%> +
+ <%+cbi/ucisection%> +
+
+
+<% elseif self.addremove then %> + <% if self.template_addremove then include(self.template_addremove) else -%> +
+ <% if self.title and #self.title > 0 then -%> + <%=self.title%> + <%- end %> +
<%=self.description%>
+ +
+ <%- end %> +<% end %> + diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/nullsection.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/nullsection.htm new file mode 100644 index 0000000..ef16959 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/nullsection.htm @@ -0,0 +1,38 @@ +
+ <% if self.title and #self.title > 0 then -%> + <%=self.title%> + <%- end %> + <% if self.description and #self.description > 0 then -%> +
<%=self.description%>
+ <%- end %> +
+
+ <% self:render_children(1, scope or {}) %> +
+ <% if self.error and self.error[1] then -%> +
+
    <% for _, e in ipairs(self.error[1]) do -%> +
  • + <%- if e == "invalid" then -%> + <%:One or more fields contain invalid values!%> + <%- elseif e == "missing" then -%> + <%:One or more required fields have no value!%> + <%- else -%> + <%=pcdata(e)%> + <%- end -%> +
  • + <%- end %>
+
+ <%- end %> +
+
+
+<%- + if type(self.hidden) == "table" then + for k, v in pairs(self.hidden) do +-%> + +<%- + end + end +%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/simpleform.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/simpleform.htm new file mode 100644 index 0000000..78f5c5a --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/simpleform.htm @@ -0,0 +1,58 @@ +<% if not self.embedded then %> + +
+ + + +
+<% end %> +
+ <% if self.title and #self.title > 0 then %>

<%=self.title%>

<% end %> + <% if self.description and #self.description > 0 then %>
<%=self.description%>
<% end %> + <% self:render_children() %> +
+
+<%- if self.message then %> +
<%=self.message%>
+<%- end %> +<%- if self.errmessage then %> +
<%=self.errmessage%>
+<%- end %> +<% if not self.embedded then %> +
+<%- + if type(self.hidden) == "table" then + for k, v in pairs(self.hidden) do +-%> + +<%- + end + end +%> +<% if redirect then %> +
+ +
+<% end %> +<%- if self.flow and self.flow.skip then %> + +<% end %> +<%- if self.submit ~= false then %> + +<% end %> +<%- if self.reset ~= false then %> + +<% end %> +<%- if self.cancel ~= false and self.on_cancel then %> + +<% end %> + +
+
+<% end %> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/tabcontainer.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/tabcontainer.htm new file mode 100644 index 0000000..38c435d --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/tabcontainer.htm @@ -0,0 +1,7 @@ +<% for tab, data in pairs(self.tabs) do %> +
style="display:none"<% end %>> + <% if data.description then %>
<%=data.description%>
<% end %> + <% self:render_tab(tab, section, scope or {}) %> +
+ +<% end %> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/tabmenu.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/tabmenu.htm new file mode 100644 index 0000000..06c1414 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/tabmenu.htm @@ -0,0 +1,12 @@ +<%- if self.tabs then %> +
    + <%- self.selected_tab = luci.http.formvalue("tab." .. self.config .. "." .. section) %> + <%- for _, tab in ipairs(self.tab_names) do if #self.tabs[tab].childs > 0 then %> + <%- if not self.selected_tab then self.selected_tab = tab end %> +
  • + <%=self.tabs[tab].title%> + <% if tab == self.selected_tab then %><% end %> +
  • + <% end end -%> +
+<% end -%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/tblsection.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/tblsection.htm new file mode 100644 index 0000000..26d13f9 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/tblsection.htm @@ -0,0 +1,145 @@ +<%- +local rowcnt = 1 +function rowstyle() + rowcnt = rowcnt + 1 + return (rowcnt % 2) + 1 +end + +function width(o) + if o.width then + if type(o.width) == 'number' then + return ' style="width:%dpx"' % o.width + end + return ' style="width:%s"' % o.width + end + return '' +end +-%> + + +
+ <% if self.title and #self.title > 0 then -%> + <%=self.title%> + <%- end %> + <%- if self.sortable then -%> + + <%- end -%> +
<%=self.description%>
+
+ <%- local count = 0 -%> + + + <%- if not self.anonymous then -%> + <%- if self.sectionhead then -%> + + <%- else -%> + + <%- end -%> + <%- end -%> + <%- for i, k in pairs(self.children) do if not k.optional then -%> + + <%- count = count + 1; end; end; if self.sortable then -%> + + <%- end; if self.extedit or self.addremove then -%> + + <%- count = count + 1; end -%> + + + <%- if not self.anonymous then -%> + <%- if self.sectiondesc then -%> + + <%- else -%> + + <%- end -%> + <%- end -%> + <%- for i, k in pairs(self.children) do if not k.optional then -%> + + <%- end; end; if self.sortable then -%> + + <%- end; if self.extedit or self.addremove then -%> + + <%- end -%> + + <%- local isempty = true + for i, k in ipairs(self:cfgsections()) do + section = k + isempty = false + scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" } + -%> + + <% if not self.anonymous then -%> + + <%- end %> + + + <%- + for k, node in ipairs(self.children) do + if not node.optional then + node:render(section, scope or {}) + end + end + -%> + + <%- if self.sortable then -%> + + <%- end -%> + + <%- if self.extedit or self.addremove then -%> + + <%- end -%> + + <%- end -%> + + <%- if isempty then -%> + + + + <%- end -%> +
<%=self.sectionhead%> > + <%- if k.titleref then -%><%- end -%> + <%-=k.title-%> + <%- if k.titleref then -%><%- end -%> + <%:Sort%> 
<%=self.sectiondesc%>><%=k.description%>

<%=(type(self.sectiontitle) == "function") and self:sectiontitle(section) or k%>

+ + + + <%- if self.extedit then -%> + onclick="location.href='<%=self.extedit:format(section)%>'" + <%- elseif type(self.extedit) == "function" then + %> onclick="location.href='<%=self:extedit(section)%>'" + <%- end + %> alt="<%:Edit%>" title="<%:Edit%>" /> + <%- end; if self.addremove then %> + + <%- end -%> +

<%:This section contains no values yet%>
+ + <% if self.error then %> +
+
    <% for _, c in pairs(self.error) do for _, e in ipairs(c) do -%> +
  • <%=pcdata(e):gsub("\n","
    ")%>
  • + <%- end end %>
+
+ <% end %> + + <%- if self.addremove then -%> + <% if self.template_addremove then include(self.template_addremove) else -%> +
+ <% if self.anonymous then %> + + <% else %> + <% if self.invalid_cts then -%>
<% end %> + + + <% if self.invalid_cts then -%> +
<%:Invalid%>
+ <%- end %> + <% end %> +
+ <%- end %> + <%- end -%> +
+
+ diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/tsection.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/tsection.htm new file mode 100644 index 0000000..726521a --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/tsection.htm @@ -0,0 +1,49 @@ +
+ <% if self.title and #self.title > 0 then -%> + <%=self.title%> + <%- end %> + <% if self.description and #self.description > 0 then -%> +
<%=self.description%>
+ <%- end %> + <% local isempty = true for i, k in ipairs(self:cfgsections()) do -%> + <% if self.addremove then -%> +
+ +
+ <%- end %> + + <%- section = k; isempty = false -%> + + <% if not self.anonymous then -%> +

<%=section:upper()%>

+ <%- end %> + + <%+cbi/tabmenu%> + +
+ <%+cbi/ucisection%> +
+
+ <%- end %> + + <% if isempty then -%> + <%:This section contains no values yet%>

+ <%- end %> + + <% if self.addremove then -%> + <% if self.template_addremove then include(self.template_addremove) else -%> +
+ <% if self.anonymous then -%> + + <%- else -%> + <% if self.invalid_cts then -%>
<% end %> + + + <% if self.invalid_cts then -%> +
<%:Invalid%>
+ <%- end %> + <%- end %> +
+ <%- end %> + <%- end %> +
diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/tvalue.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/tvalue.htm new file mode 100644 index 0000000..d1e9e66 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/tvalue.htm @@ -0,0 +1,5 @@ +<%+cbi/valueheader%> + +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/ucisection.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/ucisection.htm new file mode 100644 index 0000000..2cb1e75 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/ucisection.htm @@ -0,0 +1,56 @@ +<%- + if type(self.hidden) == "table" then + for k, v in pairs(self.hidden) do +-%> + +<%- + end + end +%> + +<% if self.tabs then %> + <%+cbi/tabcontainer%> +<% else %> + <% self:render_children(section, scope or {}) %> +<% end %> + +<% if self.error and self.error[section] then -%> +
+
    <% for _, e in ipairs(self.error[section]) do -%> +
  • + <%- if e == "invalid" then -%> + <%:One or more fields contain invalid values!%> + <%- elseif e == "missing" then -%> + <%:One or more required fields have no value!%> + <%- else -%> + <%=pcdata(e)%> + <%- end -%> +
  • + <%- end %>
+
+<%- end %> + +<% if self.optionals[section] and #self.optionals[section] > 0 or self.dynamic then %> +
+ <% + if self.dynamic then + local keys, vals, name, opt = { }, { } + for name, opt in pairs(self.optionals[section]) do + keys[#keys+1] = name + vals[#vals+1] = opt.title + end + %> + 0, "data-choices", luci.util.json_encode({keys, vals})) + %> /> + <% else %> + + <% end %> + +
+<% end %> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/upload.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/upload.htm new file mode 100644 index 0000000..4fb5201 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/upload.htm @@ -0,0 +1,24 @@ +<% + local t = require("luci.tools.webadmin") + local v = self:cfgvalue(section) + local s = v and nixio.fs.stat(v) +-%> +<%+cbi/valueheader%> + <% if s then %> + <%:Uploaded File%> (<%=t.byte_format(s.size)%>) + <% if self.unsafeupload then %> + /> + " alt="<%:Replace entry%>" title="<%:Replace entry%>" src="<%=resource%>/cbi/reload.gif" /> + <% end %> + <% end %> + + <% if not self.unsafeupload then %> + /> + <% end %> + + <% if (not s) or (s and not self.unsafeupload) then %> + /> + <% end %> + /> +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/value.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/value.htm new file mode 100644 index 0000000..c8c905e --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/value.htm @@ -0,0 +1,18 @@ +<%+cbi/valueheader%> + 0, "data-choices", { self.keylist, self.vallist }) + %> /> + <% if self.password then %><% end %> +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/valuefooter.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/valuefooter.htm new file mode 100644 index 0000000..805312e --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/valuefooter.htm @@ -0,0 +1 @@ +<% include( valuefooter or "cbi/full_valuefooter" ) %> diff --git a/feeds/luci/modules/luci-base/luasrc/view/cbi/valueheader.htm b/feeds/luci/modules/luci-base/luasrc/view/cbi/valueheader.htm new file mode 100644 index 0000000..761a54a --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/cbi/valueheader.htm @@ -0,0 +1 @@ +<% include( valueheader or "cbi/full_valueheader" ) %> diff --git a/feeds/luci/modules/luci-base/luasrc/view/csrftoken.htm b/feeds/luci/modules/luci-base/luasrc/view/csrftoken.htm new file mode 100644 index 0000000..57ac03f --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/csrftoken.htm @@ -0,0 +1,24 @@ +<%# + Copyright 2015 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Form token mismatch%>

+
+ +

<%:The submitted security token is invalid or already expired!%>

+ +

<%: + In order to prevent unauthorized access to the system, your request has + been blocked. Click "Continue »" below to return to the previous page. +%>

+ +
+ +

+ Continue » +

+ +<%+footer%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/error404.htm b/feeds/luci/modules/luci-base/luasrc/view/error404.htm new file mode 100644 index 0000000..bc74226 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/error404.htm @@ -0,0 +1,11 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

404 <%:Not Found%>

+

<%:Sorry, the object you requested was not found.%>

+<%:Unable to dispatch%>: <%=luci.http.request.env.PATH_INFO%> +<%+footer%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/error500.htm b/feeds/luci/modules/luci-base/luasrc/view/error500.htm new file mode 100644 index 0000000..34a52cd --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/error500.htm @@ -0,0 +1,11 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

500 <%:Internal Server Error%>

+

<%:Sorry, the server encountered an unexpected error.%>

+
<%=message%>
+<%+footer%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/footer.htm b/feeds/luci/modules/luci-base/luasrc/view/footer.htm new file mode 100644 index 0000000..f3574b6 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/footer.htm @@ -0,0 +1,7 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% include("themes/" .. theme .. "/footer") %> \ No newline at end of file diff --git a/feeds/luci/modules/luci-base/luasrc/view/header.htm b/feeds/luci/modules/luci-base/luasrc/view/header.htm new file mode 100644 index 0000000..f6e20c9 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/header.htm @@ -0,0 +1,12 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% + if not luci.dispatcher.context.template_header_sent then + include("themes/" .. theme .. "/header") + luci.dispatcher.context.template_header_sent = true + end +%> diff --git a/feeds/luci/modules/luci-base/luasrc/view/indexer.htm b/feeds/luci/modules/luci-base/luasrc/view/indexer.htm new file mode 100644 index 0000000..28fc3de --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/indexer.htm @@ -0,0 +1,7 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% include("themes/" .. theme .. "/indexer") %> \ No newline at end of file diff --git a/feeds/luci/modules/luci-base/luasrc/view/sysauth.htm b/feeds/luci/modules/luci-base/luasrc/view/sysauth.htm new file mode 100644 index 0000000..f6b0f57 --- /dev/null +++ b/feeds/luci/modules/luci-base/luasrc/view/sysauth.htm @@ -0,0 +1,73 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2012 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +
"> + <%- if fuser then %> +
<%:Invalid username and/or password! Please try again.%>
+ <% end -%> + +
+

<%:Authorization Required%>

+
+ <%:Please enter your username and password.%> +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+ + +
+
+ + +<% +local uci = require "luci.model.uci".cursor() +local fs = require "nixio.fs" +local https_key = uci:get("uhttpd", "main", "key") +local https_port = uci:get("uhttpd", "main", "listen_https") +if type(https_port) == "table" then + https_port = https_port[1] +end + +if https_port and fs.access(https_key) then + https_port = https_port:match("(%d+)$") +%> + + + +<% end %> + +<%+footer%> diff --git a/feeds/luci/modules/luci-base/po/ca/base.po b/feeds/luci/modules/luci-base/po/ca/base.po new file mode 100644 index 0000000..ec57391 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/ca/base.po @@ -0,0 +1,3751 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-06-06 11:17+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(finestra de %d minuts, interval de %d segons)" + +msgid "(%s available)" +msgstr "(%s disponibles)" + +msgid "(empty)" +msgstr "(buit)" + +msgid "(no interfaces attached)" +msgstr "(sense interfícies adjuntes)" + +msgid "-- Additional Field --" +msgstr "-- Camp addicional --" + +msgid "-- Please choose --" +msgstr "-- Escolliu, si us plau --" + +msgid "-- custom --" +msgstr "-- personalitzat --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Càrrega d'1 minut:" + +msgid "15 Minute Load:" +msgstr "Càrrega de 15 minuts:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Càrrega de 5 minuts:" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "Port de consulta DNS " + +msgid "DNS server port" +msgstr "Port del servidor DNS" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"Es consultaran els servidors DNS " +"segons l'ordre del fitxer de resolució" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "Adreça IPv4" + +msgid "IPv4-Gateway" +msgstr "Passarel·la IPv4" + +msgid "IPv4-Netmask" +msgstr "" +"Màscara de xarxa IPv4" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"Adreça IPv6 o Xarxa (CIDR)" + +msgid "IPv6-Gateway" +msgstr "Passarel·la IPv6" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "Configuració LED" + +msgid "LED Name" +msgstr "Nom LED" + +msgid "MAC-Address" +msgstr "Adreça MAC" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Arrendaments de DHCP max." + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Mida màx. de paquet EDNS0" + +msgid "Max. concurrent queries" +msgstr "Consultes concurrents max." + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "Suport AR" + +msgid "ARP retry threshold" +msgstr "Llindar de reintent ARP" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "Ponts ATM" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "Identificador de canal virtual (VCI) ATM" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "Identificador de camí virtual (VPI) ATM" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"Els ponts ATM mostren ethernet encapsulat en connexions AAL5 com interfícies " +"de xarxa virtual de Linux que es poden utilitzar conjuntament amb DHCP o PPP " +"per trucar a la xarxa del proveïdor." + +msgid "ATM device number" +msgstr "Número de dispositiu ATM" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Concentrador d'accés" + +msgid "Access Point" +msgstr "Punt d'accés" + +msgid "Action" +msgstr "Acció" + +msgid "Actions" +msgstr "Accions" + +msgid "Activate this network" +msgstr "Activa aquesta xarxa" + +msgid "Active IPv4-Routes" +msgstr "Rutes IPv4 actives" + +msgid "Active IPv6-Routes" +msgstr "Rutes IPv6 actives" + +msgid "Active Connections" +msgstr "Connexions actives" + +msgid "Active DHCP Leases" +msgstr "Arrendaments DHCP actius" + +msgid "Active DHCPv6 Leases" +msgstr "Arrendaments DHCPv6 actius" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Afegeix" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" +"Afegeix el sufix de domini local als noms servits des dels fitxers de hosts" + +msgid "Add new interface..." +msgstr "Afegeix una interfície nova..." + +msgid "Additional Hosts files" +msgstr "Fitxers de Hosts addicionals" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Adreça" + +msgid "Address to access local relay bridge" +msgstr "Adreça per accedir al relay bridge local" + +msgid "Administration" +msgstr "Administració" + +msgid "Advanced Settings" +msgstr "Paràmetres avançats" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Alerta" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" +"Permet autenticació SSH per contrasenya" + +msgid "Allow all except listed" +msgstr "Permet-les totes menys les llistades" + +msgid "Allow listed only" +msgstr "Permet només les llistades" + +msgid "Allow localhost" +msgstr "Permetre el localhost" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"Permetre a màquines remotes de connectar als ports reenviats de l'SSH local" + +msgid "Allow root logins with password" +msgstr "Permetre l'accés del l'administrador amb paraula clau" + +msgid "Allow the root user to login with password" +msgstr "Permetre l'accés de l'usurari root amb paraula clau" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "Permet respostes del rang 127.0.0.0/8, p.e. per serveis RBL" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antena 1" + +msgid "Antenna 2" +msgstr "Antena 2" + +msgid "Antenna Configuration" +msgstr "Configuració d'antena" + +msgid "Any zone" +msgstr "Qualsevol zona" + +msgid "Apply" +msgstr "Aplica" + +msgid "Applying changes" +msgstr "Aplicant els canvis" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Assigna interfícies..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Estacions associades" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Controlador sense fils d'Atheros 802.11%s" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Autenticació" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Autoritzada" + +msgid "Authorization Required" +msgstr "Es requereix autenticació" + +msgid "Auto Refresh" +msgstr "Refresc automàtic" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Disponible" + +msgid "Available packages" +msgstr "Paquets disponibles" + +msgid "Average:" +msgstr "Mitjana:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Enrere" + +msgid "Back to Overview" +msgstr "Enrere al Resum" + +msgid "Back to configuration" +msgstr "Enrere a la configuració" + +msgid "Back to overview" +msgstr "Enrere al resum" + +# Endarrere cap a resultats d'escaneig +msgid "Back to scan results" +msgstr "Enrere als resultats de l'escaneig" + +msgid "Background Scan" +msgstr "Escaneig de fons" + +msgid "Backup / Flash Firmware" +msgstr "Còpia de seguretat / Recàrrega de programari" + +msgid "Backup / Restore" +msgstr "Còpia de seguretat / Restauració" + +msgid "Backup file list" +msgstr "Llista de còpies de seguretat" + +msgid "Bad address specified!" +msgstr "Adreça mal especificada!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"A sota hi ha la llista determinada de fitxers per fer-ne còpia. Consisteix " +"en els fitxers de configuració canviats i marcats per l'opkg, fitxers base " +"essencials i els patrons de còpia de seguretat definits per l'usuari." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Velocitat de bits" + +msgid "Bogus NX Domain Override" +msgstr "Substitució dels dominis NX falsos" + +msgid "Bridge" +msgstr "Pont" + +msgid "Bridge interfaces" +msgstr "Pont d'interfícies" + +msgid "Bridge unit number" +msgstr "Número d'unitat de pont" + +msgid "Bring up on boot" +msgstr "Aixecar a l'engegada" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Controlador sense fil Broadcom 802.11%s" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Controlador sense fil Broadcom BCM%04x 802.11" + +msgid "Buffered" +msgstr "En memòria intermèdia" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Botons" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Ús de CPU (%)" + +msgid "Cancel" +msgstr "Cancel·la" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Cadena" + +msgid "Changes" +msgstr "Canvis" + +msgid "Changes applied." +msgstr "Canvis aplicats." + +msgid "Changes the administrator password for accessing the device" +msgstr "Canvia la paraula clau de l'administrador per accedir al dispositiu" + +msgid "Channel" +msgstr "Canal" + +msgid "Check" +msgstr "Comprovació" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Suma de verificació" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Escolliu la zona de tallafocs que voleu assignar a aquesta interfície. Trieu " +"sense especificar per esborrar la interfície de la zona associada o " +"ompliu el camp crea per definir una nova zona i adjuntar-hi la " +"interfície." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Trieu les xarxes que voleu adjuntar a la interfície sense fil o ompliu el " +"camp crea per definir una xarxa nova." + +msgid "Cipher" +msgstr "Xifra" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" + +msgid "Client" +msgstr "Client" + +msgid "Client ID to send when requesting DHCP" +msgstr "ID de client a enviar en les sol·licituds DHCP" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" + +msgid "Close list..." +msgstr "Tanca la llista..." + +msgid "Collecting data..." +msgstr "Aplegant dades..." + +msgid "Command" +msgstr "Ordre" + +msgid "Common Configuration" +msgstr "Configuració comuna" + +msgid "Compression" +msgstr "Compressió" + +msgid "Configuration" +msgstr "Configuració" + +msgid "Configuration applied." +msgstr "S'ha aplicat la configuració." + +msgid "Configuration files will be kept." +msgstr "Es mantindran els fitxers de configuració." + +msgid "Confirmation" +msgstr "Confirmació" + +msgid "Connect" +msgstr "Connecta" + +msgid "Connected" +msgstr "Connectat" + +msgid "Connection Limit" +msgstr "Límit de connexió" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Connexions" + +msgid "Country" +msgstr "País" + +msgid "Country Code" +msgstr "Codi de País" + +msgid "Cover the following interface" +msgstr "Cobreix la interfície següent" + +msgid "Cover the following interfaces" +msgstr "Cobreix les interfícies següents" + +msgid "Create / Assign firewall-zone" +msgstr "Crea / Assigna zona de tallafocs" + +msgid "Create Interface" +msgstr "Crea interfície" + +msgid "Create a bridge over multiple interfaces" +msgstr "Crea un pont entre múltiples interfícies" + +msgid "Critical" +msgstr "Crític" + +msgid "Cron Log Level" +msgstr "Nivell de registre del Cron" + +msgid "Custom Interface" +msgstr "Interfície personalitzada" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Personalitza el comportament dels LEDs del dispositiu si és possible." + +msgid "DHCP Leases" +msgstr "Arrendaments DHCP" + +msgid "DHCP Server" +msgstr "Servidor DHCP" + +msgid "DHCP and DNS" +msgstr "DHCP i DNS" + +msgid "DHCP client" +msgstr "Client DHCP" + +msgid "DHCP-Options" +msgstr "Opcions DHCP" + +msgid "DHCPv6 Leases" +msgstr "Arrendaments DHCPv6" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "Reenviaments DNS" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Depuració" + +msgid "Default %d" +msgstr "%d per defecte" + +msgid "Default gateway" +msgstr "Passarel·la per defecte" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Estat per defecte" + +msgid "Define a name for this network." +msgstr "Definiu el nom d'aquesta xarxa" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" + +msgid "Delete" +msgstr "Suprimeix" + +msgid "Delete this network" +msgstr "Suprimeix aquesta xarxa" + +msgid "Description" +msgstr "Descripció" + +msgid "Design" +msgstr "Disseny" + +msgid "Destination" +msgstr "Destí" + +msgid "Device" +msgstr "Dispositiu" + +msgid "Device Configuration" +msgstr "Configuració de dispositiu" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnòstics" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Directori" + +msgid "Disable" +msgstr "Inhabilita" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Inhabilita el DHCP en aquesta interfície." + +msgid "Disable DNS setup" +msgstr "" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Inhabilita el temporitzador HW-Beacon" + +msgid "Disabled" +msgstr "Inhabilitat" + +msgid "Discard upstream RFC1918 responses" +msgstr "Descarta les respostes RFC1918 des de dalt" + +msgid "Displaying only packages containing" +msgstr "Mostrant només els paquets que contenen" + +msgid "Distance Optimization" +msgstr "Optimització de distància" + +msgid "Distance to farthest network member in meters." +msgstr "Distància al membre de la xarxa més allunyat en metres." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Diversitat" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"El Dnsmasq és un servidor DHCP combinat i un reenviador de DNS per tallafocs NAT" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "No enviïs les respostes de prova" + +msgid "Domain required" +msgstr "Es requereix un domini" + +msgid "Domain whitelist" +msgstr "" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"No reenviïs les peticions DNS " +"sense el nom DNS" + +msgid "Download and install package" +msgstr "Descarrega i instal·la el paquet" + +msgid "Download backup" +msgstr "Descarrega còpia de seguritat" + +msgid "Dropbear Instance" +msgstr "Instància de Dropbear" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"El Dropbear ofereix accés per la xarxa a consola SSHi un servidor SCP integrat" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"DHCP dinàmic" + +msgid "Dynamic tunnel" +msgstr "Túnel dinàmic" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "Mètode EAP" + +msgid "Edit" +msgstr "Edita" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Edita aquesta interfície" + +msgid "Edit this network" +msgstr "Edita aquesta xarxa" + +msgid "Emergency" +msgstr "Emergència" + +msgid "Enable" +msgstr "Habilita" + +msgid "Enable STP" +msgstr "Habilita l'STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Habilita negociació IPv6 en la enllaç PPP" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Habilita el passatge de trames enormes" + +msgid "Enable NTP client" +msgstr "Habilita el client NTP" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Habilita el servidor TFTP" + +msgid "Enable VLAN functionality" +msgstr "Habilita la funcionalitat VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Habilita l'aprenentatge i l'envelliment" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "" + +msgid "Enable this swap" +msgstr "" + +msgid "Enable/Disable" +msgstr "Activa/Desactiva" + +msgid "Enabled" +msgstr "Habilitat" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Habilita l'Spanning Tree Protocol a aquest pont" + +msgid "Encapsulation mode" +msgstr "Mode d'encapsulació" + +msgid "Encryption" +msgstr "Encriptació" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Esborrant..." + +msgid "Error" +msgstr "Error" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Adaptador Ethernet" + +msgid "Ethernet Switch" +msgstr "Switch Ethernet" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "Caduca" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "" + +msgid "External system log server port" +msgstr "" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Fast Frames" + +msgid "File" +msgstr "Fitxer" + +msgid "Filename of the boot image advertised to clients" +msgstr "Nom de fitxer de la imatge d'inici que es publica als clients" + +msgid "Filesystem" +msgstr "Sistema de fitxers" + +msgid "Filter" +msgstr "Filtre" + +msgid "Filter private" +msgstr "Filtra privat" + +msgid "Filter useless" +msgstr "Filtra els no útils" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Troba i uneix-te a la xarxa" + +msgid "Find package" +msgstr "Cerca paquet" + +msgid "Finish" +msgstr "Acaba" + +msgid "Firewall" +msgstr "Tallafocs" + +msgid "Firewall Settings" +msgstr "Ajusts de tallafocs" + +msgid "Firewall Status" +msgstr "Estat de tallafocs" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Versió de microprogramari" + +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +msgid "Flash Firmware" +msgstr "Reescriu el microprogramari" + +msgid "Flash image..." +msgstr "Escriu una imatge..." + +msgid "Flash new firmware image" +msgstr "Escriu una imatge nova" + +msgid "Flash operations" +msgstr "Operacions d'escriptura" + +msgid "Flashing..." +msgstr "Escrivent..." + +msgid "Force" +msgstr "Força" + +msgid "Force CCMP (AES)" +msgstr "Força el CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "Força el DHCP en aquesta xarxa encara que es detecti altre servidor." + +msgid "Force TKIP" +msgstr "Força el TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Força el TKIP i el CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Reenvia el tràfic DHCP" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Reenvia el tràfic difós" + +msgid "Forwarding mode" +msgstr "Mode de reenviament" + +msgid "Fragmentation Threshold" +msgstr "Llindar de fragmentació" + +msgid "Frame Bursting" +msgstr "" + +msgid "Free" +msgstr "Lliures" + +msgid "Free space" +msgstr "Espai lliure" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "Només GPRS" + +msgid "Gateway" +msgstr "Passarel·la" + +msgid "Gateway ports" +msgstr "Ports de passarel·la" + +msgid "General Settings" +msgstr "Ajusts generals" + +msgid "General Setup" +msgstr "" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Controlador sense fil 802.11%s genèric" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" +"La contrasenya i la confirmació de contrasenya no es coincideixen. La " +"contrasenya no s'ha canviat!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Vés a la configuració de contrasenya" + +msgid "Go to relevant configuration page" +msgstr "Vés a la pàgina de configuració" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "Contrasenya de HE.net" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "" + +msgid "Hang Up" +msgstr "Penja" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Ací pots configurar els aspectes bàsics del teu dispositiu, com el nom de la " +"màquina o el fus horari." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Controlador sense fil Hermes 802.11b" + +msgid "Hide ESSID" +msgstr "" +"No mostris l'ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Entrades de noms de màquina" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "Xarxa o adreça IP" + +msgid "Hostname" +msgstr "Nom de màquina" + +msgid "Hostname to send when requesting DHCP" +msgstr "" + +msgid "Hostnames" +msgstr "Noms de màquina" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "Adreça IP" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "Tallafocs IPv4" + +msgid "IPv4 WAN Status" +msgstr "Estat WAN IPv4" + +msgid "IPv4 address" +msgstr "Adreça IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 i IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "Difusió IPv4" + +msgid "IPv4 gateway" +msgstr "Passarel·la IPv4" + +msgid "IPv4 netmask" +msgstr "Màscara de xarxa IPv4" + +msgid "IPv4 only" +msgstr "Només IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "Longitud de prefix IPv4" + +msgid "IPv4-Address" +msgstr "Adreça IPv6" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "Tallafocs IPv6" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "Estado WAN IPv6" + +msgid "IPv6 address" +msgstr "Adreça IPv6" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "Passarel·la IPv6" + +msgid "IPv6 only" +msgstr "Només IPv6" + +msgid "IPv6 prefix" +msgstr "Prefix IPv6" + +msgid "IPv6 prefix length" +msgstr "Longitud de prefix IPv6" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "Adreça IPv6" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-en-IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6-sobre-IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6-sobre-IPv4 (6to4)" + +msgid "Identity" +msgstr "Identitat" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Si la teva memòria física és insuficient, les dades no usades es poden " +"intercanviar a un dispositiu d'intercanvi, pel qual hi haurà una quantitat " +"més gran de memòria RAM usable. " +"Tingues en compte que intercanviar dades és un procés molt lent, ja que no " +"es pot accedir al dispositiu d'intercanvi amb unes taxes tan altes com les " +"de la RAM." + +msgid "Ignore /etc/hosts" +msgstr "Ignora /etc/hosts" + +msgid "Ignore interface" +msgstr "Ignora la interfície" + +msgid "Ignore resolve file" +msgstr "Ignora el fitxer de resolució" + +msgid "Image" +msgstr "Imatge" + +msgid "In" +msgstr "En" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Temps d'espera d'inactivitat" + +msgid "Inbound:" +msgstr "Entrant:" + +msgid "Info" +msgstr "Informació" + +msgid "Initscript" +msgstr "Script d'inici" + +msgid "Initscripts" +msgstr "Scripts d'inici" + +msgid "Install" +msgstr "Instal·la" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Instal·la el paquet %q" + +msgid "Install protocol extensions..." +msgstr "Instal·la extensions de protocol" + +msgid "Installed packages" +msgstr "Paquets instal·lats" + +msgid "Interface" +msgstr "Interfície" + +msgid "Interface Configuration" +msgstr "Configuració d'interfície" + +msgid "Interface Overview" +msgstr "Visió de conjunt de la interfície" + +msgid "Interface is reconnecting..." +msgstr "La interfície s'està reconnectant..." + +msgid "Interface is shutting down..." +msgstr "La interfície s'està aturant..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "" + +msgid "Interface reconnected" +msgstr "" + +msgid "Interface shut down" +msgstr "" + +msgid "Interfaces" +msgstr "Interfícies" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "Error de servidor intern" + +msgid "Invalid" +msgstr "Invàlid" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "Usuari i/o contrasenya invàlids! Si us plau prova-ho de nou." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Sembla que intentes actualitzar una imatge que no hi cap a la memòria flaix, " +"si us plau verifica el fitxer d'imatge!" + +msgid "Java Script required!" +msgstr "Es requereix JavaScript!" + +msgid "Join Network" +msgstr "Uneix-te a la xarxa" + +msgid "Join Network: Wireless Scan" +msgstr "" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "" + +msgid "Kernel Log" +msgstr "Registre del nucli" + +msgid "Kernel Version" +msgstr "Versió del nucli" + +msgid "Key" +msgstr "Clau" + +msgid "Key #%d" +msgstr "Clau #%d" + +msgid "Kill" +msgstr "Mata" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "Servidor L2TP" + +msgid "LCP echo failure threshold" +msgstr "Llindar de fracàs d'eco LCP" + +msgid "LCP echo interval" +msgstr "Interval d'eco LCP" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Etiqueta" + +msgid "Language" +msgstr "Llengua" + +msgid "Language and Style" +msgstr "Llengua i estil" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Duració de validitat d'arrendament" + +msgid "Leasefile" +msgstr "Fitxer d'arrendament" + +msgid "Leasetime" +msgstr "Duració d'arrendament" + +msgid "Leasetime remaining" +msgstr "Duració d'arrendament restant" + +msgid "Leave empty to autodetect" +msgstr "Deixeu-ho en blanc per autodetectar" + +msgid "Leave empty to use the current WAN address" +msgstr "Deixeu-ho en blanc per utilitzar l'adreça WAN actual" + +msgid "Legend:" +msgstr "Llegenda:" + +msgid "Limit" +msgstr "Límit" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Enllaç activa" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "Carrega" + +msgid "Load Average" +msgstr "Carrega mitjana" + +msgid "Loading" +msgstr "Carregant" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Adreça IPv4 local" + +msgid "Local IPv6 address" +msgstr "Adreça IPv6 local" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Inici local" + +msgid "Local Time" +msgstr "Hora local" + +msgid "Local domain" +msgstr "Domini local" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "Servidor local" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "Localitza les peticions" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Nivell de sortida de registre" + +msgid "Log queries" +msgstr "Registra les peticions" + +msgid "Logging" +msgstr "Registre" + +msgid "Login" +msgstr "Entra" + +msgid "Logout" +msgstr "Surt" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "Adreça MAC" + +msgid "MAC-Address Filter" +msgstr "Filtre d'adreces MAC" + +msgid "MAC-Filter" +msgstr "Filtre MAC" + +msgid "MAC-List" +msgstr "Llista MAC" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Velocitat màxima" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +msgid "Maximum hold time" +msgstr "" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "" + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "Memòria" + +msgid "Memory usage (%)" +msgstr "Ús de Memòria (%)" + +msgid "Metric" +msgstr "Mètric" + +msgid "Minimum Rate" +msgstr "Velocitat mínima" + +msgid "Minimum hold time" +msgstr "" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Manca l'extensió de protocol del protocol %q" + +msgid "Mode" +msgstr "Mode" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Dispositiu mòdem" + +msgid "Modem init timeout" +msgstr "Temps d'espera d'inici de mòdem" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "Punt de muntatge" + +msgid "Mount Points" +msgstr "Punts de muntatge" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Els punts de muntatge defineixen en quin punt un dispositiu de memòria " +"s'adjuntarà amb el sistema de fitxers" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Opcions de muntatge" + +msgid "Mount point" +msgstr "" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Sistemes de fitxers muntats" + +msgid "Move down" +msgstr "Baixa" + +msgid "Move up" +msgstr "Puja" + +msgid "Multicast Rate" +msgstr "Velocitat de difusió selectiva" + +msgid "Multicast address" +msgstr "Adreça de difusió selectiva" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "Candidats de servidor NTP" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Nom" + +msgid "Name of the new interface" +msgstr "Nom de la nova interfície" + +msgid "Name of the new network" +msgstr "Nom de la nova xarxa" + +msgid "Navigation" +msgstr "Navegació" + +msgid "Netmask" +msgstr "Màscara de xarxa" + +msgid "Network" +msgstr "Xarxa" + +msgid "Network Utilities" +msgstr "Utilitats de xarxa" + +msgid "Network boot image" +msgstr "Imatge d'inici de xarxa" + +msgid "Network without interfaces." +msgstr "Xarxa sense interfícies." + +msgid "Next »" +msgstr "Següent" + +msgid "No DHCP Server configured for this interface" +msgstr "Cap servidor DHCP configurat en aquesta interfície" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "No hi ha cadenes a aquesta taula" + +msgid "No files found" +msgstr "Cap fitxer trobat" + +msgid "No information available" +msgstr "Cap informació disponible" + +msgid "No negative cache" +msgstr "Sense memòria cau negativa" + +msgid "No network configured on this device" +msgstr "Cap xarxa configurada en aquest dispositiu" + +msgid "No network name specified" +msgstr "Cap nom de xarxa especificat" + +msgid "No package lists available" +msgstr "No hi ha llistes de paquets disponibles" + +msgid "No password set!" +msgstr "Cap contrasenya establerta!" + +msgid "No rules in this chain" +msgstr "No hi ha regles en aquesta cadena" + +msgid "No zone assigned" +msgstr "Cap zona assignada" + +msgid "Noise" +msgstr "Soroll" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Soroll:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Cap" + +msgid "Normal" +msgstr "Normal" + +msgid "Not Found" +msgstr "No trobat" + +msgid "Not associated" +msgstr "No associat" + +msgid "Not connected" +msgstr "No connectat" + +msgid "Note: Configuration files will be erased." +msgstr "Nota: Els fitxers de configuració s'esborraran." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Avís" + +msgid "Nslookup" +msgstr "Nslookup" + +msgid "OK" +msgstr "D'acord" + +msgid "OPKG-Configuration" +msgstr "Configuració d'OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"En aquesta pàgina pots configurar les interfícies de xarxa. Pots fer un pont " +"entre diverses interfícies clicant sobre el camp \"interfície pont\" i " +"introduint els noms de les diverses interfícies de xarxa separats per " +"espais. També pots fer servir la notació VLAN INTERFACE.VLANNR (p.e.: eth0.1)." + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "Cal especificar o el nom de host o l'adreça MAC!" + +msgid "One or more fields contain invalid values!" +msgstr "Un o més dels camps requerits conté un valor invàlid!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Un o més dels camps requerits no té valor!" + +msgid "Open list..." +msgstr "Obre una llista..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Opció canviada" + +msgid "Option removed" +msgstr "Opció treta" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Opcions" + +msgid "Other:" +msgstr "Altres:" + +msgid "Out" +msgstr "" + +msgid "Outbound:" +msgstr "Sortint:" + +msgid "Outdoor Channels" +msgstr "Canals d'exteriors" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "Visió de conjunt" + +msgid "Owner" +msgstr "Propietari" + +msgid "PAP/CHAP password" +msgstr "Contrasenya PAP/CHAP" + +msgid "PAP/CHAP username" +msgstr "Nom d'usuari PAP/CHAP" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "Encapsulació PPPoA" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "Es requereix el paquet libiwinfo!" + +msgid "Package lists are older than 24 hours" +msgstr "Les llistes de paquets tenen més de 24 hores" + +msgid "Package name" +msgstr "Nom del paquet" + +msgid "Packets" +msgstr "Paquets" + +msgid "Part of zone %q" +msgstr "Part de la zona %q" + +msgid "Password" +msgstr "Contrasenya" + +msgid "Password authentication" +msgstr "Autenticació per contrasenya" + +msgid "Password of Private Key" +msgstr "Contrasenya de la clau privada" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "La contrasenya s'ha canviat amb èxit!" + +msgid "Path to CA-Certificate" +msgstr "Ruta als Certificats CA" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "Ruta a la clau privada" + +msgid "Path to executable which handles the button event" +msgstr "" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Màxim:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Executa un reinici" + +msgid "Perform reset" +msgstr "Executa un reinici" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Velocitat física:" + +msgid "Physical Settings" +msgstr "Ajusts físics" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "Paquets" + +msgid "Please enter your username and password." +msgstr "Si us plau entra el teu nom d'usuari i contrasenya." + +msgid "Policy" +msgstr "Política" + +msgid "Port" +msgstr "Port" + +msgid "Port status:" +msgstr "Estatus de port" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Evita la comunicació client a client" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "continua" + +msgid "Processes" +msgstr "Processos" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protocol" + +msgid "Protocol family" +msgstr "" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Calidad" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "Llindar RTS/CTS" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "Velocitat RX" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "Controlador sense fil RaLink 802.11%s" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Llegeix /etc/ethers per configurar el servidor DHCP" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "" + +msgid "Realtime Connections" +msgstr "" + +msgid "Realtime Graphs" +msgstr "" + +msgid "Realtime Load" +msgstr "" + +msgid "Realtime Traffic" +msgstr "" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "Reinicia" + +msgid "Rebooting..." +msgstr "Reiniciant..." + +msgid "Reboots the operating system of your device" +msgstr "Arranca de nou el sistema operatiu del teu dispositiu" + +msgid "Receive" +msgstr "Rep" + +msgid "Receiver Antenna" +msgstr "Antena receptora" + +msgid "Reconnect this interface" +msgstr "Reconnex aquesta interfície" + +msgid "Reconnecting interface" +msgstr "Reconnectant la interfície" + +msgid "References" +msgstr "Referències" + +msgid "Regulatory Domain" +msgstr "Domini regulatori" + +msgid "Relay" +msgstr "Relé" + +msgid "Relay Bridge" +msgstr "Pont de relé" + +msgid "Relay between networks" +msgstr "Relé entre xarxes" + +msgid "Relay bridge" +msgstr "Pont de relé" + +msgid "Remote IPv4 address" +msgstr "Adreça IPv6 remota" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Treu" + +msgid "Repeat scan" +msgstr "" + +msgid "Replace entry" +msgstr "Reemplaça l'entrada" + +msgid "Replace wireless configuration" +msgstr "Reemplaça la configuració sense fil" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "Alguns ISP ho requereixen, per exemple el Charter amb DOCSIS 3" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Reinicia" + +msgid "Reset Counters" +msgstr "Reinicia els comptadors" + +msgid "Reset to defaults" +msgstr "Reestableix els valors per defecte" + +msgid "Resolv and Hosts Files" +msgstr "" + +msgid "Resolve file" +msgstr "" + +msgid "Restart" +msgstr "Reinicia" + +msgid "Restart Firewall" +msgstr "Reinicia Tallafocs" + +msgid "Restore backup" +msgstr "Restaura còpia de seguretat" + +msgid "Reveal/hide password" +msgstr "Mostra/amaga la contrasenya" + +msgid "Revert" +msgstr "Reverteix" + +msgid "Root" +msgstr "Arrel" + +msgid "Root directory for files served via TFTP" +msgstr "Directori arrel dels fitxers servits per TFTP" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Contrasenya de l'encaminador" + +msgid "Routes" +msgstr "Rutes" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Les rutes especifiquen per quina interfície i passarel·la es pot arribar a " +"un cert ordinador o xarxa." + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "Accés SSH" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "Claus SSH" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Desa" + +msgid "Save & Apply" +msgstr "Desa y aplica" + +msgid "Save & Apply" +msgstr "Desa y aplica" + +msgid "Scan" +msgstr "Escaneja" + +msgid "Scheduled Tasks" +msgstr "Tasques programades" + +msgid "Section added" +msgstr "Secció afegida" + +msgid "Section removed" +msgstr "Secció treta" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "Clients separats" + +msgid "Separate WDS" +msgstr "WDS separat" + +msgid "Server Settings" +msgstr "Ajusts de servidor" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Nom de servei" + +msgid "Service Type" +msgstr "Tipus de servei" + +msgid "Services" +msgstr "Serveis" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Sincronització de hora" + +msgid "Setup DHCP Server" +msgstr "" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "Atura aquesta interfície" + +msgid "Shutdown this network" +msgstr "Atura aquesta xarxa" + +msgid "Signal" +msgstr "Senyal" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Senyal:" + +msgid "Size" +msgstr "Mida" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Salta" + +msgid "Skip to content" +msgstr "Salta al contingut" + +msgid "Skip to navigation" +msgstr "Salta a la navegació" + +msgid "Slot time" +msgstr "" + +msgid "Software" +msgstr "Programari" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "No es pot desar els valors perquè alguns camps estan invàlids!" + +msgid "Sorry, the object you requested was not found." +msgstr "Tristament, l'object que heu sol·licitat no s'ha trobat." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "Tristament, el servidor ha encontrat un error inesperat." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "Ordena" + +msgid "Source" +msgstr "Origen" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "Especifica el directori a que el dispositiu està adjuntat" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Especifica el port d'escolta d'aquesta instància del Dropbear" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Especifiqueu el clau de xifració secret aquí." + +msgid "Start" +msgstr "Inici" + +msgid "Start priority" +msgstr "Prioritat d'inici" + +msgid "Startup" +msgstr "Arranca" + +msgid "Static IPv4 Routes" +msgstr "Rutes IPv4 estàtiques" + +msgid "Static IPv6 Routes" +msgstr "Rutes IPv6 estàtiques" + +msgid "Static Leases" +msgstr "Leases estàtics" + +msgid "Static Routes" +msgstr "Rutes estàtiques" + +msgid "Static WDS" +msgstr "WDS estàtic" + +msgid "Static address" +msgstr "Adreça estàtica" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +msgid "Status" +msgstr "Estat" + +msgid "Stop" +msgstr "Atura" + +msgid "Strict order" +msgstr "Ordre estricte" + +msgid "Submit" +msgstr "Envia" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Entrada d'intercanvi" + +msgid "Switch" +msgstr "Commutador" + +msgid "Switch %q" +msgstr "Commutador %q" + +msgid "Switch %q (%s)" +msgstr "Commutador %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Protocol de commutador" + +msgid "Sync with browser" +msgstr "Sincronitza amb navegador" + +msgid "Synchronizing..." +msgstr "Sincronitzant..." + +msgid "System" +msgstr "Sistema" + +msgid "System Log" +msgstr "Registre de sistema" + +msgid "System Properties" +msgstr "Propietats de sistema" + +msgid "System log buffer size" +msgstr "Mida de la memòria intermèdia del registre de sistema" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "Ajusts TFTP" + +msgid "TFTP server root" +msgstr "Arrel del servidor TFTP" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "Velocitat TX" + +msgid "Table" +msgstr "Taula" + +msgid "Target" +msgstr "Destí" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Acaba" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"El paquet libiwinfo-lua no està instal·lat. Heu de instal·lar " +"aquest component per tenir una configuració sense fil funcionant!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Els caràcters permets són: A-Z, a-z, 0-9 i _" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"El fitxer de dispositiu de la memòria o partició (p.e. /dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"El sistema the fitxers que es va fer servir per formatar la memòria (p.e. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "S'han comès els següents canvis" + +msgid "The following changes have been reverted" +msgstr "S'han desfet els següents canvis" + +msgid "The following rules are currently active on this system." +msgstr "Els següents regles estan actualment actives en aquest sistema." + +msgid "The given network name is not unique" +msgstr "El nom de xarxa donat no és únic" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"El maquinari no es capaç de múltiples SSID i la configuració existent es " +"reemplaçara si procediu." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" +"La longitud del prefix IPv4 en bits, el reste s'utilitza en les adreces IPv6." + +msgid "The length of the IPv6 prefix in bits" +msgstr "La longitud del prefix IPv6 en bits" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "El protocol seleccionat necessita un dispositiu assignat" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" +"El sistema està esborrant la partició de configuració i es reiniciarà quan " +"termini." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"El sistema s'està escrivent ara.
NO APAGUEU EL DISPOSITIU!
Espereu " +"uns minuts abans d'intentar connectar-vos de nou. Pot ser necessari que " +"renoveu l'adreça del vostre ordinador per a connectar al dispositiu de nou, " +"depenent dels vostres ajusts." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"La imatge pujada no conté un format suportat. Assegura't de triar el format " +"d'imatge genèric per la teva plataforma." + +msgid "There are no active leases." +msgstr "No hi ha arrendaments actius." + +msgid "There are no pending changes to apply!" +msgstr "No hi ha canvis pendents per aplicar!" + +msgid "There are no pending changes to revert!" +msgstr "No hi ha canvis pendents per revertir!" + +msgid "There are no pending changes!" +msgstr "No hi ha canvis pendents!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Aquest és l'únic DHCP a la teva xarxa local" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" +"Aquest és el crontab del sistema en el qual es poden definir tasques " +"programades." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"Aquesta llista mostra una vista general sobre els processos corrent al " +"sistema actualment i el seu estat." + +msgid "This page allows the configuration of custom button actions" +msgstr "" + +msgid "This page gives an overview over currently active network connections." +msgstr "" +"Aquesta pàgina ofereix una vista general de les connexions de xarxa actives " +"actualment." + +msgid "This section contains no values yet" +msgstr "Aquesta secció no conté cap valor encara" + +msgid "Time Synchronization" +msgstr "Sincronització de hora" + +msgid "Time Synchronization is not configured yet." +msgstr "La sincronització de hora encara no s'ha configurat." + +msgid "Timezone" +msgstr "Zona horària" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Total disponible" + +msgid "Traceroute" +msgstr "Rastre de ruta" + +msgid "Traffic" +msgstr "Tràfic" + +msgid "Transfer" +msgstr "Transferència" + +msgid "Transmission Rate" +msgstr "Taxa de transmissió" + +msgid "Transmit" +msgstr "Transmet" + +msgid "Transmit Power" +msgstr "Potència de transmissió" + +msgid "Transmitter Antenna" +msgstr "Antena transmissora" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "ID del túnel" + +msgid "Tunnel Interface" +msgstr "Interfície del túnel" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Mode Turbo" + +msgid "Tx-Power" +msgstr "Potència Tx" + +msgid "Type" +msgstr "Tipus" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "Només UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "Dispositiu USB" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Desconegut" + +msgid "Unknown Error, password not changed!" +msgstr "La contrasenya no s'ha canviat a causa d'un error desconegut!" + +msgid "Unmanaged" +msgstr "Sense gestionar" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Canvis sense desar" + +msgid "Unsupported protocol type." +msgstr "Tipus de protocol no suportat." + +msgid "Update lists" +msgstr "Actualitza les llistes" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "Puja un arxiu..." + +msgid "Uploaded File" +msgstr "Fitxer pujat" + +msgid "Uptime" +msgstr "Temps d'alta" + +msgid "Use /etc/ethers" +msgstr "Fes servir /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Utilitza la bandera de difusió" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "" + +msgid "Use default gateway" +msgstr "" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "Usat" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Nom d'usuari" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLANs en %q" + +msgid "VLANs on %q (%s)" +msgstr "VLANs en %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "Servidor VPN" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "Classe de venidor per enviar al sol·licitar DHCP" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Verifica" + +msgid "Version" +msgstr "Versió" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "Sistema obert WEP" + +msgid "WEP Shared Key" +msgstr "Clau compartit WEP" + +msgid "WEP passphrase" +msgstr "Contrasenya WEP" + +msgid "WMM Mode" +msgstr "Mode WMM" + +msgid "WPA passphrase" +msgstr "Contrasenya WPA" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"La xifratge WPA requereix que sigui instal·lat el wpa_supplicant (pel mode " +"client) o el hostapd (pels modes AP i ad hoc)." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "Esperant que s'apliquin els canvis..." + +msgid "Waiting for command to complete..." +msgstr "Esperant que s'acabi l'ordre..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Advertència" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Sense fils" + +msgid "Wireless Adapter" +msgstr "Adaptador sense fils" + +msgid "Wireless Network" +msgstr "Xarxa sense fils" + +msgid "Wireless Overview" +msgstr "Resum sense fils" + +msgid "Wireless Security" +msgstr "Seguretat sense fils" + +msgid "Wireless is disabled or not associated" +msgstr "El sense fil està inhabilitat o sense associar" + +msgid "Wireless is restarting..." +msgstr "Sense fils està reiniciant..." + +msgid "Wireless network is disabled" +msgstr "La xarxa sense fil està inhabilitada" + +msgid "Wireless network is enabled" +msgstr "La xarxa sense fils està habilitada" + +msgid "Wireless restarted" +msgstr "Sense fils reinciat" + +msgid "Wireless shut down" +msgstr "Sense fils aturat" + +msgid "Write received DNS requests to syslog" +msgstr "Escriure les peticions DNS rebudes al syslog" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Suport XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Pots activar o desactivar els scripts d'inici instal·lats ací. Els canvis " +"s'aplicaran després d'arrancar de nou el dispositiu.
Atenció: " +"Si desactives scripts d'inici necessaris com el \"network\", el teu " +"dispositiu pot resultar inaccessible!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Has d'activar el Java Script al teu navegador o LuCI no funcionarà " +"correctament." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "qualsevol" + +msgid "auto" +msgstr "auto" + +#, fuzzy +msgid "automatic" +msgstr "estàtic" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "pontejat" + +msgid "create:" +msgstr "crea:" + +msgid "creates a bridge over specified interface(s)" +msgstr "crea un pont entre les interfícies especificades" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "inhabilita" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "caducat" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"fitxer on els leases de DHCP s'emmagatzemaran" + +msgid "forward" +msgstr "transemès" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "ajuda" + +msgid "hidden" +msgstr "amagat" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "si el destí és una xarxa" + +msgid "input" +msgstr "entrada" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "fitxer DNS local" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "no" + +msgid "no link" +msgstr "cap enllaç" + +msgid "none" +msgstr "cap" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "parat" + +msgid "on" +msgstr "engegat" + +msgid "open" +msgstr "obert" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "encaminat" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "etiquetat" + +msgid "unknown" +msgstr "desconegut" + +msgid "unlimited" +msgstr "il·limitat" + +msgid "unspecified" +msgstr "sense espeficicar" + +msgid "unspecified -or- create:" +msgstr "sense espeficicar -o- crear:" + +msgid "untagged" +msgstr "sense etiquetar" + +msgid "yes" +msgstr "sí" + +msgid "« Back" +msgstr "« Enrere" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "Es crearà una xarxa addicional si deixes això sense marcar." + +#~ msgid "Join Network: Settings" +#~ msgstr "Unir-se a la xarxa: Ajusts" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "Port %d" + +#~ msgid "VLAN Interface" +#~ msgstr "Interfície VLAN" diff --git a/feeds/luci/modules/luci-base/po/cs/base.po b/feeds/luci/modules/luci-base/po/cs/base.po new file mode 100644 index 0000000..1438b11 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/cs/base.po @@ -0,0 +1,3823 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-31 13:59+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d minutové okno, %d sekundový interval)" + +msgid "(%s available)" +msgstr "(%s k dispozici)" + +msgid "(empty)" +msgstr "(prázdný)" + +msgid "(no interfaces attached)" +msgstr "(bez rozhraní připojení)" + +msgid "-- Additional Field --" +msgstr "-- Doplňující pole --" + +msgid "-- Please choose --" +msgstr "-- Prosím vyberte --" + +msgid "-- custom --" +msgstr "-- vlastní --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Zatížení za 1 minutu:" + +msgid "15 Minute Load:" +msgstr "Zatížení za 15 minut:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Zatížení za 5 minut:" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "port dotazů DNS" + +msgid "DNS server port" +msgstr "port serveru DNS" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"DNS servery budou dotazovány podle " +"pořadí resolvfile" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-Adresa" + +msgid "IPv4-Gateway" +msgstr "IPv4-Brána" + +msgid "IPv4-Netmask" +msgstr "IPv4-Maska sítě" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-Adresa nebo Síť (CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-Brána" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "LED Konfigurace" + +msgid "LED Name" +msgstr "LED Název" + +msgid "MAC-Address" +msgstr "MAC-Adresa" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Nejvyšší počet DHCP výpůjček" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Největší povolená velikost EDNS0 packetů" + +msgid "Max. concurrent queries" +msgstr "Nejvyšší počet souběžných dotazů" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "Podpora AR" + +msgid "ARP retry threshold" +msgstr "ARP limit opakování" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "ATM mosty" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "Identifikátor virtuálního kanálu ATM (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "Identifikátor virtuální cesty ATM (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"Otevře ATM mosty přes uzavřené ethernetové rozhraní v AAL5 připojení jako " +"virtuální síťová rozhraní Linuxu, které mohou být použity ve spojení s DHCP " +"nebo PPP vytáčeného připojení od poskytovatele sítě." + +msgid "ATM device number" +msgstr "číslo ATM zařízení" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Přístupový koncentrátor" + +msgid "Access Point" +msgstr "Přístupový bod" + +msgid "Action" +msgstr "Akce" + +msgid "Actions" +msgstr "Akce" + +msgid "Activate this network" +msgstr "Aktivovat tuto síť" + +msgid "Active IPv4-Routes" +msgstr "" +"Aktivní záznamy ve směrovací tabulce IPv4" + +msgid "Active IPv6-Routes" +msgstr "" +"Aktivní záznamy ve směrovací tabulce IPv6" + +msgid "Active Connections" +msgstr "Aktivní spojení" + +msgid "Active DHCP Leases" +msgstr "Aktivní propůjčené DHCP adresy (leases)" + +msgid "Active DHCPv6 Leases" +msgstr "Aktivní propůjčené DHCPv6 adresy (leases)" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Přidat" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "Přidat lokální koncovku k doménovým jménům ze souboru hosts" + +msgid "Add new interface..." +msgstr "Přidat rozhraní..." + +msgid "Additional Hosts files" +msgstr "Dodatečné Hosts soubory" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Adresa" + +msgid "Address to access local relay bridge" +msgstr "Adresa pro přístup k místnímu relay bridge" + +msgid "Administration" +msgstr "Správa" + +msgid "Advanced Settings" +msgstr "Pokročilé nastavení" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Upozornění" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "Povolit SSH autentizaci heslem" + +msgid "Allow all except listed" +msgstr "Povolit vše mimo uvedené" + +msgid "Allow listed only" +msgstr "Povolit pouze uvedené" + +msgid "Allow localhost" +msgstr "Povolit localhost" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"Povolit vzdáleným hostitelům připojování k místním portům přesměrovaným " +"pomocí SSH" + +msgid "Allow root logins with password" +msgstr "Povolit přihlašovaní root účtu pomocí hesla" + +msgid "Allow the root user to login with password" +msgstr "Povolit root účtu přihlášení bez nastaveného hesla" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "Povolit upstream odpovědi na 127.0.0.0/8 rozsah, např. pro RBL služby" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Anténa 1" + +msgid "Antenna 2" +msgstr "Anténa 2" + +msgid "Antenna Configuration" +msgstr "Konfigurace antén" + +msgid "Any zone" +msgstr "Libovolná zóna" + +msgid "Apply" +msgstr "Použít" + +msgid "Applying changes" +msgstr "Probíhá uplatňování nastavení" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Přiřadit rozhraní..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Připojení klienti" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Atheros 802.11%s bezdrátový ovladač" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Autentizace" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Autoritativní" + +msgid "Authorization Required" +msgstr "Vyžadována autorizace" + +msgid "Auto Refresh" +msgstr "Automaticky obnovovat" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Dostupné" + +msgid "Available packages" +msgstr "Dostupné balíčky" + +msgid "Average:" +msgstr "Průměr:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Zpět" + +msgid "Back to Overview" +msgstr "Zpět k přehledu" + +msgid "Back to configuration" +msgstr "Zpět ke konfiguraci" + +msgid "Back to overview" +msgstr "Zpět k přehledu" + +msgid "Back to scan results" +msgstr "Zpět k výsledkům vyhledávání" + +msgid "Background Scan" +msgstr "Vyhledávat na pozadí" + +msgid "Backup / Flash Firmware" +msgstr "Zálohovat / nahrát firmware" + +msgid "Backup / Restore" +msgstr "Zálohovat / obnovit" + +msgid "Backup file list" +msgstr "Seznam souborů k zálohování" + +msgid "Bad address specified!" +msgstr "Zadána neplatná adresa!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Seznam souborů k zálohování lze nalézt níže. Sestává se z konfiguračních " +"souborů označených opkg, nezbyných systémových souborů a souborů " +"vyhovujících uživatelem určeným vzorům." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Přenosová rychlost" + +msgid "Bogus NX Domain Override" +msgstr "Přepíše falešnou hodnotu NX Domény" + +msgid "Bridge" +msgstr "Síťový most" + +msgid "Bridge interfaces" +msgstr "Síťové mosty" + +msgid "Bridge unit number" +msgstr "Číslo síťového mostu" + +msgid "Bring up on boot" +msgstr "Zapnout po startu" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Broadcom 802.11%s bezdrátový ovladač" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Broadcom modul BCM%04x 802.11 bezdrátový ovladač" + +msgid "Buffered" +msgstr "Bufferováno" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Tlačítka" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Vytížení CPU (%)" + +msgid "Cancel" +msgstr "Storno" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Řetěz" + +msgid "Changes" +msgstr "Změny" + +msgid "Changes applied." +msgstr "Změny aplikovány." + +msgid "Changes the administrator password for accessing the device" +msgstr "Změní administrátorské heslo pro přístup k zařízení" + +msgid "Channel" +msgstr "Kanál" + +msgid "Check" +msgstr "Kontrola" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Kontrolní součet" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Zóna firewallu přiřazená k tomuto rozhraní. Pro odstranění rozhraní z " +"přiřazené zóny vyberte volbu nespecifikovaná. Pro vytvoření nové " +"zóny a její následné přiřazení danému rozhraní vyplňte pole vytvořit." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Vyberte síť(ě), které chcete připojit k tomuto bezdrátovému rozhraní, nebo " +"vyplňte pole vytvořit a pojmenujte novou síť." + +msgid "Cipher" +msgstr "Šifra" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Pro stažení archivu tar s aktuální konfigurací stiskněte \"Vytvořit archiv" +"\". Pro obnovení továrního nastavení stiskněte \"Obnovit výchozí\" (možné " +"pouze s obrazy squashfs)." + +msgid "Client" +msgstr "Klient" + +msgid "Client ID to send when requesting DHCP" +msgstr "Klientské ID odesílané v DHCP požadavku" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Uzavírat neaktivní spojení po daném počtu sekund. Pro vypnutí časového " +"omezení použijte jako hodntu nulu" + +msgid "Close list..." +msgstr "Zavřít seznam..." + +msgid "Collecting data..." +msgstr "Probíhá sběr dat..." + +msgid "Command" +msgstr "Příkaz" + +msgid "Common Configuration" +msgstr "Společná nastavení" + +msgid "Compression" +msgstr "Komprese" + +msgid "Configuration" +msgstr "Nastavení" + +msgid "Configuration applied." +msgstr "Nastavení uplatněno." + +msgid "Configuration files will be kept." +msgstr "Konfigurační soubory budou zachovány." + +msgid "Confirmation" +msgstr "Ověření" + +msgid "Connect" +msgstr "Připojit" + +msgid "Connected" +msgstr "Připojeno" + +msgid "Connection Limit" +msgstr "Omezení počtu připojení" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Připojení" + +msgid "Country" +msgstr "Země" + +msgid "Country Code" +msgstr "Kód země" + +msgid "Cover the following interface" +msgstr "Pokrýt následující rozhraní" + +msgid "Cover the following interfaces" +msgstr "Pokrýt následující rozhraní" + +msgid "Create / Assign firewall-zone" +msgstr "Vytvořit / přiřadit zónu firewallu" + +msgid "Create Interface" +msgstr "Vytvořit rozhraní" + +msgid "Create a bridge over multiple interfaces" +msgstr "Vytvořit síťový most přes více rozhraní" + +msgid "Critical" +msgstr "Kritické" + +msgid "Cron Log Level" +msgstr "Úroveň protokolování Cronu" + +msgid "Custom Interface" +msgstr "Vlastní rozhraní" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Upraví chování LED diod zařízení " +"pokud je to možné." + +msgid "DHCP Leases" +msgstr "DHCP výpůjčky" + +msgid "DHCP Server" +msgstr "DHCP server" + +msgid "DHCP and DNS" +msgstr "DHCP a DNS" + +msgid "DHCP client" +msgstr "DHCP klient" + +msgid "DHCP-Options" +msgstr "Volby DHCP" + +msgid "DHCPv6 Leases" +msgstr "DHCPv6 přidělené IP" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "Přeposílání DNS" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Ladění" + +msgid "Default %d" +msgstr "Výchozí %d" + +msgid "Default gateway" +msgstr "Výchozí brána" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Výchozí stav" + +msgid "Define a name for this network." +msgstr "Jméno sítě." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Další možnosti DHCP, například \"6,192.168.2.1,192.168.2.2\", " +"které odkazuje na různé DNS servery pro klienty." + +msgid "Delete" +msgstr "Odstranit" + +msgid "Delete this network" +msgstr "Odstranit tuto síť" + +msgid "Description" +msgstr "Popis" + +msgid "Design" +msgstr "Vzhled" + +msgid "Destination" +msgstr "Cíl" + +msgid "Device" +msgstr "Zařízení" + +msgid "Device Configuration" +msgstr "Nastavení zařízení" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnostika" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Adresář" + +msgid "Disable" +msgstr "Zakázat" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Pro toto rozhraní zakázat DHCP." + +msgid "Disable DNS setup" +msgstr "Zakázat nastavení DNS" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Zakázat HW-Beacon časovač" + +msgid "Disabled" +msgstr "Zakázáno" + +msgid "Discard upstream RFC1918 responses" +msgstr "Vyřadit upstream RFC1918 odpovědi" + +msgid "Displaying only packages containing" +msgstr "Zobrazeny pouze balíčky obsahující" + +msgid "Distance Optimization" +msgstr "Optimalizace na vzdálenost" + +msgid "Distance to farthest network member in meters." +msgstr "Vzdálenost nejodlehlejšího člena sítě v metrech." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Diverzita" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq je kombinace DHCP serveru a DNS " +"forwarderu pro použití v NAT firewallech" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "Necachovat negativní odpovědi (např. pro neexistující domény)" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Nepřeposílat požadavky, které nemohou být zodpovězeny veřejnými jmennými " +"servery" + +msgid "Do not forward reverse lookups for local networks" +msgstr "Nepřeposílat reverzní dotazy na místní sítě" + +msgid "Do not send probe responses" +msgstr "Neodpovídat na vyhledávání" + +msgid "Domain required" +msgstr "Vyžadována doména" + +msgid "Domain whitelist" +msgstr "Whitelist domén" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Nepřeposílat DNS dotazy bez DNS jména" + +msgid "Download and install package" +msgstr "Stáhnout a nainstalovat balíček" + +msgid "Download backup" +msgstr "Stáhnout zálohu" + +msgid "Dropbear Instance" +msgstr "Instance Dropbear" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear poskytuje SSH přístup a SCP server" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"Dynamický DHCP" + +msgid "Dynamic tunnel" +msgstr "Dynamický tunel" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Pro klienty alokovat DHCP adresy dynamicky. Pokud je volba zakázána, budou " +"obsloužení pouze klienti se statickými výpůjčkami." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "Metoda EAP" + +msgid "Edit" +msgstr "Upravit" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Upravit toto rozhraní" + +msgid "Edit this network" +msgstr "Upravit tuto síť" + +msgid "Emergency" +msgstr "Záchrana" + +msgid "Enable" +msgstr "Povolit" + +msgid "Enable STP" +msgstr "Povolit STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Povolit dynamickou aktualizaci koncového bodu HE.net" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Na PPP spoji povolit vyjednání IPv6" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Povolit průchod jumbo rámců" + +msgid "Enable NTP client" +msgstr "Povolit NTP klienta" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Povolit TFTP server" + +msgid "Enable VLAN functionality" +msgstr "Povolit funkcionalitu VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Povolit ARP učení a stárnutí" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Povolit tento přípojný bod" + +msgid "Enable this swap" +msgstr "Povolit tento swapovací oddíl" + +msgid "Enable/Disable" +msgstr "Povolit/Zakázat" + +msgid "Enabled" +msgstr "Povoleno" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Na tomto síťovém mostě povolit Spanning Tree Protocol" + +msgid "Encapsulation mode" +msgstr "Režim zapouzdření" + +msgid "Encryption" +msgstr "Šifrování" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Odstraňování..." + +msgid "Error" +msgstr "Chyba" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Ethernetový adaptér" + +msgid "Ethernet Switch" +msgstr "Ethernetový switch" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Rozšířit hostitele" + +msgid "Expires" +msgstr "Vyprší" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" +"Čas vypršení vypůjčené adresy, minimum jsou 2 minuty (2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Externí protokolovací server" + +msgid "External system log server port" +msgstr "Port externího protokolovacího serveru" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Rychlé rámce" + +msgid "File" +msgstr "Soubor" + +msgid "Filename of the boot image advertised to clients" +msgstr "Název souboru s bootovacím obrazem oznamovaný klientům" + +msgid "Filesystem" +msgstr "Souborový systém" + +msgid "Filter" +msgstr "Filtr" + +msgid "Filter private" +msgstr "Filtrovat soukromé" + +msgid "Filter useless" +msgstr "Filtrovat nepotřebné" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Vyhledat a připojit síť" + +msgid "Find package" +msgstr "Vyhledat balíček" + +msgid "Finish" +msgstr "Dokončit" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall Settings" +msgstr "Nastavení firewallu" + +msgid "Firewall Status" +msgstr "Stav firewallu" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Verze firmwaru" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Pevný zdrojový port pro odchozí DNS dotazy" + +msgid "Flash Firmware" +msgstr "Nahrát firmware" + +msgid "Flash image..." +msgstr "Nahrát obraz..." + +msgid "Flash new firmware image" +msgstr "Nahrát nový obraz s firmwarem" + +msgid "Flash operations" +msgstr "Operace nad flash pamětí" + +msgid "Flashing..." +msgstr "Nahrávám..." + +msgid "Force" +msgstr "Vynutit" + +msgid "Force CCMP (AES)" +msgstr "Vynutit CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "Na této síti vynutit DHCP i v případě detekování jiného serveru." + +msgid "Force TKIP" +msgstr "Vynutit TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Vynutit TKIP a CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Přeposílat DHCP provoz" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Přeposílat broadcasty" + +msgid "Forwarding mode" +msgstr "Režim přeposílání" + +msgid "Fragmentation Threshold" +msgstr "Hranice fragmentace" + +msgid "Frame Bursting" +msgstr "Dávkování rámců" + +msgid "Free" +msgstr "Volné" + +msgid "Free space" +msgstr "Volné místo" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "Pouze GPRS" + +msgid "Gateway" +msgstr "Brána" + +msgid "Gateway ports" +msgstr "Porty brány" + +msgid "General Settings" +msgstr "Obecná nastavení" + +msgid "General Setup" +msgstr "Obecné nastavení" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Vytvorǐt archív" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Generic 802.11%s Wireless Controller" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "Heslo nezměněno z důvodu nesouhlasu nového hesla a ověření hesla!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Přejít na nastavení hesla..." + +msgid "Go to relevant configuration page" +msgstr "Přejít na související konfigurační stránku" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "Heslo HE.net" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Handler" + +msgid "Hang Up" +msgstr "Zavěsit" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Nastavení základních vlastností zařízení jako je časová zóna nebo název " +"zařízení." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"Vložte veřejné klíče (na každý řadek jeden) pro ověřovaní SSH přístupu." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Hermes 802.11b bezdrátový ovladač" + +msgid "Hide ESSID" +msgstr "Skrývat ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Záznamy hostitelů" + +msgid "Host expiry timeout" +msgstr "Vypršení časového limitu hostitele" + +msgid "Host-IP or Network" +msgstr "" +"IP adresa hostitele nebo síť" + +msgid "Hostname" +msgstr "Jméno hostitele" + +msgid "Hostname to send when requesting DHCP" +msgstr "Jméno hostitele odesílané s DHCP požadavky" + +msgid "Hostnames" +msgstr "Jména hostitelů" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "IP adresy" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "IPv4 firewall" + +msgid "IPv4 WAN Status" +msgstr "Stav IPv4 WAN" + +msgid "IPv4 address" +msgstr "IPv4 adresa" + +msgid "IPv4 and IPv6" +msgstr "IPv4 a IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "IPv4 broadcast" + +msgid "IPv4 gateway" +msgstr "IPv4 brána" + +msgid "IPv4 netmask" +msgstr "IPv4 maska sítě" + +msgid "IPv4 only" +msgstr "Pouze IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "Délka IPv4 prefixu" + +msgid "IPv4-Address" +msgstr "IPv4 adresa" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "IPv6 firewall" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "Stav IPv6 WAN" + +msgid "IPv6 address" +msgstr "IPv6 adresa" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "IPv6 brána" + +msgid "IPv6 only" +msgstr "Pouze IPv6" + +msgid "IPv6 prefix" +msgstr "IPv6 prefix" + +msgid "IPv6 prefix length" +msgstr "Délka IPv6 prefixu" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "IPv6 adresa" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-in-IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6-over-IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6-over-IPv4 (6to4)" + +msgid "Identity" +msgstr "Identita" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "Namísto pevného uzlu zařízení připojovat pomocí UUID" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "Namísto pevného uzlu zařízení připojovat pomocí názvu oddílu" + +msgid "If unchecked, no default route is configured" +msgstr "Pokud není povoleno, není nastaven žádný výchozí směrovací záznam" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "Pokud není povoleno, oznámené adresy DNS serverů budou ignorovány" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Pokud máte nedostatek fyzické paměti, nepoužívaná data mohou být dočasně " +"odložena do odkládacího zařízení, což bude mít za důsledek větší množství " +"použitelné RAM. Vezměte na " +"vědomí, že odkládání dat je velice pomalý proces, stejně jako fakt, že " +"přístup na odkládací zařízení je řádově pomalejší, než přístup do paměti " +"RAM." + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "Ignorovat rozhraní" + +msgid "Ignore resolve file" +msgstr "Ignorovat resolv soubor" + +msgid "Image" +msgstr "Obraz" + +msgid "In" +msgstr "Dovnitř" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Časový limit nečinnosti" + +msgid "Inbound:" +msgstr "Příchozí:" + +msgid "Info" +msgstr "Info" + +msgid "Initscript" +msgstr "Initskript" + +msgid "Initscripts" +msgstr "Initskripty" + +msgid "Install" +msgstr "Instalovat" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Instalovat balíček %q" + +msgid "Install protocol extensions..." +msgstr "Instalovat protokolové rozšíření..." + +msgid "Installed packages" +msgstr "Nainstalované balíčky" + +msgid "Interface" +msgstr "Rozhraní" + +msgid "Interface Configuration" +msgstr "Konfigurace rozhraní" + +msgid "Interface Overview" +msgstr "Přehled rozhraní" + +msgid "Interface is reconnecting..." +msgstr "Rozhraní se znovu připojuje..." + +msgid "Interface is shutting down..." +msgstr "Rozhraní se vypíná..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "Rozhraní není přítomné nebo je dosud nepřipojeno." + +msgid "Interface reconnected" +msgstr "Rozhraní bylo znovu připojeno" + +msgid "Interface shut down" +msgstr "Rozhraní bylo vypnuto" + +msgid "Interfaces" +msgstr "Rozhraní" + +msgid "Internal" +msgstr "" + +# Není co dodat. +msgid "Internal Server Error" +msgstr "Vnitřní chyba serveru" + +msgid "Invalid" +msgstr "Neplatná vstupní hodnota" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" +"Uvedené VLAN ID je neplatné! Jsou povolena pouze ID z rozsahu %d až %d." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "Uvedené VLAN ID je neplatné! Každé ID musí být jedinečné" + +msgid "Invalid username and/or password! Please try again." +msgstr "Špatné uživatelské jméno a/nebo heslo! Prosím zkuste to znovu." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Zdá se, že se pokoušíte zapsat obraz, který se nevejde do flash paměti. " +"Prosím ověřte soubor s obrazem!" + +msgid "Java Script required!" +msgstr "Vyžadován JavaScript!" + +msgid "Join Network" +msgstr "Připojit k síti" + +msgid "Join Network: Wireless Scan" +msgstr "Připojit k síti: Vyhledání bezdrátových sítí" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Zachovat nastavení" + +msgid "Kernel Log" +msgstr "Záznam jádra" + +msgid "Kernel Version" +msgstr "Verze jádra" + +msgid "Key" +msgstr "Klíč" + +msgid "Key #%d" +msgstr "Klíč #%d" + +msgid "Kill" +msgstr "Zabít" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "L2TP Server" + +msgid "LCP echo failure threshold" +msgstr "LCP echo prahová hodnota selhání" + +msgid "LCP echo interval" +msgstr "LCP interval upozornění" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Popis" + +msgid "Language" +msgstr "Jazyk" + +msgid "Language and Style" +msgstr "Jazyk a styl" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Doba platnosti zápůjčky" + +msgid "Leasefile" +msgstr "Soubor zájpůjček" + +msgid "Leasetime" +msgstr "Doba trvání zápůjčky" + +msgid "Leasetime remaining" +msgstr "Zbývající doba trvání zápůjčky" + +msgid "Leave empty to autodetect" +msgstr "Ponechte prázdné pro automatickou detekci" + +msgid "Leave empty to use the current WAN address" +msgstr "Ponecháte-li prázdné, použije stávající WAN adresu" + +msgid "Legend:" +msgstr "Legenda:" + +msgid "Limit" +msgstr "Limit" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Odkaz na" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"Seznam DNS serverů, na které " +"přeposílat požadavky" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "Seznam domén, pro které povolit odpovědi podle RFC1918" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "Seznam hostitelů, kteří udávají falešné hodnoty NX domén" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" +"Poslouchat pouze na daném rozhraní, nebo pokud není specifikováno, na všech" + +msgid "Listening port for inbound DNS queries" +msgstr "Port pro příchozí dotazy DNS" + +msgid "Load" +msgstr "Zátěž" + +msgid "Load Average" +msgstr "Zátěž průměrná" + +msgid "Loading" +msgstr "Načítání" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Místní IPv4 adresa" + +msgid "Local IPv6 address" +msgstr "Místní IPv6 adresa" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Místní startup" + +msgid "Local Time" +msgstr "Místní čas" + +msgid "Local domain" +msgstr "Místní doména" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Specifikace místní domény. Jména shodná s touto doménou nikdy nebudou " +"přesměrována ani rozlušťována pomocí DHCP nebo souborů hosts" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"Přípona místní domény, připojená za názvy DHCP jmen a záznamů v souboru hosts" + +msgid "Local server" +msgstr "Místní server" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" +"Lokalizovat jméno v závislosti na dotazující se podsíti, pokud bylo nalezeno " +"více IP adres" + +msgid "Localise queries" +msgstr "Lokalizační dotazy" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Úroveň logování" + +msgid "Log queries" +msgstr "Dotazy pro logování" + +msgid "Logging" +msgstr "Logování" + +msgid "Login" +msgstr "Přihlásit" + +msgid "Logout" +msgstr "Odhlásit" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "Nejnižší zapůjčenou adresu použít jako offset síťové adresy." + +msgid "MAC-Address" +msgstr "MAC-Adresa" + +msgid "MAC-Address Filter" +msgstr "Filtr MAC adres" + +msgid "MAC-Filter" +msgstr "Filtr MAC" + +msgid "MAC-List" +msgstr "Seznam Mac" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Nejvyšší míra" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Nejvyšší povolené množství aktivních DHCP zápůjček" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Nejvyšší povolené množství souběžných DNS dotazů" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "Nejvyšší povolená velikost EDNS.0 UDP paketů" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "Nejvyšší počet sekund čekání, než bude modem připraven" + +msgid "Maximum hold time" +msgstr "Maximální doba držení" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "Maximální počet zapůjčených adres." + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "Paměť" + +msgid "Memory usage (%)" +msgstr "Využití paměti (%)" + +msgid "Metric" +msgstr "Metrika" + +msgid "Minimum Rate" +msgstr "Nejnižší hodnota" + +msgid "Minimum hold time" +msgstr "Minimální čas zápůjčky" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Chybějící rozšíření protokolu %q" + +msgid "Mode" +msgstr "Mód" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Modemové zařízení" + +msgid "Modem init timeout" +msgstr "Časový limit inicializace modemu" + +msgid "Monitor" +msgstr "Sledování" + +msgid "Mount Entry" +msgstr "Připojit vstup" + +msgid "Mount Point" +msgstr "Přípojný bod" + +msgid "Mount Points" +msgstr "Přípojné body" + +msgid "Mount Points - Mount Entry" +msgstr "Přípojné body - vstupy" + +msgid "Mount Points - Swap Entry" +msgstr "Přípojné body - změna vstupu" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Přípojný bod určuje místo v souborovém systému, na kterém bude připojeno " +"paměťové zařízení" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Volby připojení" + +msgid "Mount point" +msgstr "Přípojný bod" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Připojené souborové systémy" + +msgid "Move down" +msgstr "Přesunout dolů" + +msgid "Move up" +msgstr "Přesunout nahoru" + +msgid "Multicast Rate" +msgstr "Hodnota vícesměrového vysílání" + +msgid "Multicast address" +msgstr "Adresa vícesměrového vysílání" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "Kandidáti NTP serveru" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Název" + +msgid "Name of the new interface" +msgstr "Název nového rozhraní" + +msgid "Name of the new network" +msgstr "Název nové sítě" + +msgid "Navigation" +msgstr "Navigace" + +msgid "Netmask" +msgstr "Síťová maska" + +msgid "Network" +msgstr "Síť" + +msgid "Network Utilities" +msgstr "Síťové nástroje" + +msgid "Network boot image" +msgstr "Síťový bootovací obraz" + +msgid "Network without interfaces." +msgstr "Síť bez rozhraní." + +msgid "Next »" +msgstr "Další »" + +msgid "No DHCP Server configured for this interface" +msgstr "Pro toto rozhraní není nastaven žádný DHCP server" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Žádné řetězce v této tabulce" + +msgid "No files found" +msgstr "Nebyly nalezeny žádné soubory" + +msgid "No information available" +msgstr "Údaje nejsou k dispozici" + +msgid "No negative cache" +msgstr "Žádná negativní mezipaměť" + +msgid "No network configured on this device" +msgstr "Síť není nastavena na tomto zařízení" + +msgid "No network name specified" +msgstr "Neuvedeno jméno sítě" + +msgid "No package lists available" +msgstr "Seznam balíčků není k dispozici" + +msgid "No password set!" +msgstr "Žádné heslo!" + +msgid "No rules in this chain" +msgstr "Žádná pravidla v tomto řetězci" + +msgid "No zone assigned" +msgstr "Žádná zóna nepřiřazena" + +msgid "Noise" +msgstr "Šum" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Šum:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Žádný" + +msgid "Normal" +msgstr "Normální" + +msgid "Not Found" +msgstr "Nenalezeno" + +msgid "Not associated" +msgstr "Neasociováno" + +msgid "Not connected" +msgstr "Nepřipojeno" + +msgid "Note: Configuration files will be erased." +msgstr "Pozn: Konfigurační soubory budou vymazány." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Oznámení" + +msgid "Nslookup" +msgstr "Nslookup" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "Konfigurace balíčků OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "Vypnutí prodlevy" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"Na této stránce můžete nastavit síťová rozhraní. Můžete přemostit několik " +"rozhraní zaškrtnutím pole \"přemostit rozhraní\" a zápisem názvů rozhraní, " +"vzájemně oddělených mezerami. Také můžete použít VLAN zápis INTERFACE.VLANNR (např.: eth0.1)." + +msgid "On-State Delay" +msgstr "Zapnutí prodlevy" + +msgid "One of hostname or mac address must be specified!" +msgstr "Jedno jméno nebo mac adresa, musí být zadáno!" + +msgid "One or more fields contain invalid values!" +msgstr "Jedno nebo více polí obsahuje neplatné hodnoty!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Jedno nebo více požadovaných polí neobsahuje hodnotu!" + +msgid "Open list..." +msgstr "Otevřít seznam..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Volba změněna" + +msgid "Option removed" +msgstr "Volba odstraněna" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Možnosti" + +msgid "Other:" +msgstr "Ostatní:" + +msgid "Out" +msgstr "Ven" + +msgid "Outbound:" +msgstr "Odchozí:" + +msgid "Outdoor Channels" +msgstr "Venkovní kanály" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "Přepsat MAC adresu" + +msgid "Override MTU" +msgstr "Přepsat MTU" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "Přepsat bránu v DHCP odpovědích" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"Přepsat síťovou masku, odesílanou klientům. Obvykle je spočítána podle " +"subsítě, která je obsluhována." + +msgid "Override the table used for internal routes" +msgstr "Přepsat tabulku, používanou pro vnitřní cesty" + +msgid "Overview" +msgstr "Přehled" + +msgid "Owner" +msgstr "Vlastník" + +msgid "PAP/CHAP password" +msgstr "Heslo PAP/CHAP" + +msgid "PAP/CHAP username" +msgstr "Uživatelské jméno PAP/CHAP" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "Zapouzdření PPPoA" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "Vyžadován balíček libiwinfo!" + +msgid "Package lists are older than 24 hours" +msgstr "Seznamy balíčků jsou starší než 24 hodin" + +msgid "Package name" +msgstr "Název balíčku" + +msgid "Packets" +msgstr "Pakety" + +msgid "Part of zone %q" +msgstr "Část zóny %q" + +msgid "Password" +msgstr "Heslo" + +msgid "Password authentication" +msgstr "Autentizace heslem" + +msgid "Password of Private Key" +msgstr "Heslo privátního klíče" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "Heslo bylo úspěšně změněno!" + +msgid "Path to CA-Certificate" +msgstr "Cesta k certifikátu CA" + +msgid "Path to Client-Certificate" +msgstr "Cesta k certifikátu klienta" + +msgid "Path to Private Key" +msgstr "Cesta k privátnímu klíči" + +msgid "Path to executable which handles the button event" +msgstr "Cesta ke spustitelnému souboru, který obsluhuje událost tlačítka" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Špička:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Provést restart" + +msgid "Perform reset" +msgstr "Provést reset" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Fyzická rychlost:" + +msgid "Physical Settings" +msgstr "Fyzické nastavení" + +msgid "Ping" +msgstr "Ping" + +msgid "Pkts." +msgstr "Paketů" + +msgid "Please enter your username and password." +msgstr "Prosím vložte vaše uživatelské jméno a heslo." + +msgid "Policy" +msgstr "Politika" + +msgid "Port" +msgstr "Port" + +msgid "Port status:" +msgstr "Stav portu:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" +"Po takovém množství LCP echo selhání předpokládám, že peer je mrtvý. " +"Použijte 0 pro ignorování chyb" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Zabraňuje komunikaci klient-klient" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Prism2/2.5/3 802.11b Wireless Controller" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Pokračovat" + +msgid "Processes" +msgstr "Procesy" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protokol" + +msgid "Protocol family" +msgstr "Rodina protokolů" + +msgid "Protocol of the new interface" +msgstr "Protokol nového rozhraní" + +msgid "Protocol support is not installed" +msgstr "Podpora pro protokol není nainstalována" + +msgid "Provide NTP server" +msgstr "Poskytování NTP serveru" + +msgid "Provide new network" +msgstr "Poskytování nové sítě" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Kvalita" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "Práh RTS/CTS" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "RX Rate" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "RaLink 802.11%s Wireless Controller" + +msgid "Radius-Accounting-Port" +msgstr "Port pro Radius-Accounting" + +msgid "Radius-Accounting-Secret" +msgstr "Tajný klíč pro Radius-Accounting" + +msgid "Radius-Accounting-Server" +msgstr "Server Radius-Accounting" + +msgid "Radius-Authentication-Port" +msgstr "Výběr ověřování portů" + +msgid "Radius-Authentication-Secret" +msgstr "Tajný klíč pro Radius-Authentication" + +msgid "Radius-Authentication-Server" +msgstr "Server Radius-Authentication" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Přečtěte si /etc/ethers ke konfiguraci DHCP Serveru" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"Opravdu odstranit toto rozhraní? Odstranění nelze vrátit zpět!\n" +"Můžete ztratit přístup k zařízení, pokud jste připojeni prostřednictvím " +"tohoto rozhraní." + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"Opravdu odstranit bezdrátovou síť? Odstranění nelze vrátit zpět!\n" +"Můžete ztratit přístup k zařízení, pokud jste připojeni prostřednictvím této " +"sítě." + +msgid "Really reset all changes?" +msgstr "Opravdu resetovat všechny změny?" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"Opravdu vypnout síť ?\n" +"Můžete ztratit přístup k zařízení, pokud jste připojeni prostřednictvím " +"tohoto rozhraní." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"Opravdu vypnout rozhraní \"%s\" ?\n" +"Můžete ztratit přístup k zařízení, pokud jste připojeni prostřednictvím " +"tohoto rozhraní." + +msgid "Really switch protocol?" +msgstr "Opravdu prohodit protokol?" + +msgid "Realtime Connections" +msgstr "Připojení v reálném čase" + +msgid "Realtime Graphs" +msgstr "Grafy v reálném čase" + +msgid "Realtime Load" +msgstr "Zátěž v reálném čase" + +msgid "Realtime Traffic" +msgstr "Provoz v reálném čase" + +msgid "Realtime Wireless" +msgstr "Wireless v reálném čase" + +msgid "Rebind protection" +msgstr "Opětovné nastavení ochrany" + +msgid "Reboot" +msgstr "Reboot" + +msgid "Rebooting..." +msgstr "Rebootuji..." + +msgid "Reboots the operating system of your device" +msgstr "Rebootuje operační systém vašeho zařízení" + +msgid "Receive" +msgstr "Přijmout" + +msgid "Receiver Antenna" +msgstr "Přijímací anténa" + +msgid "Reconnect this interface" +msgstr "Přepojit toto rozhraní" + +msgid "Reconnecting interface" +msgstr "Přepojuji rozhraní" + +msgid "References" +msgstr "Reference" + +msgid "Regulatory Domain" +msgstr "Doména regulátora" + +msgid "Relay" +msgstr "Přenos" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "Přenášet mezi sítěmi" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "Vzdálená IPv4 adresa" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Odstranit" + +msgid "Repeat scan" +msgstr "Opakovat skenování" + +msgid "Replace entry" +msgstr "Nahradit vstup" + +msgid "Replace wireless configuration" +msgstr "Nahradit bezdrátovou konfiguraci" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +# Charter je poskytovate +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "Vyžadováno u některých ISP, např. Charter s DocSIS 3" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Reset" + +msgid "Reset Counters" +msgstr "Resetovat čítače" + +msgid "Reset to defaults" +msgstr "Obnovit na výchozí" + +msgid "Resolv and Hosts Files" +msgstr "Soubory Resolv a Hosts" + +msgid "Resolve file" +msgstr "Soubor resolve" + +msgid "Restart" +msgstr "Restart" + +msgid "Restart Firewall" +msgstr "Restartovat firewall" + +msgid "Restore backup" +msgstr "Obnovit zálohu" + +msgid "Reveal/hide password" +msgstr "Odhalit/skrýt heslo" + +msgid "Revert" +msgstr "Vrátit zpět" + +msgid "Root" +msgstr "Root" + +msgid "Root directory for files served via TFTP" +msgstr "Kořenový adresář souborů, přístupných přes TFTP" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Heslo routeru" + +msgid "Routes" +msgstr "Trasy" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Trasy určují, přes jaké rozhraní a bránu může být konkrétního hosta dosaženo." + +msgid "Run a filesystem check before mounting the device" +msgstr "Spustit kontrolu souborového systému před připojením zařízení" + +msgid "Run filesystem check" +msgstr "Spustit kontrolu souborového systému" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "Přístup přes SSH" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "SSH klíče" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Uložit" + +msgid "Save & Apply" +msgstr "Uložit & použít" + +msgid "Save & Apply" +msgstr "Uložit & použít" + +msgid "Scan" +msgstr "Skenovat" + +msgid "Scheduled Tasks" +msgstr "Naplánované úlohy" + +msgid "Section added" +msgstr "Přidána sekce" + +msgid "Section removed" +msgstr "Sekce odebrána" + +msgid "See \"mount\" manpage for details" +msgstr "Podrobnosti viz manuálová stránka příkazu \"mount\"" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" +"Odesílat LCP echo požadaveky každých x sekund, účinné pouze ve spojení s " +"prahem selhání." + +msgid "Separate Clients" +msgstr "Oddělovat klienty" + +msgid "Separate WDS" +msgstr "Oddělovat WDS" + +msgid "Server Settings" +msgstr "Nastavení serveru" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Název služby" + +msgid "Service Type" +msgstr "Typ služby" + +msgid "Services" +msgstr "Služby" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Nastavit synchronizaci času" + +msgid "Setup DHCP Server" +msgstr "Nastavit DHCP server" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "Ukázat aktuální seznam záložních souborů" + +msgid "Shutdown this interface" +msgstr "Shodit toho rozhraní" + +msgid "Shutdown this network" +msgstr "Shodit tuto síť" + +msgid "Signal" +msgstr "Signál" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Signál:" + +msgid "Size" +msgstr "Velikost" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Přeskočit" + +msgid "Skip to content" +msgstr "Skočit na obsah" + +msgid "Skip to navigation" +msgstr "Skočit na navigaci" + +msgid "Slot time" +msgstr "Time sloty" + +msgid "Software" +msgstr "Software" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Některá pole obsahují neplatné hodnoty, nelze uložit!" + +msgid "Sorry, the object you requested was not found." +msgstr "Omlouváme se, ale požadovaný objekt nebyl nalezen." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "Omlouváme se, na serveru došlo k neočekávané vyjímce." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"Omlouváme se, ale v tomto zařízení není přítomná podpora pro upgrade " +"systému. Nový obraz firmwaru musí být zapsán ručně. Prosím, obraťte se na " +"wiki pro zařízení specifické instalační instrukce." + +msgid "Sort" +msgstr "Seřadit" + +msgid "Source" +msgstr "Zdroj" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Určuje port na kterém bude tato instance Dropbearu naslouchat" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" +"Určuje množství neúspěšných ARP požadavků, po kterém je hostitel považován " +"za mrtvého" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "Určuje počet sekund, po kterém je hostitel považovám za mrtvého" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Zde nastavte soukromý šifrovací klíč." + +msgid "Start" +msgstr "Start" + +msgid "Start priority" +msgstr "Priorita spouštění" + +msgid "Startup" +msgstr "Po spuštění" + +msgid "Static IPv4 Routes" +msgstr "Statické IPv4 trasy" + +msgid "Static IPv6 Routes" +msgstr "Statické IPv6 trasy" + +msgid "Static Leases" +msgstr "Statické zápůjčky" + +msgid "Static Routes" +msgstr "Statické trasy" + +msgid "Static WDS" +msgstr "Statický WDS" + +msgid "Static address" +msgstr "Statická adresa" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"Statické zápůjčky se používají pro přiřazení fixních IP adres a symbolických " +"jmen DHCP klientům. Jsou také vyžadovány pro nedynamické konfigurace " +"rozhraní, kde jsou povoleni pouze hosté s odpovídajícím nastavením." + +msgid "Status" +msgstr "Stav" + +msgid "Stop" +msgstr "Stop" + +msgid "Strict order" +msgstr "Striktní výběr" + +msgid "Submit" +msgstr "Odeslat" + +msgid "Suppress logging" +msgstr "Potlačit logování" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Vstupní bod" + +msgid "Switch" +msgstr "Směrovač" + +msgid "Switch %q" +msgstr "Směrovač číslo %q" + +msgid "Switch %q (%s)" +msgstr "Směrovač číslo %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Směrovací protokol" + +msgid "Sync with browser" +msgstr "Synchronizovat s prohlížečem" + +msgid "Synchronizing..." +msgstr "Synchronizuji..." + +msgid "System" +msgstr "Systém" + +msgid "System Log" +msgstr "Systémový log" + +msgid "System Properties" +msgstr "Vlastnosti systému" + +msgid "System log buffer size" +msgstr "Velikost bufferu systémového logu" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "Nastavení TFTP" + +msgid "TFTP server root" +msgstr "Kořenový adresář TFTP serveru" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "Rychlost TX" + +msgid "Table" +msgstr "" + +msgid "Target" +msgstr "Cíl" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Ukončit" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"Sekce Nastavení zařízení pokrývá fyzické nastavení radiového " +"hardwaru jako kanál, vysílací výkon nebo výběr antény, které je sdíleno mezi " +"všemi bezdrátovými sítěmi (pokud hardware podporuje multi-SSID). Nastavení " +"konkrétní sítě jako šifrování, operační mód jsou seskupeny v sekci " +"Nastavení rozhraní." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Balíček libiwinfo-lua není nainstalován. Tato komponenta musí být " +"nainstalována, aby fungovalo nastavení bezdátové sítě!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "IPv6 prefix přidělený poskytovatelm většinou končí ::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Povolené znaky jsou: A-Z, a-z, 0-9 a " +"_" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"Soubor zařízení paměti nebo oddílu (např. " +"/dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"Souborový systém, který byl použit pro formátování paměti (napři. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"Obraz flash byl nahrán. Prosím porovnejte níže uvedený checksum a velikost " +"souboru s originálním souborem pro zajištění integrity dat.
Kliknutím " +"na \"Pokračovat\" spustíte proceduru flashování." + +msgid "The following changes have been committed" +msgstr "Následující změny byly provedeny" + +msgid "The following changes have been reverted" +msgstr "Následující změny byly vráceny" + +msgid "The following rules are currently active on this system." +msgstr "Následující pravidla jsou v nyní na tomto systému aktivní." + +msgid "The given network name is not unique" +msgstr "Zadané jméno sítě není jedinečné" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"Tento hardware nepodporuje multi-SSID. Pokud budete pokračovat, existující " +"konfigurace bude nahrazena." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "Délka IPv4 prefixu v bitech, zbytek se používá v IPv6 adresách" + +msgid "The length of the IPv6 prefix in bits" +msgstr "Délka IPv6 prefixu v bitech" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"Síťové porty tohoto zařízení mohou být kombinovány do několika VLANve kterých počítače mohou " +"komunikovat přímo mezi sebou. VLANse často používají na oddělení různých siťových částí. Většinou je " +"jeden port pro připojení k vyšší síti (Uplink) jako třeba internet a " +"zbývající porty pro místní síť." + +msgid "The selected protocol needs a device assigned" +msgstr "Vybraný protokol potřebuje mít přiřazeno zařízení" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" +"Systém maže konfigurační oddíl, po skončení procesu bude automaticky " +"restartován." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"Systém nyní nahrává firmware.
NEVYPÍNEJTE ZAŘÍZENÍ!
Počkejte " +"několik minut než se pokusíte znovu připojit. V záležitosti na vašem " +"nastavení, bude možná nutné obnovit adresu vašeho počítače, aby jste se " +"mohli znovu připojit." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" + +msgid "There are no active leases." +msgstr "Nejsou žádné aktivní zápůjčky." + +msgid "There are no pending changes to apply!" +msgstr "Nejsou zde žádné nevyřízené změny k aplikaci!" + +msgid "There are no pending changes to revert!" +msgstr "Nejsou zde žádné nevyřízené změny k navrácení!" + +msgid "There are no pending changes!" +msgstr "Nejsou zde žádné nevyřízené změny!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"Zatím zde není přiřazeno zařízení, prosím připojte nějaké v záložce " +"\"Fyzické nastavení\"" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"Na tomto routeru není nastaveno heslo. Prosím, nastavte heslo uživatele root " +"tak, abyste ochránili webové rozhraní a mohli povolit SSH." + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"Zde vidíte obsah souboru /etc/rc.local. Příkazy, které sem vložíte (před " +"příkaz 'exit 0') budou spuštěny na konci bootovacího procesu." + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Toto je jediný DHCP v mistní síti" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" +"Toto je systémový crontab, v němž můžete nastavit naplánované úlohy. " +"Podrobnosti naleznete v crontab(5)." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"V tomto seznamu vidíte přehled aktuálně běžících systémových procesů a " +"jejich stavy." + +msgid "This page allows the configuration of custom button actions" +msgstr "Na této stránce si můžete nastavit vlastní události tlačítek" + +msgid "This page gives an overview over currently active network connections." +msgstr "Tato stránka zobrazuje přehled aktivních síťových spojení." + +msgid "This section contains no values yet" +msgstr "Tato sekce zatím neobsahuje žádné hodnoty" + +msgid "Time Synchronization" +msgstr "Synchronizace času" + +msgid "Time Synchronization is not configured yet." +msgstr "Synchronizace času dosud není nakonfigurována." + +msgid "Timezone" +msgstr "Časové pásmo" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"Zde můžete nahrát dříve vygenerovaný záložní archiv, pokud chcete obnovit " +"konfigurační soubory." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Dostupná celkem" + +msgid "Traceroute" +msgstr "Traceroute" + +msgid "Traffic" +msgstr "Provoz" + +msgid "Transfer" +msgstr "Přenos" + +msgid "Transmission Rate" +msgstr "Vysílací rychlost" + +msgid "Transmit" +msgstr "Přenos" + +msgid "Transmit Power" +msgstr "Vysílací výkon" + +msgid "Transmitter Antenna" +msgstr "Anténa vysílače" + +msgid "Trigger" +msgstr "Spouštění" + +msgid "Trigger Mode" +msgstr "Trigger mód" + +msgid "Tunnel ID" +msgstr "ID tunelu" + +msgid "Tunnel Interface" +msgstr "Rozhraní tunelu" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Turbo mód" + +msgid "Tx-Power" +msgstr "Tx-Power" + +msgid "Type" +msgstr "Typ" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "Pouze UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "USB zařízení" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Neznámý" + +msgid "Unknown Error, password not changed!" +msgstr "Neznámá chyba, heslo nebylo změněno!" + +msgid "Unmanaged" +msgstr "Nespravovaný" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Neuložené změny" + +msgid "Unsupported protocol type." +msgstr "Nepodporovaný typ protokolu." + +msgid "Update lists" +msgstr "Aktualizovat seznamy" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"Nahrát obraz pro upgrade systému, jímž bude přepsán běžící firmware. " +"Zkontrolujte \"Keep settings\" za účelem udržení aktuální konfigurace " +"(vyžaduje obraz kompatabilního firmwaru)." + +msgid "Upload archive..." +msgstr "Nahrát archiv..." + +msgid "Uploaded File" +msgstr "Nahrát soubor" + +msgid "Uptime" +msgstr "Uptime" + +msgid "Use /etc/ethers" +msgstr "Použít /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Použít DHCP bránu" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "Pomocí ISO/IEC 3166 alpha2 kódů zemí." + +msgid "Use MTU on tunnel interface" +msgstr "Použít MTU na rozhraní tunelu" + +msgid "Use TTL on tunnel interface" +msgstr "Použít TTL na rozhraní tunelu" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Použít příznak broadcastu" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Použít vlastní DNS servery" + +msgid "Use default gateway" +msgstr "Použít výchozí bránu" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "Použít směrovací tabulku" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"Použitím tlačítka Přidat přidáte novou zápůjčku (lease). MAC " +"adresa identifikuje počítač, IPv4 adresa určuje, jaká pevná " +"adresa bude použita. Hostname je přiřazeno jako symbolické jméno." + +msgid "Used" +msgstr "Použit" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Uživatelské jméno" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLANy na %q" + +msgid "VLANs on %q (%s)" +msgstr "VLANy na %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "VPN server" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Ověřit" + +msgid "Version" +msgstr "Verze" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "WEP Open System" + +msgid "WEP Shared Key" +msgstr "Sdílený klíč WEP" + +msgid "WEP passphrase" +msgstr "WEP heslo" + +msgid "WMM Mode" +msgstr "WMM mód" + +msgid "WPA passphrase" +msgstr "WPA heslo" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"Šifrování WPA vyžaduje nainstalovaný wpa_supplicant (pro klientský režim) " +"nebo hostapd (pro AP a ad-hoc režim)." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "Čekání na realizaci změn..." + +msgid "Waiting for command to complete..." +msgstr "Čekání na dokončení příkazu..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Varování" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Bezdrátová síť" + +msgid "Wireless Adapter" +msgstr "Bezdrátový adaptér" + +msgid "Wireless Network" +msgstr "Bezdrátová síť" + +msgid "Wireless Overview" +msgstr "Přehled bezdrátových sití" + +msgid "Wireless Security" +msgstr "Zabezpečení bezdrátové sítě" + +msgid "Wireless is disabled or not associated" +msgstr "Bezdrátová síť je vypnuta nebo nespojena" + +msgid "Wireless is restarting..." +msgstr "Probíhá restartování bezdrátové sítě..." + +msgid "Wireless network is disabled" +msgstr "Bezdrátová síť je zakázána" + +msgid "Wireless network is enabled" +msgstr "Bezdrátová síť je povolena" + +msgid "Wireless restarted" +msgstr "Bezdrátová síť restartována" + +msgid "Wireless shut down" +msgstr "Bezdrátová síť vypnuta" + +msgid "Write received DNS requests to syslog" +msgstr "Zapisovat přijaté požadavky DNS do systemového logu" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Podpora XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Zde můžete povolit nebo zakázat init skripty. Změny se projeví po restartu " +"zařízení.
Varování: Pokud zakážete základní init skripty jako " +"\"network\", vaše zařízení se může stát nepřístupným!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Aby LuCI fungoval správně, musíte mít v prohlížeči povolený Javascript." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "libovolný" + +msgid "auto" +msgstr "auto" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "přemostěný" + +msgid "create:" +msgstr "" + +msgid "creates a bridge over specified interface(s)" +msgstr "vytvoří most přes vybraná rozhraní" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "zakázat" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "expirované" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"Soubor, ve kterém budou uloženy zadané DHCP výpůjčky (leases)" + +msgid "forward" +msgstr "" + +msgid "full-duplex" +msgstr "plný-duplex" + +msgid "half-duplex" +msgstr "poloviční-duplex" + +msgid "help" +msgstr "pomoc" + +msgid "hidden" +msgstr "skrytý" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "pokud cílem je síť" + +msgid "input" +msgstr "vstup" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "místní DNS soubor" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "ne" + +msgid "no link" +msgstr "žádné spojení" + +msgid "none" +msgstr "žádný" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "off" + +msgid "on" +msgstr "on" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "směrované" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "označený" + +msgid "unknown" +msgstr "neznámý" + +msgid "unlimited" +msgstr "neomezený" + +msgid "unspecified" +msgstr "nespecifikovaný" + +msgid "unspecified -or- create:" +msgstr "nespecifikovaný -nebo- vytvořit:" + +msgid "untagged" +msgstr "neoznačený" + +msgid "yes" +msgstr "ano" + +msgid "« Back" +msgstr "« Zpět" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "Pokud není zaškrtnuto, bude vytvořena dodatečná síť." + +#~ msgid "Join Network: Settings" +#~ msgstr "Připojit k síti: nastavení" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "Port %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "Port %d je neoznačený ve více VLAN!" + +#~ msgid "VLAN Interface" +#~ msgstr "Rozhraní VLAN" diff --git a/feeds/luci/modules/luci-base/po/de/base.po b/feeds/luci/modules/luci-base/po/de/base.po new file mode 100644 index 0000000..3650235 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/de/base.po @@ -0,0 +1,3848 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 17:57+0200\n" +"PO-Revision-Date: 2013-03-29 12:13+0200\n" +"Last-Translator: JoeSemler \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d Minuten Abschnitt, %d Sekunden Intervall)" + +msgid "(%s available)" +msgstr "(%s verfügbar)" + +msgid "(empty)" +msgstr "(leer)" + +msgid "(no interfaces attached)" +msgstr "(keine Schnittstellen)" + +msgid "-- Additional Field --" +msgstr "-- Zusätzliches Feld --" + +msgid "-- Please choose --" +msgstr "-- Bitte auswählen --" + +msgid "-- custom --" +msgstr "-- benutzerdefiniert --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Systemlast (1 Minute):" + +msgid "15 Minute Load:" +msgstr "Systemlast (15 Minuten):" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Systemlast (5 Minuten):" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "DNS Abfrageport" + +msgid "DNS server port" +msgstr "DNS Serverport" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"DNS-Server in der Reihenfolge der " +"Resolv-Datei abfragen" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-Adresse" + +msgid "IPv4-Gateway" +msgstr "IPv4-Gateway" + +msgid "IPv4-Netmask" +msgstr "IPv4-Netzmaske" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "IPv6 Host- oder Netzwerk-Addresse (CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-Gateway" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "LED Konfiguration" + +msgid "LED Name" +msgstr "LED Name" + +msgid "MAC-Address" +msgstr "MAC-Adresse" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Max. Anzahl von DHCP-Leases" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Max. Größe von EDNS0-Paketen" + +msgid "Max. concurrent queries" +msgstr "Max. Anzahl gleichzeitiger Abfragen" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "AR-Unterstützung" + +msgid "ARP retry threshold" +msgstr "Grenzwert für ARP-Auflösungsversuche" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "ATM Brücken" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "ATM Virtual Channel Identifier (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "ATM Virtual Path Identifier (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"ATM Brücken exponieren in AAL5 gekapselten Ethernetverkehr als virtuelle " +"Linux Netzwerkschnittstellen welche z.B. in Verbindung mit DHCP oder PPP " +"genutzt werden können um sich in das Providernetzwerk einzuwählen." + +msgid "ATM device number" +msgstr "ATM Geräteindex" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Access Concentrator" + +msgid "Access Point" +msgstr "Access Point" + +msgid "Action" +msgstr "Aktion" + +msgid "Actions" +msgstr "Aktionen" + +msgid "Activate this network" +msgstr "Dieses Netzwerk aktivieren" + +msgid "Active IPv4-Routes" +msgstr "Aktive IPv4-Routen" + +msgid "Active IPv6-Routes" +msgstr "Aktive IPv6-Routen" + +msgid "Active Connections" +msgstr "Aktive Verbindungen" + +msgid "Active DHCP Leases" +msgstr "Aktive DHCP-Leases" + +msgid "Active DHCPv6 Leases" +msgstr "Aktive DHCPv6-Leases" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Hinzufügen" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "Lokalen Domainsuffx an Namen aus der Hosts-Datei anhängen" + +msgid "Add new interface..." +msgstr "Neue Schnittstelle hinzufügen..." + +msgid "Additional Hosts files" +msgstr "Zusätzliche Hosts-Dateien" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Adresse" + +msgid "Address to access local relay bridge" +msgstr "Adresse der lokalen Relay-Brücke" + +msgid "Administration" +msgstr "Administration" + +msgid "Advanced Settings" +msgstr "Erweiterte Einstellungen" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Alarm" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "Erlaube Anmeldung per Passwort" + +msgid "Allow all except listed" +msgstr "Alle außer gelistete erlauben" + +msgid "Allow listed only" +msgstr "Nur gelistete erlauben" + +msgid "Allow localhost" +msgstr "Erlaube localhost" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "Entfernten Hosts erlauben zu lokale SSH-Tunnel-Ports zu verbinden" + +msgid "Allow root logins with password" +msgstr "\"root\" Login mit Passwort aktivieren" + +msgid "Allow the root user to login with password" +msgstr "" +"Erlaubt es dem root Benutzer sich mit einem Passwort statt einem " +"Zertifikat einzuloggen" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"Dies erlaubt DNS-Antworten im 127.0.0.0/8 Bereich der z.B. für RBL Dienste " +"genutzt wird" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antenne 1" + +msgid "Antenna 2" +msgstr "Antenne 2" + +msgid "Antenna Configuration" +msgstr "Antennenkonfiguration" + +msgid "Any zone" +msgstr "Beliebige Zone" + +msgid "Apply" +msgstr "Anwenden" + +msgid "Applying changes" +msgstr "Änderungen werden angewandt" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Schnittstellen zuweisen..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Assoziierte Clients" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Atheros 802.11%s W-LAN Adapter" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Authentifizierung" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Authoritativ" + +msgid "Authorization Required" +msgstr "Autorisierung benötigt" + +msgid "Auto Refresh" +msgstr "Automatisches Neuladen" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Verfügbar" + +msgid "Available packages" +msgstr "Verfügbare Pakete" + +msgid "Average:" +msgstr "Durchschnitt:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Zurück" + +msgid "Back to Overview" +msgstr "Zurück zur Übersicht" + +msgid "Back to configuration" +msgstr "Zurück zur Konfiguration" + +msgid "Back to overview" +msgstr "Zurück zur Übersicht" + +msgid "Back to scan results" +msgstr "Zurück zu den Scan-Ergebnissen" + +msgid "Background Scan" +msgstr "Hintergrundscan" + +msgid "Backup / Flash Firmware" +msgstr "Backup / Firmware Update" + +msgid "Backup / Restore" +msgstr "Sichern / Wiederherstellen" + +msgid "Backup file list" +msgstr "Liste zu sichernder Dateien" + +msgid "Bad address specified!" +msgstr "Ungültige Adresse angegeben!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Nachfolgend wird eine generierte Liste der zu sichernden Dateien angezeigt. " +"Sie enthält alle notwendigen Systemdateien sowie die von opkg als geändert " +"markierten Konfigurationsdateien. Des Weiteren sind die durch " +"benutzerdefinierte Dateiemuster betroffenen Dateien enthalten." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Bogus NX Domain Override" +msgstr "Ungültige \"NX-Domain\" Antworten ignorieren" + +msgid "Bridge" +msgstr "Bridge" + +msgid "Bridge interfaces" +msgstr "Netzwerkbrücke" + +msgid "Bridge unit number" +msgstr "Geräteindex der Brücke" + +msgid "Bring up on boot" +msgstr "Während des Bootvorgangs starten" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Broadcom 802.11%s W-LAN Adapter" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Broadcom BCM%04x 802.11 W-LAN Adapter" + +msgid "Buffered" +msgstr "Gepuffert" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Knöpfe" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "CPU-Nutzung (%)" + +msgid "Cancel" +msgstr "Abbrechen" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Kette" + +msgid "Changes" +msgstr "Änderungen" + +msgid "Changes applied." +msgstr "Änderungen angewendet." + +msgid "Changes the administrator password for accessing the device" +msgstr "Ändert das Administratorpasswort für den Zugriff auf dieses Gerät" + +msgid "Channel" +msgstr "Kanal" + +msgid "Check" +msgstr "Prüfen" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Prüfsumme" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "Diese Schnittstelle gehört bis jetzt zu keiner Firewallzone." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Wählt die Netzwerke die dieser WLAN-Schnittstelle zugeordnet werden. Das " +"erstelle-Feld ausfüllen um ein neues Netzwerk zu erzeugen." + +msgid "Cipher" +msgstr "Verschlüsselungsalgorithmus" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Zum Herunterladen der aktuellen Konfigurationsdateien als gepacktes Archiv " +"\"Sicherung erstellen\" drücken. \"Konfiguration zurücksetzen\" stellt den " +"Auslieferungszustand des Systems wieder her (nur möglich bei squashfs-" +"Images)." + +msgid "Client" +msgstr "Client" + +msgid "Client ID to send when requesting DHCP" +msgstr "Zu sendende Client-ID bei DHCP Anfragen" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Inaktive Verbindungen nach Ablauf dieser Zeit in Sekunden schließen (0 um " +"die Verbindung immer aufrecht zu erhalten)." + +msgid "Close list..." +msgstr "Schließe Liste..." + +msgid "Collecting data..." +msgstr "Sammle Daten..." + +msgid "Command" +msgstr "Befehl" + +msgid "Common Configuration" +msgstr "Allgemeine Konfiguration" + +msgid "Compression" +msgstr "Kompression" + +msgid "Configuration" +msgstr "Konfiguration" + +msgid "Configuration applied." +msgstr "Konfiguration angewendet." + +msgid "Configuration files will be kept." +msgstr "Konfigurationsdateien sichern" + +msgid "Confirmation" +msgstr "Bestätigung" + +msgid "Connect" +msgstr "Verbinden" + +msgid "Connected" +msgstr "Verbunden" + +msgid "Connection Limit" +msgstr "Verbindungslimit" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Verbindungen" + +msgid "Country" +msgstr "Land" + +msgid "Country Code" +msgstr "Ländercode" + +msgid "Cover the following interface" +msgstr "Die folgende Schnittstelle abdecken" + +msgid "Cover the following interfaces" +msgstr "Die folgende Schnittstellen abdecken" + +msgid "Create / Assign firewall-zone" +msgstr "Firewallzone anlegen / zuweisen" + +msgid "Create Interface" +msgstr "Erzeuge Schnittstelle" + +msgid "Create a bridge over multiple interfaces" +msgstr "Erzeuge Netzwerkbrücke über mehrere Schnittstellen" + +msgid "Critical" +msgstr "Kritisch" + +msgid "Cron Log Level" +msgstr "Cron Protokolllevel" + +msgid "Custom Interface" +msgstr "benutzerdefinierte Schnittstelle" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "Passt das Verhalten der Geräte-LEDs an - wenn dies möglich ist." + +msgid "DHCP Leases" +msgstr "DHCP-Leases" + +msgid "DHCP Server" +msgstr "DHCP-Server" + +msgid "DHCP and DNS" +msgstr "DHCP und DNS" + +msgid "DHCP client" +msgstr "DHCP Client" + +msgid "DHCP-Options" +msgstr "DHCP-Optionen" + +msgid "DHCPv6 Leases" +msgstr "DHCPv6-Leases" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "DNS-Weiterleitungen" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Debug" + +msgid "Default %d" +msgstr "Standard %d" + +msgid "Default gateway" +msgstr "Default Gateway" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Ausgangszustand" + +msgid "Define a name for this network." +msgstr "Definiert einen Namen für dieses Netzwerk" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Definiert zusätzliche DHCP-Optionen, z.B. \"6,192.168.2.1,192.168.2.2\" um einen anderen DNS-Server an Clients zu verteilen." + +msgid "Delete" +msgstr "Löschen" + +msgid "Delete this network" +msgstr "Dieses Netzwerk löschen" + +msgid "Description" +msgstr "Beschreibung" + +msgid "Design" +msgstr "Design" + +msgid "Destination" +msgstr "Ziel" + +msgid "Device" +msgstr "Gerät" + +msgid "Device Configuration" +msgstr "Gerätekonfiguration" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnosen" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Verzeichnis" + +msgid "Disable" +msgstr "Deaktivieren" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"DHCP-Server auf " +"dieser Schnittstelle deaktivieren" + +msgid "Disable DNS setup" +msgstr "DNS-Verarbeitung deaktivieren" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Deaktiviere Hardware-Beacon Zeitgeber" + +msgid "Disabled" +msgstr "Deaktiviert" + +msgid "Discard upstream RFC1918 responses" +msgstr "Eingehende RFC1918-Antworten verwerfen" + +msgid "Displaying only packages containing" +msgstr "Nur Pakete mit folgendem Inhalt anzeigen" + +msgid "Distance Optimization" +msgstr "Distanzoptimierung" + +msgid "Distance to farthest network member in meters." +msgstr "Distanz zum am weitesten entfernten Funkpartner in Metern." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Diversität" + +# Nur für NAT-Firewalls? +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq ist ein kombinierter DHCP-Server und DNS-Forwarder für NAT " +"Router" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" +"Negative Antworten nicht zwischenspeichern, z.B. bei nicht existierenden " +"Domains" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Keine Anfragen weiterleiten welche nicht durch öffentliche Server " +"beantwortet werden können" + +msgid "Do not forward reverse lookups for local networks" +msgstr "Keine Rückwärtsauflösungen für lokale Netzwerke weiterleiten" + +msgid "Do not send probe responses" +msgstr "Scan-Anforderungen nicht beantworten" + +msgid "Domain required" +msgstr "Anfragen nur mit Domain" + +msgid "Domain whitelist" +msgstr "Domain-Whitelist" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "Anfragen ohne Domainnamen nicht weiterleiten" + +msgid "Download and install package" +msgstr "Paket herunterladen und installieren" + +msgid "Download backup" +msgstr "Backup herunterladen" + +msgid "Dropbear Instance" +msgstr "Dropbear Instanz" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Der SSH-Server ermöglicht Shell-Zugriff über das Netzwerk und bietet einen " +"integrierten SCP-Dienst." + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "Dynamisches DHCP" + +msgid "Dynamic tunnel" +msgstr "Dynamischer Tunnel" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"DHCP Adressen dynamisch erzeugen. Wenn dies deaktiviert ist, werden nur " +"Clients mit konfigurierten statischen Leases bedient" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "EAP-Methode" + +msgid "Edit" +msgstr "Bearbeiten" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Diese Schnittstelle bearbeiten" + +msgid "Edit this network" +msgstr "Dieses Netzwerk bearbeiten" + +msgid "Emergency" +msgstr "Notfall" + +msgid "Enable" +msgstr "Aktivieren" + +msgid "Enable STP" +msgstr "STP aktivieren" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Dynamisches HE.net IP-Adress-Update aktivieren" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Aushandeln von IPv6-Adressen auf der PPP-Verbindung aktivieren" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Aktiviere Jumbo Frame Durchleitung" + +msgid "Enable NTP client" +msgstr "Aktiviere NTP-Client" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "TFTP-Server aktivieren" + +msgid "Enable VLAN functionality" +msgstr "VLAN-Funktionalität aktivieren" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Learning und Aging aktivieren" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Diesen Mountpunkt aktivieren" + +msgid "Enable this swap" +msgstr "Diesen Auslagerungsspeicher aktivieren" + +msgid "Enable/Disable" +msgstr "Aktivieren/Deaktivieren" + +msgid "Enabled" +msgstr "Aktiviert" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Aktiviert das Spanning Tree Protokoll auf dieser Netzwerkbrücke" + +msgid "Encapsulation mode" +msgstr "Kapselung" + +msgid "Encryption" +msgstr "Verschlüsselung" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Lösche..." + +msgid "Error" +msgstr "Fehler" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Netzwerkschnittstelle" + +msgid "Ethernet Switch" +msgstr "Netzwerk Switch" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Hosts vervollständigen" + +msgid "Expires" +msgstr "Verfällt" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" +"Gültigkeitsdauer von vergebenen Adressen. Das Minimum sind 2 Minuten " +"(2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Externer Protokollserver IP" + +msgid "External system log server port" +msgstr "Externer Protokollserver Port" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Schnelle Frames" + +msgid "File" +msgstr "Datei" + +msgid "Filename of the boot image advertised to clients" +msgstr "Dateiname des Boot-Images welches den Clients mitgeteilt wird." + +msgid "Filesystem" +msgstr "Dateisystem" + +msgid "Filter" +msgstr "Filter" + +msgid "Filter private" +msgstr "Private Anfragen filtern" + +msgid "Filter useless" +msgstr "Windowsanfragen filtern" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Suchen und Verbinden von Netzwerken" + +msgid "Find package" +msgstr "Paket suchen" + +msgid "Finish" +msgstr "Fertigstellen" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall Settings" +msgstr "Firewall Einstellungen" + +msgid "Firewall Status" +msgstr "Firewall-Status" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Firmware Version" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Fester Port für ausgehende DNS-Anfragen" + +msgid "Flash Firmware" +msgstr "Firmware aktualisieren" + +msgid "Flash image..." +msgstr "Firmware aktualisieren..." + +msgid "Flash new firmware image" +msgstr "Neues Firmware Image schreiben" + +msgid "Flash operations" +msgstr "Flash-Operationen" + +msgid "Flashing..." +msgstr "Firmware wird installiert..." + +msgid "Force" +msgstr "Start erzwingen" + +msgid "Force CCMP (AES)" +msgstr "CCMP (AES) erzwingen" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" +"Aktiviere DHCP-Server für dieses Netzwerk, selbst wenn ein anderer aktiver " +"Server erkannt wurde." + +msgid "Force TKIP" +msgstr "Erzwinge TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Erzwinge TKIP und CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "DHCP Traffic weiterleiten" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Broadcasts weiterleiten" + +msgid "Forwarding mode" +msgstr "Weiterleitungstyp" + +msgid "Fragmentation Threshold" +msgstr "Fragmentierungsschwelle" + +msgid "Frame Bursting" +msgstr "Frame Bursting" + +msgid "Free" +msgstr "Frei" + +msgid "Free space" +msgstr "Freier Platz" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "Nur GPRS" + +msgid "Gateway" +msgstr "Gateway" + +msgid "Gateway ports" +msgstr "Gateway-Ports" + +msgid "General Settings" +msgstr "Allgemeine Einstellungen" + +msgid "General Setup" +msgstr "Allgemeine Einstellungen" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Sicherung erstellen" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Generischer 802.11%s W-LAN Adapter" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" +"Die angegebenen Passwörter stimmen nicht überein, das Systempasswort wurde " +"nicht geändert!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Zur Passwortkonfiguration..." + +msgid "Go to relevant configuration page" +msgstr "Gehe zur entsprechenden Konfigurationsseite" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "HE.net Passwort" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Handler" + +msgid "Hang Up" +msgstr "Auflegen" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"An dieser Stelle können Grundeinstellungen des Systems wie Hostname oder " +"Zeitzone vorgenommen werden." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"Hier können öffentliche SSH-Schlüssel reinkopiert werden (einer pro Zeile)." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Hermes 802.11b W-LAN Adapter" + +msgid "Hide ESSID" +msgstr "ESSID verstecken" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Host-Einträge" + +msgid "Host expiry timeout" +msgstr "Host Verfallsdatum" + +msgid "Host-IP or Network" +msgstr "Host-IP oder Netzwerk" + +msgid "Hostname" +msgstr "Hostname" + +msgid "Hostname to send when requesting DHCP" +msgstr "Zu sendender Hostname bei DHCP Anfragen" + +msgid "Hostnames" +msgstr "Rechnernamen" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "IP-Adresse" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "IPv4 Firewall" + +msgid "IPv4 WAN Status" +msgstr "IPv4 WAN Status" + +msgid "IPv4 address" +msgstr "IPv4 Adresse" + +msgid "IPv4 and IPv6" +msgstr "IPv4 und IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "IPv4 Broadcast" + +msgid "IPv4 gateway" +msgstr "IPv4 Gateway" + +msgid "IPv4 netmask" +msgstr "IPv4 Netzmaske" + +msgid "IPv4 only" +msgstr "nur IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "Länge des IPv4 Präfix" + +msgid "IPv4-Address" +msgstr "IPv4-Adresse" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "IPv6 Firewall" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "IPv6 WAN Status" + +msgid "IPv6 address" +msgstr "IPv6 Adresse" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "IPv6 Gateway" + +msgid "IPv6 only" +msgstr "nur IPv6" + +msgid "IPv6 prefix" +msgstr "IPv6 Präfix" + +msgid "IPv6 prefix length" +msgstr "Länge des IPv6 Präfix" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "IPv6-Adresse" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-in-IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6-über-IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6-über-IPv4 (6to4)" + +msgid "Identity" +msgstr "Identität" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" +"Wenn angegeben, wird das Gerät anhand seiner UUID statt fester Gerätedatei " +"gemounted" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" +"Wenn angegeben, wird das Gerät nach anhhand des Partitionslabels statt " +"fester Gerätedatei gemounted" + +msgid "If unchecked, no default route is configured" +msgstr "Wenn deaktiviert, wird keine Default-Route gesetzt" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "Falls deaktiviert werden die zugewiesenen DNS-Server ignoriert" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Falls der Arbeitsspeicher des Routers nicht ausreicht, kann dieser nicht " +"benutzte Daten zeitweise auf einem SWAP-Laufwerk auslagern um so die " +"effektive Größe des Arbeitsspeichers zu erhöhen. Die Auslagerung der Daten " +"ist natürlich bedeutend langsamer als direkte Arbeitsspeicherzugriffe." + +msgid "Ignore /etc/hosts" +msgstr "Ignoriere /etc/hosts" + +msgid "Ignore interface" +msgstr "Schnittstelle ignorieren" + +msgid "Ignore resolve file" +msgstr "Resolv-Datei ignorieren" + +msgid "Image" +msgstr "Image" + +msgid "In" +msgstr "Ein" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Timeout bei Inaktivität" + +msgid "Inbound:" +msgstr "Eingehend:" + +msgid "Info" +msgstr "Info" + +msgid "Initscript" +msgstr "Startscript" + +msgid "Initscripts" +msgstr "Startscripte" + +msgid "Install" +msgstr "Installieren" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Installiere Paket %q" + +msgid "Install protocol extensions..." +msgstr "Installiere Protokoll-Erweiterungen" + +msgid "Installed packages" +msgstr "Installierte Pakete" + +msgid "Interface" +msgstr "Schnittstelle" + +msgid "Interface Configuration" +msgstr "Schnittstellenkonfiguration" + +msgid "Interface Overview" +msgstr "Schnittstellenübersicht" + +msgid "Interface is reconnecting..." +msgstr "Schnittstelle verbindet neu..." + +msgid "Interface is shutting down..." +msgstr "Schnittstelle fährt herunter..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "Schnittstelle existiert nicht oder ist nicht verbunden." + +msgid "Interface reconnected" +msgstr "Schnittstelle neu verbunden" + +msgid "Interface shut down" +msgstr "Schnittstelle heruntergefahren" + +msgid "Interfaces" +msgstr "Schnittstellen" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "Interner Serverfehler" + +msgid "Invalid" +msgstr "Ungültige Eingabe" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "Ungültige VLAN ID angegeben! Nur IDs zwischen %d und %d sind erlaubt." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "Ungültige VLAN ID angegeben! Die ID ist muß eindeutig sein!" + +msgid "Invalid username and/or password! Please try again." +msgstr "" +"Ungültiger Benutzername oder ungültiges Passwort! Bitte erneut versuchen. " + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Das verwendete Image scheint zu groß für den internen Flash-Speicher zu " +"sein. Überprüfen Sie die Imagedatei!" + +msgid "Java Script required!" +msgstr "Java-Script benötigt!" + +msgid "Join Network" +msgstr "Netzwerk beitreten" + +msgid "Join Network: Wireless Scan" +msgstr "Netzwerk beitreten: Suche nach Netzwerken" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Konfiguration behalten" + +msgid "Kernel Log" +msgstr "Kernelprotokoll" + +msgid "Kernel Version" +msgstr "Kernel Version" + +msgid "Key" +msgstr "Schlüssel" + +msgid "Key #%d" +msgstr "Schlüssel Nr. %d" + +msgid "Kill" +msgstr "Töten" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "L2TP Server" + +msgid "LCP echo failure threshold" +msgstr "LCP Echo Fehler Schwellenwert" + +msgid "LCP echo interval" +msgstr "LCP Echo Intervall" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Label" + +msgid "Language" +msgstr "Sprache" + +msgid "Language and Style" +msgstr "Sprache und Aussehen" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Lease-Gültigkeitsdauer" + +msgid "Leasefile" +msgstr "Leasedatei" + +msgid "Leasetime" +msgstr "Laufzeit" + +msgid "Leasetime remaining" +msgstr "Verbleibende Gültigkeit" + +msgid "Leave empty to autodetect" +msgstr "Zur automatischen Erkennung leer lassen" + +msgid "Leave empty to use the current WAN address" +msgstr "Leer lassen um die aktuelle WAN-Adresse zu verwenden" + +msgid "Legend:" +msgstr "Legende:" + +msgid "Limit" +msgstr "Limit" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Verbindung hergestellt" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"Liste von DNS-Servern an welche " +"Requests weitergeleitet werden" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "Liste von Domains für welche RFC1918-Antworten erlaubt sind" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "Liste von Servern die falsche \"NX Domain\" Antworten liefern" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" +"Nur auf die gegebene Schnittstelle reagieren, nutze alle wenn nicht " +"spezifiziert" + +msgid "Listening port for inbound DNS queries" +msgstr "Serverport für eingehende DNS Abfragen" + +msgid "Load" +msgstr "Last" + +msgid "Load Average" +msgstr "Durchschnittslast" + +msgid "Loading" +msgstr "Lade" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Lokale IPv4 Adresse" + +msgid "Local IPv6 address" +msgstr "Lokale IPv6 Adresse" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Lokales Startskript" + +msgid "Local Time" +msgstr "Lokale Zeit" + +msgid "Local domain" +msgstr "Lokale Domain" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Spezifiziert den lokalen Domainnamen. Anfragen für Hostnamen welche auf " +"diese Domain zutreffen werden nie weitergeleitet und ausschließlich aus DHCP-" +"Namen oder Hosts-Dateien aufgelöst" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"Lokaler Domain-Suffix welcher an DHCP Namen und Host-Datei Einträge " +"angehangen wird" + +msgid "Local server" +msgstr "Lokaler Server" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" +"Hostnamen je nach anfragendem Subnetz auflösen wenn mehrere IPs verfügbar " +"sind" + +msgid "Localise queries" +msgstr "Lokalisiere Anfragen" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Protokolllevel" + +msgid "Log queries" +msgstr "Schreibe Abfragelog" + +msgid "Logging" +msgstr "Protokollierung" + +msgid "Login" +msgstr "Anmelden" + +msgid "Logout" +msgstr "Abmelden" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "Kleinste vergebene Adresse (Netzwerkadresse + x)" + +msgid "MAC-Address" +msgstr "MAC-Adresse" + +msgid "MAC-Address Filter" +msgstr "MAC-Adressfilter" + +msgid "MAC-Filter" +msgstr "MAC-Filter" + +msgid "MAC-List" +msgstr "MAC-Adressliste" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Höchstübertragungsrate" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Maximal zulässige Anzahl von aktiven DHCP-Leases" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Maximal zulässige Anzahl an gleichzeitigen DNS-Anfragen" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "Maximal zulässige Größe von EDNS.0 UDP Paketen" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "Maximale Zeit die gewartet wird bis das Modem bereit ist (in Sekunden)" + +msgid "Maximum hold time" +msgstr "Maximalzeit zum Halten der Verbindung" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "Maximal zulässige Anzahl von vergeben DHCP-Adressen" + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "Hauptspeicher" + +msgid "Memory usage (%)" +msgstr "Speichernutzung (%)" + +msgid "Metric" +msgstr "Metrik" + +msgid "Minimum Rate" +msgstr "Mindestübertragungsrate" + +msgid "Minimum hold time" +msgstr "Minimalzeit zum Halten der Verbindung" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Erweiterung für Protokoll %q fehlt" + +msgid "Mode" +msgstr "Modus" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Modemgerät" + +msgid "Modem init timeout" +msgstr "Wartezeit für Modeminitialisierung" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "Mount-Eintrag" + +msgid "Mount Point" +msgstr "Einhängepunkt" + +msgid "Mount Points" +msgstr "Einhängepunkte" + +msgid "Mount Points - Mount Entry" +msgstr "Mountpunkte - Mount-Eintrag" + +msgid "Mount Points - Swap Entry" +msgstr "Mountpunkte - Auslagerungsdatei" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Einhängepunkte bestimmen, an welcher Stelle des Dateisystems bestimmte " +"Laufwerke und Speicher zur Verwendung eingebunden werden." + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Mount-Optionen" + +msgid "Mount point" +msgstr "Mountpunkt" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Eingehängte Dateisysteme" + +msgid "Move down" +msgstr "Nach unten schieben" + +msgid "Move up" +msgstr "Nach oben schieben" + +msgid "Multicast Rate" +msgstr "Multicastrate" + +msgid "Multicast address" +msgstr "Multicast-Adresse" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "NTP Server Kandidaten" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Name" + +msgid "Name of the new interface" +msgstr "Name der neuen Schnittstelle" + +msgid "Name of the new network" +msgstr "Name des neuen Netzwerkes" + +msgid "Navigation" +msgstr "Navigation" + +msgid "Netmask" +msgstr "Netzmaske" + +msgid "Network" +msgstr "Netzwerk" + +msgid "Network Utilities" +msgstr "Netzwerk-Werkzeuge" + +msgid "Network boot image" +msgstr "Netzwerk-Boot-Image" + +msgid "Network without interfaces." +msgstr "Netzwerk ohne Schnittstellen." + +msgid "Next »" +msgstr "Weiter »" + +msgid "No DHCP Server configured for this interface" +msgstr "Kein DHCP Server auf dieser Schnittstelle eingerichtet" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Keine Ketten in dieser Tabelle" + +msgid "No files found" +msgstr "Keine Dateien gefunden" + +msgid "No information available" +msgstr "Keine Informationen verfügbar" + +msgid "No negative cache" +msgstr "Kein Negativ-Cache" + +msgid "No network configured on this device" +msgstr "Keine Netzwerke auf diesem Gerät konfiguriert" + +msgid "No network name specified" +msgstr "Netzwerkname nicht angegeben" + +# Ich glab das ist so richtiger +msgid "No package lists available" +msgstr "Es sind keine Paketlisten vorhanden" + +msgid "No password set!" +msgstr "Kein Passwort gesetzt!" + +msgid "No rules in this chain" +msgstr "Keine Regeln in dieser Kette" + +msgid "No zone assigned" +msgstr "Keine Zone zugewiesen" + +msgid "Noise" +msgstr "Rauschen" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Noise:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "keine" + +msgid "Normal" +msgstr "Normal" + +msgid "Not Found" +msgstr "Nicht Gefunden" + +msgid "Not associated" +msgstr "Nicht assoziiert" + +msgid "Not connected" +msgstr "Nicht verbunden" + +msgid "Note: Configuration files will be erased." +msgstr "Warnung: Konfigurationsdateien werden gelöscht." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Notiz" + +msgid "Nslookup" +msgstr "DNS-Auflösung" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "OPKG-Konfiguration" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "Verzögerung für Ausschalt-Zustand" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"An dieser Stelle können die einzelnen Schnittstellen des Netzwerkes " +"konfiguriert werden. Es können mehrere Schnittstellen zu einer Brücke " +"zusammengefasst werden, indem diese durch Leerzeichen getrennt aufgezählt " +"werden und ein entsprechender Haken im Feld Netzwerkbrücke gesetzt wird. Es " +"können VLANs in der Notation SCHNITTSTELLE.VLANNR (z.B.: eth0.1) verwendet " +"werden." + +msgid "On-State Delay" +msgstr "Verzögerung für Anschalt-Zustand" + +msgid "One of hostname or mac address must be specified!" +msgstr "Es muss entweder ein Hostname oder eine MAC-Adresse angegeben werden!" + +msgid "One or more fields contain invalid values!" +msgstr "Ein oder mehrere Felder enthalten ungültige Werte!" + +msgid "One or more invalid/required values on tab" +msgstr "Ein oder mehrere ungültige/benötigte Werte auf Registerkarte" + +msgid "One or more required fields have no value!" +msgstr "Ein oder mehr benötigte Felder sind nicht ausgefüllt!" + +msgid "Open list..." +msgstr "Liste öffnen..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Option geändert" + +msgid "Option removed" +msgstr "Option entfernt" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Optionen" + +msgid "Other:" +msgstr "Andere:" + +msgid "Out" +msgstr "Aus" + +msgid "Outbound:" +msgstr "Ausgehend:" + +msgid "Outdoor Channels" +msgstr "Funkkanal für den Ausseneinsatz" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "MAC-Adresse überschreiben" + +msgid "Override MTU" +msgstr "MTU-Wert überschreiben" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "Gateway-Adresse in DHCP-Antworten überschreiben" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"Überschreibt die Netzmaske welche an Clients geschickt wird. Normalerweise " +"wird diese vom bedienten Subnetz abgeleitet." + +msgid "Override the table used for internal routes" +msgstr "Überschreibt die benutzte Tabelle für interne Routen" + +msgid "Overview" +msgstr "Übersicht" + +msgid "Owner" +msgstr "Besitzer" + +msgid "PAP/CHAP password" +msgstr "PAP/CHAP Passwort" + +msgid "PAP/CHAP username" +msgstr "PAP/CHAP Benutzername" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "PPPoA Kapselung" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "Benötige das libiwinfo Paket!" + +msgid "Package lists are older than 24 hours" +msgstr "Die Paketlisten sind älter als 24 Stunden" + +msgid "Package name" +msgstr "Paketname" + +msgid "Packets" +msgstr "Pakete" + +msgid "Part of zone %q" +msgstr "Teil von Zone %q" + +msgid "Password" +msgstr "Passwort" + +msgid "Password authentication" +msgstr "Passwortanmeldung" + +msgid "Password of Private Key" +msgstr "Passwort des Privaten Schlüssels" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "Passwort erfolgreich geändert!" + +msgid "Path to CA-Certificate" +msgstr "Pfad zum CA-Zertifikat" + +msgid "Path to Client-Certificate" +msgstr "Pfad zu Client-Zertifikat" + +msgid "Path to Private Key" +msgstr "Pfad zum Privaten Schlüssel" + +msgid "Path to executable which handles the button event" +msgstr "Ausführbare Datei welche das Schalter-Ereignis verarbeitet" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Spitze:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Neustart durchführen" + +msgid "Perform reset" +msgstr "Reset durchführen" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Phy-Rate:" + +msgid "Physical Settings" +msgstr "Physikalische Einstellungen" + +msgid "Ping" +msgstr "Ping-Anfrage" + +msgid "Pkts." +msgstr "Pkte." + +msgid "Please enter your username and password." +msgstr "Bitte Benutzernamen und Passwort eingeben." + +msgid "Policy" +msgstr "Standardregel" + +msgid "Port" +msgstr "Port" + +msgid "Port status:" +msgstr "Port-Status:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" +"Deklariere den Client als tot nach der angegebenen Anzahl von LCP Echo " +"Fehlschlägen, nutze den Wert 0 um Fehler zu ignorieren" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Unterbindet Client-Client-Verkehr" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Prism2/2.5/3 802.11b W-LAN Adapter" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Fortfahren" + +msgid "Processes" +msgstr "Prozesse" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Protocol family" +msgstr "Protokollfamilie" + +msgid "Protocol of the new interface" +msgstr "Protokoll für die neue Schnittstelle" + +msgid "Protocol support is not installed" +msgstr "Protokollunterstützung ist nicht installiert" + +msgid "Provide NTP server" +msgstr "NTP-Server anbieten" + +msgid "Provide new network" +msgstr "Neues Netzwerk anbieten" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Qualität" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "RTS/CTS-Schwelle" + +# Ein / Aus, eingehend / ausgehend? +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "RX-Rate" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "RaLink 802.11%s W-LAN Adapter" + +msgid "Radius-Accounting-Port" +msgstr "Radius-Accounting-Port" + +msgid "Radius-Accounting-Secret" +msgstr "Radius-Accounting-Secret" + +msgid "Radius-Accounting-Server" +msgstr "Radius-Accounting-Server" + +msgid "Radius-Authentication-Port" +msgstr "Radius-Authentication-Port" + +msgid "Radius-Authentication-Secret" +msgstr "Radius-Authentication-Secret" + +msgid "Radius-Authentication-Server" +msgstr "Radius-Authentication-Server" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "Lese Informationen aus /etc/ethers um den DHCP-Server zu konfigurieren" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"Diese Schnittstelle wirklich löschen? Der Schritt kann nicht rückgängig " +"gemacht werden!\n" +"Der Zugriff auf das Gerät könnte verlorengehen wenn Sie über diese " +"Schnittstelle verbunden sind." + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"Dieses Drahtlosnetzwerk wirklich löschen? Der Schritt kann nicht rückgängig " +"gemacht werden!\n" +"Der Zugriff auf das Gerät könnte verlorengehen wenn Sie über dieses Netzwerk " +"verbunden sind." + +msgid "Really reset all changes?" +msgstr "Sollen wirklich alle Änderungen verworfen werden?" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"Das Netzwerk wirklich herunterfahren?\n" +"Der Zugriff auf das Gerät könnte verlorengehen wenn Sie über diese " +"Schnittstelle verbunden sind." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"Die Schnitstelle \"%s\" wirklich herunterfahren?\n" +"Der Zugriff auf das Gerät könnte verlorengehen wenn Sie über diese " +"Schnittstelle verbunden sind." + +msgid "Really switch protocol?" +msgstr "Protokoll wirklich wechseln?" + +msgid "Realtime Connections" +msgstr "Echtzeitverbindungen" + +msgid "Realtime Graphs" +msgstr "Echtzeit-Diagramme" + +msgid "Realtime Load" +msgstr "Echtzeitsystemlast" + +msgid "Realtime Traffic" +msgstr "Echtzeitverkehr" + +msgid "Realtime Wireless" +msgstr "Echtzeit-WLAN-Signal" + +msgid "Rebind protection" +msgstr "DNS-Rebind-Schutz" + +msgid "Reboot" +msgstr "Neu Starten" + +msgid "Rebooting..." +msgstr "Das System wird neu gestartet..." + +msgid "Reboots the operating system of your device" +msgstr "Startet das Betriebssystem des Routers neu." + +msgid "Receive" +msgstr "Empfangen" + +msgid "Receiver Antenna" +msgstr "Empfangsantenne" + +msgid "Reconnect this interface" +msgstr "Diese Schnittstelle neu verbinden" + +msgid "Reconnecting interface" +msgstr "Verbinde Schnittstelle neu" + +msgid "References" +msgstr "Verweise" + +msgid "Regulatory Domain" +msgstr "Geltungsbereich (Regulatory Domain)" + +msgid "Relay" +msgstr "Relay" + +msgid "Relay Bridge" +msgstr "Relay-Brücke" + +msgid "Relay between networks" +msgstr "Zwischen folgenden Netzwerken weiterleiten" + +msgid "Relay bridge" +msgstr "Relay-Brücke" + +msgid "Remote IPv4 address" +msgstr "Entfernte IPv4-Adresse" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Entfernen" + +msgid "Repeat scan" +msgstr "Scan wiederholen" + +msgid "Replace entry" +msgstr "Eintrag ersetzen" + +msgid "Replace wireless configuration" +msgstr "Drahtloskonfiguration ersetzen" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" +"Wird von bestimmten Internet-Providern benötigt, z.B. Charter mit DOCSIS 3" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Zurücksetzen" + +msgid "Reset Counters" +msgstr "Zähler zurücksetzen" + +msgid "Reset to defaults" +msgstr "Auslieferungszustand wiederherstellen" + +msgid "Resolv and Hosts Files" +msgstr "Resolv- und Hosts-Dateien" + +msgid "Resolve file" +msgstr "Resolv-Datei" + +msgid "Restart" +msgstr "Neustarten" + +msgid "Restart Firewall" +msgstr "Firewall neu starten" + +msgid "Restore backup" +msgstr "Sicherung wiederherstellen" + +msgid "Reveal/hide password" +msgstr "Passwort zeigen/verstecken" + +msgid "Revert" +msgstr "Verwerfen" + +msgid "Root" +msgstr "Root" + +msgid "Root directory for files served via TFTP" +msgstr "Wurzelverzeichnis für über TFTP ausgelieferte Dateien " + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Routerpasswort" + +msgid "Routes" +msgstr "Routen" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Netzwerkrouten geben an, über welche Schnittstellen bestimmte Rechner oder " +"Netzwerke erreicht werden können" + +msgid "Run a filesystem check before mounting the device" +msgstr "Vor dem Einhängen Dateisystemprüfung starten " + +msgid "Run filesystem check" +msgstr "Dateisystemprüfung durchführen" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "SSH-Zugriff" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "SSH-Schlüssel" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Speichern" + +msgid "Save & Apply" +msgstr "Speichern & Anwenden" + +msgid "Save & Apply" +msgstr "Speichern & Anwenden" + +msgid "Scan" +msgstr "Scan" + +msgid "Scheduled Tasks" +msgstr "Geplante Aufgaben" + +msgid "Section added" +msgstr "Sektion hinzugefügt" + +msgid "Section removed" +msgstr "Sektion entfernt" + +msgid "See \"mount\" manpage for details" +msgstr "Siehe \"mount\" Handbuch für Details" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" +"Sende LCP Echo Anforderungen im angegebenem Interval in Sekunden, nur " +"effektiv in Verbindung mit einem Fehler-Schwellwert" + +msgid "Separate Clients" +msgstr "Clients isolieren" + +msgid "Separate WDS" +msgstr "Separates WDS" + +msgid "Server Settings" +msgstr "Servereinstellungen" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Service-Name" + +msgid "Service Type" +msgstr "Service-Typ" + +msgid "Services" +msgstr "Dienste" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Zeitsynchronisierung einrichten" + +msgid "Setup DHCP Server" +msgstr "DHCP Server einrichten" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "Zeige aktuelle Liste der gesicherten Dateien" + +msgid "Shutdown this interface" +msgstr "Diese Schnittstelle herunterfahren" + +msgid "Shutdown this network" +msgstr "Dieses Netzwerk herunterfahren" + +msgid "Signal" +msgstr "Signal" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Signal:" + +msgid "Size" +msgstr "Größe" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Überspringen" + +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +msgid "Skip to navigation" +msgstr "Zur Navigation springen" + +msgid "Slot time" +msgstr "Zeitslot" + +msgid "Software" +msgstr "Paketverwaltung" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Einige Felder sind ungültig, kann das Formular nicht speichern!" + +msgid "Sorry, the object you requested was not found." +msgstr "Entschuldigung, das anfgeforderte Objekt wurde nicht gefunden." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "" +"Entschuldigung, auf dem Server ist ein unerwarteter Fehler aufgetreten." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"Aufgrund des fehlenden sysupgrade-Supports muss die neue Firmware manuell " +"geflasht werden. Weitere Informationen sowie gerätespezifische " +"Installationsanleitungen entnehmen Sie bitte dem Wiki." + +msgid "Sort" +msgstr "Sortieren" + +msgid "Source" +msgstr "Quelle" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "Gibt den zu behandelnden Tastenstatus an" + +msgid "Specifies the directory the device is attached to" +msgstr "Nennt das Verzeichnis, an welches das Gerät angebunden ist" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Gibt den Server-Port dieser Dropbear-Instanz an" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" +"Maximale Anzahl fehlgeschlagener ARP-Anfragen bis ein Host als nicht " +"verfügbar gilt" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" +"Spezifiziert die maximale Anzahl an Sekunde nach denen Hoss als tot erachtet " +"werden" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Geben Sie hier den geheimen Netzwerkschlüssel an" + +msgid "Start" +msgstr "Start" + +msgid "Start priority" +msgstr "Startpriorität" + +msgid "Startup" +msgstr "Systemstart" + +msgid "Static IPv4 Routes" +msgstr "Statische IPv4 Routen" + +msgid "Static IPv6 Routes" +msgstr "Statische IPv6 Routen" + +msgid "Static Leases" +msgstr "Statische Einträge" + +msgid "Static Routes" +msgstr "Statische Routen" + +msgid "Static WDS" +msgstr "Statisches WDS" + +msgid "Static address" +msgstr "Statische Adresse" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"Statische Leases werden genutzt um feste IP-Adressen und Hostnames zu DHCP-" +"Clients zuzuordnen. Sie werden auch für nicht-dynamische Schnittstellen-" +"Konfigurationen benötigt auf denen lediglich Hosts mit zugehörigem " +"statischem Lease-Eintrag bedient werden." + +msgid "Status" +msgstr "Status" + +msgid "Stop" +msgstr "Stoppen" + +msgid "Strict order" +msgstr "Strikte Reihenfolge" + +msgid "Submit" +msgstr "Absenden" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Auslagerungsdatei" + +msgid "Switch" +msgstr "Switch" + +msgid "Switch %q" +msgstr "Switch %q" + +msgid "Switch %q (%s)" +msgstr "Switch %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Wechsle Protokoll" + +msgid "Sync with browser" +msgstr "Mit Browser synchronisieren" + +msgid "Synchronizing..." +msgstr "Synchronisiere..." + +msgid "System" +msgstr "System" + +msgid "System Log" +msgstr "Systemprotokoll" + +msgid "System Properties" +msgstr "Systemeigenschaften" + +msgid "System log buffer size" +msgstr "Größe des Systemprotokoll-Puffers" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "TFTP Einstellungen" + +msgid "TFTP server root" +msgstr "TFTP Wurzelverzeichnis" + +# same as RX +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "TX-Rate" + +msgid "Table" +msgstr "Tabelle" + +msgid "Target" +msgstr "Ziel" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Beenden" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"Die Gerätekonfiguration deckt physikalische Einstellungen der WLAN-" +"Hardware wie Kanal, Sendestärke oder Antennenauswahl ab. Diese Einstellungen " +"werden von allen Netzwerken auf dem Gerät geteilt. Netzwerk-spezifische " +"Einstellungen wie Verschlüsselung oder Betriebsmodus sind in der " +"Schnittstellenkonfiguration gruppiert." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Das libiwinfo-lua Paket ist nicht installiert. Dieses Paket muss " +"für eine funktionierende WLAN-Konfiguration vorhanden sein!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" +"Vom Provider zugewiesener IPv6 Präfix, endet normalerweise mit ::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Erlaubte Buchstaben sind: A-Z, a-z, 0-9 and _" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "Die Gerätedatei des Speichers oder der Partition (z.B.: /dev/sda)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "Das Dateisystem mit dem der Speicher formatiert ist (z.B.: ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"Das Firmware-Image wurde hochgeladen. Nachfolgend sind die Prüfsumme und " +"Dateigröße gelistet. Vergleichen Sie diese mit der Originaldatei um die " +"Integrität sicherzustellen.
Klicken Sie \"Fortfahren\" um die Flash-" +"Prozedur zu starten." + +msgid "The following changes have been committed" +msgstr "Die folgenden Änderungen wurden angewendet" + +msgid "The following changes have been reverted" +msgstr "Die folgenden Änderungen wurden verworfen" + +msgid "The following rules are currently active on this system." +msgstr "Die folgenden Regeln sind zur Zeit auf dem System aktiv." + +msgid "The given network name is not unique" +msgstr "Der angebene Netzwerk-Name ist nicht eindeutig" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"Die Hardware ist nicht Multi-SSID fähig und die existierende Konfiguration " +"wird beim Fortfahren ersetzt." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" +"Länge des IPv4 Präfix in Bits, die übrigen Bits werden in der IPv6 Adresse " +"verwendet." + +msgid "The length of the IPv6 prefix in bits" +msgstr "Länge des IPv6 Präfix in Bits" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"Die Netzwerkschnittstellen dieses Geräts können zu verschienden VLANs zusammengefasst werden, in denen " +"Geräte miteinander direkt kommunizieren können. VLANs werden auch häufig dazu genutzt, um Netzwerke " +"voneinander zu trennen. So ist oftmals eine Schnittstelle als Uplink zu " +"einem größeren Netz, wie dem Internet, vorkonfiguriert und die anderen " +"Schnittstellen bilden ein VLAN für das lokale Netzwerk." + +msgid "The selected protocol needs a device assigned" +msgstr "Dem ausgewähltem Protokoll muss ein Gerät zugeordnet werden" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" +"Die Einstellungen werden nun gelöscht! Anschließend wird ein Neustart des " +"Systems durchgeführt." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"Der Flashvorgang läuft jetzt.
SCHALTEN SIE NICHT DEN STROM AUS!
" +"Warten Sie einige Minuten bis das Gerät wieder erreichbar ist. Je nach " +"Konfiguration ist es notwendig, dass Sie auf Ihrem Computer eine neue IP-" +"Adresse beziehen müssen um auf das Gerät zugreifen zu können." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"Das hochgeladene Firmware-Image hat ein nicht unterstütztes Format. Stellen " +"Sie sicher dass Sie das generische Format für Ihre Platform gewählt haben." + +msgid "There are no active leases." +msgstr "Es gibt z.Z. keine aktiven Leases." + +msgid "There are no pending changes to apply!" +msgstr "Es gibt keine ausstehenen Änderungen anzuwenden!" + +msgid "There are no pending changes to revert!" +msgstr "Es gibt keine ausstehenen Änderungen zurückzusetzen!" + +msgid "There are no pending changes!" +msgstr "Es gibt keine ausstehenen Änderungen!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"Es wurde noch kein Netzwerkgerät zugeordnet, bitte ein Gerät im " +"\"Physikalische Einstellungen\" Bereich anfügen" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"Es ist kein Passwort auf diesem Router gesetzt. Bitte konfigurieren Sie ein " +"Root-Passwort um das Web-Interface zu schützen und SSH zu aktivieren." + +msgid "This IPv4 address of the relay" +msgstr "IPv4-Adresse des Relais" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"Dies ist eine Liste von Shell-Glob-Mustern um Dateien und Verzeichnisse zu " +"selektieren welche während eines System-Upgrade gesichert werden sollen. " +"Modifizierte Dateien in /etc/config/ und bestimmte andere essenzielle " +"Konfigurationsdateien werden automatisch gesichert." + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"Dies ist der Inhalt von /etc.rc.local. Hier kann man eigene Befehle einfügen " +"(vor 'exit 0'), die dann am Ende des Bootvorgangs ausgeführt werden." + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" +"Dies ist die lokale, vom Broker zugewiesene IPv6-Adresse, sie endet " +"üblicherweise mit :2" + +msgid "" +"This is the only DHCP in the local network" +msgstr "Dies ist der einzige DHCP im lokalen Netz" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" +"Dies ist die System-Crontab in der geplante Aufgaben definiert werden können." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" +"Dies ist üblicherweise die Adresse des nächstgelegenen PoPs betrieben durch " +"den Tunnelbroker" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"Diese Tabelle gibt eine Übersicht über aktuell laufende Systemprozesse und " +"deren Status." + +msgid "This page allows the configuration of custom button actions" +msgstr "" +"Diese Seite ermöglicht die Konfiguration benutzerdefinierter Tastenaktionen" + +msgid "This page gives an overview over currently active network connections." +msgstr "Diese Seite gibt eine Übersicht über aktive Netzwerkverbindungen." + +msgid "This section contains no values yet" +msgstr "Diese Sektion enthält noch keine Einträge" + +msgid "Time Synchronization" +msgstr "Zeitsynchronisation" + +msgid "Time Synchronization is not configured yet." +msgstr "Die Zeitsynchronisation wurde noch nicht konfiguriert." + +msgid "Timezone" +msgstr "Zeitzone" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"Zum Wiederherstellen der Konfiguration kann hier ein bereits vorhandenes " +"Backup-Archiv hochgeladen werden." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Gesamt verfügbar" + +msgid "Traceroute" +msgstr "Routenverfolgung" + +# Ich bin der Meinung Traffic versteht jeder! Wenn der Begriff "deutscher" sein soll, würde ich "Datenmenge" angeben. Aber "Verkehrs" passt nicht! +msgid "Traffic" +msgstr "Traffic" + +msgid "Transfer" +msgstr "Transfer" + +msgid "Transmission Rate" +msgstr "Übertragungsrate" + +msgid "Transmit" +msgstr "Senden" + +msgid "Transmit Power" +msgstr "Sendeleistung" + +msgid "Transmitter Antenna" +msgstr "Sendeantenne" + +msgid "Trigger" +msgstr "Auslöser" + +msgid "Trigger Mode" +msgstr "Auslösmechanismus" + +msgid "Tunnel ID" +msgstr "Tunnel-ID" + +msgid "Tunnel Interface" +msgstr "Tunnelschnittstelle" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Turbo Modus" + +msgid "Tx-Power" +msgstr "Sendestärke" + +msgid "Type" +msgstr "Typ" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "Nur UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "USB-Gerät" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "Kann Anfrage nicht zustellen" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Unbekannt" + +msgid "Unknown Error, password not changed!" +msgstr "Unbekannter Fehler, Passwort nicht geändert!" + +msgid "Unmanaged" +msgstr "Ignoriert" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Ungespeicherte Änderungen" + +msgid "Unsupported protocol type." +msgstr "Nicht unterstützter Protokolltyp." + +msgid "Update lists" +msgstr "Listen aktualisieren" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"Zum Ersetzen der aktuellen Firmware kann hier ein sysupgrade-Kompatibles " +"Image hochgeladen werden. Wenn die vorhandene Konfiguration auch nach dem " +"Update noch aktiv sein soll, aktivieren Sie \"Konfiguration behalten\"." + +msgid "Upload archive..." +msgstr "Backup wiederherstellen..." + +msgid "Uploaded File" +msgstr "hochgeladene Datei" + +msgid "Uptime" +msgstr "Laufzeit" + +msgid "Use /etc/ethers" +msgstr "Verwende /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Benutze DHCP-Gateway" + +msgid "Use DNS servers advertised by peer" +msgstr "Benutze die von der Gegenstelle zugewiesenen DNS-Server" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "Muss ein ISO/IEC 3166 Länderkürzel sein." + +msgid "Use MTU on tunnel interface" +msgstr "Benutze MTU auf der Tunnelschnittstelle" + +msgid "Use TTL on tunnel interface" +msgstr "Benutze TTL auf der Tunnelschnittstelle" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Benutze Broadcast-Flag" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Benutze eigene DNS-Server" + +msgid "Use default gateway" +msgstr "Benutze Standard-Gateway" + +msgid "Use gateway metric" +msgstr "Benutze Gateway-Metrik" + +msgid "Use routing table" +msgstr "Benutze Routing-Tabelle" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"Die Hinzufügen Schaltfläche fügt einen neuen Lease-Eintrag hinzu. " +"Die MAC-Adresse identifiziert den Host, die IPv4-Adresse " +"definiert die zu nutzende statische Adresse und der Hostname ist " +"der symbolische Name der dem Host zugewisen wird." + +msgid "Used" +msgstr "Belegt" + +msgid "Used Key Slot" +msgstr "Benutzer Schlüsselindex" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Benutzername" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLANs auf %q" + +msgid "VLANs on %q (%s)" +msgstr "VLANs auf %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "VPN-Server" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "Bei DHCP-Anfragen gesendete Vendor-Klasse" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Verifizieren" + +msgid "Version" +msgstr "Version" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "WEP Open System" + +msgid "WEP Shared Key" +msgstr "WEP Shared Key" + +msgid "WEP passphrase" +msgstr "WEP Schlüssel" + +msgid "WMM Mode" +msgstr "WMM Modus" + +msgid "WPA passphrase" +msgstr "WPA Schlüssel" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"WPA-Verschlüsselung benötigt wpa_supplicant (für Client-Modus) oder hostapd " +"(für AP oder Ad-Hoc Modus)." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "Änderungen werden angewandt..." + +msgid "Waiting for command to complete..." +msgstr "Der Befehl wird ausgeführt..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Warnung" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "WLAN" + +msgid "Wireless Adapter" +msgstr "WLAN-Gerät" + +msgid "Wireless Network" +msgstr "Drahtlosnetzwerk" + +msgid "Wireless Overview" +msgstr "Drahtlosübersicht" + +msgid "Wireless Security" +msgstr "WLAN-Verschlüsselung" + +msgid "Wireless is disabled or not associated" +msgstr "WLAN ist deaktiviert oder nicht assoziiert" + +msgid "Wireless is restarting..." +msgstr "WLAN startet neu..." + +msgid "Wireless network is disabled" +msgstr "Das WLAN-Netzwerk ist deaktiviert" + +msgid "Wireless network is enabled" +msgstr "Das WLAN-Netzwerk ist aktiviert" + +msgid "Wireless restarted" +msgstr "WLAN neu gestartet" + +msgid "Wireless shut down" +msgstr "WLAN heruntergefahren" + +msgid "Write received DNS requests to syslog" +msgstr "Empfangene DNS-Anfragen in das Systemprotokoll schreiben" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "XR-Unterstützung" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Hier können installierte Startscripte aktiviert oder deaktiviert werden. " +"Änderungen werden erst mit einem Geräteneustart angewendet.
Warnung: Wenn essentialle Startscripte wie \"network\" deaktiviert " +"werden könnte das Gerät unerreichbar werden!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Im Browser muss Java-Script aktiviert sein oder LuCI wird nicht richtig " +"funktionieren." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "beliebig" + +msgid "auto" +msgstr "auto" + +msgid "automatic" +msgstr "automatisch" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "bridged" + +msgid "create:" +msgstr "erstelle:" + +msgid "creates a bridge over specified interface(s)" +msgstr "überbrückt angegebene Schnittstelle(n)" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "deaktivieren" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "abgelaufen" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "Speicherort für vergebenen DHCP-Adressen" + +msgid "forward" +msgstr "weitergeleitet" + +msgid "full-duplex" +msgstr "Voll-Duplex" + +msgid "half-duplex" +msgstr "Halb-Duplex" + +msgid "help" +msgstr "Hilfe" + +msgid "hidden" +msgstr "versteckt" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "falls Ziel ein Netzwerk ist" + +msgid "input" +msgstr "eingehend" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "Lokale DNS-Datei" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "nein" + +msgid "no link" +msgstr "nicht verbunden" + +msgid "none" +msgstr "keine" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "aus" + +msgid "on" +msgstr "ein" + +msgid "open" +msgstr "offen" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "routed" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "tagged" + +msgid "unknown" +msgstr "unbekannt" + +msgid "unlimited" +msgstr "unbegrenzt" + +msgid "unspecified" +msgstr "unspezifiziert" + +msgid "unspecified -or- create:" +msgstr "nichts auswählen -oder- erstellen:" + +msgid "untagged" +msgstr "untagged" + +msgid "yes" +msgstr "ja" + +msgid "« Back" +msgstr "« Zurück" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "" +#~ "Erzeugt ein zusätzliches Netzwerk wenn diese Option nicht ausgewählt ist" + +#~ msgid "Join Network: Settings" +#~ msgstr "Netzwerk beitreten: Einstellungen" + +#~ msgid "CPU" +#~ msgstr "Prozessor" + +#~ msgid "Port %d" +#~ msgstr "Port %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "Port %d ist untagged in mehreren VLANs!" + +#~ msgid "VLAN Interface" +#~ msgstr "VLAN Schnittstelle" diff --git a/feeds/luci/modules/luci-base/po/el/base.po b/feeds/luci/modules/luci-base/po/el/base.po new file mode 100644 index 0000000..d5dbff8 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/el/base.po @@ -0,0 +1,3767 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-03-31 15:35+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(παράθυρο %d λεπτών, διάστημα %d δευτερολέπτων)" + +msgid "(%s available)" +msgstr "(%s διαθέσιμα)" + +msgid "(empty)" +msgstr "(κενό)" + +msgid "(no interfaces attached)" +msgstr "(χωρίς προσαρτημένες διεπαφές)" + +msgid "-- Additional Field --" +msgstr "-- Επιπλέον Πεδίο --" + +msgid "-- Please choose --" +msgstr "-- Παρακαλώ επιλέξτε --" + +msgid "-- custom --" +msgstr "-- προσαρμοσμένο --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Φορτίο 1 λεπτού:" + +msgid "15 Minute Load:" +msgstr "Φορτίο 15 λεπτών:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Φορτίο 5 λεπτών:" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "Θύρα ερωτημάτων DNS" + +msgid "DNS server port" +msgstr "Θύρα εξυπηρετητή DNS" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"Οι DNS εξυπηρετητές θα " +"ερωτηθούν με την σειρά εμφάνισης στο αρχείο resolvfile" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "Διεύθυνση IPv4" + +msgid "IPv4-Gateway" +msgstr "Πύλη IPv4" + +msgid "IPv4-Netmask" +msgstr "Μάσκα IPv4" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"Διεύθυνση IPv6 ή Δίκτυο " +"(CIDR)" + +msgid "IPv6-Gateway" +msgstr "Πύλη IPv6" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "Παραμετροποίηση LED" + +msgid "LED Name" +msgstr "Όνομα LED" + +msgid "MAC-Address" +msgstr "Διεύθυνση MAC" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Μεγ. πλήθος DHCP leases" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Μεγ. μέγεθος πακέτου EDNS0" + +msgid "Max. concurrent queries" +msgstr "Μεγ. πλήθος ταυτόχρονων ερωτηματων" + +msgid "%s - %s" +msgstr "" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "Υποστήριξη AR" + +msgid "ARP retry threshold" +msgstr "Όριο επαναδοκιμών ARP" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "Γέφυρες ΑΤΜ" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "ATM Εικονικό Κανάλι Αναγνωριστή (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "ATM Εικονικό μονοπάτι Αναγνωριστή (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"Οι γέφυρες ATM αποκαλύπτουν ενθυλακωμένες ethernet σε συνδέσεις AAL5 σαν " +"εικονικές διεπαφές δικτύου Linux, οι οποίες μπορούν να χρησιμοποιηθούν σε " +"συνδυασμό με DHCP ή PPP για την κλήση προς τον παροχέα δικτύου." + +msgid "ATM device number" +msgstr "Αριθμός συσκευής ATM" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Συγκεντρωτής Πρόσβασης " + +msgid "Access Point" +msgstr "Σημείο Πρόσβασης" + +msgid "Action" +msgstr "Ενέργεια" + +msgid "Actions" +msgstr "Ενέργειες" + +msgid "Activate this network" +msgstr "Ενεργοποίηση αυτού του δικτύου" + +msgid "Active IPv4-Routes" +msgstr "" +"Ενεργές Διαδρομές IPv4" + +msgid "Active IPv6-Routes" +msgstr "" +"Ενεργές Διαδρομές IPv6" + +msgid "Active Connections" +msgstr "Ενεργές Συνδέσεις" + +msgid "Active DHCP Leases" +msgstr "" + +msgid "Active DHCPv6 Leases" +msgstr "" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Προσθήκη" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" +"Προσθήκη κατάληξης τοπικού τομέα για ονόματα εξυπηρετούμενα από αρχεία hosts " + +msgid "Add new interface..." +msgstr "Προσθήκη νέας διεπαφής..." + +msgid "Additional Hosts files" +msgstr "Επιπλέον αρχεία Hosts" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Διεύθυνση" + +msgid "Address to access local relay bridge" +msgstr "Διεύθυνση για πρόσβαση σε την τοπική γέφυρα αναμετάδοσης" + +msgid "Administration" +msgstr "Διαχείριση" + +msgid "Advanced Settings" +msgstr "Προχωρημένες Ρυθμίσεις" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Ειδοποίηση" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" +"Επιτρέπει την εξουσιοδότηση SSH με " +"κωδικό πρόσβασης" + +msgid "Allow all except listed" +msgstr "Να επιτρέπονται όλες, εκτός από αυτές στη λίστα" + +msgid "Allow listed only" +msgstr "Να επιτρέπονται μόνο αυτές στην λίστα" + +msgid "Allow localhost" +msgstr "Να επιτρέπεται το localhost" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"Να επιτρέπεται σε απομακρυσμένα συστήματα να συνδέονται σε τοπικά " +"προωθημένες SSH θύρες" + +msgid "Allow root logins with password" +msgstr "Να επιτρέπονται root συνδέσεις με κωδικό πρόσβασης" + +msgid "Allow the root user to login with password" +msgstr "" +"Να επιτρέπεται στον χρήστη root να συνδέετε με κωδικό πρόσβασης" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"Να επιτρέπονται απαντήσεις από ανώτερο επίπεδο εντός του εύρους 127.0.0.0/8, " +"π.χ. για υπηρεσίες RBL" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Κεραία 1" + +msgid "Antenna 2" +msgstr "Κεραία 2" + +msgid "Antenna Configuration" +msgstr "" + +msgid "Any zone" +msgstr "Οιαδήποτε ζώνη" + +msgid "Apply" +msgstr "Εφαρμογή" + +msgid "Applying changes" +msgstr "Εφαρμογή αλλαγών" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Συνδεδεμένοι Σταθμοί" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Εξουσιοδότηση" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Κύριος" + +msgid "Authorization Required" +msgstr "Απαιτείται Εξουσιοδότηση" + +msgid "Auto Refresh" +msgstr "Αυτόματη Ανανέωση" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Διαθέσιμο" + +msgid "Available packages" +msgstr "Διαθέσιμα πακέτα" + +msgid "Average:" +msgstr "Μέσος Όρος:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Πίσω" + +msgid "Back to Overview" +msgstr "Πίσω προς Επισκόπηση" + +msgid "Back to configuration" +msgstr "Πίσω προς παραμετροποίηση" + +msgid "Back to overview" +msgstr "Πίσω προς επισκόπηση" + +msgid "Back to scan results" +msgstr "Πίσω στα αποτελέσματα σάρωσης" + +msgid "Background Scan" +msgstr "Σάρωση Παρασκηνίου" + +msgid "Backup / Flash Firmware" +msgstr "Αντίγραφο ασφαλείας / Εγγραφή FLASH Υλικολογισμικό" + +msgid "Backup / Restore" +msgstr "Αποθήκευση / Επαναφορά Αντίγραφου Ασφαλείας" + +msgid "Backup file list" +msgstr "Λίστα αρχείων για αντίγραφο ασφαλείας" + +#, fuzzy +msgid "Bad address specified!" +msgstr "Μη έγκυρη διεύθυνση!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Παρακάτω είναι η προκαθορισμένη λίστα αρχείων για αντιγραφή ασφαλείας. " +"Αποτελείτε από αλλαγμένα αρχεία παραμετροποίησης σημαδεμένα από το opkg, " +"ουσιώδη βασικά αρχεία καθώς και καθορισμένα από το χρήστη μοτίβα αντιγράφων " +"ασφαλείας." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Ρυθμός δεδομένων" + +msgid "Bogus NX Domain Override" +msgstr "Παράκαμψη Ψευδούς Τομέα NX" + +msgid "Bridge" +msgstr "Γέφυρα" + +msgid "Bridge interfaces" +msgstr "Γεφύρωμα διεπαφών" + +msgid "Bridge unit number" +msgstr "Αριθμός μονάδας γέφυρας" + +msgid "Bring up on boot" +msgstr "Ανέβασμα κατά την εκκίνηση" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "" + +msgid "Buffered" +msgstr "" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Κουμπιά" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Χρήση CPU (%)" + +msgid "Cancel" +msgstr "Ακύρωση" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Αλυσίδα" + +msgid "Changes" +msgstr "Αλλαγές" + +msgid "Changes applied." +msgstr "Αλλαγές εφαρμόστηκαν." + +msgid "Changes the administrator password for accessing the device" +msgstr "Αλλάζει τον κωδικό διαχειριστή για πρόσβαση στη συσκευή" + +msgid "Channel" +msgstr "Κανάλι" + +msgid "Check" +msgstr "Έλεγχος" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Άθροισμα Ελέγχου" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Επιλέξατε την ζώνη τείχους προστασίας που επιθυμητέ να αναθέσετε σε αυτήν " +"την διεπαφή. Επιλέξτε απροσδιόριστο για να αφαιρέσετε την διεπαφή " +"από την συσχετισμένη ζώνη ή συμπληρώστε το δημιουργία πεδίο για να " +"προσδιορίσετε μία νέα ζώνη και να προσαρτήσετε την διεπαφή σε αυτό." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" + +msgid "Cipher" +msgstr "" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Κλικ στο \"Δημιουργία αρχείου\" για να κατεβάσετε ένα tar αρχείο με τα " +"τρέχοντα αρχεία παραμετροποίησης. Για να επαναφέρετε το υλικολογισμικό στην " +"αρχική του κατάσταση, κάντε κλικ στο \"Εκτέλεσε επαναφορά\" (δυνατό μόνο σε " +"squashfs εικόνες)." + +msgid "Client" +msgstr "Πελάτης" + +msgid "Client ID to send when requesting DHCP" +msgstr "Αναγνωριστικό πελάτη που αποστέλλετε κατά την αίτηση DHCP" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Κλείσιμο, μη ενεργών συνδέσεων μετά το πέρας του ορισμένου αριθμού " +"δευτερολέπτων, χρησιμοποιήστε 0 για να εξακολουθούν να υφίστανται επ' " +"αόριστον" + +msgid "Close list..." +msgstr "Κλείσιμο λίστας..." + +msgid "Collecting data..." +msgstr "Συλλογή δεδομένων..." + +msgid "Command" +msgstr "Εντολή" + +msgid "Common Configuration" +msgstr "Κοινή Παραμετροποίηση" + +msgid "Compression" +msgstr "Συμπίεση" + +msgid "Configuration" +msgstr "Παραμετροποίηση" + +msgid "Configuration applied." +msgstr "Η Παραμετροποίηση εφαρμόστηκε." + +msgid "Configuration files will be kept." +msgstr "Τα αρχεία παραμετροποίησης θα διατηρηθούν." + +msgid "Confirmation" +msgstr "Επιβεβαίωση" + +msgid "Connect" +msgstr "Σύνδεση" + +msgid "Connected" +msgstr "Συνδεδεμένος" + +msgid "Connection Limit" +msgstr "Όριο Συνδέσεων" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Συνδέσεις" + +msgid "Country" +msgstr "Χώρα" + +msgid "Country Code" +msgstr "Κωδικός Χώρας" + +msgid "Cover the following interface" +msgstr "Κάλυψη της ακόλουθης διεπαφής" + +msgid "Cover the following interfaces" +msgstr "Κάλυψη των ακόλουθων διεπαφών" + +msgid "Create / Assign firewall-zone" +msgstr "Δημιουργία / Ανάθεση ζώνης τείχους προστασίας" + +msgid "Create Interface" +msgstr "Δημιουργία Διεπαφής" + +msgid "Create a bridge over multiple interfaces" +msgstr "" + +msgid "Critical" +msgstr "" + +msgid "Cron Log Level" +msgstr "Επίπεδο Καταγραφής Cron" + +msgid "Custom Interface" +msgstr "" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Ρυθμίζει, αν είναι δυνατόν, την συμπεριφορά των LED της συσκευής." + +msgid "DHCP Leases" +msgstr "DHCP Leases" + +msgid "DHCP Server" +msgstr "Εξυπηρετητής DHCP" + +msgid "DHCP and DNS" +msgstr "DHCP και DNS" + +msgid "DHCP client" +msgstr "Πελάτης DHCP" + +msgid "DHCP-Options" +msgstr "Επιλογές DHCP" + +msgid "DHCPv6 Leases" +msgstr "" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "Προωθήσεις DNS" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Αποσφαλμάτωση" + +msgid "Default %d" +msgstr "Προεπιλογή %d" + +msgid "Default gateway" +msgstr "Προεπιλεγμένη πύλη" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Προεπιλεγμένη κατάσταση" + +msgid "Define a name for this network." +msgstr "Ορίστε ένα όνομα για αυτό το δίκτυο." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Ορίστε επιπλέον επιλογές DHCP, που διαφημίζουν διαφορετικούς εξυπηρετητές " +"DNS στους πελάτες, για παράδειγμα \"6,192.168.2.1,192.168.2.2\"." + +msgid "Delete" +msgstr "Διαγραφή" + +msgid "Delete this network" +msgstr "Διαγραφή αυτού του δικτύου" + +msgid "Description" +msgstr "Περιγραφή" + +msgid "Design" +msgstr "Εμφάνιση" + +msgid "Destination" +msgstr "Προορισμός" + +msgid "Device" +msgstr "Συσκευή" + +msgid "Device Configuration" +msgstr "Παραμετροποίηση Συσκευής" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Διαγνωστικά" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Κατάλογος" + +msgid "Disable" +msgstr "Απενεργοποίηση" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Απενεργοποίηση DHCP για αυτή τη διεπαφή." + +msgid "Disable DNS setup" +msgstr "Απενεργοποίηση ρυθμίσεων DNS" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Απενεργοποίηση χρονιστή HW-Beacon" + +msgid "Disabled" +msgstr "Απενεργοποιημένο" + +msgid "Discard upstream RFC1918 responses" +msgstr "Αγνόησε τις απαντήσεις ανοδικής ροής RFC1918" + +msgid "Displaying only packages containing" +msgstr "Εμφάνιση μόνο πακέτων που περιέχουν" + +msgid "Distance Optimization" +msgstr "Βελτιστοποίηση Απόστασης" + +msgid "Distance to farthest network member in meters." +msgstr "Απόσταση σε μέτρα από το πιο απομακρυσμένο μέλος του δικτύου." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Διαφορική Λήψη" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Ο Dnsmasq είναι ένας συνδυασμός εξυπηρετητή DHCP και προωθητήDNS για τείχη προστασίας NAT" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" +"Να μην αποθηκεύονται στη λανθάνουσα μνήμη οι αρνητικές απαντήσεις, π.χ. για " +"μη υπαρκτούς τομείς." + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Να μην προωθούνται αιτήματα τα οποία δεν μπορούν να απαντηθούν από δημόσιους " +"εξυπηρετητές ονομάτων" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "Να μην στέλνονται απαντήσεις σε probes" + +msgid "Domain required" +msgstr "Απαίτηση για όνομα τομέα" + +msgid "Domain whitelist" +msgstr "Λευκή λίστα τομέων" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Να μην προωθούνται ερωτήματα DNS " +"χωρίς όνομα τομέα DNS" + +msgid "Download and install package" +msgstr "Κατέβασμα και εγκατάσταση πακέτου" + +msgid "Download backup" +msgstr "Κατέβασμα αντιγράφου ασφαλείας" + +msgid "Dropbear Instance" +msgstr "" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Το Dropbear προσφέρει πρόσβαση σε SSH " +"κέλυφος μέσω δικτύου και έναν ενσωματωμένο εξυπηρετητή SCP" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"Δυναμικό DHCP" + +msgid "Dynamic tunnel" +msgstr "Δυναμικό τούνελ" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Δυναμική απόδοση DHCP διευθύνσεων στους πελάτες. Σε περίπτωση " +"απενεργοποίησης, μόνο πελάτες με στατικα leases θα εξυπηρετούνται." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "Μέθοδος EAP" + +msgid "Edit" +msgstr "Επεξεργασία" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Επεξεργασία αυτής της διεπαφής" + +msgid "Edit this network" +msgstr "Επεξεργασία αυτού του δικτύου" + +msgid "Emergency" +msgstr "Έκτακτη ανάγκη" + +msgid "Enable" +msgstr "Ενεργοποίηση" + +msgid "Enable STP" +msgstr "Ενεργοποίηση STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Ενεργοποίηση ενημέρωσης δυναμικού τερματικού σημείου HE.net." + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Ενεργοποίηση διαπραγμάτευσης IPv6 πάνω στη PPP ζεύξη" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Ενεργοποίηση διέλευσης Jumbo Frame" + +msgid "Enable NTP client" +msgstr "" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Ενεργοποίηση εξυπηρετητή TFTP" + +msgid "Enable VLAN functionality" +msgstr "Ενεργοποίηση λειτουργίας VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Ένεργοποίηση learning and aging" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Ενεργοποίηση αυτής της προσάρτησης" + +msgid "Enable this swap" +msgstr "Ενεργοποίηση αυτής της swap" + +msgid "Enable/Disable" +msgstr "Ενεργοποίηση/Απενεργοποίηση" + +msgid "Enabled" +msgstr "Ενεργοποιημένο" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" + +msgid "Encapsulation mode" +msgstr "Λειτουργία ενθυλάκωσης" + +msgid "Encryption" +msgstr "Κρυπτογράφηση" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Διαγράφεται..." + +msgid "Error" +msgstr "Σφάλμα" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Προσαρμογέας Ethernet" + +msgid "Ethernet Switch" +msgstr "Ethernet Switch" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "Λήγει" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" +"Ο ελάχιστος χρόνος λήξεως των διευθύνσεων lease είναι 2 λεπτά (2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Εξωτερικός εξυπηρετητής καταγραφής συστήματος" + +msgid "External system log server port" +msgstr "" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Γρήγορα Πλαίσια" + +msgid "File" +msgstr "Αρχείο" + +msgid "Filename of the boot image advertised to clients" +msgstr "Όνομα αρχείου της εικόνας εκκίνησης που διαφημίζετε στους πελάτες" + +msgid "Filesystem" +msgstr "Σύστημα Αρχείων" + +msgid "Filter" +msgstr "Φίλτρο" + +msgid "Filter private" +msgstr "Φιλτράρισμα ιδιωτικών" + +msgid "Filter useless" +msgstr "Φιλτράρισμα άχρηστων" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Εύρεση και σύνδεση σε δίκτυο" + +msgid "Find package" +msgstr "Εύρεση πακέτου" + +msgid "Finish" +msgstr "Τέλος" + +msgid "Firewall" +msgstr "Τείχος Προστασίας" + +msgid "Firewall Settings" +msgstr "Ρυθμίσεις Τείχους Προστασίας" + +msgid "Firewall Status" +msgstr "Κατάσταση Τείχους Προστασίας" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Έκδοση Υλικολογισμικού" + +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +msgid "Flash Firmware" +msgstr "Φλασάρισμα Firmware" + +msgid "Flash image..." +msgstr "Φλασάρισμα εικόνας..." + +msgid "Flash new firmware image" +msgstr "Φλασάρισμα νέας εικόνας υλικολογισμικού" + +msgid "Flash operations" +msgstr "Λειτουργίες φλασάρισματος" + +msgid "Flashing..." +msgstr "Φλασάρεται..." + +msgid "Force" +msgstr "Επιβολή" + +msgid "Force CCMP (AES)" +msgstr "Επιβολή CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" +"Επιβολή DHCP σε αυτό το δίκτυο ακόμα κι αν έχει εντοπιστεί άλλος εξυπηρετητής" + +msgid "Force TKIP" +msgstr "Επιβολή TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Επιβολή TKIP και CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Προώθηση κίνησης DHCP" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Προώθηση κίνησης broadcast" + +msgid "Forwarding mode" +msgstr "Μέθοδος προώθησης" + +msgid "Fragmentation Threshold" +msgstr "Όριο Κατακερµατισµού" + +msgid "Frame Bursting" +msgstr "Bursting Πλαισίων" + +msgid "Free" +msgstr "" + +msgid "Free space" +msgstr "Ελεύθερος χώρος" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "" + +msgid "GPRS only" +msgstr "" + +msgid "Gateway" +msgstr "Πύλη" + +msgid "Gateway ports" +msgstr "Θύρες πύλης" + +msgid "General Settings" +msgstr "Γενικές Ρυθμίσεις" + +msgid "General Setup" +msgstr "" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "Μετάβαση στη σχετική σελίδα ρυθμίσεων" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "" + +msgid "Hang Up" +msgstr "Κρέμασμα" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Εδώ μπορείτε να παραμετροποιήσετε βασικές πλευρές της συσκευής σας όπως το " +"όνομα υπολογιστή ή τη ζώνη ώρας." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "" + +msgid "Hide ESSID" +msgstr "Κρυφό ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Καταχωρήσεις Υπολογιστών" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "" +"IP Υπολογιστή ή Δικτύου" + +msgid "Hostname" +msgstr "Όνομα Υπολογιστή" + +msgid "Hostname to send when requesting DHCP" +msgstr "" + +msgid "Hostnames" +msgstr "Ονόματα Υπολογιστών" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "Διεύθυνση IP" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "IPv4 Τείχος Προστασίας" + +msgid "IPv4 WAN Status" +msgstr "" + +msgid "IPv4 address" +msgstr "Διεύθυνση IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 και IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "IPv4 gateway" +msgstr "Πύλη IPv4" + +msgid "IPv4 netmask" +msgstr "Μάσκα IPv4" + +msgid "IPv4 only" +msgstr "Μόνο IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "" + +msgid "IPv4-Address" +msgstr "IPv4-Διεύθυνση" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "IPv6 Τείχος Προστασίας" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "Κατάσταση IPv6 WAN" + +msgid "IPv6 address" +msgstr "Διεύθυνση IPv6" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "Πύλη IPv6" + +msgid "IPv6 only" +msgstr "Μόνο IPv6" + +msgid "IPv6 prefix" +msgstr "" + +msgid "IPv6 prefix length" +msgstr "" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-in-IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +msgid "Identity" +msgstr "Ταυτότητα" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" +"Αν οριστεί, προσάρτησε τη συσκευή με βάση το UUID της αντί για το " +"καθορισμένο όνομα της" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" +"Αν οριστεί, προσάρτησε τη συσκευή με βάση την ετικέτα της αντί για το " +"καθορισμένο όνομα της" + +msgid "If unchecked, no default route is configured" +msgstr "" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Αν η φυσική μνήμη δεν είναι αρκετή, μη-χρησιμοποιούμενα δεδομένα μπορούν " +"προσωρινά να εναλλάσσονται σε μία συσκευή swap με αποτέλεσμα περισσότερη " +"ενεργή RAM. Η εναλλαγή δεδομένων " +"είναι μία πολύ αργή διαδικασία αφού η συσκευή swap δεν μπορεί να " +"προσπελαστεί με τους υψηλούς ρυθμούς μεταφοράς δεδομένων που διαθέτει η " +"RAM." + +msgid "Ignore /etc/hosts" +msgstr "Αγνόησε /etc/hosts" + +msgid "Ignore interface" +msgstr "Αγνόησε διεπαφή" + +msgid "Ignore resolve file" +msgstr "Αγνόησε αρχείο resolve" + +msgid "Image" +msgstr "" + +msgid "In" +msgstr "Είσοδος" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "" + +msgid "Inbound:" +msgstr "" + +msgid "Info" +msgstr "Πληροφορίες" + +msgid "Initscript" +msgstr "Σενάριο εκκίνησης" + +msgid "Initscripts" +msgstr "Σενάρια Εκκίνησης" + +msgid "Install" +msgstr "Εγκατάσταση" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Εγκατάσταση πακέτου %q" + +msgid "Install protocol extensions..." +msgstr "Εγκατάσταση επεκτάσεων πρωτοκόλλου..." + +msgid "Installed packages" +msgstr "Εγκατεστημένα πακέτα" + +msgid "Interface" +msgstr "Διεπαφή" + +msgid "Interface Configuration" +msgstr "Παραμετροποίηση Διεπαφής" + +msgid "Interface Overview" +msgstr "Επισκόπηση Διεπαφής" + +msgid "Interface is reconnecting..." +msgstr "Η διεπαφή επανασυνδέεται..." + +msgid "Interface is shutting down..." +msgstr "Η διεπαφή απενεργοποιείται..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "Η διεπαφή δεν υπάρχει ή δεν έχει συνδεθεί ακόμη." + +msgid "Interface reconnected" +msgstr "Η διεπαφή επανασυνδέθηκε" + +msgid "Interface shut down" +msgstr "Η διεπαφή απενεργοποιήθηκε" + +msgid "Interfaces" +msgstr "Διεπαφές" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "" + +msgid "Invalid" +msgstr "Άκυρη τιμή εισόδου" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "Άκυρο όνομα χρήστη και/ή κωδικός πρόσβασης! Παρακαλώ προσπαθήστε ξανά." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Φαίνεται πως προσπαθείτε να φλασάρετε μια εικόνα που δεν χωράει στην μνήμη " +"flash, παρακαλώ επιβεβαιώστε το αρχείο εικόνας!" + +msgid "Java Script required!" +msgstr "Απαιτείται Javascript!" + +msgid "Join Network" +msgstr "" + +msgid "Join Network: Wireless Scan" +msgstr "" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Διατήρηση ρυθμίσεων" + +msgid "Kernel Log" +msgstr "Καταγραφή Πυρήνα" + +msgid "Kernel Version" +msgstr "Έκδοση Πυρήνα" + +msgid "Key" +msgstr "Κλειδί" + +msgid "Key #%d" +msgstr "Κλειδί #%d" + +msgid "Kill" +msgstr "Σκότωμα" + +msgid "L2TP" +msgstr "" + +msgid "L2TP Server" +msgstr "" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Ετικέτα" + +msgid "Language" +msgstr "Γλώσσα" + +msgid "Language and Style" +msgstr "" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Leasefile" +msgstr "Αρχείο Leases" + +msgid "Leasetime" +msgstr "Χρόνος Lease" + +msgid "Leasetime remaining" +msgstr "Υπόλοιπο χρόνου Lease" + +msgid "Leave empty to autodetect" +msgstr "Αφήστε το κενό για να γίνει αυτόματη ανίχνευση" + +msgid "Leave empty to use the current WAN address" +msgstr "Αφήστε το κενό για να γίνει χρήση της τρέχουσας διεύθυνσης WAN" + +msgid "Legend:" +msgstr "Υπόμνημα:" + +msgid "Limit" +msgstr "Όριο" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Αναμμένο με Ζεύξη" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "Φόρτος" + +msgid "Load Average" +msgstr "Μέσος όρος φόρτου" + +msgid "Loading" +msgstr "Φόρτωση" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Τοπική διεύθυνση IPv4" + +msgid "Local IPv6 address" +msgstr "Τοπική διεύθυνση IPv6" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "" + +msgid "Local Time" +msgstr "Τοπική Ώρα" + +msgid "Local domain" +msgstr "" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "Τοπικός εξυπηρετητής" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "Τοπικά ερωτήματα" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Επίπεδο εξόδου αρχείων καταγραφής" + +msgid "Log queries" +msgstr "Καταγραφή ερωτημάτων" + +msgid "Logging" +msgstr "Καταγραφή" + +msgid "Login" +msgstr "Σύνδεση" + +msgid "Logout" +msgstr "Αποσύνδεση" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "MAC-Διεύθυνση" + +msgid "MAC-Address Filter" +msgstr "Φίλτρο MAC Διευθύνσεων" + +msgid "MAC-Filter" +msgstr "MAC-Φίλτρο" + +msgid "MAC-List" +msgstr "Λίστα MAC" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Μέγιστος Ρυθμός" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Μέγιστος επιτρεπόμενος αριθμός ενεργών DHCP leases" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Μέγιστος επιτρεπόμενος αριθμός ταυτόχρονων ερωτημάτων DNS" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "Μέγιστο επιτρεπόμενο μέγεθος EDNS.0 UDP πακέτων" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" +"Μέγιστος αριθμός δευτερολέπτων αναμονής ώστε το modem να καταστεί έτοιμο" + +msgid "Maximum hold time" +msgstr "Μέγιστος χρόνος κράτησης" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "Μέγιστος αριθμός διευθύνσεων lease" + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "Μνήμη" + +msgid "Memory usage (%)" +msgstr "Χρήση Μνήμης (%)" + +msgid "Metric" +msgstr "Μέτρο" + +msgid "Minimum Rate" +msgstr "Ελάχιστος Ρυθμός" + +msgid "Minimum hold time" +msgstr "Ελάχιστος χρόνος κράτησης" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "Λειτουργία" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Συσκευή Modem" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "Παρακολούθηση" + +#, fuzzy +msgid "Mount Entry" +msgstr "Προσάρτηση" + +msgid "Mount Point" +msgstr "Σημείο Προσάρτησης" + +msgid "Mount Points" +msgstr "Σημεία Προσάρτησης" + +msgid "Mount Points - Mount Entry" +msgstr "Σημεία Προσάρτησης - Είσοδος Προσάρτησης" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Τα σημεία προσάρτησης ορίζουν σε ποιο σημείο στο σύστημα αρχείων θα " +"προσαρτηθεί μία συσκευή μνήμης" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Επιλογές προσάρτησης" + +msgid "Mount point" +msgstr "Σημείο προσάρτησης" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Προσαρτημένα συστήματα αρχείων" + +msgid "Move down" +msgstr "Μετακίνηση κάτω" + +msgid "Move up" +msgstr "Μετακίνηση πάνω" + +msgid "Multicast Rate" +msgstr "Ρυθμός Multicast" + +msgid "Multicast address" +msgstr "Διεύθυνση Multicast" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Όνομα" + +msgid "Name of the new interface" +msgstr "Όνομα νέας διεπαφής" + +msgid "Name of the new network" +msgstr "Όνομα νέου δικτύου" + +msgid "Navigation" +msgstr "Πλοήγηση" + +msgid "Netmask" +msgstr "Μάσκα δικτύου" + +msgid "Network" +msgstr "Δίκτυο" + +msgid "Network Utilities" +msgstr "Εργαλεία Δικτύου" + +msgid "Network boot image" +msgstr "" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "Επόμενο »" + +msgid "No DHCP Server configured for this interface" +msgstr "Δεν υπάρχει ρυθμισμένος DHCP εξυπηρετητής για αυτή τη διεπαφή" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Δεν υπάρχουν αλυσίδες σε αυτόν τον πίνακα" + +msgid "No files found" +msgstr "Δε βρέθηκαν αρχεία" + +msgid "No information available" +msgstr "Δεν υπάρχουν πληροφορίες διαθέσιμες" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "Δεν υπάρχει παραμετροποιημένο δίκτυο σε αυτή τη συσκευή" + +msgid "No network name specified" +msgstr "Δεν έχει οριστεί όνομα δικτύου" + +msgid "No package lists available" +msgstr "Δεν υπάρχουν διαθέσιμες λίστες πακέτων" + +msgid "No password set!" +msgstr "Δεν έχει οριστεί κωδικός πρόσβασης!" + +msgid "No rules in this chain" +msgstr "Δεν υπάρχει κανόνας σε αυτή την αλυσίδα" + +msgid "No zone assigned" +msgstr "Δεν έχει ανατεθεί ζώνη" + +msgid "Noise" +msgstr "Θόρυβος" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Θόρυβος:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Κανένα" + +msgid "Normal" +msgstr "Φυσιολογικό" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "" + +msgid "Not connected" +msgstr "" + +msgid "Note: Configuration files will be erased." +msgstr "Σημείωση: Τα αρχεία παραμετροποίησης θα διαγραφούν." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Επισήμανση" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "Εντάξει" + +msgid "OPKG-Configuration" +msgstr "Παραμετροποίηση OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"Σε αυτή τη σελίδα μπορείτε να ρυθμίσετε τις διεπαφές δικτύου. Μπορείτε να " +"γεφυρώσετε πολλαπλές διεπαφές τικάροντας το πεδίο \"γεφύρωμα διεπαφών\" και " +"εισάγοντας τα ονόματα των διεπαφών δικτύου χωρισμένα με κενά. Μπορείτε " +"επίσης να χρησιμοποιήσετε παράσταση τύπου VLAN INTERFACE.VLANNR (π.χ.: eth0.1)." + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "Ένα ή περισσότερα πεδία περιέχουν μη έγκυρες τιμές!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Ένα ή περισσότερα πεδία δεν περιέχουν τιμές!" + +msgid "Open list..." +msgstr "" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Η επιλογή άλλαξε" + +msgid "Option removed" +msgstr "Η επιλογή αφαιρέθηκε" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Επιλογές" + +msgid "Other:" +msgstr "" + +msgid "Out" +msgstr "Έξοδος" + +msgid "Outbound:" +msgstr "" + +msgid "Outdoor Channels" +msgstr "Εξωτερικά Κανάλια" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "Επισκόπηση" + +msgid "Owner" +msgstr "Κάτοχος" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "Ενθυλάκωση PPPoA" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "Απαιτείται το πακέτο libiwinfo!" + +msgid "Package lists are older than 24 hours" +msgstr "Οι λίστες πακέτων έχουν να ανανεωθούν πάνω από 24 ώρες" + +msgid "Package name" +msgstr "Όνομα πακέτου" + +msgid "Packets" +msgstr "Πακέτα" + +msgid "Part of zone %q" +msgstr "Μέρος της ζώνης %q" + +msgid "Password" +msgstr "Κωδικός Πρόσβασης" + +msgid "Password authentication" +msgstr "Εξουσιοδότηση με κωδικό πρόσβασης" + +msgid "Password of Private Key" +msgstr "Κωδικός Πρόσβασης του Ιδιωτικού Κλειδιού" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "Ο κωδικός πρόσβασης άλλαξε επιτυχώς!" + +msgid "Path to CA-Certificate" +msgstr "Διαδρομή για Πιστοποιητικό CA" + +msgid "Path to Client-Certificate" +msgstr "Διαδρομή για Πιστοποιητικό-Πελάτη" + +msgid "Path to Private Key" +msgstr "Διαδρομή για Ιδιωτικό Κλειδί" + +msgid "Path to executable which handles the button event" +msgstr "Διαδρομή για το εκτελέσιμο που χειρίζεται το γεγονός του κουμπιού" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Εκτέλεση επανεκκίνησης" + +msgid "Perform reset" +msgstr "Διενέργεια αρχικοποίησης" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "Πκτ." + +msgid "Please enter your username and password." +msgstr "Παρακαλώ εισάγετε όνομα χρήστη και κωδικό πρόσβασης." + +msgid "Policy" +msgstr "Πολιτική" + +msgid "Port" +msgstr "Θύρα" + +msgid "Port status:" +msgstr "" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +#, fuzzy +msgid "Prevents client-to-client communication" +msgstr "Αποτρέπει την επικοινωνία μεταξύ πελατών" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Συνέχεια" + +msgid "Processes" +msgstr "Εργασίες" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Πρωτ." + +msgid "Protocol" +msgstr "Πρωτόκολλο" + +msgid "Protocol family" +msgstr "Οικογένεια πρωτοκόλλου" + +msgid "Protocol of the new interface" +msgstr "Πρωτόκολλο νέας διεπαφής" + +msgid "Protocol support is not installed" +msgstr "Η υποστήριξη πρωτοκόλλου δεν έχει εκγατασταθεί" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Ψευδό Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "Όριο RTS/CTS" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Διάβασμα του /etc/ethers για την παραμετροποίηση του " +"εξυπηρετητή DHCP" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "Αρχικοποίηση όλων των αλλαγών;" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "Αλλαγή πρωτοκόλλου;" + +msgid "Realtime Connections" +msgstr "Συνδέσεις πραγματικού χρόνου" + +msgid "Realtime Graphs" +msgstr "Γραφήματα πραγματικού χρόνου" + +msgid "Realtime Load" +msgstr "" + +msgid "Realtime Traffic" +msgstr "Κίνηση πραγματικού χρόνου" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "Επανεκκίνηση" + +msgid "Rebooting..." +msgstr "Επανεκκίνηση..." + +msgid "Reboots the operating system of your device" +msgstr "Επανεκκίνηση του λειτουργικού συστήματος της συσκευής σας" + +msgid "Receive" +msgstr "Λήψη" + +msgid "Receiver Antenna" +msgstr "Κεραία Λήψης" + +msgid "Reconnect this interface" +msgstr "Επανασύνδεση της διεπαφής" + +msgid "Reconnecting interface" +msgstr "Επανασύνδεση της διεπαφής" + +msgid "References" +msgstr "Αναφορές" + +msgid "Regulatory Domain" +msgstr "Ρυθμιστική Περιοχή" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "Απομακρυσμένη διεύθυνση IPv4" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Αφαίρεση" + +msgid "Repeat scan" +msgstr "Επανάληψη σάρωσης" + +msgid "Replace entry" +msgstr "Αντικατάσταση καταχώρησης" + +msgid "Replace wireless configuration" +msgstr "Αντικατάσταση ρυθμίσεων ασύρματης σύνδεσης" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Αρχικοποίηση" + +msgid "Reset Counters" +msgstr "Αρχικοποίηση Μετρητών" + +msgid "Reset to defaults" +msgstr "Αρχικοποίηση στις προεπιλεγμένες τιμές" + +msgid "Resolv and Hosts Files" +msgstr "Αρχεία Resolv και Hosts" + +msgid "Resolve file" +msgstr "Αρχείο Resolve" + +msgid "Restart" +msgstr "Επανεκκίνηση" + +msgid "Restart Firewall" +msgstr "Επανεκκίνηση Τείχους Προστασίας" + +msgid "Restore backup" +msgstr "Επαναφορά αντιγράφου ασφαλείας" + +msgid "Reveal/hide password" +msgstr "" + +msgid "Revert" +msgstr "Αναίρεση" + +msgid "Root" +msgstr "Root" + +msgid "Root directory for files served via TFTP" +msgstr "Κατάλογος Root για αρχεία που σερβίρονται μέσω TFTP" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Κωδικός Πρόσβασης Δρομολογητή" + +#, fuzzy +msgid "Routes" +msgstr "Διαδρομές" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Οι διαδρομές ορίζουν τη διεπαφή και πύλη από την οποία κάποιος υπολογιστής ή " +"δίκτυο μπορεί να είναι προσβάσιμο/ς." + +msgid "Run a filesystem check before mounting the device" +msgstr "Εκτέλεση ελέγχου του συστήματος αρχείων πριν προσαρτηθεί η συσκευή" + +msgid "Run filesystem check" +msgstr "Εκτέλεση ελέγχου συστήματος αρχείων" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "Πρόσβαση SSH" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "Κλειδιά SSH" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Αποθήκευση" + +msgid "Save & Apply" +msgstr "Αποθήκευση & Εφαρμογή" + +msgid "Save & Apply" +msgstr "Αποθήκευση & Εφαρμογή" + +msgid "Scan" +msgstr "Σάρωση" + +msgid "Scheduled Tasks" +msgstr "Προγραμματισμένες Εργασίες" + +msgid "Section added" +msgstr "" + +msgid "Section removed" +msgstr "" + +msgid "See \"mount\" manpage for details" +msgstr "Δείτε το manpage του \"mount\" για λεπτομέρειες" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +#, fuzzy +msgid "Separate Clients" +msgstr "Απομόνωση Πελατών" + +msgid "Separate WDS" +msgstr "Ξεχωριστά WDS" + +msgid "Server Settings" +msgstr "Ρυθμίσεις Εξυπηρετητή" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Όνομα Υπηρεσίας" + +msgid "Service Type" +msgstr "Είδος Υπηρεσίας" + +msgid "Services" +msgstr "Υπηρεσίες" + +msgid "Set up Time Synchronization" +msgstr "" + +msgid "Setup DHCP Server" +msgstr "Ρύθμιση Εξυπηρετητή DHCP" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "Απενεργοποίηση αυτής της διεπαφής" + +msgid "Shutdown this network" +msgstr "Απενεργοποίηση αυτού του δικτύου" + +msgid "Signal" +msgstr "Σήμα" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Σήμα:" + +msgid "Size" +msgstr "Μέγεθος" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Παράκαμψη" + +msgid "Skip to content" +msgstr "Παράκαμψη σε περιεχόμενο" + +msgid "Skip to navigation" +msgstr "Παράκαμψη σε πλοήγηση" + +msgid "Slot time" +msgstr "" + +msgid "Software" +msgstr "Λογισμικό" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Κάποια πεδία δεν είναι έγκυρα, δεν μπορούν να αποθηκευτούν οι τιμές!" + +msgid "Sorry, the object you requested was not found." +msgstr "" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "Ταξινόμηση" + +msgid "Source" +msgstr "Πηγή" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +#, fuzzy +msgid "Specifies the listening port of this Dropbear instance" +msgstr "" +"Προσδιορίζει την θύρα ακρόασης αυτού του στιγμιοτύπου Dropbear" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Ορίστε το κρυφό κλειδί κρυπτογράφησης." + +msgid "Start" +msgstr "Αρχή" + +msgid "Start priority" +msgstr "Προτεραιότητα εκκίνησης" + +msgid "Startup" +msgstr "Εκκίνηση" + +msgid "Static IPv4 Routes" +msgstr "Στατικές Διαδρομές IPv4" + +msgid "Static IPv6 Routes" +msgstr "Στατικές Διαδρομές IPv6" + +msgid "Static Leases" +msgstr "Στατικά Leases" + +msgid "Static Routes" +msgstr "Στατικές Διαδρομές" + +msgid "Static WDS" +msgstr "" + +msgid "Static address" +msgstr "Στατική διεύθυνση" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +msgid "Status" +msgstr "Κατάσταση" + +msgid "Stop" +msgstr "" + +msgid "Strict order" +msgstr "Αυστηρή σειρά" + +msgid "Submit" +msgstr "Υποβολή" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "Switch" + +msgid "Switch %q" +msgstr "" + +msgid "Switch %q (%s)" +msgstr "" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "" + +msgid "Sync with browser" +msgstr "" + +msgid "Synchronizing..." +msgstr "Συγχρονισμός..." + +msgid "System" +msgstr "Σύστημα" + +msgid "System Log" +msgstr "Καταγραφή Συστήματος" + +msgid "System Properties" +msgstr "Ιδιότητες Συστήματος" + +msgid "System log buffer size" +msgstr "" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "Ρυθμίσεις TFTP" + +msgid "TFTP server root" +msgstr "" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "" + +msgid "Table" +msgstr "Πίνακας" + +msgid "Target" +msgstr "Στόχος" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Τερματισμός" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Οι επιτρεπόμενοι χαρακτήρες είναι: A-Z, a-z, " +"0-9 και _" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"Το αρχείο συσκευής της μνήμης ή του διαμέρισματος (π.χ. /dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"Το σύστημα αρχείων που χρησιμοποιήθηκε για διαμόρφωση (π.χ. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "Οι παρακάτω αλλαγές έχουν υποβληθεί" + +msgid "The following changes have been reverted" +msgstr "Οι παρακάτω αλλαγές έχουν αναιρεθεί" + +msgid "The following rules are currently active on this system." +msgstr "Οι παρακάτω κανόνες είναι αυτή τη στιγμή ενεργοί σε αυτό το σύστημα." + +msgid "The given network name is not unique" +msgstr "Το παρεχόμενο όνομα δικτύου δεν είναι μοναδικό" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"Το σύστημα φλασάρετε τώρα.
ΜΗ ΣΒΗΣΕΤΕ ΤΗΝ ΣΥΣΚΕΥΗ!
Περιμένετε " +"λίγα λεπτά για να δοκιμάσετε επανασύνδεση. Ανάλογα με τις ρυθμίσεις σας, " +"είναι πιθανό να χρειαστεί να ανανεώσετε την διεύθυνση του υπολογιστή σας για " +"να αποκτήσετε ξανά πρόσβαση στη συσκευή." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"Η εικόνα που ανεβάσατε δεν περιέχει κάποια υποστηριζόμενη μορφή. Βεβαιωθείτε " +"ότι επιλέξατε την γενική μορφή εικόνας για την πλατφόρμα σας." + +msgid "There are no active leases." +msgstr "Δεν υπάρχουν ενεργά leases." + +msgid "There are no pending changes to apply!" +msgstr "" + +msgid "There are no pending changes to revert!" +msgstr "" + +msgid "There are no pending changes!" +msgstr "" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Αυτός είναι ο μόνος DHCP στο τοπικό δίκτυο" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" +"Αυτό είναι το crontab του συστήματος στο οποίο μπορούν να οριστούν " +"προγραμματισμένες εργασίες." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"Αυτή η λίστα δίνει μία εικόνα των τρέχοντων εργασιών συστήματος και της " +"κατάστασής τους." + +msgid "This page allows the configuration of custom button actions" +msgstr "" + +msgid "This page gives an overview over currently active network connections." +msgstr "" +"Αυτή η σελίδα δίνει μία εικόνα για τις τρέχουσες ενεργές συνδέσεις δικτύου." + +msgid "This section contains no values yet" +msgstr "Αυτό το τμήμα δεν περιέχει τιμές ακόμη" + +msgid "Time Synchronization" +msgstr "" + +msgid "Time Synchronization is not configured yet." +msgstr "" + +msgid "Timezone" +msgstr "Ζώνη ώρας" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Διαθέσιμο Συνολικά" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "Κίνηση" + +msgid "Transfer" +msgstr "Μεταφέρθηκαν" + +msgid "Transmission Rate" +msgstr "Ρυθμός Εκπομπής" + +msgid "Transmit" +msgstr "Εκπομπή" + +msgid "Transmit Power" +msgstr "Ισχύς Εκπομπής" + +msgid "Transmitter Antenna" +msgstr "Κεραία Εκπομπής" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "Διεπαφή Τούνελ" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Λειτουργία Turbo" + +msgid "Tx-Power" +msgstr "Ισχύς Εκπομπής" + +msgid "Type" +msgstr "Τύπος" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "Συσκευή USB" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Άγνωστο" + +msgid "Unknown Error, password not changed!" +msgstr "Άγνωστο Λάθος. ο κωδικός πρόσβασης δεν άλλαξε!" + +msgid "Unmanaged" +msgstr "" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Μη-αποθηκευμένες Αλλαγές" + +msgid "Unsupported protocol type." +msgstr "" + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "" + +msgid "Uploaded File" +msgstr "Το Αρχείο Ανέβηκε" + +msgid "Uptime" +msgstr "Χρόνος εν λειτουργία" + +msgid "Use /etc/ethers" +msgstr "Χρήση /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Χρήση πύλης DHCP" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "" + +msgid "Use default gateway" +msgstr "Χρήση προεπιλεγμένης πύλης" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "Σε χρήση" + +msgid "Used Key Slot" +msgstr "Χρησιμοποιούμενη Υποδοχή Κλειδιού" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Όνομα Χρήστη" + +msgid "VC-Mux" +msgstr "" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "" + +msgid "VLANs on %q (%s)" +msgstr "" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "Εξυπηρετητής VPN" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "Έκδοση" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "" + +msgid "WEP Shared Key" +msgstr "Μοιραζόμενο κλειδί WEP" + +msgid "WEP passphrase" +msgstr "Κωδική φράση WEP" + +msgid "WMM Mode" +msgstr "Υποστήριξη WMM" + +msgid "WPA passphrase" +msgstr "Κωδική φράση WPA" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Προειδοποίηση" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Ασύρματο" + +msgid "Wireless Adapter" +msgstr "Ασύρματος Προσαρμογέας" + +msgid "Wireless Network" +msgstr "Ασύρματο Δίκτυο" + +msgid "Wireless Overview" +msgstr "Επισκόπηση Ασύρματου Δικτύου" + +msgid "Wireless Security" +msgstr "Ασφάλεια Ασύρματου Δικτύου" + +msgid "Wireless is disabled or not associated" +msgstr "Το ασύρματο δίκτυο είναι απενεργοποιημένο ή μη συνδεδεμένο" + +msgid "Wireless is restarting..." +msgstr "Το ασύρματο δίκτυο επανεκκινείται..." + +msgid "Wireless network is disabled" +msgstr "Το ασύρματο δίκτυο είναι ανενεργό" + +msgid "Wireless network is enabled" +msgstr "Το ασύρματο δίκτυο είναι ενεργό" + +msgid "Wireless restarted" +msgstr "Το ασύρματο δίκτυο επανεκκινήθηκε" + +msgid "Wireless shut down" +msgstr "Το ασύρματο δίκτυο τερματίστηκε" + +msgid "Write received DNS requests to syslog" +msgstr "Καταγραφή των ληφθέντων DNS αιτήσεων στο syslog" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Υποστήριξη XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Μπορείτε να ενεργοποιήσετε ή να απενεργοποιήσετε σενάρια εκκίνησης εδώ. Οι " +"αλλαγές θα εφαρμοστούν αφού επανεκκινήσετε τη συσκευή.
Προειδοποίηση: Αν απενεργοποιήσετε απαραίτητα σενάρια εκκίνησης " +"όπως το \"network\", η συσκευή σας μπορεί να καταστεί μη-προσβάσιμη!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "" + +msgid "auto" +msgstr "αυτόματα" + +#, fuzzy +msgid "automatic" +msgstr "στατικό" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "" + +msgid "create:" +msgstr "" + +#, fuzzy +msgid "creates a bridge over specified interface(s)" +msgstr "δημιουργεί μία γέφυρα μεταξύ των ορισμένων διεπαφών" + +msgid "dB" +msgstr "" + +msgid "dBm" +msgstr "" + +msgid "disable" +msgstr "ανενεργό" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"αρχείο όπου θα αποθηκεύονται τα Leases του DHCP" + +msgid "forward" +msgstr "προώθηση" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "βοήθεια" + +msgid "hidden" +msgstr "" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "αν ο στόχος είναι ένα δίκτυο" + +msgid "input" +msgstr "είσοδος" + +msgid "kB" +msgstr "" + +msgid "kB/s" +msgstr "" + +msgid "kbit/s" +msgstr "" + +msgid "local DNS file" +msgstr "τοπικό αρχείο DNS" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "όχι" + +msgid "no link" +msgstr "" + +msgid "none" +msgstr "κανένα" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "κλειστό" + +msgid "on" +msgstr "ανοιχτό" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "unlimited" +msgstr "απεριόριστα" + +msgid "unspecified" +msgstr "μη-καθορισμένο" + +msgid "unspecified -or- create:" +msgstr "μη-καθορισμένο -ή- δημιουργείστε:" + +msgid "untagged" +msgstr "" + +msgid "yes" +msgstr "ναι" + +msgid "« Back" +msgstr "« Πίσω" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "Ένα επιπλέον δίκτυο θα δημιουργηθεί εάν αυτό αφεθεί κενό" + +#~ msgid "Port %d" +#~ msgstr "Θύρα %d" + +#~ msgid "VLAN Interface" +#~ msgstr "Διεπαφή VLAN" diff --git a/feeds/luci/modules/luci-base/po/en/base.po b/feeds/luci/modules/luci-base/po/en/base.po new file mode 100644 index 0000000..4afe616 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/en/base.po @@ -0,0 +1,3720 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-04-03 08:44+0200\n" +"Last-Translator: juhosg \n" +"Language-Team: LANGUAGE \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d minute window, %d second interval)" + +msgid "(%s available)" +msgstr "(%s available)" + +msgid "(empty)" +msgstr "(empty)" + +msgid "(no interfaces attached)" +msgstr "(no interfaces attached)" + +msgid "-- Additional Field --" +msgstr "-- Additional Field --" + +msgid "-- Please choose --" +msgstr "-- Please choose --" + +msgid "-- custom --" +msgstr "-- custom --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "1 Minute Load:" + +msgid "15 Minute Load:" +msgstr "15 Minute Load:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "5 Minute Load:" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "DNS query port" + +msgid "DNS server port" +msgstr "DNS server port" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"DNS servers will be queried in the " +"order of the resolvfile" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-Address" + +msgid "IPv4-Gateway" +msgstr "IPv4-Gateway" + +msgid "IPv4-Netmask" +msgstr "IPv4-Netmask" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-Address or Network " +"(CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-Gateway" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "LED Configuration" + +msgid "LED Name" +msgstr "LED Name" + +msgid "MAC-Address" +msgstr "MAC-Address" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Max. DHCP leases" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Max. EDNS0 packet size" + +msgid "Max. concurrent queries" +msgstr "Max. concurrent queries" + +msgid "%s - %s" +msgstr "" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "AR Support" + +msgid "ARP retry threshold" +msgstr "ARP retry threshold" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "ATM Bridges" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "ATM Virtual Channel Identifier (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "ATM Virtual Path Identifier (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." + +msgid "ATM device number" +msgstr "ATM device number" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Access Concentrator" + +msgid "Access Point" +msgstr "Access Point" + +msgid "Action" +msgstr "Action" + +msgid "Actions" +msgstr "Actions" + +msgid "Activate this network" +msgstr "Activate this network" + +msgid "Active IPv4-Routes" +msgstr "Active IPv4-Routes" + +msgid "Active IPv6-Routes" +msgstr "Active IPv6-Routes" + +msgid "Active Connections" +msgstr "Active Connections" + +msgid "Active DHCP Leases" +msgstr "" + +msgid "Active DHCPv6 Leases" +msgstr "" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Add" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "Add local domain suffix to names served from hosts files" + +msgid "Add new interface..." +msgstr "Add new interface..." + +msgid "Additional Hosts files" +msgstr "Additional Hosts files" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Address" + +msgid "Address to access local relay bridge" +msgstr "Address to access local relay bridge" + +msgid "Administration" +msgstr "Administration" + +msgid "Advanced Settings" +msgstr "Advanced Settings" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Alert" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "Allow SSH password authentication" + +msgid "Allow all except listed" +msgstr "Allow all except listed" + +msgid "Allow listed only" +msgstr "Allow listed only" + +msgid "Allow localhost" +msgstr "Allow localhost" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "Allow remote hosts to connect to local SSH forwarded ports" + +msgid "Allow root logins with password" +msgstr "Allow root logins with password" + +msgid "Allow the root user to login with password" +msgstr "Allow the root user to login with password" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antenna 1" + +msgid "Antenna 2" +msgstr "Antenna 2" + +msgid "Antenna Configuration" +msgstr "" + +msgid "Any zone" +msgstr "Any zone" + +msgid "Apply" +msgstr "Apply" + +msgid "Applying changes" +msgstr "Applying changes" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Assign interfaces..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Associated Stations" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Authentication" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Authoritative" + +msgid "Authorization Required" +msgstr "Authorization Required" + +msgid "Auto Refresh" +msgstr "Auto Refresh" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Available" + +msgid "Available packages" +msgstr "Available packages" + +msgid "Average:" +msgstr "Average:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Back" + +msgid "Back to Overview" +msgstr "Back to Overview" + +msgid "Back to configuration" +msgstr "Back to configuration" + +msgid "Back to overview" +msgstr "Back to overview" + +msgid "Back to scan results" +msgstr "Back to scan results" + +msgid "Background Scan" +msgstr "Background Scan" + +msgid "Backup / Flash Firmware" +msgstr "Backup / Flash Firmware" + +msgid "Backup / Restore" +msgstr "Backup / Restore" + +msgid "Backup file list" +msgstr "Backup file list" + +msgid "Bad address specified!" +msgstr "Bad address specified!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Bogus NX Domain Override" +msgstr "Bogus NX Domain Override" + +msgid "Bridge" +msgstr "Bridge" + +msgid "Bridge interfaces" +msgstr "Bridge interfaces" + +msgid "Bridge unit number" +msgstr "Bridge unit number" + +msgid "Bring up on boot" +msgstr "Bring up on boot" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "" + +msgid "Buffered" +msgstr "Buffered" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Buttons" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "CPU usage (%)" + +msgid "Cancel" +msgstr "Cancel" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Chain" + +msgid "Changes" +msgstr "Changes" + +msgid "Changes applied." +msgstr "Changes applied." + +msgid "Changes the administrator password for accessing the device" +msgstr "Changes the administrator password for accessing the device" + +msgid "Channel" +msgstr "Channel" + +msgid "Check" +msgstr "Check" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Checksum" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" + +msgid "Cipher" +msgstr "Cipher" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." + +msgid "Client" +msgstr "Client" + +msgid "Client ID to send when requesting DHCP" +msgstr "Client ID to send when requesting DHCP" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" + +msgid "Close list..." +msgstr "Close list..." + +msgid "Collecting data..." +msgstr "Collecting data..." + +msgid "Command" +msgstr "Command" + +msgid "Common Configuration" +msgstr "Common Configuration" + +msgid "Compression" +msgstr "Compression" + +msgid "Configuration" +msgstr "Configuration" + +msgid "Configuration applied." +msgstr "Configuration applied." + +msgid "Configuration files will be kept." +msgstr "Configuration files will be kept." + +msgid "Confirmation" +msgstr "Confirmation" + +msgid "Connect" +msgstr "Connect" + +msgid "Connected" +msgstr "Connected" + +msgid "Connection Limit" +msgstr "Connection Limit" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Connections" + +msgid "Country" +msgstr "Country" + +msgid "Country Code" +msgstr "Country Code" + +msgid "Cover the following interface" +msgstr "Cover the following interface" + +msgid "Cover the following interfaces" +msgstr "Cover the following interfaces" + +msgid "Create / Assign firewall-zone" +msgstr "Create / Assign firewall-zone" + +msgid "Create Interface" +msgstr "Create Interface" + +msgid "Create a bridge over multiple interfaces" +msgstr "Create a bridge over multiple interfaces" + +msgid "Critical" +msgstr "Critical" + +msgid "Cron Log Level" +msgstr "Cron Log Level" + +msgid "Custom Interface" +msgstr "Custom Interface" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Customizes the behaviour of the device LEDs if possible." + +msgid "DHCP Leases" +msgstr "DHCP Leases" + +msgid "DHCP Server" +msgstr "DHCP Server" + +msgid "DHCP and DNS" +msgstr "DHCP and DNS" + +msgid "DHCP client" +msgstr "DHCP client" + +msgid "DHCP-Options" +msgstr "DHCP-Options" + +msgid "DHCPv6 Leases" +msgstr "" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "DNS forwardings" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Debug" + +msgid "Default %d" +msgstr "Default %d" + +msgid "Default gateway" +msgstr "Default gateway" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Default state" + +msgid "Define a name for this network." +msgstr "Define a name for this network." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." + +msgid "Delete" +msgstr "Delete" + +msgid "Delete this network" +msgstr "Delete this network" + +msgid "Description" +msgstr "Description" + +msgid "Design" +msgstr "Design" + +msgid "Destination" +msgstr "Destination" + +msgid "Device" +msgstr "Device" + +msgid "Device Configuration" +msgstr "Device Configuration" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnostics" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Directory" + +msgid "Disable" +msgstr "" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" + +msgid "Disable DNS setup" +msgstr "" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Disable HW-Beacon timer" + +msgid "Disabled" +msgstr "Disabled" + +msgid "Discard upstream RFC1918 responses" +msgstr "" + +msgid "Displaying only packages containing" +msgstr "" + +msgid "Distance Optimization" +msgstr "Distance Optimization" + +msgid "Distance to farthest network member in meters." +msgstr "Distance to farthest network member in meters." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Diversity" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "Do not send probe responses" + +msgid "Domain required" +msgstr "Domain required" + +msgid "Domain whitelist" +msgstr "" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Don't forward DNS-Requests " +"without DNS-Name" + +msgid "Download and install package" +msgstr "Download and install package" + +msgid "Download backup" +msgstr "" + +msgid "Dropbear Instance" +msgstr "" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"Dynamic DHCP" + +msgid "Dynamic tunnel" +msgstr "" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "EAP-Method" + +msgid "Edit" +msgstr "Edit" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "" + +msgid "Edit this network" +msgstr "" + +msgid "Emergency" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable STP" +msgstr "Enable STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +msgid "Enable NTP client" +msgstr "" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "" + +msgid "Enable VLAN functionality" +msgstr "" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "" + +msgid "Enable this swap" +msgstr "" + +msgid "Enable/Disable" +msgstr "Enable/Disable" + +msgid "Enabled" +msgstr "Enabled" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Enables the Spanning Tree Protocol on this bridge" + +msgid "Encapsulation mode" +msgstr "" + +msgid "Encryption" +msgstr "Encryption" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "" + +msgid "Error" +msgstr "Error" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Ethernet Adapter" + +msgid "Ethernet Switch" +msgstr "Ethernet Switch" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "" + +msgid "External system log server port" +msgstr "" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Fast Frames" + +msgid "File" +msgstr "" + +msgid "Filename of the boot image advertised to clients" +msgstr "" + +msgid "Filesystem" +msgstr "Filesystem" + +msgid "Filter" +msgstr "Filter" + +msgid "Filter private" +msgstr "Filter private" + +msgid "Filter useless" +msgstr "Filter useless" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "" + +msgid "Find package" +msgstr "Find package" + +msgid "Finish" +msgstr "" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall Settings" +msgstr "Firewall Settings" + +msgid "Firewall Status" +msgstr "Firewall Status" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "" + +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +msgid "Flash Firmware" +msgstr "Flash Firmware" + +msgid "Flash image..." +msgstr "" + +msgid "Flash new firmware image" +msgstr "" + +msgid "Flash operations" +msgstr "" + +msgid "Flashing..." +msgstr "" + +msgid "Force" +msgstr "Force" + +msgid "Force CCMP (AES)" +msgstr "" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" + +msgid "Force TKIP" +msgstr "" + +msgid "Force TKIP and CCMP (AES)" +msgstr "" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "" + +msgid "Forwarding mode" +msgstr "" + +msgid "Fragmentation Threshold" +msgstr "Fragmentation Threshold" + +msgid "Frame Bursting" +msgstr "Frame Bursting" + +msgid "Free" +msgstr "" + +msgid "Free space" +msgstr "" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "" + +msgid "GPRS only" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Gateway ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General Setup" +msgstr "General Setup" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "Go to relevant configuration page" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Handler" + +msgid "Hang Up" +msgstr "Hang Up" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "" + +msgid "Hide ESSID" +msgstr "Hide ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Host entries" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "Host-IP or Network" + +msgid "Hostname" +msgstr "Hostname" + +msgid "Hostname to send when requesting DHCP" +msgstr "" + +msgid "Hostnames" +msgstr "Hostnames" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "IP address" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 Firewall" +msgstr "" + +msgid "IPv4 WAN Status" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "IPv4 gateway" +msgstr "" + +msgid "IPv4 netmask" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "" + +msgid "IPv6 address" +msgstr "" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "IPv6 prefix" +msgstr "" + +msgid "IPv6 prefix length" +msgstr "" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +msgid "Identity" +msgstr "Identity" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." + +msgid "Ignore /etc/hosts" +msgstr "Ignore /etc/hosts" + +msgid "Ignore interface" +msgstr "Ignore interface" + +msgid "Ignore resolve file" +msgstr "Ignore resolve file" + +msgid "Image" +msgstr "" + +msgid "In" +msgstr "In" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "" + +msgid "Inbound:" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Initscript" +msgstr "Initscript" + +msgid "Initscripts" +msgstr "Initscripts" + +msgid "Install" +msgstr "Install" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "" + +msgid "Install protocol extensions..." +msgstr "" + +msgid "Installed packages" +msgstr "" + +msgid "Interface" +msgstr "Interface" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface Overview" +msgstr "" + +msgid "Interface is reconnecting..." +msgstr "" + +msgid "Interface is shutting down..." +msgstr "" + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "" + +msgid "Interface reconnected" +msgstr "" + +msgid "Interface shut down" +msgstr "" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "" + +msgid "Invalid" +msgstr "Invalid input value" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "Invalid username and/or password! Please try again." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"It appears that you try to flash an image that does not fit into the flash " +"memory, please verify the image file!" + +msgid "Java Script required!" +msgstr "" + +msgid "Join Network" +msgstr "Join Network" + +msgid "Join Network: Wireless Scan" +msgstr "" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "" + +msgid "Kernel Log" +msgstr "Kernel Log" + +msgid "Kernel Version" +msgstr "" + +msgid "Key" +msgstr "Key" + +msgid "Key #%d" +msgstr "" + +msgid "Kill" +msgstr "Kill" + +msgid "L2TP" +msgstr "" + +msgid "L2TP Server" +msgstr "" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "" + +msgid "LLC" +msgstr "" + +msgid "Label" +msgstr "" + +msgid "Language" +msgstr "Language" + +msgid "Language and Style" +msgstr "" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Leasefile" +msgstr "Leasefile" + +msgid "Leasetime" +msgstr "Leasetime" + +msgid "Leasetime remaining" +msgstr "Leasetime remaining" + +msgid "Leave empty to autodetect" +msgstr "" + +msgid "Leave empty to use the current WAN address" +msgstr "" + +msgid "Legend:" +msgstr "" + +msgid "Limit" +msgstr "Limit" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Link On" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "Load" + +msgid "Load Average" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "" + +msgid "Local IPv6 address" +msgstr "" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "" + +msgid "Local Time" +msgstr "Local Time" + +msgid "Local domain" +msgstr "" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "Localise queries" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "" + +msgid "Log queries" +msgstr "Log queries" + +msgid "Logging" +msgstr "" + +msgid "Login" +msgstr "Login" + +msgid "Logout" +msgstr "Logout" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "MAC-Address Filter" +msgstr "MAC-Address Filter" + +msgid "MAC-Filter" +msgstr "MAC-Filter" + +msgid "MAC-List" +msgstr "MAC-List" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Maximum Rate" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +msgid "Maximum hold time" +msgstr "Maximum hold time" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "" + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "Memory" + +msgid "Memory usage (%)" +msgstr "Memory usage (%)" + +msgid "Metric" +msgstr "Metric" + +msgid "Minimum Rate" +msgstr "Minimum Rate" + +msgid "Minimum hold time" +msgstr "Minimum hold time" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "Mode" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Modem device" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "Mount Point" + +msgid "Mount Points" +msgstr "Mount Points" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "" + +msgid "Mount point" +msgstr "" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Mounted file systems" + +msgid "Move down" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Multicast Rate" +msgstr "Multicast Rate" + +msgid "Multicast address" +msgstr "" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Name" + +msgid "Name of the new interface" +msgstr "" + +msgid "Name of the new network" +msgstr "Name of the new network" + +msgid "Navigation" +msgstr "Navigation" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "Network" + +msgid "Network Utilities" +msgstr "" + +msgid "Network boot image" +msgstr "" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "" + +msgid "No DHCP Server configured for this interface" +msgstr "" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "No chains in this table" + +msgid "No files found" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "" + +msgid "No network name specified" +msgstr "" + +msgid "No package lists available" +msgstr "" + +msgid "No password set!" +msgstr "" + +msgid "No rules in this chain" +msgstr "No rules in this chain" + +msgid "No zone assigned" +msgstr "" + +msgid "Noise" +msgstr "Noise" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "" + +msgid "Not connected" +msgstr "" + +msgid "Note: Configuration files will be erased." +msgstr "" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "OPKG-Configuration" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "" + +msgid "Open list..." +msgstr "" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "" + +msgid "Option removed" +msgstr "" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Options" + +msgid "Other:" +msgstr "" + +msgid "Out" +msgstr "Out" + +msgid "Outbound:" +msgstr "" + +msgid "Outdoor Channels" +msgstr "Outdoor Channels" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "Overview" + +msgid "Owner" +msgstr "Owner" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "" + +msgid "PPP" +msgstr "" + +msgid "PPPoA Encapsulation" +msgstr "PPPoA Encapsulation" + +msgid "PPPoATM" +msgstr "" + +msgid "PPPoE" +msgstr "" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Package lists are older than 24 hours" +msgstr "" + +msgid "Package name" +msgstr "Package name" + +msgid "Packets" +msgstr "Packets" + +msgid "Part of zone %q" +msgstr "" + +msgid "Password" +msgstr "Password" + +msgid "Password authentication" +msgstr "Password authentication" + +msgid "Password of Private Key" +msgstr "Password of Private Key" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Path to CA-Certificate" +msgstr "Path to CA-Certificate" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "Path to Private Key" + +msgid "Path to executable which handles the button event" +msgstr "" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Perform reboot" + +msgid "Perform reset" +msgstr "" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "Physical Settings" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "Pkts." + +msgid "Please enter your username and password." +msgstr "Please enter your username and password." + +msgid "Policy" +msgstr "Policy" + +msgid "Port" +msgstr "Port" + +msgid "Port status:" +msgstr "" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Prevents client-to-client communication" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Proceed" + +msgid "Processes" +msgstr "Processes" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protocol" + +msgid "Protocol family" +msgstr "" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "RTS/CTS Threshold" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Read /etc/ethers to configure the DHCP-Server" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "" + +msgid "Realtime Connections" +msgstr "" + +msgid "Realtime Graphs" +msgstr "" + +msgid "Realtime Load" +msgstr "" + +msgid "Realtime Traffic" +msgstr "" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "Reboot" + +msgid "Rebooting..." +msgstr "" + +msgid "Reboots the operating system of your device" +msgstr "Reboots the operating system of your device" + +msgid "Receive" +msgstr "Receive" + +msgid "Receiver Antenna" +msgstr "Receiver Antenna" + +msgid "Reconnect this interface" +msgstr "" + +msgid "Reconnecting interface" +msgstr "" + +msgid "References" +msgstr "References" + +msgid "Regulatory Domain" +msgstr "Regulatory Domain" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Remove" + +msgid "Repeat scan" +msgstr "Repeat scan" + +msgid "Replace entry" +msgstr "Replace entry" + +msgid "Replace wireless configuration" +msgstr "" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Reset" + +msgid "Reset Counters" +msgstr "Reset Counters" + +msgid "Reset to defaults" +msgstr "" + +msgid "Resolv and Hosts Files" +msgstr "" + +msgid "Resolve file" +msgstr "" + +msgid "Restart" +msgstr "Restart" + +msgid "Restart Firewall" +msgstr "Restart Firewall" + +msgid "Restore backup" +msgstr "Restore backup" + +msgid "Reveal/hide password" +msgstr "" + +msgid "Revert" +msgstr "Revert" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "" + +msgid "Routes" +msgstr "Routes" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Save" + +msgid "Save & Apply" +msgstr "Save & Apply" + +msgid "Save & Apply" +msgstr "" + +msgid "Scan" +msgstr "Scan" + +msgid "Scheduled Tasks" +msgstr "Scheduled Tasks" + +msgid "Section added" +msgstr "" + +msgid "Section removed" +msgstr "" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "Separate Clients" + +msgid "Separate WDS" +msgstr "Separate WDS" + +msgid "Server Settings" +msgstr "" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "" + +msgid "Service Type" +msgstr "" + +msgid "Services" +msgstr "Services" + +msgid "Set up Time Synchronization" +msgstr "" + +msgid "Setup DHCP Server" +msgstr "" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "" + +msgid "Shutdown this network" +msgstr "" + +msgid "Signal" +msgstr "Signal" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "" + +msgid "Size" +msgstr "Size" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Skip" + +msgid "Skip to content" +msgstr "Skip to content" + +msgid "Skip to navigation" +msgstr "Skip to navigation" + +msgid "Slot time" +msgstr "Slot time" + +msgid "Software" +msgstr "Software" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "" + +msgid "Sorry, the object you requested was not found." +msgstr "" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "" + +msgid "Source" +msgstr "Source" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "Specifies the button state to handle" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "" + +msgid "Start" +msgstr "Start" + +msgid "Start priority" +msgstr "Start priority" + +msgid "Startup" +msgstr "" + +msgid "Static IPv4 Routes" +msgstr "Static IPv4 Routes" + +msgid "Static IPv6 Routes" +msgstr "Static IPv6 Routes" + +msgid "Static Leases" +msgstr "Static Leases" + +msgid "Static Routes" +msgstr "Static Routes" + +msgid "Static WDS" +msgstr "" + +msgid "Static address" +msgstr "" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +msgid "Status" +msgstr "Status" + +msgid "Stop" +msgstr "Stop" + +msgid "Strict order" +msgstr "Strict order" + +msgid "Submit" +msgstr "Submit" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "Switch" + +msgid "Switch %q" +msgstr "" + +msgid "Switch %q (%s)" +msgstr "" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "" + +msgid "Sync with browser" +msgstr "" + +msgid "Synchronizing..." +msgstr "" + +msgid "System" +msgstr "System" + +msgid "System Log" +msgstr "System Log" + +msgid "System Properties" +msgstr "" + +msgid "System log buffer size" +msgstr "" + +msgid "TCP:" +msgstr "" + +msgid "TFTP Settings" +msgstr "" + +msgid "TFTP server root" +msgstr "" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "" + +msgid "Table" +msgstr "Table" + +msgid "Target" +msgstr "Target" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Terminate" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"The filesystem that was used to format the memory (e.g. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "" + +msgid "The following changes have been reverted" +msgstr "The following changes have been reverted" + +msgid "The following rules are currently active on this system." +msgstr "The following rules are currently active on this system." + +msgid "The given network name is not unique" +msgstr "" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes until you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." + +msgid "There are no active leases." +msgstr "" + +msgid "There are no pending changes to apply!" +msgstr "" + +msgid "There are no pending changes to revert!" +msgstr "" + +msgid "There are no pending changes!" +msgstr "" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"This is the only DHCP in the local network" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "This is the system crontab in which scheduled tasks can be defined." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"This list gives an overview over currently running system processes and " +"their status." + +msgid "This page allows the configuration of custom button actions" +msgstr "" + +msgid "This page gives an overview over currently active network connections." +msgstr "This page gives an overview over currently active network connections." + +msgid "This section contains no values yet" +msgstr "This section contains no values yet" + +msgid "Time Synchronization" +msgstr "" + +msgid "Time Synchronization is not configured yet." +msgstr "" + +msgid "Timezone" +msgstr "Timezone" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "Traffic" + +msgid "Transfer" +msgstr "Transfer" + +msgid "Transmission Rate" +msgstr "Transmission Rate" + +msgid "Transmit" +msgstr "Transmit" + +msgid "Transmit Power" +msgstr "Transmit Power" + +msgid "Transmitter Antenna" +msgstr "Transmitter Antenna" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Turbo Mode" + +msgid "Tx-Power" +msgstr "" + +msgid "Type" +msgstr "Type" + +msgid "UDP:" +msgstr "" + +msgid "UMTS only" +msgstr "" + +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +msgid "USB Device" +msgstr "" + +msgid "UUID" +msgstr "" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Unknown Error, password not changed!" +msgstr "" + +msgid "Unmanaged" +msgstr "" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Unsaved Changes" + +msgid "Unsupported protocol type." +msgstr "" + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "" + +msgid "Uploaded File" +msgstr "Uploaded File" + +msgid "Uptime" +msgstr "Uptime" + +msgid "Use /etc/ethers" +msgstr "Use /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "" + +msgid "Use default gateway" +msgstr "" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "Used" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Username" + +msgid "VC-Mux" +msgstr "" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "" + +msgid "VLANs on %q (%s)" +msgstr "" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "Version" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "" + +msgid "WEP Shared Key" +msgstr "" + +msgid "WEP passphrase" +msgstr "" + +msgid "WMM Mode" +msgstr "WMM Mode" + +msgid "WPA passphrase" +msgstr "" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless Adapter" +msgstr "Wireless Adapter" + +msgid "Wireless Network" +msgstr "Wireless Network" + +msgid "Wireless Overview" +msgstr "Wireless Overview" + +msgid "Wireless Security" +msgstr "Wireless Security" + +msgid "Wireless is disabled or not associated" +msgstr "" + +msgid "Wireless is restarting..." +msgstr "" + +msgid "Wireless network is disabled" +msgstr "" + +msgid "Wireless network is enabled" +msgstr "" + +msgid "Wireless restarted" +msgstr "" + +msgid "Wireless shut down" +msgstr "" + +msgid "Write received DNS requests to syslog" +msgstr "" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "XR Support" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "" + +msgid "auto" +msgstr "auto" + +msgid "automatic" +msgstr "automatic" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "" + +msgid "create:" +msgstr "" + +msgid "creates a bridge over specified interface(s)" +msgstr "creates a bridge over specified interface(s)" + +msgid "dB" +msgstr "" + +msgid "dBm" +msgstr "" + +msgid "disable" +msgstr "disable" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"file where given DHCP-leases will be stored" + +msgid "forward" +msgstr "" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "help" + +msgid "hidden" +msgstr "" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "if target is a network" + +msgid "input" +msgstr "" + +msgid "kB" +msgstr "" + +msgid "kB/s" +msgstr "" + +msgid "kbit/s" +msgstr "" + +msgid "local DNS file" +msgstr "local DNS file" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "" + +msgid "no link" +msgstr "" + +msgid "none" +msgstr "none" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "" + +msgid "on" +msgstr "" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "unlimited" +msgstr "" + +msgid "unspecified" +msgstr "" + +msgid "unspecified -or- create:" +msgstr "unspecified -or- create:" + +msgid "untagged" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "« Back" +msgstr "« Back" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "An additional network will be created if you leave this unchecked." + +#~ msgid "CPU" +#~ msgstr "CPU" diff --git a/feeds/luci/modules/luci-base/po/es/base.po b/feeds/luci/modules/luci-base/po/es/base.po new file mode 100644 index 0000000..d466cf0 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/es/base.po @@ -0,0 +1,3851 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2014-05-04 11:38+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(ventana de %d minutos, intervalo de %d segundos)" + +msgid "(%s available)" +msgstr "(%s está disponible)" + +msgid "(empty)" +msgstr "(vacío)" + +msgid "(no interfaces attached)" +msgstr "(sin interfaces conectados)" + +msgid "-- Additional Field --" +msgstr "-- Campo Adicional --" + +msgid "-- Please choose --" +msgstr "-- Elija, por favor --" + +msgid "-- custom --" +msgstr "-- introducir --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Carga a 1 minuto:" + +msgid "15 Minute Load:" +msgstr "Carga a 15 minutos:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Carga a 5 minutos:" + +msgid "BSSID" +msgstr "" +"BSSID" + +msgid "DNS query port" +msgstr "Puerto de consultas al DNS" + +msgid "DNS server port" +msgstr "Puerto del servidor DNS" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"Los servidores de DNS se consultan " +"en el orden en que aparecen en el fichero resolv" + +msgid "ESSID" +msgstr "" +"ESSID" + +msgid "IPv4-Address" +msgstr "Dirección IPv4" + +msgid "IPv4-Gateway" +msgstr "" +"Puerta de enlace IPv4" + +msgid "IPv4-Netmask" +msgstr "Máscara de red IPv4" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"Dirección o red (CIDR)IPv6" + +msgid "IPv6-Gateway" +msgstr "" +"Puerta de enlace IPv6" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "Configuración de LEDs" + +msgid "LED Name" +msgstr "Nombre del LED" + +msgid "MAC-Address" +msgstr "Dirección MAC" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Máximas cesiones DHCP" + +msgid "" +"Max. EDNS0 packet size" +msgstr "Tamaño máximo de paquetes EDNS0" + +msgid "Max. concurrent queries" +msgstr "Máximo número de consultas concurrentes" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "Soporte a AR" + +msgid "ARP retry threshold" +msgstr "Umbral de reintento ARP" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "Puente ATM" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "Identificador de canal virtual ATM (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "Identificador de camino virtual ATM (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"Los puentes ATM exponen conexiones AAL5 ethernet encapsuladas como " +"interfaces de red Linux que se pueden usar junto a DHCP o PPP para conectar " +"a la red del proveedor." + +msgid "ATM device number" +msgstr "Número de dispositivo ATM" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Concentrador de acceso" + +msgid "Access Point" +msgstr "Punto de Acceso" + +msgid "Action" +msgstr "Acción" + +msgid "Actions" +msgstr "Acciones" + +msgid "Activate this network" +msgstr "Activar esta red" + +msgid "Active IPv4-Routes" +msgstr "Rutas activas IPv4" + +msgid "Active IPv6-Routes" +msgstr "Rutas activas IPv6" + +msgid "Active Connections" +msgstr "Conexiones activas" + +msgid "Active DHCP Leases" +msgstr "Cesiones DHCP activas" + +msgid "Active DHCPv6 Leases" +msgstr "Cesiones DHCPv6 activas" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Añadir" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" +"Añadir el sufijo de dominio local a los nombres servidos desde el fichero de " +"máquinas" + +msgid "Add new interface..." +msgstr "Añadir nueva interfaz..." + +msgid "Additional Hosts files" +msgstr "Ficheros de máquinas adicionales" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Dirección" + +msgid "Address to access local relay bridge" +msgstr "Dirección del puente relé local" + +msgid "Administration" +msgstr "Administración" + +msgid "Advanced Settings" +msgstr "Configuración avanzada" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Alerta" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" +"Permitir autenticación de contraseña via SSH" + +msgid "Allow all except listed" +msgstr "Permitir a todos excepto a los de la lista" + +msgid "Allow listed only" +msgstr "Permitir a los pertenecientes en la lista" + +msgid "Allow localhost" +msgstr "Permitir a la propia máquina" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "Permitir a máquinas remotas conectar a puestos SSH locales traspasados" + +msgid "Allow root logins with password" +msgstr "Permitir conexiones a root con contraseña" + +msgid "Allow the root user to login with password" +msgstr "Permitir al usuario root conectar con contraseña" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"Permitir respuestas en el rango 127.0.0.0/8, por ejemplo para servicios RBL" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antena 1" + +msgid "Antenna 2" +msgstr "Antena 2" + +msgid "Antenna Configuration" +msgstr "Configuración de la antena" + +msgid "Any zone" +msgstr "Cualquier zona" + +msgid "Apply" +msgstr "Aplicar" + +msgid "Applying changes" +msgstr "Aplicando cambios" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Asigne interfaces..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Estaciones asociadas" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Controlador inalámbrico 802.11%s Atheros" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Autentificación" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Autorizado" + +msgid "Authorization Required" +msgstr "Conéctese" + +msgid "Auto Refresh" +msgstr "Autorefresco" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Disponible" + +msgid "Available packages" +msgstr "Paquetes disponibles" + +msgid "Average:" +msgstr "Media:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Volver" + +msgid "Back to Overview" +msgstr "Volver al resumen" + +msgid "Back to configuration" +msgstr "Volver a la configuración" + +msgid "Back to overview" +msgstr "Volver al resumen" + +msgid "Back to scan results" +msgstr "Volver a resultados de la exploración" + +msgid "Background Scan" +msgstr "Exploración en segundo plano" + +msgid "Backup / Flash Firmware" +msgstr "Copia de seguridad / Grabar firmware" + +msgid "Backup / Restore" +msgstr "Salvar / Restaurar" + +msgid "Backup file list" +msgstr "Salvar lista de ficheros" + +msgid "Bad address specified!" +msgstr "¡Dirección no válida!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Lista de ficheros a los que hacer copia de seguridad. Es una lista de " +"ficheros de configuración cambiados por ficheros marcados por opkg, ficheros " +"esenciales base y los patrones de copia de seguridad definidos por el " +"usuario." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Bogus NX Domain Override" +msgstr "Ignorar dominio falso NX" + +msgid "Bridge" +msgstr "Puente" + +msgid "Bridge interfaces" +msgstr "Puentear interfaces" + +msgid "Bridge unit number" +msgstr "Número de unidad del puente" + +msgid "Bring up on boot" +msgstr "Activar en el arranque" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Controlador inalámbrico 802.11%s Broadcom" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Controlador inalámbrico 802.11 BCM%04x" + +msgid "Buffered" +msgstr "En búfer" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Botones" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Uso de CPU (%)" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Cadena" + +msgid "Changes" +msgstr "Cambios" + +msgid "Changes applied." +msgstr "Cambios aplicados." + +msgid "Changes the administrator password for accessing the device" +msgstr "Cambie la contraseña del administrador para acceder al dispositivo" + +msgid "Channel" +msgstr "Canal" + +msgid "Check" +msgstr "Comprobar" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Comprobación" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Elija la zona del cortafuegos a la que quiere asignar esta interfaz. " +"Seleccione no especificado para eliminar la interfaz de la zona " +"asociada o rellene el campo crear para definir una zona nueva a la " +"que asignarla." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Elija la red o redes a las que quiere unir esta interfaz inalámbrica o vacíe " +"el campo crear para definir una red nueva." + +msgid "Cipher" +msgstr "Cifrado" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Pulse \"generar archivo\" para descargar un fichero tar con los ficheros de " +"configuración actuales. Para reiniciar el firmware a su estado inicial pulse " +"\"Reiniciar\" (sólo posible con imágenes squashfs)." + +msgid "Client" +msgstr "Cliente" + +msgid "Client ID to send when requesting DHCP" +msgstr "ID de cliente que se enviará al solicitar DHCP" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Cerrar las conexiones inactivas tras los segundos dados. Use 0 para una " +"conexión permanente" + +msgid "Close list..." +msgstr "Cerrar lista..." + +msgid "Collecting data..." +msgstr "Un momento..." + +msgid "Command" +msgstr "Comando" + +msgid "Common Configuration" +msgstr "Configuración común" + +msgid "Compression" +msgstr "Compresión" + +msgid "Configuration" +msgstr "Configuración" + +msgid "Configuration applied." +msgstr "Configuración establecida." + +msgid "Configuration files will be kept." +msgstr "Se mantendrán los ficheros de configuración." + +msgid "Confirmation" +msgstr "Confirmación" + +msgid "Connect" +msgstr "Conectar" + +msgid "Connected" +msgstr "Conectado" + +msgid "Connection Limit" +msgstr "Límite de conexión" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Conexiones" + +msgid "Country" +msgstr "País" + +msgid "Country Code" +msgstr "Código de país" + +msgid "Cover the following interface" +msgstr "Cubre el interfaz siguiente" + +msgid "Cover the following interfaces" +msgstr "Cubre los siguientes interfaces" + +msgid "Create / Assign firewall-zone" +msgstr "Crear / Asignar zona de seguridad" + +msgid "Create Interface" +msgstr "Crear interfaz" + +msgid "Create a bridge over multiple interfaces" +msgstr "Crear un puente sobre múltiples interfaces" + +msgid "Critical" +msgstr "Crítico" + +msgid "Cron Log Level" +msgstr "Nivel de registro de cron" + +msgid "Custom Interface" +msgstr "Interfaz propio" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Personaliza el comportamiento de los LEDs del dispositivo, si es posible." + +msgid "DHCP Leases" +msgstr "Cesiones DHCP" + +msgid "DHCP Server" +msgstr "Servidor DHCP" + +msgid "DHCP and DNS" +msgstr "DHCP y DNS" + +msgid "DHCP client" +msgstr "Cliente DHCP" + +msgid "DHCP-Options" +msgstr "Opciones de DHCP" + +msgid "DHCPv6 Leases" +msgstr "Cesiones DHCPv6" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "Retransmisión DNS" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Depuración" + +msgid "Default %d" +msgstr "%d por defecto" + +msgid "Default gateway" +msgstr "Gateway por defecto" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Estado por defecto" + +msgid "Define a name for this network." +msgstr "Definir un nombre para esta red." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Definir optiones adicionales DHCP, por ejemplo " +"\"6,192.168.2.1,192.168.2.2\" que publica diferentes servidores " +"DNS a los clientes." + +msgid "Delete" +msgstr "Eliminar" + +msgid "Delete this network" +msgstr "Borrar esta red" + +msgid "Description" +msgstr "Descripción" + +msgid "Design" +msgstr "Diseño" + +msgid "Destination" +msgstr "Destino" + +msgid "Device" +msgstr "Dispositivo" + +msgid "Device Configuration" +msgstr "Configuración del dispositivo" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnósticos" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Directorio" + +msgid "Disable" +msgstr "Desactivar" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Desactivar DHCP " +"para esta interfaz." + +msgid "Disable DNS setup" +msgstr "Desactivar configuración de DNS" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Desactivar el temporizador de baliza hardware" + +msgid "Disabled" +msgstr "Desactivar" + +msgid "Discard upstream RFC1918 responses" +msgstr "Descartar respuestas RFC1918 salientes" + +msgid "Displaying only packages containing" +msgstr "Mostrar sólo paquete que contienen" + +msgid "Distance Optimization" +msgstr "Optimización de distancia" + +msgid "Distance to farthest network member in meters." +msgstr "Distancia al miembro de la red mas lejana en metros." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Diversidad" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq es un programa que combina un servidor DHCP y un reenviador DNS para cortafuegos NAT" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "No guardar respuestas negativas, por ejemplo dominios inexistentes" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"No retransmitir peticiones que no se puedan responder por servidores de " +"nombres públicos" + +msgid "Do not forward reverse lookups for local networks" +msgstr "No retransmitir búsquedas inversas para redes locales" + +msgid "Do not send probe responses" +msgstr "No enviar respuestas de prueba" + +msgid "Domain required" +msgstr "Dominio requerido" + +msgid "Domain whitelist" +msgstr "Lista blanca de dominios" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"No reenviar peticiones de DNS sin " +"un nombre de DNS" + +msgid "Download and install package" +msgstr "Descargar e instalar paquete" + +msgid "Download backup" +msgstr "Descargar copia de seguridad" + +msgid "Dropbear Instance" +msgstr "Instancia Dropbear" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear ofrece acceso SSH y un servidor " +"SCP" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"DHCP dinámico" + +msgid "Dynamic tunnel" +msgstr "Túnel dinámico" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Reparte direcciones DHCP dinámicamente a los clientes. Si se desactiva sólo " +"se servirá a clientes con cesiones estáticas." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "Método EAP" + +msgid "Edit" +msgstr "Editar" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Editar esta interfaz" + +msgid "Edit this network" +msgstr "Editar esta red" + +msgid "Emergency" +msgstr "Emergencia" + +msgid "Enable" +msgstr "Activar" + +msgid "Enable STP" +msgstr "Activar STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Activar actualización dinámica de punto final HE.net" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Activar negociación IPv6 en el enlace PPP" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Activar paso de tramas jumbo" + +msgid "Enable NTP client" +msgstr "Activar cliente NTP" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Activar servidor TFTP" + +msgid "Enable VLAN functionality" +msgstr "Activar funcionalidad VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Activar aprendizaje y envejecimiento" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Active este punto de montaje" + +msgid "Enable this swap" +msgstr "Activar este swap" + +msgid "Enable/Disable" +msgstr "Activar/Desactivar" + +msgid "Enabled" +msgstr "Activado" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Activa el protocol STP en este puente" + +msgid "Encapsulation mode" +msgstr "Modo de encapsulado" + +msgid "Encryption" +msgstr "Encriptación" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Borrando..." + +msgid "Error" +msgstr "Error" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Adaptador ethernet" + +msgid "Ethernet Switch" +msgstr "Switch ethernet" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Expandir nombre de máquina" + +msgid "Expires" +msgstr "Expira" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" +"Tiempo de finalización de direcciones cedidas (mínimo dos minutos: 2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Servidor externo de registro del sistema" + +msgid "External system log server port" +msgstr "Puerto del servidor externo de registro del sistema" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Tramas rápidas" + +msgid "File" +msgstr "Fichero" + +msgid "Filename of the boot image advertised to clients" +msgstr "Nombre del fichero de imagen de arranque mostrado a los clientes" + +msgid "Filesystem" +msgstr "Sistema de ficheros" + +msgid "Filter" +msgstr "Filtro" + +msgid "Filter private" +msgstr "Filtro privado" + +msgid "Filter useless" +msgstr "Filtro inútil" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Encontrar y unirse a red" + +msgid "Find package" +msgstr "Buscar paquete" + +msgid "Finish" +msgstr "Terminar" + +msgid "Firewall" +msgstr "Cortafuegos" + +msgid "Firewall Settings" +msgstr "Configuración del cortafuegos" + +msgid "Firewall Status" +msgstr "Estado del cortafuegos" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Versión del firmware" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Puerto origen fijo para peticiones de DNS salientes" + +msgid "Flash Firmware" +msgstr "Grabar firmware" + +msgid "Flash image..." +msgstr "Grabar imagen..." + +msgid "Flash new firmware image" +msgstr "Grabar imágenes del firmware" + +msgid "Flash operations" +msgstr "Operaciones de grabado" + +msgid "Flashing..." +msgstr "Grabando..." + +msgid "Force" +msgstr "Forzar" + +msgid "Force CCMP (AES)" +msgstr "Forzar CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "Forzar DHCP en esta red aunque se detecte otro servidor." + +msgid "Force TKIP" +msgstr "Forzar TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Forzar TKIP y CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Retransmitir tráfico DHCP" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Retransmitir tráfico de propagación" + +msgid "Forwarding mode" +msgstr "Modo de retransmisión" + +msgid "Fragmentation Threshold" +msgstr "Umbral de fragmentación" + +# It should be "Frame Bursting" at once! +msgid "Frame Bursting" +msgstr "Frame Bursting" + +msgid "Free" +msgstr "Libre" + +msgid "Free space" +msgstr "Espacio libre" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "Sólo GPRS" + +msgid "Gateway" +msgstr "Pasarela" + +msgid "Gateway ports" +msgstr "Puertos del gateway" + +msgid "General Settings" +msgstr "Configuración general" + +msgid "General Setup" +msgstr "Configuración general" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Generar archivo" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Controlador inalámbrico 802.11%s genérico" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" +"La confirmación y la contraseña no coinciden. ¡No se ha cambiado la " +"contraseña!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Ir a configuración de contraseña..." + +msgid "Go to relevant configuration page" +msgstr "Ir a la página principal de configuración" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "Contraseña HE.net" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Manejador" + +msgid "Hang Up" +msgstr "Suspender" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Aspectos básicos de su dispositivo como la zona horaria o nombre de máquina." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "Claves públicas SSH. Ponga una por línea." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Controlador inalámbrico 802.11b Hermes" + +msgid "Hide ESSID" +msgstr "Ocultar ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Entradas de máquina" + +msgid "Host expiry timeout" +msgstr "Espera para caducidad de máquinas" + +msgid "Host-IP or Network" +msgstr "" +"Dirección IP de máquina o " +"red" + +msgid "Hostname" +msgstr "Nombre de máquina" + +msgid "Hostname to send when requesting DHCP" +msgstr "Nombre de máquina a enviar cuando se solicite DHCP" + +msgid "Hostnames" +msgstr "Nombres de máquina" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "Dirección IP" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "Cortafuegos IPv4" + +msgid "IPv4 WAN Status" +msgstr "Estado de la WAN IPv4" + +msgid "IPv4 address" +msgstr "Dirección IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "Propagación IPv4" + +msgid "IPv4 gateway" +msgstr "Gateway IPv4" + +msgid "IPv4 netmask" +msgstr "Máscara de red IPv4" + +msgid "IPv4 only" +msgstr "Sólo IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "Longitud de prefijo IPv4" + +msgid "IPv4-Address" +msgstr "Dirección IPv4" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "Cortafuegos IPv6" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "Estado de la WAN IPv6" + +msgid "IPv6 address" +msgstr "Dirección IPv6" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "Gateway IPv6" + +msgid "IPv6 only" +msgstr "Sólo IPv6" + +msgid "IPv6 prefix" +msgstr "Prefijo IPv6" + +msgid "IPv6 prefix length" +msgstr "Longitud de prefijo IPv6" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "Dirección IPv6" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-en-IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6-sobre-IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6-sobre-IPv4 (6to4)" + +msgid "Identity" +msgstr "Identidad" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" +"Montar el dispositivo por su UUID en vez de un nodo fijo de dispositivo si " +"se especifica" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" +"Montar el dispositivo por la etiqueta de la partición en vez de por el nodo " +"fijo de dispositivo si se especifica" + +msgid "If unchecked, no default route is configured" +msgstr "Si está desmarcado no se configurará una ruta por defecto" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" +"Si está desmarcado las direcciones de servidor DNS anunciadas se ignorarán" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Si su dispositivo no tiene memoria RAM suficiente, los datos no utilizados pueden ser guardados temporalmente " +"en un dispositivo de intercambio (swap-device) liberando el espacio que " +"ocupan. Tenga en cuenta que el intercambio es un proceso lento porque los " +"dispositivos de intercambio no pueden transferir volúmenes de información a " +"alta velocidad tal y como hace la memoria RAM." + +msgid "Ignore /etc/hosts" +msgstr "Ignorar /etc/hosts" + +msgid "Ignore interface" +msgstr "Ignorar interfaz" + +msgid "Ignore resolve file" +msgstr "Ignorar el fichero resolv" + +msgid "Image" +msgstr "Imagen" + +msgid "In" +msgstr "Entrada" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Espera de inactividad" + +msgid "Inbound:" +msgstr "Entrantes:" + +msgid "Info" +msgstr "Información" + +msgid "Initscript" +msgstr "Nombre del script de inicio" + +msgid "Initscripts" +msgstr "Scripts de inicio" + +msgid "Install" +msgstr "Instalar" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Instalar el paquete %q" + +msgid "Install protocol extensions..." +msgstr "Instalar extensiones de protocolo..." + +msgid "Installed packages" +msgstr "Paquetes instalados" + +msgid "Interface" +msgstr "Interfaz" + +msgid "Interface Configuration" +msgstr "Configuración del interfaz" + +msgid "Interface Overview" +msgstr "Resumen de interfaces" + +msgid "Interface is reconnecting..." +msgstr "Reconectando interfaz..." + +msgid "Interface is shutting down..." +msgstr "Parando interfaz..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "El interfaz no existe o no está aún conectado." + +msgid "Interface reconnected" +msgstr "Interfaz reconectado" + +msgid "Interface shut down" +msgstr "Interfaz detenido" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "Error interno del servidor" + +msgid "Invalid" +msgstr "Valor ingresado inválido" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "¡ID VLAN no válido! Sólo se permiten IDs entre %d y %d." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "¡ID VLAN no válido! Sólo se permiten IDs únicos" + +msgid "Invalid username and/or password! Please try again." +msgstr "" +"¡Nombre de usuario o contraseña no válidos!. Pruebe de nuevo, por favor." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Parece que está intentando grabar una imagen de firmware mayor que la " +"memoria flash de su equipo. ¡Por favor, verifique el archivo!" + +msgid "Java Script required!" +msgstr "¡Se necesita JavaScript!" + +msgid "Join Network" +msgstr "Unirse a Red" + +msgid "Join Network: Wireless Scan" +msgstr "Unirse a una red: Exploración inalámbrica" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Conservar la configuración del router" + +msgid "Kernel Log" +msgstr "Registro del Kernel" + +msgid "Kernel Version" +msgstr "Versión del Kernel" + +msgid "Key" +msgstr "Clave" + +msgid "Key #%d" +msgstr "Clave #%d" + +msgid "Kill" +msgstr "Matar" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "Servidor L2TP" + +msgid "LCP echo failure threshold" +msgstr "Umbral de fracaso en eco LCP" + +msgid "LCP echo interval" +msgstr "Intervalo de eco LCP" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Etiqueta" + +msgid "Language" +msgstr "Idioma" + +msgid "Language and Style" +msgstr "Idioma y Estilo" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Tiempo de validación de cesión" + +msgid "Leasefile" +msgstr "Archivo de cesiones" + +msgid "Leasetime" +msgstr "Tiempo de cesión" + +msgid "Leasetime remaining" +msgstr "Tiempo de cesión restante" + +msgid "Leave empty to autodetect" +msgstr "Dejar vacío para autodetectar" + +msgid "Leave empty to use the current WAN address" +msgstr "Dejar vacío para usar la dirección WAN actual" + +msgid "Legend:" +msgstr "Leyenda:" + +msgid "Limit" +msgstr "Límite" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Enlace activado" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"Lista de servidores DNS a los que " +"enviar solicitudes" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "Lista de dominios a los que se permiten respuestas RFC1918" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "Lista de máquinas que proporcionan resultados de dominio NX falsos" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "Escucha solo en la interfaz dada o, si no se especifica, en todas" + +msgid "Listening port for inbound DNS queries" +msgstr "Puerto de escucha para consultas DNS entrantes" + +msgid "Load" +msgstr "Carga" + +msgid "Load Average" +msgstr "Carga Media" + +msgid "Loading" +msgstr "Cargando" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Dirección local IPv4" + +msgid "Local IPv6 address" +msgstr "Dirección local IPv6" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Arranque local" + +msgid "Local Time" +msgstr "Hora local" + +msgid "Local domain" +msgstr "Dominio local" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Especificación de dominio local. Los nombres que coincidan con este dominio " +"nunca se retransmiten y se resuelven desde DHCP o ficheros de máquina locales" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"Sufijo del dominio local que se añade a los nombres DHCP y a las entradas " +"del fichero de máquinas" + +msgid "Local server" +msgstr "Servidor local" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" +"Localizar nombre de máquina dependiendo de que la subred peticionaria si hay " +"disponibles múltiples IPs" + +msgid "Localise queries" +msgstr "Localizar consultas" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Nivel de registro" + +msgid "Log queries" +msgstr "Registrar consultas" + +msgid "Logging" +msgstr "Registro" + +msgid "Login" +msgstr "Iniciar sesión" + +msgid "Logout" +msgstr "Cerrar sesión" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "Dirección cedida más baja como diferencia de la dirección de red." + +msgid "MAC-Address" +msgstr "Dirección MAC" + +msgid "MAC-Address Filter" +msgstr "Filtro por dirección MAC" + +msgid "MAC-Filter" +msgstr "Filtro por dirección MAC" + +msgid "MAC-List" +msgstr "Lista de direcciones MAC" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Ratio Máximo" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Número máximo de cesiones DHCP activas" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Número máximo de consultas DNS concurrentes" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "Tamaño máximo de paquetes EDNS.0 paquetes UDP" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "Segundos máximos de espera a que el módem esté activo" + +msgid "Maximum hold time" +msgstr "Pausa máxima de transmisión" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "Máximas cesiones activas." + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "Memoria" + +msgid "Memory usage (%)" +msgstr "Uso de memoria (%)" + +msgid "Metric" +msgstr "Métrica" + +msgid "Minimum Rate" +msgstr "Ratio mínimo" + +msgid "Minimum hold time" +msgstr "Pausa mínima de espera" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Extensión de protocolo faltante para %q" + +msgid "Mode" +msgstr "Modo" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Dispositivo de módem" + +msgid "Modem init timeout" +msgstr "Espera de inicialización del modem" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "Entrada de montaje" + +msgid "Mount Point" +msgstr "Punto de montaje" + +msgid "Mount Points" +msgstr "Puntos de montaje" + +msgid "Mount Points - Mount Entry" +msgstr "Puntos de montaje - Entrada de montaje" + +msgid "Mount Points - Swap Entry" +msgstr "Puntos de montaje - Entrada de intercambio" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Los puntos de montaje definen el directorio en el que un dispositivo de " +"memoria se unirá al sistema del archivos" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Opciones de montaje" + +msgid "Mount point" +msgstr "Punto de montaje" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Sistemas de archivo montados" + +msgid "Move down" +msgstr "Bajar" + +msgid "Move up" +msgstr "Subir" + +msgid "Multicast Rate" +msgstr "Ratio multicast" + +msgid "Multicast address" +msgstr "Dirección multicast" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "Servidores NTP a consultar" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Nombre" + +msgid "Name of the new interface" +msgstr "Nombre de la nueva interfaz" + +msgid "Name of the new network" +msgstr "Nombre de la nueva red" + +msgid "Navigation" +msgstr "Navegación" + +msgid "Netmask" +msgstr "Máscara de red" + +msgid "Network" +msgstr "Red" + +msgid "Network Utilities" +msgstr "Utilidades de red" + +msgid "Network boot image" +msgstr "Imagen de arranque en red" + +msgid "Network without interfaces." +msgstr "Red sin interfaces." + +msgid "Next »" +msgstr "Siguiente »" + +msgid "No DHCP Server configured for this interface" +msgstr "No se ha configurado un servidor DHCP para esta interfaz" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "No hay cadenas en esta tabla" + +msgid "No files found" +msgstr "No se han encontrado ficheros" + +msgid "No information available" +msgstr "No hay información disponible" + +msgid "No negative cache" +msgstr "Sin caché negativa" + +msgid "No network configured on this device" +msgstr "No hay red configurada para este dispositivo" + +msgid "No network name specified" +msgstr "No se ha especificado un nombre de red" + +msgid "No package lists available" +msgstr "No hay listas de paquetes disponibles" + +msgid "No password set!" +msgstr "¡Sin contraseña!" + +msgid "No rules in this chain" +msgstr "No hay reglas en esta cadena" + +msgid "No zone assigned" +msgstr "Sin zona asignada" + +msgid "Noise" +msgstr "Ruido" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Ruido:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Ninguno" + +msgid "Normal" +msgstr "Normal" + +msgid "Not Found" +msgstr "No encontrado" + +msgid "Not associated" +msgstr "No asociado" + +msgid "Not connected" +msgstr "No conectado" + +msgid "Note: Configuration files will be erased." +msgstr "Nota: se borrarán los ficheros de configuración." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Aviso" + +msgid "Nslookup" +msgstr "NSLookup" + +msgid "OK" +msgstr "Aceptar" + +msgid "OPKG-Configuration" +msgstr "Configuración de OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "Retraso de desconexión" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"Configure las interfaces de red. Puede hacer puentes con diferentes " +"interfaces, marcando el campo \"puentear interfaces\" e introduciendo el " +"nombre de las mismas separadas por espacios. También puede usar la notación " +"VLAN, INTERFACE." +"VLANNR (Ej.: eth0.1)." + +msgid "On-State Delay" +msgstr "Retraso de activación" + +msgid "One of hostname or mac address must be specified!" +msgstr "¡Debe especificar al menos un nombre de máquina o dirección mac!" + +msgid "One or more fields contain invalid values!" +msgstr "¡Valores no válidos!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "¡Campos vacíos!" + +msgid "Open list..." +msgstr "Abrir lista..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Opción cambiada" + +msgid "Option removed" +msgstr "Opción eliminada" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Opciones" + +msgid "Other:" +msgstr "Otros:" + +msgid "Out" +msgstr "Salida" + +msgid "Outbound:" +msgstr "Saliente:" + +msgid "Outdoor Channels" +msgstr "Canales al aire libre" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "Ignorar dirección MAC" + +msgid "Override MTU" +msgstr "Ignorar MTU" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "Ignorar la pasarela en las respuestas DHCP" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"Ignorar la máscara de red enviada a los clientes. Normalmente se calcula " +"desde la subred desde la que se sirve." + +msgid "Override the table used for internal routes" +msgstr "Ignorar la tabla usada para rutas internas" + +msgid "Overview" +msgstr "Descripción general" + +msgid "Owner" +msgstr "Propietario" + +msgid "PAP/CHAP password" +msgstr "Contraseña PAP/CHAP" + +msgid "PAP/CHAP username" +msgstr "Nombre de usuario PAP/CHAP" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "Encapsulación PPPoA" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "¡Se necesita el paquete libiwinfo!" + +msgid "Package lists are older than 24 hours" +msgstr "Las listas de paquetes tienen más de 24 horas" + +msgid "Package name" +msgstr "Nombre del paquete" + +msgid "Packets" +msgstr "Paquetes" + +msgid "Part of zone %q" +msgstr "Parte de zona %q" + +msgid "Password" +msgstr "Contraseña" + +msgid "Password authentication" +msgstr "Autentificación de contraseña" + +msgid "Password of Private Key" +msgstr "Contraseña de la Clave Privada" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "¡Contraseña cambiada!" + +msgid "Path to CA-Certificate" +msgstr "Ruta al Certificado CA" + +msgid "Path to Client-Certificate" +msgstr "Camino al certificado de cliente" + +msgid "Path to Private Key" +msgstr "Ruta a la Clave Privada" + +msgid "Path to executable which handles the button event" +msgstr "Ruta al ejecutable que maneja el evento button" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Pico:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Rearrancar" + +msgid "Perform reset" +msgstr "Reiniciar" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Ratio Phy:" + +msgid "Physical Settings" +msgstr "Configuración física" + +msgid "Ping" +msgstr "Ping" + +msgid "Pkts." +msgstr "Paq." + +msgid "Please enter your username and password." +msgstr "Por favor, introduzca su nombre de usuario y contraseña." + +msgid "Policy" +msgstr "Política" + +msgid "Port" +msgstr "Puerto" + +msgid "Port status:" +msgstr "Estado del puerto:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" +"Asumir que el otro estará muerto tras estos fallos de echo LCP, use 0 para " +"ignorar fallos" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Impide la comunicación cliente a cliente" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Controlador inalámbrico 802.11n Prism2/2.5/3" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Proceder" + +msgid "Processes" +msgstr "Procesos" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protocolo" + +msgid "Protocol family" +msgstr "Familia de procolo" + +msgid "Protocol of the new interface" +msgstr "Protocolo de la nueva interfaz" + +msgid "Protocol support is not installed" +msgstr "No está instalado el soporte al protocolo" + +msgid "Provide NTP server" +msgstr "Dar servicio NTP" + +msgid "Provide new network" +msgstr "Introduzca una nueva red" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Calidad" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "Umbral RTS/CTS" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "Ratio RX" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "Controlador inalámbrico 802.11%s RaLink" + +msgid "Radius-Accounting-Port" +msgstr "Puerto de contabilidad Radius" + +msgid "Radius-Accounting-Secret" +msgstr "Secreto de contabilidad Radius" + +msgid "Radius-Accounting-Server" +msgstr "Servidor de contabilidad Radius" + +msgid "Radius-Authentication-Port" +msgstr "Puerto de autentificación Radius" + +msgid "Radius-Authentication-Secret" +msgstr "Secreto de autentificación Radius" + +msgid "Radius-Authentication-Server" +msgstr "Servidor de autentificación Radius" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Leer /etc/ethers para configurar el servidor DHCP" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"¿Está seguro de borrar esta interfaz?. ¡No será posible deshacer el " +"borrado!\n" +"Puede perder el acceso a este dispositivo si está conectado por esta " +"interfaz." + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"¿Está seguro de borrar esta red inalámbrica?. ¡No será posible deshacer el " +"borrado!\n" +"Puede perder el acceso a este dispositivo si está conectado por esta red." + +msgid "Really reset all changes?" +msgstr "¿Está seguro de querer reiniciar todos los cambios?" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"¿Está seguro de querer apagar esta red?.\n" +"Puede perder el acceso a este dispositivo si está conectado por esta red." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"¿Está seguro de apagar la interfaz \"%s\"?.\n" +"Puede perder el acceso a este dispositivo si está conectado por interfaz." + +msgid "Really switch protocol?" +msgstr "¿Está seguro de querer cambiar el protocolo?" + +msgid "Realtime Connections" +msgstr "Conexiones en tiempo real" + +msgid "Realtime Graphs" +msgstr "Gráficas en tiempo real" + +msgid "Realtime Load" +msgstr "Carga en tiempo real" + +msgid "Realtime Traffic" +msgstr "Tráfico en tiempo real" + +msgid "Realtime Wireless" +msgstr "Red inalámbrica en tiempo real" + +msgid "Rebind protection" +msgstr "Protección contra reasociación" + +msgid "Reboot" +msgstr "Rearrancar" + +msgid "Rebooting..." +msgstr "Rearrancando..." + +msgid "Reboots the operating system of your device" +msgstr "Rearranque el sistema operativo de su dispositivo" + +msgid "Receive" +msgstr "Recibir" + +msgid "Receiver Antenna" +msgstr "Antena Receptora" + +msgid "Reconnect this interface" +msgstr "Reconectar esta interfaz" + +msgid "Reconnecting interface" +msgstr "Reconectando la interfaz" + +msgid "References" +msgstr "Referencias" + +msgid "Regulatory Domain" +msgstr "Dominio Regulador" + +msgid "Relay" +msgstr "Relé" + +msgid "Relay Bridge" +msgstr "Puente relé" + +msgid "Relay between networks" +msgstr "Relé entre redes" + +msgid "Relay bridge" +msgstr "Puente relé" + +msgid "Remote IPv4 address" +msgstr "Dirección IPv4 remota" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Desinstalar" + +msgid "Repeat scan" +msgstr "Repetir exploración" + +msgid "Replace entry" +msgstr "Reemplazar entrada" + +msgid "Replace wireless configuration" +msgstr "Cambiar la configuración inalámbrica" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "Necesario para ciertos ISPs, por ejemplo Charter con DOCSIS 3" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Reiniciar" + +msgid "Reset Counters" +msgstr "Reiniciar contadores" + +msgid "Reset to defaults" +msgstr "Reiniciar a valores por defecto" + +msgid "Resolv and Hosts Files" +msgstr "Ficheros Resolv y Hosts" + +msgid "Resolve file" +msgstr "Fichero de resolución" + +msgid "Restart" +msgstr "Rearrancar" + +msgid "Restart Firewall" +msgstr "Rearrancar cortafuegos" + +msgid "Restore backup" +msgstr "Restaurar copia de seguridad" + +msgid "Reveal/hide password" +msgstr "Mostrar/ocultar contraseña" + +msgid "Revert" +msgstr "Anular" + +msgid "Root" +msgstr "Raíz" + +msgid "Root directory for files served via TFTP" +msgstr "Directorio raíz para los ficheros servidos por TFTP" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Contraseña del router" + +msgid "Routes" +msgstr "Rutas" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Las rutas especifican sobre qué interfaz y pasarela se puede llegar a una " +"cierta máquina o red." + +msgid "Run a filesystem check before mounting the device" +msgstr "Comprobar el sistema de ficheros antes de montar el dispositivo" + +msgid "Run filesystem check" +msgstr "Comprobar el sistema de ficheros" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "Acceso SSH" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "Claves SSH" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Guardar" + +msgid "Save & Apply" +msgstr "Guardar y aplicar" + +msgid "Save & Apply" +msgstr "Guardar y aplicar" + +msgid "Scan" +msgstr "Explorar" + +msgid "Scheduled Tasks" +msgstr "Tareas programadas" + +msgid "Section added" +msgstr "Sección añadida" + +msgid "Section removed" +msgstr "Sección eliminada" + +msgid "See \"mount\" manpage for details" +msgstr "Vea la página del manual de \"mount\" para detalles" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" +"Enviar peticiones de echo LCP cada intervalo de segundos dado, solo efectivo " +"usado conjuntamente con el umbral de fallo" + +msgid "Separate Clients" +msgstr "Aislar clientes" + +msgid "Separate WDS" +msgstr "WDS aislado" + +msgid "Server Settings" +msgstr "Configuración del servidor" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Nombre de servicio" + +msgid "Service Type" +msgstr "Tipo de servicio" + +msgid "Services" +msgstr "Servicios" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Sincronización horaria" + +msgid "Setup DHCP Server" +msgstr "Configuración del servidor DHCP" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "Mostrar lista de ficheros a salvar" + +msgid "Shutdown this interface" +msgstr "Apagar esta interfaz" + +msgid "Shutdown this network" +msgstr "Apagar esta red" + +msgid "Signal" +msgstr "Señal" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Señal:" + +msgid "Size" +msgstr "Tamaño" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Saltar" + +msgid "Skip to content" +msgstr "Saltar al contenido" + +msgid "Skip to navigation" +msgstr "Saltar a navegación" + +msgid "Slot time" +msgstr "Tiempo asignado" + +msgid "Software" +msgstr "Instalación de programas" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Algunos campos no son válidos, ¡no se pueden guardar!" + +msgid "Sorry, the object you requested was not found." +msgstr "Objeto no encontrado." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "El servidor encontró un error inesperado." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"No está instalado el soporte para el sysupgrade, la nueva imagen debe " +"grabarse manualmente. Por favor, mire el wiki para instrucciones de " +"instalación específicas." + +msgid "Sort" +msgstr "Ordenar" + +msgid "Source" +msgstr "Origen" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "Especifica el estado de botón a manejar" + +msgid "Specifies the directory the device is attached to" +msgstr "Especifica el directorio al que está enlazado el dispositivo" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "" +"Especifica los puertos de escucha de esta instancia de Dropbear" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" +"Especifica la cantidad de peticiones ARP fallidas hasta suponer muerta una " +"máquina" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" +"Especifica la cantidad de segundos a transcurrir hasta suponer muerta una " +"máquina" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Especifica la clave secreta de encriptado." + +msgid "Start" +msgstr "Arrancar" + +msgid "Start priority" +msgstr "Prioridad de arranque" + +msgid "Startup" +msgstr "Arranque" + +msgid "Static IPv4 Routes" +msgstr "Rutas estáticas IPv4" + +msgid "Static IPv6 Routes" +msgstr "Rutas estáticas IPv6" + +msgid "Static Leases" +msgstr "Cesiones estáticas" + +msgid "Static Routes" +msgstr "Rutas estáticas" + +msgid "Static WDS" +msgstr "WDS estático" + +msgid "Static address" +msgstr "Dirección estática" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"Las cesiones estáticas se usan para asignar direcciones IP fijas y nombres " +"simbólicos de máquina a clientes DHCP. También son necesarias para " +"configuraciones de interfaz no dinámica en las que a cada máquina siempre se " +"le quiere servir la misma dirección IP." + +msgid "Status" +msgstr "Estado" + +msgid "Stop" +msgstr "Parar" + +msgid "Strict order" +msgstr "Orden estricto" + +msgid "Submit" +msgstr "Guardar" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Entrada de intercambio" + +msgid "Switch" +msgstr "Switch" + +msgid "Switch %q" +msgstr "Switch %q" + +msgid "Switch %q (%s)" +msgstr "Switch %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Intercambiar protocolo" + +msgid "Sync with browser" +msgstr "Sincronizar con el navegador" + +msgid "Synchronizing..." +msgstr "Sincronizando..." + +msgid "System" +msgstr "Sistema" + +msgid "System Log" +msgstr "Registro del sistema" + +msgid "System Properties" +msgstr "Propiedades del sistema" + +msgid "System log buffer size" +msgstr "Tamaño del buffer de registro del sistema" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "Configuración TFTP" + +msgid "TFTP server root" +msgstr "Raíz del servidor TFTP" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "Ratio TX" + +msgid "Table" +msgstr "Tabla" + +# Target = Meta --> Objetivo --> Destino? +msgid "Target" +msgstr "Objetivo" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Terminar" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"La sección de Configuración del dispositivo ocupa la configuración " +"física del hardware de radio como el canal, la potencia de transmisión o la " +"selección de antena que se comparte entre todas las redes inalámbricas " +"definidas (si el hardware de radio es capaz de ser multi-SSID). " +"Configuración por red como encriptado o modo de operación se agrupan en " +"Configuración del interfaz." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"El paquete libiwinfo-lua no está instalado. ¡Debe instalarlo para " +"poder configurar la conectividad inalambrica!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" +"El prefijo IPv6 asignado por el proveedor, suele termina con ::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Los caracteres permitidos son: A-Z, a-z, " +"0-9 y _" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"El archivo de dispositivo de memoria o partición (e.j. /dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"El sistema de archivo que fue utilizado para dar formato a la memoria (Ej. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"Imagen recibida. Verifique que la comprobación y tamaño del fichero recibido " +"coinciden con los del original.
Pulse \"Proceder\" para empezar el " +"grabado." + +msgid "The following changes have been committed" +msgstr "Se han hecho los siguientes cambios" + +msgid "The following changes have been reverted" +msgstr "Se han anulado los siguientes cambios" + +msgid "The following rules are currently active on this system." +msgstr "Rutas activas." + +msgid "The given network name is not unique" +msgstr "Nombre de red repetido" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"El hardware no es capaz de multi-SSD y la configuración actual se cambiará " +"si continúa." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" +"Longitud del prefijo IPv4 en bits, el resto se usará en direcciones IPv6." + +msgid "The length of the IPv6 prefix in bits" +msgstr "Longitud del prefijo IPv6 en bits" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"Los puertos de red de este dispositivo se pueden combinar en varias VLANs en las que los ordenadores " +"se pueden comunicar directamente entre ellos. Las VLANs se usan a menudo para separar diferentes " +"segmentos de red. Es común que exista un puerto por defecto para subida " +"hacia una red mayor como internet y el resto se dediquen a la red local." + +msgid "The selected protocol needs a device assigned" +msgstr "Este protocolo necesita estar asignado a un dispositivo" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" +"El sistema está borrando la partición de configuración y rearrancará cuando " +"termine." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"Escribiendo en la memoria flash.
¡NO APAGUE EL DISPOSITIVO!
" +"Espere unos minutos antes de reconectar. Es posible que tenga que renovar la " +"conexión de su ordenador para poder acceder de nuevo al dispositivo." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"El archivo con la imagen de firmware subido no tiene un formato adecuado. " +"Asegúrese de haber elegido la imagen correcta para su plataforma." + +msgid "There are no active leases." +msgstr "Sin cesiones activas." + +msgid "There are no pending changes to apply!" +msgstr "¡No hay cambios pendientes!" + +msgid "There are no pending changes to revert!" +msgstr "¡No hay cambios a anular!" + +msgid "There are no pending changes!" +msgstr "¡Sin cambios pendientes!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"No hay dispositivo asignado aún. Por favor, enlace un dispositivo de red en " +"la pestaña \"Configuración física\"" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"No hay contraseñas en este router. Por favor, configure una contraseña para " +"proteger el interfaz web y activar SSH." + +msgid "This IPv4 address of the relay" +msgstr "Dirección IPv4 del relé" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"Lista de patrones shell con los ficheros y directorios que se deben incluir " +"en un sysupgrade. Los ficheros modificados en /etc/config/ y ciertas otras " +"configuraciones se guardarán automáticamente." + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"Contenido de /etc/rc.local. Ponga sus propios comandos aquí (antes de 'exit " +"0') para ejecutarlos al final del proceso de inicio." + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" +"Esta es la dirección de punto final asignada por el broker del túnel, suele " +"terminar con :2" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Este es el único servidor DHCP en la red de área local" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "Definición de tareas programadas para crontab." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" +"Esta es normalmente la dirección del PoP más cercano operada por el broker " +"del túnel" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "Procesos de sistema que se están ejecutando actualmente y su estado." + +msgid "This page allows the configuration of custom button actions" +msgstr "Configuración de acciones personalizadas para los botones" + +msgid "This page gives an overview over currently active network connections." +msgstr "Conexiones de red activas." + +msgid "This section contains no values yet" +msgstr "No hay reglas definidas" + +msgid "Time Synchronization" +msgstr "Sincronización horaria" + +msgid "Time Synchronization is not configured yet." +msgstr "Sincronización horaria no configurada." + +msgid "Timezone" +msgstr "Zona horaria" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"Para restaurar los ficheros de configuración, debe subir primero una copia " +"de seguridad." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Total disponible" + +msgid "Traceroute" +msgstr "Traceroute" + +msgid "Traffic" +msgstr "Tráfico" + +msgid "Transfer" +msgstr "Transferencia" + +msgid "Transmission Rate" +msgstr "Tasa de Transmisión" + +msgid "Transmit" +msgstr "Transmitir" + +msgid "Transmit Power" +msgstr "Potencia de transmisión" + +msgid "Transmitter Antenna" +msgstr "Antena Transmisora" + +msgid "Trigger" +msgstr "Disparador" + +msgid "Trigger Mode" +msgstr "Modo de disparador" + +msgid "Tunnel ID" +msgstr "ID de túnel" + +msgid "Tunnel Interface" +msgstr "Interfaz de túnel" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Modo Turbo" + +msgid "Tx-Power" +msgstr "Potencia-TX" + +msgid "Type" +msgstr "Tipo" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "Sólo UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "Dispositivo USB" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "Imposible repartir" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Desconocido" + +msgid "Unknown Error, password not changed!" +msgstr "Error desconocido, ¡no se ha cambiado la contraseña!" + +msgid "Unmanaged" +msgstr "No gestionado" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Cambios no guardados" + +msgid "Unsupported protocol type." +msgstr "Tipo de protocolo no soportado." + +msgid "Update lists" +msgstr "Actualizar listas" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"Suba una imagen compatible con sysupgrade para reemplazar el firmware " +"actual. Puede marcar \"Conservar la configuración\" si lo desea (es " +"necesario que la imagen sea compatible)." + +msgid "Upload archive..." +msgstr "Subir archivo..." + +msgid "Uploaded File" +msgstr "Archivo subido" + +msgid "Uptime" +msgstr "Tiempo activo" + +msgid "Use /etc/ethers" +msgstr "Usar /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Usar pasarela DHCP" + +msgid "Use DNS servers advertised by peer" +msgstr "Utiliza servidores DNS anunciados por otros" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "Usa códigos de país ISO/IEC 3166 alpha2." + +msgid "Use MTU on tunnel interface" +msgstr "MTU a usar en el interfaz de túnel" + +msgid "Use TTL on tunnel interface" +msgstr "TTL a usar en el interfaz de túnel" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Usar marca de propagación" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Usar servidores DNS personalizados" + +msgid "Use default gateway" +msgstr "Usar pasarela por defecto" + +msgid "Use gateway metric" +msgstr "Usar métrica de la pasarela" + +msgid "Use routing table" +msgstr "Usar tabla de rutas" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"Pulse el botón Añadir para insertar una nueva cesión. Dirección " +"MAC identificará la máquina, dirección IPv4 especificará la " +"dirección fija a usar y Nombre de máquina se asignará como nombre " +"simbólico." + +msgid "Used" +msgstr "Usado" + +msgid "Used Key Slot" +msgstr "Espacio de clave usado" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Nombre de usuario" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLANs en %q" + +msgid "VLANs on %q (%s)" +msgstr "VLANs en %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "Servidor VPN" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "Clase de vendedor a enviar cuando solicite DHCP" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Verificar" + +msgid "Version" +msgstr "Versión" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "Sistema abierto WEP" + +msgid "WEP Shared Key" +msgstr "Clave compartida WEP" + +msgid "WEP passphrase" +msgstr "Frase de paso WEP" + +msgid "WMM Mode" +msgstr "Modo WMM" + +msgid "WPA passphrase" +msgstr "Frase de paso WPA" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"WPA-Encryption necesita que estén instalados wpa_supplicant (para el modo " +"cliente o hostapd (para los modos AP y ad-hoc)." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "Esperando a que se realicen los cambios..." + +msgid "Waiting for command to complete..." +msgstr "Esperando a que termine el comando..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Aviso" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Red inalámbrica" + +msgid "Wireless Adapter" +msgstr "Adaptador inalámbrico" + +msgid "Wireless Network" +msgstr "Red inalámbrica" + +msgid "Wireless Overview" +msgstr "Redes inalámbricas" + +msgid "Wireless Security" +msgstr "Seguridad inalámbrica" + +msgid "Wireless is disabled or not associated" +msgstr "Red inalámbrica desconectada o no asociada" + +msgid "Wireless is restarting..." +msgstr "Rearrancando red inalámbrica..." + +msgid "Wireless network is disabled" +msgstr "Red inalámbrica desconectada" + +msgid "Wireless network is enabled" +msgstr "Red inalámbrica conectada" + +msgid "Wireless restarted" +msgstr "Red inalámbrica rearrancada" + +msgid "Wireless shut down" +msgstr "Apagando red inalámbrica" + +msgid "Write received DNS requests to syslog" +msgstr "Escribir las peticiones de DNS recibidas en el registro del sistema" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Soporte de XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Gestione los scripts de inicio. Los cambios serán aplicados tras reiniciar " +"el equipo.
ADVERTENCIA: ¡Si desactiva scripts de inicio " +"esenciales como\"network\", su equipo puede no arrancar o quedar " +"inaccesible!." + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Debe activar Javascript en su navegador o LuCI no funcionará correctamente." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "cualquiera" + +msgid "auto" +msgstr "auto" + +#, fuzzy +msgid "automatic" +msgstr "estático" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "puenteado" + +msgid "create:" +msgstr "crear:" + +msgid "creates a bridge over specified interface(s)" +msgstr "crea un puente sobre la interfaz o interfaces asociadas" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "desabilitar" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "expirado" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"archivo en el que se guardarán las direcciones DHCP cedidas" + +msgid "forward" +msgstr "retransmisión" + +msgid "full-duplex" +msgstr "full dúplex" + +msgid "half-duplex" +msgstr "half dúplex" + +msgid "help" +msgstr "ayuda" + +msgid "hidden" +msgstr "oculto" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "si el destino es una red" + +msgid "input" +msgstr "entrada" + +msgid "kB" +msgstr "KB" + +msgid "kB/s" +msgstr "KB/s" + +msgid "kbit/s" +msgstr "Kbit/s" + +msgid "local DNS file" +msgstr "Archvo DNS local" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "no" + +msgid "no link" +msgstr "sin enlace" + +msgid "none" +msgstr "ninguno" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "parado" + +msgid "on" +msgstr "activo" + +msgid "open" +msgstr "abierto" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "enrutado" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "marcado" + +msgid "unknown" +msgstr "desconocido" + +msgid "unlimited" +msgstr "ilimitado" + +msgid "unspecified" +msgstr "no especificado" + +msgid "unspecified -or- create:" +msgstr "no especificado -o- crear:" + +msgid "untagged" +msgstr "desmarcado" + +msgid "yes" +msgstr "sí" + +msgid "« Back" +msgstr "« Volver" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "Se creará una red adicional si deja esto desmarcado." + +#~ msgid "Join Network: Settings" +#~ msgstr "Unirse a Red: Configuración" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "Puerto %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "¡El puerto %d está desmarcado en múltiples VLANs!" + +#~ msgid "VLAN Interface" +#~ msgstr "Interfaz VLAN" diff --git a/feeds/luci/modules/luci-base/po/fr/base.po b/feeds/luci/modules/luci-base/po/fr/base.po new file mode 100644 index 0000000..b8a68f0 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/fr/base.po @@ -0,0 +1,3869 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2013-12-22 17:11+0200\n" +"Last-Translator: goofy \n" +"Language-Team: LANGUAGE \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(fenêtre de %d minutes, intervalle de %d secondes)" + +msgid "(%s available)" +msgstr "(%s disponible)" + +msgid "(empty)" +msgstr "(vide)" + +msgid "(no interfaces attached)" +msgstr "(pas d'interface connectée)" + +msgid "-- Additional Field --" +msgstr "-- Champ Supplémentaire --" + +msgid "-- Please choose --" +msgstr "-- Choisir --" + +msgid "-- custom --" +msgstr "-- autre --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Charge sur 1 minute :" + +msgid "15 Minute Load:" +msgstr "Charge sur 15 minutes :" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Charge sur 5 minutes :" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "Port des requêtes DNS" + +msgid "DNS server port" +msgstr "Port du serveur DNS" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"Les serveurs DNS seront
interrogés dans l'ordre du fichier de résolution" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "Adresse IPv4" + +msgid "IPv4-Gateway" +msgstr "Passerelle IPv4" + +msgid "IPv4-Netmask" +msgstr "Masque réseau IPv4" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"Adresse ou réseau IPv6 " +"(notation CIDR)" + +msgid "IPv6-Gateway" +msgstr "Passerelle IPv6" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "" +"Configuration des DELs" + +msgid "LED Name" +msgstr "Nom de la DEL" + +msgid "MAC-Address" +msgstr "Adresse MAC" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Nombre de baux DHCP maximum" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"taille maximum des paquets EDNS0" + +msgid "Max. concurrent queries" +msgstr "Maximum de requêtes concurrentes" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "Gestion du mode AR" + +msgid "ARP retry threshold" +msgstr "Niveau de ré-essai ARP" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "Ponts ATM" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" +"Identifiant de canal virtuel (VCI) ATM" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" +"Identifiant de chemin virtuel (VPI) ATM" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"Les ponts ATM présentent l'Ethernet encapsulé dans des connexions AAL5 comme " +"des interfaces réseau virtuelles Linux qui peuvent être utilisées avec DHCP " +"ou PPP pour se connecter au réseau du fournisseur d'accès." + +msgid "ATM device number" +msgstr "Numéro de périphérique ATM" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Concentrateur d'accès" + +msgid "Access Point" +msgstr "Point d'accès" + +msgid "Action" +msgstr "Action" + +msgid "Actions" +msgstr "Actions" + +msgid "Activate this network" +msgstr "Activer ce réseau" + +msgid "Active IPv4-Routes" +msgstr "Routes IPv4 actives" + +msgid "Active IPv6-Routes" +msgstr "Routes IPv6 actives" + +msgid "Active Connections" +msgstr "Connexions actives" + +msgid "Active DHCP Leases" +msgstr "Bails DHCP actifs" + +msgid "Active DHCPv6 Leases" +msgstr "Bails DHCPv6 actifs" + +msgid "Ad-Hoc" +msgstr "Ad-hoc" + +msgid "Add" +msgstr "Ajouter" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" +"Ajouter le suffixe du domaine local aux noms résolus d'après le fichier hosts" + +msgid "Add new interface..." +msgstr "Ajout d'une nouvelle interface..." + +msgid "Additional Hosts files" +msgstr "Fichiers hosts supplémetaires" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Adresse" + +msgid "Address to access local relay bridge" +msgstr "Adresse pour accéder au pont-relais local" + +msgid "Administration" +msgstr "Administration" + +msgid "Advanced Settings" +msgstr "Paramètres avancés" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Alerte" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" +"Autoriser l'authentification SSH par mot " +"de passe" + +msgid "Allow all except listed" +msgstr "Autoriser tout sauf ce qui est listé" + +msgid "Allow listed only" +msgstr "Autoriser seulement ce qui est listé" + +msgid "Allow localhost" +msgstr "Autoriser l'hôte local" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"Permettre à des hôtes distants de se conecter à des ports SSH locaux " +"correspondants (« forwarded »)" + +msgid "Allow root logins with password" +msgstr "Autoriser les connexions administrateur avec mot de passe" + +msgid "Allow the root user to login with password" +msgstr "" +"Autoriser l'utilisateur root à se connecter avec un mot de passe" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"Autorise les réponses de l'amont dans la plage 127.0.0.0/8, par ex. pour les " +"services RBL" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antenne 1" + +msgid "Antenna 2" +msgstr "Antenne 2" + +msgid "Antenna Configuration" +msgstr "Configuration de l'antenne" + +msgid "Any zone" +msgstr "N'importe quelle zone" + +msgid "Apply" +msgstr "Appliquer" + +msgid "Applying changes" +msgstr "Changements en cours" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Affecte les interfaces…" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Équipements associés" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Contrôleur sans fil Atheros 802.11%s " + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Authentification" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Autoritaire" + +msgid "Authorization Required" +msgstr "Autorisation requise" + +msgid "Auto Refresh" +msgstr "Rafraîchissement automatique" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Disponible" + +msgid "Available packages" +msgstr "Paquets disponibles" + +msgid "Average:" +msgstr "Moyenne :" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Retour" + +msgid "Back to Overview" +msgstr "Retour à la vue générale" + +msgid "Back to configuration" +msgstr "Retour à la configuration" + +msgid "Back to overview" +msgstr "Retour à la vue générale" + +msgid "Back to scan results" +msgstr "Retour aux résultats de la recherche" + +msgid "Background Scan" +msgstr "Recherche en arrière-plan" + +msgid "Backup / Flash Firmware" +msgstr "Sauvegarde / Mise à jour du micrologiciel" + +msgid "Backup / Restore" +msgstr "Sauvegarder / Restaurer" + +msgid "Backup file list" +msgstr "Liste des fichiers de sauvegarde" + +msgid "Bad address specified!" +msgstr "Adresse spécifiée incorrecte!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Voici la liste des fichiers à sauvegarder. Elle est constituée des fichiers " +"de configuration modifiés marqués par opkg, des fichiers de base essentiels, " +"et des motifs de sauvegarde définis par l'utilisateur." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Débit" + +msgid "Bogus NX Domain Override" +msgstr "Contourne les «  NX Domain » bogués" + +msgid "Bridge" +msgstr "Pont" + +msgid "Bridge interfaces" +msgstr "Interfaces en pont" + +msgid "Bridge unit number" +msgstr "Numéro d'unité du pont" + +msgid "Bring up on boot" +msgstr "L'activer au démarrage" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Contrôleur sans fil Broadcom 802.11%s" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Contrôleur sans fil Broadcom BCM%04x 802.11" + +msgid "Buffered" +msgstr "Temporisé" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Boutons" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Utilisation CPU (%)" + +msgid "Cancel" +msgstr "Annuler" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Chaîne" + +msgid "Changes" +msgstr "Changements" + +msgid "Changes applied." +msgstr "Changements appliqués." + +msgid "Changes the administrator password for accessing the device" +msgstr "Change le mot de passe administrateur pour accéder à l'équipement" + +msgid "Channel" +msgstr "Canal" + +msgid "Check" +msgstr "Vérification" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Somme de contrôle" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Choisissez la zone de pare-feu à laquelle vous voulez affecter cette " +"interface. Sélectionnez non précisé pour retirer l'interface de la " +"zone associée, ou remplissez le champ créer pour définir une " +"nouvelle zone et y inclure cette interface." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Choisissez le(s) réseau(x) que vous souhaitez attachez a cette interface " +"sans-fil ou remplissez le créer champ pour définir un nouveau " +"réseau. " + +msgid "Cipher" +msgstr "Code de chiffrement" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Cliquer sur \"Construire l'archive\" pour télécharger une archive tar des " +"fichiers de la configuration actuelle. Pour réinitialiser le micrologiciel " +"dans son état initial, cliquer sur \"Réinitialiser\" (possible seulement " +"avec les images de type squashfs)." + +msgid "Client" +msgstr "Client" + +msgid "Client ID to send when requesting DHCP" +msgstr "Identifiant client à envoyer dans les requêtes DHCP" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Fermer une connexion inactive après le délai donné en secondes, mettre 0 " +"pour garder les connexions" + +msgid "Close list..." +msgstr "Fermer la liste…" + +msgid "Collecting data..." +msgstr "Récupération de données..." + +msgid "Command" +msgstr "Commande" + +msgid "Common Configuration" +msgstr "Configuration commune" + +msgid "Compression" +msgstr "Compression" + +msgid "Configuration" +msgstr "Configuration" + +msgid "Configuration applied." +msgstr "Configuration appliquée." + +msgid "Configuration files will be kept." +msgstr "Les fichiers de configuration seront préservés." + +msgid "Confirmation" +msgstr "Confirmation" + +msgid "Connect" +msgstr "Se connecter" + +msgid "Connected" +msgstr "Connecté" + +msgid "Connection Limit" +msgstr "Limite de connexion" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Connexions" + +msgid "Country" +msgstr "Pays" + +msgid "Country Code" +msgstr "Code pays" + +msgid "Cover the following interface" +msgstr "Couvre l'interface suivante" + +msgid "Cover the following interfaces" +msgstr "Couvre les interfaces suivantes" + +msgid "Create / Assign firewall-zone" +msgstr "Créer / Assigner une zone du pare-feu" + +msgid "Create Interface" +msgstr "Créer une interface" + +msgid "Create a bridge over multiple interfaces" +msgstr "Créer un pont par dessus plusieurs interfaces" + +msgid "Critical" +msgstr "Critique" + +msgid "Cron Log Level" +msgstr "Niveau de journalisation de Cron" + +msgid "Custom Interface" +msgstr "Interface spécifique" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Personnaliser le comportement des DELs si possible." + +msgid "DHCP Leases" +msgstr "Baux DHCP" + +msgid "DHCP Server" +msgstr "Serveur DHCP" + +msgid "DHCP and DNS" +msgstr "DHCP et DNS" + +msgid "DHCP client" +msgstr "client DHCP" + +msgid "DHCP-Options" +msgstr "Options DHCP" + +msgid "DHCPv6 Leases" +msgstr "Bails DHCPv6" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "transmissions DNS" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Deboguage" + +msgid "Default %d" +msgstr "%d par défaut" + +msgid "Default gateway" +msgstr "Passerelle par défaut" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "État par défaut" + +msgid "Define a name for this network." +msgstr "Donne un nom à ce réseau." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Définir des options DHCP supplémentaires, par exemple " +"\"6,192.168.2.1,192.168.2.2\" qui publie différents serveurs " +"DNS à ses clients." + +msgid "Delete" +msgstr "Effacer" + +msgid "Delete this network" +msgstr "Supprimer ce réseau" + +msgid "Description" +msgstr "Description" + +msgid "Design" +msgstr "Apparence" + +msgid "Destination" +msgstr "Destination" + +msgid "Device" +msgstr "Équipement" + +msgid "Device Configuration" +msgstr "Configuration de l'équipement" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnostics" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Répertoire" + +msgid "Disable" +msgstr "Désactiver" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Désactiver DHCP " +"pour cette interface." + +msgid "Disable DNS setup" +msgstr "Désactiver la configuration DNS" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Désactiver l'émission périodique de balises wifi (« HW-Beacon »)" + +msgid "Disabled" +msgstr "Désactivé" + +msgid "Discard upstream RFC1918 responses" +msgstr "Jeter les réponses en RFC1918 amont" + +msgid "Displaying only packages containing" +msgstr "N'afficher que les paquets contenant" + +msgid "Distance Optimization" +msgstr "Optimisation de la distance" + +msgid "Distance to farthest network member in meters." +msgstr "Distance au membre du réseau le plus éloigné, en mètres." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Diversité" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq est un serveur DHCP combiné à un relais DNS pour les pare-feu NAT" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" +"Ne pas mettre en cache les réponses négatives, par ex. pour des domaines " +"inexistants" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Ne pas transmettre les requêtes qui ne peuvent être résolues par les " +"serveurs de noms publics" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" +"Ne pas transmettre les requêtes de recherche inverse pour les réseaux locaux" + +msgid "Do not send probe responses" +msgstr "Ne pas envoyer de réponses de test" + +msgid "Domain required" +msgstr "Domaine nécessaire" + +msgid "Domain whitelist" +msgstr "Liste blanche de domaines" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Ne pas transmettre de requêtes DNS " +"sans nom DNS" + +msgid "Download and install package" +msgstr "Télécharge et installe le paquet" + +msgid "Download backup" +msgstr "Télécharger la sauvegarde" + +msgid "Dropbear Instance" +msgstr "Session Dropbear" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear est un serveur SSH et intègre " +"un serveur SCP" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"DHCP dynamique" + +msgid "Dynamic tunnel" +msgstr "Tunnel dynamique" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Alloue dynamiquement des adresses pour les clients du DHCP. Si désactivé, " +"seuls les clients ayant des baux statiques seront gérés." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "Méthode EAP" + +msgid "Edit" +msgstr "Éditer" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Éditer cette interface" + +msgid "Edit this network" +msgstr "Éditer ce réseau" + +msgid "Emergency" +msgstr "Urgence" + +msgid "Enable" +msgstr "Activer" + +msgid "Enable STP" +msgstr "Activer le protocole STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Activer la mise à jour dynamique de l'extrémité du tunnel chez HE.net" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Activer la négociation IPv6 sur le lien PPP" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Activer la circulation de très grandes trames (Jumbo)" + +msgid "Enable NTP client" +msgstr "Activer client NTP" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Activer le serveur TFTP" + +msgid "Enable VLAN functionality" +msgstr "Acviter la gestion des VLANs" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Activer l'apprentissage et la péremption" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Activer ce montage" + +msgid "Enable this swap" +msgstr "Activer cette mémoire d'échange (swap)" + +msgid "Enable/Disable" +msgstr "Activer/Désactiver" + +msgid "Enabled" +msgstr "Activé" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" +"Activer le protocole STP sur " +"ce pont" + +msgid "Encapsulation mode" +msgstr "Mode encapsulé" + +msgid "Encryption" +msgstr "Chiffrement" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Effacement…" + +msgid "Error" +msgstr "Erreur" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Module Ethernet" + +msgid "Ethernet Switch" +msgstr "Commutateur Ethernet" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Étendre le nom d'hôte" + +msgid "Expires" +msgstr "Expire" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" +"Délai d'expiration des adresses allouées, le minimum est de 2 minutes " +"(2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Serveur distant de journaux système" + +msgid "External system log server port" +msgstr "Port du serveur distant de journaux système" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Trames rapides" + +msgid "File" +msgstr "Fichier" + +msgid "Filename of the boot image advertised to clients" +msgstr "Nom de fichier d'une image de démarrage publiée aux clients" + +msgid "Filesystem" +msgstr "Système de fichiers" + +msgid "Filter" +msgstr "Filtrer" + +msgid "Filter private" +msgstr "Filtrer les requêtes privées" + +msgid "Filter useless" +msgstr "Filtrer les requêtes inutiles" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Cherche et rejoint un réseau" + +msgid "Find package" +msgstr "Trouver un paquet" + +msgid "Finish" +msgstr "Terminer" + +msgid "Firewall" +msgstr "Pare-feu" + +msgid "Firewall Settings" +msgstr "Paramètres du pare-feu" + +msgid "Firewall Status" +msgstr "État du pare-feu" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Version du micrologiciel" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Port source fixe pour les requêtes DNS sortantes" + +msgid "Flash Firmware" +msgstr "Mise à jour du micrologiciel" + +msgid "Flash image..." +msgstr "Écriture de l'image…" + +msgid "Flash new firmware image" +msgstr "Écrire l'image du nouveau micrologiciel" + +msgid "Flash operations" +msgstr "Opérations d'écriture" + +msgid "Flashing..." +msgstr "Écriture…" + +msgid "Force" +msgstr "Forcer" + +msgid "Force CCMP (AES)" +msgstr "Forcer CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "Force le DHCP sur ce réseau même si un autre serveur est détecté." + +msgid "Force TKIP" +msgstr "Forcer TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Forcer TKIP et CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Transmettre le trafic DHCP" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Transmettre le trafic de diffusion" + +msgid "Forwarding mode" +msgstr "Mode de transmission" + +msgid "Fragmentation Threshold" +msgstr "Seuil de fragmentation" + +msgid "Frame Bursting" +msgstr "Rafale de trames" + +msgid "Free" +msgstr "Libre" + +msgid "Free space" +msgstr "Espace libre" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "Ghz" + +msgid "GPRS only" +msgstr "seulement GPRS" + +msgid "Gateway" +msgstr "Passerelle" + +msgid "Gateway ports" +msgstr "Ports de la passerelle" + +msgid "General Settings" +msgstr "Paramètres généraux" + +msgid "General Setup" +msgstr "Configuration générale" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Construire l'archive" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Contrôleur sans fil générique 802.11%s" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" +"La confirmation du nouveau mot de passe ne correspond pas, changement " +"annulé !" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Aller à la configuration du mot de passe…" + +msgid "Go to relevant configuration page" +msgstr "Aller à la page de configuration correspondante" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "Mot de passe HE.net" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Gestionnaire" + +msgid "Hang Up" +msgstr "Signal (HUP)" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Ici, vous pouvez configurer les aspects basiques de votre routeur comme son " +"nom ou son fuseau horaire." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"Vous pouvez copier ici des clés SSH publiques (une par ligne) pour une " +"authentification SSH sur clés publiques." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Contrôleur sans fil Hermes 802.11b" + +msgid "Hide ESSID" +msgstr "Cacher le ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Entrées d'hôtes" + +msgid "Host expiry timeout" +msgstr "Délai d'expiration pour les hôtes" + +msgid "Host-IP or Network" +msgstr "adresse IP ou réseau" + +msgid "Hostname" +msgstr "Nom d'hôte" + +msgid "Hostname to send when requesting DHCP" +msgstr "Nom d'hôte à envoyer dans une requête DHCP" + +msgid "Hostnames" +msgstr "Noms d'hôtes" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "Adresse IP" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "Pare-feu IPv4" + +msgid "IPv4 WAN Status" +msgstr "État IPv4 du WAN" + +msgid "IPv4 address" +msgstr "Adresse IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 et IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "Diffusion IPv4" + +msgid "IPv4 gateway" +msgstr "Passerelle IPv4" + +msgid "IPv4 netmask" +msgstr "Masque-réseau IPv4" + +msgid "IPv4 only" +msgstr "IPv4 seulement" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "longueur du préfixe IPv4" + +msgid "IPv4-Address" +msgstr "Adresse IPv4" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "Pare-feu IPv6" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "État IPv6 du WAN" + +msgid "IPv6 address" +msgstr "Adresse IPv6" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "Passerelle IPv6" + +msgid "IPv6 only" +msgstr "IPv6 seulement" + +msgid "IPv6 prefix" +msgstr "Préfixe IPv6" + +msgid "IPv6 prefix length" +msgstr "longueur du préfixe IPv6" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "Adresse IPv6" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6 dans IPv4 (RFC 4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6 sur IPv4 (6ème)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6 sur IPv4 (6 vers 4)" + +msgid "Identity" +msgstr "Identité" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" +"Monte le périphérique identifié par cet UUID au lieu d'un nom de " +"périphérique fixe" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" +"Monte le périphérique identifié par cette étiquette au lieu d'un nom de " +"périphérique fixe" + +msgid "If unchecked, no default route is configured" +msgstr "Décoché, aucune route par défaut n'est configurée" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "Décoché, les adresses des serveurs DNS publiés sont ignorées" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Si la mémoire physique n'est pas en quantité suffisante, les données " +"inutilisées peuvent être temporairement transférée sur une partition " +"d'échange, relevant la quantité de RAM disponible. Ce processus est lent car " +"la mémoire d'échange ne peut être accédée aux taux de transfert de la RAM." + +msgid "Ignore /etc/hosts" +msgstr "Ignorer /etc/hosts" + +msgid "Ignore interface" +msgstr "Ignorer l'interface" + +msgid "Ignore resolve file" +msgstr "Ignorer le fichier de résolution" + +msgid "Image" +msgstr "Image" + +msgid "In" +msgstr "Entrée" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Délai d'inactivité" + +msgid "Inbound:" +msgstr "Intérieur :" + +msgid "Info" +msgstr "Info" + +msgid "Initscript" +msgstr "Script d'initialisation" + +msgid "Initscripts" +msgstr "Scripts d'initialisation" + +msgid "Install" +msgstr "Installer" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Installer le paquet %q" + +msgid "Install protocol extensions..." +msgstr "Installation des extensions de protocole…" + +msgid "Installed packages" +msgstr "Paquets installés" + +msgid "Interface" +msgstr "Interface" + +msgid "Interface Configuration" +msgstr "Configuration de l'interface" + +msgid "Interface Overview" +msgstr "Vue d'ensemble de l'interface" + +msgid "Interface is reconnecting..." +msgstr "L'interface se reconnecte…" + +msgid "Interface is shutting down..." +msgstr "L'interface s'arrête…" + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "L'interface n'est pas présente ou pas encore connectée." + +msgid "Interface reconnected" +msgstr "Interface reconnectée" + +msgid "Interface shut down" +msgstr "Interface arrêtée" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "Erreur Serveur Interne" + +msgid "Invalid" +msgstr "Erreur : donnée entrée invalide" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" +"Identifiant VLAN invalide !Seuls les IDs entre %d et %d sont autorisés." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" +"Identifiant VLAN donné invalide ! Seuls les identifiants uniques sont " +"autorisés" + +msgid "Invalid username and/or password! Please try again." +msgstr "Nom d'utilisateur et/ou mot de passe invalides ! Réessayez !" + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Il semble que vous essayez de programmer votre routeur avec une image qui ne " +"tient pas dans sa mémoire flash, vérifiez s'il vous plait votre fichier-" +"image !" + +msgid "Java Script required!" +msgstr "Nécessite un Script Java !" + +msgid "Join Network" +msgstr "Rejoindre un réseau" + +msgid "Join Network: Wireless Scan" +msgstr "Rejoindre un réseau : recherche des réseaux sans-fil" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Garder le paramètrage" + +msgid "Kernel Log" +msgstr "Journal du noyau" + +msgid "Kernel Version" +msgstr "Version du noyau" + +msgid "Key" +msgstr "Clé" + +msgid "Key #%d" +msgstr "Clé n° %d" + +msgid "Kill" +msgstr "Tuer" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "Serveur L2TP" + +msgid "LCP echo failure threshold" +msgstr "Seuil d'erreur des échos LCP" + +msgid "LCP echo interval" +msgstr "Intervalle entre échos LCP" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Étiquette" + +msgid "Language" +msgstr "Langue" + +msgid "Language and Style" +msgstr "Langue et apparence" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Durée de validité d'un bail" + +msgid "Leasefile" +msgstr "Fichier de baux" + +msgid "Leasetime" +msgstr "Durée du bail" + +msgid "Leasetime remaining" +msgstr "Durée de validité" + +msgid "Leave empty to autodetect" +msgstr "Laisser vide pour l'auto-détection" + +msgid "Leave empty to use the current WAN address" +msgstr "Laisser vide pour utiliser l'adresse WAN actuelle" + +msgid "Legend:" +msgstr "Légende :" + +msgid "Limit" +msgstr "Limite" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Lien établi" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"Liste des serveurs auquels sont transmis les requêtes DNS" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "Liste des domaines où sont permises les réponses de type RFC1918" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" +"Liste des hôtes qui fournissent des résultats avec des « NX domain » bogués" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "Écouter seulement sur l'interface spécifié, sinon sur toutes" + +msgid "Listening port for inbound DNS queries" +msgstr "Port d'écoute des requêtes DNS entrantes" + +msgid "Load" +msgstr "Charger" + +msgid "Load Average" +msgstr "Charge moyenne" + +msgid "Loading" +msgstr "Chargement" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Adresse IPv4 locale" + +msgid "Local IPv6 address" +msgstr "Adresse IPv6 locale" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Démarrage local" + +msgid "Local Time" +msgstr "Heure Locale" + +msgid "Local domain" +msgstr "Domaine local" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Domaine local à préciser. Les noms correspondants à ce domaine ne sont " +"jamais transmis, mais résolus seulement depuis le serveur DHCP ou le fichier " +"Hosts" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"Suffixe du domaine local ajouté aux noms du serveur DHCP et du fichier Hosts" + +msgid "Local server" +msgstr "Serveur local" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" +"Trouve le nom d'hôte suivant le sous-réseau d'où vient la requête si " +"plusieurs adresses IPs sont possibles" + +msgid "Localise queries" +msgstr "Localiser les requêtes" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Niveau de journalisation" + +msgid "Log queries" +msgstr "Journaliser les requêtes" + +msgid "Logging" +msgstr "Journalisation" + +msgid "Login" +msgstr "Connexion" + +msgid "Logout" +msgstr "Déconnexion" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" +"Adresse allouée la plus basse, spécifiée par un décalage à partir de " +"l'adresse réseau." + +msgid "MAC-Address" +msgstr "Adresse MAC" + +msgid "MAC-Address Filter" +msgstr "Filtrage par adresses MAC" + +msgid "MAC-Filter" +msgstr "Filtrage par adresses MAC" + +msgid "MAC-List" +msgstr "Liste des adresses MAC" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Débit maximum" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Nombre maximum de baux DHCP actifs" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Nombre maximum de requêtes DNS au même moment" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "Taille maximum autorisée des paquets UDP EDNS.0" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "Délai d'attente maximum que le modem soit prêt" + +msgid "Maximum hold time" +msgstr "Temps de maintien maximum" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "Nombre maximum d'adresses allouées." + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "Mémoire" + +msgid "Memory usage (%)" +msgstr "Utilisation Mémoire (%)" + +msgid "Metric" +msgstr "Metrique" + +msgid "Minimum Rate" +msgstr "Débit minimum" + +msgid "Minimum hold time" +msgstr "Temps de maintien mimimum" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Extention de protocole manquante pour le proto %q" + +msgid "Mode" +msgstr "Mode" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Interface Modem" + +msgid "Modem init timeout" +msgstr "Délai max. d'initialisation du modem" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "Montage" + +msgid "Mount Point" +msgstr "Point de montage" + +msgid "Mount Points" +msgstr "Point de montage" + +msgid "Mount Points - Mount Entry" +msgstr "Points de montage - élément à monter" + +msgid "Mount Points - Swap Entry" +msgstr "Points de montage - partition d'échange" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Les points de montage définissent l'attachement d'un périphérique au système " +"de fichier" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Options de montage" + +msgid "Mount point" +msgstr "Point de montage" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Systèmes de fichiers montés" + +msgid "Move down" +msgstr "Descendre" + +msgid "Move up" +msgstr "Monter" + +msgid "Multicast Rate" +msgstr "Débit multidiffusion" + +msgid "Multicast address" +msgstr "Adresse multidiffusion" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "Serveurs NTP candidats" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Nom" + +msgid "Name of the new interface" +msgstr "Nom de la nouvelle interface" + +msgid "Name of the new network" +msgstr "Nom du nouveau réseau" + +msgid "Navigation" +msgstr "Navigation" + +msgid "Netmask" +msgstr "Masque de réseau" + +msgid "Network" +msgstr "Réseau" + +msgid "Network Utilities" +msgstr "Utilitaires réseau" + +msgid "Network boot image" +msgstr "Image de démarrage réseau" + +msgid "Network without interfaces." +msgstr "Réseau sans interfaces." + +msgid "Next »" +msgstr "Prochain »" + +msgid "No DHCP Server configured for this interface" +msgstr "Aucun serveur DHCP configuré sur cette interface" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Aucune chaîne dans cette table" + +msgid "No files found" +msgstr "Aucun fichier trouvé" + +msgid "No information available" +msgstr "Information indisponible" + +msgid "No negative cache" +msgstr "Pas de cache négatif" + +msgid "No network configured on this device" +msgstr "Ce périphérique n'a aucune adresse configurée" + +msgid "No network name specified" +msgstr "Aucun nom de réseau donné" + +msgid "No package lists available" +msgstr "Aucune liste de paquets disponible" + +msgid "No password set!" +msgstr "Pas de mot de passe positionné !" + +msgid "No rules in this chain" +msgstr "Aucune règle dans cette chaîne" + +msgid "No zone assigned" +msgstr "Aucune zone attribuée" + +msgid "Noise" +msgstr "Bruit" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Bruit :" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Vide" + +msgid "Normal" +msgstr "Normal" + +msgid "Not Found" +msgstr "Pas trouvé" + +msgid "Not associated" +msgstr "Pas associé" + +msgid "Not connected" +msgstr "Non connecté" + +msgid "Note: Configuration files will be erased." +msgstr "Note : les fichiers de configuration seront effacés." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Note" + +msgid "Nslookup" +msgstr "Nslookup" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "Configuration OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "Durée éteinte" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"Dans cette page vous pourrez configurer les interfaces réseaux. Vous pouvez " +"bridger différentes interfaces en cochant le champ \"bridger les interfaces" +"\" et en saisissant les noms des interfaces réseau séparées par des espaces. " +"Vous pouvez aussi utiliser la notation VLAN, INTERFACE.VLANNB (ex : eth0.1)." + +msgid "On-State Delay" +msgstr "Durée allumée" + +msgid "One of hostname or mac address must be specified!" +msgstr "Il faut indiquer un nom d'hôte ou une adresse MAC !" + +msgid "One or more fields contain invalid values!" +msgstr "Un ou plusieurs champs contiennent des valeurs incorrectes !" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Un ou plusieurs champs n'ont pas de valeur !" + +msgid "Open list..." +msgstr "Ouvrir la liste…" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Option modifiée" + +msgid "Option removed" +msgstr "Option retirée" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Options" + +msgid "Other:" +msgstr "Autres :" + +msgid "Out" +msgstr "Sortie" + +msgid "Outbound:" +msgstr "Extérieur :" + +msgid "Outdoor Channels" +msgstr "Canaux en extérieur" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "Modifier l'adresse MAC" + +msgid "Override MTU" +msgstr "Modifier le MTU" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "Modifier la passerelle dans les réponses DHCP" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"Remplacer le masque réseau envoyés aux clients. Il est normalement calculé à " +"partir du sous-réseau géré." + +msgid "Override the table used for internal routes" +msgstr "Modifier la table utilisée pour les routes internes" + +msgid "Overview" +msgstr "Vue d'ensemble" + +msgid "Owner" +msgstr "Propriétaire" + +msgid "PAP/CHAP password" +msgstr "Mot de passe PAP/CHAP" + +msgid "PAP/CHAP username" +msgstr "Identifiant PAP/CHAP" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "code PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "PPPoA Encapsulation" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "Nécessite le paquet libiwinfo !" + +msgid "Package lists are older than 24 hours" +msgstr "Les listes de paquets ont plus de 24 heures" + +msgid "Package name" +msgstr "Nom du paquet" + +msgid "Packets" +msgstr "Paquets" + +msgid "Part of zone %q" +msgstr "Fait partie de la zone %q" + +msgid "Password" +msgstr "Mot de passe" + +msgid "Password authentication" +msgstr "Authentification par mot de passe" + +msgid "Password of Private Key" +msgstr "Mot de passe de la clé privée" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "Mot de passe changé avec succès !" + +msgid "Path to CA-Certificate" +msgstr "Chemin de la CA" + +msgid "Path to Client-Certificate" +msgstr "Chemin du certificat-client" + +msgid "Path to Private Key" +msgstr "Chemin de la clé privée" + +msgid "Path to executable which handles the button event" +msgstr "Chemin du programme exécutable gérant les évènements liés au bouton" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Pic :" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Redémarrer" + +msgid "Perform reset" +msgstr "Réinitialiser" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Débit de la puce:" + +msgid "Physical Settings" +msgstr "Paramètres physiques" + +msgid "Ping" +msgstr "Ping" + +msgid "Pkts." +msgstr "Pqts." + +msgid "Please enter your username and password." +msgstr "Saisissez votre nom d'utilisateur et mot de passe." + +msgid "Policy" +msgstr "Politique" + +msgid "Port" +msgstr "Port" + +msgid "Port status:" +msgstr "Statut du port :" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" +"Suppose que le distant a disparu une fois le nombre donné d'erreurs d'échos " +"LCP ; utiliser 0 pour ignorer ces erreurs" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Empêche la communication directe entre clients" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Contrôleur sans fil Prism2/2.5/3 802.11b" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Continuer" + +msgid "Processes" +msgstr "Processus" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protocole" + +msgid "Protocol family" +msgstr "Famille du protocole" + +msgid "Protocol of the new interface" +msgstr "Protocole de la nouvelle interface" + +msgid "Protocol support is not installed" +msgstr "La gestion du protocole n'est pas installée" + +msgid "Provide NTP server" +msgstr "Fournir serveur NTP" + +msgid "Provide new network" +msgstr "Donner un nouveau réseau" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Qualitée" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "Seuil RTS/CTS" + +msgid "RX" +msgstr "Reçu" + +msgid "RX Rate" +msgstr "Débit en réception" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "Contrôleur sans fil RaLink 802.11%s" + +msgid "Radius-Accounting-Port" +msgstr "Port de la comptabilisation Radius" + +msgid "Radius-Accounting-Secret" +msgstr "Secret de la comptabilisation Radius" + +msgid "Radius-Accounting-Server" +msgstr "Serveur de la comptabilisation Radius" + +msgid "Radius-Authentication-Port" +msgstr "Port de l'authentification Radius" + +msgid "Radius-Authentication-Secret" +msgstr "Secret de l'authentification Radius" + +msgid "Radius-Authentication-Server" +msgstr "Serveur de l'authentification Radius" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "Lire /etc/ethers pour configurer le serveur DHCP" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"Voulez-vous vraiment supprimer cette interface? L'effacement ne peut être " +"annulé!\n" +"Vous pourriez perdre l'accès à l'équipement si vous y êtes connecté par " +"cette interface." + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"Voulez-vous vraiment supprimer ce réseau sans-fil? L'effacement ne peut être " +"annulé!\n" +"Vous pourriez perdre l'accès à l'équipement si vous y êtes connecté par ce " +"réseau." + +msgid "Really reset all changes?" +msgstr "Voulez-vous vraiment ré-initialiser toutes les modifications ?" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"Voulez-vous vraiment arrêter l'interface %s ?\n" +"Vous pourriez perdre l'accès à l'équipement si vous y êtes connecté par " +"cette interface." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"Voulez-vous vraiment arrêter l'interface %s ?\n" +"Vous pourriez perdre l'accès à l'équipement si vous y êtes connecté par " +"cette interface." + +msgid "Really switch protocol?" +msgstr "Voulez-vous vraiment changer de protocole ?" + +msgid "Realtime Connections" +msgstr "Connexions temps-réel" + +msgid "Realtime Graphs" +msgstr "Graphiques temps-réel" + +msgid "Realtime Load" +msgstr "Charge temps-réel" + +msgid "Realtime Traffic" +msgstr "Trafic temps-réel" + +msgid "Realtime Wireless" +msgstr "Qualité de réception actuelle" + +msgid "Rebind protection" +msgstr "Protection contre l'attaque « rebind »" + +msgid "Reboot" +msgstr "Redémarrage" + +msgid "Rebooting..." +msgstr "Redémarre…" + +msgid "Reboots the operating system of your device" +msgstr "Redémarrage du système d'exploitation de votre équipement" + +msgid "Receive" +msgstr "Reçoit" + +msgid "Receiver Antenna" +msgstr "Antenne émettrice" + +msgid "Reconnect this interface" +msgstr "Reconnecter cet interface" + +msgid "Reconnecting interface" +msgstr "Reconnecte cet interface" + +msgid "References" +msgstr "Références" + +msgid "Regulatory Domain" +msgstr "Domaine de certification" + +msgid "Relay" +msgstr "Relais" + +msgid "Relay Bridge" +msgstr "Pont-relais" + +msgid "Relay between networks" +msgstr "Relais entre réseaux" + +msgid "Relay bridge" +msgstr "Pont-relais" + +msgid "Remote IPv4 address" +msgstr "Adresse IPv4 distante" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Désinstaller" + +msgid "Repeat scan" +msgstr "Répéter la recherche" + +msgid "Replace entry" +msgstr "Remplacer l'entrée" + +msgid "Replace wireless configuration" +msgstr "Remplacer la configuration sans-fil" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "Nécessaire avec certains FAIs, par ex. : Charter avec DOCSIS 3" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Remise à zéro" + +msgid "Reset Counters" +msgstr "Remise à zéro des compteurs" + +msgid "Reset to defaults" +msgstr "Ré-initialisation" + +msgid "Resolv and Hosts Files" +msgstr "Fichiers Resolv et Hosts" + +msgid "Resolve file" +msgstr "Fichier de résolution des noms" + +msgid "Restart" +msgstr "Redémarrer" + +msgid "Restart Firewall" +msgstr "Redémarrer le pare-feu" + +msgid "Restore backup" +msgstr "Restaurer une sauvegarde" + +msgid "Reveal/hide password" +msgstr "Montrer/cacher le mot de passe" + +msgid "Revert" +msgstr "Revenir" + +msgid "Root" +msgstr "Racine" + +msgid "Root directory for files served via TFTP" +msgstr "Répertoire racine des fichiers fournis par TFTP" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Mot de passe du routeur" + +msgid "Routes" +msgstr "Routes" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Avec les routes statiques vous pouvez spécifier à travers quelle interface " +"ou passerelle un réseau peut être contacté." + +msgid "Run a filesystem check before mounting the device" +msgstr "" +"Faire un vérification du système de fichiers avant de monter le périphérique" + +msgid "Run filesystem check" +msgstr "Faire une vérification du système de fichiers" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "Accès SSH" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "Clés SSH" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Sauvegarder" + +msgid "Save & Apply" +msgstr "Sauvegarder et Appliquer" + +msgid "Save & Apply" +msgstr "Sauvegarder et appliquer" + +msgid "Scan" +msgstr "Scan" + +msgid "Scheduled Tasks" +msgstr "Tâches Régulières" + +msgid "Section added" +msgstr "Section ajoutée" + +msgid "Section removed" +msgstr "Section retirée" + +msgid "See \"mount\" manpage for details" +msgstr "Voir le manuel de « mount » pour les détails" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" +"Envoyer des demandes d'échos LCP à intervalles donnés, en secondes ; utile " +"uniqument associé à un seuil d'erreurs" + +msgid "Separate Clients" +msgstr "Isoler les clients" + +msgid "Separate WDS" +msgstr "WDS séparé" + +msgid "Server Settings" +msgstr "Paramètres du serveur" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Nom du service" + +msgid "Service Type" +msgstr "Type du service" + +msgid "Services" +msgstr "Services" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Configurer la synchronisation de l'heure" + +msgid "Setup DHCP Server" +msgstr "Configurer le serveur DHCP" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "Afficher la liste des fichiers de la sauvegarde actuelle" + +msgid "Shutdown this interface" +msgstr "Arrêter cet interface" + +msgid "Shutdown this network" +msgstr "Arrêter ce réseau" + +msgid "Signal" +msgstr "Signal" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Signal :" + +msgid "Size" +msgstr "Taille" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Passer au suivant" + +msgid "Skip to content" +msgstr "Skip to content" + +msgid "Skip to navigation" +msgstr "Skip to navigation" + +msgid "Slot time" +msgstr "Tranche de temps" + +msgid "Software" +msgstr "Logiciels" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Certains champs sont invalides, ne peut sauvegarder les valeurs !" + +msgid "Sorry, the object you requested was not found." +msgstr "Désolé, l'objet que vous avez demandé n'as pas été trouvé." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "Désolé, le serveur à rencontré une erreur inattendue." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"Désolé, il n'y a pas de gestion de mise à jour disponible, une nouvelle " +"image du micrologiciel doit être écrite manuellement. Reportez-vous S.V.P. " +"au wiki pour connaître les instructions d'installation spécifiques à votre " +"matériel." + +msgid "Sort" +msgstr "Trier" + +msgid "Source" +msgstr "Source" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "Indique l'état du bouton à gérer" + +msgid "Specifies the directory the device is attached to" +msgstr "Indique le répertoire auquel le périphérique est rattaché" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Indique le port d'écoute de cette instance Dropbear" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" +"Indique le nombre de requêtes ARP ratées au delà duquel les hôtes seront " +"supposés disparus" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "Indique le délai après quoi les hôtes seront supposés disparus" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Spécifiez ici la clé secrète de chiffrage." + +msgid "Start" +msgstr "Démarrer" + +msgid "Start priority" +msgstr "Priorité de démarrage" + +msgid "Startup" +msgstr "Démarrage" + +msgid "Static IPv4 Routes" +msgstr "Routes IPv4 statiques" + +msgid "Static IPv6 Routes" +msgstr "Routes IPv6 statiques" + +msgid "Static Leases" +msgstr "Baux Statiques" + +msgid "Static Routes" +msgstr "Routes statiques" + +msgid "Static WDS" +msgstr "WDS statique" + +msgid "Static address" +msgstr "Adresse statique" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"Les baux statiques sont utilisés pour donner des adresses IP fixes et des " +"noms symboliques à des clients DHCP. Il sont également nécessaires pour les " +"interfaces sans configuration dynamique où l'on fournit un bail aux seuls " +"hôtes configurés." + +msgid "Status" +msgstr "Status" + +msgid "Stop" +msgstr "Arrêter" + +msgid "Strict order" +msgstr "Ordre stricte" + +msgid "Submit" +msgstr "Soumettre" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Élement de partition d'échange" + +msgid "Switch" +msgstr "Commutateur" + +msgid "Switch %q" +msgstr "Commutateur %q" + +msgid "Switch %q (%s)" +msgstr "Commutateur %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Protocole du commutateur" + +msgid "Sync with browser" +msgstr "Synchro avec le navigateur" + +msgid "Synchronizing..." +msgstr "Synchronisation…" + +msgid "System" +msgstr "Système" + +msgid "System Log" +msgstr "Journal système" + +msgid "System Properties" +msgstr "Propriétés système" + +msgid "System log buffer size" +msgstr "Taille du tampon du journal système" + +msgid "TCP:" +msgstr "TCP :" + +msgid "TFTP Settings" +msgstr "Paramètres TFTP" + +msgid "TFTP server root" +msgstr "Racine du serveur TFTP" + +msgid "TX" +msgstr "Transmis" + +msgid "TX Rate" +msgstr "Débit en émission" + +msgid "Table" +msgstr "Table" + +msgid "Target" +msgstr "Cible" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Terminer" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"La section Configuration de l'équipement couvre les paramètres " +"physiques du matériel radio comme le canal, la puissance d'émission ou la " +"sélection de l'antenne, qui sont partagés entre tous les réseaux sans-fil " +"définis (si le matériel radio gère plusieurs réseaux SSID). Les paramètres " +"dépendant de chaque réseau comme le chiffrage ou le mode de fonctionnement " +"sont groupés dans Configuration de l'interface." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Le paquet libiwinfo-lua n'est pas installé. Vous devez l'installer " +"pour une configuration sans-fil fonctionnelle !" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" +"Le préfixe IPv6 attribué par le fournisseur, se termine généralement par " +"::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Les caractères autorisés sont : A-Z, a-z, " +"0-9 et _" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "Le périphérique de bloc contenant la partition (ex : /dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"Le système de fichiers utilisé pour formatter le support de stockage (ex : " +"ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"L'image du micrologiciel a été chargée. Ci-dessous la taille et la somme de " +"contrôle de cette image, comparez-les avec le fichier original pour vous " +"assurer de son intégrité.
Cliquez sur \"Continuer\" pour lancer la " +"procédure d'écriture." + +msgid "The following changes have been committed" +msgstr "Les changements suivants ont été appliqués" + +msgid "The following changes have been reverted" +msgstr "Les changements suivants ont été annulés" + +msgid "The following rules are currently active on this system." +msgstr "Les règles suivantes sont actuellement actives sur ce système." + +msgid "The given network name is not unique" +msgstr "Le nom de réseau donné n'est pas unique" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"Le matériel ne sait pas gérer plusieurs SSID et la configuration existante " +"sera remplacée si vous continuez." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" +"La longueur du préfixe IPv4 en bits, le reste est utilisé dans les adresses " +"IPv6" + +msgid "The length of the IPv6 prefix in bits" +msgstr "La longueur du préfixe IPv6 en bits" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"Les ports de votre équipement peuvent être configurés pour combiner " +"plusieurs VLANs dans " +"lesquels les machines connectées peuvent dialoguer directement l'une avec " +"l'autre. Les VLANs sont " +"souvent utilisés pour séparer différences sous-réseaux. Bien souvent il y a " +"un port d'uplink pour une connexion vers un réseau plus vaste, comme " +"internet et les autres ports sont réservés au réseau local." + +msgid "The selected protocol needs a device assigned" +msgstr "Le protocole sélectionné nécessite l'attribution d'un périphérique" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" +"Le système est en train d'effacer la partition de configuration et " +"redémarrera tout seul une fois cela fini." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes until you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." + +msgid "There are no active leases." +msgstr "Il n'y a aucun bail actif." + +msgid "There are no pending changes to apply!" +msgstr "Il n'y a aucun changement en attente d'être appliqués !" + +msgid "There are no pending changes to revert!" +msgstr "Il n'y a aucun changement à annuler !" + +msgid "There are no pending changes!" +msgstr "Il n'y a aucun changement en attente !" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"Il n'y a aucun périphérique attribué pour l'instant, liez s.v.p. un " +"périphérique réseau dans l'onglet \"Paramètres du matériel\"" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"Ce routeur n'a pas de mot de passe configuré. Veuillez configurer un mot de " +"passe pour l'utilisateur root pour protéger l'accès de votre interface web " +"et activer l'accès par SSH." + +msgid "This IPv4 address of the relay" +msgstr "L'adresse IPv4 du relais" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"Voici la liste des motifs de type glob shell utilisés pour sélectionner les " +"fichiers et répertoires à inclure durant la mise à jour système. Les " +"fichiers modifiés dans /etc/config/ et certains autres sont automatiquement " +"conservés." + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"Voici le contenu de /etc/rc.local. Placez-y vos propres commandes (avant le " +"« exit 0 ») pour qu'ils soient exécutés en fin de démarrage." + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" +"Il s'agit de l'adresse de l'extrémité locale attribuée par le fournisseur de " +"tunnels, elle se termine habituellement avec :2" + +msgid "" +"This is the only DHCP in the local network" +msgstr "C'est le seul serveur DHCP sur le réseau local" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" +"Ceci est le système crontab avec lequel sont définies les tâches récurrentes." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" +"Il s'agit habituellement de l'adresse du plus proche PoP géré par le " +"fournisseur de tunnels" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"Cette liste donne une vue d'ensemble des processus en exécution et leur " +"statut." + +msgid "This page allows the configuration of custom button actions" +msgstr "Cette page permet la configuration d'actions spécifiques des boutons" + +msgid "This page gives an overview over currently active network connections." +msgstr "" +"Cette page donne une vue d'ensemble des connexions réseaux actuellement " +"actives." + +msgid "This section contains no values yet" +msgstr "Cette section ne contient pas encore de valeur" + +msgid "Time Synchronization" +msgstr "Synchronisation de l'heure" + +msgid "Time Synchronization is not configured yet." +msgstr "La synchronisation de l'heure n'est pas encore configurée." + +msgid "Timezone" +msgstr "Fuseau horaire" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"Pour restaurer les fichiers de configuration, vous pouvez charger ici une " +"archive de sauvegarde construite précédemment." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Total disponible" + +msgid "Traceroute" +msgstr "Traceroute" + +msgid "Traffic" +msgstr "Trafic" + +msgid "Transfer" +msgstr "Transfert" + +msgid "Transmission Rate" +msgstr "Débit d'émission" + +msgid "Transmit" +msgstr "Transmet" + +msgid "Transmit Power" +msgstr "Puissance d'émission" + +msgid "Transmitter Antenna" +msgstr "Antenne émettrice" + +msgid "Trigger" +msgstr "Déclenchement" + +msgid "Trigger Mode" +msgstr "Mode de déclenchement" + +msgid "Tunnel ID" +msgstr "ID du tunnel" + +msgid "Tunnel Interface" +msgstr "Interface du tunnel" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Mode Turbo" + +msgid "Tx-Power" +msgstr "Puissance d'émission" + +msgid "Type" +msgstr "Type" + +msgid "UDP:" +msgstr "UDP :" + +msgid "UMTS only" +msgstr "seulement UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "Périphérique USB" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "Impossible d'envoyer" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Inconnu" + +msgid "Unknown Error, password not changed!" +msgstr "Erreur inconnue, mot de passe inchangé !" + +msgid "Unmanaged" +msgstr "non-géré" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Changements non appliqués" + +msgid "Unsupported protocol type." +msgstr "Type de protocole non pris en charge." + +msgid "Update lists" +msgstr "Mettre les listes à jour" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"Envoyer ici une image compatible avec le système de mise à jour pour " +"remplacer le micrologiciel actuel. Cochez \"Garder la configuration\" pour " +"maintenir la configuration actuelle (nécessite une image de micrologiciel " +"compatible)." + +msgid "Upload archive..." +msgstr "Envoi de l'archive…" + +msgid "Uploaded File" +msgstr "Fichier Uploadé" + +msgid "Uptime" +msgstr "Uptime" + +msgid "Use /etc/ethers" +msgstr "Utiliser /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Utiliser la passerelle DHCP" + +msgid "Use DNS servers advertised by peer" +msgstr "Utiliser les serveurs DNS publiés par le distant" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "Utiliser les codes-pays ISO/IEC 3166 alpha2." + +msgid "Use MTU on tunnel interface" +msgstr "Utiliser le MTU sur l'interface du tunnel" + +msgid "Use TTL on tunnel interface" +msgstr "Utiliser le TTL sur l'interface du tunnel" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Utiliser une marque de diffusion" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Utiliser des serveurs DNS spécifiques" + +msgid "Use default gateway" +msgstr "Utiliser la passerelle par défaut" + +msgid "Use gateway metric" +msgstr "Utiliser la métrique de la passerelle" + +msgid "Use routing table" +msgstr "Utiliser la table de routage" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"Utiliser le bouton Ajouter pour créer un nouveau bail. " +"L'adresse MAC identifie l'hôte, l'adresse IPv4 décrit " +"l'adresse fixe à utiliser et le nom d'hôte sera le nom symbolique " +"attribué à l'hôte qui fait la demande." + +msgid "Used" +msgstr "Utilisé" + +msgid "Used Key Slot" +msgstr "Clé utilisée" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Nom d'utilisateur" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLANs sur %q" + +msgid "VLANs on %q (%s)" +msgstr "VLANs sur %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "Serveur VPN" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "Classe de fournisseur à envoyer dans les requêtes DHCP" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Vérifier" + +msgid "Version" +msgstr "Version" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "Système ouvert WEP" + +msgid "WEP Shared Key" +msgstr "Clé partagée WEP" + +msgid "WEP passphrase" +msgstr "Mot de passe WEP" + +msgid "WMM Mode" +msgstr "Mode WMM" + +msgid "WPA passphrase" +msgstr "Mot de passe WPA" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"Le chiffrage WPA nécessite l'installation du paquet wpa_supplicant (en mode " +"client) ou hostapd (en mode Point d'accès ou Ad-hoc)." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "En attente de l'application des changements..." + +msgid "Waiting for command to complete..." +msgstr "En attente de la fin de la commande..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Attention" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Sans-fil" + +msgid "Wireless Adapter" +msgstr "Module Wi-Fi" + +msgid "Wireless Network" +msgstr "Réseau sans-fil" + +msgid "Wireless Overview" +msgstr "Présentation des réseaux sans-fil" + +msgid "Wireless Security" +msgstr "Sécurité des réseaux sans-fil" + +msgid "Wireless is disabled or not associated" +msgstr "Le Wi-Fi est désactivé ou non associé" + +msgid "Wireless is restarting..." +msgstr "Le Wi-Fi est ré-initialisé…" + +msgid "Wireless network is disabled" +msgstr "Le réseau Wi-Fi est désactivé" + +msgid "Wireless network is enabled" +msgstr "Le réseau Wi-Fi est activé" + +msgid "Wireless restarted" +msgstr "Wi-Fi ré-initialisé" + +msgid "Wireless shut down" +msgstr "Wi-Fi arrêté" + +msgid "Write received DNS requests to syslog" +msgstr "Écrire les requêtes DNS reçues dans syslog" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Gestion du mode XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Vous pouvez ici activer ou désactiver les scripts d'initialisation " +"installés. Les changements seront pris en compte après un redémarrage.
Attention: Si vous désactivez des scripts essentiels comme \"réseau" +"\", votre équipement pourrait ne plus être accessible !" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Vous devez activer Java Script dans votre navigateur pour que LuCI " +"fonctionne correctement." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "n'importe lequel" + +msgid "auto" +msgstr "auto" + +#, fuzzy +msgid "automatic" +msgstr "statique" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "ponté" + +msgid "create:" +msgstr "créer:" + +msgid "creates a bridge over specified interface(s)" +msgstr "créer un bridge entre plusieurs interfaces" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "désactiver" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "expiré" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "fichier dans lequel les baux DHCP seront stockés" + +msgid "forward" +msgstr "transfert" + +msgid "full-duplex" +msgstr "full-duplex" + +msgid "half-duplex" +msgstr "half-duplex" + +msgid "help" +msgstr "aide" + +msgid "hidden" +msgstr "cacher" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "si la destination est un réseau" + +msgid "input" +msgstr "entrée" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "fichier de résolution local" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "non" + +msgid "no link" +msgstr "pas de lien" + +msgid "none" +msgstr "aucun" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "Arrêté" + +msgid "on" +msgstr "Actif" + +msgid "open" +msgstr "ouvrir" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "routé" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "marqué" + +msgid "unknown" +msgstr "inconnu" + +msgid "unlimited" +msgstr "non limité" + +msgid "unspecified" +msgstr "non précisé" + +msgid "unspecified -or- create:" +msgstr "non précisé -ou- créer :" + +msgid "untagged" +msgstr "non marqué" + +msgid "yes" +msgstr "oui" + +msgid "« Back" +msgstr "« Retour" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "Un réseau supplémentaire sera créé si vous laissé ceci décoché." + +#~ msgid "Join Network: Settings" +#~ msgstr "Rejoindre un réseau : paramètres" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "Port %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "Le port %d n'est pas marqué dans plusieurs VLANs !" + +#~ msgid "VLAN Interface" +#~ msgstr "Interface du VLAN" diff --git a/feeds/luci/modules/luci-base/po/he/base.po b/feeds/luci/modules/luci-base/po/he/base.po new file mode 100644 index 0000000..5ed0029 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/he/base.po @@ -0,0 +1,3672 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-02-02 14:32+0200\n" +"Last-Translator: oranav \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "" + +msgid "(%s available)" +msgstr "(%s פנוי)" + +msgid "(empty)" +msgstr "(ריק)" + +msgid "(no interfaces attached)" +msgstr "(אין ממשק מצורף)" + +msgid "-- Additional Field --" +msgstr "-- שדה נוסף --" + +msgid "-- Please choose --" +msgstr "-- נא לבחור --" + +msgid "-- custom --" +msgstr "-- מותאם אישית --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "עומס במשך דקה:" + +msgid "15 Minute Load:" +msgstr "עומס במשך רבע שעה:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "עומס במשך 5 דקות:" + +msgid "BSSID" +msgstr "" + +msgid "DNS query port" +msgstr "DNS יציאת שאילתא" + +msgid "DNS server port" +msgstr "DNS יציאת שרת" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "IPv4-Address" +msgstr "כתובות IPv4" + +msgid "IPv4-Gateway" +msgstr "" + +msgid "IPv4-Netmask" +msgstr "" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"כתובת או רשת (CIDR) IPv6" + +msgid "IPv6-Gateway" +msgstr "" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "הגדרות LED" + +msgid "LED Name" +msgstr "שם LED" + +msgid "MAC-Address" +msgstr "כתובת-MAC" + +msgid "" +"Max. DHCP leases" +msgstr "" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" + +msgid "Max. concurrent queries" +msgstr "" + +msgid "%s - %s" +msgstr "" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "" + +msgid "AR Support" +msgstr "תמיכת AR" + +#, fuzzy +msgid "ARP retry threshold" +msgstr "סף נסיונות של ARP" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +#, fuzzy +msgid "ATM Bridges" +msgstr "גשרי ATM" + +#, fuzzy +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "מזהה ערוצים ווירטואליים של ATM" + +#, fuzzy +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "מזהה נתיבים ווירטואליים של ATM (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" + +msgid "ATM device number" +msgstr "מס' התקן של ATM" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +#, fuzzy +msgid "Access Concentrator" +msgstr "מרכז גישות" + +msgid "Access Point" +msgstr "נקודת גישה" + +msgid "Action" +msgstr "פעולה" + +msgid "Actions" +msgstr "פעולות" + +msgid "Activate this network" +msgstr "הפעל רשת זו" + +msgid "Active IPv4-Routes" +msgstr "" + +msgid "Active IPv6-Routes" +msgstr "" + +msgid "Active Connections" +msgstr "חיבורים פעילים" + +msgid "Active DHCP Leases" +msgstr "הרשאות DHCP פעילות" + +msgid "Active DHCPv6 Leases" +msgstr "הרשאות DHCPv6 פעילות" + +# צריך אימות של מישהו שמבין יותר במושגים האלו אם צריך בכלל לתרגם את זה או להשאיר כמו שזה +#, fuzzy +msgid "Ad-Hoc" +msgstr "אד-הוק" + +msgid "Add" +msgstr "הוסף" + +#, fuzzy +msgid "Add local domain suffix to names served from hosts files" +msgstr "הוסף דומיין מקומי לשמות המוגשים מהקבצים של המארח" + +msgid "Add new interface..." +msgstr "הוסף ממשק חדש..." + +msgid "Additional Hosts files" +msgstr "קבצי מארח נוספים" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "כתובת" + +msgid "Address to access local relay bridge" +msgstr "" + +#, fuzzy +msgid "Administration" +msgstr "מנהלה" + +msgid "Advanced Settings" +msgstr "הגדרות מתקדמות" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +#, fuzzy +msgid "Alert" +msgstr "אזעקה" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" + +#, fuzzy +msgid "Allow all except listed" +msgstr "אפשר הכל חוץ מהרשומים" + +msgid "Allow listed only" +msgstr "אפשר רשומים בלבד" + +#, fuzzy +msgid "Allow localhost" +msgstr "אפשר localhost" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" + +msgid "Allow root logins with password" +msgstr "" + +msgid "Allow the root user to login with password" +msgstr "" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "אנטנה 1" + +msgid "Antenna 2" +msgstr "אנטנה 2" + +msgid "Antenna Configuration" +msgstr "הגדרות אנטנה" + +# אזור? +#, fuzzy +msgid "Any zone" +msgstr "כל תחום" + +msgid "Apply" +msgstr "החל" + +msgid "Applying changes" +msgstr "מחיל הגדרות" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "הקצה ממשקים" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "תחנות קשורות" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "שלט אלחוטי Atheros 802.11%s" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "אימות" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "מוסמך" + +msgid "Authorization Required" +msgstr "דרוש אימות" + +msgid "Auto Refresh" +msgstr "רענון אוטומטי" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "זמין" + +msgid "Available packages" +msgstr "חבילות זמינות" + +msgid "Average:" +msgstr "ממוצע:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "חזרה" + +msgid "Back to Overview" +msgstr "חזרה לסקירה" + +msgid "Back to configuration" +msgstr "חזרה להגדרות" + +msgid "Back to overview" +msgstr "חזרה לסקירה" + +msgid "Back to scan results" +msgstr "חזרה לתוצאות סריקה" + +msgid "Background Scan" +msgstr "סריקת רקע" + +msgid "Backup / Flash Firmware" +msgstr "גיבוי / קושחת פלאש" + +msgid "Backup / Restore" +msgstr "גיבוי / שחזור" + +msgid "Backup file list" +msgstr "גיבוי רשימת קבצים" + +msgid "Bad address specified!" +msgstr "פורטה כתובת לא תקינה" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"למטה יש את הרשימה הסופית של קבצים לגיבוי. היא מורכבת ע\"י קבצי הגדרות ששונו, " +"המסומנים ב opkg ׁOpen PacKaGe Managementׂ, קבצי בסיס חיוניים ותבניות הגיבוי " +"המוגדרות ע\"י המשתמש." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Bogus NX Domain Override" +msgstr "" + +msgid "Bridge" +msgstr "גשר" + +msgid "Bridge interfaces" +msgstr "ממשקי גשר" + +msgid "Bridge unit number" +msgstr "מס' יח' גשר" + +#, fuzzy +msgid "Bring up on boot" +msgstr "הבא באיתחול" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "שלט אלחוטי Broadcom 802.11%s" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "שלט אלחוטי Broadcom BCM%04x 802.11" + +msgid "Buffered" +msgstr "" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "כפתורים" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "שימוש מעבד (%)" + +msgid "Cancel" +msgstr "בטל" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "שרשרת" + +msgid "Changes" +msgstr "שינויים" + +msgid "Changes applied." +msgstr "השינויים הוחלו" + +msgid "Changes the administrator password for accessing the device" +msgstr "משנה את סיסמת המנהל לגישה למכשיר" + +msgid "Channel" +msgstr "ערוץ" + +msgid "Check" +msgstr "לבדוק" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" + +msgid "Cipher" +msgstr "" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" + +msgid "Client" +msgstr "" + +msgid "Client ID to send when requesting DHCP" +msgstr "" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "סגור חיבורים לא פעילים אחרי מספר השניות שהוגדר, הזן 0 על-מנת לא לסגור" + +msgid "Close list..." +msgstr "סגור רשימה..." + +msgid "Collecting data..." +msgstr "אוסף מידע..." + +msgid "Command" +msgstr "פקודה" + +msgid "Common Configuration" +msgstr "הגדרות נפוצות" + +msgid "Compression" +msgstr "דחיסה" + +msgid "Configuration" +msgstr "הגדרות" + +msgid "Configuration applied." +msgstr "הגדרות הוחלו" + +msgid "Configuration files will be kept." +msgstr "קבצי ההגדרות ישמרו." + +msgid "Confirmation" +msgstr "אישור" + +msgid "Connect" +msgstr "התחבר" + +msgid "Connected" +msgstr "מחובר" + +msgid "Connection Limit" +msgstr "מגבלת חיבורים" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "חיבורים" + +msgid "Country" +msgstr "מדינה" + +msgid "Country Code" +msgstr "קוד מדינה" + +msgid "Cover the following interface" +msgstr "כסה את הממשק הבא" + +msgid "Cover the following interfaces" +msgstr "כסה את הממשקים הבאים" + +msgid "Create / Assign firewall-zone" +msgstr "צור / הקצה תחום-חומת אש" + +msgid "Create Interface" +msgstr "צור ממשק" + +msgid "Create a bridge over multiple interfaces" +msgstr "צור גשר בין מספר ממשקים" + +msgid "Critical" +msgstr "קריטי" + +msgid "Cron Log Level" +msgstr "" + +msgid "Custom Interface" +msgstr "ממשק מותאם אישית" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"מתאים את הגדרות ה-LED-ים במכשיר " +"(אם אפשרי)." + +msgid "DHCP Leases" +msgstr "הרשאות DHCP" + +msgid "DHCP Server" +msgstr "שרת DHCP" + +msgid "DHCP and DNS" +msgstr "DHCP ו- DNS" + +msgid "DHCP client" +msgstr "לקוח DHCP" + +msgid "DHCP-Options" +msgstr "אפשרויות-DHCP" + +msgid "DHCPv6 Leases" +msgstr "הרשאות DHCPv6" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Default %d" +msgstr "" + +msgid "Default gateway" +msgstr "" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "" + +msgid "Define a name for this network." +msgstr "הגדר שם לרשת זו" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"הגדר אפשרויות DHCP נוספות, למשל \"6,192.168.2.1,192.168.2.2\" " +"אשר מציגות שרתי DNS שונים ללקוח" + +msgid "Delete" +msgstr "למחוק" + +msgid "Delete this network" +msgstr "מחק רשת זו" + +msgid "Description" +msgstr "תיאור" + +msgid "Design" +msgstr "עיצוב" + +msgid "Destination" +msgstr "יעד" + +msgid "Device" +msgstr "מכשיר" + +msgid "Device Configuration" +msgstr "הגדרות מכשיר" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "אבחון" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" + +msgid "Disable DNS setup" +msgstr "" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Discard upstream RFC1918 responses" +msgstr "" + +msgid "Displaying only packages containing" +msgstr "מציג רק חבילות המכילות" + +msgid "Distance Optimization" +msgstr "" + +msgid "Distance to farthest network member in meters." +msgstr "מרחק לנק' הרשת הרחוקה ביותר במטרים" + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "גיוון" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "" + +msgid "Domain required" +msgstr "" + +msgid "Domain whitelist" +msgstr "" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" + +msgid "Download and install package" +msgstr "הורד והתקן חבילות" + +msgid "Download backup" +msgstr "הורד גיבוי" + +msgid "Dropbear Instance" +msgstr "" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear מאפשר גישת SSH רשתית ושרת SCP מובנה" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "DHCP דינאמי" + +msgid "Dynamic tunnel" +msgstr "" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "" + +msgid "Edit" +msgstr "ערוך" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "ערוך ממשק זה" + +msgid "Edit this network" +msgstr "ערוך רשת זו" + +msgid "Emergency" +msgstr "מצב חרום" + +msgid "Enable" +msgstr "אפשר" + +msgid "Enable STP" +msgstr "אפשר STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +msgid "Enable NTP client" +msgstr "" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "אפשר שרת TFTP" + +msgid "Enable VLAN functionality" +msgstr "אפשר תפקוד VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "אפשר למידה והזדקנות" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "" + +msgid "Enable this swap" +msgstr "" + +msgid "Enable/Disable" +msgstr "" + +msgid "Enabled" +msgstr "אפשר" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" + +msgid "Encapsulation mode" +msgstr "" + +msgid "Encryption" +msgstr "הצפנה" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "מוחק..." + +msgid "Error" +msgstr "שגיאה" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "" + +msgid "Ethernet Switch" +msgstr "" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "" + +msgid "External system log server port" +msgstr "" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Filename of the boot image advertised to clients" +msgstr "" + +msgid "Filesystem" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Filter private" +msgstr "" + +msgid "Filter useless" +msgstr "" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "" + +msgid "Find package" +msgstr "" + +msgid "Finish" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Firewall Settings" +msgstr "" + +msgid "Firewall Status" +msgstr "" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "" + +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +msgid "Flash Firmware" +msgstr "" + +msgid "Flash image..." +msgstr "" + +msgid "Flash new firmware image" +msgstr "" + +msgid "Flash operations" +msgstr "" + +msgid "Flashing..." +msgstr "" + +msgid "Force" +msgstr "" + +msgid "Force CCMP (AES)" +msgstr "" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" + +msgid "Force TKIP" +msgstr "" + +msgid "Force TKIP and CCMP (AES)" +msgstr "" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "" + +msgid "Forwarding mode" +msgstr "" + +msgid "Fragmentation Threshold" +msgstr "" + +msgid "Frame Bursting" +msgstr "" + +msgid "Free" +msgstr "" + +msgid "Free space" +msgstr "" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "" + +msgid "GPRS only" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Gateway ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General Setup" +msgstr "" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "" + +msgid "Hang Up" +msgstr "" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "" + +msgid "Hide ESSID" +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Hostname to send when requesting DHCP" +msgstr "" + +msgid "Hostnames" +msgstr "" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 Firewall" +msgstr "" + +msgid "IPv4 WAN Status" +msgstr "" + +msgid "IPv4 address" +msgstr "כתבות IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 ו-IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "IPv4 gateway" +msgstr "" + +msgid "IPv4 netmask" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 Firewall" +msgstr "" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "" + +msgid "IPv6 address" +msgstr "" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "IPv6 prefix" +msgstr "" + +msgid "IPv6 prefix length" +msgstr "" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +msgid "Identity" +msgstr "" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "" + +msgid "Ignore resolve file" +msgstr "" + +msgid "Image" +msgstr "" + +msgid "In" +msgstr "" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "" + +msgid "Inbound:" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Initscript" +msgstr "" + +msgid "Initscripts" +msgstr "" + +msgid "Install" +msgstr "" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "" + +msgid "Install protocol extensions..." +msgstr "" + +msgid "Installed packages" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface Overview" +msgstr "" + +msgid "Interface is reconnecting..." +msgstr "" + +msgid "Interface is shutting down..." +msgstr "" + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "" + +msgid "Interface reconnected" +msgstr "" + +msgid "Interface shut down" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "מספר VLAN שגוי! רק ערכים בין %d לבין %d הם חוקיים." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "שם משתמש ו/או סיסמה שגויים! אנא נסה שנית." + +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" + +msgid "Java Script required!" +msgstr "" + +msgid "Join Network" +msgstr "" + +msgid "Join Network: Wireless Scan" +msgstr "" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "" + +msgid "Kernel Log" +msgstr "" + +msgid "Kernel Version" +msgstr "" + +msgid "Key" +msgstr "" + +msgid "Key #%d" +msgstr "" + +msgid "Kill" +msgstr "" + +msgid "L2TP" +msgstr "" + +msgid "L2TP Server" +msgstr "" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "" + +msgid "LLC" +msgstr "" + +msgid "Label" +msgstr "" + +msgid "Language" +msgstr "" + +msgid "Language and Style" +msgstr "" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Leasefile" +msgstr "" + +msgid "Leasetime" +msgstr "" + +msgid "Leasetime remaining" +msgstr "" + +msgid "Leave empty to autodetect" +msgstr "" + +msgid "Leave empty to use the current WAN address" +msgstr "" + +msgid "Legend:" +msgstr "" + +msgid "Limit" +msgstr "" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "עומס" + +msgid "Load Average" +msgstr "עומס ממוצע" + +msgid "Loading" +msgstr "טוען" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "כתובת IPv4 מקומית" + +msgid "Local IPv6 address" +msgstr "כתובת IPv6 מקומית" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Local domain" +msgstr "" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "שרת מקומי" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "" + +msgid "Log queries" +msgstr "" + +msgid "Logging" +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "MAC-Address Filter" +msgstr "" + +msgid "MAC-Filter" +msgstr "" + +msgid "MAC-List" +msgstr "" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +msgid "Maximum hold time" +msgstr "" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "" + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory usage (%)" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Minimum Rate" +msgstr "" + +msgid "Minimum hold time" +msgstr "" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "" + +msgid "Mount Points" +msgstr "" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "" + +msgid "Mount point" +msgstr "" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Multicast Rate" +msgstr "" + +msgid "Multicast address" +msgstr "" + +msgid "NAS ID" +msgstr "" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "שם" + +msgid "Name of the new interface" +msgstr "" + +msgid "Name of the new network" +msgstr "" + +msgid "Navigation" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Utilities" +msgstr "" + +msgid "Network boot image" +msgstr "" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "" + +msgid "No DHCP Server configured for this interface" +msgstr "" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "" + +msgid "No files found" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "" + +msgid "No network name specified" +msgstr "" + +msgid "No package lists available" +msgstr "אין רשימת חבילות זמינה" + +msgid "No password set!" +msgstr "לא הוגדרה סיסמה!" + +msgid "No rules in this chain" +msgstr "" + +msgid "No zone assigned" +msgstr "" + +msgid "Noise" +msgstr "" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "" + +msgid "Not connected" +msgstr "לא מחובר" + +msgid "Note: Configuration files will be erased." +msgstr "" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "OPKG-Configuration" +msgstr "" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "ישנם שדות המכילים ערכים בלתי חוקיים!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "" + +msgid "Open list..." +msgstr "" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "" + +msgid "Option removed" +msgstr "" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Other:" +msgstr "" + +msgid "Out" +msgstr "" + +msgid "Outbound:" +msgstr "" + +msgid "Outdoor Channels" +msgstr "" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Owner" +msgstr "" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "PPP" +msgstr "" + +msgid "PPPoA Encapsulation" +msgstr "" + +msgid "PPPoATM" +msgstr "" + +msgid "PPPoE" +msgstr "" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Package lists are older than 24 hours" +msgstr "" + +msgid "Package name" +msgstr "שם החבילה" + +msgid "Packets" +msgstr "" + +msgid "Part of zone %q" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password authentication" +msgstr "" + +msgid "Password of Private Key" +msgstr "" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "נתיב למפתח הפרטי" + +msgid "Path to executable which handles the button event" +msgstr "" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "" + +msgid "Perform reset" +msgstr "" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "" + +msgid "Please enter your username and password." +msgstr "אנא הזן את שם המשתמש והסיסמה שלך:" + +msgid "Policy" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Port status:" +msgstr "" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Protocol family" +msgstr "" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "" + +msgid "RX" +msgstr "" + +msgid "RX Rate" +msgstr "קצב קליטה" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"האם למחוק את הרשת האלחוטית הזו? המחיקה אינה ניתנת לביטול!\n" +"ייתכן ותאבד גישה לנתב הזה אם אתה מחובר דרך השרת הזו." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "" + +msgid "Realtime Connections" +msgstr "" + +msgid "Realtime Graphs" +msgstr "" + +msgid "Realtime Load" +msgstr "" + +msgid "Realtime Traffic" +msgstr "" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "" + +msgid "Rebooting..." +msgstr "" + +msgid "Reboots the operating system of your device" +msgstr "" + +msgid "Receive" +msgstr "" + +msgid "Receiver Antenna" +msgstr "" + +msgid "Reconnect this interface" +msgstr "" + +msgid "Reconnecting interface" +msgstr "" + +msgid "References" +msgstr "" + +msgid "Regulatory Domain" +msgstr "" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "" + +msgid "Repeat scan" +msgstr "" + +msgid "Replace entry" +msgstr "" + +msgid "Replace wireless configuration" +msgstr "" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Reset Counters" +msgstr "" + +msgid "Reset to defaults" +msgstr "" + +msgid "Resolv and Hosts Files" +msgstr "" + +msgid "Resolve file" +msgstr "" + +msgid "Restart" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restore backup" +msgstr "" + +msgid "Reveal/hide password" +msgstr "" + +msgid "Revert" +msgstr "" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "הרץ בדיקת מערכת קבצים" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save & Apply" +msgstr "" + +msgid "Save & Apply" +msgstr "" + +msgid "Scan" +msgstr "" + +msgid "Scheduled Tasks" +msgstr "" + +msgid "Section added" +msgstr "" + +msgid "Section removed" +msgstr "" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "" + +msgid "Separate WDS" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "" + +msgid "Service Type" +msgstr "" + +msgid "Services" +msgstr "שירותים" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "סנכרון זמן" + +msgid "Setup DHCP Server" +msgstr "" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "" + +msgid "Shutdown this network" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "" + +msgid "Size" +msgstr "" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "" + +msgid "Skip to content" +msgstr "דלג אל התוכן" + +msgid "Skip to navigation" +msgstr "דלג אל הניווט" + +msgid "Slot time" +msgstr "" + +msgid "Software" +msgstr "תוכנה" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "חלק מהשדות אינם תקינים, אין אפשרות לשמור את הערכים!" + +msgid "Sorry, the object you requested was not found." +msgstr "סליחה, אך האובייקט שביקשת אינו נמצא." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "סליחה, השרת נתקל בשגיאה לא צפויה." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"סליחה, אין תמיכה בעדכון מערכת, ולכן קושחה חדשה חייבת להיצרב ידנית. אנא פנה " +"אל ה-wiki של OpenWrt/LEDE עבור הוראות ספציפיות למכשיר שלך." + +msgid "Sort" +msgstr "מיין" + +msgid "Source" +msgstr "מקור" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start priority" +msgstr "" + +msgid "Startup" +msgstr "אתחול" + +msgid "Static IPv4 Routes" +msgstr "ניתובי IPv4 סטטיים" + +msgid "Static IPv6 Routes" +msgstr "ניתובי IPv6 סטטיים" + +msgid "Static Leases" +msgstr "הקצאות סטטיות" + +msgid "Static Routes" +msgstr "ניתובים סטטיים" + +msgid "Static WDS" +msgstr "WDS סטטי" + +msgid "Static address" +msgstr "כתובת סטטית" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"הקצאות סטטיות נועדו להקצות כתובות IP קבועות ואת שם הרשת שלהן ללקוחות DHCP. " +"הן נחוצות גם עבור הגדרות ממשק שאינן דינאמיות, בהן מטופלות רק ישויות בעלות " +"הקצאה מתאימה." + +msgid "Status" +msgstr "מצב" + +msgid "Stop" +msgstr "עצור" + +msgid "Strict order" +msgstr "" + +msgid "Submit" +msgstr "שלח" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "" + +msgid "Switch %q" +msgstr "" + +msgid "Switch %q (%s)" +msgstr "" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "" + +msgid "Sync with browser" +msgstr "" + +msgid "Synchronizing..." +msgstr "" + +msgid "System" +msgstr "" + +msgid "System Log" +msgstr "" + +msgid "System Properties" +msgstr "" + +msgid "System log buffer size" +msgstr "" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "הגדרות TFTP" + +msgid "TFTP server root" +msgstr "" + +msgid "TX" +msgstr "שידור" + +msgid "TX Rate" +msgstr "קצב שידור" + +msgid "Table" +msgstr "טבלה" + +msgid "Target" +msgstr "יעד" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "" + +msgid "The following changes have been reverted" +msgstr "" + +msgid "The following rules are currently active on this system." +msgstr "החוקים הבאים מאופשרים כרגע במערכת זו." + +msgid "The given network name is not unique" +msgstr "השם שניתן לרשת איננו ייחודי" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "החומרה אינה תומכת בריבוי SSID ולכן ההגדרות הנוכחיות יוחלפו אם תמשיך." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" + +msgid "There are no active leases." +msgstr "" + +msgid "There are no pending changes to apply!" +msgstr "" + +msgid "There are no pending changes to revert!" +msgstr "" + +msgid "There are no pending changes!" +msgstr "" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "רשימה זו מציגה סקירה של תהליכי המערכת הרצים כרגע ואת מצבם." + +msgid "This page allows the configuration of custom button actions" +msgstr "דף זה מאפשר להגדיר פעולות מיוחדות עבור הלחצנים." + +msgid "This page gives an overview over currently active network connections." +msgstr "דף זה מציג סקירה של חיבורי הרשת הפעילים כרגע." + +msgid "This section contains no values yet" +msgstr "אזור זה עדיין לא מכיל ערכים." + +msgid "Time Synchronization" +msgstr "סנכרון זמן" + +msgid "Time Synchronization is not configured yet." +msgstr "סנכרון זמן עדיין לא הוגדר." + +msgid "Timezone" +msgstr "אזור זמן" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"על מנת לשחזר את קבצי ההגדרות, באפשרותך להעלות ארכיון גיבוי שנוצר לפני כן." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "סה\"כ פנוי" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "תעבורה" + +msgid "Transfer" +msgstr "העברה" + +msgid "Transmission Rate" +msgstr "קצב שידור" + +msgid "Transmit" +msgstr "שידור" + +msgid "Transmit Power" +msgstr "עוצמת שידור" + +msgid "Transmitter Antenna" +msgstr "אנטנת שידור" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "" + +msgid "Tx-Power" +msgstr "עוצמת שידור" + +msgid "Type" +msgstr "" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "" + +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +msgid "USB Device" +msgstr "" + +msgid "UUID" +msgstr "" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Unknown Error, password not changed!" +msgstr "" + +msgid "Unmanaged" +msgstr "" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "" + +msgid "Unsupported protocol type." +msgstr "" + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "" + +msgid "Uploaded File" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Use /etc/ethers" +msgstr "" + +msgid "Use DHCP gateway" +msgstr "" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "השתמש בדגל broadcast" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "השתמש בשרתי DNS מותאמים אישית" + +msgid "Use default gateway" +msgstr "" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "השתמש בטבלת ניתוב" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "שם משתמש" + +msgid "VC-Mux" +msgstr "" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "" + +msgid "VLANs on %q (%s)" +msgstr "" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "שרת VPN" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "גרסה" + +msgid "WDS" +msgstr "" + +msgid "WEP Open System" +msgstr "" + +msgid "WEP Shared Key" +msgstr "" + +msgid "WEP passphrase" +msgstr "סיסמת WEP" + +msgid "WMM Mode" +msgstr "" + +msgid "WPA passphrase" +msgstr "סיסמת WPA" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "אזהרה" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless Adapter" +msgstr "" + +msgid "Wireless Network" +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Wireless Security" +msgstr "" + +msgid "Wireless is disabled or not associated" +msgstr "" + +msgid "Wireless is restarting..." +msgstr "" + +msgid "Wireless network is disabled" +msgstr "רשת אלחוטית מנוטרלת" + +msgid "Wireless network is enabled" +msgstr "רשת אלחוטית מאופשרת" + +msgid "Wireless restarted" +msgstr "" + +msgid "Wireless shut down" +msgstr "" + +msgid "Write received DNS requests to syslog" +msgstr "" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "אתה חייב להפעיל את Java Script בדפדפן שלך; אחרת, LuCI לא יפעל כראוי." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "כלשהו" + +msgid "auto" +msgstr "אוטומטי" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "" + +msgid "create:" +msgstr "" + +msgid "creates a bridge over specified interface(s)" +msgstr "" + +msgid "dB" +msgstr "" + +msgid "dBm" +msgstr "" + +msgid "disable" +msgstr "בטל" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" + +msgid "forward" +msgstr "קדימה" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "עזרה" + +msgid "hidden" +msgstr "" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "אם היעד הוא רשת" + +msgid "input" +msgstr "קלט" + +msgid "kB" +msgstr "" + +msgid "kB/s" +msgstr "" + +msgid "kbit/s" +msgstr "" + +msgid "local DNS file" +msgstr "" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "לא" + +msgid "no link" +msgstr "" + +msgid "none" +msgstr "ללא" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "כבוי" + +msgid "on" +msgstr "פועל" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "מנותב" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "מתויג" + +msgid "unknown" +msgstr "" + +msgid "unlimited" +msgstr "ללא הגבלה" + +msgid "unspecified" +msgstr "לא מוגדר" + +msgid "unspecified -or- create:" +msgstr "לא מוגדר -או- יצר" + +msgid "untagged" +msgstr "לא מתויג" + +msgid "yes" +msgstr "כן" + +msgid "« Back" +msgstr "<< אחורה" + +#, fuzzy +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "רשת נוספת תווצר אם תשאיר את זה לא מסומן" + +#~ msgid "CPU" +#~ msgstr "מעבד" diff --git a/feeds/luci/modules/luci-base/po/hu/base.po b/feeds/luci/modules/luci-base/po/hu/base.po new file mode 100644 index 0000000..d7c1927 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/hu/base.po @@ -0,0 +1,3857 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-01-31 09:59+0200\n" +"Last-Translator: Gabor \n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d perces ablak, %d másodperces intervallum)" + +msgid "(%s available)" +msgstr "(%s elérhető)" + +msgid "(empty)" +msgstr "(üres)" + +msgid "(no interfaces attached)" +msgstr "(nincs csatalkoztatott interfész)" + +msgid "-- Additional Field --" +msgstr "-- További mező --" + +msgid "-- Please choose --" +msgstr "-- Kérem válasszon --" + +msgid "-- custom --" +msgstr "-- egyéni --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Terhelés (utolsó 1 perc):" + +msgid "15 Minute Load:" +msgstr "Terhelés (utolsó 15 perc):" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Terhelés (utolsó 5 perc):" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "DNS lekérdezési port" + +msgid "DNS server port" +msgstr "DNS szerver port" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"DNS szerverek a resolv fájl " +"sorrendjében" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-cím" + +msgid "IPv4-Gateway" +msgstr "IPv4-útválasztó" + +msgid "IPv4-Netmask" +msgstr "IPv4-Netmask" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-cím, vagy hálózat " +"(CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-útválasztó" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "LED konfiguráció" + +msgid "LED Name" +msgstr "LED Név" + +msgid "MAC-Address" +msgstr "MAC-cím" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Max. DHCP bérlés" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Max. EDNS0 csomagméret" + +msgid "Max. concurrent queries" +msgstr "Max. párhuzamos lekérdezés" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "AR Támogatás" + +msgid "ARP retry threshold" +msgstr "ARP újrapróbálkozási küszöbérték" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "ATM Hidak" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "ATM Virtuális Csatorna Azonosító (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "ATM Virtuális Út Azonosító (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"Az ATM hidak az AAL5-be ágyazott ethernet kapcsolatokat mint virtuális Linux " +"hálózati interfész mutatják, mely így DHCP-vel vagy PPP-vel összekapcsolva " +"használható a szolgáltatói hálózatba történő betárcsázáshoz." + +msgid "ATM device number" +msgstr "ATM eszközszám" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Elérési központ" + +msgid "Access Point" +msgstr "Hozzáférési pont" + +msgid "Action" +msgstr "Művelet" + +msgid "Actions" +msgstr "Műveletek" + +msgid "Activate this network" +msgstr "Hálózat aktiválása" + +msgid "Active IPv4-Routes" +msgstr "" +"Aktív IPv4 útvonalak" + +msgid "Active IPv6-Routes" +msgstr "" +"Aktív IPv6 útvonalak" + +msgid "Active Connections" +msgstr "Aktív kapcsolatok" + +msgid "Active DHCP Leases" +msgstr "Aktív DHCP bérletek" + +msgid "Active DHCPv6 Leases" +msgstr "Aktív DHCPv6 bérletek" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Hozzáadás" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" +"Helyi tartomány utótag hozzáadása a hosts fájlokból kiszolgált nevekhez" + +msgid "Add new interface..." +msgstr "Új interfész hozzáadása..." + +msgid "Additional Hosts files" +msgstr "További 'hosts' fájlok" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Cím" + +msgid "Address to access local relay bridge" +msgstr "Helyi közvetítő híd elérési címe" + +msgid "Administration" +msgstr "Adminisztráció" + +msgid "Advanced Settings" +msgstr "Haladó beállítások" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Riasztás" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" +"SSH jelszó hitelesítés engedélyezése" + +msgid "Allow all except listed" +msgstr "Összes engedélyezése a felsoroltakon kívül" + +msgid "Allow listed only" +msgstr "Csak a felsoroltak engedélyezése" + +msgid "Allow localhost" +msgstr "Lolcalhost engedélyezése" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"Távoli hostok csatlakozásának engedélyezése a helyi SSH továbbított " +"portokhoz." + +msgid "Allow root logins with password" +msgstr "root jelszavas bejelentkezésének engedélyezése" + +msgid "Allow the root user to login with password" +msgstr "Engedélyezi a root felhasználó jelszavas bejelentkezését" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"A 127.0.0.0/8-as tartományba eső DNS válaszok engedélyezése (pl. RBL " +"szervizek)" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "1-es antenna" + +msgid "Antenna 2" +msgstr "2-es antenna" + +msgid "Antenna Configuration" +msgstr "Antenna beállítások" + +msgid "Any zone" +msgstr "Bármelyik zóna" + +msgid "Apply" +msgstr "Alkalmaz" + +msgid "Applying changes" +msgstr "Módosítások alkalmazása" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Interfészek összekapcsolása..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Kapcsolódó kliensek" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Atheros 802.11%s vezeték-nélküli vezérlő" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Hitelesítés" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Hiteles" + +msgid "Authorization Required" +msgstr "Hitelesítés szükséges" + +msgid "Auto Refresh" +msgstr "Automatikus frissítés" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Elérhető" + +msgid "Available packages" +msgstr "Elérhető csomagok" + +msgid "Average:" +msgstr "Átlag:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Vissza" + +msgid "Back to Overview" +msgstr "Vissza az áttekintéshez" + +msgid "Back to configuration" +msgstr "Vissza a beállításokhoz" + +msgid "Back to overview" +msgstr "Vissza az áttekintéshez" + +msgid "Back to scan results" +msgstr "Vissza a felderítési eredményekhez" + +msgid "Background Scan" +msgstr "Felderítés a háttérben" + +msgid "Backup / Flash Firmware" +msgstr "Mentés / Firmware frissítés" + +msgid "Backup / Restore" +msgstr "Mentés / Visszaállítás" + +msgid "Backup file list" +msgstr "Mentési fájl lista" + +msgid "Bad address specified!" +msgstr "Hibás címet adott meg!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Alább található a biztonsági mentésbe kerülő fájlok listája. A lista az opkg " +"által megjelölt módosított konfigurációs fájlokból, fontos alapvető " +"fájlokból valamint a felhasználó által megadott mintáknak megfelelő " +"fájlokból áll." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Bitráta" + +msgid "Bogus NX Domain Override" +msgstr "Hamis NX tartomány felülbírálása" + +msgid "Bridge" +msgstr "Híd" + +msgid "Bridge interfaces" +msgstr "Híd interfészek" + +msgid "Bridge unit number" +msgstr "Híd eszközszám" + +msgid "Bring up on boot" +msgstr "Hozza fel a rendszer indításakor" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Broadcom 802.11%s vezeték-nélküli vezérlő" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Broadcom BCM%04x 802.11 vezeték-nélküli vezérlő" + +msgid "Buffered" +msgstr "Átmeneti tárban van" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Gombok" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Processzor használat (%)" + +msgid "Cancel" +msgstr "Mégsem" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Lánc" + +msgid "Changes" +msgstr "Módosítások" + +msgid "Changes applied." +msgstr "A módosítások alkalmazva." + +msgid "Changes the administrator password for accessing the device" +msgstr "" +"Itt módosíthatja az eszköz eléréséhez szükséges adminisztrátori jelszót" + +msgid "Channel" +msgstr "Csatorna" + +msgid "Check" +msgstr "Ellenőrzés" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Ellenőrző összeg" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Válassza ki a tűzfal zónát amit hozzá akar rendelni ehhez az interfészhez. " +"Válassza a nincs megadva elemet az interfésznek a hozzárendelt " +"zónából történő eltávolításához, vagy töltse ki az új mezőt új zóna " +"megadásához és csatlakoztassa az interfészt ahhoz." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Válassza ki azokat a hálózatokat, amelyeket csatlakoztatni akar ehhez a " +"vezetéknélküli interfészhez, vagy töltse ki az új mezőt egy új " +"hálózat definiálásához." + +msgid "Cipher" +msgstr "Titkosító" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Kattintson az \"Archívum készítése\" gombra a jelenlegi konfiguráció tar " +"archívumként történő letöltéséhez. A firmware kezdeti állapotának " +"visszaállításához kattintson a \"Visszaállítás végrehajtása\" gombra (csak " +"squashfs image-ek esetén lehetséges)." + +msgid "Client" +msgstr "Ügyfél" + +msgid "Client ID to send when requesting DHCP" +msgstr "DHCP kérés során küldendő kliens azonosító" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Inaktív kapcsolatok bezárása a megadott másodpercek után, használjon 0-t " +"állandó kapcsolathoz" + +msgid "Close list..." +msgstr "Lista bezárása..." + +msgid "Collecting data..." +msgstr "Adatok összegyűjtése..." + +msgid "Command" +msgstr "Parancs" + +msgid "Common Configuration" +msgstr "Álatános beállítás" + +msgid "Compression" +msgstr "Tömörítés" + +msgid "Configuration" +msgstr "Beállítás" + +msgid "Configuration applied." +msgstr "Beállítások alkalmazva." + +msgid "Configuration files will be kept." +msgstr "A konfigurációs fájlok megmaradnak." + +msgid "Confirmation" +msgstr "Megerősítés" + +msgid "Connect" +msgstr "Kapcsolódás" + +msgid "Connected" +msgstr "Kapcsolódva" + +msgid "Connection Limit" +msgstr "Kapcsolati korlát" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Kapcsolatok" + +msgid "Country" +msgstr "Ország" + +msgid "Country Code" +msgstr "Országkód" + +msgid "Cover the following interface" +msgstr "A következő interfészt tartalmazza" + +msgid "Cover the following interfaces" +msgstr "A következő interfészeket tartalmazza" + +msgid "Create / Assign firewall-zone" +msgstr "Tűzfal zóna készítés / hozzárendelés" + +msgid "Create Interface" +msgstr "Új interfész" + +msgid "Create a bridge over multiple interfaces" +msgstr "Híd létrehozása több interfész között" + +msgid "Critical" +msgstr "Kritikus" + +msgid "Cron Log Level" +msgstr "Cron naplózási szint" + +msgid "Custom Interface" +msgstr "Egyéni interfész" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Az eszköz LED-jei működésének " +"testreszabása." + +msgid "DHCP Leases" +msgstr "DHCP bérletek" + +msgid "DHCP Server" +msgstr "DHCP kiszolgáló" + +msgid "DHCP and DNS" +msgstr "DHCP és DNS" + +msgid "DHCP client" +msgstr "DHCP ügyfél" + +msgid "DHCP-Options" +msgstr "DHCP beállítások" + +msgid "DHCPv6 Leases" +msgstr "DHCPv6 bérletek" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "DNS továbbítások" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Hibakeresés" + +msgid "Default %d" +msgstr "Alapértelmezés %d" + +msgid "Default gateway" +msgstr "Alapértelmezett átjáró" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Alapértelmezett állapot" + +msgid "Define a name for this network." +msgstr "Adja meg a hálózat nevét." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Adjon meg további DHCP opciókat, például \"6,192.168.2.1,192.168.2.2\", mely különböző DNS kiszolgálókat hirdet az ügyfelek részére." + +msgid "Delete" +msgstr "Törlés" + +msgid "Delete this network" +msgstr "Hálózat törlése" + +msgid "Description" +msgstr "Leírás" + +msgid "Design" +msgstr "Megjelenés" + +msgid "Destination" +msgstr "Cél" + +msgid "Device" +msgstr "Eszköz" + +msgid "Device Configuration" +msgstr "Eszköz beállítások" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnosztika" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Könyvtár" + +msgid "Disable" +msgstr "Letiltás" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"DHCP tiltása ezen " +"az interfészen." + +msgid "Disable DNS setup" +msgstr "DNS beállítás letiltása" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Hardveres beacon időzítő letiltása" + +msgid "Disabled" +msgstr "Letiltva" + +msgid "Discard upstream RFC1918 responses" +msgstr "Beérkező RFC1918 DHCP válaszok elvetése. " + +msgid "Displaying only packages containing" +msgstr "Csak azon csomagok megjelenítése, amelyek tartalmazzák" + +msgid "Distance Optimization" +msgstr "Távolság optimalizáció" + +msgid "Distance to farthest network member in meters." +msgstr "A hálózat legtávolabbi tagjának távolsága méterben." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Diverzitás" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"A Dnsmasq egy kombinált DHCP-kiszolgáló és DNS-" +"továbbító NAT tűzfalak " +"számára" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" +"Ne gyorsítótárazza a negatív válaszokat, pl. nem létező domain-ok esetén" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Ne továbbítsa a publikus név szerverek által nem megválaszolható kéréseket" + +msgid "Do not forward reverse lookups for local networks" +msgstr "Ne továbbítson fordított keresési kéréseket a helyi hálózathoz" + +msgid "Do not send probe responses" +msgstr "Ne válaszoljon a szondázásra" + +msgid "Domain required" +msgstr "Tartomány szükséges" + +msgid "Domain whitelist" +msgstr "Tartomány fehérlista" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Ne továbbítsa a DNS-név nélküli " +"DNS-kéréseket " + +msgid "Download and install package" +msgstr "Csomag letöltése és telepítése" + +msgid "Download backup" +msgstr "Biztonsági mentés letöltése" + +msgid "Dropbear Instance" +msgstr "Dropbear példány" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"A Dropbear a hálózaton SSH hozzáférést " +"tesz lehetővé, valamint integrált SCP " +"szolgáltatást nyújt." + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"Dinamikus DHCP" + +msgid "Dynamic tunnel" +msgstr "Dinamikus alagút" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Az ügyfelek számára kiosztott DHCP címek dinamikus lefoglalása. Letiltása " +"esetén csak a statikus DHCP bérlettel rendelkező kliensek lesznek " +"kiszolgálva." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "EAP metódus" + +msgid "Edit" +msgstr "Szerkesztés" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Interfész szerkesztése" + +msgid "Edit this network" +msgstr "Hálózat szerkesztése" + +msgid "Emergency" +msgstr "Vészhelyzet" + +msgid "Enable" +msgstr "Engedélyezés" + +msgid "Enable STP" +msgstr "STP engedélyezése" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "HE.net dinamikus végpont frissítésének engedélyezése" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "IPv6 egyeztetés engedélyezése a PPP linken" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Óriás keretek átengedésének engedélyezése" + +msgid "Enable NTP client" +msgstr "NTP-kliens engedélyezése" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "TFTP kiszolgáló engedélyezése" + +msgid "Enable VLAN functionality" +msgstr "VLAN funkció engedélyezése" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Tanulás és aging engedélyezése" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "A csatolás engedélyezése" + +msgid "Enable this swap" +msgstr "A lapozó terület engedélyezése" + +msgid "Enable/Disable" +msgstr "Engedélyezés/Letiltás" + +msgid "Enabled" +msgstr "Engedélyezve" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "A Spanning Tree prokoll engedélyezése erre a hídra" + +msgid "Encapsulation mode" +msgstr "Beágyazási mód" + +msgid "Encryption" +msgstr "Titkosítás" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Törlés..." + +msgid "Error" +msgstr "Hiba" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Ethernet adapter" + +msgid "Ethernet Switch" +msgstr "Ethernet switch" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Gépek kibontása" + +msgid "Expires" +msgstr "Lejárat" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "A bérelt címek lejárati ideje, a minimális érték 2 perc." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Külső rendszernapló kiszolgáló" + +msgid "External system log server port" +msgstr "Külső rendszernapló kiszolgáló port" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Gyors keretek" + +msgid "File" +msgstr "Fájl" + +msgid "Filename of the boot image advertised to clients" +msgstr "A kliensek részére közzétett betöltö kép fájlneve" + +msgid "Filesystem" +msgstr "Fájlrendszer" + +msgid "Filter" +msgstr "Szűrő" + +msgid "Filter private" +msgstr "Privát kérések szűrése" + +msgid "Filter useless" +msgstr "Használhahatlan kérések szűrése" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Hálózatok keresése és csatlakozás" + +msgid "Find package" +msgstr "Csomag keresése" + +msgid "Finish" +msgstr "Befejezés" + +msgid "Firewall" +msgstr "Tűzfal" + +msgid "Firewall Settings" +msgstr "Tűzfal Beállítások" + +msgid "Firewall Status" +msgstr "Tűzfal Állapot" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Tűzfal verzió" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Rögzített forrás port a kimenő DNS kérésekhez" + +msgid "Flash Firmware" +msgstr "Firmware flash-elés" + +msgid "Flash image..." +msgstr "Flash image..." + +msgid "Flash new firmware image" +msgstr "Új firmware image flash-elése" + +msgid "Flash operations" +msgstr "Flash műveletek" + +msgid "Flashing..." +msgstr "Flash-elés..." + +msgid "Force" +msgstr "Kényszerítés" + +msgid "Force CCMP (AES)" +msgstr "CCMP (AES) kényszerítése" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" +"DHCP kényszerítése ezen a hálózaton még akkor is ha van másik szerver " +"észlelve." + +msgid "Force TKIP" +msgstr "TKIP kényszerítése" + +msgid "Force TKIP and CCMP (AES)" +msgstr "TKIP és CCMP (AES) kényszerítése" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "DHCP forgalom továbbítás" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Broadcast forgalom továbbítás" + +msgid "Forwarding mode" +msgstr "Továbbítás módja" + +msgid "Fragmentation Threshold" +msgstr "Töredezettségi küszöb" + +msgid "Frame Bursting" +msgstr "Keretfűzés" + +msgid "Free" +msgstr "Szabad" + +msgid "Free space" +msgstr "Szabad hely" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "Csak GPRS" + +msgid "Gateway" +msgstr "Átjáró" + +msgid "Gateway ports" +msgstr "Átjáró portok" + +msgid "General Settings" +msgstr "Általános beállítások" + +msgid "General Setup" +msgstr "Általános beállítások" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Archívum készítése" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Általános 802.11%s vezeték-nélküli vezérlő" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "A megadott jelszavak nem egyeznek, a jelszó nem lett megváltoztatva!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Ugrás a jelszó beállításhoz..." + +msgid "Go to relevant configuration page" +msgstr "Ugrás a tárgyhoz tartozó beállításokhoz" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "HE.net jelszó" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Kezelő" + +msgid "Hang Up" +msgstr "Befejezés" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Itt állíthatja be az eszköz alapvető tulajdonságait, mint például a gépnév " +"vagy az időzóna." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"Nyilvános kulcs alapú SSH azonosításhoz itt adhat meg nyilvános SSH " +"kulcsokat (soronként egyet)." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Hermes 802.11b vezeték nélküli vezérlő" + +msgid "Hide ESSID" +msgstr "ESSID elrejtése" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Host bejegyzések" + +msgid "Host expiry timeout" +msgstr "Host lejárati idő" + +msgid "Host-IP or Network" +msgstr "Host-IP vagy hálózat" + +msgid "Hostname" +msgstr "Gépnév" + +msgid "Hostname to send when requesting DHCP" +msgstr "DHCP kérés során küldendő gépnév" + +msgid "Hostnames" +msgstr "Gépnevek" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "IP cím" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "IPv4 tűzfal" + +msgid "IPv4 WAN Status" +msgstr "IPv4 WAN állapot" + +msgid "IPv4 address" +msgstr "IPv4 cím" + +msgid "IPv4 and IPv6" +msgstr "IPv4 és IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "IPv4 broadcast" + +msgid "IPv4 gateway" +msgstr "IPv4 átjáró" + +msgid "IPv4 netmask" +msgstr "IPv4 hálózati maszk" + +msgid "IPv4 only" +msgstr "csak IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "IPv4 prefix hossza" + +msgid "IPv4-Address" +msgstr "IPv4-cím" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "IPv6 tűzfal" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "IPv6 WAN állapot" + +msgid "IPv6 address" +msgstr "IPv6 cím" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "IPv6 átjáró" + +msgid "IPv6 only" +msgstr "csak IPv6" + +msgid "IPv6 prefix" +msgstr "IPv6 előtag" + +msgid "IPv6 prefix length" +msgstr "IPv6 prefix hossz" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "IPv6-cím" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6 IPv4-ben (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6 IPv4 felett (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6 IPv4 felett (6to4)" + +msgid "Identity" +msgstr "Identitás" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" +"Megadás esetén az eszköz csomópont helyett UUID alapján történő csatolása" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" +"Megadás esetén az eszköz csomópont helyett címke alapján történő csatolása" + +msgid "If unchecked, no default route is configured" +msgstr "Ha nincs kiválasztva, akkor nincs alapértelmezett útvonal beállítva" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" +"Ha nincs kiválasztva, akkor a hirdetett DNS kiszolgáló címeket nem veszi " +"figyelembe" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Ha a fizikai memória túl kevés a nem használt adatok ideiglenesen áttehetők " +"egy swap-eszközre mely így nagyobb mennyiségű használható RAM-ot eredményez. Az adatok áttétele egy " +"nagyon lassú folyamat mivel a swap-eszköz nem érhető el akkora sebességgel " +"mint a RAM." + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "Interfész figyelmen kívül hagyása" + +msgid "Ignore resolve file" +msgstr "A resolve fájl figyelmen kívül hagyása" + +msgid "Image" +msgstr "Image" + +msgid "In" +msgstr "Be" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Inaktivitási időtúllépés" + +msgid "Inbound:" +msgstr "Bejövő" + +msgid "Info" +msgstr "Információk" + +msgid "Initscript" +msgstr "Indítási állomány" + +msgid "Initscripts" +msgstr "Indítási állományok" + +msgid "Install" +msgstr "Telepítés" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "%q csomag telepítése" + +msgid "Install protocol extensions..." +msgstr "Protokoll kiterjesztések telepítése..." + +msgid "Installed packages" +msgstr "Telepített csomagok" + +msgid "Interface" +msgstr "Interfész" + +msgid "Interface Configuration" +msgstr "Interfész beállítások" + +msgid "Interface Overview" +msgstr "Interfész áttekintés" + +msgid "Interface is reconnecting..." +msgstr "Interfész újracsatlakoztatása..." + +msgid "Interface is shutting down..." +msgstr "Interfész leállítása..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "Az interfész nincs jelen, vagy még nincs csatlakoztatva." + +msgid "Interface reconnected" +msgstr "Interfész újracsatlakoztatva" + +msgid "Interface shut down" +msgstr "Interfész leállítás" + +msgid "Interfaces" +msgstr "Interfészek" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "Belső szerverhiba" + +msgid "Invalid" +msgstr "Érvénytelen" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" +"A megadott VLAN azonosító érvénytelen. Az azonosítónak %d és %d közé kell " +"esnie." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" +"A megadott VLAN azonosító érvénytelen! Minden VLAN-hoz egyedi azonosító kell." + +msgid "Invalid username and/or password! Please try again." +msgstr "Érvénytelen felhasználói név és/vagy jelszó! Kérem próbálja újra!" + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Úgy tűnik, hogy a flash-elendő kép-file nem fér el a Flash-memóriába. Kérem " +"ellenőrizze a kép fájlt!" + +msgid "Java Script required!" +msgstr "Javascript szükséges!" + +msgid "Join Network" +msgstr "Csatlakozás a hálózathoz" + +msgid "Join Network: Wireless Scan" +msgstr "Csatlakozás a hálózathoz: vezetéknélküli hálózatok keresése" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Beállítások megtartása" + +msgid "Kernel Log" +msgstr "Kernel napló" + +msgid "Kernel Version" +msgstr "Kernel verzió" + +msgid "Key" +msgstr "Kulcs" + +msgid "Key #%d" +msgstr "Kulcs #%d" + +msgid "Kill" +msgstr "Kilövés" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "L2TP szerver" + +msgid "LCP echo failure threshold" +msgstr "LCP echo hibaküszöb" + +msgid "LCP echo interval" +msgstr "LCP Echo időtartam" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Címke" + +msgid "Language" +msgstr "Nyelv" + +msgid "Language and Style" +msgstr "Nyelv és megjelenés" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Bérlet érvényességi ideje" + +msgid "Leasefile" +msgstr "Bérlet fájl" + +msgid "Leasetime" +msgstr "Bérlet időtartama" + +msgid "Leasetime remaining" +msgstr "A bérletből hátralévő idő" + +msgid "Leave empty to autodetect" +msgstr "Automatikus észleléshez hagyja üresen" + +msgid "Leave empty to use the current WAN address" +msgstr "A jelenlegi WAN cím használatához hagyja üresen" + +msgid "Legend:" +msgstr "Jelmagyarázat:" + +msgid "Limit" +msgstr "Korlát" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Kapcsolat létrehozva" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"DNS szerverek listája, ahová a " +"kérések továbbításra kerülnek" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "Domain-ok listája, melyeknél az RFC1918 válaszok megengedettek" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "A hamis NX tartomány eredményeket szolgáltató gépek listája" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" +"Csak a megadott interfészen hallgat, vagy az összesen, amennyiben nem adja " +"meg" + +msgid "Listening port for inbound DNS queries" +msgstr "Szerver port a beérkező DNS kérések számára" + +msgid "Load" +msgstr "Terhelés" + +msgid "Load Average" +msgstr "Átlagos terhelés" + +msgid "Loading" +msgstr "Betöltés" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Helyi IPv4 cím" + +msgid "Local IPv6 address" +msgstr "Helyi IPv6 cím" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Helyi indítóscript" + +msgid "Local Time" +msgstr "Helyi idő" + +msgid "Local domain" +msgstr "Helyi tartomány" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Helyi tartomány meghatározása. Az ezzel a tartománnyal egyező nevek soha " +"nincsenek továbbítva és csak DHCP-n vagy host fájlok által kerülnek " +"feloldásra" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"A helyi tartomány utótag csatolása a DHCP nevekhez és hosts fájl " +"bejegyzésekhez" + +msgid "Local server" +msgstr "Helyi kiszolgáló" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" +"Gépnév lokalizációja a lekérdező alhálózattól függően, ha több IP cím is " +"elérhető" + +msgid "Localise queries" +msgstr "Lekérdezések lokalizációja" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Napló kimeneti szintje" + +msgid "Log queries" +msgstr "Kérések naplózása" + +msgid "Logging" +msgstr "Naplózás" + +msgid "Login" +msgstr "Bejelentkezés" + +msgid "Logout" +msgstr "Kijelentkezés" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "A legalacsonyabb bérleti címnek az interfész címétől való távolsága" + +msgid "MAC-Address" +msgstr "MAC-cím" + +msgid "MAC-Address Filter" +msgstr "MAC-cím szűrő" + +msgid "MAC-Filter" +msgstr "MAC-szűrő" + +msgid "MAC-List" +msgstr "MAC-lista" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Maximális sebesség" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Aktív DHCP bérletek maximális száma" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Párhuzamos DNS kérések maximális száma" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "EDNS.0 UDP csomagok maximális mérete" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "Maximális várakozási idő a modem kész állapotára (másodpercben)" + +msgid "Maximum hold time" +msgstr "Maximális tartási idő" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "DHCP címek maximális száma" + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "Memória" + +msgid "Memory usage (%)" +msgstr "Memória használat (%)" + +msgid "Metric" +msgstr "Metrika" + +msgid "Minimum Rate" +msgstr "Minimális sebesség" + +msgid "Minimum hold time" +msgstr "Minimális tartási idő" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Hiányzó protokoll kiterjesztés a %q progokoll számára" + +msgid "Mode" +msgstr "Mód" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Modemeszköz" + +msgid "Modem init timeout" +msgstr "Modem inicializálás időtúllépés" + +msgid "Monitor" +msgstr "Ellenőrzés" + +msgid "Mount Entry" +msgstr "Csatolási bejegyzés" + +msgid "Mount Point" +msgstr "Csatolási pont" + +msgid "Mount Points" +msgstr "Csatolási pontok" + +msgid "Mount Points - Mount Entry" +msgstr "Csatolási pontok - Csatolási bejegyzés" + +msgid "Mount Points - Swap Entry" +msgstr "Csatolási pontok - Lapozóterület bejegyzés" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"A csatolási pontok határozzák meg, hogy egy memória eszköz hová lesz " +"csatlakoztatva a fájlendszeren belül " + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Csatolási beállítások" + +msgid "Mount point" +msgstr "Csatolási pont" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Csatolt fájlrendszerek" + +msgid "Move down" +msgstr "Mozgatás lefelé" + +msgid "Move up" +msgstr "Mozgatás felfelé" + +msgid "Multicast Rate" +msgstr "Multicast sebesség" + +msgid "Multicast address" +msgstr "Multicast cím" + +msgid "NAS ID" +msgstr "NAS azonosító" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "Kijelölt NTP kiszolgálók" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Név" + +msgid "Name of the new interface" +msgstr "Az új interfész neve" + +msgid "Name of the new network" +msgstr "Az új hálózat neve" + +msgid "Navigation" +msgstr "Navigáció" + +msgid "Netmask" +msgstr "Hálózati maszk" + +msgid "Network" +msgstr "Hálózat" + +msgid "Network Utilities" +msgstr "Hálózati eszközök" + +msgid "Network boot image" +msgstr "Hálózati rendszertöltő lemezkép" + +msgid "Network without interfaces." +msgstr "Interfészhez nem rendelt hálózat" + +msgid "Next »" +msgstr "Következő »" + +msgid "No DHCP Server configured for this interface" +msgstr "Ehhez az interfészhez nincs DHCP kiszolgáló beállítva" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Ez a tábla nem tartalmaz láncokat." + +msgid "No files found" +msgstr "Nem találhatók fájlok" + +msgid "No information available" +msgstr "Nincs elérhető információ" + +msgid "No negative cache" +msgstr "Nincs negatív gyorsítótár" + +msgid "No network configured on this device" +msgstr "Ehhez az eszközhöz nincs hálózat beállítva" + +msgid "No network name specified" +msgstr "Nincs megadva hálózatnév" + +msgid "No package lists available" +msgstr "Csomaglisták nem állnak rendelkezésre" + +msgid "No password set!" +msgstr "Nincs jelszó!" + +msgid "No rules in this chain" +msgstr "Ez a lánc nem tartalmaz szabályokat" + +msgid "No zone assigned" +msgstr "Nincs hozzárendelt zóna" + +msgid "Noise" +msgstr "Zaj" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Zaj:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Nincs" + +msgid "Normal" +msgstr "Normál" + +msgid "Not Found" +msgstr "Nem található" + +msgid "Not associated" +msgstr "Nincs hozzárendelve" + +msgid "Not connected" +msgstr "Nincs kapcsolódva" + +msgid "Note: Configuration files will be erased." +msgstr "Megjegyzés: konfigurációs fájlok törölve lesznek." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Megjegyzés" + +msgid "Nslookup" +msgstr "Nslookup" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "OPKG-Beállítások" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "Kikapcsolt állapot késleltetés" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"Ezen az oldalon a hálózati interfészeket állíthatja be. Több interfész " +"között híd hozható létre a \"híd interfész\" mező bejelölésével és több " +"hálózati interfész nevének szóközzel történő elválasztásával. Lehetőség van " +"VLAN jelölés " +"INTERFÉSZ.VLANSZÁM használatára is, pl. eth0.1)." + +msgid "On-State Delay" +msgstr "Bekapcsolt állapot késleltetés" + +msgid "One of hostname or mac address must be specified!" +msgstr "Legalább gépnevet vagy MAC-címet meg kell adni!" + +msgid "One or more fields contain invalid values!" +msgstr "Egy vagy több mező érvénytelen adatot tartalmaz!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Egy vagy több kötelezően kitöltendő mező üres!" + +msgid "Open list..." +msgstr "Lista megnyitása..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Beállítás módosítva" + +msgid "Option removed" +msgstr "Beállítás eltávolítva" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Lehetőségek" + +msgid "Other:" +msgstr "Egyéb:" + +msgid "Out" +msgstr "Ki" + +msgid "Outbound:" +msgstr "Kimenő:" + +msgid "Outdoor Channels" +msgstr "Kültéri csatornák" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "MAC cím felülbírálása" + +msgid "Override MTU" +msgstr "MTU felülbíráslás" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "Átjáró felülbírálása a DHCP válaszokban" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"Az ügyfelek részére küldött hálózati masz felülbírálása. Ez alapesetben a " +"kiszolgált alhálózat alapján kerül meghatározásra." + +msgid "Override the table used for internal routes" +msgstr "A belső útvonalakhoz használt tábla felülbírálása" + +msgid "Overview" +msgstr "Áttekintés" + +msgid "Owner" +msgstr "Tulajdonos" + +msgid "PAP/CHAP password" +msgstr "PAP/CHAP jelszó" + +msgid "PAP/CHAP username" +msgstr "PAP/CHAP felhasználói név" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "PPPoA beágyazás" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "A libiwinfo csomag szükséges!" + +msgid "Package lists are older than 24 hours" +msgstr "A csomag listák 24 óránál régebbiek" + +msgid "Package name" +msgstr "Csomagnév" + +msgid "Packets" +msgstr "Csomagok" + +msgid "Part of zone %q" +msgstr "A %q zóna része" + +msgid "Password" +msgstr "Jelszó" + +msgid "Password authentication" +msgstr "Jelszó hitelesítés" + +msgid "Password of Private Key" +msgstr "A privát kulcsh jelszava" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "A jelszó megváltoztatása sikeres!" + +msgid "Path to CA-Certificate" +msgstr "CA tanúsítvány elérési útja" + +msgid "Path to Client-Certificate" +msgstr "Kliens tanúsítvány elérési útja" + +msgid "Path to Private Key" +msgstr "A privát kulcs elérési útja" + +msgid "Path to executable which handles the button event" +msgstr "A gomb eseményeit kezelő végrehajtható állomány elérési útja" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Csúcs:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Újraindítás végrehajtása" + +msgid "Perform reset" +msgstr "Visszaállítás végrehajtása" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Phy sebesség:" + +msgid "Physical Settings" +msgstr "Fizikai beállítások" + +msgid "Ping" +msgstr "Ping" + +msgid "Pkts." +msgstr "csom." + +msgid "Please enter your username and password." +msgstr "Adja meg a felhasználónevét és a jelszavát." + +msgid "Policy" +msgstr "Szabály" + +msgid "Port" +msgstr "Port" + +msgid "Port status:" +msgstr "Port állapot:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" +"A peer halottnak tekintése a megadott számú LCP echo hibák után. Használjon " +"0-t a hibák figyelmen kívül hagyásához." + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Ügyfél-ügyfél közötti kommunikáció megakadályozása" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Prism2/2.5/3 802.11b vezeték nélküli vezérlő" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Folytatás" + +msgid "Processes" +msgstr "Folyamatok" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Protocol family" +msgstr "Protokoll család" + +msgid "Protocol of the new interface" +msgstr "Az új interfész protokollja" + +msgid "Protocol support is not installed" +msgstr "Protokoll támogatás nincs telepítve" + +msgid "Provide NTP server" +msgstr "NTP kiszolgáló" + +msgid "Provide new network" +msgstr "Új hálózat nyújtása" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Ál Ad-hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Minőség" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "RTS/CTS küszöbérték" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "RX sebesség" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "RaLink 802.11%s vezeték nélküli vezérlő" + +msgid "Radius-Accounting-Port" +msgstr "Radius-Naplózási-Port" + +msgid "Radius-Accounting-Secret" +msgstr "Radius-Naplózás-Kulcs" + +msgid "Radius-Accounting-Server" +msgstr "Radius-Naplózás-Kiszolgáló" + +msgid "Radius-Authentication-Port" +msgstr "Radius-Hitelesítés-Port" + +msgid "Radius-Authentication-Secret" +msgstr "Radius-Hitelesítés-Kulcs" + +msgid "Radius-Authentication-Server" +msgstr "Radius-Hitelesítés-Kiszolgáló" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Az /etc/ethers fájl olvasása a DHCP kiszolgáló beállításához" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"Biztosan törli az interfészt? A törlés nem visszavonható!\n" +" Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen az " +"interfészen keresztül kapcsolódik." + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"Biztosan törli ezt a vezetéknélküli hálózatot? A törlés nem visszavonható!\n" +"Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen a hálózaton " +"keresztül kapcsolódik." + +msgid "Really reset all changes?" +msgstr "Biztos, hogy visszavonja az összes módosítást?" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"Biztos, hogy leállítja a hálózatot?!\n" +" Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen a " +"hálózaton keresztül kapcsolódik." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"Biztos, hogy leállítja a \"%s\" interfészt?\n" +" Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen az " +"interfészen keresztül kapcsolódik." + +msgid "Really switch protocol?" +msgstr "Biztos, hogy cserélni szeretné a protokollt?" + +msgid "Realtime Connections" +msgstr "Valósidejű kapcsolatok" + +msgid "Realtime Graphs" +msgstr "Valósidejű grafikonok" + +msgid "Realtime Load" +msgstr "Valósidejű terhelés" + +msgid "Realtime Traffic" +msgstr "Valósidejű forgalom" + +msgid "Realtime Wireless" +msgstr "Valósidejű vezetéknélküli adatok" + +msgid "Rebind protection" +msgstr "Rebind elleni védelem" + +msgid "Reboot" +msgstr "Újraindítás" + +msgid "Rebooting..." +msgstr "Újraindítás..." + +msgid "Reboots the operating system of your device" +msgstr "Újraindítja az eszköz operációs rendszerét" + +msgid "Receive" +msgstr "Fogadás" + +msgid "Receiver Antenna" +msgstr "Vevő antenna" + +msgid "Reconnect this interface" +msgstr "Csatlakoztassa újra az interfészt" + +msgid "Reconnecting interface" +msgstr "Interfész újracsatlakoztatása" + +msgid "References" +msgstr "Hivatkozások" + +msgid "Regulatory Domain" +msgstr "Szabályozó tartomány" + +msgid "Relay" +msgstr "Átjátszás" + +msgid "Relay Bridge" +msgstr "Átjátszó híd" + +msgid "Relay between networks" +msgstr "Átjátszás hálózatok között" + +msgid "Relay bridge" +msgstr "Átjátszó híd" + +msgid "Remote IPv4 address" +msgstr "Távoli IPv4 cím" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Eltávolítás" + +msgid "Repeat scan" +msgstr "Felderítés ismétlése" + +msgid "Replace entry" +msgstr "Bejegyés lecserélése" + +msgid "Replace wireless configuration" +msgstr "Vezetéknélküli beállítások lecserélése" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" +"Szükséges bizonyos internetszolgáltatók esetén, pl. Charter 'DOCSIS 3'-al" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Visszaállítás" + +msgid "Reset Counters" +msgstr "Számlálók nullázása" + +msgid "Reset to defaults" +msgstr "Alapértelmezések visszaállítása" + +msgid "Resolv and Hosts Files" +msgstr "Resolv és hosts fájlok" + +msgid "Resolve file" +msgstr "Resolv fájl" + +msgid "Restart" +msgstr "Újraindítás" + +msgid "Restart Firewall" +msgstr "Tűzfal újraindítása" + +msgid "Restore backup" +msgstr "Biztonsági mentés visszaállítása" + +msgid "Reveal/hide password" +msgstr "Jelszó mutatása/elrejtése" + +msgid "Revert" +msgstr "Visszavonás" + +msgid "Root" +msgstr "Gyökérkönyvtár" + +msgid "Root directory for files served via TFTP" +msgstr "TFTP-n keresztül megosztott fájlok gyökérkönyvtára" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Router jelszó" + +msgid "Routes" +msgstr "Útvonalak" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Az útvonalak határozzák meg, hogy bizonyos gépek illetve hálózatok melyik " +"interfészen keresztül érhetők el." + +msgid "Run a filesystem check before mounting the device" +msgstr "Fájlrendszer ellenőrzés futtatása az eszköz csatolása előtt" + +msgid "Run filesystem check" +msgstr "Fájlrendszer ellenőrzés futtatása" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "SSH hozzáférés" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "SSH kulcsok" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Mentés" + +msgid "Save & Apply" +msgstr "Mentés & Alkalmazás" + +msgid "Save & Apply" +msgstr "Mentés & Alkalmazás" + +msgid "Scan" +msgstr "Felderítés" + +msgid "Scheduled Tasks" +msgstr "Ütemezett feladatok" + +msgid "Section added" +msgstr "Szakasz hozzáadva" + +msgid "Section removed" +msgstr "Szakasz eltávolítva" + +msgid "See \"mount\" manpage for details" +msgstr "Részletekért lásd a 'mount' man oldalát" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" +"LCP echo kérések küldése a másodpercben megadott időközönként, csak a " +"hibaküszöbbel együtt van hatása." + +msgid "Separate Clients" +msgstr "Kliensek szétválasztása" + +msgid "Separate WDS" +msgstr "WDS szétválasztása" + +msgid "Server Settings" +msgstr "Kiszolgáló beállításai" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Szolgáltatás neve" + +msgid "Service Type" +msgstr "Szolgáltatás típusa" + +msgid "Services" +msgstr "Szolgáltatások" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Idő szinkronizálás beállítása" + +msgid "Setup DHCP Server" +msgstr "DHCP kiszolgáló beállítása" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "Mentendő fájlok aktuális listájának megjelenítése" + +msgid "Shutdown this interface" +msgstr "Interfész leállítása" + +msgid "Shutdown this network" +msgstr "Hálózat leállítása" + +msgid "Signal" +msgstr "Jel" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Jel:" + +msgid "Size" +msgstr "Méret" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Ugrás" + +msgid "Skip to content" +msgstr "Ugrás a tartalomhoz" + +msgid "Skip to navigation" +msgstr "Ugrás a navigációhoz" + +msgid "Slot time" +msgstr "Időrés" + +msgid "Software" +msgstr "Szoftver" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Néhán mező érvénytelen, az értékek nem menthetők!" + +msgid "Sorry, the object you requested was not found." +msgstr "Sajnálom, a kért objektum nem található." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "Sajnálom, a szerver váratlan hibát észlelt." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"Sajnáljuk, a 'sysupgrade' támogatás nem elérhető, az új firmware fájl " +"telepítését manuálisan kell elvégezni. Az eszközhöz tartozó telepítési " +"utasításokért keresse fel az wiki-t." + +msgid "Sort" +msgstr "Sorbarendezés" + +msgid "Source" +msgstr "Forrás" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "Meghatározza a gomb kezelendő állapotát" + +msgid "Specifies the directory the device is attached to" +msgstr "Megadja az eszköz csatlakozási könyvtárát." + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Megadja a Dropbear példány portját" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" +"Megadja a maximális sikertelen ARP kérések számát, amik után a host nem " +"elérhetőnek tekinthető" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" +"Megadja a másodpercek számát, amik után a host nem elérhetőnek tekinthető" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Itt adja meg a titkosító kulcsot." + +msgid "Start" +msgstr "Indítás" + +msgid "Start priority" +msgstr "Indítás prioritása" + +msgid "Startup" +msgstr "Rendszerindítás" + +msgid "Static IPv4 Routes" +msgstr "Statikus IPv4 útvonalak" + +msgid "Static IPv6 Routes" +msgstr "Statikus IPv6 útvonalak" + +msgid "Static Leases" +msgstr "Statikus bérletek" + +msgid "Static Routes" +msgstr "Statikus útvonalak" + +msgid "Static WDS" +msgstr "Statikus WDS" + +msgid "Static address" +msgstr "Statikus cím" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"A statikus bérletekkel a DHCP kliensekhez fix IP-címet és hostnevet " +"rendelhet. Olyan nem dinamikus interfész konfigurációk esetén is " +"szükségesek, ahol a csak a megfelelő bérlettel rendelkező hosztok kerülnek " +"kiszolgálásra." + +msgid "Status" +msgstr "Állapot" + +msgid "Stop" +msgstr "Leállítás" + +msgid "Strict order" +msgstr "Kötött sorrend" + +msgid "Submit" +msgstr "Elküldés" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Lapozóterület" + +msgid "Switch" +msgstr "Kapcsoló" + +msgid "Switch %q" +msgstr "Kapcsoló %q" + +msgid "Switch %q (%s)" +msgstr "Kapcsoló %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Protokoll csere" + +msgid "Sync with browser" +msgstr "Szinkronizálás a böngészővel" + +msgid "Synchronizing..." +msgstr "Szinkronizálás..." + +msgid "System" +msgstr "Rendszer" + +msgid "System Log" +msgstr "Rendszernapló" + +msgid "System Properties" +msgstr "Rendszer tulajdonságok" + +msgid "System log buffer size" +msgstr "Rendszer napló puffer méret" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "TFTP beállítások" + +msgid "TFTP server root" +msgstr "TFTP szerver gyökér könyvtár" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "TX sebesség" + +msgid "Table" +msgstr "Tábla" + +msgid "Target" +msgstr "Cél" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Megszakítás" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"Az Eszköz beállítások szakasz a rádió hardver fizikai beállításait, " +"úgymint csatorna, adóteljesítmény vagy antenna választás teszi lehetővé, " +"amelyen az összes definiált vezeték nélküli hálózat (ha a rádió hardver " +"multi-SSID képes) osztozik. A hálózatonkénti beállítások, mint az " +"titkosítás, mód az Interfész beállítások alá vannak csoportosítva." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"A libiwinfo-lua nincs telepítve. A vezetéknélküli beállítás " +"működéséhez ezt az összetevőt telepítnei kell." + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" +"A szolgáltatóhoz rendelt IPv6 előtag, általában így végződik: ::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"A következő karakterek használhatók: A-Z, a-z, " +"0-9 and _" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"A memória vagy partíció eszköz fájlja (pl. " +"/dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"A memória formázásához használt fájlrendszer típusa (pl. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"Az image feltöltve. Alább található a fájl ellenőrző összege és mérete, " +"hasonlítsa össze az eredeti fájllal a feltöltött adatok sértetlenségének " +"ellenőrzéséhez.
Kattintson az alábbi \"Folytatás\" gombra a flash-elési " +"eljárás elindításához." + +msgid "The following changes have been committed" +msgstr "A következő módosítások lettek alkalmazva" + +msgid "The following changes have been reverted" +msgstr "A következő módosítások lettek visszavonva" + +msgid "The following rules are currently active on this system." +msgstr "Jelenleg a következő szabályok aktívak a rendszeren." + +msgid "The given network name is not unique" +msgstr "A megadott hálózati név már létezik" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"A hardver nem képes többszörös SSID kezelésre ezért a meglévő beállítások " +"elvesznek ha folytatja." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" +"Az IPv4 előtag hossza bitekben, a maradék az IPv6 címekben használatos." + +msgid "The length of the IPv6 prefix in bits" +msgstr "Az IPv6 előtag hossza bitekben" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"Az eszközön található hálózati portok kombinálhatók több VLAN-ba, amelyekben a számítógépek " +"közvetlenül kommunikálhatnak egmással. A VLAN-ok gyakran a hálózati szegmensek elkülönítésére " +"használják. Gyakran van egy alapértelmezett Uplink port a következő nagyobb " +"hálózathoz (pl. az internet) való kapcsolódásra és a többi port a helyi " +"hálózathoz." + +msgid "The selected protocol needs a device assigned" +msgstr "A kiválasztott protokoll eszköz hozzárendelést igényel" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "A rendszer most törli a konfigurációs partíciót majd újraindul." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"A rendszer frissítése folyamatban.
NE KAPCSOLJA KI AZ ESZKÖZT!
" +"Várjon néhány percet, amíg az eszköz ismételten elérhető. Az eszköz " +"eléréséhez a beállításaitól függően szükséges lehet a számítógépe IP-címének " +"megújítása." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"A feltöltött image fájl formátuma nem támogatott. Ügyeljen arra, hogy a " +"platformjának megfelelő általános image formátumot válassza ki." + +msgid "There are no active leases." +msgstr "Nincsenek aktív bérletek." + +msgid "There are no pending changes to apply!" +msgstr "Nincsenek alkalmazásra váró módosítások!" + +msgid "There are no pending changes to revert!" +msgstr "Nincsenek visszavonásra váró változtatások!" + +msgid "There are no pending changes!" +msgstr "Nincsenek el nem mentett változtatások!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"Nincs hozzárendelt eszköz, kérem csatoljon egy hálózati eszközt a \"Fizikai " +"beállítások\" fülön." + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"A routeren jelenleg nincs jelszó beállítva. Állítsa be a root felhasználó " +"jelszavát a felhasználói felület védelme és az SSH elérés engélyezése " +"érdekében." + +msgid "This IPv4 address of the relay" +msgstr "Az átjátszó IPV4 címe" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"Ez egy shell mintákból álló lista a rendszer frissítés során megőrzendő " +"fájlok és könytárak meghatározására. Az /etc/config/ könyvtárban található " +"módosított fájlok és bizonyos további beállítások automatikusan megőrződnek." + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"Ez a /etc/rc.local fájl tartalma. Ide írhatja be a saját parancsait (az " +"'exit 0' sor elé) a boot folyamat végén történő futtatásukhoz." + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" +"Ez az alagút közvetítő (tunnel broker) által megadott helyi végpont címe, " +"általában így végződik: :2" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Ez az egyetlen DHCP a helyi hálózaton" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "Ez a rendszer crontab, amiben időzített feladatok definiálhatók." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" +"Ez általában a legközelebbi alagút közvetítő (tunnel broker) által vezérelt " +"jelenléti pont (PoP) címe" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"Ez a lista a rendszerben jelenleg futó folyamatokról és azok állapotáról ad " +"áttekintést." + +msgid "This page allows the configuration of custom button actions" +msgstr "Ez a lap a gombok egyedi működésének beállítását teszi lehetővé" + +msgid "This page gives an overview over currently active network connections." +msgstr "" +"Ez a lap a rendszerben jelenleg aktív hálózati kapcsolatokról ad áttekintést." + +msgid "This section contains no values yet" +msgstr "Ez a szakasz még nem tartalmaz értékeket" + +msgid "Time Synchronization" +msgstr "Idő szinkronizálás" + +msgid "Time Synchronization is not configured yet." +msgstr "Idő szinkronizálás még nincs beállítva." + +msgid "Timezone" +msgstr "Időzóna" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"Itt tölthet fel egy korábban létrehozott biztonsági mentés archívumot a " +"konfigurációs fájlok visszaállításához." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Összes elérhető" + +msgid "Traceroute" +msgstr "Traceroute" + +msgid "Traffic" +msgstr "Forgalom" + +msgid "Transfer" +msgstr "Átvitel" + +msgid "Transmission Rate" +msgstr "Átviteli sebesség" + +msgid "Transmit" +msgstr "Küldés" + +msgid "Transmit Power" +msgstr "Adóteljesítmény" + +msgid "Transmitter Antenna" +msgstr "Adó antenna" + +msgid "Trigger" +msgstr "Trigger" + +msgid "Trigger Mode" +msgstr "Trigger mód" + +msgid "Tunnel ID" +msgstr "Tunnel azonosító" + +msgid "Tunnel Interface" +msgstr "Tunnel interfész" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Turbó mód" + +msgid "Tx-Power" +msgstr "Adóteljesítmény" + +msgid "Type" +msgstr "Típus" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "Csak UTMS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "USB eszköz" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "Nem indiítható" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Ismeretlen" + +msgid "Unknown Error, password not changed!" +msgstr "Ismeretlen hiba, a jelszó nem lett megváltoztatva!" + +msgid "Unmanaged" +msgstr "Nem kezelt" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "El nem mentett módosítások" + +msgid "Unsupported protocol type." +msgstr "Nem támogatott protokoll típus." + +msgid "Update lists" +msgstr "Listák frissítése" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"Itt tölthet fel egy új sysupgrade-kompatibilis képet a futó firmware " +"lecseréléséhez. A jelenlegi beállítások megtartásához jelölje be a " +"\"Beállítások megtartása\" négyzetet (kompatibilis firmware kép szükséges)." + +msgid "Upload archive..." +msgstr "Archívum feltöltése..." + +msgid "Uploaded File" +msgstr "Feltöltött fájl" + +msgid "Uptime" +msgstr "Működési idő" + +msgid "Use /etc/ethers" +msgstr "/etc/ethers használata" + +msgid "Use DHCP gateway" +msgstr "DHCP kiszolgáló használata" + +msgid "Use DNS servers advertised by peer" +msgstr "Másik fél által ajánlott DNS szerverek használata" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "ISO/IEC 3166 alpha2 országkódok használata" + +msgid "Use MTU on tunnel interface" +msgstr "MTU használata az alagút interfészen" + +msgid "Use TTL on tunnel interface" +msgstr "TTL használata az alagút interfészen" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Broadcast flag használata" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Egyedi DNS szerverek használata" + +msgid "Use default gateway" +msgstr "Alapértelmezett átjáró használata" + +msgid "Use gateway metric" +msgstr "Átjáró metrikájának használata" + +msgid "Use routing table" +msgstr "Útválasztó tábla használata" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"Használja a Hozzáadás gombot új bérleti bejegyzés hozzáadásához. A " +"MAC-cím azonosítja a gépet. az IPv4-cím adja meg a " +"használandó rögzített IP címet és a Gépnév lesz szimbolikus névként " +"hozzárendelve az igénylő géphez." + +msgid "Used" +msgstr "Használt" + +msgid "Used Key Slot" +msgstr "Használt kulcsindex" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Felhasználónév" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLAN-ok %q-n" + +msgid "VLANs on %q (%s)" +msgstr "VLAN-ok %q-n (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "VPN kiszolgáló" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "DHCP kérés során küldendő 'Vendor Class'" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Ellenőrzés" + +msgid "Version" +msgstr "Verzió" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "WEP nyílt rendszer" + +msgid "WEP Shared Key" +msgstr "WEP megosztott kulcs" + +msgid "WEP passphrase" +msgstr "WEP jelmondat" + +msgid "WMM Mode" +msgstr "WMM mód" + +msgid "WPA passphrase" +msgstr "WPA jelmondat" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"WPA titkosításhoz kliens módnál 'wpa_supplicant', hozzáférési pont illetve " +"ad-hoc módnál 'hostapd' telepítése szükséges." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "Várakozás a változtatások alkalmazására..." + +msgid "Waiting for command to complete..." +msgstr "Várakozás a parancs befejezésére..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Figyelmeztetés" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Vezetéknélküli rész" + +msgid "Wireless Adapter" +msgstr "Vezetéknélküli adapter" + +msgid "Wireless Network" +msgstr "Vezetéknélküli hálózat" + +msgid "Wireless Overview" +msgstr "Vezetéknélküli rész áttekintés" + +msgid "Wireless Security" +msgstr "Vezetéknélküli biztonság" + +msgid "Wireless is disabled or not associated" +msgstr "Vezetéknélküli hálózat le van tiltva vagy nincs kapcsolódva" + +msgid "Wireless is restarting..." +msgstr "Vezetéknélküli rész újraindítása folyamatban..." + +msgid "Wireless network is disabled" +msgstr "Vezetéknélküli hálózat letiltva" + +msgid "Wireless network is enabled" +msgstr "Vezetéknélküli hálózat engedélyezve" + +msgid "Wireless restarted" +msgstr "Vezetéknélküli rész újraindítva" + +msgid "Wireless shut down" +msgstr "Vezetéknélküli rész leállítása" + +msgid "Write received DNS requests to syslog" +msgstr "A kapott DNS kéréseket írja a rendszernaplóba" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "XR támogatás" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Itt engedélyezheti vagy tilthatja le a telepített indítási állományokat. A " +"módosítások a rendszer újraindítása után lesznek alakalmazva.
Figyelem: alapvető indítási állomány pl. \"network\" letiltása " +"esetén, az eszköz elérhetetlenné válhat!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Engélyezze a Java Szkripteket a böngészőjében, mert anélkül a LuCI nem fog " +"megfelelően működni." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "bármelyik" + +msgid "auto" +msgstr "automatikus" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "áthidalt" + +msgid "create:" +msgstr "új:" + +msgid "creates a bridge over specified interface(s)" +msgstr "híd létrehozása a megadott interfész(ek) között" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "letiltás" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "lejárt" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"fájl ahová a DHCP " +"bérletek tárolásra kerülnek" + +msgid "forward" +msgstr "továbbítás" + +msgid "full-duplex" +msgstr "full-duplex" + +msgid "half-duplex" +msgstr "half-duplex" + +msgid "help" +msgstr "súgó" + +msgid "hidden" +msgstr "rejtett" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "ha a cél hálózat" + +msgid "input" +msgstr "bemenet" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "helyi DNS fájl" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "nem" + +msgid "no link" +msgstr "nincs link" + +msgid "none" +msgstr "nincs" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "ki" + +msgid "on" +msgstr "be" + +msgid "open" +msgstr "nyitás" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "irányított" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "cimkézett" + +msgid "unknown" +msgstr "ismeretlen" + +msgid "unlimited" +msgstr "korlátlan" + +msgid "unspecified" +msgstr "nincs meghatározva" + +msgid "unspecified -or- create:" +msgstr "nincs magadva -vagy- új:" + +msgid "untagged" +msgstr "cimkézetlen" + +msgid "yes" +msgstr "igen" + +msgid "« Back" +msgstr "« Vissza" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "Amennyiben ezt jelöletlenül hagyja, egy további hálózat jön létre" + +#~ msgid "Join Network: Settings" +#~ msgstr "Csatlakozás a hálózathoz: Beállítások" + +#~ msgid "CPU" +#~ msgstr "Processzor" + +#~ msgid "Port %d" +#~ msgstr "Port %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "A %d port egyszerre több VLAN-ban is cimkézetlen!" + +#~ msgid "VLAN Interface" +#~ msgstr "VLAN interfész" diff --git a/feeds/luci/modules/luci-base/po/it/base.po b/feeds/luci/modules/luci-base/po/it/base.po new file mode 100644 index 0000000..199ffcb --- /dev/null +++ b/feeds/luci/modules/luci-base/po/it/base.po @@ -0,0 +1,3807 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2015-04-20 10:33+0100\n" +"Last-Translator: muxator \n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.6.10\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d finestra in minuti , %d secondi intervallo)" + +msgid "(%s available)" +msgstr "(%s disponibile)" + +msgid "(empty)" +msgstr "(vuoto)" + +msgid "(no interfaces attached)" +msgstr "(nessuna interfaccia collegata)" + +msgid "-- Additional Field --" +msgstr "-- Campo aggiuntivo --" + +msgid "-- Please choose --" +msgstr "-- Per favore scegli --" + +msgid "-- custom --" +msgstr "-- personalizzato --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Carico in 1 minuto:" + +msgid "15 Minute Load:" +msgstr "Carico in 15 minut:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Carico in 5 minuti:" + +msgid "BSSID" +msgstr "" +"BSSID" + +msgid "DNS query port" +msgstr "Richiesta porta DNS" + +msgid "DNS server port" +msgstr "Porta Server DNS" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"DNS I server che verranno " +"interrogati nell'ordine del resolv file" + +msgid "ESSID" +msgstr "" +"ESSID" + +msgid "IPv4-Address" +msgstr "Indirizzo IPv4" + +msgid "IPv4-Gateway" +msgstr "Gateway IPv4" + +msgid "IPv4-Netmask" +msgstr "" +"Maschera di rete IPv4" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"Indirizzo IPv6 o rete " +"(CIDR)" + +msgid "IPv6-Gateway" +msgstr "Gateway IPv6" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "Configurazione LED" + +msgid "LED Name" +msgstr "LED Nome" + +msgid "MAC-Address" +msgstr "Indirizzo MAC" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Max. Contratto DHCP" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Max. dimensione pacchetti EDNS0" + +msgid "Max. concurrent queries" +msgstr "Max. Richiesta in uso" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "Supporto AR" + +msgid "ARP retry threshold" +msgstr "riprova soglia ARP" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "Ponti ATM" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "Identificatore Canale Virtuale ATM (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "Identificatore Percorso Virtuale ATM (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"I ponti ATM incapsulano connessioni in AAL5, in modo che i dispositivi " +"virtuali si possono interfacciare con le reti virtuali Linux in congiunzione " +"con la comunicazione DHCP o PPP dell'ISP." + +msgid "ATM device number" +msgstr "Numero dispositivo ATM " + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Accesso Concentratore" + +msgid "Access Point" +msgstr "Punto di Accesso" + +msgid "Action" +msgstr "Azione" + +msgid "Actions" +msgstr "Azioni" + +msgid "Activate this network" +msgstr "Attiva questa rete" + +msgid "Active IPv4-Routes" +msgstr "" +"Instradamento IPv4 " +"attivo" + +msgid "Active IPv6-Routes" +msgstr "" +"Instradamento IPv6 " +"attivo" + +msgid "Active Connections" +msgstr "Connessioni attive" + +msgid "Active DHCP Leases" +msgstr "Attiva contratti DHCP" + +msgid "Active DHCPv6 Leases" +msgstr "Attiva contratti DHCPv6" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Aggiungi" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" +"Aggiungere il suffisso di dominio locale ai nomi serviti dal file hosts" + +msgid "Add new interface..." +msgstr "Aggiungi nuova interfaccia..." + +msgid "Additional Hosts files" +msgstr "File Hosts Aggiuntivo" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Indirizzo" + +msgid "Address to access local relay bridge" +msgstr "Indirizzo per accedere al ponte locale di trasmissione" + +msgid "Administration" +msgstr "Amministrazione" + +msgid "Advanced Settings" +msgstr "Opzioni Avanzate" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Avviso" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" +"Permetti autenticazione SSH tramite " +"password" + +msgid "Allow all except listed" +msgstr "Consenti tutti tranne quelli nell'elenco" + +msgid "Allow listed only" +msgstr "Consenti solo quelli nell'elenco" + +msgid "Allow localhost" +msgstr "Permetti localhost" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"Permetti agli host remoti di connettersi tramite ssh reindirizzando le porte" + +msgid "Allow root logins with password" +msgstr "Permetti l'accesso a root con password" + +msgid "Allow the root user to login with password" +msgstr "Abilita l'utente root con l'accesso via password" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"Permetti le risposte upstream nell'intervallo 127.0.0.0/8, per esempio nei " +"servizi RBL" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antenna 1" + +msgid "Antenna 2" +msgstr "Antenna 2" + +msgid "Antenna Configuration" +msgstr "Configurazione dell'Antenna" + +msgid "Any zone" +msgstr "Qualsiasi Zona" + +msgid "Apply" +msgstr "Applica" + +msgid "Applying changes" +msgstr "Applica modifiche" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Assegna Interfacce..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Dispositivi Wi-Fi connessi" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Dispositivo Wireless Atheros 802.11%s" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Autenticazione PEAP" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Autoritativo" + +msgid "Authorization Required" +msgstr "Autorizzazione richiesta" + +msgid "Auto Refresh" +msgstr "Aggiornamento Automatico" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Disponibili" + +msgid "Available packages" +msgstr "Pacchetti disponibili" + +msgid "Average:" +msgstr "Media:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Indietro" + +msgid "Back to Overview" +msgstr "Ritorna alla panoramica" + +msgid "Back to configuration" +msgstr "Indietro alla configurazione" + +msgid "Back to overview" +msgstr "Ritorna alla panoramica" + +msgid "Back to scan results" +msgstr "Ritorno ai risultati della scansione" + +msgid "Background Scan" +msgstr "Scansione in background" + +msgid "Backup / Flash Firmware" +msgstr "Copia di Sicurezza / Flash Firmware" + +msgid "Backup / Restore" +msgstr "Copia di Sicurezza / Ripristina" + +msgid "Backup file list" +msgstr "Elenco dei file di cui effettuare una copia di sicurezza" + +msgid "Bad address specified!" +msgstr "E' stato specificato un indirizzo errato!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Di seguito l'elenco dei file di cui effettuare la copia di sicurezza. Essa è " +"composta dai file di configurazione modificati installati da opkg, file di " +"base essenziali e i file di backup definiti dall'utente." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Bogus NX Domain Override" +msgstr "Ignora Dominio Bogus NX" + +msgid "Bridge" +msgstr "Ponte" + +msgid "Bridge interfaces" +msgstr "Interfacce Ponte" + +msgid "Bridge unit number" +msgstr "Numero Unità Ponte" + +msgid "Bring up on boot" +msgstr "Attivare all'avvio" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Dispositivo Wireless Broadcom 802.11%s" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Dispositivo Wireless Broadcom BCM%04x 802.11" + +msgid "Buffered" +msgstr "Buffered" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Pulsanti" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Uso CPU (%)" + +msgid "Cancel" +msgstr "Annulla" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Catena" + +msgid "Changes" +msgstr "Modifiche" + +msgid "Changes applied." +msgstr "Modifiche applicate." + +msgid "Changes the administrator password for accessing the device" +msgstr "Cambia la password di amministratore per accedere al dispositivo" + +msgid "Channel" +msgstr "Canale" + +msgid "Check" +msgstr "Verifica" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Checksum" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Scegli la zona del firewall che si desidera assegnare a questa interfaccia. " +"Selezionare non specificato per rimuovere l'interfaccia dalla zona " +"associata o compilare il campo crea per definire una nuova zona e " +"collegare l'interfaccia ad esso." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Segliere la/le rete/reti a cui vuoi collegare questa interfaccia wireless o " +"riempire il campo crea per definire una nuova rete." + +msgid "Cipher" +msgstr "Cifratura" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Premi su \"Genera archivio\" per scaricare un archivio tar di backup dei " +"file di configurazione attuali. Per ripristinare il firmware al suo stato " +"iniziale premi \"Esegui RIpristino\" (solo per firmware basati su squashfs)." + +msgid "Client" +msgstr "Cliente" + +msgid "Client ID to send when requesting DHCP" +msgstr "ID Cliente da inviare all'interno della richiesta DHCP" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Chiudi le connessioni inattive dopo x secondi, usa 0 per connessioni " +"persistenti" + +msgid "Close list..." +msgstr "Scegliere dall'elenco..." + +msgid "Collecting data..." +msgstr "Raccolgo i dati..." + +msgid "Command" +msgstr "Comando" + +msgid "Common Configuration" +msgstr "Configurazioni Comuni" + +msgid "Compression" +msgstr "Compressione" + +msgid "Configuration" +msgstr "Configurazione" + +msgid "Configuration applied." +msgstr "Configurazione salvata." + +msgid "Configuration files will be kept." +msgstr "I file di configurazione verranno mantenuti." + +msgid "Confirmation" +msgstr "Conferma" + +msgid "Connect" +msgstr "Connetti" + +msgid "Connected" +msgstr "Connesso" + +msgid "Connection Limit" +msgstr "Limite connessioni" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Connessioni" + +msgid "Country" +msgstr "Nazione" + +msgid "Country Code" +msgstr "Codice Nazione" + +msgid "Cover the following interface" +msgstr "Coprire la seguente interfaccia" + +msgid "Cover the following interfaces" +msgstr "Coprire le seguenti interfacce" + +msgid "Create / Assign firewall-zone" +msgstr "Crea / Assegna zona firewall" + +msgid "Create Interface" +msgstr "Crea Interfaccia" + +msgid "Create a bridge over multiple interfaces" +msgstr "Crea un ponte tra interfaccie multiple" + +msgid "Critical" +msgstr "Critico" + +msgid "Cron Log Level" +msgstr "Livello di log del Cron" + +msgid "Custom Interface" +msgstr "Interfaccia personalizzata" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Personalizza la configurazione dei LED del sistema se possibile." + +msgid "DHCP Leases" +msgstr "Contratta DHCP" + +msgid "DHCP Server" +msgstr "Server DHCP" + +msgid "DHCP and DNS" +msgstr "DHCP e DNS" + +msgid "DHCP client" +msgstr "Client DHCP" + +msgid "DHCP-Options" +msgstr "Opzioni DHCP" + +msgid "DHCPv6 Leases" +msgstr "Locazioni DHCPv6" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "Inoltri DNS" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Debug" + +msgid "Default %d" +msgstr "Predefinito %d" + +msgid "Default gateway" +msgstr "Gateway predefinito" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Stato Predefinito" + +msgid "Define a name for this network." +msgstr "Definisci un nome per questa rete." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Definisci opzioni DHCP aggiuntive, per esempio " +"\"6,192.168.2.1,192.168.2.2\" fornisce differenti server DNS ai " +"client." + +msgid "Delete" +msgstr "Elimina" + +msgid "Delete this network" +msgstr "Rimuovi questa rete" + +msgid "Description" +msgstr "Descrizione" + +msgid "Design" +msgstr "Disegno" + +msgid "Destination" +msgstr "Destinazione" + +msgid "Device" +msgstr "Dispositivo" + +msgid "Device Configuration" +msgstr "Configurazione del dispositivo" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnostica" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Cartella" + +msgid "Disable" +msgstr "Disabilita" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Disabilita DHCP per questa interfaccia." + +msgid "Disable DNS setup" +msgstr "Disabilita il setup dei DNS" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Disabilita Timer Beacon HW" + +msgid "Disabled" +msgstr "Disabilitato" + +msgid "Discard upstream RFC1918 responses" +msgstr "Ignora risposte RFC1918 upstream" + +msgid "Displaying only packages containing" +msgstr "Visualizza solo i pacchetti contenenti" + +msgid "Distance Optimization" +msgstr "Ottimizzazione distanza" + +msgid "Distance to farthest network member in meters." +msgstr "Distanza del membro più lontano della rete in metri." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Diversità" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq è un server DHCP e inoltratore DNS " +"per firewall NAT" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "Non memorizzare le repliche negative, es. per domini non esistenti" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Non inoltrare le richieste che non possono essere risolte dai name server " +"pubblici" + +msgid "Do not forward reverse lookups for local networks" +msgstr "Non proseguire con le ricerche inverse per le reti locali." + +msgid "Do not send probe responses" +msgstr "Disabilita Probe-Responses" + +msgid "Domain required" +msgstr "Dominio richiesto" + +msgid "Domain whitelist" +msgstr "Elenco Domini consentiti" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Non inoltrare le richieste DNS " +"senza nome DNS" + +msgid "Download and install package" +msgstr "Scarica e installa pacchetto" + +msgid "Download backup" +msgstr "Download backup" + +msgid "Dropbear Instance" +msgstr "Instanza di Dropbear" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear offre accesso SSH e integra un " +"server SCP" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"DHCP dinamico" + +msgid "Dynamic tunnel" +msgstr "Dynamic tunnel" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Fornisci dinamicamente gli indirizzi DHCP ai client. Se disabilitato, solo i " +"client con un indirizzo statico saranno serviti." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "Metodo EAP" + +msgid "Edit" +msgstr "Modifica" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Modifica questa interfaccia" + +msgid "Edit this network" +msgstr "Modifica questa rete" + +msgid "Emergency" +msgstr "Emergenza" + +msgid "Enable" +msgstr "Abilita" + +msgid "Enable STP" +msgstr "Abilita STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Abilitazione aggiornamento endpoint dinamico HE.net" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Attiva la negoziazione IPv6 sul collegamento PPP" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Abilita Jumbo Frame passthrough" + +msgid "Enable NTP client" +msgstr "Attiva il client NTP" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Abilita il server TFTP" + +msgid "Enable VLAN functionality" +msgstr "Abilita la funzionalità VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Attivare l'apprendimento e l'invecchiamento" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Abilita questo mount" + +msgid "Enable this swap" +msgstr "Abilita questo swap" + +msgid "Enable/Disable" +msgstr "Abilita/Disabilita" + +msgid "Enabled" +msgstr "Abilitato" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Abilita il protocollo di Spanning Tree su questo bridge" + +msgid "Encapsulation mode" +msgstr "Modalità di incapsulamento" + +msgid "Encryption" +msgstr "Crittografia" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Cancellazione..." + +msgid "Error" +msgstr "Errore" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Scheda di Rete" + +msgid "Ethernet Switch" +msgstr "Switch di Rete" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Espandi gli hosts" + +msgid "Expires" +msgstr "Scadenze" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" +"Tempo di scadenza di indirizzi localizzati, il minimo è di 2 minuti ( " +"2m )." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Server Log di Sistema esterno" + +msgid "External system log server port" +msgstr "Porta Server Log di Sistema esterno" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Frame veloci" + +msgid "File" +msgstr "File" + +msgid "Filename of the boot image advertised to clients" +msgstr "Nome del file dell'immagine di avvio annunciato ai clienti." + +msgid "Filesystem" +msgstr "Filesystem" + +msgid "Filter" +msgstr "Filtro" + +msgid "Filter private" +msgstr "Filtra privati" + +msgid "Filter useless" +msgstr "Filtra inutili" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Trova e aggiungi una rete" + +msgid "Find package" +msgstr "Cerca pacchetto" + +msgid "Finish" +msgstr "Fine" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall Settings" +msgstr "Impostazioni Firewall" + +msgid "Firewall Status" +msgstr "Stato del Firewall" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Versione del Firmware" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Porta di origine fissa per le richieste DNS in uscita" + +msgid "Flash Firmware" +msgstr "Flash Firmware" + +msgid "Flash image..." +msgstr "Flash immagine..." + +msgid "Flash new firmware image" +msgstr "Flash immagine nuovo firmware" + +msgid "Flash operations" +msgstr "Operazioni Flash" + +msgid "Flashing..." +msgstr "Flashing..." + +msgid "Force" +msgstr "Forza" + +msgid "Force CCMP (AES)" +msgstr "Forza CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "Forza DHCP su questa rete, anche se un altro server viene rilevato." + +msgid "Force TKIP" +msgstr "Forza TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Forza TKIP e CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Inoltra il traffico DHCP" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Inoltra il traffico broadcast" + +msgid "Forwarding mode" +msgstr "Modalità di Inoltro" + +msgid "Fragmentation Threshold" +msgstr "Soglia di frammentazione" + +msgid "Frame Bursting" +msgstr "Frame Bursting" + +msgid "Free" +msgstr "Disponibile" + +msgid "Free space" +msgstr "Spazio libero" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "Solo GPRS" + +msgid "Gateway" +msgstr "Gateway" + +msgid "Gateway ports" +msgstr "Porte Gateway" + +msgid "General Settings" +msgstr "Opzioni Generali" + +msgid "General Setup" +msgstr "Impostazioni Generali" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Genera Archivio" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Dispositivo Wireless 802.11%s Generico" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" +"La conferma della password assegnata non ha prodotto risultati, la password " +"non è stata cambiata!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "Opzioni rete globale" + +msgid "Go to password configuration..." +msgstr "Vai alla configurazione della password..." + +msgid "Go to relevant configuration page" +msgstr "Vai alla pagina di configurazione relativa" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "Password HE.net" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Gestore" + +msgid "Hang Up" +msgstr "Hangup" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Qui puoi configurare gli aspetti base del tuo dispositivo come l'" +"hostname o il fuso orario." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"Qui è possibile incollare le chiavi pubbliche SSH (uno per riga) per " +"l'autenticazione con chiave pubblica SSH." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Dispositivo Wireless Hermes 802.11b" + +msgid "Hide ESSID" +msgstr "Nascondi ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Campi host" + +msgid "Host expiry timeout" +msgstr "Timeout scadenza Host" + +msgid "Host-IP or Network" +msgstr "" +"IP dell'host o rete" + +msgid "Hostname" +msgstr "Hostname" + +msgid "Hostname to send when requesting DHCP" +msgstr "Nome host da inviare al momento della richiesta DHCP" + +msgid "Hostnames" +msgstr "Hostname" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "Indirizzo IP" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "IPv4 Firewall" + +msgid "IPv4 WAN Status" +msgstr "Stato WAN IPv4" + +msgid "IPv4 address" +msgstr "Indirizzi IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "trasmissione IPv4" + +msgid "IPv4 gateway" +msgstr "Gateway IPv4" + +msgid "IPv4 netmask" +msgstr "Maschera rete IPv4" + +msgid "IPv4 only" +msgstr "Solo IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "Lunghezza prefisso IPv4" + +msgid "IPv4-Address" +msgstr "Indirizzo-IPv4" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "IPv6 Firewall" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "Stato WAN IPv6" + +msgid "IPv6 address" +msgstr "Indirizzi IPv6" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "Gateway IPv6" + +msgid "IPv6 only" +msgstr "Solo IPv6" + +msgid "IPv6 prefix" +msgstr "Prefisso IPv6" + +msgid "IPv6 prefix length" +msgstr "Lunghezza prefisso IPv6" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "Indirizzo-IPv6" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-in-IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6-su-IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6-su-IPv4 (6to4)" + +msgid "Identity" +msgstr "Identità PEAP" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" +"Se specificato, montare il dispositivo dal suo UUID invece che dal nodo di " +"dispositivo fisso" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" +"Se specificato, montare il dispositivo dall'etichetta della partizione al " +"posto di un nodo di un dispositivo fisso" + +msgid "If unchecked, no default route is configured" +msgstr "Se deselezionata, alcun percorso predefinito è configurato" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" +"Se deselezionata, gli indirizzi ai Server DNS annunciati saranno ignorati" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Se la tua memoria è insufficiente i dati non usati possono venire " +"temporaneamente spostati in un'area di swap risultando in un più grande " +"quantitativo di RAM usabile. " +"Sappi che spostare dati in swap è un processo molto lento e che il " +"dispositivo di swap non può essere acceduto alle alte velocità della RAM." + +msgid "Ignore /etc/hosts" +msgstr "Ignora /etc/hosts" + +msgid "Ignore interface" +msgstr "Ignora interfaccia" + +msgid "Ignore resolve file" +msgstr "Ignora file resolv" + +msgid "Image" +msgstr "Immagine" + +msgid "In" +msgstr "In" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Tempo di Inattività" + +msgid "Inbound:" +msgstr "In entrata:" + +msgid "Info" +msgstr "Informazioni" + +msgid "Initscript" +msgstr "Script di avvio" + +msgid "Initscripts" +msgstr "Scripts di avvio" + +msgid "Install" +msgstr "Installa" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Installa il pacchetto %q" + +msgid "Install protocol extensions..." +msgstr "Installa le estensioni del protocollo..." + +msgid "Installed packages" +msgstr "Pacchetti installati" + +msgid "Interface" +msgstr "Interfaccia" + +msgid "Interface Configuration" +msgstr "Configurazione Interfaccia" + +msgid "Interface Overview" +msgstr "Riassunto Interfaccia" + +msgid "Interface is reconnecting..." +msgstr "L'interfaccia si sta ricollegando..." + +msgid "Interface is shutting down..." +msgstr "L'intefaccia si sta spegnendo..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "Interfaccia non presente o non ancora connessa." + +msgid "Interface reconnected" +msgstr "Interfaccia ricollegata." + +msgid "Interface shut down" +msgstr "Interfaccia spenta" + +msgid "Interfaces" +msgstr "Interfacce" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "Errore del Server Interno" + +msgid "Invalid" +msgstr "Valore immesso non valido" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "ID VLAN non valido! Solo gli ID compresi tra %d e %d sono consentiti." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "ID VLAN non valido! Solo gli ID unici sono consentiti" + +msgid "Invalid username and/or password! Please try again." +msgstr "Username o password non validi! Per favore riprova." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Sembra tu stia provando a flashare un'immagine più grande delle dimensioni " +"della memoria flash, per favore controlla il file!" + +msgid "Java Script required!" +msgstr "Richiesto Java Script!" + +msgid "Join Network" +msgstr "Aggiungi Rete" + +msgid "Join Network: Wireless Scan" +msgstr "Aggiunta Rete: Rilevamento Wireless" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Mantieni le Impostazioni" + +msgid "Kernel Log" +msgstr "Log del kernel" + +msgid "Kernel Version" +msgstr "Versione del kernel" + +msgid "Key" +msgstr "Chiave" + +msgid "Key #%d" +msgstr "Chiave #%d" + +msgid "Kill" +msgstr "Uccidi" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "Server L2TP" + +msgid "LCP echo failure threshold" +msgstr "Fallimento soglia echo LCP" + +msgid "LCP echo interval" +msgstr "Intervallo echo LCP" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Etichetta" + +msgid "Language" +msgstr "Lingua" + +msgid "Language and Style" +msgstr "Lingua e Stile" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Periodo di Validità del Lease" + +msgid "Leasefile" +msgstr "File di lease" + +msgid "Leasetime" +msgstr "Tempo di lease" + +msgid "Leasetime remaining" +msgstr "Tempo lease residuo" + +msgid "Leave empty to autodetect" +msgstr "Lasciare vuoto per l'autorilevamento" + +msgid "Leave empty to use the current WAN address" +msgstr "Lasciare vuoto per usare l'indirizzo WAN attuale" + +msgid "Legend:" +msgstr "Legenda:" + +msgid "Limit" +msgstr "Limite" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Collegamento on" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"Elenco di Server DNSa cui " +"inoltrare le richieste in" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "Elenco di domini da consentire le risposte RFC1918 per" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "Elenco degli host che forniscono falsi risultati di dominio NX" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "Ascolta solo l'interfaccia data o, se non specificato, su tutte" + +msgid "Listening port for inbound DNS queries" +msgstr "Porta di ascolto per le richieste DNS in entrata" + +msgid "Load" +msgstr "Carico" + +msgid "Load Average" +msgstr "Carico Medio" + +msgid "Loading" +msgstr "Caricamento" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Indirizzo IPv4 locale" + +msgid "Local IPv6 address" +msgstr "Indirizzo IPv6 locale" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Avvio Locale" + +msgid "Local Time" +msgstr "Ora locale" + +msgid "Local domain" +msgstr "Dominio Locale" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Specifiche dominio locale. I nomi di dominio corrispondenti a questi criteri " +"non sono mai inoltrate e risolti solo da DHCP o file hosts" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"Suffisso di dominio locale aggiunto ai nomi dei DHCP e voci del file hosts" + +msgid "Local server" +msgstr "Server Locale" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" +"Localizzare nome host a seconda della sottorete richiedente se sono " +"disponibili IP multipli" + +msgid "Localise queries" +msgstr "Localizza richieste" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Livello di dettaglio registro" + +msgid "Log queries" +msgstr "Logga richieste" + +msgid "Logging" +msgstr "Logging" + +msgid "Login" +msgstr "Login" + +msgid "Logout" +msgstr "Slogga" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "MAC-Address Filter" +msgstr "Filtro dei MAC-Address" + +msgid "MAC-Filter" +msgstr "Filtro MAC" + +msgid "MAC-List" +msgstr "Lista MAC" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Velocità massima" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +msgid "Maximum hold time" +msgstr "Velocità massima" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "" + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "Memoria" + +msgid "Memory usage (%)" +msgstr "Uso Memory (%)" + +msgid "Metric" +msgstr "Metrica" + +msgid "Minimum Rate" +msgstr "Velocità minima" + +msgid "Minimum hold time" +msgstr "Velocità minima" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "Modalità" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Dispositivo modem" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "Punto di mount" + +msgid "Mount Points" +msgstr "Punto di mount" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"I punti di mount definiscono in quale punto un dispositivo di memoria verrà " +"attaccato al tuo filesystem" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Opzioni di mount" + +msgid "Mount point" +msgstr "Punto di mount" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "File system montati" + +msgid "Move down" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Multicast Rate" +msgstr "Velocità multicast" + +msgid "Multicast address" +msgstr "" + +msgid "NAS ID" +msgstr "ID della NAS" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Nome" + +msgid "Name of the new interface" +msgstr "Nome della nuova interfaccia" + +msgid "Name of the new network" +msgstr "Nome della nuova rete" + +msgid "Navigation" +msgstr "Navigazione" + +msgid "Netmask" +msgstr "Maschera di rete" + +msgid "Network" +msgstr "Rete" + +msgid "Network Utilities" +msgstr "Utilità di Rete" + +msgid "Network boot image" +msgstr "" + +msgid "Network without interfaces." +msgstr "Rete senza interfaccia" + +msgid "Next »" +msgstr "Prossimo »" + +msgid "No DHCP Server configured for this interface" +msgstr "" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "" + +msgid "No files found" +msgstr "Nessun file trovato" + +msgid "No information available" +msgstr "Nessuna informazione disponibile" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "Nessuna rete è configurata su questo dispositivo" + +msgid "No network name specified" +msgstr "" + +msgid "No package lists available" +msgstr "" + +msgid "No password set!" +msgstr "" + +msgid "No rules in this chain" +msgstr "" + +msgid "No zone assigned" +msgstr "" + +msgid "Noise" +msgstr "Rumore" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Nessuno" + +msgid "Normal" +msgstr "Normale" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "Non associato" + +msgid "Not connected" +msgstr "" + +msgid "Note: Configuration files will be erased." +msgstr "" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Avviso" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "Configurazione di OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"In questa pagina puoi configurare le interfacce di rete.Puoi unire più " +"interfacce spuntando la voce \"unisci interfacce\" e inserendo i nomi di più " +"interfacce di rete separate da spazi. Puoi anche usare la notazione VLAN INTERFACCIA.VLANNUM (e.s.: eth0.1)." + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "Uno o più campi contengono valori non validi!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Uno o più campi obbligatori sono vuoti!" + +msgid "Open list..." +msgstr "" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Opzione cambiata" + +msgid "Option removed" +msgstr "Opzione cancellata" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Opzioni" + +msgid "Other:" +msgstr "Altro:" + +msgid "Out" +msgstr "" + +msgid "Outbound:" +msgstr "In uscita:" + +msgid "Outdoor Channels" +msgstr "" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "Sovrascivi MTU" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "Riassunto" + +msgid "Owner" +msgstr "Proprietario" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "" + +msgid "PPP" +msgstr "" + +msgid "PPPoA Encapsulation" +msgstr "Incapsulamento PPPoA" + +msgid "PPPoATM" +msgstr "" + +msgid "PPPoE" +msgstr "" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "E' richiesto il pacchetto libiwinfo!" + +msgid "Package lists are older than 24 hours" +msgstr "" + +msgid "Package name" +msgstr "Nome pacchetto" + +msgid "Packets" +msgstr "Pacchetti" + +msgid "Part of zone %q" +msgstr "" + +msgid "Password" +msgstr "Password" + +msgid "Password authentication" +msgstr "Password di authenticazione" + +msgid "Password of Private Key" +msgstr "Password della chiave privata" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "Password cambiata con successo!" + +msgid "Path to CA-Certificate" +msgstr "Percorso al certificato CA" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "Percorso alla chiave privata" + +msgid "Path to executable which handles the button event" +msgstr "" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Picco:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Esegui un riavvio" + +msgid "Perform reset" +msgstr "" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "" + +msgid "Please enter your username and password." +msgstr "Per favore inserisci il tuo username e la password." + +msgid "Policy" +msgstr "" + +msgid "Port" +msgstr "Porta" + +msgid "Port status:" +msgstr "" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Impedisci la comunicazione fra Client" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Continuare" + +msgid "Processes" +msgstr "Processi" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protocollo" + +msgid "Protocol family" +msgstr "" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "Soglia RTS/CTS" + +msgid "RX" +msgstr "" + +msgid "RX Rate" +msgstr "" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Leggi /etc/ethers per configurare il server DHCP" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"Vuoi davvero spegnere questa interfaccia \"%s\" ?\\nPotresti perdere " +"l'accesso a questo router se stai usando questa interfaccia." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "" + +msgid "Realtime Connections" +msgstr "Connessioni in tempo reale" + +msgid "Realtime Graphs" +msgstr "" + +msgid "Realtime Load" +msgstr "Carico in tempo reale" + +msgid "Realtime Traffic" +msgstr "Traffico in tempo reale" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "Riavvia" + +msgid "Rebooting..." +msgstr "" + +msgid "Reboots the operating system of your device" +msgstr "Riavvia il sistema operativo del tuo dispositivo" + +msgid "Receive" +msgstr "Ricezione" + +msgid "Receiver Antenna" +msgstr "Antenna ricevente" + +msgid "Reconnect this interface" +msgstr "Ricollega questa interfaccia" + +msgid "Reconnecting interface" +msgstr "Sto ricollegando l'interfaccia" + +msgid "References" +msgstr "" + +msgid "Regulatory Domain" +msgstr "" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Rimuovi" + +msgid "Repeat scan" +msgstr "" + +msgid "Replace entry" +msgstr "Sostituisci campo" + +msgid "Replace wireless configuration" +msgstr "" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Reset" + +msgid "Reset Counters" +msgstr "Azzera Contatori" + +msgid "Reset to defaults" +msgstr "" + +msgid "Resolv and Hosts Files" +msgstr "" + +msgid "Resolve file" +msgstr "File Resolve" + +msgid "Restart" +msgstr "Riavvia" + +msgid "Restart Firewall" +msgstr "Riavvia Firewall" + +msgid "Restore backup" +msgstr "Ripristina backup" + +msgid "Reveal/hide password" +msgstr "" + +msgid "Revert" +msgstr "Ripristina" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "" + +msgid "Routes" +msgstr "Route" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Le route specificano attraverso quale interfaccia e gateway un certo host o " +"rete può essere raggiunto." + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "Save" +msgstr "Salva" + +msgid "Save & Apply" +msgstr "Salva & applica" + +msgid "Save & Apply" +msgstr "" + +msgid "Scan" +msgstr "Scan" + +msgid "Scheduled Tasks" +msgstr "Operazioni programmate" + +msgid "Section added" +msgstr "" + +msgid "Section removed" +msgstr "" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "Isola utenti" + +msgid "Separate WDS" +msgstr "WDS separati" + +msgid "Server Settings" +msgstr "" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "" + +msgid "Service Type" +msgstr "" + +msgid "Services" +msgstr "Servizi" + +msgid "Set up Time Synchronization" +msgstr "" + +msgid "Setup DHCP Server" +msgstr "" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "" + +msgid "Shutdown this network" +msgstr "" + +msgid "Signal" +msgstr "Segnale" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "" + +msgid "Size" +msgstr "Dimensione" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Salta" + +msgid "Skip to content" +msgstr "Salta a contenuto" + +msgid "Skip to navigation" +msgstr "Salta a navigazione" + +msgid "Slot time" +msgstr "Slot time" + +msgid "Software" +msgstr "Software" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Alcuni campi non sono validi, non è possibile salvare i valori!" + +msgid "Sorry, the object you requested was not found." +msgstr "Siamo spiacenti, l'oggetto che hai richiesto non è stato trovato." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "Spiacente, il server ha rilevato un errore imprevisto." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"Spiacenti, non è presente alcun supporto sysupgrade, una nuova immagine " +"firmware deve essere memorizzata (Flash) manualmente. Si prega di fare " +"riferimento al wiki per le istruzioni di installazione di dispositivi " +"specifici." + +msgid "Sort" +msgstr "Elenca" + +msgid "Source" +msgstr "Origine" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "Specifica lo stato del pulsante da gestire" + +msgid "Specifies the directory the device is attached to" +msgstr "Specifica la cartella a cui è collegato il dispositivo in" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Specifica la porta di ascolto di questa istanza Dropbear" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" +"Consente di specificare la quantità massima di richieste ARP fallite finché " +"gli host si presume siano morti." + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" +"Specifica la quantità massima di secondi dopo di che si presume che gli host " +"siano morti." + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Specificare la chiave di cifratura qui." + +msgid "Start" +msgstr "Inizio" + +msgid "Start priority" +msgstr "Priorità di avvio" + +msgid "Startup" +msgstr "Avvio" + +msgid "Static IPv4 Routes" +msgstr "Instradamento statico IPv4" + +msgid "Static IPv6 Routes" +msgstr "Instradamento statico IPv6" + +msgid "Static Leases" +msgstr "Leases statici" + +msgid "Static Routes" +msgstr "Instradamenti Statici" + +msgid "Static WDS" +msgstr "WDS statico" + +msgid "Static address" +msgstr "Indirizzo Statico" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"Leasing statici vengono utilizzati per assegnare indirizzi IP fissi e nomi " +"host simbolici ai client DHCP. Essi sono necessari anche per interfacce di " +"configurazione non dinamici, dove solo gli host con lease corrispondente " +"servito vengono serviti." + +msgid "Status" +msgstr "Stato" + +msgid "Stop" +msgstr "Ferma" + +msgid "Strict order" +msgstr "Ordine severo" + +msgid "Submit" +msgstr "Invia" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Scambia ingresso" + +msgid "Switch" +msgstr "Switch" + +msgid "Switch %q" +msgstr "Switch %q" + +msgid "Switch %q (%s)" +msgstr "Switch %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Cambia protocollo" + +msgid "Sync with browser" +msgstr "Sincronizza con il browser" + +msgid "Synchronizing..." +msgstr "Sincronizzazione..." + +msgid "System" +msgstr "Sistema" + +msgid "System Log" +msgstr "Log di sistema" + +msgid "System Properties" +msgstr "Proprietà di Sistema" + +msgid "System log buffer size" +msgstr "Dimensione Buffer Log di Sistema" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "Impostazioni TFTP" + +msgid "TFTP server root" +msgstr "Server TFTP principale" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "Velocità di TX" + +msgid "Table" +msgstr "Tabella" + +msgid "Target" +msgstr "Destinazione" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Termina" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"La sezione Configurazione del Dispositivo illustra le impostazioni " +"fisiche del hardware radio come canale, la potenza di trasmissione o la " +"selezione dell'antenna che viene condiviso tra tutte le reti wireless " +"definite (se l'hardware radio è multi-SSID compatibilie). Per le " +"impostazioni di rete come la crittografia o la modalità di funzionamento " +"sono raggruppati nella configurazione dell'interfaccia." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Il pacchetto libiwinfo-lua non è installato. È necessario " +"installare questo componente per il lavoro di configurazione wireless!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" +"Il prefisso IPv6 assegnati dal provider, si conclude di solito con ::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"Il file del dispositivo di memoria o della partizione (e.s. /dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"Il filesystem usato per formattare la memoria (e." +"s. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "" + +msgid "The following changes have been reverted" +msgstr "Le seguenti modifiche sono state annullate" + +msgid "The following rules are currently active on this system." +msgstr "Le seguenti regole sono al momento attive su questo sistema." + +msgid "The given network name is not unique" +msgstr "" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes until you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." + +msgid "There are no active leases." +msgstr "" + +msgid "There are no pending changes to apply!" +msgstr "" + +msgid "There are no pending changes to revert!" +msgstr "" + +msgid "There are no pending changes!" +msgstr "" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Questo è l'unico server DHCP nella tua rete locale" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" +"Questa è la crontab del sistema nella quale possono essere definiti le " +"operazioni da programmare." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"Questa lista da un riassunto dei processi correntemente attivi e del loro " +"stato." + +msgid "This page allows the configuration of custom button actions" +msgstr "" + +msgid "This page gives an overview over currently active network connections." +msgstr "Questa pagina ti da una riassunto delle connessioni al momento attive." + +msgid "This section contains no values yet" +msgstr "Questa sezione non contiene ancora valori" + +msgid "Time Synchronization" +msgstr "" + +msgid "Time Synchronization is not configured yet." +msgstr "" + +msgid "Timezone" +msgstr "Fuso orario" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Totale" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "Traffico" + +msgid "Transfer" +msgstr "" + +msgid "Transmission Rate" +msgstr "Velocità di transmissione" + +msgid "Transmit" +msgstr "Trasmissione" + +msgid "Transmit Power" +msgstr "Potenza di trasmissione" + +msgid "Transmitter Antenna" +msgstr "Antenna trasmettente" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Modalità turbo" + +msgid "Tx-Power" +msgstr "" + +msgid "Type" +msgstr "Tipo" + +msgid "UDP:" +msgstr "" + +msgid "UMTS only" +msgstr "" + +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +msgid "USB Device" +msgstr "" + +msgid "UUID" +msgstr "" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Unknown Error, password not changed!" +msgstr "" + +msgid "Unmanaged" +msgstr "" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Modifiche non salvate" + +msgid "Unsupported protocol type." +msgstr "" + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"Carica un'immagine sysupgrade compatibile quì per sostituire il firmware in " +"esecuzione. Attivare la spunta \"Mantieni Impostazioni\" per mantenere la " +"configurazione corrente (richiede un immagine del firmware compatibile)." + +msgid "Upload archive..." +msgstr "Carica archivio..." + +msgid "Uploaded File" +msgstr "Invia file" + +msgid "Uptime" +msgstr "Tempo di attività" + +msgid "Use /etc/ethers" +msgstr "Usa /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Usa il DHCP del gateway" + +msgid "Use DNS servers advertised by peer" +msgstr "Usa i server DNS annunciati dal peer" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "Usa i codici delle nazioni ISO/IEC 3166 alpha2." + +msgid "Use MTU on tunnel interface" +msgstr "Usa MTU nel tunnel dell'interfaccia" + +msgid "Use TTL on tunnel interface" +msgstr "Usa TTL nel tunnel dell'interfaccia" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Usa flag broadcast" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Usa server DNS personalizzati" + +msgid "Use default gateway" +msgstr "Usa il gateway predefinito" + +msgid "Use gateway metric" +msgstr "Usa la metrica del gateway" + +msgid "Use routing table" +msgstr "Utilizzare tabella di instradamento" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"Utilizzare il pulsante Aggiungi per aggiungere una nuova voce di " +"locazione. L'Indirizzo-MAC identifica l'host, l'Indirizzo-IPv4 specifica l'indirizzo fisso da utilizzare e il Nome Host è " +"assegnato come nome simbolico alla richiesta dell'host." + +msgid "Used" +msgstr "Usato" + +msgid "Used Key Slot" +msgstr "Slot Chiave Usata" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Nome Utente" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLANs su %q" + +msgid "VLANs on %q (%s)" +msgstr "VLANs su %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "Server VPN" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "Classe del Produttore da 'inviare al momento della richiesta DHCP" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Verifica" + +msgid "Version" +msgstr "Versione" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "Sistema Aperto WEP" + +msgid "WEP Shared Key" +msgstr "Chiave Condivisa WEP" + +msgid "WEP passphrase" +msgstr "frase di accesso WEP" + +msgid "WMM Mode" +msgstr "Modalità WMM" + +msgid "WPA passphrase" +msgstr "frase di accesso WPA" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"La crittografia WPA richiede wpa_supplicant (per la modalità client) o " +"hostapd (per AP e modalità ad hoc) per essere installato." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "In attesa delle modifiche da applicare ..." + +msgid "Waiting for command to complete..." +msgstr "In attesa del comando da completare..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Avviso" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Wireless" + +msgid "Wireless Adapter" +msgstr "Dispositivo Wireless" + +msgid "Wireless Network" +msgstr "Rete Wireless" + +msgid "Wireless Overview" +msgstr "Panoramica Wireless" + +msgid "Wireless Security" +msgstr "Sicurezza Wireless" + +msgid "Wireless is disabled or not associated" +msgstr "La rete Wireless è disattivata o non associata" + +msgid "Wireless is restarting..." +msgstr "Riavvio della Wireless..." + +msgid "Wireless network is disabled" +msgstr "La rete Wireless è disattivata" + +msgid "Wireless network is enabled" +msgstr "La rete wireless è attivata" + +msgid "Wireless restarted" +msgstr "Wireless riavviato" + +msgid "Wireless shut down" +msgstr "Wireless spento" + +msgid "Write received DNS requests to syslog" +msgstr "Scrittura delle richiesta DNS ricevute nel syslog" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Supporto XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"È possibile abilitare o disabilitare gli script di inizializzazione " +"installati qui. Le modifiche saranno applicate dopo il riavvio del " +"dispositivo
Attenzione: Se si disattiva gli script di " +"inizializzazione essenziali come ad esempio la \"rete\", il dispositivo " +"potrebbe diventare inaccessibile!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"È necessario attivare Java Script nel tuo browser o LuCI non funzionerà " +"correttamente." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "qualsiasi" + +msgid "auto" +msgstr "auto" + +#, fuzzy +msgid "automatic" +msgstr "statico" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "ponte" + +msgid "create:" +msgstr "crea:" + +msgid "creates a bridge over specified interface(s)" +msgstr "Crea un ponte sulle interfacce selezionate" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "disabilita" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "scaduto" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"file dove vengono salvati le richieste DHCP assegnate" + +msgid "forward" +msgstr "inoltro" + +msgid "full-duplex" +msgstr "full-duplex" + +msgid "half-duplex" +msgstr "half-duplex" + +msgid "help" +msgstr "aiuto" + +msgid "hidden" +msgstr "nascosto" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "se la destinazione è una rete" + +msgid "input" +msgstr "ingresso" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "File DNS locale" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "no" + +msgid "no link" +msgstr "Nessun collegamento" + +msgid "none" +msgstr "nessuna" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "spento" + +msgid "on" +msgstr "acceso" + +msgid "open" +msgstr "apri" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "instradato" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "etichettato" + +msgid "unknown" +msgstr "sconosciuto" + +msgid "unlimited" +msgstr "illimitato" + +msgid "unspecified" +msgstr "non specificato" + +msgid "unspecified -or- create:" +msgstr "non specificato - o - creato:" + +msgid "untagged" +msgstr "non etichettato" + +msgid "yes" +msgstr "Sì" + +msgid "« Back" +msgstr "« Indietro" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "Sarà creata una rete aggiuntiva se lasci questo senza spunta." + +#~ msgid "Join Network: Settings" +#~ msgstr "Aggiunta Rete: Impostazioni" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "Porta %d" + +#~ msgid "VLAN Interface" +#~ msgstr "Interfaccia VLAN" diff --git a/feeds/luci/modules/luci-base/po/ja/base.po b/feeds/luci/modules/luci-base/po/ja/base.po new file mode 100644 index 0000000..ac17c21 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/ja/base.po @@ -0,0 +1,3829 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2016-12-16 15:23+0900\n" +"Last-Translator: musashino205 \n" +"Language-Team: LANGUAGE \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.5.7\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "%s は複数のVLANにUntaggedしています!" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d 分幅, %d 秒間隔)" + +msgid "(%s available)" +msgstr "(%s 使用可能)" + +msgid "(empty)" +msgstr "(空)" + +msgid "(no interfaces attached)" +msgstr "(インターフェースが接続されていません)" + +msgid "-- Additional Field --" +msgstr "-- 追加項目 --" + +msgid "-- Please choose --" +msgstr "-- 選択してください --" + +msgid "-- custom --" +msgstr "-- 手動設定 --" + +msgid "-- match by device --" +msgstr "-- デバイスで設定 --" + +msgid "-- match by label --" +msgstr "-- ラベルで設定 --" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "過去1分の負荷:" + +msgid "15 Minute Load:" +msgstr "過去15分の負荷:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "過去5分の負荷:" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "DNS クエリポート" + +msgid "DNS server port" +msgstr "DNS サーバーポート" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"リゾルバファイルの順番に、DNSサー" +"バーに問い合わせを行います" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-アドレス" + +msgid "IPv4-Gateway" +msgstr "IPv4-ゲートウェイ" + +msgid "IPv4-Netmask" +msgstr "IPv4-ネットマスク" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-アドレス又はネット" +"ワーク (CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-ゲートウェイ" + +msgid "IPv6-Suffix (hex)" +msgstr "" +"IPv6-サフィックス (16進数)" + +msgid "LED Configuration" +msgstr "LED 設定" + +msgid "LED Name" +msgstr "LED 名" + +msgid "MAC-Address" +msgstr "MAC-アドレス" + +msgid "" +"Max. DHCP leases" +msgstr "" +"最大 DHCP リース" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"最大 EDNS0 パケットサイズ" + +msgid "Max. concurrent queries" +msgstr "最大 並列処理クエリ" + +msgid "%s - %s" +msgstr "" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "ARサポート" + +msgid "ARP retry threshold" +msgstr "ARP再試行しきい値" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "ATMブリッジ" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "ATM仮想チャネル識別子 (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "ATM仮想パス識別子 (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" + +msgid "ATM device number" +msgstr "ATMデバイス番号" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Access Concentrator" + +msgid "Access Point" +msgstr "アクセスポイント" + +msgid "Action" +msgstr "動作" + +msgid "Actions" +msgstr "動作" + +msgid "Activate this network" +msgstr "このネットワークを有効にする" + +msgid "Active IPv4-Routes" +msgstr "" +"稼働中の IPv4-経路情報" + +msgid "Active IPv6-Routes" +msgstr "" +"稼働中の IPv6-経路情報" + +msgid "Active Connections" +msgstr "アクティブコネクション" + +msgid "Active DHCP Leases" +msgstr "アクティブなDHCPリース" + +msgid "Active DHCPv6 Leases" +msgstr "アクティブなDHCPv6リース" + +msgid "Ad-Hoc" +msgstr "アドホック" + +msgid "Add" +msgstr "追加" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" + +msgid "Add new interface..." +msgstr "インターフェースの新規作成..." + +msgid "Additional Hosts files" +msgstr "追加のホストファイル" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "アドレス" + +msgid "Address to access local relay bridge" +msgstr "ローカル・リレーブリッジにアクセスするためのIPアドレス" + +msgid "Administration" +msgstr "管理画面" + +msgid "Advanced Settings" +msgstr "詳細設定" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "警告" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "SSH パスワード認証を許可します" + +msgid "Allow all except listed" +msgstr "リスト内の端末からのアクセスを禁止" + +msgid "Allow listed only" +msgstr "リスト内の端末からのアクセスを許可" + +msgid "Allow localhost" +msgstr "ローカルホストを許可する" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"リモートホストがSSH転送されたローカルのポートに接続することを許可します" + +msgid "Allow root logins with password" +msgstr "パスワードを使用したroot権限でのログインを許可する" + +msgid "Allow the root user to login with password" +msgstr "パスワードを使用したroot権限でのログインを許可する" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "常にデフォルト ルーターとして通知する" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" +"利用可能なパブリック プレフィクスが無くても、デフォルトのルーターとして通知し" +"ます。" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "アノニマス マウント" + +msgid "Anonymous Swap" +msgstr "アノニマス スワップ" + +msgid "Antenna 1" +msgstr "アンテナ 1" + +msgid "Antenna 2" +msgstr "アンテナ 2" + +msgid "Antenna Configuration" +msgstr "アンテナ設定" + +msgid "Any zone" +msgstr "全てのゾーン" + +msgid "Apply" +msgstr "適用" + +msgid "Applying changes" +msgstr "変更を適用" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "認証済み端末" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Atheros 802.11%s 無線LANコントローラ" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "認証" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Authoritative" + +msgid "Authorization Required" +msgstr "ログイン認証" + +msgid "Auto Refresh" +msgstr "自動更新" + +msgid "Automatic" +msgstr "自動" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "マウント実行前にファイルシステムのエラーを自動でチェックします。" + +msgid "Automatically mount filesystems on hotplug" +msgstr "ホットプラグによってファイルシステムを自動的にマウントします。" + +msgid "Automatically mount swap on hotplug" +msgstr "ホットプラグによってスワップ パーティションを自動的にマウントします。" + +msgid "Automount Filesystem" +msgstr "ファイルシステム 自動マウント" + +msgid "Automount Swap" +msgstr "スワップ 自動マウント" + +msgid "Available" +msgstr "使用可" + +msgid "Available packages" +msgstr "インストール可能なパッケージ" + +msgid "Average:" +msgstr "平均値:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "戻る" + +msgid "Back to Overview" +msgstr "概要へ戻る" + +msgid "Back to configuration" +msgstr "設定へ戻る" + +msgid "Back to overview" +msgstr "概要へ戻る" + +msgid "Back to scan results" +msgstr "スキャン結果へ戻る" + +msgid "Background Scan" +msgstr "バックグラウンドスキャン" + +msgid "Backup / Flash Firmware" +msgstr "バックアップ / ファームウェア更新" + +msgid "Backup / Restore" +msgstr "バックアップ / 復元" + +msgid "Backup file list" +msgstr "バックアップ・ファイルリスト" + +msgid "Bad address specified!" +msgstr "無効なアドレスです!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"以下はバックアップの際に含まれるファイルリストです。このリストは、opkgによっ" +"て認識されている設定ファイル、重要なベースファイル、ユーザーが設定した正規表" +"現に一致したファイルの一覧です。" + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" +"ワイルドカード アドレスではなく、特定のインターフェースのみにバインドします。" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "ビットレート" + +msgid "Bogus NX Domain Override" +msgstr "" + +msgid "Bridge" +msgstr "ブリッジ" + +msgid "Bridge interfaces" +msgstr "ブリッジインターフェース" + +msgid "Bridge unit number" +msgstr "ブリッジユニット番号" + +msgid "Bring up on boot" +msgstr "デフォルトで起動する" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Broadcom 802.11%s 無線LANコントローラ" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Broadcom BCM%04x 802.11 無線LANコントローラ" + +msgid "Buffered" +msgstr "バッファ" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" +"ビルド/ディストリビューション固有のフィード定義です。このファイルはsysupgrade" +"の際に引き継がれません。" + +msgid "Buttons" +msgstr "ボタン" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "CPU使用率 (%)" + +msgid "Cancel" +msgstr "キャンセル" + +msgid "Category" +msgstr "カテゴリー" + +msgid "Chain" +msgstr "チェイン" + +msgid "Changes" +msgstr "変更" + +msgid "Changes applied." +msgstr "変更が適用されました。" + +msgid "Changes the administrator password for accessing the device" +msgstr "デバイスの管理者パスワードを変更します" + +msgid "Channel" +msgstr "チャネル" + +msgid "Check" +msgstr "チェック" + +msgid "Check fileystems before mount" +msgstr "マウント前にファイルシステムをチェックする" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "チェックサム" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"このインターフェースに設定するファイウォール・ゾーンを選択してください。" +"設定しないを選択すると、設定済みのゾーンを削除します。また、作成フィールドにゾーン名を入力すると、新しくゾーンを作成し、このインターフェー" +"スに設定します。" + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"無線インターフェースをアタッチするネットワークを選択してください。または、" +"作成欄を選択すると新しいネットワークを作成します。" + +msgid "Cipher" +msgstr "暗号化方式" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"\"バックアップアーカイブの作成\"をクリックすると、現在の設定ファイルをtar形式" +"のアーカイブファイルとしてダウンロードします。設定のリセットを行う場合、\"設" +"定リセット\"をクリックしてください。(ただし、squashfsをお使いの場合のみ使用可" +"能です)" + +msgid "Client" +msgstr "クライアント" + +msgid "Client ID to send when requesting DHCP" +msgstr "DHCPリクエスト時に送信するクライアントID" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"設定した秒数後に、使用していない接続を閉じます。0を設定した場合、接続を維持し" +"ます" + +msgid "Close list..." +msgstr "リストを閉じる" + +msgid "Collecting data..." +msgstr "データ収集中です..." + +msgid "Command" +msgstr "コマンド" + +msgid "Common Configuration" +msgstr "一般設定" + +msgid "Compression" +msgstr "圧縮" + +msgid "Configuration" +msgstr "設定" + +msgid "Configuration applied." +msgstr "設定を適用しました。" + +msgid "Configuration files will be kept." +msgstr "設定ファイルは保持されます。" + +msgid "Confirmation" +msgstr "確認" + +msgid "Connect" +msgstr "接続" + +msgid "Connected" +msgstr "接続中" + +msgid "Connection Limit" +msgstr "接続制限" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "TLSが使用できないとき、サーバーへの接続は失敗します。" + +msgid "Connections" +msgstr "ネットワーク接続" + +msgid "Country" +msgstr "国" + +msgid "Country Code" +msgstr "国コード" + +msgid "Cover the following interface" +msgstr "インターフェースの指定" + +msgid "Cover the following interfaces" +msgstr "インターフェースの指定" + +msgid "Create / Assign firewall-zone" +msgstr "ファイアウォールゾーンの作成 / 割り当て" + +msgid "Create Interface" +msgstr "インターフェースの作成" + +msgid "Create a bridge over multiple interfaces" +msgstr "複数のインタフェースを指定してブリッジを作成します" + +msgid "Critical" +msgstr "重大" + +msgid "Cron Log Level" +msgstr "Cronのログ出力レベル" + +msgid "Custom Interface" +msgstr "新しいインターフェース" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" +"プライベート フィードなどのカスタム フィード定義です。このファイルは" +"sysupgrade時に引き継ぐことができます。" + +msgid "Custom feeds" +msgstr "カスタム フィード" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"LED デバイスの挙動をカスタマイズ" +"します。" + +msgid "DHCP Leases" +msgstr "DHCPリース" + +msgid "DHCP Server" +msgstr "DHCPサーバー" + +msgid "DHCP and DNS" +msgstr "DHCP 及び DNS" + +msgid "DHCP client" +msgstr "DHCP クライアント" + +msgid "DHCP-Options" +msgstr "DHCPオプション" + +msgid "DHCPv6 Leases" +msgstr "DHCPv6 リース" + +msgid "DHCPv6 client" +msgstr "DHCPv6 クライアント" + +msgid "DHCPv6-Mode" +msgstr "DHCPv6-モード" + +msgid "DHCPv6-Service" +msgstr "DHCPv6-サービス" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "DNSフォワーディング" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "DS-Lite AFTR アドレス" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "デバッグ" + +msgid "Default %d" +msgstr "標準設定 %d" + +msgid "Default gateway" +msgstr "デフォルトゲートウェイ" + +msgid "Default is stateless + stateful" +msgstr "デフォルトは ステートレス + ステートフル です。" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "標準状態" + +msgid "Define a name for this network." +msgstr "ネットワーク名を設定してください。" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"追加のDHCPオプションを設定します。(例:\"6,192.168.2.1,192.168.2.2\" と設定することで、クライアントに指定のDNSサーバーを通知します。)" + +msgid "Delete" +msgstr "削除" + +msgid "Delete this network" +msgstr "ネットワークを削除します" + +msgid "Description" +msgstr "詳細" + +msgid "Design" +msgstr "デザイン" + +msgid "Destination" +msgstr "宛先" + +msgid "Device" +msgstr "デバイス" + +msgid "Device Configuration" +msgstr "デバイス設定" + +msgid "Device is rebooting..." +msgstr "デバイスを再起動中です..." + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "診断機能" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "ディレクトリ" + +msgid "Disable" +msgstr "無効" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"このインターフェースではDHCP機能を使用しません。" + +msgid "Disable DNS setup" +msgstr "DNSセットアップを無効にする" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "HWビーコンタイマーを無効にする" + +msgid "Disabled" +msgstr "無効" + +msgid "Discard upstream RFC1918 responses" +msgstr "RFC1918の応答を破棄します" + +msgid "Displaying only packages containing" +msgstr "右記の表示を含んだパッケージのみを表示中" + +msgid "Distance Optimization" +msgstr "距離の最適化" + +msgid "Distance to farthest network member in meters." +msgstr "最も遠い端末との距離(メートル)を設定してください。" + +msgid "Distribution feeds" +msgstr "ディストリビューション フィード" + +msgid "Diversity" +msgstr "ダイバシティ" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq は DHCP" +"サーバーと NATファイア" +"ウォールの為の DNSフォワーダーを複" +"合したサービスです。" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" +"無効なリプライをキャッシュしません (例:存在しないドメインからの返答など)" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "パブリックDNSサーバーが返答できなかったリクエストを転送しません" + +msgid "Do not forward reverse lookups for local networks" +msgstr "ローカルネットワークへの逆引きを転送しません" + +msgid "Do not send probe responses" +msgstr "プローブレスポンスを送信しない" + +msgid "Domain required" +msgstr "ドメイン必須" + +msgid "Domain whitelist" +msgstr "ドメイン・ホワイトリスト" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"DNS名の無い DNSリクエストを転送しません" + +msgid "Download and install package" +msgstr "パッケージのダウンロードとインストール" + +msgid "Download backup" +msgstr "バックアップアーカイブのダウンロード" + +msgid "Dropbear Instance" +msgstr "Dropbear設定" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear は SSH ネットワークへのシェルア" +"クセスと統合された SCP サーバーを提供しま" +"す。" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "Dual-Stack Lite (RFC6333)" + +msgid "Dynamic DHCP" +msgstr "" +"ダイナミック DHCP" + +msgid "Dynamic tunnel" +msgstr "動的トンネル機能" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"クライアントに対して動的にDHCPアドレスを割り振ります。無効に設定した場合、静" +"的リースのみを行います。" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "EAPメソッド" + +msgid "Edit" +msgstr "編集" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "インターフェースを編集" + +msgid "Edit this network" +msgstr "ネットワークを編集" + +msgid "Emergency" +msgstr "緊急" + +msgid "Enable" +msgstr "有効" + +msgid "Enable STP" +msgstr "STPを有効にする" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "HE.netの動的endpoint更新を有効にします" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "PPPリンクのIPv6ネゴシエーションを有効にする" + +msgid "Enable Jumbo Frame passthrough" +msgstr "ジャンボフレーム・パススルーを有効にする" + +msgid "Enable NTP client" +msgstr "NTPクライアント機能を有効にする" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "TFTPサーバーを有効にする" + +msgid "Enable VLAN functionality" +msgstr "VLAN機能を有効にする" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "ラーニング・エイジング機能を有効にする" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "マウント設定を有効にする" + +msgid "Enable this swap" +msgstr "スワップ設定を有効にする" + +msgid "Enable/Disable" +msgstr "有効/無効" + +msgid "Enabled" +msgstr "有効" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "スパニングツリー・プロトコルを有効にする" + +msgid "Encapsulation mode" +msgstr "カプセル化モード" + +msgid "Encryption" +msgstr "暗号化モード" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "消去中..." + +msgid "Error" +msgstr "エラー" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "イーサネットアダプタ" + +msgid "Ethernet Switch" +msgstr "イーサネットスイッチ" + +msgid "Exclude interfaces" +msgstr "除外インターフェース" + +msgid "Expand hosts" +msgstr "拡張ホスト設定" + +msgid "Expires" +msgstr "期限切れ" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" +"リースアドレスの有効時間を入力します。最小設定値は2分です。 (2m)." + +msgid "External" +msgstr "外部" + +msgid "External system log server" +msgstr "外部システムログ・サーバー" + +msgid "External system log server port" +msgstr "外部システムログ・サーバーポート" + +msgid "External system log server protocol" +msgstr "外部システムログ・サーバー プロトコル" + +msgid "Extra SSH command options" +msgstr "拡張 SSHコマンドオプション" + +msgid "Fast Frames" +msgstr "ファスト・フレーム" + +msgid "File" +msgstr "ファイル" + +msgid "Filename of the boot image advertised to clients" +msgstr "クライアントに通知するブートイメージのファイル名" + +msgid "Filesystem" +msgstr "ファイルシステム" + +msgid "Filter" +msgstr "フィルタ" + +msgid "Filter private" +msgstr "プライベートフィルター" + +msgid "Filter useless" +msgstr "Filter useless" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" +"現在アタッチされている全てのファイルシステムとスワップを検索し、検出結果に基" +"づいてデフォルト設定を置き換えます。" + +msgid "Find and join network" +msgstr "ネットワークを検索して参加" + +msgid "Find package" +msgstr "パッケージを検索" + +msgid "Finish" +msgstr "終了" + +msgid "Firewall" +msgstr "ファイアウォール" + +msgid "Firewall Settings" +msgstr "ファイアウォール設定" + +msgid "Firewall Status" +msgstr "ファイアウォール・ステータス" + +msgid "Firmware File" +msgstr "ファームウェア ファイル" + +msgid "Firmware Version" +msgstr "ファームウェア・バージョン" + +msgid "Fixed source port for outbound DNS queries" +msgstr "DNSクエリを送信する送信元ポートを固定します" + +msgid "Flash Firmware" +msgstr "ファームウェアの更新" + +msgid "Flash image..." +msgstr "更新" + +msgid "Flash new firmware image" +msgstr "ファームウェアの更新" + +msgid "Flash operations" +msgstr "更新機能" + +msgid "Flashing..." +msgstr "更新中..." + +msgid "Force" +msgstr "強制" + +msgid "Force CCMP (AES)" +msgstr "CCMP (AES) を使用" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" +"別のDHCPサーバーが検出された場合でも、DHCPサーバー機能を強制的に起動します。" + +msgid "Force TKIP" +msgstr "TKIP を使用" + +msgid "Force TKIP and CCMP (AES)" +msgstr "TKIP 及びCCMP (AES) を使用" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "DHCPトラフィックを転送する" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "ブロードキャスト・トラフィックを転送する" + +msgid "Forwarding mode" +msgstr "転送モード" + +msgid "Fragmentation Threshold" +msgstr "フラグメンテーション閾値" + +msgid "Frame Bursting" +msgstr "フレームバースト" + +msgid "Free" +msgstr "空き" + +msgid "Free space" +msgstr "ディスクの空き容量" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "GPRSのみ" + +msgid "Gateway" +msgstr "ゲートウェイ" + +msgid "Gateway ports" +msgstr "ゲートウェイ・ポート" + +msgid "General Settings" +msgstr "一般設定" + +msgid "General Setup" +msgstr "一般設定" + +msgid "General options for opkg" +msgstr "opkgの一般設定" + +msgid "Generate Config" +msgstr "コンフィグ生成" + +msgid "Generate archive" +msgstr "バックアップアーカイブの作成" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "802.11%s 無線LANコントローラ" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "入力されたパスワードが一致しません。パスワードは変更されませんでした!" + +msgid "Global Settings" +msgstr "全体設定" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "パスワード設定へ移動..." + +msgid "Go to relevant configuration page" +msgstr "関連する設定ページへ移動" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "ゲスト" + +msgid "HE.net password" +msgstr "HE.net パスワード" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "HT モード (802.11n)" + +msgid "Handler" +msgstr "ハンドラ" + +msgid "Hang Up" +msgstr "再起動" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "ハートビート" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"このページではホスト名やタイムゾーンなどの基本的な設定を行うことが出来ます。" + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "SSH公開鍵認証で使用するSSH公開鍵を1行づつペーストしてください。" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Hermes 802.11b 無線LANコントローラ" + +msgid "Hide ESSID" +msgstr "ESSIDの隠匿" + +msgid "Host" +msgstr "ホスト" + +msgid "Host entries" +msgstr "ホストエントリー" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "" +"ホストIP または ネットワーク" + +msgid "Hostname" +msgstr "ホスト名" + +msgid "Hostname to send when requesting DHCP" +msgstr "DHCPリクエスト時に送信するホスト名" + +msgid "Hostnames" +msgstr "ホスト名" + +msgid "Hybrid" +msgstr "ハイブリッド" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "IPアドレス" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "IPv4 ファイアウォール" + +msgid "IPv4 WAN Status" +msgstr "IPv4 WAN ステータス" + +msgid "IPv4 address" +msgstr "IPv4 アドレス" + +msgid "IPv4 and IPv6" +msgstr "IPv4及びIPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "IPv4 ブロードキャスト" + +msgid "IPv4 gateway" +msgstr "IPv4 ゲートウェイ" + +msgid "IPv4 netmask" +msgstr "IPv4 ネットマスク" + +msgid "IPv4 only" +msgstr "IPv4のみ" + +msgid "IPv4 prefix" +msgstr "IPv4 プレフィクス" + +msgid "IPv4 prefix length" +msgstr "IPv4 プレフィクス長" + +msgid "IPv4-Address" +msgstr "IPv4-アドレス" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "IPv4-in-IPv4 (RFC2003)" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "IPv6 ファイアウォール" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "IPv6 設定" + +msgid "IPv6 ULA-Prefix" +msgstr "IPv6 ULA-プレフィクス" + +msgid "IPv6 WAN Status" +msgstr "IPv6 WAN ステータス" + +msgid "IPv6 address" +msgstr "IPv6 アドレス" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "IPv6 ゲートウェイ" + +msgid "IPv6 only" +msgstr "IPv6のみ" + +msgid "IPv6 prefix" +msgstr "IPv6 プレフィクス" + +msgid "IPv6 prefix length" +msgstr "IPv6 プレフィクス長" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "IPv6-アドレス" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-in-IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6-over-IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6-over-IPv4 (6to4)" + +msgid "Identity" +msgstr "識別子" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "固定のデバイスノード名のかわりに、設定したUUIDを使用してマウントします" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" +"固定のデバイスノード名のかわりに、設定したパーティションラベルを使用してマウ" +"ントします。" + +msgid "If unchecked, no default route is configured" +msgstr "チェックされていない場合、デフォルトルートを設定しません" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "チェックされていない場合、通知されたDNSサーバーアドレスを無視します" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"物理メモリが不足する場合、一時的にデータをより大容量なRAMデバイスにスワップすることが出来ます。ただし、デー" +"タのスワップは非常に遅い処理であるため、スワップするデバイスには高速にRAMにアクセスすることができなくなる恐れ" +"があります。" + +msgid "Ignore /etc/hosts" +msgstr "/etc/hostsを無視" + +msgid "Ignore interface" +msgstr "インターフェースを無視する" + +msgid "Ignore resolve file" +msgstr "リゾルバファイルを無視する" + +msgid "Image" +msgstr "イメージ" + +msgid "In" +msgstr "イン" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "未使用時タイムアウト" + +msgid "Inbound:" +msgstr "受信:" + +msgid "Info" +msgstr "情報" + +msgid "Initscript" +msgstr "起動スクリプト" + +msgid "Initscripts" +msgstr "起動スクリプト" + +msgid "Install" +msgstr "インストール" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "%q パッケージをインストールします" + +msgid "Install protocol extensions..." +msgstr "プロトコル拡張機能をインストールします..." + +msgid "Installed packages" +msgstr "インストール済みパッケージ" + +msgid "Interface" +msgstr "インターフェース" + +msgid "Interface Configuration" +msgstr "インターフェース設定" + +msgid "Interface Overview" +msgstr "インターフェース一覧" + +msgid "Interface is reconnecting..." +msgstr "インターフェース再接続中..." + +msgid "Interface is shutting down..." +msgstr "インターフェース終了中..." + +msgid "Interface name" +msgstr "インターフェース名" + +msgid "Interface not present or not connected yet." +msgstr "インターフェースが存在しないか、接続していません" + +msgid "Interface reconnected" +msgstr "インターフェースの再接続" + +msgid "Interface shut down" +msgstr "インターフェースの終了" + +msgid "Interfaces" +msgstr "インターフェース" + +msgid "Internal" +msgstr "内部" + +msgid "Internal Server Error" +msgstr "内部サーバーエラー" + +msgid "Invalid" +msgstr "入力値が不正です" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "無効なVLAN IDです! IDは%dから%dまでの値のみ入力可能です。" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "無効なVLAN IDです! ユニークなIDを入力してください。" + +msgid "Invalid username and/or password! Please try again." +msgstr "ユーザー名とパスワードが不正です! もう一度入力してください。" + +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"更新しようとしたイメージファイルはこのフラッシュメモリに適合しません。イメー" +"ジファイルを確認してください!" + +msgid "Java Script required!" +msgstr "JavaScriptを有効にしてください!" + +msgid "Join Network" +msgstr "ネットワークに接続する" + +msgid "Join Network: Wireless Scan" +msgstr "ネットワークに接続する: 無線LANスキャン" + +msgid "Joining Network: %q" +msgstr "次のネットワークに参加: %q" + +msgid "Keep settings" +msgstr "設定を保持する" + +msgid "Kernel Log" +msgstr "カーネルログ" + +msgid "Kernel Version" +msgstr "カーネルバージョン" + +msgid "Key" +msgstr "暗号キー" + +msgid "Key #%d" +msgstr "キー #%d" + +msgid "Kill" +msgstr "強制終了" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "L2TP サーバー" + +msgid "LCP echo failure threshold" +msgstr "LCP echo 失敗数しきい値" + +msgid "LCP echo interval" +msgstr "LCP echo 送信間隔" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "ラベル" + +msgid "Language" +msgstr "言語" + +msgid "Language and Style" +msgstr "言語とスタイル" + +msgid "Latency" +msgstr "レイテンシー" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "リース時間" + +msgid "Lease validity time" +msgstr "リース有効時間" + +msgid "Leasefile" +msgstr "リースファイル" + +msgid "Leasetime" +msgstr "リース時間" + +msgid "Leasetime remaining" +msgstr "残りリース時間" + +msgid "Leave empty to autodetect" +msgstr "空欄の場合、自動検知を行います" + +msgid "Leave empty to use the current WAN address" +msgstr "空欄の場合、現在のWANアドレスを使用します" + +msgid "Legend:" +msgstr "凡例:" + +msgid "Limit" +msgstr "割り当て数" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "待ち受けをこれらのインターフェースとループバックに制限します。" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "リンクオン" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"問い合わせを転送するDNS サーバーの" +"リストを設定します" + +msgid "List of SSH key files for auth" +msgstr "認証用 SSH暗号キー ファイルのリスト" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "RFC1918の応答を許可するリスト" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "待ち受けインターフェース" + +msgid "Listen Port" +msgstr "待ち受けポート" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" +"指定したインターフェースでのみアクセスを有効にします。設定しない場合はすべて" +"のインタフェースが対象です" + +msgid "Listening port for inbound DNS queries" +msgstr "DNSクエリを受信するポート" + +msgid "Load" +msgstr "負荷" + +msgid "Load Average" +msgstr "システム平均負荷" + +msgid "Loading" +msgstr "ロード中" + +msgid "Local IP address to assign" +msgstr "割り当てるローカル IPアドレス" + +msgid "Local IPv4 address" +msgstr "ローカル IPv4 アドレス" + +msgid "Local IPv6 address" +msgstr "ローカル IPv6 アドレス" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "ローカル Startup" + +msgid "Local Time" +msgstr "時刻" + +msgid "Local domain" +msgstr "ローカルドメイン" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"DHCP名とhostsファイルのエントリーに付される、ローカルドメインサフィックスで" +"す。" + +msgid "Local server" +msgstr "ローカルサーバー" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "ローカライズクエリ" + +msgid "Locked to channel %s used by: %s" +msgstr "チャネル %s にロックされています。次で使用されています: %s" + +msgid "Log output level" +msgstr "ログ出力レベル" + +msgid "Log queries" +msgstr "ログクエリー" + +msgid "Logging" +msgstr "ログ" + +msgid "Login" +msgstr "ログイン" + +msgid "Logout" +msgstr "ログアウト" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" +"ネットワークアドレスをオフセットとして、最小のアドレスを設定してください" + +msgid "MAC-Address" +msgstr "MAC-アドレス" + +msgid "MAC-Address Filter" +msgstr "MAC-アドレスフィルタ" + +msgid "MAC-Filter" +msgstr "MAC-フィルタ" + +msgid "MAC-List" +msgstr "MAC-リスト" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" +"以下のようなコマンドを使用して、ルート ファイルシステムを複製してください:" + +msgid "Manual" +msgstr "手動" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "最大レート" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "DHCPリースの許可される最大数" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "並列DNSクエリの許可される最大数" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "EDNS.0 UDP パケットサイズの許可される最大数" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "モデムが準備完了状態になるまでの最大待ち時間" + +msgid "Maximum hold time" +msgstr "最大保持時間" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" +"名前の長さは、自動的に含まれるプロトコル/ブリッジ プレフィックス (br-, " +"6in4-, pppoe- など)と合わせて最大15文字です。" + +msgid "Maximum number of leased addresses." +msgstr "リースするアドレスの最大数です" + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "メモリー" + +msgid "Memory usage (%)" +msgstr "メモリ使用率 (%)" + +msgid "Metric" +msgstr "メトリック" + +msgid "Minimum Rate" +msgstr "最小レート" + +msgid "Minimum hold time" +msgstr "最短保持時間" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "プロトコル %qのプロトコル拡張が見つかりません" + +msgid "Mode" +msgstr "モード" + +msgid "Model" +msgstr "モデル" + +msgid "Modem device" +msgstr "モデムデバイス" + +msgid "Modem init timeout" +msgstr "モデム初期化タイムアウト" + +msgid "Monitor" +msgstr "モニター" + +msgid "Mount Entry" +msgstr "マウント機能" + +msgid "Mount Point" +msgstr "マウントポイント" + +msgid "Mount Points" +msgstr "マウントポイント" + +msgid "Mount Points - Mount Entry" +msgstr "マウントポイント - マウント" + +msgid "Mount Points - Swap Entry" +msgstr "マウントポイント - スワップ" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"マウントポイントは、記憶デバイスがファイルシステムのどこに接続されているかを" +"表示しています。" + +msgid "Mount filesystems not specifically configured" +msgstr "明確に設定されていないファイルシステムをマウントします。" + +msgid "Mount options" +msgstr "マウントオプション" + +msgid "Mount point" +msgstr "マウントポイント" + +msgid "Mount swap not specifically configured" +msgstr "明確に設定されていないスワップ パーティションをマウントします。" + +msgid "Mounted file systems" +msgstr "マウント中のファイルシステム" + +msgid "Move down" +msgstr "下へ" + +msgid "Move up" +msgstr "上へ" + +msgid "Multicast Rate" +msgstr "マルチキャストレート" + +msgid "Multicast address" +msgstr "マルチキャストアドレス" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "NAT64 プレフィクス" + +msgid "NDP-Proxy" +msgstr "NDP-プロキシ" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "NTPサーバー候補" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "名前" + +msgid "Name of the new interface" +msgstr "新しいインターフェースの名前" + +msgid "Name of the new network" +msgstr "新しいネットワークの名前" + +msgid "Navigation" +msgstr "ナビゲーション" + +msgid "Netmask" +msgstr "ネットマスク" + +msgid "Network" +msgstr "ネットワーク" + +msgid "Network Utilities" +msgstr "ネットワーク・ユーティリティ" + +msgid "Network boot image" +msgstr "ネットワーク・ブート用イメージ" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "次 »" + +msgid "No DHCP Server configured for this interface" +msgstr "このインターフェースにはDHCPサーバーが設定されていません" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "チェイン内にルールがありません" + +msgid "No files found" +msgstr "ファイルが見つかりませんでした" + +msgid "No information available" +msgstr "情報がありません" + +msgid "No negative cache" +msgstr "ネガティブキャッシュを行なわない" + +msgid "No network configured on this device" +msgstr "このデバイスに設定されているネットワークがありません" + +msgid "No network name specified" +msgstr "ネットワーク名が設定されていません" + +msgid "No package lists available" +msgstr "パッケージリストがありません" + +msgid "No password set!" +msgstr "パスワードが設定されていません!" + +msgid "No rules in this chain" +msgstr "チェイン内にルールがありません" + +msgid "No zone assigned" +msgstr "ゾーンが設定されていません" + +msgid "Noise" +msgstr "ノイズ" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "ノイズ:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "非ワイルドカード" + +msgid "None" +msgstr "なし" + +msgid "Normal" +msgstr "標準" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "アソシエーションされていません" + +msgid "Not connected" +msgstr "未接続" + +msgid "Note: Configuration files will be erased." +msgstr "注意: 設定ファイルは消去されます。" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "注意" + +msgid "Nslookup" +msgstr "Nslookup" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "OPKG-設定" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "消灯時間" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"このページではネットワークインターフェースの設定を行うことが出来ます。\"ブ" +"リッジインターフェース\"フィールドをチェックし、複数のネットワークインター" +"フェース名をスペースで区切りで入力することで複数のインターフェースをブリッジ" +"することが出来ます。また、INTERFACE.VLANNRという表記によりVLANも使用することが出来ます。" +"(: eth0.1)" + +msgid "On-State Delay" +msgstr "点灯時間" + +msgid "One of hostname or mac address must be specified!" +msgstr "1つ以上のホスト名またはmacアドレスを設定してください!" + +msgid "One or more fields contain invalid values!" +msgstr "1つ以上のフィールドに無効な値が設定されています!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "1つ以上のフィールドに値が設定されていません!" + +msgid "Open list..." +msgstr "リストを開く" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "動作周波数" + +msgid "Option changed" +msgstr "変更されるオプション" + +msgid "Option removed" +msgstr "削除されるオプション" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "オプション" + +msgid "Other:" +msgstr "その他:" + +msgid "Out" +msgstr "アウト" + +msgid "Outbound:" +msgstr "送信:" + +msgid "Outdoor Channels" +msgstr "屋外用周波数" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "MACアドレスを上書きする" + +msgid "Override MTU" +msgstr "MTUを上書きする" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "デフォルトのインターフェース名を上書きします。" + +msgid "Override the gateway in DHCP responses" +msgstr "DHCPレスポンス内のゲートウェイアドレスを上書きする" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"クライアントへ通知するネットマスクを上書きします。通常は、設定されているサブ" +"ネットから計算されます。" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "概要" + +msgid "Owner" +msgstr "所有者" + +msgid "PAP/CHAP password" +msgstr "PAP/CHAP パスワード" + +msgid "PAP/CHAP username" +msgstr "PAP/CHAP ユーザー名" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "PPPoAカプセル化" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "PPPoSSH" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "libiwinfo パッケージをインストールしてください!" + +msgid "Package lists are older than 24 hours" +msgstr "パッケージリストは24時間以上前のものです" + +msgid "Package name" +msgstr "パッケージ名" + +msgid "Packets" +msgstr "パケット" + +msgid "Part of zone %q" +msgstr "ゾーン %qの一部" + +msgid "Password" +msgstr "パスワード" + +msgid "Password authentication" +msgstr "パスワード認証" + +msgid "Password of Private Key" +msgstr "秘密鍵のパスワード" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "パスワードを変更しました" + +msgid "Path to CA-Certificate" +msgstr "CA証明書のパス" + +msgid "Path to Client-Certificate" +msgstr "クライアント証明書のパス" + +msgid "Path to Private Key" +msgstr "秘密鍵のパス" + +msgid "Path to executable which handles the button event" +msgstr "ボタンイベントをハンドルする実行ファイルのパス" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "ピーク:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "再起動を実行" + +msgid "Perform reset" +msgstr "設定リセットを実行" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "物理レート:" + +msgid "Physical Settings" +msgstr "デバイス設定" + +msgid "Ping" +msgstr "Ping" + +msgid "Pkts." +msgstr "パケット" + +msgid "Please enter your username and password." +msgstr "ユーザー名とパスワードを入力してください。" + +msgid "Policy" +msgstr "ポリシー" + +msgid "Port" +msgstr "ポート" + +msgid "Port status:" +msgstr "ポート ステータス:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "事前共有鍵" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" +"設定回数のLCP echo 確認失敗後、ピアノードがダウンしているものと見なします。0" +"を設定した場合、失敗しても無視します" + +msgid "Prevent listening on these interfaces." +msgstr "これらのインターフェースでの待ち受けを停止します。" + +msgid "Prevents client-to-client communication" +msgstr "クライアント同士の通信を制限します" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Prism2/2.5/3 802.11b 無線LANコントローラ" + +msgid "Private Key" +msgstr "秘密鍵" + +msgid "Proceed" +msgstr "続行" + +msgid "Processes" +msgstr "プロセス" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "プロトコル" + +msgid "Protocol" +msgstr "プロトコル" + +msgid "Protocol family" +msgstr "プロトコルファミリ" + +msgid "Protocol of the new interface" +msgstr "新しいインターフェースのプロトコル" + +msgid "Protocol support is not installed" +msgstr "プロトコルサポートがインストールされていません" + +msgid "Provide NTP server" +msgstr "NTPサーバー機能を有効にする" + +msgid "Provide new network" +msgstr "新しいネットワークを設定する" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "擬似アドホック (ahdemo)" + +msgid "Public Key" +msgstr "公開鍵" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "クオリティ" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "RTS/CTS閾値" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "受信レート" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "RaLink 802.11%s 無線LANコントローラ" + +msgid "Radius-Accounting-Port" +msgstr "Radiusアカウントサーバー・ポート番号" + +msgid "Radius-Accounting-Secret" +msgstr "Radiusアカウント秘密鍵" + +msgid "Radius-Accounting-Server" +msgstr "Radiusアカウントサーバー" + +msgid "Radius-Authentication-Port" +msgstr "Radius認証サーバー・ポート番号" + +msgid "Radius-Authentication-Secret" +msgstr "Radius認証秘密鍵" + +msgid "Radius-Authentication-Server" +msgstr "Radius認証サーバー" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"DHCPサーバーの設定" +"として/etc/ethers をロードします" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"本当にこのインターフェースを削除しますか?一度削除すると、元に戻すことはできま" +"せん!\n" +"このインターフェースを経由して接続している場合、デバイスにアクセスできなくな" +"る場合があります。" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"本当にこの無線ネットワークを削除しますか?一度削除すると、元に戻すことはできま" +"せん!\n" +"このネットワークを経由して接続している場合、デバイスにアクセスできなくなる場" +"合があります。" + +msgid "Really reset all changes?" +msgstr "本当に全ての変更をリセットしますか?" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"本当にネットワークを停止しますか?\n" +"このネットワークを経由して接続している場合、デバイスにアクセスできなくなる場" +"合があります。" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"本当にインターフェース \"%s\" を停止しますか?\n" +"このインターフェースを経由して接続している場合、デバイスにアクセスできなくな" +"る場合があります。" + +msgid "Really switch protocol?" +msgstr "本当にプロトコルを切り替えますか?" + +msgid "Realtime Connections" +msgstr "リアルタイム・コネクション" + +msgid "Realtime Graphs" +msgstr "リアルタイム・グラフ" + +msgid "Realtime Load" +msgstr "リアルタイム・ロード" + +msgid "Realtime Traffic" +msgstr "リアルタイム・トラフィック" + +msgid "Realtime Wireless" +msgstr "リアルタイム・無線LAN" + +msgid "Rebind protection" +msgstr "DNSリバインディング・プロテクション" + +msgid "Reboot" +msgstr "再起動" + +msgid "Rebooting..." +msgstr "再起動中..." + +msgid "Reboots the operating system of your device" +msgstr "デバイスのオペレーティングシステムを再起動します。" + +msgid "Receive" +msgstr "受信" + +msgid "Receiver Antenna" +msgstr "受信アンテナ" + +msgid "Reconnect this interface" +msgstr "インターフェースの再接続" + +msgid "Reconnecting interface" +msgstr "インターフェース再接続中" + +msgid "References" +msgstr "参照カウンタ" + +msgid "Regulatory Domain" +msgstr "規制ドメイン" + +msgid "Relay" +msgstr "リレー" + +msgid "Relay Bridge" +msgstr "リレーブリッジ" + +msgid "Relay between networks" +msgstr "ネットワーク間のリレー設定" + +msgid "Relay bridge" +msgstr "リレーブリッジ" + +msgid "Remote IPv4 address" +msgstr "リモートIPv4アドレス" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "削除" + +msgid "Repeat scan" +msgstr "再スキャン" + +msgid "Replace entry" +msgstr "エントリーの置換" + +msgid "Replace wireless configuration" +msgstr "無線設定を置換する" + +msgid "Request IPv6-address" +msgstr "IPv6-アドレスのリクエスト" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "TLSが必要" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "DOCSIS 3.0を使用するいくつかのISPでは必要になります" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "リセット" + +msgid "Reset Counters" +msgstr "カウンタのリセット" + +msgid "Reset to defaults" +msgstr "標準設定にリセット" + +msgid "Resolv and Hosts Files" +msgstr "名前解決およびホストファイル設定" + +msgid "Resolve file" +msgstr "リゾルバファイル" + +msgid "Restart" +msgstr "再起動" + +msgid "Restart Firewall" +msgstr "ファイアウォールの再起動" + +msgid "Restore backup" +msgstr "バックアップから復元する" + +msgid "Reveal/hide password" +msgstr "パスワードを表示する/隠す" + +msgid "Revert" +msgstr "元に戻す" + +msgid "Root" +msgstr "ルート" + +msgid "Root directory for files served via TFTP" +msgstr "TFTP経由でファイルを取り扱う際のルートディレクトリ" + +msgid "Root preparation" +msgstr "ルートの準備" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "ルーター アドバタイズメント-サービス" + +msgid "Router Password" +msgstr "ルーター・パスワード" + +msgid "Routes" +msgstr "経路情報" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"特定のホスト又はネットワークに、どのインターフェース及びゲートウェイを通して" +"通信を行うか、経路情報を設定します。" + +msgid "Run a filesystem check before mounting the device" +msgstr "デバイスのマウントを行う前にファイルシステムチェックを行う" + +msgid "Run filesystem check" +msgstr "ファイルシステムチェックを行う" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "SSHアクセス" + +msgid "SSH server address" +msgstr "SSH サーバーアドレス" + +msgid "SSH server port" +msgstr "SSH サーバーポート" + +msgid "SSH username" +msgstr "SSH ユーザー名" + +msgid "SSH-Keys" +msgstr "SSHキー" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "保存" + +msgid "Save & Apply" +msgstr "保存 & 適用" + +msgid "Save & Apply" +msgstr "保存 & 適用" + +msgid "Scan" +msgstr "スキャン" + +msgid "Scheduled Tasks" +msgstr "スケジュールタスク" + +msgid "Section added" +msgstr "追加されるセクション" + +msgid "Section removed" +msgstr "削除されるセクション" + +msgid "See \"mount\" manpage for details" +msgstr "詳細情報は \"mount\" のmanページを参照してください" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" +"設定された秒間隔でLCP echoリクエストを送信します。失敗数しきい値を設定した場" +"合のみ、機能が有効になります。" + +msgid "Separate Clients" +msgstr "クライアントの分離" + +msgid "Separate WDS" +msgstr "WDSを分離する" + +msgid "Server Settings" +msgstr "サーバー設定" + +msgid "Server password" +msgstr "サーバー パスワード" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "サーバー ユーザー名" + +msgid "Service Name" +msgstr "サービス名" + +msgid "Service Type" +msgstr "サービスタイプ" + +msgid "Services" +msgstr "サービス" + +msgid "Set up Time Synchronization" +msgstr "時刻同期設定" + +msgid "Setup DHCP Server" +msgstr "DHCPサーバーを設定" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "現在のバックアップファイルのリストを表示する" + +msgid "Shutdown this interface" +msgstr "インターフェースを終了" + +msgid "Shutdown this network" +msgstr "ネットワークを終了" + +msgid "Signal" +msgstr "信号強度" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "信号:" + +msgid "Size" +msgstr "サイズ" + +msgid "Size (.ipk)" +msgstr "サイズ (.ipk)" + +msgid "Skip" +msgstr "スキップ" + +msgid "Skip to content" +msgstr "コンテンツへ移動" + +msgid "Skip to navigation" +msgstr "ナビゲーションへ移動" + +msgid "Slot time" +msgstr "スロット時間" + +msgid "Software" +msgstr "ソフトウェア" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "無効な値が設定されているフィールドがあるため、保存できません。" + +msgid "Sorry, the object you requested was not found." +msgstr "申し訳ありません。リクエストされたオブジェクトは見つかりませんでした。" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "申し訳ありません。サーバーに予期せぬエラーが発生しました。" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"申し訳ありません。現在このボードではsysupgradeがサポートがされていないため、" +"ファームウェア更新は手動で行っていただく必要があります。wikiを参照して、この" +"デバイスのインストール手順を参照してください。" + +msgid "Sort" +msgstr "ソート" + +msgid "Source" +msgstr "送信元" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "デバイスが接続するディレクトリを設定します" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Dropbearの受信ポートを設定してください" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "暗号鍵を設定します。" + +msgid "Start" +msgstr "開始" + +msgid "Start priority" +msgstr "優先順位" + +msgid "Startup" +msgstr "スタートアップ" + +msgid "Static IPv4 Routes" +msgstr "IPv4 静的ルーティング" + +msgid "Static IPv6 Routes" +msgstr "IPv6 静的ルーティング" + +msgid "Static Leases" +msgstr "静的リース" + +msgid "Static Routes" +msgstr "静的ルーティング" + +msgid "Static WDS" +msgstr "静的WDS" + +msgid "Static address" +msgstr "静的アドレス" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"静的リース機能は、DHCPクライアントに対して固定のIPアドレス及び一時的なホスト" +"名をアサインします。また、クライアントは対応するリースを使用するホストがその1" +"台のみで、かつ静的なインターフェース設定にする必要があります。" + +msgid "Status" +msgstr "ステータス" + +msgid "Stop" +msgstr "停止" + +msgid "Strict order" +msgstr "問い合わせの制限" + +msgid "Submit" +msgstr "送信" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "スワップ" + +msgid "Swap Entry" +msgstr "スワップ機能" + +msgid "Switch" +msgstr "スイッチ" + +msgid "Switch %q" +msgstr "スイッチ %q" + +msgid "Switch %q (%s)" +msgstr "スイッチ %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "プロトコルの切り替え" + +msgid "Sync with browser" +msgstr "ブラウザの時刻と同期" + +msgid "Synchronizing..." +msgstr "同期中..." + +msgid "System" +msgstr "システム" + +msgid "System Log" +msgstr "システムログ" + +msgid "System Properties" +msgstr "システム・プロパティ" + +msgid "System log buffer size" +msgstr "システムログ・バッファサイズ" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "TFTP設定" + +msgid "TFTP server root" +msgstr "TFTPサーバー・ルート" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "送信レート" + +msgid "Table" +msgstr "テーブル" + +msgid "Target" +msgstr "ターゲット" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "停止" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"デバイス設定セクションでは、チャネル、送信出力、アンテナ設定などの無" +"線ハードウェアの設定を行います。また、無線ハードウェアがマルチSSID機能をサ" +"ポートしている場合、これらの設定は全て共通の設定として扱われます。暗号化設定" +"や無線モードなどのネットワーク毎の設定は、インターフェース設定で設定" +"を行います。" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"libiwinfo-lua パッケージがインストールされていません。無線設定機能を" +"正しく動作させるために、このパッケージをインストールする必要があります。" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"使用可能な文字は右記の通りです: A-Z, a-z, " +"0-9, _" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"デバイスファイルまたはパーティション( " +"/dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"記憶領域をフォーマットしているファイルシステムを指定します。( ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"更新用イメージがアップロードされました。以下はそのチェックサム及びファイルサ" +"イズです。オリジナルファイルと比較し、整合性を確認してください。
\"続行" +"\"ボタンをクリックすると、更新処理を開始します。" + +msgid "The following changes have been committed" +msgstr "以下の変更が適用されました" + +msgid "The following changes have been reverted" +msgstr "以下の変更が取り消されました" + +msgid "The following rules are currently active on this system." +msgstr "このシステムでは、現在以下のルールが有効になっています。" + +msgid "The given network name is not unique" +msgstr "設定されたネットワーク名はユニークなものではありません" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"このハードウェアではマルチESSIDを設定することができないため、続行した場合、設" +"定は既存の設定と置き換えられます。" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "選択中のプロトコルを使用する場合、デバイスを設定する必要があります" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "システムは設定領域を消去中です。完了後、自動的に再起動します。" + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"システム更新中です。
絶対に電源を切らないでください!
ルーターの再" +"接続まで数分お待ち下さい。システムが更新されることにより、ルーターの設定が変" +"わる可能性があるため、再接続時にあなたのコンピュータのIPアドレスを変更しなけ" +"ればならない場合があります。" + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"アップロードされたイメージファイルは、このボードでサポートされているフォー" +"マットではありません。このプラットフォームに適合したイメージファイルかどう" +"か、確認してください。" + +msgid "There are no active leases." +msgstr "リース中のIPアドレスはありません。" + +msgid "There are no pending changes to apply!" +msgstr "適用が未完了の変更はありません!" + +msgid "There are no pending changes to revert!" +msgstr "復元が未完了の変更はありません!" + +msgid "There are no pending changes!" +msgstr "未完了の変更はありません!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"デバイスが設定されていません。\"デバイス設定\"タブで、ネットワークデバイスを" +"選択してください。" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"ルーターにパスワードが設定されていません。Webインターフェースの保護及びSSH" +"サービスを有効にするために、管理者パスワードを設定してください。" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"以下は、sysupgrade中にバックアップ対象に含めるファイルとディレクトリのパター" +"ンリストです。/etc/config/内の設定ファイル及びその他特定の設定ファイルは自動" +"的に保持されます。" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"/etc/rc.localを表示しています。あなたの実行したいコマンドを'exit 0'行より上に" +"入力してください。これらのコマンドはブートプロセスの最後に実行されます。" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" +"プロバイダからアサインされた、ローカルのエンドポイント・アドレスです。通常、" +":2が終端に設定されます。" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"ローカルネットワーク内のみの DHCPとして使用する" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" +"スケジュールタスクシステムを使用することで、定期的に特定のタスクの実行を行う" +"ことが可能です。" + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"このリストは現在システムで動作しているプロセスとそのステータスを表示していま" +"す。" + +msgid "This page allows the configuration of custom button actions" +msgstr "このページでは、ボタンの動作を変更することができます。" + +msgid "This page gives an overview over currently active network connections." +msgstr "このページでは、現在アクティブなネットワーク接続を表示します。" + +msgid "This section contains no values yet" +msgstr "このセクションは未設定です。" + +msgid "Time Synchronization" +msgstr "時刻設定" + +msgid "Time Synchronization is not configured yet." +msgstr "時刻同期機能はまだ設定されていません。" + +msgid "Timezone" +msgstr "タイムゾーン" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"設定を復元するには、作成しておいたバックアップアーカイブをアップロードしてく" +"ださい。" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "合計" + +msgid "Traceroute" +msgstr "Traceroute" + +msgid "Traffic" +msgstr "トラフィック" + +msgid "Transfer" +msgstr "転送" + +msgid "Transmission Rate" +msgstr "転送レート" + +msgid "Transmit" +msgstr "送信" + +msgid "Transmit Power" +msgstr "電波出力" + +msgid "Transmitter Antenna" +msgstr "送信アンテナ" + +msgid "Trigger" +msgstr "トリガー" + +msgid "Trigger Mode" +msgstr "トリガーモード" + +msgid "Tunnel ID" +msgstr "トンネル ID" + +msgid "Tunnel Interface" +msgstr "トンネルインターフェース" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "ターボモード" + +msgid "Tx-Power" +msgstr "送信電力" + +msgid "Type" +msgstr "タイプ" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "UMTSのみ" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "USBデバイス" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "不明" + +msgid "Unknown Error, password not changed!" +msgstr "不明なエラーです。パスワードは変更されていません!" + +msgid "Unmanaged" +msgstr "Unmanaged" + +msgid "Unmount" +msgstr "アンマウント" + +msgid "Unsaved Changes" +msgstr "保存されていない変更" + +msgid "Unsupported protocol type." +msgstr "サポートされていないプロトコルタイプ" + +msgid "Update lists" +msgstr "リストの更新" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"システムをアップデートする場合、sysupgrade機能に互換性のあるファームウェアイ" +"メージをアップロードしてください。\"設定の保持\"を有効にすると、現在の設定を" +"維持してアップデートを行います。ただし、OpenWrt/LEDE互換のファームウェアイ" +"メージがアップロードされた場合のみ、設定は保持されます。" + +msgid "Upload archive..." +msgstr "アーカイブをアップロード" + +msgid "Uploaded File" +msgstr "アップロード完了" + +msgid "Uptime" +msgstr "起動時間" + +msgid "Use /etc/ethers" +msgstr "/etc/ethers を使用する" + +msgid "Use DHCP gateway" +msgstr "DHCPゲートウェイを使用する" + +msgid "Use DNS servers advertised by peer" +msgstr "ピアから通知されたDNSサーバーを使用する" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "ISO/IEC 3166 alpha2の国コードを使用します。" + +msgid "Use MTU on tunnel interface" +msgstr "トンネルインターフェースのMTUを設定" + +msgid "Use TTL on tunnel interface" +msgstr "トンネルインターフェースのTTLを設定" + +msgid "Use as external overlay (/overlay)" +msgstr "外部オーバーレイとして使用する (/overlay)" + +msgid "Use as root filesystem (/)" +msgstr "ルート ファイルシステムとして使用する (/)" + +msgid "Use broadcast flag" +msgstr "ブロードキャスト・フラグを使用する" + +msgid "Use builtin IPv6-management" +msgstr "ビルトインのIPv6-マネジメントを使用する" + +msgid "Use custom DNS servers" +msgstr "DNSサーバーを手動で設定" + +msgid "Use default gateway" +msgstr "デフォルトゲートウェイを使用する" + +msgid "Use gateway metric" +msgstr "ゲートウェイ・メトリックを使用する" + +msgid "Use routing table" +msgstr "" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"追加 ボタンを押して、新しくエントリーを作成してください。MAC-ア" +"ドレス はそのホストを識別し, IPv4-アドレス には払いだす固定のア" +"ドレスを設定します。また、ホスト名 はそのホストに対して一時的なホス" +"ト名をアサインします。" + +msgid "Used" +msgstr "使用" + +msgid "Used Key Slot" +msgstr "使用するキースロット" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "ユーザー名" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "%q上のVLANs" + +msgid "VLANs on %q (%s)" +msgstr "%q上のVLAN (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "VPN サーバー" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "DHCPリクエスト送信時のベンダークラスを設定" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "確認" + +msgid "Version" +msgstr "バージョン" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "WEP オープンシステム" + +msgid "WEP Shared Key" +msgstr "WEP 共有キー" + +msgid "WEP passphrase" +msgstr "WEP 暗号フレーズ" + +msgid "WMM Mode" +msgstr "WMM モード" + +msgid "WPA passphrase" +msgstr "WPA 暗号フレーズ" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"WPA暗号化を使用する場合、wpa_supplicant (クライアントモードの場合)又は " +"hostapd (アクセスポイント及びアドホック) がインストールされている必要がありま" +"す。" + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "変更を適用中です..." + +msgid "Waiting for command to complete..." +msgstr "コマンド実行中です..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "警告" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "警告: 再起動すると消えてしまう、保存されていない設定があります!" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "帯域幅" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "無線" + +msgid "Wireless Adapter" +msgstr "無線アダプタ" + +msgid "Wireless Network" +msgstr "無線ネットワーク" + +msgid "Wireless Overview" +msgstr "無線LANデバイス一覧" + +msgid "Wireless Security" +msgstr "無線LANセキュリティ" + +msgid "Wireless is disabled or not associated" +msgstr "無線LAN機能が無効になっているか、アソシエーションされていません" + +msgid "Wireless is restarting..." +msgstr "無線LAN機能再起動中..." + +msgid "Wireless network is disabled" +msgstr "無線LAN機能は無効になっています" + +msgid "Wireless network is enabled" +msgstr "無線LAN機能は有効になっています" + +msgid "Wireless restarted" +msgstr "無線LAN機能の再起動" + +msgid "Wireless shut down" +msgstr "無線LAN機能停止" + +msgid "Write received DNS requests to syslog" +msgstr "受信したDNSリクエストをsyslogへ記録します" + +msgid "Write system log to file" +msgstr "システムログをファイルに書き込む" + +msgid "XR Support" +msgstr "XRサポート" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"ルーターが起動する際のサービスの有効化/無効化を行うことができます。また、変更" +"は再起動後に適用されます。
警告: \"network\"のような重要なサービ" +"スを無効にすると, ルーターにアクセスできなくなりますので、注意してください。" +"" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "Java Scriptを有効にしない場合、LuCIは正しく動作しません。" + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "全て" + +msgid "auto" +msgstr "自動" + +msgid "automatic" +msgstr "自動" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "ブリッジ" + +msgid "create:" +msgstr "作成:" + +msgid "creates a bridge over specified interface(s)" +msgstr "指定したインターフェースでブリッジを作成します" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "無効" + +msgid "disabled" +msgstr "無効" + +msgid "expired" +msgstr "期限切れ" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"DHCPリース情報を記" +"録するファイル" + +msgid "forward" +msgstr "" + +msgid "full-duplex" +msgstr "全二重" + +msgid "half-duplex" +msgstr "半二重" + +msgid "help" +msgstr "ヘルプ" + +msgid "hidden" +msgstr "" + +msgid "hybrid mode" +msgstr "ハイブリッド モード" + +msgid "if target is a network" +msgstr "ターゲットがネットワークの場合" + +msgid "input" +msgstr "" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "ローカル DNSファイル" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "いいえ" + +msgid "no link" +msgstr "リンクなし" + +msgid "none" +msgstr "なし" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "オフ" + +msgid "on" +msgstr "オン" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "リレー モード" + +msgid "routed" +msgstr "routed" + +msgid "server mode" +msgstr "サーバー モード" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "ステートフルのみ" + +msgid "stateless" +msgstr "ステートレス" + +msgid "stateless + stateful" +msgstr "ステートレス + ステートフル" + +msgid "tagged" +msgstr "tagged" + +msgid "unknown" +msgstr "不明" + +msgid "unlimited" +msgstr "無期限" + +msgid "unspecified" +msgstr "設定しない" + +msgid "unspecified -or- create:" +msgstr "設定しない -又は- 作成:" + +msgid "untagged" +msgstr "untagged" + +msgid "yes" +msgstr "はい" + +msgid "« Back" +msgstr "« 戻る" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "チェックボックスがオフの場合、追加のネットワークが作成されます。" + +#~ msgid "Join Network: Settings" +#~ msgstr "ネットワークに接続する: 設定" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "ポート %d" + +#~ msgid "VLAN Interface" +#~ msgstr "VLANインターフェース" diff --git a/feeds/luci/modules/luci-base/po/ko/base.po b/feeds/luci/modules/luci-base/po/ko/base.po new file mode 100644 index 0000000..c20444e --- /dev/null +++ b/feeds/luci/modules/luci-base/po/ko/base.po @@ -0,0 +1,3723 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2012-04-03 08:44+0200\n" +"Last-Translator: Weongyo Jeong \n" +"Language-Team: LANGUAGE \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d 분 window, %d 초 간격)" + +msgid "(%s available)" +msgstr "" + +msgid "(empty)" +msgstr "" + +msgid "(no interfaces attached)" +msgstr "" + +msgid "-- Additional Field --" +msgstr "" + +msgid "-- Please choose --" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "1 분 부하:" + +msgid "15 Minute Load:" +msgstr "15 분 부하:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "5 분 부하:" + +msgid "BSSID" +msgstr "" + +msgid "DNS query port" +msgstr "DNS query 포트" + +msgid "DNS server port" +msgstr "DNS 서버 포트" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "IPv4-Address" +msgstr "IPv4-주소" + +msgid "IPv4-Gateway" +msgstr "" + +msgid "IPv4-Netmask" +msgstr "" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" + +msgid "IPv6-Gateway" +msgstr "" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "LED 설정" + +msgid "LED Name" +msgstr "LED 이름" + +msgid "MAC-Address" +msgstr "MAC-주소" + +msgid "" +"Max. DHCP leases" +msgstr "" +"최대 DHCP lease 수" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"최대 EDNS0 패킷 크기" + +msgid "Max. concurrent queries" +msgstr "최대 동시 처리 query 수" + +msgid "%s - %s" +msgstr "" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "" + +msgid "AR Support" +msgstr "" + +msgid "ARP retry threshold" +msgstr "" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" + +msgid "ATM device number" +msgstr "" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "" + +msgid "Access Point" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Actions" +msgstr "관리 도구" + +msgid "Activate this network" +msgstr "이 네트워를 활성화합니다" + +msgid "Active IPv4-Routes" +msgstr "" +"Active IPv4-Route 경로" + +msgid "Active IPv6-Routes" +msgstr "" +"Active IPv6-Route 경로" + +msgid "Active Connections" +msgstr "Active 연결수" + +msgid "Active DHCP Leases" +msgstr "Active DHCP 임대 목록" + +msgid "Active DHCPv6 Leases" +msgstr "Active DHCPv6 임대 목록" + +msgid "Ad-Hoc" +msgstr "" + +msgid "Add" +msgstr "추가" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" + +msgid "Add new interface..." +msgstr "새로운 인터페이스 추가..." + +msgid "Additional Hosts files" +msgstr "추가적인 Hosts 파일들" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "주소" + +msgid "Address to access local relay bridge" +msgstr "" + +msgid "Administration" +msgstr "관리" + +msgid "Advanced Settings" +msgstr "고급 설정" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "SSH 암호 인증을 허용합니다" + +msgid "Allow all except listed" +msgstr "" + +msgid "Allow listed only" +msgstr "" + +msgid "Allow localhost" +msgstr "" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" + +msgid "Allow root logins with password" +msgstr "암호를 이용한 root 접근 허용" + +msgid "Allow the root user to login with password" +msgstr "암호를 이용한 root 사용자 접근을 허용합니다" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "" + +msgid "Antenna 2" +msgstr "" + +msgid "Antenna Configuration" +msgstr "" + +msgid "Any zone" +msgstr "" + +msgid "Apply" +msgstr "적용" + +msgid "Applying changes" +msgstr "" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "연결된 station 들" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "" + +msgid "Authorization Required" +msgstr "인증이 필요합니다" + +msgid "Auto Refresh" +msgstr "자동 Refresh" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "Available packages" +msgstr "이용 가능한 패키지" + +msgid "Average:" +msgstr "평균:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "" + +msgid "Back" +msgstr "뒤로" + +msgid "Back to Overview" +msgstr "개요로 이동" + +msgid "Back to configuration" +msgstr "설정으로 돌아가기" + +msgid "Back to overview" +msgstr "" + +msgid "Back to scan results" +msgstr "" + +msgid "Background Scan" +msgstr "" + +msgid "Backup / Flash Firmware" +msgstr "Firmware 백업 / Flash" + +msgid "Backup / Restore" +msgstr "백업 / 복구" + +msgid "Backup file list" +msgstr "" + +msgid "Bad address specified!" +msgstr "" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"아래는 백업할 파일 목록입니다. 이 목록은 opkg 이 수정되었다고 판단한 파일, " +"필수 기본 파일 그리고 사용자가 패턴 정의로 백업하도록 지정한 것로 이루어져 있" +"습니다." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Bogus NX Domain Override" +msgstr "" + +msgid "Bridge" +msgstr "" + +msgid "Bridge interfaces" +msgstr "Bridge 인터페이스" + +msgid "Bridge unit number" +msgstr "" + +msgid "Bring up on boot" +msgstr "부팅시 활성화" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "" + +msgid "Buffered" +msgstr "버퍼된 양" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" +"Build/distribution 지정 feed 목록입니다. 이 파일의 내용은 sysupgrade 시 초기" +"화됩니다." + +msgid "Buttons" +msgstr "" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "CPU 사용량 (%)" + +msgid "Cancel" +msgstr "" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "Changes" +msgstr "변경 사항" + +msgid "Changes applied." +msgstr "" + +msgid "Changes the administrator password for accessing the device" +msgstr "장비 접근을 위한 관리자 암호를 변경합니다" + +msgid "Channel" +msgstr "" + +msgid "Check" +msgstr "" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"이 인터페이스에 할당하고자 하는 firewall zone 을 선택하세요. 연결된 zone 으로" +"부터 인터페이스를 제거하고 싶다면 unspecified 를 선택하세요. 새로" +"운 zone 을 정의하고 인터페이스 연결을 원한다면 create 항목을 입력하" +"세요." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"이 무선랜 인터페이스와 연결하고자 하는 네트워크(들)을 선택하세요. 혹은 새로" +"운 네트워크를 정의할려면 create 을 작성하세요." + +msgid "Cipher" +msgstr "" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"현재 설정 파일에 대한 tar 아카이브 다운로드를 원한다면 \"아카이브 생성\" 버튼" +"을 클릭하세요. Firmware 의 초기 설정 reset 을 원한다면 \"Reset 하기\" 를 클" +"릭하세요. (squashfs 이미지들만 가능)." + +msgid "Client" +msgstr "" + +msgid "Client ID to send when requesting DHCP" +msgstr "DHCP 요청시 전송할 Client ID" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" + +msgid "Close list..." +msgstr "목록 닫기..." + +msgid "Collecting data..." +msgstr "Data 를 수집중입니다..." + +msgid "Command" +msgstr "명령어" + +msgid "Common Configuration" +msgstr "공통 설정" + +msgid "Compression" +msgstr "" + +msgid "Configuration" +msgstr "설정" + +msgid "Configuration applied." +msgstr "" + +msgid "Configuration files will be kept." +msgstr "" + +msgid "Confirmation" +msgstr "다시 확인" + +msgid "Connect" +msgstr "연결" + +msgid "Connected" +msgstr "연결 시간" + +msgid "Connection Limit" +msgstr "" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "연결" + +msgid "Country" +msgstr "" + +msgid "Country Code" +msgstr "" + +msgid "Cover the following interface" +msgstr "" + +msgid "Cover the following interfaces" +msgstr "" + +msgid "Create / Assign firewall-zone" +msgstr "Firewall-zone 생성 / 할당" + +msgid "Create Interface" +msgstr "" + +msgid "Create a bridge over multiple interfaces" +msgstr "" + +msgid "Critical" +msgstr "" + +msgid "Cron Log Level" +msgstr "" + +msgid "Custom Interface" +msgstr "임의의 인터페이스" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" +"개인이 운영하는 feed 같은 정보를 입력할 수 있는 custom feed 목록입니다. 이 파" +"일은 sysupgrade 시 입력된 정보가 유지됩니다." + +msgid "Custom feeds" +msgstr "Custom feed 들" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"원한다면 장치에 부착된 LED 들의 " +"행동을 마음대로 변경할 수 있습니다." + +msgid "DHCP Leases" +msgstr "DHCP 임대 정보" + +msgid "DHCP Server" +msgstr "DHCP 서버" + +msgid "DHCP and DNS" +msgstr "DHCP 와 DNS" + +msgid "DHCP client" +msgstr "DHCP client" + +msgid "DHCP-Options" +msgstr "DHCP-옵션들" + +msgid "DHCPv6 Leases" +msgstr "DHCPv6 임대 정보" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS forwardings" +msgstr "" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Default %d" +msgstr "" + +msgid "Default gateway" +msgstr "" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "기본 상태" + +msgid "Define a name for this network." +msgstr "" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"추가적인 DHCP 옵션을 정의합니다. 예를 들어 " +"\"6,192.168.2.1,192.168.2.2\" 는 client 에게 다른 DNS 서버를 세" +"팅하도록 권고할 수 있습니다." + +msgid "Delete" +msgstr "삭제" + +msgid "Delete this network" +msgstr "이 네트워크를 삭제합니다" + +msgid "Description" +msgstr "설명" + +msgid "Design" +msgstr "디자인" + +msgid "Destination" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "Device Configuration" +msgstr "장치 설정" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "진단" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Disable" +msgstr "비활성화" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"이 인터페이스에 대해 DHCP 기능을 비활성합니다." + +msgid "Disable DNS setup" +msgstr "" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Discard upstream RFC1918 responses" +msgstr "" + +msgid "Displaying only packages containing" +msgstr "" + +msgid "Distance Optimization" +msgstr "" + +msgid "Distance to farthest network member in meters." +msgstr "" + +msgid "Distribution feeds" +msgstr "Distribution feed 들" + +msgid "Diversity" +msgstr "" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq 는 NAT 방화벽을 위" +"한 DHCP-서버와 " +"DNS-Forwarder 기능을 제공합니다." + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "" + +msgid "Domain required" +msgstr "" + +msgid "Domain whitelist" +msgstr "" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" + +msgid "Download and install package" +msgstr "패키지 다운로드 후 설치" + +msgid "Download backup" +msgstr "백업 다운로드" + +msgid "Dropbear Instance" +msgstr "" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear 는 SSH network shell 접근과 " +"SCP 서버 기능을 제공합니다" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" + +msgid "Dynamic tunnel" +msgstr "" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"동적으로 DHCP 주소를 client 에게 할당합니다. 만약 비활성화시, static lease " +"가 설정된 client 만 주소 제공이 이루어집니다." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "" + +msgid "Edit" +msgstr "수정" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "이 인터페이스를 수정합니다" + +msgid "Edit this network" +msgstr "이 네트워크를 수정합니다" + +msgid "Emergency" +msgstr "" + +msgid "Enable" +msgstr "활성화" + +msgid "Enable STP" +msgstr "STP 활성화" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +msgid "Enable NTP client" +msgstr "NTP client 활성화" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "TFTP 서버 활성화" + +msgid "Enable VLAN functionality" +msgstr "VLAN 기능 활성화" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "" + +msgid "Enable this swap" +msgstr "" + +msgid "Enable/Disable" +msgstr "활성/비활성" + +msgid "Enabled" +msgstr "활성화됨" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "이 bridge 에 Spanning Tree Protocol 활성화합니다" + +msgid "Encapsulation mode" +msgstr "" + +msgid "Encryption" +msgstr "암호화" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "" + +msgid "Ethernet Switch" +msgstr "Ethernet 스위치" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "만료 시간" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "임대한 주소의 유효 시간. 최소값은 2 분 (2m) 입니다." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "외부 system log 서버" + +msgid "External system log server port" +msgstr "외부 system log 서버 포트" + +msgid "External system log server protocol" +msgstr "외부 system log 서버 프로토콜" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Filename of the boot image advertised to clients" +msgstr "" + +msgid "Filesystem" +msgstr "" + +msgid "Filter" +msgstr "필터" + +msgid "Filter private" +msgstr "" + +msgid "Filter useless" +msgstr "" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "네트워크 검색 및 연결합니다" + +msgid "Find package" +msgstr "패키지 찾기" + +msgid "Finish" +msgstr "" + +msgid "Firewall" +msgstr "방화벽" + +msgid "Firewall Settings" +msgstr "방화벽 설정" + +msgid "Firewall Status" +msgstr "방화벽 상태" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Firmware 버전" + +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +msgid "Flash Firmware" +msgstr "" + +msgid "Flash image..." +msgstr "이미지로 Flash..." + +msgid "Flash new firmware image" +msgstr "새로운 firmware 이미지로 flash" + +msgid "Flash operations" +msgstr "Flash 작업" + +msgid "Flashing..." +msgstr "" + +msgid "Force" +msgstr "강제하기" + +msgid "Force CCMP (AES)" +msgstr "" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "다른 DHCP 서버가 탐지되더라도 이 네트워크에 DHCP 를 강제합니다." + +msgid "Force TKIP" +msgstr "" + +msgid "Force TKIP and CCMP (AES)" +msgstr "" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "" + +msgid "Forwarding mode" +msgstr "" + +msgid "Fragmentation Threshold" +msgstr "" + +msgid "Frame Bursting" +msgstr "" + +msgid "Free" +msgstr "이용 가능한 양" + +msgid "Free space" +msgstr "여유 공간" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "" + +msgid "GPRS only" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Gateway ports" +msgstr "" + +msgid "General Settings" +msgstr "기본 설정" + +msgid "General Setup" +msgstr "기본 설정" + +msgid "General options for opkg" +msgstr "opkg 명령의 기본 옵션들" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "아카이브 생성" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "암호 설정 하기" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "" + +msgid "Hang Up" +msgstr "" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"여기서 호스트이름이나 시간대와 같은 기본적인 장비 설정을 할 수 있습니다." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"아래에 SSH public-key 인증을 위한 공개 SSH-Key 들 (한 줄당 한개) 를 입력할 " +"수 있습니다." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "" + +msgid "Hide ESSID" +msgstr "ESSID 숨기기" + +msgid "Host" +msgstr "호스트" + +msgid "Host entries" +msgstr "호스트 목록들" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "Host-IP 혹은 Network" + +msgid "Hostname" +msgstr "호스트이름" + +msgid "Hostname to send when requesting DHCP" +msgstr "DHCP 요청시 전달할 호스트이름" + +msgid "Hostnames" +msgstr "호스트이름" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "IP 주소" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 Firewall" +msgstr "IPv4 방화벽" + +msgid "IPv4 WAN Status" +msgstr "IPv4 WAN 상태" + +msgid "IPv4 address" +msgstr "IPv4 주소" + +msgid "IPv4 and IPv6" +msgstr "IPv4 와 IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "IPv4 gateway" +msgstr "" + +msgid "IPv4 netmask" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "" + +msgid "IPv4-Address" +msgstr "IPv4-주소" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "IPv6 방화벽" + +msgid "IPv6 Neighbours" +msgstr "IPv6 Neighbour 들" + +msgid "IPv6 Settings" +msgstr "IPv6 설정" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "IPv6 WAN 상태" + +msgid "IPv6 address" +msgstr "" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "IPv6 prefix" +msgstr "" + +msgid "IPv6 prefix length" +msgstr "" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "IPv6-주소" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +msgid "Identity" +msgstr "" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "체크하지 않을 경우, 기본 route 가 설정되지 않습니다" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "체크하지 않을 경우, 사용하도록 권장된 DNS 주소는 무시됩니다" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" + +msgid "Ignore /etc/hosts" +msgstr "/etc/hosts 파일 무시" + +msgid "Ignore interface" +msgstr "인터페이스 무시" + +msgid "Ignore resolve file" +msgstr "resolve 파일 무시" + +msgid "Image" +msgstr "이미지" + +msgid "In" +msgstr "In" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "" + +msgid "Inbound:" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Initscript" +msgstr "" + +msgid "Initscripts" +msgstr "Initscript 들" + +msgid "Install" +msgstr "설치" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "" + +msgid "Install protocol extensions..." +msgstr "" + +msgid "Installed packages" +msgstr "설치된 패키지" + +msgid "Interface" +msgstr "인터페이스" + +msgid "Interface Configuration" +msgstr "인터페이스 설정" + +msgid "Interface Overview" +msgstr "인터페이스 개요" + +msgid "Interface is reconnecting..." +msgstr "" + +msgid "Interface is shutting down..." +msgstr "" + +msgid "Interface name" +msgstr "인터페이스 이름" + +msgid "Interface not present or not connected yet." +msgstr "" + +msgid "Interface reconnected" +msgstr "" + +msgid "Interface shut down" +msgstr "" + +msgid "Interfaces" +msgstr "인터페이스" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "" + +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" + +msgid "Java Script required!" +msgstr "" + +msgid "Join Network" +msgstr "네트워크 연결" + +msgid "Join Network: Wireless Scan" +msgstr "네트워크 연결: 무선랜 스캔 결과" + +msgid "Joining Network: %q" +msgstr "네트워크 연결중: %q" + +msgid "Keep settings" +msgstr "설정 유지" + +msgid "Kernel Log" +msgstr "Kernel 로그" + +msgid "Kernel Version" +msgstr "Kernel 버전" + +msgid "Key" +msgstr "" + +msgid "Key #%d" +msgstr "" + +msgid "Kill" +msgstr "" + +msgid "L2TP" +msgstr "" + +msgid "L2TP Server" +msgstr "" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "" + +msgid "LLC" +msgstr "" + +msgid "Label" +msgstr "" + +msgid "Language" +msgstr "언어" + +msgid "Language and Style" +msgstr "언어와 스타일" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "임대 시간" + +msgid "Lease validity time" +msgstr "" + +msgid "Leasefile" +msgstr "" + +msgid "Leasetime" +msgstr "임대 시간" + +msgid "Leasetime remaining" +msgstr "남아있는 임대 시간" + +msgid "Leave empty to autodetect" +msgstr "" + +msgid "Leave empty to use the current WAN address" +msgstr "" + +msgid "Legend:" +msgstr "" + +msgid "Limit" +msgstr "제한" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" +"DNS 를 제공하기로한 subnet 인터페이스들에 대해서만 DNS 서비스를 제공합니다." + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" +"지정한 인터페이스에만 listening 하며 미지정시 모든 인터페이스에 적용됩니다" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "부하" + +msgid "Load Average" +msgstr "부하 평균" + +msgid "Loading" +msgstr "" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "" + +msgid "Local IPv6 address" +msgstr "" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Local 시작 프로그램" + +msgid "Local Time" +msgstr "지역 시간" + +msgid "Local domain" +msgstr "" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Log output 레벨" + +msgid "Log queries" +msgstr "" + +msgid "Logging" +msgstr "" + +msgid "Login" +msgstr "로그인" + +msgid "Logout" +msgstr "로그아웃" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "임대되는 주소의 최소 시작점. (네트워크 주소로 부터의 offset)" + +msgid "MAC-Address" +msgstr "MAC-주소" + +msgid "MAC-Address Filter" +msgstr "MAC-주소 필터" + +msgid "MAC-Filter" +msgstr "MAC-필터" + +msgid "MAC-List" +msgstr "" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Active DHCP lease 건의 최대 허용 숫자" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "허용되는 최대 동시 DNS query 수" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "허용된 최대 EDNS.0 UDP 패킷 크기" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +msgid "Maximum hold time" +msgstr "" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "임대될 수 있는 주소의 최대 숫자." + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "메모리" + +msgid "Memory usage (%)" +msgstr "메모리 사용량 (%)" + +msgid "Metric" +msgstr "" + +msgid "Minimum Rate" +msgstr "" + +msgid "Minimum hold time" +msgstr "" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Model" +msgstr "모델" + +msgid "Modem device" +msgstr "" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "" + +msgid "Mount Points" +msgstr "" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "" + +msgid "Mount point" +msgstr "" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Multicast Rate" +msgstr "" + +msgid "Multicast address" +msgstr "" + +msgid "NAS ID" +msgstr "" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "NTP 서버 목록" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "이름" + +msgid "Name of the new interface" +msgstr "" + +msgid "Name of the new network" +msgstr "" + +msgid "Navigation" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "네트워크" + +msgid "Network Utilities" +msgstr "네트워크 유틸리티" + +msgid "Network boot image" +msgstr "네트워크 boot 이미지" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "" + +msgid "No DHCP Server configured for this interface" +msgstr "" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "이 table 에는 정의된 chain 이 없음" + +msgid "No files found" +msgstr "" + +msgid "No information available" +msgstr "이용 가능한 정보가 없습니다" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "" + +msgid "No network name specified" +msgstr "" + +msgid "No package lists available" +msgstr "" + +msgid "No password set!" +msgstr "암호 설정을 해주세요!" + +msgid "No rules in this chain" +msgstr "" + +msgid "No zone assigned" +msgstr "" + +msgid "Noise" +msgstr "노이즈" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "" + +msgid "Not connected" +msgstr "연결되지 않음" + +msgid "Note: Configuration files will be erased." +msgstr "" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "OPKG-Configuration" +msgstr "OPKG-설정" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"이 페이지에서는 네트워크 인터페이스를 설정할 수 있습니다. \"Bridge 인터페이스" +"\" 항목을 클릭하고, 공백으로 구분된 네트워크 인터페이스들의 이름을 적는 방식" +"으로 여러 인터페이스들을 bridge 할 수 있습니다. 또한 VLAN 표기법인 INTERFACE.VLANNR " +"(: eth0.1) 를 사용하실 수 " +"있습니다." + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "" + +msgid "Open list..." +msgstr "목록 열람..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "동작 주파수" + +msgid "Option changed" +msgstr "변경된 option" + +msgid "Option removed" +msgstr "삭제된 option" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Other:" +msgstr "" + +msgid "Out" +msgstr "" + +msgid "Outbound:" +msgstr "" + +msgid "Outdoor Channels" +msgstr "" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "MAC 주소 덮어쓰기" + +msgid "Override MTU" +msgstr "MTU 덮어쓰기" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "기본 인터페이스 이름을 덮어씁니다" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"Client 에 전달될 netmask 를 덮어 쓸 수 있습니다. 보통 해당 값은 제공되는 " +"subnet 에 따라 자동 계산됩니다." + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "개요" + +msgid "Owner" +msgstr "" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "PPP" +msgstr "" + +msgid "PPPoA Encapsulation" +msgstr "" + +msgid "PPPoATM" +msgstr "" + +msgid "PPPoE" +msgstr "" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Package lists are older than 24 hours" +msgstr "" + +msgid "Package name" +msgstr "패키지 이름" + +msgid "Packets" +msgstr "" + +msgid "Part of zone %q" +msgstr "" + +msgid "Password" +msgstr "암호" + +msgid "Password authentication" +msgstr "암호 인증" + +msgid "Password of Private Key" +msgstr "" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "" + +msgid "Path to executable which handles the button event" +msgstr "" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "최고치:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "재부팅하기" + +msgid "Perform reset" +msgstr "Reset 하기" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "Physical 설정" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "Pkts." + +msgid "Please enter your username and password." +msgstr "사용자이름과 암호를 입력해 주세요." + +msgid "Policy" +msgstr "" + +msgid "Port" +msgstr "포트" + +msgid "Port status:" +msgstr "포트 상태:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "" + +msgid "Processes" +msgstr "프로세스" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "프로토콜" + +msgid "Protocol family" +msgstr "" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "새로운 네트워크를 추가합니다" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "" + +msgid "RX" +msgstr "" + +msgid "RX Rate" +msgstr "" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"/etc/ethers 파일을 읽어 DHCP-서버를 설정합니다" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"정말로 네트워크를 shutdown 하시겠습니까?\\n이 인터페이스를 통해 연결하였다면 " +"접속이 끊어질 수 있습니다." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "정말 프로토콜 변경을 원하세요?" + +msgid "Realtime Connections" +msgstr "실시간 연결수" + +msgid "Realtime Graphs" +msgstr "실시간 그래프" + +msgid "Realtime Load" +msgstr "실시간 부하" + +msgid "Realtime Traffic" +msgstr "실시간 트래픽" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "재부팅" + +msgid "Rebooting..." +msgstr "" + +msgid "Reboots the operating system of your device" +msgstr "장치의 운영체제를 재부팅합니다" + +msgid "Receive" +msgstr "" + +msgid "Receiver Antenna" +msgstr "" + +msgid "Reconnect this interface" +msgstr "이 인터페이스를 재연결합니다" + +msgid "Reconnecting interface" +msgstr "인터페이스 재연결중입니다" + +msgid "References" +msgstr "" + +msgid "Regulatory Domain" +msgstr "" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "제거" + +msgid "Repeat scan" +msgstr "" + +msgid "Replace entry" +msgstr "" + +msgid "Replace wireless configuration" +msgstr "" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "특정 ISP 들에 요구됨. 예: Charter (DOCSIS 3 기반)" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "초기화" + +msgid "Reset Counters" +msgstr "Counter 초기화" + +msgid "Reset to defaults" +msgstr "초기값으로 reset" + +msgid "Resolv and Hosts Files" +msgstr "Resolv 와 Hosts 파일" + +msgid "Resolve file" +msgstr "Resolve 파일" + +msgid "Restart" +msgstr "재시작" + +msgid "Restart Firewall" +msgstr "방화벽 재시작" + +msgid "Restore backup" +msgstr "백업 복구" + +msgid "Reveal/hide password" +msgstr "암호 보이기/숨기기" + +msgid "Revert" +msgstr "변경 취소" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "TFTP 를 통해 제공되는 파일들의 root 디렉토리" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "라우터 암호" + +msgid "Routes" +msgstr "Route 경로" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Route 경로는 특정 호스트 혹은 네트워크가 사용해야 할 인터페이스와 gateway 정" +"보를 나타냅니다." + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "저장" + +msgid "Save & Apply" +msgstr "저장 & 적용" + +msgid "Save & Apply" +msgstr "저장 & 적용" + +msgid "Scan" +msgstr "Scan 하기" + +msgid "Scheduled Tasks" +msgstr "작업 관리" + +msgid "Section added" +msgstr "추가된 section" + +msgid "Section removed" +msgstr "삭제된 section" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "" + +msgid "Separate WDS" +msgstr "" + +msgid "Server Settings" +msgstr "서버 설정" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "" + +msgid "Service Type" +msgstr "" + +msgid "Services" +msgstr "서비스" + +msgid "Set up Time Synchronization" +msgstr "" + +msgid "Setup DHCP Server" +msgstr "" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "현재 백업 파일 목록 보기" + +msgid "Shutdown this interface" +msgstr "이 인터페이스를 정지합니다" + +msgid "Shutdown this network" +msgstr "이 네트워크를 shutdown 합니다" + +msgid "Signal" +msgstr "신호" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "" + +msgid "Size" +msgstr "Size" + +msgid "Size (.ipk)" +msgstr "크기 (.ipk)" + +msgid "Skip" +msgstr "" + +msgid "Skip to content" +msgstr "" + +msgid "Skip to navigation" +msgstr "" + +msgid "Slot time" +msgstr "" + +msgid "Software" +msgstr "소프트웨어" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "" + +msgid "Sorry, the object you requested was not found." +msgstr "" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "순서" + +msgid "Source" +msgstr "" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Dropbear instance 의 listening 포트를 지정합니다" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "" + +msgid "Start" +msgstr "시작" + +msgid "Start priority" +msgstr "시작 우선순위" + +msgid "Startup" +msgstr "시작 프로그램" + +msgid "Static IPv4 Routes" +msgstr "Static IPv4 Route 경로" + +msgid "Static IPv6 Routes" +msgstr "Static IPv6 Route 경로" + +msgid "Static Leases" +msgstr "Static Lease 들" + +msgid "Static Routes" +msgstr "Static Route 경로" + +msgid "Static WDS" +msgstr "" + +msgid "Static address" +msgstr "" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"Static Lease 는 DHCP client 에게 고정된 IP 주소와 symbolic hostname 을 할당" +"할 때 사용됩니다. 이 기능은 또한 지정된 host 에 대해서만 주소 임대를 하도록 " +"하는 non-dynamic 인터페이스 설정에도 사용됩니다." + +msgid "Status" +msgstr "상태" + +msgid "Stop" +msgstr "정지" + +msgid "Strict order" +msgstr "Strict order" + +msgid "Submit" +msgstr "제출하기" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "스위치" + +msgid "Switch %q" +msgstr "스위치 %q" + +msgid "Switch %q (%s)" +msgstr "스위치 %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "스위치 VLAN" + +msgid "Switch protocol" +msgstr "프로토콜 변경" + +msgid "Sync with browser" +msgstr "브라우저 시간대로 동기화" + +msgid "Synchronizing..." +msgstr "" + +msgid "System" +msgstr "시스템" + +msgid "System Log" +msgstr "시스템 로그" + +msgid "System Properties" +msgstr "시스템 등록 정보" + +msgid "System log buffer size" +msgstr "System log 버퍼 크기" + +msgid "TCP:" +msgstr "" + +msgid "TFTP Settings" +msgstr "TFTP 설정" + +msgid "TFTP server root" +msgstr "TFTP 서버 root" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"장치 설정 섹션은 channel, transmit power 혹은 antenna 선택과 같은 물" +"리적인 설정 내용을 다룹니다. 이 설정은 (만약 radio 하드웨어가 multi-SSID 지" +"원이 가능하다면) 정의된 모든 무선 네트워크에 공통적으로 적용됩니다. 암호화 혹" +"은 operation mode 와 같은 각 네트워크 설정들은 인터페이스 설정에서 " +"다루어집니다." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "" + +msgid "The following changes have been reverted" +msgstr "다음의 변경 사항들이 취소되었습니다" + +msgid "The following rules are currently active on this system." +msgstr "다음의 rule 들이 현재 이 시스템에 적용 중입니다." + +msgid "The given network name is not unique" +msgstr "" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"이 장치의 네트워크 포트들은 컴퓨터끼리 직접 통신을 할 수 있도록 여러 VLAN 으로 구성될 수 있습니다. " +"VLAN은 종종 다른 네트워크 " +"segment 들을 분리하는데 사용되기도 합니다. 한 개의 uplink 포트가 인터넷에 연" +"결되어 있고 나머지 포트들은 local 네트워크로 연결되는 구성에 자주 사용됩니다." + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" + +msgid "There are no active leases." +msgstr "" + +msgid "There are no pending changes to apply!" +msgstr "" + +msgid "There are no pending changes to revert!" +msgstr "" + +msgid "There are no pending changes!" +msgstr "" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"이 공유기에 암호 설정이 되지 않았습니다. 웹 UI 와 SSH 부분을 보호하기 " +"위해서 꼭 root 암호를 설정해 주세요." + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"이것은 sysupgrade 시 유지되어야 하는 파일과 디렉토리 목록에 대한 shell glob " +"패턴들입니다. /etc/config/ 하위의 수정된 파일이나 특정 다른 설정들은 자동적" +"으로 변경 사항이 보존됩니다." + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"이것은 /etc/rc.local 파일의 내용입니다. 여기에 ('exit 0' 앞에) 부팅 절차가 " +"끝날 때 실행하고자 하는 명령들을 삽입하세요." + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "아래는 예정된 작업들이 정의된 시스템 crontab 내용입니다." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"이 목록은 현재 실행중인 시스템 프로세스와 해당 상태에 대한 개요를 보여줍니다." + +msgid "This page allows the configuration of custom button actions" +msgstr "" + +msgid "This page gives an overview over currently active network connections." +msgstr "이 페이지는 현재 active 상태인 네트워크 연결을 보여줍니다." + +msgid "This section contains no values yet" +msgstr "이 section 은 아직 입력된 값이 없습니다" + +msgid "Time Synchronization" +msgstr "시간 동기화" + +msgid "Time Synchronization is not configured yet." +msgstr "시간 동기화가 아직 설정되지 않았습니다." + +msgid "Timezone" +msgstr "시간대" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"설정 파일을 복구하고자 한다면 이전에 백업하신 아카이브 파일을 여기로 업로드" +"할 수 있습니다." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "총 이용 가능한 양" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "트래픽" + +msgid "Transfer" +msgstr "전송량" + +msgid "Transmission Rate" +msgstr "" + +msgid "Transmit" +msgstr "" + +msgid "Transmit Power" +msgstr "" + +msgid "Transmitter Antenna" +msgstr "" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "" + +msgid "Tx-Power" +msgstr "" + +msgid "Type" +msgstr "유형" + +msgid "UDP:" +msgstr "" + +msgid "UMTS only" +msgstr "" + +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +msgid "USB Device" +msgstr "" + +msgid "UUID" +msgstr "" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "알수없음" + +msgid "Unknown Error, password not changed!" +msgstr "" + +msgid "Unmanaged" +msgstr "" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "적용 안된 변경 사항" + +msgid "Unsupported protocol type." +msgstr "" + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"실행중인 firmware 변경을 하고자 한다면 여기에 sysupgrade 호환성이 유지되는 이" +"미지를 업로드하세요. 현재의 설정을 유지하고자 한다면 \"설정 유지\" 를 체크하" +"세요. (이를 지원하는 firmware 이미지 필요)" + +msgid "Upload archive..." +msgstr "아카이브 업로드..." + +msgid "Uploaded File" +msgstr "Uploaded File" + +msgid "Uptime" +msgstr "가동 시간" + +msgid "Use /etc/ethers" +msgstr "/etc/ethers 사용" + +msgid "Use DHCP gateway" +msgstr "" + +msgid "Use DNS servers advertised by peer" +msgstr "Peer 가 권장한 DNS 서버 사용" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Broadcast flag 사용" + +msgid "Use builtin IPv6-management" +msgstr "자체 내장 IPv6-관리 기능 사용" + +msgid "Use custom DNS servers" +msgstr "임의의 DNS 서버 사용" + +msgid "Use default gateway" +msgstr "Default gateway 사용" + +msgid "Use gateway metric" +msgstr "Gateway metric 사용" + +msgid "Use routing table" +msgstr "Routing table 사용" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"새로운 항목을 추가하기 위해서는 추가 버튼을 사용하세요. MAC-주소" +"는 host 를 나타내며, IPv4-주소는 사용할 고정 주소를 나타내고, " +"요청하는 host 에 대해 hostname 이 symbolic name 으로 부여됩니다. 선" +"택 사항인 임대 시간은 해당 host 에만 해당되는 시각을 설정하는데 사용" +"될 수 있습니다. 예를 들어 12h, 3d 혹은 infinite 값들이 가능합니다." + +msgid "Used" +msgstr "" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "사용자이름" + +msgid "VC-Mux" +msgstr "" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "" + +msgid "VLANs on %q (%s)" +msgstr "VLAN 설정: %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "DHCP 요청시 전송할 Vendor Class" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "버전" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "" + +msgid "WEP Shared Key" +msgstr "" + +msgid "WEP passphrase" +msgstr "" + +msgid "WMM Mode" +msgstr "WMM Mode" + +msgid "WPA passphrase" +msgstr "" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "변경 사항이 적용되기를 기다리는 중입니다..." + +msgid "Waiting for command to complete..." +msgstr "실행한 명령이 끝나기를 기다리는 중입니다..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "무선" + +msgid "Wireless Adapter" +msgstr "" + +msgid "Wireless Network" +msgstr "무선랜 네트워크" + +msgid "Wireless Overview" +msgstr "무선랜 개요" + +msgid "Wireless Security" +msgstr "무선랜 보안" + +msgid "Wireless is disabled or not associated" +msgstr "무선이 비활성화되어 있거나 연결되어 있지 않습니다" + +msgid "Wireless is restarting..." +msgstr "무선랜이 재시작중입니다..." + +msgid "Wireless network is disabled" +msgstr "무선 네트워크가 꺼져 있음" + +msgid "Wireless network is enabled" +msgstr "무선 네트워크가 켜져 있음" + +msgid "Wireless restarted" +msgstr "무선랜이 재시작되었습니다" + +msgid "Wireless shut down" +msgstr "무선랜이 shutdown 되었습니다" + +msgid "Write received DNS requests to syslog" +msgstr "받은 DNS 요청 내용을 systlog 에 기록합니다" + +msgid "Write system log to file" +msgstr "System log 출력 파일 경로" + +msgid "XR Support" +msgstr "" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"이 메뉴에서 설치된 init script 를 활성화/비활성화 할 수 있습니다. 변경 사항" +"은 장치가 재부팅 될 때 적용되게 됩니다.
경고: 만약 \"network\" " +"와 같은 중요 init script 를 비활성화 할 경우, 장치에 접속을 못하실 수 있습니" +"다!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "" + +msgid "auto" +msgstr "" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "" + +msgid "create:" +msgstr "" + +msgid "creates a bridge over specified interface(s)" +msgstr "지정한 인터페이스(들)로 구성된 bridge 를 생성합니다" + +msgid "dB" +msgstr "" + +msgid "dBm" +msgstr "" + +msgid "disable" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "만료됨" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"할당된 DHCP-lease " +"정보가 저장되는 파일" + +msgid "forward" +msgstr "" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hidden" +msgstr "" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "Target 이 네트워크일 경우" + +msgid "input" +msgstr "" + +msgid "kB" +msgstr "" + +msgid "kB/s" +msgstr "" + +msgid "kbit/s" +msgstr "" + +msgid "local DNS file" +msgstr "local DNS 파일" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "" + +msgid "no link" +msgstr "link 없음" + +msgid "none" +msgstr "" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "" + +msgid "on" +msgstr "" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "unlimited" +msgstr "" + +msgid "unspecified" +msgstr "" + +msgid "unspecified -or- create:" +msgstr "unspecified -혹은- create:" + +msgid "untagged" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "« Back" +msgstr "" diff --git a/feeds/luci/modules/luci-base/po/ms/base.po b/feeds/luci/modules/luci-base/po/ms/base.po new file mode 100644 index 0000000..971afd4 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/ms/base.po @@ -0,0 +1,3685 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-05-07 17:57+1000\n" +"PO-Revision-Date: 2010-05-07 17:57+1000\n" +"Last-Translator: Wai Chet Teow \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "" + +msgid "(%s available)" +msgstr "(%s sedia)" + +msgid "(empty)" +msgstr "" + +msgid "(no interfaces attached)" +msgstr "(tiada interface dipasang)" + +msgid "-- Additional Field --" +msgstr "-- Gelanggang Tambahan --" + +msgid "-- Please choose --" +msgstr "-- Sila pilih --" + +msgid "-- custom --" +msgstr "-- memperibadi --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "" + +msgid "15 Minute Load:" +msgstr "" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "" + +msgid "DNS server port" +msgstr "" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" + +msgid "ESSID" +msgstr "" +"ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-Alamat" + +msgid "IPv4-Gateway" +msgstr "IPv4-Pintu gerbang" + +msgid "IPv4-Netmask" +msgstr "IPv4-Netmask" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "IPv6 Host-Alamat atau Rangkaian (CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-Pintu gerbang" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "Konfigurasi lampu LED" + +msgid "LED Name" +msgstr "" + +msgid "MAC-Address" +msgstr "MAC-Alamat" + +msgid "" +"Max. DHCP leases" +msgstr "" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" + +msgid "Max. concurrent queries" +msgstr "" + +msgid "%s - %s" +msgstr "" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "" + +msgid "AR Support" +msgstr "AR-Penyokong" + +msgid "ARP retry threshold" +msgstr "" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" + +msgid "ATM device number" +msgstr "" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "" + +msgid "Access Point" +msgstr "Pusat akses" + +msgid "Action" +msgstr "Aksi" + +msgid "Actions" +msgstr "Aksi" + +msgid "Activate this network" +msgstr "" + +msgid "Active IPv4-Routes" +msgstr "Aktive IPv4-Routen" + +msgid "Active IPv6-Routes" +msgstr "Aktif IPv6-Laluan" + +msgid "Active Connections" +msgstr "Sambungan Aktif" + +msgid "Active DHCP Leases" +msgstr "" + +msgid "Active DHCPv6 Leases" +msgstr "" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Tambah" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" + +msgid "Add new interface..." +msgstr "" + +msgid "Additional Hosts files" +msgstr "" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Address to access local relay bridge" +msgstr "" + +msgid "Administration" +msgstr "Pentadbiran" + +msgid "Advanced Settings" +msgstr "Tetapan Lanjutan" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "Membenarkan pengesahan kata laluan SSH" + +msgid "Allow all except listed" +msgstr "Izinkan semua kecualian yang disenaraikan" + +msgid "Allow listed only" +msgstr "Izinkan senarai saja" + +msgid "Allow localhost" +msgstr "" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" + +msgid "Allow root logins with password" +msgstr "" + +msgid "Allow the root user to login with password" +msgstr "" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antena 1" + +msgid "Antenna 2" +msgstr "Antena 2" + +msgid "Antenna Configuration" +msgstr "" + +msgid "Any zone" +msgstr "" + +msgid "Apply" +msgstr "Melaksanakan" + +msgid "Applying changes" +msgstr "Melaksanakan perubahan" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Associated Stesen" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Authentifizierung" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Pengesahan" + +msgid "Authorization Required" +msgstr "Otorisasi Diperlukan" + +msgid "Auto Refresh" +msgstr "" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Boleh didapati" + +msgid "Available packages" +msgstr "" + +msgid "Average:" +msgstr "" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "" + +msgid "Back" +msgstr "" + +msgid "Back to Overview" +msgstr "" + +msgid "Back to configuration" +msgstr "" + +msgid "Back to overview" +msgstr "Kembali ke ikhtisar" + +msgid "Back to scan results" +msgstr "Kembali ke keputusan scan" + +msgid "Background Scan" +msgstr "Latar Belakang Scan" + +msgid "Backup / Flash Firmware" +msgstr "" + +msgid "Backup / Restore" +msgstr "Sandaran / Mengembalikan" + +msgid "Backup file list" +msgstr "" + +msgid "Bad address specified!" +msgstr "" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Bogus NX Domain Override" +msgstr "" + +msgid "Bridge" +msgstr "Bridge" + +msgid "Bridge interfaces" +msgstr "Antara Muka Bridge" + +msgid "Bridge unit number" +msgstr "" + +msgid "Bring up on boot" +msgstr "" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "" + +msgid "Buffered" +msgstr "" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Butang" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Penggunaan CPU (%)" + +msgid "Cancel" +msgstr "Batal" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Rantai" + +msgid "Changes" +msgstr "Laman" + +msgid "Changes applied." +msgstr "Laman diterapkan." + +msgid "Changes the administrator password for accessing the device" +msgstr "" + +msgid "Channel" +msgstr "Saluran" + +msgid "Check" +msgstr "" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Jumlah disemak " + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "Pilih zon firewall yang anda ingin tetapkan untuk antar muka ini." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" + +msgid "Cipher" +msgstr "" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" + +#, fuzzy +msgid "Client" +msgstr "Pelanggan" + +msgid "Client ID to send when requesting DHCP" +msgstr "" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" + +msgid "Close list..." +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "Perintah" + +msgid "Common Configuration" +msgstr "" + +msgid "Compression" +msgstr "Mampatan" + +msgid "Configuration" +msgstr "Konfigurasi" + +msgid "Configuration applied." +msgstr "" + +msgid "Configuration files will be kept." +msgstr "" + +msgid "Confirmation" +msgstr "Pengesahan" + +msgid "Connect" +msgstr "" + +msgid "Connected" +msgstr "" + +msgid "Connection Limit" +msgstr "Sambungan Batas" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "" + +msgid "Country" +msgstr "" + +msgid "Country Code" +msgstr "Kod negara" + +msgid "Cover the following interface" +msgstr "" + +msgid "Cover the following interfaces" +msgstr "" + +msgid "Create / Assign firewall-zone" +msgstr "Buat / Menetapkan dinding api-zon" + +msgid "Create Interface" +msgstr "" + +msgid "Create a bridge over multiple interfaces" +msgstr "" + +msgid "Critical" +msgstr "" + +msgid "Cron Log Level" +msgstr "" + +msgid "Custom Interface" +msgstr "" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "Mengkustomisasi perilaku peranti LED jika mungkin." + +msgid "DHCP Leases" +msgstr "" + +msgid "DHCP Server" +msgstr "" + +msgid "DHCP and DNS" +msgstr "" + +msgid "DHCP client" +msgstr "" + +msgid "DHCP-Options" +msgstr "DHCP-Pilihan" + +msgid "DHCPv6 Leases" +msgstr "" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS forwardings" +msgstr "" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Default %d" +msgstr "" + +msgid "Default gateway" +msgstr "" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "" + +msgid "Define a name for this network." +msgstr "" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" + +msgid "Delete" +msgstr "Padam" + +msgid "Delete this network" +msgstr "" + +msgid "Description" +msgstr "Keterangan" + +msgid "Design" +msgstr "Disain" + +msgid "Destination" +msgstr "Tempat tujuan" + +msgid "Device" +msgstr "Alat" + +msgid "Device Configuration" +msgstr "" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" + +msgid "Disable DNS setup" +msgstr "" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Mematikan pemasa HW-Beacon" + +msgid "Disabled" +msgstr "" + +msgid "Discard upstream RFC1918 responses" +msgstr "" + +msgid "Displaying only packages containing" +msgstr "" + +msgid "Distance Optimization" +msgstr "Jarak Optimasi" + +msgid "Distance to farthest network member in meters." +msgstr "Jarak ke rangkaian terjauh ahli dalam meter." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Keanekaragaman" + +# Nur für NAT-Firewalls? +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq adalah gabungan DHCP-Pelayan danDNS-" +"Forwarder untuk NAT " +"firewall" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "Jangan menghantar jawapan penyelidikan" + +msgid "Domain required" +msgstr "Domain diperlukan" + +msgid "Domain whitelist" +msgstr "" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "Jangan hantar permintaan DNS tanpa nama DNS" + +msgid "Download and install package" +msgstr "Turun dan memasang pakej" + +msgid "Download backup" +msgstr "" + +msgid "Dropbear Instance" +msgstr "" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear menawarkan SSH kulit rangkaian aksesdan pelayan yang terintegrasi." + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "Dinamik DHCP" + +msgid "Dynamic tunnel" +msgstr "" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "EAP-Kaedah" + +msgid "Edit" +msgstr "Sunting" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "" + +msgid "Edit this network" +msgstr "" + +msgid "Emergency" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable STP" +msgstr "Mengaktifkan STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +msgid "Enable NTP client" +msgstr "" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "" + +msgid "Enable VLAN functionality" +msgstr "" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "" + +msgid "Enable this swap" +msgstr "" + +msgid "Enable/Disable" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Aktifkan spanning Tree Protokol di jambatan ini" + +msgid "Encapsulation mode" +msgstr "" + +msgid "Encryption" +msgstr "Enkripsi" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "" + +msgid "Error" +msgstr "Kesalahan" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Ethernet Adapter" + +msgid "Ethernet Switch" +msgstr "Ethernet Beralih" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "" + +msgid "External system log server port" +msgstr "" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Frame Cepat" + +msgid "File" +msgstr "" + +msgid "Filename of the boot image advertised to clients" +msgstr "" + +msgid "Filesystem" +msgstr "Fail Sistem" + +msgid "Filter" +msgstr "Penapis" + +msgid "Filter private" +msgstr "Penapis swasta" + +msgid "Filter useless" +msgstr "Penapis tak berguna" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "" + +msgid "Find package" +msgstr "Cari pakej" + +msgid "Finish" +msgstr "Selesai" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall Settings" +msgstr "Tetapan Firewall" + +msgid "Firewall Status" +msgstr "Status Firewall" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "" + +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +msgid "Flash Firmware" +msgstr "Firmware Flash" + +msgid "Flash image..." +msgstr "" + +msgid "Flash new firmware image" +msgstr "" + +msgid "Flash operations" +msgstr "" + +msgid "Flashing..." +msgstr "" + +msgid "Force" +msgstr "Paksa" + +msgid "Force CCMP (AES)" +msgstr "" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" + +msgid "Force TKIP" +msgstr "" + +msgid "Force TKIP and CCMP (AES)" +msgstr "" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "" + +msgid "Forwarding mode" +msgstr "" + +msgid "Fragmentation Threshold" +msgstr "Fragmentasi Ambang" + +msgid "Frame Bursting" +msgstr "Bingkai Meletup" + +msgid "Free" +msgstr "" + +msgid "Free space" +msgstr "" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "" + +msgid "GPRS only" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Gateway ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General Setup" +msgstr "Setup Umum" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "Menuju ke halaman konfigurasi yang relevan" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Kawalan" + +msgid "Hang Up" +msgstr "Menutup" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Di sini anda boleh mengkonfigurasi aspek asas peranti anda seperti nama host " +"atau zon." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "" + +msgid "Hide ESSID" +msgstr "Menyembunyikan ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Entri host" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "IP host atau rangkaian" + +msgid "Hostname" +msgstr "Nama Host" + +msgid "Hostname to send when requesting DHCP" +msgstr "" + +msgid "Hostnames" +msgstr "Nama Host" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "Alamat IP" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 Firewall" +msgstr "" + +msgid "IPv4 WAN Status" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "IPv4 gateway" +msgstr "" + +msgid "IPv4 netmask" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "Konfigurasi IPv6" + +msgid "IPv6 Firewall" +msgstr "" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "" + +msgid "IPv6 address" +msgstr "" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "IPv6 prefix" +msgstr "" + +msgid "IPv6 prefix length" +msgstr "" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +msgid "Identity" +msgstr "Identiti" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Jika memori fizikal anda tidak cukup data yang boleh digunakan sementara " +"menukar ke peranti-penukar yang dihasilkan dalam jumlah RAM berguna yang " +"lebih tinggi. Berhati-hatilah bahawa penukaran data adalah proses yang " +"sangat lambat kerana peranti-penukar tidak boleh diakses dengan datarates " +"yang tinggi pada RAM." + +msgid "Ignore /etc/hosts" +msgstr "Mengabaikan /etc/hosts" + +msgid "Ignore interface" +msgstr "Abaikan antara muka" + +msgid "Ignore resolve file" +msgstr "Abaikan fail yang selesai" + +msgid "Image" +msgstr "" + +msgid "In" +msgstr "Masuk" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "" + +msgid "Inbound:" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Initscript" +msgstr "" + +msgid "Initscripts" +msgstr "" + +msgid "Install" +msgstr "Memasang" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "" + +msgid "Install protocol extensions..." +msgstr "" + +msgid "Installed packages" +msgstr "" + +msgid "Interface" +msgstr "Interface" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface Overview" +msgstr "" + +msgid "Interface is reconnecting..." +msgstr "" + +msgid "Interface is shutting down..." +msgstr "" + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "" + +msgid "Interface reconnected" +msgstr "" + +msgid "Interface shut down" +msgstr "" + +msgid "Interfaces" +msgstr "Interface" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "" + +msgid "Invalid" +msgstr "Tak Sah" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "Username dan / atau password tak sah! Sila cuba lagi." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Tampak bahawa anda cuba untuk flash fail gambar yang tidak sesuai dengan " +"memori flash, sila buat pengesahan pada fail gambar!" + +msgid "Java Script required!" +msgstr "" + +#, fuzzy +msgid "Join Network" +msgstr "Gabung Rangkaian" + +msgid "Join Network: Wireless Scan" +msgstr "" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "" + +msgid "Kernel Log" +msgstr "Log Kernel" + +msgid "Kernel Version" +msgstr "" + +msgid "Key" +msgstr "Kunci" + +msgid "Key #%d" +msgstr "" + +msgid "Kill" +msgstr "Tamatkan" + +msgid "L2TP" +msgstr "" + +msgid "L2TP Server" +msgstr "" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "" + +msgid "LLC" +msgstr "" + +msgid "Label" +msgstr "" + +msgid "Language" +msgstr "Bahasa" + +msgid "Language and Style" +msgstr "" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Leasefile" +msgstr "Sewa fail" + +msgid "Leasetime" +msgstr "Masa penyewaan" + +msgid "Leasetime remaining" +msgstr "Sisa masa penyewaan" + +msgid "Leave empty to autodetect" +msgstr "" + +msgid "Leave empty to use the current WAN address" +msgstr "" + +msgid "Legend:" +msgstr "" + +msgid "Limit" +msgstr "Batas" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Link Pada" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "Load" + +msgid "Load Average" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "" + +msgid "Local IPv6 address" +msgstr "" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "" + +msgid "Local Time" +msgstr "Masa Tempatan" + +msgid "Local domain" +msgstr "" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "Soalan tempatan" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "" + +msgid "Log queries" +msgstr "Log soalan" + +msgid "Logging" +msgstr "" + +msgid "Login" +msgstr "Login" + +msgid "Logout" +msgstr "Logout" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "MAC-Address Filter" +msgstr "Penapis alamat MAC" + +msgid "MAC-Filter" +msgstr "Penapis MAC" + +msgid "MAC-List" +msgstr "Senarai MAC" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Rate Maksimum" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +#, fuzzy +msgid "Maximum hold time" +msgstr "Memegang masa maksimum" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "" + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "Memori" + +msgid "Memory usage (%)" +msgstr "Penggunaan Memori (%)" + +msgid "Metric" +msgstr "Metrik" + +msgid "Minimum Rate" +msgstr "Rate Minimum" + +#, fuzzy +msgid "Minimum hold time" +msgstr "Memegang masa minimum" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "Mode" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Alat modem" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "Mount Point" + +msgid "Mount Points" +msgstr "Mount Points" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Mount Points menentukan di mana titik peranti memori akan melekat pada fail " +"sistem" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "" + +msgid "Mount point" +msgstr "" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Mounted fail sistems" + +msgid "Move down" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Multicast Rate" +msgstr "Multicast Rate" + +msgid "Multicast address" +msgstr "" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Nama" + +msgid "Name of the new interface" +msgstr "" + +msgid "Name of the new network" +msgstr "Nama rangkaian baru" + +msgid "Navigation" +msgstr "Navigation" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "Rangkaian" + +msgid "Network Utilities" +msgstr "" + +msgid "Network boot image" +msgstr "" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "Kemudian »" + +msgid "No DHCP Server configured for this interface" +msgstr "" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Tiada rantai dalam jadual ini" + +msgid "No files found" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "" + +msgid "No network name specified" +msgstr "" + +msgid "No package lists available" +msgstr "" + +msgid "No password set!" +msgstr "" + +msgid "No rules in this chain" +msgstr "Tidak ada peraturan dalam rantai ini" + +msgid "No zone assigned" +msgstr "" + +msgid "Noise" +msgstr "Kebisingan" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "" + +msgid "Not connected" +msgstr "" + +msgid "Note: Configuration files will be erased." +msgstr "" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "Baik" + +msgid "OPKG-Configuration" +msgstr "OPKG-Konfigurasi" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"Pada halaman ini anda boleh mengkonfigurasi antara muka rangkaian. Anda " +"boleh menjembatani beberapa antara muka dengan menanda jambatan antara muka " +"gelanggang dan masukkan beberapa nama antara muka rangkaian dipisahkan " +"dengan ruang. Anda juga boleh menggunakan antara muka VLAN notasi. Seperti " +"eth0.1." + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "" + +msgid "Open list..." +msgstr "" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "" + +msgid "Option removed" +msgstr "" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Pilihan" + +msgid "Other:" +msgstr "" + +msgid "Out" +msgstr "Keluar" + +msgid "Outbound:" +msgstr "" + +msgid "Outdoor Channels" +msgstr "Saluran Outdoor" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "Keseluruhan" + +msgid "Owner" +msgstr "Pemilik" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "" + +msgid "PPP" +msgstr "" + +msgid "PPPoA Encapsulation" +msgstr "Pengkapsulan PPPoA" + +msgid "PPPoATM" +msgstr "" + +msgid "PPPoE" +msgstr "" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Package lists are older than 24 hours" +msgstr "" + +msgid "Package name" +msgstr "Nama pakej" + +msgid "Packets" +msgstr "Paket" + +msgid "Part of zone %q" +msgstr "" + +msgid "Password" +msgstr "Kata laluan" + +msgid "Password authentication" +msgstr "Kata laluan pengesahan" + +msgid "Password of Private Key" +msgstr "Kata Laluan Kunci Swasta" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Path to CA-Certificate" +msgstr "Path ke CA-Sijil" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "Path ke Kunci Swasta" + +msgid "Path to executable which handles the button event" +msgstr "Path ke eksekusi yang mengendalikan acara butang" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Lakukan reboot" + +msgid "Perform reset" +msgstr "" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "Tetapan Fizikal" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "Pkts." + +msgid "Please enter your username and password." +msgstr "Sila masukkan username dan kata laluan anda." + +msgid "Policy" +msgstr "Dasar" + +msgid "Port" +msgstr "Port" + +msgid "Port status:" +msgstr "" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Mencegah komunikasi sesama Pelanggan" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Teruskan" + +msgid "Processes" +msgstr "Proses" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protokol" + +msgid "Protocol family" +msgstr "" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "RTS/CTS-Ambang" + +# Ein / Aus, eingehend / ausgehend? +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "Baca /etc/ethers untuk mengkonfigurasikan DHCP-Server" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "" + +msgid "Realtime Connections" +msgstr "" + +msgid "Realtime Graphs" +msgstr "" + +msgid "Realtime Load" +msgstr "" + +msgid "Realtime Traffic" +msgstr "" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "Reboot" + +msgid "Rebooting..." +msgstr "" + +msgid "Reboots the operating system of your device" +msgstr "Reboot sistem operasi peranti anda" + +msgid "Receive" +msgstr "Menerima" + +msgid "Receiver Antenna" +msgstr "Antena Penerima" + +msgid "Reconnect this interface" +msgstr "" + +msgid "Reconnecting interface" +msgstr "" + +msgid "References" +msgstr "Rujukan" + +msgid "Regulatory Domain" +msgstr "Peraturan Domain" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Menghapuskan" + +msgid "Repeat scan" +msgstr "Ulangi scan" + +msgid "Replace entry" +msgstr "Tukar entri" + +msgid "Replace wireless configuration" +msgstr "" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Reset" + +msgid "Reset Counters" +msgstr "Reset Loket" + +msgid "Reset to defaults" +msgstr "" + +msgid "Resolv and Hosts Files" +msgstr "" + +msgid "Resolve file" +msgstr "" + +msgid "Restart" +msgstr "" + +msgid "Restart Firewall" +msgstr "Restart Firewall" + +msgid "Restore backup" +msgstr "Kembalikan sandaran" + +msgid "Reveal/hide password" +msgstr "" + +msgid "Revert" +msgstr "Kembali" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "" + +msgid "Routes" +msgstr "Laluan" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Laluan menentukan di mana interface dan gateway host atau rangkaian tertentu " +"yang boleh dicapai." + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Simpan" + +msgid "Save & Apply" +msgstr "Simpan & Melaksanakan" + +msgid "Save & Apply" +msgstr "" + +msgid "Scan" +msgstr "Scan" + +msgid "Scheduled Tasks" +msgstr "Tugas Jadual" + +msgid "Section added" +msgstr "" + +msgid "Section removed" +msgstr "" + +msgid "See \"mount\" manpage for details" +msgstr "Rujuk \"mount\" laman manual untuk detail" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "Pisahkan Pelanggan" + +msgid "Separate WDS" +msgstr "Pisahkan WDS" + +msgid "Server Settings" +msgstr "" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "" + +msgid "Service Type" +msgstr "" + +msgid "Services" +msgstr "Perkhidmatan" + +msgid "Set up Time Synchronization" +msgstr "" + +msgid "Setup DHCP Server" +msgstr "" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "" + +msgid "Shutdown this network" +msgstr "" + +msgid "Signal" +msgstr "Isyarat" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "" + +msgid "Size" +msgstr "Saiz" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Skip" + +msgid "Skip to content" +msgstr "Skip ke kadar" + +msgid "Skip to navigation" +msgstr "Skip ke navigation" + +msgid "Slot time" +msgstr "Slot masa" + +msgid "Software" +msgstr "Perisian" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "" + +msgid "Sorry, the object you requested was not found." +msgstr "" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "" + +msgid "Source" +msgstr "Sumber" + +msgid "Source routing" +msgstr "" + +#, fuzzy +msgid "Specifies the button state to handle" +msgstr "Menentukan state butang untuk melaku" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "" + +msgid "Start" +msgstr "Mula" + +msgid "Start priority" +msgstr "" + +msgid "Startup" +msgstr "" + +msgid "Static IPv4 Routes" +msgstr "Laluan IPv4 Statik" + +msgid "Static IPv6 Routes" +msgstr "Laluan IPv6 Statik" + +msgid "Static Leases" +msgstr "Statische Einträge" + +msgid "Static Routes" +msgstr "Laluan Statik" + +msgid "Static WDS" +msgstr "" + +msgid "Static address" +msgstr "" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +msgid "Status" +msgstr "Status" + +msgid "Stop" +msgstr "" + +msgid "Strict order" +msgstr "Order Ketat" + +msgid "Submit" +msgstr "Menyerahkan" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "Beralih" + +msgid "Switch %q" +msgstr "" + +msgid "Switch %q (%s)" +msgstr "" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "" + +msgid "Sync with browser" +msgstr "" + +msgid "Synchronizing..." +msgstr "" + +msgid "System" +msgstr "Sistem" + +msgid "System Log" +msgstr "Log Sistem" + +msgid "System Properties" +msgstr "" + +msgid "System log buffer size" +msgstr "" + +msgid "TCP:" +msgstr "" + +msgid "TFTP Settings" +msgstr "" + +msgid "TFTP server root" +msgstr "" + +# same as RX +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "" + +msgid "Table" +msgstr "Meja" + +msgid "Target" +msgstr "Sasaran" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Menamatkan" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Karakter yang diizinkan adalah: A-Z, a-z, " +"0-9 dan _" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "Fail peranti memori atau partisyen, (contohnya: /dev/sda)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "Failsistem yang digunakan untuk memformat memori (contohnya: ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"Fail gambar flash telah di-upload. Berikut ini adalah checksum dan saiz fail " +"yang berdaftar, membandingkannya dengan fail gambar asli untuk memastikan " +"integriti data.
Klik butang terus di bawah untuk memulakan prosedur " +"flash." + +msgid "The following changes have been committed" +msgstr "" + +msgid "The following changes have been reverted" +msgstr "Laman berikut telah kembali" + +msgid "The following rules are currently active on this system." +msgstr "Peraturan berikut sedang aktif pada sistem ini." + +msgid "The given network name is not unique" +msgstr "" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"Sistem ini sekarang mula flash.
JANGAN TUTUP KUASA UNTUK PERANTI!
Tunggu beberapa minit sehingga anda cuba untuk menyambung kembali. Mungkin " +"anda perlu mengemas kini alamat komputer anda untuk mencapai peranti lagi, " +"bergantung pada tetapan anda." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"Format Fail gambar yang diupload tidak disokongkan. Pastikan anda memilih " +"fail format gambar yang generik untuk platform anda." + +msgid "There are no active leases." +msgstr "" + +msgid "There are no pending changes to apply!" +msgstr "" + +msgid "There are no pending changes to revert!" +msgstr "" + +msgid "There are no pending changes!" +msgstr "" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "Ini adalah DHCP hanya dalam rangkaian tempatan." + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" +"Ini adalah crontab sistem di mana tugas-tugas yang dijadualkan boleh " +"ditakrifkan." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"Senarai ini memberikan gambaran lebih pada proses sistem yang sedang " +"berjalan dan statusnya." + +msgid "This page allows the configuration of custom button actions" +msgstr "Laman ini membolehkan konfigurasi butang tindakan peribadi" + +msgid "This page gives an overview over currently active network connections." +msgstr "" +"Laman ini memberikan gambaran lebih dari saat ini sambungan rangkaian yang " +"aktif." + +msgid "This section contains no values yet" +msgstr "Bahagian ini belum mengandungi nilai-nilai lagi" + +msgid "Time Synchronization" +msgstr "" + +msgid "Time Synchronization is not configured yet." +msgstr "" + +msgid "Timezone" +msgstr "Zon masa" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "Lalu lintas" + +msgid "Transfer" +msgstr "Pemindahan" + +msgid "Transmission Rate" +msgstr "Kelajuan Penghantaran" + +msgid "Transmit" +msgstr "Pancar" + +msgid "Transmit Power" +msgstr "Daya Pancar" + +msgid "Transmitter Antenna" +msgstr "Antena Pemancar" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Mod Turbo" + +msgid "Tx-Power" +msgstr "" + +msgid "Type" +msgstr "Jenis" + +msgid "UDP:" +msgstr "" + +msgid "UMTS only" +msgstr "" + +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +msgid "USB Device" +msgstr "" + +msgid "UUID" +msgstr "" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Unknown Error, password not changed!" +msgstr "" + +msgid "Unmanaged" +msgstr "" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Perubahan yang belum disimpan" + +msgid "Unsupported protocol type." +msgstr "" + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "" + +msgid "Uploaded File" +msgstr "Uploaded Fail" + +msgid "Uptime" +msgstr "Masa Aktif" + +msgid "Use /etc/ethers" +msgstr "Guna /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "" + +msgid "Use default gateway" +msgstr "" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "Diguna" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Username" + +msgid "VC-Mux" +msgstr "" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "" + +msgid "VLANs on %q (%s)" +msgstr "" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "Versi" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "" + +msgid "WEP Shared Key" +msgstr "" + +msgid "WEP passphrase" +msgstr "" + +msgid "WMM Mode" +msgstr "WMM Mod" + +msgid "WPA passphrase" +msgstr "" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"WPA-Enkripsi memerlukan pemohan wpa (untuk mod pelanggan) atau hostapd " +"(untuk AP dan mod ad-hoc) yang akan dipasangkan." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless Adapter" +msgstr "Adapter Wayarles" + +msgid "Wireless Network" +msgstr "Rangkaian Wayarles" + +msgid "Wireless Overview" +msgstr "Gambaran keseluruhan Wayarles" + +msgid "Wireless Security" +msgstr "Keselamatan WLAN" + +msgid "Wireless is disabled or not associated" +msgstr "" + +msgid "Wireless is restarting..." +msgstr "" + +msgid "Wireless network is disabled" +msgstr "" + +msgid "Wireless network is enabled" +msgstr "" + +msgid "Wireless restarted" +msgstr "" + +msgid "Wireless shut down" +msgstr "" + +msgid "Write received DNS requests to syslog" +msgstr "" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Sokongan XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "" + +msgid "auto" +msgstr "auto" + +msgid "automatic" +msgstr "automatik" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "" + +msgid "create:" +msgstr "" + +msgid "creates a bridge over specified interface(s)" +msgstr "mencipta jambatan di antara muka tertentu" + +msgid "dB" +msgstr "" + +msgid "dBm" +msgstr "" + +msgid "disable" +msgstr "mematikan" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "fail dimana DHCP-sewa akan disimpan" + +msgid "forward" +msgstr "" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "Membantu" + +msgid "hidden" +msgstr "" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "jika target itu ialah rangkaian" + +msgid "input" +msgstr "" + +msgid "kB" +msgstr "" + +msgid "kB/s" +msgstr "" + +msgid "kbit/s" +msgstr "" + +msgid "local DNS file" +msgstr "Fail DNS tempatan" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "" + +msgid "no link" +msgstr "" + +msgid "none" +msgstr "tidak ada" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "" + +msgid "on" +msgstr "" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "unlimited" +msgstr "" + +msgid "unspecified" +msgstr "" + +msgid "unspecified -or- create:" +msgstr "Tidak dirinci -atau- buat:" + +msgid "untagged" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "« Back" +msgstr "« Kembali" diff --git a/feeds/luci/modules/luci-base/po/no/base.po b/feeds/luci/modules/luci-base/po/no/base.po new file mode 100644 index 0000000..400876d --- /dev/null +++ b/feeds/luci/modules/luci-base/po/no/base.po @@ -0,0 +1,3823 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2013-03-25 23:36+0200\n" +"Last-Translator: protx \n" +"Language: no\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d minutters vindu, %d sekunds intervall)" + +msgid "(%s available)" +msgstr "(%s Tilgjengelig)" + +msgid "(empty)" +msgstr "(tom)" + +msgid "(no interfaces attached)" +msgstr "(ingen grensesnitt tilknyttet)" + +msgid "-- Additional Field --" +msgstr "-- Tilleggs Felt --" + +msgid "-- Please choose --" +msgstr "-- Vennligst velg --" + +msgid "-- custom --" +msgstr "-- egendefinert --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "1 minutts belastning:" + +msgid "15 Minute Load:" +msgstr "15 minutters belastning:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "5 minutters belastning:" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "DNS spørre port" + +msgid "DNS server port" +msgstr "DNS server port" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"DNS servere skal følge rekkefølgen " +"i oppslagsfilen ved spørringer" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-Adresse" + +msgid "IPv4-Gateway" +msgstr "IPv4-Gateway" + +msgid "IPv4-Netmask" +msgstr "IPv4-Nettmaske" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-Adresse eller " +"Nettverk (CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-Gateway" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "LED Konfigurasjon" + +msgid "LED Name" +msgstr "LED Navn" + +msgid "MAC-Address" +msgstr "MAC-Adresse" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Maksimalt antall DHCP leier" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Maks. EDNS0 pakke størrelse" + +msgid "Max. concurrent queries" +msgstr "Maks. samtidige spørringer" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "AR Støtte" + +msgid "ARP retry threshold" +msgstr "APR terskel for nytt forsøk" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "ATM Broer" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" +"ATM Virtuell kanal " +"identifikator (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" +"ATM Virtuell plasserings " +"identifikator (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"ATM broer viser innkapslede ethernet i AAL5 forbindelser som virtuelle Linux-" +"nettverk grensesnitt, dette kan brukes sammen med DHCP eller PPP for å koble " +"seg mot en leverandørs nettverk." + +msgid "ATM device number" +msgstr "ATM enhetsnummer" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Tilgangskonsentrator" + +msgid "Access Point" +msgstr "Aksesspunkt" + +msgid "Action" +msgstr "Handling" + +msgid "Actions" +msgstr "Handlinger" + +msgid "Activate this network" +msgstr "Aktiver dette nettverket" + +msgid "Active IPv4-Routes" +msgstr "Aktive IPv4-Ruter" + +msgid "Active IPv6-Routes" +msgstr "Aktive IPv6-Ruter" + +msgid "Active Connections" +msgstr "Aktive Tilkoblinger" + +msgid "Active DHCP Leases" +msgstr "Aktive DHCP Leier" + +msgid "Active DHCPv6 Leases" +msgstr "Aktive DHCPv6 Leier" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc (Uavhengig)" + +msgid "Add" +msgstr "Legg til" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "Legg det lokale domenesuffikset til navn utgitt fra vertsfiler" + +msgid "Add new interface..." +msgstr "Legg til grensesnitt..." + +msgid "Additional Hosts files" +msgstr "Tilleggs vertsfiler" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Adresse" + +msgid "Address to access local relay bridge" +msgstr "Adresse for tilgang til lokal relébro" + +msgid "Administration" +msgstr "Administrasjon" + +msgid "Advanced Settings" +msgstr "Avanserte Innstillinger" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Varsle" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "Tillat SSH passord godkjenning" + +msgid "Allow all except listed" +msgstr "Tillat alle unntatt oppførte" + +msgid "Allow listed only" +msgstr "Tillat kun oppførte" + +msgid "Allow localhost" +msgstr "Tillat lokalvert" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "Tillat eksterne verter å koble til lokale SSH videresendt porter" + +msgid "Allow root logins with password" +msgstr "Tillat root pålogginger med passord" + +msgid "Allow the root user to login with password" +msgstr "Tillat bruker root å logge inn med passord" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "Tillat oppstrøms svar i 127.0.0.0/8 nettet, f.eks for RBL tjenester" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antenne 1" + +msgid "Antenna 2" +msgstr "Antenne 2" + +msgid "Antenna Configuration" +msgstr "Antennekonfigurasjon" + +msgid "Any zone" +msgstr "Alle soner" + +msgid "Apply" +msgstr "Bruk" + +msgid "Applying changes" +msgstr "Utfører endringer" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Tilknytt grensesnitt..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Tilkoblede Klienter" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Atheros 802.11%s Trådløs Kontroller" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Godkjenning" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Autoritativ" + +msgid "Authorization Required" +msgstr "Autorisasjon er nødvendig" + +msgid "Auto Refresh" +msgstr "Automatisk oppdatering" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Tilgjengelig" + +msgid "Available packages" +msgstr "Tilgjengelige pakker" + +msgid "Average:" +msgstr "Gjennomsnitt:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Tilbake" + +msgid "Back to Overview" +msgstr "Tilbake til oversikt" + +msgid "Back to configuration" +msgstr "Tilbake til konfigurasjon" + +msgid "Back to overview" +msgstr "Tilbake til oversikt" + +msgid "Back to scan results" +msgstr "Tilbake til skanne resultat" + +msgid "Background Scan" +msgstr "Bakgrunns Skanning" + +msgid "Backup / Flash Firmware" +msgstr "Sikkerhetskopiering/Firmware oppgradering" + +msgid "Backup / Restore" +msgstr "Sikkerhetskopi/Gjenoppretting" + +msgid "Backup file list" +msgstr "Sikkerhetskopier filliste" + +msgid "Bad address specified!" +msgstr "Ugyldig adresse oppgitt!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Nedenfor er listen med filer som blir sikkerthetskopiert. Listen består av " +"konfigurasjonsfiler som er merket av opkg, essensielle enhets filer og andre " +"filer valgt av bruker." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Bogus NX Domain Override" +msgstr "Overstyr falske NX Domener" + +msgid "Bridge" +msgstr "Bro" + +msgid "Bridge interfaces" +msgstr "Sammenkoble grensesnitt" + +msgid "Bridge unit number" +msgstr "Bro enhetsnummer" + +msgid "Bring up on boot" +msgstr "Slå på ved oppstart" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Broadcom 802.11%s Trådløs Kontroller" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Broadcom BCM%04x 802.11 Trådløs Kontroller" + +msgid "Buffered" +msgstr "Bufret" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Knapper" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "CPU forbruk (%)" + +msgid "Cancel" +msgstr "Avbryt" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Lenke" + +msgid "Changes" +msgstr "Endringer" + +msgid "Changes applied." +msgstr "Endringer utført." + +msgid "Changes the administrator password for accessing the device" +msgstr "Endrer administrator passordet for tilgang til enheten" + +msgid "Channel" +msgstr "Kanal" + +msgid "Check" +msgstr "Kontroller" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Kontrollsum" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Velg brannmur sonen du ønsker å knytte til dette grensesnittet. Velg " +"uspesifisert for å fjerne grensesnittet fra den tilknyttede sonen. " +"Eller fyll ut Opprett feltet for å definere en ny sone og tilknytte " +"grensesnittet til det." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Velg det eller de nettverk du vil legge til dette trådløse grensesnittet, " +"eller fyll ut Opprett feltet for å definere et nytt nettverk." + +msgid "Cipher" +msgstr "Krypteringsmetode" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Klikk \"Opprett arkiv\" for å laste ned et tar arkiv av de gjeldende " +"konfigurasjons filer. For å nullstille firmwaren til opprinnelig tilstand, " +"klikker du på \"Utfør nullstilling\" (kun mulig på squashfs firmwarer)." + +msgid "Client" +msgstr "Klient" + +msgid "Client ID to send when requesting DHCP" +msgstr "Klient ID som sendes ved DHCP spørring" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Lukk inaktiver tilkoblinger etter angitt antall sekunder, bruk 0 for en " +"kontinuerlig tilkobling" + +msgid "Close list..." +msgstr "Lukk liste..." + +msgid "Collecting data..." +msgstr "Henter data..." + +msgid "Command" +msgstr "Kommando" + +msgid "Common Configuration" +msgstr "Vanlige Innstillinger" + +msgid "Compression" +msgstr "Komprimering" + +msgid "Configuration" +msgstr "Konfigurasjon" + +msgid "Configuration applied." +msgstr "Konfigurasjons endring utført." + +msgid "Configuration files will be kept." +msgstr "Konfigurasjonsfiler vil bli bevart." + +msgid "Confirmation" +msgstr "Bekreftelse" + +msgid "Connect" +msgstr "Koble til" + +msgid "Connected" +msgstr "Tilkoblet" + +msgid "Connection Limit" +msgstr "Tilkoblingsgrense (antall)" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Tilkoblinger" + +msgid "Country" +msgstr "Land" + +msgid "Country Code" +msgstr "Landskode" + +msgid "Cover the following interface" +msgstr "Gjelder det følgende grensesnitt" + +msgid "Cover the following interfaces" +msgstr "Gjelder de følgende grensesnitt" + +msgid "Create / Assign firewall-zone" +msgstr "Opprett/Tildel brannmur sone" + +msgid "Create Interface" +msgstr "Opprett Grensesnitt" + +msgid "Create a bridge over multiple interfaces" +msgstr "Opprett en bro over flere grensesnitt" + +msgid "Critical" +msgstr "Kritisk" + +msgid "Cron Log Level" +msgstr "Cron logg nivå" + +msgid "Custom Interface" +msgstr "Egendefinerte Grensesnitt" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Tilpasser oppførselen til enhetens LEDs om mulig." + +msgid "DHCP Leases" +msgstr "DHCP Leier" + +msgid "DHCP Server" +msgstr "DHCP Server" + +msgid "DHCP and DNS" +msgstr "DHCP og DNS" + +msgid "DHCP client" +msgstr "DHCP klient" + +msgid "DHCP-Options" +msgstr "DHCP-Alternativer" + +msgid "DHCPv6 Leases" +msgstr "DHCPv6 Leier" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "DNS videresendinger" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Feilsøking" + +msgid "Default %d" +msgstr "Standard %d" + +msgid "Default gateway" +msgstr "Standard gateway" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Standard tilstand" + +msgid "Define a name for this network." +msgstr "Definer et navn for dette nettverket." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Definer flere DHCP valg, f.eks \"192.168.2.1,192.168.2.2\" som " +"annonserer forskjellige DNS servere til klientene." + +msgid "Delete" +msgstr "Fjern" + +msgid "Delete this network" +msgstr "Fjern dette nettverket" + +msgid "Description" +msgstr "Beskrivelse" + +msgid "Design" +msgstr "Design" + +msgid "Destination" +msgstr "Destinasjon" + +msgid "Device" +msgstr "Enhet" + +msgid "Device Configuration" +msgstr "Enhet Konfigurasjon" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Nettverksdiagnostikk" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Katalog" + +msgid "Disable" +msgstr "Deaktiver" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Deaktiver DHCP " +"for dette nettverket." + +msgid "Disable DNS setup" +msgstr "Deaktiver DNS oppsett" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Deaktiver HW-Beacon timer" + +msgid "Disabled" +msgstr "Deaktivert" + +msgid "Discard upstream RFC1918 responses" +msgstr "Forkast oppstrøms RFC1918 svar" + +msgid "Displaying only packages containing" +msgstr "Viser bare pakker som inneholder" + +msgid "Distance Optimization" +msgstr "Avstand Optimalisering" + +msgid "Distance to farthest network member in meters." +msgstr "Avstand i meter til det medlem av nettverket som er lengst unna." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Antennevariasjon" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq er en kombinert DHCP-Server og DNS-" +"Fremsender for NAT " +"brannmurer" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "Ikke cache negative svar, f.eks for ikke eksisterende domener" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Ikke videresend forespørsler som ikke kan besvares med offentlige " +"navneservere" + +msgid "Do not forward reverse lookups for local networks" +msgstr "Ikke videresend reverserte oppslag for lokale nettverk" + +msgid "Do not send probe responses" +msgstr "Ikke send probe svar" + +msgid "Domain required" +msgstr "Domene kreves" + +msgid "Domain whitelist" +msgstr "Domene hviteliste" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Ikke videresend DNS-Forespørsler " +"uten DNS-Navn" + +msgid "Download and install package" +msgstr "Last ned og installer pakken" + +msgid "Download backup" +msgstr "Last ned sikkerhetskopi" + +msgid "Dropbear Instance" +msgstr "Dropbear Instans" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear tilbyr SSH-nettverks shell " +"tilgang og en integrert SCP server" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"Dynamisk DHCP" + +msgid "Dynamic tunnel" +msgstr "Dynamisk tunnel" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Dynamisk tildeling av DHCP adresser til klienter. Om deaktivert, kan en kun " +"bruke klienter med statisk leie." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "EAP-metode" + +msgid "Edit" +msgstr "Endre" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Endre dette grensesnittet" + +msgid "Edit this network" +msgstr "Endre dette nettverket" + +msgid "Emergency" +msgstr "Krisesituasjon" + +msgid "Enable" +msgstr "Aktiver" + +msgid "Enable STP" +msgstr "Aktiver STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Aktiver HE,net dynamisk endepunkt oppdatering" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Aktiver IPv6 på PPP lenke" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Aktiver Jumbo Frames gjennomgang" + +msgid "Enable NTP client" +msgstr "Aktiver NTP klient" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Aktiver TFTP server" + +msgid "Enable VLAN functionality" +msgstr "Aktiver VLAN funksjonalitet" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Aktiver 'læring' og 'aldring'" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Aktiver dette monteringspunktet" + +msgid "Enable this swap" +msgstr "Aktiver denne swapenhet" + +msgid "Enable/Disable" +msgstr "Aktiver/Deaktiver" + +msgid "Enabled" +msgstr "Aktivert" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Aktiverer Spanning Tree Protocol på denne broen" + +msgid "Encapsulation mode" +msgstr "Innkapsling modus" + +msgid "Encryption" +msgstr "Kryptering" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Sletter..." + +msgid "Error" +msgstr "Feil" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Ethernet Tilslutning" + +msgid "Ethernet Switch" +msgstr "Ethernet Svitsj" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Utvid vertsliste" + +msgid "Expires" +msgstr "Utgår" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "Utløpstid på leide adresser, minimum er 2 minutter (2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Ekstern systemlogg server" + +msgid "External system log server port" +msgstr "Ekstern systemlogg server port" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Fast Frames" + +msgid "File" +msgstr "Fil" + +msgid "Filename of the boot image advertised to clients" +msgstr "Filnavn fra boot image annonsert til klienter" + +msgid "Filesystem" +msgstr "Filsystem" + +msgid "Filter" +msgstr "Filter" + +msgid "Filter private" +msgstr "Filtrer private" + +msgid "Filter useless" +msgstr "Filtrer ubrukelige" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Finn og koble til nettverk" + +msgid "Find package" +msgstr "Finn pakke" + +msgid "Finish" +msgstr "Fullfør" + +msgid "Firewall" +msgstr "Brannmur" + +msgid "Firewall Settings" +msgstr "Brannmur Innstillinger" + +msgid "Firewall Status" +msgstr "Brannmur Status" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Firmware Versjon" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Fast kilde port for utgående DNS-spørringer" + +msgid "Flash Firmware" +msgstr "Firmware Oppradering" + +msgid "Flash image..." +msgstr "Flash firmware..." + +msgid "Flash new firmware image" +msgstr "Flash nytt firmware image" + +msgid "Flash operations" +msgstr "Flash operasjoner" + +msgid "Flashing..." +msgstr "Flasher..." + +msgid "Force" +msgstr "Bruk" + +msgid "Force CCMP (AES)" +msgstr "Bruk CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" +"Bruk DHCP i dette nettverket, selv om en annen DHCP server er oppdaget." + +msgid "Force TKIP" +msgstr "Bruk TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Bruk TKIP og CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Videresend DHCP trafikk" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Videresend kringkastingstrafikk" + +msgid "Forwarding mode" +msgstr "Videresending modus" + +msgid "Fragmentation Threshold" +msgstr "Fragmenterings Terskel" + +msgid "Frame Bursting" +msgstr "Frame Bursting" + +msgid "Free" +msgstr "Ledig" + +msgid "Free space" +msgstr "Ledig plass" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "Kun GPRS" + +msgid "Gateway" +msgstr "Gateway" + +msgid "Gateway ports" +msgstr "Gateway porter" + +msgid "General Settings" +msgstr "Generelle Innstillinger" + +msgid "General Setup" +msgstr "Generelt Oppsett" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Opprett arkiv" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Generell 802.11%s Trådløs Kontroller" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "Det oppgitte passordet var ikke korrekt, passord ble ikke endret!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Gå til passord konfigurasjon..." + +msgid "Go to relevant configuration page" +msgstr "Gå til relevant konfigurasjonen side" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "HE.net passord" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Behandler" + +msgid "Hang Up" +msgstr "Slå av" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Her kan du konfigurere grunnleggende aspekter av enheten som f.eks. dens " +"vertsnavn eller tidssone." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"Her kan du lime inn felles SSH-nøkler(en per linje), for SSH godkjenning." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Hermes 802.11b Trådløs Kontroller" + +msgid "Hide ESSID" +msgstr "Skjul ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Vertsoppføringer" + +msgid "Host expiry timeout" +msgstr "Verts utløpstid" + +msgid "Host-IP or Network" +msgstr "" +"Verts-IP eller Nettverk" + +msgid "Hostname" +msgstr "Vertsnavn" + +msgid "Hostname to send when requesting DHCP" +msgstr "Vertsnavn som sendes ved DHCP forespørsel" + +msgid "Hostnames" +msgstr "Vertsnavn" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "IP adresse" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "IPv4 Brannmur" + +msgid "IPv4 WAN Status" +msgstr "IPv4 WAN Status" + +msgid "IPv4 address" +msgstr "IPv4 adresse" + +msgid "IPv4 and IPv6" +msgstr "IPv4 og IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "IPv4 kringkasting" + +msgid "IPv4 gateway" +msgstr "IPv4 gateway" + +msgid "IPv4 netmask" +msgstr "IPv4 nettmaske" + +msgid "IPv4 only" +msgstr "Kun IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "IPv4 prefikslengde" + +msgid "IPv4-Address" +msgstr "IPv4-Adresse" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "IPv6 Brannmur" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "IPv6 WAN Status" + +msgid "IPv6 address" +msgstr "IPv6 adresse" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "IPv6 gateway" + +msgid "IPv6 only" +msgstr "Kun IPv6" + +msgid "IPv6 prefix" +msgstr "IPv6 prefiks" + +msgid "IPv6 prefix length" +msgstr "IPv6 prefikslengde" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "IPv6-Adresse" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-i-IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6-over-IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6-over-IPv4 (6til4)" + +msgid "Identity" +msgstr "Identitet" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "Hvis oppgitt vil denne enhet monteres ut fra dens UUID" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "Hvis oppgitt vil denne enheten bli montert utfra dens Volumnavn" + +msgid "If unchecked, no default route is configured" +msgstr "Dersom ikke avmerket blir ingen standard rute konfigurert" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "Dersom ikke avmerket blir de annonserte DNS server adresser ignorert" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Om ruterens fysiske minne er utilstrekkelig, ubrukte data kan midlertidig " +"gjøres om til en swap-enhet som gir deg mere tilgjengelig RAM. Vær oppmerksom på at bruk av swap er " +"mye langsommere en RAM." + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "Ignorer grensesnitt" + +msgid "Ignore resolve file" +msgstr "Ignorer oppslagsfil" + +msgid "Image" +msgstr "Firmware" + +msgid "In" +msgstr "i" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Tidsavbrudd etter innaktivitet" + +msgid "Inbound:" +msgstr "Innkommende:" + +msgid "Info" +msgstr "Informasjon" + +msgid "Initscript" +msgstr "Oppstartskript" + +msgid "Initscripts" +msgstr "Oppstartsskript" + +msgid "Install" +msgstr "Installer" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Installer pakken %q" + +msgid "Install protocol extensions..." +msgstr "Installer protokoll utvidelser..." + +msgid "Installed packages" +msgstr "Installerte pakker" + +msgid "Interface" +msgstr "Grensesnitt" + +msgid "Interface Configuration" +msgstr "Grensesnitt Konfigurasjon" + +msgid "Interface Overview" +msgstr "Grensesnitt Oversikt" + +msgid "Interface is reconnecting..." +msgstr "Grensesnittet kobler til igjen..." + +msgid "Interface is shutting down..." +msgstr "Grensesnittet slår seg av..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "Grensesnittet er ikke tilgjengelig eller er ikke tilknyttet." + +msgid "Interface reconnected" +msgstr "Grensesnittet er koblet til igjen" + +msgid "Interface shut down" +msgstr "Grensesnittet er slått av" + +msgid "Interfaces" +msgstr "Grensesnitt" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "Intern server feil" + +msgid "Invalid" +msgstr "Ugyldig" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "Ugyldig VLAN ID gitt! Bare IDer mellom %d og %d er tillatt." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "Ugyldig VLAN ID gitt! Bare unike ID'er er tillatt" + +msgid "Invalid username and/or password! Please try again." +msgstr "Ugyldig brukernavn og/eller passord! Vennligst prøv igjen." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Det virker som du prøver å flashe med en firmware som ikke passer inn i " +"flash-minnet, vennligst kontroller firmware filen!" + +msgid "Java Script required!" +msgstr "Java Script kreves!" + +msgid "Join Network" +msgstr "Koble til nettverket" + +msgid "Join Network: Wireless Scan" +msgstr "Koble til nettverk: Trådløs Skanning" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Behold innstillinger" + +msgid "Kernel Log" +msgstr "Kjerne Logg" + +msgid "Kernel Version" +msgstr "Kjerne Versjon" + +msgid "Key" +msgstr "Nøkkel" + +msgid "Key #%d" +msgstr "Nøkkel #%d" + +msgid "Kill" +msgstr "Drep" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "L2TP Server" + +msgid "LCP echo failure threshold" +msgstr "LCP ekko feil terskel" + +msgid "LCP echo interval" +msgstr "LCP ekko intervall" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Volumnavn" + +msgid "Language" +msgstr "Språk" + +msgid "Language and Style" +msgstr "Språk og Utseende" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Gyldig leietid" + +msgid "Leasefile" +msgstr "Leie-fil" + +msgid "Leasetime" +msgstr "Leietid" + +msgid "Leasetime remaining" +msgstr "Gjenværende leietid" + +msgid "Leave empty to autodetect" +msgstr "La stå tomt for automatisk oppdagelse" + +msgid "Leave empty to use the current WAN address" +msgstr "La stå tomt for å bruke gjeldene WAN adresse" + +msgid "Legend:" +msgstr "Forklaring:" + +msgid "Limit" +msgstr "Grense" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Forbindelse" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"Liste med DNS servere som " +"forespørsler blir videresendt til" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "Liste over domener hvor en tillater RFC1918 svar" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "Liste over verter som returneren falske NX domene resultater" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" +"Lytt kun på det angitte grensesnitt, om ingen er angitt lyttes det på alle" + +msgid "Listening port for inbound DNS queries" +msgstr "Lytte-port for innkommende DNS-spørring" + +msgid "Load" +msgstr "Belastning" + +msgid "Load Average" +msgstr "Belastning Gjennomsnitt" + +msgid "Loading" +msgstr "Laster" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Lokal IPv4 adresse" + +msgid "Local IPv6 address" +msgstr "Lokal IPv6 adresse" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Lokal Oppstart" + +msgid "Local Time" +msgstr "Lokal tid" + +msgid "Local domain" +msgstr "Lokalt domene" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Lokalt domene spesifikasjon. Navn som passer dette domenet blir aldri " +"videresendt, de blir kun løst av DHCP eller vertsfiler" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "Lokalt domenesuffiks lagt til DHCP navn og vertsfil oppføringer" + +msgid "Local server" +msgstr "Lokal server" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" +"Lokaliser vertsnavn avhengig av subnett hvis flere IP-adresser er " +"tilgjengelig" + +msgid "Localise queries" +msgstr "Lokalisere søk" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Logg nivå" + +msgid "Log queries" +msgstr "Logg spørringer" + +msgid "Logging" +msgstr "Logging" + +msgid "Login" +msgstr "Logg inn" + +msgid "Logout" +msgstr "Logg ut" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "Laveste leide adresse, forskjøvet fra nettverks adressen." + +msgid "MAC-Address" +msgstr "MAC-Adresse" + +msgid "MAC-Address Filter" +msgstr "MAC-Addresse Filter" + +msgid "MAC-Filter" +msgstr "MAC-Filter" + +msgid "MAC-List" +msgstr "MAC-Liste" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Maksimal hastighet" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Maksimalt antall aktive DHCP leieavtaler" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Maksimalt antall samtidige DNS spørringer" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "Maksimal tillatt størrelse på EDNS.0 UDP-pakker" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "Maksimalt antall sekunder å vente på at modemet skal bli klart" + +msgid "Maximum hold time" +msgstr "Maksimal holde tid" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "Maksimalt antall utleide adresser." + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "Minne" + +msgid "Memory usage (%)" +msgstr "Minne forbruk (%)" + +msgid "Metric" +msgstr "Metrisk" + +msgid "Minimum Rate" +msgstr "Minimum hastighet" + +msgid "Minimum hold time" +msgstr "Minimum holde tid" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Mangler protokoll utvidelse for proto %q" + +msgid "Mode" +msgstr "Modus" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Modem" + +msgid "Modem init timeout" +msgstr "Modem initiering tidsavbrudd" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "Monterings Enhet" + +msgid "Mount Point" +msgstr "Monterings Punkt" + +msgid "Mount Points" +msgstr "Monterings Punkter" + +msgid "Mount Points - Mount Entry" +msgstr "Monterings Punkter - Monterings Enhet" + +msgid "Mount Points - Swap Entry" +msgstr "Monterings Punkter - Swap Enhet" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Monterings punkter definerer hvor lagrings enheter blir tilsluttet " +"filsystemet" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Monterings alternativer" + +msgid "Mount point" +msgstr "Monterings punkt" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Monterte Filsystemer" + +msgid "Move down" +msgstr "Flytt ned" + +msgid "Move up" +msgstr "Flytt opp" + +msgid "Multicast Rate" +msgstr "Multicast hastighet" + +msgid "Multicast address" +msgstr "Multicast adresse" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "NTP server kandidater" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Navn" + +msgid "Name of the new interface" +msgstr "Navnet til det nye grensesnittet" + +msgid "Name of the new network" +msgstr "Navnet til det nye nettverket" + +msgid "Navigation" +msgstr "Navigasjon" + +msgid "Netmask" +msgstr "Nettmaske" + +msgid "Network" +msgstr "Nettverk" + +msgid "Network Utilities" +msgstr "Nettverks Verktøy" + +msgid "Network boot image" +msgstr "Nettverks boot image" + +msgid "Network without interfaces." +msgstr "Nettverk uten grensesnitt." + +msgid "Next »" +msgstr "Neste »" + +msgid "No DHCP Server configured for this interface" +msgstr "Ingen DHCP server er konfigurert for dette grensesnittet" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Ingen lenker i denne tabellen" + +msgid "No files found" +msgstr "Ingen filer funnet" + +msgid "No information available" +msgstr "Ingen informasjon tilgjengelig" + +msgid "No negative cache" +msgstr "Ingen negative cache" + +msgid "No network configured on this device" +msgstr "Ingen nettverk er konfigurert på denne enheten" + +msgid "No network name specified" +msgstr "Ingen nettverksnavn spesifisert" + +msgid "No package lists available" +msgstr "Ingen pakkelister tilgjengelig" + +msgid "No password set!" +msgstr "Ruteren er ikke passordbeskyttet!" + +msgid "No rules in this chain" +msgstr "Ingen regler i denne tabellen" + +msgid "No zone assigned" +msgstr "Ingen sone tilknyttet" + +msgid "Noise" +msgstr "Støy" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Støy:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Ingen" + +msgid "Normal" +msgstr "Normal" + +msgid "Not Found" +msgstr "Ikke funnet" + +msgid "Not associated" +msgstr "Ikke tilknyttet" + +msgid "Not connected" +msgstr "Ikke tilkoblet" + +msgid "Note: Configuration files will be erased." +msgstr "Merk: Konfigurasjonsfiler vil bli slettet" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Merk" + +msgid "Nslookup" +msgstr "Nslookup" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "OPKG-Konfigurasjon" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "Forsinkelse ved tilstand Av" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"På denne siden kan du konfigurere nettverks grensesnittet. Du kan " +"sammenkoble flere grensesnitt ved å hake av \"Sammekoble grensesnitt\" " +"feltet og skrive inn navn på grensesnittene atskilt med mellomrom. Du kan " +"også bruke VLAN betegnelse " +"INTERFACE.VLANNR (f.eks: " +"eth0.1)." + +msgid "On-State Delay" +msgstr "Forsinkelse ved tilstand -På-" + +msgid "One of hostname or mac address must be specified!" +msgstr "Enten Vertsnavn eller Mac-adresse må oppgis!" + +msgid "One or more fields contain invalid values!" +msgstr "Ett eller flere felt inneholder ugyldige verdier!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Ett eller flere obligatoriske felter har ingen verdi!" + +msgid "Open list..." +msgstr "Åpne liste..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Innstilling endret" + +msgid "Option removed" +msgstr "Innstilling fjernet" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Alternativer" + +msgid "Other:" +msgstr "Andre:" + +msgid "Out" +msgstr "Ut" + +msgid "Outbound:" +msgstr "Ugående:" + +msgid "Outdoor Channels" +msgstr "Utendørs Kanaler" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "Overstyr MAC adresse" + +msgid "Override MTU" +msgstr "Overstyr MTU" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "Overstyr gatewayen mottatt av DHCP respons" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"Overstyr nettmaske sendt til klienter. Normalt er nettmasken beregnet ut fra " +"subnettet som blir tildelt." + +msgid "Override the table used for internal routes" +msgstr "Overstyr tabellen som brukes for interne ruter" + +msgid "Overview" +msgstr "Oversikt" + +msgid "Owner" +msgstr "Eier" + +msgid "PAP/CHAP password" +msgstr "PAP/CHAP passord" + +msgid "PAP/CHAP username" +msgstr "PAP/CHAP brukernavn" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "PPPoA Innkapsling" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "Pakken libiwinfo er nødvendig!" + +msgid "Package lists are older than 24 hours" +msgstr "Pakkelistene er eldre enn 24 timer" + +msgid "Package name" +msgstr "Pakkenavn" + +msgid "Packets" +msgstr "Pakker" + +msgid "Part of zone %q" +msgstr "En del av sone %q" + +msgid "Password" +msgstr "Passord" + +msgid "Password authentication" +msgstr "Passord godkjenning" + +msgid "Password of Private Key" +msgstr "Passord for privatnøkkel" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "Passordet er endret!" + +msgid "Path to CA-Certificate" +msgstr "Sti til CA-sertifikat" + +msgid "Path to Client-Certificate" +msgstr "Sti til klient-sertifikat" + +msgid "Path to Private Key" +msgstr "Sti til privatnøkkel" + +msgid "Path to executable which handles the button event" +msgstr "Sti til program som håndterer handling ved bruk av knapp" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Maksimalt:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Omstart nå" + +msgid "Perform reset" +msgstr "Foreta nullstilling" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Phy Hastighet:" + +msgid "Physical Settings" +msgstr "Fysiske Innstillinger" + +msgid "Ping" +msgstr "Ping" + +msgid "Pkts." +msgstr "Pakker." + +msgid "Please enter your username and password." +msgstr "Skriv inn ditt brukernavn og passord." + +msgid "Policy" +msgstr "Policy" + +msgid "Port" +msgstr "Port" + +msgid "Port status:" +msgstr "Port status:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" +"Annta at peer er uten forbindelse om angitt LCP ekko feiler, bruk verdi 0 " +"for å overse feil" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Hindrer klient-til-klient kommunikasjon" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Prism2/2.5/3 802.11b Trådløs Kontroller" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Fortsett" + +msgid "Processes" +msgstr "Prosesser" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protokoll" + +msgid "Protocol family" +msgstr "Protokoll familie" + +msgid "Protocol of the new interface" +msgstr "Protokoll til det nye grensesnittet" + +msgid "Protocol support is not installed" +msgstr "Protokoll støtte er ikke installert" + +msgid "Provide NTP server" +msgstr "Funger som NTP Server" + +msgid "Provide new network" +msgstr "Lag nytt nettverk" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Kvalitet" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "RTS/CTS Terskel" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "RX Rate" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "RaLink 802.11%s Trådløs Kontroller" + +msgid "Radius-Accounting-Port" +msgstr "Radius-Accounting-Port" + +msgid "Radius-Accounting-Secret" +msgstr "Radius-Accounting-Secret" + +msgid "Radius-Accounting-Server" +msgstr "Radius-Accounting-Server" + +msgid "Radius-Authentication-Port" +msgstr "Radius-Authentication-Port" + +msgid "Radius-Authentication-Secret" +msgstr "Radius-Authentication-Secret" + +msgid "Radius-Authentication-Server" +msgstr "Radius-Authentication-Server" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Benytt /etc/ethers for å konfigurere DHCP-Server" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"Fjerne dette grensesnittet? Slettingen kan ikke omgjøres!\n" +"Du kan miste kontakten med ruteren om du er tilkoblet via dette " +"grensesnittet." + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"Fjerne dette trådløse nettverket? Slettingen kan ikke omgjøres!\n" +"Du kan miste kontakten med ruteren om du er tilkoblet via dette nettverket." + +msgid "Really reset all changes?" +msgstr "Vil du nullstille alle endringer?" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"Slå av dette nettverket ?\n" +"Du kan miste kontakten med ruteren om du er tilkoblet via dette " +"grensesnittet." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"Slå av dette grensesnittet \"%s\" ?\n" +"Du kan miste kontakten med ruteren om du er tilkoblet via dette " +"grensesnittet." + +msgid "Really switch protocol?" +msgstr "Vil du endre protokoll?" + +msgid "Realtime Connections" +msgstr "Tilkoblinger Sanntid" + +msgid "Realtime Graphs" +msgstr "Grafer i sanntid" + +msgid "Realtime Load" +msgstr "Belastning Sanntid" + +msgid "Realtime Traffic" +msgstr "Trafikk Sanntid" + +msgid "Realtime Wireless" +msgstr "Trådløst i sanntid" + +msgid "Rebind protection" +msgstr "Binde beskyttelse" + +msgid "Reboot" +msgstr "Omstart" + +msgid "Rebooting..." +msgstr "Starter på nytt..." + +msgid "Reboots the operating system of your device" +msgstr "Omstarter operativsystemet på enheten" + +msgid "Receive" +msgstr "Motta" + +msgid "Receiver Antenna" +msgstr "Mottak antenne" + +msgid "Reconnect this interface" +msgstr "Koble til igjen" + +msgid "Reconnecting interface" +msgstr "Kobler til igjen" + +msgid "References" +msgstr "Referanser" + +msgid "Regulatory Domain" +msgstr "Regulerende Domene" + +msgid "Relay" +msgstr "Relay" + +msgid "Relay Bridge" +msgstr "Relay bro" + +msgid "Relay between networks" +msgstr "Relay mellom nettverk" + +msgid "Relay bridge" +msgstr "Relay bro" + +msgid "Remote IPv4 address" +msgstr "Ekstern IPv4 adresse" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Avinstaller" + +msgid "Repeat scan" +msgstr "Skann på nytt" + +msgid "Replace entry" +msgstr "Erstatt oppføring" + +msgid "Replace wireless configuration" +msgstr "Erstatt trådløs konfigurasjon" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "Er nødvendig for noen nettleverandører, f.eks Charter med DOCSIS 3" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Nullstill" + +msgid "Reset Counters" +msgstr "Nullstill Tellere" + +msgid "Reset to defaults" +msgstr "Nullstill til standard innstilling" + +msgid "Resolv and Hosts Files" +msgstr "Oppslag og Vertsfiler" + +msgid "Resolve file" +msgstr "Oppslagsfil" + +msgid "Restart" +msgstr "Omstart" + +msgid "Restart Firewall" +msgstr "Omstart Brannmur" + +msgid "Restore backup" +msgstr "Gjenopprett sikkerhetskopi" + +msgid "Reveal/hide password" +msgstr "Vis/Skjul passord" + +msgid "Revert" +msgstr "Tilbakestill" + +msgid "Root" +msgstr "Rot" + +msgid "Root directory for files served via TFTP" +msgstr "Rot katalog for filer gitt fra TFTP" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Ruter Passord" + +msgid "Routes" +msgstr "Ruter" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Ruter, angir hvilket nettverksgrensesnitt og hvilken gateway som brukes for " +"å nå et gitt nettverk eller vert." + +msgid "Run a filesystem check before mounting the device" +msgstr "Kjør filsystem sjekk før montering av enheten" + +msgid "Run filesystem check" +msgstr "Kjør filsystem sjekk" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "SSH Tilgang" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "SSH-Nøkler" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Lagre" + +msgid "Save & Apply" +msgstr "Lagre & Aktiver" + +msgid "Save & Apply" +msgstr "Lagre & Aktiver" + +msgid "Scan" +msgstr "Skann" + +msgid "Scheduled Tasks" +msgstr "Planlagte Oppgaver" + +msgid "Section added" +msgstr "Seksjon lagt til" + +msgid "Section removed" +msgstr "Seksjon fjernet" + +msgid "See \"mount\" manpage for details" +msgstr "Se \"mount\" manpage for detaljer" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" +"Send LCP ekko forespørsler etter angitt intervall i sekunder, dette er kun " +"gjeldene dersom feilterskelen er nådd" + +msgid "Separate Clients" +msgstr "Separerte Klienter" + +msgid "Separate WDS" +msgstr "Separert WDS" + +msgid "Server Settings" +msgstr "Server Innstillinger" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Tjeneste navn" + +msgid "Service Type" +msgstr "Tjeneste type" + +msgid "Services" +msgstr "Tjenester" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Oppsett tidssynkronisering" + +msgid "Setup DHCP Server" +msgstr "Oppsett DHCP server" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "Vis gjeldende liste med sikkerhetskopifiler" + +msgid "Shutdown this interface" +msgstr "Slå av dette grensesnittet" + +msgid "Shutdown this network" +msgstr "Slå av dette nettverket" + +msgid "Signal" +msgstr "Signal" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Signal:" + +msgid "Size" +msgstr "Størrelse" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Gå videre" + +msgid "Skip to content" +msgstr "Gå til innhold" + +msgid "Skip to navigation" +msgstr "Gå til navigasjon" + +msgid "Slot time" +msgstr "Slot tid" + +msgid "Software" +msgstr "Programvare" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Noen felt er ugyldige, kan ikke lagre verdier!" + +msgid "Sorry, the object you requested was not found." +msgstr "Beklager, objektet du spurte om ble ikke funnet." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "Beklager, det oppstod en uventet feil på serveren." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"Beklager, men finner ikke støtte for 'sysupgrade', ny firmware må derfor " +"flashes manuelt. Viser til wiki for installering av firmare på forskjellige " +"enheter." + +msgid "Sort" +msgstr "Sortering" + +msgid "Source" +msgstr "Kilde" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "Spesifiserer knappens handlemønster" + +msgid "Specifies the directory the device is attached to" +msgstr "Hvor lagrings enheten blir tilsluttet filsystemet (f.eks. /mnt/sda1)" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Angir den lyttende porten for denne Dropbear instansen" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" +"Angir maksimalt antall feilede ARP forespørsler før verter ansees frakoblet" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "Angir maksimalt antall sekunder før verter ansees som frakoblet" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Angi krypteringsnøkkelen her." + +msgid "Start" +msgstr "Start" + +msgid "Start priority" +msgstr "Start prioritet" + +msgid "Startup" +msgstr "Oppstart" + +msgid "Static IPv4 Routes" +msgstr "Statiske IPv4 Ruter" + +msgid "Static IPv6 Routes" +msgstr "Statiske IPv6 Ruter" + +msgid "Static Leases" +msgstr "Statiske Leier" + +msgid "Static Routes" +msgstr "Statiske Ruter" + +msgid "Static WDS" +msgstr "Statisk WDS" + +msgid "Static address" +msgstr "Statisk adresse" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"Statisk leieavtaler brukes til å tildele faste IP adresser og symbolske " +"vertsnavn til DHCP klienter. Dette er nødvendig om grensesnittet ikke er " +"dynamisk konfigurert og kun klienter med dhcp leieavtale får IP." + +msgid "Status" +msgstr "Status" + +msgid "Stop" +msgstr "Stop" + +msgid "Strict order" +msgstr "Streng overholdelse" + +msgid "Submit" +msgstr "Send" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Swap Enhet" + +msgid "Switch" +msgstr "Svitsj" + +msgid "Switch %q" +msgstr "Svitsj %q" + +msgid "Switch %q (%s)" +msgstr "Svitsj %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Svitsj protokoll" + +msgid "Sync with browser" +msgstr "Synkroniser med nettleser" + +msgid "Synchronizing..." +msgstr "Synkroniser..." + +msgid "System" +msgstr "System" + +msgid "System Log" +msgstr "System Logg" + +msgid "System Properties" +msgstr "System Egenskaper" + +msgid "System log buffer size" +msgstr "System logg buffer størrelse" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "TFTP Innstillinger" + +msgid "TFTP server root" +msgstr "TFTP server roten" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "TX rate" + +msgid "Table" +msgstr "Tabell" + +msgid "Target" +msgstr "Mål" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Avslutte" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"Enhet Konfigurasjon seksjonen omhandler innstillingene av den " +"trådløse enheten som kanaler, sende stryke eller antenne valg. Disse " +"innstillingene er delt mellom alle definerte trådløse nettverk opprettet " +"utfra denne enhet. (om den trådløse enheten støtter mulit-SSID). Nettverks " +"innstillinger som kryptering eller kanaler er gruppert i Grensesnitt " +"Konfigurasjon." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Pakken libiwinfo-lua er ikke installert. Du må installere denne " +"pakken for å kunne konfigurerer trådløse enheter!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" +"IPv6 prefikset tilordnet mot leverandør, ender som regel med ::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Gyldige tegn er: A-Z, a-z, 0-9 og " +"_" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"Filenheten til partisjonen eller minnet (f.eks." +" /dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"Filsystemet som ble brukt til å formatere partisjonen eller minnet. (f.eks. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"Firmwaren ble lastet opp. Nedenfor er kontrollsum og filstørrelse oppført, " +"sammenlign dem med den opprinnelige filen for å sikre dataintegriteten.
Klikk \"Fortsett\" nedenfor for å starte flash prosedyren." + +msgid "The following changes have been committed" +msgstr "Følgende endringer er foretatt" + +msgid "The following changes have been reverted" +msgstr "Følgende endringer er forkastet" + +msgid "The following rules are currently active on this system." +msgstr "Følgende regler er aktiver på systemet." + +msgid "The given network name is not unique" +msgstr "Det angitte nettverksnavnet er ikke unikt" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"Maskinvaren er ikke multi-SSID kapabel og den ekisterende konfigurasjonen " +"vil bli erstattet om du fortsetter." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "Lengden IPv4 prefikset i bits, resten brukt i IPv6-adresser." + +msgid "The length of the IPv6 prefix in bits" +msgstr "Lengden på IPv6 prefikset i bits" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"Nettverks portene på ruteren kan kombineres til flere VLANs der datamaskiner kan kommunisere direkte " +"med hverandre. VLANs " +"brukes ofte for å skille ulike nettverk segmenter. Det er vanlig og ha en " +"Uplink port for tilkobling til større nettverk som internett og andre porter " +"til lokalt nettverk." + +msgid "The selected protocol needs a device assigned" +msgstr "Den valgte protokoll må ha en enhet tilknyttet" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" +"Systemet sletter konfigurasjonspartisjonen nå, enheten vil bli startet på " +"nytt når dette er utført." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"Systemet flashes nå.
IKKE SLÅ AV ENHETEN!
Vent noen minutter før " +"du prøver å koble til igjen. Det kan være nødvendig å fornye ip-adressen til " +"datamaskinen din for å nå enheten på nytt. (avhengig av innstillingene dine)" + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"Den opplastede programvaren er av et format som ikke støttes. Sørg for at du " +"velger det generelle firmware-bildet for din plattform." + +msgid "There are no active leases." +msgstr "Det er ingen aktive leieavtaler." + +msgid "There are no pending changes to apply!" +msgstr "Det finnes ingen endringer som kan utføres!" + +msgid "There are no pending changes to revert!" +msgstr "Det finnes ingen endriger å reversere!" + +msgid "There are no pending changes!" +msgstr "Det finnes ingen endringer!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"Det er ingen enhet som er tilordnet ennå, vennligst legg til en " +"nettverksenhet i \"Fysiske Innstillinger\"" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"Det er ikke satt noe passord på denne ruter. Vennligst konfigurer et " +"passord, dette beskytter webgrensesnittet og aktiverer SSH." + +msgid "This IPv4 address of the relay" +msgstr "Dette IPv4 adressen til relayet" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"Dette er en liste med 'shell glob patterns' for å matche filer og kataloger " +"som skal inkluderes under sysupgrade. Endrede filer i /etc/config/ og " +"enkelte andre konfigurasjoner blir automatisk bevart." + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"Dette er innholdet i /etc/rc.local. Her kan du legge til egne kommandoer som " +"blir startet ved slutten av boot sekvensen. (før 'exit 0')" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" +"Dette er den lokale endepunkt adressen som ble tildelt av tunnel 'broker', " +"adressen ender vanligvis med :2" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Dette er den eneste DHCP server i det lokale nettverket" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "Dette er systemets crontab, hvor planlagte oppgaver kan defineres." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" +"Dette er vanligvis adressen til nærmeste PoP som drives av tunell 'broker'" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "Denne listen gir en oversikt over kjørende prosesser og deres status." + +msgid "This page allows the configuration of custom button actions" +msgstr "" +"Denne siden gir mulighet for å definerte egne knappers handlingsmønster" + +msgid "This page gives an overview over currently active network connections." +msgstr "" +"Denne siden gir en oversikt over gjeldende aktive nettverkstilkoblinger." + +msgid "This section contains no values yet" +msgstr "Denne seksjonen inneholder ennå ingen verdier" + +msgid "Time Synchronization" +msgstr "Tidssynkronisering" + +msgid "Time Synchronization is not configured yet." +msgstr "Tiden Synkroniseringen er ikke konfigurert ennå." + +msgid "Timezone" +msgstr "Tidssone" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"For å gjenopprette konfigurasjonsfiler, kan du her laste opp et backup arkiv " +"som ble opprettet tidligere." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Totalt Tilgjengelig" + +msgid "Traceroute" +msgstr "Traceroute" + +msgid "Traffic" +msgstr "Trafikk" + +msgid "Transfer" +msgstr "Overføring" + +msgid "Transmission Rate" +msgstr "Overførings rate" + +msgid "Transmit" +msgstr "Sende" + +msgid "Transmit Power" +msgstr "Sende styrke" + +msgid "Transmitter Antenna" +msgstr "Sende Antenne" + +msgid "Trigger" +msgstr "Utløser" + +msgid "Trigger Mode" +msgstr "Utløsende Tilstand" + +msgid "Tunnel ID" +msgstr "Tunnel ID" + +msgid "Tunnel Interface" +msgstr "Tunnel grensesnitt" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Turbo Modus" + +msgid "Tx-Power" +msgstr "Tx-Styrke" + +msgid "Type" +msgstr "Type" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "Kun UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "USB Enhet" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "Kan ikke sende" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Ukjent" + +msgid "Unknown Error, password not changed!" +msgstr "Ukjent feil, passordet ble ikke endret!" + +msgid "Unmanaged" +msgstr "Uhåndtert" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Ulagrede Endringer" + +msgid "Unsupported protocol type." +msgstr "Protokoll type er ikke støttet." + +msgid "Update lists" +msgstr "Oppdater lister" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"Last her opp en sysupgrade-kompatibel firmware som skal erstatte den " +"kjørende firmware. Merk av \"Behold innstillinger\" for å beholde gjeldene " +"konfigurasjon. (en kompatibel firmware er nødvendig)" + +msgid "Upload archive..." +msgstr "Last opp arkiv..." + +msgid "Uploaded File" +msgstr "Opplastet Fil" + +msgid "Uptime" +msgstr "Oppetid" + +msgid "Use /etc/ethers" +msgstr "Bruk /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Bruk DHCP gateway" + +msgid "Use DNS servers advertised by peer" +msgstr "Bruk DNS servere annonsert av peer" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "Bruk ISO/IEC 3166 alpha2 landskoder." + +msgid "Use MTU on tunnel interface" +msgstr "Bruk MTU på tunnel grensesnitt" + +msgid "Use TTL on tunnel interface" +msgstr "Bruk TTL på tunnel grensesnitt" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Bruk kringkasting flagg" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Bruk egendefinerte DNS servere" + +msgid "Use default gateway" +msgstr "Bruk standard gateway" + +msgid "Use gateway metric" +msgstr "Bruk gateway metrikk" + +msgid "Use routing table" +msgstr "Bruk rutingtabellen" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"Bruk Legg til knappen får å legge til en leieavtale. MAC-" +"Adresse identifiserer verten, IPv4-Adresse angir hvilken " +"statisk IP adresse som skal brukes og Vertsnavn blir symbolsk " +"tilknyttet den anmodende verten." + +msgid "Used" +msgstr "Brukt" + +msgid "Used Key Slot" +msgstr "Brukte Nøkler" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Brukernavn" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLANs på %q" + +msgid "VLANs on %q (%s)" +msgstr "VLANs på %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "VPN server" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "Leverandør klasse som sendes ved DHCP spørring" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Bekreft" + +msgid "Version" +msgstr "Versjon" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "WEP åpent system" + +msgid "WEP Shared Key" +msgstr "WEP delt nøkkel" + +msgid "WEP passphrase" +msgstr "WEP passord" + +msgid "WMM Mode" +msgstr "WMM Modus" + +msgid "WPA passphrase" +msgstr "WPA passord" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"WPA-Kryptering krever at wpa_supplicant (for klient-modus) eller hostapd " +"(for AP og ad-hoc-modus) er installert." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "Venter på at endringer utføres..." + +msgid "Waiting for command to complete..." +msgstr "Venter på at kommando fullføres..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Advarsel" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Trådløs" + +msgid "Wireless Adapter" +msgstr "Trådløs Tilslutning" + +msgid "Wireless Network" +msgstr "Trådløst Nettverk" + +msgid "Wireless Overview" +msgstr "Trådløs Oversikt" + +msgid "Wireless Security" +msgstr "Trådløs Sikkerhet" + +msgid "Wireless is disabled or not associated" +msgstr "Trådløs er deaktiver eller ikke tilknyttet" + +msgid "Wireless is restarting..." +msgstr "Trådløst starter på nytt..." + +msgid "Wireless network is disabled" +msgstr "Trådløst nettverk er deaktivert" + +msgid "Wireless network is enabled" +msgstr "Trådløst nettverk er aktivert" + +msgid "Wireless restarted" +msgstr "Trådløst startet på nytt" + +msgid "Wireless shut down" +msgstr "Trådløst er slått av" + +msgid "Write received DNS requests to syslog" +msgstr "Skriv mottatte DNS forespørsler til syslog" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "XR Støtte" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Her kan du aktivere eller deaktivere installerte oppstartsskript. Enheten må " +"omstartes før endringene blir tatt i bruk.
Advarsel: Om du " +"deaktiverer nødvendige init skript som f.eks. \"nettverk\", kan enheten bli " +"utilgjengelig! " + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Du må aktivere Java Script i nettleseren din ellers vil ikke LuCI fungere " +"skikkelig." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "enhver" + +msgid "auto" +msgstr "auto" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "brokoblet" + +msgid "create:" +msgstr "opprett:" + +msgid "creates a bridge over specified interface(s)" +msgstr "Oppretter en bro mellom angitte grensesnitt" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "Deaktiver" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "utgått" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"filen der gitt DHCP-leier vil bli lagret" + +msgid "forward" +msgstr "videresend" + +msgid "full-duplex" +msgstr "full-dupleks" + +msgid "half-duplex" +msgstr "halv-dupleks" + +msgid "help" +msgstr "Hjelp" + +msgid "hidden" +msgstr "skjult" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "Dersom målet er et nettverk" + +msgid "input" +msgstr "inndata" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "lokal DNS-fil" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "nei" + +msgid "no link" +msgstr "ingen forbindelse" + +msgid "none" +msgstr "ingen" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "av" + +msgid "on" +msgstr "på" + +msgid "open" +msgstr "åpen" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "rutet" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "tagget" + +msgid "unknown" +msgstr "ukjent" + +msgid "unlimited" +msgstr "ubegrenset" + +msgid "unspecified" +msgstr "uspesifisert" + +msgid "unspecified -or- create:" +msgstr "uspesifisert --eller-- opprett:" + +msgid "untagged" +msgstr "utagget" + +msgid "yes" +msgstr "ja" + +msgid "« Back" +msgstr "« Tilbake" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "Et nytt nettverk vil bli opprettet hvis du tar bort haken." + +#~ msgid "Join Network: Settings" +#~ msgstr "Koble til nettverk: Innstilling" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "Port %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "Port %d er utagget i flere VLANs!" + +#~ msgid "VLAN Interface" +#~ msgstr "VLAN grensesnitt" diff --git a/feeds/luci/modules/luci-base/po/pl/base.po b/feeds/luci/modules/luci-base/po/pl/base.po new file mode 100644 index 0000000..e77a515 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/pl/base.po @@ -0,0 +1,3890 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-04-20 09:40+0200\n" +"PO-Revision-Date: 2014-04-23 19:15+0200\n" +"Last-Translator: goodgod261 \n" +"Language-Team: Polish\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(okno %d minut, interwał %d sekund)" + +msgid "(%s available)" +msgstr "(dostępne %s)" + +msgid "(empty)" +msgstr "(pusty)" + +msgid "(no interfaces attached)" +msgstr "(brak podłączonych interfejsów)" + +msgid "-- Additional Field --" +msgstr "-- Dodatkowe pole --" + +msgid "-- Please choose --" +msgstr "-- Proszę wybrać --" + +msgid "-- custom --" +msgstr "-- własne --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Obciążenie 1 min.:" + +msgid "15 Minute Load:" +msgstr "Obciążenie 15 min.:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Obciążenie 5 min.:" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "Port wywołania DNS" + +msgid "DNS server port" +msgstr "Port serwera DNS" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"Nazwa DNS będzie rozwijana przez " +"kolejne serwery w porządku podanym w resolvfile" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "Adres IPv4" + +msgid "IPv4-Gateway" +msgstr "Brama IPv4" + +msgid "IPv4-Netmask" +msgstr "Maska sieci IPv4" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"Adres sieci (CIDR) IPv6" + +msgid "IPv6-Gateway" +msgstr "Brama IPv6" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "Konfiguracja diod LED" + +msgid "LED Name" +msgstr "Nazwa diody LED" + +msgid "MAC-Address" +msgstr "Adres MAC" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Maks. dzierżaw DHCP" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Maks. rozmiar pakietu EDNS0" + +msgid "Max. concurrent queries" +msgstr "Maks. zapytań równoczesnych" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +# Wydaje mi się że brakuje litery R... +msgid "AR Support" +msgstr "Wsparcie dla ARP" + +msgid "ARP retry threshold" +msgstr "Próg powtórzeń ARP" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "Mostki ATM" + +# Nie wiem czy to powinno się tłumaczyć wg. mnie lepiej zostawić po angielsku +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "Identyfikator kanału wirtualnego ATM (VCI)" + +# j.w. +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "Identyfikator ścieżki wirtualnej ATM (VPI)" + +# Jak zwykle zakręciłem...niech ktoś poprawi +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"Mostki ATM maskują za-kapsułkowane ramki Ethernet w połączeniach AAL5 jako " +"wirtualne interfejsy w Linuksie. Interfejsy takie mogą być użyte w " +"połączeniu z protokołami DHCP lub PPP do wdzwaniania się do sieci provider`a" + +msgid "ATM device number" +msgstr "Numer urządzenia ATM" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +# co to takiego? +msgid "Access Concentrator" +msgstr "Koncentrator dostępowy ATM" + +msgid "Access Point" +msgstr "Punkt dostępowy" + +msgid "Action" +msgstr "Akcja" + +msgid "Actions" +msgstr "Akcje" + +msgid "Activate this network" +msgstr "Aktywuj tą sieć" + +msgid "Active IPv4-Routes" +msgstr "" +"Aktywne trasy routingu IPv4" + +msgid "Active IPv6-Routes" +msgstr "" +"Aktywne trasy routingu IPv6" + +msgid "Active Connections" +msgstr "Aktywne połączenia" + +msgid "Active DHCP Leases" +msgstr "Aktywne dzierżawy DHCP" + +msgid "Active DHCPv6 Leases" +msgstr "Aktywne dzierżawy DHCPv6" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Dodaj" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "Dodaj lokalny sufiks domeny do nazw urządzeń z pliku hosts" + +msgid "Add new interface..." +msgstr "Dodaj nowy interfejs..." + +msgid "Additional Hosts files" +msgstr "Dodatkowe pliki Hosts" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Adres" + +# Na upartego można by zrobić Adres dostępowy mostu przekaźnikowego - ale kto to zrozumie? +msgid "Address to access local relay bridge" +msgstr "Adres dostępowy do \"relay bridge\"" + +msgid "Administration" +msgstr "Zarządzanie" + +msgid "Advanced Settings" +msgstr "Ustawienia zaawansowane" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Alarm" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "Pozwól na logowanie SSH" + +msgid "Allow all except listed" +msgstr "Pozwól wszystkim oprócz wymienionych" + +msgid "Allow listed only" +msgstr "Pozwól tylko wymienionym" + +msgid "Allow localhost" +msgstr "Pozwól tylko sobie (localhost)" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"Pozwól zdalnym komputerom na połączenia SSH do lokalnych przekierowanych " +"portów" + +msgid "Allow root logins with password" +msgstr "Zezwól na logowanie roota przy pomocy hasła" + +# Brak spacji... +msgid "Allow the root user to login with password" +msgstr "Pozwól użytkownikowi root na logowanie przy pomocy hasła" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"Pozwól na ruch wychodzący (odpowiedzi) z podsieci 127.0.0.0/8, np. usługi RBL" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antena 1" + +msgid "Antenna 2" +msgstr "Antena 2" + +msgid "Antenna Configuration" +msgstr "Ustawienia anteny" + +msgid "Any zone" +msgstr "Dowolna strefa" + +msgid "Apply" +msgstr "Zatwierdź" + +msgid "Applying changes" +msgstr "Wprowadzam zmiany" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Przypisz interfejsy..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Połączone stacje" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Bezprzewodowy kontroler Atheros 802.11%s" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Uwierzytelnianie" + +msgid "Authentication Type" +msgstr "" + +# Nawet M$ tego nie tłumaczy;) +msgid "Authoritative" +msgstr "Autorytatywny" + +msgid "Authorization Required" +msgstr "Wymagana autoryzacja" + +msgid "Auto Refresh" +msgstr "Automatyczne odświeżanie" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Dostępne" + +msgid "Available packages" +msgstr "Dostępne pakiety" + +msgid "Average:" +msgstr "Średnia:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Wróć" + +msgid "Back to Overview" +msgstr "Wróć do przeglądu" + +msgid "Back to configuration" +msgstr "Wróć do konfiguracji" + +msgid "Back to overview" +msgstr "Wróć do przeglądu" + +msgid "Back to scan results" +msgstr "Wróć do wyników skanowania" + +msgid "Background Scan" +msgstr "Skanowanie w tle" + +msgid "Backup / Flash Firmware" +msgstr "Kopia zapasowa/aktualizacja firmware" + +# NIe ma powodu skracać tekstu, zmieści się w polu. +msgid "Backup / Restore" +msgstr "Kopia zapasowa/Przywróć" + +msgid "Backup file list" +msgstr "Kopia zapas. listy plików" + +msgid "Bad address specified!" +msgstr "Wprowadzono zły adres" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Poniżej widoczna jest lista plików przeznaczonych do kopii zapasowej. " +"Zawiera ona zmienione pliki konfiguracyjne oznaczone przez opkg, podstawowe " +"pliki systemowe, oraz pliki oznaczone do kopiowania przez użytkownika." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Przepływność" + +msgid "Bogus NX Domain Override" +msgstr "Podrób statystyki NXDOMAIN" + +msgid "Bridge" +msgstr "Most" + +msgid "Bridge interfaces" +msgstr "Interfejs mostu" + +msgid "Bridge unit number" +msgstr "Numer Mostu (urządzenia)" + +# Podejrzewam że chodzi o interfejs? mam rację? +msgid "Bring up on boot" +msgstr "Podnieś przy stracie" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Bezprzewodowy kontroler Broadcom 802.11%s" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Bezprzewodowy kontroler Broadcom BCM%04x 802.11" + +msgid "Buffered" +msgstr "Buforowana" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Przyciski" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Użycie CPU (%)" + +msgid "Cancel" +msgstr "Anuluj" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Łańcuch" + +msgid "Changes" +msgstr "Zmiany" + +msgid "Changes applied." +msgstr "Zmiany zostały zastosowane." + +msgid "Changes the administrator password for accessing the device" +msgstr "Zmienia hasło administratora" + +msgid "Channel" +msgstr "Kanał" + +msgid "Check" +msgstr "Sprawdź" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Suma kontrolna" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Wybierz strefę firewalla którą chcesz przypisać do tego interfejsu. Wybierz " +"unspecified aby usunąć interfejs z przypisanej strefy lub wybierz " +"pole create aby zdefiniować nową strefę i przypisać ją do " +"interfejsu." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Wybierz sieć/sieci które chcesz przyłączyć do tego interfejsu " +"bezprzewodowego lub wypełnij pole utwórz aby utworzyć nową sieć." + +msgid "Cipher" +msgstr "Szyfr" + +msgid "Cisco UDP encapsulation" +msgstr "" + +# Przyciski nazywają sie "Twórz archiwum" i "Wykonaj reset" a nie Przywróć Ustawienia +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Wciśnij \"Twórz archiwum\" aby pobrać archiwum tar zawierające bieżące pliki " +"konfiguracyjne. Aby przywrócić ustawienia domyślne wciśnij \"Wykonaj reset" +"\" (możliwe tylko w przypadku obrazu squashfs)." + +msgid "Client" +msgstr "Klient" + +msgid "Client ID to send when requesting DHCP" +msgstr "Nazwa (ID) klienta do wysłania podczas negocjacji DHCP" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Zamykaj nieaktywne połączenia po określonym czasie podanym w sekundach, " +"wpisz 0 aby uzyskać stałe połączenie." + +msgid "Close list..." +msgstr "Zamknij listę..." + +msgid "Collecting data..." +msgstr "Zbieranie danych..." + +msgid "Command" +msgstr "Polecenie" + +msgid "Common Configuration" +msgstr "Konfiguracja podstawowa" + +msgid "Compression" +msgstr "Kompresja" + +msgid "Configuration" +msgstr "Konfiguracja" + +msgid "Configuration applied." +msgstr "Konfiguracja została zastosowana." + +msgid "Configuration files will be kept." +msgstr "Pliki konfiguracyjne zostaną zachowane." + +msgid "Confirmation" +msgstr "Potwierdzenie" + +msgid "Connect" +msgstr "Połącz" + +msgid "Connected" +msgstr "Połączony" + +msgid "Connection Limit" +msgstr "Limit połączeń" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Połączenia" + +msgid "Country" +msgstr "Kraj" + +msgid "Country Code" +msgstr "Kod kraju" + +# Pokrywa następujące interfejsy +msgid "Cover the following interface" +msgstr "Pokrywa następujący interfejs" + +msgid "Cover the following interfaces" +msgstr "Pokrywa następujące interfejsy" + +msgid "Create / Assign firewall-zone" +msgstr "Utwórz / Przypisz strefę firewalla" + +msgid "Create Interface" +msgstr "Utwórz interfejs" + +msgid "Create a bridge over multiple interfaces" +msgstr "Utwórz most pomiędzy wieloma interfejsami" + +msgid "Critical" +msgstr "Krytyczne" + +msgid "Cron Log Level" +msgstr "Poziom logowania Cron`a" + +msgid "Custom Interface" +msgstr "Interfejs Niestandardowy" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +# Spacji zabrało i napisy się skleiły +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Dostosuj zachowanie diod LED " +"urządzenia jeśli jest to możliwe." + +msgid "DHCP Leases" +msgstr "Dzierżawy DHCP" + +msgid "DHCP Server" +msgstr "Serwer DHCP" + +msgid "DHCP and DNS" +msgstr "DHCP i DNS" + +msgid "DHCP client" +msgstr "Klient DHCP" + +msgid "DHCP-Options" +msgstr "Opcje DHCP" + +msgid "DHCPv6 Leases" +msgstr "Dzierżawy DHCPv6" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "Przekierowania DNS" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Debug" + +msgid "Default %d" +msgstr "Domyślne %d" + +msgid "Default gateway" +msgstr "Brama domyślna" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Stan domyślny" + +msgid "Define a name for this network." +msgstr "Określ nazwę dla tej sieci." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Zdefiniuj dodatkowe opcje DHCP, np. \"6,192.168.2.1,192.168.2.2" +"\" rozgłasza domyślne serwery DNS klientom DHCP." + +msgid "Delete" +msgstr "Usuń" + +msgid "Delete this network" +msgstr "Usuń tą sieć" + +msgid "Description" +msgstr "Opis" + +# Ktoś tłumaczył bez zobaczenia tego w gui. Dotyczy zmiany motywu ten opis. +msgid "Design" +msgstr "Motyw" + +msgid "Destination" +msgstr "Przeznaczenie" + +msgid "Device" +msgstr "Urządzenie" + +msgid "Device Configuration" +msgstr "Konfiguracja urządzenia" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnostyka" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Katalog" + +msgid "Disable" +msgstr "Wyłącz" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Wyłącz DHCP na " +"tym interfejsie." + +msgid "Disable DNS setup" +msgstr "Wyłącz konfigurowanie DNS" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Wyłącz zegar HW-Beacon" + +msgid "Disabled" +msgstr "Wyłączony" + +msgid "Discard upstream RFC1918 responses" +msgstr "Odrzuć wychodzące odpowiedzi RFC1918" + +msgid "Displaying only packages containing" +msgstr "Pokazuję tylko paczki zawierające" + +msgid "Distance Optimization" +msgstr "Optymalizacja odległości" + +msgid "Distance to farthest network member in meters." +msgstr "Odległość do najdalej oddalonego członka sieci w metrach." + +msgid "Distribution feeds" +msgstr "" + +# Jak poprzednio trzymam się konwencji +msgid "Diversity" +msgstr "Wielorakość" + +# Nie wiem czy nie zamotałem ja rozumiem;) +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq jest to serwer DHCP połączony z serwerem DNS. Jest to serwer przekazujący (Fowarder) dla firewalli NAT" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "Nie cache`uj odpowiedzi negatywnych, np. nie dla bieżących domen" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Nie przekazuj zapytań które nie mogą być zrealizowane przez publiczne " +"serwery nazw" + +msgid "Do not forward reverse lookups for local networks" +msgstr "Nie przekazuj odwrotnych lookup`ów do sieci lokalnych" + +msgid "Do not send probe responses" +msgstr "Nie wysyłaj ramek probe response" + +msgid "Domain required" +msgstr "Wymagana domena" + +msgid "Domain whitelist" +msgstr "Whitelist domen (Dozwolone domeny)" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Nie przekazuj zapytań DNS bez " +"nazwy DNS'a" + +msgid "Download and install package" +msgstr "Pobierz i zainstaluj pakiet" + +msgid "Download backup" +msgstr "Pobierz kopię zapasową" + +msgid "Dropbear Instance" +msgstr "Usługa Dropbear" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear oferuje zdalny dostęp do konsoli (shell`a) poprzez swojego klienta " +"SSH oraz serwer SCP" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +# "n" brakowało... +msgid "Dynamic DHCP" +msgstr "" +"DHCP dynamiczne" + +msgid "Dynamic tunnel" +msgstr "Tunel dynamiczny" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Dynamicznie rezerwuje adresy DHCP dla klientów. Jeśli jest wyłączone tylko " +"klienci posiadający stałe dzierżawy będą obsłużeni." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "Metoda EAP" + +msgid "Edit" +msgstr "Edycja" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Edytuj ten interfejs" + +msgid "Edit this network" +msgstr "Edytuj tą sieć" + +# dosłownie nagły wypadek +msgid "Emergency" +msgstr "Zagrożenie" + +msgid "Enable" +msgstr "Włącz" + +msgid "Enable STP" +msgstr "Włącz STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Włącz dynamiczną aktualizację punktu końcowego sieci HE.net" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Włącz negocjację IPv6 na łączu PPP" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Włącz przechodzenie ramek Jumbo" + +msgid "Enable NTP client" +msgstr "Włącz klienta NTP" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Włącz serwer TFTP" + +msgid "Enable VLAN functionality" +msgstr "Włącz funkcjonalność VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Włącz uczenie się i starzenie" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Włącz ten punkt montowania" + +msgid "Enable this swap" +msgstr "Włącz ten swap" + +msgid "Enable/Disable" +msgstr "Wlącz/Wyłącz" + +msgid "Enabled" +msgstr "Włączony" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" +"Włącz protokół STP na tym " +"moście" + +# a może sposób kapsułkowania byłby lepszy? +msgid "Encapsulation mode" +msgstr "Sposób Enkapsulacji" + +msgid "Encryption" +msgstr "Szyfrowanie" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Usuwanie..." + +msgid "Error" +msgstr "Błąd" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Karta Ethernet" + +msgid "Ethernet Switch" +msgstr "Switch Ethernet" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Rozwiń hosty" + +msgid "Expires" +msgstr "Wygasa" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" +"Czas wygasania dzierżawy adresu, minimum to 2 Minuty (2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Zewnętrzny serwer dla loga systemowego" + +msgid "External system log server port" +msgstr "Port zewnętrznego serwera dla loga systemowego" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Szybkie ramki (Fast Frames)" + +msgid "File" +msgstr "Plik" + +msgid "Filename of the boot image advertised to clients" +msgstr "Rozgłoszono nazwę pliku obrazu startowego do klientów" + +msgid "Filesystem" +msgstr "System plików" + +msgid "Filter" +msgstr "Filtr" + +msgid "Filter private" +msgstr "Filtruj prywatne" + +msgid "Filter useless" +msgstr "Filtruj bezużyteczne" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Znajdź i podłącz się do sieci" + +msgid "Find package" +msgstr "Znajdź pakiet" + +msgid "Finish" +msgstr "Zakończ" + +msgid "Firewall" +msgstr "Firewall" + +# Nie ma potrzeby pisania z dużej litery +msgid "Firewall Settings" +msgstr "Ustawienia firewalla" + +msgid "Firewall Status" +msgstr "Stan firewalla" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Wersja firmware" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Stały port źródłowy dla wychodzących zapytań DNS" + +msgid "Flash Firmware" +msgstr "Aktualizuj firmware" + +msgid "Flash image..." +msgstr "Wgraj obraz..." + +msgid "Flash new firmware image" +msgstr "Wgraj nowy firmware" + +msgid "Flash operations" +msgstr "Operacje aktualizacji" + +msgid "Flashing..." +msgstr "Flashowanie..." + +msgid "Force" +msgstr "Wymuś" + +msgid "Force CCMP (AES)" +msgstr "Wymuś CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" +"Wymuś uruchomienie serwera DHCP w tej sieci nawet gdy wykryto inny serwer." + +msgid "Force TKIP" +msgstr "Wymuś TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Wymuś TKIP i CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Przekazuj ruch DHCP" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Przekazuj broadcast`y" + +msgid "Forwarding mode" +msgstr "Tryb przekazywania" + +msgid "Fragmentation Threshold" +msgstr "Próg Fragmentacji" + +msgid "Frame Bursting" +msgstr "Dzielenie ramek" + +msgid "Free" +msgstr "Wolna" + +msgid "Free space" +msgstr "Wolna przestrzeń" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "Tylko GPRS" + +msgid "Gateway" +msgstr "Brama" + +msgid "Gateway ports" +msgstr "Porty bramy" + +msgid "General Settings" +msgstr "Ustawienia główne" + +msgid "General Setup" +msgstr "Ustawienia podstawowe" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Twórz archiwum" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Ogólny bezprzewodowy kontroler 802.11%s" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" +"Hasło nie zostało zmienione, wpisane poprzednie hasło routera jest " +"niewłaściwe!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Przejdź do konfiguracji hasła..." + +msgid "Go to relevant configuration page" +msgstr "Przejdź do powiązanych ustawień" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "Hasło HE.net" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Uchwyt" + +msgid "Hang Up" +msgstr "Rozłącz" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Tutaj możesz skonfigurować podstawowe ustawienia twojego urządzenia, np. " +"nazwę hosta, strefę czasową." + +# nie ma słowa "autentykacji". Uwierzytelnianie! +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"Tutaj wklej swoje klucze publiczne SSH (po jednym w linii), dla " +"uwierzytelniania SSH" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Kontroler bezprzewodowy Hermes 802.11b" + +msgid "Hide ESSID" +msgstr "" +"Ukryj ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Wpisy PC" + +msgid "Host expiry timeout" +msgstr "Czas wygasania hosta" + +msgid "Host-IP or Network" +msgstr "IP lub sieć Hosta" + +msgid "Hostname" +msgstr "Nazwa hosta" + +msgid "Hostname to send when requesting DHCP" +msgstr "Nazwa hosta do wysłania podczas negocjacji DHCP" + +msgid "Hostnames" +msgstr "Nazwy hostów" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "Adres IP" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "Firewall IPv4" + +msgid "IPv4 WAN Status" +msgstr "Status IPv4 WAN" + +msgid "IPv4 address" +msgstr "Adres IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 oraz IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "Broadcast IPv4" + +msgid "IPv4 gateway" +msgstr "Brama IPv4" + +msgid "IPv4 netmask" +msgstr "Maska IPv4" + +msgid "IPv4 only" +msgstr "Tylko IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "Długość prefiksu IPv4" + +msgid "IPv4-Address" +msgstr "Adres IPv4" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "Firewall IPv6" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "Status WAN IPv6" + +msgid "IPv6 address" +msgstr "Adres IPv6" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "Brama IPv6" + +msgid "IPv6 only" +msgstr "Tylko IPv6" + +msgid "IPv6 prefix" +msgstr "Prefiks IPv6" + +msgid "IPv6 prefix length" +msgstr "Długość prefiksu IPv6" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "Adres IPv6" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-w-IPv4 (RFC4213)" + +# 6rd to nie "szóste", tylko IPv6 rapid deployment +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6-przez-IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6-przez-IPv4 (6to4)" + +msgid "Identity" +msgstr "Tożsamość" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" +"Jeśli podano, zainstaluj urządzenie poprzez jego UUID zamiast ustalonego węzła urządzenia" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" +"Jeśli podano, zainstaluj urządzenie poprzez nazwę partycji zamiast ustalonego węzła urządzenia" + +msgid "If unchecked, no default route is configured" +msgstr "Jeśli odznaczone, nie ma zdefiniowanej domyślnej ścieżki routingu" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "Jeśli odznaczone, rozgłoszane adresy serwerów DNS są ignorowane" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Jeśli ilość twojej pamięci fizycznej jest niewystarczająca, nieużywane " +"miejsce na dysku może być tymczasowo wykorzystane na urządzenie pliku " +"wymiany. W rezultacie większa ilość pamięci RAM będzie dostępna. Uwaga - plik wymiany jest dużo " +"wolniejszy niż pamięć RAM." + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "Ignoruj interfejs" + +msgid "Ignore resolve file" +msgstr "Ignoruj pliki resolve" + +msgid "Image" +msgstr "Obraz" + +msgid "In" +msgstr "W" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Czas bezczynności" + +msgid "Inbound:" +msgstr "Przychodzący:" + +msgid "Info" +msgstr "Info" + +msgid "Initscript" +msgstr "Skrypt startowy" + +msgid "Initscripts" +msgstr "Skrypty startowe" + +msgid "Install" +msgstr "Instaluj" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Instaluj pakiet %q" + +msgid "Install protocol extensions..." +msgstr "Instaluj rozszerzenia protokołów..." + +msgid "Installed packages" +msgstr "Zainstalowane pakiety" + +msgid "Interface" +msgstr "Interfejs" + +msgid "Interface Configuration" +msgstr "Konfiguracja Interfejsu" + +# Tam jest lista interfejsów.... +msgid "Interface Overview" +msgstr "Przegląd Interfejsów" + +msgid "Interface is reconnecting..." +msgstr "Ponowne łączenie interfejsu..." + +msgid "Interface is shutting down..." +msgstr "Interfejs jest wyłączany..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "Interfejs nie istnieje lub nie jest jeszcze podłączony." + +msgid "Interface reconnected" +msgstr "Połączono ponownie interfejs" + +msgid "Interface shut down" +msgstr "Wyłączono interfejs" + +msgid "Interfaces" +msgstr "Interfejsy" + +msgid "Internal" +msgstr "" + +# Nadużycie tagu abbr uważam za uzasadnione. +msgid "Internal Server Error" +msgstr "Wewnętrzny błąd serwera" + +msgid "Invalid" +msgstr "Niewłaściwy" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "Podano niewłaściwy ID VLAN`u! Dozwolone są tylko ID pomiędzy %d a %d." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "Podano niewłaściwy ID VLAN`u! Dozwolone są tylko unikalne ID." + +msgid "Invalid username and/or password! Please try again." +msgstr "Niewłaściwy login i/lub hasło! Spróbuj ponownie." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Wygląda na to, że próbujesz wgrać obraz większy niż twoja pamięć flash, " +"proszę sprawdź czy to właściwy obraz!" + +msgid "Java Script required!" +msgstr "Java Script jest wymagany!" + +msgid "Join Network" +msgstr "Połącz z siecią" + +msgid "Join Network: Wireless Scan" +msgstr "Przyłącz do sieci: Skanuj sieci WiFi" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Zachowaj ustawienia" + +msgid "Kernel Log" +msgstr "Log jądra" + +msgid "Kernel Version" +msgstr "Wersja jądra" + +msgid "Key" +msgstr "Klucz" + +msgid "Key #%d" +msgstr "Klucz #%d" + +msgid "Kill" +msgstr "Zabij" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "Serwer L2TP" + +msgid "LCP echo failure threshold" +msgstr "Próg błędu echa LCP" + +msgid "LCP echo interval" +msgstr "Częstotliwość echa LCP" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Oznaczenie" + +msgid "Language" +msgstr "Język" + +msgid "Language and Style" +msgstr "Wygląd i język" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Czas ważności dzierżawy" + +msgid "Leasefile" +msgstr "Plik dzierżaw" + +msgid "Leasetime" +msgstr "Czas dzierżawy" + +msgid "Leasetime remaining" +msgstr "Pozostały czas dzierżawy" + +msgid "Leave empty to autodetect" +msgstr "Pozostaw niewypełnione dla autodetekcji" + +msgid "Leave empty to use the current WAN address" +msgstr "Pozostaw niewypełnione aby użyć bieżącego adresu WAN" + +msgid "Legend:" +msgstr "Legenda:" + +msgid "Limit" +msgstr "Limit" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Połączenie aktywne" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"Lista serwerów DNS do których będą " +"przekazywane zapytania" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "Lista domen zezwalających na odpowiedzi RFC1918" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "Lista hostów które dostarczają zafałszowane wyniki NX domain" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" +"Słuchaj tylko na podanym interfejsie, lub jeśli nie podano na wszystkich" + +msgid "Listening port for inbound DNS queries" +msgstr "Port nasłuchu dla przychodzących zapytań DNS" + +msgid "Load" +msgstr "Obciążenie" + +msgid "Load Average" +msgstr "Średnie obciążenie" + +msgid "Loading" +msgstr "Ładowanie" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Lokalny adres IPv4" + +msgid "Local IPv6 address" +msgstr "Lokalny adres IPv6" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Lokalny autostart" + +msgid "Local Time" +msgstr "Czas lokalny" + +msgid "Local domain" +msgstr "Domena lokalna" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Specyfikacja domeny lokalnej. Nazwy należące do tej domeny nie są " +"przekazywane dalej ani rozwijane przez DHCP lub tylko pliki hosts" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"Przyrostek (suffiks) domeny przyłączany do nazw DHCP i wpisów w pliku hosts" + +msgid "Local server" +msgstr "Serwer lokalny" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" +"Zlokalizuj nazwę hosta w zależności od odpytującej podsieci jeśli jest " +"dostępne więcej niż jedno IP" + +msgid "Localise queries" +msgstr "Zapytania lokalizujące" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Poziom logowania" + +msgid "Log queries" +msgstr "Loguj zapytania" + +msgid "Logging" +msgstr "Logowanie" + +msgid "Login" +msgstr "Zaloguj" + +msgid "Logout" +msgstr "Wyloguj" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "Najniższy wydzierżawiony adres jako offset dla adresu sieci." + +msgid "MAC-Address" +msgstr "Adres MAC" + +msgid "MAC-Address Filter" +msgstr "Filtr adresów MAC" + +msgid "MAC-Filter" +msgstr "Filtr adresów MAC" + +msgid "MAC-List" +msgstr "Lista MAC" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Maksymalna Szybkość" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Maksymalna dozwolona liczba aktywnych dzierżaw DHCP" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Maksymalna dozwolona liczba jednoczesnych zapytań DNS" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "Maksymalny dozwolony rozmiar pakietu EDNS.0 UDP" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "Maksymalny czas podany w sekundach do pełnej gotowości modemu" + +msgid "Maximum hold time" +msgstr "Maksymalny czas podtrzymania" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "Maksymalna liczba dzierżawionych adresów." + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "Pamięć" + +msgid "Memory usage (%)" +msgstr "Użycie pamięci (%)" + +msgid "Metric" +msgstr "Metryka" + +msgid "Minimum Rate" +msgstr "Minimalna Szybkość" + +msgid "Minimum hold time" +msgstr "Minimalny czas podtrzymania" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Brakujące rozszerzenie protokołu dla protokołu %q" + +msgid "Mode" +msgstr "Tryb" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Modem" + +msgid "Modem init timeout" +msgstr "Limit czasu inicjacji modemu" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "Wpis montowania" + +msgid "Mount Point" +msgstr "Punkt montowania" + +msgid "Mount Points" +msgstr "Punkty montowania" + +msgid "Mount Points - Mount Entry" +msgstr "Punkty montowania - Wpis montownia" + +msgid "Mount Points - Swap Entry" +msgstr "Punkty montowania - Wpis Swap" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Punkty montowania definiują gdzie urządzenie pamięci zostanie podłączone do " +"systemu plików" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Opcje montowania" + +msgid "Mount point" +msgstr "Punkt montownia" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Zamontowane systemy plików" + +msgid "Move down" +msgstr "Przesuń w dół" + +msgid "Move up" +msgstr "Przesuń w górę" + +msgid "Multicast Rate" +msgstr "Szybkość Multicast`u" + +msgid "Multicast address" +msgstr "Adres Multicast`u" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "Lista serwerów NTP" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Nazwa" + +msgid "Name of the new interface" +msgstr "Nazwa nowego interfejsu" + +msgid "Name of the new network" +msgstr "Nazwa nowej sieci" + +msgid "Navigation" +msgstr "Nawigacja" + +msgid "Netmask" +msgstr "Maska sieci" + +msgid "Network" +msgstr "Sieć" + +msgid "Network Utilities" +msgstr "Narzędzia sieciowe" + +msgid "Network boot image" +msgstr "Sieciowy obraz startowy" + +msgid "Network without interfaces." +msgstr "Sieć bez interfejsów" + +msgid "Next »" +msgstr "Następna »" + +msgid "No DHCP Server configured for this interface" +msgstr "Brak skonfigurowanego serwera DHCP dla tego interfejsu" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Brak łańcuchów w tej tablicy" + +msgid "No files found" +msgstr "Nie znaleziono plików" + +msgid "No information available" +msgstr "Brak dostępnych informacji" + +msgid "No negative cache" +msgstr "Brak odwrotnego cache`a" + +msgid "No network configured on this device" +msgstr "Brak skonfigurowanych sieci na tym urządzeniu" + +msgid "No network name specified" +msgstr "Nie podano nazwy sieci" + +msgid "No package lists available" +msgstr "Brak dostępu do listy pakietów" + +msgid "No password set!" +msgstr "Nie ustawiono hasła!" + +msgid "No rules in this chain" +msgstr "Brak zasad w tym łańcuchu" + +msgid "No zone assigned" +msgstr "Brak przypisanej strefy" + +msgid "Noise" +msgstr "Szum" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Szum:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Brak" + +msgid "Normal" +msgstr "Normalny" + +msgid "Not Found" +msgstr "Nie znaleziono" + +msgid "Not associated" +msgstr "Nie powiązany" + +msgid "Not connected" +msgstr "Nie podłączony" + +msgid "Note: Configuration files will be erased." +msgstr "UWAGA: Pliki konfiguracyjne zostaną usunięte." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Spostrzeżenie" + +msgid "Nslookup" +msgstr "Nslookup" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "Konfiguracja OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "Zwłoka wyłączenia" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"Na tej stronie można skonfigurować interfejsy urządzenia. Możesz zmostkować " +"kilka interfejsów zaznaczając pole \"mostkuj interfejsy\", a następnie " +"wpisując ich nazwy oddzielone spacjami. Można także użyć notacji VLAN`ów INTERFACE.VLANNR " +"(np.: eth0.1)." + +msgid "On-State Delay" +msgstr "Zwłoka włączenia" + +msgid "One of hostname or mac address must be specified!" +msgstr "Nazwa hosta lub adres MAC musu być podany!" + +msgid "One or more fields contain invalid values!" +msgstr "Jedno lub więcej pól zawiera nieprawidłowe wartości!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Jedno lub więcej pól nie posiada wpisanych wartości!" + +msgid "Open list..." +msgstr "Otwórz listę..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Wartość zmieniona" + +msgid "Option removed" +msgstr "Usunięto wartość" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Opcje" + +msgid "Other:" +msgstr "Inne:" + +msgid "Out" +msgstr "Wychodzące" + +msgid "Outbound:" +msgstr "Wychodzący:" + +msgid "Outdoor Channels" +msgstr "Kanały zewnętrzne" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "Nadpisz adres MAC" + +msgid "Override MTU" +msgstr "Nadpisz MTU" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "Nadpisz adres bramy w odpowiedziach DHCP" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"Nadpisz maskę sieci wysyłaną do klientów. Zazwyczaj jest ona wyliczana z " +"podsieci która jest rozsyłana." + +msgid "Override the table used for internal routes" +msgstr "Nadpisz tablicę routingu używaną dla wewnętrznych tras routowania" + +msgid "Overview" +msgstr "Przegląd" + +msgid "Owner" +msgstr "Właściciel" + +msgid "PAP/CHAP password" +msgstr "Hasło PAP/CHAP" + +msgid "PAP/CHAP username" +msgstr "Nazwa użytkownika PAP/CHAP" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "Enkapsulacja PPPoA" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "Wymagany pakiet libiwinfo!" + +msgid "Package lists are older than 24 hours" +msgstr "Lista pakietów jest starsza niż 24 godziny" + +msgid "Package name" +msgstr "Nazwa pakietu" + +msgid "Packets" +msgstr "Pakiety" + +msgid "Part of zone %q" +msgstr "Część strefy %q" + +msgid "Password" +msgstr "Hasło" + +msgid "Password authentication" +msgstr "Identyfikacja hasłem" + +msgid "Password of Private Key" +msgstr "Hasło lub klucz prywatny" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "Pomyślnie zmieniono hasło!" + +msgid "Path to CA-Certificate" +msgstr "Ścieżka do certyfikatu CA" + +msgid "Path to Client-Certificate" +msgstr "Ścieżka do certyfikatu Klienta" + +msgid "Path to Private Key" +msgstr "Ścieżka do Klucza Prywatnego" + +msgid "Path to executable which handles the button event" +msgstr "" +"Ścieżka do pliku wykonywalnego, który obsługuje zdarzenie dla danego " +"przycisku" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Szczyt:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Wykonaj restart" + +msgid "Perform reset" +msgstr "Wykonaj reset" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Szybkość Phy:" + +msgid "Physical Settings" +msgstr "Ustawienia sprzętowe" + +msgid "Ping" +msgstr "Ping" + +msgid "Pkts." +msgstr "Pktw." + +msgid "Please enter your username and password." +msgstr "Proszę wprowadź swój login i hasło." + +msgid "Policy" +msgstr "Zasada" + +msgid "Port" +msgstr "Port" + +msgid "Port status:" +msgstr "Status portu:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" +"Zakładaj że klient jest martwy po danej ilości błedów odpowiedzi echa LCP, " +"wpisz 0 aby zignorować błędy" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Zapobiegaj komunikacji klientów pomiędzy sobą" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Kontroler bezprzewodowy Prism2/2.5/3 802.11b" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Wykonaj" + +msgid "Processes" +msgstr "Procesy" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protokół" + +msgid "Protocol family" +msgstr "Rodzina protokołów" + +msgid "Protocol of the new interface" +msgstr "Protokół nowego interfejsu" + +msgid "Protocol support is not installed" +msgstr "Wsparcie dla protokołu nie jest zainstalowane" + +# Opcja dotyczy włączenia serwera czasu, więc "podaj" nie jest właściwym tłumaczeniem w tym miejscu - obsy +msgid "Provide NTP server" +msgstr "Włącz serwer NTP" + +msgid "Provide new network" +msgstr "Utwórz nową sieć" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Jakość" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "Próg RTS/CTS" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "Szybkość RX" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "Kontroler bezprzewodowy RaLink 802.11%s" + +msgid "Radius-Accounting-Port" +msgstr "Port Radius-Accounting" + +msgid "Radius-Accounting-Secret" +msgstr "Sekret Radius-Accounting" + +msgid "Radius-Accounting-Server" +msgstr "Serwer Radius-Accounting" + +msgid "Radius-Authentication-Port" +msgstr "Port Radius-Authentication" + +msgid "Radius-Authentication-Secret" +msgstr "Sekret Radius-Authentication" + +msgid "Radius-Authentication-Server" +msgstr "Serwer Radius-Authentication" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Przejrzyj plik /etc/ethers aby skonfigurować serwer DHCP" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"Naprawdę usunąć ten interfejs? Usunięcie nie może zostać cofnięte!\n" +"Możesz stracić dostęp do tego urządzenia, jeśli jesteś połączony przez ten " +"interfejs!" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"Naprawdę usunąć tę sieć bezprzewodową? Usunięcie nie może zostać cofnięte!\n" +"Możesz stracić dostęp do tego urządzenia, jeśli jesteś połączony przez tę " +"sieć!" + +msgid "Really reset all changes?" +msgstr "Naprawdę usunąć wszelkie zmiany?" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"Naprawdę wyłączyć tę sieć?\n" +"Możesz stracić dostęp do tego urządzenia jeśli jesteś połączony przez ten " +"interfejs!" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"Naprawdę wyłączyć interfejs \"%s\"?\n" +"Możesz stracić dostęp do tego urządzenia jeśli jesteś połączony przez ten " +"interfejs!" + +msgid "Really switch protocol?" +msgstr "Naprawdę zmienić protokół?" + +msgid "Realtime Connections" +msgstr "Połączenia w czasie rzeczywistym" + +msgid "Realtime Graphs" +msgstr "Wykresy w czasie rzeczywistym" + +msgid "Realtime Load" +msgstr "Obciążenie w czasie rzeczywistym" + +msgid "Realtime Traffic" +msgstr "Ruch w czasie rzeczywistym" + +msgid "Realtime Wireless" +msgstr "WiFi w czasie rzeczywistym" + +msgid "Rebind protection" +msgstr "Przypisz ochronę" + +msgid "Reboot" +msgstr "Restart" + +msgid "Rebooting..." +msgstr "Ponowne uruchamianie..." + +msgid "Reboots the operating system of your device" +msgstr "Uruchamia ponownie system na twoim urządzeniu" + +msgid "Receive" +msgstr "Odebrane" + +msgid "Receiver Antenna" +msgstr "Antena odbiorcza" + +msgid "Reconnect this interface" +msgstr "Połącz ponownie ten interfejs" + +msgid "Reconnecting interface" +msgstr "Łączę ponownie interfejs" + +msgid "References" +msgstr "Referencje" + +msgid "Regulatory Domain" +msgstr "Domena regulacji" + +msgid "Relay" +msgstr "Przekaźnik" + +msgid "Relay Bridge" +msgstr "Most przekaźnikowy" + +msgid "Relay between networks" +msgstr "Przekaźnik pomiędzy sieciami" + +msgid "Relay bridge" +msgstr "Most przekaźnikowy" + +msgid "Remote IPv4 address" +msgstr "Zdalny adres IPv4" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Usuń" + +msgid "Repeat scan" +msgstr "Powtórz skanowanie" + +msgid "Replace entry" +msgstr "Zamień wpis" + +msgid "Replace wireless configuration" +msgstr "Zamień konfigurację WiFi" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "Wymagany dla niektórych dostawców internetu, np. Charter z DOCSIS 3" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Resetuj" + +msgid "Reset Counters" +msgstr "Wyczyść liczniki" + +msgid "Reset to defaults" +msgstr "Resetuj do domyślnych" + +msgid "Resolv and Hosts Files" +msgstr "Pliki Resolv i Hosts" + +msgid "Resolve file" +msgstr "Plik Resolve" + +msgid "Restart" +msgstr "Uruchom ponownie" + +msgid "Restart Firewall" +msgstr "Uruchom ponownie firewalla" + +msgid "Restore backup" +msgstr "Przywróć kopię zapasową" + +msgid "Reveal/hide password" +msgstr "Odsłoń/Ukryj hasło" + +msgid "Revert" +msgstr "Przywróć" + +msgid "Root" +msgstr "Root" + +msgid "Root directory for files served via TFTP" +msgstr "Katalog Root`a dla plików udostępnianych przez TFTP" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Hasło routera" + +msgid "Routes" +msgstr "Ścieżki routingu" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Ścieżki routingu pokazują routerowi przez który interfejs oraz którą bramę " +"może skomunikować się z daną siecią lub komputerem." + +msgid "Run a filesystem check before mounting the device" +msgstr "" +"Sprawdź czy system plików nie zawiera błędów przed zamontowaniem urządzenia" + +msgid "Run filesystem check" +msgstr "Sprawdź czy system plików nie zawiera błędów" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "Dostęp SSH" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "Klucze SSH" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Zapisz" + +msgid "Save & Apply" +msgstr "Zapisz i zastosuj" + +msgid "Save & Apply" +msgstr "Zapisz i zastosuj" + +msgid "Scan" +msgstr "Skanuj" + +# Raczej nie stosuje się kilku dużych liter w tym samym +msgid "Scheduled Tasks" +msgstr "Zaplanowane zadania" + +msgid "Section added" +msgstr "Dodano sekcję" + +msgid "Section removed" +msgstr "Usunięto sekcję" + +msgid "See \"mount\" manpage for details" +msgstr "Aby poznać szczegóły przeczytaj stronę instrukcji \"mount\"" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" +"Co podany czas (w sekundach) wyślij zapytania LCP echo, to ustawienie działa " +"tylko gdy ustawiony jest próg błędu LCP echo" + +msgid "Separate Clients" +msgstr "Rozdziel klientów" + +msgid "Separate WDS" +msgstr "Rozdziel WDS" + +msgid "Server Settings" +msgstr "Ustawienia serwera" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Nazwa serwisu" + +msgid "Service Type" +msgstr "Typ serwisu" + +msgid "Services" +msgstr "Serwisy" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Ustawienia synchronizacji czasu" + +msgid "Setup DHCP Server" +msgstr "Ustawienia serwera DHCP" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "Pokaż aktualną listę plików do backupu" + +msgid "Shutdown this interface" +msgstr "Wyłącz ten interfejs" + +msgid "Shutdown this network" +msgstr "Wyłącz tą sieć" + +msgid "Signal" +msgstr "Sygnał" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Sygnał:" + +msgid "Size" +msgstr "Rozmiar" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Pomiń" + +msgid "Skip to content" +msgstr "Pomiń do zawartości" + +msgid "Skip to navigation" +msgstr "Pomiń do nawigacji" + +msgid "Slot time" +msgstr "Szczelina czasowa" + +msgid "Software" +msgstr "Oprogramowanie" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Wartości pewnych pól są niewłaściwe, nie mogę ich zachować!" + +msgid "Sorry, the object you requested was not found." +msgstr "Przepraszamy, ale żądany obiekt nie został znaleziony." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "Przepraszamy, ale serwer napotkał nieoczekiwany błąd." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"Przepraszamy, ale nie ma wsparcia dla trybu sysupgrade. Nowy firmware musi " +"być wgrany ręcznie. Sprawdź stronę wiki, aby uzyskać instrukcję dla danego " +"urządzenia." + +msgid "Sort" +msgstr "Posortuj" + +msgid "Source" +msgstr "Źródło" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "Określa zachowanie w zależności od stanu przycisku" + +msgid "Specifies the directory the device is attached to" +msgstr "Podaje katalog do którego jest podłączone urządzenie" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Określa port nasłuchu dla tej instancji Dropbear" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" +"Określa maksymalną ilość błędów dla zapytania ARP przed założeniem, że host " +"jest martwy" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" +"Określa maksymalny czas w sekundach przed założeniem, że host jest martwy" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Określ tajny klucz szyfrowania." + +msgid "Start" +msgstr "Uruchomienie" + +msgid "Start priority" +msgstr "Priorytet uruchomienia" + +msgid "Startup" +msgstr "Autostart" + +msgid "Static IPv4 Routes" +msgstr "Statyczne ścieżki routingu IPv4" + +msgid "Static IPv6 Routes" +msgstr "Statyczne ścieżki routingu IPv6" + +msgid "Static Leases" +msgstr "Dzierżawy statyczne" + +msgid "Static Routes" +msgstr "Statyczne ścieżki routingu" + +msgid "Static WDS" +msgstr "Statyczny WDS" + +msgid "Static address" +msgstr "Stały adres" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"Statyczne dzierżawy są używane do przypisania stałych adresów IP i " +"symbolicznych nazw klientom DHCP. Są one również wymagane dla " +"niedynamicznych konfiguracji interfejsu, gdzie obsługiwane są tylko hosty z " +"odpowiednim dzierżawami." + +msgid "Status" +msgstr "Stan" + +msgid "Stop" +msgstr "Stop" + +msgid "Strict order" +msgstr "Zachowaj kolejność" + +msgid "Submit" +msgstr "Wyślij" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Zamień wpis" + +msgid "Switch" +msgstr "Przełącznik" + +msgid "Switch %q" +msgstr "Przełącznik %q" + +msgid "Switch %q (%s)" +msgstr "Przełącznik %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Protokół przełącznika" + +msgid "Sync with browser" +msgstr "Synchronizuj z przeglądarką" + +msgid "Synchronizing..." +msgstr "Synchronizacja..." + +msgid "System" +msgstr "System" + +msgid "System Log" +msgstr "Log systemowy" + +msgid "System Properties" +msgstr "Właściwości systemu" + +# Wszędzie używane jest "loga" z małej litery. +msgid "System log buffer size" +msgstr "Rozmiar bufora loga systemu" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "Ustawienia TFTP" + +msgid "TFTP server root" +msgstr "Root serwera TFTP" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "Szybkość TX" + +msgid "Table" +msgstr "Tablica" + +msgid "Target" +msgstr "Cel" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Zakończ" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"Sekcja Konfiguracja Urządzenia zawiera sprzętowe ustawienia toru " +"transmisji radiowej takie jak kanał, moc sygnału, czy wybór anteny, które to " +"są wspólne dla wszystkich zdefiniowanych sieci bezprzewodowych (jeśli tor " +"transmisji jest kompatybilny z transmisją multi-SSID). Ustawienia sieci " +"takie jak szyfrowanie lub tryb operacji są zebrane w sekcji Konfiguracja " +"Interfejsu." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Pakiet libiwinfo-lua nie jest zainstalowany. Musisz go zainstalować " +"aby WiFi prawidłowo zadziałało!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" +"Prefiks IPv6 przypisany do dostawcy, zazwyczaj kończy się ::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Dozwolone znaki to: A-Z, a-z, 0-9 " +"oraz _" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"Plik urządzenia - pamięci lub partycji (np. /dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"System plików, który został użyty do sformatowania nośnika (np. ext3)" + +# Przycisk nazywa się "Wykonaj", więc taki sam opis ma być w podpowiedzi. +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"Obraz flash`a został przesłany. Poniżej znajduje się suma kontrolna i " +"rozmiar obrazu, porównaj je z sumą kontrolną i rozmiarem oryginału, aby " +"upewnić się, że został przesłany poprawnie.
Wciśnij \"Wykonaj\" aby " +"kontynuować aktualizację." + +msgid "The following changes have been committed" +msgstr "Następujące zmiany zostały zatwierdzone" + +msgid "The following changes have been reverted" +msgstr "Następujące zmiany zostały odrzucone" + +msgid "The following rules are currently active on this system." +msgstr "Następujące zasady są obecnie aktywne w tym systemie." + +msgid "The given network name is not unique" +msgstr "Podana sieć NIE jest unikalna" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"Sprzęt nie jest urządzeniem typu multi-SSID, więc bieżąca konfiguracja " +"zostanie nadpisana nową jeśli będziesz kontynuować." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" +"Długość prefiksu IPv4 w bitach, pozostała część jest używana w adresach IPv6." + +msgid "The length of the IPv6 prefix in bits" +msgstr "Długość prefiksu IPv6 w bitach" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"Porty sieciowe na tym urządzeniu mogą być łączone w kilka sieci VLAN, w których komputery mogą " +"komunikować się ze sobą bezpośrednio. Sieci VLAN są często stosowane w celu oddzielenia różnych " +"segmentów sieci. Często domyślnie jeden port typu Uplink jest wykorzystywany " +"do połączenia z większą siecią, taką jak Internet, a inne porty dla sieci " +"lokalnej." + +msgid "The selected protocol needs a device assigned" +msgstr "Wybrany protokół potrzebuje przypisanego urządzenia" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" +"System usuwa teraz partycję konfiguracji i zrestartuje się po zakończeniu." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"System wykonuje flashowanie.
NIE WYŁĄCZAĆ URZĄDZENIA!
Poczekaj " +"kilka minut, zanim spróbujesz połączyć się ponownie. W zależności od " +"ustawień może być konieczne odnowienie adresu Twojego komputera, aby dostać " +"się do urządzenia." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"Przesłany plik obrazu nie zawiera obsługiwanego formatu. Upewnij się, że " +"wybrałeś odpowiedni format obrazu dla danej platformy." + +msgid "There are no active leases." +msgstr "Brak aktywnych dzierżaw." + +msgid "There are no pending changes to apply!" +msgstr "Brak oczekujących zmian do zastosowania!" + +msgid "There are no pending changes to revert!" +msgstr "Brak oczekujących zmian do przywrócenia!" + +msgid "There are no pending changes!" +msgstr "Brak oczekujących zmian!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"Żadne urządzenie nie jest jeszcze przypisane. Proszę dołączyć urządzenie " +"sieciowe na karcie \"Ustawienia sprzętowe\"" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"Hasło nie zostało ustawione. Proszę skonfigurować hasło roota, aby " +"zabezpieczyć interfejs WWW i włączyć SSH." + +msgid "This IPv4 address of the relay" +msgstr "Ten adres IPv4 przekaźnika" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"Jest to lista globalnych wzorców dopasowywania plików i katalogów " +"uwzględnianych podczas przeprowadzania aktualizacji z użyciem \"sysupgrade" +"\". Zmodyfikowane pliki w /etc/config/ i w niektórych innych ustawieniach są " +"automatycznie zachowywane." + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"To jest zawartość pliku /etc/rc.local. Wstaw tutaj własne komendy (przed " +"'exit 0'), aby zostały wykonane pod koniec procesu rozruchu." + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" +"To jest lokalny adres końcowy przypisany przez tunnel broker'a, zwykle " +"kończący się z :2" + +# w tłumaczeniu pojawiła się spacja po DHCP
co powoduje niepoprawne wyświetlanie się strony z lang PL +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"To jest jedyny serwer DHCP w sieci lokalnej" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" +"To jest system crontab, w którym mogą być zdefiniowane zaplanowane zadania." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" +"Zwykle jest to adres najbliższego PoP prowadzonego przez tunnel broker'a" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"Poniższa lista przedstawia aktualnie uruchomione procesy systemowe i ich " +"status." + +msgid "This page allows the configuration of custom button actions" +msgstr "" +"Poniższa strona umożliwia konfigurację działania niestandardowych przycisków" + +msgid "This page gives an overview over currently active network connections." +msgstr "Poniższa strona przedstawia aktualnie aktywne połączenia sieciowe." + +msgid "This section contains no values yet" +msgstr "Ta sekcja nie zawiera jeszcze żadnych wartości" + +msgid "Time Synchronization" +msgstr "Synchronizacja czasu" + +msgid "Time Synchronization is not configured yet." +msgstr "Synchronizacja czasu nie jest jeszcze skonfigurowana." + +msgid "Timezone" +msgstr "Strefa czasowa" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"Aby przywrócić pliki konfiguracyjne, można tutaj wczytać wcześniej utworzone " +"archiwum kopii zapasowej." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Całkowicie dostępna" + +msgid "Traceroute" +msgstr "Trasa routowania" + +msgid "Traffic" +msgstr "Ruch" + +msgid "Transfer" +msgstr "Transfer" + +msgid "Transmission Rate" +msgstr "Prędkość transmisji" + +msgid "Transmit" +msgstr "Nadawanie" + +msgid "Transmit Power" +msgstr "Siła nadawania" + +msgid "Transmitter Antenna" +msgstr "Antena nadajnika" + +msgid "Trigger" +msgstr "Trigger" + +msgid "Trigger Mode" +msgstr "Tryb Trigger" + +msgid "Tunnel ID" +msgstr "Numer identyfikacyjny tunelu" + +msgid "Tunnel Interface" +msgstr "Interfejs tunelu" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Tryb Turbo" + +msgid "Tx-Power" +msgstr "Moc nadawania" + +msgid "Type" +msgstr "Typ" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "Tylko UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "Urządzenie USB" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "Nie można wysłać" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Nieznany" + +msgid "Unknown Error, password not changed!" +msgstr "Nieznany błąd, hasło nie zostało zmienione" + +msgid "Unmanaged" +msgstr "Niezarządzalny" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Niezapisane zmiany" + +msgid "Unsupported protocol type." +msgstr "Nieobsługiwany typ protokołu." + +msgid "Update lists" +msgstr "Aktualizuj listy" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"Prześlij zgodny z funkcją sysupgrade obraz tutaj, aby zastąpić aktualnie " +"działające firmware. Zaznacz opcję \"Zachowaj ustawienia\", aby zachować " +"bieżącą konfigurację (wymaga zgodnego obrazu firmware)." + +msgid "Upload archive..." +msgstr "Załaduj archiwum..." + +msgid "Uploaded File" +msgstr "Załaduj plik" + +msgid "Uptime" +msgstr "Czas pracy" + +msgid "Use /etc/ethers" +msgstr "Użyj /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Użyj bramy DHCP" + +msgid "Use DNS servers advertised by peer" +msgstr "Użyj serwerów DNS rozgłaszanych przez peera" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "Użyj kodów kraju ISO/IEC 3166 alpha2" + +msgid "Use MTU on tunnel interface" +msgstr "Użyj MTU na interfejsie tunelu" + +msgid "Use TTL on tunnel interface" +msgstr "Użyj TTL na interfejsie tunelu" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Użyj flagi rozgłaszania" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Użyj własnych serwerów DNS" + +msgid "Use default gateway" +msgstr "Użyj domyślnej bramy" + +msgid "Use gateway metric" +msgstr "Użyj metryki bramy" + +msgid "Use routing table" +msgstr "Użyj tabeli routingu" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"Użyj przycisku Dodaj, aby dodać nowy wpis dzierżawy. Adres MAC identyfikuje hosta, Adres IPv4 określa, którego stałego adresu " +"użyć, natomiast Nazwa hosta jest przypisana jako symboliczna nazwa " +"do określonego hosta." + +# Przy liście zamontowanych systemów plików +msgid "Used" +msgstr "Użyte" + +msgid "Used Key Slot" +msgstr "Użyte gniazdo klucza" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Nazwa użytkownika" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "Sieci VLAN na %q" + +msgid "VLANs on %q (%s)" +msgstr "Sieci VLAN na %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "Serwer VPN" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "Klasa producenta do wysłania podczas żądania DHCP" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Zweryfikuj" + +msgid "Version" +msgstr "Wersja" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "Otwarty system WEP" + +msgid "WEP Shared Key" +msgstr "Współdzielony klucz WEP" + +msgid "WEP passphrase" +msgstr "Hasło WEP" + +msgid "WMM Mode" +msgstr "Tryb WMM" + +msgid "WPA passphrase" +msgstr "Hasło WPA" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"Kodowanie WPA wymaga zainstalowanych modułów wpa_supplicant (na tryb " +"klienta) lub hostapd (dla trybów AP lub ad-hoc)" + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +# obsy: Brzmi to lepiej niż "czekanie na wprowadzanie zmian. +msgid "Waiting for changes to be applied..." +msgstr "Trwa wprowadzenie zmian..." + +msgid "Waiting for command to complete..." +msgstr "Trwa wykonanie polecenia..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Ostrzeżenie" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Sieć bezprzewodowa" + +msgid "Wireless Adapter" +msgstr "Adapter bezprzewodowy" + +msgid "Wireless Network" +msgstr "Sieć bezprzewodowa" + +msgid "Wireless Overview" +msgstr "Przegląd sieci bezprzewodowych" + +msgid "Wireless Security" +msgstr "Zabezpieczenia sieci bezprzewodowych" + +msgid "Wireless is disabled or not associated" +msgstr "Sieć bezprzewodowa jest wyłączona lub niepołączona" + +msgid "Wireless is restarting..." +msgstr "Restart sieci bezprzewodowej..." + +msgid "Wireless network is disabled" +msgstr "Sieć bezprzewodowa jest wyłączona" + +msgid "Wireless network is enabled" +msgstr "Sieć bezprzewodowa jest włączona" + +msgid "Wireless restarted" +msgstr "Zrestartowano sieć bezprzewodową" + +msgid "Wireless shut down" +msgstr "Wyłączanie sieci bezprzewodowej" + +msgid "Write received DNS requests to syslog" +msgstr "Zapisz otrzymane żądania DNS do syslog'a" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Wsparcie XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Tutaj można włączyć lub wyłączyć zainstalowane skrypty. Zmiany zostaną " +"zastosowane po ponownym uruchomieniu urządzenia.
Ostrzeżenie: " +"Jeśli wyłączysz podstawowe skrypty typu \"networks\", urządzenie może stać " +"się nieosiągalne!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Musisz włączyć obsługę Java Script w swojej przeglądarce, inaczej LuCI nie " +"będzie działać poprawnie." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "dowolny" + +msgid "auto" +msgstr "auto" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "bridged" + +msgid "create:" +msgstr "utwórz:" + +msgid "creates a bridge over specified interface(s)" +msgstr "utwórz bridge na określonych interfejsach" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "wyłącz" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "wygasły" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"plik, w którym podano żądania DHCP, zostanie zachowany" + +msgid "forward" +msgstr "przekaż" + +msgid "full-duplex" +msgstr "pełny-duplex" + +msgid "half-duplex" +msgstr "pół-duplex" + +msgid "help" +msgstr "pomoc" + +msgid "hidden" +msgstr "ukryty" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "jeżeli celem jest sieć" + +msgid "input" +msgstr "wejście" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "lokalny plik DNS" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "nie" + +# skorzystałem z niemieckiego tłumaczenia +msgid "no link" +msgstr "niepowiązane" + +msgid "none" +msgstr "żaden" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "wyłączone" + +msgid "on" +msgstr "włączone" + +msgid "open" +msgstr "otwarte" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "routowane" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "tagowane" + +msgid "unknown" +msgstr "nieznane" + +msgid "unlimited" +msgstr "nielimitowane" + +msgid "unspecified" +msgstr "nieokreślone" + +msgid "unspecified -or- create:" +msgstr "nieokreślone -lub- utwórz:" + +msgid "untagged" +msgstr "nietagowane" + +msgid "yes" +msgstr "tak" + +msgid "« Back" +msgstr "« Wróć" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "" +#~ "Zostanie utworzona dodatkowa sieć jeśli zostawisz tą opcję niezaznaczoną." + +#~ msgid "Join Network: Settings" +#~ msgstr "Przyłącz do sieci: Ustawienia" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "Port %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "Port %d jest nietagowany w wielu VLAN`ach!" + +#~ msgid "VLAN Interface" +#~ msgstr "Interfejs VLAN" diff --git a/feeds/luci/modules/luci-base/po/pt-br/base.po b/feeds/luci/modules/luci-base/po/pt-br/base.po new file mode 100644 index 0000000..e33bcb2 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/pt-br/base.po @@ -0,0 +1,3894 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2014-03-29 23:31+0200\n" +"Last-Translator: Luiz Angelo \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(janela de %d minutos, intervalo de %d segundos)" + +msgid "(%s available)" +msgstr "(%s disponível)" + +msgid "(empty)" +msgstr "(vazio)" + +msgid "(no interfaces attached)" +msgstr "(nenhuma interface conectada)" + +msgid "-- Additional Field --" +msgstr "-- Campo Adicional --" + +msgid "-- Please choose --" +msgstr "-- Por favor, escolha --" + +msgid "-- custom --" +msgstr "-- personalizado --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Carga 1 Minuto:" + +msgid "15 Minute Load:" +msgstr "Carga 15 Minutos:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Carga 5 Minutos:" + +msgid "BSSID" +msgstr "" +"BSSID" + +msgid "DNS query port" +msgstr "" +"Porta de consulta DNS" + +msgid "DNS server port" +msgstr "" +"Porta do servidor DNS" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"O servidor DNS irá " +"consultar na ordem do arquivo resolvfile" + +msgid "ESSID" +msgstr "" +"ESSID" + +msgid "IPv4-Address" +msgstr "Endereço IPv4" + +msgid "IPv4-Gateway" +msgstr "Roteador IPv4" + +msgid "IPv4-Netmask" +msgstr "" +"Máscara de rede IPv4" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"Endereço do IPv6 " +"Endereço ou rede (CIDR)" + +msgid "IPv6-Gateway" +msgstr "Roteador IPv6" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "Configuração do LED" + +msgid "LED Name" +msgstr "Nome do LED" + +msgid "MAC-Address" +msgstr "Endereço MAC" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Numero máximo de alocações DHCP" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Tamanho máximo do pacote do EDNS0" + +msgid "Max. concurrent queries" +msgstr "Número máximo de consultas concorrentes" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "Suporte AR" + +msgid "ARP retry threshold" +msgstr "" +"Limite de retentativas do ARP" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "Ponte ATM" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "Identificador de Canal Virtual ATM (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "Identificador de Caminho Virtual ATM (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"Pontes ATM expõem ethernet encapsuladas em conexões AAL5 como interfaces de " +"rede virutais no Linux. Estas podem ser usadas em conjunto com o DHCP ou PPP " +"para discar em um provedor de rede." + +msgid "ATM device number" +msgstr "Número do dispositivo ATM" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Concentrador de Acesso" + +msgid "Access Point" +msgstr "Ponto de Acceso (AP)" + +msgid "Action" +msgstr "Ação" + +msgid "Actions" +msgstr "Ações" + +msgid "Activate this network" +msgstr "Ativar esta rede" + +msgid "Active IPv4-Routes" +msgstr "" +"Rotas IPv4 ativas" + +msgid "Active IPv6-Routes" +msgstr "" +"Rotas IPv6 ativas" + +msgid "Active Connections" +msgstr "Conexões Ativas" + +msgid "Active DHCP Leases" +msgstr "Alocações DHCP ativas" + +msgid "Active DHCPv6 Leases" +msgstr "Alocações DHCPv6 ativas" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Adicionar" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "Adiciona um sufixo de domínio local para equipamentos conhecidos" + +msgid "Add new interface..." +msgstr "Adiciona uma nova interface..." + +msgid "Additional Hosts files" +msgstr "Arquivos adicionais de equipamentos conhecidos (hosts)" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Endereço" + +msgid "Address to access local relay bridge" +msgstr "Endereço para acessar a ponte por retransmissão local " + +msgid "Administration" +msgstr "Administração" + +msgid "Advanced Settings" +msgstr "Opções Avançadas" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Alerta" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" +"Permitir autenticação SSH por senha" + +msgid "Allow all except listed" +msgstr "Permitir todos, exceto os listados" + +msgid "Allow listed only" +msgstr "Permitir somente os listados" + +msgid "Allow localhost" +msgstr "Permitir computador local" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"Permitir que equipamentos remotos conectem à portas locais encaminhadas por " +"SSH" + +msgid "Allow root logins with password" +msgstr "Permite autenticação do root com senha" + +msgid "Allow the root user to login with password" +msgstr "Permite que o usuário root se autentique utilizando senha" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"Permite respostas que apontem para 127.0.0.0/8 de servidores externos, por " +"exemplo, para os serviços RBL" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antena 1" + +msgid "Antenna 2" +msgstr "Antena 2" + +msgid "Antenna Configuration" +msgstr "configuração de antena" + +msgid "Any zone" +msgstr "Qualquer zona" + +msgid "Apply" +msgstr "Aplicar" + +msgid "Applying changes" +msgstr "Aplicar as alterações" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "atribuir as interfaces" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Estações associadas" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Controlador Wireless Atheros 802.11%s" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Autenticação" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Autoritário" + +msgid "Authorization Required" +msgstr "Autorização Necessária" + +msgid "Auto Refresh" +msgstr "Atualização Automática" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Disponível" + +msgid "Available packages" +msgstr "Pacotes disponíveis" + +msgid "Average:" +msgstr "Média:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Voltar" + +msgid "Back to Overview" +msgstr "Voltar para Visão Geral" + +msgid "Back to configuration" +msgstr "Voltar para configuração" + +msgid "Back to overview" +msgstr "Voltar para visão geral" + +msgid "Back to scan results" +msgstr "Voltar para os resultados da busca" + +msgid "Background Scan" +msgstr "Busca em Segundo Plano" + +msgid "Backup / Flash Firmware" +msgstr "Cópia de Segurança / Gravar Firmware" + +msgid "Backup / Restore" +msgstr "Cópia de Segurança / Restauração" + +msgid "Backup file list" +msgstr "Lista de arquivos para a cópia de segurança" + +msgid "Bad address specified!" +msgstr "Endereço especificado está incorreto!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Abaixo estão os arquivos para a cópia de segurança. Ela consiste de arquivos " +"de configuração alterados marcados pelo opkg, arquivos base essenciais e " +"padrões para a cópia de segurança definidos pelo usuário." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Taxa de bits" + +msgid "Bogus NX Domain Override" +msgstr "Substituir Domínio NX Falsos" + +msgid "Bridge" +msgstr "Ponte" + +msgid "Bridge interfaces" +msgstr "Juntar interfaces em uma ponte" + +msgid "Bridge unit number" +msgstr "Número da ponte" + +msgid "Bring up on boot" +msgstr "Levantar na iniciação" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Controlador Wireless Broadcom 802.11%s" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Broadcom BCM%04x 802.11 Wireless Controlador" + +msgid "Buffered" +msgstr "Buffered" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Botões" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Uso da CPU (%)" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Cadeia" + +msgid "Changes" +msgstr "Alterações" + +msgid "Changes applied." +msgstr "Alterações aplicadas." + +msgid "Changes the administrator password for accessing the device" +msgstr "Muda a senha do administrador para acessar este dispositivo" + +msgid "Channel" +msgstr "Canal" + +msgid "Check" +msgstr "Verificar" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Soma de verificação" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Escolha a zona do firewall que você quer definir para esta interface. " +"Selecione não especificado -ou- criar para remover a interface da " +"zona associada ou preencha o campo para criar uma nova zona associada a esta " +"interface." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Escolha a rede (s) que deseja anexar a este interface wireless ou preencha o " +" criar campo para definir uma nova rede." + +msgid "Cipher" +msgstr "Cifra" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Clique em \"Gerar arquivo\" para baixar um arquivo tar com os arquivos de " +"configuração atuais. Para retornar o roteador para o seu estado inicial, " +"clique em \"Zerar configuração\" (somente possível para imagens squashfs)." + +msgid "Client" +msgstr "Cliente" + +msgid "Client ID to send when requesting DHCP" +msgstr "" +"Identificador do cliente enviando quando a requisição do DHCP é realizada" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Feche as conexões inativas após uma dada quantidade de segundos. Use 0 para " +"manter as conexões." + +msgid "Close list..." +msgstr "Fechar a lista..." + +msgid "Collecting data..." +msgstr "Coletando dados..." + +msgid "Command" +msgstr "Comando" + +msgid "Common Configuration" +msgstr "Configuração Comum" + +msgid "Compression" +msgstr "Compressão" + +msgid "Configuration" +msgstr "Configuração" + +msgid "Configuration applied." +msgstr "Configuração aplicada." + +msgid "Configuration files will be kept." +msgstr "Os arquivos de configuração serão mantidos." + +msgid "Confirmation" +msgstr "Confirmação" + +msgid "Connect" +msgstr "Conectar" + +msgid "Connected" +msgstr "Conectado" + +msgid "Connection Limit" +msgstr "Limite de conexão" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Conexões" + +msgid "Country" +msgstr "País" + +msgid "Country Code" +msgstr "Código do País" + +msgid "Cover the following interface" +msgstr "Utilizando a seguinte interface" + +msgid "Cover the following interfaces" +msgstr "Utilizando as seguintes interfaces" + +msgid "Create / Assign firewall-zone" +msgstr "Criar / Atribuir a uma zona de firewall" + +msgid "Create Interface" +msgstr "Criar Interface" + +msgid "Create a bridge over multiple interfaces" +msgstr "Criar uma ponte juntando múltiplas interfaces" + +msgid "Critical" +msgstr "Crítico" + +msgid "Cron Log Level" +msgstr "Nível de Registro da Cron" + +msgid "Custom Interface" +msgstr "Interface Personalizada" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Se possível, personaliza o comportamento dos LEDs." + +msgid "DHCP Leases" +msgstr "Alocações do DHCP" + +msgid "DHCP Server" +msgstr "Servidor DHCP" + +msgid "DHCP and DNS" +msgstr "DHCP e DNS" + +msgid "DHCP client" +msgstr "Cliente DHCP" + +msgid "DHCP-Options" +msgstr "Opções de DHCP" + +msgid "DHCPv6 Leases" +msgstr "Alocações DHCPv6" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "Encaminhamentos DNS" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Depurar" + +msgid "Default %d" +msgstr "Padrão %d" + +msgid "Default gateway" +msgstr "Roteador Padrão" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Estado padrão" + +msgid "Define a name for this network." +msgstr "Define um nome para esta rede." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Define opções adicionais do DHCP. Por exemplo " +"\"6,192.168.2.1,192.168.2.2\" que anuncia diferentes servidores " +"DNS para os clientes." + +msgid "Delete" +msgstr "Apagar" + +msgid "Delete this network" +msgstr "Apagar esta rede" + +msgid "Description" +msgstr "Descrição" + +msgid "Design" +msgstr "Tema" + +msgid "Destination" +msgstr "Destino" + +msgid "Device" +msgstr "Dispositivo" + +msgid "Device Configuration" +msgstr "Configuração do Dispositivo" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnóstico" + +msgid "Dial number" +msgstr "Número de discagem" + +msgid "Directory" +msgstr "Diretório" + +msgid "Disable" +msgstr "Desabilitar" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Desabilita DHCP " +"para esta interface." + +msgid "Disable DNS setup" +msgstr "Desabilita a configuração do DNS" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Desativar temporizador de Beacon de Hardware" + +msgid "Disabled" +msgstr "Desabilitado" + +msgid "Discard upstream RFC1918 responses" +msgstr "" +"Descartar respostas de servidores externos para redes privadas (RFC1918)" + +msgid "Displaying only packages containing" +msgstr "Mostre somente os pacotes contendo" + +msgid "Distance Optimization" +msgstr "Otimização de Distância" + +msgid "Distance to farthest network member in meters." +msgstr "Distância para o computador mais distante da rede (em metros)." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Diversidade" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq é um servidor combinado de DHCP e DNS para firewalls NAT" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" +"Não mantenha em cache para respostas negativas como, por exemplo, para os " +"domínios inexistentes" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Não encaminhe requisições que não podem ser respondidas por servidores de " +"nomes públicos" + +msgid "Do not forward reverse lookups for local networks" +msgstr "Não encaminhe buscas por endereço reverso das redes local" + +msgid "Do not send probe responses" +msgstr "Não enviar respostas de exames" + +msgid "Domain required" +msgstr "Requerer domínio" + +msgid "Domain whitelist" +msgstr "Lista branca de domínios" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Não encaminhar consultas DNS sem o nome completo do DNS" + +msgid "Download and install package" +msgstr "Baixe e instale o pacote" + +msgid "Download backup" +msgstr "Baixar a cópia de segurança" + +msgid "Dropbear Instance" +msgstr "Dropbear" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear oferece um acesso shell seguro à rede (SSH) e um servidor SCP " +"integrado" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"DHCP " +"Dinâmico" + +msgid "Dynamic tunnel" +msgstr "Túnel dinâmico" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Aloca dinamicamente os endereços do DHCP para os clientes. Se desabilitado, " +"somente os clientes com atribuições estáticas serão servidos. " + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "Método EAP" + +msgid "Edit" +msgstr "Editar" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Editar esta interface" + +msgid "Edit this network" +msgstr "Editar esta rede" + +msgid "Emergency" +msgstr "Emergência" + +msgid "Enable" +msgstr "Ativar" + +msgid "Enable STP" +msgstr "Ativar STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Ativar a atualização de ponto final dinâmico HE.net" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Ativar a negociação de IPv6 no enlace PPP" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Ativar o encaminhamento de quadros jumbos (Jumbo Frames)" + +msgid "Enable NTP client" +msgstr "Ativar o cliente NTP" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Ativar servidor TFTP" + +msgid "Enable VLAN functionality" +msgstr "Ativar funcionalidade de VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Ativar o aprendizado e obsolescência" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Ativar esta montagem" + +msgid "Enable this swap" +msgstr "Ativar este espaço de troca (swap)" + +msgid "Enable/Disable" +msgstr "Ativar/Desativar" + +msgid "Enabled" +msgstr "Ativado" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Ativa o protocolo STP nesta ponte" + +msgid "Encapsulation mode" +msgstr "Modo de encapsulamento" + +msgid "Encryption" +msgstr "Cifragem" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Apagando..." + +msgid "Error" +msgstr "Erro" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Adaptador Ethernet" + +msgid "Ethernet Switch" +msgstr "Switch Ethernet" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Expandir arquivos de equipamentos conhecidos (hosts)" + +msgid "Expires" +msgstr "Expira" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" +"Tempo de expiração dos endereços atribuídos. Mínimo é 2 minutos (2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Servidor externo de registros do sistema (syslog)" + +msgid "External system log server port" +msgstr "Porta do servidor externo de registro do sistema (syslog)" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Quadros Rápidos" + +msgid "File" +msgstr "Arquivo" + +msgid "Filename of the boot image advertised to clients" +msgstr "Nome do arquivo da imagem de boot anunciada para os clientes" + +msgid "Filesystem" +msgstr "Sistema de Arquivos" + +msgid "Filter" +msgstr "Filtro" + +msgid "Filter private" +msgstr "Filtrar endereços privados" + +msgid "Filter useless" +msgstr "Filtrar consultas inúteis" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Procurar e conectar à rede" + +msgid "Find package" +msgstr "Procurar pacote" + +msgid "Finish" +msgstr "Terminar" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall Settings" +msgstr "Configurações do Firewall" + +msgid "Firewall Status" +msgstr "Estado do Firewall" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Versão do Firmware" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Porta de origem fixa para saída de consultas DNS" + +msgid "Flash Firmware" +msgstr "Gravar Firmware" + +msgid "Flash image..." +msgstr "Gravar imagem..." + +msgid "Flash new firmware image" +msgstr "Gravar nova imagem do firmware" + +msgid "Flash operations" +msgstr "Operações na memória flash" + +msgid "Flashing..." +msgstr "Gravando na flash..." + +msgid "Force" +msgstr "Forçar" + +msgid "Force CCMP (AES)" +msgstr "Forçar CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "Forçar o DHCP nesta rede mesmo se outro servidor for detectado." + +msgid "Force TKIP" +msgstr "Forçar TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Forçar TKIP e CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Encaminhar tráfego DHCP" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Encaminhar tráfego broadcast" + +msgid "Forwarding mode" +msgstr "Modo de encaminhamento" + +msgid "Fragmentation Threshold" +msgstr "Limiar de Fragmentação" + +msgid "Frame Bursting" +msgstr "Explosão de Quadros (Frame Bursting)" + +msgid "Free" +msgstr "Livre" + +msgid "Free space" +msgstr "Espaço livre" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "Somente GPRS" + +msgid "Gateway" +msgstr "Roteador" + +msgid "Gateway ports" +msgstr "Acesso remoto a portas encaminhadas" + +msgid "General Settings" +msgstr "Configurações Gerais" + +msgid "General Setup" +msgstr "Configurações Gerais" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Gerar arquivo" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Generico 802.11%s Wireless Controlador" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "A senha de confirmação informada não casa. Senha não alterada!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Ir para a configuração de senha..." + +msgid "Go to relevant configuration page" +msgstr "Ir para a página de configuração pertinente" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "Senha HE.net" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +# Não sei que contexto isto está sendo usado +msgid "Handler" +msgstr "Responsável" + +msgid "Hang Up" +msgstr "Suspender" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Aqui você pode configurar os aspectos básicos do seu equipamento, como o " +"nome do equipamento ou o fuso horário." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"Aqui você pode colar as chaves públicas do SSH (uma por linha) para a " +"autenticação por chaves do SSH." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Hermes 802.11b Wireless Controlador" + +msgid "Hide ESSID" +msgstr "" +"Ocultar ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Entradas de Equipamentos" + +msgid "Host expiry timeout" +msgstr "Tempo limite de expiração de equipamento" + +msgid "Host-IP or Network" +msgstr "" +"IP do Equipamento " +"ou Rede" + +msgid "Hostname" +msgstr "Nome do equipamento" + +msgid "Hostname to send when requesting DHCP" +msgstr "Nome do equipamento enviado quando requisitar DHCP" + +msgid "Hostnames" +msgstr "Nome dos equipamentos" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "Endereço IP" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "Firewall para IPv4" + +msgid "IPv4 WAN Status" +msgstr "Estado IPv4 da WAN" + +msgid "IPv4 address" +msgstr "Endereço IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "Broadcast IPv4" + +msgid "IPv4 gateway" +msgstr "Roteador padrão IPv4" + +msgid "IPv4 netmask" +msgstr "Máscara de rede IPv4" + +msgid "IPv4 only" +msgstr "Somente IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "Tamanho do prefixo IPv4" + +msgid "IPv4-Address" +msgstr "Endereço IPv4" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "Firewall para IPv6" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "Estado IPv6 da WAN" + +msgid "IPv6 address" +msgstr "Endereço IPv6" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "Roteador padrão do IPv6" + +msgid "IPv6 only" +msgstr "Somente IPv6" + +msgid "IPv6 prefix" +msgstr "Prefixo IPv6" + +msgid "IPv6 prefix length" +msgstr "Tamanho Prefixo IPv6" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "Endereço IPv6" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-in-IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6-sobre-IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6-sobre-IPv4 (6to4)" + +msgid "Identity" +msgstr "Identidade PEAP" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" +"Se especificado, monta o dispositivo pelo seu UUID ao invés de um nó de " +"dispositivo fixo" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" +"Se especificado, monta o dispositivo pela etiqueta da partiçãoo ao invés de " +"um nó de dispositivo fixo" + +msgid "If unchecked, no default route is configured" +msgstr "Se desmarcado, nenhuma rota padrão será configurada" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" +"Se desmarcado, os endereços dos servidores DNS anunciados serão ignorados" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Se a sua memória física for insuficiente, os dados não utilizados poderão " +"ser armazenados temporariamente em um dispositivo swap, resultando em uma " +"maior quantidade de memória RAM utilizável. Esteja ciente de que a troca de dados (swap) é um processo " +"muito lento, uma vez que o dispositivo swap não pode ser acessado com taxas " +"de transferência tão altas com a memória RAM." + +msgid "Ignore /etc/hosts" +msgstr "Ignorar /etc/hosts" + +msgid "Ignore interface" +msgstr "Ignorar interface" + +msgid "Ignore resolve file" +msgstr "Ignorar arquivo de resolução de nomes (resolv.conf)" + +msgid "Image" +msgstr "Imagem" + +msgid "In" +msgstr "Entrada" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Tempo limite de inatividade" + +msgid "Inbound:" +msgstr "Entrando:" + +msgid "Info" +msgstr "Informação" + +msgid "Initscript" +msgstr "Script de iniciação" + +msgid "Initscripts" +msgstr "Scripts de iniciação" + +msgid "Install" +msgstr "Instalar" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Instalar pacote %q" + +msgid "Install protocol extensions..." +msgstr "Instalar extensões de protocolo..." + +msgid "Installed packages" +msgstr "Pacotes instalados" + +msgid "Interface" +msgstr "Interface" + +msgid "Interface Configuration" +msgstr "Configuração da Interface" + +msgid "Interface Overview" +msgstr "Visão Geral da Interface" + +msgid "Interface is reconnecting..." +msgstr "A interface está reconectando..." + +msgid "Interface is shutting down..." +msgstr "A interface está desligando..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "A interface não está presente ou não está conectada ainda." + +msgid "Interface reconnected" +msgstr "Interface reconectada" + +msgid "Interface shut down" +msgstr "Interface desligada" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "erro no servidor interno" + +msgid "Invalid" +msgstr "Valor inválido" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" +"O valor informado do ID da VLAN é inválido! Somente valores entre %d e %d " +"são permitidos." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" +"O valor informado do ID da VLAN é inválido! Somente valores únicos são " +"permitidos." + +msgid "Invalid username and/or password! Please try again." +msgstr "Usuário e/ou senha inválida! Por favor, tente novamente." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"A imagem que está a tentar carregar aparenta nao caber na flash do " +"equipamento. Por favor verifique o arquivo da imagem!" + +msgid "Java Script required!" +msgstr "É necessário Java Script!" + +msgid "Join Network" +msgstr "Conectar à Rede" + +msgid "Join Network: Wireless Scan" +msgstr "Conectar à Rede: Busca por Rede Sem Fio" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Manter configurações" + +msgid "Kernel Log" +msgstr "Registo do Kernel" + +msgid "Kernel Version" +msgstr "Versão do Kernel" + +msgid "Key" +msgstr "Chave" + +msgid "Key #%d" +msgstr "Chave #%d" + +msgid "Kill" +msgstr "Matar" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "Servidor L2TP" + +msgid "LCP echo failure threshold" +msgstr "Limite de falha no eco do LCP" + +msgid "LCP echo interval" +msgstr "Intervalo do eco do LCP" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Etiqueta" + +msgid "Language" +msgstr "Idioma" + +msgid "Language and Style" +msgstr "Idioma e Estilo" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Tempo de validade da atribuição" + +msgid "Leasefile" +msgstr "Arquivo de atribuições" + +msgid "Leasetime" +msgstr "Tempo de atribuição do DHCP" + +msgid "Leasetime remaining" +msgstr "Tempo restante da atribuição" + +msgid "Leave empty to autodetect" +msgstr "Deixe vazio para detectar automaticamente" + +msgid "Leave empty to use the current WAN address" +msgstr "Deixe vazio para usar o endereço WAN atual" + +msgid "Legend:" +msgstr "Legenda:" + +msgid "Limit" +msgstr "Limite" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Enlace Ativo" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"Lista dos servidores DNS para " +"encaminhar as requisições" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" +"Lista dos domínios para os quais será permitido respostas apontando para " +"redes privadas (RFC1918)" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" +"Lista de servidores DNS que " +"fornecem resultados errados para consultas a domínios inexistentes (NX)" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" +"Escuta apenas na interface especificada. Se não especificado, escuta em todas" + +msgid "Listening port for inbound DNS queries" +msgstr "Porta de escuta para a entrada das consultas DNS" + +msgid "Load" +msgstr "Carga" + +msgid "Load Average" +msgstr "Carga Média" + +msgid "Loading" +msgstr "Carregando" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Endereço IPv4 local" + +msgid "Local IPv6 address" +msgstr "Endereço IPv6 local" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Iniciação Local" + +msgid "Local Time" +msgstr "Hora Local" + +msgid "Local domain" +msgstr "Domínio Local" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Especificação do domínio local. Nomes que casam com este domínio nunca serão " +"encaminhados e são resolvidos somente pelo DHCP ou pelo arquivos de " +"equipamentos conhecidos (hosts)" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"Sufixo do domínio local adicionado aos nomes no DHCP e nas entradas dos " +"arquivo de equipamentos conhecidos (hosts)" + +msgid "Local server" +msgstr "Servidor local" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" +"Localizar o nome do equipamento dependendo da subrede requisitante se " +"mútliplos endereços IPs estiverem disponíveis" + +msgid "Localise queries" +msgstr "Localizar consultas" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Nível de detalhamento de saída dos registros" + +msgid "Log queries" +msgstr "Registar as consultas" + +msgid "Logging" +msgstr "Registrando os eventos" + +msgid "Login" +msgstr "Entrar" + +msgid "Logout" +msgstr "Sair" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "O endereço mais baixo concedido como deslocamento do endereço da rede." + +msgid "MAC-Address" +msgstr "Endereço MAC" + +msgid "MAC-Address Filter" +msgstr "Filtro de Endereço MAC" + +msgid "MAC-Filter" +msgstr "Filtro de MAC" + +msgid "MAC-List" +msgstr "Lista de MAC" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "" +"MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Taxa Máxima" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Número máximo permitido de alocações DHCP ativas" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Número máximo permitido de consultas DNS concorrentes" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "Tamanho máximo permitido dos pacotes UDP EDNS.0" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "Tempo máximo, em segundos, para esperar que o modem fique pronto" + +# Desconheço o uso +msgid "Maximum hold time" +msgstr "Tempo máximo de espera" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "Número máximo de endereços atribuídos." + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "Memória" + +msgid "Memory usage (%)" +msgstr "Uso da memória (%)" + +msgid "Metric" +msgstr "Métrica" + +msgid "Minimum Rate" +msgstr "Taxa Mínima" + +msgid "Minimum hold time" +msgstr "Tempo mínimo de espera" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Extensão para o protocolo %q está ausente" + +msgid "Mode" +msgstr "Modo" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Dispositivo do Modem" + +msgid "Modem init timeout" +msgstr "Estouro de tempo da iniciação do modem" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "Entrada de Montagem" + +msgid "Mount Point" +msgstr "Ponto de Montagem" + +msgid "Mount Points" +msgstr "Pontos de Montagem" + +msgid "Mount Points - Mount Entry" +msgstr "Pontos de Montagem - Entrada de Montagem" + +msgid "Mount Points - Swap Entry" +msgstr "Pontos de Montagem - Entrada da Swap" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Pontos de montagem definem em que ponto um dispositivo de armazenamento será " +"anexado ao sistema de arquivos" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Opções de montagem" + +msgid "Mount point" +msgstr "Ponto de montagem" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Sistemas de arquivos montados" + +msgid "Move down" +msgstr "Mover para baixo" + +msgid "Move up" +msgstr "Mover para cima" + +msgid "Multicast Rate" +msgstr "Taxa de Multicast" + +msgid "Multicast address" +msgstr "Endereço de Multicast" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "Candidatos a servidor NTP" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Nome" + +msgid "Name of the new interface" +msgstr "Nome da nova interface" + +msgid "Name of the new network" +msgstr "Nome da nova rede" + +msgid "Navigation" +msgstr "Navegação" + +msgid "Netmask" +msgstr "Máscara de rede" + +msgid "Network" +msgstr "Rede" + +msgid "Network Utilities" +msgstr "Utilitários de Rede" + +msgid "Network boot image" +msgstr "Imagem de boot pela rede" + +msgid "Network without interfaces." +msgstr "Rede sem interfaces." + +msgid "Next »" +msgstr "Próximo »" + +msgid "No DHCP Server configured for this interface" +msgstr "Nenhum Servidor DHCP configurado para esta interface" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Nenhuma cadeira nesta tabela" + +msgid "No files found" +msgstr "Nenhum arquivo encontrado" + +msgid "No information available" +msgstr "Nenhuma informação disponível" + +msgid "No negative cache" +msgstr "Nenhum cache negativo" + +msgid "No network configured on this device" +msgstr "Nenhuma rede configurada neste dispositivo" + +msgid "No network name specified" +msgstr "Nenhum nome de rede foi especificado" + +msgid "No package lists available" +msgstr "Nenhuma lista de pacotes disponível" + +msgid "No password set!" +msgstr "Nenhuma senha definida!" + +msgid "No rules in this chain" +msgstr "Sem regras nesta cadeia" + +msgid "No zone assigned" +msgstr "Nenhuma zona definida" + +msgid "Noise" +msgstr "Ruído" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Ruído:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Nenhum" + +msgid "Normal" +msgstr "Normal" + +msgid "Not Found" +msgstr "Não Encontrado" + +msgid "Not associated" +msgstr "Não conectado" + +msgid "Not connected" +msgstr "Não conectado" + +msgid "Note: Configuration files will be erased." +msgstr "Nota: Os arquivos de configuração serão apagados." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Aviso" + +msgid "Nslookup" +msgstr "Nslookup" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "Configuração-OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "Atraso no estado de desligado" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"Nesta página pode configurar as interfaces de rede. Esta interface pode " +"formar uma ponte juntando várias interfaces. Para isto, marque o campo " +"\"Juntar interfaces em uma ponte\" e informar as várias interfaces de rede. " +"Pode também usar a notação para VLAN INTERFACE.VLANNR (ex.: " +"eth0.1)." + +msgid "On-State Delay" +msgstr "Atraso no estado de conexões" + +msgid "One of hostname or mac address must be specified!" +msgstr "" +"É necessário especificar ao menos um nome de equipamento ou endereço MAC!" + +msgid "One or more fields contain invalid values!" +msgstr "Um ou mais campos contém valores inválidos!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Um ou mais campos obrigatórios não tem valor!" + +msgid "Open list..." +msgstr "Abrir lista..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Opção alterada" + +msgid "Option removed" +msgstr "Opção removida" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Opções" + +msgid "Other:" +msgstr "Outro:" + +msgid "Out" +msgstr "Saída" + +msgid "Outbound:" +msgstr "Saindo:" + +msgid "Outdoor Channels" +msgstr "Canais para externo" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "Sobrescrever o endereço MAC" + +msgid "Override MTU" +msgstr "Sobrescrever o MTU" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "Sobrescrever o roteador padrão nas respostas do DHCP" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"Sobrescrever a máscara de rede enviada aos clientes. Normalmente, ela é " +"calculada a partir da máscara da subrede de onde o cliente solicitou o " +"endereço." + +msgid "Override the table used for internal routes" +msgstr "Sobrescrever a tabela usada para as rotas internas" + +msgid "Overview" +msgstr "Visão geral" + +msgid "Owner" +msgstr "Dono" + +msgid "PAP/CHAP password" +msgstr "Senha do PAP/CHAP" + +msgid "PAP/CHAP username" +msgstr "Usuário do PAP/CHAP" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "Encapsulamento PPPoA " + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "O pacote libiwinfo é necessário!" + +msgid "Package lists are older than 24 hours" +msgstr "As listas de pacotes são mais antigas do que 24 horas" + +msgid "Package name" +msgstr "Nome do Pacote" + +msgid "Packets" +msgstr "Pacotes" + +msgid "Part of zone %q" +msgstr "Parte da zona %q" + +msgid "Password" +msgstr "Senha" + +msgid "Password authentication" +msgstr "Autenticação por senha" + +msgid "Password of Private Key" +msgstr "Senha da Chave Privada" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "A senha foi alterada com sucesso!" + +msgid "Path to CA-Certificate" +msgstr "Caminho para o Certificado da AC" + +msgid "Path to Client-Certificate" +msgstr "Caminho para o Certificado do Cliente" + +msgid "Path to Private Key" +msgstr "Caminho para a Chave Privada" + +msgid "Path to executable which handles the button event" +msgstr "Caminho para o executável que trata o evento do botão" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Pico:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Reiniciar o sistema" + +msgid "Perform reset" +msgstr "Zerar configuração" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Taxa física:" + +msgid "Physical Settings" +msgstr "Configurações Físicas" + +msgid "Ping" +msgstr "Ping" + +msgid "Pkts." +msgstr "Pcts." + +msgid "Please enter your username and password." +msgstr "Entre com o seu usuário e senha." + +msgid "Policy" +msgstr "Política" + +msgid "Port" +msgstr "Porta" + +msgid "Port status:" +msgstr "Status da porta" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" +"Assumir que o parceiro está morto depois de uma data quantidade de falhas de " +"echo do LCP. Use 0 para ignorar as falhas" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Impede a comunicação de cliente para cliente" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Prism2/2.5/3 802.11b Wireless Controlador" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Proceder" + +msgid "Processes" +msgstr "Processos" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Protocolo" + +msgid "Protocol" +msgstr "Protocolo" + +msgid "Protocol family" +msgstr "Família do protocolo" + +msgid "Protocol of the new interface" +msgstr "Protocolo para a nova interface" + +msgid "Protocol support is not installed" +msgstr "O suporte ao protocolo não está instalado" + +msgid "Provide NTP server" +msgstr "Fornecer serviço NTP" + +msgid "Provide new network" +msgstr "Prover nova rede" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Ad-Hoc falso (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Qualidade" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "Limiar RTS/CTS" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "Taxa de RX" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "RaLink 802.11%s Wireless Controlador" + +msgid "Radius-Accounting-Port" +msgstr "Porta de contabilidade do RADIUS" + +msgid "Radius-Accounting-Secret" +msgstr "Segredo da contabilidade do RADIUS" + +msgid "Radius-Accounting-Server" +msgstr "Servidor da contabilidade do RADIUS" + +msgid "Radius-Authentication-Port" +msgstr "Porta de autenticação do RADIUS" + +msgid "Radius-Authentication-Secret" +msgstr "Segredo da autenticação do RADIUS" + +msgid "Radius-Authentication-Server" +msgstr "Servidor da autenticação do RADIUS" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Ler /etc/ethers para configurar o Servidor-DHCP" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"Realmente excluir esta interface? A exclusão não pode ser desfeita!\n" +" Você poderá perder o acesso a este dispositivo se você estiver conectado " +"através desta interface." + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"Realmente excluir esta interface Wireless? A exclusão não pode ser " +"desfeita!\n" +"Você poderá perder o acesso a este dispositivo se você estiver conectado " +"através desta interface." + +msgid "Really reset all changes?" +msgstr "Realmente limpar todas as mudanças?" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"Realmente desligar esta rede\"%s\" ?\n" +"Você poderá perder o acesso a este dispositivo se você estiver conectado " +"através desta interface." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"Realmente desligar esta interface\"%s\" ?\n" +"Você poderá perder o acesso a este dispositivo se você estiver conectado " +"através desta interface." + +msgid "Really switch protocol?" +msgstr "Realmente trocar o protocolo?" + +msgid "Realtime Connections" +msgstr "Conexões em Tempo Real" + +msgid "Realtime Graphs" +msgstr "Gráficos em Tempo Real" + +msgid "Realtime Load" +msgstr "Carga em Tempo Real" + +msgid "Realtime Traffic" +msgstr "Tráfego em Tempo Real" + +msgid "Realtime Wireless" +msgstr "Rede sem fio em Tempo Real" + +msgid "Rebind protection" +msgstr "Proteção contra \"Rebind\"" + +msgid "Reboot" +msgstr "Reiniciar" + +msgid "Rebooting..." +msgstr "Reiniciando..." + +msgid "Reboots the operating system of your device" +msgstr "Reinicia o sistema operacional do seu dispositivo" + +msgid "Receive" +msgstr "Receber" + +msgid "Receiver Antenna" +msgstr "Antena de Recepção" + +msgid "Reconnect this interface" +msgstr "Reconectar esta interface" + +msgid "Reconnecting interface" +msgstr "Reconectando interface" + +msgid "References" +msgstr "Referências" + +msgid "Regulatory Domain" +msgstr "Domínio Regulatório" + +msgid "Relay" +msgstr "Retransmissor" + +msgid "Relay Bridge" +msgstr "Ponte por Retransmissão" + +msgid "Relay between networks" +msgstr "Encaminha o tráfego entre as redes" + +msgid "Relay bridge" +msgstr "Ponte por retransmissão" + +msgid "Remote IPv4 address" +msgstr "Endereço IPv4 remoto" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Remover" + +msgid "Repeat scan" +msgstr "Repetir busca" + +msgid "Replace entry" +msgstr "Substituir entrada" + +msgid "Replace wireless configuration" +msgstr "Substituir a configuração da rede sem fio" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "Requerido para alguns provedores de internet, ex. Charter com DOCSIS 3" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Limpar" + +msgid "Reset Counters" +msgstr "Reiniciar contadores" + +msgid "Reset to defaults" +msgstr "Redefinir para os valores padrão" + +msgid "Resolv and Hosts Files" +msgstr "Arquivos de Resolv e Hosts" + +msgid "Resolve file" +msgstr "Arquivo Resolv" + +msgid "Restart" +msgstr "Reiniciar" + +msgid "Restart Firewall" +msgstr "Reiniciar o firewall" + +msgid "Restore backup" +msgstr "Restaurar cópia de segurança" + +msgid "Reveal/hide password" +msgstr "Relevar/esconder senha" + +msgid "Revert" +msgstr "Reverter" + +msgid "Root" +msgstr "Raiz" + +msgid "Root directory for files served via TFTP" +msgstr "Diretório raiz para arquivos disponibilizados pelo TFTP" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Senha do Roteador" + +msgid "Routes" +msgstr "Rotas" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"As rotas especificam através de qual interface e roteador um certo destino " +"podem ser alcançado." + +msgid "Run a filesystem check before mounting the device" +msgstr "" +"Execute a verificação do sistema de arquivos antes da montagem do dispositivo" + +msgid "Run filesystem check" +msgstr "Execute a verificação do sistema de arquivos " + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "Acesso SSH" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "Chaves SSH" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Salvar" + +msgid "Save & Apply" +msgstr "Salvar & Aplicar" + +msgid "Save & Apply" +msgstr "Save & Aplicar" + +msgid "Scan" +msgstr "Procurar" + +msgid "Scheduled Tasks" +msgstr "Tarefas Agendadas" + +msgid "Section added" +msgstr "Seção adicionada" + +msgid "Section removed" +msgstr "Seção removida" + +msgid "See \"mount\" manpage for details" +msgstr "Veja o manual (man) do comando \"mount\" para detalhes" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" +"Enviar requisições de eco do LCP no dado intervalo em segundos. Somente " +"efetivo em conjunto com o limite de falhas." + +msgid "Separate Clients" +msgstr "Isolar Clientes" + +msgid "Separate WDS" +msgstr "Separar WDS" + +msgid "Server Settings" +msgstr "Configurações do Servidor" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Nome do Serviço" + +msgid "Service Type" +msgstr "Tipo do Serviço" + +msgid "Services" +msgstr "Serviços" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Configurar a Sincronização do Horário" + +msgid "Setup DHCP Server" +msgstr "Configurar Servidor DHCP" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "Mostra a lista atual de arquivos para a cópia de segurança" + +msgid "Shutdown this interface" +msgstr "Desligar esta interface" + +msgid "Shutdown this network" +msgstr "Desligar esta rede" + +msgid "Signal" +msgstr "Sinal" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Sinal:" + +msgid "Size" +msgstr "Tamanho" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Pular" + +msgid "Skip to content" +msgstr "Pular para o conteúdo" + +msgid "Skip to navigation" +msgstr "Pular para a navegação" + +msgid "Slot time" +msgstr "Intervalo de tempo" + +msgid "Software" +msgstr "Software" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Alguns campos estão inválidos e os valores não podem ser salvos!" + +msgid "Sorry, the object you requested was not found." +msgstr "Desculpe o objeto solicitado não foi encontrado" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "Desculpe, o servidor encontrou um erro inesperado." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"Sinto muito, não existe suporte para o sysupgrade. Uma nova imagem de " +"firmware deve ser gravada manualmente. Por favor, consulte a wiki para " +"instruções específicas da instalação deste dispositivo." + +msgid "Sort" +msgstr "Ordenar" + +msgid "Source" +msgstr "Origem" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "Especifica o estado do botão para ser tratado" + +msgid "Specifies the directory the device is attached to" +msgstr "Especifica o diretório que o dispositivo está conectado" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Especifica a porta de escuta deste Dropbear" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" +"Especifica a quantidade máxima de requisições ARP falhadas antes de " +"considerar que um equipamento está morto" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" +"Especifica a quantidade máxima de segundos antes de considerar que um " +"equipamento está morto" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Especifique a chave de cifragem secreta aqui." + +msgid "Start" +msgstr "Iniciar" + +msgid "Start priority" +msgstr "Prioridade de iniciação" + +msgid "Startup" +msgstr "Iniciação" + +msgid "Static IPv4 Routes" +msgstr "Rotas Estáticas IPv4" + +msgid "Static IPv6 Routes" +msgstr "Rotas Estáticas IPv6" + +msgid "Static Leases" +msgstr "Alocações Estáticas" + +msgid "Static Routes" +msgstr "Rotas Estáticas" + +msgid "Static WDS" +msgstr "WDS Estático" + +msgid "Static address" +msgstr "Endereço Estático" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"Alocações estáticas são usadas para definir um endereço IP fixo e nome " +"simbólico para os clientes do DHCP. Elas também são necessárias para " +"configurações não dinâmicas onde um computador com a alocação correspondente " +"é provido." + +msgid "Status" +msgstr "Estado" + +msgid "Stop" +msgstr "Parar" + +msgid "Strict order" +msgstr "Ordem Exata" + +msgid "Submit" +msgstr "Enviar" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Entrada do espaço de troca (Swap)" + +msgid "Switch" +msgstr "Switch" + +msgid "Switch %q" +msgstr "Switch %q" + +msgid "Switch %q (%s)" +msgstr "Switch %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Trocar o protocolo" + +msgid "Sync with browser" +msgstr "Sincronizar com o navegador" + +msgid "Synchronizing..." +msgstr "Sincronizando..." + +msgid "System" +msgstr "Sistema" + +msgid "System Log" +msgstr "Registo do Sistema" + +msgid "System Properties" +msgstr "Propriedades do Sistema" + +msgid "System log buffer size" +msgstr "Tamanho do buffer de registro do sistema" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "Configurações do TFTP" + +msgid "TFTP server root" +msgstr "Raiz do servidor TFTP" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "Taxa de TX" + +msgid "Table" +msgstr "Tabela" + +msgid "Target" +msgstr "Destino" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Terminar" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"A seção da Configuração do Dispositivo engloba as configurações " +"físicas do rádio como canal, potência de transmissão ou seleção da antena. " +"Estas configurações são compartilhadas entre todas as redes sem fio (se o " +"hardware for capaz de utilizar múltiplas SSID). As configurações específicas " +"de cada rede, como cifragem ou modo de operação estão agrupadas na " +"Configuração da Interface." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"O pacote libiwinfo-lua não está instalado. Você precisa instalar " +"este componente para ter uma configuração da rede sem fio funcional!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" +"O prefixo IPv6 atribuído pelo provedor, geralmente termina com::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Os caracteres permitidos são: A-Z, a-z, 0-9 e _" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"O arquivo do dispositivo de armazenamento ou da partição (ex. /dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"O sistema de arquivos que foi usado para formatar a unidade de armazenamento " +"(ex. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"A imagem do firmware foi enviada. Abaixo estão a soma de verificação " +"(checksum) e o tamanho dom arquivo. Compare-os com o arquivo original para " +"garantir a integridade dos dados.
Clique em \"Proceder\" para iniciar " +"o procedimetno de gravação." + +msgid "The following changes have been committed" +msgstr "As seguintes mudanças foram aplicadas" + +msgid "The following changes have been reverted" +msgstr "As seguintes alterações foram revertidas" + +msgid "The following rules are currently active on this system." +msgstr "As seguintes regras estão atualmente ativas neste sistema." + +msgid "The given network name is not unique" +msgstr "O nome de rede informado não é único" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"Este equipamento não é capaz de utilizar SSID múltiplos e as configurações " +"existentes serão substituídas se você proceder." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" +"O comprimento do prefixo IPv4 em bits, o restante é usado nos endereços IPv6." + +msgid "The length of the IPv6 prefix in bits" +msgstr "O comprimento do prefixo IPv6 em bits" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"As portas de rede neste dispositivo podem ser configuradas em diversas VLANs nas quais computadores em uma " +"mesma VLAN podem se comunicar " +"diretamente. VLANs são muitas " +"vezes utilizadas para separar diferentes segmentos de rede. Em geral, existe " +"uma porta para o enlace superior (uplink) e as demais portas são utilizadas " +"para a rede local." + +msgid "The selected protocol needs a device assigned" +msgstr "O protocolo selecionado necessita estar associado a um dispositivo" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" +"O sistema está apagando agora a partição da configuração e irá reiniciar " +"quando terminado." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"O sistema está gravando o firmware para a flash.
NÃO DESLIGUE O " +"EQUIPAMENTO!
Espere alguns minutos até tentar reconectar. Dependendo " +"da sua configuração, pode ser necessário renovar o endereço do seu " +"computador para poder conectar novamente ao roteador." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"A imagem carregada não contém um formato suportado. Confirme que você " +"escolheu uma imagem para a sua plataforma." + +msgid "There are no active leases." +msgstr "Não existem alocações ativas." + +msgid "There are no pending changes to apply!" +msgstr "Não existem modificações pendentes para aplicar!" + +msgid "There are no pending changes to revert!" +msgstr "Não existem modificações pendentes para reverter!" + +msgid "There are no pending changes!" +msgstr "Não existem modificações pendentes!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"Ainda não existe um dispositivo associado. Por favor, associe um dispositivo " +"de rede na aba \"Configurações Físicas\"" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"Não existem uma senha definida para este roteador. Por favor, configure uma " +"senha para o root para proteger a interface WEB e habilitar o SSH." + +msgid "This IPv4 address of the relay" +msgstr "Este endereço IPv4 do repassar" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"Esta é a lista dos padrões de expressão shell para casar com os arquivos e " +"diretórios incluídos durante a atualização do sistema. Arquivos modificados " +"em /etc/config/ e alguns outros arquivos de configuração são automaticamente " +"preservados." + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"Este é o conteúdo do /etc/rc.local. Insira seus próprios comandos aqui " +"(antes de 'exit 0') para executá-los no final do processo de boot." + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" +"Este é o endereço da ponta local designado pelo agente de túnel. normalmente " +"ele termina com :2" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Este é o único DHCP na rede local" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "Este é o sistema de agendamento de tarefas." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" +"Este é normalmente o endereço do PoP mais próximo operado pelo agente de túnel" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"Esta lista fornece uma visão geral sobre os processos em execução no sistema." + +msgid "This page allows the configuration of custom button actions" +msgstr "" +"Esta página permite a configuração de ações personalizadas para os botões" + +msgid "This page gives an overview over currently active network connections." +msgstr "Esta página fornece informações sobre as conexões de rede ativas." + +msgid "This section contains no values yet" +msgstr "Esta seção ainda não contêm valores" + +msgid "Time Synchronization" +msgstr "Sincronização de horário" + +msgid "Time Synchronization is not configured yet." +msgstr "A sincronização do horário ainda não está configurada." + +msgid "Timezone" +msgstr "Fuso Horário" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"Para recuperar os arquivos de configuração, você pode enviar aqui uma cópia " +"de segurança anterior." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Total Disponível" + +msgid "Traceroute" +msgstr "Traceroute" + +msgid "Traffic" +msgstr "Tráfego" + +msgid "Transfer" +msgstr "Transferências" + +msgid "Transmission Rate" +msgstr "Taxa de Transmissão" + +msgid "Transmit" +msgstr "Transmitir" + +msgid "Transmit Power" +msgstr "Potência de Transmissão" + +msgid "Transmitter Antenna" +msgstr "Antena de Transmissão" + +msgid "Trigger" +msgstr "Disparo" + +msgid "Trigger Mode" +msgstr "Modo de disparo" + +msgid "Tunnel ID" +msgstr "Identificador do Túnel" + +msgid "Tunnel Interface" +msgstr "Interface de Tunelamento" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Modo Turbo" + +msgid "Tx-Power" +msgstr "Potência de transmissão" + +msgid "Type" +msgstr "Tipo" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "UMTS somente" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "Dispositivo USB" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "Não é possível a expedição" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Desconhecido" + +msgid "Unknown Error, password not changed!" +msgstr "Erro Desconhecido, a senha não foi alterada!" + +msgid "Unmanaged" +msgstr "Não gerenciado" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Alterações Não Salvas" + +msgid "Unsupported protocol type." +msgstr "Tipo de protocolo não suportado." + +msgid "Update lists" +msgstr "Atualizar listas" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"Envia uma imagem compatível do sistema para substituir o firmware em " +"execução. Marque \"Manter configurações\" para manter as configurações " +"atuais (requer uma imagem compatível)." + +msgid "Upload archive..." +msgstr "Enviar arquivo..." + +msgid "Uploaded File" +msgstr "Arquivo Carregado" + +msgid "Uptime" +msgstr "Tempo de atividade" + +msgid "Use /etc/ethers" +msgstr "Usar /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Use o roteador do DHCP" + +msgid "Use DNS servers advertised by peer" +msgstr "Use os servidores DNS anunciados pelo parceiro" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "Usar códigos de países ISO/IEC 3166 alpha2." + +msgid "Use MTU on tunnel interface" +msgstr "Use MTU na interface do túnel" + +msgid "Use TTL on tunnel interface" +msgstr "Use TTL na interface do túnel" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Use a marcação de broadcast" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Use servidores DNS personalizados" + +msgid "Use default gateway" +msgstr "Use o roteador padrão" + +msgid "Use gateway metric" +msgstr "Use a métrica do roteador" + +msgid "Use routing table" +msgstr "Use a tabela de roteamento" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"Use o botão Adicionar para adicionar uma nova entrada de " +"atribuição. O endereço MAC-Address identifica o equipamento, o " +"endereço IPv4 especifica o endereço fixo para usar e o nome do " +"equipamento é designado como nome simbólico (DNS) para o equipamento " +"requisitante." + +msgid "Used" +msgstr "Usado" + +msgid "Used Key Slot" +msgstr "Posição da Chave Usada" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Usuário" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLANs em %q" + +msgid "VLANs on %q (%s)" +msgstr "VLANs em %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "Servidor VPN" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "Classe do fabricante para enviar quando requisitar o DHCP" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Verificar" + +msgid "Version" +msgstr "Versão" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "WEP Sistema Aberto" + +msgid "WEP Shared Key" +msgstr "WEP Chave Compartilhada" + +msgid "WEP passphrase" +msgstr "WEP Senha" + +msgid "WMM Mode" +msgstr "Modo WMM" + +msgid "WPA passphrase" +msgstr "WPA Senha" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"A cifragem WPA requer a instalação do wpa_supplicant (para modo cliente) ou " +"do hostapd (para modo AP ou ad-hoc)." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "Esperando a aplicação das mudanças..." + +msgid "Waiting for command to complete..." +msgstr "Esperando o término do comando..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Atenção" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Rede sem fio" + +msgid "Wireless Adapter" +msgstr "Dispositivo de Rede sem Fio" + +msgid "Wireless Network" +msgstr "Rede sem Fio" + +msgid "Wireless Overview" +msgstr "Visão Geral da Rede sem Fio" + +msgid "Wireless Security" +msgstr "Segurança da Rede sem Fio" + +msgid "Wireless is disabled or not associated" +msgstr "Rede sem fio está desabilitada ou não conectada" + +msgid "Wireless is restarting..." +msgstr "A rede sem fio está reiniciando..." + +msgid "Wireless network is disabled" +msgstr "A rede sem fio está desabilitada" + +msgid "Wireless network is enabled" +msgstr "A rede sem fio está habilitada" + +msgid "Wireless restarted" +msgstr "A rede sem fio reiniciou" + +msgid "Wireless shut down" +msgstr "Rede sem fio desligada" + +msgid "Write received DNS requests to syslog" +msgstr "Escreva as requisições DNS para o servidor de registro (syslog)" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Suporte a XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Neste local, você pode ativar ou desativar os scripts de iniciação " +"instalados. As mudanças serão aplicadas após a reiniciação do equipamento." +"
Aviso: Se você desativar algum script de iniciação essencial " +"como por exemplo \"rede/network\", o dispositivo poderá tornar-se " +"inacessível!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Você precisa habilitar o JavaScript no seu navegador ou o LuCI não irá " +"funcionar corretamente." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "qualquer" + +msgid "auto" +msgstr "automático" + +#, fuzzy +msgid "automatic" +msgstr "estático" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "em ponte" + +msgid "create:" +msgstr "criar" + +msgid "creates a bridge over specified interface(s)" +msgstr "cria uma ponte sobre determinada(s) interface(s)" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "desativar" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "expirado" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"Arquivo onde as alocações DHCP são armazenadas" + +msgid "forward" +msgstr "encaminhar" + +msgid "full-duplex" +msgstr "full-duplex" + +msgid "half-duplex" +msgstr "half-duplex" + +msgid "help" +msgstr "ajuda" + +msgid "hidden" +msgstr "ocultar" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "se o destino for uma rede" + +msgid "input" +msgstr "entrada" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "" +"Arquivo local de DNS" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +# Is this yes/no or no like in no one? +msgid "no" +msgstr "não" + +msgid "no link" +msgstr "sem link" + +msgid "none" +msgstr "nenhum" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "desligado" + +msgid "on" +msgstr "ligado" + +msgid "open" +msgstr "aberto" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "roteado" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "etiquetado" + +msgid "unknown" +msgstr "desconhecido" + +msgid "unlimited" +msgstr "ilimitado" + +msgid "unspecified" +msgstr "não especificado" + +msgid "unspecified -or- create:" +msgstr "não especificado -ou- criar:" + +msgid "untagged" +msgstr "não etiquetado" + +msgid "yes" +msgstr "sim" + +msgid "« Back" +msgstr "« Voltar" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "Uma rede adicional será criada se você deixar isto desmarcado." + +#~ msgid "Join Network: Settings" +#~ msgstr "Conectar à Rede: Configurações" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "Porta %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "Porta %d está sem etiqueta para mútliplas VLANs!" + +#~ msgid "VLAN Interface" +#~ msgstr "Interface VLAN" diff --git a/feeds/luci/modules/luci-base/po/pt/base.po b/feeds/luci/modules/luci-base/po/pt/base.po new file mode 100644 index 0000000..86e9e1b --- /dev/null +++ b/feeds/luci/modules/luci-base/po/pt/base.po @@ -0,0 +1,3817 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2013-09-22 18:50+0200\n" +"Last-Translator: Low \n" +"Language-Team: LANGUAGE \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(janela de %d minutos, intervalo de %d segundos)" + +msgid "(%s available)" +msgstr "(%s disponível)" + +msgid "(empty)" +msgstr "(vazio)" + +msgid "(no interfaces attached)" +msgstr "(não existem interfaces ligadas)" + +msgid "-- Additional Field --" +msgstr "-- Campo Adicional --" + +msgid "-- Please choose --" +msgstr "-- Por favor escolha --" + +msgid "-- custom --" +msgstr "-- personalizado --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Carga de 1 Minuto:" + +msgid "15 Minute Load:" +msgstr "Carga de 15 minutos:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Carga 5 Minutos:" + +msgid "BSSID" +msgstr "" +"BSSID" + +msgid "DNS query port" +msgstr "" +"Porta de consulta de DNS" + +msgid "DNS server port" +msgstr "" +"Porta do servidorDNS" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"Os servidores de DNS " +"serão consultados pela ordem no ficheiro resolv" + +msgid "ESSID" +msgstr "" +"ESSID" + +msgid "IPv4-Address" +msgstr "Endereço IPv4" + +msgid "IPv4-Gateway" +msgstr "Gateway IPv4" + +msgid "IPv4-Netmask" +msgstr "" +"Máscara de rede IPv4" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-Endereço ou Rede " +"(CIDR)" + +msgid "IPv6-Gateway" +msgstr "Gateway IPv6" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "Configuração do LED" + +msgid "LED Name" +msgstr "Nome da LED" + +msgid "MAC-Address" +msgstr "Endereço MAC" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Max. de concessõesDHCP" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Tamanho Max. do pacote EDNS0 " + +msgid "Max. concurrent queries" +msgstr "Max. consultas concorrentes" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "Suporte AR" + +msgid "ARP retry threshold" +msgstr "Limiar de tentativas ARP" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "Bridges ATM" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "Identificador Canais Virtuais ATM (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "Identificador de Caminho Virtual ATM (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"As bridges ATM expõem o encapsulamento ethernet em ligações AAL5 como uma " +"interface de Rede Virtual Linux que pode ser usada em conjugação com o DHCP " +"ou PPP para marcar para a rede ISP." + +msgid "ATM device number" +msgstr "Número de Dispositivo ATM" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Concentrador de Acesso" + +msgid "Access Point" +msgstr "Access Point (AP)" + +msgid "Action" +msgstr "Acção" + +msgid "Actions" +msgstr "Acções" + +msgid "Activate this network" +msgstr "Ativar esta rede" + +msgid "Active IPv4-Routes" +msgstr "" +"Rotas-IPv4 ativas" + +msgid "Active IPv6-Routes" +msgstr "" +"Rotas-IPv6 ativas" + +msgid "Active Connections" +msgstr "Ligações Ativas" + +msgid "Active DHCP Leases" +msgstr "Concessões DHCP Ativas" + +msgid "Active DHCPv6 Leases" +msgstr "Concessões DHCPv6 Ativas" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Adicionar" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" +"Adicionar um sufixo de domínio local aos nomes servidos dos ficheiros de " +"hosts" + +msgid "Add new interface..." +msgstr "Adicionar uma nova interface..." + +msgid "Additional Hosts files" +msgstr "Ficheiro Adicional de Hosts" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Endereço" + +msgid "Address to access local relay bridge" +msgstr "" + +msgid "Administration" +msgstr "Administração" + +msgid "Advanced Settings" +msgstr "Definições Avançadas" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Alerta" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" +"Permitir autenticação SSH por senha" + +msgid "Allow all except listed" +msgstr "Permitir todos, excepto os listados" + +msgid "Allow listed only" +msgstr "Permitir somente os listados" + +msgid "Allow localhost" +msgstr "Permitir localhost" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"Permitir que hosts remotos se conectem às portas encaminhadas do SSH local" + +msgid "Allow root logins with password" +msgstr "Permitir o login como root só com password" + +msgid "Allow the root user to login with password" +msgstr "Permitir que o utilizador root faça login só com password" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"Permitir respostas a montante na gama 127.0.0.1/8, p.e. para serviços RBL" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antena 1" + +msgid "Antenna 2" +msgstr "Antena 2" + +msgid "Antenna Configuration" +msgstr "Configuração das Antenas" + +msgid "Any zone" +msgstr "Qualquer zona" + +msgid "Apply" +msgstr "Aplicar" + +msgid "Applying changes" +msgstr "A aplicar as alterações" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Atribuir interfaces..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Estações Associadas" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Controlador Wireless Atheros 802.11%s" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Autenticação" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Autoritário" + +msgid "Authorization Required" +msgstr "Autorização Requerida" + +msgid "Auto Refresh" +msgstr "Actualização Automática" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Disponível" + +msgid "Available packages" +msgstr "Pacotes disponíveis" + +msgid "Average:" +msgstr "Média:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Voltar" + +msgid "Back to Overview" +msgstr "Voltar à Visão Global" + +msgid "Back to configuration" +msgstr "Voltar à configuração" + +msgid "Back to overview" +msgstr "Voltar à vista global" + +msgid "Back to scan results" +msgstr "Voltar aos resultados do scan" + +msgid "Background Scan" +msgstr "Procurar em Segundo Plano" + +msgid "Backup / Flash Firmware" +msgstr "Backup / Flashar Firmware" + +msgid "Backup / Restore" +msgstr "Backup / Restauração" + +msgid "Backup file list" +msgstr "Lista de ficheiros para backup" + +msgid "Bad address specified!" +msgstr "Endereço mal especificado!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Abaixo está a lista de ficheiros para backup. Este consiste nos ficheiros de " +"configuração alterados e marcados pelo opkg, ficheiros base essenciais e " +"padrões de backup definidos pelo utilizador." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Taxa de bits" + +msgid "Bogus NX Domain Override" +msgstr "" + +msgid "Bridge" +msgstr "Bridge" + +msgid "Bridge interfaces" +msgstr "Ativar brigde nas interfaces" + +msgid "Bridge unit number" +msgstr "Número de unidade da bridge" + +msgid "Bring up on boot" +msgstr "Levantar no arranque" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Controlador Wireless Broadcom 802.11%s" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Controlador Wireless Broadcom BCM%04x 802.11" + +msgid "Buffered" +msgstr "" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Botões" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Uso da CPU (%)" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Cadeia" + +msgid "Changes" +msgstr "Alterações" + +msgid "Changes applied." +msgstr "Alterações aplicadas." + +msgid "Changes the administrator password for accessing the device" +msgstr "Altera a password de administrador para acesso ao dispositivo" + +msgid "Channel" +msgstr "Canal" + +msgid "Check" +msgstr "Verificar" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Checksum" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Escolha a zona de firewall que pretende associar a esta interface. Escolha " +"não especificado para remover a interface da zona associada ou " +"coloque em branco o campo criar para definir a nova zona e ligar-" +"lhe a interface." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Escolha a rede(s) à(s) qual(is) deseja ligar esta interface wireless ou " +"preencha o campo criar para definir a nova rede." + +msgid "Cipher" +msgstr "Cifra" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Clique em \"Gerar arquivo\" para descarregar o ficheiro tar com os actuais " +"ficheiros de configuração. Para voltar as definições originais do firmware, " +"clique \" Fazer reset\" (só possível com imagens squashfs)" + +msgid "Client" +msgstr "Cliente" + +msgid "Client ID to send when requesting DHCP" +msgstr "ID de cliente a enviar para pedidos de DHCP" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Fechar ligação inativa após um dado tempo em segundos, usando 0 a ligação é " +"persistente" + +msgid "Close list..." +msgstr "Fechar lista..." + +msgid "Collecting data..." +msgstr "A obter dados..." + +msgid "Command" +msgstr "Comando" + +msgid "Common Configuration" +msgstr "Configuração comum" + +msgid "Compression" +msgstr "Compressão" + +msgid "Configuration" +msgstr "Configuração" + +msgid "Configuration applied." +msgstr "Configuração aplicada." + +msgid "Configuration files will be kept." +msgstr "Os ficheiros de configuração serão mantidos." + +msgid "Confirmation" +msgstr "Confirmação" + +msgid "Connect" +msgstr "Ligar" + +msgid "Connected" +msgstr "Ligado" + +msgid "Connection Limit" +msgstr "Limite de Ligações" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Ligações" + +msgid "Country" +msgstr "País" + +msgid "Country Code" +msgstr "Código do País" + +msgid "Cover the following interface" +msgstr "Abranger a seguinte interface" + +msgid "Cover the following interfaces" +msgstr "Abranger as seguintes interfaces" + +msgid "Create / Assign firewall-zone" +msgstr "Criar / Atribuir a uma zona de firewall" + +msgid "Create Interface" +msgstr "Criar interface" + +msgid "Create a bridge over multiple interfaces" +msgstr "Criar uma bridge entre múltiplas interfaces " + +msgid "Critical" +msgstr "Critico" + +msgid "Cron Log Level" +msgstr "Nível de Log do Cron" + +msgid "Custom Interface" +msgstr "Interface Personalizada" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Customiza o comportamento dos LEDs, se possível." + +msgid "DHCP Leases" +msgstr "Concessões DHCP" + +msgid "DHCP Server" +msgstr "Servidor DHCP" + +msgid "DHCP and DNS" +msgstr "DHCP e DNS" + +msgid "DHCP client" +msgstr "Cliente DHCP" + +msgid "DHCP-Options" +msgstr "Opções DHCP" + +msgid "DHCPv6 Leases" +msgstr "Concessões DHCPv6" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "Encaminhamentos DNS" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Depurar" + +msgid "Default %d" +msgstr "" + +msgid "Default gateway" +msgstr "Gateway predefinido" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Estado predefinido" + +msgid "Define a name for this network." +msgstr "Definir um nome para esta rede." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Definir opções adicionais de DHCP, por exemplo " +"\"6,192.168.2.1,192.168.2.2\" informa os clientes de diferentes " +"servidores DNS." + +msgid "Delete" +msgstr "Apagar" + +msgid "Delete this network" +msgstr "Apagar esta rede" + +msgid "Description" +msgstr "Descrição" + +msgid "Design" +msgstr "Tema" + +msgid "Destination" +msgstr "Destino" + +msgid "Device" +msgstr "Dispositivo" + +msgid "Device Configuration" +msgstr "Configuração do Dispositivo" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnósticos" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Directório" + +msgid "Disable" +msgstr "Desativar" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Desativar DHCP para esta interface." + +msgid "Disable DNS setup" +msgstr "Desativar configuração de DNS" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Desativar temporizador de HW-Beacon" + +msgid "Disabled" +msgstr "Desativado" + +msgid "Discard upstream RFC1918 responses" +msgstr "Descartar respostas RFC1918 a montante" + +msgid "Displaying only packages containing" +msgstr "Mostrar somente pacotes contendo" + +msgid "Distance Optimization" +msgstr "Optimização de Distância" + +msgid "Distance to farthest network member in meters." +msgstr "Distância para o último host da rede em metros." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Diversidade" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq é um servidor combinado de DHCP e DNS para firewalls NAT" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" +"Não colocar em cache as respostas negativas, p.e. para dominios inexistentes" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Não encaminhar pedidos que não possam ser respondidos por servidor públicos " +"de nomes" + +msgid "Do not forward reverse lookups for local networks" +msgstr "Não encaminhar lookups reversos para as redes locais" + +msgid "Do not send probe responses" +msgstr "Não enviar respostas a sondas" + +msgid "Domain required" +msgstr "Requerer domínio" + +msgid "Domain whitelist" +msgstr "Lista Branca do Dominio" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Não encaminhar consultas DNS sem o nome do DNS" + +msgid "Download and install package" +msgstr "Descarregar e instalar pacote" + +msgid "Download backup" +msgstr "Descarregar backup" + +msgid "Dropbear Instance" +msgstr "Instância do Dropbear" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear oferece um acesso shell seguro à rede SSH e um servidor SCP integrado" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"DHCP " +"Dinâmico" + +msgid "Dynamic tunnel" +msgstr "Túnel dinâmico" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Alocar dinamicamente endereços DHCP para clientes. Se desativado, só os " +"clientes com reservas estáticas serão servidos." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "Metodo-EAP" + +msgid "Edit" +msgstr "Editar" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Editar esta interface" + +msgid "Edit this network" +msgstr "Editar esta rede" + +msgid "Emergency" +msgstr "Emergência" + +msgid "Enable" +msgstr "Ativar" + +msgid "Enable STP" +msgstr "Ativar STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Ativar a atualização dinâmica de ponto final HE.net" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Ativar a negociação IPv6 no link PPP" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Ativar a passagem de Jumbo Frames" + +msgid "Enable NTP client" +msgstr "Ativar o cliente NTP" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Ativar o servidor TFTP" + +msgid "Enable VLAN functionality" +msgstr "Ativar a funcionalidade VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Ativar aprendizagem e envelhecimento" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Ativar este mount" + +msgid "Enable this swap" +msgstr "Ativar esta swap" + +msgid "Enable/Disable" +msgstr "Ativar/Desativar" + +msgid "Enabled" +msgstr "Ativado" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Ativa o Spanning Tree nesta bridge" + +msgid "Encapsulation mode" +msgstr "Modo de encapsulamento" + +msgid "Encryption" +msgstr "Encriptação" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "A apagar..." + +msgid "Error" +msgstr "Erro" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Adaptador Ethernet" + +msgid "Ethernet Switch" +msgstr "Switch Ethernet" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Expandir hosts" + +msgid "Expires" +msgstr "Expira" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" +"O tempo de caducidade dos endereços concessionados, minimo de 2 minutos " +"(2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Servidor externo de logs de sistema" + +msgid "External system log server port" +msgstr "Porta do Servidor externo de logs de sistema" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Frames Rápidas" + +msgid "File" +msgstr "Ficheiro" + +msgid "Filename of the boot image advertised to clients" +msgstr "Nome de ficheiro da imagem de boot a anunciar aos clientes" + +msgid "Filesystem" +msgstr "Sistema de ficheiros" + +msgid "Filter" +msgstr "Filtro" + +msgid "Filter private" +msgstr "Filtrar endereços privados" + +msgid "Filter useless" +msgstr "Filtro inútil" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Procurar e ligar rede" + +msgid "Find package" +msgstr "Procurar pacote" + +msgid "Finish" +msgstr "Terminar" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall Settings" +msgstr "Definições da Firewall" + +msgid "Firewall Status" +msgstr "Estado da Firewall" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Versão do Firmware" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Porta fixa de origem para saída das consultas DNS" + +msgid "Flash Firmware" +msgstr "Gravar Firmware" + +msgid "Flash image..." +msgstr "Flashar imagem..." + +msgid "Flash new firmware image" +msgstr "Flashar nova imagem do firmware" + +msgid "Flash operations" +msgstr "" + +msgid "Flashing..." +msgstr "A programar...." + +msgid "Force" +msgstr "Forçar" + +msgid "Force CCMP (AES)" +msgstr "Forçar CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "Forçar DHCP nesta rede mesmo se outro servidor for detectado." + +msgid "Force TKIP" +msgstr "Forçar TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Forçar TKIP e CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Encaminhar tráfego DHCP" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Encaminhar trafego de broadcast" + +msgid "Forwarding mode" +msgstr "Modo de encaminhamento" + +msgid "Fragmentation Threshold" +msgstr "Margem de Fragmentação" + +msgid "Frame Bursting" +msgstr "Frame Bursting" + +msgid "Free" +msgstr "Livre" + +msgid "Free space" +msgstr "Espaço livre" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "Só GPRS" + +msgid "Gateway" +msgstr "Gateway" + +msgid "Gateway ports" +msgstr "Portas de gateway" + +msgid "General Settings" +msgstr "Definições Gerais" + +msgid "General Setup" +msgstr "Configuração Geral" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Gerar arquivo" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Controlador Wireless Genérico 802.11%s" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" +"A confirmação de password não corresponde, a password não foi alterada!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Ir para a configuração da password" + +msgid "Go to relevant configuration page" +msgstr "Ir para a página respectiva de configuração" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "Password HE.net" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Handler" + +msgid "Hang Up" +msgstr "Suspender" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Aqui pode configurar os aspectos básicos do seu equipamento, como o nome do " +"host ou o fuso horário." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"Aqui pode colar as chaves SSH (uma por linha) para a autenticação SSH por " +"chave pública." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Controlador Wireless Hermes 802.11b" + +msgid "Hide ESSID" +msgstr "" +"Ocultar ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Entradas de hosts" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "" +"IP do host ou rede" + +msgid "Hostname" +msgstr "Hostname" + +msgid "Hostname to send when requesting DHCP" +msgstr "Hostname a enviar quando houver solicitação por DHCP" + +msgid "Hostnames" +msgstr "Hostnames" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "Endereço IP" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "Firewall IPv4" + +msgid "IPv4 WAN Status" +msgstr "Estado WAN IPv4" + +msgid "IPv4 address" +msgstr "Endereço IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 e IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "Broadcast IPv4" + +msgid "IPv4 gateway" +msgstr "Gateway IPv4" + +msgid "IPv4 netmask" +msgstr "Máscara IPv4" + +msgid "IPv4 only" +msgstr "Só IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "Comprimento do prefixo IPv4" + +msgid "IPv4-Address" +msgstr "Endereço-IPv4" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "Firewall IPv6" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "Estado WAN IPv6" + +msgid "IPv6 address" +msgstr "Endereço IPv6" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "Gateway IPv6" + +msgid "IPv6 only" +msgstr "Só IPv6" + +msgid "IPv6 prefix" +msgstr "Prefixo IPv6" + +msgid "IPv6 prefix length" +msgstr "Comprimento do prefixo IPv6" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "Endereço-IPv6" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-em-IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6-sobre-IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6-sobre-IPv4 (6to4)" + +msgid "Identity" +msgstr "Identidade" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "Se desmarcado, não é configurada uma rota pré-definida" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "Se desmarcado, os endereços servidor DNS anunciados são ignorados " + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Se a memória física for insuficiente, os dados poderão ser trocados " +"temporariamente para um dispositivo swap, resultando em uma maior quantidade " +"de memória utilizável RAM. Esteja ciente de que a troca de dados (swap) é um processo muito " +"lento pois o dispositivo swap não pode ser acedido com um nível elevado de " +"memória RAM." + +msgid "Ignore /etc/hosts" +msgstr "Ignorar /etc/hosts" + +msgid "Ignore interface" +msgstr "Ignorar interface" + +msgid "Ignore resolve file" +msgstr "Ignorar ficheiro resolv.conf" + +msgid "Image" +msgstr "Imagem" + +msgid "In" +msgstr "Entrada" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Tempo de inatividade" + +msgid "Inbound:" +msgstr "Entrada:" + +msgid "Info" +msgstr "Info" + +msgid "Initscript" +msgstr "Script de inicialização" + +msgid "Initscripts" +msgstr "Scripts de Inicialização" + +msgid "Install" +msgstr "Instalar" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Instalar pacote %q" + +msgid "Install protocol extensions..." +msgstr "Instalar extensões do protocolo..." + +msgid "Installed packages" +msgstr "Instalar pacotes" + +msgid "Interface" +msgstr "Interface" + +msgid "Interface Configuration" +msgstr "Configuração da Interface" + +msgid "Interface Overview" +msgstr "Visão Geral da Interface" + +msgid "Interface is reconnecting..." +msgstr "A interface está a religar..." + +msgid "Interface is shutting down..." +msgstr "A interface está a desligar..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "Interface não presente ou ainda não ligada." + +msgid "Interface reconnected" +msgstr "Interface religada" + +msgid "Interface shut down" +msgstr "Desligar interface" + +msgid "Interfaces" +msgstr "Interfaces" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "Erro Interno do Servidor" + +msgid "Invalid" +msgstr "Valor inválido" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" +"O ID de VLAN fornecido é inválido! Só os IDs entre %d e %d são permitidos." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "O ID de VLAN fornecido é inválido! Só os IDs únicos são permitidos." + +msgid "Invalid username and/or password! Please try again." +msgstr "Username inválido e/ou a password! Por favor, tente novamente." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"A imagem que está a tentar carregar aparenta não caber na flash do " +"equipamento. Por favor verifique o ficheiro de imagem." + +msgid "Java Script required!" +msgstr "É necessário Javascript!" + +msgid "Join Network" +msgstr "Associar Rede" + +msgid "Join Network: Wireless Scan" +msgstr "Associar Rede: Procurar Redes Wireless" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Manter definições" + +msgid "Kernel Log" +msgstr "Registo do Kernel" + +msgid "Kernel Version" +msgstr "Versão do Kernel" + +msgid "Key" +msgstr "Chave" + +msgid "Key #%d" +msgstr "Chave #%d" + +msgid "Kill" +msgstr "Matar" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "Servidor L2TP" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "Intervalo de echo LCP" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Etiqueta" + +msgid "Language" +msgstr "Idioma" + +msgid "Language and Style" +msgstr "Língua e Tema" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Tempo de validade da concessão" + +msgid "Leasefile" +msgstr "Ficheiro de concessões" + +msgid "Leasetime" +msgstr "Tempo de concessão" + +msgid "Leasetime remaining" +msgstr "Tempo de atribuição restante" + +msgid "Leave empty to autodetect" +msgstr "Deixar em branco para auto-detecção" + +msgid "Leave empty to use the current WAN address" +msgstr "Deixar em branco para usar o endereço WAN actual" + +msgid "Legend:" +msgstr "Legenda:" + +msgid "Limit" +msgstr "Limite" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Link Ativo" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"Lista de servidores DNS para " +"onde encaminhar os pedidos" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "Lista de dominios que permitem respostas RFC1918 para" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" +"Escutar apenas na interface fornecida ou, se não especificada, em todas" + +msgid "Listening port for inbound DNS queries" +msgstr "Porta de escuta para entrada de consultas DNS" + +msgid "Load" +msgstr "Carga" + +msgid "Load Average" +msgstr "Carga Média" + +msgid "Loading" +msgstr "A carregar" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Endereço IPv4 Local" + +msgid "Local IPv6 address" +msgstr "Endereço IPv6 Local" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Arranque Local" + +msgid "Local Time" +msgstr "Hora Local" + +msgid "Local domain" +msgstr "Domínio local" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Especificação de dominio local. Os nomes que correspondam a este dominio " +"nunca são encaminhados e resolvidos do DHCP ou do ficheiro de hosts" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"Sufixos de dominio local a juntar aos nomes DHCP e às entradas do ficheiro " +"de hosts" + +msgid "Local server" +msgstr "Servidor local" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "Localizar consultas" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Nível de output do log" + +msgid "Log queries" +msgstr "Registo das consultas" + +msgid "Logging" +msgstr "" + +msgid "Login" +msgstr "Login" + +msgid "Logout" +msgstr "Logout" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "Endereço-MAC" + +msgid "MAC-Address Filter" +msgstr "Filtro de Endereço-MAC" + +msgid "MAC-Filter" +msgstr "Filtro-MAC" + +msgid "MAC-List" +msgstr "Lista-MAC" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Taxa Máxima" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Número máximo permitido de concessões DHCP ativas" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Número máximo permitido de consultas DNS permitidas" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "Número máximo de segundos a esperar pelo modem para ficar pronto" + +msgid "Maximum hold time" +msgstr "Tempo máximo de espera" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "Número máximo de endereços concessionados." + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "Memória" + +msgid "Memory usage (%)" +msgstr "Uso de memória (%)" + +msgid "Metric" +msgstr "Métrica" + +msgid "Minimum Rate" +msgstr "Taxa Mínima" + +msgid "Minimum hold time" +msgstr "Tempo de retenção mínimo" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Falta a extensão de protocolo para o protocolo %q" + +msgid "Mode" +msgstr "Modo" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Dispositivo do modem" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "Montar Entrada" + +msgid "Mount Point" +msgstr "Ponto de Montagem" + +msgid "Mount Points" +msgstr "Pontos de Montagem" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Pontos de montagem definem em que ponto um dispositivo de memória será " +"anexado ao sistema de arquivos" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "" + +msgid "Mount point" +msgstr "Ponto de montagem" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Sistemas de arquivos montados" + +msgid "Move down" +msgstr "Subir" + +msgid "Move up" +msgstr "Descer" + +msgid "Multicast Rate" +msgstr "Taxa de Multicast" + +msgid "Multicast address" +msgstr "Endereço de multicast" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "Candidatos a servidor NTP" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Nome" + +msgid "Name of the new interface" +msgstr "Nome da nova interface" + +msgid "Name of the new network" +msgstr "Nome da nova rede" + +msgid "Navigation" +msgstr "Navegação" + +msgid "Netmask" +msgstr "Mascara de rede" + +msgid "Network" +msgstr "Rede" + +msgid "Network Utilities" +msgstr "Ferramentas de Rede" + +msgid "Network boot image" +msgstr "Imagem de arranque via rede" + +msgid "Network without interfaces." +msgstr "Rede sem interfaces." + +msgid "Next »" +msgstr "Seguinte »" + +msgid "No DHCP Server configured for this interface" +msgstr "Sem Servidor DHCP configurado nesta interface" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Tabela sem chains" + +msgid "No files found" +msgstr "Não foram encontrados ficheiros" + +msgid "No information available" +msgstr "Sem informação disponível" + +msgid "No negative cache" +msgstr "Sem cache negativa" + +msgid "No network configured on this device" +msgstr "Nenhuma rede configurada no dispositivo" + +msgid "No network name specified" +msgstr "Nome de rede não especificado" + +msgid "No package lists available" +msgstr "Não há listas de pacotes disponiveis" + +msgid "No password set!" +msgstr "Sem password definida!" + +msgid "No rules in this chain" +msgstr "Sem regras nesta cadeia" + +msgid "No zone assigned" +msgstr "Sem zona atribuída" + +msgid "Noise" +msgstr "Ruído" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Ruído:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Nenhum" + +msgid "Normal" +msgstr "Normal" + +msgid "Not Found" +msgstr "Não encontrado" + +msgid "Not associated" +msgstr "Não associado" + +msgid "Not connected" +msgstr "Não ligado" + +msgid "Note: Configuration files will be erased." +msgstr "Nota: Os ficheiros de configuração serão apagados." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Reparo" + +msgid "Nslookup" +msgstr "Nslookup" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "Configuração-OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "Atraso do Off-State" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"Nesta página pode configurar as interfaces de rede. Pode ter várias " +"interfaces do tipo bridge, assinalando o campo \"interfaces bridge\" e " +"inserir os nomes de várias interfaces de rede separadas por espaços. Pode " +"também usar a notação para VLAN " +"INTERFACE.VLANNR (ex.: " +"eth0.1)." + +msgid "On-State Delay" +msgstr "Atraso do On-State" + +msgid "One of hostname or mac address must be specified!" +msgstr "Um nome de host ou endereço MAC deve ser especificado!" + +msgid "One or more fields contain invalid values!" +msgstr "Um ou mais campos contêm valores inválidos!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Um ou mais campos obrigatórios não têm valores!" + +msgid "Open list..." +msgstr "Abrir lista..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Opção alterada" + +msgid "Option removed" +msgstr "Opção removida" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Opções" + +msgid "Other:" +msgstr "Outro:" + +msgid "Out" +msgstr "Saída" + +msgid "Outbound:" +msgstr "Saída:" + +msgid "Outdoor Channels" +msgstr "Canais de Outdoor" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "Visão Geral" + +msgid "Owner" +msgstr "Dono" + +msgid "PAP/CHAP password" +msgstr "Password PAP/CHAP" + +msgid "PAP/CHAP username" +msgstr "Utilizador PAP/CHAP" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "Encapsulamento PPPoA " + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtp" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "O pacote libiwinfo é necessário!" + +msgid "Package lists are older than 24 hours" +msgstr "As listas de pacotes têm mais de 24 horas" + +msgid "Package name" +msgstr "Nome do pacote" + +msgid "Packets" +msgstr "Pacotes" + +msgid "Part of zone %q" +msgstr "Parte da zona %q" + +msgid "Password" +msgstr "Senha" + +msgid "Password authentication" +msgstr "Autenticação por senha" + +msgid "Password of Private Key" +msgstr "Senha da Chave Privada" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "Password alterada com sucesso!" + +msgid "Path to CA-Certificate" +msgstr "Directorio do Certificado CA" + +msgid "Path to Client-Certificate" +msgstr "Caminho para o Certificado de Cliente" + +msgid "Path to Private Key" +msgstr "Caminho da Chave Privada" + +msgid "Path to executable which handles the button event" +msgstr "Caminho do executável que lida com o botão de eventos" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Pico:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Executar reinicialização" + +msgid "Perform reset" +msgstr "Executar reset" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "Definições Físicas" + +msgid "Ping" +msgstr "Ping" + +msgid "Pkts." +msgstr "Pkts." + +msgid "Please enter your username and password." +msgstr "Insira o seu username e password." + +msgid "Policy" +msgstr "Política" + +msgid "Port" +msgstr "Porta" + +msgid "Port status:" +msgstr "Estado da porta:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Impede a comunicação cliente-a-cliente" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Controlador Wireless Prism2/2.5/3 802.11b" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Proceder" + +msgid "Processes" +msgstr "Processos" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Protocolo" + +msgid "Protocol" +msgstr "Protocolo" + +msgid "Protocol family" +msgstr "Família do protocolo" + +msgid "Protocol of the new interface" +msgstr "Protocolo da nova interface" + +msgid "Protocol support is not installed" +msgstr "O protocolo suportado não está instalado" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Qualidade" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "RTS/CTS Threshold" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "Taxa RX" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "Controlador Wireless RaLink 802.11%s" + +msgid "Radius-Accounting-Port" +msgstr "Porta-Conta-Radius" + +msgid "Radius-Accounting-Secret" +msgstr "Segredo-Conta-Radius" + +msgid "Radius-Accounting-Server" +msgstr "Servidor-Conta-Radius" + +msgid "Radius-Authentication-Port" +msgstr "Porta-Autenticação-Radius" + +msgid "Radius-Authentication-Secret" +msgstr "Segredo-Autenticação-Radius" + +msgid "Radius-Authentication-Server" +msgstr "Servidor-Autenticação-Radius" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Ler /etc/ethers para configurar o Servidor-DHCP" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"Deseja mesmo apagar esta interface? A eliminação não poder desfeita!\n" +"Pode perde a ligação ao dispositivo, caso esta ligado através desta " +"interface." + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"Deseja mesmo apagar esta rede? A eliminação não poder desfeita!\n" +"Pode perde a ligação ao dispositivo, caso esta ligado através desta rede." + +msgid "Really reset all changes?" +msgstr "Deseja mesmo limpar todas as alterações?" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"Deseja mesmo desligar esta rede?\n" +"Pode perder o acesso ao dispositivo se estiver ligado através desta rede." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"Deseja mesmo desligar a interface \"%s\" ?\n" +"Pode perder o acesso ao dispositivo se estiver ligado através desta " +"interface." + +msgid "Really switch protocol?" +msgstr "Deseja mesmo trocar o protocolo?" + +msgid "Realtime Connections" +msgstr "Ligações em Tempo Real" + +msgid "Realtime Graphs" +msgstr "Gráficos em Tempo Real" + +msgid "Realtime Load" +msgstr "Carga em Tempo Real" + +msgid "Realtime Traffic" +msgstr "Tráfego em Tempo Real" + +msgid "Realtime Wireless" +msgstr "Wireless em Tempo Real" + +msgid "Rebind protection" +msgstr "Religar protecção" + +msgid "Reboot" +msgstr "Reiniciar" + +msgid "Rebooting..." +msgstr "A reiniciar..." + +msgid "Reboots the operating system of your device" +msgstr "Reinicia o seu dispositivo" + +msgid "Receive" +msgstr "Receber" + +msgid "Receiver Antenna" +msgstr "Antena de Recepção" + +msgid "Reconnect this interface" +msgstr "Reconetar esta interface" + +msgid "Reconnecting interface" +msgstr "A reconectar interface" + +msgid "References" +msgstr "Referências" + +msgid "Regulatory Domain" +msgstr "Domínio Regulatório" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "Endereço IPv4 remoto" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Remover" + +msgid "Repeat scan" +msgstr "Repetir scan" + +msgid "Replace entry" +msgstr "Substituir entrada" + +msgid "Replace wireless configuration" +msgstr "Substituir configuração wireless" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "Necessário para certos ISPs, p.ex. Charter with DOCSIS 3" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Reset" + +msgid "Reset Counters" +msgstr "Limpar contadores" + +msgid "Reset to defaults" +msgstr "" + +msgid "Resolv and Hosts Files" +msgstr "Ficheiros Resolv e Hosts" + +msgid "Resolve file" +msgstr "" + +msgid "Restart" +msgstr "Reiniciar" + +msgid "Restart Firewall" +msgstr "Reiniciar Firewall" + +msgid "Restore backup" +msgstr "Restaurar backup" + +msgid "Reveal/hide password" +msgstr "Revelar/esconder password" + +msgid "Revert" +msgstr "Reverter" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Password do Router" + +msgid "Routes" +msgstr "Rotas" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"As rotas especificam através de que interfaces ou gateways podem ser " +"alcançados determinadas redes ou hosts." + +msgid "Run a filesystem check before mounting the device" +msgstr "" +"Correr uma verificação do sistema de ficheiros antes de montar um dispositivo" + +msgid "Run filesystem check" +msgstr "Correr uma verificação do sistema de ficheiros" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "Acesso SSH" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "Chaves-SSH" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Salvar" + +msgid "Save & Apply" +msgstr "Salvar & Aplicar" + +msgid "Save & Apply" +msgstr "Salvar & Aplicar" + +msgid "Scan" +msgstr "Procurar" + +msgid "Scheduled Tasks" +msgstr "Tarefas Agendadas" + +msgid "Section added" +msgstr "Secção adicionada" + +msgid "Section removed" +msgstr "Secção removida" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "Isolar Clientes" + +msgid "Separate WDS" +msgstr "Separar WDS" + +msgid "Server Settings" +msgstr "" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Nome do Serviço" + +msgid "Service Type" +msgstr "Tipo de Serviço" + +msgid "Services" +msgstr "Serviços" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Configurar Sincronização Horária" + +msgid "Setup DHCP Server" +msgstr "Configurar Servidor DHCP" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "Mostrar lista ficheiros para backup" + +msgid "Shutdown this interface" +msgstr "Desligar esta interface" + +msgid "Shutdown this network" +msgstr "Desligar esta rede" + +msgid "Signal" +msgstr "Sinal" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Sinal:" + +msgid "Size" +msgstr "Tamanho" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Saltar" + +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +msgid "Skip to navigation" +msgstr "Ir para a navegação" + +msgid "Slot time" +msgstr "" + +msgid "Software" +msgstr "Software" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Alguns campos são inválidos, não é possível gravar valores!" + +msgid "Sorry, the object you requested was not found." +msgstr "Lamento, o objecto que pediu não foi encontrado." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "Lamento, o servidor encontrou um erro inesperado." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "Ordenar" + +msgid "Source" +msgstr "Origem" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Especifica as portas de escuta desta instância Dropbear" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "" + +msgid "Start" +msgstr "Iniciar" + +msgid "Start priority" +msgstr "Prioridade de inicialização" + +msgid "Startup" +msgstr "" + +msgid "Static IPv4 Routes" +msgstr "Rotas Estáticas IPv4" + +msgid "Static IPv6 Routes" +msgstr "Rotas Estáticas IPv6" + +msgid "Static Leases" +msgstr "Atribuições Estáticas" + +msgid "Static Routes" +msgstr "Rotas Estáticas" + +msgid "Static WDS" +msgstr "WDS Estático" + +msgid "Static address" +msgstr "Endereço estático" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +msgid "Status" +msgstr "Status" + +msgid "Stop" +msgstr "Parar" + +msgid "Strict order" +msgstr "Ordem exacta" + +msgid "Submit" +msgstr "Enviar" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "Switch" + +msgid "Switch %q" +msgstr "" + +msgid "Switch %q (%s)" +msgstr "" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "" + +msgid "Sync with browser" +msgstr "Sincronizar com o browser" + +msgid "Synchronizing..." +msgstr "A sincronizar..." + +msgid "System" +msgstr "Sistema" + +msgid "System Log" +msgstr "Registo do Sistema" + +msgid "System Properties" +msgstr "Propriedades do Sistema" + +msgid "System log buffer size" +msgstr "" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "Definições TFTP" + +msgid "TFTP server root" +msgstr "Raíz do servidor TFTP" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "" + +msgid "Table" +msgstr "Tabela" + +msgid "Target" +msgstr "Destino" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Terminar" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"O pacote libiwinfo-lua não está instalado. Precisa de instalar este " +"pacote para que a configuração wireless funcione!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" +"O prefixo IPv6 atribuído ao provider, habitualmente termina com ::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Os caracteres permitidos são: A-Z, a-z, 0-9 e _" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"O arquivo do dispositivo de memória ou da partição (ex. /dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"O sistema que foi usado para formatar a memória (ex. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"A imagem foi carregada. Abaixo está o checksum e o tamanho dos ficheiros, " +"compare com o ficheiro original para assegurar a integração de dados.
" +"Click em \"Proceder\" para iniciar o procedimento." + +msgid "The following changes have been committed" +msgstr "As seguintes alterações foram escritas" + +msgid "The following changes have been reverted" +msgstr "Foram recuperadas as seguintes alterações " + +msgid "The following rules are currently active on this system." +msgstr "As seguintes regras estão actualmente acivas neste sistema." + +msgid "The given network name is not unique" +msgstr "O nome dado não é único" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"O hardware não é comporta multi-SSIDs a configuração será substituída se " +"prosseguir." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" +"O tamanho do perfico IPv4 em bits, o restante é usado em endereços IPv6." + +msgid "The length of the IPv6 prefix in bits" +msgstr "O comprimento do prefixo IPv6 em bits" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"As portas de rede neste dispositivo podem ser combinadas com várias VLANs onde os computadores podem " +"comunicar directamente entre eles. VLANs são muito utilizadas para separar dois segmentos de rede " +"diferentes. Muitas vezes existe por defeito uma porta de Uplink para uma " +"ligação para a rede acima como a internet ou outras portas de uma rede local." + +msgid "The selected protocol needs a device assigned" +msgstr "O protocolo escolhido precisa de um dispositivo atribuído." + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" +"O sistema está agora a limpar a partição de configuração e irá reiniciar-se " +"quando terminar." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"O sistema está a carregar o firmware para a flash.
NÃO DESLIGUE O " +"EQUIPAMENTO!
Espere alguns minutos até tentar uma ligação. Dependendo " +"da sua configuração, ode ser necessário renovar o endereço do seu computador " +"para poder ligar novamente ao router." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"A imagem carregada não contém um formato suportado. Confirme que escolhe uma " +"imagem genérica para a sua plataforma." + +msgid "There are no active leases." +msgstr "Não há concessões ativas." + +msgid "There are no pending changes to apply!" +msgstr "Não há alterações pendentes para aplicar!" + +msgid "There are no pending changes to revert!" +msgstr "Não há alterações pendentes para reverter!" + +msgid "There are no pending changes!" +msgstr "Não há alterações pendentes!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"Ainda não há um dispositivo atribuído, por favor ligue um dispositivo de " +"rede nas \"Definições Físicas\"" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"Não há uma password definida neste router. Por favor defina uma senha de " +"root para proteger a interface web e ativar o SSH." + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"Este é o conteúdo de /etc/rc.local. Insira os seus próprios comandos aqui " +"(antes de 'exit 0') para executá-los no final do processo de arranque." + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Este é o único DHCP na rede local" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "Este é o sistema de agendamento de tarefas." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"Esta lista fornece uma visão geral sobre os processos em execução no sistema." + +msgid "This page allows the configuration of custom button actions" +msgstr "" +"Esta página permite a configuração de botões para acções personalizadas." + +msgid "This page gives an overview over currently active network connections." +msgstr "Esta página fornece informações sobre as ligações de rede ativas." + +msgid "This section contains no values yet" +msgstr "Esta secção ainda não contêm valores" + +msgid "Time Synchronization" +msgstr "Sincronização Horária" + +msgid "Time Synchronization is not configured yet." +msgstr "A sincronização horária ainda não está configurada." + +msgid "Timezone" +msgstr "Fuso Horário" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"Para restaurar os ficheiros de configuração, pode carregar aqui um ficheiro " +"de backup gerado anteriormente." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Total Disponível" + +msgid "Traceroute" +msgstr "Traceroute" + +msgid "Traffic" +msgstr "Tráfego" + +msgid "Transfer" +msgstr "Transferências" + +msgid "Transmission Rate" +msgstr "Taxa de Transmissão" + +msgid "Transmit" +msgstr "Transmitir" + +msgid "Transmit Power" +msgstr "Potência de Transmissão" + +msgid "Transmitter Antenna" +msgstr "Antena de Transmissão" + +msgid "Trigger" +msgstr "Trigger" + +msgid "Trigger Mode" +msgstr "Modo de Trigger" + +msgid "Tunnel ID" +msgstr "ID do Túnel" + +msgid "Tunnel Interface" +msgstr "Interface de Túnel" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Modo Turbo" + +msgid "Tx-Power" +msgstr "Potência de Tx" + +msgid "Type" +msgstr "Tipo" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "Só UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "Dispositivo USB" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Desconhecido" + +msgid "Unknown Error, password not changed!" +msgstr "Erro Desconhecido, a password não foi alterada!" + +msgid "Unmanaged" +msgstr "Não gerido" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Alterações não Guardadas" + +msgid "Unsupported protocol type." +msgstr "Tipo de protocolo não suportado." + +msgid "Update lists" +msgstr "Actualizar listas" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "Carregar arquivo..." + +msgid "Uploaded File" +msgstr "Ficheiro carregado" + +msgid "Uptime" +msgstr "Uptime" + +msgid "Use /etc/ethers" +msgstr "Usar /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Usar a gateway do DHCP" + +msgid "Use DNS servers advertised by peer" +msgstr "Usar os servidores DNS fornecidos pelo parceiro" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Usar servidores DNS personalizados" + +msgid "Use default gateway" +msgstr "Usar gateway pre-definida" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "Usar tabela de roteamento" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "Usado" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Utilizador" + +msgid "VC-Mux" +msgstr "" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLANs em %q" + +msgid "VLANs on %q (%s)" +msgstr "VLANs em %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "Servidor VPN" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Verificar" + +msgid "Version" +msgstr "Versão" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "Sistema Aberto WEP" + +msgid "WEP Shared Key" +msgstr "Chave partilhada WEP" + +msgid "WEP passphrase" +msgstr "Palavra-Passe WEP" + +msgid "WMM Mode" +msgstr "Modo WMM" + +msgid "WPA passphrase" +msgstr "Palavra-Passe WPA" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"A encriptação-WPA necessita do wpa_supplicant (para modo cliente) ou do " +"hostapd (para modo AP ou ah-hoc) esteja instalado." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "A aguardar que as mudanças sejam aplicadas..." + +msgid "Waiting for command to complete..." +msgstr "A aguardar que o comando termine..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Aviso" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Rede Wireless" + +msgid "Wireless Adapter" +msgstr "Adaptador Wireless" + +msgid "Wireless Network" +msgstr "Rede Wireless" + +msgid "Wireless Overview" +msgstr "Vista Global Wireless" + +msgid "Wireless Security" +msgstr "Segurança Wireless" + +msgid "Wireless is disabled or not associated" +msgstr "Wireless desativada ou não associada" + +msgid "Wireless is restarting..." +msgstr "A Wireless está a reiniciar..." + +msgid "Wireless network is disabled" +msgstr "Wireless está desativado." + +msgid "Wireless network is enabled" +msgstr "A rede wireless está ativada" + +msgid "Wireless restarted" +msgstr "Rede wireless reiniciada" + +msgid "Wireless shut down" +msgstr "Desligar wireless" + +msgid "Write received DNS requests to syslog" +msgstr "Escrever os pedidos de DNS para o syslog" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Suporte XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Você pode ativar ou desativar os scripts de inicialização instalados aqui. " +"As mudanças serão aplicadas após a reinicialização do equipamento.
Aviso: Se você desativar algum script de inicialização essencial " +"como por exemplo \"rede/network\", o dispositivo poderá tornar-se " +"inacessível!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Tem de activar o Java Script no seu browser ou a LuCI não funcionará " +"corretamente." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "qualquer" + +msgid "auto" +msgstr "automático" + +#, fuzzy +msgid "automatic" +msgstr "estático" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "" + +msgid "create:" +msgstr "criar:" + +msgid "creates a bridge over specified interface(s)" +msgstr "cria uma bridge sobre determinada(s) interface(s)" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "desativar" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "expirou" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"Ficheiro onde as atribuições DHCP são armazenadas" + +msgid "forward" +msgstr "" + +msgid "full-duplex" +msgstr "full-duplex" + +msgid "half-duplex" +msgstr "half-duplex" + +msgid "help" +msgstr "ajuda" + +msgid "hidden" +msgstr "escondido" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "se o destino for uma rede" + +msgid "input" +msgstr "entrada" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "" +"Ficheiro local de DNS" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "não" + +msgid "no link" +msgstr "sem link" + +msgid "none" +msgstr "nenhum" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "desligado" + +msgid "on" +msgstr "ligado" + +msgid "open" +msgstr "abrir" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "" + +msgid "unknown" +msgstr "desconhecido" + +msgid "unlimited" +msgstr "ilimitado" + +msgid "unspecified" +msgstr "não especificado" + +msgid "unspecified -or- create:" +msgstr "" + +msgid "untagged" +msgstr "" + +msgid "yes" +msgstr "sim" + +msgid "« Back" +msgstr "« Voltar" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "Uma rede adicional será criada se deixar isto desmarcado." + +#~ msgid "Join Network: Settings" +#~ msgstr "Associar Rede: Definições" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "Porta %d" + +#~ msgid "VLAN Interface" +#~ msgstr "Interface VLAN" diff --git a/feeds/luci/modules/luci-base/po/ro/base.po b/feeds/luci/modules/luci-base/po/ro/base.po new file mode 100644 index 0000000..4763d63 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/ro/base.po @@ -0,0 +1,3671 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-04-01 23:12+0200\n" +"Last-Translator: xcentric \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d fereastra minute, %d interval secunde)" + +msgid "(%s available)" +msgstr "(%s disponibil)" + +msgid "(empty)" +msgstr "(gol)" + +msgid "(no interfaces attached)" +msgstr "(nici o interfata atasata)" + +msgid "-- Additional Field --" +msgstr "-- Camp suplimentar --" + +msgid "-- Please choose --" +msgstr "-- Te rog sa alegi --" + +msgid "-- custom --" +msgstr "-- particularizat --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Incarcarea in ultimul minut" + +msgid "15 Minute Load:" +msgstr "Incarcarea in ultimele 15 minute" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Incarcarea in ultimele 5 minute" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "DNSport de apelare" + +msgid "DNS server port" +msgstr "DNS port server" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"DNS serverul va interoga in " +"vederea procesarii fisierului" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "Adresa IPv4" + +msgid "IPv4-Gateway" +msgstr "IPv4-Poarta Acces " + +msgid "IPv4-Netmask" +msgstr "Masca de retea IPv4" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-Addresa retea (CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-Poarta Acces" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "LED Configurare" + +msgid "LED Name" +msgstr "LED Nume" + +msgid "MAC-Address" +msgstr "MAC-Addresa" + +msgid "" +"Max. DHCP leases" +msgstr "" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Max. EDNS0 marime pachet" + +msgid "Max. concurrent queries" +msgstr "Max. interogari simultane" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "Suport AR" + +msgid "ARP retry threshold" +msgstr "ARP prag reincercare" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "Punti ATM" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "ATM Indentificator Canal Virtual (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "ATM Indentificator Cale Virtual(VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"Puntile ATM expune reteaua intergrata în conexiunile AAL5 ca interfețe " +"virtuale de rețea Linux care pot fi utilizate în asociere cu DHCP sau PPP " +"pentru a forma în rețeaua furnizorului." + +msgid "ATM device number" +msgstr "ATM numar echipament" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Concentrator de Access " + +msgid "Access Point" +msgstr "Punct de Acces" + +msgid "Action" +msgstr "Actiune" + +msgid "Actions" +msgstr "Actiune" + +msgid "Activate this network" +msgstr "Activeaza aceasta retea" + +msgid "Active IPv4-Routes" +msgstr "Rute active IPv4" + +msgid "Active IPv6-Routes" +msgstr "Rute active IPv6" + +msgid "Active Connections" +msgstr "Conexiuni active" + +msgid "Active DHCP Leases" +msgstr "" + +msgid "Active DHCPv6 Leases" +msgstr "" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Adauga" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "Adauga un sufix local numelor servite din fisierele de tip hosts" + +msgid "Add new interface..." +msgstr "Adauga interfata noua.." + +msgid "Additional Hosts files" +msgstr "Fisiere de tip hosts aditionale" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Adresa" + +msgid "Address to access local relay bridge" +msgstr "Adresa de acces punte locala repetor" + +msgid "Administration" +msgstr "Administrare" + +msgid "Advanced Settings" +msgstr "Setari avansate" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Alerta" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" +"Permite autentificarea prin parola a SSH " + +msgid "Allow all except listed" +msgstr "Permite toate cu exceptia celor listate" + +msgid "Allow listed only" +msgstr "Permite doar cele listate" + +msgid "Allow localhost" +msgstr "Permite localhost" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "Permite statiilor externe sa se conecteze la porturile SSH locale" + +msgid "Allow root logins with password" +msgstr "Permite autentificarea contului root cu parola" + +msgid "Allow the root user to login with password" +msgstr "Permite contului root sa se autentifice cu parola" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"Permite raspuns upstream in plaja 127.0.0.0/8, e.g. pentru serviciile RBL" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Antena 1" + +msgid "Antenna 2" +msgstr "Antena 2" + +msgid "Antenna Configuration" +msgstr "Configurarea Antenei" + +msgid "Any zone" +msgstr "Orice Zona" + +msgid "Apply" +msgstr "Aplica" + +msgid "Applying changes" +msgstr "Se aplica modificarile" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Inregistreaza interfetele" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Statiile asociate" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Atheros 802.11%s Controler Fara Fir" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Autentificare" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Autoritare" + +msgid "Authorization Required" +msgstr "Necesita Autorizare" + +msgid "Auto Refresh" +msgstr "Reimprospatare automata" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Disponibil" + +msgid "Available packages" +msgstr "Pachete disponibile" + +msgid "Average:" +msgstr "Medie:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Inapoi" + +msgid "Back to Overview" +msgstr "Inapoi la sumar" + +msgid "Back to configuration" +msgstr "Inapoi la Configurare" + +msgid "Back to overview" +msgstr "Inapoi la vedere generala" + +msgid "Back to scan results" +msgstr "Inapoi la rezultatele scanarii" + +msgid "Background Scan" +msgstr "Scanare in fundal" + +msgid "Backup / Flash Firmware" +msgstr "Salveaza / Scrie Firmware" + +msgid "Backup / Restore" +msgstr "Salveaza / Restaureaza" + +msgid "Backup file list" +msgstr "Salveaza lista fisiere" + +msgid "Bad address specified!" +msgstr "Adresa specificata gresit !" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Bogus NX Domain Override" +msgstr "Bogus NX Domain Override" + +msgid "Bridge" +msgstr "Punte" + +msgid "Bridge interfaces" +msgstr "Leaga interfetele" + +msgid "Bridge unit number" +msgstr "Numarul unitatii in punte" + +msgid "Bring up on boot" +msgstr "Activeaza la pornire" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Broadcom 802.11%s Controller Fara Fir" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Broadcom BCM%04x 802.11 Controller Fara Fir" + +msgid "Buffered" +msgstr "Incarcat" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Butoane" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Utilizarea procesorului (%)" + +msgid "Cancel" +msgstr "Anuleaza" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Lant" + +msgid "Changes" +msgstr "Modificari" + +msgid "Changes applied." +msgstr "Modificari aplicate." + +msgid "Changes the administrator password for accessing the device" +msgstr "Schimba parola administratorului pentru accesarea dispozitivului" + +msgid "Channel" +msgstr "Canal" + +msgid "Check" +msgstr "Verificare" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Suma de verificare" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Alege zona paravanului care doresti sa o aloci acestei interfete. Selecteaza " +"nespecificat pentru a sterge interfata sau golire creaza " +"camp ce defineste o zona noua asociata interfetei." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" + +msgid "Cipher" +msgstr "" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" + +msgid "Client" +msgstr "" + +msgid "Client ID to send when requesting DHCP" +msgstr "" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" + +msgid "Close list..." +msgstr "" + +msgid "Collecting data..." +msgstr "Colectez datele.." + +msgid "Command" +msgstr "Comanda" + +msgid "Common Configuration" +msgstr "Configurarea obisnuita" + +msgid "Compression" +msgstr "Comprimare" + +msgid "Configuration" +msgstr "Configurare" + +msgid "Configuration applied." +msgstr "Configurarea aplicata." + +msgid "Configuration files will be kept." +msgstr "Fisierele de configurare vor fi pastrate." + +msgid "Confirmation" +msgstr "Confirmare" + +msgid "Connect" +msgstr "Conectare" + +msgid "Connected" +msgstr "Conectat" + +msgid "Connection Limit" +msgstr "Limita de conexiune" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Conexiuni" + +msgid "Country" +msgstr "Tara" + +msgid "Country Code" +msgstr "Codul de tara" + +msgid "Cover the following interface" +msgstr "" + +msgid "Cover the following interfaces" +msgstr "" + +msgid "Create / Assign firewall-zone" +msgstr "" + +msgid "Create Interface" +msgstr "Creaza interfata" + +msgid "Create a bridge over multiple interfaces" +msgstr "" + +msgid "Critical" +msgstr "Critic" + +msgid "Cron Log Level" +msgstr "" + +msgid "Custom Interface" +msgstr "" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" + +msgid "DHCP Leases" +msgstr "Conexiuni DHCP" + +msgid "DHCP Server" +msgstr "Server DHCP" + +msgid "DHCP and DNS" +msgstr "DHCP si DNS" + +msgid "DHCP client" +msgstr "" + +msgid "DHCP-Options" +msgstr "Optiuni DHCP" + +msgid "DHCPv6 Leases" +msgstr "" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Default %d" +msgstr "" + +msgid "Default gateway" +msgstr "" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Stare implicita" + +msgid "Define a name for this network." +msgstr "Definiti un nume pentru aceasta retea." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" + +msgid "Delete" +msgstr "Sterge" + +msgid "Delete this network" +msgstr "Sterge aceasta retea" + +msgid "Description" +msgstr "Descriere" + +msgid "Design" +msgstr "" + +msgid "Destination" +msgstr "Destinatie" + +msgid "Device" +msgstr "Dispozitiv" + +msgid "Device Configuration" +msgstr "Configurarea dispozitivului" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Diagnosticuri" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Director" + +msgid "Disable" +msgstr "Dezactiveaza" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Dezactiveaza DHCP " +"pentru aceasta interfata." + +msgid "Disable DNS setup" +msgstr "Dezactiveaza configuratia DNS" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "" + +msgid "Disabled" +msgstr "Dezactivat" + +msgid "Discard upstream RFC1918 responses" +msgstr "" + +msgid "Displaying only packages containing" +msgstr "" + +msgid "Distance Optimization" +msgstr "Optimizarea distantei" + +msgid "Distance to farthest network member in meters." +msgstr "Distanta catre cel mai departat membru din retea in metri." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Diversitate" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "" + +msgid "Domain required" +msgstr "Domeniul necesar" + +msgid "Domain whitelist" +msgstr "" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" + +msgid "Download and install package" +msgstr "Descarca si instaleaza pachetul" + +msgid "Download backup" +msgstr "Descarca backup" + +msgid "Dropbear Instance" +msgstr "Instanta dropbear" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" + +msgid "Dynamic tunnel" +msgstr "" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "" + +msgid "Edit" +msgstr "Editeaza" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Editeaza aceasta interfata" + +msgid "Edit this network" +msgstr "Editeaza aceasta retea" + +msgid "Emergency" +msgstr "Urgenta" + +msgid "Enable" +msgstr "Activeaza" + +msgid "Enable STP" +msgstr "Activeaza STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +msgid "Enable NTP client" +msgstr "" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Activeaza serverul TFTP" + +msgid "Enable VLAN functionality" +msgstr "Activeaza VLAN-urile" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "" + +msgid "Enable this swap" +msgstr "" + +msgid "Enable/Disable" +msgstr "Activeaza/Dezactiveaza" + +msgid "Enabled" +msgstr "Activat" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" + +msgid "Encapsulation mode" +msgstr "Modul de incapsulare" + +msgid "Encryption" +msgstr "Criptare" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Stergere..." + +msgid "Error" +msgstr "Eroare" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Adaptor de retea ethernet" + +msgid "Ethernet Switch" +msgstr "Switch-ul ethernet" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "Expira" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Server de log-uri extern" + +msgid "External system log server port" +msgstr "Portul serverului de log-uri extern" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "" + +msgid "File" +msgstr "Fisier" + +msgid "Filename of the boot image advertised to clients" +msgstr "" + +msgid "Filesystem" +msgstr "Sistem de fisiere" + +msgid "Filter" +msgstr "Filtreaza" + +msgid "Filter private" +msgstr "Filtreaza privatele" + +msgid "Filter useless" +msgstr "Filtreaza nefolositele" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Gaseste si alatura in retea" + +msgid "Find package" +msgstr "Gaseste pachet" + +msgid "Finish" +msgstr "Termina" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall Settings" +msgstr "Setarile firewall-ului" + +msgid "Firewall Status" +msgstr "Status la firewall" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Versiunea de firmware" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Portul sursa pentru intrebarile DNS catre exterior" + +msgid "Flash Firmware" +msgstr "Rescrie firmware" + +msgid "Flash image..." +msgstr "" + +msgid "Flash new firmware image" +msgstr "" + +msgid "Flash operations" +msgstr "" + +msgid "Flashing..." +msgstr "" + +msgid "Force" +msgstr "Forteaza" + +msgid "Force CCMP (AES)" +msgstr "Forteaza CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" +"Forteaza facilitatea DHCP in aceasta retea chiar daca alt server DHCP exista." + +msgid "Force TKIP" +msgstr "Forteaza TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Forteaza TKIP si CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "" + +msgid "Forwarding mode" +msgstr "" + +msgid "Fragmentation Threshold" +msgstr "" + +msgid "Frame Bursting" +msgstr "" + +msgid "Free" +msgstr "Liber" + +msgid "Free space" +msgstr "Spatiu liber" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "" + +msgid "GPRS only" +msgstr "Doar GPRS" + +msgid "Gateway" +msgstr "Gateway" + +msgid "Gateway ports" +msgstr "Porturile gateway" + +msgid "General Settings" +msgstr "Setari principale" + +msgid "General Setup" +msgstr "Configurare generala" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "Confirmarea parolei nu se potriveste cu prima, parola neschimbata !" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "" + +msgid "Hang Up" +msgstr "" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Aici poti configura aspectele de baza ale dispozitivului cum ar fi numele " +"sau fusul orar." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "" + +msgid "Hide ESSID" +msgstr "Ascunde ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Intrari de tip host" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "" + +msgid "Hostname" +msgstr "Numele de host" + +msgid "Hostname to send when requesting DHCP" +msgstr "" + +msgid "Hostnames" +msgstr "Nume de host" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "Adresa IP" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "Firewall IPv4" + +msgid "IPv4 WAN Status" +msgstr "Statusul IPv4 pe WAN" + +msgid "IPv4 address" +msgstr "Adresa IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 si IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "IPv4 gateway" +msgstr "" + +msgid "IPv4 netmask" +msgstr "" + +msgid "IPv4 only" +msgstr "Doar IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "" + +msgid "IPv4-Address" +msgstr "Adresa IPv4" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "Firewall IPv6" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "Statusul IPv6 pe WAN" + +msgid "IPv6 address" +msgstr "Adresa IPv6" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "" + +msgid "IPv6 only" +msgstr "Doar IPv6" + +msgid "IPv6 prefix" +msgstr "" + +msgid "IPv6 prefix length" +msgstr "" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +msgid "Identity" +msgstr "Identitate" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "" + +msgid "Ignore resolve file" +msgstr "" + +msgid "Image" +msgstr "Imagine" + +msgid "In" +msgstr "" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "" + +msgid "Inbound:" +msgstr "Intrare:" + +msgid "Info" +msgstr "Informatii" + +msgid "Initscript" +msgstr "Script de initializare" + +msgid "Initscripts" +msgstr "Scripturi de initializare" + +msgid "Install" +msgstr "Instalati" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Instalati pachetul %q" + +msgid "Install protocol extensions..." +msgstr "" + +msgid "Installed packages" +msgstr "Pachete instalate" + +msgid "Interface" +msgstr "Interfata" + +msgid "Interface Configuration" +msgstr "Configurarea interfetei" + +msgid "Interface Overview" +msgstr "Prezentare interfata" + +msgid "Interface is reconnecting..." +msgstr "Interfata se reconecteaza.." + +msgid "Interface is shutting down..." +msgstr "Interfata se opreste.." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "Interfata nu e prezenta sau nu este conectata inca." + +msgid "Interface reconnected" +msgstr "Interfata reconectata" + +msgid "Interface shut down" +msgstr "Interfata oprita" + +msgid "Interfaces" +msgstr "Interfete" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "Eroare interna de server" + +msgid "Invalid" +msgstr "Invalid" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "Utilizator si/sau parola invalide! Incearcati din nou." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Se pare ca ai incercat sa rescrii o imagine care nu are loc in memoria " +"flash, verifica fisierul din nou!" + +msgid "Java Script required!" +msgstr "Ai nevoie de Java Script !" + +msgid "Join Network" +msgstr "" + +msgid "Join Network: Wireless Scan" +msgstr "" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Pastrati setarile" + +msgid "Kernel Log" +msgstr "Log-ul kernelului" + +msgid "Kernel Version" +msgstr "Versiunea de kernel" + +msgid "Key" +msgstr "" + +msgid "Key #%d" +msgstr "" + +msgid "Kill" +msgstr "Opreste" + +msgid "L2TP" +msgstr "" + +msgid "L2TP Server" +msgstr "" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "" + +msgid "LLC" +msgstr "" + +msgid "Label" +msgstr "Eticheta" + +msgid "Language" +msgstr "Limba" + +msgid "Language and Style" +msgstr "Limba si stilul interfetei" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Leasefile" +msgstr "" + +msgid "Leasetime" +msgstr "" + +msgid "Leasetime remaining" +msgstr "" + +msgid "Leave empty to autodetect" +msgstr "" + +msgid "Leave empty to use the current WAN address" +msgstr "" + +msgid "Legend:" +msgstr "Legenda:" + +msgid "Limit" +msgstr "Limita" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "Incarcarea" + +msgid "Load Average" +msgstr "Incarcarea medie" + +msgid "Loading" +msgstr "Incarcare" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Adresa IPv4 locala" + +msgid "Local IPv6 address" +msgstr "Adresa IPv6 locala" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "" + +msgid "Local Time" +msgstr "Ora locala" + +msgid "Local domain" +msgstr "Domeniu local" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "Server local" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "" + +msgid "Log queries" +msgstr "" + +msgid "Logging" +msgstr "" + +msgid "Login" +msgstr "Autentificare" + +msgid "Logout" +msgstr "Iesire" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "MAC-Address Filter" +msgstr "" + +msgid "MAC-Filter" +msgstr "" + +msgid "MAC-List" +msgstr "" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Rata maxima" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Numarul maxim de intrebari DNS simultane" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +msgid "Maximum hold time" +msgstr "" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "" + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "Memorie" + +msgid "Memory usage (%)" +msgstr "Utilizarea memoriei (%)" + +msgid "Metric" +msgstr "Metrica" + +msgid "Minimum Rate" +msgstr "Rata minima" + +msgid "Minimum hold time" +msgstr "" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "Mod" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "" + +msgid "Mount Points" +msgstr "" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "" + +msgid "Mount point" +msgstr "" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Multicast Rate" +msgstr "Rata de multicast" + +msgid "Multicast address" +msgstr "" + +msgid "NAS ID" +msgstr "" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Nume" + +msgid "Name of the new interface" +msgstr "Numele interfetei noi" + +msgid "Name of the new network" +msgstr "Numele interfetei noi" + +msgid "Navigation" +msgstr "Navigare" + +msgid "Netmask" +msgstr "Netmask" + +msgid "Network" +msgstr "Retea" + +msgid "Network Utilities" +msgstr "Utilitare de retea" + +msgid "Network boot image" +msgstr "" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "Mai departe »" + +msgid "No DHCP Server configured for this interface" +msgstr "Nici un server DHCP configurat pentru aceasta interfata" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "" + +msgid "No files found" +msgstr "Nici un fisier gasit" + +msgid "No information available" +msgstr "Nici o informatie disponibila" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "Nici o retea configurata pe acest dispozitiv" + +msgid "No network name specified" +msgstr "" + +msgid "No package lists available" +msgstr "" + +msgid "No password set!" +msgstr "Nici o parola setata !" + +msgid "No rules in this chain" +msgstr "" + +msgid "No zone assigned" +msgstr "" + +msgid "Noise" +msgstr "Zgomot" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Zgomot:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Normal" +msgstr "Normal" + +msgid "Not Found" +msgstr "Nu a fost gasit" + +msgid "Not associated" +msgstr "Nu este asociat." + +msgid "Not connected" +msgstr "Nu este conectat" + +msgid "Note: Configuration files will be erased." +msgstr "Nota: fisierele de configurare vor fi sterse." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Notificare" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "Configuratia-OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "Unul sau mai multe campuri contin valori invalide !" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Unul sau mai multe campuri nu contin valori !" + +msgid "Open list..." +msgstr "" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Optiunea schimbata" + +msgid "Option removed" +msgstr "Optiunea eliminata" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Optiuni" + +msgid "Other:" +msgstr "Altele:" + +msgid "Out" +msgstr "Iesire" + +msgid "Outbound:" +msgstr "" + +msgid "Outdoor Channels" +msgstr "" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "Prezentare generala" + +msgid "Owner" +msgstr "Proprietar" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "" + +msgid "PPP" +msgstr "" + +msgid "PPPoA Encapsulation" +msgstr "Incapsulare PPPoA" + +msgid "PPPoATM" +msgstr "" + +msgid "PPPoE" +msgstr "" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "Pachetul libiwinfo este necesar !" + +msgid "Package lists are older than 24 hours" +msgstr "" + +msgid "Package name" +msgstr "Numele pachetului" + +msgid "Packets" +msgstr "Pachete" + +msgid "Part of zone %q" +msgstr "" + +msgid "Password" +msgstr "Parola" + +msgid "Password authentication" +msgstr "Autentificarea cu parola" + +msgid "Password of Private Key" +msgstr "Parola cheii private" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "Parola schimbata cu succes !" + +msgid "Path to CA-Certificate" +msgstr "Calea catre certificatul CA" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "Calea catre cheia privata" + +msgid "Path to executable which handles the button event" +msgstr "Calea catre executabilul care se ocupa de evenimentul butonului" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Maxim:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Restarteaza" + +msgid "Perform reset" +msgstr "Reseteaza" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Rata phy:" + +msgid "Physical Settings" +msgstr "Setarile fizice" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "Packete." + +msgid "Please enter your username and password." +msgstr "Introdu utilizatorul si parola." + +msgid "Policy" +msgstr "" + +msgid "Port" +msgstr "Port" + +msgid "Port status:" +msgstr "Stare port:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Continua" + +msgid "Processes" +msgstr "Procese" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "" + +msgid "Protocol" +msgstr "Protocol" + +msgid "Protocol family" +msgstr "Familia de protocol" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Calitate" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Citeste fisierul /etc/ethers pentru configurarea serverului " +"DHCP-" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "" + +msgid "Realtime Connections" +msgstr "Conexiuni in timp real" + +msgid "Realtime Graphs" +msgstr "Grafice in timp real" + +msgid "Realtime Load" +msgstr "Incarcarea in timp real" + +msgid "Realtime Traffic" +msgstr "Traficul in timp real" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "Rebooteaza" + +msgid "Rebooting..." +msgstr "" + +msgid "Reboots the operating system of your device" +msgstr "Rebooteaza sistemul de operare al dispozitivului tau" + +msgid "Receive" +msgstr "" + +msgid "Receiver Antenna" +msgstr "Antena receptorului" + +msgid "Reconnect this interface" +msgstr "Reconecteaza aceasta interfata" + +msgid "Reconnecting interface" +msgstr "Interfata se reconecteaza chiar acum" + +msgid "References" +msgstr "Referinte" + +msgid "Regulatory Domain" +msgstr "Domeniu regulatoriu" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Elimina" + +msgid "Repeat scan" +msgstr "Repeta scanarea" + +msgid "Replace entry" +msgstr "Inlocuieste intrarea" + +msgid "Replace wireless configuration" +msgstr "Inlocuieste configuratia wireless" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Reset" + +msgid "Reset Counters" +msgstr "Reseteaza counterii" + +msgid "Reset to defaults" +msgstr "" + +msgid "Resolv and Hosts Files" +msgstr "Fisierele de rezolvare si hosturi DNS" + +msgid "Resolve file" +msgstr "Fisierul de rezolvare" + +msgid "Restart" +msgstr "Restart" + +msgid "Restart Firewall" +msgstr "Restarteaza firewallul" + +msgid "Restore backup" +msgstr "Reface backup-ul" + +msgid "Reveal/hide password" +msgstr "Arata / ascunde parola" + +msgid "Revert" +msgstr "" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Parola routerului" + +msgid "Routes" +msgstr "Rute" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "Acces SSH" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "Cheile SSH" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Salveaza" + +msgid "Save & Apply" +msgstr "Salveaza si aplica" + +msgid "Save & Apply" +msgstr "Salveaza & Aplica" + +msgid "Scan" +msgstr "Scan" + +msgid "Scheduled Tasks" +msgstr "Operatiuni programate" + +msgid "Section added" +msgstr "Sectiune adaugata" + +msgid "Section removed" +msgstr "Sectiune eliminata" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "" + +msgid "Separate WDS" +msgstr "" + +msgid "Server Settings" +msgstr "Setarile serverului" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Nume serviciu" + +msgid "Service Type" +msgstr "Tip de serviciu" + +msgid "Services" +msgstr "Servicii" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Configurare sincronizare timp" + +msgid "Setup DHCP Server" +msgstr "Seteaza serverul DHCP" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "Opreste aceasta interfata" + +msgid "Shutdown this network" +msgstr "Opreste aceasta retea" + +msgid "Signal" +msgstr "Semnal" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Semnal:" + +msgid "Size" +msgstr "Marime" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "" + +msgid "Skip to content" +msgstr "" + +msgid "Skip to navigation" +msgstr "" + +msgid "Slot time" +msgstr "" + +msgid "Software" +msgstr "Software" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "" + +msgid "Sorry, the object you requested was not found." +msgstr "" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "" + +msgid "Source" +msgstr "Sursa" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "" + +msgid "Start" +msgstr "Start" + +msgid "Start priority" +msgstr "" + +msgid "Startup" +msgstr "Pornire" + +msgid "Static IPv4 Routes" +msgstr "Rute statice IPv4" + +msgid "Static IPv6 Routes" +msgstr "Rute statice IPv6" + +msgid "Static Leases" +msgstr "" + +msgid "Static Routes" +msgstr "Rute statice" + +msgid "Static WDS" +msgstr "" + +msgid "Static address" +msgstr "" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +msgid "Status" +msgstr "Status" + +msgid "Stop" +msgstr "Stop" + +msgid "Strict order" +msgstr "" + +msgid "Submit" +msgstr "Trimite" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "" + +msgid "Switch %q" +msgstr "" + +msgid "Switch %q (%s)" +msgstr "" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "" + +msgid "Sync with browser" +msgstr "" + +msgid "Synchronizing..." +msgstr "" + +msgid "System" +msgstr "Sistem" + +msgid "System Log" +msgstr "Log de sistem" + +msgid "System Properties" +msgstr "Proprietati sistem" + +msgid "System log buffer size" +msgstr "" + +msgid "TCP:" +msgstr "" + +msgid "TFTP Settings" +msgstr "Setarile TFTP" + +msgid "TFTP server root" +msgstr "" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "" + +msgid "Table" +msgstr "Tabel" + +msgid "Target" +msgstr "Tinta" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Termina" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "" + +msgid "The following changes have been reverted" +msgstr "" + +msgid "The following rules are currently active on this system." +msgstr "" + +msgid "The given network name is not unique" +msgstr "" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" + +msgid "There are no active leases." +msgstr "" + +msgid "There are no pending changes to apply!" +msgstr "Nu exista modificari in asteptare de aplicat !" + +msgid "There are no pending changes to revert!" +msgstr "Nu exista modificari in asteptare de anulat !" + +msgid "There are no pending changes!" +msgstr "Nu exista modificari in asteptare !" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"Nu exista o parola pe acest router. Configureaza o parola la contul root " +"pentru a proteja interfata web si porni SSH." + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" + +msgid "This page allows the configuration of custom button actions" +msgstr "" + +msgid "This page gives an overview over currently active network connections." +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time Synchronization" +msgstr "" + +msgid "Time Synchronization is not configured yet." +msgstr "" + +msgid "Timezone" +msgstr "Fusul orar" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Total disponibil" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "Trafic" + +msgid "Transfer" +msgstr "Transfer" + +msgid "Transmission Rate" +msgstr "Rata de transmitere" + +msgid "Transmit" +msgstr "" + +msgid "Transmit Power" +msgstr "Puterea de transmitere" + +msgid "Transmitter Antenna" +msgstr "Antena de transmitere" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "Interfata de tunel" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Mod turbo" + +msgid "Tx-Power" +msgstr "Puterea TX" + +msgid "Type" +msgstr "Tip" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "Doar UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +msgid "USB Device" +msgstr "Dispozitiv USB" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Necunoscut" + +msgid "Unknown Error, password not changed!" +msgstr "Eroare necunoscuta, parola neschimbata !" + +msgid "Unmanaged" +msgstr "Neadministrate" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Modificari nesalvate" + +msgid "Unsupported protocol type." +msgstr "Tipul de protocol neacceptat." + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "" + +msgid "Uploaded File" +msgstr "Fisier incarcat" + +msgid "Uptime" +msgstr "Uptime" + +msgid "Use /etc/ethers" +msgstr "Foloseste /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "Foloseste codurile de tara ISO/IEC 3166 alpha2." + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "" + +msgid "Use default gateway" +msgstr "" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "Folosit" + +msgid "Used Key Slot" +msgstr "Slot de cheie folosit" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Utilizator" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLANuri pe %q" + +msgid "VLANs on %q (%s)" +msgstr "" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "Versiune" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "Sistem deschis WEP" + +msgid "WEP Shared Key" +msgstr "Sistem de cheie impartasita WEP" + +msgid "WEP passphrase" +msgstr "Parola WEP" + +msgid "WMM Mode" +msgstr "Mod WMM" + +msgid "WPA passphrase" +msgstr "Parola WPA" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"Criptarea WPA necesita wpa_supplicant (pentru modul client) sau hostapd " +"(pentru modul AP sau ad-hoc) instalate." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Avertizare" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Wireless" + +msgid "Wireless Adapter" +msgstr "Adaptorul wireless" + +msgid "Wireless Network" +msgstr "Retea wireless" + +msgid "Wireless Overview" +msgstr "Sumarul wireless" + +msgid "Wireless Security" +msgstr "Securitate wireless" + +msgid "Wireless is disabled or not associated" +msgstr "Wireless-ul este dezactivat sau ne-asociat" + +msgid "Wireless is restarting..." +msgstr "Wireless-ul se restarteaza.." + +msgid "Wireless network is disabled" +msgstr "Reteaua wireless este dezactivata" + +msgid "Wireless network is enabled" +msgstr "Reteaua wireless este activata" + +msgid "Wireless restarted" +msgstr "Wireless-ul restartat" + +msgid "Wireless shut down" +msgstr "Wireless-ul oprit" + +msgid "Write received DNS requests to syslog" +msgstr "Scrie cererile DNS primite in syslog" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Suport XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "oricare" + +msgid "auto" +msgstr "auto" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "" + +msgid "create:" +msgstr "" + +msgid "creates a bridge over specified interface(s)" +msgstr "" + +msgid "dB" +msgstr "" + +msgid "dBm" +msgstr "" + +msgid "disable" +msgstr "dezactiveaza" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "expirat" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" + +msgid "forward" +msgstr "" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "ajutor" + +msgid "hidden" +msgstr "ascuns" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "daca tinta este o retea" + +msgid "input" +msgstr "" + +msgid "kB" +msgstr "" + +msgid "kB/s" +msgstr "" + +msgid "kbit/s" +msgstr "" + +msgid "local DNS file" +msgstr "" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "nu" + +msgid "no link" +msgstr "" + +msgid "none" +msgstr "" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "" + +msgid "on" +msgstr "" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "rutat" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "etichetat" + +msgid "unknown" +msgstr "necunoscut" + +msgid "unlimited" +msgstr "nelimitat" + +msgid "unspecified" +msgstr "nespecificat" + +msgid "unspecified -or- create:" +msgstr "" + +msgid "untagged" +msgstr "neetichetat" + +msgid "yes" +msgstr "da" + +msgid "« Back" +msgstr "« Inapoi" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "" +#~ "Daca lasati aceasta optiune neselectata va fi creata o retea aditionala" + +#~ msgid "CPU" +#~ msgstr "Procesor" + +#~ msgid "Port %d" +#~ msgstr "Port %d" + +#~ msgid "VLAN Interface" +#~ msgstr "Interfata VLAN" diff --git a/feeds/luci/modules/luci-base/po/ru/base.po b/feeds/luci/modules/luci-base/po/ru/base.po new file mode 100644 index 0000000..8394b3c --- /dev/null +++ b/feeds/luci/modules/luci-base/po/ru/base.po @@ -0,0 +1,3862 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: base\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2014-01-31 21:08+0200\n" +"Last-Translator: Moon_dark \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d минутное окно, %d секундный интервал)" + +msgid "(%s available)" +msgstr "(%s доступно)" + +msgid "(empty)" +msgstr "(пусто)" + +msgid "(no interfaces attached)" +msgstr "(нет связанных интерфейсов)" + +msgid "-- Additional Field --" +msgstr "-- Дополнительное поле --" + +msgid "-- Please choose --" +msgstr "-- Пожалуйста, выберите --" + +msgid "-- custom --" +msgstr "-- пользовательский --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Загрузка за 1 минуту:" + +msgid "15 Minute Load:" +msgstr "Загрузка за 15 минут:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Загрузка за 5 минут:" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "Порт запроса DNS" + +msgid "DNS server port" +msgstr "Порт DNS-сервера" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"DNS серверы будут опрошены в " +"порядке, определенном в resolvfile файле" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-адрес" + +msgid "IPv4-Gateway" +msgstr "IPv4-адрес шлюза" + +msgid "IPv4-Netmask" +msgstr "Маска сети IPv4" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-адрес или сеть (CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-адрес шлюза" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "Настройка LED" + +msgid "LED Name" +msgstr "Название LED" + +msgid "MAC-Address" +msgstr "MAC-адрес" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Макс. кол-во аренд DHCP" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Макс. размер пакета EDNS0" + +msgid "Max. concurrent queries" +msgstr "" +"Макс. кол-во одновременных запросов" + +# Парный шифр используется для одноадресной передачи, а групповой - для широковещательной и мультикаста +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "Поддержка AR" + +msgid "ARP retry threshold" +msgstr "Порог повтора ARP" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "Мосты ATM" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "Идентификатор виртуального канала ATM (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "Идентификатор виртуального пути ATM (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"ATM-мосты выставляют инкапсулированный Ethernet в соединениях AAL5 в " +"качестве виртуальных сетевых интерфейсов Linux, которые могут быть " +"использованы в сочетании с DHCP или PPP для подключения к сети провайдера." + +msgid "ATM device number" +msgstr "Номер устройства ATM" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Концентратор доступа" + +msgid "Access Point" +msgstr "Точка доступа" + +msgid "Action" +msgstr "Действие" + +msgid "Actions" +msgstr "Действия" + +msgid "Activate this network" +msgstr "Активировать эту сеть" + +msgid "Active IPv4-Routes" +msgstr "" +"Активные маршруты IPv4" + +msgid "Active IPv6-Routes" +msgstr "" +"Активные маршруты IPv6" + +msgid "Active Connections" +msgstr "Активные соединения" + +msgid "Active DHCP Leases" +msgstr "Активные аренды DHCP" + +msgid "Active DHCPv6 Leases" +msgstr "Активные аренды DHCPv6" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Добавить" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" +"Добавить суффикс локального домена к именам, полученным из файлов hosts" + +msgid "Add new interface..." +msgstr "Добавить новый интерфейс..." + +msgid "Additional Hosts files" +msgstr "Дополнительные файлы hosts" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Адрес" + +msgid "Address to access local relay bridge" +msgstr "Адрес для доступа к локальному мосту-ретранслятору" + +msgid "Administration" +msgstr "Управление" + +msgid "Advanced Settings" +msgstr "Расширенные настройки" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Тревожная ситуация" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" +"Разрешить SSH-аутентификацию с помощью " +"пароля" + +msgid "Allow all except listed" +msgstr "Разрешить все, кроме перечисленных" + +msgid "Allow listed only" +msgstr "Разрешить только перечисленные" + +msgid "Allow localhost" +msgstr "Разрешить локальный хост" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"Разрешить удалённым хостам подключаться к локальным перенаправленным портам " +"SSH" + +msgid "Allow root logins with password" +msgstr "Разрешить пользователю root вход с помощью пароля" + +msgid "Allow the root user to login with password" +msgstr "" +"Разрешить пользователю root входить в систему с помощью пароля" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "Разрешить ответы в диапазоне 127.0.0.0/8, например, для RBL-сервисов" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Антенна 1" + +msgid "Antenna 2" +msgstr "Антенна 2" + +msgid "Antenna Configuration" +msgstr "Конфигурация антенн" + +msgid "Any zone" +msgstr "Любая зона" + +msgid "Apply" +msgstr "Принять" + +msgid "Applying changes" +msgstr "Применение изменений" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Назначить интерфейсы..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Подключенные клиенты" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Беспроводной 802.11%s контроллер Atheros" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Аутентификация" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Авторитетный" + +msgid "Authorization Required" +msgstr "Требуется авторизация" + +msgid "Auto Refresh" +msgstr "Автообновление" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Доступно" + +msgid "Available packages" +msgstr "Доступные пакеты" + +msgid "Average:" +msgstr "Средняя:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Назад" + +msgid "Back to Overview" +msgstr "Назад к обзору" + +msgid "Back to configuration" +msgstr "Назад к настройке" + +msgid "Back to overview" +msgstr "Назад к обзору" + +msgid "Back to scan results" +msgstr "Назад к результатам сканирования" + +msgid "Background Scan" +msgstr "Фоновое сканирование" + +msgid "Backup / Flash Firmware" +msgstr "Резервная копия / прошивка" + +msgid "Backup / Restore" +msgstr "Резервное копирование / Восстановление" + +msgid "Backup file list" +msgstr "Список файлов для резервного копирования" + +msgid "Bad address specified!" +msgstr "Указан неправильный адрес!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Ниже приводится определённый список файлов для резервного копирования. Он " +"состоит из изменённых конфигурационных файлов, отмеченных opkg, необходимых " +"базовых файлов, а также шаблонов резервного копирования, определённых " +"пользователем." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Скорость" + +msgid "Bogus NX Domain Override" +msgstr "Переопределение поддельного NX-домена" + +msgid "Bridge" +msgstr "Мост" + +msgid "Bridge interfaces" +msgstr "Объединить в мост" + +msgid "Bridge unit number" +msgstr "Номер моста" + +msgid "Bring up on boot" +msgstr "Запустить при загрузке" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Беспроводной 802.11%s контроллер Broadcom" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Беспроводной 802.11 контроллер Broadcom BCM%04x" + +msgid "Buffered" +msgstr "Буферизировано" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Кнопки" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Загрузка ЦП (%)" + +msgid "Cancel" +msgstr "Отменить" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Цепочка" + +msgid "Changes" +msgstr "Изменения" + +msgid "Changes applied." +msgstr "Изменения приняты." + +msgid "Changes the administrator password for accessing the device" +msgstr "Изменить пароль администратора для доступа к устройству" + +msgid "Channel" +msgstr "Канал" + +msgid "Check" +msgstr "Проверить" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Контрольная сумма" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Укажите зону, которую вы хотите прикрепить к этому интерфейсу. Выберите " +"не определено, чтобы удалить этот интерфейс из зоны, или заполните " +"поле создать, чтобы определить новую зону и прикрепить к ней этот " +"интерфейс." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Выберите сеть (сети), которые вы хотите прикрепить к этому беспроводному " +"интерфейсу, или заполните поле создать, чтобы определить новую сеть." + +msgid "Cipher" +msgstr "Шифрование" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Нажмите \"Создать архив\", чтобы загрузить tar-архив текущих " +"конфигурационных файлов. Для сброса настроек прошивки к исходному состоянию " +"нажмите \"Выполнить сброс\" (возможно только для squashfs-образов)." + +msgid "Client" +msgstr "Клиент" + +msgid "Client ID to send when requesting DHCP" +msgstr "ID клиента при DHCP-запросе" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Завершать неактивное соединение после заданного интервала (сек.), " +"используйте значение 0 для удержания неактивного соединения" + +msgid "Close list..." +msgstr "Закрыть список..." + +msgid "Collecting data..." +msgstr "Сбор информации..." + +msgid "Command" +msgstr "Команда" + +msgid "Common Configuration" +msgstr "Общая конфигурация" + +msgid "Compression" +msgstr "Сжатие" + +msgid "Configuration" +msgstr "Конфигурация" + +msgid "Configuration applied." +msgstr "Конфигурация применена." + +msgid "Configuration files will be kept." +msgstr "Конфигурационные файлы будут сохранены." + +msgid "Confirmation" +msgstr "Подтверждение пароля" + +msgid "Connect" +msgstr "Соединить" + +msgid "Connected" +msgstr "Подключен" + +msgid "Connection Limit" +msgstr "Ограничение соединений" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Соединения" + +msgid "Country" +msgstr "Страна" + +msgid "Country Code" +msgstr "Код страны" + +msgid "Cover the following interface" +msgstr "Включить следующий интерфейс" + +msgid "Cover the following interfaces" +msgstr "Включить следующие интерфейсы" + +msgid "Create / Assign firewall-zone" +msgstr "Создать / назначить зону сетевого экрана" + +msgid "Create Interface" +msgstr "Создать интерфейс" + +msgid "Create a bridge over multiple interfaces" +msgstr "Создать мост над несколькими интерфейсами" + +msgid "Critical" +msgstr "Критическая ситуация" + +msgid "Cron Log Level" +msgstr "Уровень вывода Cron" + +msgid "Custom Interface" +msgstr "Пользовательский интерфейс" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Настройка поведения LED если это возможно." + +msgid "DHCP Leases" +msgstr "Аренды DHCP" + +msgid "DHCP Server" +msgstr "DHCP-сервер" + +msgid "DHCP and DNS" +msgstr "DHCP и DNS" + +msgid "DHCP client" +msgstr "DHCP-клиент" + +msgid "DHCP-Options" +msgstr "DHCP-Настройки" + +msgid "DHCPv6 Leases" +msgstr "Аренды DHCPv6" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "Перенаправление запросов DNS" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Отладка" + +msgid "Default %d" +msgstr "По умолчанию %d" + +msgid "Default gateway" +msgstr "Шлюз по умолчанию" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Начальное состояние" + +msgid "Define a name for this network." +msgstr "Укажите имя этой сети." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Определить дополнительные опции DHCP, например, " +"\"6,192.168.2.1,192.168.2.2\", чтобы известить клиентов о DNS-" +"серверах." + +msgid "Delete" +msgstr "Удалить" + +msgid "Delete this network" +msgstr "Удалить эту сеть" + +msgid "Description" +msgstr "Описание" + +msgid "Design" +msgstr "Тема" + +msgid "Destination" +msgstr "Назначение" + +msgid "Device" +msgstr "Устройство" + +msgid "Device Configuration" +msgstr "Конфигурация устройства" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Диагностика" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Директория" + +msgid "Disable" +msgstr "Отключить" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Отключить DHCP для этого интерфейса." + +msgid "Disable DNS setup" +msgstr "Отключить настройку DNS" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Отключить таймер HW-Beacon" + +msgid "Disabled" +msgstr "Отключено" + +msgid "Discard upstream RFC1918 responses" +msgstr "Отбрасывать ответы RFC1918" + +msgid "Displaying only packages containing" +msgstr "Показываются только пакеты, содержащие" + +msgid "Distance Optimization" +msgstr "Оптимизация расстояния" + +msgid "Distance to farthest network member in meters." +msgstr "Расстояние до самого удалённого сетевого узла в метрах." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Разновидность антенн" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq содержит в себе DHCP-сервер и DNS-" +"прокси для сетевых экранов NAT" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "Не кешировать отрицательные ответы, в т.ч. для несуществующих доменов" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Не перенаправлять запросы, которые не могут быть обработаны публичными DNS-" +"серверами" + +msgid "Do not forward reverse lookups for local networks" +msgstr "Не перенаправлять обратные DNS-запросы для локальных сетей" + +msgid "Do not send probe responses" +msgstr "Не посылать тестовые ответы" + +msgid "Domain required" +msgstr "Требуется домен" + +msgid "Domain whitelist" +msgstr "Белый список доменов" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Не перенаправлять DNS-запросы " +"без DNS-имени" + +msgid "Download and install package" +msgstr "Загрузить и установить пакет" + +msgid "Download backup" +msgstr "Загрузить резервную копию" + +msgid "Dropbear Instance" +msgstr "Dropbear" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear - это SSH-сервер со встроенным " +"SCP" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"Динамический DHCP" + +msgid "Dynamic tunnel" +msgstr "Динамический туннель" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Динамически выделять DHCP-адреса клиентам. Если выключено, то будут " +"обслужены только клиенты с постоянно арендованными адресами." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "Метод EAP" + +# "Редактировать" длинно и не влазит по ширине в кнопку - текст наезжает на иконку +#, fuzzy +msgid "Edit" +msgstr "Редактировать" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +#, fuzzy +msgid "Edit this interface" +msgstr "Редактировать этот интерфейс" + +msgid "Edit this network" +msgstr "Редактировать эту сеть" + +msgid "Emergency" +msgstr "Чрезвычайная ситуация" + +msgid "Enable" +msgstr "Включить" + +msgid "Enable STP" +msgstr "Включить STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Включить динамическое обновление оконечной точки HE.net" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Включить IPv6-согласование на PPP-соединении" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Пропускать Jumbo-кадры" + +msgid "Enable NTP client" +msgstr "Включить NTP-клиент" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Включить TFTP-сервер" + +msgid "Enable VLAN functionality" +msgstr "Включить поддержку VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Включить изучение и устаревание (learning/aging)" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Включить эту точку монтирования" + +msgid "Enable this swap" +msgstr "Включить этот раздел подкачки" + +msgid "Enable/Disable" +msgstr "Включить/выключить" + +msgid "Enabled" +msgstr "Включено" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Включает Spanning Tree Protocol на этом мосту" + +msgid "Encapsulation mode" +msgstr "Режим инкапсуляции" + +msgid "Encryption" +msgstr "Шифрование" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Стирание..." + +msgid "Error" +msgstr "Ошибка" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Ethernet-адаптер" + +msgid "Ethernet Switch" +msgstr "Ethernet-коммутатор" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Расширять имена узлов" + +msgid "Expires" +msgstr "Истекает" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" +"Время, через которое истекает аренда адреса, минимум 2 минуты (2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Сервер системного журнала" + +msgid "External system log server port" +msgstr "Порт сервера системного журнала" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Быстрые кадры" + +msgid "File" +msgstr "Файл" + +msgid "Filename of the boot image advertised to clients" +msgstr "Имя загрузочного образа, извещаемого клиентам" + +msgid "Filesystem" +msgstr "Файловая система" + +msgid "Filter" +msgstr "Фильтр" + +msgid "Filter private" +msgstr "Фильтровать частные" + +msgid "Filter useless" +msgstr "Фильтровать бесполезные" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Найти и присоединиться к сети" + +msgid "Find package" +msgstr "Найти пакет" + +msgid "Finish" +msgstr "Завершить" + +msgid "Firewall" +msgstr "Межсетевой экран" + +msgid "Firewall Settings" +msgstr "Настройки межсетевого экрана" + +msgid "Firewall Status" +msgstr "Статус межсетевого экрана" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Версия прошивки" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Фиксированный порт для исходящих DNS-запросов" + +msgid "Flash Firmware" +msgstr "Установить прошивку" + +msgid "Flash image..." +msgstr "Установить..." + +msgid "Flash new firmware image" +msgstr "Установить новый образ прошивки" + +msgid "Flash operations" +msgstr "Операции с прошивкой" + +msgid "Flashing..." +msgstr "Прошивка..." + +# Force DHCP on the network +msgid "Force" +msgstr "Принудительно" + +msgid "Force CCMP (AES)" +msgstr "Требовать CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "Использовать DHCP в этой сети, даже если найден другой сервер." + +msgid "Force TKIP" +msgstr "Требовать TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "TKIP или CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Перенаправлять трафик DHCP" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Перенаправлять широковещательный траффик" + +msgid "Forwarding mode" +msgstr "Режим перенаправления" + +msgid "Fragmentation Threshold" +msgstr "Порог фрагментации" + +msgid "Frame Bursting" +msgstr "Пакетная передача кадров" + +msgid "Free" +msgstr "Свободно" + +msgid "Free space" +msgstr "Свободное место" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "ГГц" + +msgid "GPRS only" +msgstr "Только GPRS" + +msgid "Gateway" +msgstr "Шлюз" + +msgid "Gateway ports" +msgstr "Порты шлюза" + +msgid "General Settings" +msgstr "Основные настройки" + +msgid "General Setup" +msgstr "Основные настройки" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Создать архив" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Беспроводной 802.11%s контроллер" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "Введённые пароли не совпадают, пароль не изменён!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Перейти к настройке пароля..." + +msgid "Go to relevant configuration page" +msgstr "Перейти к странице конфигурации" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "Пароль HE.net" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Обработчик" + +# Вообще, SIGHUP означает, что "пользователь отключился от терминала". Но чаще всего сигнал используется для перезапуска, так что переведу именно так. +msgid "Hang Up" +msgstr "Перезапустить" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Здесь вы можете настроить основные параметры вашего устройства такие как имя " +"хоста или часовой пояс." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"Здесь вы можете добавить открытые SSH ключи (один ключ на строку) для SSH " +"аутентификации." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Беспроводной 802.11b контроллер Hermes" + +msgid "Hide ESSID" +msgstr "Скрыть ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Записи хостов" + +msgid "Host expiry timeout" +msgstr "Таймаут хоста" + +msgid "Host-IP or Network" +msgstr "IP-адрес или сеть" + +msgid "Hostname" +msgstr "Имя хоста" + +msgid "Hostname to send when requesting DHCP" +msgstr "Имя хоста в DHCP-запросах" + +msgid "Hostnames" +msgstr "Имена хостов" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "IP-адрес" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "Межсетевой экран IPv4" + +msgid "IPv4 WAN Status" +msgstr "Статус IPv4 WAN" + +msgid "IPv4 address" +msgstr "IPv4-адрес" + +msgid "IPv4 and IPv6" +msgstr "IPv4 и IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "Широковещательный IPv4-адрес" + +msgid "IPv4 gateway" +msgstr "IPv4-адрес шлюза" + +msgid "IPv4 netmask" +msgstr "Маска сети IPv4" + +msgid "IPv4 only" +msgstr "Только IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "Длина префикса IPv4" + +msgid "IPv4-Address" +msgstr "IPv4-адрес" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "Межсетевой экран IPv6" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "Статус IPv6 WAN" + +msgid "IPv6 address" +msgstr "IPv6-адрес" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "IPv6-адрес шлюза" + +msgid "IPv6 only" +msgstr "Только IPv6" + +msgid "IPv6 prefix" +msgstr "Префикс IPv6" + +msgid "IPv6 prefix length" +msgstr "Длина префикса IPv6" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "IPv6-адрес" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6 в IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6 через IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6 через IPv4 (6to4)" + +msgid "Identity" +msgstr "Идентификация EAP" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" +"Если выбрано, монтировать устройство, используя его UUID, вместо " +"фиксированного файла устройства" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" +"Если выбрано, монтировать устройство, используя название его раздела, вместо " +"фиксированного файла устройства" + +msgid "If unchecked, no default route is configured" +msgstr "Если не выбрано, то маршрут по умолчанию не настраивается" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "Если не выбрано, то извещаемые адреса DNS-серверов игнорируются" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Если физической памяти не достаточно, то неиспользуемые данные могут быть " +"временно перемещены в раздел подкачки, что в свою очередь приведет к " +"увеличению объёму свободной RAM. " +"Однако, перемещение в файл - это достаточно долгий процесс, так как " +"устройство, на котором располагается раздел подкачки, работает гораздо " +"медленнее, чем RAM." + +msgid "Ignore /etc/hosts" +msgstr "Ignore /etc/hosts" + +msgid "Ignore interface" +msgstr "Игнорировать интерфейс" + +msgid "Ignore resolve file" +msgstr "Игнорировать файл resolv" + +msgid "Image" +msgstr "Образ" + +msgid "In" +msgstr "В" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Таймаут бездействия" + +msgid "Inbound:" +msgstr "Входящий:" + +msgid "Info" +msgstr "Информация" + +msgid "Initscript" +msgstr "Скрипт инициализации" + +msgid "Initscripts" +msgstr "Скрипты инциализации" + +msgid "Install" +msgstr "Установить" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Установить пакет %q" + +msgid "Install protocol extensions..." +msgstr "Установить расширения протокола..." + +msgid "Installed packages" +msgstr "Установленные пакеты" + +msgid "Interface" +msgstr "Интерфейс" + +msgid "Interface Configuration" +msgstr "Конфигурация интерфейса" + +msgid "Interface Overview" +msgstr "Обзор интерфейса" + +msgid "Interface is reconnecting..." +msgstr "Интерфейс переподключается..." + +msgid "Interface is shutting down..." +msgstr "Интерфейс отключается..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "Интерфейс не существует или пока не подключен." + +msgid "Interface reconnected" +msgstr "Интерфейс переподключен" + +msgid "Interface shut down" +msgstr "Интерфейс отключен" + +msgid "Interfaces" +msgstr "Интерфейсы" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "Внутренняя ошибка сервера" + +msgid "Invalid" +msgstr "Введённое значение не верно" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" +"Указан неверный VLAN ID! Доступны только идентификаторы в диапазоне от %d до " +"%d." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "Указан неверный VLAN ID! Доступны только уникальные ID" + +msgid "Invalid username and/or password! Please try again." +msgstr "Неверный логин и/или пароль! Пожалуйста попробуйте снова." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Вы пытаетесь обновить прошивку файлом, который не помещается в память " +"устройства! Пожалуйста, проверьте файл образа." + +msgid "Java Script required!" +msgstr "Требуется Java Script!" + +msgid "Join Network" +msgstr "Подключение к сети" + +msgid "Join Network: Wireless Scan" +msgstr "Подключение к сети: сканирование" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Сохранить настройки" + +msgid "Kernel Log" +msgstr "Журнал ядра" + +msgid "Kernel Version" +msgstr "Версия ядра" + +msgid "Key" +msgstr "Ключ" + +msgid "Key #%d" +msgstr "Ключ №%d" + +msgid "Kill" +msgstr "Принудительно завершить" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "L2TP-сервер" + +msgid "LCP echo failure threshold" +msgstr "Порог ошибок эхо-запросов LCP" + +msgid "LCP echo interval" +msgstr "Интервал эхо-запросов LCP" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Метка" + +msgid "Language" +msgstr "Язык" + +msgid "Language and Style" +msgstr "Язык и тема" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Срок действия аренды" + +msgid "Leasefile" +msgstr "Файл аренд" + +msgid "Leasetime" +msgstr "Время аренды" + +msgid "Leasetime remaining" +msgstr "Оставшееся время аренды" + +msgid "Leave empty to autodetect" +msgstr "Оставьте поле пустым для автоопределения" + +msgid "Leave empty to use the current WAN address" +msgstr "Оставьте пустым для использования текущего адреса WAN" + +msgid "Legend:" +msgstr "Легенда:" + +msgid "Limit" +msgstr "Предел" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Подключение" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"Список DNS-серверов для " +"перенаправления запросов" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "Список доменов, для которых разрешены ответы RFC1918" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "Список хостов, поставляющих поддельные результаты домена NX" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "Слушать только на данном интерфейсе или, если не определено, на всех" + +msgid "Listening port for inbound DNS queries" +msgstr "Порт для входящих DNS-запросов" + +msgid "Load" +msgstr "Загрузка" + +msgid "Load Average" +msgstr "Средняя загрузка" + +msgid "Loading" +msgstr "Загрузка" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Локальный IPv4-адрес" + +msgid "Local IPv6 address" +msgstr "Локальный IPv6-адрес" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Локальная загрузка" + +msgid "Local Time" +msgstr "Местное время" + +msgid "Local domain" +msgstr "Локальный домен" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Определение локального домена. Имена в этом домене никогда не запрашиваются " +"у DNS-сервера, а разрешаются на основе данных DHCP и файлов hosts" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"Суффикс локального домена, который будет добавлен к DHCP-именам и записям из " +"файлов hosts" + +msgid "Local server" +msgstr "Локальный сервер" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" +"Локализировать имя хоста в зависимости от запрашиваемой подсети, если " +"доступно несколько IP-адресов." + +msgid "Localise queries" +msgstr "Локализовывать запросы" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Уровень вывода" + +msgid "Log queries" +msgstr "Записывать запросы в журнал" + +msgid "Logging" +msgstr "Журналирование" + +msgid "Login" +msgstr "Войти" + +msgid "Logout" +msgstr "Выйти" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "Минимальный адрес аренды." + +msgid "MAC-Address" +msgstr "MAC-адрес" + +msgid "MAC-Address Filter" +msgstr "Фильтр MAC-адресов" + +msgid "MAC-Filter" +msgstr "MAC-фильтр" + +msgid "MAC-List" +msgstr "Список MAC" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "МБ/с" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "МГц" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Максимальная скорость" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Максимальное количество активных арендованных DHCP-адресов" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Максимально допустимое количество одновременных DNS-запросов" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "Максимально допустимый размер UDP пакетов-EDNS.0" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "Максимальное время ожидания готовности модема (секунды)" + +msgid "Maximum hold time" +msgstr "Максимальное время удержания" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "Максимальное количество арендованных адресов." + +msgid "Mbit/s" +msgstr "Мбит/с" + +msgid "Memory" +msgstr "Память" + +msgid "Memory usage (%)" +msgstr "Использование памяти (%)" + +msgid "Metric" +msgstr "Метрика" + +msgid "Minimum Rate" +msgstr "Минимальная скорость" + +msgid "Minimum hold time" +msgstr "Минимальное время удержания" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Отсутствует расширение протокола %q" + +msgid "Mode" +msgstr "Режим" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Модем" + +msgid "Modem init timeout" +msgstr "Таймаут инициализации модема" + +# 802.11 monitor mode +msgid "Monitor" +msgstr "Монитор" + +msgid "Mount Entry" +msgstr "Точка монтирования" + +msgid "Mount Point" +msgstr "Точка монтирования" + +msgid "Mount Points" +msgstr "Точки монтирования" + +msgid "Mount Points - Mount Entry" +msgstr "Точки монтирования - Запись" + +msgid "Mount Points - Swap Entry" +msgstr "Точки монтирования - Запись подкачки" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Точки монтирования определяют, куда в файловой системе будет прикреплено " +"запоминающее устройство" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Опции монтирования" + +msgid "Mount point" +msgstr "Точка монтирования" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Смонтированные файловые системы" + +msgid "Move down" +msgstr "Переместить вниз" + +msgid "Move up" +msgstr "Переместить вверх" + +msgid "Multicast Rate" +msgstr "Скорость групповой передачи" + +msgid "Multicast address" +msgstr "Адрес групповой передачи" + +msgid "NAS ID" +msgstr "Идентификатор NAS" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "Список NTP-серверов" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Имя" + +msgid "Name of the new interface" +msgstr "Имя нового интерфейса" + +msgid "Name of the new network" +msgstr "Имя новой сети" + +msgid "Navigation" +msgstr "Навигация" + +msgid "Netmask" +msgstr "Маска сети" + +msgid "Network" +msgstr "Сеть" + +msgid "Network Utilities" +msgstr "Сетевые утилиты" + +msgid "Network boot image" +msgstr "Образ системы для сетевой загрузки" + +msgid "Network without interfaces." +msgstr "Сеть без интерфейсов." + +msgid "Next »" +msgstr "Следующий »" + +msgid "No DHCP Server configured for this interface" +msgstr "DHCP-сервер не настроен для этого интерфейса" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Нет цепочек в этой таблице" + +msgid "No files found" +msgstr "Файлы не найдены" + +msgid "No information available" +msgstr "Нет доступной информации" + +msgid "No negative cache" +msgstr "Отключить кэш отрицательных ответов" + +msgid "No network configured on this device" +msgstr "Не настроена сеть на устройстве" + +msgid "No network name specified" +msgstr "Не задано имя сети" + +msgid "No package lists available" +msgstr "Список пакетов не доступен" + +msgid "No password set!" +msgstr "Пароль не установлен!" + +msgid "No rules in this chain" +msgstr "Нет правил в данной цепочке" + +msgid "No zone assigned" +msgstr "Зона не присвоена" + +msgid "Noise" +msgstr "Шум" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Шум:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Нет" + +msgid "Normal" +msgstr "Нормально" + +msgid "Not Found" +msgstr "Не найдено" + +msgid "Not associated" +msgstr "Не связанный" + +msgid "Not connected" +msgstr "Не подключено" + +msgid "Note: Configuration files will be erased." +msgstr "Примечание: конфигурационные файлы будут стёрты." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Заметка" + +msgid "Nslookup" +msgstr "DNS-запрос" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "Настройка OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "Задержка выключенного состояния" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"На этой странице вы можете настроить сетевые интерфейсы. Вы можете " +"объединить несколько интерфейсов в мост, выбрав опцию \"Объединить в мост\" " +"и введя список интерфейсов, разделенных пробелами. Вы также можете " +"использовать VLAN-" +"обозначения вида ИНТЕРФЕЙС.НОМЕРVLAN (напр.: eth0.1)." + +msgid "On-State Delay" +msgstr "Задержка включенного состояния" + +msgid "One of hostname or mac address must be specified!" +msgstr "Должен быть указан либо MAC-адрес, либо имя хоста!" + +msgid "One or more fields contain invalid values!" +msgstr "Одно или несколько полей содержат недопустимые значения!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Одно или несколько обязательных полей не заполнены!" + +msgid "Open list..." +msgstr "Открыть список..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Опция изменена" + +msgid "Option removed" +msgstr "Опция удалена" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Опции" + +msgid "Other:" +msgstr "Другие:" + +msgid "Out" +msgstr "Вне" + +msgid "Outbound:" +msgstr "Исходящий:" + +msgid "Outdoor Channels" +msgstr "Внешние каналы" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "Назначить MAC-адрес" + +msgid "Override MTU" +msgstr "Назначить MTU" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "Назначить шлюз в ответах DHCP" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"Переопределите сетевую маску, отправленную клиентам. Обычно это вычислено от " +"подсети, которая подана." + +msgid "Override the table used for internal routes" +msgstr "Назначить таблицу внутренних маршрутов" + +msgid "Overview" +msgstr "Обзор" + +msgid "Owner" +msgstr "Владелец" + +msgid "PAP/CHAP password" +msgstr "Пароль PAP/CHAP" + +msgid "PAP/CHAP username" +msgstr "Имя пользователя PAP/CHAP" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "Инкапсуляция PPPoA" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPTP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "Требуется пакет libiwinfo!" + +msgid "Package lists are older than 24 hours" +msgstr "Список пакетов обновлялся более 24 часов назад" + +msgid "Package name" +msgstr "Имя пакета" + +msgid "Packets" +msgstr "Пакеты" + +msgid "Part of zone %q" +msgstr "Часть зоны %q" + +msgid "Password" +msgstr "Пароль" + +msgid "Password authentication" +msgstr "Аутентификация с помощью пароля" + +msgid "Password of Private Key" +msgstr "Пароль или закрытый ключ" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "Пароль успешно изменён!" + +msgid "Path to CA-Certificate" +msgstr "Путь к центру сертификации" + +msgid "Path to Client-Certificate" +msgstr "Путь к клиентскому сертификату" + +msgid "Path to Private Key" +msgstr "Путь к личному ключу" + +msgid "Path to executable which handles the button event" +msgstr "Путь к программе, обрабатывающей нажатие кнопки" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Пиковая:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Выполнить перезагрузку" + +msgid "Perform reset" +msgstr "Выполнить сброс" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Скорость:" + +msgid "Physical Settings" +msgstr "Настройки канала" + +msgid "Ping" +msgstr "Эхо-запрос" + +msgid "Pkts." +msgstr "Пакетов." + +msgid "Please enter your username and password." +msgstr "Пожалуйста, введите логин и пароль." + +msgid "Policy" +msgstr "Политика" + +msgid "Port" +msgstr "Порт" + +msgid "Port status:" +msgstr "Состояние порта:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" +"Предполагать, что узел недоступен после указанного количества ошибок " +"получения эхо-пакета LCP, введите 0 для игнорирования ошибок" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Не позволяет клиентам обмениваться друг с другом информацией" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Беспроводной 802.11b контроллер Prism2/2.5/3" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Продолжить" + +msgid "Processes" +msgstr "Процессы" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Прот." + +msgid "Protocol" +msgstr "Протокол" + +msgid "Protocol family" +msgstr "Семейство протоколов" + +msgid "Protocol of the new interface" +msgstr "Протокол нового интерфейса" + +msgid "Protocol support is not installed" +msgstr "Поддержка протокола не установлена" + +msgid "Provide NTP server" +msgstr "Включить NTP-сервер" + +msgid "Provide new network" +msgstr "Предоставлять новую сеть" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Псевдо Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Качество" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "Порог RTS/CTS" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "Скорость приёма" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "Беспроводной 802.11%s контроллер RaLink" + +msgid "Radius-Accounting-Port" +msgstr "Порт Radius-Accounting" + +msgid "Radius-Accounting-Secret" +msgstr "Секрет Radius-Accounting" + +msgid "Radius-Accounting-Server" +msgstr "Сервер Radius-Accounting" + +msgid "Radius-Authentication-Port" +msgstr "Порт Radius-Authentication" + +msgid "Radius-Authentication-Secret" +msgstr "Секрет Radius-Authentication" + +msgid "Radius-Authentication-Server" +msgstr "Сервер Radius-Authentication" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Читать /etc/ethers для настройки DHCP-сервера" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"Действительно удалить этот интерфейс? Удаление не может быть отменено!\\nВы " +"можете потерять доступ к этому устройству, если вы подключены через этот " +"интерфейс." + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"Действительно удалить эту беспроводную сеть? Удаление не может быть отменено!" +"\\nВы можете потерять доступ к этому устройству, если вы подключены через " +"эту сеть." + +msgid "Really reset all changes?" +msgstr "Действительно сбросить все изменения?" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"Действительно выключить сеть?\\nВы можете потерять доступ к этому " +"устройству, если вы подключены через этот интерфейс." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"Действительно отключить интерфейс \"%s\" ?\\nВы можете потерять доступ к " +"этому устройству, если вы подключены через этот интерфейс." + +msgid "Really switch protocol?" +msgstr "Вы действительно хотите изменить протокол?" + +msgid "Realtime Connections" +msgstr "Соединения в реальном времени" + +msgid "Realtime Graphs" +msgstr "Графики в реальном времени" + +msgid "Realtime Load" +msgstr "Загрузка в реальном времени" + +msgid "Realtime Traffic" +msgstr "Трафик в реальном времени" + +msgid "Realtime Wireless" +msgstr "Беспроводная сеть в реальном времени" + +msgid "Rebind protection" +msgstr "Защита от DNS Rebinding" + +msgid "Reboot" +msgstr "Перезагрузка" + +msgid "Rebooting..." +msgstr "Перезагрузка..." + +msgid "Reboots the operating system of your device" +msgstr "Перезагрузить операционную систему вашего устройства" + +msgid "Receive" +msgstr "Приём" + +msgid "Receiver Antenna" +msgstr "Приёмная антенна" + +msgid "Reconnect this interface" +msgstr "Переподключить этот интерфейс" + +msgid "Reconnecting interface" +msgstr "Интерфейс переподключается" + +# References to firewall chains +msgid "References" +msgstr "Ссылки" + +msgid "Regulatory Domain" +msgstr "Нормативная зона" + +msgid "Relay" +msgstr "Ретранслятор" + +msgid "Relay Bridge" +msgstr "Мост-ретранслятор" + +msgid "Relay between networks" +msgstr "Ретранслятор между сетями" + +msgid "Relay bridge" +msgstr "Мост-ретранслятор" + +msgid "Remote IPv4 address" +msgstr "Удалённый IPv4-адрес" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Удалить" + +msgid "Repeat scan" +msgstr "Повторить сканирование" + +msgid "Replace entry" +msgstr "Заменить запись" + +msgid "Replace wireless configuration" +msgstr "Заменить беспроводную конфигурацию" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "Требуется для некоторых интернет-провайдеров" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Сбросить" + +msgid "Reset Counters" +msgstr "Сбросить счётчики" + +msgid "Reset to defaults" +msgstr "Сбросить на значения по умолчанию" + +msgid "Resolv and Hosts Files" +msgstr "Файлы resolv и hosts" + +msgid "Resolve file" +msgstr "Файл resolv" + +msgid "Restart" +msgstr "Перезапустить" + +msgid "Restart Firewall" +msgstr "Перезапустить межсетевой экран" + +msgid "Restore backup" +msgstr "Восстановить резервную копию" + +msgid "Reveal/hide password" +msgstr "Показать/скрыть пароль" + +msgid "Revert" +msgstr "Вернуть" + +msgid "Root" +msgstr "Корень" + +msgid "Root directory for files served via TFTP" +msgstr "Корневая директория для TFTP" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Пароль маршрутизатора" + +msgid "Routes" +msgstr "Маршруты" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Маршрутизация служит для определения через какой интерфейс и шлюз можно " +"достичть определённого хоста или сети." + +msgid "Run a filesystem check before mounting the device" +msgstr "Проверять файловую систему перед монтированием устройства" + +msgid "Run filesystem check" +msgstr "Проверять файловую систему" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "Доступ по SSH" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "SSH-ключи" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Сохранить" + +msgid "Save & Apply" +msgstr "Сохранить и применить" + +msgid "Save & Apply" +msgstr "Сохранить и применить" + +msgid "Scan" +msgstr "Сканировать" + +msgid "Scheduled Tasks" +msgstr "Запланированные задания" + +msgid "Section added" +msgstr "Секция добавлена" + +msgid "Section removed" +msgstr "Секция удалена" + +msgid "See \"mount\" manpage for details" +msgstr "Для подробной информации обратитесь к справке по \"mount\" (man mount)" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" +"Отправлять эхо-пакеты LCP с указанным интервалом (секунды), эффективно " +"только в сочетании с порогом ошибок" + +msgid "Separate Clients" +msgstr "Разделять клиентов" + +msgid "Separate WDS" +msgstr "Отдельный WDS" + +msgid "Server Settings" +msgstr "Настройки сервера" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Имя службы" + +msgid "Service Type" +msgstr "Тип службы" + +msgid "Services" +msgstr "Сервисы" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Настроить синхронизацию времени" + +msgid "Setup DHCP Server" +msgstr "Настроить сервер DHCP" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "Показать текущий список файлов резервной копии" + +msgid "Shutdown this interface" +msgstr "Выключить этот интерфейс" + +msgid "Shutdown this network" +msgstr "Выключить эту сеть" + +msgid "Signal" +msgstr "Сигнал" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Сигнал:" + +msgid "Size" +msgstr "Размер" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Пропустить" + +msgid "Skip to content" +msgstr "Перейти к содержимому" + +msgid "Skip to navigation" +msgstr "Перейти к навигации" + +msgid "Slot time" +msgstr "Время слота" + +msgid "Software" +msgstr "Программное обеспечение" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Некоторые значения полей недопустимы, невозможно сохранить информацию!" + +msgid "Sorry, the object you requested was not found." +msgstr "Извините, запрошенный объект не был найден." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "Извините, сервер столкнулся с неожиданной ошибкой." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"К сожалению, автоматическое обновление не поддерживается, новая прошивка " +"должна быть установлена вручную. Обратитесь к вики для получения конкретных " +"инструкций для вашего устройства." + +msgid "Sort" +msgstr "Сортировка" + +msgid "Source" +msgstr "Источник" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "Состояние кнопки, которое необходимо обработать" + +msgid "Specifies the directory the device is attached to" +msgstr "Директория, к которой присоединено устройство" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Порт данного процесса Dropbear" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" +"Максимальное количество неудачных запросов ARP, после которого узлы " +"считаются отключенными" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" +"Максимальное количество секунд, после которого узлы считаются отключенными" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Укажите закрытый ключ." + +msgid "Start" +msgstr "Запустить" + +msgid "Start priority" +msgstr "Приоритет" + +msgid "Startup" +msgstr "Загрузка" + +msgid "Static IPv4 Routes" +msgstr "Статические маршруты IPv4" + +msgid "Static IPv6 Routes" +msgstr "Статические маршруты IPv6" + +msgid "Static Leases" +msgstr "Постоянные аренды" + +msgid "Static Routes" +msgstr "Статические маршруты" + +msgid "Static WDS" +msgstr "Статический WDS" + +msgid "Static address" +msgstr "Статический адрес" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"Постоянная аренда используется для присвоения фиксированных IP-адресов и " +"имён DHCP-клиентам. Постоянная аренда также необходима для статических " +"интерфейсов, в которых обслуживаются только клиенты с присвоенными адресами." + +msgid "Status" +msgstr "Статус" + +msgid "Stop" +msgstr "Остановить" + +msgid "Strict order" +msgstr "Строгий порядок" + +msgid "Submit" +msgstr "Применить" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Раздел подкачки" + +msgid "Switch" +msgstr "Коммутатор" + +msgid "Switch %q" +msgstr "Коммутатор %q" + +msgid "Switch %q (%s)" +msgstr "Коммутатор %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Изменить протокол" + +msgid "Sync with browser" +msgstr "Синхронизировать с браузером" + +msgid "Synchronizing..." +msgstr "Синхронизация..." + +msgid "System" +msgstr "Система" + +msgid "System Log" +msgstr "Системный журнал" + +msgid "System Properties" +msgstr "Свойства системы" + +msgid "System log buffer size" +msgstr "Размер системного журнала" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "Настройки TFTP" + +msgid "TFTP server root" +msgstr "Корень TFTP-сервера" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "Скорость передачи" + +msgid "Table" +msgstr "Таблица" + +msgid "Target" +msgstr "Цель" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Завершить" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"Раздел Конфигурация устройства содержит физические настройки " +"беспроводного оборудования, такие как канал, мощность передатчика или выбор " +"антенны, которые являются общими для всех определённых беспроводных сетей " +"(если оборудование поддерживает несколько SSID). Настройки отдельных сетей, " +"такие как шифрование или режим работы, сгруппированы в разделе " +"Конфигурация интерфейса." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Пакет libiwinfo-lua не установлен. Для включения настроек " +"беспроводных сетей, вам необходимо установить этот компонент!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" +"Назначенный провайдеру префикс IPv6, обычно заканчивается на ::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Допустимые символы: A-Z, a-z, 0-9 и " +"_" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"Устройство или раздел (напр. /dev/" +"sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"Формат файловой системы (напр. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"Образ загружен. Пожалуйста, сравните размер файла и контрольную сумму, чтобы " +"удостовериться в целостности данных.
Нажмите \"Продолжить\", чтобы " +"начать процедуру обновления прошивки." + +msgid "The following changes have been committed" +msgstr "Данные изменения были применены" + +msgid "The following changes have been reverted" +msgstr "Данные изменения были отвергнуты" + +msgid "The following rules are currently active on this system." +msgstr "На данном устройстве активны следующие правила." + +msgid "The given network name is not unique" +msgstr "Заданное имя сети не является уникальным" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"Оборудование не поддерживает несколько SSID, и, если вы продолжите, " +"существующая конфигурация будет заменена." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" +"Длина префикса IPv4 в битах, оставшееся будет использоваться в IPv6-адресах." + +msgid "The length of the IPv6 prefix in bits" +msgstr "Длина префикса IPv6 в битах" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"Сетевые порты этого устройства могут быть объединены в несколько VLANов, в которых компьютеры могут " +"связываться напрямую между собой. VLANы часто используются для разделения нескольких сетевых " +"сегментов. Обычно по умолчанию используется один восходящий порт для " +"подключения к высшей рангом сети, например к интернету или к другим портам " +"локальной сети." + +msgid "The selected protocol needs a device assigned" +msgstr "Для выбранного протокола необходимо задать устройство" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" +"Идёт удаление раздела конфигурации с последующей перезагрузкой сиситемы." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"Система обновляется.
НЕ ОТКЛЮЧАЙТЕ ПИТАНИЕ УСТРОЙСТВА!
Подождите " +"несколько минут перед тем, как попытаетесь заново соединиться. В зависимости " +"от ваших настроек, возможно вам понадобится обновить адрес вашего " +"компьютера, чтобы снова получить доступ к устройству." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"Загруженный файл образа не поддерживается. Пожалуйста, проверьте, что вы " +"загрузили правильный образ для вашей платформы." + +msgid "There are no active leases." +msgstr "Нет активных арендованных адресов." + +msgid "There are no pending changes to apply!" +msgstr "Нет изменений, которые можно применить!" + +msgid "There are no pending changes to revert!" +msgstr "Нет изменений, которые можно отменить!" + +msgid "There are no pending changes!" +msgstr "Нет изменений, которые можно применить!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"Устройство не назначено. Пожалуйста, назначьте сетевое устройство во вкладке " +"\"Настройки канала\"" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"Пароль пользователя root не установлен. Пожалуйста, установите пароль, чтобы " +"защитить веб-интерфейс и включить SSH." + +msgid "This IPv4 address of the relay" +msgstr "IPv4-адрес ретранслятора" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"Это список шаблонов для соответствия файлов и директорий для сохранения при " +"использовании sysupgrade. Изменённые файлы в /etc/config и некоторые другие " +"конфигурации автоматически сохраняются." + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"Это содержимое /etc/rc.local. Вы можете добавить свои команды (перед 'exit " +"0'), чтобы выполнить их в конце загрузки." + +# Maybe it usually ends with ::2? +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" +"Это локальный адрес, назначенный туннельным брокером, обычно заканчивается " +"на :2" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Это единственный DHCP-сервер в локальной сети" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" +"Это таблица cron (crontab), в которой вы можете определить запланированные " +"задания." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "Это адрес ближайшей точки присутствия туннельного брокера" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "Данный список содержит работающие процессы и их статус." + +msgid "This page allows the configuration of custom button actions" +msgstr "Данная страница позволяет настроить обработку кнопок" + +msgid "This page gives an overview over currently active network connections." +msgstr "" +"Данная страница содержит обзор всех активных на данный момент сетевых " +"соединений." + +msgid "This section contains no values yet" +msgstr "Эта секция пока не содержит значений" + +msgid "Time Synchronization" +msgstr "Синхронизация времени" + +msgid "Time Synchronization is not configured yet." +msgstr "Синхронизация времени ещё не настроена." + +msgid "Timezone" +msgstr "Часовой пояс" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"Чтобы восстановить файлы конфигурации, вы можете загрузить ранее созданный " +"архив здесь." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Всего доступно" + +msgid "Traceroute" +msgstr "Трассировка" + +msgid "Traffic" +msgstr "Трафик" + +msgid "Transfer" +msgstr "Передача" + +msgid "Transmission Rate" +msgstr "Скорость передачи" + +msgid "Transmit" +msgstr "Передача" + +msgid "Transmit Power" +msgstr "Мощность передатчика" + +msgid "Transmitter Antenna" +msgstr "Передающая антенна" + +msgid "Trigger" +msgstr "Триггер" + +msgid "Trigger Mode" +msgstr "Режим срабатывания" + +msgid "Tunnel ID" +msgstr "Идентификатор туннеля" + +msgid "Tunnel Interface" +msgstr "Интерфейс туннеля" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Турбо-режим" + +msgid "Tx-Power" +msgstr "Мощность передатчика" + +msgid "Type" +msgstr "Тип" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "Только UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "USB-устройство" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "Невозможно обработать запрос для" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Неизвестно" + +msgid "Unknown Error, password not changed!" +msgstr "Неизвестная ошибка, пароль не был изменен!" + +msgid "Unmanaged" +msgstr "Неуправляемый" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Непринятые изменения" + +msgid "Unsupported protocol type." +msgstr "Неподдерживаемый тип протокола." + +msgid "Update lists" +msgstr "Обновить списки" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"Загрузите sysupgrade-совместимый образ, чтобы заменить текущую прошивку. " +"Установите флажок \"Сохранить настройки\", чтобы сохранить текущую " +"конфигурацию (требуется совместимый образ прошивки)." + +msgid "Upload archive..." +msgstr "Загрузить архив..." + +msgid "Uploaded File" +msgstr "Загруженный файл" + +msgid "Uptime" +msgstr "Время работы" + +msgid "Use /etc/ethers" +msgstr "Использовать /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Использовать шлюз DHCP" + +msgid "Use DNS servers advertised by peer" +msgstr "Использовать объявляемые узлом DNS-серверы" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "Использовать коды стран ISO/IEC 3166 alpha2." + +msgid "Use MTU on tunnel interface" +msgstr "Использовать MTU на интерфейсе туннеля" + +msgid "Use TTL on tunnel interface" +msgstr "Использовать TTL на интерфейсе туннеля" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Использовать широковещательный флаг" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Использовать собственные DNS-серверы" + +msgid "Use default gateway" +msgstr "Использовать шлюз по умолчанию" + +msgid "Use gateway metric" +msgstr "Использовать метрику шлюза" + +msgid "Use routing table" +msgstr "Использовать таблицу маршрутизации" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"Нажмите кнопку Добавить, чтобы добавить новую запись аренды. " +"MAC-адрес идентифицирует хост, IPv4-адрес указывает " +"фиксированный адрес, а Имя хоста присваивается в качестве " +"символьного имени для запрашивающего хоста." + +msgid "Used" +msgstr "Использовано" + +msgid "Used Key Slot" +msgstr "Используемый слот ключа" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Имя пользователя" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLANы на %q" + +msgid "VLANs on %q (%s)" +msgstr "VLANы на %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "Сервер VPN" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" +"Класс производителя (Vendor class), который отправлять при DHCP-запросах" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Проверить" + +msgid "Version" +msgstr "Версия" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "Открытая система WEP" + +msgid "WEP Shared Key" +msgstr "Общий ключ WEP" + +msgid "WEP passphrase" +msgstr "Пароль WEP" + +msgid "WMM Mode" +msgstr "Режим WMM" + +msgid "WPA passphrase" +msgstr "Пароль WPA" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"Необходимо установить wpa_supplicant (режим клиента) или hostapd (режим " +"точки доступа или ad-hoc) для поддержки шифрования WPA." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "Ожидание применения изменений..." + +msgid "Waiting for command to complete..." +msgstr "Ожидание завершения выполнения команды..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Внимание" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Wi-Fi" + +msgid "Wireless Adapter" +msgstr "Беспроводной адаптер" + +msgid "Wireless Network" +msgstr "Беспроводная сеть" + +msgid "Wireless Overview" +msgstr "Обзор беспроводных сетей" + +msgid "Wireless Security" +msgstr "Безопасность беспроводной сети" + +msgid "Wireless is disabled or not associated" +msgstr "Беспроводная сеть отключена или не связана " + +msgid "Wireless is restarting..." +msgstr "Беспроводная сеть перезапускается..." + +msgid "Wireless network is disabled" +msgstr "Беспроводная сеть отключена" + +msgid "Wireless network is enabled" +msgstr "Беспроводная сеть включена" + +msgid "Wireless restarted" +msgstr "Беспроводная сеть перезапущена" + +msgid "Wireless shut down" +msgstr "Выключение беспроводной сети" + +msgid "Write received DNS requests to syslog" +msgstr "Записывать полученные DNS-запросы в системный журнал" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Поддержка XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Здесь вы можете включить или выключить установленные скрипты инициализации. " +"Изменения вступят в силу после перезагрузки устройства.
Внимание: если вы выключите один из основных скриптов инициализации " +"(например \"network\"), ваше устройство может оказаться недоступным!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Вам необходимо включить Java Script в вашем браузере для корректной работы " +"LuCI." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "любой" + +msgid "auto" +msgstr "авто" + +#, fuzzy +msgid "automatic" +msgstr "статический" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "соед. мостом" + +msgid "create:" +msgstr "создать:" + +msgid "creates a bridge over specified interface(s)" +msgstr "создаёт мост для выбранных сетевых интерфейсов" + +msgid "dB" +msgstr "дБ" + +msgid "dBm" +msgstr "дБм" + +msgid "disable" +msgstr "выключено" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "истекло" + +# убил бы +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"файл, где хранятся арендованные DHCP-адреса" + +msgid "forward" +msgstr "перенаправить" + +msgid "full-duplex" +msgstr "полный дуплекс" + +msgid "half-duplex" +msgstr "полудуплекс" + +msgid "help" +msgstr "помощь" + +msgid "hidden" +msgstr "скрытый" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "если сеть" + +msgid "input" +msgstr "ввод" + +msgid "kB" +msgstr "кБ" + +msgid "kB/s" +msgstr "кБ/с" + +msgid "kbit/s" +msgstr "кбит/с" + +msgid "local DNS file" +msgstr "локальный DNS-файл" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "нет" + +msgid "no link" +msgstr "нет соединения" + +msgid "none" +msgstr "ничего" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "выключено" + +msgid "on" +msgstr "включено" + +msgid "open" +msgstr "открытая" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "маршрутизируемый" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "с тегом" + +msgid "unknown" +msgstr "неизвестный" + +msgid "unlimited" +msgstr "неограниченный" + +msgid "unspecified" +msgstr "не определено" + +msgid "unspecified -or- create:" +msgstr "не определено -или- создать:" + +msgid "untagged" +msgstr "без тега" + +msgid "yes" +msgstr "да" + +msgid "« Back" +msgstr "« Назад" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "" +#~ "Если вы не выберите эту опцию, то будет создана дополнительная сеть." + +#~ msgid "Join Network: Settings" +#~ msgstr "Подключение к сети: настройки" + +#~ msgid "CPU" +#~ msgstr "ЦП" + +#~ msgid "Port %d" +#~ msgstr "Порт %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "Порт %d нетегирован в нескольких VLANах!" + +#~ msgid "VLAN Interface" +#~ msgstr "Интерфейс VLAN" diff --git a/feeds/luci/modules/luci-base/po/sk/base.po b/feeds/luci/modules/luci-base/po/sk/base.po new file mode 100644 index 0000000..694608a --- /dev/null +++ b/feeds/luci/modules/luci-base/po/sk/base.po @@ -0,0 +1,3626 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "" + +msgid "(%s available)" +msgstr "" + +msgid "(empty)" +msgstr "" + +msgid "(no interfaces attached)" +msgstr "" + +msgid "-- Additional Field --" +msgstr "" + +msgid "-- Please choose --" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "" + +msgid "15 Minute Load:" +msgstr "" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "" + +msgid "BSSID" +msgstr "" + +msgid "DNS query port" +msgstr "" + +msgid "DNS server port" +msgstr "" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv4-Gateway" +msgstr "" + +msgid "IPv4-Netmask" +msgstr "" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" + +msgid "IPv6-Gateway" +msgstr "" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "" + +msgid "LED Name" +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "" +"Max. DHCP leases" +msgstr "" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" + +msgid "Max. concurrent queries" +msgstr "" + +msgid "%s - %s" +msgstr "" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "" + +msgid "AR Support" +msgstr "" + +msgid "ARP retry threshold" +msgstr "" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" + +msgid "ATM device number" +msgstr "" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "" + +msgid "Access Point" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Activate this network" +msgstr "" + +msgid "Active IPv4-Routes" +msgstr "" + +msgid "Active IPv6-Routes" +msgstr "" + +msgid "Active Connections" +msgstr "" + +msgid "Active DHCP Leases" +msgstr "" + +msgid "Active DHCPv6 Leases" +msgstr "" + +msgid "Ad-Hoc" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" + +msgid "Add new interface..." +msgstr "" + +msgid "Additional Hosts files" +msgstr "" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Address to access local relay bridge" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" + +msgid "Allow all except listed" +msgstr "" + +msgid "Allow listed only" +msgstr "" + +msgid "Allow localhost" +msgstr "" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" + +msgid "Allow root logins with password" +msgstr "" + +msgid "Allow the root user to login with password" +msgstr "" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "" + +msgid "Antenna 2" +msgstr "" + +msgid "Antenna Configuration" +msgstr "" + +msgid "Any zone" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "" + +msgid "Authorization Required" +msgstr "" + +msgid "Auto Refresh" +msgstr "" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "Available packages" +msgstr "" + +msgid "Average:" +msgstr "" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "" + +msgid "Back" +msgstr "" + +msgid "Back to Overview" +msgstr "" + +msgid "Back to configuration" +msgstr "" + +msgid "Back to overview" +msgstr "" + +msgid "Back to scan results" +msgstr "" + +msgid "Background Scan" +msgstr "" + +msgid "Backup / Flash Firmware" +msgstr "" + +msgid "Backup / Restore" +msgstr "" + +msgid "Backup file list" +msgstr "" + +msgid "Bad address specified!" +msgstr "" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Bogus NX Domain Override" +msgstr "" + +msgid "Bridge" +msgstr "" + +msgid "Bridge interfaces" +msgstr "" + +msgid "Bridge unit number" +msgstr "" + +msgid "Bring up on boot" +msgstr "" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "" + +msgid "Buffered" +msgstr "" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "Changes" +msgstr "" + +msgid "Changes applied." +msgstr "" + +msgid "Changes the administrator password for accessing the device" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check" +msgstr "" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" + +msgid "Cipher" +msgstr "" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" + +msgid "Client" +msgstr "" + +msgid "Client ID to send when requesting DHCP" +msgstr "" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" + +msgid "Close list..." +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Common Configuration" +msgstr "" + +msgid "Compression" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Configuration applied." +msgstr "" + +msgid "Configuration files will be kept." +msgstr "" + +msgid "Confirmation" +msgstr "" + +msgid "Connect" +msgstr "" + +msgid "Connected" +msgstr "" + +msgid "Connection Limit" +msgstr "" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "" + +msgid "Country" +msgstr "" + +msgid "Country Code" +msgstr "" + +msgid "Cover the following interface" +msgstr "" + +msgid "Cover the following interfaces" +msgstr "" + +msgid "Create / Assign firewall-zone" +msgstr "" + +msgid "Create Interface" +msgstr "" + +msgid "Create a bridge over multiple interfaces" +msgstr "" + +msgid "Critical" +msgstr "" + +msgid "Cron Log Level" +msgstr "" + +msgid "Custom Interface" +msgstr "" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" + +msgid "DHCP Leases" +msgstr "" + +msgid "DHCP Server" +msgstr "" + +msgid "DHCP and DNS" +msgstr "" + +msgid "DHCP client" +msgstr "" + +msgid "DHCP-Options" +msgstr "" + +msgid "DHCPv6 Leases" +msgstr "" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS forwardings" +msgstr "" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Default %d" +msgstr "" + +msgid "Default gateway" +msgstr "" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "" + +msgid "Define a name for this network." +msgstr "" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Delete this network" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Design" +msgstr "" + +msgid "Destination" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "Device Configuration" +msgstr "" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" + +msgid "Disable DNS setup" +msgstr "" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Discard upstream RFC1918 responses" +msgstr "" + +msgid "Displaying only packages containing" +msgstr "" + +msgid "Distance Optimization" +msgstr "" + +msgid "Distance to farthest network member in meters." +msgstr "" + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "" + +msgid "Domain required" +msgstr "" + +msgid "Domain whitelist" +msgstr "" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" + +msgid "Download and install package" +msgstr "" + +msgid "Download backup" +msgstr "" + +msgid "Dropbear Instance" +msgstr "" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" + +msgid "Dynamic tunnel" +msgstr "" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "" + +msgid "Edit this network" +msgstr "" + +msgid "Emergency" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable STP" +msgstr "" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +msgid "Enable NTP client" +msgstr "" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "" + +msgid "Enable VLAN functionality" +msgstr "" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "" + +msgid "Enable this swap" +msgstr "" + +msgid "Enable/Disable" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" + +msgid "Encapsulation mode" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "" + +msgid "Ethernet Switch" +msgstr "" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "" + +msgid "External system log server port" +msgstr "" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Filename of the boot image advertised to clients" +msgstr "" + +msgid "Filesystem" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Filter private" +msgstr "" + +msgid "Filter useless" +msgstr "" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "" + +msgid "Find package" +msgstr "" + +msgid "Finish" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Firewall Settings" +msgstr "" + +msgid "Firewall Status" +msgstr "" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "" + +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +msgid "Flash Firmware" +msgstr "" + +msgid "Flash image..." +msgstr "" + +msgid "Flash new firmware image" +msgstr "" + +msgid "Flash operations" +msgstr "" + +msgid "Flashing..." +msgstr "" + +msgid "Force" +msgstr "" + +msgid "Force CCMP (AES)" +msgstr "" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" + +msgid "Force TKIP" +msgstr "" + +msgid "Force TKIP and CCMP (AES)" +msgstr "" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "" + +msgid "Forwarding mode" +msgstr "" + +msgid "Fragmentation Threshold" +msgstr "" + +msgid "Frame Bursting" +msgstr "" + +msgid "Free" +msgstr "" + +msgid "Free space" +msgstr "" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "" + +msgid "GPRS only" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Gateway ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General Setup" +msgstr "" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "" + +msgid "Hang Up" +msgstr "" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "" + +msgid "Hide ESSID" +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Hostname to send when requesting DHCP" +msgstr "" + +msgid "Hostnames" +msgstr "" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 Firewall" +msgstr "" + +msgid "IPv4 WAN Status" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "IPv4 gateway" +msgstr "" + +msgid "IPv4 netmask" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 Firewall" +msgstr "" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "" + +msgid "IPv6 address" +msgstr "" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "IPv6 prefix" +msgstr "" + +msgid "IPv6 prefix length" +msgstr "" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +msgid "Identity" +msgstr "" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "" + +msgid "Ignore resolve file" +msgstr "" + +msgid "Image" +msgstr "" + +msgid "In" +msgstr "" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "" + +msgid "Inbound:" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Initscript" +msgstr "" + +msgid "Initscripts" +msgstr "" + +msgid "Install" +msgstr "" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "" + +msgid "Install protocol extensions..." +msgstr "" + +msgid "Installed packages" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface Overview" +msgstr "" + +msgid "Interface is reconnecting..." +msgstr "" + +msgid "Interface is shutting down..." +msgstr "" + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "" + +msgid "Interface reconnected" +msgstr "" + +msgid "Interface shut down" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "" + +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" + +msgid "Java Script required!" +msgstr "" + +msgid "Join Network" +msgstr "" + +msgid "Join Network: Wireless Scan" +msgstr "" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "" + +msgid "Kernel Log" +msgstr "" + +msgid "Kernel Version" +msgstr "" + +msgid "Key" +msgstr "" + +msgid "Key #%d" +msgstr "" + +msgid "Kill" +msgstr "" + +msgid "L2TP" +msgstr "" + +msgid "L2TP Server" +msgstr "" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "" + +msgid "LLC" +msgstr "" + +msgid "Label" +msgstr "" + +msgid "Language" +msgstr "" + +msgid "Language and Style" +msgstr "" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Leasefile" +msgstr "" + +msgid "Leasetime" +msgstr "" + +msgid "Leasetime remaining" +msgstr "" + +msgid "Leave empty to autodetect" +msgstr "" + +msgid "Leave empty to use the current WAN address" +msgstr "" + +msgid "Legend:" +msgstr "" + +msgid "Limit" +msgstr "" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Load Average" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "" + +msgid "Local IPv6 address" +msgstr "" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Local domain" +msgstr "" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "" + +msgid "Log queries" +msgstr "" + +msgid "Logging" +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "MAC-Address Filter" +msgstr "" + +msgid "MAC-Filter" +msgstr "" + +msgid "MAC-List" +msgstr "" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +msgid "Maximum hold time" +msgstr "" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "" + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory usage (%)" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Minimum Rate" +msgstr "" + +msgid "Minimum hold time" +msgstr "" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "" + +msgid "Mount Points" +msgstr "" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "" + +msgid "Mount point" +msgstr "" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Multicast Rate" +msgstr "" + +msgid "Multicast address" +msgstr "" + +msgid "NAS ID" +msgstr "" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Name of the new interface" +msgstr "" + +msgid "Name of the new network" +msgstr "" + +msgid "Navigation" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Utilities" +msgstr "" + +msgid "Network boot image" +msgstr "" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "" + +msgid "No DHCP Server configured for this interface" +msgstr "" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "" + +msgid "No files found" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "" + +msgid "No network name specified" +msgstr "" + +msgid "No package lists available" +msgstr "" + +msgid "No password set!" +msgstr "" + +msgid "No rules in this chain" +msgstr "" + +msgid "No zone assigned" +msgstr "" + +msgid "Noise" +msgstr "" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "" + +msgid "Not connected" +msgstr "" + +msgid "Note: Configuration files will be erased." +msgstr "" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "OPKG-Configuration" +msgstr "" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "" + +msgid "Open list..." +msgstr "" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "" + +msgid "Option removed" +msgstr "" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Other:" +msgstr "" + +msgid "Out" +msgstr "" + +msgid "Outbound:" +msgstr "" + +msgid "Outdoor Channels" +msgstr "" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Owner" +msgstr "" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "PPP" +msgstr "" + +msgid "PPPoA Encapsulation" +msgstr "" + +msgid "PPPoATM" +msgstr "" + +msgid "PPPoE" +msgstr "" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Package lists are older than 24 hours" +msgstr "" + +msgid "Package name" +msgstr "" + +msgid "Packets" +msgstr "" + +msgid "Part of zone %q" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password authentication" +msgstr "" + +msgid "Password of Private Key" +msgstr "" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "" + +msgid "Path to executable which handles the button event" +msgstr "" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "" + +msgid "Perform reset" +msgstr "" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "" + +msgid "Please enter your username and password." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Port status:" +msgstr "" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Protocol family" +msgstr "" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "" + +msgid "RX" +msgstr "" + +msgid "RX Rate" +msgstr "" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "" + +msgid "Realtime Connections" +msgstr "" + +msgid "Realtime Graphs" +msgstr "" + +msgid "Realtime Load" +msgstr "" + +msgid "Realtime Traffic" +msgstr "" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "" + +msgid "Rebooting..." +msgstr "" + +msgid "Reboots the operating system of your device" +msgstr "" + +msgid "Receive" +msgstr "" + +msgid "Receiver Antenna" +msgstr "" + +msgid "Reconnect this interface" +msgstr "" + +msgid "Reconnecting interface" +msgstr "" + +msgid "References" +msgstr "" + +msgid "Regulatory Domain" +msgstr "" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "" + +msgid "Repeat scan" +msgstr "" + +msgid "Replace entry" +msgstr "" + +msgid "Replace wireless configuration" +msgstr "" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Reset Counters" +msgstr "" + +msgid "Reset to defaults" +msgstr "" + +msgid "Resolv and Hosts Files" +msgstr "" + +msgid "Resolve file" +msgstr "" + +msgid "Restart" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restore backup" +msgstr "" + +msgid "Reveal/hide password" +msgstr "" + +msgid "Revert" +msgstr "" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save & Apply" +msgstr "" + +msgid "Save & Apply" +msgstr "" + +msgid "Scan" +msgstr "" + +msgid "Scheduled Tasks" +msgstr "" + +msgid "Section added" +msgstr "" + +msgid "Section removed" +msgstr "" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "" + +msgid "Separate WDS" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "" + +msgid "Service Type" +msgstr "" + +msgid "Services" +msgstr "" + +msgid "Set up Time Synchronization" +msgstr "" + +msgid "Setup DHCP Server" +msgstr "" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "" + +msgid "Shutdown this network" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "" + +msgid "Size" +msgstr "" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "" + +msgid "Skip to content" +msgstr "" + +msgid "Skip to navigation" +msgstr "" + +msgid "Slot time" +msgstr "" + +msgid "Software" +msgstr "" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "" + +msgid "Sorry, the object you requested was not found." +msgstr "" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "" + +msgid "Source" +msgstr "" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start priority" +msgstr "" + +msgid "Startup" +msgstr "" + +msgid "Static IPv4 Routes" +msgstr "" + +msgid "Static IPv6 Routes" +msgstr "" + +msgid "Static Leases" +msgstr "" + +msgid "Static Routes" +msgstr "" + +msgid "Static WDS" +msgstr "" + +msgid "Static address" +msgstr "" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Strict order" +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "" + +msgid "Switch %q" +msgstr "" + +msgid "Switch %q (%s)" +msgstr "" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "" + +msgid "Sync with browser" +msgstr "" + +msgid "Synchronizing..." +msgstr "" + +msgid "System" +msgstr "" + +msgid "System Log" +msgstr "" + +msgid "System Properties" +msgstr "" + +msgid "System log buffer size" +msgstr "" + +msgid "TCP:" +msgstr "" + +msgid "TFTP Settings" +msgstr "" + +msgid "TFTP server root" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "TX Rate" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "" + +msgid "The following changes have been reverted" +msgstr "" + +msgid "The following rules are currently active on this system." +msgstr "" + +msgid "The given network name is not unique" +msgstr "" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" + +msgid "There are no active leases." +msgstr "" + +msgid "There are no pending changes to apply!" +msgstr "" + +msgid "There are no pending changes to revert!" +msgstr "" + +msgid "There are no pending changes!" +msgstr "" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" + +msgid "This page allows the configuration of custom button actions" +msgstr "" + +msgid "This page gives an overview over currently active network connections." +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time Synchronization" +msgstr "" + +msgid "Time Synchronization is not configured yet." +msgstr "" + +msgid "Timezone" +msgstr "" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "" + +msgid "Transfer" +msgstr "" + +msgid "Transmission Rate" +msgstr "" + +msgid "Transmit" +msgstr "" + +msgid "Transmit Power" +msgstr "" + +msgid "Transmitter Antenna" +msgstr "" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "" + +msgid "Tx-Power" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "UDP:" +msgstr "" + +msgid "UMTS only" +msgstr "" + +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +msgid "USB Device" +msgstr "" + +msgid "UUID" +msgstr "" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Unknown Error, password not changed!" +msgstr "" + +msgid "Unmanaged" +msgstr "" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "" + +msgid "Unsupported protocol type." +msgstr "" + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "" + +msgid "Uploaded File" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Use /etc/ethers" +msgstr "" + +msgid "Use DHCP gateway" +msgstr "" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "" + +msgid "Use default gateway" +msgstr "" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "VC-Mux" +msgstr "" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "" + +msgid "VLANs on %q (%s)" +msgstr "" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "WDS" +msgstr "" + +msgid "WEP Open System" +msgstr "" + +msgid "WEP Shared Key" +msgstr "" + +msgid "WEP passphrase" +msgstr "" + +msgid "WMM Mode" +msgstr "" + +msgid "WPA passphrase" +msgstr "" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless Adapter" +msgstr "" + +msgid "Wireless Network" +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Wireless Security" +msgstr "" + +msgid "Wireless is disabled or not associated" +msgstr "" + +msgid "Wireless is restarting..." +msgstr "" + +msgid "Wireless network is disabled" +msgstr "" + +msgid "Wireless network is enabled" +msgstr "" + +msgid "Wireless restarted" +msgstr "" + +msgid "Wireless shut down" +msgstr "" + +msgid "Write received DNS requests to syslog" +msgstr "" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "" + +msgid "auto" +msgstr "" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "" + +msgid "create:" +msgstr "" + +msgid "creates a bridge over specified interface(s)" +msgstr "" + +msgid "dB" +msgstr "" + +msgid "dBm" +msgstr "" + +msgid "disable" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" + +msgid "forward" +msgstr "" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hidden" +msgstr "" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "" + +msgid "input" +msgstr "" + +msgid "kB" +msgstr "" + +msgid "kB/s" +msgstr "" + +msgid "kbit/s" +msgstr "" + +msgid "local DNS file" +msgstr "" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "" + +msgid "no link" +msgstr "" + +msgid "none" +msgstr "" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "" + +msgid "on" +msgstr "" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "unlimited" +msgstr "" + +msgid "unspecified" +msgstr "" + +msgid "unspecified -or- create:" +msgstr "" + +msgid "untagged" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "« Back" +msgstr "" diff --git a/feeds/luci/modules/luci-base/po/sv/base.po b/feeds/luci/modules/luci-base/po/sv/base.po new file mode 100644 index 0000000..fac272a --- /dev/null +++ b/feeds/luci/modules/luci-base/po/sv/base.po @@ -0,0 +1,3632 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-04-28 09:22+0200\n" +"Last-Translator: EricJ \n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "" + +msgid "(%s available)" +msgstr "(%s tillgängligt)" + +msgid "(empty)" +msgstr "(tomt)" + +msgid "(no interfaces attached)" +msgstr "(inga gränssnitt har bifogats)" + +msgid "-- Additional Field --" +msgstr "" + +msgid "-- Please choose --" +msgstr "" + +msgid "-- custom --" +msgstr "-- anpassad --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Belastning senaste minuten:" + +msgid "15 Minute Load:" +msgstr "Belastning senaste 15 minutrarna:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Belastning senaste 5 minutrarna:" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "" + +msgid "DNS server port" +msgstr "DNSserver-port" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "IPv4-Address" +msgstr "IPv4-adress" + +# I don't think "Gateway" is commonly translated. +msgid "IPv4-Gateway" +msgstr "IPv4-gateway" + +msgid "IPv4-Netmask" +msgstr "IPv4-nätmask" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-adress eller nätverk " +"(CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-gateway" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "LED-konfiguration" + +msgid "LED Name" +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "" +"Max. DHCP leases" +msgstr "" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" + +msgid "Max. concurrent queries" +msgstr "" + +msgid "%s - %s" +msgstr "" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "" + +msgid "AR Support" +msgstr "" + +msgid "ARP retry threshold" +msgstr "" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" + +msgid "ATM device number" +msgstr "" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "" + +msgid "Access Point" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Activate this network" +msgstr "" + +msgid "Active IPv4-Routes" +msgstr "" + +msgid "Active IPv6-Routes" +msgstr "" + +msgid "Active Connections" +msgstr "" + +msgid "Active DHCP Leases" +msgstr "" + +msgid "Active DHCPv6 Leases" +msgstr "" + +msgid "Ad-Hoc" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" + +msgid "Add new interface..." +msgstr "" + +msgid "Additional Hosts files" +msgstr "" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Address to access local relay bridge" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" + +msgid "Allow all except listed" +msgstr "" + +msgid "Allow listed only" +msgstr "" + +msgid "Allow localhost" +msgstr "" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" + +msgid "Allow root logins with password" +msgstr "" + +msgid "Allow the root user to login with password" +msgstr "" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "" + +msgid "Antenna 2" +msgstr "" + +msgid "Antenna Configuration" +msgstr "" + +msgid "Any zone" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "" + +msgid "Authorization Required" +msgstr "" + +msgid "Auto Refresh" +msgstr "" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "Available packages" +msgstr "" + +msgid "Average:" +msgstr "" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "" + +msgid "Back" +msgstr "" + +msgid "Back to Overview" +msgstr "" + +msgid "Back to configuration" +msgstr "" + +msgid "Back to overview" +msgstr "" + +msgid "Back to scan results" +msgstr "" + +msgid "Background Scan" +msgstr "" + +msgid "Backup / Flash Firmware" +msgstr "" + +msgid "Backup / Restore" +msgstr "" + +msgid "Backup file list" +msgstr "" + +msgid "Bad address specified!" +msgstr "" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Bogus NX Domain Override" +msgstr "" + +msgid "Bridge" +msgstr "" + +msgid "Bridge interfaces" +msgstr "" + +msgid "Bridge unit number" +msgstr "" + +msgid "Bring up on boot" +msgstr "" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "" + +msgid "Buffered" +msgstr "" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "Changes" +msgstr "" + +msgid "Changes applied." +msgstr "" + +msgid "Changes the administrator password for accessing the device" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check" +msgstr "" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" + +msgid "Cipher" +msgstr "" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" + +msgid "Client" +msgstr "" + +msgid "Client ID to send when requesting DHCP" +msgstr "" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" + +msgid "Close list..." +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Common Configuration" +msgstr "" + +msgid "Compression" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Configuration applied." +msgstr "" + +msgid "Configuration files will be kept." +msgstr "" + +msgid "Confirmation" +msgstr "" + +msgid "Connect" +msgstr "" + +msgid "Connected" +msgstr "" + +msgid "Connection Limit" +msgstr "" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "" + +msgid "Country" +msgstr "" + +msgid "Country Code" +msgstr "" + +msgid "Cover the following interface" +msgstr "" + +msgid "Cover the following interfaces" +msgstr "" + +msgid "Create / Assign firewall-zone" +msgstr "" + +msgid "Create Interface" +msgstr "" + +msgid "Create a bridge over multiple interfaces" +msgstr "" + +msgid "Critical" +msgstr "" + +msgid "Cron Log Level" +msgstr "" + +msgid "Custom Interface" +msgstr "" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" + +msgid "DHCP Leases" +msgstr "" + +msgid "DHCP Server" +msgstr "" + +msgid "DHCP and DNS" +msgstr "" + +msgid "DHCP client" +msgstr "" + +msgid "DHCP-Options" +msgstr "" + +msgid "DHCPv6 Leases" +msgstr "" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS forwardings" +msgstr "" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Default %d" +msgstr "" + +msgid "Default gateway" +msgstr "" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "" + +msgid "Define a name for this network." +msgstr "" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Delete this network" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Design" +msgstr "" + +msgid "Destination" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "Device Configuration" +msgstr "" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" + +msgid "Disable DNS setup" +msgstr "" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Discard upstream RFC1918 responses" +msgstr "" + +msgid "Displaying only packages containing" +msgstr "" + +msgid "Distance Optimization" +msgstr "" + +msgid "Distance to farthest network member in meters." +msgstr "" + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "" + +msgid "Domain required" +msgstr "" + +msgid "Domain whitelist" +msgstr "" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" + +msgid "Download and install package" +msgstr "" + +msgid "Download backup" +msgstr "" + +msgid "Dropbear Instance" +msgstr "" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" + +msgid "Dynamic tunnel" +msgstr "" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "" + +msgid "Edit this network" +msgstr "" + +msgid "Emergency" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable STP" +msgstr "" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +msgid "Enable NTP client" +msgstr "" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "" + +msgid "Enable VLAN functionality" +msgstr "" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "" + +msgid "Enable this swap" +msgstr "" + +msgid "Enable/Disable" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" + +msgid "Encapsulation mode" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "" + +msgid "Ethernet Switch" +msgstr "" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "" + +msgid "External system log server port" +msgstr "" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Filename of the boot image advertised to clients" +msgstr "" + +msgid "Filesystem" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Filter private" +msgstr "" + +msgid "Filter useless" +msgstr "" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "" + +msgid "Find package" +msgstr "" + +msgid "Finish" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Firewall Settings" +msgstr "" + +msgid "Firewall Status" +msgstr "" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "" + +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +msgid "Flash Firmware" +msgstr "" + +msgid "Flash image..." +msgstr "" + +msgid "Flash new firmware image" +msgstr "" + +msgid "Flash operations" +msgstr "" + +msgid "Flashing..." +msgstr "" + +msgid "Force" +msgstr "" + +msgid "Force CCMP (AES)" +msgstr "" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" + +msgid "Force TKIP" +msgstr "" + +msgid "Force TKIP and CCMP (AES)" +msgstr "" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "" + +msgid "Forwarding mode" +msgstr "" + +msgid "Fragmentation Threshold" +msgstr "" + +msgid "Frame Bursting" +msgstr "" + +msgid "Free" +msgstr "" + +msgid "Free space" +msgstr "" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "" + +msgid "GPRS only" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Gateway ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General Setup" +msgstr "" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "" + +msgid "Hang Up" +msgstr "" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "" + +msgid "Hide ESSID" +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Hostname to send when requesting DHCP" +msgstr "" + +msgid "Hostnames" +msgstr "" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 Firewall" +msgstr "" + +msgid "IPv4 WAN Status" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "IPv4 gateway" +msgstr "" + +msgid "IPv4 netmask" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 Firewall" +msgstr "" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "" + +msgid "IPv6 address" +msgstr "" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "IPv6 prefix" +msgstr "" + +msgid "IPv6 prefix length" +msgstr "" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +msgid "Identity" +msgstr "" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "" + +msgid "Ignore resolve file" +msgstr "" + +msgid "Image" +msgstr "" + +msgid "In" +msgstr "" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "" + +msgid "Inbound:" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Initscript" +msgstr "" + +msgid "Initscripts" +msgstr "" + +msgid "Install" +msgstr "" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "" + +msgid "Install protocol extensions..." +msgstr "" + +msgid "Installed packages" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface Overview" +msgstr "" + +msgid "Interface is reconnecting..." +msgstr "" + +msgid "Interface is shutting down..." +msgstr "" + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "" + +msgid "Interface reconnected" +msgstr "" + +msgid "Interface shut down" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "" + +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" + +msgid "Java Script required!" +msgstr "" + +msgid "Join Network" +msgstr "" + +msgid "Join Network: Wireless Scan" +msgstr "" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "" + +msgid "Kernel Log" +msgstr "" + +msgid "Kernel Version" +msgstr "" + +msgid "Key" +msgstr "" + +msgid "Key #%d" +msgstr "" + +msgid "Kill" +msgstr "" + +msgid "L2TP" +msgstr "" + +msgid "L2TP Server" +msgstr "" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "" + +msgid "LLC" +msgstr "" + +msgid "Label" +msgstr "" + +msgid "Language" +msgstr "" + +msgid "Language and Style" +msgstr "" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Leasefile" +msgstr "" + +msgid "Leasetime" +msgstr "" + +msgid "Leasetime remaining" +msgstr "" + +msgid "Leave empty to autodetect" +msgstr "" + +msgid "Leave empty to use the current WAN address" +msgstr "" + +msgid "Legend:" +msgstr "" + +msgid "Limit" +msgstr "" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Load Average" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "" + +msgid "Local IPv6 address" +msgstr "" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Local domain" +msgstr "" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "" + +msgid "Log queries" +msgstr "" + +msgid "Logging" +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "MAC-Address Filter" +msgstr "" + +msgid "MAC-Filter" +msgstr "" + +msgid "MAC-List" +msgstr "" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +msgid "Maximum hold time" +msgstr "" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "" + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory usage (%)" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Minimum Rate" +msgstr "" + +msgid "Minimum hold time" +msgstr "" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "" + +msgid "Mount Points" +msgstr "" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "" + +msgid "Mount point" +msgstr "" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Multicast Rate" +msgstr "" + +msgid "Multicast address" +msgstr "" + +msgid "NAS ID" +msgstr "" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Name of the new interface" +msgstr "" + +msgid "Name of the new network" +msgstr "" + +msgid "Navigation" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Utilities" +msgstr "" + +msgid "Network boot image" +msgstr "" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "" + +msgid "No DHCP Server configured for this interface" +msgstr "" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "" + +msgid "No files found" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "" + +msgid "No network name specified" +msgstr "" + +msgid "No package lists available" +msgstr "" + +msgid "No password set!" +msgstr "" + +msgid "No rules in this chain" +msgstr "" + +msgid "No zone assigned" +msgstr "" + +msgid "Noise" +msgstr "" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "" + +msgid "Not connected" +msgstr "" + +msgid "Note: Configuration files will be erased." +msgstr "" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "OPKG-Configuration" +msgstr "" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "" + +msgid "Open list..." +msgstr "" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "" + +msgid "Option removed" +msgstr "" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Other:" +msgstr "" + +msgid "Out" +msgstr "" + +msgid "Outbound:" +msgstr "" + +msgid "Outdoor Channels" +msgstr "" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Owner" +msgstr "" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "PPP" +msgstr "" + +msgid "PPPoA Encapsulation" +msgstr "" + +msgid "PPPoATM" +msgstr "" + +msgid "PPPoE" +msgstr "" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Package lists are older than 24 hours" +msgstr "" + +msgid "Package name" +msgstr "" + +msgid "Packets" +msgstr "" + +msgid "Part of zone %q" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password authentication" +msgstr "" + +msgid "Password of Private Key" +msgstr "" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "" + +msgid "Path to executable which handles the button event" +msgstr "" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "" + +msgid "Perform reset" +msgstr "" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "" + +msgid "Please enter your username and password." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Port status:" +msgstr "" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Protocol family" +msgstr "" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "" + +msgid "RX" +msgstr "" + +msgid "RX Rate" +msgstr "" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "" + +msgid "Realtime Connections" +msgstr "" + +msgid "Realtime Graphs" +msgstr "" + +msgid "Realtime Load" +msgstr "" + +msgid "Realtime Traffic" +msgstr "" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "" + +msgid "Rebooting..." +msgstr "" + +msgid "Reboots the operating system of your device" +msgstr "" + +msgid "Receive" +msgstr "" + +msgid "Receiver Antenna" +msgstr "" + +msgid "Reconnect this interface" +msgstr "" + +msgid "Reconnecting interface" +msgstr "" + +msgid "References" +msgstr "" + +msgid "Regulatory Domain" +msgstr "" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "" + +msgid "Repeat scan" +msgstr "" + +msgid "Replace entry" +msgstr "" + +msgid "Replace wireless configuration" +msgstr "" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Reset Counters" +msgstr "" + +msgid "Reset to defaults" +msgstr "" + +msgid "Resolv and Hosts Files" +msgstr "" + +msgid "Resolve file" +msgstr "" + +msgid "Restart" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restore backup" +msgstr "" + +msgid "Reveal/hide password" +msgstr "" + +msgid "Revert" +msgstr "" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save & Apply" +msgstr "" + +msgid "Save & Apply" +msgstr "" + +msgid "Scan" +msgstr "" + +msgid "Scheduled Tasks" +msgstr "" + +msgid "Section added" +msgstr "" + +msgid "Section removed" +msgstr "" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "" + +msgid "Separate WDS" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "" + +msgid "Service Type" +msgstr "" + +msgid "Services" +msgstr "" + +msgid "Set up Time Synchronization" +msgstr "" + +msgid "Setup DHCP Server" +msgstr "" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "" + +msgid "Shutdown this network" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "" + +msgid "Size" +msgstr "" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "" + +msgid "Skip to content" +msgstr "" + +msgid "Skip to navigation" +msgstr "" + +msgid "Slot time" +msgstr "" + +msgid "Software" +msgstr "" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "" + +msgid "Sorry, the object you requested was not found." +msgstr "" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "" + +msgid "Source" +msgstr "" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start priority" +msgstr "" + +msgid "Startup" +msgstr "" + +msgid "Static IPv4 Routes" +msgstr "" + +msgid "Static IPv6 Routes" +msgstr "" + +msgid "Static Leases" +msgstr "" + +msgid "Static Routes" +msgstr "" + +msgid "Static WDS" +msgstr "" + +msgid "Static address" +msgstr "" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Strict order" +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "" + +msgid "Switch %q" +msgstr "" + +msgid "Switch %q (%s)" +msgstr "" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "" + +msgid "Sync with browser" +msgstr "" + +msgid "Synchronizing..." +msgstr "" + +msgid "System" +msgstr "" + +msgid "System Log" +msgstr "" + +msgid "System Properties" +msgstr "" + +msgid "System log buffer size" +msgstr "" + +msgid "TCP:" +msgstr "" + +msgid "TFTP Settings" +msgstr "" + +msgid "TFTP server root" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "TX Rate" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "" + +msgid "The following changes have been reverted" +msgstr "" + +msgid "The following rules are currently active on this system." +msgstr "" + +msgid "The given network name is not unique" +msgstr "" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" + +msgid "There are no active leases." +msgstr "" + +msgid "There are no pending changes to apply!" +msgstr "" + +msgid "There are no pending changes to revert!" +msgstr "" + +msgid "There are no pending changes!" +msgstr "" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" + +msgid "This page allows the configuration of custom button actions" +msgstr "" + +msgid "This page gives an overview over currently active network connections." +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time Synchronization" +msgstr "" + +msgid "Time Synchronization is not configured yet." +msgstr "" + +msgid "Timezone" +msgstr "" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "" + +msgid "Transfer" +msgstr "" + +msgid "Transmission Rate" +msgstr "" + +msgid "Transmit" +msgstr "" + +msgid "Transmit Power" +msgstr "" + +msgid "Transmitter Antenna" +msgstr "" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "" + +msgid "Tx-Power" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "UDP:" +msgstr "" + +msgid "UMTS only" +msgstr "" + +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +msgid "USB Device" +msgstr "" + +msgid "UUID" +msgstr "" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Unknown Error, password not changed!" +msgstr "" + +msgid "Unmanaged" +msgstr "" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "" + +msgid "Unsupported protocol type." +msgstr "" + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "" + +msgid "Uploaded File" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Use /etc/ethers" +msgstr "" + +msgid "Use DHCP gateway" +msgstr "" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "" + +msgid "Use default gateway" +msgstr "" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "VC-Mux" +msgstr "" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "" + +msgid "VLANs on %q (%s)" +msgstr "" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "WDS" +msgstr "" + +msgid "WEP Open System" +msgstr "" + +msgid "WEP Shared Key" +msgstr "" + +msgid "WEP passphrase" +msgstr "" + +msgid "WMM Mode" +msgstr "" + +msgid "WPA passphrase" +msgstr "" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless Adapter" +msgstr "" + +msgid "Wireless Network" +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Wireless Security" +msgstr "" + +msgid "Wireless is disabled or not associated" +msgstr "" + +msgid "Wireless is restarting..." +msgstr "" + +msgid "Wireless network is disabled" +msgstr "" + +msgid "Wireless network is enabled" +msgstr "" + +msgid "Wireless restarted" +msgstr "" + +msgid "Wireless shut down" +msgstr "" + +msgid "Write received DNS requests to syslog" +msgstr "" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "" + +msgid "auto" +msgstr "" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "" + +msgid "create:" +msgstr "" + +msgid "creates a bridge over specified interface(s)" +msgstr "" + +msgid "dB" +msgstr "" + +msgid "dBm" +msgstr "" + +msgid "disable" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" + +msgid "forward" +msgstr "" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hidden" +msgstr "" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "" + +msgid "input" +msgstr "" + +msgid "kB" +msgstr "" + +msgid "kB/s" +msgstr "" + +msgid "kbit/s" +msgstr "" + +msgid "local DNS file" +msgstr "" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "" + +msgid "no link" +msgstr "" + +msgid "none" +msgstr "" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "" + +msgid "on" +msgstr "" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "unlimited" +msgstr "" + +msgid "unspecified" +msgstr "" + +msgid "unspecified -or- create:" +msgstr "" + +msgid "untagged" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "« Back" +msgstr "" diff --git a/feeds/luci/modules/luci-base/po/templates/base.pot b/feeds/luci/modules/luci-base/po/templates/base.pot new file mode 100644 index 0000000..42eb60b --- /dev/null +++ b/feeds/luci/modules/luci-base/po/templates/base.pot @@ -0,0 +1,3619 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "" + +msgid "(%s available)" +msgstr "" + +msgid "(empty)" +msgstr "" + +msgid "(no interfaces attached)" +msgstr "" + +msgid "-- Additional Field --" +msgstr "" + +msgid "-- Please choose --" +msgstr "" + +msgid "-- custom --" +msgstr "" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "" + +msgid "15 Minute Load:" +msgstr "" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "" + +msgid "BSSID" +msgstr "" + +msgid "DNS query port" +msgstr "" + +msgid "DNS server port" +msgstr "" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv4-Gateway" +msgstr "" + +msgid "IPv4-Netmask" +msgstr "" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" + +msgid "IPv6-Gateway" +msgstr "" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "" + +msgid "LED Name" +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "" +"Max. DHCP leases" +msgstr "" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" + +msgid "Max. concurrent queries" +msgstr "" + +msgid "%s - %s" +msgstr "" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "" + +msgid "AR Support" +msgstr "" + +msgid "ARP retry threshold" +msgstr "" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" + +msgid "ATM device number" +msgstr "" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "" + +msgid "Access Point" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Activate this network" +msgstr "" + +msgid "Active IPv4-Routes" +msgstr "" + +msgid "Active IPv6-Routes" +msgstr "" + +msgid "Active Connections" +msgstr "" + +msgid "Active DHCP Leases" +msgstr "" + +msgid "Active DHCPv6 Leases" +msgstr "" + +msgid "Ad-Hoc" +msgstr "" + +msgid "Add" +msgstr "" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" + +msgid "Add new interface..." +msgstr "" + +msgid "Additional Hosts files" +msgstr "" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Address to access local relay bridge" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "Advanced Settings" +msgstr "" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" + +msgid "Allow all except listed" +msgstr "" + +msgid "Allow listed only" +msgstr "" + +msgid "Allow localhost" +msgstr "" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" + +msgid "Allow root logins with password" +msgstr "" + +msgid "Allow the root user to login with password" +msgstr "" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "" + +msgid "Antenna 2" +msgstr "" + +msgid "Antenna Configuration" +msgstr "" + +msgid "Any zone" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Applying changes" +msgstr "" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "" + +msgid "Authorization Required" +msgstr "" + +msgid "Auto Refresh" +msgstr "" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "" + +msgid "Available packages" +msgstr "" + +msgid "Average:" +msgstr "" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "" + +msgid "Back" +msgstr "" + +msgid "Back to Overview" +msgstr "" + +msgid "Back to configuration" +msgstr "" + +msgid "Back to overview" +msgstr "" + +msgid "Back to scan results" +msgstr "" + +msgid "Background Scan" +msgstr "" + +msgid "Backup / Flash Firmware" +msgstr "" + +msgid "Backup / Restore" +msgstr "" + +msgid "Backup file list" +msgstr "" + +msgid "Bad address specified!" +msgstr "" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Bogus NX Domain Override" +msgstr "" + +msgid "Bridge" +msgstr "" + +msgid "Bridge interfaces" +msgstr "" + +msgid "Bridge unit number" +msgstr "" + +msgid "Bring up on boot" +msgstr "" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "" + +msgid "Buffered" +msgstr "" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "Changes" +msgstr "" + +msgid "Changes applied." +msgstr "" + +msgid "Changes the administrator password for accessing the device" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check" +msgstr "" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" + +msgid "Cipher" +msgstr "" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" + +msgid "Client" +msgstr "" + +msgid "Client ID to send when requesting DHCP" +msgstr "" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" + +msgid "Close list..." +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Common Configuration" +msgstr "" + +msgid "Compression" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Configuration applied." +msgstr "" + +msgid "Configuration files will be kept." +msgstr "" + +msgid "Confirmation" +msgstr "" + +msgid "Connect" +msgstr "" + +msgid "Connected" +msgstr "" + +msgid "Connection Limit" +msgstr "" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "" + +msgid "Country" +msgstr "" + +msgid "Country Code" +msgstr "" + +msgid "Cover the following interface" +msgstr "" + +msgid "Cover the following interfaces" +msgstr "" + +msgid "Create / Assign firewall-zone" +msgstr "" + +msgid "Create Interface" +msgstr "" + +msgid "Create a bridge over multiple interfaces" +msgstr "" + +msgid "Critical" +msgstr "" + +msgid "Cron Log Level" +msgstr "" + +msgid "Custom Interface" +msgstr "" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" + +msgid "DHCP Leases" +msgstr "" + +msgid "DHCP Server" +msgstr "" + +msgid "DHCP and DNS" +msgstr "" + +msgid "DHCP client" +msgstr "" + +msgid "DHCP-Options" +msgstr "" + +msgid "DHCPv6 Leases" +msgstr "" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS forwardings" +msgstr "" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Default %d" +msgstr "" + +msgid "Default gateway" +msgstr "" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "" + +msgid "Define a name for this network." +msgstr "" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Delete this network" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Design" +msgstr "" + +msgid "Destination" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "Device Configuration" +msgstr "" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" + +msgid "Disable DNS setup" +msgstr "" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Discard upstream RFC1918 responses" +msgstr "" + +msgid "Displaying only packages containing" +msgstr "" + +msgid "Distance Optimization" +msgstr "" + +msgid "Distance to farthest network member in meters." +msgstr "" + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "" + +msgid "Domain required" +msgstr "" + +msgid "Domain whitelist" +msgstr "" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" + +msgid "Download and install package" +msgstr "" + +msgid "Download backup" +msgstr "" + +msgid "Dropbear Instance" +msgstr "" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" + +msgid "Dynamic tunnel" +msgstr "" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "" + +msgid "Edit this network" +msgstr "" + +msgid "Emergency" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable STP" +msgstr "" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +msgid "Enable NTP client" +msgstr "" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "" + +msgid "Enable VLAN functionality" +msgstr "" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "" + +msgid "Enable this swap" +msgstr "" + +msgid "Enable/Disable" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" + +msgid "Encapsulation mode" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "" + +msgid "Ethernet Switch" +msgstr "" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "" + +msgid "External system log server port" +msgstr "" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Filename of the boot image advertised to clients" +msgstr "" + +msgid "Filesystem" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Filter private" +msgstr "" + +msgid "Filter useless" +msgstr "" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "" + +msgid "Find package" +msgstr "" + +msgid "Finish" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Firewall Settings" +msgstr "" + +msgid "Firewall Status" +msgstr "" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "" + +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +msgid "Flash Firmware" +msgstr "" + +msgid "Flash image..." +msgstr "" + +msgid "Flash new firmware image" +msgstr "" + +msgid "Flash operations" +msgstr "" + +msgid "Flashing..." +msgstr "" + +msgid "Force" +msgstr "" + +msgid "Force CCMP (AES)" +msgstr "" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" + +msgid "Force TKIP" +msgstr "" + +msgid "Force TKIP and CCMP (AES)" +msgstr "" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "" + +msgid "Forwarding mode" +msgstr "" + +msgid "Fragmentation Threshold" +msgstr "" + +msgid "Frame Bursting" +msgstr "" + +msgid "Free" +msgstr "" + +msgid "Free space" +msgstr "" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "" + +msgid "GPRS only" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Gateway ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General Setup" +msgstr "" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "" + +msgid "Hang Up" +msgstr "" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "" + +msgid "Hide ESSID" +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Hostname to send when requesting DHCP" +msgstr "" + +msgid "Hostnames" +msgstr "" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 Firewall" +msgstr "" + +msgid "IPv4 WAN Status" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "IPv4 gateway" +msgstr "" + +msgid "IPv4 netmask" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 Firewall" +msgstr "" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "" + +msgid "IPv6 address" +msgstr "" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "IPv6 prefix" +msgstr "" + +msgid "IPv6 prefix length" +msgstr "" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +msgid "Identity" +msgstr "" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "" + +msgid "Ignore resolve file" +msgstr "" + +msgid "Image" +msgstr "" + +msgid "In" +msgstr "" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "" + +msgid "Inbound:" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Initscript" +msgstr "" + +msgid "Initscripts" +msgstr "" + +msgid "Install" +msgstr "" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "" + +msgid "Install protocol extensions..." +msgstr "" + +msgid "Installed packages" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface Overview" +msgstr "" + +msgid "Interface is reconnecting..." +msgstr "" + +msgid "Interface is shutting down..." +msgstr "" + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "" + +msgid "Interface reconnected" +msgstr "" + +msgid "Interface shut down" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "" + +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" + +msgid "Java Script required!" +msgstr "" + +msgid "Join Network" +msgstr "" + +msgid "Join Network: Wireless Scan" +msgstr "" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "" + +msgid "Kernel Log" +msgstr "" + +msgid "Kernel Version" +msgstr "" + +msgid "Key" +msgstr "" + +msgid "Key #%d" +msgstr "" + +msgid "Kill" +msgstr "" + +msgid "L2TP" +msgstr "" + +msgid "L2TP Server" +msgstr "" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "" + +msgid "LLC" +msgstr "" + +msgid "Label" +msgstr "" + +msgid "Language" +msgstr "" + +msgid "Language and Style" +msgstr "" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Leasefile" +msgstr "" + +msgid "Leasetime" +msgstr "" + +msgid "Leasetime remaining" +msgstr "" + +msgid "Leave empty to autodetect" +msgstr "" + +msgid "Leave empty to use the current WAN address" +msgstr "" + +msgid "Legend:" +msgstr "" + +msgid "Limit" +msgstr "" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Load Average" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "" + +msgid "Local IPv6 address" +msgstr "" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Local domain" +msgstr "" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "" + +msgid "Log queries" +msgstr "" + +msgid "Logging" +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "MAC-Address Filter" +msgstr "" + +msgid "MAC-Filter" +msgstr "" + +msgid "MAC-List" +msgstr "" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +msgid "Maximum hold time" +msgstr "" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "" + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory usage (%)" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Minimum Rate" +msgstr "" + +msgid "Minimum hold time" +msgstr "" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "" + +msgid "Mount Points" +msgstr "" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "" + +msgid "Mount point" +msgstr "" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Multicast Rate" +msgstr "" + +msgid "Multicast address" +msgstr "" + +msgid "NAS ID" +msgstr "" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Name of the new interface" +msgstr "" + +msgid "Name of the new network" +msgstr "" + +msgid "Navigation" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Utilities" +msgstr "" + +msgid "Network boot image" +msgstr "" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "" + +msgid "No DHCP Server configured for this interface" +msgstr "" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "" + +msgid "No files found" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "" + +msgid "No network name specified" +msgstr "" + +msgid "No package lists available" +msgstr "" + +msgid "No password set!" +msgstr "" + +msgid "No rules in this chain" +msgstr "" + +msgid "No zone assigned" +msgstr "" + +msgid "Noise" +msgstr "" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "" + +msgid "Not connected" +msgstr "" + +msgid "Note: Configuration files will be erased." +msgstr "" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "OPKG-Configuration" +msgstr "" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "" + +msgid "Open list..." +msgstr "" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "" + +msgid "Option removed" +msgstr "" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Other:" +msgstr "" + +msgid "Out" +msgstr "" + +msgid "Outbound:" +msgstr "" + +msgid "Outdoor Channels" +msgstr "" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Owner" +msgstr "" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "PPP" +msgstr "" + +msgid "PPPoA Encapsulation" +msgstr "" + +msgid "PPPoATM" +msgstr "" + +msgid "PPPoE" +msgstr "" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Package lists are older than 24 hours" +msgstr "" + +msgid "Package name" +msgstr "" + +msgid "Packets" +msgstr "" + +msgid "Part of zone %q" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password authentication" +msgstr "" + +msgid "Password of Private Key" +msgstr "" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "" + +msgid "Path to executable which handles the button event" +msgstr "" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "" + +msgid "Perform reset" +msgstr "" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "" + +msgid "Please enter your username and password." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Port status:" +msgstr "" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Protocol family" +msgstr "" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "" + +msgid "RX" +msgstr "" + +msgid "RX Rate" +msgstr "" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "" + +msgid "Realtime Connections" +msgstr "" + +msgid "Realtime Graphs" +msgstr "" + +msgid "Realtime Load" +msgstr "" + +msgid "Realtime Traffic" +msgstr "" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "" + +msgid "Rebooting..." +msgstr "" + +msgid "Reboots the operating system of your device" +msgstr "" + +msgid "Receive" +msgstr "" + +msgid "Receiver Antenna" +msgstr "" + +msgid "Reconnect this interface" +msgstr "" + +msgid "Reconnecting interface" +msgstr "" + +msgid "References" +msgstr "" + +msgid "Regulatory Domain" +msgstr "" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "" + +msgid "Repeat scan" +msgstr "" + +msgid "Replace entry" +msgstr "" + +msgid "Replace wireless configuration" +msgstr "" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Reset Counters" +msgstr "" + +msgid "Reset to defaults" +msgstr "" + +msgid "Resolv and Hosts Files" +msgstr "" + +msgid "Resolve file" +msgstr "" + +msgid "Restart" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restore backup" +msgstr "" + +msgid "Reveal/hide password" +msgstr "" + +msgid "Revert" +msgstr "" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save & Apply" +msgstr "" + +msgid "Save & Apply" +msgstr "" + +msgid "Scan" +msgstr "" + +msgid "Scheduled Tasks" +msgstr "" + +msgid "Section added" +msgstr "" + +msgid "Section removed" +msgstr "" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "" + +msgid "Separate WDS" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "" + +msgid "Service Type" +msgstr "" + +msgid "Services" +msgstr "" + +msgid "Set up Time Synchronization" +msgstr "" + +msgid "Setup DHCP Server" +msgstr "" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "" + +msgid "Shutdown this network" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "" + +msgid "Size" +msgstr "" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "" + +msgid "Skip to content" +msgstr "" + +msgid "Skip to navigation" +msgstr "" + +msgid "Slot time" +msgstr "" + +msgid "Software" +msgstr "" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "" + +msgid "Sorry, the object you requested was not found." +msgstr "" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "" + +msgid "Source" +msgstr "" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start priority" +msgstr "" + +msgid "Startup" +msgstr "" + +msgid "Static IPv4 Routes" +msgstr "" + +msgid "Static IPv6 Routes" +msgstr "" + +msgid "Static Leases" +msgstr "" + +msgid "Static Routes" +msgstr "" + +msgid "Static WDS" +msgstr "" + +msgid "Static address" +msgstr "" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Strict order" +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "" + +msgid "Switch %q" +msgstr "" + +msgid "Switch %q (%s)" +msgstr "" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "" + +msgid "Sync with browser" +msgstr "" + +msgid "Synchronizing..." +msgstr "" + +msgid "System" +msgstr "" + +msgid "System Log" +msgstr "" + +msgid "System Properties" +msgstr "" + +msgid "System log buffer size" +msgstr "" + +msgid "TCP:" +msgstr "" + +msgid "TFTP Settings" +msgstr "" + +msgid "TFTP server root" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "TX Rate" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "" + +msgid "The following changes have been reverted" +msgstr "" + +msgid "The following rules are currently active on this system." +msgstr "" + +msgid "The given network name is not unique" +msgstr "" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" + +msgid "There are no active leases." +msgstr "" + +msgid "There are no pending changes to apply!" +msgstr "" + +msgid "There are no pending changes to revert!" +msgstr "" + +msgid "There are no pending changes!" +msgstr "" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" + +msgid "This page allows the configuration of custom button actions" +msgstr "" + +msgid "This page gives an overview over currently active network connections." +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time Synchronization" +msgstr "" + +msgid "Time Synchronization is not configured yet." +msgstr "" + +msgid "Timezone" +msgstr "" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "" + +msgid "Transfer" +msgstr "" + +msgid "Transmission Rate" +msgstr "" + +msgid "Transmit" +msgstr "" + +msgid "Transmit Power" +msgstr "" + +msgid "Transmitter Antenna" +msgstr "" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "" + +msgid "Tx-Power" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "UDP:" +msgstr "" + +msgid "UMTS only" +msgstr "" + +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +msgid "USB Device" +msgstr "" + +msgid "UUID" +msgstr "" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Unknown Error, password not changed!" +msgstr "" + +msgid "Unmanaged" +msgstr "" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "" + +msgid "Unsupported protocol type." +msgstr "" + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "" + +msgid "Uploaded File" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Use /etc/ethers" +msgstr "" + +msgid "Use DHCP gateway" +msgstr "" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "" + +msgid "Use default gateway" +msgstr "" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "VC-Mux" +msgstr "" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "" + +msgid "VLANs on %q (%s)" +msgstr "" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "WDS" +msgstr "" + +msgid "WEP Open System" +msgstr "" + +msgid "WEP Shared Key" +msgstr "" + +msgid "WEP passphrase" +msgstr "" + +msgid "WMM Mode" +msgstr "" + +msgid "WPA passphrase" +msgstr "" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless Adapter" +msgstr "" + +msgid "Wireless Network" +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Wireless Security" +msgstr "" + +msgid "Wireless is disabled or not associated" +msgstr "" + +msgid "Wireless is restarting..." +msgstr "" + +msgid "Wireless network is disabled" +msgstr "" + +msgid "Wireless network is enabled" +msgstr "" + +msgid "Wireless restarted" +msgstr "" + +msgid "Wireless shut down" +msgstr "" + +msgid "Write received DNS requests to syslog" +msgstr "" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "" + +msgid "auto" +msgstr "" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "" + +msgid "create:" +msgstr "" + +msgid "creates a bridge over specified interface(s)" +msgstr "" + +msgid "dB" +msgstr "" + +msgid "dBm" +msgstr "" + +msgid "disable" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" + +msgid "forward" +msgstr "" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hidden" +msgstr "" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "" + +msgid "input" +msgstr "" + +msgid "kB" +msgstr "" + +msgid "kB/s" +msgstr "" + +msgid "kbit/s" +msgstr "" + +msgid "local DNS file" +msgstr "" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "" + +msgid "no link" +msgstr "" + +msgid "none" +msgstr "" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "" + +msgid "on" +msgstr "" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "unlimited" +msgstr "" + +msgid "unspecified" +msgstr "" + +msgid "unspecified -or- create:" +msgstr "" + +msgid "untagged" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "« Back" +msgstr "" diff --git a/feeds/luci/modules/luci-base/po/tr/base.po b/feeds/luci/modules/luci-base/po/tr/base.po new file mode 100644 index 0000000..5a3d2f5 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/tr/base.po @@ -0,0 +1,3641 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-11-25 14:47+0200\n" +"Last-Translator: qbilay \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d dakika gösteriliyor, %d saniye aralıklı)" + +msgid "(%s available)" +msgstr "(%s uygun)" + +msgid "(empty)" +msgstr "(boş)" + +msgid "(no interfaces attached)" +msgstr "(arayüz eklenmedi)" + +msgid "-- Additional Field --" +msgstr "-- Ek Alan--" + +msgid "-- Please choose --" +msgstr "-- Lütfen seçiniz --" + +msgid "-- custom --" +msgstr "-- özel --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "1 Dakikalık Yük:" + +msgid "15 Minute Load:" +msgstr "15 Dakikalık Yük:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "5 Dakikalık Yük:" + +msgid "BSSID" +msgstr " BSSID " + +msgid "DNS query port" +msgstr "DNS port sorgula" + +msgid "DNS server port" +msgstr "DNS sunucu port" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "IPv4-Address" +msgstr "IPv4-Adres" + +msgid "IPv4-Gateway" +msgstr "IPv4-Gateway" + +msgid "IPv4-Netmask" +msgstr "IPv4-Netmask" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-Address or Network " +"(CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-Gateway" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "LED Ayarları" + +msgid "LED Name" +msgstr "LED Adı" + +msgid "MAC-Address" +msgstr "MAC-Adresi" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Maks. DHCP leases" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Maks. EDNS0 paket boyutu" + +msgid "Max. concurrent queries" +msgstr "Maks. eşzamanlı sorgu" + +msgid "%s - %s" +msgstr "" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "AR Desteği" + +msgid "ARP retry threshold" +msgstr "ARP yenileme aralığı" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "ATM Köprüleri" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" + +msgid "ATM device number" +msgstr "" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "" + +msgid "Access Point" +msgstr "Erişim Noktası" + +msgid "Action" +msgstr "Eylem" + +msgid "Actions" +msgstr "Eylemler" + +msgid "Activate this network" +msgstr "Bu ağı etkinleştir" + +msgid "Active IPv4-Routes" +msgstr "" +"Aktif IPv4-Yönlendiriciler" + +msgid "Active IPv6-Routes" +msgstr "" +"Aktif IPv6-Yönlendiriciler" + +msgid "Active Connections" +msgstr "Aktif Bağlantılar" + +msgid "Active DHCP Leases" +msgstr "Aktif DHCP Kiraları" + +msgid "Active DHCPv6 Leases" +msgstr "Aktif DHCPv6 Kiraları" + +msgid "Ad-Hoc" +msgstr "" + +msgid "Add" +msgstr "Ekle" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" + +msgid "Add new interface..." +msgstr "Yeni arabirim ekle..." + +msgid "Additional Hosts files" +msgstr "" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Adresler" + +msgid "Address to access local relay bridge" +msgstr "" + +msgid "Administration" +msgstr "" + +msgid "Advanced Settings" +msgstr "Gelişmiş Ayarlar" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Uyarı" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +# "Secure Shell" için ne kullanılabilinir bir fikrim yok. +msgid "Allow SSH password authentication" +msgstr "" +"SSH parola kimlik doğrulamasına izin ver" + +msgid "Allow all except listed" +msgstr "Listelenenlerin haricindekilere izin ver" + +msgid "Allow listed only" +msgstr "Yanlızca listelenenlere izin ver" + +msgid "Allow localhost" +msgstr "" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" + +msgid "Allow root logins with password" +msgstr "" + +msgid "Allow the root user to login with password" +msgstr "" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "1. Anten" + +msgid "Antenna 2" +msgstr "2. Anten" + +msgid "Antenna Configuration" +msgstr "Anten Yapılandırması" + +msgid "Any zone" +msgstr "" + +msgid "Apply" +msgstr "Uygula" + +msgid "Applying changes" +msgstr "Değişiklikleri uygula" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Arabirim ata..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Atheros 802.11%s Kablosuz Denetleyicisi" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Kimlik doğrulama" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Yetkilendirme" + +msgid "Authorization Required" +msgstr "Yetkilendirme Gerekli" + +msgid "Auto Refresh" +msgstr "Otomatik Yenileme" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Kullanılabilir" + +msgid "Available packages" +msgstr "Kullanılabilir Paketler" + +msgid "Average:" +msgstr "Ortalama:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "" + +msgid "Back" +msgstr "Geri" + +msgid "Back to Overview" +msgstr "Genel Bakışa dön" + +msgid "Back to configuration" +msgstr "Yapılandırmaya dön" + +msgid "Back to overview" +msgstr "Genel Bakışa dön" + +msgid "Back to scan results" +msgstr "Tarama sonuçlarına dön" + +msgid "Background Scan" +msgstr "Arka Planda Tarama" + +msgid "Backup / Flash Firmware" +msgstr "" + +msgid "Backup / Restore" +msgstr "Yedekleme / Geri Yükleme" + +msgid "Backup file list" +msgstr "" + +msgid "Bad address specified!" +msgstr "" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Bogus NX Domain Override" +msgstr "" + +msgid "Bridge" +msgstr "" + +msgid "Bridge interfaces" +msgstr "" + +msgid "Bridge unit number" +msgstr "" + +msgid "Bring up on boot" +msgstr "" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "" + +msgid "Buffered" +msgstr "" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "" + +msgid "Changes" +msgstr "" + +msgid "Changes applied." +msgstr "" + +msgid "Changes the administrator password for accessing the device" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check" +msgstr "" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" + +msgid "Cipher" +msgstr "" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" + +msgid "Client" +msgstr "" + +msgid "Client ID to send when requesting DHCP" +msgstr "" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" + +msgid "Close list..." +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "" + +msgid "Common Configuration" +msgstr "" + +msgid "Compression" +msgstr "" + +msgid "Configuration" +msgstr "" + +msgid "Configuration applied." +msgstr "" + +msgid "Configuration files will be kept." +msgstr "" + +msgid "Confirmation" +msgstr "" + +msgid "Connect" +msgstr "" + +msgid "Connected" +msgstr "" + +msgid "Connection Limit" +msgstr "" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "" + +msgid "Country" +msgstr "" + +msgid "Country Code" +msgstr "" + +msgid "Cover the following interface" +msgstr "" + +msgid "Cover the following interfaces" +msgstr "" + +msgid "Create / Assign firewall-zone" +msgstr "" + +msgid "Create Interface" +msgstr "" + +msgid "Create a bridge over multiple interfaces" +msgstr "" + +msgid "Critical" +msgstr "" + +msgid "Cron Log Level" +msgstr "" + +msgid "Custom Interface" +msgstr "" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" + +msgid "DHCP Leases" +msgstr "" + +msgid "DHCP Server" +msgstr "" + +msgid "DHCP and DNS" +msgstr "" + +msgid "DHCP client" +msgstr "" + +msgid "DHCP-Options" +msgstr "" + +msgid "DHCPv6 Leases" +msgstr "" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS forwardings" +msgstr "" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Default %d" +msgstr "" + +msgid "Default gateway" +msgstr "" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "" + +msgid "Define a name for this network." +msgstr "" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Delete this network" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Design" +msgstr "" + +msgid "Destination" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "Device Configuration" +msgstr "" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" + +msgid "Disable DNS setup" +msgstr "" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Discard upstream RFC1918 responses" +msgstr "" + +msgid "Displaying only packages containing" +msgstr "" + +msgid "Distance Optimization" +msgstr "" + +msgid "Distance to farthest network member in meters." +msgstr "" + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "" + +msgid "Domain required" +msgstr "" + +msgid "Domain whitelist" +msgstr "" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" + +msgid "Download and install package" +msgstr "" + +msgid "Download backup" +msgstr "" + +msgid "Dropbear Instance" +msgstr "" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" + +msgid "Dynamic tunnel" +msgstr "" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "" + +msgid "Edit" +msgstr "" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "" + +msgid "Edit this network" +msgstr "" + +msgid "Emergency" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable STP" +msgstr "" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +msgid "Enable NTP client" +msgstr "" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "" + +msgid "Enable VLAN functionality" +msgstr "" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "" + +msgid "Enable this swap" +msgstr "" + +msgid "Enable/Disable" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" + +msgid "Encapsulation mode" +msgstr "" + +msgid "Encryption" +msgstr "" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "" + +msgid "Ethernet Switch" +msgstr "" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "" + +msgid "External system log server port" +msgstr "" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "" + +msgid "File" +msgstr "" + +msgid "Filename of the boot image advertised to clients" +msgstr "" + +msgid "Filesystem" +msgstr "" + +msgid "Filter" +msgstr "" + +msgid "Filter private" +msgstr "" + +msgid "Filter useless" +msgstr "" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "" + +msgid "Find package" +msgstr "" + +msgid "Finish" +msgstr "" + +msgid "Firewall" +msgstr "" + +msgid "Firewall Settings" +msgstr "" + +msgid "Firewall Status" +msgstr "" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "" + +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +msgid "Flash Firmware" +msgstr "" + +msgid "Flash image..." +msgstr "" + +msgid "Flash new firmware image" +msgstr "" + +msgid "Flash operations" +msgstr "" + +msgid "Flashing..." +msgstr "" + +msgid "Force" +msgstr "" + +msgid "Force CCMP (AES)" +msgstr "" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" + +msgid "Force TKIP" +msgstr "" + +msgid "Force TKIP and CCMP (AES)" +msgstr "" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "" + +msgid "Forwarding mode" +msgstr "" + +msgid "Fragmentation Threshold" +msgstr "" + +msgid "Frame Bursting" +msgstr "" + +msgid "Free" +msgstr "" + +msgid "Free space" +msgstr "" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "" + +msgid "GPRS only" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Gateway ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General Setup" +msgstr "" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "" + +msgid "Hang Up" +msgstr "" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "" + +msgid "Hide ESSID" +msgstr "" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "Hostname to send when requesting DHCP" +msgstr "" + +msgid "Hostnames" +msgstr "" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 Firewall" +msgstr "" + +msgid "IPv4 WAN Status" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "IPv4 gateway" +msgstr "" + +msgid "IPv4 netmask" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "" + +msgid "IPv6 Firewall" +msgstr "" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "" + +msgid "IPv6 address" +msgstr "" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "IPv6 prefix" +msgstr "" + +msgid "IPv6 prefix length" +msgstr "" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +msgid "Identity" +msgstr "" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "" + +msgid "Ignore resolve file" +msgstr "" + +msgid "Image" +msgstr "" + +msgid "In" +msgstr "" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "" + +msgid "Inbound:" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Initscript" +msgstr "" + +msgid "Initscripts" +msgstr "" + +msgid "Install" +msgstr "" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "" + +msgid "Install protocol extensions..." +msgstr "" + +msgid "Installed packages" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface Overview" +msgstr "" + +msgid "Interface is reconnecting..." +msgstr "" + +msgid "Interface is shutting down..." +msgstr "" + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "" + +msgid "Interface reconnected" +msgstr "" + +msgid "Interface shut down" +msgstr "" + +msgid "Interfaces" +msgstr "" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "" + +msgid "Invalid" +msgstr "" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "" + +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" + +msgid "Java Script required!" +msgstr "" + +msgid "Join Network" +msgstr "" + +msgid "Join Network: Wireless Scan" +msgstr "" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "" + +msgid "Kernel Log" +msgstr "" + +msgid "Kernel Version" +msgstr "" + +msgid "Key" +msgstr "" + +msgid "Key #%d" +msgstr "" + +msgid "Kill" +msgstr "" + +msgid "L2TP" +msgstr "" + +msgid "L2TP Server" +msgstr "" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "" + +msgid "LLC" +msgstr "" + +msgid "Label" +msgstr "" + +msgid "Language" +msgstr "" + +msgid "Language and Style" +msgstr "" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Leasefile" +msgstr "" + +msgid "Leasetime" +msgstr "" + +msgid "Leasetime remaining" +msgstr "" + +msgid "Leave empty to autodetect" +msgstr "" + +msgid "Leave empty to use the current WAN address" +msgstr "" + +msgid "Legend:" +msgstr "" + +msgid "Limit" +msgstr "" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Load Average" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "" + +msgid "Local IPv6 address" +msgstr "" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Local domain" +msgstr "" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "" + +msgid "Log queries" +msgstr "" + +msgid "Logging" +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "MAC-Address Filter" +msgstr "" + +msgid "MAC-Filter" +msgstr "" + +msgid "MAC-List" +msgstr "" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +msgid "Maximum hold time" +msgstr "" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "" + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Memory usage (%)" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Minimum Rate" +msgstr "" + +msgid "Minimum hold time" +msgstr "" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "" + +msgid "Mount Points" +msgstr "" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "" + +msgid "Mount point" +msgstr "" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "" + +msgid "Move down" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Multicast Rate" +msgstr "" + +msgid "Multicast address" +msgstr "" + +msgid "NAS ID" +msgstr "" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Name of the new interface" +msgstr "" + +msgid "Name of the new network" +msgstr "" + +msgid "Navigation" +msgstr "" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network Utilities" +msgstr "" + +msgid "Network boot image" +msgstr "" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "" + +msgid "No DHCP Server configured for this interface" +msgstr "" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "" + +msgid "No files found" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "" + +msgid "No network name specified" +msgstr "" + +msgid "No package lists available" +msgstr "" + +msgid "No password set!" +msgstr "" + +msgid "No rules in this chain" +msgstr "" + +msgid "No zone assigned" +msgstr "" + +msgid "Noise" +msgstr "" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "" + +msgid "Not connected" +msgstr "" + +msgid "Note: Configuration files will be erased." +msgstr "" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "" + +msgid "OPKG-Configuration" +msgstr "" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "" + +msgid "Open list..." +msgstr "" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "" + +msgid "Option removed" +msgstr "" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "" + +msgid "Other:" +msgstr "" + +msgid "Out" +msgstr "" + +msgid "Outbound:" +msgstr "" + +msgid "Outdoor Channels" +msgstr "" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Owner" +msgstr "" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "" + +msgid "PIN" +msgstr "" + +msgid "PPP" +msgstr "" + +msgid "PPPoA Encapsulation" +msgstr "" + +msgid "PPPoATM" +msgstr "" + +msgid "PPPoE" +msgstr "" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Package lists are older than 24 hours" +msgstr "" + +msgid "Package name" +msgstr "" + +msgid "Packets" +msgstr "" + +msgid "Part of zone %q" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Password authentication" +msgstr "" + +msgid "Password of Private Key" +msgstr "" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Path to CA-Certificate" +msgstr "" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "" + +msgid "Path to executable which handles the button event" +msgstr "" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "" + +msgid "Perform reset" +msgstr "" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "" + +msgid "Please enter your username and password." +msgstr "" + +msgid "Policy" +msgstr "" + +msgid "Port" +msgstr "" + +msgid "Port status:" +msgstr "" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "" + +msgid "Processes" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "" + +msgid "Protocol" +msgstr "" + +msgid "Protocol family" +msgstr "" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "" + +msgid "RX" +msgstr "" + +msgid "RX Rate" +msgstr "" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "" + +msgid "Realtime Connections" +msgstr "" + +msgid "Realtime Graphs" +msgstr "" + +msgid "Realtime Load" +msgstr "" + +msgid "Realtime Traffic" +msgstr "" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "" + +msgid "Rebooting..." +msgstr "" + +msgid "Reboots the operating system of your device" +msgstr "" + +msgid "Receive" +msgstr "" + +msgid "Receiver Antenna" +msgstr "" + +msgid "Reconnect this interface" +msgstr "" + +msgid "Reconnecting interface" +msgstr "" + +msgid "References" +msgstr "" + +msgid "Regulatory Domain" +msgstr "" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "" + +msgid "Repeat scan" +msgstr "" + +msgid "Replace entry" +msgstr "" + +msgid "Replace wireless configuration" +msgstr "" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "" + +msgid "Reset Counters" +msgstr "" + +msgid "Reset to defaults" +msgstr "" + +msgid "Resolv and Hosts Files" +msgstr "" + +msgid "Resolve file" +msgstr "" + +msgid "Restart" +msgstr "" + +msgid "Restart Firewall" +msgstr "" + +msgid "Restore backup" +msgstr "" + +msgid "Reveal/hide password" +msgstr "" + +msgid "Revert" +msgstr "" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "" + +msgid "Routes" +msgstr "" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Save & Apply" +msgstr "" + +msgid "Save & Apply" +msgstr "" + +msgid "Scan" +msgstr "" + +msgid "Scheduled Tasks" +msgstr "" + +msgid "Section added" +msgstr "" + +msgid "Section removed" +msgstr "" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "" + +msgid "Separate WDS" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "" + +msgid "Service Type" +msgstr "" + +msgid "Services" +msgstr "" + +msgid "Set up Time Synchronization" +msgstr "" + +msgid "Setup DHCP Server" +msgstr "" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "" + +msgid "Shutdown this network" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "" + +msgid "Size" +msgstr "" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "" + +msgid "Skip to content" +msgstr "" + +msgid "Skip to navigation" +msgstr "" + +msgid "Slot time" +msgstr "" + +msgid "Software" +msgstr "" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "" + +msgid "Sorry, the object you requested was not found." +msgstr "" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "" + +msgid "Source" +msgstr "" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Start priority" +msgstr "" + +msgid "Startup" +msgstr "" + +msgid "Static IPv4 Routes" +msgstr "" + +msgid "Static IPv6 Routes" +msgstr "" + +msgid "Static Leases" +msgstr "" + +msgid "Static Routes" +msgstr "" + +msgid "Static WDS" +msgstr "" + +msgid "Static address" +msgstr "" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Stop" +msgstr "" + +msgid "Strict order" +msgstr "" + +msgid "Submit" +msgstr "" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "" + +msgid "Switch %q" +msgstr "" + +msgid "Switch %q (%s)" +msgstr "" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "" + +msgid "Sync with browser" +msgstr "" + +msgid "Synchronizing..." +msgstr "" + +msgid "System" +msgstr "" + +msgid "System Log" +msgstr "" + +msgid "System Properties" +msgstr "" + +msgid "System log buffer size" +msgstr "" + +msgid "TCP:" +msgstr "" + +msgid "TFTP Settings" +msgstr "" + +msgid "TFTP server root" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "TX Rate" +msgstr "" + +msgid "Table" +msgstr "" + +msgid "Target" +msgstr "" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "" + +msgid "The following changes have been reverted" +msgstr "" + +msgid "The following rules are currently active on this system." +msgstr "" + +msgid "The given network name is not unique" +msgstr "" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" + +msgid "There are no active leases." +msgstr "" + +msgid "There are no pending changes to apply!" +msgstr "" + +msgid "There are no pending changes to revert!" +msgstr "" + +msgid "There are no pending changes!" +msgstr "" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" + +msgid "This page allows the configuration of custom button actions" +msgstr "" + +msgid "This page gives an overview over currently active network connections." +msgstr "" + +msgid "This section contains no values yet" +msgstr "" + +msgid "Time Synchronization" +msgstr "" + +msgid "Time Synchronization is not configured yet." +msgstr "" + +msgid "Timezone" +msgstr "" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "" + +msgid "Transfer" +msgstr "" + +msgid "Transmission Rate" +msgstr "" + +msgid "Transmit" +msgstr "" + +msgid "Transmit Power" +msgstr "" + +msgid "Transmitter Antenna" +msgstr "" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "" + +msgid "Tx-Power" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "UDP:" +msgstr "" + +msgid "UMTS only" +msgstr "" + +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +msgid "USB Device" +msgstr "" + +msgid "UUID" +msgstr "" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Unknown Error, password not changed!" +msgstr "" + +msgid "Unmanaged" +msgstr "" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "" + +msgid "Unsupported protocol type." +msgstr "" + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "" + +msgid "Uploaded File" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "Use /etc/ethers" +msgstr "" + +msgid "Use DHCP gateway" +msgstr "" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "" + +msgid "Use default gateway" +msgstr "" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "VC-Mux" +msgstr "" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "" + +msgid "VLANs on %q (%s)" +msgstr "" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "WDS" +msgstr "" + +msgid "WEP Open System" +msgstr "" + +msgid "WEP Shared Key" +msgstr "" + +msgid "WEP passphrase" +msgstr "" + +msgid "WMM Mode" +msgstr "" + +msgid "WPA passphrase" +msgstr "" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless Adapter" +msgstr "" + +msgid "Wireless Network" +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Wireless Security" +msgstr "" + +msgid "Wireless is disabled or not associated" +msgstr "" + +msgid "Wireless is restarting..." +msgstr "" + +msgid "Wireless network is disabled" +msgstr "" + +msgid "Wireless network is enabled" +msgstr "" + +msgid "Wireless restarted" +msgstr "" + +msgid "Wireless shut down" +msgstr "" + +msgid "Write received DNS requests to syslog" +msgstr "" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"LuCI'nin düzgün çalışması için tarayıcınızda Java Scripti " +"etkinleştirmelisiniz." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "herhangi" + +msgid "auto" +msgstr "otomatik" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "köprülü" + +msgid "create:" +msgstr "" + +msgid "creates a bridge over specified interface(s)" +msgstr "" + +msgid "dB" +msgstr "" + +msgid "dBm" +msgstr "" + +msgid "disable" +msgstr "etkin değil" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "sona ermiş" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" + +msgid "forward" +msgstr "ileri" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "yardım" + +msgid "hidden" +msgstr "" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "eğer hedef ağsa" + +msgid "input" +msgstr "giriş" + +msgid "kB" +msgstr "" + +msgid "kB/s" +msgstr "" + +msgid "kbit/s" +msgstr "" + +msgid "local DNS file" +msgstr "yerel DNS dosyası" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "hayır" + +msgid "no link" +msgstr "" + +msgid "none" +msgstr "hiçbiri" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "kapalı" + +msgid "on" +msgstr "açık" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "yönlendirildi" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "etiketlendi" + +msgid "unknown" +msgstr "" + +msgid "unlimited" +msgstr "sınırsız" + +msgid "unspecified" +msgstr "tanımsız" + +msgid "unspecified -or- create:" +msgstr "tanımsız -veya- oluşturun:" + +msgid "untagged" +msgstr "etiketsiz" + +msgid "yes" +msgstr "evet" + +msgid "« Back" +msgstr "« Geri" diff --git a/feeds/luci/modules/luci-base/po/uk/base.po b/feeds/luci/modules/luci-base/po/uk/base.po new file mode 100644 index 0000000..cb79052 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/uk/base.po @@ -0,0 +1,3876 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-12-05 19:07+0200\n" +"Last-Translator: Dmitri <4glitch@gmail.com>\n" +"Language-Team: none\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d-хвилинне вікно, %d-секундний інтервал)" + +msgid "(%s available)" +msgstr "(%s доступно)" + +msgid "(empty)" +msgstr "(пусто)" + +msgid "(no interfaces attached)" +msgstr "(нема приєднаних інтерфейсів)" + +msgid "-- Additional Field --" +msgstr "-- Додаткові поля --" + +msgid "-- Please choose --" +msgstr "-- Виберіть --" + +msgid "-- custom --" +msgstr "-- нетипово --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "Навантаження за 1 хвилину:" + +msgid "15 Minute Load:" +msgstr "Навантаження за 15 хвилин:" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "Навантаження за 5 хвилин:" + +msgid "BSSID" +msgstr "" +"BSSID" + +msgid "DNS query port" +msgstr "" +"Порт DNS-" +"запиту" + +msgid "DNS server port" +msgstr "" +"Порт DNS-" +"сервера" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" +"DNS-" +"сервери будуть опитані у порядку, визначеному файлом resolvfile" + +msgid "ESSID" +msgstr "" +"ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-адреса" + +msgid "IPv4-Gateway" +msgstr "IPv4-шлюз" + +msgid "IPv4-Netmask" +msgstr "IPv4-маска" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-адреса або мережа " +"(CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-шлюз" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "" +"Настроювання LED" + +msgid "LED Name" +msgstr "Назва LED" + +msgid "MAC-Address" +msgstr "" +"MAC-адреса" + +msgid "" +"Max. DHCP leases" +msgstr "" +"Max. оренд DHCP" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"Max. розмір пакета EDNS0" + +msgid "Max. concurrent queries" +msgstr "Max. одночасних запитів" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "" +"APN" + +msgid "AR Support" +msgstr "Підтримка AR" + +msgid "ARP retry threshold" +msgstr "Поріг повтору ARP" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "ATM-мости" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" +"Ідентифікатор віртуального каналу ATM (VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" +"Ідентифікатор віртуального шляху ATM (VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"ATM-мости виставляють інкапсульований Ethernet у з'єднаннях AAL5 як " +"віртуальні мережеві інтерфейси Linux, котрі можуть використовуватися в " +"поєднанні з DHCP або PPP для підключення до мережі провайдера." + +msgid "ATM device number" +msgstr "Номер ATM-пристрою" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "Концентратор доступу" + +msgid "Access Point" +msgstr "Точка доступу" + +msgid "Action" +msgstr "Дія" + +msgid "Actions" +msgstr "Дії" + +msgid "Activate this network" +msgstr "Активувати цю мережу" + +msgid "Active IPv4-Routes" +msgstr "IPv4-маршрути" + +msgid "Active IPv6-Routes" +msgstr "IPv6-маршрути" + +msgid "Active Connections" +msgstr "Активні підключення" + +msgid "Active DHCP Leases" +msgstr "Активні оренди DHCP" + +msgid "Active DHCPv6 Leases" +msgstr "Активні оренди DHCPv6" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Додати" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "Додавати суфікс локального домену до імен, отриманих із файлів hosts" + +msgid "Add new interface..." +msgstr "Додати новий інтерфейс..." + +msgid "Additional Hosts files" +msgstr "Додаткові файли hosts" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "Адреса" + +msgid "Address to access local relay bridge" +msgstr "Адреса для доступу до мосту локального ретранслятора" + +msgid "Administration" +msgstr "Адміністрування" + +msgid "Advanced Settings" +msgstr "Додаткові параметри" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "Тривога" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "" +"Дозволити SSH-" +"перевірку пароля" + +msgid "Allow all except listed" +msgstr "Дозволити всі, крім зазначених" + +msgid "Allow listed only" +msgstr "Дозволити тільки зазначені" + +msgid "Allow localhost" +msgstr "Дозволити локальний вузол" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" +"Дозволити віддаленим вузлам підключення до локальних SSH-спрямованих портів" + +msgid "Allow root logins with password" +msgstr "Дозволити root-вхід із паролем" + +msgid "Allow the root user to login with password" +msgstr "Дозволити користувачеві root вхід у систему з паролем" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" +"Дозволити відповіді від клієнта на сервер у діапазоні 127.0.0.0/8, " +"наприклад, для RBL-послуг" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "Антена 1" + +msgid "Antenna 2" +msgstr "Антена 2" + +msgid "Antenna Configuration" +msgstr "Конфигурація антени" + +msgid "Any zone" +msgstr "Будь-яка зона" + +msgid "Apply" +msgstr "Застосувати" + +msgid "Applying changes" +msgstr "Застосування змін" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "Призначення інтерфейсів..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "Приєднані станції" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Бездротовий 802.11%s контролер Atheros" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Автентифікація" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Надійний" + +msgid "Authorization Required" +msgstr "Потрібна авторизація" + +msgid "Auto Refresh" +msgstr "Автоматичне оновлення" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Доступно" + +msgid "Available packages" +msgstr "Доступні пакети" + +msgid "Average:" +msgstr "Середнє значення:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "Назад" + +msgid "Back to Overview" +msgstr "Повернутися до переліку" + +msgid "Back to configuration" +msgstr "Повернутися до конфігурації" + +msgid "Back to overview" +msgstr "Повернутися до переліку" + +msgid "Back to scan results" +msgstr "Повернутися до результатів сканування" + +msgid "Background Scan" +msgstr "Сканування у фоновому режимі" + +msgid "Backup / Flash Firmware" +msgstr "Резервне копіювання / Оновлення прошивки" + +msgid "Backup / Restore" +msgstr "Резервне копіювання/відновлення" + +msgid "Backup file list" +msgstr "Список файлів резервних копій" + +msgid "Bad address specified!" +msgstr "Вказана неправильна адреса!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"Нижче наведено визначений список файлів для резервного копіювання. Він " +"складається із позначених opkg змінених файлів конфігурації, невідокремних " +"базових файлів, та файлів за користувацькими шаблонами резервного копіювання." + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "Швидкість передачі даних" + +msgid "Bogus NX Domain Override" +msgstr "Відкидати підробки NX-домену" + +msgid "Bridge" +msgstr "Міст" + +msgid "Bridge interfaces" +msgstr "Об'єднати інтерфейси в міст" + +msgid "Bridge unit number" +msgstr "Номер моста" + +msgid "Bring up on boot" +msgstr "Піднімати при завантаженні" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Бездротовий 802.11%s контролер Broadcom" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Бездротовий 802.11 контролер Broadcom BCM%04x" + +msgid "Buffered" +msgstr "Буферизовано" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "Кнопки" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "Завантаження ЦП, %" + +msgid "Cancel" +msgstr "Скасувати" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "Ланцюжок" + +msgid "Changes" +msgstr "Зміни" + +msgid "Changes applied." +msgstr "Зміни застосовано." + +msgid "Changes the administrator password for accessing the device" +msgstr "Зміна пароля адміністратора для доступу до пристрою" + +msgid "Channel" +msgstr "Канал" + +msgid "Check" +msgstr "Перевірити" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Контрольна сума" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"Оберіть зону брандмауера, яку ви хочете призначити на цей інтерфейс. " +"Виберіть не визначено, щоб видалити інтерфейс з відповідних зон, " +"або заповніть поле створити, щоб визначити нову зону і прикріпити " +"до неї інтерфейс." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"Оберіть мережі, які ви хочете прикріпити до цього бездротового інтерфейсу " +"або заповніть поле створити, щоб визначити нову мережу." + +msgid "Cipher" +msgstr "Шифр" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"Натисніть кнопку \"Створити архів\", щоб завантажити tar-архів поточних " +"файлів конфігурації. Для відновлення прошивки до її початкового стану, " +"натисніть кнопку \"Відновити\" (можливе тільки з образами SquashFS)." + +msgid "Client" +msgstr "Клієнт" + +msgid "Client ID to send when requesting DHCP" +msgstr "Ідентифікатор клієнта для відправки при запиті DHCP" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" +"Закривати неактивні з'єднання після певного інтервалу часу (секунди). Для " +"утримання неактивних з'єднань використовуйте 0" + +msgid "Close list..." +msgstr "Згорнути список..." + +msgid "Collecting data..." +msgstr "Збирання даних..." + +msgid "Command" +msgstr "Команда" + +msgid "Common Configuration" +msgstr "Загальна конфігурація" + +msgid "Compression" +msgstr "Стиснення" + +msgid "Configuration" +msgstr "Конфігурація" + +msgid "Configuration applied." +msgstr "Конфігурація застосована." + +msgid "Configuration files will be kept." +msgstr "Конфігураційні файли будуть збережені." + +msgid "Confirmation" +msgstr "Підтвердження" + +msgid "Connect" +msgstr "Підключити" + +msgid "Connected" +msgstr "Підключений" + +msgid "Connection Limit" +msgstr "Гранична кількість підключень" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "Підключення" + +msgid "Country" +msgstr "Країна" + +msgid "Country Code" +msgstr "Код країни" + +msgid "Cover the following interface" +msgstr "Покривати наступний інтерфейс" + +msgid "Cover the following interfaces" +msgstr "Покривати наступні інтерфейси" + +msgid "Create / Assign firewall-zone" +msgstr "Створити / Визначити зону брандмауера" + +msgid "Create Interface" +msgstr "Створити інтерфейс" + +msgid "Create a bridge over multiple interfaces" +msgstr "Створити міст через кілька інтерфейсів" + +msgid "Critical" +msgstr "Критичний" + +msgid "Cron Log Level" +msgstr "Рівень виведення інформації Cron" + +msgid "Custom Interface" +msgstr "Інтерфейс користувача" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Настроювання поведінки LED, якщо це можливо." + +msgid "DHCP Leases" +msgstr "Оренди DHCP" + +msgid "DHCP Server" +msgstr "Сервер DHCP" + +msgid "DHCP and DNS" +msgstr "DHCP та DNS" + +msgid "DHCP client" +msgstr "Клієнт DHCP" + +msgid "DHCP-Options" +msgstr "Параметри DHCP" + +msgid "DHCPv6 Leases" +msgstr "Оренди DHCPv6" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "Спрямовування DNS-запитів" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DUID" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "Зневаджування" + +msgid "Default %d" +msgstr "Типово %d" + +msgid "Default gateway" +msgstr "Типовий шлюз" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "Типовий стан" + +msgid "Define a name for this network." +msgstr "Визначення імені для цієї мережі." + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"Визначення додаткових опцій DHCP, наприклад " +"\"6,192.168.2.1,192.168.2.2\", щоб оголошувати різні DNS-" +"сервери для клієнтів." + +msgid "Delete" +msgstr "Видалити" + +msgid "Delete this network" +msgstr "Видалити цю мережу" + +msgid "Description" +msgstr "Опис" + +msgid "Design" +msgstr "Стиль (тема)" + +msgid "Destination" +msgstr "Призначення" + +msgid "Device" +msgstr "Пристрій" + +msgid "Device Configuration" +msgstr "Конфігурація пристрою" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "Діагностика" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "Каталог" + +msgid "Disable" +msgstr "Вимкнути" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +"Вимкнути DHCP для цього інтерфейсу." + +msgid "Disable DNS setup" +msgstr "Вимкнути настроювання DNS" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Вимкнути таймер HW-Beacon" + +msgid "Disabled" +msgstr "Вимкнено" + +msgid "Discard upstream RFC1918 responses" +msgstr "Відкидати RFC1918-відповіді від клієнта на сервер" + +msgid "Displaying only packages containing" +msgstr "Показані тільки непорожні пакети" + +msgid "Distance Optimization" +msgstr "Оптимізація за відстанню" + +msgid "Distance to farthest network member in meters." +msgstr "Відстань до найвіддаленішого вузла мережі в метрах." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Різновидність" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq являє собою комбінований DHCP-сервер і " +"DNS-" +"транспортер для брандмауерів NAT" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "Не кешувати негативні відповіді, наприклад, за неіснуючих доменів" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" +"Не спрямовувати запити, які не можуть бути оброблені публічними серверами " +"імен" + +msgid "Do not forward reverse lookups for local networks" +msgstr "Не спрямовувати зворотний перегляд для локальних мереж" + +msgid "Do not send probe responses" +msgstr "Не надсилати відповіді на зондування" + +msgid "Domain required" +msgstr "Потрібен домен" + +msgid "Domain whitelist" +msgstr "\"Білий список\" доменів" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Не пересилати DNS-запити без DNS-імені" + +msgid "Download and install package" +msgstr "Завантажити та інсталювати пакети" + +msgid "Download backup" +msgstr "Завантажити резервну копію" + +msgid "Dropbear Instance" +msgstr "Реалізація Dropbear" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear — це SSH-" +"сервер із вбудованим SCP" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"Динамічний DHCP" + +msgid "Dynamic tunnel" +msgstr "Динамічний тунель" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" +"Динамічне виділення DHCP-адрес для клієнтів. Якщо вимкнути, будуть " +"обслуговуватися тільки клієнти, які мають статичні оренди." + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "EAP-Метод" + +msgid "Edit" +msgstr "Редагувати" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "Редагувати цей інтерфейс" + +msgid "Edit this network" +msgstr "Редагувати цю мережу" + +msgid "Emergency" +msgstr "Аварійний" + +msgid "Enable" +msgstr "Увімкнути" + +msgid "Enable STP" +msgstr "Увімкнути STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "Увімкнути динамічне оновлення кінцевої точки HE.net" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "Увімкнути узгодження IPv6 для PPP-з'єднань" + +msgid "Enable Jumbo Frame passthrough" +msgstr "Пропускати Jumbo-фрейми" + +msgid "Enable NTP client" +msgstr "Увімкнути NTP-клієнт" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "Увімкнути TFTP-сервер" + +msgid "Enable VLAN functionality" +msgstr "Увімкнути підтримку VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "Увімкнути learning та aging" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "Увімкнути це монтування" + +msgid "Enable this swap" +msgstr "Увімкнути це довантаження" + +msgid "Enable/Disable" +msgstr "Увімкнено/Вимкнено" + +msgid "Enabled" +msgstr "Увімкнено" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "" +"Увімкнути STP на цьому мосту" + +msgid "Encapsulation mode" +msgstr "Режим інкапсуляції" + +msgid "Encryption" +msgstr "Шифрування" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "Видалення..." + +msgid "Error" +msgstr "Помилка" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Адаптер Ethernet" + +msgid "Ethernet Switch" +msgstr "Ethernet-комутатор" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "Розширення вузлів" + +msgid "Expires" +msgstr "Дійсний ще" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "Термін оренди адрес, мінімум 2 хвилини (2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "Зовнішній сервер системного журналу" + +msgid "External system log server port" +msgstr "Порт зовнішнього сервера системного журналу" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Швидкі фрейми" + +msgid "File" +msgstr "Файл" + +msgid "Filename of the boot image advertised to clients" +msgstr "І'мя завантажувального образу, що оголошується клієнтам" + +msgid "Filesystem" +msgstr "Файлова система" + +msgid "Filter" +msgstr "Фільтр" + +msgid "Filter private" +msgstr "Фільтрувати приватні" + +msgid "Filter useless" +msgstr "Фільтрувати непридатні" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "Знайти мережу й приєднатися" + +msgid "Find package" +msgstr "Знайти пакет" + +msgid "Finish" +msgstr "Готово" + +msgid "Firewall" +msgstr "Брандмауер" + +msgid "Firewall Settings" +msgstr "Настройки брандмауера" + +msgid "Firewall Status" +msgstr "Статус брандмауера" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "Версія прошивки" + +msgid "Fixed source port for outbound DNS queries" +msgstr "Фіксований порт для вихідних DNS-запитів" + +msgid "Flash Firmware" +msgstr "Заливаємо прошивку" + +msgid "Flash image..." +msgstr "Відвантажити образ..." + +msgid "Flash new firmware image" +msgstr "Залити новий образ прошивки" + +msgid "Flash operations" +msgstr "Операції заливання" + +msgid "Flashing..." +msgstr "Заливаємо..." + +msgid "Force" +msgstr "Примусово" + +msgid "Force CCMP (AES)" +msgstr "Примусово CCMP (AES)" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "Примусово DHCP у цій мережі, навіть якщо виявлено інший сервер." + +msgid "Force TKIP" +msgstr "Примусово TKIP" + +msgid "Force TKIP and CCMP (AES)" +msgstr "Примусово TKIP та CCMP (AES)" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "Спрямовувати DHCP-трафік" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "Спрямовувати широкомовний трафік" + +msgid "Forwarding mode" +msgstr "Режим спрямовування" + +msgid "Fragmentation Threshold" +msgstr "Поріг фрагментації" + +msgid "Frame Bursting" +msgstr "Frame Bursting" + +msgid "Free" +msgstr "Вільно" + +msgid "Free space" +msgstr "Вільне місце" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "ГГц" + +msgid "GPRS only" +msgstr "Тільки GPRS" + +msgid "Gateway" +msgstr "Шлюз" + +msgid "Gateway ports" +msgstr "Порти шлюзу" + +msgid "General Settings" +msgstr "Загальні настройки" + +msgid "General Setup" +msgstr "Загальні настройки" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "Cтворити архів" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Бездротовий 802.11%s контролер" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "Оскільки пароль і підтвердження не співпадають, то пароль не змінено!" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "Перейти до конфігурації пароля..." + +msgid "Go to relevant configuration page" +msgstr "Перейти до відповідної сторінки конфігурації" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "Пароль HE.net" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "Обробник" + +msgid "Hang Up" +msgstr "Призупинити" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Тут ви можете настроїти основні параметри вигляду вашого пристрою, такі як " +"назва (ім’я) вузла або часовий пояс." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" +"Тут ви можете вставити відкриті SSH-ключі (по одному на рядок) для SSH з " +"відкритим ключем автентифікації." + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Бездротовий 802.11b контролер Hermes" + +msgid "Hide ESSID" +msgstr "" +"Приховати ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Записи вузлів" + +msgid "Host expiry timeout" +msgstr "Тайм-аут вузла" + +msgid "Host-IP or Network" +msgstr "IP вузла або мережа" + +msgid "Hostname" +msgstr "Назва (ім'я) вузла" + +msgid "Hostname to send when requesting DHCP" +msgstr "Ім'я вузла для надсилання при запиті DHCP" + +msgid "Hostnames" +msgstr "Імена вузлів" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "IP-адреса" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "Брандмауер IPv4" + +msgid "IPv4 WAN Status" +msgstr "Статус IPv4 WAN" + +msgid "IPv4 address" +msgstr "Адреса IPv4" + +msgid "IPv4 and IPv6" +msgstr "IPv4 та IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "Широкомовний IPv4" + +msgid "IPv4 gateway" +msgstr "Шлюз IPv4" + +msgid "IPv4 netmask" +msgstr "Маска мережі IPv4" + +msgid "IPv4 only" +msgstr "Тільки IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "Довжина префікса IPv4" + +msgid "IPv4-Address" +msgstr "IPv4-адреса" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "Брандмауер IPv6" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "Статус IPv6 WAN" + +msgid "IPv6 address" +msgstr "Адреса IPv6" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "Шлюз IPv6" + +msgid "IPv6 only" +msgstr "Тільки IPv6" + +msgid "IPv6 prefix" +msgstr "Префікс IPv6" + +msgid "IPv6 prefix length" +msgstr "Довжина префікса IPv6" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "IPv6-адреса" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6 у IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6 через IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6 через IPv4 (6to4)" + +msgid "Identity" +msgstr "Ідентичність" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" +"Якщо обрано, монтувати пристрій за його UUID замість фіксованого вузла " +"пристрою" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" +"Якщо обрано, монтувати пристрій за назвою його розділу замість фіксованого " +"вузла пристрою" + +msgid "If unchecked, no default route is configured" +msgstr "Якщо не позначено, типовий маршрут не настроєно" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "Якщо не позначено, оголошувані адреси DNS-серверів ігноруються" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Якщо фізичної пам'яті недостатньо, невикористовувані дані можуть тимчасово " +"витіснятися на своп-пристрій, у результаті чого збільшується кількість " +"корисної оперативної пам'яті (RAM). Майте на увазі, що свопінг даних є дуже повільним процесом, оскільки " +"своп-пристрої не можуть бути доступні з такою високою швидкістю, як RAM." + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "Ігнорувати интерфейс" + +msgid "Ignore resolve file" +msgstr "Ігнорувати файли resolv" + +msgid "Image" +msgstr "Образ" + +msgid "In" +msgstr "Вх." + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "Тайм-аут бездіяльності" + +msgid "Inbound:" +msgstr "Вхідний:" + +msgid "Info" +msgstr "Інформація" + +msgid "Initscript" +msgstr "Скрипт ініціалізації" + +msgid "Initscripts" +msgstr "Скрипти ініціалізації" + +msgid "Install" +msgstr "Інсталювати" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "Інсталяція пакета %q" + +msgid "Install protocol extensions..." +msgstr "Інсталяція розширень протоколу..." + +msgid "Installed packages" +msgstr "Інстальовані пакети" + +msgid "Interface" +msgstr "Інтерфейс" + +msgid "Interface Configuration" +msgstr "Конфігурація інтерфейсу" + +msgid "Interface Overview" +msgstr "Огляд інтерфейсів" + +msgid "Interface is reconnecting..." +msgstr "Перепідключення інтерфейсу..." + +msgid "Interface is shutting down..." +msgstr "Інтерфейс завершує роботу..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "Інтерфейс відсутній або ще не підключений." + +msgid "Interface reconnected" +msgstr "Інтерфейс перепідключено" + +msgid "Interface shut down" +msgstr "Інтерфейс завершив роботу" + +msgid "Interfaces" +msgstr "Інтерфейси" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "Внутрішня помилка сервера" + +msgid "Invalid" +msgstr "Неприпустимо" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" +"Задано невірний VLAN ID! Доступні тільки ідентифікатори в межах між %d і %d." + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "Задано невірний VLAN ID! Доступні тільки унікальні ідентифікатори." + +msgid "Invalid username and/or password! Please try again." +msgstr "Неприпустиме ім’я користувача та/або пароль! Спробуйте ще раз." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Схоже, що ви намагаєтеся залити образ, який не вміщається у флеш-пам'ять! " +"Перевірте файл образу!" + +msgid "Java Script required!" +msgstr "Потрібен Java Script!" + +msgid "Join Network" +msgstr "Підключення до мережі" + +msgid "Join Network: Wireless Scan" +msgstr "Підключення до мережі: Сканування бездротових мереж" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "Зберегти настройки" + +msgid "Kernel Log" +msgstr "Журнал ядра" + +msgid "Kernel Version" +msgstr "Версія ядра" + +msgid "Key" +msgstr "Ключ" + +msgid "Key #%d" +msgstr "Ключ #%d" + +msgid "Kill" +msgstr "Знищити" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "Сервер L2TP" + +msgid "LCP echo failure threshold" +msgstr "Поріг помилок ехо-запитів LCP" + +msgid "LCP echo interval" +msgstr "Інтервал ехо-запитів LCP" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "Мітка" + +msgid "Language" +msgstr "Мова" + +msgid "Language and Style" +msgstr "Мова та стиль" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "Час чинності оренди" + +msgid "Leasefile" +msgstr "Файл оренд" + +msgid "Leasetime" +msgstr "Час оренди" + +msgid "Leasetime remaining" +msgstr "Час оренди, що лишився" + +msgid "Leave empty to autodetect" +msgstr "Залиште поле порожнім для автовизначення" + +msgid "Leave empty to use the current WAN address" +msgstr "Залиште порожнім, щоб використовувати поточну адресу WAN" + +msgid "Legend:" +msgstr "Легенда:" + +msgid "Limit" +msgstr "Межа" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Зв'язок встановлено" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" +"Список DNS-серверів, до яких " +"пересилати запити" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "Список доменів, для яких дозволені RFC1918-відповіді" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "Список доменів, які підтримують результати підробки NX-доменів" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" +"Прослуховувати тільки на цьому інтерфейсі, або на всіх (якщо не " +"визначено)" + +msgid "Listening port for inbound DNS queries" +msgstr "Порт прослуховування для вхідних DNS-запитів" + +msgid "Load" +msgstr "Навантаження" + +msgid "Load Average" +msgstr "Середнє навантаження" + +msgid "Loading" +msgstr "Завантаження" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "Локальна адреса IPv4" + +msgid "Local IPv6 address" +msgstr "Локальна адреса IPv6" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "Локальний запуск" + +msgid "Local Time" +msgstr "Місцевий час" + +msgid "Local domain" +msgstr "Локальний домен" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" +"Специфікація локальних доменів. Імена, зіставлені цьому домену, ніколи не " +"спрямовуються і виділяються тільки через DHCP або файли hosts" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" +"Суфікс локального домену додається до DHCP-імен вузлів та записів з файлу " +"hosts" + +msgid "Local server" +msgstr "Локальний сервер" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" +"Локалізувати ім'я хоста залежно від запитуючої підмережі, якщо доступні " +"кілька IP-адрес" + +msgid "Localise queries" +msgstr "Локалізувати запити" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "Рівень виведення інформаціі до журналу" + +msgid "Log queries" +msgstr "Журнал запитів" + +msgid "Logging" +msgstr "Журналювання" + +msgid "Login" +msgstr "Увійти" + +msgid "Logout" +msgstr "Вийти" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "Найнижча орендована адреса" + +msgid "MAC-Address" +msgstr "MAC-адреса" + +msgid "MAC-Address Filter" +msgstr "Фільтр MAC-адрес" + +msgid "MAC-Filter" +msgstr "MAC-фільтр" + +msgid "MAC-List" +msgstr "MAC-список" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MБ/с" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "МГц" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Максимальна швидкість" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "Максимально допустима кількість активних оренд DHCP" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "Максимально допустима кількість одночасних DNS-запитів" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "Максимально допустимий розмір UDP-пакетів EDNS.0" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "Максимальний час очікування готовності модему (секунд)" + +msgid "Maximum hold time" +msgstr "Максимальний час утримування" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "Максимальна кількість орендованих адрес." + +msgid "Mbit/s" +msgstr "Мбіт/с" + +msgid "Memory" +msgstr "Пам'ять" + +msgid "Memory usage (%)" +msgstr "Використання пам'яті, %" + +msgid "Metric" +msgstr "Метрика" + +msgid "Minimum Rate" +msgstr "Мінімальна швидкість" + +msgid "Minimum hold time" +msgstr "Мінімальний час утримування" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "Відсутні розширення для протоколу %q" + +msgid "Mode" +msgstr "Режим" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Модем" + +msgid "Modem init timeout" +msgstr "Тайм-аут ініціалізації модему" + +msgid "Monitor" +msgstr "Монітор" + +msgid "Mount Entry" +msgstr "Вхід монтування" + +msgid "Mount Point" +msgstr "Точка монтування" + +msgid "Mount Points" +msgstr "Точки монтування" + +msgid "Mount Points - Mount Entry" +msgstr "Точки монтування - Записи монтування" + +msgid "Mount Points - Swap Entry" +msgstr "Точки монтування - Вхід довантаження" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Точки монтування визначають, до якої точки пристрою пам'яті буде прикріплена " +"файлова система" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "Опції монтування" + +msgid "Mount point" +msgstr "Точка монтування" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Змонтовані файлові системи" + +msgid "Move down" +msgstr "Вниз" + +msgid "Move up" +msgstr "Вгору" + +msgid "Multicast Rate" +msgstr "Швидкість багатоадресного потоку" + +msgid "Multicast address" +msgstr "Адреса багатоадресного потоку" + +msgid "NAS ID" +msgstr "Ідентифікатор NAS" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "Кандидати для синхронізації NTP-сервера" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Ім'я" + +msgid "Name of the new interface" +msgstr "Ім'я нового інтерфейсу" + +msgid "Name of the new network" +msgstr "Назва (ім'я) нової мережі" + +msgid "Navigation" +msgstr "Навігація" + +msgid "Netmask" +msgstr "Маска мережі" + +msgid "Network" +msgstr "Мережа" + +msgid "Network Utilities" +msgstr "Мережеві утиліти" + +msgid "Network boot image" +msgstr "Образ для мережевого завантаження" + +msgid "Network without interfaces." +msgstr "Мережа без інтерфейсів." + +msgid "Next »" +msgstr "Наступний »" + +msgid "No DHCP Server configured for this interface" +msgstr "Немає DHCP-сервера, настроєного для цього інтерфейсу" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "У цій таблиці нема ланцюжків" + +msgid "No files found" +msgstr "Файли не знайдено" + +msgid "No information available" +msgstr "Інформація відсутня" + +msgid "No negative cache" +msgstr "Ніяких негативних кешувань" + +msgid "No network configured on this device" +msgstr "На цьому пристрої нема настроєної мережі" + +msgid "No network name specified" +msgstr "Ім'я мережі не визначене" + +msgid "No package lists available" +msgstr "Немає доступних списків пакетів" + +msgid "No password set!" +msgstr "Пароль не встановлено!" + +msgid "No rules in this chain" +msgstr "У цьму ланцюжку нема правил" + +msgid "No zone assigned" +msgstr "Зона не призначена" + +msgid "Noise" +msgstr "Шум" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "Шум:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "Жоден" + +msgid "Normal" +msgstr "Нормальний" + +msgid "Not Found" +msgstr "Не знайдено" + +msgid "Not associated" +msgstr "Не пов'язаний" + +msgid "Not connected" +msgstr "Не підключено" + +msgid "Note: Configuration files will be erased." +msgstr "Примітка: конфігураційні файли будуть видалені." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "Попередження" + +msgid "Nslookup" +msgstr "DNS-запит" + +msgid "OK" +msgstr "OK" + +msgid "OPKG-Configuration" +msgstr "Конфігурація OPKG" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "Затримка Off-State" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"На цій сторінці ви можете настроїти мережеві інтерфейси. Ви можете " +"об'єднатиати кілька інтерфейсів мостом, відзначивши поле \"Об'єднати " +"інтерфейси в міст\" та ввівши імена кількох мережевих інтерфейсів, розділені " +"пробілами. Також ви можете використовувати VLAN-позначення " +"ІНТЕРФЕЙС.НОМЕР_VLAN (наприклад, eth0.1)." + +msgid "On-State Delay" +msgstr "Затримка On-State" + +msgid "One of hostname or mac address must be specified!" +msgstr "Має бути вказане одне з двох - ім'я вузла або МАС-адреса!" + +msgid "One or more fields contain invalid values!" +msgstr "Одне або декілька полів містять неприпустимі значення!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "Одне або декілька обов'язкових полів не мають значень!" + +msgid "Open list..." +msgstr "Відкрити список..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "Опція змінена" + +msgid "Option removed" +msgstr "Опція видалена" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Опції" + +msgid "Other:" +msgstr "Інше:" + +msgid "Out" +msgstr "Вих." + +msgid "Outbound:" +msgstr "Вихідний:" + +msgid "Outdoor Channels" +msgstr "Зовнішні канали" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "Перевизначити MAC-адресу" + +msgid "Override MTU" +msgstr "Перевизначити MTU" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "Перевизначення шлюзу у відповідях DHCP" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" +"Перевизначення мережевої маски, яка надсилається клієнтам. Зазвичай вона " +"обчислюється від підмережі, що обслуговується." + +msgid "Override the table used for internal routes" +msgstr "" +"Перевизначення таблиці, що використовужться для внутрішніх спрямовувань" + +msgid "Overview" +msgstr "Огляд" + +msgid "Owner" +msgstr "Власник" + +msgid "PAP/CHAP password" +msgstr "Пароль PAP/CHAP" + +msgid "PAP/CHAP username" +msgstr "Ім'я користувача PAP/CHAP" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "" +">PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "Інкапсуляція PPPoA" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "Потрібен пакет libiwinfo!" + +msgid "Package lists are older than 24 hours" +msgstr "Перелік пакетів створений більше ніж 24 години тому" + +msgid "Package name" +msgstr "Назва пакета" + +msgid "Packets" +msgstr "Пакети" + +msgid "Part of zone %q" +msgstr "Частина зони %q" + +msgid "Password" +msgstr "Пароль" + +msgid "Password authentication" +msgstr "Автентифікація за паролем" + +msgid "Password of Private Key" +msgstr "Пароль закритого ключа" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "Пароль успішно змінено!" + +msgid "Path to CA-Certificate" +msgstr "Шлях до центру сертифікції" + +msgid "Path to Client-Certificate" +msgstr "Шлях до сертифікату клієнта" + +msgid "Path to Private Key" +msgstr "Шлях до закритого ключа" + +msgid "Path to executable which handles the button event" +msgstr "Шлях до програми, яка обробляє натискання кнопки" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "Пік:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Виконати перезавантаження" + +msgid "Perform reset" +msgstr "Відновити" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "Фізична швидкість:" + +msgid "Physical Settings" +msgstr "Фізичні параметри" + +msgid "Ping" +msgstr "Ехо-запит" + +msgid "Pkts." +msgstr "пакетів" + +msgid "Please enter your username and password." +msgstr "Введіть ім'я користувача і пароль" + +msgid "Policy" +msgstr "Політика" + +msgid "Port" +msgstr "Порт" + +msgid "Port status:" +msgstr "Статус порту:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" +"Вважати вузол недоступним після визначеної кількості невдач отримання ехо-" +"пакета LCP, використовуйте 0, щоб ігнорувати невдачі" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Запобігає зв'язкам клієнт-клієнт" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Бездротовий 802.11b контролер Prism2/2.5/3" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Продовжити" + +msgid "Processes" +msgstr "Процеси" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Прот." + +msgid "Protocol" +msgstr "Протокол" + +msgid "Protocol family" +msgstr "Сімейство протоколів" + +msgid "Protocol of the new interface" +msgstr "Протокол нового інтерфейсу" + +msgid "Protocol support is not installed" +msgstr "Підтримка протоколу не інстальована" + +msgid "Provide NTP server" +msgstr "Забезпечувати NTP-сервер" + +msgid "Provide new network" +msgstr "Постачити нову мережу" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Псевдо Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "Якість" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "Поріг RTS/CTS" + +msgid "RX" +msgstr "Одержано" + +msgid "RX Rate" +msgstr "Швидкість приймання" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "Бездротовий 802.11%s контролер RaLink" + +msgid "Radius-Accounting-Port" +msgstr "Порт Radius-Accounting" + +msgid "Radius-Accounting-Secret" +msgstr "Секрет Radius-Accounting" + +msgid "Radius-Accounting-Server" +msgstr "Сервер Radius-Accounting" + +msgid "Radius-Authentication-Port" +msgstr "Порт Radius-Authentication" + +msgid "Radius-Authentication-Secret" +msgstr "Секрет Radius-Authentication" + +msgid "Radius-Authentication-Server" +msgstr "Сервер Radius-Authentication" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Читати /etc/ethers для настроювання DHCP-сервера" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"Дійсно видалити цей інтерфейс? Скасувати видалення неможливо!\n" +"Ви можете втратити доступ до цього пристрою, якщо ви підключені через цей " +"інтерфейс." + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"Дійсно видалити цю бездротову мережу? Скасувати видалення неможливо!\n" +"Ви можете втратити доступ до цього пристрою, якщо ви підключені через цю " +"мережу." + +msgid "Really reset all changes?" +msgstr "Дійсно скинути всі зміни?" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"Дійсно вимкнути мережу?\n" +"Ви можете втратити доступ до цього пристрою, якщо ви підключені через цю " +"мережу." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"Дійсно вимкнути інтерфейс \"%s\"?\n" +"Ви можете втратити доступ до цього пристрою, якщо ви підключені через цей " +"інтерфейс." + +msgid "Really switch protocol?" +msgstr "Дійсно змінити протокол?" + +msgid "Realtime Connections" +msgstr "Підключення у реальному часі" + +msgid "Realtime Graphs" +msgstr "Графіки у реальному часі" + +msgid "Realtime Load" +msgstr "Навантаження у реальному часі" + +msgid "Realtime Traffic" +msgstr "Трафік у реальному часі" + +msgid "Realtime Wireless" +msgstr "Бездротові мережі у реальному часі" + +msgid "Rebind protection" +msgstr "Захист від переприв'язки" + +msgid "Reboot" +msgstr "Перезавантаження" + +msgid "Rebooting..." +msgstr "Перезавантаження..." + +msgid "Reboots the operating system of your device" +msgstr "Перезавантажити операційну систему вашого пристрою" + +msgid "Receive" +msgstr "Прийом" + +msgid "Receiver Antenna" +msgstr "Антена приймача" + +msgid "Reconnect this interface" +msgstr "Перепідключити цей інтерфейс" + +msgid "Reconnecting interface" +msgstr "Перепідключення інтерфейсу" + +msgid "References" +msgstr "Посилання" + +msgid "Regulatory Domain" +msgstr "Регулятивний домен" + +msgid "Relay" +msgstr "Ретранслятор" + +msgid "Relay Bridge" +msgstr "Міст-ретранслятор" + +msgid "Relay between networks" +msgstr "Міжмережевий ретранслятор" + +msgid "Relay bridge" +msgstr "Міст-ретранслятор" + +msgid "Remote IPv4 address" +msgstr "Віддалена адреса IPv4" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Видалити" + +msgid "Repeat scan" +msgstr "Повторити сканування" + +msgid "Replace entry" +msgstr "Замінити запис" + +msgid "Replace wireless configuration" +msgstr "Замінити конфігурацію бездротової мережі" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "Потрібно для деяких провайдерів, наприклад, Charter із DOCSIS 3" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Скинути" + +msgid "Reset Counters" +msgstr "Скинути лічильники" + +msgid "Reset to defaults" +msgstr "Відновити початковий стан" + +msgid "Resolv and Hosts Files" +msgstr "Файли resolv і hosts" + +msgid "Resolve file" +msgstr "Файл resolv" + +msgid "Restart" +msgstr "Перезавантажити" + +msgid "Restart Firewall" +msgstr "Перезавантажити брандмауер" + +msgid "Restore backup" +msgstr "Відновити з резервної копії" + +msgid "Reveal/hide password" +msgstr "Показати/приховати пароль" + +msgid "Revert" +msgstr "Скасувати зміни" + +msgid "Root" +msgstr "Корінь" + +msgid "Root directory for files served via TFTP" +msgstr "Кореневий каталог для файлів TFTP" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "Пароль маршрутизатора" + +msgid "Routes" +msgstr "Маршрути" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Маршрути визначають через який інтерфейс і шлюз можна досягнути певного " +"вузла або мережі." + +msgid "Run a filesystem check before mounting the device" +msgstr "Виконати перевірку файлової системи перед монтуванням пристрою" + +msgid "Run filesystem check" +msgstr "Виконати перевірку файлової системи" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "SSH-доступ" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "SSH-ключі" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Зберегти" + +msgid "Save & Apply" +msgstr "Зберегти і застосувати" + +msgid "Save & Apply" +msgstr "Зберегти і застосувати" + +msgid "Scan" +msgstr "Сканувати" + +msgid "Scheduled Tasks" +msgstr "Заплановані завдання" + +msgid "Section added" +msgstr "Секція додана" + +msgid "Section removed" +msgstr "Секція видалена" + +msgid "See \"mount\" manpage for details" +msgstr "Подробиці див. на сторінці керівництва \"mount\"" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" +"Надсилати ехо-пакети LCP зі вказаним інтервалом (секунди), ефективно тільки " +"в поєднанні з порогом помилок" + +msgid "Separate Clients" +msgstr "Розділяти клієнтів" + +msgid "Separate WDS" +msgstr "Розділяти WDS" + +msgid "Server Settings" +msgstr "Настройки сервера" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "Назва (ім'я) сервісу" + +msgid "Service Type" +msgstr "Тип сервісу" + +msgid "Services" +msgstr "Сервіси" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "Настройки синхронізації часу" + +msgid "Setup DHCP Server" +msgstr "Настройки DHCP-сервера" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "Показати поточний список файлів резервного копіювання" + +msgid "Shutdown this interface" +msgstr "Вимкнути цей інтерфейс" + +msgid "Shutdown this network" +msgstr "Вимкнути цю мережу" + +msgid "Signal" +msgstr "Сигнал" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "Сигнал:" + +msgid "Size" +msgstr "Розмір" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "Пропустити" + +msgid "Skip to content" +msgstr "Перейти до вмісту" + +msgid "Skip to navigation" +msgstr "Перейти до навігації" + +msgid "Slot time" +msgstr "Час слота" + +msgid "Software" +msgstr "Програмне забезпечення" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "Деякі поля є неприпустимими, неможливо зберегти значення!" + +msgid "Sorry, the object you requested was not found." +msgstr "На жаль, об'єкт, який ви просили, не знайдено." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "На жаль, на сервері сталася неочікувана помилка." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"На жаль, автоматичне оновлення системи не підтримується. Новий образ " +"прошивки повинен бути залитий вручну. Зверніться до Wiki за інструкцією з " +"інсталяції для конкретного пристрою." + +msgid "Sort" +msgstr "Сортування" + +msgid "Source" +msgstr "Джерело" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "Визначає стан кнопки для обробки" + +msgid "Specifies the directory the device is attached to" +msgstr "Визначає каталог, до якого приєднаний пристрій" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "Визначає порт прослуховування цієї реалізації Dropbear" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" +"Визначає максимальну кількість невдалих ARP-запитів до вузлів, після якого " +"вважається, що вузли \"мертві\"" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" +"Визначає максимальний час (секунди), після якого вважається, що вузли " +"\"мертві\"" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "Вкажіть тут секретний ключ шифрування." + +msgid "Start" +msgstr "Запустити" + +msgid "Start priority" +msgstr "Стартовий пріоритет" + +msgid "Startup" +msgstr "Запуск" + +msgid "Static IPv4 Routes" +msgstr "Статичні маршрути IPv4" + +msgid "Static IPv6 Routes" +msgstr "Статичні маршрути IPv6" + +msgid "Static Leases" +msgstr "Статичні оренди" + +msgid "Static Routes" +msgstr "Статичні маршрути" + +msgid "Static WDS" +msgstr "Статичний WDS" + +msgid "Static address" +msgstr "Статичні адреси" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"Статичні оренди використовуються для призначення фіксованих IP-адрес і " +"символічних імен вузлів DHCP-клієнтам. Вони також необхідні для статичних " +"конфігурацій інтерфейсів, коли обслуговуються тільки вузли з відповідною " +"орендою." + +msgid "Status" +msgstr "Статус" + +msgid "Stop" +msgstr "Зупинити" + +msgid "Strict order" +msgstr "Строгий порядок" + +msgid "Submit" +msgstr "Надіслати" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Вхід довантаження" + +msgid "Switch" +msgstr "Комутатор" + +msgid "Switch %q" +msgstr "Комутатор %q" + +msgid "Switch %q (%s)" +msgstr "Комутатор %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "Протокол комутатора" + +msgid "Sync with browser" +msgstr "Синхронізувати з браузером" + +msgid "Synchronizing..." +msgstr "Синхронізація..." + +msgid "System" +msgstr "Система" + +msgid "System Log" +msgstr "Системний журнал" + +msgid "System Properties" +msgstr "Властивості системи" + +msgid "System log buffer size" +msgstr "Розмір буфера системного журналу" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "Настройки TFTP" + +msgid "TFTP server root" +msgstr "Корінь TFTP-сервера" + +msgid "TX" +msgstr "Передано" + +msgid "TX Rate" +msgstr "Швидкість передавання" + +msgid "Table" +msgstr "Таблиця" + +msgid "Target" +msgstr "Мета" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Завершити" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"Розділ Конфігурація пристрою охоплює фізичні параметри радіо-" +"апаратних засобів, такі, як канал, потужність передавача або вибір антени, " +"які є спільними для всіх визначених бездротових мереж (якщо радіо-апаратні " +"засоби здатні підтримувати кілька SSID). Параметри окремих мереж, такі, як " +"шифрування або режим роботи, згруповані в розділі Конфігурація " +"інтерфейсу." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Пакет libiwinfo-lua не інстальований. Щоб мати можливість " +"настроювати безпровідні мережі, слід інсталювати цей компонент!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" +"Призначений провайдеру IPv6-префікс, зазвичай закінчується на ::" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"Дозволені символи: A-Z, a-z, 0-9 та " +"_" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "Файл пристрою пам'яті або розділу (наприклад, /dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"Файлова система, яка використовуватиметься для форматування пам'яті " +"(наприклад, ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"Образ завантажено. Нижче наведено контрольну суму і розмір файлу. Порівняйте " +"їх з вихідним файлом для забезпечення цілісності даних.
Натисніть " +"\"Продовжити\", щоб розпочати процедуру оновлення прошивки." + +msgid "The following changes have been committed" +msgstr "Нижче наведені зміни були застосовані" + +msgid "The following changes have been reverted" +msgstr "Нижче наведені зміни були скасовані" + +msgid "The following rules are currently active on this system." +msgstr "У даний час у цій системі активні такі правила." + +msgid "The given network name is not unique" +msgstr "Задане мережеве ім'я не є унікальним" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" +"Обладнання не підтримує мульти-SSID і, якщо ви продовжите, існуюча " +"конфігурація буде замінена." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "Довжина IPv4-префікса в бітах, решта використовується в IPv6-адресах." + +msgid "The length of the IPv6 prefix in bits" +msgstr "Довжина IPv6-префікса в бітах" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"Мережеві порти вашого пристрою можуть бути об'єднані у декілька VLAN, у яких комп'ютери можуть напряму спілкуватися один з одним. " +"VLAN часто використовуються для розділення мережі на окремі " +"сегменти. Зазвичай один виcхідний порт використовується для з'єднання з " +"більшою мережею, такою наприклад, як Інтернет, а інші порти — для локальної " +"мережі." + +msgid "The selected protocol needs a device assigned" +msgstr "Обраний протокол потребує призначених пристроїв" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" +"Зараз система видаляє розділ конфігурації і коли закінчить, " +"перезавантажиться." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"Система перепрошивається.
НЕ ВИМИКАЙТЕ ЖИВЛЕННЯ ПРИСТРОЮ!
Зачекайте кілька хвилин перед тим, як пробувати знову " +"з'єднатися. Залежно від ваших настройок, можливо, вам треба буде оновити " +"адресу вашого комп'ютера, щоб знову отримати доступ до пристрою." + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"Завантажений файл образу не містить підтримуваний формат. Переконайтеся, що " +"ви вибираєте універсальний формат образу для вашої платформи." + +msgid "There are no active leases." +msgstr "Активних оренд немає." + +msgid "There are no pending changes to apply!" +msgstr "Немає жодних змін до застосування!" + +msgid "There are no pending changes to revert!" +msgstr "Немає жодних змін до скасування!" + +msgid "There are no pending changes!" +msgstr "Немає жодних очікуючих змін!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" +"Немає жодного призначеного пристрою. Призначте мережевий пристрій у вкладці " +"\"Фізичні параметри\"." + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" +"Цей маршрутизатор не має пароля. Встановіть пароль, шоб захистити веб-" +"інтерфейс і увімкнути SSH." + +msgid "This IPv4 address of the relay" +msgstr "Це IPv4-адреса ретранслятора" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"Це список шаблонів для відбору файлів і каталогів, які мають увійти до " +"резервної копії. Змінені файли у /etc/config/ та деякі інші " +"зберігаються автоматично." + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"Це вміст файлу /etc/rc.local. Вставте тут ваші власні команди " +"(перед 'exit 0'), щоб виконати їх у кінці процесу завантаження." + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" +"Це локальна адреса кінцевої точки, присвоєна тунельним брокером, зазвичай " +"закінчується на :2" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Тільки для DHCP у локальній мережі" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "" +"Це системна таблиця Cron (crontab), у якій можна визначити заплановані " +"завдання." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" +"Зазвичай, це адреса найближчої точки присутності, що управляється тунелним " +"брокером" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"У цьому списку наведені працюючі на даний момент системні процеси та їх " +"статус." + +msgid "This page allows the configuration of custom button actions" +msgstr "Ця сторінка дозволяє настроїти нетипові дії кнопки" + +msgid "This page gives an overview over currently active network connections." +msgstr "Ця сторінка надає огляд поточних активних мережних підключень." + +msgid "This section contains no values yet" +msgstr "Ця секція поки що не містить значень" + +msgid "Time Synchronization" +msgstr "Синхронізація часу" + +msgid "Time Synchronization is not configured yet." +msgstr "Синхронізація часу не настроєна." + +msgid "Timezone" +msgstr "Часовий пояс" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" +"Щоб відновити файли конфігурації, ви можете відвантажити раніше створений " +"архів резервної копії." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "Усього доступно" + +msgid "Traceroute" +msgstr "Трасування" + +msgid "Traffic" +msgstr "Трафік" + +msgid "Transfer" +msgstr "Передано" + +msgid "Transmission Rate" +msgstr "Швидкість передавання" + +msgid "Transmit" +msgstr "Передача" + +msgid "Transmit Power" +msgstr "Потужність передавача" + +msgid "Transmitter Antenna" +msgstr "Антена передавача" + +msgid "Trigger" +msgstr "Тригер" + +msgid "Trigger Mode" +msgstr "Режим запуску" + +msgid "Tunnel ID" +msgstr "Ідентифікатор тунелю" + +msgid "Tunnel Interface" +msgstr "Інтерфейс тунелю" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Режим Turbo" + +msgid "Tx-Power" +msgstr "Потужність передавача" + +msgid "Type" +msgstr "Тип" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "Тільки UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "USB-пристрій" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "Не вдалося опрацювати запит" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "Невідомо" + +msgid "Unknown Error, password not changed!" +msgstr "Невідома помилка, пароль не змінився!" + +msgid "Unmanaged" +msgstr "Некерований" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Незбережені зміни" + +msgid "Unsupported protocol type." +msgstr "Непідтримуваний тип протоколу." + +msgid "Update lists" +msgstr "Оновити списки..." + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"Відвантажити sysupgrade-сумісний образ, щоб замінити поточну прошивку. Для " +"збереження поточної конфігурації встановіть прапорець \"Зберегти настройки" +"\" (потрібен сумісний образ прошивки)." + +msgid "Upload archive..." +msgstr "Відвантажити архів..." + +msgid "Uploaded File" +msgstr "Відвантажений файл" + +msgid "Uptime" +msgstr "Час безперервної роботи" + +msgid "Use /etc/ethers" +msgstr "Використовувати /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "Використовувати DHCP-шлюз" + +msgid "Use DNS servers advertised by peer" +msgstr "Використовувати DNS-сервери, оголошувані вузлом" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "Використовуйте коди країн згідно ISO/IEC 3166 alpha2." + +msgid "Use MTU on tunnel interface" +msgstr "Використовувати на тунельному інтерфейсі MTU" + +msgid "Use TTL on tunnel interface" +msgstr "Використовувати на тунельному інтерфейсі TTL" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "Використовувати прапорець широкомовності" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "Використовувати особливі DNS-сервери" + +msgid "Use default gateway" +msgstr "Використовувати типовий шлюз" + +msgid "Use gateway metric" +msgstr "Використовувати метрику шлюзу" + +msgid "Use routing table" +msgstr "Використовувати таблицю маршрутизації" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"Використовуйте кнопку Додати, щоб додати новий запис оренди. " +"MAC-адреса ідентифікує вузол, IPv4-адреса визначає " +"фіксовану адресу, яка буде використовуватися, а Назва (ім'я) вузла " +"призначає символічне ім'я вузла." + +msgid "Used" +msgstr "Використано" + +msgid "Used Key Slot" +msgstr "Використовується слот ключа" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Ім'я користувача" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLAN на %q" + +msgid "VLANs on %q (%s)" +msgstr "VLAN на %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "VPN-сервер" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "Клас постачальника для відправки при запиті DHCP" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "Перевірте" + +msgid "Version" +msgstr "Версія" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "Відкрита система WEP" + +msgid "WEP Shared Key" +msgstr "Спільний ключ WEP" + +msgid "WEP passphrase" +msgstr "Парольна фраза WEP" + +msgid "WMM Mode" +msgstr "Режим WMM" + +msgid "WPA passphrase" +msgstr "Парольна фраза WPA" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"WPA-шифрування потребує інсталяції wpa_supplicant (для режиму " +"клієнта) або hostapd (для Точки доступу та режиму ad-hoc)." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "Очікуємо, доки зміни наберуть чинності..." + +msgid "Waiting for command to complete..." +msgstr "Очікуємо завершення виконання команди..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "Застереження" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "Бездротові мережі" + +msgid "Wireless Adapter" +msgstr "Бездротовий адаптер" + +msgid "Wireless Network" +msgstr "Бездротова мережа" + +msgid "Wireless Overview" +msgstr "Огляд бездротових мереж" + +msgid "Wireless Security" +msgstr "Безпека бездротової мережі" + +msgid "Wireless is disabled or not associated" +msgstr "Бездротову мережу вимкнено або не пов'язано" + +msgid "Wireless is restarting..." +msgstr "Бездротова мережа перезапускається..." + +msgid "Wireless network is disabled" +msgstr "Бездротова мережа вимкнена" + +msgid "Wireless network is enabled" +msgstr "Бездротова мережа ввімкнена" + +msgid "Wireless restarted" +msgstr "Бездротова мережа перезапущена" + +msgid "Wireless shut down" +msgstr "Бездротова мережа припинила роботу" + +msgid "Write received DNS requests to syslog" +msgstr "Записувати отримані DNS-запити до системного журналу" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Підтримка XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Тут ви можете увімкнути або вимкнути інстальовані скрипти ініціалізації. " +"Зміни набудуть чинності після перезавантаження пристрою.
Увага: " +"Якщо ви вимкнете основний скрипт ініціалізації (наприклад \"network\"), " +"пристрій може стати недоступним!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" +"Ви повинні увімкнути Java Script у вашому браузері, або LuCI не буде " +"працювати належним чином." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "будь-який" + +msgid "auto" +msgstr "авто" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "зв'язано" + +msgid "create:" +msgstr "створити:" + +msgid "creates a bridge over specified interface(s)" +msgstr "Створити міст через вказаний інтерфейс(и)" + +msgid "dB" +msgstr "дБ" + +msgid "dBm" +msgstr "дБм" + +msgid "disable" +msgstr "вимкнено" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "минув" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"Файл, де зберігаються видані DHCP-оренди" + +msgid "forward" +msgstr "переслати" + +msgid "full-duplex" +msgstr "повний дуплекс" + +msgid "half-duplex" +msgstr "напівдуплекс" + +msgid "help" +msgstr "довідка" + +msgid "hidden" +msgstr "прихований" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "якщо мета — мережа" + +msgid "input" +msgstr "вхід" + +msgid "kB" +msgstr "КБ" + +msgid "kB/s" +msgstr "КБ/с" + +msgid "kbit/s" +msgstr "Кбіт/с" + +msgid "local DNS file" +msgstr "" +"Локальний DNS-файл" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "ні" + +msgid "no link" +msgstr "нема з'єднання" + +msgid "none" +msgstr "нема нічого" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "вимкнено" + +msgid "on" +msgstr "увімкнено" + +msgid "open" +msgstr "відкрита" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "спрямовано" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "з позначкою" + +msgid "unknown" +msgstr "невідомий" + +msgid "unlimited" +msgstr "необмежений" + +msgid "unspecified" +msgstr "не визначено" + +msgid "unspecified -or- create:" +msgstr "не визначено -або- створити" + +msgid "untagged" +msgstr "без позначки" + +msgid "yes" +msgstr "так" + +msgid "« Back" +msgstr "« Назад" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "Якщо ви залишите це невибраним, буде створена додаткова мережа." + +#~ msgid "Join Network: Settings" +#~ msgstr "Підключення до мережі: Настройки" + +#~ msgid "CPU" +#~ msgstr "ЦП" + +#~ msgid "Port %d" +#~ msgstr "Порт %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "Порт %d нетегований у кількох VLAN-ах!" + +#~ msgid "VLAN Interface" +#~ msgstr "VLAN-інтерфейс" diff --git a/feeds/luci/modules/luci-base/po/vi/base.po b/feeds/luci/modules/luci-base/po/vi/base.po new file mode 100644 index 0000000..178bf30 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/vi/base.po @@ -0,0 +1,3688 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:59+0200\n" +"PO-Revision-Date: 2009-08-14 12:23+0200\n" +"Last-Translator: Hong Phuc Dang \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "" + +#, fuzzy +msgid "(%s available)" +msgstr "(%s available)" + +msgid "(empty)" +msgstr "" + +msgid "(no interfaces attached)" +msgstr "" + +msgid "-- Additional Field --" +msgstr "---Mục bổ sung---" + +msgid "-- Please choose --" +msgstr "--Hãy chọn--" + +msgid "-- custom --" +msgstr "--tùy chỉnh--" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "" + +msgid "15 Minute Load:" +msgstr "" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "" + +msgid "DNS server port" +msgstr "" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-Address" + +msgid "IPv4-Gateway" +msgstr "IPv4-Gateway" + +msgid "IPv4-Netmask" +msgstr "IPv4-Netmask" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-Address or Network " +"(CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-Gateway" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "LED Configuration" + +msgid "LED Name" +msgstr "" + +msgid "MAC-Address" +msgstr "MAC-Address" + +msgid "" +"Max. DHCP leases" +msgstr "" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" + +msgid "Max. concurrent queries" +msgstr "" + +msgid "%s - %s" +msgstr "" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "" + +msgid "AR Support" +msgstr "Hỗ trợ AR" + +msgid "ARP retry threshold" +msgstr "" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" + +msgid "ATM device number" +msgstr "" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "" + +msgid "Access Point" +msgstr "Điểm truy cập" + +msgid "Action" +msgstr "Action" + +msgid "Actions" +msgstr "Hành động" + +msgid "Activate this network" +msgstr "" + +msgid "Active IPv4-Routes" +msgstr "Active IPv4-Routes" + +msgid "Active IPv6-Routes" +msgstr "Active IPv6-Routes" + +msgid "Active Connections" +msgstr "kết nối đang hoạt động" + +msgid "Active DHCP Leases" +msgstr "" + +msgid "Active DHCPv6 Leases" +msgstr "" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "Thêm vào" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "" + +msgid "Add new interface..." +msgstr "" + +msgid "Additional Hosts files" +msgstr "" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "" + +msgid "Address to access local relay bridge" +msgstr "" + +msgid "Administration" +msgstr "Quản trị" + +msgid "Advanced Settings" +msgstr "" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "Cho phép SSH xác thực mật mã" + +msgid "Allow all except listed" +msgstr "Cho phép tất cả trừ danh sách liệt kê" + +msgid "Allow listed only" +msgstr "Chỉ cho phép danh sách liệt kê" + +msgid "Allow localhost" +msgstr "" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "" + +msgid "Allow root logins with password" +msgstr "" + +msgid "Allow the root user to login with password" +msgstr "" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "" + +msgid "Antenna 2" +msgstr "" + +msgid "Antenna Configuration" +msgstr "" + +msgid "Any zone" +msgstr "" + +msgid "Apply" +msgstr "Áp dụng" + +msgid "Applying changes" +msgstr "Tiến hành thay đổi" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "" + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "Xác thực" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "Authoritative" + +msgid "Authorization Required" +msgstr "Yêu cầu ủy quyền" + +msgid "Auto Refresh" +msgstr "" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "Sẵn có" + +msgid "Available packages" +msgstr "" + +msgid "Average:" +msgstr "" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "" + +msgid "Back" +msgstr "" + +msgid "Back to Overview" +msgstr "" + +msgid "Back to configuration" +msgstr "" + +msgid "Back to overview" +msgstr "" + +msgid "Back to scan results" +msgstr "" + +msgid "Background Scan" +msgstr "Background Scan" + +msgid "Backup / Flash Firmware" +msgstr "" + +msgid "Backup / Restore" +msgstr "Backup/ Restore" + +msgid "Backup file list" +msgstr "" + +msgid "Bad address specified!" +msgstr "" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Bogus NX Domain Override" +msgstr "" + +msgid "Bridge" +msgstr "" + +msgid "Bridge interfaces" +msgstr "Giao diện cầu nối" + +msgid "Bridge unit number" +msgstr "" + +msgid "Bring up on boot" +msgstr "" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "" + +msgid "Buffered" +msgstr "" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "CPU usage (%)" + +msgid "Cancel" +msgstr "Bỏ qua" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "chuỗi" + +msgid "Changes" +msgstr "Thay đổi" + +msgid "Changes applied." +msgstr "Thay đổi đã áp dụng" + +msgid "Changes the administrator password for accessing the device" +msgstr "" + +msgid "Channel" +msgstr "Kênh" + +msgid "Check" +msgstr "" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "Checksum" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "Giao diện này chưa thuộc về bất kỳ firewall zone nào." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" + +msgid "Cipher" +msgstr "" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" + +msgid "Client" +msgstr "Client" + +msgid "Client ID to send when requesting DHCP" +msgstr "" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "" + +msgid "Close list..." +msgstr "" + +msgid "Collecting data..." +msgstr "" + +msgid "Command" +msgstr "Lệnh" + +msgid "Common Configuration" +msgstr "" + +msgid "Compression" +msgstr "Sức nén" + +msgid "Configuration" +msgstr "Cấu hình" + +msgid "Configuration applied." +msgstr "" + +msgid "Configuration files will be kept." +msgstr "" + +msgid "Confirmation" +msgstr "Xác nhận" + +msgid "Connect" +msgstr "" + +msgid "Connected" +msgstr "" + +msgid "Connection Limit" +msgstr "Giới hạn kết nối" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "" + +msgid "Country" +msgstr "" + +msgid "Country Code" +msgstr "Mã quốc gia" + +msgid "Cover the following interface" +msgstr "" + +msgid "Cover the following interfaces" +msgstr "" + +msgid "Create / Assign firewall-zone" +msgstr "Tạo/ gán firewall-zone" + +msgid "Create Interface" +msgstr "" + +msgid "Create a bridge over multiple interfaces" +msgstr "" + +msgid "Critical" +msgstr "" + +msgid "Cron Log Level" +msgstr "" + +msgid "Custom Interface" +msgstr "" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"Tùy chỉnh chế độ của thiết bị LEDs nếu có thể." + +msgid "DHCP Leases" +msgstr "" + +msgid "DHCP Server" +msgstr "" + +msgid "DHCP and DNS" +msgstr "" + +msgid "DHCP client" +msgstr "" + +msgid "DHCP-Options" +msgstr "Tùy chọn DHCP" + +msgid "DHCPv6 Leases" +msgstr "" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "DNS forwardings" +msgstr "" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "" + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "" + +msgid "Default %d" +msgstr "" + +msgid "Default gateway" +msgstr "" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "" + +msgid "Define a name for this network." +msgstr "" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" + +msgid "Delete" +msgstr "Xóa" + +msgid "Delete this network" +msgstr "" + +msgid "Description" +msgstr "Mô tả" + +msgid "Design" +msgstr "Thiết kế" + +msgid "Destination" +msgstr "Điểm đến" + +msgid "Device" +msgstr "Công cụ" + +msgid "Device Configuration" +msgstr "" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" + +msgid "Disable DNS setup" +msgstr "" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "Vô hiệu hóa bộ chỉnh giờ HW-Beacon" + +msgid "Disabled" +msgstr "" + +msgid "Discard upstream RFC1918 responses" +msgstr "" + +msgid "Displaying only packages containing" +msgstr "" + +msgid "Distance Optimization" +msgstr "Khoảng cách tối ưu" + +msgid "Distance to farthest network member in meters." +msgstr "Khoảng cách tới thành viên xa nhất trong mạng lưới tính bằng mét" + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "Tính đa dạng" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +"Dnsmasq là một phối hợp DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "" + +msgid "Do not forward reverse lookups for local networks" +msgstr "" + +msgid "Do not send probe responses" +msgstr "Không gửi nhắc hồi đáp" + +msgid "Domain required" +msgstr "Domain yêu cầu" + +msgid "Domain whitelist" +msgstr "" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"Don&#39;t chuyển tiếp DNS-Yêu " +"cầu không cần DNS-Tên" + +msgid "Download and install package" +msgstr "Tải và cài đặt gói" + +msgid "Download backup" +msgstr "" + +msgid "Dropbear Instance" +msgstr "" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear cung cấp SSH mạng lưới shell " +"truy cập và một SCP server tích hợp" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "" +"Dynamic DHCP" + +msgid "Dynamic tunnel" +msgstr "" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "EAP-Method" + +msgid "Edit" +msgstr "Chỉnh sửa" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "" + +msgid "Edit this network" +msgstr "" + +msgid "Emergency" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enable STP" +msgstr "Kích hoạt STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "" + +msgid "Enable Jumbo Frame passthrough" +msgstr "" + +msgid "Enable NTP client" +msgstr "" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "" + +msgid "Enable VLAN functionality" +msgstr "" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "" + +msgid "Enable this swap" +msgstr "" + +msgid "Enable/Disable" +msgstr "Cho kích hoạt/ Vô hiệu hóa" + +msgid "Enabled" +msgstr "" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "Kích hoạt Spanning Tree Protocol trên cầu nối này" + +msgid "Encapsulation mode" +msgstr "" + +msgid "Encryption" +msgstr "Encryption" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "" + +msgid "Error" +msgstr "Lỗi" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "Bộ tương hợp ethernet" + +msgid "Ethernet Switch" +msgstr "Bộ chuyển đảo ethernet" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "" + +msgid "Expires" +msgstr "" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "" + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "" + +msgid "External system log server port" +msgstr "" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "Khung nhanh" + +msgid "File" +msgstr "" + +msgid "Filename of the boot image advertised to clients" +msgstr "" + +msgid "Filesystem" +msgstr "Tập tin hệ thống" + +msgid "Filter" +msgstr "Lọc" + +msgid "Filter private" +msgstr "Filter private" + +msgid "Filter useless" +msgstr "Lọc không hữu dụng" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "" + +msgid "Find package" +msgstr "Tìm gói" + +msgid "Finish" +msgstr "" + +msgid "Firewall" +msgstr "Firewall" + +msgid "Firewall Settings" +msgstr "" + +msgid "Firewall Status" +msgstr "" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "" + +msgid "Fixed source port for outbound DNS queries" +msgstr "" + +msgid "Flash Firmware" +msgstr "Phần cứng flash" + +msgid "Flash image..." +msgstr "" + +msgid "Flash new firmware image" +msgstr "" + +msgid "Flash operations" +msgstr "" + +msgid "Flashing..." +msgstr "" + +msgid "Force" +msgstr "Force" + +msgid "Force CCMP (AES)" +msgstr "" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "" + +msgid "Force TKIP" +msgstr "" + +msgid "Force TKIP and CCMP (AES)" +msgstr "" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "" + +msgid "Forwarding mode" +msgstr "" + +msgid "Fragmentation Threshold" +msgstr "Ngưỡng cửa Phân đoạn" + +msgid "Frame Bursting" +msgstr "Khung nổ" + +msgid "Free" +msgstr "" + +msgid "Free space" +msgstr "" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "" + +msgid "GPRS only" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Gateway ports" +msgstr "" + +msgid "General Settings" +msgstr "" + +msgid "General Setup" +msgstr "" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "" + +msgid "Go to relevant configuration page" +msgstr "Đi tới trang cấu hình thích hợp" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr "" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "" + +msgid "Hang Up" +msgstr "Hang Up" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "" +"Ở đây bạn có thể cấu hình những đặc tính cơ bản của thiết bị như tên máy chủ " +"hoặc múi giờ." + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "" + +msgid "Hide ESSID" +msgstr "Giấu ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "Host entries" + +msgid "Host expiry timeout" +msgstr "" + +msgid "Host-IP or Network" +msgstr "Host-IP or Network" + +msgid "Hostname" +msgstr "Tên host" + +msgid "Hostname to send when requesting DHCP" +msgstr "" + +msgid "Hostnames" +msgstr "Tên host" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "Địa chỉ IP" + +msgid "IPv4" +msgstr "" + +msgid "IPv4 Firewall" +msgstr "" + +msgid "IPv4 WAN Status" +msgstr "" + +msgid "IPv4 address" +msgstr "" + +msgid "IPv4 and IPv6" +msgstr "" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "" + +msgid "IPv4 gateway" +msgstr "" + +msgid "IPv4 netmask" +msgstr "" + +msgid "IPv4 only" +msgstr "" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "" + +msgid "IPv4-Address" +msgstr "" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "" + +msgid "IPv6 address" +msgstr "" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "" + +msgid "IPv6 only" +msgstr "" + +msgid "IPv6 prefix" +msgstr "" + +msgid "IPv6 prefix length" +msgstr "" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "" + +msgid "Identity" +msgstr "Nhận dạng" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "" + +msgid "If unchecked, no default route is configured" +msgstr "" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"Nếu bộ nhớ vật lý không đủ dữ liệu không dùng có thể được swap tạm thời đến " +"một thiết bị swap để tạo ra nhiều khoảng trống hơn trong RAM. Hãy nhận biết rằng swapping dữ liệu là " +"một quá trình rất chậm vì một thiết bị swap không thể được truy cập với " +"datarates cao hơn của RAM." + +msgid "Ignore /etc/hosts" +msgstr "Lờ đi /etc/hosts" + +msgid "Ignore interface" +msgstr "Lờ đi giao diện" + +msgid "Ignore resolve file" +msgstr "Lờ đi tập tin resolve" + +msgid "Image" +msgstr "" + +msgid "In" +msgstr "Trong" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "" + +msgid "Inbound:" +msgstr "" + +msgid "Info" +msgstr "" + +msgid "Initscript" +msgstr "Initscript" + +msgid "Initscripts" +msgstr "Initscripts" + +msgid "Install" +msgstr "Cài đặt " + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "" + +msgid "Install protocol extensions..." +msgstr "" + +msgid "Installed packages" +msgstr "" + +msgid "Interface" +msgstr "Giao diện " + +msgid "Interface Configuration" +msgstr "" + +msgid "Interface Overview" +msgstr "" + +msgid "Interface is reconnecting..." +msgstr "" + +msgid "Interface is shutting down..." +msgstr "" + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "" + +msgid "Interface reconnected" +msgstr "" + +msgid "Interface shut down" +msgstr "" + +msgid "Interfaces" +msgstr "Giao diện " + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "" + +msgid "Invalid" +msgstr "Giá trị nhập vào không hợp lí" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "" + +msgid "Invalid username and/or password! Please try again." +msgstr "Tên và mật mã không đúng. Xin thử lại " + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "" +"Dường như bạn cố gắng flash một hình ảnh không phù hợp với bộ nhớ flash, xin " +"vui lòng xác minh các tập tin hình ảnh!" + +msgid "Java Script required!" +msgstr "" + +msgid "Join Network" +msgstr "" + +msgid "Join Network: Wireless Scan" +msgstr "" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "" + +msgid "Kernel Log" +msgstr "Kernel Log" + +msgid "Kernel Version" +msgstr "" + +msgid "Key" +msgstr "Phím " + +msgid "Key #%d" +msgstr "" + +msgid "Kill" +msgstr "Kill" + +msgid "L2TP" +msgstr "" + +msgid "L2TP Server" +msgstr "" + +msgid "LCP echo failure threshold" +msgstr "" + +msgid "LCP echo interval" +msgstr "" + +msgid "LLC" +msgstr "" + +msgid "Label" +msgstr "" + +msgid "Language" +msgstr "Ngôn ngữ" + +msgid "Language and Style" +msgstr "" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "" + +msgid "Leasefile" +msgstr "Leasefile" + +msgid "Leasetime" +msgstr "Leasetime" + +msgid "Leasetime remaining" +msgstr "Leasetime còn lại" + +msgid "Leave empty to autodetect" +msgstr "" + +msgid "Leave empty to use the current WAN address" +msgstr "" + +msgid "Legend:" +msgstr "" + +msgid "Limit" +msgstr "Giới hạn " + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "Link On" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "" + +msgid "Listening port for inbound DNS queries" +msgstr "" + +msgid "Load" +msgstr "Tải " + +msgid "Load Average" +msgstr "" + +msgid "Loading" +msgstr "" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "" + +msgid "Local IPv6 address" +msgstr "" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "" + +msgid "Local Time" +msgstr "Giờ địa phương" + +msgid "Local domain" +msgstr "" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "" + +msgid "Local server" +msgstr "" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "" + +msgid "Localise queries" +msgstr "Tra vấn địa phương" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "" + +msgid "Log queries" +msgstr "Bản ghi tra vấn" + +msgid "Logging" +msgstr "" + +msgid "Login" +msgstr "Đăng nhập " + +msgid "Logout" +msgstr "Thoát ra" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "" + +msgid "MAC-Address" +msgstr "" + +msgid "MAC-Address Filter" +msgstr "Lọc địa chỉ MAC" + +msgid "MAC-Filter" +msgstr "Lọc MAC" + +msgid "MAC-List" +msgstr "Danh sách MAC" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "" + +msgid "MTU" +msgstr "" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "Mức cao nhất" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "" + +msgid "Maximum hold time" +msgstr "Mức cao nhất" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "" + +msgid "Mbit/s" +msgstr "" + +msgid "Memory" +msgstr "Bộ nhớ" + +msgid "Memory usage (%)" +msgstr "Memory usage (%)" + +msgid "Metric" +msgstr "Metric" + +msgid "Minimum Rate" +msgstr "Mức thấp nhất" + +msgid "Minimum hold time" +msgstr "Mức thấp nhất" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "" + +msgid "Mode" +msgstr "Chế độ" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "Thiết bị modem" + +msgid "Modem init timeout" +msgstr "" + +msgid "Monitor" +msgstr "Monitor" + +msgid "Mount Entry" +msgstr "" + +msgid "Mount Point" +msgstr "Lắp điểm" + +msgid "Mount Points" +msgstr "Lắp điểm" + +msgid "Mount Points - Mount Entry" +msgstr "" + +msgid "Mount Points - Swap Entry" +msgstr "" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "" +"Số điểm lắp xác định tại một điểm mà ở đó bộ nhớ sẽ được gắn vào hệ thống " +"tập tin" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "" + +msgid "Mount point" +msgstr "" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "Lắp tập tin hệ thống" + +msgid "Move down" +msgstr "" + +msgid "Move up" +msgstr "" + +msgid "Multicast Rate" +msgstr "Multicast Rate" + +msgid "Multicast address" +msgstr "" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "Tên" + +msgid "Name of the new interface" +msgstr "" + +msgid "Name of the new network" +msgstr "" + +msgid "Navigation" +msgstr "Sự điều hướng" + +msgid "Netmask" +msgstr "" + +msgid "Network" +msgstr "mạng lưới " + +msgid "Network Utilities" +msgstr "" + +msgid "Network boot image" +msgstr "" + +msgid "Network without interfaces." +msgstr "" + +msgid "Next »" +msgstr "" + +msgid "No DHCP Server configured for this interface" +msgstr "" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "Không có chuỗi trong bảng này" + +msgid "No files found" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "No negative cache" +msgstr "" + +msgid "No network configured on this device" +msgstr "" + +msgid "No network name specified" +msgstr "" + +msgid "No package lists available" +msgstr "" + +msgid "No password set!" +msgstr "" + +msgid "No rules in this chain" +msgstr "Không có quy luật trong chuỗi này" + +msgid "No zone assigned" +msgstr "" + +msgid "Noise" +msgstr "" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Not Found" +msgstr "" + +msgid "Not associated" +msgstr "" + +msgid "Not connected" +msgstr "" + +msgid "Note: Configuration files will be erased." +msgstr "" + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "Nslookup" +msgstr "" + +msgid "OK" +msgstr "OK " + +msgid "OPKG-Configuration" +msgstr "Cấu hình OPKG-" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"Trên trang này bạn có thể định cấu hình giao diện network. Bạn có thể bắt " +"cầu nhiều giao diện bằng cách đánh dấu &quot;bridge interfaces&quot; " +"field và nhập tên vào của nhiều giao diện network phân tách bởi những khoảng " +"trống. Bạn có thể cũng dùng VLAN notation INTERFACE.VLANNR (e." +"g.: eth0.1)." + +msgid "On-State Delay" +msgstr "" + +msgid "One of hostname or mac address must be specified!" +msgstr "" + +msgid "One or more fields contain invalid values!" +msgstr "" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "" + +msgid "Open list..." +msgstr "" + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "" + +msgid "Option removed" +msgstr "" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "Lựa chọn " + +msgid "Other:" +msgstr "" + +msgid "Out" +msgstr "Ra khỏi" + +msgid "Outbound:" +msgstr "" + +msgid "Outdoor Channels" +msgstr "Kênh ngoại mạng" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "" + +msgid "Override MTU" +msgstr "" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "" + +msgid "Override the table used for internal routes" +msgstr "" + +msgid "Overview" +msgstr "Nhìn chung" + +msgid "Owner" +msgstr "Owner" + +msgid "PAP/CHAP password" +msgstr "" + +msgid "PAP/CHAP username" +msgstr "" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "" + +msgid "PPP" +msgstr "" + +msgid "PPPoA Encapsulation" +msgstr "PPPoA Encapsulation" + +msgid "PPPoATM" +msgstr "" + +msgid "PPPoE" +msgstr "" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Package lists are older than 24 hours" +msgstr "" + +msgid "Package name" +msgstr "Tên gói" + +msgid "Packets" +msgstr "Gói tin" + +msgid "Part of zone %q" +msgstr "" + +msgid "Password" +msgstr "Mật mã" + +msgid "Password authentication" +msgstr "Xác thực mật mã" + +msgid "Password of Private Key" +msgstr "Mật mã của private key" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Path to CA-Certificate" +msgstr "Đường dẫn tới CA-Certificate" + +msgid "Path to Client-Certificate" +msgstr "" + +msgid "Path to Private Key" +msgstr "Đường dẫn tới private key" + +msgid "Path to executable which handles the button event" +msgstr "" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "Tiến hành reboot" + +msgid "Perform reset" +msgstr "" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "" + +msgid "Physical Settings" +msgstr "Cài đặt căn bản" + +msgid "Ping" +msgstr "" + +msgid "Pkts." +msgstr "" + +msgid "Please enter your username and password." +msgstr "Nhập tên và mật mã" + +msgid "Policy" +msgstr "Chính sách" + +msgid "Port" +msgstr "Cửa " + +msgid "Port status:" +msgstr "" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "Ngăn chặn giao tiếp giữa client-và-client" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "Proceed" + +msgid "Processes" +msgstr "Processes" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "Prot." + +msgid "Protocol" +msgstr "Protocol" + +msgid "Protocol family" +msgstr "" + +msgid "Protocol of the new interface" +msgstr "" + +msgid "Protocol support is not installed" +msgstr "" + +msgid "Provide NTP server" +msgstr "" + +msgid "Provide new network" +msgstr "" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "Pseudo Ad-Hoc (ahdemo)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "RTS/CTS Threshold" + +msgid "RX" +msgstr "RX" + +msgid "RX Rate" +msgstr "" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "" + +msgid "Radius-Accounting-Port" +msgstr "" + +msgid "Radius-Accounting-Secret" +msgstr "" + +msgid "Radius-Accounting-Server" +msgstr "" + +msgid "Radius-Authentication-Port" +msgstr "" + +msgid "Radius-Authentication-Secret" +msgstr "" + +msgid "Radius-Authentication-Server" +msgstr "" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"Đọc /etc/ethers để định cấu hình DHCP-Server" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" + +msgid "Really reset all changes?" +msgstr "" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" + +msgid "Really switch protocol?" +msgstr "" + +msgid "Realtime Connections" +msgstr "" + +msgid "Realtime Graphs" +msgstr "" + +msgid "Realtime Load" +msgstr "" + +msgid "Realtime Traffic" +msgstr "" + +msgid "Realtime Wireless" +msgstr "" + +msgid "Rebind protection" +msgstr "" + +msgid "Reboot" +msgstr "Reboot" + +msgid "Rebooting..." +msgstr "" + +msgid "Reboots the operating system of your device" +msgstr "Reboots hệ điều hành của công cụ" + +msgid "Receive" +msgstr "Receive" + +msgid "Receiver Antenna" +msgstr "Máy thu Antenna" + +msgid "Reconnect this interface" +msgstr "" + +msgid "Reconnecting interface" +msgstr "" + +msgid "References" +msgstr "Tham chiếu" + +msgid "Regulatory Domain" +msgstr "Miền điều chỉnh" + +msgid "Relay" +msgstr "" + +msgid "Relay Bridge" +msgstr "" + +msgid "Relay between networks" +msgstr "" + +msgid "Relay bridge" +msgstr "" + +msgid "Remote IPv4 address" +msgstr "" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "Loại bỏ" + +msgid "Repeat scan" +msgstr "" + +msgid "Replace entry" +msgstr "thay đổi nội dung" + +msgid "Replace wireless configuration" +msgstr "" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "Reset" + +msgid "Reset Counters" +msgstr "Reset bộ đếm" + +msgid "Reset to defaults" +msgstr "" + +msgid "Resolv and Hosts Files" +msgstr "" + +msgid "Resolve file" +msgstr "" + +msgid "Restart" +msgstr "" + +msgid "Restart Firewall" +msgstr "Khởi động lại Firewall" + +msgid "Restore backup" +msgstr "Phục hồi backup" + +msgid "Reveal/hide password" +msgstr "" + +msgid "Revert" +msgstr "Revert" + +msgid "Root" +msgstr "" + +msgid "Root directory for files served via TFTP" +msgstr "" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "" + +msgid "Routes" +msgstr "Routes" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "" +"Routes chỉ định trên giao diện và cổng một host nhất định hay network được " +"tiếp cận." + +msgid "Run a filesystem check before mounting the device" +msgstr "" + +msgid "Run filesystem check" +msgstr "" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "Lưu" + +msgid "Save & Apply" +msgstr "Lưu & áp dụng " + +msgid "Save & Apply" +msgstr "" + +msgid "Scan" +msgstr "Scan" + +msgid "Scheduled Tasks" +msgstr "Scheduled Tasks" + +msgid "Section added" +msgstr "" + +msgid "Section removed" +msgstr "" + +msgid "See \"mount\" manpage for details" +msgstr "" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "" + +msgid "Separate Clients" +msgstr "Cô lập đối tượng" + +msgid "Separate WDS" +msgstr "Phân tách WDS" + +msgid "Server Settings" +msgstr "" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "" + +msgid "Service Type" +msgstr "" + +msgid "Services" +msgstr "Dịch vụ " + +msgid "Set up Time Synchronization" +msgstr "" + +msgid "Setup DHCP Server" +msgstr "" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "" + +msgid "Shutdown this interface" +msgstr "" + +msgid "Shutdown this network" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "" + +msgid "Size" +msgstr "Dung lượng " + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "" + +msgid "Skip to content" +msgstr "Nhảy tới nội dung" + +msgid "Skip to navigation" +msgstr "Chuyển đến mục định hướng" + +msgid "Slot time" +msgstr "" + +msgid "Software" +msgstr "Phần mềm" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "" + +msgid "Sorry, the object you requested was not found." +msgstr "" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" + +msgid "Sort" +msgstr "" + +msgid "Source" +msgstr "Nguồn" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "" + +msgid "Specifies the directory the device is attached to" +msgstr "" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "" + +msgid "Start" +msgstr "Bắt đầu " + +msgid "Start priority" +msgstr "Bắt đầu ưu tiên" + +msgid "Startup" +msgstr "" + +msgid "Static IPv4 Routes" +msgstr "Static IPv4 Routes" + +msgid "Static IPv6 Routes" +msgstr "Static IPv6 Routes" + +msgid "Static Leases" +msgstr "Thống kê leases" + +msgid "Static Routes" +msgstr "Static Routes" + +msgid "Static WDS" +msgstr "" + +msgid "Static address" +msgstr "" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" + +msgid "Status" +msgstr "Tình trạng" + +msgid "Stop" +msgstr "" + +msgid "Strict order" +msgstr "Yêu cầu nghiêm ngặt" + +msgid "Submit" +msgstr "Trình " + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "" + +msgid "Switch" +msgstr "chuyển đổi" + +msgid "Switch %q" +msgstr "" + +msgid "Switch %q (%s)" +msgstr "" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "" + +msgid "Sync with browser" +msgstr "" + +msgid "Synchronizing..." +msgstr "" + +msgid "System" +msgstr "Hệ thống" + +msgid "System Log" +msgstr "System Log" + +msgid "System Properties" +msgstr "" + +msgid "System log buffer size" +msgstr "" + +msgid "TCP:" +msgstr "" + +msgid "TFTP Settings" +msgstr "" + +msgid "TFTP server root" +msgstr "" + +msgid "TX" +msgstr "TX" + +msgid "TX Rate" +msgstr "" + +msgid "Table" +msgstr "Bảng" + +msgid "Target" +msgstr "Đích" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "Terminate" + +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"Tập tin công cụ của bộ nhớ hoặc phân vùng (e.g. " +"/dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"Filesystem mà được dùng để format memory (e.g. ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" + +msgid "The following changes have been committed" +msgstr "" + +msgid "The following changes have been reverted" +msgstr "Những thay đối sau đây đã được để trở về tình trạng cũ. " + +msgid "The following rules are currently active on this system." +msgstr "" + +msgid "The given network name is not unique" +msgstr "" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "" + +msgid "The length of the IPv6 prefix in bits" +msgstr "" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" + +msgid "The selected protocol needs a device assigned" +msgstr "" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "" + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"Hệ thống bây giờ đang flashing.
DO NOT POWER OFF THE DEVICE!
Chờ " +"một vài phút cho tới khi kết nối lại. Có thể cần phải làm mới địa chỉ của " +"máy tính để tiếp cận thiết bị một lần nữa, phụ thuộc vào cài đặt của bạn. " + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"Tập tin đang tải hình ảnh không bao gồm một hổ trợ format. Bảo đảm rằng bạn " +"chọn một image format tổng quát cho platform." + +msgid "There are no active leases." +msgstr "" + +msgid "There are no pending changes to apply!" +msgstr "" + +msgid "There are no pending changes to revert!" +msgstr "" + +msgid "There are no pending changes!" +msgstr "" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "" + +msgid "This IPv4 address of the relay" +msgstr "" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "" + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"Đây là DHCP duy " +"nhất trong mạng địa phương. " + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "Đây là system crontab mà scheduled tasks có thể bị định nghĩa." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "" +"List này đưa ra một tầm nhìn tổng quát về xử lý hệ thống đang chạy và tình " +"trạng của chúng." + +msgid "This page allows the configuration of custom button actions" +msgstr "" + +msgid "This page gives an overview over currently active network connections." +msgstr "" +"Trang này cung cấp một tổng quan về đang hoạt động kết nối mạng hiện tại." + +msgid "This section contains no values yet" +msgstr "Phần này chưa có giá trị nào" + +msgid "Time Synchronization" +msgstr "" + +msgid "Time Synchronization is not configured yet." +msgstr "" + +msgid "Timezone" +msgstr "Múi giờ " + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "" + +msgid "Traceroute" +msgstr "" + +msgid "Traffic" +msgstr "" + +msgid "Transfer" +msgstr "Chuyển giao" + +msgid "Transmission Rate" +msgstr "Truyền tải rate" + +msgid "Transmit" +msgstr "Transmit" + +msgid "Transmit Power" +msgstr "Truyền tải năng lượng" + +msgid "Transmitter Antenna" +msgstr "Máy phát Antenna" + +msgid "Trigger" +msgstr "" + +msgid "Trigger Mode" +msgstr "" + +msgid "Tunnel ID" +msgstr "" + +msgid "Tunnel Interface" +msgstr "" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "Turbo Mode" + +msgid "Tx-Power" +msgstr "" + +msgid "Type" +msgstr "Loại " + +msgid "UDP:" +msgstr "" + +msgid "UMTS only" +msgstr "" + +msgid "UMTS/GPRS/EV-DO" +msgstr "" + +msgid "USB Device" +msgstr "" + +msgid "UUID" +msgstr "" + +msgid "Unable to dispatch" +msgstr "" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "" + +msgid "Unknown Error, password not changed!" +msgstr "" + +msgid "Unmanaged" +msgstr "" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "Thay đổi không lưu" + +msgid "Unsupported protocol type." +msgstr "" + +msgid "Update lists" +msgstr "" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" + +msgid "Upload archive..." +msgstr "" + +msgid "Uploaded File" +msgstr "Tập tin đã tải lên" + +msgid "Uptime" +msgstr "Uptime" + +msgid "Use /etc/ethers" +msgstr "Dùng /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "" + +msgid "Use DNS servers advertised by peer" +msgstr "" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "" + +msgid "Use MTU on tunnel interface" +msgstr "" + +msgid "Use TTL on tunnel interface" +msgstr "" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "" + +msgid "Use default gateway" +msgstr "" + +msgid "Use gateway metric" +msgstr "" + +msgid "Use routing table" +msgstr "" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" + +msgid "Used" +msgstr "Đã sử dụng" + +msgid "Used Key Slot" +msgstr "" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "Tên người dùng " + +msgid "VC-Mux" +msgstr "" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "" + +msgid "VLANs on %q (%s)" +msgstr "" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "" + +msgid "Version" +msgstr "Phiên bản" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "" + +msgid "WEP Shared Key" +msgstr "" + +msgid "WEP passphrase" +msgstr "" + +msgid "WMM Mode" +msgstr "WMM Mode" + +msgid "WPA passphrase" +msgstr "" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "" + +msgid "Waiting for command to complete..." +msgstr "" + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "" + +msgid "Wireless Adapter" +msgstr "Bộ tương hợp không dây" + +msgid "Wireless Network" +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Wireless Security" +msgstr "" + +msgid "Wireless is disabled or not associated" +msgstr "" + +msgid "Wireless is restarting..." +msgstr "" + +msgid "Wireless network is disabled" +msgstr "" + +msgid "Wireless network is enabled" +msgstr "" + +msgid "Wireless restarted" +msgstr "" + +msgid "Wireless shut down" +msgstr "" + +msgid "Write received DNS requests to syslog" +msgstr "" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "Hỗ trợ XR" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"Bạn có thể bật hoặc tắt cài đặt init script tại đây. Thay đổi này sẽ được áp " +"dụng sau khi một thiết bị khởi động lại.
Cảnh báo: Nếu bạn vô " +"hiệu hoá init script thiết yếu như &quot;network&quot;, công cụ của " +"bạn chó thể trở nên không truy cập được" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "" + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "" + +msgid "auto" +msgstr "tự động" + +#, fuzzy +msgid "automatic" +msgstr "thống kê" + +msgid "baseT" +msgstr "" + +msgid "bridged" +msgstr "" + +msgid "create:" +msgstr "" + +msgid "creates a bridge over specified interface(s)" +msgstr "tạo một cầu nối trên một giao diện được chỉ định" + +msgid "dB" +msgstr "" + +msgid "dBm" +msgstr "" + +msgid "disable" +msgstr "Vô hiệu hóa" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"Tập tin được cho DHCP-leases sẽ được lưu trữ" + +msgid "forward" +msgstr "" + +msgid "full-duplex" +msgstr "" + +msgid "half-duplex" +msgstr "" + +msgid "help" +msgstr "" + +msgid "hidden" +msgstr "" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "Nếu mục tiêu là một network" + +msgid "input" +msgstr "" + +msgid "kB" +msgstr "" + +msgid "kB/s" +msgstr "" + +msgid "kbit/s" +msgstr "" + +msgid "local DNS file" +msgstr "Tập tin DNS địa phương" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "" + +msgid "no link" +msgstr "" + +msgid "none" +msgstr "không " + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "" + +msgid "on" +msgstr "" + +msgid "open" +msgstr "" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "" + +msgid "unknown" +msgstr "" + +msgid "unlimited" +msgstr "" + +msgid "unspecified" +msgstr "" + +msgid "unspecified -or- create:" +msgstr "" + +msgid "untagged" +msgstr "" + +msgid "yes" +msgstr "" + +msgid "« Back" +msgstr "" diff --git a/feeds/luci/modules/luci-base/po/zh-cn/base.po b/feeds/luci/modules/luci-base/po/zh-cn/base.po new file mode 100644 index 0000000..db02643 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/zh-cn/base.po @@ -0,0 +1,3715 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-12-21 23:08+0200\n" +"PO-Revision-Date: 2017-01-07 21:46+0800\n" +"Last-Translator: Hsing-Wang Liao \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.11\n" +"Language-Team: \n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "%s 在多个 VLAN 中未标记" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d 分钟信息,%d 秒刷新)" + +msgid "(%s available)" +msgstr "(%s 可用)" + +msgid "(empty)" +msgstr "(空)" + +msgid "(no interfaces attached)" +msgstr "(未连接接口)" + +msgid "-- Additional Field --" +msgstr "-- 更多选项 --" + +msgid "-- Please choose --" +msgstr "-- 请选择 --" + +msgid "-- custom --" +msgstr "-- 自定义 --" + +msgid "-- match by device --" +msgstr "-- 根据设备匹配 --" + +msgid "-- match by label --" +msgstr "-- 根据标签匹配 --" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "1分钟负载:" + +msgid "15 Minute Load:" +msgstr "15分钟负载:" + +msgid "464XLAT (CLAT)" +msgstr "464XLAT (CLAT)" + +msgid "5 Minute Load:" +msgstr "5分钟负载:" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "DNS 查询端口" + +msgid "DNS server port" +msgstr "DNS 服务器端口" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "将会按照指定的顺序查询DNS" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-地址" + +msgid "IPv4-Gateway" +msgstr "IPv4-网关" + +msgid "IPv4-Netmask" +msgstr "IPv4-子网掩码" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-地址或超网(CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-网关" + +msgid "IPv6-Suffix (hex)" +msgstr "IPv6-后缀(十六进制)" + +msgid "LED Configuration" +msgstr "LED配置" + +msgid "LED Name" +msgstr "LED名称" + +msgid "MAC-Address" +msgstr "MAC-地址" + +msgid "" +"Max. DHCP leases" +msgstr "最大DHCP分配数量" + +msgid "" +"Max. EDNS0 packet size" +msgstr "最大EDNS0数据包大小" + +msgid "Max. concurrent queries" +msgstr "最大并发查询数" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "A43C + J43 + A43" + +msgid "A43C + J43 + A43 + V43" +msgstr "A43C + J43 + A43 + V43" + +msgid "ADSL" +msgstr "ADSL" + +msgid "AICCU (SIXXS)" +msgstr "AICCU (SIXXS)" + +msgid "ANSI T1.413" +msgstr "ANSI T1.413" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "AR支持" + +msgid "ARP retry threshold" +msgstr "ARP重试阈值" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "ATM(异步传输模式)" + +msgid "ATM Bridges" +msgstr "ATM桥接" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "ATM虚拟通道标识(VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "ATM虚拟路径标识(VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"ATM桥是以AAL5协议封装以太网的虚拟Linux网桥,用于协同DHCP或PPP来拨号连接到网络" +"运营商。" + +msgid "ATM device number" +msgstr "ATM设备号码" + +msgid "ATU-C System Vendor ID" +msgstr "ATU-C系统供应商ID" + +msgid "AYIYA" +msgstr "AYIYA" + +msgid "Access Concentrator" +msgstr "接入集中器" + +msgid "Access Point" +msgstr "接入点AP" + +msgid "Action" +msgstr "动作" + +msgid "Actions" +msgstr "动作" + +msgid "Activate this network" +msgstr "激活此网络" + +msgid "Active IPv4-Routes" +msgstr "活动的IPv4-链路" + +msgid "Active IPv6-Routes" +msgstr "活动的IPv6-链路" + +msgid "Active Connections" +msgstr "活动连接" + +msgid "Active DHCP Leases" +msgstr "已分配的DHCP租约" + +msgid "Active DHCPv6 Leases" +msgstr "已分配的DHCPv6租约" + +msgid "Ad-Hoc" +msgstr "点对点Ad-Hoc" + +msgid "Add" +msgstr "添加" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "添加本地域名后缀到HOSTS文件中的域名" + +msgid "Add new interface..." +msgstr "添加新接口..." + +msgid "Additional Hosts files" +msgstr "额外的HOSTS文件" + +msgid "Additional servers file" +msgstr "额外的SERVERS文件" + +msgid "Address" +msgstr "地址" + +msgid "Address to access local relay bridge" +msgstr "接入本地中继桥的地址" + +msgid "Administration" +msgstr "管理权" + +msgid "Advanced Settings" +msgstr "高级设置" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "总发射功率(ACTATP)" + +msgid "Alert" +msgstr "警戒" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "从最低可用地址开始顺序分配IP地址" + +msgid "Allocate IP sequentially" +msgstr "顺序分配IP" + +msgid "Allow SSH password authentication" +msgstr "允许SSH密码验证" + +msgid "Allow all except listed" +msgstr "仅允许列表外" + +msgid "Allow listed only" +msgstr "仅允许列表内" + +msgid "Allow localhost" +msgstr "允许本机" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "允许远程主机连接到本地SSH转发端口" + +msgid "Allow root logins with password" +msgstr "允许root用户凭密码登录" + +msgid "Allow the root user to login with password" +msgstr "允许root用户凭密码登录" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "允许127.0.0.0/8回环范围内的上行响应,例如:RBL服务" + +msgid "Allowed IPs" +msgstr "允许的IP" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" +"也请查看SIXXS上的隧道对比" + +msgid "Always announce default router" +msgstr "总是广播默认路由" + +msgid "Annex" +msgstr "Annex" + +msgid "Annex A + L + M (all)" +msgstr "Annex A + L + M (全部)" + +msgid "Annex A G.992.1" +msgstr "Annex A G.992.1" + +msgid "Annex A G.992.2" +msgstr "Annex A G.992.2" + +msgid "Annex A G.992.3" +msgstr "Annex A G.992.3" + +msgid "Annex A G.992.5" +msgstr "Annex A G.992.5" + +msgid "Annex B (all)" +msgstr "Annex B (全部)" + +msgid "Annex B G.992.1" +msgstr "Annex B G.992.1" + +msgid "Annex B G.992.3" +msgstr "Annex B G.992.3" + +msgid "Annex B G.992.5" +msgstr "Annex B G.992.5" + +msgid "Annex J (all)" +msgstr "Annex J (全部)" + +msgid "Annex L G.992.3 POTS 1" +msgstr "Annex L G.992.3 POTS 1" + +msgid "Annex M (all)" +msgstr "Annex M (全部)" + +msgid "Annex M G.992.3" +msgstr "Annex M G.992.3" + +msgid "Annex M G.992.5" +msgstr "Annex M G.992.5" + +msgid "Announce as default router even if no public prefix is available." +msgstr "即使没有可用的公共前缀也广播默认路由。" + +msgid "Announced DNS domains" +msgstr "广播的DNS域名" + +msgid "Announced DNS servers" +msgstr "广播的DNS服务器" + +msgid "Anonymous Identity" +msgstr "匿名身份" + +msgid "Anonymous Mount" +msgstr "自动挂载未配置的磁盘分区" + +msgid "Anonymous Swap" +msgstr "自动挂载未配置的Swap分区" + +msgid "Antenna 1" +msgstr "天线 1" + +msgid "Antenna 2" +msgstr "天线 2" + +msgid "Antenna Configuration" +msgstr "天线配置" + +msgid "Any zone" +msgstr "任意区域" + +msgid "Apply" +msgstr "应用" + +msgid "Applying changes" +msgstr "正在应用更改" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "给每个公共IPv6前缀分配指定长度的固定部分" + +msgid "Assign interfaces..." +msgstr "分配接口..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "指定此接口使用的十六进制子ID前缀部分" + +msgid "Associated Stations" +msgstr "已连接站点" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Qualcomm/Atheros 802.11%s 无线网卡" + +msgid "Auth Group" +msgstr "认证组" + +msgid "AuthGroup" +msgstr "认证组" + +msgid "Authentication" +msgstr "认证" + +msgid "Authentication Type" +msgstr "认证类型" + +msgid "Authoritative" +msgstr "授权的唯一DHCP服务器" + +msgid "Authorization Required" +msgstr "需要授权" + +msgid "Auto Refresh" +msgstr "自动刷新" + +msgid "Automatic" +msgstr "自动" + +msgid "Automatic Homenet (HNCP)" +msgstr "自动家庭网络(HNCP)" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "在挂载前自动检查文件系统错误" + +msgid "Automatically mount filesystems on hotplug" +msgstr "通过Hotplug自动挂载磁盘" + +msgid "Automatically mount swap on hotplug" +msgstr "通过Hotplug自动挂载Swap分区" + +msgid "Automount Filesystem" +msgstr "自动挂载磁盘" + +msgid "Automount Swap" +msgstr "自动挂载Swap" + +msgid "Available" +msgstr "可用" + +msgid "Available packages" +msgstr "可用软件包" + +msgid "Average:" +msgstr "平均:" + +msgid "B43 + B43C" +msgstr "B43 + B43C" + +msgid "B43 + B43C + V43" +msgstr "B43 + B43C + V43" + +msgid "BR / DMR / AFTR" +msgstr "BR / DMR / AFTR" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "返回" + +msgid "Back to Overview" +msgstr "返回至概况" + +msgid "Back to configuration" +msgstr "返回至配置" + +msgid "Back to overview" +msgstr "返回至概况" + +msgid "Back to scan results" +msgstr "返回至扫描结果" + +msgid "Background Scan" +msgstr "后台搜索" + +msgid "Backup / Flash Firmware" +msgstr "备份/升级" + +msgid "Backup / Restore" +msgstr "备份/恢复" + +msgid "Backup file list" +msgstr "文件备份列表" + +msgid "Bad address specified!" +msgstr "指定了错误的地址!" + +msgid "Band" +msgstr "频宽" + +msgid "Behind NAT" +msgstr "在NAT网络内" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"下面是待备份的文件清单。包含了更改的配置文件、必要的基础文件和用户自定义的需" +"备份文件。" + +msgid "Bind interface" +msgstr "绑定接口" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "仅绑定到特定接口,而不是全部地址。" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "将隧道绑定到此接口(可选)。" + +msgid "Bitrate" +msgstr "传输速率" + +msgid "Bogus NX Domain Override" +msgstr "忽略虚假空域名解析" + +msgid "Bridge" +msgstr "桥接" + +msgid "Bridge interfaces" +msgstr "桥接接口" + +msgid "Bridge unit number" +msgstr "桥接号" + +msgid "Bring up on boot" +msgstr "开机自动运行" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Broadcom 802.11%s 无线网卡" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Broadcom BCM%04x 802.11 无线网卡" + +msgid "Buffered" +msgstr "已缓冲" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "由固件指定的软件源。此处的设置在任何系统升级中都不会被保留。" + +msgid "Buttons" +msgstr "按键" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "CA证书,如果留空的话证书将在第一次连接时被保存。" + +msgid "CPU usage (%)" +msgstr "CPU使用率(%)" + +msgid "Cancel" +msgstr "取消" + +msgid "Category" +msgstr "分类" + +msgid "Chain" +msgstr "链" + +msgid "Changes" +msgstr "修改数" + +msgid "Changes applied." +msgstr "更改已应用" + +msgid "Changes the administrator password for accessing the device" +msgstr "修改访问设备的管理员密码" + +msgid "Channel" +msgstr "信道" + +msgid "Check" +msgstr "检查" + +msgid "Check fileystems before mount" +msgstr "在挂载前检查文件系统" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "校验值" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "此接口的防火墙区域。填写创建栏可新建防火墙区域。" + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "选择指派到此无线接口的网络。填写创建栏可新建网络。" + +msgid "Cipher" +msgstr "算法" + +msgid "Cisco UDP encapsulation" +msgstr "Cisco UDP封装" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "备份/恢复当前系统配置文件或重置OpenWrt(仅squashfs固件有效)。" + +msgid "Client" +msgstr "客户端Client" + +msgid "Client ID to send when requesting DHCP" +msgstr "请求DHCP时发送的客户ID" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "定时关闭非活动链接(秒),0为持续连接" + +msgid "Close list..." +msgstr "关闭列表..." + +msgid "Collecting data..." +msgstr "正在收集数据..." + +msgid "Command" +msgstr "进程命令" + +msgid "Common Configuration" +msgstr "一般设置" + +msgid "Compression" +msgstr "压缩" + +msgid "Configuration" +msgstr "配置" + +msgid "Configuration applied." +msgstr "配置已应用" + +msgid "Configuration files will be kept." +msgstr "配置文件将被保留。" + +msgid "Confirmation" +msgstr "确认密码" + +msgid "Connect" +msgstr "连接" + +msgid "Connected" +msgstr "已连接" + +msgid "Connection Limit" +msgstr "连接数限制" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "当TLS不可用时连接到服务器失败" + +msgid "Connections" +msgstr "链接" + +msgid "Country" +msgstr "国家" + +msgid "Country Code" +msgstr "国家代码" + +msgid "Cover the following interface" +msgstr "包括以下接口" + +msgid "Cover the following interfaces" +msgstr "包括以下接口" + +msgid "Create / Assign firewall-zone" +msgstr "创建/分配 防火墙区域" + +msgid "Create Interface" +msgstr "创建新接口" + +msgid "Create a bridge over multiple interfaces" +msgstr "在多个接口上创建桥接" + +msgid "Critical" +msgstr "致命错误" + +msgid "Cron Log Level" +msgstr "Cron日志级别" + +msgid "Custom Interface" +msgstr "自定义接口" + +msgid "Custom delegated IPv6-prefix" +msgstr "自定义分配的IPv6前缀" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" +"自定义的软件源地址(例如私有的软件源)。此处设定的源地址在系统升级时将被保留" + +msgid "Custom feeds" +msgstr "自定义的软件源" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "自定义LED的活动状态。" + +msgid "DHCP Leases" +msgstr "DHCP分配" + +msgid "DHCP Server" +msgstr "DHCP服务器" + +msgid "DHCP and DNS" +msgstr "DHCP/DNS" + +msgid "DHCP client" +msgstr "DHCP客户端" + +msgid "DHCP-Options" +msgstr "DHCP-选项" + +msgid "DHCPv6 Leases" +msgstr "DHCPv6分配" + +msgid "DHCPv6 client" +msgstr "DHCPv6客户端" + +msgid "DHCPv6-Mode" +msgstr "DHCPv6模式" + +msgid "DHCPv6-Service" +msgstr "DHCPv6服务" + +msgid "DNS" +msgstr "DNS" + +msgid "DNS forwardings" +msgstr "DNS转发" + +msgid "DNS-Label / FQDN" +msgstr "DNS-Label / FQDN" + +msgid "DNSSEC" +msgstr "DNSSEC" + +msgid "DNSSEC check unsigned" +msgstr "DNSSEC未签名检查" + +msgid "DPD Idle Timeout" +msgstr "DPD空闲超时" + +msgid "DS-Lite AFTR address" +msgstr "DS-Lite AFTR地址" + +msgid "DSL" +msgstr "DSL" + +msgid "DSL Status" +msgstr "DSL状态" + +msgid "DSL line mode" +msgstr "DSL线路模式" + +msgid "DUID" +msgstr "DUID (DHCP唯一标识符)" + +msgid "Data Rate" +msgstr "数据速率" + +msgid "Debug" +msgstr "调试" + +msgid "Default %d" +msgstr "默认%d" + +msgid "Default gateway" +msgstr "默认网关" + +msgid "Default is stateless + stateful" +msgstr "默认是无状态 + 有状态" + +msgid "Default route" +msgstr "默认路由" + +msgid "Default state" +msgstr "默认状态" + +msgid "Define a name for this network." +msgstr "为网络定义名称" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"设置DHCP的附加选项,例如设定\"6,192.168.2.1,192.168.2.2\"表示通" +"告不同的DNS服务器给客户端。" + +msgid "Delete" +msgstr "删除" + +msgid "Delete this network" +msgstr "删除此网络" + +msgid "Description" +msgstr "描述" + +msgid "Design" +msgstr "主题" + +msgid "Destination" +msgstr "目标地址" + +msgid "Device" +msgstr "设备" + +msgid "Device Configuration" +msgstr "设备配置" + +msgid "Device is rebooting..." +msgstr "设备正在重启..." + +msgid "Device unreachable" +msgstr "无法连接到设备" + +msgid "Diagnostics" +msgstr "网络诊断" + +msgid "Dial number" +msgstr "拨号号码" + +msgid "Directory" +msgstr "目录" + +msgid "Disable" +msgstr "禁用" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "禁用本接口的DHCP。" + +msgid "Disable DNS setup" +msgstr "停用DNS设定" + +msgid "Disable Encryption" +msgstr "禁用加密" + +msgid "Disable HW-Beacon timer" +msgstr "停用HW-Beacon计时器" + +msgid "Disabled" +msgstr "禁用" + +msgid "Discard upstream RFC1918 responses" +msgstr "丢弃RFC1918上行响应数据" + +msgid "Displaying only packages containing" +msgstr "只显示有内容的软件包" + +msgid "Distance Optimization" +msgstr "距离优化" + +msgid "Distance to farthest network member in meters." +msgstr "最远客户端的距离(米)。" + +msgid "Distribution feeds" +msgstr "发行版软件源" + +msgid "Diversity" +msgstr "分集" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "Dnsmasq为NAT防火墙提供了一个集成的DHCP服务器和DNS转发器" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "不缓存无用的回应, 比如:不存在的域。" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "不转发公共域名服务器无法回应的请求" + +msgid "Do not forward reverse lookups for local networks" +msgstr "不转发反向查询本地网络的Lookups命令" + +msgid "Do not send probe responses" +msgstr "不回送探测响应" + +msgid "Domain required" +msgstr "忽略空域名解析" + +msgid "Domain whitelist" +msgstr "域名白名单" + +msgid "Don't Fragment" +msgstr "禁止碎片" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "不转发没有DNS名称的解析请求" + +msgid "Download and install package" +msgstr "下载并安装软件包" + +msgid "Download backup" +msgstr "下载备份" + +msgid "Dropbear Instance" +msgstr "Dropbear设置" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear提供了集成的SCP服务器和基于SSH的Shell访问" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "Dual-Stack Lite (RFC6333)" + +msgid "Dynamic DHCP" +msgstr "动态DHCP" + +msgid "Dynamic tunnel" +msgstr "动态隧道" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "动态分配DHCP地址。如果禁用,则只能为静态租用表中的客户端提供网络服务。" + +msgid "EA-bits length" +msgstr "EA位长度" + +msgid "EAP-Method" +msgstr "EAP类型" + +msgid "Edit" +msgstr "修改" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "编辑上方的原始配置以修复错误并按下“保存”按钮以重新载入此页面。" + +msgid "Edit this interface" +msgstr "修改此接口" + +msgid "Edit this network" +msgstr "修改此网络" + +msgid "Emergency" +msgstr "紧急" + +msgid "Enable" +msgstr "启用" + +msgid "Enable STP" +msgstr "开启STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "启用HE.net动态终端更新" + +msgid "Enable IPv6 negotiation" +msgstr "启用IPv6协商" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "在PPP链路上启用IPv6协商" + +msgid "Enable Jumbo Frame passthrough" +msgstr "启用巨型帧透传" + +msgid "Enable NTP client" +msgstr "启用NTP客户端" + +msgid "Enable Single DES" +msgstr "启用单个DES" + +msgid "Enable TFTP server" +msgstr "启用TFTP服务器" + +msgid "Enable VLAN functionality" +msgstr "启用VLAN" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "启用WPS按键配置,要求使用WPA(2)-PSK" + +msgid "Enable learning and aging" +msgstr "启用智能交换学习" + +msgid "Enable mirroring of incoming packets" +msgstr "启用流入数据包镜像" + +msgid "Enable mirroring of outgoing packets" +msgstr "启用流出数据包镜像" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "启用封装数据包的DF(禁止碎片)标志。" + +msgid "Enable this mount" +msgstr "启用挂载点" + +msgid "Enable this swap" +msgstr "启用交换区" + +msgid "Enable/Disable" +msgstr "启用/禁用" + +msgid "Enabled" +msgstr "启用" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "在此桥接上启用生成协议树" + +msgid "Encapsulation mode" +msgstr "封装模式" + +msgid "Encryption" +msgstr "加密" + +msgid "Endpoint Host" +msgstr "端点主机" + +msgid "Endpoint Port" +msgstr "端点端口" + +msgid "Erasing..." +msgstr "擦除中..." + +msgid "Error" +msgstr "错误" + +msgid "Errored seconds (ES)" +msgstr "错误秒数(ES)" + +msgid "Ethernet Adapter" +msgstr "以太网适配器" + +msgid "Ethernet Switch" +msgstr "以太网交换机" + +msgid "Exclude interfaces" +msgstr "排除接口" + +msgid "Expand hosts" +msgstr "扩展HOSTS文件中的主机后缀" + +msgid "Expires" +msgstr "到期时间" + +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "租用地址的到期时间,最短2分钟(2m)。" + +msgid "External" +msgstr "远程" + +msgid "External system log server" +msgstr "远程日志服务器" + +msgid "External system log server port" +msgstr "远程日志服务器端口" + +msgid "External system log server protocol" +msgstr "远程日志服务器协议" + +msgid "Extra SSH command options" +msgstr "额外的SSH命令选项" + +msgid "Fast Frames" +msgstr "快速帧" + +msgid "File" +msgstr "文件" + +msgid "Filename of the boot image advertised to clients" +msgstr "向客户端通告的启动镜像文件名" + +msgid "Filesystem" +msgstr "文件系统" + +msgid "Filter" +msgstr "过滤器" + +msgid "Filter private" +msgstr "过滤本地包" + +msgid "Filter useless" +msgstr "过滤无用包" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" +"查找所有当前系统上的分区和Swap并使用基于所找到的分区生成的配置文件替换默认配" +"置。" + +msgid "Find and join network" +msgstr "搜索并加入网络" + +msgid "Find package" +msgstr "查找软件包" + +msgid "Finish" +msgstr "完成" + +msgid "Firewall" +msgstr "防火墙" + +msgid "Firewall Settings" +msgstr "防火墙设置" + +msgid "Firewall Status" +msgstr "防火墙状态" + +msgid "Firmware File" +msgstr "固件文件" + +msgid "Firmware Version" +msgstr "固件版本" + +msgid "Fixed source port for outbound DNS queries" +msgstr "指定的DNS查询源端口" + +msgid "Flash Firmware" +msgstr "刷新固件" + +msgid "Flash image..." +msgstr "刷写固件..." + +msgid "Flash new firmware image" +msgstr "刷写新的固件" + +msgid "Flash operations" +msgstr "刷新操作" + +msgid "Flashing..." +msgstr "刷写中..." + +msgid "Force" +msgstr "强制开启DHCP" + +msgid "Force CCMP (AES)" +msgstr "强制使用CCMP(AES)加密" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "强制开启DHCP。" + +msgid "Force TKIP" +msgstr "强制使用TKIP加密" + +msgid "Force TKIP and CCMP (AES)" +msgstr "TKIP和CCMP(AES)混合加密" + +msgid "Force use of NAT-T" +msgstr "强制使用NAT-T" + +msgid "Form token mismatch" +msgstr "表单令牌不匹配" + +msgid "Forward DHCP traffic" +msgstr "转发DHCP数据包" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "前向纠错秒数(FECS)" + +msgid "Forward broadcast traffic" +msgstr "转发广播数据包" + +msgid "Forwarding mode" +msgstr "转发模式" + +msgid "Fragmentation Threshold" +msgstr "分片阈值" + +msgid "Frame Bursting" +msgstr "帧突发" + +msgid "Free" +msgstr "空闲数" + +msgid "Free space" +msgstr "空闲空间" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" +"有关WireGuard接口和Peer的更多信息:wireguard." +"io" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "仅GPRS" + +msgid "Gateway" +msgstr "网关" + +msgid "Gateway ports" +msgstr "网关端口" + +msgid "General Settings" +msgstr "基本设置" + +msgid "General Setup" +msgstr "基本设置" + +msgid "General options for opkg" +msgstr "Opkg基础配置" + +msgid "Generate Config" +msgstr "生成配置" + +msgid "Generate archive" +msgstr "生成备份" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "Generic 802.11%s 无线网卡" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "由于密码验证不匹配,密码没有更改!" + +msgid "Global Settings" +msgstr "全局设置" + +msgid "Global network options" +msgstr "全局网络选项" + +msgid "Go to password configuration..." +msgstr "跳转到密码配置页..." + +msgid "Go to relevant configuration page" +msgstr "跳转到相关的配置页面" + +msgid "Group Password" +msgstr "组密码" + +msgid "Guest" +msgstr "访客" + +msgid "HE.net password" +msgstr "HE.net密码" + +msgid "HE.net username" +msgstr "HE.net用户名" + +msgid "HT mode (802.11n)" +msgstr "HT模式(802.11n)" + +msgid "Handler" +msgstr "处理程序" + +msgid "Hang Up" +msgstr "挂起" + +msgid "Header Error Code Errors (HEC)" +msgstr "头错误代码错误(HEC)" + +msgid "Heartbeat" +msgstr "心跳" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "配置路由器的部分基础信息。" + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "SSH公共密钥认证(每行一个密钥)。" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Hermes 802.11b 无线网卡" + +msgid "Hide ESSID" +msgstr "隐藏ESSID" + +msgid "Host" +msgstr "主机" + +msgid "Host entries" +msgstr "主机目录" + +msgid "Host expiry timeout" +msgstr "主机到期超时" + +msgid "Host-IP or Network" +msgstr "主机IP或网络" + +msgid "Hostname" +msgstr "主机名" + +msgid "Hostname to send when requesting DHCP" +msgstr "请求DHCP时发送的主机名" + +msgid "Hostnames" +msgstr "主机名" + +msgid "Hybrid" +msgstr "混合" + +msgid "IKE DH Group" +msgstr "IKE DH组" + +msgid "IP address" +msgstr "IP地址" + +msgid "IPv4" +msgstr "IPv4" + +msgid "IPv4 Firewall" +msgstr "IPv4防火墙" + +msgid "IPv4 WAN Status" +msgstr "IPv4 WAN状态" + +msgid "IPv4 address" +msgstr "IPv4地址" + +msgid "IPv4 and IPv6" +msgstr "IPv4和IPv6" + +msgid "IPv4 assignment length" +msgstr "分配IPv4长度" + +msgid "IPv4 broadcast" +msgstr "IPv4广播" + +msgid "IPv4 gateway" +msgstr "IPv4网关" + +msgid "IPv4 netmask" +msgstr "IPv4子网掩码" + +msgid "IPv4 only" +msgstr "仅IPv4" + +msgid "IPv4 prefix" +msgstr "IPv4地址前缀" + +msgid "IPv4 prefix length" +msgstr "IPv4地址前缀长度" + +msgid "IPv4-Address" +msgstr "IPv4-地址" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "IPv4-in-IPv4 (RFC2003)" + +msgid "IPv6" +msgstr "IPv6" + +msgid "IPv6 Firewall" +msgstr "IPv6防火墙" + +msgid "IPv6 Neighbours" +msgstr "IPv6邻居" + +msgid "IPv6 Settings" +msgstr "IPv6设置" + +msgid "IPv6 ULA-Prefix" +msgstr "IPv6 ULA前缀" + +msgid "IPv6 WAN Status" +msgstr "IPv6 WAN状态" + +msgid "IPv6 address" +msgstr "IPv6地址" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "绑定到本地隧道终点的IPv6地址(可选)" + +msgid "IPv6 assignment hint" +msgstr "IPv6分配提示" + +msgid "IPv6 assignment length" +msgstr "IPv6分配长度" + +msgid "IPv6 gateway" +msgstr "IPv6网关" + +msgid "IPv6 only" +msgstr "仅IPv6" + +msgid "IPv6 prefix" +msgstr "IPv6地址前缀" + +msgid "IPv6 prefix length" +msgstr "IPv6地址前缀长度" + +msgid "IPv6 routed prefix" +msgstr "IPv6路由前缀" + +msgid "IPv6-Address" +msgstr "IPv6-地址" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6-in-IPv4 (RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6-over-IPv4 (6rd)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6-over-IPv4 (6to4)" + +msgid "Identity" +msgstr "鉴权" + +msgid "If checked, 1DES is enaled" +msgstr "选中以启用1DES" + +msgid "If checked, encryption is disabled" +msgstr "选中以禁用加密" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "用UUID来挂载设备" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "用卷标来挂载设备" + +msgid "If unchecked, no default route is configured" +msgstr "留空则不配置默认路由" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "留空则忽略所通告的DNS服务器地址" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "如果物理内存不足,闲置数据可自动移到交换区暂存,以提高可用内存。" + +msgid "Ignore /etc/hosts" +msgstr "忽略 /etc/hosts" + +msgid "Ignore interface" +msgstr "关闭DHCP" + +msgid "Ignore resolve file" +msgstr "忽略解析文件" + +msgid "Image" +msgstr "固件文件" + +msgid "In" +msgstr "入口" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" +"为了防止对系统的未授权访问,您的请求已被阻止。点击下面的 “继续 »” 来返回上一" +"页。" + +msgid "Inactivity timeout" +msgstr "活动超时" + +msgid "Inbound:" +msgstr "入站:" + +msgid "Info" +msgstr "信息" + +msgid "Initscript" +msgstr "启动脚本" + +msgid "Initscripts" +msgstr "启动脚本" + +msgid "Install" +msgstr "安装" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "安装 iputils-traceroute6 以进行IPv6 traceroute" + +msgid "Install package %q" +msgstr "安装软件包 %q" + +msgid "Install protocol extensions..." +msgstr "安装扩展协议..." + +msgid "Installed packages" +msgstr "已安装软件包" + +msgid "Interface" +msgstr "接口" + +msgid "Interface Configuration" +msgstr "接口配置" + +msgid "Interface Overview" +msgstr "接口总览" + +msgid "Interface is reconnecting..." +msgstr "正在重新连接接口..." + +msgid "Interface is shutting down..." +msgstr "正在关闭接口..." + +msgid "Interface name" +msgstr "接口名称" + +msgid "Interface not present or not connected yet." +msgstr "接口不存在或未连接。" + +msgid "Interface reconnected" +msgstr "接口已重新连接" + +msgid "Interface shut down" +msgstr "接口已关闭" + +msgid "Interfaces" +msgstr "接口" + +msgid "Internal" +msgstr "内部" + +msgid "Internal Server Error" +msgstr "内部服务器错误" + +msgid "Invalid" +msgstr "无效" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "无效的VLAN ID!只有 %d 和 %d 之间的ID有效。" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "无效的VLAN ID!只允许唯一的ID。" + +msgid "Invalid username and/or password! Please try again." +msgstr "无效的用户名和/或密码!请重试。" + +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "你尝试刷写的固件与本路由器不兼容,请重新验证固件文件。" + +msgid "Java Script required!" +msgstr "需要Java Script!" + +msgid "Join Network" +msgstr "加入网络" + +msgid "Join Network: Wireless Scan" +msgstr "加入网络:搜索无线" + +msgid "Joining Network: %q" +msgstr "加入网络:%q" + +msgid "Keep settings" +msgstr "保留配置" + +msgid "Kernel Log" +msgstr "内核日志" + +msgid "Kernel Version" +msgstr "内核版本" + +msgid "Key" +msgstr "密码" + +msgid "Key #%d" +msgstr "密码 #%d" + +msgid "Kill" +msgstr "强制关闭" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "L2TP服务器" + +msgid "LCP echo failure threshold" +msgstr "LCP响应故障阈值" + +msgid "LCP echo interval" +msgstr "LCP响应间隔" + +msgid "LLC" +msgstr "LLC" + +msgid "Label" +msgstr "卷标" + +msgid "Language" +msgstr "语言" + +msgid "Language and Style" +msgstr "语言和界面" + +msgid "Latency" +msgstr "延迟" + +msgid "Leaf" +msgstr "叶状" + +msgid "Lease time" +msgstr "租期" + +msgid "Lease validity time" +msgstr "有效租期" + +msgid "Leasefile" +msgstr "租约文件" + +msgid "Leasetime" +msgstr "租用时间" + +msgid "Leasetime remaining" +msgstr "剩余租期" + +msgid "Leave empty to autodetect" +msgstr "留空则自动探测" + +msgid "Leave empty to use the current WAN address" +msgstr "留空则使用当前WAN地址" + +msgid "Legend:" +msgstr "图例:" + +msgid "Limit" +msgstr "客户数" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "将DNS服务限制到我们提供DNS的子网接口。" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "仅监听这些接口和环回接口。" + +msgid "Line Attenuation (LATN)" +msgstr "线路衰减(LATN)" + +msgid "Line Mode" +msgstr "线路模式" + +msgid "Line State" +msgstr "线路状态" + +msgid "Line Uptime" +msgstr "线路运行时间" + +msgid "Link On" +msgstr "活动链接" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "将指定的域名DNS解析转发到指定的DNS服务器(按照示例填写)" + +msgid "List of SSH key files for auth" +msgstr "用于认证的SSH密钥文件列表" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "允许RFC1918响应的域名列表" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "允许虚假空域名响应的服务器列表" + +msgid "Listen Interfaces" +msgstr "监听接口" + +msgid "Listen Port" +msgstr "监听端口" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "监听指定的接口;未指定则监听全部" + +msgid "Listening port for inbound DNS queries" +msgstr "入站DNS查询端口" + +msgid "Load" +msgstr "负载" + +msgid "Load Average" +msgstr "平均负载" + +msgid "Loading" +msgstr "加载中" + +msgid "Local IP address to assign" +msgstr "要分配的本地IP地址" + +msgid "Local IPv4 address" +msgstr "本地IPv4地址" + +msgid "Local IPv6 address" +msgstr "本地IPv6地址" + +msgid "Local Service Only" +msgstr "仅本地服务" + +msgid "Local Startup" +msgstr "本地启动脚本" + +msgid "Local Time" +msgstr "本地时间" + +msgid "Local domain" +msgstr "本地域名" + +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "本地域名规则。与此域匹配的名称从不转发,仅从DHCP或HOSTS文件解析" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "本地域名后缀将添加到DHCP和HOSTS文件条目" + +msgid "Local server" +msgstr "本地服务器" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "如果有多个IP可用,则根据请求来源的子网来本地化主机名" + +msgid "Localise queries" +msgstr "本地化查询" + +msgid "Locked to channel %s used by: %s" +msgstr "信道道已被锁定为 %s,因为该信道被 %s 使用" + +msgid "Log output level" +msgstr "日志记录等级" + +msgid "Log queries" +msgstr "日志查询" + +msgid "Logging" +msgstr "日志" + +msgid "Login" +msgstr "登录" + +msgid "Logout" +msgstr "退出" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "信号丢失秒数(LOSS)" + +msgid "Lowest leased address as offset from the network address." +msgstr "网络地址的起始分配基址。" + +msgid "MAC-Address" +msgstr "MAC-地址" + +msgid "MAC-Address Filter" +msgstr "MAC-地址过滤" + +msgid "MAC-Filter" +msgstr "MAC-过滤" + +msgid "MAC-List" +msgstr "MAC-列表" + +msgid "MAP / LW4over6" +msgstr "MAP / LW4over6" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "MD5" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "请确认你已经复制过整个根文件系统,例如使用以下命令:" + +msgid "Manual" +msgstr "手动" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "最大可达数据速率(ATTNDR)" + +msgid "Maximum Rate" +msgstr "最高速率" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "允许的最大DHCP租用数" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "允许的最大并发DNS查询数" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "允许的最大EDNS.0 UDP数据包大小" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "调制解调器就绪的最大等待时间(秒)" + +msgid "Maximum hold time" +msgstr "最大持续时间" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" +"名称的最大长度为15个字符,包括自动协议/网桥前缀(br-, 6in4-, pppoe- 等等)" + +msgid "Maximum number of leased addresses." +msgstr "最大地址分配数量。" + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "内存" + +msgid "Memory usage (%)" +msgstr "内存使用率(%)" + +msgid "Metric" +msgstr "跃点数" + +msgid "Minimum Rate" +msgstr "最低速率" + +msgid "Minimum hold time" +msgstr "最低持续时间" + +msgid "Mirror monitor port" +msgstr "数据包镜像监听端口" + +msgid "Mirror source port" +msgstr "数据包镜像源端口" + +msgid "Missing protocol extension for proto %q" +msgstr "缺少协议 %q 的协议扩展" + +msgid "Mode" +msgstr "模式" + +msgid "Model" +msgstr "主机型号" + +msgid "Modem device" +msgstr "调制解调器节点" + +msgid "Modem init timeout" +msgstr "调制解调器初始化超时" + +msgid "Monitor" +msgstr "监听Monitor" + +msgid "Mount Entry" +msgstr "挂载项目" + +msgid "Mount Point" +msgstr "挂载点" + +msgid "Mount Points" +msgstr "挂载点" + +msgid "Mount Points - Mount Entry" +msgstr "挂载点-存储区" + +msgid "Mount Points - Swap Entry" +msgstr "挂载点-交换区" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "配置存储设备挂载到文件系统中的位置和参数。" + +msgid "Mount filesystems not specifically configured" +msgstr "自动挂载未专门配置挂载点的分区" + +msgid "Mount options" +msgstr "挂载选项" + +msgid "Mount point" +msgstr "挂载点" + +msgid "Mount swap not specifically configured" +msgstr "自动挂载未专门配置的Swap分区" + +msgid "Mounted file systems" +msgstr "已挂载的文件系统" + +msgid "Move down" +msgstr "下移" + +msgid "Move up" +msgstr "上移" + +msgid "Multicast Rate" +msgstr "多播速率" + +msgid "Multicast address" +msgstr "多播地址" + +msgid "NAS ID" +msgstr "NAS ID" + +msgid "NAT-T Mode" +msgstr "NAT-T模式" + +msgid "NAT64 Prefix" +msgstr "NAT64前缀" + +msgid "NDP-Proxy" +msgstr "NDP-代理" + +msgid "NT Domain" +msgstr "NT域" + +msgid "NTP server candidates" +msgstr "候选NTP服务器" + +msgid "NTP sync time-out" +msgstr "NTP同步超时" + +msgid "Name" +msgstr "名称" + +msgid "Name of the new interface" +msgstr "新接口的名称" + +msgid "Name of the new network" +msgstr "新网络的名称" + +msgid "Navigation" +msgstr "导航" + +msgid "Netmask" +msgstr "子网掩码" + +msgid "Network" +msgstr "网络" + +msgid "Network Utilities" +msgstr "网络工具" + +msgid "Network boot image" +msgstr "网络启动镜像" + +msgid "Network without interfaces." +msgstr "无接口的网络。" + +msgid "Next »" +msgstr "下一步 »" + +msgid "No DHCP Server configured for this interface" +msgstr "本接口未配置DHCP服务器" + +msgid "No NAT-T" +msgstr "无NAT-T" + +msgid "No chains in this table" +msgstr "本表中没有链" + +msgid "No files found" +msgstr "未找到文件" + +msgid "No information available" +msgstr "无可用信息" + +msgid "No negative cache" +msgstr "禁用无效信息缓存" + +msgid "No network configured on this device" +msgstr "本设备未配置网络" + +msgid "No network name specified" +msgstr "未指定网络名" + +msgid "No package lists available" +msgstr "无可用软件列表" + +msgid "No password set!" +msgstr "未设置密码!" + +msgid "No rules in this chain" +msgstr "本链没有规则" + +msgid "No zone assigned" +msgstr "未指定区域" + +msgid "Noise" +msgstr "噪声" + +msgid "Noise Margin (SNR)" +msgstr "噪声容限(SNR)" + +msgid "Noise:" +msgstr "噪声:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "非抢占CRC错误(CRC_P)" + +msgid "Non-wildcard" +msgstr "非通配符" + +msgid "None" +msgstr "无" + +msgid "Normal" +msgstr "正常" + +msgid "Not Found" +msgstr "未找到" + +msgid "Not associated" +msgstr "未关联" + +msgid "Not connected" +msgstr "未连接" + +msgid "Note: Configuration files will be erased." +msgstr "注意:配置文件将被删除。" + +msgid "Note: interface name length" +msgstr "注意:接口名称长度" + +msgid "Notice" +msgstr "注意" + +msgid "Nslookup" +msgstr "Nslookup" + +msgid "OK" +msgstr "确认" + +msgid "OPKG-Configuration" +msgstr "OPKG-配置" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "关闭时间" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "配置网络接口信息。" + +msgid "On-State Delay" +msgstr "通电时间" + +msgid "One of hostname or mac address must be specified!" +msgstr "请指定主机名或MAC地址!" + +msgid "One or more fields contain invalid values!" +msgstr "一个或多个选项值有误!" + +msgid "One or more invalid/required values on tab" +msgstr "选项卡上存在一个或多个无效/必需值" + +msgid "One or more required fields have no value!" +msgstr "一个或多个必选项值为空!" + +msgid "Open list..." +msgstr "打开列表..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "开放连接(CISCO AnyConnect)" + +msgid "Operating frequency" +msgstr "工作频率" + +msgid "Option changed" +msgstr "修改的选项" + +msgid "Option removed" +msgstr "移除的选项" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "可选,设置这个选项会覆盖默认设定的服务器(tic.sixxs.net)" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "可选,如果你的SIXXS账号拥有一个以上的隧道请设置此项." + +msgid "Optional." +msgstr "可选" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "可选,为此Peer创建允许IP的路由。" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "可选,隧道接口的最大传输单元。" + +msgid "Optional. Port of peer." +msgstr "可选,Peer的端口。" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" +"可选,Keep-Alive消息之间的秒数,默认为0(禁用)。如果此设备位于NAT之后,建议使" +"用的值为25。" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "可选,用于传出和传入数据包的UDP端口。" + +msgid "Options" +msgstr "选项" + +msgid "Other:" +msgstr "其余:" + +msgid "Out" +msgstr "出口" + +msgid "Outbound:" +msgstr "出站:" + +msgid "Outdoor Channels" +msgstr "户外频道" + +msgid "Output Interface" +msgstr "网络出口" + +msgid "Override MAC address" +msgstr "克隆MAC地址" + +msgid "Override MTU" +msgstr "更新MTU" + +msgid "Override TOS" +msgstr "更新TOS" + +msgid "Override TTL" +msgstr "更新TTL" + +msgid "Override default interface name" +msgstr "更新默认接口名称" + +msgid "Override the gateway in DHCP responses" +msgstr "更新DHCP响应网关" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "更新发送到客户端的子网掩码。" + +msgid "Override the table used for internal routes" +msgstr "更新内部路由表" + +msgid "Overview" +msgstr "总览" + +msgid "Owner" +msgstr "用户名" + +msgid "PAP/CHAP password" +msgstr "PAP/CHAP密码" + +msgid "PAP/CHAP username" +msgstr "PAP/CHAP用户名" + +msgid "PID" +msgstr "PID" + +msgid "PIN" +msgstr "PIN" + +msgid "PPP" +msgstr "PPP" + +msgid "PPPoA Encapsulation" +msgstr "PPPoA封包" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "PPPoSSH" + +msgid "PPtP" +msgstr "PPtP" + +msgid "PSID offset" +msgstr "PSID偏移" + +msgid "PSID-bits length" +msgstr "PSID位长度" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "PTM/EFM(分组传输模式)" + +msgid "Package libiwinfo required!" +msgstr "需要 libiwinfo 软件包!" + +msgid "Package lists are older than 24 hours" +msgstr "软件包列表已超过24小时未更新" + +msgid "Package name" +msgstr "软件包名称" + +msgid "Packets" +msgstr "数据包" + +msgid "Part of zone %q" +msgstr "区域 %q" + +msgid "Password" +msgstr "密码" + +msgid "Password authentication" +msgstr "密码验证" + +msgid "Password of Private Key" +msgstr "私有密钥" + +msgid "Password of inner Private Key" +msgstr "内部私钥的密码" + +msgid "Password successfully changed!" +msgstr "密码修改成功!" + +msgid "Path to CA-Certificate" +msgstr "CA证书路径" + +msgid "Path to Client-Certificate" +msgstr "客户端证书路径" + +msgid "Path to Private Key" +msgstr "私钥路径" + +msgid "Path to executable which handles the button event" +msgstr "处理按键动作的可执行文件路径" + +msgid "Path to inner CA-Certificate" +msgstr "内部CA证书的路径" + +msgid "Path to inner Client-Certificate" +msgstr "内部客户端证书的路径" + +msgid "Path to inner Private Key" +msgstr "内部私钥的路径" + +msgid "Peak:" +msgstr "峰值:" + +msgid "Peer IP address to assign" +msgstr "要分配的Peer IP地址" + +msgid "Peers" +msgstr "Peers" + +msgid "Perfect Forward Secrecy" +msgstr "完全正向保密" + +msgid "Perform reboot" +msgstr "执行重启" + +msgid "Perform reset" +msgstr "执行复位" + +msgid "Persistent Keep Alive" +msgstr "持续Keep-Alive" + +msgid "Phy Rate:" +msgstr "物理速率:" + +msgid "Physical Settings" +msgstr "物理设置" + +msgid "Ping" +msgstr "Ping" + +msgid "Pkts." +msgstr "数据包" + +msgid "Please enter your username and password." +msgstr "请输入用户名和密码。" + +msgid "Policy" +msgstr "策略" + +msgid "Port" +msgstr "端口" + +msgid "Port status:" +msgstr "端口状态:" + +msgid "Power Management Mode" +msgstr "电源管理模式" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "抢占式CRC错误(CRCP_P)" + +msgid "Preshared Key" +msgstr "预共享密钥" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "在指定数量的LCP响应故障后假定链路已断开,0为忽略故障" + +msgid "Prevent listening on these interfaces." +msgstr "防止监听这些接口。" + +msgid "Prevents client-to-client communication" +msgstr "禁止客户端间通信" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Prism2/2.5/3 802.11b 无线网卡" + +msgid "Private Key" +msgstr "私钥" + +msgid "Proceed" +msgstr "执行" + +msgid "Processes" +msgstr "系统进程" + +msgid "Profile" +msgstr "配置文件" + +msgid "Prot." +msgstr "协议" + +msgid "Protocol" +msgstr "协议" + +msgid "Protocol family" +msgstr "协议族" + +msgid "Protocol of the new interface" +msgstr "新接口的协议" + +msgid "Protocol support is not installed" +msgstr "未安装协议支持" + +msgid "Provide NTP server" +msgstr "NTP服务器" + +msgid "Provide new network" +msgstr "添加新网络" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "伪装Ad-Hoc(ahdemo)" + +msgid "Public Key" +msgstr "公钥" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "分配到此设备的公共前缀,用以分发到客户端。" + +msgid "QMI Cellular" +msgstr "QMI蜂窝" + +msgid "Quality" +msgstr "质量" + +msgid "RFC3947 NAT-T mode" +msgstr "RFC3947 NAT-T模式" + +msgid "RTS/CTS Threshold" +msgstr "RTS/CTS阈值" + +msgid "RX" +msgstr "接收" + +msgid "RX Rate" +msgstr "接收速率" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "MediaTek/RaLink 802.11%s 无线网卡" + +msgid "Radius-Accounting-Port" +msgstr "Radius 计费端口" + +msgid "Radius-Accounting-Secret" +msgstr "Radius 计费密钥" + +msgid "Radius-Accounting-Server" +msgstr "Radius 计费服务器" + +msgid "Radius-Authentication-Port" +msgstr "Radius 认证端口" + +msgid "Radius-Authentication-Secret" +msgstr "Radius 认证密钥" + +msgid "Radius-Authentication-Server" +msgstr "Radius 认证服务器" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +"根据/etc/ethers来配置DHCP-服务器" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"确定要删除此接口?删除操作无法撤销!\\n删除此接口,可能导致无法再访问路由器!" + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"确定要删除此无线网络?删除操作无法撤销!\\n删除此无线网络,可能导致无法再访问" +"路由器!" + +msgid "Really reset all changes?" +msgstr "确定要放弃所有更改?" + +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"确定要关闭此网络?\\n如果你正在使用此接口连接路由器,关闭此网络可能导致连接断" +"开!" + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"确定要关闭接口 \"%s\"?\\n如果你正在使用此接口连接路由器,关闭此网络可能导致" +"连接断开!" + +msgid "Really switch protocol?" +msgstr "确定要切换协议?" + +msgid "Realtime Connections" +msgstr "实时连接" + +msgid "Realtime Graphs" +msgstr "实时信息" + +msgid "Realtime Load" +msgstr "实时负载" + +msgid "Realtime Traffic" +msgstr "实时流量" + +msgid "Realtime Wireless" +msgstr "实时无线" + +msgid "Rebind protection" +msgstr "重绑定保护" + +msgid "Reboot" +msgstr "重启" + +msgid "Rebooting..." +msgstr "重启中..." + +msgid "Reboots the operating system of your device" +msgstr "重启您设备上的系统" + +msgid "Receive" +msgstr "接收" + +msgid "Receiver Antenna" +msgstr "接收天线" + +msgid "Reconnect this interface" +msgstr "重连此接口" + +msgid "Reconnecting interface" +msgstr "重连接口中..." + +msgid "References" +msgstr "引用" + +msgid "Regulatory Domain" +msgstr "无线网络国家区域" + +msgid "Relay" +msgstr "中继" + +msgid "Relay Bridge" +msgstr "中继桥" + +msgid "Relay between networks" +msgstr "网络间中继" + +msgid "Relay bridge" +msgstr "中继桥" + +msgid "Remote IPv4 address" +msgstr "远程IPv4地址" + +msgid "Remote IPv4 address or FQDN" +msgstr "远程IPv4地址或FQDN" + +msgid "Remove" +msgstr "移除" + +msgid "Repeat scan" +msgstr "重新扫描" + +msgid "Replace entry" +msgstr "重置条目" + +msgid "Replace wireless configuration" +msgstr "重置无线配置" + +msgid "Request IPv6-address" +msgstr "请求IPv6地址" + +msgid "Request IPv6-prefix of length" +msgstr "请求指定长度的IPv6前缀" + +msgid "Require TLS" +msgstr "必须使用TLS" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "某些ISP需要,例如:同轴线网络DOCSIS 3" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "必须,此接口的Base64编码私钥。" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" +"必须,允许该Peer在隧道中使用的IP地址和前缀,通常是该Peer的隧道IP地址和通过隧" +"道的路由网络。" + +msgid "Required. Public key of peer." +msgstr "必须,Peer的公钥。" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "需要上级支持DNSSEC,验证未签名的域响应确实是来自未签名的域。" + +msgid "Reset" +msgstr "复位" + +msgid "Reset Counters" +msgstr "复位计数器" + +msgid "Reset to defaults" +msgstr "恢复到出厂设置" + +msgid "Resolv and Hosts Files" +msgstr "HOSTS和解析文件" + +msgid "Resolve file" +msgstr "解析文件" + +msgid "Restart" +msgstr "重启" + +msgid "Restart Firewall" +msgstr "重启防火墙" + +msgid "Restore backup" +msgstr "恢复配置" + +msgid "Reveal/hide password" +msgstr "显示/隐藏 密码" + +msgid "Revert" +msgstr "放弃" + +msgid "Root" +msgstr "Root" + +msgid "Root directory for files served via TFTP" +msgstr "TFTP服务器的根目录" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "路由允许的IP" + +msgid "Route type" +msgstr "路由类型" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "下行接口的路由IPv6前缀" + +msgid "Router Advertisement-Service" +msgstr "路由器广告服务" + +msgid "Router Password" +msgstr "主机密码" + +msgid "Routes" +msgstr "路由表" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "路由表描述了数据包的可达路径。" + +msgid "Run a filesystem check before mounting the device" +msgstr "挂载设备前运行文件系统检查" + +msgid "Run filesystem check" +msgstr "文件系统检查" + +msgid "SHA256" +msgstr "SHA256" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "SIXXS仅支持TIC,对于使用IP协议41(RFC4213)的静态隧道,使用6in4" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "SNR" + +msgid "SSH Access" +msgstr "SSH访问" + +msgid "SSH server address" +msgstr "SSH服务器地址" + +msgid "SSH server port" +msgstr "SSH服务器端口" + +msgid "SSH username" +msgstr "SSH用户名" + +msgid "SSH-Keys" +msgstr "SSH-密钥" + +msgid "SSID" +msgstr "SSID" + +msgid "Save" +msgstr "保存" + +msgid "Save & Apply" +msgstr "保存&应用" + +msgid "Save & Apply" +msgstr "保存&应用" + +msgid "Scan" +msgstr "搜索" + +msgid "Scheduled Tasks" +msgstr "计划任务" + +msgid "Section added" +msgstr "添加的区域" + +msgid "Section removed" +msgstr "移除的区域" + +msgid "See \"mount\" manpage for details" +msgstr "详参 \"mount\" 联机帮助" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "定时发送LCP响应(秒),仅在结合了故障阈值时有效" + +msgid "Separate Clients" +msgstr "隔离客户端" + +msgid "Separate WDS" +msgstr "隔离WDS" + +msgid "Server Settings" +msgstr "服务器设置" + +msgid "Server password" +msgstr "服务器密码" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "服务器密码,如果用户名包含隧道ID则在此填写独立的密码" + +msgid "Server username" +msgstr "服务器用户名" + +msgid "Service Name" +msgstr "服务名" + +msgid "Service Type" +msgstr "服务类型" + +msgid "Services" +msgstr "服务" + +msgid "Set up Time Synchronization" +msgstr "设置时间同步" + +msgid "Setup DHCP Server" +msgstr "配置DHCP服务器" + +msgid "Severely Errored Seconds (SES)" +msgstr "严重误码秒(SES)" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "显示当前文件备份列表" + +msgid "Shutdown this interface" +msgstr "关闭此接口" + +msgid "Shutdown this network" +msgstr "关闭此网络" + +msgid "Signal" +msgstr "信号" + +msgid "Signal Attenuation (SATN)" +msgstr "信号衰减(SATN)" + +msgid "Signal:" +msgstr "信号:" + +msgid "Size" +msgstr "大小" + +msgid "Size (.ipk)" +msgstr "大小(.ipk)" + +msgid "Skip" +msgstr "跳过" + +msgid "Skip to content" +msgstr "跳到内容" + +msgid "Skip to navigation" +msgstr "跳转到导航" + +msgid "Slot time" +msgstr "时隙" + +msgid "Software" +msgstr "软件包" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "一些项目的值无效,无法保存!" + +msgid "Sorry, the object you requested was not found." +msgstr "对不起,请求的目标未找到。" + +msgid "Sorry, the server encountered an unexpected error." +msgstr "对不起,服务器遇到未知错误。" + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"抱歉,您的设备暂不支持Sysupgrade升级,需手动更新固件。请参考Wiki中关于此设备" +"的固件更新说明。" + +msgid "Sort" +msgstr "排序" + +msgid "Source" +msgstr "源地址" + +msgid "Source routing" +msgstr "源路由" + +msgid "Specifies the button state to handle" +msgstr "指定要处理的按键状态" + +msgid "Specifies the directory the device is attached to" +msgstr "指定设备的挂载目录" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "指定Dropbear的监听端口" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "指定假设主机已丢失的最大失败ARP请求数" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "指定假设主机已丢失的最大时间(秒)" + +msgid "Specify a TOS (Type of Service)." +msgstr "指定TOS(服务类型)。" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "为封装数据包设置TTL(生存时间),缺省值:64" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "设置MTU(最大传输单位),缺省值:1280 bytes" + +msgid "Specify the secret encryption key here." +msgstr "在此指定密钥。" + +# 关联了 启动项 和 接口>LAN>DHCP服务器>网址分配基址 +msgid "Start" +msgstr "开始" + +msgid "Start priority" +msgstr "启动优先级" + +msgid "Startup" +msgstr "启动项" + +msgid "Static IPv4 Routes" +msgstr "静态IPv4路由" + +msgid "Static IPv6 Routes" +msgstr "静态IPv6路由" + +msgid "Static Leases" +msgstr "静态地址分配" + +msgid "Static Routes" +msgstr "静态路由" + +msgid "Static WDS" +msgstr "静态WDS" + +msgid "Static address" +msgstr "静态地址" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"静态租约用于给DHCP客户端分配固定的IP地址和主机标识。只有指定的主机才能连接," +"并且接口须为非动态配置。" + +msgid "Status" +msgstr "状态" + +msgid "Stop" +msgstr "关闭" + +msgid "Strict order" +msgstr "严谨查序" + +msgid "Submit" +msgstr "提交" + +msgid "Suppress logging" +msgstr "不记录日志" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "不记录这些协议的常规操作日志。" + +msgid "Swap" +msgstr "交换区" + +msgid "Swap Entry" +msgstr "交换项目" + +msgid "Switch" +msgstr "交换机" + +msgid "Switch %q" +msgstr "交换机 %q" + +msgid "Switch %q (%s)" +msgstr "交换机 %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "交换机 %q 具有未知的拓扑结构 - VLAN设置可能不正确。" + +msgid "Switch VLAN" +msgstr "VLAN交换机" + +msgid "Switch protocol" +msgstr "切换协议" + +msgid "Sync with browser" +msgstr "同步浏览器时间" + +msgid "Synchronizing..." +msgstr "同步中..." + +msgid "System" +msgstr "系统" + +msgid "System Log" +msgstr "系统日志" + +msgid "System Properties" +msgstr "系统属性" + +msgid "System log buffer size" +msgstr "系统日志缓冲区大小" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "TFTP设置" + +msgid "TFTP server root" +msgstr "TFTP服务器根目录" + +msgid "TX" +msgstr "发送" + +msgid "TX Rate" +msgstr "发送速率" + +msgid "Table" +msgstr "表" + +msgid "Target" +msgstr "对象" + +msgid "Target network" +msgstr "目标网络" + +msgid "Terminate" +msgstr "关闭" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"设备配置区域可配置无线的硬件参数,比如信道、发射功率或发射天线(如果" +"此无线模块硬件支持多SSID,则全部SSID共用此设备配置)。接口配置区域则" +"可配置此网络的工作模式和加密等。" + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "软件包libiwinfo-lua未安装。必需安装此组件以配置无线!" + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "HE.net客户端更新设置已经被改变,您现在必须使用用户名代替用户ID/" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "远程隧道端的IPv4地址或完整域名。" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "运营商特定的IPv6前缀,通常以::为结尾" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"合法字符:A-Z, a-z, 0-9_" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "由于以下错误,配置文件无法被加载:" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "存储器或分区的设备节点,(例如:/dev/sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"用于格式化存储器的文件系统,(例如:ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "固件已上传,请注意核对文件大小和校验值!
刷新过程切勿断电!" + +msgid "The following changes have been committed" +msgstr "以下更改已提交" + +msgid "The following changes have been reverted" +msgstr "以下更改已放弃" + +msgid "The following rules are currently active on this system." +msgstr "系统中的活跃连接。" + +msgid "The given network name is not unique" +msgstr "给定的网络名重复" + +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "本机的硬件不支持多SSID,如果继续,现有配置将被替换。" + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "bit格式的IPv4前缀长度, 其余的用在IPv6地址." + +msgid "The length of the IPv6 prefix in bits" +msgstr "bit格式的IPv6前缀长度" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "所创建隧道的本地IPv4地址(可选)。" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"本设备可以划分为多个VLAN,并支持电脑间的直" +"接通讯。VLAN也常用于分割不同网段。默认通常" +"是一条上行端口连接ISP,其余端口为本地子网。" + +msgid "The selected protocol needs a device assigned" +msgstr "所选的协议需要分配设备" + +msgid "The submitted security token is invalid or already expired!" +msgstr "提交的安全令牌无效或已过期!" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "系统正在删除配置分区,完成后会自动重启。" + +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"正在刷新系统...
切勿关闭电源! DO NOT POWER OFF THE DEVICE!
等待数分" +"钟后即可尝试重新连接到路由。您可能需要更改计算机的IP地址以重新连接。" + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "隧道端点在NAT之后,默认为禁用,仅适用于AYIYA" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "不支持所上传的文件格式。请确认选择的文件无误。" + +msgid "There are no active leases." +msgstr "没有已分配的租约。" + +msgid "There are no pending changes to apply!" +msgstr "没有待生效的更改!" + +msgid "There are no pending changes to revert!" +msgstr "没有可放弃的更改!" + +msgid "There are no pending changes!" +msgstr "没有待生效的更改!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "尚未分配设备,请在“物理设置”选项卡中选择网络设备" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "尚未设置密码。请为root用户设置密码以保护主机并开启SSH。" + +msgid "This IPv4 address of the relay" +msgstr "中继的IPv4地址" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" +"此文件可能包含类似'server=/domain/1.2.3.4'或'server=1.2.3.4'的行,来解析特定" +"域名或指定上游DNS服务器。" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"系统升级时要保存的配置文件和目录的清单。目录/etc/config/内修改过的文件以及部" +"分其他配置会被自动保存。" + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "如果更新密钥没有设置的话,隧道的“更新密钥”或者账户密码必须填写。" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "启动脚本插入到'exit 0'之前即可随系统启动运行。" + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "隧道代理分配的本地终端地址,通常以:2结尾" + +msgid "" +"This is the only DHCP in the local network" +msgstr "这是内网中唯一的DHCP服务器" + +msgid "This is the plain username for logging into the account" +msgstr "登录账户时填写的用户名" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "这是隧道代理分配给你的路由前缀,供客户端使用" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "自定义系统Crontab中的计划任务。" + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "这通常是隧道代理所管理的最近的PoP的地址" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "系统中正在运行的进程和其状态信息。" + +msgid "This page allows the configuration of custom button actions" +msgstr "自定义按键动作。" + +msgid "This page gives an overview over currently active network connections." +msgstr "活跃的网络连接概况。" + +msgid "This section contains no values yet" +msgstr "尚无任何配置" + +msgid "Time Synchronization" +msgstr "时间同步" + +msgid "Time Synchronization is not configured yet." +msgstr "尚未配置时间同步" + +msgid "Timezone" +msgstr "时区" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "上传备份存档以恢复配置。" + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "可用数" + +msgid "Traceroute" +msgstr "Traceroute" + +msgid "Traffic" +msgstr "流量" + +msgid "Transfer" +msgstr "传输" + +msgid "Transmission Rate" +msgstr "传送速率" + +msgid "Transmit" +msgstr "传送" + +msgid "Transmit Power" +msgstr "无线电功率" + +msgid "Transmitter Antenna" +msgstr "传送天线" + +msgid "Trigger" +msgstr "触发" + +msgid "Trigger Mode" +msgstr "触发模式" + +msgid "Tunnel ID" +msgstr "隧道ID" + +msgid "Tunnel Interface" +msgstr "隧道接口" + +msgid "Tunnel Link" +msgstr "隧道链接" + +msgid "Tunnel broker protocol" +msgstr "隧道协议" + +msgid "Tunnel setup server" +msgstr "隧道配置服务器" + +msgid "Tunnel type" +msgstr "隧道类型" + +msgid "Turbo Mode" +msgstr "Turbo模式" + +msgid "Tx-Power" +msgstr "传输功率" + +msgid "Type" +msgstr "类型" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "仅UMTS(WCDMA)" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "USB设备" + +msgid "UUID" +msgstr "UUID" + +msgid "Unable to dispatch" +msgstr "无法调度" + +msgid "Unavailable Seconds (UAS)" +msgstr "不可用秒数(UAS)" + +msgid "Unknown" +msgstr "未知" + +msgid "Unknown Error, password not changed!" +msgstr "未知错误,密码未更改!" + +msgid "Unmanaged" +msgstr "不配置协议" + +msgid "Unmount" +msgstr "卸载分区" + +msgid "Unsaved Changes" +msgstr "未保存的配置" + +msgid "Unsupported protocol type." +msgstr "不支持的协议类型" + +msgid "Update lists" +msgstr "刷新列表" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "上传兼容的Sysupgrade固件以刷新当前系统。" + +msgid "Upload archive..." +msgstr "上传备份..." + +msgid "Uploaded File" +msgstr "上传的文件" + +msgid "Uptime" +msgstr "运行时间" + +msgid "Use /etc/ethers" +msgstr "使用/etc/ethers配置" + +msgid "Use DHCP gateway" +msgstr "使用DHCP网关" + +msgid "Use DNS servers advertised by peer" +msgstr "使用端局通告的DNS服务器" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "参考ISO/IEC 3166 alpha2国家代码。" + +msgid "Use MTU on tunnel interface" +msgstr "隧道接口的MTU" + +msgid "Use TTL on tunnel interface" +msgstr "隧道接口的TTL" + +msgid "Use as external overlay (/overlay)" +msgstr "作为外部Overlay使用(/overlay)" + +msgid "Use as root filesystem (/)" +msgstr "作为跟文件系统使用(/)" + +msgid "Use broadcast flag" +msgstr "使用广播标签" + +msgid "Use builtin IPv6-management" +msgstr "使用内置的IPv6管理" + +msgid "Use custom DNS servers" +msgstr "使用自定义的DNS服务器" + +msgid "Use default gateway" +msgstr "使用默认网关" + +msgid "Use gateway metric" +msgstr "使用网关跃点" + +msgid "Use routing table" +msgstr "使用路由表" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"使用添加来增加新的租约条目。使用MAC-地址鉴别主机,IPv4-" +"地址分配地址,主机名分配标识。" + +msgid "Used" +msgstr "已用" + +msgid "Used Key Slot" +msgstr "启用密码组" + +msgid "User certificate (PEM encoded)" +msgstr "客户证书(PEM加密的)" + +msgid "User key (PEM encoded)" +msgstr "客户Key(PEM加密的)" + +msgid "Username" +msgstr "用户名" + +msgid "VC-Mux" +msgstr "VC-Mux" + +msgid "VDSL" +msgstr "VDSL" + +msgid "VLANs on %q" +msgstr "%q 上的VLAN" + +msgid "VLANs on %q (%s)" +msgstr "%q (%s) 上的VLAN" + +msgid "VPN Local address" +msgstr "VPN本地地址" + +msgid "VPN Local port" +msgstr "VPN本地端口" + +msgid "VPN Server" +msgstr "VPN服务器" + +msgid "VPN Server port" +msgstr "VPN服务器端口" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "VPN服务器证书的SHA1哈希值" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "VPNC (CISCO 3000 和其他VPN)" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "请求DHCP时发送的Vendor Class" + +msgid "Verbose" +msgstr "详细" + +msgid "Verbose logging by aiccu daemon" +msgstr "aiccu守护程序详细日志" + +msgid "Verify" +msgstr "验证" + +msgid "Version" +msgstr "版本" + +msgid "WDS" +msgstr "WDS" + +msgid "WEP Open System" +msgstr "WEP开放认证" + +msgid "WEP Shared Key" +msgstr "WEP共享密钥" + +msgid "WEP passphrase" +msgstr "WEP密钥" + +msgid "WMM Mode" +msgstr "WMM多媒体加速" + +msgid "WPA passphrase" +msgstr "WPA密钥" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"WPA加密需要安装wpa_supplicant(客户端模式)或安装hostapd(接入点AP、点对点ad-hoc" +"模式)。" + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "在NTP同步之前等待时间,设置为0表示同步之前不等待(可选)" + +msgid "Waiting for changes to be applied..." +msgstr "正在应用更改..." + +msgid "Waiting for command to complete..." +msgstr "正在执行命令..." + +msgid "Waiting for device..." +msgstr "等待设备..." + +msgid "Warning" +msgstr "警告" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "警告:有一些未保存的配置将在重启后丢失!" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "是否通过隧道创建IPv6缺省路由" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "是否仅路由来自分发前缀的数据包" + +msgid "Width" +msgstr "频宽" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "无线" + +msgid "Wireless Adapter" +msgstr "无线适配器" + +msgid "Wireless Network" +msgstr "无线网络" + +msgid "Wireless Overview" +msgstr "无线概况" + +msgid "Wireless Security" +msgstr "无线安全" + +msgid "Wireless is disabled or not associated" +msgstr "未开启或未关联无线" + +msgid "Wireless is restarting..." +msgstr "重启无线中..." + +msgid "Wireless network is disabled" +msgstr "无线已禁用" + +msgid "Wireless network is enabled" +msgstr "无线网络开关" + +msgid "Wireless restarted" +msgstr "无线已重启" + +msgid "Wireless shut down" +msgstr "无线已关闭" + +msgid "Write received DNS requests to syslog" +msgstr "将收到的DNS请求写入系统日志" + +msgid "Write system log to file" +msgstr "将系统日志写入文件" + +msgid "XR Support" +msgstr "XR支持" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"启用或禁用已安装的启动脚本。更改在设备重启后生效。
警告:如果禁" +"用了必要的启动脚本,比如\"network\",可能会导致设备无法访问!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "LUCI的正常运行需要开启浏览器的Java Script支持。" + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" +"你的Internet Explorer已经老到无法正常显示这个页面了!请至少更新到IE7或者使用" +"诸如Firefox Opera Safari之类的浏览器。" + +msgid "any" +msgstr "任意" + +msgid "auto" +msgstr "自动" + +msgid "automatic" +msgstr "自动" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "桥接的" + +msgid "create:" +msgstr "创建:" + +msgid "creates a bridge over specified interface(s)" +msgstr "为指定接口创建桥接" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "禁用" + +msgid "disabled" +msgstr "已禁用" + +msgid "expired" +msgstr "过期时间" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "存放DHCP租约的文件" + +msgid "forward" +msgstr "转发" + +msgid "full-duplex" +msgstr "全双工" + +msgid "half-duplex" +msgstr "半双工" + +msgid "help" +msgstr "帮助" + +msgid "hidden" +msgstr "隐藏" + +msgid "hybrid mode" +msgstr "混合模式" + +msgid "if target is a network" +msgstr "如果对象是一个网络" + +msgid "input" +msgstr "输入" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "本地DNS解析文件" + +msgid "minimum 1280, maximum 1480" +msgstr "最小值1280,最大值1480" + +msgid "navigation Navigation" +msgstr "导航" + +msgid "no" +msgstr "" + +msgid "no link" +msgstr "未连接" + +msgid "none" +msgstr "无" + +msgid "not present" +msgstr "不存在" + +msgid "off" +msgstr "关" + +msgid "on" +msgstr "开" + +msgid "open" +msgstr "开放式" + +msgid "overlay" +msgstr "覆盖" + +msgid "relay mode" +msgstr "中继模式" + +msgid "routed" +msgstr "已路由" + +msgid "server mode" +msgstr "服务器模式" + +msgid "skiplink1 Skip to navigation" +msgstr "skiplink1 跳转到导航" + +msgid "skiplink2 Skip to content" +msgstr "skiplink2 跳到内容" + +msgid "stateful-only" +msgstr "有状态的" + +msgid "stateless" +msgstr "无状态的" + +msgid "stateless + stateful" +msgstr "有状态和无状态的" + +msgid "tagged" +msgstr "关联" + +msgid "unknown" +msgstr "未知" + +msgid "unlimited" +msgstr "无限制" + +msgid "unspecified" +msgstr "未指定" + +msgid "unspecified -or- create:" +msgstr "未指定或创建:" + +msgid "untagged" +msgstr "不关联" + +msgid "yes" +msgstr "是" + +msgid "« Back" +msgstr "« 后退" + +#~ msgid "An additional network will be created if you leave this checked." +#~ msgstr "如果选中此复选框,则会创建一个附加网络。" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "取消选中将会另外创建一个新网络,而不会覆盖当前网络设置" + +#~ msgid "Join Network: Settings" +#~ msgstr "加入网络:设置" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "端口 %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "端口 %d 在多个VLAN中均未关联!" + +#~ msgid "VLAN Interface" +#~ msgstr "VLAN接口" diff --git a/feeds/luci/modules/luci-base/po/zh-tw/base.po b/feeds/luci/modules/luci-base/po/zh-tw/base.po new file mode 100644 index 0000000..4acb190 --- /dev/null +++ b/feeds/luci/modules/luci-base/po/zh-tw/base.po @@ -0,0 +1,3742 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-05-21 10:34+0200\n" +"Last-Translator: omnistack \n" +"Language-Team: none\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "%s is untagged in multiple VLANs!" +msgstr "" + +msgid "(%d minute window, %d second interval)" +msgstr "(%d 分鐘訊息, %d 秒更新)" + +msgid "(%s available)" +msgstr "(%s 可用)" + +msgid "(empty)" +msgstr "(空白)" + +msgid "(no interfaces attached)" +msgstr "(未連接界面)" + +msgid "-- Additional Field --" +msgstr "-- 更多選項 --" + +msgid "-- Please choose --" +msgstr "-- 請選擇 --" + +msgid "-- custom --" +msgstr "-- 自訂 --" + +msgid "-- match by device --" +msgstr "" + +msgid "-- match by label --" +msgstr "" + +msgid "-- match by uuid --" +msgstr "" + +msgid "1 Minute Load:" +msgstr "1分鐘負載" + +msgid "15 Minute Load:" +msgstr "15分鐘負載" + +msgid "464XLAT (CLAT)" +msgstr "" + +msgid "5 Minute Load:" +msgstr "5分鐘負載" + +msgid "BSSID" +msgstr "BSSID" + +msgid "DNS query port" +msgstr "DNS 查詢通訊埠" + +msgid "DNS server port" +msgstr "DNS 伺服器通訊埠" + +msgid "" +"DNS servers will be queried in the " +"order of the resolvfile" +msgstr "將會按照指定的順序查詢DNS" + +msgid "ESSID" +msgstr "ESSID" + +msgid "IPv4-Address" +msgstr "IPv4-位置" + +msgid "IPv4-Gateway" +msgstr "IPv4-閘道" + +msgid "IPv4-Netmask" +msgstr "IPv4-遮罩" + +msgid "" +"IPv6-Address or Network " +"(CIDR)" +msgstr "" +"IPv6-位置或網路(CIDR)" + +msgid "IPv6-Gateway" +msgstr "IPv6-閘道" + +msgid "IPv6-Suffix (hex)" +msgstr "" + +msgid "LED Configuration" +msgstr "LED 設定" + +msgid "LED Name" +msgstr "LED 名稱" + +msgid "MAC-Address" +msgstr "MAC-位置" + +msgid "" +"Max. DHCP leases" +msgstr "" +"最大 DHCP 分配數量" + +msgid "" +"Max. EDNS0 packet size" +msgstr "" +"最大 EDNS0 封包大小" + +msgid "Max. concurrent queries" +msgstr "最大並發查詢數" + +msgid "%s - %s" +msgstr "%s - %s" + +msgid "A43C + J43 + A43" +msgstr "" + +msgid "A43C + J43 + A43 + V43" +msgstr "" + +msgid "ADSL" +msgstr "" + +msgid "AICCU (SIXXS)" +msgstr "" + +msgid "ANSI T1.413" +msgstr "" + +msgid "APN" +msgstr "APN" + +msgid "AR Support" +msgstr "AR支援" + +msgid "ARP retry threshold" +msgstr "ARP重試門檻" + +msgid "ATM (Asynchronous Transfer Mode)" +msgstr "" + +msgid "ATM Bridges" +msgstr "ATM橋接" + +msgid "ATM Virtual Channel Identifier (VCI)" +msgstr "ATM虛擬通道識別(VCI)" + +msgid "ATM Virtual Path Identifier (VPI)" +msgstr "ATM虛擬路徑識別(VPI)" + +msgid "" +"ATM bridges expose encapsulated ethernet in AAL5 connections as virtual " +"Linux network interfaces which can be used in conjunction with DHCP or PPP " +"to dial into the provider network." +msgstr "" +"ATM橋接是以AAL5協定封裝乙太網路如同虛擬Linux網路界面卡,用於連接DHCP或PPP來撥" +"號連接到網際網路。" + +msgid "ATM device number" +msgstr "ATM裝置號碼" + +msgid "ATU-C System Vendor ID" +msgstr "" + +msgid "AYIYA" +msgstr "" + +msgid "Access Concentrator" +msgstr "接入集線器" + +msgid "Access Point" +msgstr "存取點 (AP)" + +msgid "Action" +msgstr "動作" + +msgid "Actions" +msgstr "動作" + +msgid "Activate this network" +msgstr "啟用此網路" + +msgid "Active IPv4-Routes" +msgstr "啟用 IPv4-路由" + +msgid "Active IPv6-Routes" +msgstr "啟用 IPv6-路由" + +msgid "Active Connections" +msgstr "啟用連線" + +msgid "Active DHCP Leases" +msgstr "已分配的DHCP租用" + +msgid "Active DHCPv6 Leases" +msgstr "已分配的DHCPv6租用" + +msgid "Ad-Hoc" +msgstr "Ad-Hoc" + +msgid "Add" +msgstr "增加" + +msgid "Add local domain suffix to names served from hosts files" +msgstr "添加本地網域微碼到HOSTS檔案" + +msgid "Add new interface..." +msgstr "增加新界面" + +msgid "Additional Hosts files" +msgstr "額外的HOST檔案" + +msgid "Additional servers file" +msgstr "" + +msgid "Address" +msgstr "位置" + +msgid "Address to access local relay bridge" +msgstr "存取本地中繼橋接位置" + +msgid "Administration" +msgstr "管理" + +msgid "Advanced Settings" +msgstr "進階設定" + +msgid "Aggregate Transmit Power(ACTATP)" +msgstr "" + +msgid "Alert" +msgstr "警示" + +msgid "" +"Allocate IP addresses sequentially, starting from the lowest available " +"address" +msgstr "" + +msgid "Allocate IP sequentially" +msgstr "" + +msgid "Allow SSH password authentication" +msgstr "允許 SSH 密碼驗證" + +msgid "Allow all except listed" +msgstr "僅允許列表外" + +msgid "Allow listed only" +msgstr "僅允許列表內" + +msgid "Allow localhost" +msgstr "允許本機" + +msgid "Allow remote hosts to connect to local SSH forwarded ports" +msgstr "允許遠端主機連接到本機SSH轉送通訊埠" + +msgid "Allow root logins with password" +msgstr "允許root登入" + +msgid "Allow the root user to login with password" +msgstr "允許 root 使用者登入" + +msgid "" +"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services" +msgstr "允許127.0.0.0/8範圍內的上游回應,例如:RBL服務" + +msgid "Allowed IPs" +msgstr "" + +msgid "" +"Also see Tunneling Comparison on SIXXS" +msgstr "" + +msgid "Always announce default router" +msgstr "" + +msgid "Annex" +msgstr "" + +msgid "Annex A + L + M (all)" +msgstr "" + +msgid "Annex A G.992.1" +msgstr "" + +msgid "Annex A G.992.2" +msgstr "" + +msgid "Annex A G.992.3" +msgstr "" + +msgid "Annex A G.992.5" +msgstr "" + +msgid "Annex B (all)" +msgstr "" + +msgid "Annex B G.992.1" +msgstr "" + +msgid "Annex B G.992.3" +msgstr "" + +msgid "Annex B G.992.5" +msgstr "" + +msgid "Annex J (all)" +msgstr "" + +msgid "Annex L G.992.3 POTS 1" +msgstr "" + +msgid "Annex M (all)" +msgstr "" + +msgid "Annex M G.992.3" +msgstr "" + +msgid "Annex M G.992.5" +msgstr "" + +msgid "Announce as default router even if no public prefix is available." +msgstr "" + +msgid "Announced DNS domains" +msgstr "" + +msgid "Announced DNS servers" +msgstr "" + +msgid "Anonymous Identity" +msgstr "" + +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + +msgid "Antenna 1" +msgstr "天線 1" + +msgid "Antenna 2" +msgstr "天線 2" + +msgid "Antenna Configuration" +msgstr "天線設定" + +msgid "Any zone" +msgstr "任意區域" + +msgid "Apply" +msgstr "套用" + +msgid "Applying changes" +msgstr "正在套用變更" + +msgid "" +"Assign a part of given length of every public IPv6-prefix to this interface" +msgstr "" + +msgid "Assign interfaces..." +msgstr "分配界面..." + +msgid "" +"Assign prefix parts using this hexadecimal subprefix ID for this interface." +msgstr "" + +msgid "Associated Stations" +msgstr "已連接站點" + +msgid "Atheros 802.11%s Wireless Controller" +msgstr "Atheros 802.11%s 無線控制器" + +msgid "Auth Group" +msgstr "" + +msgid "AuthGroup" +msgstr "" + +msgid "Authentication" +msgstr "認證" + +msgid "Authentication Type" +msgstr "" + +msgid "Authoritative" +msgstr "授權" + +msgid "Authorization Required" +msgstr "需要授權" + +msgid "Auto Refresh" +msgstr "自動更新" + +msgid "Automatic" +msgstr "" + +msgid "Automatic Homenet (HNCP)" +msgstr "" + +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + +msgid "Available" +msgstr "可用" + +msgid "Available packages" +msgstr "可用軟體包" + +msgid "Average:" +msgstr "平均:" + +msgid "B43 + B43C" +msgstr "" + +msgid "B43 + B43C + V43" +msgstr "" + +msgid "BR / DMR / AFTR" +msgstr "" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Back" +msgstr "返回" + +msgid "Back to Overview" +msgstr "返回至總覽" + +msgid "Back to configuration" +msgstr "返回至設定" + +msgid "Back to overview" +msgstr "返回至總覽" + +msgid "Back to scan results" +msgstr "返回至掃描結果" + +msgid "Background Scan" +msgstr "背景搜尋" + +msgid "Backup / Flash Firmware" +msgstr "備份/升級韌體" + +msgid "Backup / Restore" +msgstr "備份/還原" + +msgid "Backup file list" +msgstr "備份檔列表" + +msgid "Bad address specified!" +msgstr "指定了錯誤的位置!" + +msgid "Band" +msgstr "" + +msgid "Behind NAT" +msgstr "" + +msgid "" +"Below is the determined list of files to backup. It consists of changed " +"configuration files marked by opkg, essential base files and the user " +"defined backup patterns." +msgstr "" +"下面是待備份的檔案清單。包含了更改的設定檔案、必要的基本檔案和使用者自訂的備" +"份檔案" + +msgid "Bind interface" +msgstr "" + +msgid "Bind only to specific interfaces rather than wildcard address." +msgstr "" + +msgid "Bind the tunnel to this interface (optional)." +msgstr "" + +msgid "Bitrate" +msgstr "傳輸速率" + +msgid "Bogus NX Domain Override" +msgstr "忽略NX網域解析" + +msgid "Bridge" +msgstr "橋接" + +msgid "Bridge interfaces" +msgstr "橋接介面" + +msgid "Bridge unit number" +msgstr "橋接單位號碼" + +msgid "Bring up on boot" +msgstr "開機自動執行" + +msgid "Broadcom 802.11%s Wireless Controller" +msgstr "Broadcom 802.11%s 無線控制器" + +msgid "Broadcom BCM%04x 802.11 Wireless Controller" +msgstr "Broadcom BCM%04x 802.11 無線控制器" + +msgid "Buffered" +msgstr "已緩衝" + +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + +msgid "Buttons" +msgstr "按鈕" + +msgid "CA certificate; if empty it will be saved after the first connection." +msgstr "" + +msgid "CPU usage (%)" +msgstr "CPU 使用率 (%)" + +msgid "Cancel" +msgstr "取消" + +msgid "Category" +msgstr "" + +msgid "Chain" +msgstr "鏈" + +msgid "Changes" +msgstr "待修改" + +msgid "Changes applied." +msgstr "修改已套用" + +msgid "Changes the administrator password for accessing the device" +msgstr "修改管理員密碼" + +msgid "Channel" +msgstr "頻道" + +msgid "Check" +msgstr "檢查" + +msgid "Check fileystems before mount" +msgstr "" + +msgid "Check this option to delete the existing networks from this radio." +msgstr "" + +msgid "Checksum" +msgstr "效驗碼" + +msgid "" +"Choose the firewall zone you want to assign to this interface. Select " +"unspecified to remove the interface from the associated zone or " +"fill out the create field to define a new zone and attach the " +"interface to it." +msgstr "" +"選擇你要指定給這介面的防火牆區. 撿選unspecified以便從指定區域除這個" +"介面或者填寫create欄以便定義附加這個介面到一個新的區域上." + +msgid "" +"Choose the network(s) you want to attach to this wireless interface or fill " +"out the create field to define a new network." +msgstr "" +"選擇你要附加到無線網路介面的多個網路或者填寫create 以便定義一個新的" +"網路." + +msgid "Cipher" +msgstr "暗號" + +msgid "Cisco UDP encapsulation" +msgstr "" + +msgid "" +"Click \"Generate archive\" to download a tar archive of the current " +"configuration files. To reset the firmware to its initial state, click " +"\"Perform reset\" (only possible with squashfs images)." +msgstr "" +"按下\"壓縮檔製作\"就能下載目前設定檔的tar格式的壓縮. 要重置回復出廠值,按下" +"\"執行還原\"(可能只對squashfs影像檔有效)" + +msgid "Client" +msgstr "用戶端" + +msgid "Client ID to send when requesting DHCP" +msgstr "當要求DHCP時要傳送的用戶識別碼ID" + +msgid "" +"Close inactive connection after the given amount of seconds, use 0 to " +"persist connection" +msgstr "幾秒後關閉閒置的連線, 打0代表永遠連線" + +msgid "Close list..." +msgstr "關閉清單中..." + +msgid "Collecting data..." +msgstr "收集資料中..." + +msgid "Command" +msgstr "指令" + +msgid "Common Configuration" +msgstr "一般設定" + +msgid "Compression" +msgstr "壓縮" + +msgid "Configuration" +msgstr "設定" + +msgid "Configuration applied." +msgstr "啟用設定" + +msgid "Configuration files will be kept." +msgstr "設定檔將被存檔" + +msgid "Confirmation" +msgstr "再確認" + +msgid "Connect" +msgstr "連線" + +msgid "Connected" +msgstr "已連線" + +msgid "Connection Limit" +msgstr "連線限制" + +msgid "Connection to server fails when TLS cannot be used" +msgstr "" + +msgid "Connections" +msgstr "連線數" + +msgid "Country" +msgstr "國別" + +msgid "Country Code" +msgstr "國別碼" + +msgid "Cover the following interface" +msgstr "覆蓋下列介面" + +msgid "Cover the following interfaces" +msgstr "覆蓋下列這些介面" + +msgid "Create / Assign firewall-zone" +msgstr "建立/指定防火牆作用區" + +msgid "Create Interface" +msgstr "建立介面" + +msgid "Create a bridge over multiple interfaces" +msgstr "在多個介面上建立橋接" + +msgid "Critical" +msgstr "緊急" + +msgid "Cron Log Level" +msgstr "Cron的日誌級別" + +msgid "Custom Interface" +msgstr "自訂介面" + +msgid "Custom delegated IPv6-prefix" +msgstr "" + +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" +"Customizes the behaviour of the device LEDs if possible." +msgstr "" +"如果可以的話,自定這個設備的動作 LEDs ." + +msgid "DHCP Leases" +msgstr "DHCP的釋放週期" + +msgid "DHCP Server" +msgstr "DHCP伺服器" + +msgid "DHCP and DNS" +msgstr "DHCP 和 DNS" + +msgid "DHCP client" +msgstr "DHCP用戶端" + +msgid "DHCP-Options" +msgstr "DHCP選項" + +msgid "DHCPv6 Leases" +msgstr "DHCPv6版釋放時間週期" + +msgid "DHCPv6 client" +msgstr "" + +msgid "DHCPv6-Mode" +msgstr "" + +msgid "DHCPv6-Service" +msgstr "" + +msgid "DNS" +msgstr "網域名稱伺服器" + +msgid "DNS forwardings" +msgstr "DNS封包轉發" + +msgid "DNS-Label / FQDN" +msgstr "" + +msgid "DNSSEC" +msgstr "" + +msgid "DNSSEC check unsigned" +msgstr "" + +msgid "DPD Idle Timeout" +msgstr "" + +msgid "DS-Lite AFTR address" +msgstr "" + +msgid "DSL" +msgstr "" + +msgid "DSL Status" +msgstr "" + +msgid "DSL line mode" +msgstr "" + +msgid "DUID" +msgstr "DHCP獨立式別碼DUID " + +msgid "Data Rate" +msgstr "" + +msgid "Debug" +msgstr "除錯" + +msgid "Default %d" +msgstr "預設 %d" + +msgid "Default gateway" +msgstr "預設匝道器" + +msgid "Default is stateless + stateful" +msgstr "" + +msgid "Default route" +msgstr "" + +msgid "Default state" +msgstr "預設狀態" + +msgid "Define a name for this network." +msgstr "自訂這個網路名稱" + +msgid "" +"Define additional DHCP options, for example " +"\"6,192.168.2.1,192.168.2.2\" which advertises different DNS " +"servers to clients." +msgstr "" +"定義額外的DHCP選項,例如\"6,192.168.2.1,192.168.2.2\"將會通告不同" +"的DNS伺服器到客戶端." + +msgid "Delete" +msgstr "刪除" + +msgid "Delete this network" +msgstr "刪除這個網路" + +msgid "Description" +msgstr "描述" + +msgid "Design" +msgstr "設計規劃" + +msgid "Destination" +msgstr "目的地" + +msgid "Device" +msgstr "設備" + +msgid "Device Configuration" +msgstr "設定設備" + +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + +msgid "Diagnostics" +msgstr "診斷" + +msgid "Dial number" +msgstr "" + +msgid "Directory" +msgstr "目錄" + +msgid "Disable" +msgstr "關閉" + +msgid "" +"Disable DHCP for " +"this interface." +msgstr "" +" 對這介面關閉 DHCP" + +msgid "Disable DNS setup" +msgstr "關閉DNS設置" + +msgid "Disable Encryption" +msgstr "" + +msgid "Disable HW-Beacon timer" +msgstr "關閉硬體燈號計時器" + +msgid "Disabled" +msgstr "關閉" + +msgid "Discard upstream RFC1918 responses" +msgstr "丟棄上游RFC1918 虛擬IP網路的回應" + +msgid "Displaying only packages containing" +msgstr "僅顯示內含的軟體" + +msgid "Distance Optimization" +msgstr "最佳化距離" + +msgid "Distance to farthest network member in meters." +msgstr "到最遠的網路距離以米表示." + +msgid "Distribution feeds" +msgstr "" + +msgid "Diversity" +msgstr "差異" + +msgid "" +"Dnsmasq is a combined DHCP-Server and DNS-" +"Forwarder for NAT " +"firewalls" +msgstr "" +" Dnsmasq 是組合DHCP-伺服器 和 DNS-轉發給 NAT 防火牆用" + +msgid "Do not cache negative replies, e.g. for not existing domains" +msgstr "不快取拒絕的回應,例如.不存在的網域" + +msgid "Do not forward requests that cannot be answered by public name servers" +msgstr "對不被公用名稱伺服器回應的請求不轉發" + +msgid "Do not forward reverse lookups for local networks" +msgstr "對本地網域不轉發反解析鎖定" + +msgid "Do not send probe responses" +msgstr "不傳送探測回應" + +msgid "Domain required" +msgstr "網域必要的" + +msgid "Domain whitelist" +msgstr "網域白名單" + +msgid "Don't Fragment" +msgstr "" + +msgid "" +"Don't forward DNS-Requests without " +"DNS-Name" +msgstr "" +"若沒 DNS-名稱的話,不要轉發 DNS-請求" + +msgid "Download and install package" +msgstr "下載並安裝軟體包" + +msgid "Download backup" +msgstr "下載備份檔" + +msgid "Dropbear Instance" +msgstr "Dropbear SSH例子" + +msgid "" +"Dropbear offers SSH network shell access " +"and an integrated SCP server" +msgstr "" +"Dropbear 提供 SSH 網路shell命令存取和一個" +"整合的 SCP 伺服器" + +msgid "Dual-Stack Lite (RFC6333)" +msgstr "" + +msgid "Dynamic DHCP" +msgstr "動態 DHCP" + +msgid "Dynamic tunnel" +msgstr "動態隧道" + +msgid "" +"Dynamically allocate DHCP addresses for clients. If disabled, only clients " +"having static leases will be served." +msgstr "幫用戶端動態發配DHCP位址. 假如關閉的話,僅有有靜態位址的用戶端能被服務" + +msgid "EA-bits length" +msgstr "" + +msgid "EAP-Method" +msgstr "EAP協定驗證方式" + +msgid "Edit" +msgstr "編輯" + +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + +msgid "Edit this interface" +msgstr "修改這個介面" + +msgid "Edit this network" +msgstr "修改這個網路" + +msgid "Emergency" +msgstr "緊急" + +msgid "Enable" +msgstr "啟用" + +msgid "Enable STP" +msgstr "啟用 STP" + +msgid "Enable HE.net dynamic endpoint update" +msgstr "啟用HE.net服務代管動態更新" + +msgid "Enable IPv6 negotiation" +msgstr "" + +msgid "Enable IPv6 negotiation on the PPP link" +msgstr "啟用PPP連結上的IPv6交涉" + +msgid "Enable Jumbo Frame passthrough" +msgstr "啟用超大訊框透穿" + +msgid "Enable NTP client" +msgstr "起用NTP用戶功能" + +msgid "Enable Single DES" +msgstr "" + +msgid "Enable TFTP server" +msgstr "啟用TFTP伺服器" + +msgid "Enable VLAN functionality" +msgstr "啟用VLAN功能" + +msgid "Enable WPS pushbutton, requires WPA(2)-PSK" +msgstr "" + +msgid "Enable learning and aging" +msgstr "啟用智慧學習功能" + +msgid "Enable mirroring of incoming packets" +msgstr "" + +msgid "Enable mirroring of outgoing packets" +msgstr "" + +msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets." +msgstr "" + +msgid "Enable this mount" +msgstr "啟用掛載點" + +msgid "Enable this swap" +msgstr "啟用swap功能" + +msgid "Enable/Disable" +msgstr "啟用/關閉" + +msgid "Enabled" +msgstr "啟用" + +msgid "Enables the Spanning Tree Protocol on this bridge" +msgstr "在橋接器上啟用802.1d Spanning Tree協定" + +msgid "Encapsulation mode" +msgstr "封裝模式" + +msgid "Encryption" +msgstr "加密" + +msgid "Endpoint Host" +msgstr "" + +msgid "Endpoint Port" +msgstr "" + +msgid "Erasing..." +msgstr "刪除中..." + +msgid "Error" +msgstr "錯誤" + +msgid "Errored seconds (ES)" +msgstr "" + +msgid "Ethernet Adapter" +msgstr "乙太網路卡" + +msgid "Ethernet Switch" +msgstr "乙太交換器" + +msgid "Exclude interfaces" +msgstr "" + +msgid "Expand hosts" +msgstr "延伸主機" + +msgid "Expires" +msgstr "過期" + +#, fuzzy +msgid "" +"Expiry time of leased addresses, minimum is 2 minutes (2m)." +msgstr "釋放位址的過期週期,最少兩分鐘 (2m)." + +msgid "External" +msgstr "" + +msgid "External system log server" +msgstr "外部系統日誌伺服器" + +msgid "External system log server port" +msgstr "外部系統日誌伺服器埠號" + +msgid "External system log server protocol" +msgstr "" + +msgid "Extra SSH command options" +msgstr "" + +msgid "Fast Frames" +msgstr "快速迅框群" + +msgid "File" +msgstr "檔案" + +msgid "Filename of the boot image advertised to clients" +msgstr "開機影像檔通知給用戶端" + +msgid "Filesystem" +msgstr "檔案系統" + +msgid "Filter" +msgstr "過濾器" + +msgid "Filter private" +msgstr "私人過濾器" + +msgid "Filter useless" +msgstr "無用過濾器" + +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + +msgid "Find and join network" +msgstr "搜尋並加入網路" + +msgid "Find package" +msgstr "搜尋軟體包" + +msgid "Finish" +msgstr "完成" + +msgid "Firewall" +msgstr "防火牆" + +msgid "Firewall Settings" +msgstr "防火牆設定" + +msgid "Firewall Status" +msgstr "防火牆狀況" + +msgid "Firmware File" +msgstr "" + +msgid "Firmware Version" +msgstr "防火牆版本" + +msgid "Fixed source port for outbound DNS queries" +msgstr "外發DNS請求的固定埠號" + +msgid "Flash Firmware" +msgstr "韌體更新" + +msgid "Flash image..." +msgstr "更新映像檔中..." + +msgid "Flash new firmware image" +msgstr "更新新版韌體映像檔" + +msgid "Flash operations" +msgstr "執行更新" + +msgid "Flashing..." +msgstr "更新中..." + +msgid "Force" +msgstr "強制" + +msgid "Force CCMP (AES)" +msgstr "強制CCMP (AES)加密" + +msgid "Force DHCP on this network even if another server is detected." +msgstr "在網路上即使偵測到其它伺服器也強制採用DHCP的設定" + +msgid "Force TKIP" +msgstr "強制TKIP加密" + +msgid "Force TKIP and CCMP (AES)" +msgstr "強制TKIP+CCMP (AES)加密" + +msgid "Force use of NAT-T" +msgstr "" + +msgid "Form token mismatch" +msgstr "" + +msgid "Forward DHCP traffic" +msgstr "轉發DHCP流量" + +msgid "Forward Error Correction Seconds (FECS)" +msgstr "" + +msgid "Forward broadcast traffic" +msgstr "轉發廣播流量" + +msgid "Forwarding mode" +msgstr "轉發模式" + +msgid "Fragmentation Threshold" +msgstr "分片閥值" + +msgid "Frame Bursting" +msgstr "訊框爆速" + +msgid "Free" +msgstr "空閒" + +msgid "Free space" +msgstr "剩餘空間" + +msgid "" +"Further information about WireGuard interfaces and peers at wireguard.io." +msgstr "" + +msgid "GHz" +msgstr "GHz" + +msgid "GPRS only" +msgstr "僅用GPRS" + +msgid "Gateway" +msgstr "匝道器" + +msgid "Gateway ports" +msgstr "匝道器埠號" + +msgid "General Settings" +msgstr "一般設定" + +msgid "General Setup" +msgstr "一般設置" + +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + +msgid "Generate archive" +msgstr "製作壓縮檔" + +msgid "Generic 802.11%s Wireless Controller" +msgstr "通用 802.11%s 無線控制器" + +msgid "Given password confirmation did not match, password not changed!" +msgstr "鍵入的密碼不吻合,密碼將不變更" + +msgid "Global Settings" +msgstr "" + +msgid "Global network options" +msgstr "" + +msgid "Go to password configuration..." +msgstr "到密碼設定頁" + +msgid "Go to relevant configuration page" +msgstr "到相應設定頁" + +msgid "Group Password" +msgstr "" + +msgid "Guest" +msgstr "" + +msgid "HE.net password" +msgstr " HE.net密碼" + +msgid "HE.net username" +msgstr "" + +msgid "HT mode (802.11n)" +msgstr "" + +msgid "Handler" +msgstr "多執行緒" + +msgid "Hang Up" +msgstr "斷線" + +msgid "Header Error Code Errors (HEC)" +msgstr "" + +msgid "Heartbeat" +msgstr "" + +msgid "" +"Here you can configure the basic aspects of your device like its hostname or " +"the timezone." +msgstr "在這設置基本樣貌類似像主機名稱或者時區..等" + +msgid "" +"Here you can paste public SSH-Keys (one per line) for SSH public-key " +"authentication." +msgstr "在這裡貼上公用SSH-Keys (每行一個)以便驗證" + +msgid "Hermes 802.11b Wireless Controller" +msgstr "Hermes 802.11b 無線網路控制器" + +msgid "Hide ESSID" +msgstr "隱藏 ESSID" + +msgid "Host" +msgstr "" + +msgid "Host entries" +msgstr "主機項目" + +msgid "Host expiry timeout" +msgstr "過期主機" + +msgid "Host-IP or Network" +msgstr "主機-IP 或網路" + +msgid "Hostname" +msgstr "主機名稱" + +msgid "Hostname to send when requesting DHCP" +msgstr "當請求DHCP服務時傳送的主機名稱" + +msgid "Hostnames" +msgstr "主機名稱" + +msgid "Hybrid" +msgstr "" + +msgid "IKE DH Group" +msgstr "" + +msgid "IP address" +msgstr "IP位址" + +msgid "IPv4" +msgstr "IPv4版" + +msgid "IPv4 Firewall" +msgstr "IPv4防火牆" + +msgid "IPv4 WAN Status" +msgstr "IPv4寬頻連線狀態" + +msgid "IPv4 address" +msgstr "IPv4位址" + +msgid "IPv4 and IPv6" +msgstr "IPv4和IPv6" + +msgid "IPv4 assignment length" +msgstr "" + +msgid "IPv4 broadcast" +msgstr "IPv4廣播" + +msgid "IPv4 gateway" +msgstr "IPv4匝道器" + +msgid "IPv4 netmask" +msgstr "IPv4網路遮罩" + +msgid "IPv4 only" +msgstr "僅用IPv4" + +msgid "IPv4 prefix" +msgstr "" + +msgid "IPv4 prefix length" +msgstr "IPv4前綴長度" + +msgid "IPv4-Address" +msgstr "IPv4-位址" + +msgid "IPv4-in-IPv4 (RFC2003)" +msgstr "" + +msgid "IPv6" +msgstr "IPv6版" + +msgid "IPv6 Firewall" +msgstr "IPv6防火牆" + +msgid "IPv6 Neighbours" +msgstr "" + +msgid "IPv6 Settings" +msgstr "" + +msgid "IPv6 ULA-Prefix" +msgstr "" + +msgid "IPv6 WAN Status" +msgstr "IPv6寬頻連線狀態" + +msgid "IPv6 address" +msgstr "IPv6位址" + +msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgstr "" + +msgid "IPv6 assignment hint" +msgstr "" + +msgid "IPv6 assignment length" +msgstr "" + +msgid "IPv6 gateway" +msgstr "IPv6匝道器" + +msgid "IPv6 only" +msgstr "僅用IPv6" + +msgid "IPv6 prefix" +msgstr "IPv6字首" + +msgid "IPv6 prefix length" +msgstr "IPv6字首長度" + +msgid "IPv6 routed prefix" +msgstr "" + +msgid "IPv6-Address" +msgstr "IPv6-位址" + +msgid "IPv6-in-IPv4 (RFC4213)" +msgstr "IPv6包覆在IPv4內(RFC4213)" + +msgid "IPv6-over-IPv4 (6rd)" +msgstr "IPv6凌駕IPv4外(第6版)" + +msgid "IPv6-over-IPv4 (6to4)" +msgstr "IPv6凌駕IPv4外(6轉4)" + +msgid "Identity" +msgstr "特性" + +msgid "If checked, 1DES is enaled" +msgstr "" + +msgid "If checked, encryption is disabled" +msgstr "" + +msgid "" +"If specified, mount the device by its UUID instead of a fixed device node" +msgstr "假若指定的話, 掛載設備的UUID獨立設備識別碼取代固定的設備節點" + +msgid "" +"If specified, mount the device by the partition label instead of a fixed " +"device node" +msgstr "假若指定的話, 掛載設備的分割標籤取代固定的設備節點" + +msgid "If unchecked, no default route is configured" +msgstr "如果沒打勾點選, 將不會設置預設路由" + +msgid "If unchecked, the advertised DNS server addresses are ignored" +msgstr "如果沒打勾點選, 公告的DNS伺服器位址將被忽視" + +msgid "" +"If your physical memory is insufficient unused data can be temporarily " +"swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very " +"slow process as the swap-device cannot be accessed with the high datarates " +"of the RAM." +msgstr "" +"如果你的物理內存不足時,未使用的數據可以是暫時交換到導致更高的交換設備量的可用" +"RAM內.請注意,交換數據是一個非常" +"緩慢的過程,作為交換裝置不能用高數據速率訪問該RAM" + +msgid "Ignore /etc/hosts" +msgstr "" + +msgid "Ignore interface" +msgstr "被忽視的介面" + +msgid "Ignore resolve file" +msgstr "被忽視的解析檔" + +msgid "Image" +msgstr "映像檔" + +msgid "In" +msgstr "輸入" + +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + +msgid "Inactivity timeout" +msgstr "閒置過期" + +msgid "Inbound:" +msgstr "輸入" + +msgid "Info" +msgstr "訊息" + +msgid "Initscript" +msgstr "初始化腳本" + +msgid "Initscripts" +msgstr "初始化腳本" + +msgid "Install" +msgstr "安裝" + +msgid "Install iputils-traceroute6 for IPv6 traceroute" +msgstr "" + +msgid "Install package %q" +msgstr "安裝軟體包 %q" + +msgid "Install protocol extensions..." +msgstr "安裝延伸協定中..." + +msgid "Installed packages" +msgstr "安裝軟體包" + +msgid "Interface" +msgstr "介面" + +msgid "Interface Configuration" +msgstr "介面設定" + +msgid "Interface Overview" +msgstr "介面預覽" + +msgid "Interface is reconnecting..." +msgstr "介面重連" + +msgid "Interface is shutting down..." +msgstr "介面正在關閉中..." + +msgid "Interface name" +msgstr "" + +msgid "Interface not present or not connected yet." +msgstr "介面尚未出線或者還沒連上" + +msgid "Interface reconnected" +msgstr "介面已重連" + +msgid "Interface shut down" +msgstr "介面關閉" + +msgid "Interfaces" +msgstr "介面" + +msgid "Internal" +msgstr "" + +msgid "Internal Server Error" +msgstr "內部伺服器發生錯誤" + +msgid "Invalid" +msgstr "無效" + +msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed." +msgstr "輸入的VLAN ID無效僅有介於 %d 和 %d的被允許" + +msgid "Invalid VLAN ID given! Only unique IDs are allowed" +msgstr "打入的是不正確的VLAN ID!僅有獨一無二的IDs被允許" + +msgid "Invalid username and/or password! Please try again." +msgstr "不正確的用戶名稱和/或者密碼!請再試一次." + +#, fuzzy +msgid "" +"It appears that you are trying to flash an image that does not fit into the " +"flash memory, please verify the image file!" +msgstr "它顯示你正嘗試更新不適用於這個flash記憶體的映像檔,請檢查確認這個映像檔" + +msgid "Java Script required!" +msgstr "需要Java腳本" + +msgid "Join Network" +msgstr "加入網路" + +msgid "Join Network: Wireless Scan" +msgstr "加入網路:無線網路掃描" + +msgid "Joining Network: %q" +msgstr "" + +msgid "Keep settings" +msgstr "保持設定值" + +msgid "Kernel Log" +msgstr "核心日誌" + +msgid "Kernel Version" +msgstr "核心版本" + +msgid "Key" +msgstr "鑰匙" + +msgid "Key #%d" +msgstr "鑰匙 #%d" + +msgid "Kill" +msgstr "刪除" + +msgid "L2TP" +msgstr "L2TP" + +msgid "L2TP Server" +msgstr "L2TP伺服器" + +msgid "LCP echo failure threshold" +msgstr "LCP協定呼叫失敗次數門檻" + +msgid "LCP echo interval" +msgstr "LCP協定呼叫間隔" + +msgid "LLC" +msgstr "LLC邏輯鏈結控制層" + +msgid "Label" +msgstr "標籤" + +msgid "Language" +msgstr "語言" + +msgid "Language and Style" +msgstr "語言和風格" + +msgid "Latency" +msgstr "" + +msgid "Leaf" +msgstr "" + +msgid "Lease time" +msgstr "" + +msgid "Lease validity time" +msgstr "租賃有效時間" + +msgid "Leasefile" +msgstr "租賃檔案" + +msgid "Leasetime" +msgstr "租賃時間" + +msgid "Leasetime remaining" +msgstr "租賃保留時間" + +msgid "Leave empty to autodetect" +msgstr "保持空白以便自動偵測" + +msgid "Leave empty to use the current WAN address" +msgstr "保持空白以便採用現今的寬頻位址" + +msgid "Legend:" +msgstr "圖例:" + +msgid "Limit" +msgstr "限制" + +msgid "Limit DNS service to subnets interfaces on which we are serving DNS." +msgstr "" + +msgid "Limit listening to these interfaces, and loopback." +msgstr "" + +msgid "Line Attenuation (LATN)" +msgstr "" + +msgid "Line Mode" +msgstr "" + +msgid "Line State" +msgstr "" + +msgid "Line Uptime" +msgstr "" + +msgid "Link On" +msgstr "鏈接" + +msgid "" +"List of DNS servers to forward " +"requests to" +msgstr "列出 DNS 伺服器以便轉發請求" + +msgid "List of SSH key files for auth" +msgstr "" + +msgid "List of domains to allow RFC1918 responses for" +msgstr "列出允許RFC1918文件虛擬IP回應的網域" + +msgid "List of hosts that supply bogus NX domain results" +msgstr "列出供應偽裝NX網域成果的主機群" + +msgid "Listen Interfaces" +msgstr "" + +msgid "Listen Port" +msgstr "" + +msgid "Listen only on the given interface or, if unspecified, on all" +msgstr "只許在給予的介面上聆聽, 如果未指定, 全都允許" + +msgid "Listening port for inbound DNS queries" +msgstr "進入的DNS請求聆聽埠" + +msgid "Load" +msgstr "掛載" + +msgid "Load Average" +msgstr "平均掛載" + +msgid "Loading" +msgstr "掛載中" + +msgid "Local IP address to assign" +msgstr "" + +msgid "Local IPv4 address" +msgstr "本地IPv4位址" + +msgid "Local IPv6 address" +msgstr "本地IPv6位址" + +msgid "Local Service Only" +msgstr "" + +msgid "Local Startup" +msgstr "本地啟動" + +msgid "Local Time" +msgstr "本地時區" + +msgid "Local domain" +msgstr "本地網域" + +#, fuzzy +msgid "" +"Local domain specification. Names matching this domain are never forwarded " +"and are resolved from DHCP or hosts files only" +msgstr "本地網域格式. 僅限符合從未從DHCP或hosts檔轉發和解析的網域" + +msgid "Local domain suffix appended to DHCP names and hosts file entries" +msgstr "本地網域後綴附加倒DHCP名稱和hosts檔項目" + +msgid "Local server" +msgstr "本地伺服器" + +msgid "" +"Localise hostname depending on the requesting subnet if multiple IPs are " +"available" +msgstr "若有多個IP可用, 本地化主機名稱端看請求的子網路而言." + +msgid "Localise queries" +msgstr "本地化網路請求" + +msgid "Locked to channel %s used by: %s" +msgstr "" + +msgid "Log output level" +msgstr "日誌輸出層級" + +msgid "Log queries" +msgstr "日誌查詢" + +msgid "Logging" +msgstr "日誌紀錄中" + +msgid "Login" +msgstr "登入" + +msgid "Logout" +msgstr "登出" + +msgid "Loss of Signal Seconds (LOSS)" +msgstr "" + +msgid "Lowest leased address as offset from the network address." +msgstr "最低的釋放位址從這網路位址的偏移計算" + +msgid "MAC-Address" +msgstr "MAC-位址" + +msgid "MAC-Address Filter" +msgstr "MAC-位址過濾" + +msgid "MAC-Filter" +msgstr "MAC-過濾" + +msgid "MAC-List" +msgstr "MAC-清單" + +msgid "MAP / LW4over6" +msgstr "" + +msgid "MB/s" +msgstr "MB/s" + +msgid "MD5" +msgstr "" + +msgid "MHz" +msgstr "MHz" + +msgid "MTU" +msgstr "最大傳輸單位MTU" + +msgid "" +"Make sure to clone the root filesystem using something like the commands " +"below:" +msgstr "" + +msgid "Manual" +msgstr "" + +msgid "Max. Attainable Data Rate (ATTNDR)" +msgstr "" + +msgid "Maximum Rate" +msgstr "最快速度" + +msgid "Maximum allowed number of active DHCP leases" +msgstr "允許啟用DHCP釋放的最大數量" + +msgid "Maximum allowed number of concurrent DNS queries" +msgstr "允許同時齊發的DNS請求的最大數量" + +msgid "Maximum allowed size of EDNS.0 UDP packets" +msgstr "允許EDNS.0 協定的UDP封包最大數量" + +msgid "Maximum amount of seconds to wait for the modem to become ready" +msgstr "等待數據機待命的最大秒數" + +msgid "Maximum hold time" +msgstr "可持有最長時間" + +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + +msgid "Maximum number of leased addresses." +msgstr "釋放出的位址群最大數量" + +msgid "Mbit/s" +msgstr "Mbit/s" + +msgid "Memory" +msgstr "記憶體" + +msgid "Memory usage (%)" +msgstr "記憶體使用 (%)" + +msgid "Metric" +msgstr "公測單位" + +msgid "Minimum Rate" +msgstr "最低速度" + +msgid "Minimum hold time" +msgstr "可持有的最低時間" + +msgid "Mirror monitor port" +msgstr "" + +msgid "Mirror source port" +msgstr "" + +msgid "Missing protocol extension for proto %q" +msgstr "協定 %q 漏失的延伸協定" + +msgid "Mode" +msgstr "模式" + +msgid "Model" +msgstr "" + +msgid "Modem device" +msgstr "數據機設備" + +msgid "Modem init timeout" +msgstr "數據機初始化終結時間" + +msgid "Monitor" +msgstr "監視" + +msgid "Mount Entry" +msgstr "掛載項目" + +msgid "Mount Point" +msgstr "掛載點" + +msgid "Mount Points" +msgstr "掛載各點" + +msgid "Mount Points - Mount Entry" +msgstr "掛載各點 - 掛載項目" + +msgid "Mount Points - Swap Entry" +msgstr "掛載各點 - 交換項目" + +msgid "" +"Mount Points define at which point a memory device will be attached to the " +"filesystem" +msgstr "掛載各點定義所指定到記憶體設備將會被附載到檔案系統上" + +msgid "Mount filesystems not specifically configured" +msgstr "" + +msgid "Mount options" +msgstr "掛載選項" + +msgid "Mount point" +msgstr "掛載點" + +msgid "Mount swap not specifically configured" +msgstr "" + +msgid "Mounted file systems" +msgstr "已掛載檔案系統" + +msgid "Move down" +msgstr "往下移" + +msgid "Move up" +msgstr "往上移" + +msgid "Multicast Rate" +msgstr "多點群播速度" + +msgid "Multicast address" +msgstr "多點群播位址" + +msgid "NAS ID" +msgstr " 網路附存伺服器ID" + +msgid "NAT-T Mode" +msgstr "" + +msgid "NAT64 Prefix" +msgstr "" + +msgid "NDP-Proxy" +msgstr "" + +msgid "NT Domain" +msgstr "" + +msgid "NTP server candidates" +msgstr "NTP伺服器備選" + +msgid "NTP sync time-out" +msgstr "" + +msgid "Name" +msgstr "名稱" + +msgid "Name of the new interface" +msgstr "新介面的名稱" + +msgid "Name of the new network" +msgstr "新網路的名稱" + +msgid "Navigation" +msgstr "導覽" + +msgid "Netmask" +msgstr "網路遮罩" + +msgid "Network" +msgstr "網路" + +msgid "Network Utilities" +msgstr "網路多項工具" + +msgid "Network boot image" +msgstr "網路開機映像檔" + +msgid "Network without interfaces." +msgstr "尚無任何介面的網路." + +msgid "Next »" +msgstr "下一個 »" + +msgid "No DHCP Server configured for this interface" +msgstr "在這個介面尚無DHCP伺服器" + +msgid "No NAT-T" +msgstr "" + +msgid "No chains in this table" +msgstr "尚未綁在這個表格中" + +msgid "No files found" +msgstr "尚未發現任何檔案" + +msgid "No information available" +msgstr "尚無可運用資訊" + +msgid "No negative cache" +msgstr "尚無拒絕的快取" + +msgid "No network configured on this device" +msgstr "尚無網路設定在這個介面上" + +msgid "No network name specified" +msgstr "尚未指定網路名稱" + +msgid "No package lists available" +msgstr "尚無列出的軟體包可運用" + +msgid "No password set!" +msgstr "尚未設定密碼!" + +msgid "No rules in this chain" +msgstr "尚無規則在這個鏈接上" + +msgid "No zone assigned" +msgstr "尚未指定區碼" + +msgid "Noise" +msgstr "噪音比" + +msgid "Noise Margin (SNR)" +msgstr "" + +msgid "Noise:" +msgstr "噪音比:" + +msgid "Non Pre-emtive CRC errors (CRC_P)" +msgstr "" + +msgid "Non-wildcard" +msgstr "" + +msgid "None" +msgstr "無" + +msgid "Normal" +msgstr "正常" + +msgid "Not Found" +msgstr "尚未發現" + +msgid "Not associated" +msgstr "尚未關聯" + +msgid "Not connected" +msgstr "尚未連線" + +msgid "Note: Configuration files will be erased." +msgstr "注意:設定檔將被刪除." + +msgid "Note: interface name length" +msgstr "" + +msgid "Notice" +msgstr "通知" + +msgid "Nslookup" +msgstr "DNS偵錯Nslookup" + +msgid "OK" +msgstr "行" + +msgid "OPKG-Configuration" +msgstr "OPKG-設定值" + +msgid "Obfuscated Group Password" +msgstr "" + +msgid "Obfuscated Password" +msgstr "" + +msgid "Off-State Delay" +msgstr "關閉狀態延遲" + +msgid "" +"On this page you can configure the network interfaces. You can bridge " +"several interfaces by ticking the \"bridge interfaces\" field and enter the " +"names of several network interfaces separated by spaces. You can also use " +"VLAN notation " +"INTERFACE.VLANNR (e.g.: " +"eth0.1)." +msgstr "" +"在這個頁面你可以設定網路介面. 只要點下這個\"介面群橋接\"而且打入數個以空格分" +"開網路介面的名稱就可以橋接數個介面群. 你也可以使用VLAN 符號INTERFACE.VLANNR (例.如: eth0.1)." + +msgid "On-State Delay" +msgstr "啟用狀態延遲" + +msgid "One of hostname or mac address must be specified!" +msgstr "主機名稱或mac位址任選一個被指定" + +msgid "One or more fields contain invalid values!" +msgstr "有一個以上的欄位包含失效數值!" + +msgid "One or more invalid/required values on tab" +msgstr "" + +msgid "One or more required fields have no value!" +msgstr "有一個以上的欄位缺乏任何數值!" + +msgid "Open list..." +msgstr "開啟清單..." + +msgid "OpenConnect (CISCO AnyConnect)" +msgstr "" + +msgid "Operating frequency" +msgstr "" + +msgid "Option changed" +msgstr "選項已變更" + +msgid "Option removed" +msgstr "選項已移除" + +msgid "Optional, specify to override default server (tic.sixxs.net)" +msgstr "" + +msgid "Optional, use when the SIXXS account has more than one tunnel" +msgstr "" + +msgid "Optional." +msgstr "" + +msgid "" +"Optional. Adds in an additional layer of symmetric-key cryptography for post-" +"quantum resistance." +msgstr "" + +msgid "Optional. Create routes for Allowed IPs for this peer." +msgstr "" + +msgid "" +"Optional. Host of peer. Names are resolved prior to bringing up the " +"interface." +msgstr "" + +msgid "Optional. Maximum Transmission Unit of tunnel interface." +msgstr "" + +msgid "Optional. Port of peer." +msgstr "" + +msgid "" +"Optional. Seconds between keep alive messages. Default is 0 (disabled). " +"Recommended value if this device is behind a NAT is 25." +msgstr "" + +msgid "Optional. UDP port used for outgoing and incoming packets." +msgstr "" + +msgid "Options" +msgstr "選項" + +msgid "Other:" +msgstr "其它:" + +msgid "Out" +msgstr "出" + +msgid "Outbound:" +msgstr "外連:" + +msgid "Outdoor Channels" +msgstr "室外通道" + +msgid "Output Interface" +msgstr "" + +msgid "Override MAC address" +msgstr "覆蓋MAC位址" + +msgid "Override MTU" +msgstr "覆蓋MTU數值" + +msgid "Override TOS" +msgstr "" + +msgid "Override TTL" +msgstr "" + +msgid "Override default interface name" +msgstr "" + +msgid "Override the gateway in DHCP responses" +msgstr "在DHCP回應中覆蓋匝道器" + +msgid "" +"Override the netmask sent to clients. Normally it is calculated from the " +"subnet that is served." +msgstr "覆蓋傳送到客戶端的網路遮罩. 正常來說它會計算來自魚已存子網路." + +msgid "Override the table used for internal routes" +msgstr "覆蓋之前內部使用的路由表" + +msgid "Overview" +msgstr "預覽" + +msgid "Owner" +msgstr "持有者" + +msgid "PAP/CHAP password" +msgstr "PAP/CHAP驗證密碼" + +msgid "PAP/CHAP username" +msgstr "PAP/CHAP驗證用戶名" + +msgid "PID" +msgstr "PID碼" + +msgid "PIN" +msgstr "PIN碼" + +msgid "PPP" +msgstr "PPP協定" + +msgid "PPPoA Encapsulation" +msgstr "PPPoA配置" + +msgid "PPPoATM" +msgstr "PPPoATM" + +msgid "PPPoE" +msgstr "PPPoE" + +msgid "PPPoSSH" +msgstr "" + +msgid "PPtP" +msgstr "PPtP點對點VPN虛擬私人隧道協定" + +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + +msgid "PTM/EFM (Packet Transfer Mode)" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "軟體包必需有libiwinfo!" + +msgid "Package lists are older than 24 hours" +msgstr "軟體包列表過期24小時" + +msgid "Package name" +msgstr "軟體包名稱" + +msgid "Packets" +msgstr "封包" + +msgid "Part of zone %q" +msgstr "區域 %q 的部分 " + +msgid "Password" +msgstr "密碼" + +msgid "Password authentication" +msgstr "密碼驗證" + +msgid "Password of Private Key" +msgstr "私人金鑰密碼" + +msgid "Password of inner Private Key" +msgstr "" + +msgid "Password successfully changed!" +msgstr "密碼已變更成功!" + +msgid "Path to CA-Certificate" +msgstr "CA-證書的路徑" + +msgid "Path to Client-Certificate" +msgstr "用戶端-證書的路徑" + +msgid "Path to Private Key" +msgstr "私人金鑰的路徑" + +msgid "Path to executable which handles the button event" +msgstr "處理按鍵效果可執行檔路徑" + +msgid "Path to inner CA-Certificate" +msgstr "" + +msgid "Path to inner Client-Certificate" +msgstr "" + +msgid "Path to inner Private Key" +msgstr "" + +msgid "Peak:" +msgstr "峰值:" + +msgid "Peer IP address to assign" +msgstr "" + +msgid "Peers" +msgstr "" + +msgid "Perfect Forward Secrecy" +msgstr "" + +msgid "Perform reboot" +msgstr "執行重開" + +msgid "Perform reset" +msgstr "執行重置" + +msgid "Persistent Keep Alive" +msgstr "" + +msgid "Phy Rate:" +msgstr "傳輸率:" + +msgid "Physical Settings" +msgstr "實體設置" + +msgid "Ping" +msgstr "Ping" + +msgid "Pkts." +msgstr "封包數." + +msgid "Please enter your username and password." +msgstr "請輸入你的用戶名稱和密碼" + +msgid "Policy" +msgstr "策略" + +msgid "Port" +msgstr "埠" + +msgid "Port status:" +msgstr "埠狀態:" + +msgid "Power Management Mode" +msgstr "" + +msgid "Pre-emtive CRC errors (CRCP_P)" +msgstr "" + +msgid "Preshared Key" +msgstr "" + +msgid "" +"Presume peer to be dead after given amount of LCP echo failures, use 0 to " +"ignore failures" +msgstr "假若在給于多次的 LCP 呼叫失敗後終點將死, 使用0忽略失敗" + +msgid "Prevent listening on these interfaces." +msgstr "" + +msgid "Prevents client-to-client communication" +msgstr "防止用戶端對用戶端的通訊" + +msgid "Prism2/2.5/3 802.11b Wireless Controller" +msgstr "Prism2/2.5/3 802.11b 無線控制器" + +msgid "Private Key" +msgstr "" + +msgid "Proceed" +msgstr "前進" + +msgid "Processes" +msgstr "執行緒" + +msgid "Profile" +msgstr "" + +msgid "Prot." +msgstr "協定." + +msgid "Protocol" +msgstr "協定" + +msgid "Protocol family" +msgstr "協定家族" + +msgid "Protocol of the new interface" +msgstr "新介面的協定家族" + +msgid "Protocol support is not installed" +msgstr "支援的協定尚未安裝" + +msgid "Provide NTP server" +msgstr "提供NTP伺服器" + +msgid "Provide new network" +msgstr "提供新網路" + +msgid "Pseudo Ad-Hoc (ahdemo)" +msgstr "偽裝Ad-Hoc (ahdemo模式)" + +msgid "Public Key" +msgstr "" + +msgid "Public prefix routed to this device for distribution to clients." +msgstr "" + +msgid "QMI Cellular" +msgstr "" + +msgid "Quality" +msgstr "品質" + +msgid "RFC3947 NAT-T mode" +msgstr "" + +msgid "RTS/CTS Threshold" +msgstr "RTS/CTS門檻" + +msgid "RX" +msgstr "接收" + +msgid "RX Rate" +msgstr "接收速率" + +msgid "RaLink 802.11%s Wireless Controller" +msgstr "RaLink 802.11%s 無線控制器" + +msgid "Radius-Accounting-Port" +msgstr "Radius-驗証帳號-埠" + +msgid "Radius-Accounting-Secret" +msgstr "Radius-合法帳號-密碼" + +msgid "Radius-Accounting-Server" +msgstr "Radius-合法帳號-伺服器" + +msgid "Radius-Authentication-Port" +msgstr "Radius-驗証-埠" + +msgid "Radius-Authentication-Secret" +msgstr "Radius-驗証-密碼" + +msgid "Radius-Authentication-Server" +msgstr "Radius-驗証-伺服器" + +msgid "" +"Read /etc/ethers to configure the DHCP-Server" +msgstr "" +" 讀取/etc/ethers 以便設置DHCP-伺服器" + +msgid "" +"Really delete this interface? The deletion cannot be undone!\\nYou might " +"lose access to this device if you are connected via this interface." +msgstr "" +"真的要刪除這介面?無法復元刪除!\n" +"假如你要透過這個介面連線你可能會無法存取這個設備." + +msgid "" +"Really delete this wireless network? The deletion cannot be undone!\\nYou " +"might lose access to this device if you are connected via this network." +msgstr "" +"真的要刪除這個無線網路?無法復元的刪除!\n" +"假如你是透過這個網路連線你可能會無法存取這個設備." + +msgid "Really reset all changes?" +msgstr "確定要重置回復原廠?" + +#, fuzzy +msgid "" +"Really shut down network?\\nYou might lose access to this device if you are " +"connected via this interface." +msgstr "" +"真的要刪除這個網路 ?\n" +"假如你是透過這個介面連線你可能會無法存取這個設備." + +msgid "" +"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " +"you are connected via this interface." +msgstr "" +"真的要關閉這個介面 \"%s\" ?!\n" +"假如你要透過這個介面連線你可能會無法存取這個設備." + +msgid "Really switch protocol?" +msgstr "確定要更換協定?" + +msgid "Realtime Connections" +msgstr "即時連線" + +msgid "Realtime Graphs" +msgstr "即時圖表" + +msgid "Realtime Load" +msgstr "即時負載" + +msgid "Realtime Traffic" +msgstr "即時流量" + +msgid "Realtime Wireless" +msgstr "即時無線網路" + +msgid "Rebind protection" +msgstr "重新綁護" + +msgid "Reboot" +msgstr "重開機" + +msgid "Rebooting..." +msgstr "重開中..." + +msgid "Reboots the operating system of your device" +msgstr "重啟你設備的作業系統" + +msgid "Receive" +msgstr "接收" + +msgid "Receiver Antenna" +msgstr "接收天線" + +msgid "Reconnect this interface" +msgstr "重新連接這個介面" + +msgid "Reconnecting interface" +msgstr "重連這個介面中" + +msgid "References" +msgstr "引用" + +msgid "Regulatory Domain" +msgstr "監管網域" + +msgid "Relay" +msgstr "延遲" + +msgid "Relay Bridge" +msgstr "橋接延遲" + +msgid "Relay between networks" +msgstr "網路間的延遲" + +msgid "Relay bridge" +msgstr "橋接延遲" + +msgid "Remote IPv4 address" +msgstr "遠端IPv4位址" + +msgid "Remote IPv4 address or FQDN" +msgstr "" + +msgid "Remove" +msgstr "移除" + +msgid "Repeat scan" +msgstr "再次掃描" + +msgid "Replace entry" +msgstr "替代項目" + +msgid "Replace wireless configuration" +msgstr "替代性無線設定" + +msgid "Request IPv6-address" +msgstr "" + +msgid "Request IPv6-prefix of length" +msgstr "" + +msgid "Require TLS" +msgstr "" + +msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3" +msgstr "對特定的ISP需要,例如.DOCSIS 3 加速有線電視寬頻網路" + +msgid "Required. Base64-encoded private key for this interface." +msgstr "" + +msgid "" +"Required. IP addresses and prefixes that this peer is allowed to use inside " +"the tunnel. Usually the peer's tunnel IP addresses and the networks the peer " +"routes through the tunnel." +msgstr "" + +msgid "Required. Public key of peer." +msgstr "" + +msgid "" +"Requires upstream supports DNSSEC; verify unsigned domain responses really " +"come from unsigned domains" +msgstr "" + +msgid "Reset" +msgstr "重置" + +msgid "Reset Counters" +msgstr "重置計數器" + +msgid "Reset to defaults" +msgstr "回復預設值" + +msgid "Resolv and Hosts Files" +msgstr "解析和Hosts檔案" + +msgid "Resolve file" +msgstr "解析檔" + +msgid "Restart" +msgstr "重啟" + +msgid "Restart Firewall" +msgstr "重啟防火牆" + +msgid "Restore backup" +msgstr "還原之前備份設定" + +msgid "Reveal/hide password" +msgstr "明示/隱藏 密碼" + +msgid "Revert" +msgstr "回溯" + +msgid "Root" +msgstr "根" + +msgid "Root directory for files served via TFTP" +msgstr "透過TFTP存取根目錄檔案" + +msgid "Root preparation" +msgstr "" + +msgid "Route Allowed IPs" +msgstr "" + +msgid "Route type" +msgstr "" + +msgid "Routed IPv6 prefix for downstream interfaces" +msgstr "" + +msgid "Router Advertisement-Service" +msgstr "" + +msgid "Router Password" +msgstr "路由器密碼" + +msgid "Routes" +msgstr "路由" + +msgid "" +"Routes specify over which interface and gateway a certain host or network " +"can be reached." +msgstr "路由器指定介面導出到特定主機或者能夠到達的網路." + +msgid "Run a filesystem check before mounting the device" +msgstr "掛載這個設備前先跑系統檢查" + +msgid "Run filesystem check" +msgstr "執行系統檢查" + +msgid "SHA256" +msgstr "" + +msgid "" +"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " +"use 6in4 instead" +msgstr "" + +msgid "SIXXS-handle[/Tunnel-ID]" +msgstr "" + +msgid "SNR" +msgstr "" + +msgid "SSH Access" +msgstr "SSH存取" + +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + +msgid "SSH-Keys" +msgstr "SSH-金鑰" + +msgid "SSID" +msgstr "基地台服務設定識別碼SSID" + +msgid "Save" +msgstr "保存" + +msgid "Save & Apply" +msgstr "保存並啟用" + +msgid "Save & Apply" +msgstr "保存 & 啟用" + +msgid "Scan" +msgstr "掃描" + +msgid "Scheduled Tasks" +msgstr "排程任務" + +msgid "Section added" +msgstr "新增的區段" + +msgid "Section removed" +msgstr "區段移除" + +msgid "See \"mount\" manpage for details" +msgstr "查看\"mount\"主頁獲取進階資訊" + +msgid "" +"Send LCP echo requests at the given interval in seconds, only effective in " +"conjunction with failure threshold" +msgstr "傳送LCP呼叫請求在這個給予的秒數間隔內, 僅影響關聯到失敗門檻" + +msgid "Separate Clients" +msgstr "分隔用戶端" + +msgid "Separate WDS" +msgstr "分隔WDS中繼" + +msgid "Server Settings" +msgstr "伺服器設定值" + +msgid "Server password" +msgstr "" + +msgid "" +"Server password, enter the specific password of the tunnel when the username " +"contains the tunnel ID" +msgstr "" + +msgid "Server username" +msgstr "" + +msgid "Service Name" +msgstr "服務名稱" + +msgid "Service Type" +msgstr "服務型態" + +msgid "Services" +msgstr "各服務" + +#, fuzzy +msgid "Set up Time Synchronization" +msgstr "安裝校時同步" + +msgid "Setup DHCP Server" +msgstr "安裝DHCP伺服器" + +msgid "Severely Errored Seconds (SES)" +msgstr "" + +msgid "Short GI" +msgstr "" + +msgid "Show current backup file list" +msgstr "顯示現今的備份檔清單" + +msgid "Shutdown this interface" +msgstr "關閉這個介面" + +msgid "Shutdown this network" +msgstr "關閉這個網路" + +msgid "Signal" +msgstr "信號" + +msgid "Signal Attenuation (SATN)" +msgstr "" + +msgid "Signal:" +msgstr "信號:" + +msgid "Size" +msgstr "大小" + +msgid "Size (.ipk)" +msgstr "" + +msgid "Skip" +msgstr "跳過" + +msgid "Skip to content" +msgstr "跳到內容" + +msgid "Skip to navigation" +msgstr "跳到導覽" + +msgid "Slot time" +msgstr "插槽時間" + +msgid "Software" +msgstr "軟體" + +msgid "Software VLAN" +msgstr "" + +msgid "Some fields are invalid, cannot save values!" +msgstr "有些欄位失效, 無法儲存數值!" + +msgid "Sorry, the object you requested was not found." +msgstr "抱歉, 你請求的這物件尚無發現." + +msgid "Sorry, the server encountered an unexpected error." +msgstr "抱歉, 伺服器遭遇非預期的錯誤." + +msgid "" +"Sorry, there is no sysupgrade support present; a new firmware image must be " +"flashed manually. Please refer to the wiki for device specific install " +"instructions." +msgstr "" +"抱歉, 沒有sysupgrade支援出現, 新版韌體映像檔必須手動更新. 請回歸wiki找尋特定" +"設備安裝指引." + +msgid "Sort" +msgstr "分類" + +msgid "Source" +msgstr "來源" + +msgid "Source routing" +msgstr "" + +msgid "Specifies the button state to handle" +msgstr "指定這個按鈕狀態以便操作" + +msgid "Specifies the directory the device is attached to" +msgstr "指定這個設備被附掛到那個目錄" + +msgid "Specifies the listening port of this Dropbear instance" +msgstr "指定這個 Dropbear真實聆聽埠" + +msgid "" +"Specifies the maximum amount of failed ARP requests until hosts are presumed " +"to be dead" +msgstr "指定失敗ARP可請求的最大數量直到駭客主機死亡為止" + +msgid "" +"Specifies the maximum amount of seconds after which hosts are presumed to be " +"dead" +msgstr "指定可請求的最大秒數直到駭客主機死亡為止" + +msgid "Specify a TOS (Type of Service)." +msgstr "" + +msgid "" +"Specify a TTL (Time to Live) for the encapsulating packet other than the " +"default (64)." +msgstr "" + +msgid "" +"Specify an MTU (Maximum Transmission Unit) other than the default (1280 " +"bytes)." +msgstr "" + +msgid "Specify the secret encryption key here." +msgstr "指定加密金鑰在此." + +msgid "Start" +msgstr "啟用" + +msgid "Start priority" +msgstr "啟用優先權順序" + +msgid "Startup" +msgstr "啟動" + +msgid "Static IPv4 Routes" +msgstr "靜態IPv4路由" + +msgid "Static IPv6 Routes" +msgstr "靜態IPv6路由" + +msgid "Static Leases" +msgstr "靜態租約" + +msgid "Static Routes" +msgstr "靜態路由" + +msgid "Static WDS" +msgstr "靜態WDS" + +msgid "Static address" +msgstr "靜態位址" + +msgid "" +"Static leases are used to assign fixed IP addresses and symbolic hostnames " +"to DHCP clients. They are also required for non-dynamic interface " +"configurations where only hosts with a corresponding lease are served." +msgstr "" +"靜態租約是用來指定固定的IP位址和表示的主機名稱給予DHCP用戶端. 它們也需要非動" +"態介面設定值以便獲取相應租約的主機服務." + +msgid "Status" +msgstr "狀態" + +msgid "Stop" +msgstr "停止" + +msgid "Strict order" +msgstr "嚴謹順序" + +msgid "Submit" +msgstr "提交" + +msgid "Suppress logging" +msgstr "" + +msgid "Suppress logging of the routine operation of these protocols" +msgstr "" + +msgid "Swap" +msgstr "" + +msgid "Swap Entry" +msgstr "Swap交換頁項目" + +msgid "Switch" +msgstr "交換器" + +msgid "Switch %q" +msgstr "交換器 %q" + +msgid "Switch %q (%s)" +msgstr "交換器 %q (%s)" + +msgid "" +"Switch %q has an unknown topology - the VLAN settings might not be accurate." +msgstr "" + +msgid "Switch VLAN" +msgstr "" + +msgid "Switch protocol" +msgstr "交換器協定" + +msgid "Sync with browser" +msgstr "同步瀏覽器" + +msgid "Synchronizing..." +msgstr "同步中..." + +msgid "System" +msgstr "系統" + +msgid "System Log" +msgstr "系統日誌" + +msgid "System Properties" +msgstr "系統屬性" + +msgid "System log buffer size" +msgstr "系統日誌緩衝大小" + +msgid "TCP:" +msgstr "TCP:" + +msgid "TFTP Settings" +msgstr "TFTP設定" + +msgid "TFTP server root" +msgstr "TFTP 伺服器根" + +msgid "TX" +msgstr "傳送" + +msgid "TX Rate" +msgstr "傳送速度" + +msgid "Table" +msgstr "表格" + +msgid "Target" +msgstr "目標" + +msgid "Target network" +msgstr "" + +msgid "Terminate" +msgstr "中斷" + +#, fuzzy +msgid "" +"The Device Configuration section covers physical settings of the " +"radio hardware such as channel, transmit power or antenna selection which " +"are shared among all defined wireless networks (if the radio hardware is " +"multi-SSID capable). Per network settings like encryption or operation mode " +"are grouped in the Interface Configuration." +msgstr "" +"這個Device Configuration欄位會覆蓋無線射頻硬體的物理設定值,如通道、" +"傳送功率或者天線分享道所有定義的無線網路(假如這個無線射頻硬體是多工-SSID能力" +"的). 每個網路設定像加密或操作模式是被分群在Interface Configuration" +"中." + +msgid "" +"The libiwinfo-lua package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"這 libiwinfo-lua 軟體包尚未安裝. 你必須安裝這個元件以便無線網路設定" +"有作用." + +msgid "" +"The HE.net endpoint update configuration changed, you must now use the plain " +"username instead of the user ID!" +msgstr "" + +msgid "" +"The IPv4 address or the fully-qualified domain name of the remote tunnel end." +msgstr "" + +msgid "" +"The IPv6 prefix assigned to the provider, usually ends with ::" +msgstr "指定到這供應商的IPv6字首, 通常用 ::結尾" + +msgid "" +"The allowed characters are: A-Z, a-z, 0-9 and _" +msgstr "" +"所允許的字元是: A-Z, a-z, 0-9 and " +"_" + +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + +msgid "" +"The device file of the memory or partition (e.g." +" /dev/sda1)" +msgstr "" +"記憶體的設備檔或者分割區 (e.g. /dev/" +"sda1)" + +msgid "" +"The filesystem that was used to format the memory (e.g. ext3)" +msgstr "" +"這檔案系統適用來格式化記憶體(例.如. " +"ext3)" + +msgid "" +"The flash image was uploaded. Below is the checksum and file size listed, " +"compare them with the original file to ensure data integrity.
Click " +"\"Proceed\" below to start the flash procedure." +msgstr "" +"要刷的映像檔已上傳.下面是這個校驗碼和檔案大小詳列, 用原始檔比對它門以確保資料" +"完整性.
按下面的\"繼續\"便可以開啟更新流程." + +msgid "The following changes have been committed" +msgstr "接下來的修改已經被承諾" + +msgid "The following changes have been reverted" +msgstr "接下來的修改已經被回復" + +msgid "The following rules are currently active on this system." +msgstr "以下的規則現正作用在系統中." + +msgid "The given network name is not unique" +msgstr "輸入的網路名稱非獨一" + +#, fuzzy +msgid "" +"The hardware is not multi-SSID capable and the existing configuration will " +"be replaced if you proceed." +msgstr "如果你繼續的話.這硬體並非多SSID工能並且已存的設定將會被覆蓋." + +msgid "" +"The length of the IPv4 prefix in bits, the remainder is used in the IPv6 " +"addresses." +msgstr "這IPv4開頭以位元計的長度, 剩餘部分將會延用在IPv6位址中." + +msgid "The length of the IPv6 prefix in bits" +msgstr "這IPv6開頭以位元計的長度" + +msgid "The local IPv4 address over which the tunnel is created (optional)." +msgstr "" + +msgid "" +"The network ports on this device can be combined to several VLANs in which computers can " +"communicate directly with each other. VLANs are often used to separate different network " +"segments. Often there is by default one Uplink port for a connection to the " +"next greater network like the internet and other ports for a local network." +msgstr "" +"這設備的網路埠可以被組合到數個 VLAN群, 以便在內的電腦可以直接跟別人互通. VLAN群經常用來分割網路區段. 預設經常會有一個上傳" +"埠來連接到下一個大型網路類似Intenet而其它埠則用來本地區網使用." + +msgid "The selected protocol needs a device assigned" +msgstr "選到的協定需要指定到設備上" + +msgid "The submitted security token is invalid or already expired!" +msgstr "" + +msgid "" +"The system is erasing the configuration partition now and will reboot itself " +"when finished." +msgstr "系統正在刪除設定分割並且當完成時將自行重開." + +#, fuzzy +msgid "" +"The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a " +"few minutes before you try to reconnect. It might be necessary to renew the " +"address of your computer to reach the device again, depending on your " +"settings." +msgstr "" +"系統現正刷機中.
請勿關閉設備!
等待數分鐘直到你重新在連線. 可能需" +"要更新你電腦的位址以便再連設備, 端看你的設定. " + +msgid "" +"The tunnel end-point is behind NAT, defaults to disabled and only applies to " +"AYIYA" +msgstr "" + +msgid "" +"The uploaded image file does not contain a supported format. Make sure that " +"you choose the generic image format for your platform." +msgstr "" +"以上傳的映像檔不包含支援格式. 請確認你選擇的是針對你的平台採用的通用映像檔." + +msgid "There are no active leases." +msgstr "租賃尚未啟動." + +msgid "There are no pending changes to apply!" +msgstr "尚無聽候的修改被採用" + +msgid "There are no pending changes to revert!" +msgstr "尚無聽候的修改被復元!" + +msgid "There are no pending changes!" +msgstr "無聽候的修改!" + +msgid "" +"There is no device assigned yet, please attach a network device in the " +"\"Physical Settings\" tab" +msgstr "尚未指定設備, 請接上一個網路設備在這\"實體設置\"標籤內" + +msgid "" +"There is no password set on this router. Please configure a root password to " +"protect the web interface and enable SSH." +msgstr "路由器尚未設密碼. 請設定root密碼以便保護web介面及啟用SSH." + +msgid "This IPv4 address of the relay" +msgstr "IPv4位址的轉驛" + +msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" +"This is a list of shell glob patterns for matching files and directories to " +"include during sysupgrade. Modified files in /etc/config/ and certain other " +"configurations are automatically preserved." +msgstr "" +"這是shell通用模式清單用來在系統更新時匹配包括的檔案和目錄. 在/etc/config/ 修" +"改檔案和特定其它設定檔將會被自動保留." + +msgid "" +"This is either the \"Update Key\" configured for the tunnel or the account " +"password if no update key has been configured" +msgstr "" + +msgid "" +"This is the content of /etc/rc.local. Insert your own commands here (in " +"front of 'exit 0') to execute them at the end of the boot process." +msgstr "" +"這是 /etc/rc.local 內容. 在這插入自己的指令 (在 'exit 0' 前面)以便在開機流程" +"結尾執行它們." + +msgid "" +"This is the local endpoint address assigned by the tunnel broker, it usually " +"ends with :2" +msgstr "這是由通道代理人指定的本地終端位址, 通常用 :2結尾." + +msgid "" +"This is the only DHCP in the local network" +msgstr "" +"在本地網路中 這是唯一的 DHCP" + +msgid "This is the plain username for logging into the account" +msgstr "" + +msgid "" +"This is the prefix routed to you by the tunnel broker for use by clients" +msgstr "" + +msgid "This is the system crontab in which scheduled tasks can be defined." +msgstr "這是系統預設的例行性工作排程." + +msgid "" +"This is usually the address of the nearest PoP operated by the tunnel broker" +msgstr "這是由通道代理人操作的近端PoP通用位址" + +msgid "" +"This list gives an overview over currently running system processes and " +"their status." +msgstr "這清單提供目前正在執行的系統的執行緒和狀態的預覽." + +msgid "This page allows the configuration of custom button actions" +msgstr "這一頁允許客製化按鍵動作的設定" + +msgid "This page gives an overview over currently active network connections." +msgstr "這一頁提供目前正在活動中網路連線的預覽." + +msgid "This section contains no values yet" +msgstr "這部分尚未有任何數值." + +msgid "Time Synchronization" +msgstr "校時同步" + +msgid "Time Synchronization is not configured yet." +msgstr "校時同步尚未設定." + +msgid "Timezone" +msgstr "時區" + +msgid "" +"To restore configuration files, you can upload a previously generated backup " +"archive here." +msgstr "要復元設定檔, 可以上傳之前製作的備份壓縮檔放這." + +msgid "Tone" +msgstr "" + +msgid "Total Available" +msgstr "全部可用" + +msgid "Traceroute" +msgstr "路由追蹤" + +msgid "Traffic" +msgstr "流量" + +msgid "Transfer" +msgstr "傳輸" + +msgid "Transmission Rate" +msgstr "傳輸速率" + +msgid "Transmit" +msgstr "射頻" + +msgid "Transmit Power" +msgstr "射頻功率" + +msgid "Transmitter Antenna" +msgstr "射頻天線" + +msgid "Trigger" +msgstr "觸發" + +msgid "Trigger Mode" +msgstr "觸發模式" + +msgid "Tunnel ID" +msgstr "通道ID" + +msgid "Tunnel Interface" +msgstr "通道介面" + +msgid "Tunnel Link" +msgstr "" + +msgid "Tunnel broker protocol" +msgstr "" + +msgid "Tunnel setup server" +msgstr "" + +msgid "Tunnel type" +msgstr "" + +msgid "Turbo Mode" +msgstr "渦輪爆衝模式" + +msgid "Tx-Power" +msgstr "傳送-功率" + +msgid "Type" +msgstr "型態" + +msgid "UDP:" +msgstr "UDP:" + +msgid "UMTS only" +msgstr "只用3G UMTS" + +msgid "UMTS/GPRS/EV-DO" +msgstr "UMTS/GPRS/EV-DO" + +msgid "USB Device" +msgstr "USB設備" + +msgid "UUID" +msgstr "設備通用唯一識別碼UUID" + +msgid "Unable to dispatch" +msgstr "無法發送" + +msgid "Unavailable Seconds (UAS)" +msgstr "" + +msgid "Unknown" +msgstr "未知" + +msgid "Unknown Error, password not changed!" +msgstr "未知錯誤, 密碼尚未改變!" + +msgid "Unmanaged" +msgstr "非託管" + +msgid "Unmount" +msgstr "" + +msgid "Unsaved Changes" +msgstr "尚未存檔的修改" + +msgid "Unsupported protocol type." +msgstr "不支援的協定型態" + +msgid "Update lists" +msgstr "上傳清單" + +msgid "" +"Upload a sysupgrade-compatible image here to replace the running firmware. " +"Check \"Keep settings\" to retain the current configuration (requires a " +"compatible firmware image)." +msgstr "" +"上傳一個sysupgrade-相容的映像檔在這以便替代正執行中的韌體. 勾選\"保持設定\"以" +"保留目前設定值(必須要是OpenWrt/LEDE相容性韌體映像檔)." + +msgid "Upload archive..." +msgstr "上傳壓縮檔..." + +msgid "Uploaded File" +msgstr "檔案已上傳" + +msgid "Uptime" +msgstr "上傳花費時間" + +msgid "Use /etc/ethers" +msgstr "採用 /etc/ethers" + +msgid "Use DHCP gateway" +msgstr "使用DHCP的匝道器" + +msgid "Use DNS servers advertised by peer" +msgstr "使用終端發布的DNS伺服器" + +msgid "Use ISO/IEC 3166 alpha2 country codes." +msgstr "使用Use ISO/IEC 3166 alpha2 國碼." + +msgid "Use MTU on tunnel interface" +msgstr "在通道介面上使用的MTU數值" + +msgid "Use TTL on tunnel interface" +msgstr "在通道介面上使用的TTL存活時間" + +msgid "Use as external overlay (/overlay)" +msgstr "" + +msgid "Use as root filesystem (/)" +msgstr "" + +msgid "Use broadcast flag" +msgstr "當作廣播旗標" + +msgid "Use builtin IPv6-management" +msgstr "" + +msgid "Use custom DNS servers" +msgstr "使用自定的DNS伺服器" + +msgid "Use default gateway" +msgstr "使用預設匝道器" + +msgid "Use gateway metric" +msgstr "使用匝道器公測數" + +msgid "Use routing table" +msgstr "使用路由表" + +msgid "" +"Use the Add Button to add a new lease entry. The MAC-Address indentifies the host, the IPv4-Address specifies to the fixed " +"address to use and the Hostname is assigned as symbolic name to the " +"requesting host. The optional Lease time can be used to set non-" +"standard host-specific lease time, e.g. 12h, 3d or infinite." +msgstr "" +"使用 Add 鍵以便新增一個租賃的項目. 這個 MAC-Address 標誌這" +"個主機, the IPv4-Address 指定固定位址以便使用,Hostname 備指" +"定當作象徵名稱到請求的主機上." + +msgid "Used" +msgstr "已使用" + +msgid "Used Key Slot" +msgstr "已使用的關鍵插槽" + +msgid "User certificate (PEM encoded)" +msgstr "" + +msgid "User key (PEM encoded)" +msgstr "" + +msgid "Username" +msgstr "用戶名稱" + +msgid "VC-Mux" +msgstr "虛擬電路多工器VC-Mux" + +msgid "VDSL" +msgstr "" + +msgid "VLANs on %q" +msgstr "VLAN 在 %q" + +msgid "VLANs on %q (%s)" +msgstr "VLAN 在 %q (%s)" + +msgid "VPN Local address" +msgstr "" + +msgid "VPN Local port" +msgstr "" + +msgid "VPN Server" +msgstr "VPN伺服器" + +msgid "VPN Server port" +msgstr "" + +msgid "VPN Server's certificate SHA1 hash" +msgstr "" + +msgid "VPNC (CISCO 3000 (and others) VPN)" +msgstr "" + +msgid "Vendor" +msgstr "" + +msgid "Vendor Class to send when requesting DHCP" +msgstr "當請求DHCP封包時要傳送的製造商類別碼" + +msgid "Verbose" +msgstr "" + +msgid "Verbose logging by aiccu daemon" +msgstr "" + +msgid "Verify" +msgstr "確認" + +msgid "Version" +msgstr "版本" + +msgid "WDS" +msgstr "無線分散系統WDS" + +msgid "WEP Open System" +msgstr "WEP 開放系統" + +msgid "WEP Shared Key" +msgstr "WEP 共享金鑰" + +msgid "WEP passphrase" +msgstr "WEP通關密碼" + +msgid "WMM Mode" +msgstr "無線多媒體機制" + +msgid "WPA passphrase" +msgstr "WPA 密碼" + +msgid "" +"WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " +"and ad-hoc mode) to be installed." +msgstr "" +"WPA-加密需要 wpa_supplican(終端模式)或者hostapd熱點(對AP或者是 ad-hoc模式)已" +"被安裝." + +msgid "" +"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" +msgstr "" + +msgid "Waiting for changes to be applied..." +msgstr "等待修改被啟用..." + +msgid "Waiting for command to complete..." +msgstr "等待完整性指令..." + +msgid "Waiting for device..." +msgstr "" + +msgid "Warning" +msgstr "警告" + +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" + +msgid "Whether to create an IPv6 default route over the tunnel" +msgstr "" + +msgid "Whether to route only packets from delegated prefixes" +msgstr "" + +msgid "Width" +msgstr "" + +msgid "WireGuard VPN" +msgstr "" + +msgid "Wireless" +msgstr "無線網路" + +msgid "Wireless Adapter" +msgstr "無線網卡" + +msgid "Wireless Network" +msgstr "無線網路" + +msgid "Wireless Overview" +msgstr "無線預覽" + +msgid "Wireless Security" +msgstr "無線安全" + +msgid "Wireless is disabled or not associated" +msgstr "無線被關閉或者尚未關聯" + +msgid "Wireless is restarting..." +msgstr "無線重啟中..." + +msgid "Wireless network is disabled" +msgstr "無線網路已經被關閉" + +msgid "Wireless network is enabled" +msgstr "無線網路已啟用" + +msgid "Wireless restarted" +msgstr "無線網路已重啟" + +msgid "Wireless shut down" +msgstr "無線網路關閉" + +msgid "Write received DNS requests to syslog" +msgstr "寫入已接收的DNS請求到系統日誌中" + +msgid "Write system log to file" +msgstr "" + +msgid "XR Support" +msgstr "支援XR無線陣列" + +msgid "" +"You can enable or disable installed init scripts here. Changes will applied " +"after a device reboot.
Warning: If you disable essential init " +"scripts like \"network\", your device might become inaccessible!" +msgstr "" +"你可以開啟或關閉初始化指令在這. 修改將會在設備重開後被啟用.
警" +"告: 假如你關閉必要的初始化腳本像\"網路\", 你的設備將可能無法存取!" + +msgid "" +"You must enable Java Script in your browser or LuCI will not work properly." +msgstr "在瀏覽器你必須啟用Java Script否則LuCI無法正常運作." + +msgid "" +"Your Internet Explorer is too old to display this page correctly. Please " +"upgrade it to at least version 7 or use another browser like Firefox, Opera " +"or Safari." +msgstr "" + +msgid "any" +msgstr "任意" + +msgid "auto" +msgstr "自動" + +msgid "automatic" +msgstr "" + +msgid "baseT" +msgstr "baseT" + +msgid "bridged" +msgstr "已橋接" + +msgid "create:" +msgstr "建立:" + +msgid "creates a bridge over specified interface(s)" +msgstr "在指定的介面群上建立橋接" + +msgid "dB" +msgstr "dB" + +msgid "dBm" +msgstr "dBm" + +msgid "disable" +msgstr "關閉" + +msgid "disabled" +msgstr "" + +msgid "expired" +msgstr "過期" + +msgid "" +"file where given DHCP-leases will be stored" +msgstr "" +"當給予DHCP-租賃將" +"會被存檔" + +msgid "forward" +msgstr "轉發" + +msgid "full-duplex" +msgstr "全雙工" + +msgid "half-duplex" +msgstr "半雙工" + +msgid "help" +msgstr "幫助" + +msgid "hidden" +msgstr "隱藏" + +msgid "hybrid mode" +msgstr "" + +msgid "if target is a network" +msgstr "假如目標是某個網路" + +msgid "input" +msgstr "輸入" + +msgid "kB" +msgstr "kB" + +msgid "kB/s" +msgstr "kB/s" + +msgid "kbit/s" +msgstr "kbit/s" + +msgid "local DNS file" +msgstr "本地DNS 檔案" + +msgid "minimum 1280, maximum 1480" +msgstr "" + +msgid "navigation Navigation" +msgstr "" + +msgid "no" +msgstr "無" + +msgid "no link" +msgstr "無連線" + +msgid "none" +msgstr "無" + +msgid "not present" +msgstr "" + +msgid "off" +msgstr "關閉" + +msgid "on" +msgstr "開啟" + +msgid "open" +msgstr "打開" + +msgid "overlay" +msgstr "" + +msgid "relay mode" +msgstr "" + +msgid "routed" +msgstr "路由" + +msgid "server mode" +msgstr "" + +msgid "skiplink1 Skip to navigation" +msgstr "" + +msgid "skiplink2 Skip to content" +msgstr "" + +msgid "stateful-only" +msgstr "" + +msgid "stateless" +msgstr "" + +msgid "stateless + stateful" +msgstr "" + +msgid "tagged" +msgstr "標籤" + +msgid "unknown" +msgstr "未知" + +msgid "unlimited" +msgstr "無限" + +msgid "unspecified" +msgstr "尚未指定" + +msgid "unspecified -or- create:" +msgstr "尚未指定 - 或 -建立:" + +msgid "untagged" +msgstr "尚未標籤" + +msgid "yes" +msgstr "是的" + +msgid "« Back" +msgstr "« 倒退" + +#~ msgid "An additional network will be created if you leave this unchecked." +#~ msgstr "取消選取將會另外建立一個新網路,而不會覆蓋目前的網路設定" + +#~ msgid "Join Network: Settings" +#~ msgstr "加入網路的設定" + +#~ msgid "CPU" +#~ msgstr "CPU" + +#~ msgid "Port %d" +#~ msgstr "埠 %d" + +#~ msgid "Port %d is untagged in multiple VLANs!" +#~ msgstr "埠 %d 尚未標記在多個VLANs中!" + +#~ msgid "VLAN Interface" +#~ msgstr "VLAN介面" diff --git a/feeds/luci/modules/luci-base/root/etc/config/luci b/feeds/luci/modules/luci-base/root/etc/config/luci new file mode 100644 index 0000000..baa3ac5 --- /dev/null +++ b/feeds/luci/modules/luci-base/root/etc/config/luci @@ -0,0 +1,24 @@ +config core main + option lang auto + option mediaurlbase /luci-static/bootstrap + option resourcebase /luci-static/resources + +config extern flash_keep + option uci "/etc/config/" + option dropbear "/etc/dropbear/" + option openvpn "/etc/openvpn/" + option passwd "/etc/passwd" + option opkg "/etc/opkg.conf" + option firewall "/etc/firewall.user" + option uploads "/lib/uci/upload/" + +config internal languages + +config internal sauth + option sessionpath "/tmp/luci-sessions" + option sessiontime 3600 + +config internal ccache + option enable 1 + +config internal themes diff --git a/feeds/luci/modules/luci-base/root/etc/config/ucitrack b/feeds/luci/modules/luci-base/root/etc/config/ucitrack new file mode 100644 index 0000000..c3741ba --- /dev/null +++ b/feeds/luci/modules/luci-base/root/etc/config/ucitrack @@ -0,0 +1,54 @@ +config network + option init network + list affects dhcp + list affects radvd + +config wireless + list affects network + +config firewall + option init firewall + list affects luci-splash + list affects qos + list affects miniupnpd + +config olsr + option init olsrd + +config dhcp + option init dnsmasq + list affects odhcpd + +config odhcpd + option init odhcpd + +config dropbear + option init dropbear + +config httpd + option init httpd + +config fstab + option init fstab + +config qos + option init qos + +config system + option init led + list affects luci_statistics + +config luci_splash + option init luci_splash + +config upnpd + option init miniupnpd + +config ntpclient + option init ntpclient + +config samba + option init samba + +config tinyproxy + option init tinyproxy diff --git a/feeds/luci/modules/luci-base/root/etc/luci-uploads/.placeholder b/feeds/luci/modules/luci-base/root/etc/luci-uploads/.placeholder new file mode 100644 index 0000000..e69de29 diff --git a/feeds/luci/modules/luci-base/root/sbin/luci-reload b/feeds/luci/modules/luci-base/root/sbin/luci-reload new file mode 100755 index 0000000..cc41da2 --- /dev/null +++ b/feeds/luci/modules/luci-base/root/sbin/luci-reload @@ -0,0 +1,45 @@ +#!/bin/sh +. /lib/functions.sh + +apply_config() { + config_get init "$1" init + config_get exec "$1" exec + config_get test "$1" test + + echo "$2" > "/var/run/luci-reload-status" + + [ -n "$init" ] && reload_init "$2" "$init" "$test" + [ -n "$exec" ] && reload_exec "$2" "$exec" "$test" +} + +reload_exec() { + local service="$1" + local ok="$3" + set -- $2 + local cmd="$1"; shift + + [ -x "$cmd" ] && { + echo "Reloading $service... " + ( $cmd "$@" ) 2>/dev/null 1>&2 + [ -n "$ok" -a "$?" != "$ok" ] && echo '!!! Failed to reload' $service '!!!' + } +} + +reload_init() { + [ -x /etc/init.d/$2 ] && /etc/init.d/$2 enabled && { + echo "Reloading $1... " + /etc/init.d/$2 reload >/dev/null 2>&1 + [ -n "$3" -a "$?" != "$3" ] && echo '!!! Failed to reload' $1 '!!!' + } +} + +lock "/var/run/luci-reload" + +config_load ucitrack + +for i in $*; do + config_foreach apply_config $i $i +done + +rm -f "/var/run/luci-reload-status" +lock -u "/var/run/luci-reload" diff --git a/feeds/luci/modules/luci-base/root/usr/share/acl.d/luci-base.json b/feeds/luci/modules/luci-base/root/usr/share/acl.d/luci-base.json new file mode 100644 index 0000000..4d58236 --- /dev/null +++ b/feeds/luci/modules/luci-base/root/usr/share/acl.d/luci-base.json @@ -0,0 +1,8 @@ +{ + "user": "nobody", + "access": { + "system": { + "methods": [ "board", "info" ] + } + } +} diff --git a/feeds/luci/modules/luci-base/root/www/index.html b/feeds/luci/modules/luci-base/root/www/index.html new file mode 100644 index 0000000..59b0d84 --- /dev/null +++ b/feeds/luci/modules/luci-base/root/www/index.html @@ -0,0 +1,11 @@ + + + + + + + + +LuCI - Lua Configuration Interface + + diff --git a/feeds/luci/modules/luci-base/src/Makefile b/feeds/luci/modules/luci-base/src/Makefile new file mode 100644 index 0000000..03e887e --- /dev/null +++ b/feeds/luci/modules/luci-base/src/Makefile @@ -0,0 +1,21 @@ +%.o: %.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(FPIC) -c -o $@ $< + +clean: + rm -f po2lmo parser.so version.lua *.o + +po2lmo: po2lmo.o template_lmo.o + $(CC) $(LDFLAGS) -o $@ $^ + +parser.so: template_parser.o template_utils.o template_lmo.o template_lualib.o + $(CC) $(LDFLAGS) -shared -o $@ $^ + +version.lua: + ./mkversion.sh $@ $(LUCI_VERSION) "$(LUCI_GITBRANCH)" + +compile: parser.so version.lua + +install: compile + mkdir -p $(DESTDIR)/usr/lib/lua/luci/template + cp parser.so $(DESTDIR)/usr/lib/lua/luci/template/parser.so + cp version.lua $(DESTDIR)/usr/lib/lua/luci/version.lua diff --git a/feeds/luci/modules/luci-base/src/mkversion.sh b/feeds/luci/modules/luci-base/src/mkversion.sh new file mode 100755 index 0000000..e2d02c1 --- /dev/null +++ b/feeds/luci/modules/luci-base/src/mkversion.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +cat < $1 +local pcall, dofile, _G = pcall, dofile, _G + +module "luci.version" + +if pcall(dofile, "/etc/openwrt_release") and _G.DISTRIB_DESCRIPTION then + distname = "" + distversion = _G.DISTRIB_DESCRIPTION + if _G.DISTRIB_REVISION then + distrevision = _G.DISTRIB_REVISION + if not distversion:find(distrevision,1,true) then + distversion = distversion .. " " .. distrevision + end + end +else + distname = "OpenWrt" + distversion = "Development Snapshot" +end + +luciname = "${3:-LuCI}" +luciversion = "${2:-Git}" +EOF diff --git a/feeds/luci/modules/luci-base/src/po2lmo.c b/feeds/luci/modules/luci-base/src/po2lmo.c new file mode 100644 index 0000000..fd927cb --- /dev/null +++ b/feeds/luci/modules/luci-base/src/po2lmo.c @@ -0,0 +1,247 @@ +/* + * lmo - Lua Machine Objects - PO to LMO conversion tool + * + * Copyright (C) 2009-2012 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "template_lmo.h" + +static void die(const char *msg) +{ + fprintf(stderr, "Error: %s\n", msg); + exit(1); +} + +static void usage(const char *name) +{ + fprintf(stderr, "Usage: %s input.po output.lmo\n", name); + exit(1); +} + +static void print(const void *ptr, size_t size, size_t nmemb, FILE *stream) +{ + if( fwrite(ptr, size, nmemb, stream) == 0 ) + die("Failed to write stdout"); +} + +static int extract_string(const char *src, char *dest, int len) +{ + int pos = 0; + int esc = 0; + int off = -1; + + for( pos = 0; (pos < strlen(src)) && (pos < len); pos++ ) + { + if( (off == -1) && (src[pos] == '"') ) + { + off = pos + 1; + } + else if( off >= 0 ) + { + if( esc == 1 ) + { + switch (src[pos]) + { + case '"': + case '\\': + off++; + break; + } + dest[pos-off] = src[pos]; + esc = 0; + } + else if( src[pos] == '\\' ) + { + dest[pos-off] = src[pos]; + esc = 1; + } + else if( src[pos] != '"' ) + { + dest[pos-off] = src[pos]; + } + else + { + dest[pos-off] = '\0'; + break; + } + } + } + + return (off > -1) ? strlen(dest) : -1; +} + +static int cmp_index(const void *a, const void *b) +{ + uint32_t x = ((const lmo_entry_t *)a)->key_id; + uint32_t y = ((const lmo_entry_t *)b)->key_id; + + if (x < y) + return -1; + else if (x > y) + return 1; + + return 0; +} + +static void print_uint32(uint32_t x, FILE *out) +{ + uint32_t y = htonl(x); + print(&y, sizeof(uint32_t), 1, out); +} + +static void print_index(void *array, int n, FILE *out) +{ + lmo_entry_t *e; + + qsort(array, n, sizeof(*e), cmp_index); + + for (e = array; n > 0; n--, e++) + { + print_uint32(e->key_id, out); + print_uint32(e->val_id, out); + print_uint32(e->offset, out); + print_uint32(e->length, out); + } +} + +int main(int argc, char *argv[]) +{ + char line[4096]; + char key[4096]; + char val[4096]; + char tmp[4096]; + int state = 0; + int offset = 0; + int length = 0; + int n_entries = 0; + void *array = NULL; + lmo_entry_t *entry = NULL; + uint32_t key_id, val_id; + + FILE *in; + FILE *out; + + if( (argc != 3) || ((in = fopen(argv[1], "r")) == NULL) || ((out = fopen(argv[2], "w")) == NULL) ) + usage(argv[0]); + + memset(line, 0, sizeof(key)); + memset(key, 0, sizeof(val)); + memset(val, 0, sizeof(val)); + + while( (NULL != fgets(line, sizeof(line), in)) || (state >= 2 && feof(in)) ) + { + if( state == 0 && strstr(line, "msgid \"") == line ) + { + switch(extract_string(line, key, sizeof(key))) + { + case -1: + die("Syntax error in msgid"); + case 0: + state = 1; + break; + default: + state = 2; + } + } + else if( state == 1 || state == 2 ) + { + if( strstr(line, "msgstr \"") == line || state == 2 ) + { + switch(extract_string(line, val, sizeof(val))) + { + case -1: + state = 4; + break; + default: + state = 3; + } + } + else + { + switch(extract_string(line, tmp, sizeof(tmp))) + { + case -1: + state = 2; + break; + default: + strcat(key, tmp); + } + } + } + else if( state == 3 ) + { + switch(extract_string(line, tmp, sizeof(tmp))) + { + case -1: + state = 4; + break; + default: + strcat(val, tmp); + } + } + + if( state == 4 ) + { + if( strlen(key) > 0 && strlen(val) > 0 ) + { + key_id = sfh_hash(key, strlen(key)); + val_id = sfh_hash(val, strlen(val)); + + if( key_id != val_id ) + { + n_entries++; + array = realloc(array, n_entries * sizeof(lmo_entry_t)); + entry = (lmo_entry_t *)array + n_entries - 1; + + if (!array) + die("Out of memory"); + + entry->key_id = key_id; + entry->val_id = val_id; + entry->offset = offset; + entry->length = strlen(val); + + length = strlen(val) + ((4 - (strlen(val) % 4)) % 4); + + print(val, length, 1, out); + offset += length; + } + } + + state = 0; + memset(key, 0, sizeof(key)); + memset(val, 0, sizeof(val)); + } + + memset(line, 0, sizeof(line)); + } + + print_index(array, n_entries, out); + + if( offset > 0 ) + { + print_uint32(offset, out); + fsync(fileno(out)); + fclose(out); + } + else + { + fclose(out); + unlink(argv[2]); + } + + fclose(in); + return(0); +} diff --git a/feeds/luci/modules/luci-base/src/template_lmo.c b/feeds/luci/modules/luci-base/src/template_lmo.c new file mode 100644 index 0000000..3d1eaf4 --- /dev/null +++ b/feeds/luci/modules/luci-base/src/template_lmo.c @@ -0,0 +1,328 @@ +/* + * lmo - Lua Machine Objects - Base functions + * + * Copyright (C) 2009-2010 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "template_lmo.h" + +/* + * Hash function from http://www.azillionmonkeys.com/qed/hash.html + * Copyright (C) 2004-2008 by Paul Hsieh + */ + +uint32_t sfh_hash(const char *data, int len) +{ + uint32_t hash = len, tmp; + int rem; + + if (len <= 0 || data == NULL) return 0; + + rem = len & 3; + len >>= 2; + + /* Main loop */ + for (;len > 0; len--) { + hash += sfh_get16(data); + tmp = (sfh_get16(data+2) << 11) ^ hash; + hash = (hash << 16) ^ tmp; + data += 2*sizeof(uint16_t); + hash += hash >> 11; + } + + /* Handle end cases */ + switch (rem) { + case 3: hash += sfh_get16(data); + hash ^= hash << 16; + hash ^= data[sizeof(uint16_t)] << 18; + hash += hash >> 11; + break; + case 2: hash += sfh_get16(data); + hash ^= hash << 11; + hash += hash >> 17; + break; + case 1: hash += *data; + hash ^= hash << 10; + hash += hash >> 1; + } + + /* Force "avalanching" of final 127 bits */ + hash ^= hash << 3; + hash += hash >> 5; + hash ^= hash << 4; + hash += hash >> 17; + hash ^= hash << 25; + hash += hash >> 6; + + return hash; +} + +uint32_t lmo_canon_hash(const char *str, int len) +{ + char res[4096]; + char *ptr, prev; + int off; + + if (!str || len >= sizeof(res)) + return 0; + + for (prev = ' ', ptr = res, off = 0; off < len; prev = *str, off++, str++) + { + if (isspace(*str)) + { + if (!isspace(prev)) + *ptr++ = ' '; + } + else + { + *ptr++ = *str; + } + } + + if ((ptr > res) && isspace(*(ptr-1))) + ptr--; + + return sfh_hash(res, ptr - res); +} + +lmo_archive_t * lmo_open(const char *file) +{ + int in = -1; + uint32_t idx_offset = 0; + struct stat s; + + lmo_archive_t *ar = NULL; + + if (stat(file, &s) == -1) + goto err; + + if ((in = open(file, O_RDONLY)) == -1) + goto err; + + if ((ar = (lmo_archive_t *)malloc(sizeof(*ar))) != NULL) + { + memset(ar, 0, sizeof(*ar)); + + ar->fd = in; + ar->size = s.st_size; + + fcntl(ar->fd, F_SETFD, fcntl(ar->fd, F_GETFD) | FD_CLOEXEC); + + if ((ar->mmap = mmap(NULL, ar->size, PROT_READ, MAP_SHARED, ar->fd, 0)) == MAP_FAILED) + goto err; + + idx_offset = ntohl(*((const uint32_t *) + (ar->mmap + ar->size - sizeof(uint32_t)))); + + if (idx_offset >= ar->size) + goto err; + + ar->index = (lmo_entry_t *)(ar->mmap + idx_offset); + ar->length = (ar->size - idx_offset - sizeof(uint32_t)) / sizeof(lmo_entry_t); + ar->end = ar->mmap + ar->size; + + return ar; + } + +err: + if (in > -1) + close(in); + + if (ar != NULL) + { + if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) + munmap(ar->mmap, ar->size); + + free(ar); + } + + return NULL; +} + +void lmo_close(lmo_archive_t *ar) +{ + if (ar != NULL) + { + if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) + munmap(ar->mmap, ar->size); + + close(ar->fd); + free(ar); + + ar = NULL; + } +} + + +lmo_catalog_t *_lmo_catalogs = NULL; +lmo_catalog_t *_lmo_active_catalog = NULL; + +int lmo_load_catalog(const char *lang, const char *dir) +{ + DIR *dh = NULL; + char pattern[16]; + char path[PATH_MAX]; + struct dirent *de = NULL; + + lmo_archive_t *ar = NULL; + lmo_catalog_t *cat = NULL; + + if (!lmo_change_catalog(lang)) + return 0; + + if (!dir || !(dh = opendir(dir))) + goto err; + + if (!(cat = malloc(sizeof(*cat)))) + goto err; + + memset(cat, 0, sizeof(*cat)); + + snprintf(cat->lang, sizeof(cat->lang), "%s", lang); + snprintf(pattern, sizeof(pattern), "*.%s.lmo", lang); + + while ((de = readdir(dh)) != NULL) + { + if (!fnmatch(pattern, de->d_name, 0)) + { + snprintf(path, sizeof(path), "%s/%s", dir, de->d_name); + ar = lmo_open(path); + + if (ar) + { + ar->next = cat->archives; + cat->archives = ar; + } + } + } + + closedir(dh); + + cat->next = _lmo_catalogs; + _lmo_catalogs = cat; + + if (!_lmo_active_catalog) + _lmo_active_catalog = cat; + + return 0; + +err: + if (dh) closedir(dh); + if (cat) free(cat); + + return -1; +} + +int lmo_change_catalog(const char *lang) +{ + lmo_catalog_t *cat; + + for (cat = _lmo_catalogs; cat; cat = cat->next) + { + if (!strncmp(cat->lang, lang, sizeof(cat->lang))) + { + _lmo_active_catalog = cat; + return 0; + } + } + + return -1; +} + +static lmo_entry_t * lmo_find_entry(lmo_archive_t *ar, uint32_t hash) +{ + unsigned int m, l, r; + uint32_t k; + + l = 0; + r = ar->length - 1; + + while (1) + { + m = l + ((r - l) / 2); + + if (r < l) + break; + + k = ntohl(ar->index[m].key_id); + + if (k == hash) + return &ar->index[m]; + + if (k > hash) + { + if (!m) + break; + + r = m - 1; + } + else + { + l = m + 1; + } + } + + return NULL; +} + +int lmo_translate(const char *key, int keylen, char **out, int *outlen) +{ + uint32_t hash; + lmo_entry_t *e; + lmo_archive_t *ar; + + if (!key || !_lmo_active_catalog) + return -2; + + hash = lmo_canon_hash(key, keylen); + + for (ar = _lmo_active_catalog->archives; ar; ar = ar->next) + { + if ((e = lmo_find_entry(ar, hash)) != NULL) + { + *out = ar->mmap + ntohl(e->offset); + *outlen = ntohl(e->length); + return 0; + } + } + + return -1; +} + +void lmo_close_catalog(const char *lang) +{ + lmo_archive_t *ar, *next; + lmo_catalog_t *cat, *prev; + + for (prev = NULL, cat = _lmo_catalogs; cat; prev = cat, cat = cat->next) + { + if (!strncmp(cat->lang, lang, sizeof(cat->lang))) + { + if (prev) + prev->next = cat->next; + else + _lmo_catalogs = cat->next; + + for (ar = cat->archives; ar; ar = next) + { + next = ar->next; + lmo_close(ar); + } + + free(cat); + break; + } + } +} diff --git a/feeds/luci/modules/luci-base/src/template_lmo.h b/feeds/luci/modules/luci-base/src/template_lmo.h new file mode 100644 index 0000000..f251c63 --- /dev/null +++ b/feeds/luci/modules/luci-base/src/template_lmo.h @@ -0,0 +1,92 @@ +/* + * lmo - Lua Machine Objects - General header + * + * Copyright (C) 2009-2012 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _TEMPLATE_LMO_H_ +#define _TEMPLATE_LMO_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if (defined(__GNUC__) && defined(__i386__)) +#define sfh_get16(d) (*((const uint16_t *) (d))) +#else +#define sfh_get16(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\ + +(uint32_t)(((const uint8_t *)(d))[0]) ) +#endif + + +struct lmo_entry { + uint32_t key_id; + uint32_t val_id; + uint32_t offset; + uint32_t length; +} __attribute__((packed)); + +typedef struct lmo_entry lmo_entry_t; + + +struct lmo_archive { + int fd; + int length; + uint32_t size; + lmo_entry_t *index; + char *mmap; + char *end; + struct lmo_archive *next; +}; + +typedef struct lmo_archive lmo_archive_t; + + +struct lmo_catalog { + char lang[6]; + struct lmo_archive *archives; + struct lmo_catalog *next; +}; + +typedef struct lmo_catalog lmo_catalog_t; + + +uint32_t sfh_hash(const char *data, int len); +uint32_t lmo_canon_hash(const char *data, int len); + +lmo_archive_t * lmo_open(const char *file); +void lmo_close(lmo_archive_t *ar); + + +extern lmo_catalog_t *_lmo_catalogs; +extern lmo_catalog_t *_lmo_active_catalog; + +int lmo_load_catalog(const char *lang, const char *dir); +int lmo_change_catalog(const char *lang); +int lmo_translate(const char *key, int keylen, char **out, int *outlen); +void lmo_close_catalog(const char *lang); + +#endif diff --git a/feeds/luci/modules/luci-base/src/template_lualib.c b/feeds/luci/modules/luci-base/src/template_lualib.c new file mode 100644 index 0000000..d5c8dd6 --- /dev/null +++ b/feeds/luci/modules/luci-base/src/template_lualib.c @@ -0,0 +1,179 @@ +/* + * LuCI Template - Lua binding + * + * Copyright (C) 2009 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "template_lualib.h" + +static int template_L_do_parse(lua_State *L, struct template_parser *parser, const char *chunkname) +{ + int lua_status, rv; + + if (!parser) + { + lua_pushnil(L); + lua_pushinteger(L, errno); + lua_pushstring(L, strerror(errno)); + return 3; + } + + lua_status = lua_load(L, template_reader, parser, chunkname); + + if (lua_status == 0) + rv = 1; + else + rv = template_error(L, parser); + + template_close(parser); + + return rv; +} + +int template_L_parse(lua_State *L) +{ + const char *file = luaL_checkstring(L, 1); + struct template_parser *parser = template_open(file); + + return template_L_do_parse(L, parser, file); +} + +int template_L_parse_string(lua_State *L) +{ + size_t len; + const char *str = luaL_checklstring(L, 1, &len); + struct template_parser *parser = template_string(str, len); + + return template_L_do_parse(L, parser, "[string]"); +} + +int template_L_utf8(lua_State *L) +{ + size_t len = 0; + const char *str = luaL_checklstring(L, 1, &len); + char *res = utf8(str, len); + + if (res != NULL) + { + lua_pushstring(L, res); + free(res); + + return 1; + } + + return 0; +} + +int template_L_pcdata(lua_State *L) +{ + size_t len = 0; + const char *str = luaL_checklstring(L, 1, &len); + char *res = pcdata(str, len); + + if (res != NULL) + { + lua_pushstring(L, res); + free(res); + + return 1; + } + + return 0; +} + +int template_L_striptags(lua_State *L) +{ + size_t len = 0; + const char *str = luaL_checklstring(L, 1, &len); + char *res = striptags(str, len); + + if (res != NULL) + { + lua_pushstring(L, res); + free(res); + + return 1; + } + + return 0; +} + +static int template_L_load_catalog(lua_State *L) { + const char *lang = luaL_optstring(L, 1, "en"); + const char *dir = luaL_optstring(L, 2, NULL); + lua_pushboolean(L, !lmo_load_catalog(lang, dir)); + return 1; +} + +static int template_L_close_catalog(lua_State *L) { + const char *lang = luaL_optstring(L, 1, "en"); + lmo_close_catalog(lang); + return 0; +} + +static int template_L_change_catalog(lua_State *L) { + const char *lang = luaL_optstring(L, 1, "en"); + lua_pushboolean(L, !lmo_change_catalog(lang)); + return 1; +} + +static int template_L_translate(lua_State *L) { + size_t len; + char *tr; + int trlen; + const char *key = luaL_checklstring(L, 1, &len); + + switch (lmo_translate(key, len, &tr, &trlen)) + { + case 0: + lua_pushlstring(L, tr, trlen); + return 1; + + case -1: + return 0; + } + + lua_pushnil(L); + lua_pushstring(L, "no catalog loaded"); + return 2; +} + +static int template_L_hash(lua_State *L) { + size_t len; + const char *key = luaL_checklstring(L, 1, &len); + lua_pushinteger(L, sfh_hash(key, len)); + return 1; +} + + +/* module table */ +static const luaL_reg R[] = { + { "parse", template_L_parse }, + { "parse_string", template_L_parse_string }, + { "utf8", template_L_utf8 }, + { "pcdata", template_L_pcdata }, + { "striptags", template_L_striptags }, + { "load_catalog", template_L_load_catalog }, + { "close_catalog", template_L_close_catalog }, + { "change_catalog", template_L_change_catalog }, + { "translate", template_L_translate }, + { "hash", template_L_hash }, + { NULL, NULL } +}; + +LUALIB_API int luaopen_luci_template_parser(lua_State *L) { + luaL_register(L, TEMPLATE_LUALIB_META, R); + return 1; +} diff --git a/feeds/luci/modules/luci-base/src/template_lualib.h b/feeds/luci/modules/luci-base/src/template_lualib.h new file mode 100644 index 0000000..ff7746d --- /dev/null +++ b/feeds/luci/modules/luci-base/src/template_lualib.h @@ -0,0 +1,30 @@ +/* + * LuCI Template - Lua library header + * + * Copyright (C) 2009 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _TEMPLATE_LUALIB_H_ +#define _TEMPLATE_LUALIB_H_ + +#include "template_parser.h" +#include "template_utils.h" +#include "template_lmo.h" + +#define TEMPLATE_LUALIB_META "template.parser" + +LUALIB_API int luaopen_luci_template_parser(lua_State *L); + +#endif diff --git a/feeds/luci/modules/luci-base/src/template_parser.c b/feeds/luci/modules/luci-base/src/template_parser.c new file mode 100644 index 0000000..0ef08c6 --- /dev/null +++ b/feeds/luci/modules/luci-base/src/template_parser.c @@ -0,0 +1,419 @@ +/* + * LuCI Template - Parser implementation + * + * Copyright (C) 2009-2012 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "template_parser.h" +#include "template_utils.h" +#include "template_lmo.h" + + +/* leading and trailing code for different types */ +const char *gen_code[9][2] = { + { NULL, NULL }, + { "write(\"", "\")" }, + { NULL, NULL }, + { "write(tostring(", " or \"\"))" }, + { "include(\"", "\")" }, + { "write(\"", "\")" }, + { "write(\"", "\")" }, + { NULL, " " }, + { NULL, NULL }, +}; + +/* Simple strstr() like function that takes len arguments for both haystack and needle. */ +static char *strfind(char *haystack, int hslen, const char *needle, int ndlen) +{ + int match = 0; + int i, j; + + for( i = 0; i < hslen; i++ ) + { + if( haystack[i] == needle[0] ) + { + match = ((ndlen == 1) || ((i + ndlen) <= hslen)); + + for( j = 1; (j < ndlen) && ((i + j) < hslen); j++ ) + { + if( haystack[i+j] != needle[j] ) + { + match = 0; + break; + } + } + + if( match ) + return &haystack[i]; + } + } + + return NULL; +} + +struct template_parser * template_open(const char *file) +{ + struct stat s; + struct template_parser *parser; + + if (!(parser = malloc(sizeof(*parser)))) + goto err; + + memset(parser, 0, sizeof(*parser)); + parser->fd = -1; + parser->file = file; + + if (stat(file, &s)) + goto err; + + if ((parser->fd = open(file, O_RDONLY)) < 0) + goto err; + + parser->size = s.st_size; + parser->data = mmap(NULL, parser->size, PROT_READ, MAP_PRIVATE, + parser->fd, 0); + + if (parser->data != MAP_FAILED) + { + parser->off = parser->data; + parser->cur_chunk.type = T_TYPE_INIT; + parser->cur_chunk.s = parser->data; + parser->cur_chunk.e = parser->data; + + return parser; + } + +err: + template_close(parser); + return NULL; +} + +struct template_parser * template_string(const char *str, uint32_t len) +{ + struct template_parser *parser; + + if (!str) { + errno = EINVAL; + goto err; + } + + if (!(parser = malloc(sizeof(*parser)))) + goto err; + + memset(parser, 0, sizeof(*parser)); + parser->fd = -1; + + parser->size = len; + parser->data = (char*)str; + + parser->off = parser->data; + parser->cur_chunk.type = T_TYPE_INIT; + parser->cur_chunk.s = parser->data; + parser->cur_chunk.e = parser->data; + + return parser; + +err: + template_close(parser); + return NULL; +} + +void template_close(struct template_parser *parser) +{ + if (!parser) + return; + + if (parser->gc != NULL) + free(parser->gc); + + /* if file is not set, we were parsing a string */ + if (parser->file) { + if ((parser->data != NULL) && (parser->data != MAP_FAILED)) + munmap(parser->data, parser->size); + + if (parser->fd >= 0) + close(parser->fd); + } + + free(parser); +} + +void template_text(struct template_parser *parser, const char *e) +{ + const char *s = parser->off; + + if (s < (parser->data + parser->size)) + { + if (parser->strip_after) + { + while ((s <= e) && isspace(*s)) + s++; + } + + parser->cur_chunk.type = T_TYPE_TEXT; + } + else + { + parser->cur_chunk.type = T_TYPE_EOF; + } + + parser->cur_chunk.line = parser->line; + parser->cur_chunk.s = s; + parser->cur_chunk.e = e; +} + +void template_code(struct template_parser *parser, const char *e) +{ + const char *s = parser->off; + + parser->strip_before = 0; + parser->strip_after = 0; + + if (*s == '-') + { + parser->strip_before = 1; + for (s++; (s <= e) && (*s == ' ' || *s == '\t'); s++); + } + + if (*(e-1) == '-') + { + parser->strip_after = 1; + for (e--; (e >= s) && (*e == ' ' || *e == '\t'); e--); + } + + switch (*s) + { + /* comment */ + case '#': + s++; + parser->cur_chunk.type = T_TYPE_COMMENT; + break; + + /* include */ + case '+': + s++; + parser->cur_chunk.type = T_TYPE_INCLUDE; + break; + + /* translate */ + case ':': + s++; + parser->cur_chunk.type = T_TYPE_I18N; + break; + + /* translate raw */ + case '_': + s++; + parser->cur_chunk.type = T_TYPE_I18N_RAW; + break; + + /* expr */ + case '=': + s++; + parser->cur_chunk.type = T_TYPE_EXPR; + break; + + /* code */ + default: + parser->cur_chunk.type = T_TYPE_CODE; + break; + } + + parser->cur_chunk.line = parser->line; + parser->cur_chunk.s = s; + parser->cur_chunk.e = e; +} + +static const char * +template_format_chunk(struct template_parser *parser, size_t *sz) +{ + const char *s, *p; + const char *head, *tail; + struct template_chunk *c = &parser->prv_chunk; + struct template_buffer *buf; + + *sz = 0; + s = parser->gc = NULL; + + if (parser->strip_before && c->type == T_TYPE_TEXT) + { + while ((c->e > c->s) && isspace(*(c->e - 1))) + c->e--; + } + + /* empty chunk */ + if (c->s == c->e) + { + if (c->type == T_TYPE_EOF) + { + *sz = 0; + s = NULL; + } + else + { + *sz = 1; + s = " "; + } + } + + /* format chunk */ + else if ((buf = buf_init(c->e - c->s)) != NULL) + { + if ((head = gen_code[c->type][0]) != NULL) + buf_append(buf, head, strlen(head)); + + switch (c->type) + { + case T_TYPE_TEXT: + luastr_escape(buf, c->s, c->e - c->s, 0); + break; + + case T_TYPE_EXPR: + buf_append(buf, c->s, c->e - c->s); + for (p = c->s; p < c->e; p++) + parser->line += (*p == '\n'); + break; + + case T_TYPE_INCLUDE: + luastr_escape(buf, c->s, c->e - c->s, 0); + break; + + case T_TYPE_I18N: + luastr_translate(buf, c->s, c->e - c->s, 1); + break; + + case T_TYPE_I18N_RAW: + luastr_translate(buf, c->s, c->e - c->s, 0); + break; + + case T_TYPE_CODE: + buf_append(buf, c->s, c->e - c->s); + for (p = c->s; p < c->e; p++) + parser->line += (*p == '\n'); + break; + } + + if ((tail = gen_code[c->type][1]) != NULL) + buf_append(buf, tail, strlen(tail)); + + *sz = buf_length(buf); + s = parser->gc = buf_destroy(buf); + + if (!*sz) + { + *sz = 1; + s = " "; + } + } + + return s; +} + +const char *template_reader(lua_State *L, void *ud, size_t *sz) +{ + struct template_parser *parser = ud; + int rem = parser->size - (parser->off - parser->data); + char *tag; + + parser->prv_chunk = parser->cur_chunk; + + /* free previous string */ + if (parser->gc) + { + free(parser->gc); + parser->gc = NULL; + } + + /* before tag */ + if (!parser->in_expr) + { + if ((tag = strfind(parser->off, rem, "<%", 2)) != NULL) + { + template_text(parser, tag); + parser->off = tag + 2; + parser->in_expr = 1; + } + else + { + template_text(parser, parser->data + parser->size); + parser->off = parser->data + parser->size; + } + } + + /* inside tag */ + else + { + if ((tag = strfind(parser->off, rem, "%>", 2)) != NULL) + { + template_code(parser, tag); + parser->off = tag + 2; + parser->in_expr = 0; + } + else + { + /* unexpected EOF */ + template_code(parser, parser->data + parser->size); + + *sz = 1; + return "\033"; + } + } + + return template_format_chunk(parser, sz); +} + +int template_error(lua_State *L, struct template_parser *parser) +{ + const char *err = luaL_checkstring(L, -1); + const char *off = parser->prv_chunk.s; + const char *ptr; + char msg[1024]; + int line = 0; + int chunkline = 0; + + if ((ptr = strfind((char *)err, strlen(err), "]:", 2)) != NULL) + { + chunkline = atoi(ptr + 2) - parser->prv_chunk.line; + + while (*ptr) + { + if (*ptr++ == ' ') + { + err = ptr; + break; + } + } + } + + if (strfind((char *)err, strlen(err), "'char(27)'", 10) != NULL) + { + off = parser->data + parser->size; + err = "'%>' expected before end of file"; + chunkline = 0; + } + + for (ptr = parser->data; ptr < off; ptr++) + if (*ptr == '\n') + line++; + + snprintf(msg, sizeof(msg), "Syntax error in %s:%d: %s", + parser->file ? parser->file : "[string]", line + chunkline, err ? err : "(unknown error)"); + + lua_pushnil(L); + lua_pushinteger(L, line + chunkline); + lua_pushstring(L, msg); + + return 3; +} diff --git a/feeds/luci/modules/luci-base/src/template_parser.h b/feeds/luci/modules/luci-base/src/template_parser.h new file mode 100644 index 0000000..2415e87 --- /dev/null +++ b/feeds/luci/modules/luci-base/src/template_parser.h @@ -0,0 +1,80 @@ +/* + * LuCI Template - Parser header + * + * Copyright (C) 2009 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _TEMPLATE_PARSER_H_ +#define _TEMPLATE_PARSER_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +/* code types */ +#define T_TYPE_INIT 0 +#define T_TYPE_TEXT 1 +#define T_TYPE_COMMENT 2 +#define T_TYPE_EXPR 3 +#define T_TYPE_INCLUDE 4 +#define T_TYPE_I18N 5 +#define T_TYPE_I18N_RAW 6 +#define T_TYPE_CODE 7 +#define T_TYPE_EOF 8 + + +struct template_chunk { + const char *s; + const char *e; + int type; + int line; +}; + +/* parser state */ +struct template_parser { + int fd; + uint32_t size; + char *data; + char *off; + char *gc; + int line; + int in_expr; + int strip_before; + int strip_after; + struct template_chunk prv_chunk; + struct template_chunk cur_chunk; + const char *file; +}; + +struct template_parser * template_open(const char *file); +struct template_parser * template_string(const char *str, uint32_t len); +void template_close(struct template_parser *parser); + +const char *template_reader(lua_State *L, void *ud, size_t *sz); +int template_error(lua_State *L, struct template_parser *parser); + +#endif diff --git a/feeds/luci/modules/luci-base/src/template_utils.c b/feeds/luci/modules/luci-base/src/template_utils.c new file mode 100644 index 0000000..3979487 --- /dev/null +++ b/feeds/luci/modules/luci-base/src/template_utils.c @@ -0,0 +1,484 @@ +/* + * LuCI Template - Utility functions + * + * Copyright (C) 2010 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "template_utils.h" +#include "template_lmo.h" + +/* initialize a buffer object */ +struct template_buffer * buf_init(int size) +{ + struct template_buffer *buf; + + if (size <= 0) + size = 1024; + + buf = (struct template_buffer *)malloc(sizeof(struct template_buffer)); + + if (buf != NULL) + { + buf->fill = 0; + buf->size = size; + buf->data = malloc(buf->size); + + if (buf->data != NULL) + { + buf->dptr = buf->data; + buf->data[0] = 0; + + return buf; + } + + free(buf); + } + + return NULL; +} + +/* grow buffer */ +int buf_grow(struct template_buffer *buf, int size) +{ + unsigned int off = (buf->dptr - buf->data); + char *data; + + if (size <= 0) + size = 1024; + + data = realloc(buf->data, buf->size + size); + + if (data != NULL) + { + buf->data = data; + buf->dptr = data + off; + buf->size += size; + + return buf->size; + } + + return 0; +} + +/* put one char into buffer object */ +int buf_putchar(struct template_buffer *buf, char c) +{ + if( ((buf->fill + 1) >= buf->size) && !buf_grow(buf, 0) ) + return 0; + + *(buf->dptr++) = c; + *(buf->dptr) = 0; + + buf->fill++; + return 1; +} + +/* append data to buffer */ +int buf_append(struct template_buffer *buf, const char *s, int len) +{ + if ((buf->fill + len + 1) >= buf->size) + { + if (!buf_grow(buf, len + 1)) + return 0; + } + + memcpy(buf->dptr, s, len); + buf->fill += len; + buf->dptr += len; + + *(buf->dptr) = 0; + + return len; +} + +/* read buffer length */ +int buf_length(struct template_buffer *buf) +{ + return buf->fill; +} + +/* destroy buffer object and return pointer to data */ +char * buf_destroy(struct template_buffer *buf) +{ + char *data = buf->data; + + free(buf); + return data; +} + + +/* calculate the number of expected continuation chars */ +static inline int mb_num_chars(unsigned char c) +{ + if ((c & 0xE0) == 0xC0) + return 2; + else if ((c & 0xF0) == 0xE0) + return 3; + else if ((c & 0xF8) == 0xF0) + return 4; + else if ((c & 0xFC) == 0xF8) + return 5; + else if ((c & 0xFE) == 0xFC) + return 6; + + return 1; +} + +/* test whether the given byte is a valid continuation char */ +static inline int mb_is_cont(unsigned char c) +{ + return ((c >= 0x80) && (c <= 0xBF)); +} + +/* test whether the byte sequence at the given pointer with the given + * length is the shortest possible representation of the code point */ +static inline int mb_is_shortest(unsigned char *s, int n) +{ + switch (n) + { + case 2: + /* 1100000x (10xxxxxx) */ + return !(((*s >> 1) == 0x60) && + ((*(s+1) >> 6) == 0x02)); + + case 3: + /* 11100000 100xxxxx (10xxxxxx) */ + return !((*s == 0xE0) && + ((*(s+1) >> 5) == 0x04) && + ((*(s+2) >> 6) == 0x02)); + + case 4: + /* 11110000 1000xxxx (10xxxxxx 10xxxxxx) */ + return !((*s == 0xF0) && + ((*(s+1) >> 4) == 0x08) && + ((*(s+2) >> 6) == 0x02) && + ((*(s+3) >> 6) == 0x02)); + + case 5: + /* 11111000 10000xxx (10xxxxxx 10xxxxxx 10xxxxxx) */ + return !((*s == 0xF8) && + ((*(s+1) >> 3) == 0x10) && + ((*(s+2) >> 6) == 0x02) && + ((*(s+3) >> 6) == 0x02) && + ((*(s+4) >> 6) == 0x02)); + + case 6: + /* 11111100 100000xx (10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx) */ + return !((*s == 0xF8) && + ((*(s+1) >> 2) == 0x20) && + ((*(s+2) >> 6) == 0x02) && + ((*(s+3) >> 6) == 0x02) && + ((*(s+4) >> 6) == 0x02) && + ((*(s+5) >> 6) == 0x02)); + } + + return 1; +} + +/* test whether the byte sequence at the given pointer with the given + * length is an UTF-16 surrogate */ +static inline int mb_is_surrogate(unsigned char *s, int n) +{ + return ((n == 3) && (*s == 0xED) && (*(s+1) >= 0xA0) && (*(s+1) <= 0xBF)); +} + +/* test whether the byte sequence at the given pointer with the given + * length is an illegal UTF-8 code point */ +static inline int mb_is_illegal(unsigned char *s, int n) +{ + return ((n == 3) && (*s == 0xEF) && (*(s+1) == 0xBF) && + (*(s+2) >= 0xBE) && (*(s+2) <= 0xBF)); +} + + +/* scan given source string, validate UTF-8 sequence and store result + * in given buffer object */ +static int _validate_utf8(unsigned char **s, int l, struct template_buffer *buf) +{ + unsigned char *ptr = *s; + unsigned int o = 0, v, n; + + /* ascii byte without null */ + if ((*(ptr+0) >= 0x01) && (*(ptr+0) <= 0x7F)) + { + if (!buf_putchar(buf, *ptr++)) + return 0; + + o = 1; + } + + /* multi byte sequence */ + else if ((n = mb_num_chars(*ptr)) > 1) + { + /* count valid chars */ + for (v = 1; (v <= n) && ((o+v) < l) && mb_is_cont(*(ptr+v)); v++); + + switch (n) + { + case 6: + case 5: + /* five and six byte sequences are always invalid */ + if (!buf_putchar(buf, '?')) + return 0; + + break; + + default: + /* if the number of valid continuation bytes matches the + * expected number and if the sequence is legal, copy + * the bytes to the destination buffer */ + if ((v == n) && mb_is_shortest(ptr, n) && + !mb_is_surrogate(ptr, n) && !mb_is_illegal(ptr, n)) + { + /* copy sequence */ + if (!buf_append(buf, (char *)ptr, n)) + return 0; + } + + /* the found sequence is illegal, skip it */ + else + { + /* invalid sequence */ + if (!buf_putchar(buf, '?')) + return 0; + } + + break; + } + + /* advance beyound the last found valid continuation char */ + o = v; + ptr += v; + } + + /* invalid byte (0x00) */ + else + { + if (!buf_putchar(buf, '?')) /* or 0xEF, 0xBF, 0xBD */ + return 0; + + o = 1; + ptr++; + } + + *s = ptr; + return o; +} + +/* sanitize given string and replace all invalid UTF-8 sequences with "?" */ +char * utf8(const char *s, unsigned int l) +{ + struct template_buffer *buf = buf_init(l); + unsigned char *ptr = (unsigned char *)s; + unsigned int v, o; + + if (!buf) + return NULL; + + for (o = 0; o < l; o++) + { + /* ascii char */ + if ((*ptr >= 0x01) && (*ptr <= 0x7F)) + { + if (!buf_putchar(buf, (char)*ptr++)) + break; + } + + /* invalid byte or multi byte sequence */ + else + { + if (!(v = _validate_utf8(&ptr, l - o, buf))) + break; + + o += (v - 1); + } + } + + return buf_destroy(buf); +} + +/* Sanitize given string and strip all invalid XML bytes + * Validate UTF-8 sequences + * Escape XML control chars */ +char * pcdata(const char *s, unsigned int l) +{ + struct template_buffer *buf = buf_init(l); + unsigned char *ptr = (unsigned char *)s; + unsigned int o, v; + char esq[8]; + int esl; + + if (!buf) + return NULL; + + for (o = 0; o < l; o++) + { + /* Invalid XML bytes */ + if (((*ptr >= 0x00) && (*ptr <= 0x08)) || + ((*ptr >= 0x0B) && (*ptr <= 0x0C)) || + ((*ptr >= 0x0E) && (*ptr <= 0x1F)) || + (*ptr == 0x7F)) + { + ptr++; + } + + /* Escapes */ + else if ((*ptr == 0x26) || + (*ptr == 0x27) || + (*ptr == 0x22) || + (*ptr == 0x3C) || + (*ptr == 0x3E)) + { + esl = snprintf(esq, sizeof(esq), "&#%i;", *ptr); + + if (!buf_append(buf, esq, esl)) + break; + + ptr++; + } + + /* ascii char */ + else if (*ptr <= 0x7F) + { + buf_putchar(buf, (char)*ptr++); + } + + /* multi byte sequence */ + else + { + if (!(v = _validate_utf8(&ptr, l - o, buf))) + break; + + o += (v - 1); + } + } + + return buf_destroy(buf); +} + +char * striptags(const char *s, unsigned int l) +{ + struct template_buffer *buf = buf_init(l); + unsigned char *ptr = (unsigned char *)s; + unsigned char *end = ptr + l; + unsigned char *tag; + unsigned char prev; + char esq[8]; + int esl; + + for (prev = ' '; ptr < end; ptr++) + { + if ((*ptr == '<') && ((ptr + 2) < end) && + ((*(ptr + 1) == '/') || isalpha(*(ptr + 1)))) + { + for (tag = ptr; tag < end; tag++) + { + if (*tag == '>') + { + if (!isspace(prev)) + buf_putchar(buf, ' '); + + ptr = tag; + prev = ' '; + break; + } + } + } + else if (isspace(*ptr)) + { + if (!isspace(prev)) + buf_putchar(buf, *ptr); + + prev = *ptr; + } + else + { + switch(*ptr) + { + case '"': + case '\'': + case '<': + case '>': + case '&': + esl = snprintf(esq, sizeof(esq), "&#%i;", *ptr); + buf_append(buf, esq, esl); + break; + + default: + buf_putchar(buf, *ptr); + break; + } + + prev = *ptr; + } + } + + return buf_destroy(buf); +} + +void luastr_escape(struct template_buffer *out, const char *s, unsigned int l, + int escape_xml) +{ + int esl; + char esq[8]; + char *ptr; + + for (ptr = (char *)s; ptr < (s + l); ptr++) + { + switch (*ptr) + { + case '\\': + buf_append(out, "\\\\", 2); + break; + + case '"': + if (escape_xml) + buf_append(out, """, 5); + else + buf_append(out, "\\\"", 2); + break; + + case '\n': + buf_append(out, "\\n", 2); + break; + + case '\'': + case '&': + case '<': + case '>': + if (escape_xml) + { + esl = snprintf(esq, sizeof(esq), "&#%i;", *ptr); + buf_append(out, esq, esl); + break; + } + + default: + buf_putchar(out, *ptr); + } + } +} + +void luastr_translate(struct template_buffer *out, const char *s, unsigned int l, + int escape_xml) +{ + char *tr; + int trlen; + + if (!lmo_translate(s, l, &tr, &trlen)) + luastr_escape(out, tr, trlen, escape_xml); + else + luastr_escape(out, s, l, escape_xml); +} diff --git a/feeds/luci/modules/luci-base/src/template_utils.h b/feeds/luci/modules/luci-base/src/template_utils.h new file mode 100644 index 0000000..32a79f9 --- /dev/null +++ b/feeds/luci/modules/luci-base/src/template_utils.h @@ -0,0 +1,49 @@ +/* + * LuCI Template - Utility header + * + * Copyright (C) 2010-2012 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _TEMPLATE_UTILS_H_ +#define _TEMPLATE_UTILS_H_ + +#include +#include +#include + + +/* buffer object */ +struct template_buffer { + char *data; + char *dptr; + unsigned int size; + unsigned int fill; +}; + +struct template_buffer * buf_init(int size); +int buf_grow(struct template_buffer *buf, int size); +int buf_putchar(struct template_buffer *buf, char c); +int buf_append(struct template_buffer *buf, const char *s, int len); +int buf_length(struct template_buffer *buf); +char * buf_destroy(struct template_buffer *buf); + +char * utf8(const char *s, unsigned int l); +char * pcdata(const char *s, unsigned int l); +char * striptags(const char *s, unsigned int l); + +void luastr_escape(struct template_buffer *out, const char *s, unsigned int l, int escape_xml); +void luastr_translate(struct template_buffer *out, const char *s, unsigned int l, int escape_xml); + +#endif diff --git a/feeds/luci/modules/luci-mod-admin-full/Makefile b/feeds/luci/modules/luci-mod-admin-full/Makefile new file mode 100644 index 0000000..5fed279 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/Makefile @@ -0,0 +1,17 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Administration - full-featured for full control +LUCI_DEPENDS:=+luci-base + +PKG_BUILD_DEPENDS:=iwinfo + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/bandwidth.svg b/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/bandwidth.svg new file mode 100644 index 0000000..4f91488 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/bandwidth.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/connections.svg b/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/connections.svg new file mode 100644 index 0000000..816f7e6 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/connections.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/load.svg b/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/load.svg new file mode 100644 index 0000000..d681702 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/load.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/wifirate.svg b/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/wifirate.svg new file mode 100644 index 0000000..d3e848b --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/wifirate.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/wireless.svg b/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/wireless.svg new file mode 100644 index 0000000..99d9840 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/htdocs/luci-static/resources/wireless.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/filebrowser.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/filebrowser.lua new file mode 100644 index 0000000..2572615 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/filebrowser.lua @@ -0,0 +1,9 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.admin.filebrowser", package.seeall) + +function index() + entry( {"admin", "filebrowser"}, template("cbi/filebrowser") ).leaf = true +end diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua new file mode 100644 index 0000000..cc8c2e3 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua @@ -0,0 +1,42 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.admin.index", package.seeall) + +function index() + local root = node() + if not root.target then + root.target = alias("admin") + root.index = true + end + + local page = node("admin") + page.target = firstchild() + page.title = _("Administration") + page.order = 10 + page.sysauth = "root" + page.sysauth_authenticator = "htmlauth" + page.ucidata = true + page.index = true + + -- Empty services menu to be populated by addons + entry({"admin", "services"}, firstchild(), _("Services"), 40).index = true + + entry({"admin", "logout"}, call("action_logout"), _("Logout"), 90) +end + +function action_logout() + local dsp = require "luci.dispatcher" + local utl = require "luci.util" + local sid = dsp.context.authsession + + if sid then + utl.ubus("session", "destroy", { ubus_rpc_session = sid }) + + luci.http.header("Set-Cookie", "sysauth=%s; expires=%s; path=%s/" %{ + sid, 'Thu, 01 Jan 1970 01:00:00 GMT', dsp.build_url() + }) + end + + luci.http.redirect(dsp.build_url()) +end diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua new file mode 100644 index 0000000..3b5f3eb --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua @@ -0,0 +1,428 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2011-2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.admin.network", package.seeall) + +function index() + local uci = require("luci.model.uci").cursor() + local page + + page = node("admin", "network") + page.target = firstchild() + page.title = _("Network") + page.order = 50 + page.index = true + +-- if page.inreq then + local has_switch = false + + uci:foreach("network", "switch", + function(s) + has_switch = true + return false + end) + + if has_switch then + page = node("admin", "network", "vlan") + page.target = cbi("admin_network/vlan") + page.title = _("Switch") + page.order = 20 + + page = entry({"admin", "network", "switch_status"}, call("switch_status"), nil) + page.leaf = true + end + + + local has_wifi = false + + uci:foreach("wireless", "wifi-device", + function(s) + has_wifi = true + return false + end) + + if has_wifi then + page = entry({"admin", "network", "wireless_join"}, post("wifi_join"), nil) + page.leaf = true + + page = entry({"admin", "network", "wireless_add"}, post("wifi_add"), nil) + page.leaf = true + + page = entry({"admin", "network", "wireless_delete"}, post("wifi_delete"), nil) + page.leaf = true + + page = entry({"admin", "network", "wireless_status"}, call("wifi_status"), nil) + page.leaf = true + + page = entry({"admin", "network", "wireless_reconnect"}, post("wifi_reconnect"), nil) + page.leaf = true + + page = entry({"admin", "network", "wireless_shutdown"}, post("wifi_shutdown"), nil) + page.leaf = true + + page = entry({"admin", "network", "wireless"}, arcombine(template("admin_network/wifi_overview"), cbi("admin_network/wifi")), _("Wireless"), 15) + page.leaf = true + page.subindex = true + + if page.inreq then + local wdev + local net = require "luci.model.network".init(uci) + for _, wdev in ipairs(net:get_wifidevs()) do + local wnet + for _, wnet in ipairs(wdev:get_wifinets()) do + entry( + {"admin", "network", "wireless", wnet:id()}, + alias("admin", "network", "wireless"), + wdev:name() .. ": " .. wnet:shortname() + ) + end + end + end + end + + + page = entry({"admin", "network", "iface_add"}, cbi("admin_network/iface_add"), nil) + page.leaf = true + + page = entry({"admin", "network", "iface_delete"}, post("iface_delete"), nil) + page.leaf = true + + page = entry({"admin", "network", "iface_status"}, call("iface_status"), nil) + page.leaf = true + + page = entry({"admin", "network", "iface_reconnect"}, post("iface_reconnect"), nil) + page.leaf = true + + page = entry({"admin", "network", "iface_shutdown"}, post("iface_shutdown"), nil) + page.leaf = true + + page = entry({"admin", "network", "network"}, arcombine(cbi("admin_network/network"), cbi("admin_network/ifaces")), _("Interfaces"), 10) + page.leaf = true + page.subindex = true + + if page.inreq then + uci:foreach("network", "interface", + function (section) + local ifc = section[".name"] + if ifc ~= "loopback" then + entry({"admin", "network", "network", ifc}, + true, ifc:upper()) + end + end) + end + + + if nixio.fs.access("/etc/config/dhcp") then + page = node("admin", "network", "dhcp") + page.target = cbi("admin_network/dhcp") + page.title = _("DHCP and DNS") + page.order = 30 + + page = entry({"admin", "network", "dhcplease_status"}, call("lease_status"), nil) + page.leaf = true + + page = node("admin", "network", "hosts") + page.target = cbi("admin_network/hosts") + page.title = _("Hostnames") + page.order = 40 + end + + page = node("admin", "network", "routes") + page.target = cbi("admin_network/routes") + page.title = _("Static Routes") + page.order = 50 + + page = node("admin", "network", "diagnostics") + page.target = template("admin_network/diagnostics") + page.title = _("Diagnostics") + page.order = 60 + + page = entry({"admin", "network", "diag_ping"}, post("diag_ping"), nil) + page.leaf = true + + page = entry({"admin", "network", "diag_nslookup"}, post("diag_nslookup"), nil) + page.leaf = true + + page = entry({"admin", "network", "diag_traceroute"}, post("diag_traceroute"), nil) + page.leaf = true + + page = entry({"admin", "network", "diag_ping6"}, post("diag_ping6"), nil) + page.leaf = true + + page = entry({"admin", "network", "diag_traceroute6"}, post("diag_traceroute6"), nil) + page.leaf = true +-- end +end + +function wifi_join() + local tpl = require "luci.template" + local http = require "luci.http" + local dev = http.formvalue("device") + local ssid = http.formvalue("join") + + if dev and ssid then + local cancel = (http.formvalue("cancel") or http.formvalue("cbi.cancel")) + if not cancel then + local cbi = require "luci.cbi" + local map = luci.cbi.load("admin_network/wifi_add")[1] + + if map:parse() ~= cbi.FORM_DONE then + tpl.render("header") + map:render() + tpl.render("footer") + end + + return + end + end + + tpl.render("admin_network/wifi_join") +end + +function wifi_add() + local dev = luci.http.formvalue("device") + local ntm = require "luci.model.network".init() + + dev = dev and ntm:get_wifidev(dev) + + if dev then + local net = dev:add_wifinet({ + mode = "ap", + ssid = "OpenWrt", + encryption = "none" + }) + + ntm:save("wireless") + luci.http.redirect(net:adminlink()) + end +end + +function wifi_delete(network) + local ntm = require "luci.model.network".init() + local wnet = ntm:get_wifinet(network) + if wnet then + local dev = wnet:get_device() + local nets = wnet:get_networks() + if dev then + ntm:del_wifinet(network) + ntm:commit("wireless") + local _, net + for _, net in ipairs(nets) do + if net:is_empty() then + ntm:del_network(net:name()) + ntm:commit("network") + end + end + luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>/dev/null") + end + end + + luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless")) +end + +function iface_status(ifaces) + local netm = require "luci.model.network".init() + local rv = { } + + local iface + for iface in ifaces:gmatch("[%w%.%-_]+") do + local net = netm:get_network(iface) + local device = net and net:get_interface() + if device then + local data = { + id = iface, + proto = net:proto(), + uptime = net:uptime(), + gwaddr = net:gwaddr(), + ipaddrs = net:ipaddrs(), + ip6addrs = net:ip6addrs(), + dnsaddrs = net:dnsaddrs(), + name = device:shortname(), + type = device:type(), + ifname = device:name(), + macaddr = device:mac(), + is_up = device:is_up(), + rx_bytes = device:rx_bytes(), + tx_bytes = device:tx_bytes(), + rx_packets = device:rx_packets(), + tx_packets = device:tx_packets(), + + subdevices = { } + } + + for _, device in ipairs(net:get_interfaces() or {}) do + data.subdevices[#data.subdevices+1] = { + name = device:shortname(), + type = device:type(), + ifname = device:name(), + macaddr = device:mac(), + macaddr = device:mac(), + is_up = device:is_up(), + rx_bytes = device:rx_bytes(), + tx_bytes = device:tx_bytes(), + rx_packets = device:rx_packets(), + tx_packets = device:tx_packets(), + } + end + + rv[#rv+1] = data + else + rv[#rv+1] = { + id = iface, + name = iface, + type = "ethernet" + } + end + end + + if #rv > 0 then + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + return + end + + luci.http.status(404, "No such device") +end + +function iface_reconnect(iface) + local netmd = require "luci.model.network".init() + local net = netmd:get_network(iface) + if net then + luci.sys.call("env -i /sbin/ifup %q >/dev/null 2>/dev/null" % iface) + luci.http.status(200, "Reconnected") + return + end + + luci.http.status(404, "No such interface") +end + +function iface_shutdown(iface) + local netmd = require "luci.model.network".init() + local net = netmd:get_network(iface) + if net then + luci.sys.call("env -i /sbin/ifdown %q >/dev/null 2>/dev/null" % iface) + luci.http.status(200, "Shutdown") + return + end + + luci.http.status(404, "No such interface") +end + +function iface_delete(iface) + local netmd = require "luci.model.network".init() + local net = netmd:del_network(iface) + if net then + luci.sys.call("env -i /sbin/ifdown %q >/dev/null 2>/dev/null" % iface) + luci.http.redirect(luci.dispatcher.build_url("admin/network/network")) + netmd:commit("network") + netmd:commit("wireless") + return + end + + luci.http.status(404, "No such interface") +end + +function wifi_status(devs) + local s = require "luci.tools.status" + local rv = { } + + local dev + for dev in devs:gmatch("[%w%.%-]+") do + rv[#rv+1] = s.wifi_network(dev) + end + + if #rv > 0 then + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + return + end + + luci.http.status(404, "No such device") +end + +local function wifi_reconnect_shutdown(shutdown, wnet) + local netmd = require "luci.model.network".init() + local net = netmd:get_wifinet(wnet) + local dev = net:get_device() + if dev and net then + dev:set("disabled", nil) + net:set("disabled", shutdown and 1 or nil) + netmd:commit("wireless") + + luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>/dev/null") + luci.http.status(200, shutdown and "Shutdown" or "Reconnected") + + return + end + + luci.http.status(404, "No such radio") +end + +function wifi_reconnect(wnet) + wifi_reconnect_shutdown(false, wnet) +end + +function wifi_shutdown(wnet) + wifi_reconnect_shutdown(true, wnet) +end + +function lease_status() + local s = require "luci.tools.status" + + luci.http.prepare_content("application/json") + luci.http.write('[') + luci.http.write_json(s.dhcp_leases()) + luci.http.write(',') + luci.http.write_json(s.dhcp6_leases()) + luci.http.write(']') +end + +function switch_status(switches) + local s = require "luci.tools.status" + + luci.http.prepare_content("application/json") + luci.http.write_json(s.switch_status(switches)) +end + +function diag_command(cmd, addr) + if addr and addr:match("^[a-zA-Z0-9%-%.:_]+$") then + luci.http.prepare_content("text/plain") + + local util = io.popen(cmd % addr) + if util then + while true do + local ln = util:read("*l") + if not ln then break end + luci.http.write(ln) + luci.http.write("\n") + end + + util:close() + end + + return + end + + luci.http.status(500, "Bad address") +end + +function diag_ping(addr) + diag_command("ping -c 5 -W 1 %q 2>&1", addr) +end + +function diag_traceroute(addr) + diag_command("traceroute -q 1 -w 1 -n %q 2>&1", addr) +end + +function diag_nslookup(addr) + diag_command("nslookup %q 2>&1", addr) +end + +function diag_ping6(addr) + diag_command("ping6 -c 5 %q 2>&1", addr) +end + +function diag_traceroute6(addr) + diag_command("traceroute6 -q 1 -w 2 -n %q 2>&1", addr) +end diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua new file mode 100644 index 0000000..ad575e0 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua @@ -0,0 +1,152 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.admin.status", package.seeall) + +function index() + entry({"admin", "status"}, alias("admin", "status", "overview"), _("Status"), 20).index = true + entry({"admin", "status", "overview"}, template("admin_status/index"), _("Overview"), 1) + + entry({"admin", "status", "iptables"}, template("admin_status/iptables"), _("Firewall"), 2).leaf = true + entry({"admin", "status", "iptables_action"}, post("action_iptables")).leaf = true + + entry({"admin", "status", "routes"}, template("admin_status/routes"), _("Routes"), 3) + entry({"admin", "status", "syslog"}, call("action_syslog"), _("System Log"), 4) + entry({"admin", "status", "dmesg"}, call("action_dmesg"), _("Kernel Log"), 5) + entry({"admin", "status", "processes"}, cbi("admin_status/processes"), _("Processes"), 6) + + entry({"admin", "status", "realtime"}, alias("admin", "status", "realtime", "load"), _("Realtime Graphs"), 7) + + entry({"admin", "status", "realtime", "load"}, template("admin_status/load"), _("Load"), 1).leaf = true + entry({"admin", "status", "realtime", "load_status"}, call("action_load")).leaf = true + + entry({"admin", "status", "realtime", "bandwidth"}, template("admin_status/bandwidth"), _("Traffic"), 2).leaf = true + entry({"admin", "status", "realtime", "bandwidth_status"}, call("action_bandwidth")).leaf = true + + if nixio.fs.access("/etc/config/wireless") then + entry({"admin", "status", "realtime", "wireless"}, template("admin_status/wireless"), _("Wireless"), 3).leaf = true + entry({"admin", "status", "realtime", "wireless_status"}, call("action_wireless")).leaf = true + end + + entry({"admin", "status", "realtime", "connections"}, template("admin_status/connections"), _("Connections"), 4).leaf = true + entry({"admin", "status", "realtime", "connections_status"}, call("action_connections")).leaf = true + + entry({"admin", "status", "nameinfo"}, call("action_nameinfo")).leaf = true +end + +function action_syslog() + local syslog = luci.sys.syslog() + luci.template.render("admin_status/syslog", {syslog=syslog}) +end + +function action_dmesg() + local dmesg = luci.sys.dmesg() + luci.template.render("admin_status/dmesg", {dmesg=dmesg}) +end + +function action_iptables() + if luci.http.formvalue("zero") then + if luci.http.formvalue("family") == "6" then + luci.util.exec("/usr/sbin/ip6tables -Z") + else + luci.util.exec("/usr/sbin/iptables -Z") + end + elseif luci.http.formvalue("restart") then + luci.util.exec("/etc/init.d/firewall restart") + end + + luci.http.redirect(luci.dispatcher.build_url("admin/status/iptables")) +end + +function action_bandwidth(iface) + luci.http.prepare_content("application/json") + + local bwc = io.popen("luci-bwc -i %q 2>/dev/null" % iface) + if bwc then + luci.http.write("[") + + while true do + local ln = bwc:read("*l") + if not ln then break end + luci.http.write(ln) + end + + luci.http.write("]") + bwc:close() + end +end + +function action_wireless(iface) + luci.http.prepare_content("application/json") + + local bwc = io.popen("luci-bwc -r %q 2>/dev/null" % iface) + if bwc then + luci.http.write("[") + + while true do + local ln = bwc:read("*l") + if not ln then break end + luci.http.write(ln) + end + + luci.http.write("]") + bwc:close() + end +end + +function action_load() + luci.http.prepare_content("application/json") + + local bwc = io.popen("luci-bwc -l 2>/dev/null") + if bwc then + luci.http.write("[") + + while true do + local ln = bwc:read("*l") + if not ln then break end + luci.http.write(ln) + end + + luci.http.write("]") + bwc:close() + end +end + +function action_connections() + local sys = require "luci.sys" + + luci.http.prepare_content("application/json") + + luci.http.write("{ connections: ") + luci.http.write_json(sys.net.conntrack()) + + local bwc = io.popen("luci-bwc -c 2>/dev/null") + if bwc then + luci.http.write(", statistics: [") + + while true do + local ln = bwc:read("*l") + if not ln then break end + luci.http.write(ln) + end + + luci.http.write("]") + bwc:close() + end + + luci.http.write(" }") +end + +function action_nameinfo(...) + local i + local rv = { } + for i = 1, select('#', ...) do + local addr = select(i, ...) + local fqdn = nixio.getnameinfo(addr) + rv[addr] = fqdn or (addr:match(":") and "[%s]" % addr or addr) + end + + luci.http.prepare_content("application/json") + luci.http.write_json(rv) +end diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua new file mode 100644 index 0000000..5478afa --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua @@ -0,0 +1,439 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008-2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.admin.system", package.seeall) + +function index() + local fs = require "nixio.fs" + + entry({"admin", "system"}, alias("admin", "system", "system"), _("System"), 30).index = true + entry({"admin", "system", "system"}, cbi("admin_system/system"), _("System"), 1) + entry({"admin", "system", "clock_status"}, post_on({ set = true }, "action_clock_status")) + + entry({"admin", "system", "admin"}, cbi("admin_system/admin"), _("Administration"), 2) + + if fs.access("/bin/opkg") then + entry({"admin", "system", "packages"}, post_on({ exec = "1" }, "action_packages"), _("Software"), 10) + entry({"admin", "system", "packages", "ipkg"}, form("admin_system/ipkg")) + end + + entry({"admin", "system", "startup"}, form("admin_system/startup"), _("Startup"), 45) + entry({"admin", "system", "crontab"}, form("admin_system/crontab"), _("Scheduled Tasks"), 46) + + if fs.access("/sbin/block") and fs.access("/etc/config/fstab") then + entry({"admin", "system", "fstab"}, cbi("admin_system/fstab"), _("Mount Points"), 50) + entry({"admin", "system", "fstab", "mount"}, cbi("admin_system/fstab/mount"), nil).leaf = true + entry({"admin", "system", "fstab", "swap"}, cbi("admin_system/fstab/swap"), nil).leaf = true + end + + if fs.access("/sys/class/leds") then + entry({"admin", "system", "leds"}, cbi("admin_system/leds"), _("LED Configuration"), 60) + end + + entry({"admin", "system", "flashops"}, call("action_flashops"), _("Backup / Flash Firmware"), 70) + entry({"admin", "system", "flashops", "reset"}, post("action_reset")) + entry({"admin", "system", "flashops", "backup"}, post("action_backup")) + entry({"admin", "system", "flashops", "backupfiles"}, form("admin_system/backupfiles")) + + -- call() instead of post() due to upload handling! + entry({"admin", "system", "flashops", "restore"}, call("action_restore")) + entry({"admin", "system", "flashops", "sysupgrade"}, call("action_sysupgrade")) + + entry({"admin", "system", "reboot"}, template("admin_system/reboot"), _("Reboot"), 90) + entry({"admin", "system", "reboot", "call"}, post("action_reboot")) +end + +function action_clock_status() + local set = tonumber(luci.http.formvalue("set")) + if set ~= nil and set > 0 then + local date = os.date("*t", set) + if date then + luci.sys.call("date -s '%04d-%02d-%02d %02d:%02d:%02d'" %{ + date.year, date.month, date.day, date.hour, date.min, date.sec + }) + luci.sys.call("/etc/init.d/sysfixtime restart") + end + end + + luci.http.prepare_content("application/json") + luci.http.write_json({ timestring = os.date("%c") }) +end + +function action_packages() + local fs = require "nixio.fs" + local ipkg = require "luci.model.ipkg" + local submit = (luci.http.formvalue("exec") == "1") + local update, upgrade + local changes = false + local install = { } + local remove = { } + local stdout = { "" } + local stderr = { "" } + local out, err + + -- Display + local display = luci.http.formvalue("display") or "installed" + + -- Letter + local letter = string.byte(luci.http.formvalue("letter") or "A", 1) + letter = (letter == 35 or (letter >= 65 and letter <= 90)) and letter or 65 + + -- Search query + local query = luci.http.formvalue("query") + query = (query ~= '') and query or nil + + + -- Modifying actions + if submit then + -- Packets to be installed + local ninst = luci.http.formvalue("install") + local uinst = nil + + -- Install from URL + local url = luci.http.formvalue("url") + if url and url ~= '' then + uinst = url + end + + -- Do install + if ninst then + install[ninst], out, err = ipkg.install(ninst) + stdout[#stdout+1] = out + stderr[#stderr+1] = err + changes = true + end + + if uinst then + local pkg + for pkg in luci.util.imatch(uinst) do + install[uinst], out, err = ipkg.install(pkg) + stdout[#stdout+1] = out + stderr[#stderr+1] = err + changes = true + end + end + + -- Remove packets + local rem = luci.http.formvalue("remove") + if rem then + remove[rem], out, err = ipkg.remove(rem) + stdout[#stdout+1] = out + stderr[#stderr+1] = err + changes = true + end + + + -- Update all packets + update = luci.http.formvalue("update") + if update then + update, out, err = ipkg.update() + stdout[#stdout+1] = out + stderr[#stderr+1] = err + end + + + -- Upgrade all packets + upgrade = luci.http.formvalue("upgrade") + if upgrade then + upgrade, out, err = ipkg.upgrade() + stdout[#stdout+1] = out + stderr[#stderr+1] = err + end + end + + + -- List state + local no_lists = true + local old_lists = false + if fs.access("/var/opkg-lists/") then + local list + for list in fs.dir("/var/opkg-lists/") do + no_lists = false + if (fs.stat("/var/opkg-lists/"..list, "mtime") or 0) < (os.time() - (24 * 60 * 60)) then + old_lists = true + break + end + end + end + + + luci.template.render("admin_system/packages", { + display = display, + letter = letter, + query = query, + install = install, + remove = remove, + update = update, + upgrade = upgrade, + no_lists = no_lists, + old_lists = old_lists, + stdout = table.concat(stdout, ""), + stderr = table.concat(stderr, "") + }) + + -- Remove index cache + if changes then + fs.unlink("/tmp/luci-indexcache") + end +end + +local function image_supported(image) + return (os.execute("sysupgrade -T %q >/dev/null" % image) == 0) +end + +local function image_checksum(image) + return (luci.sys.exec("md5sum %q" % image):match("^([^%s]+)")) +end + +local function image_sha256_checksum(image) + return (luci.sys.exec("sha256sum %q" % image):match("^([^%s]+)")) +end + +local function supports_sysupgrade() + return nixio.fs.access("/lib/upgrade/platform.sh") +end + +local function supports_reset() + return (os.execute([[grep -sqE '"rootfs_data"|"ubi"' /proc/mtd]]) == 0) +end + +local function storage_size() + local size = 0 + if nixio.fs.access("/proc/mtd") then + for l in io.lines("/proc/mtd") do + local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"') + if n == "linux" or n == "firmware" then + size = tonumber(s, 16) + break + end + end + elseif nixio.fs.access("/proc/partitions") then + for l in io.lines("/proc/partitions") do + local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)') + if b and n and not n:match('[0-9]') then + size = tonumber(b) * 1024 + break + end + end + end + return size +end + + +function action_flashops() + -- + -- Overview + -- + luci.template.render("admin_system/flashops", { + reset_avail = supports_reset(), + upgrade_avail = supports_sysupgrade() + }) +end + +function action_sysupgrade() + local fs = require "nixio.fs" + local http = require "luci.http" + local image_tmp = "/tmp/firmware.img" + + local fp + http.setfilehandler( + function(meta, chunk, eof) + if not fp and meta and meta.name == "image" then + fp = io.open(image_tmp, "w") + end + if fp and chunk then + fp:write(chunk) + end + if fp and eof then + fp:close() + end + end + ) + + if not luci.dispatcher.test_post_security() then + fs.unlink(image_tmp) + return + end + + -- + -- Cancel firmware flash + -- + if http.formvalue("cancel") then + fs.unlink(image_tmp) + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) + return + end + + -- + -- Initiate firmware flash + -- + local step = tonumber(http.formvalue("step") or 1) + if step == 1 then + if image_supported(image_tmp) then + luci.template.render("admin_system/upgrade", { + checksum = image_checksum(image_tmp), + sha256ch = image_sha256_checksum(image_tmp), + storage = storage_size(), + size = (fs.stat(image_tmp, "size") or 0), + keep = (not not http.formvalue("keep")) + }) + else + fs.unlink(image_tmp) + luci.template.render("admin_system/flashops", { + reset_avail = supports_reset(), + upgrade_avail = supports_sysupgrade(), + image_invalid = true + }) + end + -- + -- Start sysupgrade flash + -- + elseif step == 2 then + local keep = (http.formvalue("keep") == "1") and "" or "-n" + luci.template.render("admin_system/applyreboot", { + title = luci.i18n.translate("Flashing..."), + msg = luci.i18n.translate("The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."), + addr = (#keep > 0) and "192.168.1.1" or nil + }) + fork_exec("sleep 1; killall dropbear uhttpd; sleep 1; /sbin/sysupgrade %s %q" %{ keep, image_tmp }) + end +end + +function action_backup() + local reader = ltn12_popen("sysupgrade --create-backup - 2>/dev/null") + + luci.http.header( + 'Content-Disposition', 'attachment; filename="backup-%s-%s.tar.gz"' %{ + luci.sys.hostname(), + os.date("%Y-%m-%d") + }) + + luci.http.prepare_content("application/x-targz") + luci.ltn12.pump.all(reader, luci.http.write) +end + +function action_restore() + local fs = require "nixio.fs" + local http = require "luci.http" + local archive_tmp = "/tmp/restore.tar.gz" + + local fp + http.setfilehandler( + function(meta, chunk, eof) + if not fp and meta and meta.name == "archive" then + fp = io.open(archive_tmp, "w") + end + if fp and chunk then + fp:write(chunk) + end + if fp and eof then + fp:close() + end + end + ) + + if not luci.dispatcher.test_post_security() then + fs.unlink(archive_tmp) + return + end + + local upload = http.formvalue("archive") + if upload and #upload > 0 then + luci.template.render("admin_system/applyreboot") + os.execute("tar -C / -xzf %q >/dev/null 2>&1" % archive_tmp) + luci.sys.reboot() + return + end + + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) +end + +function action_reset() + if supports_reset() then + luci.template.render("admin_system/applyreboot", { + title = luci.i18n.translate("Erasing..."), + msg = luci.i18n.translate("The system is erasing the configuration partition now and will reboot itself when finished."), + addr = "192.168.1.1" + }) + + fork_exec("sleep 1; killall dropbear uhttpd; sleep 1; jffs2reset -y && reboot") + return + end + + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) +end + +function action_passwd() + local p1 = luci.http.formvalue("pwd1") + local p2 = luci.http.formvalue("pwd2") + local stat = nil + + if p1 or p2 then + if p1 == p2 then + stat = luci.sys.user.setpasswd("root", p1) + else + stat = 10 + end + end + + luci.template.render("admin_system/passwd", {stat=stat}) +end + +function action_reboot() + luci.sys.reboot() +end + +function fork_exec(command) + local pid = nixio.fork() + if pid > 0 then + return + elseif pid == 0 then + -- change to root dir + nixio.chdir("/") + + -- patch stdin, out, err to /dev/null + local null = nixio.open("/dev/null", "w+") + if null then + nixio.dup(null, nixio.stderr) + nixio.dup(null, nixio.stdout) + nixio.dup(null, nixio.stdin) + if null:fileno() > 2 then + null:close() + end + end + + -- replace with target command + nixio.exec("/bin/sh", "-c", command) + end +end + +function ltn12_popen(command) + + local fdi, fdo = nixio.pipe() + local pid = nixio.fork() + + if pid > 0 then + fdo:close() + local close + return function() + local buffer = fdi:read(2048) + local wpid, stat = nixio.waitpid(pid, "nohang") + if not close and wpid and stat == "exited" then + close = true + end + + if buffer and #buffer > 0 then + return buffer + elseif close then + fdi:close() + return nil + end + end + elseif pid == 0 then + nixio.dup(fdo, nixio.stdout) + fdi:close() + fdo:close() + nixio.exec("/bin/sh", "-c", command) + end +end diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua new file mode 100644 index 0000000..9c33d9c --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua @@ -0,0 +1,64 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2010-2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.admin.uci", package.seeall) + +function index() + local redir = luci.http.formvalue("redir", true) or + luci.dispatcher.build_url(unpack(luci.dispatcher.context.request)) + + entry({"admin", "uci"}, nil, _("Configuration")) + entry({"admin", "uci", "changes"}, call("action_changes"), _("Changes"), 40).query = {redir=redir} + entry({"admin", "uci", "revert"}, post("action_revert"), _("Revert"), 30).query = {redir=redir} + entry({"admin", "uci", "apply"}, post("action_apply"), _("Apply"), 20).query = {redir=redir} + entry({"admin", "uci", "saveapply"}, post("action_apply"), _("Save & Apply"), 10).query = {redir=redir} +end + +function action_changes() + local uci = luci.model.uci.cursor() + local changes = uci:changes() + + luci.template.render("admin_uci/changes", { + changes = next(changes) and changes + }) +end + +function action_apply() + local path = luci.dispatcher.context.path + local uci = luci.model.uci.cursor() + local changes = uci:changes() + local reload = {} + + -- Collect files to be applied and commit changes + for r, tbl in pairs(changes) do + table.insert(reload, r) + if path[#path] ~= "apply" then + uci:load(r) + uci:commit(r) + uci:unload(r) + end + end + + luci.template.render("admin_uci/apply", { + changes = next(changes) and changes, + configs = reload + }) +end + + +function action_revert() + local uci = luci.model.uci.cursor() + local changes = uci:changes() + + -- Collect files to be reverted + for r, tbl in pairs(changes) do + uci:load(r) + uci:revert(r) + uci:unload(r) + end + + luci.template.render("admin_uci/revert", { + changes = next(changes) and changes + }) +end diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua new file mode 100644 index 0000000..10636a4 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua @@ -0,0 +1,307 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local ipc = require "luci.ip" +local o +require "luci.util" + +m = Map("dhcp", translate("DHCP and DNS"), + translate("Dnsmasq is a combined DHCP-Server and DNS-" .. + "Forwarder for NAT " .. + "firewalls")) + +s = m:section(TypedSection, "dnsmasq", translate("Server Settings")) +s.anonymous = true +s.addremove = false + +s:tab("general", translate("General Settings")) +s:tab("files", translate("Resolv and Hosts Files")) +s:tab("tftp", translate("TFTP Settings")) +s:tab("advanced", translate("Advanced Settings")) + +s:taboption("general", Flag, "domainneeded", + translate("Domain required"), + translate("Don't forward DNS-Requests without " .. + "DNS-Name")) + +s:taboption("general", Flag, "authoritative", + translate("Authoritative"), + translate("This is the only DHCP in the local network")) + + +s:taboption("files", Flag, "readethers", + translate("Use /etc/ethers"), + translate("Read /etc/ethers to configure the DHCP-Server")) + +s:taboption("files", Value, "leasefile", + translate("Leasefile"), + translate("file where given DHCP-leases will be stored")) + +s:taboption("files", Flag, "noresolv", + translate("Ignore resolve file")).optional = true + +rf = s:taboption("files", Value, "resolvfile", + translate("Resolve file"), + translate("local DNS file")) + +rf:depends("noresolv", "") +rf.optional = true + + +s:taboption("files", Flag, "nohosts", + translate("Ignore /etc/hosts")).optional = true + +s:taboption("files", DynamicList, "addnhosts", + translate("Additional Hosts files")).optional = true + +qu = s:taboption("advanced", Flag, "quietdhcp", + translate("Suppress logging"), + translate("Suppress logging of the routine operation of these protocols")) +qu.optional = true + +se = s:taboption("advanced", Flag, "sequential_ip", + translate("Allocate IP sequentially"), + translate("Allocate IP addresses sequentially, starting from the lowest available address")) +se.optional = true + +s:taboption("advanced", Flag, "boguspriv", + translate("Filter private"), + translate("Do not forward reverse lookups for local networks")) + +s:taboption("advanced", Flag, "filterwin2k", + translate("Filter useless"), + translate("Do not forward requests that cannot be answered by public name servers")) + + +s:taboption("advanced", Flag, "localise_queries", + translate("Localise queries"), + translate("Localise hostname depending on the requesting subnet if multiple IPs are available")) + +local have_dnssec_support = luci.util.checklib("/usr/sbin/dnsmasq", "libhogweed.so") + +if have_dnssec_support then + o = s:taboption("advanced", Flag, "dnssec", + translate("DNSSEC")) + o.optional = true + + o = s:taboption("advanced", Flag, "dnsseccheckunsigned", + translate("DNSSEC check unsigned"), + translate("Requires upstream supports DNSSEC; verify unsigned domain responses really come from unsigned domains")) + o.optional = true +end + +s:taboption("general", Value, "local", + translate("Local server"), + translate("Local domain specification. Names matching this domain are never forwarded and are resolved from DHCP or hosts files only")) + +s:taboption("general", Value, "domain", + translate("Local domain"), + translate("Local domain suffix appended to DHCP names and hosts file entries")) + +s:taboption("advanced", Flag, "expandhosts", + translate("Expand hosts"), + translate("Add local domain suffix to names served from hosts files")) + +s:taboption("advanced", Flag, "nonegcache", + translate("No negative cache"), + translate("Do not cache negative replies, e.g. for not existing domains")) + +s:taboption("advanced", Value, "serversfile", + translate("Additional servers file"), + translate("This file may contain lines like 'server=/domain/1.2.3.4' or 'server=1.2.3.4' for".. + "domain-specific or full upstream DNS servers.")) + +s:taboption("advanced", Flag, "strictorder", + translate("Strict order"), + translate("DNS servers will be queried in the " .. + "order of the resolvfile")).optional = true + + +bn = s:taboption("advanced", DynamicList, "bogusnxdomain", translate("Bogus NX Domain Override"), + translate("List of hosts that supply bogus NX domain results")) + +bn.optional = true +bn.placeholder = "67.215.65.132" + + +s:taboption("general", Flag, "logqueries", + translate("Log queries"), + translate("Write received DNS requests to syslog")).optional = true + +df = s:taboption("general", DynamicList, "server", translate("DNS forwardings"), + translate("List of DNS " .. + "servers to forward requests to")) + +df.optional = true +df.placeholder = "/example.org/10.1.2.3" + + +rp = s:taboption("general", Flag, "rebind_protection", + translate("Rebind protection"), + translate("Discard upstream RFC1918 responses")) + +rp.rmempty = false + + +rl = s:taboption("general", Flag, "rebind_localhost", + translate("Allow localhost"), + translate("Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services")) + +rl:depends("rebind_protection", "1") + + +rd = s:taboption("general", DynamicList, "rebind_domain", + translate("Domain whitelist"), + translate("List of domains to allow RFC1918 responses for")) +rd.optional = true + +rd:depends("rebind_protection", "1") +rd.datatype = "host(1)" +rd.placeholder = "ihost.netflix.com" + + +pt = s:taboption("advanced", Value, "port", + translate("DNS server port"), + translate("Listening port for inbound DNS queries")) + +pt.optional = true +pt.datatype = "port" +pt.placeholder = 53 + + +qp = s:taboption("advanced", Value, "queryport", + translate("DNS query port"), + translate("Fixed source port for outbound DNS queries")) + +qp.optional = true +qp.datatype = "port" +qp.placeholder = translate("any") + + +lm = s:taboption("advanced", Value, "dhcpleasemax", + translate("Max. DHCP leases"), + translate("Maximum allowed number of active DHCP leases")) + +lm.optional = true +lm.datatype = "uinteger" +lm.placeholder = translate("unlimited") + + +em = s:taboption("advanced", Value, "ednspacket_max", + translate("Max. EDNS0 packet size"), + translate("Maximum allowed size of EDNS.0 UDP packets")) + +em.optional = true +em.datatype = "uinteger" +em.placeholder = 1280 + + +cq = s:taboption("advanced", Value, "dnsforwardmax", + translate("Max. concurrent queries"), + translate("Maximum allowed number of concurrent DNS queries")) + +cq.optional = true +cq.datatype = "uinteger" +cq.placeholder = 150 + + +s:taboption("tftp", Flag, "enable_tftp", + translate("Enable TFTP server")).optional = true + +tr = s:taboption("tftp", Value, "tftp_root", + translate("TFTP server root"), + translate("Root directory for files served via TFTP")) + +tr.optional = true +tr:depends("enable_tftp", "1") +tr.placeholder = "/" + + +db = s:taboption("tftp", Value, "dhcp_boot", + translate("Network boot image"), + translate("Filename of the boot image advertised to clients")) + +db.optional = true +db:depends("enable_tftp", "1") +db.placeholder = "pxelinux.0" + +o = s:taboption("general", Flag, "localservice", + translate("Local Service Only"), + translate("Limit DNS service to subnets interfaces on which we are serving DNS.")) +o.optional = false +o.rmempty = false + +o = s:taboption("general", Flag, "nonwildcard", + translate("Non-wildcard"), + translate("Bind only to specific interfaces rather than wildcard address.")) +o.optional = false +o.rmempty = false + +o = s:taboption("general", DynamicList, "interface", + translate("Listen Interfaces"), + translate("Limit listening to these interfaces, and loopback.")) +o.optional = true +o:depends("nonwildcard", true) + +o = s:taboption("general", DynamicList, "notinterface", + translate("Exclude interfaces"), + translate("Prevent listening on these interfaces.")) +o.optional = true +o:depends("nonwildcard", true) + +m:section(SimpleSection).template = "admin_network/lease_status" + +s = m:section(TypedSection, "host", translate("Static Leases"), + translate("Static leases are used to assign fixed IP addresses and symbolic hostnames to " .. + "DHCP clients. They are also required for non-dynamic interface configurations where " .. + "only hosts with a corresponding lease are served.") .. "
" .. + translate("Use the Add Button to add a new lease entry. The MAC-Address " .. + "indentifies the host, the IPv4-Address specifies to the fixed address to " .. + "use and the Hostname is assigned as symbolic name to the requesting host. " .. + "The optional Lease time can be used to set non-standard host-specific " .. + "lease time, e.g. 12h, 3d or infinite.")) + +s.addremove = true +s.anonymous = true +s.template = "cbi/tblsection" + +name = s:option(Value, "name", translate("Hostname")) +name.datatype = "hostname" +name.rmempty = true + +mac = s:option(Value, "mac", translate("MAC-Address")) +mac.datatype = "list(macaddr)" +mac.rmempty = true + +ip = s:option(Value, "ip", translate("IPv4-Address")) +ip.datatype = "or(ip4addr,'ignore')" + +time = s:option(Value, "leasetime", translate("Lease time")) +time.rmempty = true + +hostid = s:option(Value, "hostid", translate("IPv6-Suffix (hex)")) + +ipc.neighbors({ family = 4 }, function(n) + if n.mac and n.dest then + ip:value(n.dest:string()) + mac:value(n.mac, "%s (%s)" %{ n.mac, n.dest:string() }) + end +end) + +function ip.validate(self, value, section) + local m = mac:formvalue(section) or "" + local n = name:formvalue(section) or "" + if value and #n == 0 and #m == 0 then + return nil, translate("One of hostname or mac address must be specified!") + end + return Value.validate(self, value, section) +end + + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/hosts.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/hosts.lua new file mode 100644 index 0000000..fafacf3 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/hosts.lua @@ -0,0 +1,28 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2010-2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ipc = require "luci.ip" + +m = Map("dhcp", translate("Hostnames")) + +s = m:section(TypedSection, "domain", translate("Host entries")) +s.addremove = true +s.anonymous = true +s.template = "cbi/tblsection" + +hn = s:option(Value, "name", translate("Hostname")) +hn.datatype = "hostname" +hn.rmempty = true + +ip = s:option(Value, "ip", translate("IP address")) +ip.datatype = "ipaddr" +ip.rmempty = true + +ipc.neighbors({ }, function(n) + if n.mac and n.dest and not n.dest:is6linklocal() then + ip:value(n.dest:string(), "%s (%s)" %{ n.dest:string(), n.mac }) + end +end) + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua new file mode 100644 index 0000000..e48e3b4 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua @@ -0,0 +1,97 @@ +-- Copyright 2009-2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local nw = require "luci.model.network".init() +local fw = require "luci.model.firewall".init() +local utl = require "luci.util" +local uci = require "luci.model.uci".cursor() + +m = SimpleForm("network", translate("Create Interface")) +m.redirect = luci.dispatcher.build_url("admin/network/network") +m.reset = false + +newnet = m:field(Value, "_netname", translate("Name of the new interface"), + translate("The allowed characters are: A-Z, a-z, " .. + "0-9 and _" + )) + +newnet:depends("_attach", "") +newnet.default = arg[1] and "net_" .. arg[1]:gsub("[^%w_]+", "_") +newnet.datatype = "and(uciname,maxlength(15))" + +advice = m:field(DummyValue, "d1", translate("Note: interface name length"), + translate("Maximum length of the name is 15 characters including " .. + "the automatic protocol/bridge prefix (br-, 6in4-, pppoe- etc.)" + )) + +newproto = m:field(ListValue, "_netproto", translate("Protocol of the new interface")) + +netbridge = m:field(Flag, "_bridge", translate("Create a bridge over multiple interfaces")) + + +sifname = m:field(Value, "_ifname", translate("Cover the following interface")) + +sifname.widget = "radio" +sifname.template = "cbi/network_ifacelist" +sifname.nobridges = true + + +mifname = m:field(Value, "_ifnames", translate("Cover the following interfaces")) + +mifname.widget = "checkbox" +mifname.template = "cbi/network_ifacelist" +mifname.nobridges = true + + +local _, p +for _, p in ipairs(nw:get_protocols()) do + if p:is_installed() then + newproto:value(p:proto(), p:get_i18n()) + if not p:is_virtual() then netbridge:depends("_netproto", p:proto()) end + if not p:is_floating() then + sifname:depends({ _bridge = "", _netproto = p:proto()}) + mifname:depends({ _bridge = "1", _netproto = p:proto()}) + end + end +end + +function newproto.validate(self, value, section) + local name = newnet:formvalue(section) + if not name or #name == 0 then + newnet:add_error(section, translate("No network name specified")) + elseif m:get(name) then + newnet:add_error(section, translate("The given network name is not unique")) + end + + local proto = nw:get_protocol(value) + if proto and not proto:is_floating() then + local br = (netbridge:formvalue(section) == "1") + local ifn = br and mifname:formvalue(section) or sifname:formvalue(section) + for ifn in utl.imatch(ifn) do + return value + end + return nil, translate("The selected protocol needs a device assigned") + end + return value +end + +function newproto.write(self, section, value) + local name = newnet:formvalue(section) + if name and #name > 0 then + local br = (netbridge:formvalue(section) == "1") and "bridge" or nil + local net = nw:add_network(name, { proto = value, type = br }) + if net then + local ifn + for ifn in utl.imatch( + br and mifname:formvalue(section) or sifname:formvalue(section) + ) do + net:add_interface(ifn) + end + nw:save("network") + nw:save("wireless") + end + luci.http.redirect(luci.dispatcher.build_url("admin/network/network", name)) + end +end + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua new file mode 100644 index 0000000..16a1044 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -0,0 +1,518 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008-2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local ut = require "luci.util" +local pt = require "luci.tools.proto" +local nw = require "luci.model.network" +local fw = require "luci.model.firewall" + +arg[1] = arg[1] or "" + +local has_dnsmasq = fs.access("/etc/config/dhcp") +local has_firewall = fs.access("/etc/config/firewall") + +m = Map("network", translate("Interfaces") .. " - " .. arg[1]:upper(), translate("On this page you can configure the network interfaces. You can bridge several interfaces by ticking the \"bridge interfaces\" field and enter the names of several network interfaces separated by spaces. You can also use VLAN notation INTERFACE.VLANNR (e.g.: eth0.1).")) +m.redirect = luci.dispatcher.build_url("admin", "network", "network") +m:chain("wireless") + +if has_firewall then + m:chain("firewall") +end + +nw.init(m.uci) +fw.init(m.uci) + + +local net = nw:get_network(arg[1]) + +local function backup_ifnames(is_bridge) + if not net:is_floating() and not m:get(net:name(), "_orig_ifname") then + local ifcs = net:get_interfaces() or { net:get_interface() } + if ifcs then + local _, ifn + local ifns = { } + for _, ifn in ipairs(ifcs) do + ifns[#ifns+1] = ifn:name() + end + if #ifns > 0 then + m:set(net:name(), "_orig_ifname", table.concat(ifns, " ")) + m:set(net:name(), "_orig_bridge", tostring(net:is_bridge())) + end + end + end +end + + +-- redirect to overview page if network does not exist anymore (e.g. after a revert) +if not net then + luci.http.redirect(luci.dispatcher.build_url("admin/network/network")) + return +end + +-- protocol switch was requested, rebuild interface config and reload page +if m:formvalue("cbid.network.%s._switch" % net:name()) then + -- get new protocol + local ptype = m:formvalue("cbid.network.%s.proto" % net:name()) or "-" + local proto = nw:get_protocol(ptype, net:name()) + if proto then + -- backup default + backup_ifnames() + + -- if current proto is not floating and target proto is not floating, + -- then attempt to retain the ifnames + --error(net:proto() .. " > " .. proto:proto()) + if not net:is_floating() and not proto:is_floating() then + -- if old proto is a bridge and new proto not, then clip the + -- interface list to the first ifname only + if net:is_bridge() and proto:is_virtual() then + local _, ifn + local first = true + for _, ifn in ipairs(net:get_interfaces() or { net:get_interface() }) do + if first then + first = false + else + net:del_interface(ifn) + end + end + m:del(net:name(), "type") + end + + -- if the current proto is floating, the target proto not floating, + -- then attempt to restore ifnames from backup + elseif net:is_floating() and not proto:is_floating() then + -- if we have backup data, then re-add all orphaned interfaces + -- from it and restore the bridge choice + local br = (m:get(net:name(), "_orig_bridge") == "true") + local ifn + local ifns = { } + for ifn in ut.imatch(m:get(net:name(), "_orig_ifname")) do + ifn = nw:get_interface(ifn) + if ifn and not ifn:get_network() then + proto:add_interface(ifn) + if not br then + break + end + end + end + if br then + m:set(net:name(), "type", "bridge") + end + + -- in all other cases clear the ifnames + else + local _, ifc + for _, ifc in ipairs(net:get_interfaces() or { net:get_interface() }) do + net:del_interface(ifc) + end + m:del(net:name(), "type") + end + + -- clear options + local k, v + for k, v in pairs(m:get(net:name())) do + if k:sub(1,1) ~= "." and + k ~= "type" and + k ~= "ifname" and + k ~= "_orig_ifname" and + k ~= "_orig_bridge" + then + m:del(net:name(), k) + end + end + + -- set proto + m:set(net:name(), "proto", proto:proto()) + m.uci:save("network") + m.uci:save("wireless") + + -- reload page + luci.http.redirect(luci.dispatcher.build_url("admin/network/network", arg[1])) + return + end +end + +-- dhcp setup was requested, create section and reload page +if m:formvalue("cbid.dhcp._enable._enable") then + m.uci:section("dhcp", "dhcp", arg[1], { + interface = arg[1], + start = "100", + limit = "150", + leasetime = "12h" + }) + + m.uci:save("dhcp") + luci.http.redirect(luci.dispatcher.build_url("admin/network/network", arg[1])) + return +end + +local ifc = net:get_interface() + +s = m:section(NamedSection, arg[1], "interface", translate("Common Configuration")) +s.addremove = false + +s:tab("general", translate("General Setup")) +s:tab("advanced", translate("Advanced Settings")) +s:tab("physical", translate("Physical Settings")) + +if has_firewall then + s:tab("firewall", translate("Firewall Settings")) +end + + +st = s:taboption("general", DummyValue, "__status", translate("Status")) + +local function set_status() + -- if current network is empty, print a warning + if not net:is_floating() and net:is_empty() then + st.template = "cbi/dvalue" + st.network = nil + st.value = translate("There is no device assigned yet, please attach a network device in the \"Physical Settings\" tab") + else + st.template = "admin_network/iface_status" + st.network = arg[1] + st.value = nil + end +end + +m.on_init = set_status +m.on_after_save = set_status + + +p = s:taboption("general", ListValue, "proto", translate("Protocol")) +p.default = net:proto() + + +if not net:is_installed() then + p_install = s:taboption("general", Button, "_install") + p_install.title = translate("Protocol support is not installed") + p_install.inputtitle = translate("Install package %q" % net:opkg_package()) + p_install.inputstyle = "apply" + p_install:depends("proto", net:proto()) + + function p_install.write() + return luci.http.redirect( + luci.dispatcher.build_url("admin/system/packages") .. + "?submit=1&install=%s" % net:opkg_package() + ) + end +end + + +p_switch = s:taboption("general", Button, "_switch") +p_switch.title = translate("Really switch protocol?") +p_switch.inputtitle = translate("Switch protocol") +p_switch.inputstyle = "apply" + +local _, pr +for _, pr in ipairs(nw:get_protocols()) do + p:value(pr:proto(), pr:get_i18n()) + if pr:proto() ~= net:proto() then + p_switch:depends("proto", pr:proto()) + end +end + + +auto = s:taboption("advanced", Flag, "auto", translate("Bring up on boot")) +auto.default = (net:proto() == "none") and auto.disabled or auto.enabled + +delegate = s:taboption("advanced", Flag, "delegate", translate("Use builtin IPv6-management")) +delegate.default = delegate.enabled + + +if not net:is_virtual() then + br = s:taboption("physical", Flag, "type", translate("Bridge interfaces"), translate("creates a bridge over specified interface(s)")) + br.enabled = "bridge" + br.rmempty = true + br:depends("proto", "static") + br:depends("proto", "dhcp") + br:depends("proto", "none") + + stp = s:taboption("physical", Flag, "stp", translate("Enable STP"), + translate("Enables the Spanning Tree Protocol on this bridge")) + stp:depends("type", "bridge") + stp.rmempty = true +end + + +if not net:is_floating() then + ifname_single = s:taboption("physical", Value, "ifname_single", translate("Interface")) + ifname_single.template = "cbi/network_ifacelist" + ifname_single.widget = "radio" + ifname_single.nobridges = true + ifname_single.rmempty = false + ifname_single.network = arg[1] + ifname_single:depends("type", "") + + function ifname_single.cfgvalue(self, s) + -- let the template figure out the related ifaces through the network model + return nil + end + + function ifname_single.write(self, s, val) + local i + local new_ifs = { } + local old_ifs = { } + + for _, i in ipairs(net:get_interfaces() or { net:get_interface() }) do + old_ifs[#old_ifs+1] = i:name() + end + + for i in ut.imatch(val) do + new_ifs[#new_ifs+1] = i + + -- if this is not a bridge, only assign first interface + if self.option == "ifname_single" then + break + end + end + + table.sort(old_ifs) + table.sort(new_ifs) + + for i = 1, math.max(#old_ifs, #new_ifs) do + if old_ifs[i] ~= new_ifs[i] then + backup_ifnames() + for i = 1, #old_ifs do + net:del_interface(old_ifs[i]) + end + for i = 1, #new_ifs do + net:add_interface(new_ifs[i]) + end + break + end + end + end +end + + +if not net:is_virtual() then + ifname_multi = s:taboption("physical", Value, "ifname_multi", translate("Interface")) + ifname_multi.template = "cbi/network_ifacelist" + ifname_multi.nobridges = true + ifname_multi.rmempty = false + ifname_multi.network = arg[1] + ifname_multi.widget = "checkbox" + ifname_multi:depends("type", "bridge") + ifname_multi.cfgvalue = ifname_single.cfgvalue + ifname_multi.write = ifname_single.write +end + + +if has_firewall then + fwzone = s:taboption("firewall", Value, "_fwzone", + translate("Create / Assign firewall-zone"), + translate("Choose the firewall zone you want to assign to this interface. Select unspecified to remove the interface from the associated zone or fill out the create field to define a new zone and attach the interface to it.")) + + fwzone.template = "cbi/firewall_zonelist" + fwzone.network = arg[1] + fwzone.rmempty = false + + function fwzone.cfgvalue(self, section) + self.iface = section + local z = fw:get_zone_by_network(section) + return z and z:name() + end + + function fwzone.write(self, section, value) + local zone = fw:get_zone(value) + + if not zone and value == '-' then + value = m:formvalue(self:cbid(section) .. ".newzone") + if value and #value > 0 then + zone = fw:add_zone(value) + else + fw:del_network(section) + end + end + + if zone then + fw:del_network(section) + zone:add_network(section) + end + end +end + + +function p.write() end +function p.remove() end +function p.validate(self, value, section) + if value == net:proto() then + if not net:is_floating() and net:is_empty() then + local ifn = ((br and (br:formvalue(section) == "bridge")) + and ifname_multi:formvalue(section) + or ifname_single:formvalue(section)) + + for ifn in ut.imatch(ifn) do + return value + end + return nil, translate("The selected protocol needs a device assigned") + end + end + return value +end + + +local form, ferr = loadfile( + ut.libpath() .. "/model/cbi/admin_network/proto_%s.lua" % net:proto() +) + +if not form then + s:taboption("general", DummyValue, "_error", + translate("Missing protocol extension for proto %q" % net:proto()) + ).value = ferr +else + setfenv(form, getfenv(1))(m, s, net) +end + + +local _, field +for _, field in ipairs(s.children) do + if field ~= st and field ~= p and field ~= p_install and field ~= p_switch then + if next(field.deps) then + local _, dep + for _, dep in ipairs(field.deps) do + dep.proto = net:proto() + end + else + field:depends("proto", net:proto()) + end + end +end + + +-- +-- Display DNS settings if dnsmasq is available +-- + +if has_dnsmasq and net:proto() == "static" then + m2 = Map("dhcp", "", "") + + local has_section = false + + m2.uci:foreach("dhcp", "dhcp", function(s) + if s.interface == arg[1] then + has_section = true + return false + end + end) + + if not has_section and has_dnsmasq then + + s = m2:section(TypedSection, "dhcp", translate("DHCP Server")) + s.anonymous = true + s.cfgsections = function() return { "_enable" } end + + x = s:option(Button, "_enable") + x.title = translate("No DHCP Server configured for this interface") + x.inputtitle = translate("Setup DHCP Server") + x.inputstyle = "apply" + + elseif has_section then + + s = m2:section(TypedSection, "dhcp", translate("DHCP Server")) + s.addremove = false + s.anonymous = true + s:tab("general", translate("General Setup")) + s:tab("advanced", translate("Advanced Settings")) + s:tab("ipv6", translate("IPv6 Settings")) + + function s.filter(self, section) + return m2.uci:get("dhcp", section, "interface") == arg[1] + end + + local ignore = s:taboption("general", Flag, "ignore", + translate("Ignore interface"), + translate("Disable DHCP for " .. + "this interface.")) + + local start = s:taboption("general", Value, "start", translate("Start"), + translate("Lowest leased address as offset from the network address.")) + start.optional = true + start.datatype = "or(uinteger,ip4addr)" + start.default = "100" + + local limit = s:taboption("general", Value, "limit", translate("Limit"), + translate("Maximum number of leased addresses.")) + limit.optional = true + limit.datatype = "uinteger" + limit.default = "150" + + local ltime = s:taboption("general", Value, "leasetime", translate("Leasetime"), + translate("Expiry time of leased addresses, minimum is 2 minutes (2m).")) + ltime.rmempty = true + ltime.default = "12h" + + local dd = s:taboption("advanced", Flag, "dynamicdhcp", + translate("Dynamic DHCP"), + translate("Dynamically allocate DHCP addresses for clients. If disabled, only " .. + "clients having static leases will be served.")) + dd.default = dd.enabled + + s:taboption("advanced", Flag, "force", translate("Force"), + translate("Force DHCP on this network even if another server is detected.")) + + -- XXX: is this actually useful? + --s:taboption("advanced", Value, "name", translate("Name"), + -- translate("Define a name for this network.")) + + mask = s:taboption("advanced", Value, "netmask", + translate("IPv4-Netmask"), + translate("Override the netmask sent to clients. Normally it is calculated " .. + "from the subnet that is served.")) + + mask.optional = true + mask.datatype = "ip4addr" + + s:taboption("advanced", DynamicList, "dhcp_option", translate("DHCP-Options"), + translate("Define additional DHCP options, for example \"6,192.168.2.1," .. + "192.168.2.2\" which advertises different DNS servers to clients.")) + + for i, n in ipairs(s.children) do + if n ~= ignore then + n:depends("ignore", "") + end + end + + o = s:taboption("ipv6", ListValue, "ra", translate("Router Advertisement-Service")) + o:value("", translate("disabled")) + o:value("server", translate("server mode")) + o:value("relay", translate("relay mode")) + o:value("hybrid", translate("hybrid mode")) + + o = s:taboption("ipv6", ListValue, "dhcpv6", translate("DHCPv6-Service")) + o:value("", translate("disabled")) + o:value("server", translate("server mode")) + o:value("relay", translate("relay mode")) + o:value("hybrid", translate("hybrid mode")) + + o = s:taboption("ipv6", ListValue, "ndp", translate("NDP-Proxy")) + o:value("", translate("disabled")) + o:value("relay", translate("relay mode")) + o:value("hybrid", translate("hybrid mode")) + + o = s:taboption("ipv6", ListValue, "ra_management", translate("DHCPv6-Mode"), + translate("Default is stateless + stateful")) + o:value("0", translate("stateless")) + o:value("1", translate("stateless + stateful")) + o:value("2", translate("stateful-only")) + o:depends("dhcpv6", "server") + o:depends("dhcpv6", "hybrid") + o.default = "1" + + o = s:taboption("ipv6", Flag, "ra_default", translate("Always announce default router"), + translate("Announce as default router even if no public prefix is available.")) + o:depends("ra", "server") + o:depends("ra", "hybrid") + + s:taboption("ipv6", DynamicList, "dns", translate("Announced DNS servers")) + s:taboption("ipv6", DynamicList, "domain", translate("Announced DNS domains")) + + else + m2 = nil + end +end + + +return m, m2 diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/network.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/network.lua new file mode 100644 index 0000000..385e114 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/network.lua @@ -0,0 +1,114 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" + +m = Map("network", translate("Interfaces")) +m.pageaction = false +m:section(SimpleSection).template = "admin_network/iface_overview" + +if fs.access("/etc/init.d/dsl_control") then + dsl = m:section(TypedSection, "dsl", translate("DSL")) + + dsl.anonymous = true + + annex = dsl:option(ListValue, "annex", translate("Annex")) + annex:value("a", translate("Annex A + L + M (all)")) + annex:value("b", translate("Annex B (all)")) + annex:value("j", translate("Annex J (all)")) + annex:value("m", translate("Annex M (all)")) + annex:value("bdmt", translate("Annex B G.992.1")) + annex:value("b2", translate("Annex B G.992.3")) + annex:value("b2p", translate("Annex B G.992.5")) + annex:value("at1", translate("ANSI T1.413")) + annex:value("admt", translate("Annex A G.992.1")) + annex:value("alite", translate("Annex A G.992.2")) + annex:value("a2", translate("Annex A G.992.3")) + annex:value("a2p", translate("Annex A G.992.5")) + annex:value("l", translate("Annex L G.992.3 POTS 1")) + annex:value("m2", translate("Annex M G.992.3")) + annex:value("m2p", translate("Annex M G.992.5")) + + tone = dsl:option(ListValue, "tone", translate("Tone")) + tone:value("", translate("auto")) + tone:value("a", translate("A43C + J43 + A43")) + tone:value("av", translate("A43C + J43 + A43 + V43")) + tone:value("b", translate("B43 + B43C")) + tone:value("bv", translate("B43 + B43C + V43")) + + xfer_mode = dsl:option(ListValue, "xfer_mode", translate("Encapsulation mode")) + xfer_mode:value("atm", translate("ATM (Asynchronous Transfer Mode)")) + xfer_mode:value("ptm", translate("PTM/EFM (Packet Transfer Mode)")) + + line_mode = dsl:option(ListValue, "line_mode", translate("DSL line mode")) + line_mode:value("", translate("auto")) + line_mode:value("adsl", translate("ADSL")) + line_mode:value("vdsl", translate("VDSL")) + + firmware = dsl:option(Value, "firmware", translate("Firmware File")) + + m.pageaction = true +end + +-- Show ATM bridge section if we have the capabilities +if fs.access("/usr/sbin/br2684ctl") then + atm = m:section(TypedSection, "atm-bridge", translate("ATM Bridges"), + translate("ATM bridges expose encapsulated ethernet in AAL5 " .. + "connections as virtual Linux network interfaces which can " .. + "be used in conjunction with DHCP or PPP to dial into the " .. + "provider network.")) + + atm.addremove = true + atm.anonymous = true + + atm.create = function(self, section) + local sid = TypedSection.create(self, section) + local max_unit = -1 + + m.uci:foreach("network", "atm-bridge", + function(s) + local u = tonumber(s.unit) + if u ~= nil and u > max_unit then + max_unit = u + end + end) + + m.uci:set("network", sid, "unit", max_unit + 1) + m.uci:set("network", sid, "atmdev", 0) + m.uci:set("network", sid, "encaps", "llc") + m.uci:set("network", sid, "payload", "bridged") + m.uci:set("network", sid, "vci", 35) + m.uci:set("network", sid, "vpi", 8) + + return sid + end + + atm:tab("general", translate("General Setup")) + atm:tab("advanced", translate("Advanced Settings")) + + vci = atm:taboption("general", Value, "vci", translate("ATM Virtual Channel Identifier (VCI)")) + vpi = atm:taboption("general", Value, "vpi", translate("ATM Virtual Path Identifier (VPI)")) + encaps = atm:taboption("general", ListValue, "encaps", translate("Encapsulation mode")) + encaps:value("llc", translate("LLC")) + encaps:value("vc", translate("VC-Mux")) + + atmdev = atm:taboption("advanced", Value, "atmdev", translate("ATM device number")) + unit = atm:taboption("advanced", Value, "unit", translate("Bridge unit number")) + payload = atm:taboption("advanced", ListValue, "payload", translate("Forwarding mode")) + payload:value("bridged", translate("bridged")) + payload:value("routed", translate("routed")) + m.pageaction = true +end + +local network = require "luci.model.network" +if network:has_ipv6() then + local s = m:section(NamedSection, "globals", "globals", translate("Global network options")) + local o = s:option(Value, "ula_prefix", translate("IPv6 ULA-Prefix")) + o.datatype = "ip6addr" + o.rmempty = true + m.pageaction = true +end + + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/proto_ahcp.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/proto_ahcp.lua new file mode 100644 index 0000000..0818199 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/proto_ahcp.lua @@ -0,0 +1,67 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local device, apn, service, pincode, username, password +local ipv6, maxwait, defaultroute, metric, peerdns, dns, + keepalive_failure, keepalive_interval, demand + + +mca = s:taboption("ahcp", Value, "multicast_address", translate("Multicast address")) +mca.optional = true +mca.placeholder = "ff02::cca6:c0f9:e182:5359" +mca.datatype = "ip6addr" +mca:depends("proto", "ahcp") + +port = s:taboption("ahcp", Value, "port", translate("Port")) +port.optional = true +port.placeholder = 5359 +port.datatype = "port" +port:depends("proto", "ahcp") + +fam = s:taboption("ahcp", ListValue, "_family", translate("Protocol family")) +fam:value("", translate("IPv4 and IPv6")) +fam:value("ipv4", translate("IPv4 only")) +fam:value("ipv6", translate("IPv6 only")) +fam:depends("proto", "ahcp") + +function fam.cfgvalue(self, section) + local v4 = m.uci:get_bool("network", section, "ipv4_only") + local v6 = m.uci:get_bool("network", section, "ipv6_only") + if v4 then + return "ipv4" + elseif v6 then + return "ipv6" + end + return "" +end + +function fam.write(self, section, value) + if value == "ipv4" then + m.uci:set("network", section, "ipv4_only", "true") + m.uci:delete("network", section, "ipv6_only") + elseif value == "ipv6" then + m.uci:set("network", section, "ipv6_only", "true") + m.uci:delete("network", section, "ipv4_only") + end +end + +function fam.remove(self, section) + m.uci:delete("network", section, "ipv4_only") + m.uci:delete("network", section, "ipv6_only") +end + +nodns = s:taboption("ahcp", Flag, "no_dns", translate("Disable DNS setup")) +nodns.optional = true +nodns.enabled = "true" +nodns.disabled = "false" +nodns.default = nodns.disabled +nodns:depends("proto", "ahcp") + +ltime = s:taboption("ahcp", Value, "lease_time", translate("Lease validity time")) +ltime.optional = true +ltime.placeholder = 3666 +ltime.datatype = "uinteger" +ltime:depends("proto", "ahcp") + diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/routes.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/routes.lua new file mode 100644 index 0000000..1970f36 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/routes.lua @@ -0,0 +1,102 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local wa = require "luci.tools.webadmin" +local fs = require "nixio.fs" + +m = Map("network", + translate("Routes"), + translate("Routes specify over which interface and gateway a certain host or network " .. + "can be reached.")) + +s = m:section(TypedSection, "route", translate("Static IPv4 Routes")) +s.addremove = true +s.anonymous = true + +s.template = "cbi/tblsection" + +iface = s:option(ListValue, "interface", translate("Interface")) +wa.cbi_add_networks(iface) + +t = s:option(Value, "target", translate("Target"), translate("Host-IP or Network")) +t.datatype = "ip4addr" +t.rmempty = false + +n = s:option(Value, "netmask", translate("IPv4-Netmask"), translate("if target is a network")) +n.placeholder = "255.255.255.255" +n.datatype = "ip4addr" +n.rmempty = true + +g = s:option(Value, "gateway", translate("IPv4-Gateway")) +g.datatype = "ip4addr" +g.rmempty = true + +metric = s:option(Value, "metric", translate("Metric")) +metric.placeholder = 0 +metric.datatype = "range(0,255)" +metric.size = 5 +metric.rmempty = true + +mtu = s:option(Value, "mtu", translate("MTU")) +mtu.placeholder = 1500 +mtu.datatype = "range(64,9000)" +mtu.size = 5 +mtu.rmempty = true + +routetype = s:option(Value, "type", translate("Route type")) +routetype:value("", "unicast") +routetype:value("local", "local") +routetype:value("broadcast", "broadcast") +routetype:value("multicast", "multicast") +routetype:value("unreachable", "unreachable") +routetype:value("prohibit", "prohibit") +routetype:value("blackhole", "blackhole") +routetype:value("anycast", "anycast") +routetype.default = "" +routetype.rmempty = true + +if fs.access("/proc/net/ipv6_route") then + s = m:section(TypedSection, "route6", translate("Static IPv6 Routes")) + s.addremove = true + s.anonymous = true + + s.template = "cbi/tblsection" + + iface = s:option(ListValue, "interface", translate("Interface")) + wa.cbi_add_networks(iface) + + t = s:option(Value, "target", translate("Target"), translate("IPv6-Address or Network (CIDR)")) + t.datatype = "ip6addr" + t.rmempty = false + + g = s:option(Value, "gateway", translate("IPv6-Gateway")) + g.datatype = "ip6addr" + g.rmempty = true + + metric = s:option(Value, "metric", translate("Metric")) + metric.placeholder = 0 + metric.datatype = "range(0,65535)" -- XXX: not sure + metric.size = 5 + metric.rmempty = true + + mtu = s:option(Value, "mtu", translate("MTU")) + mtu.placeholder = 1500 + mtu.datatype = "range(64,9000)" + mtu.size = 5 + mtu.rmempty = true + + routetype = s:option(Value, "type", translate("Route type")) + routetype:value("", "unicast") + routetype:value("local", "local") + routetype:value("broadcast", "broadcast") + routetype:value("multicast", "multicast") + routetype:value("unreachable", "unreachable") + routetype:value("prohibit", "prohibit") + routetype:value("blackhole", "blackhole") + routetype:value("anycast", "anycast") + routetype.default = "" + routetype.rmempty = true +end + + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua new file mode 100644 index 0000000..902767c --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua @@ -0,0 +1,318 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2010-2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +m = Map("network", translate("Switch"), translate("The network ports on this device can be combined to several VLANs in which computers can communicate directly with each other. VLANs are often used to separate different network segments. Often there is by default one Uplink port for a connection to the next greater network like the internet and other ports for a local network.")) + +local fs = require "nixio.fs" +local nw = require "luci.model.network" +local switches = { } + +nw.init(m.uci) + +local topologies = nw:get_switch_topologies() or {} + +m.uci:foreach("network", "switch", + function(x) + local sid = x['.name'] + local switch_name = x.name or sid + local has_vlan = nil + local has_learn = nil + local has_vlan4k = nil + local has_jumbo3 = nil + local has_mirror = nil + local min_vid = 0 + local max_vid = 16 + local num_vlans = 16 + + local switch_title + local enable_vlan4k = false + + local topo = topologies[switch_name] + + if not topo then + m.message = translatef("Switch %q has an unknown topology - the VLAN settings might not be accurate.", switch_name) + topo = { + ports = { + { num = 0, label = "Port 1" }, + { num = 1, label = "Port 2" }, + { num = 2, label = "Port 3" }, + { num = 3, label = "Port 4" }, + { num = 4, label = "Port 5" }, + { num = 5, label = "CPU (eth0)", tagged = false } + } + } + end + + -- Parse some common switch properties from swconfig help output. + local swc = io.popen("swconfig dev %q help 2>/dev/null" % switch_name) + if swc then + + local is_port_attr = false + local is_vlan_attr = false + + while true do + local line = swc:read("*l") + if not line then break end + + if line:match("^%s+%-%-vlan") then + is_vlan_attr = true + + elseif line:match("^%s+%-%-port") then + is_vlan_attr = false + is_port_attr = true + + elseif line:match("cpu @") then + switch_title = line:match("^switch%d: %w+%((.-)%)") + num_vlans = tonumber(line:match("vlans: (%d+)")) or 16 + min_vid = 1 + + elseif line:match(": pvid") or line:match(": tag") or line:match(": vid") then + if is_vlan_attr then has_vlan4k = line:match(": (%w+)") end + + elseif line:match(": enable_vlan4k") then + enable_vlan4k = true + + elseif line:match(": enable_vlan") then + has_vlan = "enable_vlan" + + elseif line:match(": enable_learning") then + has_learn = "enable_learning" + + elseif line:match(": enable_mirror_rx") then + has_mirror = "enable_mirror_rx" + + elseif line:match(": max_length") then + has_jumbo3 = "max_length" + end + end + + swc:close() + end + + + -- Switch properties + s = m:section(NamedSection, x['.name'], "switch", + switch_title and translatef("Switch %q (%s)", switch_name, switch_title) + or translatef("Switch %q", switch_name)) + + s.addremove = false + + if has_vlan then + s:option(Flag, has_vlan, translate("Enable VLAN functionality")) + end + + if has_learn then + x = s:option(Flag, has_learn, translate("Enable learning and aging")) + x.default = x.enabled + end + + if has_jumbo3 then + x = s:option(Flag, has_jumbo3, translate("Enable Jumbo Frame passthrough")) + x.enabled = "3" + x.rmempty = true + end + + -- Does this switch support port mirroring? + if has_mirror then + s:option(Flag, "enable_mirror_rx", translate("Enable mirroring of incoming packets")) + s:option(Flag, "enable_mirror_tx", translate("Enable mirroring of outgoing packets")) + + local sp = s:option(ListValue, "mirror_source_port", translate("Mirror source port")) + local mp = s:option(ListValue, "mirror_monitor_port", translate("Mirror monitor port")) + + sp:depends("enable_mirror_tx", "1") + sp:depends("enable_mirror_rx", "1") + + mp:depends("enable_mirror_tx", "1") + mp:depends("enable_mirror_rx", "1") + + local _, pt + for _, pt in ipairs(topo.ports) do + sp:value(pt.num, pt.label) + mp:value(pt.num, pt.label) + end + end + + -- VLAN table + s = m:section(TypedSection, "switch_vlan", + switch_title and translatef("VLANs on %q (%s)", switch_name, switch_title) + or translatef("VLANs on %q", switch_name)) + + s.template = "cbi/tblsection" + s.addremove = true + s.anonymous = true + + -- Filter by switch + s.filter = function(self, section) + local device = m:get(section, "device") + return (device and device == switch_name) + end + + -- Override cfgsections callback to enforce row ordering by vlan id. + s.cfgsections = function(self) + local osections = TypedSection.cfgsections(self) + local sections = { } + local section + + for _, section in luci.util.spairs( + osections, + function(a, b) + return (tonumber(m:get(osections[a], has_vlan4k or "vlan")) or 9999) + < (tonumber(m:get(osections[b], has_vlan4k or "vlan")) or 9999) + end + ) do + sections[#sections+1] = section + end + + return sections + end + + -- When creating a new vlan, preset it with the highest found vid + 1. + s.create = function(self, section, origin) + -- Filter by switch + if m:get(origin, "device") ~= switch_name then + return + end + + local sid = TypedSection.create(self, section) + + local max_nr = 0 + local max_id = 0 + + m.uci:foreach("network", "switch_vlan", + function(s) + if s.device == switch_name then + local nr = tonumber(s.vlan) + local id = has_vlan4k and tonumber(s[has_vlan4k]) + if nr ~= nil and nr > max_nr then max_nr = nr end + if id ~= nil and id > max_id then max_id = id end + end + end) + + m:set(sid, "device", switch_name) + m:set(sid, "vlan", max_nr + 1) + + if has_vlan4k then + m:set(sid, has_vlan4k, max_id + 1) + end + + return sid + end + + + local port_opts = { } + local untagged = { } + + -- Parse current tagging state from the "ports" option. + local portvalue = function(self, section) + local pt + for pt in (m:get(section, "ports") or ""):gmatch("%w+") do + local pc, tu = pt:match("^(%d+)([tu]*)") + if pc == self.option then return (#tu > 0) and tu or "u" end + end + return "" + end + + -- Validate port tagging. Ensure that a port is only untagged once, + -- bail out if not. + local portvalidate = function(self, value, section) + -- ensure that the ports appears untagged only once + if value == "u" then + if not untagged[self.option] then + untagged[self.option] = true + else + return nil, + translatef("%s is untagged in multiple VLANs!", self.title) + end + end + return value + end + + + local vid = s:option(Value, has_vlan4k or "vlan", "VLAN ID", "
" % switch_name) + local mx_vid = has_vlan4k and 4094 or (num_vlans - 1) + + vid.rmempty = false + vid.forcewrite = true + vid.vlan_used = { } + vid.datatype = "and(uinteger,range("..min_vid..","..mx_vid.."))" + + -- Validate user provided VLAN ID, make sure its within the bounds + -- allowed by the switch. + vid.validate = function(self, value, section) + local v = tonumber(value) + local m = has_vlan4k and 4094 or (num_vlans - 1) + if v ~= nil and v >= min_vid and v <= m then + if not self.vlan_used[v] then + self.vlan_used[v] = true + return value + else + return nil, + translatef("Invalid VLAN ID given! Only unique IDs are allowed") + end + else + return nil, + translatef("Invalid VLAN ID given! Only IDs between %d and %d are allowed.", min_vid, m) + end + end + + -- When writing the "vid" or "vlan" option, serialize the port states + -- as well and write them as "ports" option to uci. + vid.write = function(self, section, value) + local o + local p = { } + + for _, o in ipairs(port_opts) do + local v = o:formvalue(section) + if v == "t" then + p[#p+1] = o.option .. v + elseif v == "u" then + p[#p+1] = o.option + end + end + + if enable_vlan4k then + m:set(sid, "enable_vlan4k", "1") + end + + m:set(section, "ports", table.concat(p, " ")) + return Value.write(self, section, value) + end + + -- Fallback to "vlan" option if "vid" option is supported but unset. + vid.cfgvalue = function(self, section) + return m:get(section, has_vlan4k or "vlan") + or m:get(section, "vlan") + end + + local _, pt + for _, pt in ipairs(topo.ports) do + local po = s:option(ListValue, tostring(pt.num), pt.label, '
' %{ switch_name, pt.num }) + + po:value("", translate("off")) + + if not pt.tagged then + po:value("u", translate("untagged")) + end + + po:value("t", translate("tagged")) + + po.cfgvalue = portvalue + po.validate = portvalidate + po.write = function() end + + port_opts[#port_opts+1] = po + end + + table.sort(port_opts, function(a, b) return a.option < b.option end) + switches[#switches+1] = switch_name + end +) + +-- Switch status template +s = m:section(SimpleSection) +s.template = "admin_network/switch_status" +s.switches = switches + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua new file mode 100644 index 0000000..2dff4dd --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua @@ -0,0 +1,1049 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local wa = require "luci.tools.webadmin" +local nw = require "luci.model.network" +local ut = require "luci.util" +local nt = require "luci.sys".net +local fs = require "nixio.fs" + +arg[1] = arg[1] or "" + +m = Map("wireless", "", + translate("The Device Configuration section covers physical settings of the radio " .. + "hardware such as channel, transmit power or antenna selection which are shared among all " .. + "defined wireless networks (if the radio hardware is multi-SSID capable). Per network settings " .. + "like encryption or operation mode are grouped in the Interface Configuration.")) + +m:chain("network") +m:chain("firewall") +m.redirect = luci.dispatcher.build_url("admin/network/wireless") + +local ifsection + +function m.on_commit(map) + local wnet = nw:get_wifinet(arg[1]) + if ifsection and wnet then + ifsection.section = wnet.sid + m.title = luci.util.pcdata(wnet:get_i18n()) + end +end + +nw.init(m.uci) + +local wnet = nw:get_wifinet(arg[1]) +local wdev = wnet and wnet:get_device() + +-- redirect to overview page if network does not exist anymore (e.g. after a revert) +if not wnet or not wdev then + luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless")) + return +end + +-- wireless toggle was requested, commit and reload page +function m.parse(map) + if m:formvalue("cbid.wireless.%s.__toggle" % wdev:name()) then + if wdev:get("disabled") == "1" or wnet:get("disabled") == "1" then + wnet:set("disabled", nil) + else + wnet:set("disabled", "1") + end + wdev:set("disabled", nil) + + nw:commit("wireless") + luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") + + luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless", arg[1])) + return + end + Map.parse(map) +end + +m.title = luci.util.pcdata(wnet:get_i18n()) + + +local function txpower_list(iw) + local list = iw.txpwrlist or { } + local off = tonumber(iw.txpower_offset) or 0 + local new = { } + local prev = -1 + local _, val + for _, val in ipairs(list) do + local dbm = val.dbm + off + local mw = math.floor(10 ^ (dbm / 10)) + if mw ~= prev then + prev = mw + new[#new+1] = { + display_dbm = dbm, + display_mw = mw, + driver_dbm = val.dbm, + driver_mw = val.mw + } + end + end + return new +end + +local function txpower_current(pwr, list) + pwr = tonumber(pwr) + if pwr ~= nil then + local _, item + for _, item in ipairs(list) do + if item.driver_dbm >= pwr then + return item.driver_dbm + end + end + end + return (list[#list] and list[#list].driver_dbm) or pwr or 0 +end + +local iw = luci.sys.wifi.getiwinfo(arg[1]) +local hw_modes = iw.hwmodelist or { } +local tx_power_list = txpower_list(iw) +local tx_power_cur = txpower_current(wdev:get("txpower"), tx_power_list) + +s = m:section(NamedSection, wdev:name(), "wifi-device", translate("Device Configuration")) +s.addremove = false + +s:tab("general", translate("General Setup")) +s:tab("macfilter", translate("MAC-Filter")) +s:tab("advanced", translate("Advanced Settings")) + +--[[ +back = s:option(DummyValue, "_overview", translate("Overview")) +back.value = "" +back.titleref = luci.dispatcher.build_url("admin", "network", "wireless") +]] + +st = s:taboption("general", DummyValue, "__status", translate("Status")) +st.template = "admin_network/wifi_status" +st.ifname = arg[1] + +en = s:taboption("general", Button, "__toggle") + +if wdev:get("disabled") == "1" or wnet:get("disabled") == "1" then + en.title = translate("Wireless network is disabled") + en.inputtitle = translate("Enable") + en.inputstyle = "apply" +else + en.title = translate("Wireless network is enabled") + en.inputtitle = translate("Disable") + en.inputstyle = "reset" +end + + +local hwtype = wdev:get("type") + +-- NanoFoo +local nsantenna = wdev:get("antenna") + +-- Check whether there are client interfaces on the same radio, +-- if yes, lock the channel choice as these stations will dicatate the freq +local found_sta = nil +local _, net +if wnet:mode() ~= "sta" then + for _, net in ipairs(wdev:get_wifinets()) do + if net:mode() == "sta" and net:get("disabled") ~= "1" then + if not found_sta then + found_sta = {} + found_sta.channel = net:channel() + found_sta.names = {} + end + found_sta.names[#found_sta.names+1] = net:shortname() + end + end +end + +if found_sta then + ch = s:taboption("general", DummyValue, "choice", translate("Channel")) + ch.value = translatef("Locked to channel %s used by: %s", + found_sta.channel or "(auto)", table.concat(found_sta.names, ", ")) +else + ch = s:taboption("general", Value, "_mode_freq", '
'..translate("Operating frequency")) + ch.hwmodes = hw_modes + ch.htmodes = iw.htmodelist + ch.freqlist = iw.freqlist + ch.template = "cbi/wireless_modefreq" + + function ch.cfgvalue(self, section) + return { + m:get(section, "hwmode") or "", + m:get(section, "channel") or "auto", + m:get(section, "htmode") or "" + } + end + + function ch.formvalue(self, section) + return { + m:formvalue(self:cbid(section) .. ".band") or (hw_modes.g and "11g" or "11a"), + m:formvalue(self:cbid(section) .. ".channel") or "auto", + m:formvalue(self:cbid(section) .. ".htmode") or "" + } + end + + function ch.write(self, section, value) + m:set(section, "hwmode", value[1]) + m:set(section, "channel", value[2]) + m:set(section, "htmode", value[3]) + end +end + +------------------- MAC80211 Device ------------------ + +if hwtype == "mac80211" then + if #tx_power_list > 1 then + tp = s:taboption("general", ListValue, + "txpower", translate("Transmit Power"), "dBm") + tp.rmempty = true + tp.default = tx_power_cur + function tp.cfgvalue(...) + return txpower_current(Value.cfgvalue(...), tx_power_list) + end + + for _, p in ipairs(tx_power_list) do + tp:value(p.driver_dbm, "%i dBm (%i mW)" + %{ p.display_dbm, p.display_mw }) + end + end + + local cl = iw and iw.countrylist + if cl and #cl > 0 then + cc = s:taboption("advanced", ListValue, "country", translate("Country Code"), translate("Use ISO/IEC 3166 alpha2 country codes.")) + cc.default = tostring(iw and iw.country or "00") + for _, c in ipairs(cl) do + cc:value(c.alpha2, "%s - %s" %{ c.alpha2, c.name }) + end + else + s:taboption("advanced", Value, "country", translate("Country Code"), translate("Use ISO/IEC 3166 alpha2 country codes.")) + end + + s:taboption("advanced", Value, "distance", translate("Distance Optimization"), + translate("Distance to farthest network member in meters.")) + + -- external antenna profiles + local eal = iw and iw.extant + if eal and #eal > 0 then + ea = s:taboption("advanced", ListValue, "extant", translate("Antenna Configuration")) + for _, eap in ipairs(eal) do + ea:value(eap.id, "%s (%s)" %{ eap.name, eap.description }) + if eap.selected then + ea.default = eap.id + end + end + end + + s:taboption("advanced", Value, "frag", translate("Fragmentation Threshold")) + s:taboption("advanced", Value, "rts", translate("RTS/CTS Threshold")) +end + + +------------------- Madwifi Device ------------------ + +if hwtype == "atheros" then + tp = s:taboption("general", + (#tx_power_list > 0) and ListValue or Value, + "txpower", translate("Transmit Power"), "dBm") + + tp.rmempty = true + tp.default = tx_power_cur + + function tp.cfgvalue(...) + return txpower_current(Value.cfgvalue(...), tx_power_list) + end + + for _, p in ipairs(tx_power_list) do + tp:value(p.driver_dbm, "%i dBm (%i mW)" + %{ p.display_dbm, p.display_mw }) + end + + s:taboption("advanced", Flag, "diversity", translate("Diversity")).rmempty = false + + if not nsantenna then + ant1 = s:taboption("advanced", ListValue, "txantenna", translate("Transmitter Antenna")) + ant1.widget = "radio" + ant1.orientation = "horizontal" + ant1:depends("diversity", "") + ant1:value("0", translate("auto")) + ant1:value("1", translate("Antenna 1")) + ant1:value("2", translate("Antenna 2")) + + ant2 = s:taboption("advanced", ListValue, "rxantenna", translate("Receiver Antenna")) + ant2.widget = "radio" + ant2.orientation = "horizontal" + ant2:depends("diversity", "") + ant2:value("0", translate("auto")) + ant2:value("1", translate("Antenna 1")) + ant2:value("2", translate("Antenna 2")) + + else -- NanoFoo + local ant = s:taboption("advanced", ListValue, "antenna", translate("Transmitter Antenna")) + ant:value("auto") + ant:value("vertical") + ant:value("horizontal") + ant:value("external") + end + + s:taboption("advanced", Value, "distance", translate("Distance Optimization"), + translate("Distance to farthest network member in meters.")) + s:taboption("advanced", Value, "regdomain", translate("Regulatory Domain")) + s:taboption("advanced", Value, "country", translate("Country Code")) + s:taboption("advanced", Flag, "outdoor", translate("Outdoor Channels")) + + --s:option(Flag, "nosbeacon", translate("Disable HW-Beacon timer")) +end + + + +------------------- Broadcom Device ------------------ + +if hwtype == "broadcom" then + tp = s:taboption("general", + (#tx_power_list > 0) and ListValue or Value, + "txpower", translate("Transmit Power"), "dBm") + + tp.rmempty = true + tp.default = tx_power_cur + + function tp.cfgvalue(...) + return txpower_current(Value.cfgvalue(...), tx_power_list) + end + + for _, p in ipairs(tx_power_list) do + tp:value(p.driver_dbm, "%i dBm (%i mW)" + %{ p.display_dbm, p.display_mw }) + end + + mode = s:taboption("advanced", ListValue, "hwmode", translate("Band")) + if hw_modes.b then + mode:value("11b", "2.4GHz (802.11b)") + if hw_modes.g then + mode:value("11bg", "2.4GHz (802.11b+g)") + end + end + if hw_modes.g then + mode:value("11g", "2.4GHz (802.11g)") + mode:value("11gst", "2.4GHz (802.11g + Turbo)") + mode:value("11lrs", "2.4GHz (802.11g Limited Rate Support)") + end + if hw_modes.a then mode:value("11a", "5GHz (802.11a)") end + if hw_modes.n then + if hw_modes.g then + mode:value("11ng", "2.4GHz (802.11g+n)") + mode:value("11n", "2.4GHz (802.11n)") + end + if hw_modes.a then + mode:value("11na", "5GHz (802.11a+n)") + mode:value("11n", "5GHz (802.11n)") + end + htmode = s:taboption("advanced", ListValue, "htmode", translate("HT mode (802.11n)")) + htmode:depends("hwmode", "11ng") + htmode:depends("hwmode", "11na") + htmode:depends("hwmode", "11n") + htmode:value("HT20", "20MHz") + htmode:value("HT40", "40MHz") + end + + ant1 = s:taboption("advanced", ListValue, "txantenna", translate("Transmitter Antenna")) + ant1.widget = "radio" + ant1:depends("diversity", "") + ant1:value("3", translate("auto")) + ant1:value("0", translate("Antenna 1")) + ant1:value("1", translate("Antenna 2")) + + ant2 = s:taboption("advanced", ListValue, "rxantenna", translate("Receiver Antenna")) + ant2.widget = "radio" + ant2:depends("diversity", "") + ant2:value("3", translate("auto")) + ant2:value("0", translate("Antenna 1")) + ant2:value("1", translate("Antenna 2")) + + s:taboption("advanced", Flag, "frameburst", translate("Frame Bursting")) + + s:taboption("advanced", Value, "distance", translate("Distance Optimization")) + --s:option(Value, "slottime", translate("Slot time")) + + s:taboption("advanced", Value, "country", translate("Country Code")) + s:taboption("advanced", Value, "maxassoc", translate("Connection Limit")) +end + + +--------------------- HostAP Device --------------------- + +if hwtype == "prism2" then + s:taboption("advanced", Value, "txpower", translate("Transmit Power"), "att units").rmempty = true + + s:taboption("advanced", Flag, "diversity", translate("Diversity")).rmempty = false + + s:taboption("advanced", Value, "txantenna", translate("Transmitter Antenna")) + s:taboption("advanced", Value, "rxantenna", translate("Receiver Antenna")) +end + + +----------------------- Interface ----------------------- + +s = m:section(NamedSection, wnet.sid, "wifi-iface", translate("Interface Configuration")) +ifsection = s +s.addremove = false +s.anonymous = true +s.defaults.device = wdev:name() + +s:tab("general", translate("General Setup")) +s:tab("encryption", translate("Wireless Security")) +s:tab("macfilter", translate("MAC-Filter")) +s:tab("advanced", translate("Advanced Settings")) + +ssid = s:taboption("general", Value, "ssid", translate("ESSID")) +ssid.datatype = "maxlength(32)" + +mode = s:taboption("general", ListValue, "mode", translate("Mode")) +mode.override_values = true +mode:value("ap", translate("Access Point")) +mode:value("sta", translate("Client")) +mode:value("adhoc", translate("Ad-Hoc")) + +bssid = s:taboption("general", Value, "bssid", translate("BSSID")) + +network = s:taboption("general", Value, "network", translate("Network"), + translate("Choose the network(s) you want to attach to this wireless interface or " .. + "fill out the create field to define a new network.")) + +network.rmempty = true +network.template = "cbi/network_netlist" +network.widget = "checkbox" +network.novirtual = true + +function network.write(self, section, value) + local i = nw:get_interface(section) + if i then + if value == '-' then + value = m:formvalue(self:cbid(section) .. ".newnet") + if value and #value > 0 then + local n = nw:add_network(value, {proto="none"}) + if n then n:add_interface(i) end + else + local n = i:get_network() + if n then n:del_interface(i) end + end + else + local v + for _, v in ipairs(i:get_networks()) do + v:del_interface(i) + end + for v in ut.imatch(value) do + local n = nw:get_network(v) + if n then + if not n:is_empty() then + n:set("type", "bridge") + end + n:add_interface(i) + end + end + end + end +end + +-------------------- MAC80211 Interface ---------------------- + +if hwtype == "mac80211" then + if fs.access("/usr/sbin/iw") then + mode:value("mesh", "802.11s") + end + + mode:value("ahdemo", translate("Pseudo Ad-Hoc (ahdemo)")) + mode:value("monitor", translate("Monitor")) + bssid:depends({mode="adhoc"}) + bssid:depends({mode="sta"}) + bssid:depends({mode="sta-wds"}) + + mp = s:taboption("macfilter", ListValue, "macfilter", translate("MAC-Address Filter")) + mp:depends({mode="ap"}) + mp:depends({mode="ap-wds"}) + mp:value("", translate("disable")) + mp:value("allow", translate("Allow listed only")) + mp:value("deny", translate("Allow all except listed")) + + ml = s:taboption("macfilter", DynamicList, "maclist", translate("MAC-List")) + ml.datatype = "macaddr" + ml:depends({macfilter="allow"}) + ml:depends({macfilter="deny"}) + nt.mac_hints(function(mac, name) ml:value(mac, "%s (%s)" %{ mac, name }) end) + + mode:value("ap-wds", "%s (%s)" % {translate("Access Point"), translate("WDS")}) + mode:value("sta-wds", "%s (%s)" % {translate("Client"), translate("WDS")}) + + function mode.write(self, section, value) + if value == "ap-wds" then + ListValue.write(self, section, "ap") + m.uci:set("wireless", section, "wds", 1) + elseif value == "sta-wds" then + ListValue.write(self, section, "sta") + m.uci:set("wireless", section, "wds", 1) + else + ListValue.write(self, section, value) + m.uci:delete("wireless", section, "wds") + end + end + + function mode.cfgvalue(self, section) + local mode = ListValue.cfgvalue(self, section) + local wds = m.uci:get("wireless", section, "wds") == "1" + + if mode == "ap" and wds then + return "ap-wds" + elseif mode == "sta" and wds then + return "sta-wds" + else + return mode + end + end + + hidden = s:taboption("general", Flag, "hidden", translate("Hide ESSID")) + hidden:depends({mode="ap"}) + hidden:depends({mode="ap-wds"}) + + wmm = s:taboption("general", Flag, "wmm", translate("WMM Mode")) + wmm:depends({mode="ap"}) + wmm:depends({mode="ap-wds"}) + wmm.default = wmm.enabled + + ifname = s:taboption("advanced", Value, "ifname", translate("Interface name"), translate("Override default interface name")) + ifname.optional = true +end + + + +-------------------- Madwifi Interface ---------------------- + +if hwtype == "atheros" then + mode:value("ahdemo", translate("Pseudo Ad-Hoc (ahdemo)")) + mode:value("monitor", translate("Monitor")) + mode:value("ap-wds", "%s (%s)" % {translate("Access Point"), translate("WDS")}) + mode:value("sta-wds", "%s (%s)" % {translate("Client"), translate("WDS")}) + mode:value("wds", translate("Static WDS")) + + function mode.write(self, section, value) + if value == "ap-wds" then + ListValue.write(self, section, "ap") + m.uci:set("wireless", section, "wds", 1) + elseif value == "sta-wds" then + ListValue.write(self, section, "sta") + m.uci:set("wireless", section, "wds", 1) + else + ListValue.write(self, section, value) + m.uci:delete("wireless", section, "wds") + end + end + + function mode.cfgvalue(self, section) + local mode = ListValue.cfgvalue(self, section) + local wds = m.uci:get("wireless", section, "wds") == "1" + + if mode == "ap" and wds then + return "ap-wds" + elseif mode == "sta" and wds then + return "sta-wds" + else + return mode + end + end + + bssid:depends({mode="adhoc"}) + bssid:depends({mode="ahdemo"}) + bssid:depends({mode="wds"}) + + wdssep = s:taboption("advanced", Flag, "wdssep", translate("Separate WDS")) + wdssep:depends({mode="ap-wds"}) + + s:taboption("advanced", Flag, "doth", "802.11h") + hidden = s:taboption("general", Flag, "hidden", translate("Hide ESSID")) + hidden:depends({mode="ap"}) + hidden:depends({mode="adhoc"}) + hidden:depends({mode="ap-wds"}) + hidden:depends({mode="sta-wds"}) + isolate = s:taboption("advanced", Flag, "isolate", translate("Separate Clients"), + translate("Prevents client-to-client communication")) + isolate:depends({mode="ap"}) + s:taboption("advanced", Flag, "bgscan", translate("Background Scan")) + + mp = s:taboption("macfilter", ListValue, "macpolicy", translate("MAC-Address Filter")) + mp:value("", translate("disable")) + mp:value("allow", translate("Allow listed only")) + mp:value("deny", translate("Allow all except listed")) + + ml = s:taboption("macfilter", DynamicList, "maclist", translate("MAC-List")) + ml.datatype = "macaddr" + ml:depends({macpolicy="allow"}) + ml:depends({macpolicy="deny"}) + nt.mac_hints(function(mac, name) ml:value(mac, "%s (%s)" %{ mac, name }) end) + + s:taboption("advanced", Value, "rate", translate("Transmission Rate")) + s:taboption("advanced", Value, "mcast_rate", translate("Multicast Rate")) + s:taboption("advanced", Value, "frag", translate("Fragmentation Threshold")) + s:taboption("advanced", Value, "rts", translate("RTS/CTS Threshold")) + s:taboption("advanced", Value, "minrate", translate("Minimum Rate")) + s:taboption("advanced", Value, "maxrate", translate("Maximum Rate")) + s:taboption("advanced", Flag, "compression", translate("Compression")) + + s:taboption("advanced", Flag, "bursting", translate("Frame Bursting")) + s:taboption("advanced", Flag, "turbo", translate("Turbo Mode")) + s:taboption("advanced", Flag, "ff", translate("Fast Frames")) + + s:taboption("advanced", Flag, "wmm", translate("WMM Mode")) + s:taboption("advanced", Flag, "xr", translate("XR Support")) + s:taboption("advanced", Flag, "ar", translate("AR Support")) + + local swm = s:taboption("advanced", Flag, "sw_merge", translate("Disable HW-Beacon timer")) + swm:depends({mode="adhoc"}) + + local nos = s:taboption("advanced", Flag, "nosbeacon", translate("Disable HW-Beacon timer")) + nos:depends({mode="sta"}) + nos:depends({mode="sta-wds"}) + + local probereq = s:taboption("advanced", Flag, "probereq", translate("Do not send probe responses")) + probereq.enabled = "0" + probereq.disabled = "1" +end + + +-------------------- Broadcom Interface ---------------------- + +if hwtype == "broadcom" then + mode:value("wds", translate("WDS")) + mode:value("monitor", translate("Monitor")) + + hidden = s:taboption("general", Flag, "hidden", translate("Hide ESSID")) + hidden:depends({mode="ap"}) + hidden:depends({mode="adhoc"}) + hidden:depends({mode="wds"}) + + isolate = s:taboption("advanced", Flag, "isolate", translate("Separate Clients"), + translate("Prevents client-to-client communication")) + isolate:depends({mode="ap"}) + + s:taboption("advanced", Flag, "doth", "802.11h") + s:taboption("advanced", Flag, "wmm", translate("WMM Mode")) + + bssid:depends({mode="wds"}) + bssid:depends({mode="adhoc"}) +end + + +----------------------- HostAP Interface --------------------- + +if hwtype == "prism2" then + mode:value("wds", translate("WDS")) + mode:value("monitor", translate("Monitor")) + + hidden = s:taboption("general", Flag, "hidden", translate("Hide ESSID")) + hidden:depends({mode="ap"}) + hidden:depends({mode="adhoc"}) + hidden:depends({mode="wds"}) + + bssid:depends({mode="sta"}) + + mp = s:taboption("macfilter", ListValue, "macpolicy", translate("MAC-Address Filter")) + mp:value("", translate("disable")) + mp:value("allow", translate("Allow listed only")) + mp:value("deny", translate("Allow all except listed")) + ml = s:taboption("macfilter", DynamicList, "maclist", translate("MAC-List")) + ml:depends({macpolicy="allow"}) + ml:depends({macpolicy="deny"}) + nt.mac_hints(function(mac, name) ml:value(mac, "%s (%s)" %{ mac, name }) end) + + s:taboption("advanced", Value, "rate", translate("Transmission Rate")) + s:taboption("advanced", Value, "frag", translate("Fragmentation Threshold")) + s:taboption("advanced", Value, "rts", translate("RTS/CTS Threshold")) +end + + +------------------- WiFI-Encryption ------------------- + +encr = s:taboption("encryption", ListValue, "encryption", translate("Encryption")) +encr.override_values = true +encr.override_depends = true +encr:depends({mode="ap"}) +encr:depends({mode="sta"}) +encr:depends({mode="adhoc"}) +encr:depends({mode="ahdemo"}) +encr:depends({mode="ap-wds"}) +encr:depends({mode="sta-wds"}) +encr:depends({mode="mesh"}) + +cipher = s:taboption("encryption", ListValue, "cipher", translate("Cipher")) +cipher:depends({encryption="wpa"}) +cipher:depends({encryption="wpa2"}) +cipher:depends({encryption="psk"}) +cipher:depends({encryption="psk2"}) +cipher:depends({encryption="wpa-mixed"}) +cipher:depends({encryption="psk-mixed"}) +cipher:value("auto", translate("auto")) +cipher:value("ccmp", translate("Force CCMP (AES)")) +cipher:value("tkip", translate("Force TKIP")) +cipher:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)")) + +function encr.cfgvalue(self, section) + local v = tostring(ListValue.cfgvalue(self, section)) + if v == "wep" then + return "wep-open" + elseif v and v:match("%+") then + return (v:gsub("%+.+$", "")) + end + return v +end + +function encr.write(self, section, value) + local e = tostring(encr:formvalue(section)) + local c = tostring(cipher:formvalue(section)) + if value == "wpa" or value == "wpa2" then + self.map.uci:delete("wireless", section, "key") + end + if e and (c == "tkip" or c == "ccmp" or c == "tkip+ccmp") then + e = e .. "+" .. c + end + self.map:set(section, "encryption", e) +end + +function cipher.cfgvalue(self, section) + local v = tostring(ListValue.cfgvalue(encr, section)) + if v and v:match("%+") then + v = v:gsub("^[^%+]+%+", "") + if v == "aes" then v = "ccmp" + elseif v == "tkip+aes" then v = "tkip+ccmp" + elseif v == "aes+tkip" then v = "tkip+ccmp" + elseif v == "ccmp+tkip" then v = "tkip+ccmp" + end + end + return v +end + +function cipher.write(self, section) + return encr:write(section) +end + + +encr:value("none", "No Encryption") +encr:value("wep-open", translate("WEP Open System"), {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}, {mode="adhoc"}, {mode="ahdemo"}, {mode="wds"}) +encr:value("wep-shared", translate("WEP Shared Key"), {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}, {mode="adhoc"}, {mode="ahdemo"}, {mode="wds"}) + +if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then + local supplicant = fs.access("/usr/sbin/wpa_supplicant") + local hostapd = fs.access("/usr/sbin/hostapd") + + -- Probe EAP support + local has_ap_eap = (os.execute("hostapd -veap >/dev/null 2>/dev/null") == 0) + local has_sta_eap = (os.execute("wpa_supplicant -veap >/dev/null 2>/dev/null") == 0) + + if hostapd and supplicant then + encr:value("psk", "WPA-PSK", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}) + encr:value("psk2", "WPA2-PSK", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}) + encr:value("psk-mixed", "WPA-PSK/WPA2-PSK Mixed Mode", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}) + if has_ap_eap and has_sta_eap then + encr:value("wpa", "WPA-EAP", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}) + encr:value("wpa2", "WPA2-EAP", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}) + end + elseif hostapd and not supplicant then + encr:value("psk", "WPA-PSK", {mode="ap"}, {mode="ap-wds"}) + encr:value("psk2", "WPA2-PSK", {mode="ap"}, {mode="ap-wds"}) + encr:value("psk-mixed", "WPA-PSK/WPA2-PSK Mixed Mode", {mode="ap"}, {mode="ap-wds"}) + if has_ap_eap then + encr:value("wpa", "WPA-EAP", {mode="ap"}, {mode="ap-wds"}) + encr:value("wpa2", "WPA2-EAP", {mode="ap"}, {mode="ap-wds"}) + end + encr.description = translate( + "WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " .. + "and ad-hoc mode) to be installed." + ) + elseif not hostapd and supplicant then + encr:value("psk", "WPA-PSK", {mode="sta"}, {mode="sta-wds"}) + encr:value("psk2", "WPA2-PSK", {mode="sta"}, {mode="sta-wds"}) + encr:value("psk-mixed", "WPA-PSK/WPA2-PSK Mixed Mode", {mode="sta"}, {mode="sta-wds"}) + if has_sta_eap then + encr:value("wpa", "WPA-EAP", {mode="sta"}, {mode="sta-wds"}) + encr:value("wpa2", "WPA2-EAP", {mode="sta"}, {mode="sta-wds"}) + end + encr.description = translate( + "WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " .. + "and ad-hoc mode) to be installed." + ) + else + encr.description = translate( + "WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " .. + "and ad-hoc mode) to be installed." + ) + end +elseif hwtype == "broadcom" then + encr:value("psk", "WPA-PSK") + encr:value("psk2", "WPA2-PSK") + encr:value("psk+psk2", "WPA-PSK/WPA2-PSK Mixed Mode") +end + +auth_server = s:taboption("encryption", Value, "auth_server", translate("Radius-Authentication-Server")) +auth_server:depends({mode="ap", encryption="wpa"}) +auth_server:depends({mode="ap", encryption="wpa2"}) +auth_server:depends({mode="ap-wds", encryption="wpa"}) +auth_server:depends({mode="ap-wds", encryption="wpa2"}) +auth_server.rmempty = true +auth_server.datatype = "host(0)" + +auth_port = s:taboption("encryption", Value, "auth_port", translate("Radius-Authentication-Port"), translatef("Default %d", 1812)) +auth_port:depends({mode="ap", encryption="wpa"}) +auth_port:depends({mode="ap", encryption="wpa2"}) +auth_port:depends({mode="ap-wds", encryption="wpa"}) +auth_port:depends({mode="ap-wds", encryption="wpa2"}) +auth_port.rmempty = true +auth_port.datatype = "port" + +auth_secret = s:taboption("encryption", Value, "auth_secret", translate("Radius-Authentication-Secret")) +auth_secret:depends({mode="ap", encryption="wpa"}) +auth_secret:depends({mode="ap", encryption="wpa2"}) +auth_secret:depends({mode="ap-wds", encryption="wpa"}) +auth_secret:depends({mode="ap-wds", encryption="wpa2"}) +auth_secret.rmempty = true +auth_secret.password = true + +acct_server = s:taboption("encryption", Value, "acct_server", translate("Radius-Accounting-Server")) +acct_server:depends({mode="ap", encryption="wpa"}) +acct_server:depends({mode="ap", encryption="wpa2"}) +acct_server:depends({mode="ap-wds", encryption="wpa"}) +acct_server:depends({mode="ap-wds", encryption="wpa2"}) +acct_server.rmempty = true +acct_server.datatype = "host(0)" + +acct_port = s:taboption("encryption", Value, "acct_port", translate("Radius-Accounting-Port"), translatef("Default %d", 1813)) +acct_port:depends({mode="ap", encryption="wpa"}) +acct_port:depends({mode="ap", encryption="wpa2"}) +acct_port:depends({mode="ap-wds", encryption="wpa"}) +acct_port:depends({mode="ap-wds", encryption="wpa2"}) +acct_port.rmempty = true +acct_port.datatype = "port" + +acct_secret = s:taboption("encryption", Value, "acct_secret", translate("Radius-Accounting-Secret")) +acct_secret:depends({mode="ap", encryption="wpa"}) +acct_secret:depends({mode="ap", encryption="wpa2"}) +acct_secret:depends({mode="ap-wds", encryption="wpa"}) +acct_secret:depends({mode="ap-wds", encryption="wpa2"}) +acct_secret.rmempty = true +acct_secret.password = true + +wpakey = s:taboption("encryption", Value, "_wpa_key", translate("Key")) +wpakey:depends("encryption", "psk") +wpakey:depends("encryption", "psk2") +wpakey:depends("encryption", "psk+psk2") +wpakey:depends("encryption", "psk-mixed") +wpakey.datatype = "wpakey" +wpakey.rmempty = true +wpakey.password = true + +wpakey.cfgvalue = function(self, section, value) + local key = m.uci:get("wireless", section, "key") + if key == "1" or key == "2" or key == "3" or key == "4" then + return nil + end + return key +end + +wpakey.write = function(self, section, value) + self.map.uci:set("wireless", section, "key", value) + self.map.uci:delete("wireless", section, "key1") +end + + +wepslot = s:taboption("encryption", ListValue, "_wep_key", translate("Used Key Slot")) +wepslot:depends("encryption", "wep-open") +wepslot:depends("encryption", "wep-shared") +wepslot:value("1", translatef("Key #%d", 1)) +wepslot:value("2", translatef("Key #%d", 2)) +wepslot:value("3", translatef("Key #%d", 3)) +wepslot:value("4", translatef("Key #%d", 4)) + +wepslot.cfgvalue = function(self, section) + local slot = tonumber(m.uci:get("wireless", section, "key")) + if not slot or slot < 1 or slot > 4 then + return 1 + end + return slot +end + +wepslot.write = function(self, section, value) + self.map.uci:set("wireless", section, "key", value) +end + +local slot +for slot=1,4 do + wepkey = s:taboption("encryption", Value, "key" .. slot, translatef("Key #%d", slot)) + wepkey:depends("encryption", "wep-open") + wepkey:depends("encryption", "wep-shared") + wepkey.datatype = "wepkey" + wepkey.rmempty = true + wepkey.password = true + + function wepkey.write(self, section, value) + if value and (#value == 5 or #value == 13) then + value = "s:" .. value + end + return Value.write(self, section, value) + end +end + + +if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then + nasid = s:taboption("encryption", Value, "nasid", translate("NAS ID")) + nasid:depends({mode="ap", encryption="wpa"}) + nasid:depends({mode="ap", encryption="wpa2"}) + nasid:depends({mode="ap-wds", encryption="wpa"}) + nasid:depends({mode="ap-wds", encryption="wpa2"}) + nasid.rmempty = true + + eaptype = s:taboption("encryption", ListValue, "eap_type", translate("EAP-Method")) + eaptype:value("tls", "TLS") + eaptype:value("ttls", "TTLS") + eaptype:value("peap", "PEAP") + eaptype:value("fast", "FAST") + eaptype:depends({mode="sta", encryption="wpa"}) + eaptype:depends({mode="sta", encryption="wpa2"}) + eaptype:depends({mode="sta-wds", encryption="wpa"}) + eaptype:depends({mode="sta-wds", encryption="wpa2"}) + + cacert = s:taboption("encryption", FileUpload, "ca_cert", translate("Path to CA-Certificate")) + cacert:depends({mode="sta", encryption="wpa"}) + cacert:depends({mode="sta", encryption="wpa2"}) + cacert:depends({mode="sta-wds", encryption="wpa"}) + cacert:depends({mode="sta-wds", encryption="wpa2"}) + cacert.rmempty = true + + clientcert = s:taboption("encryption", FileUpload, "client_cert", translate("Path to Client-Certificate")) + clientcert:depends({mode="sta", eap_type="tls", encryption="wpa"}) + clientcert:depends({mode="sta", eap_type="tls", encryption="wpa2"}) + clientcert:depends({mode="sta-wds", eap_type="tls", encryption="wpa"}) + clientcert:depends({mode="sta-wds", eap_type="tls", encryption="wpa2"}) + + privkey = s:taboption("encryption", FileUpload, "priv_key", translate("Path to Private Key")) + privkey:depends({mode="sta", eap_type="tls", encryption="wpa2"}) + privkey:depends({mode="sta", eap_type="tls", encryption="wpa"}) + privkey:depends({mode="sta-wds", eap_type="tls", encryption="wpa2"}) + privkey:depends({mode="sta-wds", eap_type="tls", encryption="wpa"}) + + privkeypwd = s:taboption("encryption", Value, "priv_key_pwd", translate("Password of Private Key")) + privkeypwd:depends({mode="sta", eap_type="tls", encryption="wpa2"}) + privkeypwd:depends({mode="sta", eap_type="tls", encryption="wpa"}) + privkeypwd:depends({mode="sta-wds", eap_type="tls", encryption="wpa2"}) + privkeypwd:depends({mode="sta-wds", eap_type="tls", encryption="wpa"}) + privkeypwd.rmempty = true + privkeypwd.password = true + + auth = s:taboption("encryption", ListValue, "auth", translate("Authentication")) + auth:value("PAP", "PAP", {eap_type="ttls"}) + auth:value("CHAP", "CHAP", {eap_type="ttls"}) + auth:value("MSCHAP", "MSCHAP", {eap_type="ttls"}) + auth:value("MSCHAPV2", "MSCHAPv2", {eap_type="ttls"}) + auth:value("EAP-GTC") + auth:value("EAP-MD5") + auth:value("EAP-MSCHAPV2") + auth:value("EAP-TLS") + auth:depends({mode="sta", eap_type="fast", encryption="wpa2"}) + auth:depends({mode="sta", eap_type="fast", encryption="wpa"}) + auth:depends({mode="sta", eap_type="peap", encryption="wpa2"}) + auth:depends({mode="sta", eap_type="peap", encryption="wpa"}) + auth:depends({mode="sta", eap_type="ttls", encryption="wpa2"}) + auth:depends({mode="sta", eap_type="ttls", encryption="wpa"}) + auth:depends({mode="sta-wds", eap_type="fast", encryption="wpa2"}) + auth:depends({mode="sta-wds", eap_type="fast", encryption="wpa"}) + auth:depends({mode="sta-wds", eap_type="peap", encryption="wpa2"}) + auth:depends({mode="sta-wds", eap_type="peap", encryption="wpa"}) + auth:depends({mode="sta-wds", eap_type="ttls", encryption="wpa2"}) + auth:depends({mode="sta-wds", eap_type="ttls", encryption="wpa"}) + + cacert2 = s:taboption("encryption", FileUpload, "ca_cert2", translate("Path to inner CA-Certificate")) + cacert2:depends({mode="sta", auth="EAP-TLS", encryption="wpa"}) + cacert2:depends({mode="sta", auth="EAP-TLS", encryption="wpa2"}) + cacert2:depends({mode="sta-wds", auth="EAP-TLS", encryption="wpa"}) + cacert2:depends({mode="sta-wds", auth="EAP-TLS", encryption="wpa2"}) + + clientcert2 = s:taboption("encryption", FileUpload, "client_cert2", translate("Path to inner Client-Certificate")) + clientcert2:depends({mode="sta", auth="EAP-TLS", encryption="wpa"}) + clientcert2:depends({mode="sta", auth="EAP-TLS", encryption="wpa2"}) + clientcert2:depends({mode="sta-wds", auth="EAP-TLS", encryption="wpa"}) + clientcert2:depends({mode="sta-wds", auth="EAP-TLS", encryption="wpa2"}) + + privkey2 = s:taboption("encryption", FileUpload, "priv_key2", translate("Path to inner Private Key")) + privkey2:depends({mode="sta", auth="EAP-TLS", encryption="wpa"}) + privkey2:depends({mode="sta", auth="EAP-TLS", encryption="wpa2"}) + privkey2:depends({mode="sta-wds", auth="EAP-TLS", encryption="wpa"}) + privkey2:depends({mode="sta-wds", auth="EAP-TLS", encryption="wpa2"}) + + privkeypwd2 = s:taboption("encryption", Value, "priv_key2_pwd", translate("Password of inner Private Key")) + privkeypwd2:depends({mode="sta", auth="EAP-TLS", encryption="wpa"}) + privkeypwd2:depends({mode="sta", auth="EAP-TLS", encryption="wpa2"}) + privkeypwd2:depends({mode="sta-wds", auth="EAP-TLS", encryption="wpa"}) + privkeypwd2:depends({mode="sta-wds", auth="EAP-TLS", encryption="wpa2"}) + privkeypwd2.rmempty = true + privkeypwd2.password = true + + identity = s:taboption("encryption", Value, "identity", translate("Identity")) + identity:depends({mode="sta", eap_type="fast", encryption="wpa2"}) + identity:depends({mode="sta", eap_type="fast", encryption="wpa"}) + identity:depends({mode="sta", eap_type="peap", encryption="wpa2"}) + identity:depends({mode="sta", eap_type="peap", encryption="wpa"}) + identity:depends({mode="sta", eap_type="ttls", encryption="wpa2"}) + identity:depends({mode="sta", eap_type="ttls", encryption="wpa"}) + identity:depends({mode="sta-wds", eap_type="fast", encryption="wpa2"}) + identity:depends({mode="sta-wds", eap_type="fast", encryption="wpa"}) + identity:depends({mode="sta-wds", eap_type="peap", encryption="wpa2"}) + identity:depends({mode="sta-wds", eap_type="peap", encryption="wpa"}) + identity:depends({mode="sta-wds", eap_type="ttls", encryption="wpa2"}) + identity:depends({mode="sta-wds", eap_type="ttls", encryption="wpa"}) + identity:depends({mode="sta", eap_type="tls", encryption="wpa2"}) + identity:depends({mode="sta", eap_type="tls", encryption="wpa"}) + identity:depends({mode="sta-wds", eap_type="tls", encryption="wpa2"}) + identity:depends({mode="sta-wds", eap_type="tls", encryption="wpa"}) + + anonymous_identity = s:taboption("encryption", Value, "anonymous_identity", translate("Anonymous Identity")) + anonymous_identity:depends({mode="sta", eap_type="fast", encryption="wpa2"}) + anonymous_identity:depends({mode="sta", eap_type="fast", encryption="wpa"}) + anonymous_identity:depends({mode="sta", eap_type="peap", encryption="wpa2"}) + anonymous_identity:depends({mode="sta", eap_type="peap", encryption="wpa"}) + anonymous_identity:depends({mode="sta", eap_type="ttls", encryption="wpa2"}) + anonymous_identity:depends({mode="sta", eap_type="ttls", encryption="wpa"}) + anonymous_identity:depends({mode="sta-wds", eap_type="fast", encryption="wpa2"}) + anonymous_identity:depends({mode="sta-wds", eap_type="fast", encryption="wpa"}) + anonymous_identity:depends({mode="sta-wds", eap_type="peap", encryption="wpa2"}) + anonymous_identity:depends({mode="sta-wds", eap_type="peap", encryption="wpa"}) + anonymous_identity:depends({mode="sta-wds", eap_type="ttls", encryption="wpa2"}) + anonymous_identity:depends({mode="sta-wds", eap_type="ttls", encryption="wpa"}) + anonymous_identity:depends({mode="sta", eap_type="tls", encryption="wpa2"}) + anonymous_identity:depends({mode="sta", eap_type="tls", encryption="wpa"}) + anonymous_identity:depends({mode="sta-wds", eap_type="tls", encryption="wpa2"}) + anonymous_identity:depends({mode="sta-wds", eap_type="tls", encryption="wpa"}) + + password = s:taboption("encryption", Value, "password", translate("Password")) + password:depends({mode="sta", eap_type="fast", encryption="wpa2"}) + password:depends({mode="sta", eap_type="fast", encryption="wpa"}) + password:depends({mode="sta", eap_type="peap", encryption="wpa2"}) + password:depends({mode="sta", eap_type="peap", encryption="wpa"}) + password:depends({mode="sta", eap_type="ttls", encryption="wpa2"}) + password:depends({mode="sta", eap_type="ttls", encryption="wpa"}) + password:depends({mode="sta-wds", eap_type="fast", encryption="wpa2"}) + password:depends({mode="sta-wds", eap_type="fast", encryption="wpa"}) + password:depends({mode="sta-wds", eap_type="peap", encryption="wpa2"}) + password:depends({mode="sta-wds", eap_type="peap", encryption="wpa"}) + password:depends({mode="sta-wds", eap_type="ttls", encryption="wpa2"}) + password:depends({mode="sta-wds", eap_type="ttls", encryption="wpa"}) + password.rmempty = true + password.password = true +end + +if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then + local wpasupplicant = fs.access("/usr/sbin/wpa_supplicant") + local hostcli = fs.access("/usr/sbin/hostapd_cli") + if hostcli and wpasupplicant then + wps = s:taboption("encryption", Flag, "wps_pushbutton", translate("Enable WPS pushbutton, requires WPA(2)-PSK")) + wps.enabled = "1" + wps.disabled = "0" + wps.rmempty = false + wps:depends("encryption", "psk") + wps:depends("encryption", "psk2") + wps:depends("encryption", "psk-mixed") + end +end + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua new file mode 100644 index 0000000..8277deb --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua @@ -0,0 +1,173 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local nw = require "luci.model.network" +local fw = require "luci.model.firewall" +local uci = require "luci.model.uci".cursor() +local http = require "luci.http" + +local iw = luci.sys.wifi.getiwinfo(http.formvalue("device")) + +local has_firewall = fs.access("/etc/config/firewall") + +if not iw then + luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless")) + return +end + +m = SimpleForm("network", translatef("Joining Network: %q", http.formvalue("join"))) +m.cancel = translate("Back to scan results") +m.reset = false + +function m.on_cancel() + local dev = http.formvalue("device") + http.redirect(luci.dispatcher.build_url( + dev and "admin/network/wireless_join?device=" .. dev + or "admin/network/wireless" + )) +end + +nw.init(uci) +fw.init(uci) + +m.hidden = { + device = http.formvalue("device"), + join = http.formvalue("join"), + channel = http.formvalue("channel"), + mode = http.formvalue("mode"), + bssid = http.formvalue("bssid"), + wep = http.formvalue("wep"), + wpa_suites = http.formvalue("wpa_suites"), + wpa_version = http.formvalue("wpa_version") +} + +if iw and iw.mbssid_support then + replace = m:field(Flag, "replace", translate("Replace wireless configuration"), + translate("Check this option to delete the existing networks from this radio.")) + + function replace.cfgvalue() return "0" end +else + replace = m:field(DummyValue, "replace", translate("Replace wireless configuration")) + replace.default = translate("The hardware is not multi-SSID capable and the existing " .. + "configuration will be replaced if you proceed.") + + function replace.formvalue() return "1" end +end + +if http.formvalue("wep") == "1" then + key = m:field(Value, "key", translate("WEP passphrase"), + translate("Specify the secret encryption key here.")) + + key.password = true + key.datatype = "wepkey" + +elseif (tonumber(m.hidden.wpa_version) or 0) > 0 and + (m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2") +then + key = m:field(Value, "key", translate("WPA passphrase"), + translate("Specify the secret encryption key here.")) + + key.password = true + key.datatype = "wpakey" + --m.hidden.wpa_suite = (tonumber(http.formvalue("wpa_version")) or 0) >= 2 and "psk2" or "psk" +end + +newnet = m:field(Value, "_netname_new", translate("Name of the new network"), + translate("The allowed characters are: A-Z, a-z, " .. + "0-9 and _" + )) + +newnet.default = m.hidden.mode == "Ad-Hoc" and "mesh" or "wwan" +newnet.datatype = "uciname" + +if has_firewall then + fwzone = m:field(Value, "_fwzone", + translate("Create / Assign firewall-zone"), + translate("Choose the firewall zone you want to assign to this interface. Select unspecified to remove the interface from the associated zone or fill out the create field to define a new zone and attach the interface to it.")) + + fwzone.template = "cbi/firewall_zonelist" + fwzone.default = m.hidden.mode == "Ad-Hoc" and "mesh" or "wan" +end + +function newnet.parse(self, section) + local net, zone + + if has_firewall then + local zval = fwzone:formvalue(section) + zone = fw:get_zone(zval) + + if not zone and zval == '-' then + zval = m:formvalue(fwzone:cbid(section) .. ".newzone") + if zval and #zval > 0 then + zone = fw:add_zone(zval) + end + end + end + + local wdev = nw:get_wifidev(m.hidden.device) + + wdev:set("disabled", false) + wdev:set("channel", m.hidden.channel) + + if replace:formvalue(section) then + local n + for _, n in ipairs(wdev:get_wifinets()) do + wdev:del_wifinet(n) + end + end + + local wconf = { + device = m.hidden.device, + ssid = m.hidden.join, + mode = (m.hidden.mode == "Ad-Hoc" and "adhoc" or "sta") + } + + if m.hidden.wep == "1" then + wconf.encryption = "wep-open" + wconf.key = "1" + wconf.key1 = key and key:formvalue(section) or "" + elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then + wconf.encryption = (tonumber(m.hidden.wpa_version) or 0) >= 2 and "psk2" or "psk" + wconf.key = key and key:formvalue(section) or "" + else + wconf.encryption = "none" + end + + if wconf.mode == "adhoc" or wconf.mode == "sta" then + wconf.bssid = m.hidden.bssid + end + + local value = self:formvalue(section) + net = nw:add_network(value, { proto = "dhcp" }) + + if not net then + self.error = { [section] = "missing" } + else + wconf.network = net:name() + + local wnet = wdev:add_wifinet(wconf) + if wnet then + if zone then + fw:del_network(net:name()) + zone:add_network(net:name()) + end + + uci:save("wireless") + uci:save("network") + uci:save("firewall") + + luci.http.redirect(wnet:adminlink()) + end + end +end + +if has_firewall then + function fwzone.cfgvalue(self, section) + self.iface = section + local z = fw:get_zone_by_network(section) + return z and z:name() + end +end + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_status/processes.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_status/processes.lua new file mode 100644 index 0000000..0a6e48f --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_status/processes.lua @@ -0,0 +1,34 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +f = SimpleForm("processes", translate("Processes"), translate("This list gives an overview over currently running system processes and their status.")) +f.reset = false +f.submit = false + +t = f:section(Table, luci.sys.process.list()) +t:option(DummyValue, "PID", translate("PID")) +t:option(DummyValue, "USER", translate("Owner")) +t:option(DummyValue, "COMMAND", translate("Command")) +t:option(DummyValue, "%CPU", translate("CPU usage (%)")) +t:option(DummyValue, "%MEM", translate("Memory usage (%)")) + +hup = t:option(Button, "_hup", translate("Hang Up")) +hup.inputstyle = "reload" +function hup.write(self, section) + null, self.tag_error[section] = luci.sys.process.signal(section, 1) +end + +term = t:option(Button, "_term", translate("Terminate")) +term.inputstyle = "remove" +function term.write(self, section) + null, self.tag_error[section] = luci.sys.process.signal(section, 15) +end + +kill = t:option(Button, "_kill", translate("Kill")) +kill.inputstyle = "reset" +function kill.write(self, section) + null, self.tag_error[section] = luci.sys.process.signal(section, 9) +end + +return f \ No newline at end of file diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/admin.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/admin.lua new file mode 100644 index 0000000..1e47564 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/admin.lua @@ -0,0 +1,119 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" + +m = Map("system", translate("Router Password"), + translate("Changes the administrator password for accessing the device")) + +s = m:section(TypedSection, "_dummy", "") +s.addremove = false +s.anonymous = true + +pw1 = s:option(Value, "pw1", translate("Password")) +pw1.password = true + +pw2 = s:option(Value, "pw2", translate("Confirmation")) +pw2.password = true + +function s.cfgsections() + return { "_pass" } +end + +function m.on_commit(map) + local v1 = pw1:formvalue("_pass") + local v2 = pw2:formvalue("_pass") + + if v1 and v2 and #v1 > 0 and #v2 > 0 then + if v1 == v2 then + if luci.sys.user.setpasswd(luci.dispatcher.context.authuser, v1) == 0 then + m.message = translate("Password successfully changed!") + else + m.message = translate("Unknown Error, password not changed!") + end + else + m.message = translate("Given password confirmation did not match, password not changed!") + end + end +end + + +if fs.access("/etc/config/dropbear") then + +m2 = Map("dropbear", translate("SSH Access"), + translate("Dropbear offers SSH network shell access and an integrated SCP server")) + +s = m2:section(TypedSection, "dropbear", translate("Dropbear Instance")) +s.anonymous = true +s.addremove = true + + +ni = s:option(Value, "Interface", translate("Interface"), + translate("Listen only on the given interface or, if unspecified, on all")) + +ni.template = "cbi/network_netlist" +ni.nocreate = true +ni.unspecified = true + + +pt = s:option(Value, "Port", translate("Port"), + translate("Specifies the listening port of this Dropbear instance")) + +pt.datatype = "port" +pt.default = 22 + + +pa = s:option(Flag, "PasswordAuth", translate("Password authentication"), + translate("Allow SSH password authentication")) + +pa.enabled = "on" +pa.disabled = "off" +pa.default = pa.enabled +pa.rmempty = false + + +ra = s:option(Flag, "RootPasswordAuth", translate("Allow root logins with password"), + translate("Allow the root user to login with password")) + +ra.enabled = "on" +ra.disabled = "off" +ra.default = ra.enabled + + +gp = s:option(Flag, "GatewayPorts", translate("Gateway ports"), + translate("Allow remote hosts to connect to local SSH forwarded ports")) + +gp.enabled = "on" +gp.disabled = "off" +gp.default = gp.disabled + + +s2 = m2:section(TypedSection, "_dummy", translate("SSH-Keys"), + translate("Here you can paste public SSH-Keys (one per line) for SSH public-key authentication.")) +s2.addremove = false +s2.anonymous = true +s2.template = "cbi/tblsection" + +function s2.cfgsections() + return { "_keys" } +end + +keys = s2:option(TextValue, "_data", "") +keys.wrap = "off" +keys.rows = 3 +keys.rmempty = false + +function keys.cfgvalue() + return fs.readfile("/etc/dropbear/authorized_keys") or "" +end + +function keys.write(self, section, value) + if value then + fs.writefile("/etc/dropbear/authorized_keys", value:gsub("\r\n", "\n")) + end +end + +end + +return m, m2 diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/backupfiles.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/backupfiles.lua new file mode 100644 index 0000000..ee2401e --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/backupfiles.lua @@ -0,0 +1,80 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +if luci.http.formvalue("cbid.luci.1._list") then + luci.http.redirect(luci.dispatcher.build_url("admin/system/flashops/backupfiles") .. "?display=list") +elseif luci.http.formvalue("cbid.luci.1._edit") then + luci.http.redirect(luci.dispatcher.build_url("admin/system/flashops/backupfiles") .. "?display=edit") + return +end + +m = SimpleForm("luci", translate("Backup file list")) +m:append(Template("admin_system/backupfiles")) + +if luci.http.formvalue("display") ~= "list" then + f = m:section(SimpleSection, nil, translate("This is a list of shell glob patterns for matching files and directories to include during sysupgrade. Modified files in /etc/config/ and certain other configurations are automatically preserved.")) + + l = f:option(Button, "_list", translate("Show current backup file list")) + l.inputtitle = translate("Open list...") + l.inputstyle = "apply" + + c = f:option(TextValue, "_custom") + c.rmempty = false + c.cols = 70 + c.rows = 30 + + c.cfgvalue = function(self, section) + return nixio.fs.readfile("/etc/sysupgrade.conf") + end + + c.write = function(self, section, value) + value = value:gsub("\r\n?", "\n") + return nixio.fs.writefile("/etc/sysupgrade.conf", value) + end +else + m.submit = false + m.reset = false + + f = m:section(SimpleSection, nil, translate("Below is the determined list of files to backup. It consists of changed configuration files marked by opkg, essential base files and the user defined backup patterns.")) + + l = f:option(Button, "_edit", translate("Back to configuration")) + l.inputtitle = translate("Close list...") + l.inputstyle = "link" + + + d = f:option(DummyValue, "_detected") + d.rawhtml = true + d.cfgvalue = function(s) + local list = io.popen( + "( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' /etc/sysupgrade.conf " .. + "/lib/upgrade/keep.d/* 2>/dev/null) -type f 2>/dev/null; " .. + "opkg list-changed-conffiles ) | sort -u" + ) + + if list then + local files = { "
    " } + + while true do + local ln = list:read("*l") + if not ln then + break + else + files[#files+1] = "
  • " + files[#files+1] = luci.util.pcdata(ln) + files[#files+1] = "
  • " + end + end + + list:close() + files[#files+1] = "
" + + return table.concat(files, "") + end + + return "" .. translate("No files found") .. "" + end + +end + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/buttons.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/buttons.lua new file mode 100644 index 0000000..6a81d71 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/buttons.lua @@ -0,0 +1,27 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +m = Map("system", translate("Buttons"), + translate("This page allows the configuration of custom button actions")) + +s = m:section(TypedSection, "button", "") +s.anonymous = true +s.addremove = true + +s:option(Value, "button", translate("Name")) + +act = s:option(ListValue, "action", + translate("Action"), + translate("Specifies the button state to handle")) + +act:value("released") + +s:option(Value, "handler", + translate("Handler"), + translate("Path to executable which handles the button event")) + +min = s:option(Value, "min", translate("Minimum hold time")) +min.rmempty = true + +max = s:option(Value, "max", translate("Maximum hold time")) +max.rmempty = true diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/crontab.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/crontab.lua new file mode 100644 index 0000000..ea92eb9 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/crontab.lua @@ -0,0 +1,29 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008-2013 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local cronfile = "/etc/crontabs/root" + +f = SimpleForm("crontab", translate("Scheduled Tasks"), translate("This is the system crontab in which scheduled tasks can be defined.")) + +t = f:field(TextValue, "crons") +t.rmempty = true +t.rows = 10 +function t.cfgvalue() + return fs.readfile(cronfile) or "" +end + +function f.handle(self, state, data) + if state == FORM_VALID then + if data.crons then + fs.writefile(cronfile, data.crons:gsub("\r\n", "\n")) + luci.sys.call("/usr/bin/crontab %q" % cronfile) + else + fs.writefile(cronfile, "") + end + end + return true +end + +return f diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab.lua new file mode 100644 index 0000000..fd466d5 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab.lua @@ -0,0 +1,270 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +require("luci.tools.webadmin") + +local fs = require "nixio.fs" +local util = require "nixio.util" +local tp = require "luci.template.parser" + +local block = io.popen("block info", "r") +local ln, dev, devices = nil, nil, {} + +repeat + ln = block:read("*l") + dev = ln and ln:match("^/dev/(.-):") + + if dev then + local e, s, key, val = { } + + for key, val in ln:gmatch([[(%w+)="(.-)"]]) do + e[key:lower()] = val + devices[val] = e + end + + s = tonumber((fs.readfile("/sys/class/block/%s/size" % dev))) + + e.dev = "/dev/%s" % dev + e.size = s and math.floor(s / 2048) + + devices[e.dev] = e + end +until not ln + +block:close() + +m = Map("fstab", translate("Mount Points")) +s = m:section(TypedSection, "global", translate("Global Settings")) +s.addremove = false +s.anonymous = true + +detect = s:option(Button, "block_detect", translate("Generate Config"), translate("Find all currently attached filesystems and swap and replace configuration with defaults based on what was detected")) +detect.inputstyle = "reload" + +detect.write = function(self, section) + luci.sys.call("block detect >/etc/config/fstab") + luci.http.redirect(luci.dispatcher.build_url("admin/system", "fstab")) +end + +o = s:option(Flag, "anon_swap", translate("Anonymous Swap"), translate("Mount swap not specifically configured")) +o.default = o.disabled +o.rmempty = false + +o = s:option(Flag, "anon_mount", translate("Anonymous Mount"), translate("Mount filesystems not specifically configured")) +o.default = o.disabled +o.rmempty = false + +o = s:option(Flag, "auto_swap", translate("Automount Swap"), translate("Automatically mount swap on hotplug")) +o.default = o.enabled +o.rmempty = false + +o = s:option(Flag, "auto_mount", translate("Automount Filesystem"), translate("Automatically mount filesystems on hotplug")) +o.default = o.enabled +o.rmempty = false + +o = s:option(Flag, "check_fs", translate("Check fileystems before mount"), translate("Automatically check filesystem for errors before mounting")) +o.default = o.disabled +o.rmempty = false + +local mounts = luci.sys.mounts() +local non_system_mounts = {} +for rawmount, val in pairs(mounts) do + if (string.find(val.mountpoint, "/tmp/.jail") == nil) then + repeat + val.umount = false + if (val.mountpoint == "/") then + break + elseif (val.mountpoint == "/overlay") then + break + elseif (val.mountpoint == "/rom") then + break + elseif (val.mountpoint == "/tmp") then + break + elseif (val.mountpoint == "/tmp/shm") then + break + elseif (val.mountpoint == "/tmp/upgrade") then + break + elseif (val.mountpoint == "/dev") then + break + end + val.umount = true + until true + non_system_mounts[rawmount] = val + end +end + +v = m:section(Table, non_system_mounts, translate("Mounted file systems")) + +fs = v:option(DummyValue, "fs", translate("Filesystem")) + +mp = v:option(DummyValue, "mountpoint", translate("Mount Point")) + +avail = v:option(DummyValue, "avail", translate("Available")) +function avail.cfgvalue(self, section) + return luci.tools.webadmin.byte_format( + ( tonumber(mounts[section].available) or 0 ) * 1024 + ) .. " / " .. luci.tools.webadmin.byte_format( + ( tonumber(mounts[section].blocks) or 0 ) * 1024 + ) +end + +used = v:option(DummyValue, "used", translate("Used")) +function used.cfgvalue(self, section) + return ( mounts[section].percent or "0%" ) .. " (" .. + luci.tools.webadmin.byte_format( + ( tonumber(mounts[section].used) or 0 ) * 1024 + ) .. ")" +end + +unmount = v:option(Button, "unmount", translate("Unmount")) +unmount.render = function(self, section, scope) + if non_system_mounts[section].umount then + self.title = translate("Unmount") + self.inputstyle = "remove" + Button.render(self, section, scope) + end +end + +unmount.write = function(self, section) + if non_system_mounts[section].umount then + luci.sys.call("/bin/umount '%s'" % luci.util.shellstartsqescape(non_system_mounts[section].mountpoint)) + return luci.http.redirect(luci.dispatcher.build_url("admin/system", "fstab")) + end +end + +mount = m:section(TypedSection, "mount", translate("Mount Points"), translate("Mount Points define at which point a memory device will be attached to the filesystem")) +mount.anonymous = true +mount.addremove = true +mount.template = "cbi/tblsection" +mount.extedit = luci.dispatcher.build_url("admin/system/fstab/mount/%s") + +mount.create = function(...) + local sid = TypedSection.create(...) + if sid then + luci.http.redirect(mount.extedit % sid) + return + end +end + + +mount:option(Flag, "enabled", translate("Enabled")).rmempty = false + +dev = mount:option(DummyValue, "device", translate("Device")) +dev.rawhtml = true +dev.cfgvalue = function(self, section) + local v, e + + v = m.uci:get("fstab", section, "uuid") + e = v and devices[v:lower()] + if v and e and e.size then + return "UUID: %s (%s, %d MB)" %{ tp.pcdata(v), e.dev, e.size } + elseif v and e then + return "UUID: %s (%s)" %{ tp.pcdata(v), e.dev } + elseif v then + return "UUID: %s (%s)" %{ tp.pcdata(v), translate("not present") } + end + + v = m.uci:get("fstab", section, "label") + e = v and devices[v] + if v and e and e.size then + return "Label: %s (%s, %d MB)" %{ tp.pcdata(v), e.dev, e.size } + elseif v and e then + return "Label: %s (%s)" %{ tp.pcdata(v), e.dev } + elseif v then + return "Label: %s (%s)" %{ tp.pcdata(v), translate("not present") } + end + + v = Value.cfgvalue(self, section) or "?" + e = v and devices[v] + if v and e and e.size then + return "%s (%d MB)" %{ tp.pcdata(v), e.size } + elseif v and e then + return tp.pcdata(v) + elseif v then + return "%s (%s)" %{ tp.pcdata(v), translate("not present") } + end +end + +mp = mount:option(DummyValue, "target", translate("Mount Point")) +mp.cfgvalue = function(self, section) + if m.uci:get("fstab", section, "is_rootfs") == "1" then + return "/overlay" + else + return Value.cfgvalue(self, section) or "?" + end +end + +fs = mount:option(DummyValue, "fstype", translate("Filesystem")) +fs.cfgvalue = function(self, section) + local v, e + + v = m.uci:get("fstab", section, "uuid") + v = v and v:lower() or m.uci:get("fstab", section, "label") + v = v or m.uci:get("fstab", section, "device") + + e = v and devices[v] + + return e and e.type or m.uci:get("fstab", section, "fstype") or "?" +end + +op = mount:option(DummyValue, "options", translate("Options")) +op.cfgvalue = function(self, section) + return Value.cfgvalue(self, section) or "defaults" +end + +rf = mount:option(DummyValue, "is_rootfs", translate("Root")) +rf.cfgvalue = function(self, section) + local target = m.uci:get("fstab", section, "target") + if target == "/" then + return translate("yes") + elseif target == "/overlay" then + return translate("overlay") + else + return translate("no") + end +end + +ck = mount:option(DummyValue, "enabled_fsck", translate("Check")) +ck.cfgvalue = function(self, section) + return Value.cfgvalue(self, section) == "1" + and translate("yes") or translate("no") +end + + +swap = m:section(TypedSection, "swap", "SWAP", translate("If your physical memory is insufficient unused data can be temporarily swapped to a swap-device resulting in a higher amount of usable RAM. Be aware that swapping data is a very slow process as the swap-device cannot be accessed with the high datarates of the RAM.")) +swap.anonymous = true +swap.addremove = true +swap.template = "cbi/tblsection" +swap.extedit = luci.dispatcher.build_url("admin/system/fstab/swap/%s") + +swap.create = function(...) + local sid = TypedSection.create(...) + if sid then + luci.http.redirect(swap.extedit % sid) + return + end +end + + +swap:option(Flag, "enabled", translate("Enabled")).rmempty = false + +dev = swap:option(DummyValue, "device", translate("Device")) +dev.cfgvalue = function(self, section) + local v + + v = m.uci:get("fstab", section, "uuid") + if v then return "UUID: %s" % v end + + v = m.uci:get("fstab", section, "label") + if v then return "Label: %s" % v end + + v = Value.cfgvalue(self, section) or "?" + e = v and devices[v] + if v and e and e.size then + return "%s (%s MB)" % {v, e.size} + else + return v + end +end + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua new file mode 100644 index 0000000..a85872a --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua @@ -0,0 +1,151 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local util = require "nixio.util" + +local has_fscheck = fs.access("/usr/sbin/e2fsck") + +local block = io.popen("block info", "r") +local ln, dev, devices = nil, nil, {} + +repeat + ln = block:read("*l") + dev = ln and ln:match("^/dev/(.-):") + + if dev then + local e, s, key, val = { } + + for key, val in ln:gmatch([[(%w+)="(.-)"]]) do + e[key:lower()] = val + end + + s = tonumber((fs.readfile("/sys/class/block/%s/size" % dev))) + + e.dev = "/dev/%s" % dev + e.size = s and math.floor(s / 2048) + + devices[#devices+1] = e + end +until not ln + +block:close() + + +m = Map("fstab", translate("Mount Points - Mount Entry")) +m.redirect = luci.dispatcher.build_url("admin/system/fstab") + +if not arg[1] or m.uci:get("fstab", arg[1]) ~= "mount" then + luci.http.redirect(m.redirect) + return +end + + + +mount = m:section(NamedSection, arg[1], "mount", translate("Mount Entry")) +mount.anonymous = true +mount.addremove = false + +mount:tab("general", translate("General Settings")) +mount:tab("advanced", translate("Advanced Settings")) + + +mount:taboption("general", Flag, "enabled", translate("Enable this mount")).rmempty = false + + +o = mount:taboption("general", Value, "uuid", translate("UUID"), + translate("If specified, mount the device by its UUID instead of a fixed device node")) + +o:value("", translate("-- match by uuid --")) + +for i, d in ipairs(devices) do + if d.uuid and d.size then + o:value(d.uuid, "%s (%s, %d MB)" %{ d.uuid, d.dev, d.size }) + elseif d.uuid then + o:value(d.uuid, "%s (%s)" %{ d.uuid, d.dev }) + end +end + + +o = mount:taboption("general", Value, "label", translate("Label"), + translate("If specified, mount the device by the partition label instead of a fixed device node")) + +o:value("", translate("-- match by label --")) + +o:depends("uuid", "") + +for i, d in ipairs(devices) do + if d.label and d.size then + o:value(d.label, "%s (%s, %d MB)" %{ d.label, d.dev, d.size }) + elseif d.label then + o:value(d.label, "%s (%s)" %{ d.label, d.dev }) + end +end + + +o = mount:taboption("general", Value, "device", translate("Device"), + translate("The device file of the memory or partition (e.g. /dev/sda1)")) + +o:value("", translate("-- match by device --")) + +o:depends({ uuid = "", label = "" }) + +for i, d in ipairs(devices) do + if d.size then + o:value(d.dev, "%s (%d MB)" %{ d.dev, d.size }) + else + o:value(d.dev) + end +end + + +o = mount:taboption("general", Value, "target", translate("Mount point"), + translate("Specifies the directory the device is attached to")) + +o:value("/", translate("Use as root filesystem (/)")) +o:value("/overlay", translate("Use as external overlay (/overlay)")) + + +o = mount:taboption("general", DummyValue, "__notice", translate("Root preparation")) +o:depends("target", "/") +o.rawhtml = true +o.default = [[ +

%s

mkdir -p /tmp/introot
+mkdir -p /tmp/extroot
+mount --bind / /tmp/introot
+mount /dev/sda1 /tmp/extroot
+tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -
+umount /tmp/introot
+umount /tmp/extroot
+]] %{ + translate("Make sure to clone the root filesystem using something like the commands below:"), + +} + + +o = mount:taboption("advanced", Value, "fstype", translate("Filesystem"), + translate("The filesystem that was used to format the memory (e.g. ext3)")) + +o:value("", "auto") + +local fs +for fs in io.lines("/proc/filesystems") do + fs = fs:match("%S+") + if fs ~= "nodev" then + o:value(fs) + end +end + + +o = mount:taboption("advanced", Value, "options", translate("Mount options"), + translate("See \"mount\" manpage for details")) + +o.placeholder = "defaults" + + +if has_fscheck then + o = mount:taboption("advanced", Flag, "enabled_fsck", translate("Run filesystem check"), + translate("Run a filesystem check before mounting the device")) +end + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/swap.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/swap.lua new file mode 100644 index 0000000..82468d5 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/swap.lua @@ -0,0 +1,54 @@ +-- Copyright 2010 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local util = require "nixio.util" + +local devices = {} +util.consume((fs.glob("/dev/sd*")), devices) +util.consume((fs.glob("/dev/hd*")), devices) +util.consume((fs.glob("/dev/scd*")), devices) +util.consume((fs.glob("/dev/mmc*")), devices) + +local size = {} +for i, dev in ipairs(devices) do + local s = tonumber((fs.readfile("/sys/class/block/%s/size" % dev:sub(6)))) + size[dev] = s and math.floor(s / 2048) +end + + +m = Map("fstab", translate("Mount Points - Swap Entry")) +m.redirect = luci.dispatcher.build_url("admin/system/fstab") + +if not arg[1] or m.uci:get("fstab", arg[1]) ~= "swap" then + luci.http.redirect(m.redirect) + return +end + + +mount = m:section(NamedSection, arg[1], "swap", translate("Swap Entry")) +mount.anonymous = true +mount.addremove = false + +mount:tab("general", translate("General Settings")) +mount:tab("advanced", translate("Advanced Settings")) + + +mount:taboption("general", Flag, "enabled", translate("Enable this swap")).rmempty = false + + +o = mount:taboption("general", Value, "device", translate("Device"), + translate("The device file of the memory or partition (e.g. /dev/sda1)")) + +for i, d in ipairs(devices) do + o:value(d, size[d] and "%s (%s MB)" % {d, size[d]}) +end + +o = mount:taboption("advanced", Value, "uuid", translate("UUID"), + translate("If specified, mount the device by its UUID instead of a fixed device node")) + +o = mount:taboption("advanced", Value, "label", translate("Label"), + translate("If specified, mount the device by the partition label instead of a fixed device node")) + + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua new file mode 100644 index 0000000..7c6d7e1 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua @@ -0,0 +1,64 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008-2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local ipkgfile = "/etc/opkg.conf" +local distfeeds = "/etc/opkg/distfeeds.conf" +local customfeeds = "/etc/opkg/customfeeds.conf" + +f = SimpleForm("ipkgconf", translate("OPKG-Configuration"), translate("General options for opkg")) + +f:append(Template("admin_system/ipkg")) + +t = f:field(TextValue, "lines") +t.wrap = "off" +t.rows = 10 +function t.cfgvalue() + return nixio.fs.readfile(ipkgfile) or "" +end + +function t.write(self, section, data) + return nixio.fs.writefile(ipkgfile, data:gsub("\r\n", "\n")) +end + +function f.handle(self, state, data) + return true +end + +g = SimpleForm("distfeedconf", translate("Distribution feeds"), + translate("Build/distribution specific feed definitions. This file will NOT be preserved in any sysupgrade.")) + +d = g:field(TextValue, "lines2") +d.wrap = "off" +d.rows = 10 +function d.cfgvalue() + return nixio.fs.readfile(distfeeds) or "" +end + +function d.write(self, section, data) + return nixio.fs.writefile(distfeeds, data:gsub("\r\n", "\n")) +end + +function g.handle(self, state, data) + return true +end + +h = SimpleForm("customfeedconf", translate("Custom feeds"), + translate("Custom feed definitions, e.g. private feeds. This file can be preserved in a sysupgrade.")) + +c = h:field(TextValue, "lines3") +c.wrap = "off" +c.rows = 10 +function c.cfgvalue() + return nixio.fs.readfile(customfeeds) or "" +end + +function c.write(self, section, data) + return nixio.fs.writefile(customfeeds, data:gsub("\r\n", "\n")) +end + +function h.handle(self, state, data) + return true +end + +return f, g, h diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/leds.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/leds.lua new file mode 100644 index 0000000..8d9bcb1 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/leds.lua @@ -0,0 +1,119 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +m = Map("system", translate("LED Configuration"), translate("Customizes the behaviour of the device LEDs if possible.")) + +local sysfs_path = "/sys/class/leds/" +local leds = {} + +local fs = require "nixio.fs" +local util = require "nixio.util" + +if fs.access(sysfs_path) then + leds = util.consume((fs.dir(sysfs_path))) +end + +if #leds == 0 then + return m +end + + +s = m:section(TypedSection, "led", "") +s.anonymous = true +s.addremove = true + +function s.parse(self, ...) + TypedSection.parse(self, ...) + os.execute("/etc/init.d/led enable") +end + + +s:option(Value, "name", translate("Name")) + + +sysfs = s:option(ListValue, "sysfs", translate("LED Name")) +for k, v in ipairs(leds) do + sysfs:value(v) +end + +s:option(Flag, "default", translate("Default state")).rmempty = false + + +trigger = s:option(ListValue, "trigger", translate("Trigger")) + +local triggers = fs.readfile(sysfs_path .. leds[1] .. "/trigger") +for t in triggers:gmatch("[%w-]+") do + trigger:value(t, translate(t:gsub("-", ""))) +end + + +delayon = s:option(Value, "delayon", translate ("On-State Delay")) +delayon:depends("trigger", "timer") + +delayoff = s:option(Value, "delayoff", translate ("Off-State Delay")) +delayoff:depends("trigger", "timer") + + +dev = s:option(ListValue, "_net_dev", translate("Device")) +dev.rmempty = true +dev:value("") +dev:depends("trigger", "netdev") + +function dev.cfgvalue(self, section) + return m.uci:get("system", section, "dev") +end + +function dev.write(self, section, value) + m.uci:set("system", section, "dev", value) +end + +function dev.remove(self, section) + local t = trigger:formvalue(section) + if t ~= "netdev" and t ~= "usbdev" then + m.uci:delete("system", section, "dev") + end +end + +for k, v in pairs(luci.sys.net.devices()) do + if v ~= "lo" then + dev:value(v) + end +end + + +mode = s:option(MultiValue, "mode", translate("Trigger Mode")) +mode.rmempty = true +mode:depends("trigger", "netdev") +mode:value("link", translate("Link On")) +mode:value("tx", translate("Transmit")) +mode:value("rx", translate("Receive")) + + +usbdev = s:option(ListValue, "_usb_dev", translate("USB Device")) +usbdev:depends("trigger", "usbdev") +usbdev.rmempty = true +usbdev:value("") + +function usbdev.cfgvalue(self, section) + return m.uci:get("system", section, "dev") +end + +function usbdev.write(self, section, value) + m.uci:set("system", section, "dev", value) +end + +function usbdev.remove(self, section) + local t = trigger:formvalue(section) + if t ~= "netdev" and t ~= "usbdev" then + m.uci:delete("system", section, "dev") + end +end + +for p in nixio.fs.glob("/sys/bus/usb/devices/[0-9]*/manufacturer") do + local id = p:match("%d+-%d+") + local mf = nixio.fs.readfile("/sys/bus/usb/devices/" .. id .. "/manufacturer") or "?" + local pr = nixio.fs.readfile("/sys/bus/usb/devices/" .. id .. "/product") or "?" + usbdev:value(id, "%s (%s - %s)" %{ id, mf, pr }) +end + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/startup.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/startup.lua new file mode 100644 index 0000000..9e19ac5 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/startup.lua @@ -0,0 +1,97 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2010-2012 Jo-Philipp Wich +-- Copyright 2010 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local sys = require "luci.sys" + +local inits = { } + +for _, name in ipairs(sys.init.names()) do + local index = sys.init.index(name) + local enabled = sys.init.enabled(name) + + if index < 255 then + inits["%02i.%s" % { index, name }] = { + name = name, + index = tostring(index), + enabled = enabled + } + end +end + + +m = SimpleForm("initmgr", translate("Initscripts"), translate("You can enable or disable installed init scripts here. Changes will applied after a device reboot.
Warning: If you disable essential init scripts like \"network\", your device might become inaccessible!")) +m.reset = false +m.submit = false + + +s = m:section(Table, inits) + +i = s:option(DummyValue, "index", translate("Start priority")) +n = s:option(DummyValue, "name", translate("Initscript")) + + +e = s:option(Button, "endisable", translate("Enable/Disable")) + +e.render = function(self, section, scope) + if inits[section].enabled then + self.title = translate("Enabled") + self.inputstyle = "save" + else + self.title = translate("Disabled") + self.inputstyle = "reset" + end + + Button.render(self, section, scope) +end + +e.write = function(self, section) + if inits[section].enabled then + inits[section].enabled = false + return sys.init.disable(inits[section].name) + else + inits[section].enabled = true + return sys.init.enable(inits[section].name) + end +end + + +start = s:option(Button, "start", translate("Start")) +start.inputstyle = "apply" +start.write = function(self, section) + sys.call("/etc/init.d/%s %s >/dev/null" %{ inits[section].name, self.option }) +end + +restart = s:option(Button, "restart", translate("Restart")) +restart.inputstyle = "reload" +restart.write = start.write + +stop = s:option(Button, "stop", translate("Stop")) +stop.inputstyle = "remove" +stop.write = start.write + + + +f = SimpleForm("rc", translate("Local Startup"), + translate("This is the content of /etc/rc.local. Insert your own commands here (in front of 'exit 0') to execute them at the end of the boot process.")) + +t = f:field(TextValue, "rcs") +t.rmempty = true +t.rows = 20 + +function t.cfgvalue() + return fs.readfile("/etc/rc.local") or "" +end + +function f.handle(self, state, data) + if state == FORM_VALID then + if data.rcs then + fs.writefile("/etc/rc.local", data.rcs:gsub("\r\n", "\n")) + end + end + return true +end + +return m, f diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua new file mode 100644 index 0000000..c7fdfcd --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua @@ -0,0 +1,224 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local sys = require "luci.sys" +local zones = require "luci.sys.zoneinfo" +local fs = require "nixio.fs" +local conf = require "luci.config" + +local m, s, o +local has_ntpd = fs.access("/usr/sbin/ntpd") + +m = Map("system", translate("System"), translate("Here you can configure the basic aspects of your device like its hostname or the timezone.")) +m:chain("luci") + + +s = m:section(TypedSection, "system", translate("System Properties")) +s.anonymous = true +s.addremove = false + +s:tab("general", translate("General Settings")) +s:tab("logging", translate("Logging")) +s:tab("language", translate("Language and Style")) + + +-- +-- System Properties +-- + +o = s:taboption("general", DummyValue, "_systime", translate("Local Time")) +o.template = "admin_system/clock_status" + + +o = s:taboption("general", Value, "hostname", translate("Hostname")) +o.datatype = "hostname" + +function o.write(self, section, value) + Value.write(self, section, value) + sys.hostname(value) +end + + +o = s:taboption("general", ListValue, "zonename", translate("Timezone")) +o:value("UTC") + +for i, zone in ipairs(zones.TZ) do + o:value(zone[1]) +end + +function o.write(self, section, value) + local function lookup_zone(title) + for _, zone in ipairs(zones.TZ) do + if zone[1] == title then return zone[2] end + end + end + + AbstractValue.write(self, section, value) + local timezone = lookup_zone(value) or "GMT0" + self.map.uci:set("system", section, "timezone", timezone) + fs.writefile("/etc/TZ", timezone .. "\n") +end + + +-- +-- Logging +-- + +o = s:taboption("logging", Value, "log_size", translate("System log buffer size"), "kiB") +o.optional = true +o.placeholder = 16 +o.datatype = "uinteger" + +o = s:taboption("logging", Value, "log_ip", translate("External system log server")) +o.optional = true +o.placeholder = "0.0.0.0" +o.datatype = "ip4addr" + +o = s:taboption("logging", Value, "log_port", translate("External system log server port")) +o.optional = true +o.placeholder = 514 +o.datatype = "port" + +o = s:taboption("logging", ListValue, "log_proto", translate("External system log server protocol")) +o:value("udp", "UDP") +o:value("tcp", "TCP") + +o = s:taboption("logging", Value, "log_file", translate("Write system log to file")) +o.optional = true +o.placeholder = "/tmp/system.log" + +o = s:taboption("logging", ListValue, "conloglevel", translate("Log output level")) +o:value(8, translate("Debug")) +o:value(7, translate("Info")) +o:value(6, translate("Notice")) +o:value(5, translate("Warning")) +o:value(4, translate("Error")) +o:value(3, translate("Critical")) +o:value(2, translate("Alert")) +o:value(1, translate("Emergency")) + +o = s:taboption("logging", ListValue, "cronloglevel", translate("Cron Log Level")) +o.default = 8 +o:value(5, translate("Debug")) +o:value(8, translate("Normal")) +o:value(9, translate("Warning")) + + +-- +-- Langauge & Style +-- + +o = s:taboption("language", ListValue, "_lang", translate("Language")) +o:value("auto") + +local i18ndir = luci.i18n.i18ndir .. "base." +for k, v in luci.util.kspairs(conf.languages) do + local file = i18ndir .. k:gsub("_", "-") + if k:sub(1, 1) ~= "." and fs.access(file .. ".lmo") then + o:value(k, v) + end +end + +function o.cfgvalue(...) + return m.uci:get("luci", "main", "lang") +end + +function o.write(self, section, value) + m.uci:set("luci", "main", "lang", value) +end + + +o = s:taboption("language", ListValue, "_mediaurlbase", translate("Design")) +for k, v in pairs(conf.themes) do + if k:sub(1, 1) ~= "." then + o:value(v, k) + end +end + +function o.cfgvalue(...) + return m.uci:get("luci", "main", "mediaurlbase") +end + +function o.write(self, section, value) + m.uci:set("luci", "main", "mediaurlbase", value) +end + + +-- +-- NTP +-- + +if has_ntpd then + + -- timeserver setup was requested, create section and reload page + if m:formvalue("cbid.system._timeserver._enable") then + m.uci:section("system", "timeserver", "ntp", + { + server = { "0.openwrt.pool.ntp.org", "1.openwrt.pool.ntp.org", "2.openwrt.pool.ntp.org", "3.openwrt.pool.ntp.org" } + } + ) + + m.uci:save("system") + luci.http.redirect(luci.dispatcher.build_url("admin/system", arg[1])) + return + end + + local has_section = false + m.uci:foreach("system", "timeserver", + function(s) + has_section = true + return false + end) + + if not has_section then + + s = m:section(TypedSection, "timeserver", translate("Time Synchronization")) + s.anonymous = true + s.cfgsections = function() return { "_timeserver" } end + + x = s:option(Button, "_enable") + x.title = translate("Time Synchronization is not configured yet.") + x.inputtitle = translate("Set up Time Synchronization") + x.inputstyle = "apply" + + else + + s = m:section(TypedSection, "timeserver", translate("Time Synchronization")) + s.anonymous = true + s.addremove = false + + o = s:option(Flag, "enable", translate("Enable NTP client")) + o.rmempty = false + + function o.cfgvalue(self) + return sys.init.enabled("sysntpd") + and self.enabled or self.disabled + end + + function o.write(self, section, value) + if value == self.enabled then + sys.init.enable("sysntpd") + sys.call("env -i /etc/init.d/sysntpd start >/dev/null") + else + sys.call("env -i /etc/init.d/sysntpd stop >/dev/null") + sys.init.disable("sysntpd") + end + end + + + o = s:option(Flag, "enable_server", translate("Provide NTP server")) + o:depends("enable", "1") + + + o = s:option(DynamicList, "server", translate("NTP server candidates")) + o.datatype = "host(0)" + o:depends("enable", "1") + + -- retain server list even if disabled + function o.remove() end + + end +end + +return m diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm new file mode 100644 index 0000000..f4adb26 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm @@ -0,0 +1,115 @@ +<%# + Copyright 2010 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +<% +local fs = require "nixio.fs" +local has_ping6 = fs.access("/bin/ping6") or fs.access("/usr/bin/ping6") +local has_traceroute6 = fs.access("/usr/bin/traceroute6") + +local dns_host = luci.config.diag and luci.config.diag.dns or "dev.openwrt.org" +local ping_host = luci.config.diag and luci.config.diag.ping or "dev.openwrt.org" +local route_host = luci.config.diag and luci.config.diag.route or "dev.openwrt.org" +%> + + + + +
+
+

<%:Diagnostics%>

+ +
+ <%:Network Utilities%> + +
+ +
+
+ <% if has_ping6 then %> + + + <% else %> + + <% end %> +
+ +
+
+ <% if has_traceroute6 then %> + + + <% else %> + + <% end %> + <% if not has_traceroute6 then %> +

 

+

<%:Install iputils-traceroute6 for IPv6 traceroute%>

+ <% end %> +
+ +
+
+ +
+ +

+ +
+
+ + +
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm new file mode 100644 index 0000000..646d931 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm @@ -0,0 +1,249 @@ +<%# + Copyright 2010 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%- + local ntm = require "luci.model.network".init() + local fwm = require "luci.model.firewall".init() + + local net + local ifaces = { } + local netlist = { } + for _, net in ipairs(ntm:get_networks()) do + if net:name() ~= "loopback" then + local z = fwm:get_zone_by_network(net:name()) + ifaces[#ifaces+1] = net:name() + netlist[#netlist+1] = { + net:name(), z and z:name() or "-", z + } + end + end + + table.sort(netlist, + function(a, b) + if a[2] ~= b[2] then + return a[2] < b[2] + else + return a[1] < b[1] + end + end) +-%> + + + + + + +
+
+ <%:Interface Overview%> + + + + + + + + <% + for i, net in ipairs(netlist) do + local z = net[3] + local c = z and z:get_color() or "#EEEEEE" + local t = z and translate("Part of zone %q" % z:name()) or translate("No zone assigned") + %> + + + + + + <% end %> +
<%:Network%><%:Status%><%:Actions%>
+
+
+ <%=net[1]:upper()%> +
+
+
+ ? +
+
+
+ <%:Collecting data...%> + + + + '" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit" /> + +
+ + '" /> +
+
diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm new file mode 100644 index 0000000..8c3b1ab --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm @@ -0,0 +1,82 @@ +<%+cbi/valueheader%> + + + + + + + + + +
+
+ ? +
+ <%:Collecting data...%> +
+ +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm new file mode 100644 index 0000000..b4baedf --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm @@ -0,0 +1,138 @@ + + +
+ <%:Active DHCP Leases%> + + + + + + + + + + +
<%:Hostname%><%:IPv4-Address%><%:MAC-Address%><%:Leasetime remaining%>

<%:Collecting data...%>
+
+ + diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm new file mode 100644 index 0000000..96fbffd --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm @@ -0,0 +1,44 @@ + diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm new file mode 100644 index 0000000..3533c6f --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm @@ -0,0 +1,149 @@ +<%# + Copyright 2009-2015 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%- + + local sys = require "luci.sys" + local utl = require "luci.util" + + function guess_wifi_signal(info) + local scale = (100 / (info.quality_max or 100) * (info.quality or 0)) + local icon + + if not info.bssid or info.bssid == "00:00:00:00:00:00" then + icon = resource .. "/icons/signal-none.png" + elseif scale < 15 then + icon = resource .. "/icons/signal-0.png" + elseif scale < 35 then + icon = resource .. "/icons/signal-0-25.png" + elseif scale < 55 then + icon = resource .. "/icons/signal-25-50.png" + elseif scale < 75 then + icon = resource .. "/icons/signal-50-75.png" + else + icon = resource .. "/icons/signal-75-100.png" + end + + return icon + end + + function percent_wifi_signal(info) + local qc = info.quality or 0 + local qm = info.quality_max or 0 + + if info.bssid and qc > 0 and qm > 0 then + return math.floor((100 / qm) * qc) + else + return 0 + end + end + + function format_wifi_encryption(info) + if info.wep == true then + return "WEP" + elseif info.wpa > 0 then + return translatef("%s - %s", + table.concat(info.pair_ciphers, ", "), + table.concat(info.group_ciphers, ", "), + (info.wpa == 3) and translate("mixed WPA/WPA2") + or (info.wpa == 2 and "WPA2" or "WPA"), + table.concat(info.auth_suites, ", ") + ) + elseif info.enabled then + return "%s" % translate("unknown") + else + return "%s" % translate("open") + end + end + + local dev = luci.http.formvalue("device") + local iw = luci.sys.wifi.getiwinfo(dev) + + if not iw then + luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless")) + return + end + + + function scanlist(times) + local i, k, v + local l = { } + local s = { } + + for i = 1, times do + for k, v in ipairs(iw.scanlist or { }) do + if not s[v.bssid] then + l[#l+1] = v + s[v.bssid] = true + end + end + end + + return l + end +-%> + +<%+header%> + +

<%:Join Network: Wireless Scan%>

+ +
+
+ + + <% for i, net in ipairs(scanlist(3)) do net.encryption = net.encryption or { } %> + + + + + + <% end %> + +
+ +
+ <%=percent_wifi_signal(net)%>% +
+
+ <%=net.ssid and utl.pcdata(net.ssid) or "%s" % translate("hidden")%>
+ Channel: <%=net.channel%> | + Mode: <%=net.mode%> | + BSSID: <%=net.bssid%> | + Encryption: <%=format_wifi_encryption(net.encryption)%> +
+
+ + + + + + + + <% if net.encryption.wpa then %> + + <% for _, v in ipairs(net.encryption.auth_suites) do %> + <% end; for _, v in ipairs(net.encryption.group_ciphers) do %> + <% end; for _, v in ipairs(net.encryption.pair_ciphers) do %> + <% end; end %> + + " /> + + +
+
+
+
+
+
" method="get"> + +
+
+ + + +
+
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm new file mode 100644 index 0000000..9c351d3 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm @@ -0,0 +1,470 @@ +<%# + Copyright 2008-2009 Steven Barth + Copyright 2008-2015 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%- + + local ip = require "luci.ip" + local fs = require "nixio.fs" + local utl = require "luci.util" + local uci = require "luci.model.uci".cursor() + local ntm = require "luci.model.network" + + local has_iwinfo = pcall(require, "iwinfo") + + ntm.init(uci) + + function guess_wifi_hw(dev) + local bands = "" + local ifname = dev:name() + local name, idx = ifname:match("^([a-z]+)(%d+)") + idx = tonumber(idx) + + if has_iwinfo then + local bl = dev.iwinfo.hwmodelist + if bl and next(bl) then + if bl.a then bands = bands .. "a" end + if bl.b then bands = bands .. "b" end + if bl.g then bands = bands .. "g" end + if bl.n then bands = bands .. "n" end + if bl.ac then bands = bands .. "ac" end + end + + local hw = dev.iwinfo.hardware_name + if hw then + return "%s 802.11%s" %{ hw, bands } + end + end + + -- wl.o + if name == "wl" then + local name = translatef("Broadcom 802.11%s Wireless Controller", bands) + local nm = 0 + + local fd = nixio.open("/proc/bus/pci/devices", "r") + if fd then + local ln + for ln in fd:linesource() do + if ln:match("wl$") then + if nm == idx then + local version = ln:match("^%S+%s+%S%S%S%S([0-9a-f]+)") + name = translatef( + "Broadcom BCM%04x 802.11 Wireless Controller", + tonumber(version, 16) + ) + + break + else + nm = nm + 1 + end + end + end + fd:close() + end + + return name + + -- madwifi + elseif name == "ath" or name == "wifi" then + return translatef("Atheros 802.11%s Wireless Controller", bands) + + -- ralink + elseif name == "ra" then + return translatef("RaLink 802.11%s Wireless Controller", bands) + + -- hermes + elseif name == "eth" then + return translate("Hermes 802.11b Wireless Controller") + + -- hostap + elseif name == "wlan" and fs.stat("/proc/net/hostap/" .. ifname, "type") == "dir" then + return translate("Prism2/2.5/3 802.11b Wireless Controller") + + -- dunno yet + else + return translatef("Generic 802.11%s Wireless Controller", bands) + end + end + + local devices = ntm:get_wifidevs() + local netlist = { } + local netdevs = { } + + local dev + for _, dev in ipairs(devices) do + local net + for _, net in ipairs(dev:get_wifinets()) do + netlist[#netlist+1] = net:id() + netdevs[net:id()] = dev:name() + end + end +-%> + +<%+header%> + +<% if not has_iwinfo then %> +
+ <%:Package libiwinfo required!%>
+ <%_The libiwinfo-lua package is not installed. You must install this component for working wireless configuration!%> +
+<% end %> + + + + +

<%:Wireless Overview%>

+ + + +
+ + <% for _, dev in ipairs(devices) do local nets = dev:get_wifinets() %> + +
+ + + + + + + + + + + <% if #nets > 0 then %> + <% for i, net in ipairs(nets) do %> + + + + + + + <% end %> + <% else %> + + + + + <% end %> + +
+ <%=guess_wifi_hw(dev)%> (<%=dev:name()%>)
+ +
+
+ + + +
+
+ + + +
+
+ 0% + + <%:Collecting data...%> + + + + +
+ <%:No network configured on this device%> +
+
+ + <% end %> + + +

<%:Associated Stations%>

+ +
+ + + + + + + + + + + + +
<%:SSID%><%:MAC-Address%><%:Host%><%:Signal%> / <%:Noise%><%:RX Rate%> / <%:TX Rate%>
+ <%:Collecting data...%> +
+
+
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm new file mode 100644 index 0000000..04687f3 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm @@ -0,0 +1,78 @@ +<%+cbi/valueheader%> + + + + + + + + + +
+
+ 0% +
+ <%:Collecting data...%> +
+ +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm new file mode 100644 index 0000000..33bbee7 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm @@ -0,0 +1,301 @@ +<%# + Copyright 2010 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%- + local ntm = require "luci.model.network".init() + + local dev + local devices = { } + for _, dev in luci.util.vspairs(luci.sys.net.devices()) do + if dev ~= "lo" and not ntm:ignore_interface(dev) then + devices[#devices+1] = dev + end + end + + local curdev = luci.http.formvalue("dev") or devices[1] +-%> + +<%+header%> + + + + +

<%:Realtime Traffic%>

+ + + + +
-
+
+ + + + + + + + + + + + + + + + + + + + + + +
<%:Inbound:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
<%:Average:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
<%:Peak:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
<%:Outbound:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
<%:Average:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
<%:Peak:%>0 <%:kbit/s%>
(0 <%:kB/s%>)
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm new file mode 100644 index 0000000..0b2e52e --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm @@ -0,0 +1,375 @@ +<%# + Copyright 2010 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + + + + +

<%:Realtime Connections%>

+ +
<%:This page gives an overview over currently active network connections.%>
+ +
+ <%:Active Connections%> + + +
-
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
<%:UDP:%>0<%:Average:%>0<%:Peak:%>0
<%:TCP:%>0<%:Average:%>0<%:Peak:%>0
<%:Other:%>0<%:Average:%>0<%:Peak:%>0
+
+ +
+ + + + + + + + + + +
<%:Network%><%:Protocol%><%:Source%><%:Destination%><%:Transfer%>
<%:Collecting data...%>
+
+
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm new file mode 100644 index 0000000..c119b57 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm @@ -0,0 +1,12 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

<%:Kernel Log%>

+
+ +
+<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm new file mode 100644 index 0000000..8976e30 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm @@ -0,0 +1,802 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2011 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% + local fs = require "nixio.fs" + local util = require "luci.util" + local stat = require "luci.tools.status" + local ver = require "luci.version" + + local has_ipv6 = fs.access("/proc/net/ipv6_route") + local has_dhcp = fs.access("/etc/config/dhcp") + local has_wifi = ((fs.stat("/etc/config/wireless", "size") or 0) > 0) + + local sysinfo = luci.util.ubus("system", "info") or { } + local boardinfo = luci.util.ubus("system", "board") or { } + local unameinfo = nixio.uname() or { } + + local meminfo = sysinfo.memory or { + total = 0, + free = 0, + buffered = 0, + shared = 0 + } + + local swapinfo = sysinfo.swap or { + total = 0, + free = 0 + } + + local has_dsl = fs.access("/etc/init.d/dsl_control") + + if luci.http.formvalue("status") == "1" then + local ntm = require "luci.model.network".init() + local wan = ntm:get_wannet() + local wan6 = ntm:get_wan6net() + + local conn_count = tonumber(( + luci.sys.exec("wc -l /proc/net/nf_conntrack") or + luci.sys.exec("wc -l /proc/net/ip_conntrack") or + ""):match("%d+")) or 0 + + local conn_max = tonumber(( + luci.sys.exec("sysctl net.nf_conntrack_max") or + luci.sys.exec("sysctl net.ipv4.netfilter.ip_conntrack_max") or + ""):match("%d+")) or 4096 + + local rv = { + uptime = sysinfo.uptime or 0, + localtime = os.date(), + loadavg = sysinfo.load or { 0, 0, 0 }, + memory = meminfo, + swap = swapinfo, + connmax = conn_max, + conncount = conn_count, + leases = stat.dhcp_leases(), + leases6 = stat.dhcp6_leases(), + wifinets = stat.wifi_networks() + } + + if wan then + rv.wan = { + ipaddr = wan:ipaddr(), + gwaddr = wan:gwaddr(), + netmask = wan:netmask(), + dns = wan:dnsaddrs(), + expires = wan:expires(), + uptime = wan:uptime(), + proto = wan:proto(), + ifname = wan:ifname(), + link = wan:adminlink() + } + end + + if wan6 then + rv.wan6 = { + ip6addr = wan6:ip6addr(), + gw6addr = wan6:gw6addr(), + dns = wan6:dns6addrs(), + uptime = wan6:uptime(), + ifname = wan6:ifname(), + link = wan6:adminlink() + } + end + + if has_dsl then + local dsl_stat = luci.sys.exec("/etc/init.d/dsl_control lucistat") + local dsl_func = loadstring(dsl_stat) + if dsl_func then + rv.dsl = dsl_func() + end + end + + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + + return + elseif luci.http.formvalue("hosts") == "1" then + luci.http.prepare_content("application/json") + luci.http.write_json(luci.sys.net.host_hints()) + + return + end +-%> + +<%+header%> + + + + +

<%:Status%>

+ +
+ <%:System%> + + + + + + + + + +
<%:Hostname%><%=luci.sys.hostname() or "?"%>
<%:Model%><%=pcdata(boardinfo.model or boardinfo.system or "?")%>
<%:Firmware Version%> + <%=pcdata(ver.distname)%> <%=pcdata(ver.distversion)%> / + <%=pcdata(ver.luciname)%> (<%=pcdata(ver.luciversion)%>) +
<%:Kernel Version%><%=unameinfo.release or "?"%>
<%:Local Time%>-
<%:Uptime%>-
<%:Load Average%>-
+
+ +
+ <%:Memory%> + + + + + +
<%:Total Available%>-
<%:Free%>-
<%:Buffered%>-
+
+ +<% if swapinfo.total > 0 then %> +
+ <%:Swap%> + + + + +
<%:Total Available%>-
<%:Free%>-
+
+<% end %> + +
+ <%:Network%> + + + + <% if has_ipv6 then %> + + <% end %> + +
<%:IPv4 WAN Status%> + + + +

?
<%:Collecting data...%>
+
<%:IPv6 WAN Status%> + + + +

?
<%:Collecting data...%>
+
<%:Active Connections%>-
+
+ +<% if has_dhcp then %> +
+ <%:DHCP Leases%> + + + + + + + + + + + +
<%:Hostname%><%:IPv4-Address%><%:MAC-Address%><%:Leasetime remaining%>

<%:Collecting data...%>
+
+ + +<% end %> + +<% if has_dsl then %> +
+ <%:DSL%> + + +
<%:DSL Status%> + + + +

?
<%:Collecting data...%>
+
+
+<% end %> + +<% if has_wifi then %> +
+ <%:Wireless%> + + + +
<%:Collecting data...%>
+
+ +
+ <%:Associated Stations%> + + + + + + + + + + + + + +
 <%:Network%><%:MAC-Address%><%:Host%><%:Signal%> / <%:Noise%><%:RX Rate%> / <%:TX Rate%>

<%:Collecting data...%>
+
+<% end %> + +<%- + local incdir = util.libpath() .. "/view/admin_status/index/" + if fs.access(incdir) then + local inc + for inc in fs.dir(incdir) do + if inc:match("%.htm$") then + include("admin_status/index/" .. inc:gsub("%.htm$", "")) + end + end + end +-%> + +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm new file mode 100644 index 0000000..3f4b83b --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm @@ -0,0 +1,156 @@ +<%# + Copyright 2008-2009 Steven Barth + Copyright 2008-2015 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%- + + require "luci.sys.iptparser" + local wba = require "luci.tools.webadmin" + local fs = require "nixio.fs" + local io = require "io" + + local has_ip6tables = fs.access("/usr/sbin/ip6tables") + local mode = 4 + + if has_ip6tables then + mode = luci.dispatcher.context.requestpath + mode = tonumber(mode[#mode] ~= "iptables" and mode[#mode]) or 4 + end + + local ipt = luci.sys.iptparser.IptParser(mode) + + local rowcnt = 1 + function rowstyle() + rowcnt = rowcnt + 1 + return (rowcnt % 2) + 1 + end + + function link_target(t,c) + if ipt:is_custom_target(c) then + return '%s' %{ t:lower(), c, c } + end + return c + end + + function link_iface(i) + local net = wba.iface_get_network(i) + if net and i ~= "lo" then + return '%s' %{ + url("admin/network/network", net), i + } + + end + return i + end + + local tables = { "Filter", "NAT", "Mangle", "Raw" } + if mode == 6 then + tables = { "Filter", "Mangle", "Raw" } + local ok, lines = pcall(io.lines, "/proc/net/ip6_tables_names") + if ok and lines then + local line + for line in lines do + if line == "nat" then + tables = { "Filter", "NAT", "Mangle", "Raw" } + end + end + end + end +-%> + +<%+header%> + + + +

<%:Firewall Status%>

+
+ +<% if has_ip6tables then %> + +<% end %> + +
+ +
" style="position: absolute; right: 0"> + + + + +
+ +
+ + <% for _, tbl in ipairs(tables) do chaincnt = 0 %> +

<%:Table%>: <%=tbl%>

+ + <% for _, chain in ipairs(ipt:chains(tbl)) do + rowcnt = 0 + chaincnt = chaincnt + 1 + chaininfo = ipt:chain(tbl, chain) + %> + + + + + + + + + + + + + + + + <% for _, rule in ipairs(ipt:find({table=tbl, chain=chain})) do %> + + + + + + + + + + + + <% end %> + + <% if rowcnt == 1 then %> + + + + <% end %> + <% end %> + + <% if chaincnt == 0 then %> + + + + <% end %> +
+
+ <%:Chain%> <%=chain%> + (<%- if chaininfo.policy then -%> + <%:Policy%>: <%=chaininfo.policy%>, <%:Packets%>: <%=chaininfo.packets%>, <%:Traffic%>: <%=wba.byte_format(chaininfo.bytes)-%> + <%- else -%> + <%:References%>: <%=chaininfo.references-%> + <%- end -%>) +
<%:Pkts.%><%:Traffic%><%:Target%><%:Prot.%><%:In%><%:Out%><%:Source%><%:Destination%><%:Options%>
<%=rule.packets%><%=wba.byte_format(rule.bytes)%><%=rule.target and link_target(tbl, rule.target) or "-"%><%=rule.protocol%><%=link_iface(rule.inputif)%><%=link_iface(rule.outputif)%><%=rule.source%><%=rule.destination%><%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%>
<%:No rules in this chain%>
<%:No chains in this table%>
+

+ <% end %> +
+
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm new file mode 100644 index 0000000..97a2f5e --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm @@ -0,0 +1,284 @@ +<%# + Copyright 2010 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + + + + +

<%:Realtime Load%>

+ + +
-
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
<%:1 Minute Load:%>0<%:Average:%>0<%:Peak:%>0
<%:5 Minute Load:%>0<%:Average:%>0<%:Peak:%>0
<%:15 Minute Load:%>0<%:Average:%>0<%:Peak:%>0
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm new file mode 100644 index 0000000..5f2c074 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm @@ -0,0 +1,162 @@ +<%# + Copyright 2008-2009 Steven Barth + Copyright 2008-2015 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%- + require "luci.tools.webadmin" + require "nixio.fs" + + local ip = require "luci.ip" + local style = true + local _, v + + local rtn = { + [255] = "local", + [254] = "main", + [253] = "default", + [0] = "unspec" + } + + if nixio.fs.access("/etc/iproute2/rt_tables") then + local ln + for ln in io.lines("/etc/iproute2/rt_tables") do + local i, n = ln:match("^(%d+)%s+(%S+)") + if i and n then + rtn[tonumber(i)] = n + end + end + end +-%> + +<%+header%> + +
+

<%:Routes%>

+
<%:The following rules are currently active on this system.%>
+ +
+ ARP +
+ + + + + + + + <% + for _, v in ipairs(ip.neighbors({ family = 4 })) do + if v.mac then + %> + + + + + + <% + style = not style + end + end + %> +
<%_IPv4-Address%><%_MAC-Address%><%:Interface%>
<%=v.dest%><%=v.mac%><%=v.dev%>
+
+
+
+ +
+ <%_Active IPv4-Routes%> + +
+ + + + + + + + + <% for _, v in ipairs(ip.routes({ family = 4, type = 1 })) do %> + + + + + + + + <% style = not style end %> +
<%:Network%><%:Target%><%_IPv4-Gateway%><%:Metric%><%:Table%>
<%=luci.tools.webadmin.iface_get_network(v.dev) or v.dev%><%=v.dest%><%=v.gw%><%=v.metric or 0%><%=rtn[v.table] or v.table%>
+
+
+
+ + <% + if nixio.fs.access("/proc/net/ipv6_route") then + style = true + %> +
+ <%_Active IPv6-Routes%> + +
+ + + + + + + + + <% + for _, v in ipairs(ip.routes({ family = 6, type = 1 })) do + if v.dest and not v.dest:is6linklocal() then + %> + + + + + + + + <% + style = not style + end + end + %> +
<%:Network%><%:Target%><%:Source%><%:Metric%><%:Table%>
<%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%><%=v.dest%><%=v.from%><%=v.metric or 0%><%=rtn[v.table] or v.table%>
+
+
+
+ +
+ <%:IPv6 Neighbours%> + +
+ + + + + + + <% + for _, v in ipairs(ip.neighbors({ family = 6 })) do + if v.dest and not v.dest:is6linklocal() and v.mac then + %> + + + + + + <% + style = not style + end + end + %> +
<%:IPv6-Address%><%:MAC-Address%><%:Interface%>
<%=v.dest%><%=v.mac%><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%>
+
+
+
+ <% end %> +
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm new file mode 100644 index 0000000..b87f21d --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm @@ -0,0 +1,12 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

<%:System Log%>

+
+ +
+<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm new file mode 100644 index 0000000..aa658ff --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm @@ -0,0 +1,370 @@ +<%# + Copyright 2011 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%- + local ntm = require "luci.model.network".init() + + local dev + local devices = { } + for _, dev in luci.util.vspairs(luci.sys.net.devices()) do + if dev:match("^wlan%d") or dev:match("^ath%d") or dev:match("^wl%d") then + devices[#devices+1] = dev + end + end + + local curdev = luci.http.formvalue("dev") or devices[1] +-%> + +<%+header%> + + + + +

<%:Realtime Wireless%>

+ + + + +
-
+
+ + + + + + + + + + + + + + + + + + + + + + +
<%:Signal:%>0 <%:dBm%><%:Average:%>0 <%:dBm%><%:Peak:%>0 <%:dBm%>
<%:Noise:%>0 <%:dBm%><%:Average:%>0 <%:dBm%><%:Peak:%>0 <%:dBm%>
+ +
+ + +
-
+
+ + + + + + + + + + + + +
<%:Phy Rate:%>0 MBit/s<%:Average:%>0 MBit/s<%:Peak:%>0 MBit/s
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm new file mode 100644 index 0000000..e722a48 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm @@ -0,0 +1,41 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + + + + <%=luci.sys.hostname()%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %> + + + + + +
+
+

<%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %>

+
+

+ <% if msg then %><%=msg%><% else %><%:Changes applied.%><% end %> +

+

+ <%:Loading%> + <%:Waiting for changes to be applied...%> +

+
+
+
+ + diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm new file mode 100644 index 0000000..c1f3361 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm @@ -0,0 +1,10 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + + diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm new file mode 100644 index 0000000..37d8ae0 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm @@ -0,0 +1,36 @@ +<%+cbi/valueheader%> + + + +<%:Collecting data...%> + + +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm new file mode 100644 index 0000000..3e3f65d --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm @@ -0,0 +1,93 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2015 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Flash operations%>

+ + + +
+ +
+ <%:Backup / Restore%> +
<%:Click "Generate archive" to download a tar archive of the current configuration files. To reset the firmware to its initial state, click "Perform reset" (only possible with squashfs images).%>
+
+
+ +
+ +
+ +
+
+
+ <% if reset_avail then %> +
+ +
+ +
+ +
+
+
+ <% end %> +
+
+
<%:To restore configuration files, you can upload a previously generated backup archive here.%>
+
+
+
+ +
+ + + +
+
+
+
+
+ +
+ +
+ <%:Flash new firmware image%> + <% if upgrade_avail then %> +
+ +
<%:Upload a sysupgrade-compatible image here to replace the running firmware. Check "Keep settings" to retain the current configuration (requires a compatible firmware image).%>
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ <% if image_invalid then %> +
<%:The uploaded image file does not contain a supported format. Make sure that you choose the generic image format for your platform. %>
+ <% end %> +
+ <% else %> +
<%:Sorry, there is no sysupgrade support present; a new firmware image must be flashed manually. Please refer to the wiki for device specific install instructions.%>
+ <% end %> +
+ +
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm new file mode 100644 index 0000000..a7ff4e5 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm @@ -0,0 +1,10 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + + diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm new file mode 100644 index 0000000..d5d7828 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm @@ -0,0 +1,212 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2010 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%- +local opkg = require "luci.model.ipkg" +local fs = require "nixio.fs" +local wa = require "luci.tools.webadmin" +local rowcnt = 1 + +function rowstyle() + rowcnt = rowcnt + 1 + return (rowcnt % 2) + 1 +end + +local fstat = fs.statvfs(opkg.overlay_root()) +local space_total = fstat and fstat.blocks or 0 +local space_free = fstat and fstat.bfree or 0 +local space_used = space_total - space_free + +local used_perc = math.floor(0.5 + ((space_total > 0) and ((100 / space_total) * space_used) or 100)) +local free_byte = space_free * fstat.frsize + +local filter = { } + + +local opkg_list = luci.model.ipkg.list_all +local querypat +if query and #query > 0 then + querypat = '*%s*' % query + opkg_list = luci.model.ipkg.find +end + +local letterpat +if letter == 35 then + letterpat = "[^a-z]*" +else + letterpat = string.char(letter, 42) -- 'A' '*' +end + +-%> + +<%+header%> + +

<%:Software%>

+ +
+ + + +
+ + + +
+
+ <% if (install and next(install)) or (remove and next(remove)) or update or upgrade then %> +
+ <% if #stdout > 0 then %>
<%=pcdata(stdout)%>
<% end %> + <% if #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %> +
+ <% end %> + + <% if querypat then %> +
+ <%:Displaying only packages containing%> "<%=pcdata(query)%>" + +
+
+ <% end %> + + <% if no_lists or old_lists then %> +
+ <% if old_lists then %> + <%:Package lists are older than 24 hours%> + <% else %> + <%:No package lists available%> + <% end %> + +
+ <% end %> + +
+ <%:Free space%>: <%=(100-used_perc)%>% (<%=wa.byte_format(free_byte)%>) +
+
 
+
+
+
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + +
+
+
+
+
+ + +

<%:Status%>

+ + + + + <% if display ~= "available" then %> +
+ + + + + + + <% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, s, d) empty = false; filter[n] = true %> + + + + + + <% end) %> + <% if empty then %> + + + + + + <% end %> +
 <%:Package name%><%:Version%>
+
+ + + + <%:Remove%> +
+
<%=luci.util.pcdata(n)%><%=luci.util.pcdata(v)%>
 <%:none%><%:none%>
+
+ <% else %> +
+ <% if not querypat then %> + +
+ <% end %> + + + + + + + + + <% local empty = true; opkg_list(querypat or letterpat, function(n, v, s, d) if filter[n] then return end; empty = false %> + + + + + + + + <% end) %> + <% if empty then %> + + + + + + + + <% end %> +
 <%:Package name%><%:Version%><%:Size (.ipk)%><%:Description%>
+
+ + + + <%:Install%> +
+
<%=luci.util.pcdata(n)%><%=luci.util.pcdata(v)%><%=luci.util.pcdata(s)%><%=luci.util.pcdata(d)%>
 <%:none%><%:none%><%:none%><%:none%>
+ <% if not querypat then %> +
+ <% end %> +
+ <% end %> +
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm new file mode 100644 index 0000000..c955180 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm @@ -0,0 +1,59 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2015 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Reboot%>

+
+ +

<%:Reboots the operating system of your device%>

+ +<%- local c = require("luci.model.uci").cursor():changes(); if c and next(c) then -%> +

<%:Warning: There are unsaved changes that will get lost on reboot!%>

+<%- end -%> + +
+ + + + + + + +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm new file mode 100644 index 0000000..7175248 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm @@ -0,0 +1,59 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2009 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Flash Firmware%> - <%:Verify%>

+

+ <%_ The flash image was uploaded. + Below is the checksum and file size listed, + compare them with the original file to ensure data integrity.
+ Click "Proceed" below to start the flash procedure. %> + + <% if storage > 0 and size > storage then %> +

+

<%:It appears that you are trying to + flash an image that does not fit into the flash memory, please verify + the image file! %>
+ <% end %> + +

+ +
+
    +
  • <%:Checksum%>
    + <%:MD5%>: <%=checksum%>
    + <%:SHA256%>: <%=sha256ch%>
  • +
  • <%:Size%>: <% + local w = require "luci.tools.webadmin" + write(w.byte_format(size)) + + if storage > 0 then + write(luci.i18n.translatef( + " (%s available)", + w.byte_format(storage) + )) + end + %>
  • +
  • <% if keep then %> + <%:Configuration files will be kept.%> + <% else %> + <%:Note: Configuration files will be erased.%> + <% end %>
  • +
+
+ +
+
+ + + " /> + + +
+
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm new file mode 100644 index 0000000..370027e --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm @@ -0,0 +1,23 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Configuration%> / <%:Apply%>

+ +<% if changes then %> + <%+cbi/apply_xhr%> + <%+admin_uci/changelog%> + + <%- cbi_apply_xhr('uci-apply', configs) -%> + +

<%:The following changes have been committed%>:

+ <%- uci_changelog(changes) -%> +<% else %> +

<%:There are no pending changes to apply!%>

+<% end %> + +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm new file mode 100644 index 0000000..4ed4f0a --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/changelog.htm @@ -0,0 +1,79 @@ +<%# + Copyright 2010 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% export("uci_changelog", function(changes) -%> +
+ <%:Legend:%> +
+
  <%:Section added%>
+
  <%:Section removed%>
+
  <%:Option changed%>
+
  <%:Option removed%>
+
+
+
+ +
<% + local util = luci.util + local ret = { } + + for r, tbl in pairs(changes) do + for s, os in pairs(tbl) do + -- section add + if os['.type'] and os['.type'] ~= "" then + ret[#ret+1] = "%s.%s=%s" %{ r, s, os['.type'] } + for o, v in util.kspairs(os) do + if o:sub(1,1) ~= "." then + if type(v) == "table" then + local i + for i = 1, #v do + ret[#ret+1] = "
%s.%s.%s+=%s" + %{ r, s, o, util.pcdata(v[i]) } + end + else + ret[#ret+1] = "
%s.%s.%s=%s" + %{ r, s, o, util.pcdata(v) } + end + end + end + ret[#ret+1] = "

" + + -- section delete + elseif os['.type'] and os['.type'] == "" then + ret[#ret+1] = "%s.%s
" %{ r, s } + + -- modifications + else + ret[#ret+1] = "%s.%s
" %{ r, s } + for o, v in util.kspairs(os) do + if o:sub(1,1) ~= "." then + if v and #v > 0 then + ret[#ret+1] = "" + if type(v) == "table" then + local i + for i = 1, #v do + ret[#ret+1] = "%s.%s.%s+=%s
" + %{ r, s, o, util.pcdata(v[i]) } + end + + else + ret[#ret+1] = "%s.%s.%s=%s
" + %{ r, s, o, util.pcdata(v) } + end + ret[#ret+1] = "
" + else + ret[#ret+1] = "%s.%s.%s
" %{ r, s, o } + end + end + end + ret[#ret+1] = "

" + end + end + end + + write(table.concat(ret)) + %>
+
+<%- end) %> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm new file mode 100644 index 0000000..c337360 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm @@ -0,0 +1,46 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2015 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Configuration%> / <%:Changes%>

+ +<% if changes then %> + <%+admin_uci/changelog%> + <%- uci_changelog(changes) -%> +<% else %> +

<%:There are no pending changes!%>

+<% end %> + +
+ <% local r = luci.http.formvalue("redir"); if r and #r > 0 then %> +
+
+ +
+
+ <% end %> + +
+
+ + " /> + +
+
+ + " /> + +
+
+ + " /> + +
+
+
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm new file mode 100644 index 0000000..5da7281 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm @@ -0,0 +1,27 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Configuration%> / <%:Revert%>

+ +<% if changes then %> + <%+cbi/apply_xhr%> + <%+admin_uci/changelog%> + +

<%:The following changes have been reverted%>:

+ <%- uci_changelog(changes) -%> +<% else %> +

<%:There are no pending changes to revert!%>

+<% end %> + +
+
"> + +
+
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-full/luasrc/view/cbi/wireless_modefreq.htm b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/cbi/wireless_modefreq.htm new file mode 100644 index 0000000..2fb64b3 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/luasrc/view/cbi/wireless_modefreq.htm @@ -0,0 +1,168 @@ +<%+cbi/valueheader%> + + + + + + + +
+ + + +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-mod-admin-full/root/etc/uci-defaults/50_luci-mod-admin-full b/feeds/luci/modules/luci-mod-admin-full/root/etc/uci-defaults/50_luci-mod-admin-full new file mode 100755 index 0000000..372eb15 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/root/etc/uci-defaults/50_luci-mod-admin-full @@ -0,0 +1,22 @@ +#!/bin/sh + +if [ "$(uci -q get luci.diag)" != "internal" ]; then + host="" + + if [ -s /etc/os-release ]; then + . /etc/os-release + host="${HOME_URL:-${BUG_URL:-$LEDE_DEVICE_MANUFACTURER_URL}}" + host="${host#*://}" + host="${host%%/*}" + fi + + uci -q batch <<-EOF >/dev/null + set luci.diag=internal + set luci.diag.dns='${host:-openwrt.org}' + set luci.diag.ping='${host:-openwrt.org}' + set luci.diag.route='${host:-openwrt.org}' + commit luci + EOF +fi + +exit 0 diff --git a/feeds/luci/modules/luci-mod-admin-full/src/Makefile b/feeds/luci/modules/luci-mod-admin-full/src/Makefile new file mode 100644 index 0000000..d6ed8c6 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/src/Makefile @@ -0,0 +1,14 @@ +%.o: %.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(FPIC) -c -o $@ $< + +clean: + rm -f luci-bwc *.o + +luci-bwc: luci-bwc.o + $(CC) $(LDFLAGS) -o $@ $^ -ldl + +compile: luci-bwc + +install: compile + mkdir -p $(DESTDIR)/usr/bin + cp luci-bwc $(DESTDIR)/usr/bin/luci-bwc diff --git a/feeds/luci/modules/luci-mod-admin-full/src/luci-bwc.c b/feeds/luci/modules/luci-mod-admin-full/src/luci-bwc.c new file mode 100644 index 0000000..63668d4 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-full/src/luci-bwc.c @@ -0,0 +1,778 @@ +/* + * luci-bwc - Very simple bandwidth collector cache for LuCI realtime graphs + * + * Copyright (C) 2010 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#define STEP_COUNT 60 +#define STEP_TIME 1 +#define TIMEOUT 10 + +#define PID_PATH "/var/run/luci-bwc.pid" + +#define DB_PATH "/var/lib/luci-bwc" +#define DB_IF_FILE DB_PATH "/if/%s" +#define DB_RD_FILE DB_PATH "/radio/%s" +#define DB_CN_FILE DB_PATH "/connections" +#define DB_LD_FILE DB_PATH "/load" + +#define IF_SCAN_PATTERN \ + " %[^ :]:%u %u" \ + " %*d %*d %*d %*d %*d %*d" \ + " %u %u" + +#define LD_SCAN_PATTERN \ + "%f %f %f" + + +struct file_map { + int fd; + int size; + char *mmap; +}; + +struct traffic_entry { + uint32_t time; + uint32_t rxb; + uint32_t rxp; + uint32_t txb; + uint32_t txp; +}; + +struct conn_entry { + uint32_t time; + uint32_t udp; + uint32_t tcp; + uint32_t other; +}; + +struct load_entry { + uint32_t time; + uint16_t load1; + uint16_t load5; + uint16_t load15; +}; + +struct radio_entry { + uint32_t time; + uint16_t rate; + uint8_t rssi; + uint8_t noise; +}; + +static int readpid(void) +{ + int fd; + int pid = -1; + char buf[9] = { 0 }; + + if ((fd = open(PID_PATH, O_RDONLY)) > -1) + { + if (read(fd, buf, sizeof(buf))) + { + buf[8] = 0; + pid = atoi(buf); + } + + close(fd); + } + + return pid; +} + +static int writepid(void) +{ + int fd; + int wlen; + char buf[9] = { 0 }; + + if ((fd = open(PID_PATH, O_WRONLY | O_CREAT | O_TRUNC, 0600)) > -1) + { + wlen = snprintf(buf, sizeof(buf), "%i", getpid()); + write(fd, buf, wlen); + close(fd); + + return 0; + } + + return -1; +} + +static int timeout = TIMEOUT; +static int countdown = -1; + +static void reset_countdown(int sig) +{ + countdown = timeout; + +} + + +static char *progname; +static int prognamelen; + +static struct iwinfo_ops *backend = NULL; + + +static int init_directory(char *path) +{ + char *p = path; + + for (p = &path[1]; *p; p++) + { + if (*p == '/') + { + *p = 0; + + if (mkdir(path, 0700) && (errno != EEXIST)) + return -1; + + *p = '/'; + } + } + + return 0; +} + +static int init_file(char *path, int esize) +{ + int i, file; + char buf[sizeof(struct traffic_entry)] = { 0 }; + + if (init_directory(path)) + return -1; + + if ((file = open(path, O_WRONLY | O_CREAT, 0600)) >= 0) + { + for (i = 0; i < STEP_COUNT; i++) + { + if (write(file, buf, esize) < 0) + break; + } + + close(file); + + return 0; + } + + return -1; +} + +static inline uint32_t timeof(void *entry) +{ + return ntohl(((struct traffic_entry *)entry)->time); +} + +static int update_file(const char *path, void *entry, int esize) +{ + int rv = -1; + int file; + char *map; + + if ((file = open(path, O_RDWR)) >= 0) + { + map = mmap(NULL, esize * STEP_COUNT, PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_LOCKED, file, 0); + + if ((map != NULL) && (map != MAP_FAILED)) + { + if (timeof(entry) > timeof(map + esize * (STEP_COUNT-1))) + { + memmove(map, map + esize, esize * (STEP_COUNT-1)); + memcpy(map + esize * (STEP_COUNT-1), entry, esize); + } + + munmap(map, esize * STEP_COUNT); + + rv = 0; + } + + close(file); + } + + return rv; +} + +static int mmap_file(const char *path, int esize, struct file_map *m) +{ + m->fd = -1; + m->size = -1; + m->mmap = NULL; + + if ((m->fd = open(path, O_RDONLY)) >= 0) + { + m->size = STEP_COUNT * esize; + m->mmap = mmap(NULL, m->size, PROT_READ, + MAP_SHARED | MAP_LOCKED, m->fd, 0); + + if ((m->mmap != NULL) && (m->mmap != MAP_FAILED)) + return 0; + } + + return -1; +} + +static void umap_file(struct file_map *m) +{ + if ((m->mmap != NULL) && (m->mmap != MAP_FAILED)) + munmap(m->mmap, m->size); + + if (m->fd > -1) + close(m->fd); +} + +static void * iw_open(void) +{ + return dlopen("/usr/lib/libiwinfo.so", RTLD_LAZY); +} + +static int iw_update( + void *iw, const char *ifname, uint16_t *rate, uint8_t *rssi, uint8_t *noise +) { + struct iwinfo_ops *(*probe)(const char *); + int val; + + if (!backend) + { + probe = dlsym(iw, "iwinfo_backend"); + + if (!probe) + return 0; + + backend = probe(ifname); + + if (!backend) + return 0; + } + + *rate = (backend->bitrate && !backend->bitrate(ifname, &val)) ? val : 0; + *rssi = (backend->signal && !backend->signal(ifname, &val)) ? val : 0; + *noise = (backend->noise && !backend->noise(ifname, &val)) ? val : 0; + + return 1; +} + +static void iw_close(void *iw) +{ + void (*finish)(void); + + finish = dlsym(iw, "iwinfo_finish"); + + if (finish) + finish(); + + dlclose(iw); +} + + +static int update_ifstat( + const char *ifname, uint32_t rxb, uint32_t rxp, uint32_t txb, uint32_t txp +) { + char path[1024]; + + struct stat s; + struct traffic_entry e; + + snprintf(path, sizeof(path), DB_IF_FILE, ifname); + + if (stat(path, &s)) + { + if (init_file(path, sizeof(struct traffic_entry))) + { + fprintf(stderr, "Failed to init %s: %s\n", + path, strerror(errno)); + + return -1; + } + } + + e.time = htonl(time(NULL)); + e.rxb = htonl(rxb); + e.rxp = htonl(rxp); + e.txb = htonl(txb); + e.txp = htonl(txp); + + return update_file(path, &e, sizeof(struct traffic_entry)); +} + +static int update_radiostat( + const char *ifname, uint16_t rate, uint8_t rssi, uint8_t noise +) { + char path[1024]; + + struct stat s; + struct radio_entry e; + + snprintf(path, sizeof(path), DB_RD_FILE, ifname); + + if (stat(path, &s)) + { + if (init_file(path, sizeof(struct radio_entry))) + { + fprintf(stderr, "Failed to init %s: %s\n", + path, strerror(errno)); + + return -1; + } + } + + e.time = htonl(time(NULL)); + e.rate = htons(rate); + e.rssi = rssi; + e.noise = noise; + + return update_file(path, &e, sizeof(struct radio_entry)); +} + +static int update_cnstat(uint32_t udp, uint32_t tcp, uint32_t other) +{ + char path[1024]; + + struct stat s; + struct conn_entry e; + + snprintf(path, sizeof(path), DB_CN_FILE); + + if (stat(path, &s)) + { + if (init_file(path, sizeof(struct conn_entry))) + { + fprintf(stderr, "Failed to init %s: %s\n", + path, strerror(errno)); + + return -1; + } + } + + e.time = htonl(time(NULL)); + e.udp = htonl(udp); + e.tcp = htonl(tcp); + e.other = htonl(other); + + return update_file(path, &e, sizeof(struct conn_entry)); +} + +static int update_ldstat(uint16_t load1, uint16_t load5, uint16_t load15) +{ + char path[1024]; + + struct stat s; + struct load_entry e; + + snprintf(path, sizeof(path), DB_LD_FILE); + + if (stat(path, &s)) + { + if (init_file(path, sizeof(struct load_entry))) + { + fprintf(stderr, "Failed to init %s: %s\n", + path, strerror(errno)); + + return -1; + } + } + + e.time = htonl(time(NULL)); + e.load1 = htons(load1); + e.load5 = htons(load5); + e.load15 = htons(load15); + + return update_file(path, &e, sizeof(struct load_entry)); +} + +static int run_daemon(void) +{ + FILE *info; + uint32_t rxb, txb, rxp, txp; + uint32_t udp, tcp, other; + uint16_t rate; + uint8_t rssi, noise; + float lf1, lf5, lf15; + char line[1024]; + char ifname[16]; + int i; + void *iw; + struct sigaction sa; + + struct stat s; + const char *ipc = stat("/proc/net/nf_conntrack", &s) + ? "/proc/net/ip_conntrack" : "/proc/net/nf_conntrack"; + + switch (fork()) + { + case -1: + perror("fork()"); + return -1; + + case 0: + if (chdir("/") < 0) + { + perror("chdir()"); + exit(1); + } + + close(0); + close(1); + close(2); + break; + + default: + return 0; + } + + /* setup USR1 signal handler to reset timer */ + sa.sa_handler = reset_countdown; + sa.sa_flags = SA_RESTART; + sigemptyset(&sa.sa_mask); + sigaction(SIGUSR1, &sa, NULL); + + /* write pid */ + if (writepid()) + { + fprintf(stderr, "Failed to write pid file: %s\n", strerror(errno)); + return 1; + } + + /* initialize iwinfo */ + iw = iw_open(); + + /* go */ + for (reset_countdown(0); countdown >= 0; countdown--) + { + /* alter progname for ps, top */ + memset(progname, 0, prognamelen); + snprintf(progname, prognamelen, "luci-bwc %d", countdown); + + if ((info = fopen("/proc/net/dev", "r")) != NULL) + { + while (fgets(line, sizeof(line), info)) + { + if (strchr(line, '|')) + continue; + + if (sscanf(line, IF_SCAN_PATTERN, ifname, &rxb, &rxp, &txb, &txp)) + { + if (strncmp(ifname, "lo", sizeof(ifname))) + update_ifstat(ifname, rxb, rxp, txb, txp); + } + } + + fclose(info); + } + + if (iw) + { + for (i = 0; i < 5; i++) + { +#define iw_checkif(pattern) \ + do { \ + snprintf(ifname, sizeof(ifname), pattern, i); \ + if (iw_update(iw, ifname, &rate, &rssi, &noise)) \ + { \ + update_radiostat(ifname, rate, rssi, noise); \ + continue; \ + } \ + } while(0) + + iw_checkif("wlan%d"); + iw_checkif("ath%d"); + iw_checkif("wl%d"); + } + } + + if ((info = fopen(ipc, "r")) != NULL) + { + udp = 0; + tcp = 0; + other = 0; + + while (fgets(line, sizeof(line), info)) + { + if (strstr(line, "TIME_WAIT")) + continue; + + if (strstr(line, "src=127.0.0.1 ") && + strstr(line, "dst=127.0.0.1 ")) + continue; + + if (sscanf(line, "%*s %*d %s", ifname) || sscanf(line, "%s %*d", ifname)) + { + if (!strcmp(ifname, "tcp")) + tcp++; + else if (!strcmp(ifname, "udp")) + udp++; + else + other++; + } + } + + update_cnstat(udp, tcp, other); + + fclose(info); + } + + if ((info = fopen("/proc/loadavg", "r")) != NULL) + { + if (fscanf(info, LD_SCAN_PATTERN, &lf1, &lf5, &lf15)) + { + update_ldstat((uint16_t)(lf1 * 100), + (uint16_t)(lf5 * 100), + (uint16_t)(lf15 * 100)); + } + + fclose(info); + } + + sleep(STEP_TIME); + } + + unlink(PID_PATH); + + if (iw) + iw_close(iw); + + return 0; +} + +static void check_daemon(void) +{ + int pid; + + if ((pid = readpid()) < 0 || kill(pid, 0) < 0) + { + /* daemon ping failed, try to start it up */ + if (run_daemon()) + { + fprintf(stderr, + "Failed to ping daemon and unable to start it up: %s\n", + strerror(errno)); + + exit(1); + } + } + else if (kill(pid, SIGUSR1)) + { + fprintf(stderr, "Failed to send signal: %s\n", strerror(errno)); + exit(2); + } +} + +static int run_dump_ifname(const char *ifname) +{ + int i; + char path[1024]; + struct file_map m; + struct traffic_entry *e; + + check_daemon(); + snprintf(path, sizeof(path), DB_IF_FILE, ifname); + + if (mmap_file(path, sizeof(struct traffic_entry), &m)) + { + fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno)); + return 1; + } + + for (i = 0; i < m.size; i += sizeof(struct traffic_entry)) + { + e = (struct traffic_entry *) &m.mmap[i]; + + if (!e->time) + continue; + + printf("[ %u, %u, %" PRIu32 + ", %u, %u ]%s\n", + ntohl(e->time), + ntohl(e->rxb), ntohl(e->rxp), + ntohl(e->txb), ntohl(e->txp), + ((i + sizeof(struct traffic_entry)) < m.size) ? "," : ""); + } + + umap_file(&m); + + return 0; +} + +static int run_dump_radio(const char *ifname) +{ + int i; + char path[1024]; + struct file_map m; + struct radio_entry *e; + + check_daemon(); + snprintf(path, sizeof(path), DB_RD_FILE, ifname); + + if (mmap_file(path, sizeof(struct radio_entry), &m)) + { + fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno)); + return 1; + } + + for (i = 0; i < m.size; i += sizeof(struct radio_entry)) + { + e = (struct radio_entry *) &m.mmap[i]; + + if (!e->time) + continue; + + printf("[ %u, %d, %d, %d ]%s\n", + ntohl(e->time), + e->rate, e->rssi, e->noise, + ((i + sizeof(struct radio_entry)) < m.size) ? "," : ""); + } + + umap_file(&m); + + return 0; +} + +static int run_dump_conns(void) +{ + int i; + char path[1024]; + struct file_map m; + struct conn_entry *e; + + check_daemon(); + snprintf(path, sizeof(path), DB_CN_FILE); + + if (mmap_file(path, sizeof(struct conn_entry), &m)) + { + fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno)); + return 1; + } + + for (i = 0; i < m.size; i += sizeof(struct conn_entry)) + { + e = (struct conn_entry *) &m.mmap[i]; + + if (!e->time) + continue; + + printf("[ %u, %u, %u, %u ]%s\n", + ntohl(e->time), ntohl(e->udp), + ntohl(e->tcp), ntohl(e->other), + ((i + sizeof(struct conn_entry)) < m.size) ? "," : ""); + } + + umap_file(&m); + + return 0; +} + +static int run_dump_load(void) +{ + int i; + char path[1024]; + struct file_map m; + struct load_entry *e; + + check_daemon(); + snprintf(path, sizeof(path), DB_LD_FILE); + + if (mmap_file(path, sizeof(struct load_entry), &m)) + { + fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno)); + return 1; + } + + for (i = 0; i < m.size; i += sizeof(struct load_entry)) + { + e = (struct load_entry *) &m.mmap[i]; + + if (!e->time) + continue; + + printf("[ %u, %u, %u, %u ]%s\n", + ntohl(e->time), + ntohs(e->load1), ntohs(e->load5), ntohs(e->load15), + ((i + sizeof(struct load_entry)) < m.size) ? "," : ""); + } + + umap_file(&m); + + return 0; +} + + +int main(int argc, char *argv[]) +{ + int opt; + + progname = argv[0]; + prognamelen = -1; + + for (opt = 0; opt < argc; opt++) + prognamelen += 1 + strlen(argv[opt]); + + while ((opt = getopt(argc, argv, "t:i:r:cl")) > -1) + { + switch (opt) + { + case 't': + timeout = atoi(optarg); + break; + + case 'i': + if (optarg) + return run_dump_ifname(optarg); + break; + + case 'r': + if (optarg) + return run_dump_radio(optarg); + break; + + case 'c': + return run_dump_conns(); + + case 'l': + return run_dump_load(); + + default: + break; + } + } + + fprintf(stderr, + "Usage:\n" + " %s [-t timeout] -i ifname\n" + " %s [-t timeout] -r radiodev\n" + " %s [-t timeout] -c\n" + " %s [-t timeout] -l\n", + argv[0], argv[0], argv[0], argv[0] + ); + + return 1; +} diff --git a/feeds/luci/modules/luci-mod-admin-mini/Makefile b/feeds/luci/modules/luci-mod-admin-mini/Makefile new file mode 100644 index 0000000..5da4caf --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/Makefile @@ -0,0 +1,15 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Essentials - stripped down and user-friendly +LUCI_DEPENDS:=+luci-base @BROKEN + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/controller/mini/index.lua b/feeds/luci/modules/luci-mod-admin-mini/luasrc/controller/mini/index.lua new file mode 100644 index 0000000..dd25f2c --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/controller/mini/index.lua @@ -0,0 +1,39 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.mini.index", package.seeall) + +function index() + local root = node() + if not root.lock then + root.target = alias("mini") + root.index = true + end + + entry({"about"}, template("about")) + + local page = entry({"mini"}, alias("mini", "index"), _("Essentials"), 10) + page.sysauth = "root" + page.sysauth_authenticator = "htmlauth" + page.index = true + + entry({"mini", "index"}, alias("mini", "index", "index"), _("Overview"), 10).index = true + entry({"mini", "index", "index"}, form("mini/index"), _("General"), 1).ignoreindex = true + entry({"mini", "index", "luci"}, cbi("mini/luci", {autoapply=true}), _("Settings"), 10) + entry({"mini", "index", "logout"}, call("action_logout"), _("Logout")) +end + +function action_logout() + local dsp = require "luci.dispatcher" + local utl = require "luci.util" + if dsp.context.authsession then + utl.ubus("session", "destroy", { + ubus_rpc_session = dsp.context.authsession + }) + dsp.context.urltoken.stok = nil + end + + luci.http.header("Set-Cookie", "sysauth=; path=" .. dsp.build_url()) + luci.http.redirect(luci.dispatcher.build_url()) +end diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/controller/mini/network.lua b/feeds/luci/modules/luci-mod-admin-mini/luasrc/controller/mini/network.lua new file mode 100644 index 0000000..92506e5 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/controller/mini/network.lua @@ -0,0 +1,12 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.mini.network", package.seeall) + +function index() + entry({"mini", "network"}, alias("mini", "network", "index"), _("Network"), 20).index = true + entry({"mini", "network", "index"}, cbi("mini/network", {autoapply=true}), _("General"), 1) + entry({"mini", "network", "wifi"}, cbi("mini/wifi", {autoapply=true}), _("Wireless"), 10) + entry({"mini", "network", "dhcp"}, cbi("mini/dhcp", {autoapply=true}), _("DHCP"), 20) +end diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/controller/mini/system.lua b/feeds/luci/modules/luci-mod-admin-mini/luasrc/controller/mini/system.lua new file mode 100644 index 0000000..74a5ae4 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/controller/mini/system.lua @@ -0,0 +1,235 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.mini.system", package.seeall) + +function index() + entry({"mini", "system"}, alias("mini", "system", "index"), _("System"), 40).index = true + entry({"mini", "system", "index"}, cbi("mini/system", {autoapply=true}), _("General"), 1) + entry({"mini", "system", "passwd"}, form("mini/passwd"), _("Admin Password"), 10) + entry({"mini", "system", "backup"}, call("action_backup"), _("Backup / Restore"), 80) + entry({"mini", "system", "upgrade"}, call("action_upgrade"), _("Flash Firmware"), 90) + entry({"mini", "system", "reboot"}, call("action_reboot"), _("Reboot"), 100) +end + +function action_backup() + local reset_avail = os.execute([[grep '"rootfs_data"' /proc/mtd >/dev/null 2>&1]]) == 0 + local restore_cmd = "gunzip | tar -xC/ >/dev/null 2>&1" + local backup_cmd = "tar -c %s | gzip 2>/dev/null" + + local restore_fpi + luci.http.setfilehandler( + function(meta, chunk, eof) + if not restore_fpi then + restore_fpi = io.popen(restore_cmd, "w") + end + if chunk then + restore_fpi:write(chunk) + end + if eof then + restore_fpi:close() + end + end + ) + + local upload = luci.http.formvalue("archive") + local backup = luci.http.formvalue("backup") + local reset = reset_avail and luci.http.formvalue("reset") + + if upload and #upload > 0 then + luci.template.render("mini/applyreboot") + luci.sys.reboot() + elseif backup then + local reader = ltn12_popen(backup_cmd:format(_keep_pattern())) + luci.http.header('Content-Disposition', 'attachment; filename="backup-%s-%s.tar.gz"' % { + luci.sys.hostname(), os.date("%Y-%m-%d")}) + luci.http.prepare_content("application/x-targz") + luci.ltn12.pump.all(reader, luci.http.write) + elseif reset then + luci.template.render("mini/applyreboot") + luci.util.exec("mtd -r erase rootfs_data") + else + luci.template.render("mini/backup", {reset_avail = reset_avail}) + end +end + +function action_reboot() + local reboot = luci.http.formvalue("reboot") + luci.template.render("mini/reboot", {reboot=reboot}) + if reboot then + luci.sys.reboot() + end +end + +function action_upgrade() + require("luci.model.uci") + + local tmpfile = "/tmp/firmware.img" + + local function image_supported() + -- XXX: yay... + return ( 0 == os.execute( + ". /lib/functions.sh; " .. + "include /lib/upgrade; " .. + "platform_check_image %q >/dev/null" + % tmpfile + ) ) + end + + local function image_checksum() + return (luci.sys.exec("md5sum %q" % tmpfile):match("^([^%s]+)")) + end + + local function storage_size() + local size = 0 + if nixio.fs.access("/proc/mtd") then + for l in io.lines("/proc/mtd") do + local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"') + if n == "linux" then + size = tonumber(s, 16) + break + end + end + elseif nixio.fs.access("/proc/partitions") then + for l in io.lines("/proc/partitions") do + local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)') + if b and n and not n:match('[0-9]') then + size = tonumber(b) * 1024 + break + end + end + end + return size + end + + + -- Install upload handler + local file + luci.http.setfilehandler( + function(meta, chunk, eof) + if not nixio.fs.access(tmpfile) and not file and chunk and #chunk > 0 then + file = io.open(tmpfile, "w") + end + if file and chunk then + file:write(chunk) + end + if file and eof then + file:close() + end + end + ) + + + -- Determine state + local keep_avail = true + local step = tonumber(luci.http.formvalue("step") or 1) + local has_image = nixio.fs.access(tmpfile) + local has_support = image_supported() + local has_platform = nixio.fs.access("/lib/upgrade/platform.sh") + local has_upload = luci.http.formvalue("image") + + -- This does the actual flashing which is invoked inside an iframe + -- so don't produce meaningful errors here because the the + -- previous pages should arrange the stuff as required. + if step == 4 then + if has_platform and has_image and has_support then + -- Mimetype text/plain + luci.http.prepare_content("text/plain") + luci.http.write("Starting luci-flash...\n") + + -- Now invoke sysupgrade + local keepcfg = keep_avail and luci.http.formvalue("keepcfg") == "1" + local flash = ltn12_popen("/sbin/luci-flash %s %q" %{ + keepcfg and "-k %q" % _keep_pattern() or "", tmpfile + }) + + luci.ltn12.pump.all(flash, luci.http.write) + + -- Make sure the device is rebooted + luci.sys.reboot() + end + + + -- + -- This is step 1-3, which does the user interaction and + -- image upload. + -- + + -- Step 1: file upload, error on unsupported image format + elseif not has_image or not has_support or step == 1 then + -- If there is an image but user has requested step 1 + -- or type is not supported, then remove it. + if has_image then + nixio.fs.unlink(tmpfile) + end + + luci.template.render("mini/upgrade", { + step=1, + bad_image=(has_image and not has_support or false), + keepavail=keep_avail, + supported=has_platform + } ) + + -- Step 2: present uploaded file, show checksum, confirmation + elseif step == 2 then + luci.template.render("mini/upgrade", { + step=2, + checksum=image_checksum(), + filesize=nixio.fs.stat(tmpfile).size, + flashsize=storage_size(), + keepconfig=(keep_avail and luci.http.formvalue("keepcfg") == "1") + } ) + + -- Step 3: load iframe which calls the actual flash procedure + elseif step == 3 then + luci.template.render("mini/upgrade", { + step=3, + keepconfig=(keep_avail and luci.http.formvalue("keepcfg") == "1") + } ) + end +end + +function _keep_pattern() + local kpattern = "" + local files = luci.model.uci.cursor():get_all("luci", "flash_keep") + if files then + kpattern = "" + for k, v in pairs(files) do + if k:sub(1,1) ~= "." and nixio.fs.glob(v)() then + kpattern = kpattern .. " " .. v + end + end + end + return kpattern +end + +function ltn12_popen(command) + + local fdi, fdo = nixio.pipe() + local pid = nixio.fork() + + if pid > 0 then + fdo:close() + local close + return function() + local buffer = fdi:read(2048) + local wpid, stat = nixio.waitpid(pid, "nohang") + if not close and wpid and stat == "exited" then + close = true + end + + if buffer and #buffer > 0 then + return buffer + elseif close then + fdi:close() + return nil + end + end + elseif pid == 0 then + nixio.dup(fdo, nixio.stdout) + fdi:close() + fdo:close() + nixio.exec("/bin/sh", "-c", command) + end +end diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/dhcp.lua b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/dhcp.lua new file mode 100644 index 0000000..9a1c1fe --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/dhcp.lua @@ -0,0 +1,98 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local uci = require "luci.model.uci".cursor() +local ipc = require "luci.ip" +local wa = require "luci.tools.webadmin" +local fs = require "nixio.fs" + +m = Map("dhcp", "DHCP") + +s = m:section(TypedSection, "dhcp", "DHCP-Server") +s.anonymous = true +s.addremove = false +s.dynamic = false + +s:depends("interface", "lan") + +enable = s:option(ListValue, "ignore", translate("enable"), "") +enable:value(0, translate("enable")) +enable:value(1, translate("disable")) + +start = s:option(Value, "start", translate("First leased address")) +start.rmempty = true +start:depends("ignore", "0") + + +limit = s:option(Value, "limit", translate("Number of leased addresses"), "") +limit:depends("ignore", "0") + +function limit.cfgvalue(self, section) + local value = Value.cfgvalue(self, section) + + if value then + return tonumber(value) + 1 + end +end + +function limit.write(self, section, value) + value = tonumber(value) - 1 + return Value.write(self, section, value) +end + +limit.rmempty = true + +time = s:option(Value, "leasetime") +time:depends("ignore", "0") +time.rmempty = true + + +local leasefn, leasefp, leases +uci:foreach("dhcp", "dnsmasq", + function(section) + leasefn = section.leasefile + end +) +local leasefp = leasefn and fs.access(leasefn) and io.lines(leasefn) +if leasefp then + leases = {} + for lease in leasefp do + table.insert(leases, luci.util.split(lease, " ")) + end +end + +if leases then + v = m:section(Table, leases, translate("Active Leases")) + name = v:option(DummyValue, 4, translate("Hostname")) + function name.cfgvalue(self, ...) + local value = DummyValue.cfgvalue(self, ...) + return (value == "*") and "?" or value + end + ip = v:option(DummyValue, 3, translate("IPv4-Address")) + mac = v:option(DummyValue, 2, translate("MAC-Address")) + ltime = v:option(DummyValue, 1, translate("Leasetime remaining")) + function ltime.cfgvalue(self, ...) + local value = DummyValue.cfgvalue(self, ...) + return wa.date_format(os.difftime(tonumber(value), os.time())) + end +end + +s2 = m:section(TypedSection, "host", translate("Static Leases")) +s2.addremove = true +s2.anonymous = true +s2.template = "cbi/tblsection" + +name = s2:option(Value, "name", translate("Hostname")) +mac = s2:option(Value, "mac", translate("MAC-Address")) +ip = s2:option(Value, "ip", translate("IPv4-Address")) + +ipc.neighbors({ family = 4 }, function(n) + if n.mac and n.dest then + ip:value(n.dest:string()) + mac:value(n.mac, "%s (%s)" %{ n.mac, n.dest:string() }) + end +end) + +return m + diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/index.lua b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/index.lua new file mode 100644 index 0000000..9ecee1a --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/index.lua @@ -0,0 +1,4 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +return Template("mini/index") diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/luci.lua b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/luci.lua new file mode 100644 index 0000000..a1ef0fe --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/luci.lua @@ -0,0 +1,37 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require "luci.config" +local fs = require "nixio.fs" + +m = Map("luci", translate("Web UI"), translate("Here you can customize the settings and the functionality of LuCI.")) + +-- force reload of global luci config namespace to reflect the changes +function m.commit_handler(self) + package.loaded["luci.config"] = nil + require "luci.config" +end + + +c = m:section(NamedSection, "main", "core", translate("General")) + +l = c:option(ListValue, "lang", translate("Language")) +l:value("auto") + +local i18ndir = luci.i18n.i18ndir .. "base." +for k, v in luci.util.kspairs(luci.config.languages) do + local file = i18ndir .. k:gsub("_", "-") + if k:sub(1, 1) ~= "." and fs.access(file .. ".lmo") then + l:value(k, v) + end +end + +t = c:option(ListValue, "mediaurlbase", translate("Design")) +for k, v in pairs(luci.config.themes) do + if k:sub(1, 1) ~= "." then + t:value(v, k) + end +end + +return m diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/network.lua b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/network.lua new file mode 100644 index 0000000..c895430 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/network.lua @@ -0,0 +1,194 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local wa = require "luci.tools.webadmin" +local sys = require "luci.sys" +local fs = require "nixio.fs" + +local has_pptp = fs.access("/usr/sbin/pptp") +local has_pppoe = fs.glob("/usr/lib/pppd/*/rp-pppoe.so")() + +local network = luci.model.uci.cursor_state():get_all("network") + +local netstat = sys.net.deviceinfo() +local ifaces = {} + +for k, v in pairs(network) do + if v[".type"] == "interface" and k ~= "loopback" then + table.insert(ifaces, v) + end +end + +m = Map("network", translate("Network")) +s = m:section(Table, ifaces, translate("Status")) +s.parse = function() end + +s:option(DummyValue, ".name", translate("Network")) + +hwaddr = s:option(DummyValue, "_hwaddr", + translate("MAC-Address"), translate("Hardware Address")) +function hwaddr.cfgvalue(self, section) + local ix = self.map:get(section, "ifname") or "" + local mac = fs.readfile("/sys/class/net/" .. ix .. "/address") + + if not mac then + mac = luci.util.exec("ifconfig " .. ix) + mac = mac and mac:match(" ([A-F0-9:]+)%s*\n") + end + + if mac and #mac > 0 then + return mac:upper() + end + + return "?" +end + + +s:option(DummyValue, "ipaddr", translate("IPv4-Address")) + +s:option(DummyValue, "netmask", translate("IPv4-Netmask")) + + +txrx = s:option(DummyValue, "_txrx", + translate("Traffic"), translate("transmitted / received")) + +function txrx.cfgvalue(self, section) + local ix = self.map:get(section, "ifname") + + local rx = netstat and netstat[ix] and netstat[ix][1] + rx = rx and wa.byte_format(tonumber(rx)) or "-" + + local tx = netstat and netstat[ix] and netstat[ix][9] + tx = tx and wa.byte_format(tonumber(tx)) or "-" + + return string.format("%s / %s", tx, rx) +end + +errors = s:option(DummyValue, "_err", + translate("Errors"), translate("TX / RX")) + +function errors.cfgvalue(self, section) + local ix = self.map:get(section, "ifname") + + local rx = netstat and netstat[ix] and netstat[ix][3] + local tx = netstat and netstat[ix] and netstat[ix][11] + + rx = rx and tostring(rx) or "-" + tx = tx and tostring(tx) or "-" + + return string.format("%s / %s", tx, rx) +end + + + +s = m:section(NamedSection, "lan", "interface", translate("Local Network")) +s.addremove = false +s:option(Value, "ipaddr", translate("IPv4-Address")) + +nm = s:option(Value, "netmask", translate("IPv4-Netmask")) +nm:value("255.255.255.0") +nm:value("255.255.0.0") +nm:value("255.0.0.0") + +gw = s:option(Value, "gateway", translate("IPv4-Gateway") .. translate(" (optional)")) +gw.rmempty = true +dns = s:option(Value, "dns", translate("DNS-Server") .. translate(" (optional)")) +dns.rmempty = true + + +s = m:section(NamedSection, "wan", "interface", translate("Internet Connection")) +s.addremove = false +p = s:option(ListValue, "proto", translate("Protocol")) +p.override_values = true +p:value("none", "disabled") +p:value("static", translate("manual")) +p:value("dhcp", translate("automatic")) +if has_pppoe then p:value("pppoe", "PPPoE") end +if has_pptp then p:value("pptp", "PPTP") end + +function p.write(self, section, value) + -- Always set defaultroute to PPP and use remote dns + -- Overwrite a bad variable behaviour in OpenWrt + if value == "pptp" or value == "pppoe" then + self.map:set(section, "peerdns", "1") + self.map:set(section, "defaultroute", "1") + end + return ListValue.write(self, section, value) +end + +if not ( has_pppoe and has_pptp ) then + p.description = translate("You need to install \"ppp-mod-pppoe\" for PPPoE or \"pptp\" for PPtP support") +end + + +ip = s:option(Value, "ipaddr", translate("IPv4-Address")) +ip:depends("proto", "static") + +nm = s:option(Value, "netmask", translate("IPv4-Netmask")) +nm:depends("proto", "static") + +gw = s:option(Value, "gateway", translate("IPv4-Gateway")) +gw:depends("proto", "static") +gw.rmempty = true + +dns = s:option(Value, "dns", translate("DNS-Server")) +dns:depends("proto", "static") +dns.rmempty = true + +usr = s:option(Value, "username", translate("Username")) +usr:depends("proto", "pppoe") +usr:depends("proto", "pptp") + +pwd = s:option(Value, "password", translate("Password")) +pwd.password = true +pwd:depends("proto", "pppoe") +pwd:depends("proto", "pptp") + + +-- Allow user to set MSS correction here if the UCI firewall is installed +-- This cures some cancer for providers with pre-war routers +if fs.access("/etc/config/firewall") then + mssfix = s:option(Flag, "_mssfix", + translate("Clamp Segment Size"), translate("Fixes problems with unreachable websites, submitting forms or other unexpected behaviour for some ISPs.")) + mssfix.rmempty = false + + function mssfix.cfgvalue(self) + local value + m.uci:foreach("firewall", "forwarding", function(s) + if s.src == "lan" and s.dest == "wan" then + value = s.mtu_fix + end + end) + return value + end + + function mssfix.write(self, section, value) + m.uci:foreach("firewall", "forwarding", function(s) + if s.src == "lan" and s.dest == "wan" then + m.uci:set("firewall", s[".name"], "mtu_fix", value) + m:chain("firewall") + end + end) + end +end + +kea = s:option(Flag, "keepalive", translate("automatically reconnect")) +kea:depends("proto", "pppoe") +kea:depends("proto", "pptp") +kea.rmempty = true +kea.enabled = "10" + + +cod = s:option(Value, "demand", translate("disconnect when idle for"), "s") +cod:depends("proto", "pppoe") +cod:depends("proto", "pptp") +cod.rmempty = true + +srv = s:option(Value, "server", translate("PPTP-Server")) +srv:depends("proto", "pptp") +srv.rmempty = true + + + +return m diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/passwd.lua b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/passwd.lua new file mode 100644 index 0000000..39123a7 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/passwd.lua @@ -0,0 +1,35 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +f = SimpleForm("password", translate("Admin Password"), translate("Change the password of the system administrator (User root)")) + +pw1 = f:field(Value, "pw1", translate("Password")) +pw1.password = true +pw1.rmempty = false + +pw2 = f:field(Value, "pw2", translate("Confirmation")) +pw2.password = true +pw2.rmempty = false + +function pw2.validate(self, value, section) + return pw1:formvalue(section) == value and value +end + +function f.handle(self, state, data) + if state == FORM_VALID then + local stat = luci.sys.user.setpasswd("root", data.pw1) == 0 + + if stat then + f.message = translate("Password successfully changed") + else + f.errmessage = translate("Unknown Error") + end + + data.pw1 = nil + data.pw2 = nil + end + return true +end + +return f \ No newline at end of file diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/system.lua b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/system.lua new file mode 100644 index 0000000..b621ad0 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/system.lua @@ -0,0 +1,76 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +require("luci.sys") +require("luci.sys.zoneinfo") +require("luci.tools.webadmin") +require("luci.util") + + +m = Map("system", translate("System"), translate("Here you can configure the basic aspects of your device like its hostname or the timezone.")) + +s = m:section(TypedSection, "system", "") +s.anonymous = true +s.addremove = false + + +local sysinfo = luci.util.ubus("system", "info") or { } +local boardinfo = luci.util.ubus("system", "board") or { } + +local uptime = sysinfo.uptime or 0 +local loads = sysinfo.load or { 0, 0, 0 } +local memory = sysinfo.memory or { + total = 0, + free = 0, + buffered = 0, + shared = 0 +} + +s:option(DummyValue, "_system", translate("Model")).value = boardinfo.model or "?" +s:option(DummyValue, "_cpu", translate("System")).value = boardinfo.system or "?" + +s:option(DummyValue, "_la", translate("Load")).value = + string.format("%.2f, %.2f, %.2f", loads[1] / 65535.0, loads[2] / 65535.0, loads[3] / 65535.0) + +s:option(DummyValue, "_memtotal", translate("Memory")).value = + string.format("%.2f MB (%.0f%% %s, %.0f%% %s)", + tonumber(memory.total) / 1024 / 1024, + 100 * memory.buffered / memory.total, + tostring(translate("buffered")), + 100 * memory.free / memory.total, + tostring(translate("free")) +) + +s:option(DummyValue, "_systime", translate("Local Time")).value = + os.date("%c") + +s:option(DummyValue, "_uptime", translate("Uptime")).value = + luci.tools.webadmin.date_format(tonumber(uptime)) + +hn = s:option(Value, "hostname", translate("Hostname")) + +function hn.write(self, section, value) + Value.write(self, section, value) + luci.sys.hostname(value) +end + + +tz = s:option(ListValue, "zonename", translate("Timezone")) +tz:value("UTC") + +for i, zone in ipairs(luci.sys.zoneinfo.TZ) do + tz:value(zone[1]) +end + +function tz.write(self, section, value) + local function lookup_zone(title) + for _, zone in ipairs(luci.sys.zoneinfo.TZ) do + if zone[1] == title then return zone[2] end + end + end + + AbstractValue.write(self, section, value) + self.map.uci:set("system", section, "timezone", lookup_zone(value) or "GMT0") +end + +return m diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/wifi.lua b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/wifi.lua new file mode 100644 index 0000000..19952cd --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/model/cbi/mini/wifi.lua @@ -0,0 +1,362 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +-- Data init -- + +local fs = require "nixio.fs" +local sys = require "luci.sys" +local uci = require "luci.model.uci".cursor() + +if not uci:get("network", "wan") then + uci:section("network", "interface", "wan", {proto="none", ifname=" "}) + uci:save("network") + uci:commit("network") +end + +local wlcursor = luci.model.uci.cursor_state() +local wireless = wlcursor:get_all("wireless") +local wifidevs = {} +local ifaces = {} + +for k, v in pairs(wireless) do + if v[".type"] == "wifi-iface" then + table.insert(ifaces, v) + end +end + +wlcursor:foreach("wireless", "wifi-device", + function(section) + table.insert(wifidevs, section[".name"]) + end) + + +-- Main Map -- + +m = Map("wireless", translate("Wireless"), translate("Here you can configure installed wifi devices.")) +m:chain("network") + + +-- Status Table -- +s = m:section(Table, ifaces, translate("Networks")) + +link = s:option(DummyValue, "_link", translate("Link")) +function link.cfgvalue(self, section) + local ifname = self.map:get(section, "ifname") + local iwinfo = sys.wifi.getiwinfo(ifname) + return iwinfo and "%d/%d" %{ iwinfo.quality, iwinfo.quality_max } or "-" +end + +essid = s:option(DummyValue, "ssid", "ESSID") + +bssid = s:option(DummyValue, "_bsiid", "BSSID") +function bssid.cfgvalue(self, section) + local ifname = self.map:get(section, "ifname") + local iwinfo = sys.wifi.getiwinfo(ifname) + return iwinfo and iwinfo.bssid or "-" +end + +channel = s:option(DummyValue, "channel", translate("Channel")) +function channel.cfgvalue(self, section) + return wireless[self.map:get(section, "device")].channel +end + +protocol = s:option(DummyValue, "_mode", translate("Protocol")) +function protocol.cfgvalue(self, section) + local mode = wireless[self.map:get(section, "device")].mode + return mode and "802." .. mode +end + +mode = s:option(DummyValue, "mode", translate("Mode")) +encryption = s:option(DummyValue, "encryption", translate("Encr.")) + +power = s:option(DummyValue, "_power", translate("Power")) +function power.cfgvalue(self, section) + local ifname = self.map:get(section, "ifname") + local iwinfo = sys.wifi.getiwinfo(ifname) + return iwinfo and "%d dBm" % iwinfo.txpower or "-" +end + +scan = s:option(Button, "_scan", translate("Scan")) +scan.inputstyle = "find" + +function scan.cfgvalue(self, section) + return self.map:get(section, "ifname") or false +end + +-- WLAN-Scan-Table -- + +t2 = m:section(Table, {}, translate("WLAN-Scan"), translate("Wifi networks in your local environment")) + +function scan.write(self, section) + m.autoapply = false + t2.render = t2._render + local ifname = self.map:get(section, "ifname") + local iwinfo = sys.wifi.getiwinfo(ifname) + if iwinfo then + local _, cell + for _, cell in ipairs(iwinfo.scanlist) do + t2.data[#t2.data+1] = { + Quality = "%d/%d" %{ cell.quality, cell.quality_max }, + ESSID = cell.ssid, + Address = cell.bssid, + Mode = cell.mode, + ["Encryption key"] = cell.encryption.enabled and "On" or "Off", + ["Signal level"] = "%d dBm" % cell.signal, + ["Noise level"] = "%d dBm" % iwinfo.noise + } + end + end +end + +t2._render = t2.render +t2.render = function() end + +t2:option(DummyValue, "Quality", translate("Link")) +essid = t2:option(DummyValue, "ESSID", "ESSID") +function essid.cfgvalue(self, section) + return self.map:get(section, "ESSID") +end + +t2:option(DummyValue, "Address", "BSSID") +t2:option(DummyValue, "Mode", translate("Mode")) +chan = t2:option(DummyValue, "channel", translate("Channel")) +function chan.cfgvalue(self, section) + return self.map:get(section, "Channel") + or self.map:get(section, "Frequency") + or "-" +end + +t2:option(DummyValue, "Encryption key", translate("Encr.")) + +t2:option(DummyValue, "Signal level", translate("Signal")) + +t2:option(DummyValue, "Noise level", translate("Noise")) + + + +if #wifidevs < 1 then + return m +end + +-- Config Section -- + +s = m:section(NamedSection, wifidevs[1], "wifi-device", translate("Devices")) +s.addremove = false + +en = s:option(Flag, "disabled", translate("enable")) +en.rmempty = false +en.enabled = "0" +en.disabled = "1" + +function en.cfgvalue(self, section) + return Flag.cfgvalue(self, section) or "0" +end + + +local hwtype = m:get(wifidevs[1], "type") + +if hwtype == "atheros" then + mode = s:option(ListValue, "hwmode", translate("Mode")) + mode.override_values = true + mode:value("", "auto") + mode:value("11b", "802.11b") + mode:value("11g", "802.11g") + mode:value("11a", "802.11a") + mode:value("11bg", "802.11b+g") + mode.rmempty = true +end + + +ch = s:option(Value, "channel", translate("Channel")) +for i=1, 14 do + ch:value(i, i .. " (2.4 GHz)") +end + + +s = m:section(TypedSection, "wifi-iface", translate("Local Network")) +s.anonymous = true +s.addremove = false + +s:option(Value, "ssid", translate("Network Name (ESSID)")) + +bssid = s:option(Value, "bssid", translate("BSSID")) + +local devs = {} +luci.model.uci.cursor():foreach("wireless", "wifi-device", + function (section) + table.insert(devs, section[".name"]) + end) + +if #devs > 1 then + device = s:option(DummyValue, "device", translate("Device")) +else + s.defaults.device = devs[1] +end + +mode = s:option(ListValue, "mode", translate("Mode")) +mode.override_values = true +mode:value("ap", translate("Provide (Access Point)")) +mode:value("adhoc", translate("Independent (Ad-Hoc)")) +mode:value("sta", translate("Join (Client)")) + +function mode.write(self, section, value) + if value == "sta" then + local oldif = m.uci:get("network", "wan", "ifname") + if oldif and oldif ~= " " then + m.uci:set("network", "wan", "_ifname", oldif) + end + m.uci:set("network", "wan", "ifname", " ") + + self.map:set(section, "network", "wan") + else + if m.uci:get("network", "wan", "_ifname") then + m.uci:set("network", "wan", "ifname", m.uci:get("network", "wan", "_ifname")) + end + self.map:set(section, "network", "lan") + end + + return ListValue.write(self, section, value) +end + +encr = s:option(ListValue, "encryption", translate("Encryption")) +encr.override_values = true +encr:value("none", "No Encryption") +encr:value("wep", "WEP") + +if hwtype == "atheros" or hwtype == "mac80211" then + local supplicant = fs.access("/usr/sbin/wpa_supplicant") + local hostapd = fs.access("/usr/sbin/hostapd") + + if hostapd and supplicant then + encr:value("psk", "WPA-PSK") + encr:value("psk2", "WPA2-PSK") + encr:value("psk-mixed", "WPA-PSK/WPA2-PSK Mixed Mode") + encr:value("wpa", "WPA-Radius", {mode="ap"}, {mode="sta"}) + encr:value("wpa2", "WPA2-Radius", {mode="ap"}, {mode="sta"}) + elseif hostapd and not supplicant then + encr:value("psk", "WPA-PSK", {mode="ap"}, {mode="adhoc"}) + encr:value("psk2", "WPA2-PSK", {mode="ap"}, {mode="adhoc"}) + encr:value("psk-mixed", "WPA-PSK/WPA2-PSK Mixed Mode", {mode="ap"}, {mode="adhoc"}) + encr:value("wpa", "WPA-Radius", {mode="ap"}) + encr:value("wpa2", "WPA2-Radius", {mode="ap"}) + encr.description = translate( + "WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " .. + "and ad-hoc mode) to be installed." + ) + elseif not hostapd and supplicant then + encr:value("psk", "WPA-PSK", {mode="sta"}) + encr:value("psk2", "WPA2-PSK", {mode="sta"}) + encr:value("psk-mixed", "WPA-PSK/WPA2-PSK Mixed Mode", {mode="sta"}) + encr:value("wpa", "WPA-EAP", {mode="sta"}) + encr:value("wpa2", "WPA2-EAP", {mode="sta"}) + encr.description = translate( + "WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " .. + "and ad-hoc mode) to be installed." + ) + else + encr.description = translate( + "WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " .. + "and ad-hoc mode) to be installed." + ) + end +elseif hwtype == "broadcom" then + encr:value("psk", "WPA-PSK") + encr:value("psk2", "WPA2-PSK") + encr:value("psk+psk2", "WPA-PSK/WPA2-PSK Mixed Mode") +end + +key = s:option(Value, "key", translate("Key")) +key:depends("encryption", "wep") +key:depends("encryption", "psk") +key:depends("encryption", "psk2") +key:depends("encryption", "psk+psk2") +key:depends("encryption", "psk-mixed") +key:depends({mode="ap", encryption="wpa"}) +key:depends({mode="ap", encryption="wpa2"}) +key.rmempty = true +key.password = true + +server = s:option(Value, "server", translate("Radius-Server")) +server:depends({mode="ap", encryption="wpa"}) +server:depends({mode="ap", encryption="wpa2"}) +server.rmempty = true + +port = s:option(Value, "port", translate("Radius-Port")) +port:depends({mode="ap", encryption="wpa"}) +port:depends({mode="ap", encryption="wpa2"}) +port.rmempty = true + + +if hwtype == "atheros" or hwtype == "mac80211" then + nasid = s:option(Value, "nasid", translate("NAS ID")) + nasid:depends({mode="ap", encryption="wpa"}) + nasid:depends({mode="ap", encryption="wpa2"}) + nasid.rmempty = true + + eaptype = s:option(ListValue, "eap_type", translate("EAP-Method")) + eaptype:value("TLS") + eaptype:value("TTLS") + eaptype:value("PEAP") + eaptype:depends({mode="sta", encryption="wpa"}) + eaptype:depends({mode="sta", encryption="wpa2"}) + + cacert = s:option(FileUpload, "ca_cert", translate("Path to CA-Certificate")) + cacert:depends({mode="sta", encryption="wpa"}) + cacert:depends({mode="sta", encryption="wpa2"}) + + privkey = s:option(FileUpload, "priv_key", translate("Path to Private Key")) + privkey:depends({mode="sta", eap_type="TLS", encryption="wpa2"}) + privkey:depends({mode="sta", eap_type="TLS", encryption="wpa"}) + + privkeypwd = s:option(Value, "priv_key_pwd", translate("Password of Private Key")) + privkeypwd:depends({mode="sta", eap_type="TLS", encryption="wpa2"}) + privkeypwd:depends({mode="sta", eap_type="TLS", encryption="wpa"}) + + + auth = s:option(Value, "auth", translate("Authentication")) + auth:value("PAP") + auth:value("CHAP") + auth:value("MSCHAP") + auth:value("MSCHAPV2") + auth:depends({mode="sta", eap_type="PEAP", encryption="wpa2"}) + auth:depends({mode="sta", eap_type="PEAP", encryption="wpa"}) + auth:depends({mode="sta", eap_type="TTLS", encryption="wpa2"}) + auth:depends({mode="sta", eap_type="TTLS", encryption="wpa"}) + + + identity = s:option(Value, "identity", translate("Identity")) + identity:depends({mode="sta", eap_type="PEAP", encryption="wpa2"}) + identity:depends({mode="sta", eap_type="PEAP", encryption="wpa"}) + identity:depends({mode="sta", eap_type="TTLS", encryption="wpa2"}) + identity:depends({mode="sta", eap_type="TTLS", encryption="wpa"}) + + password = s:option(Value, "password", translate("Password")) + password:depends({mode="sta", eap_type="PEAP", encryption="wpa2"}) + password:depends({mode="sta", eap_type="PEAP", encryption="wpa"}) + password:depends({mode="sta", eap_type="TTLS", encryption="wpa2"}) + password:depends({mode="sta", eap_type="TTLS", encryption="wpa"}) +end + + +if hwtype == "atheros" or hwtype == "broadcom" then + iso = s:option(Flag, "isolate", translate("AP-Isolation"), translate("Prevents Client to Client communication")) + iso.rmempty = true + iso:depends("mode", "ap") + + hide = s:option(Flag, "hidden", translate("Hide ESSID")) + hide.rmempty = true + hide:depends("mode", "ap") +end + +if hwtype == "mac80211" or hwtype == "atheros" then + bssid:depends({mode="adhoc"}) +end + +if hwtype == "broadcom" then + bssid:depends({mode="wds"}) + bssid:depends({mode="adhoc"}) +end + + +return m diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm b/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm new file mode 100644 index 0000000..d33a2ca --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm @@ -0,0 +1,13 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

<%:System%>

+
+

<% if msg then %><%=msg%><% else %><%:Changes applied.%><% end %>

+

<%:Please wait: Device rebooting...%>

+ +<%+footer%> \ No newline at end of file diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm b/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm new file mode 100644 index 0000000..efc6aa7 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm @@ -0,0 +1,32 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

<%:System%>

+

<%:Backup / Restore%>

+

<%:Here you can backup and restore your configuration and - if possible - reset this device to the default settings.%>

+
+
+ +
+ +
+ +
+
<%:Backup Archive%>:
+
+ +
+
+ +
+
+<%+footer%> diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/index.htm b/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/index.htm new file mode 100644 index 0000000..621e3cb --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/index.htm @@ -0,0 +1,13 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +

<%:Hello!%>

+

<%_This is the administration area of LuCI.%>

+

<%_LuCI is a free, flexible, and user friendly graphical interface for configuring OpenWrt.%>
+<%:On the following pages you can adjust all important settings of this device.%>

+

<%:As we always want to improve this interface we are looking forward to your feedback and suggestions.%>

+

<%:And now have fun with your device!%>

+

<%_The LuCI Team%>

diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm b/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm new file mode 100644 index 0000000..f70e7c9 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm @@ -0,0 +1,25 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

<%:System%>

+

<%:Reboot%>

+

<%:Reboots the operating system of your device%>

+<%- +local c = require("luci.model.uci").cursor():changes() +if c and next(c) then +-%> +

<%:Warning: There are unsaved changes that will be lost while rebooting!%>

+<%- +end +if not reboot then +-%> +

<%:Perform reboot%>

+<%- else -%> +

<%:Please wait: Device rebooting...%>

+ +<%- end -%> +<%+footer%> \ No newline at end of file diff --git a/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm b/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm new file mode 100644 index 0000000..ef3e2e8 --- /dev/null +++ b/feeds/luci/modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm @@ -0,0 +1,96 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2009 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:System%>

+

<%:Flash Firmware%>

+ +<% if step == 1 then %> + <% if supported then %> +
+

+ <%:Upload a sysupgrade-compatible image file to reflash the device.%> + <% if bad_image then %> +

+

<%:The uploaded image file does not + contain a supported format. Make sure that you choose the generic + image format for your platform. %>
+ <% end %> +

+
+ <%:Firmware image%>:
+ + +
+
+ <% if keepavail then -%> + + <%:Keep configuration files%> + <% end -%> + +
+ +
+
+ <% else %> +
<%_ Sorry. + A system upgrade is not supported on this platform.
+ You need to manually flash your device. %>
+ <% end %> +<% elseif step == 2 then %> +

+ <%_ The flash image was uploaded. + Below is the checksum and file size listed, + compare them with the original file to ensure data integrity.
+ Click "Proceed" below to start the flash procedure. %> + + <% if flashsize > 0 and filesize > flashsize then %> +

+

<%:It appears that you are trying to + flash an image that does not fit into the flash memory, please verify + the image file! %>
+ <% end %> + +
+
    +
  • <%:Checksum%>: <%=checksum%>
  • +
  • <%:Size%>: <% + local w = require "luci.tools.webadmin" + write(w.byte_format(filesize)) + + if flashsize > 0 then + write(luci.i18n.translatef( + " (%s available)", + w.byte_format(flashsize) + )) + end + %>
  • +
+

+
+
+ + " /> + +
+
+ + " /> + +
+
+<% elseif step == 3 then %> +

<%_ The system is flashing now.
+ DO NOT POWER OFF THE DEVICE!
+ Wait a few minutes before you try to reconnect. + It might be necessary to renew the address of your computer to reach the device + again, depending on your settings. %>

+ + +<% end %> +<%+footer%> + diff --git a/feeds/luci/modules/luci-mod-failsafe/Makefile b/feeds/luci/modules/luci-mod-failsafe/Makefile new file mode 100644 index 0000000..8afc614 --- /dev/null +++ b/feeds/luci/modules/luci-mod-failsafe/Makefile @@ -0,0 +1,15 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Fail-Safe - Fail-Safe sysupgrade module +LUCI_DEPENDS:=+luci-base + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/feeds/luci/modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua b/feeds/luci/modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua new file mode 100644 index 0000000..60caadb --- /dev/null +++ b/feeds/luci/modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua @@ -0,0 +1,202 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008-2011 Jo-Philipp Wich +-- Copyright 2012 Daniel Golle +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.failsafe.failsafe", package.seeall) + +function index() + local root = node() + if not root.target then + root.target = alias("failsafe") + root.index = true + end + + page = node() + page.lock = true + page.target = alias("failsafe") + page.subindex = true + page.index = false + + page = node("failsafe") + page.title = _("Fail-safe") + page.target = alias("failsafe", "flashops") + page.order = 5 + page.setuser = "root" + page.setgroup = "root" + page.index = true + + entry({"failsafe", "flashops"}, call("action_flashops"), _("Flash Firmware"), 70).index = true + entry({"failsafe", "reboot"}, call("action_reboot"), _("Reboot"), 90) +end + +function action_flashops() + local sys = require "luci.sys" + local fs = require "nixio.fs" + + local upgrade_avail = fs.access("/lib/upgrade/platform.sh") + local reset_avail = os.execute([[grep '"rootfs_data"' /proc/mtd >/dev/null 2>&1]]) == 0 + + local image_tmp = "/tmp/firmware.img" + + local function image_supported() + -- XXX: yay... + return ( 0 == os.execute( + ". /lib/functions.sh; " .. + "include /lib/upgrade; " .. + "platform_check_image %q >/dev/null" + % image_tmp + ) ) + end + + local function image_checksum() + return (luci.sys.exec("md5sum %q" % image_tmp):match("^([^%s]+)")) + end + + local function storage_size() + local size = 0 + if fs.access("/proc/mtd") then + for l in io.lines("/proc/mtd") do + local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"') + if n == "linux" or n == "firmware" then + size = tonumber(s, 16) + break + end + end + elseif fs.access("/proc/partitions") then + for l in io.lines("/proc/partitions") do + local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)') + if b and n and not n:match('[0-9]') then + size = tonumber(b) * 1024 + break + end + end + end + return size + end + + + local fp + luci.http.setfilehandler( + function(meta, chunk, eof) + if not fp then + if meta and meta.name == "image" then + fp = io.open(image_tmp, "w") + end + end + if fp then + if chunk then + fp:write(chunk) + end + if eof then + fp:close() + end + end + end + ) + + if luci.http.formvalue("image") or luci.http.formvalue("step") then + -- + -- Initiate firmware flash + -- + local step = tonumber(luci.http.formvalue("step") or 1) + if step == 1 then + if image_supported() then + luci.template.render("failsafe/upgrade", { + checksum = image_checksum(), + storage = storage_size(), + size = (fs.stat(image_tmp, "size") or 0), + keep = false + }) + else + fs.unlink(image_tmp) + luci.template.render("failsafe/flashops", { + reset_avail = reset_avail, + upgrade_avail = upgrade_avail, + image_invalid = true + }) + end + -- + -- Start sysupgrade flash + -- + elseif step == 2 then + local keep = (luci.http.formvalue("keep") == "1") and "" or "-n" + luci.template.render("failsafe/applyreboot", { + title = luci.i18n.translate("Flashing..."), + msg = luci.i18n.translate("The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."), + addr = (#keep > 0) and "192.168.1.1" or nil + }) + fork_exec("killall dropbear uhttpd; sleep 1; /sbin/sysupgrade %s %q" %{ keep, image_tmp }) + end + else + -- + -- Overview + -- + luci.template.render("failsafe/flashops", { + reset_avail = reset_avail, + upgrade_avail = upgrade_avail + }) + end +end + +function action_reboot() + local reboot = luci.http.formvalue("reboot") + luci.template.render("failsafe/reboot", {reboot=reboot}) + if reboot then + luci.sys.reboot() + end +end + +function fork_exec(command) + local pid = nixio.fork() + if pid > 0 then + return + elseif pid == 0 then + -- change to root dir + nixio.chdir("/") + + -- patch stdin, out, err to /dev/null + local null = nixio.open("/dev/null", "w+") + if null then + nixio.dup(null, nixio.stderr) + nixio.dup(null, nixio.stdout) + nixio.dup(null, nixio.stdin) + if null:fileno() > 2 then + null:close() + end + end + + -- replace with target command + nixio.exec("/bin/sh", "-c", command) + end +end + +function ltn12_popen(command) + + local fdi, fdo = nixio.pipe() + local pid = nixio.fork() + + if pid > 0 then + fdo:close() + local close + return function() + local buffer = fdi:read(2048) + local wpid, stat = nixio.waitpid(pid, "nohang") + if not close and wpid and stat == "exited" then + close = true + end + + if buffer and #buffer > 0 then + return buffer + elseif close then + fdi:close() + return nil + end + end + elseif pid == 0 then + nixio.dup(fdo, nixio.stdout) + fdi:close() + fdo:close() + nixio.exec("/bin/sh", "-c", command) + end +end diff --git a/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm b/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm new file mode 100644 index 0000000..12c138c --- /dev/null +++ b/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm @@ -0,0 +1,41 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + + + + <%=luci.sys.hostname()%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %> + + + + + +
+
+

<%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %>

+
+

+ <% if msg then %><%=msg%><% else %><%:Changes applied.%><% end %> +

+

+ <%:Loading%> + <%:Waiting for changes to be applied...%> +

+
+
+
+ + diff --git a/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm b/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm new file mode 100644 index 0000000..d6e9ad7 --- /dev/null +++ b/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm @@ -0,0 +1,34 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2012 Daniel Golle + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Flash operations%>

+
+ <%:Flash new firmware image%> + <% if upgrade_avail then %> +
+
<%:Upload a sysupgrade-compatible image. %>
+
+
+ +
+ + +
+
+
+ <% if image_invalid then %> +
<%:The uploaded image file does not contain a supported format. Make sure that you choose the generic image format for your platform. %>
+ <% end %> +
+ <% else %> +
<%:Sorry, there is no sysupgrade support present; a new firmware image must be flashed manually. Please refer to the wiki for device specific install instructions.%>
+ <% end %> +
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm b/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm new file mode 100644 index 0000000..cbbe13b --- /dev/null +++ b/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm @@ -0,0 +1,18 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2012 Daniel Golle + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +

<%:System%>

+

<%:Reboot%>

+

<%:Reboots the operating system of your device%>

+<%- if not reboot then -%> +

<%:Perform reboot%>

+<%- else -%> +

<%:Please wait: Device rebooting...%>

+ +<%- end -%> +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm b/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm new file mode 100644 index 0000000..3be9ae1 --- /dev/null +++ b/feeds/luci/modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm @@ -0,0 +1,53 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2009 Jo-Philipp Wich + Copyright 2012 Daniel Golle + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Flash Firmware%> - <%:Verify%>

+

+ <%_ The flash image was uploaded. + Below is the checksum and file size listed, + compare them with the original file to ensure data integrity.
+ Click "Proceed" below to start the flash procedure. %> + + <% if storage > 0 and size > storage then %> +

+

<%:It appears that you are trying to + flash an image that does not fit into the flash memory, please verify + the image file! %>
+ <% end %> + +

+ +
+
    +
  • <%:Checksum%>: <%=checksum%>
  • +
  • <%:Size%>: <% + local w = require "luci.tools.webadmin" + write(w.byte_format(size)) + + if storage > 0 then + write(luci.i18n.translatef( + " (%s available)", + w.byte_format(storage) + )) + end + %>
  • +
+
+ +
+
+ +
+
+ + +
+
+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-freifunk-community/Makefile b/feeds/luci/modules/luci-mod-freifunk-community/Makefile new file mode 100644 index 0000000..ad6c4ce --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk-community/Makefile @@ -0,0 +1,19 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Freifunk Community Meta-Package +LUCI_DEPENDS:= \ + +iptables-mod-nat-extra +iptables-mod-ipopt +luci-app-splash \ + +olsrd +olsrd-mod-dyn-gw-plain +olsrd-mod-jsoninfo +olsrd-mod-nameservice \ + +olsrd-mod-watchdog +kmod-tun +ip +freifunk-watchdog +luci-app-olsr \ + +luci-app-olsr-services +freifunk-gwcheck +freifunk-mapupdate + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/feeds/luci/modules/luci-mod-freifunk/Makefile b/feeds/luci/modules/luci-mod-freifunk/Makefile new file mode 100644 index 0000000..550db1d --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/Makefile @@ -0,0 +1,15 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI Freifunk module +LUCI_DEPENDS:=+luci-mod-admin-full +luci-lib-json +freifunk-firewall +freifunk-common + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/flashing.html b/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/flashing.html new file mode 100644 index 0000000..43e5123 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/flashing.html @@ -0,0 +1,84 @@ + + + + + + LuCI - System Upgrade + + + + + + + +
+

Performing Upgrade

+ +

+ The System is flashing now. The procedure can take up to 25 minutes, + please be patient and wait until this page reloads itself. + +
+ + Remaining time (estimated): unknown +

+
+ + + diff --git a/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/resources/OSMLatLon.htm b/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/resources/OSMLatLon.htm new file mode 100644 index 0000000..18be30b --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/resources/OSMLatLon.htm @@ -0,0 +1,20 @@ + + + + OpenStreetMap + + + + + +
+
+ Map by openstreetmap.org, License CC-BY-SA +      + + Latitude: + Longitude: + +
+ + diff --git a/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/resources/flashing.gif b/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/resources/flashing.gif new file mode 100644 index 0000000000000000000000000000000000000000..e207fc56a1fcf035eba568f4ba5396f6dcd030fc GIT binary patch literal 4261 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 J1u-yK0|2#tP22zg literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/resources/freifunk-map/node.gif b/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/resources/freifunk-map/node.gif new file mode 100644 index 0000000000000000000000000000000000000000..f64ab162a451f8eb04b6b6664694b7b907f511cf GIT binary patch literal 209 zcmZ?wbhEHblwgoxn8?JykoF$}7#J87|8x7fh6Fo12DlpO889<~gnqJcrZ6xu=m6P3 z4H66tOfpmYSDt>$zj)4;Tiu^o8K20d%vnD5S?97>r?&YrV$-02q#^T$MT30IJcgEO z>}4^>w!Py%{^^exNE0iXEt&{TzniX^HT-9tTF#*4D)o$G%JV0UuXpUd(fj<@x$pmi H7#OSpv*u0Q literal 0 HcmV?d00001 diff --git a/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/resources/osm.js b/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/resources/osm.js new file mode 100644 index 0000000..cae0cd6 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/htdocs/luci-static/resources/osm.js @@ -0,0 +1,130 @@ +var map; +var layer_mapnik; +var layer_tah; +var layer_markers; +var PI = Math.PI; +var latfield = ''; +var lonfield = ''; +var latfield_id=''; +var lonfield_id=''; +var centerlon = 10; +var centerlat = 52; +var zoom = 6; + +function lon2merc(lon) { + return 20037508.34 * lon / 180; +} + +function lat2merc(lat) { + lat = Math.log(Math.tan( (90 + lat) * PI / 360)) / PI; + return 20037508.34 * lat; +} + +function merc2lon(lon) { + return lon*180/20037508.34; +}; + +function merc2lat(lat) { + return Math.atan(Math.exp(lat*PI/20037508.34))*360/PI-90; +}; + +OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { + defaultHandlerOptions: { + 'single': true, + 'double': false, + 'pixelTolerance': 0, + 'stopSingle': false, + 'stopDouble': false + }, + + initialize: function(options) { + this.handlerOptions = OpenLayers.Util.extend( + {}, this.defaultHandlerOptions + ); + OpenLayers.Control.prototype.initialize.apply( + this, arguments + ); + this.handler = new OpenLayers.Handler.Click( + this, { + 'click': this.trigger + }, this.handlerOptions + ); + }, + + trigger: function(e) { + var lonlat = map.getLonLatFromViewPortPx(e.xy); + lat=merc2lat(lonlat.lat); + lon=merc2lon(lonlat.lon); + if(parent.document.getElementById(latfield_id)==null){ + latfield=document.getElementById('osmlat'); + }else{ + latfield=parent.document.getElementById(latfield_id); + } + if(parent.document.getElementById(lonfield_id)==null){ + lonfield=document.getElementById('osmlon'); + }else{ + lonfield=parent.document.getElementById(lonfield_id); + } + latfield.value = lat; + lonfield.value = lon; + } +}); + +function init(){ + var field = window.name.substring(0, window.name.lastIndexOf(".")); + if(parent.document.getElementById(field+".latfield")!=null){ + latfield_id = parent.document.getElementById(field+".latfield").value; + document.getElementById('osm').style.display="none"; + } + if(parent.document.getElementById(field+".lonfield")!=null){ + lonfield_id = parent.document.getElementById(field+".lonfield").value; + } + if(parent.document.getElementById(field+".centerlat")!=null){ + centerlat =parseFloat(parent.document.getElementById(field+".centerlat").value); + } + if(parent.document.getElementById(field+".centerlon")!=null){ + centerlon = parseFloat(parent.document.getElementById(field+".centerlon").value); + } + if(parent.document.getElementById(field+".zoom")!=null){ + zoom = parseFloat(parent.document.getElementById(field+".zoom").value); + } +} + +function drawmap() { + OpenLayers.Lang.setCode('de'); + mapdiv=document.getElementById('map'); + mapdiv.style.height=window.innerHeight+"px"; + mapdiv.style.width=window.innerWidth+"px"; + map = new OpenLayers.Map('map', { + projection: new OpenLayers.Projection("EPSG:900913"), + displayProjection: new OpenLayers.Projection("EPSG:4326"), + controls: [ + new OpenLayers.Control.Navigation(), + new OpenLayers.Control.PanZoomBar()], + maxExtent: + new OpenLayers.Bounds(-20037508.34,-20037508.34, 20037508.34, 20037508.34), + numZoomLevels: 18, + maxResolution: 156543, + units: 'meters' + }); + + layer_mapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik"); + + map.addLayers([layer_mapnik]); + var y =lat2merc(centerlat); + var x =lon2merc(centerlon); + map.setCenter(new OpenLayers.LonLat(x, y), zoom); + + // Check for geolocation support + if(navigator.geolocation){ + navigator.geolocation.getCurrentPosition(function(position){ + var y =lat2merc(position.coords.latitude); + var x =lon2merc(position.coords.longitude); + map.setCenter(new OpenLayers.LonLat(x, y), '17'); + }); + } + + var click = new OpenLayers.Control.Click(); + map.addControl(click); + click.activate(); +} diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/controller/freifunk/freifunk.lua b/feeds/luci/modules/luci-mod-freifunk/luasrc/controller/freifunk/freifunk.lua new file mode 100644 index 0000000..84669dc --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/controller/freifunk/freifunk.lua @@ -0,0 +1,219 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.freifunk.freifunk", package.seeall) + +function index() + local uci = require "luci.model.uci".cursor() + local page + + -- Frontend + page = node() + page.lock = true + page.target = alias("freifunk") + page.subindex = true + page.index = false + + page = node("freifunk") + page.title = _("Freifunk") + page.target = alias("freifunk", "index") + page.order = 5 + page.setuser = "nobody" + page.setgroup = "nogroup" + page.i18n = "freifunk" + page.index = true + + page = node("freifunk", "index") + page.target = template("freifunk/index") + page.title = _("Overview") + page.order = 10 + page.indexignore = true + + page = node("freifunk", "contact") + page.target = template("freifunk/contact") + page.title = _("Contact") + page.order = 15 + + page = node("freifunk", "status") + page.target = template("freifunk/public_status") + page.title = _("Status") + page.order = 20 + page.i18n = "base" + page.setuser = false + page.setgroup = false + + entry({"freifunk", "status.json"}, call("jsonstatus")) + entry({"freifunk", "status", "zeroes"}, call("zeroes"), "Testdownload") + + if nixio.fs.access("/usr/sbin/luci-splash") then + assign({"freifunk", "status", "splash"}, {"splash", "publicstatus"}, _("Splash"), 40) + end + + page = assign({"freifunk", "olsr"}, {"admin", "status", "olsr"}, _("OLSR"), 30) + page.setuser = false + page.setgroup = false + + if nixio.fs.access("/etc/config/luci_statistics") then + assign({"freifunk", "graph"}, {"admin", "statistics", "graph"}, _("Statistics"), 40) + end + + -- backend + assign({"mini", "freifunk"}, {"admin", "freifunk"}, _("Freifunk"), 5) + entry({"admin", "freifunk"}, alias("admin", "freifunk", "index"), _("Freifunk"), 5) + + page = node("admin", "freifunk") + page.target = template("freifunk/adminindex") + page.title = _("Freifunk") + page.order = 5 + + page = node("admin", "freifunk", "basics") + page.target = cbi("freifunk/basics") + page.title = _("Basic Settings") + page.order = 5 + + page = node("admin", "freifunk", "basics", "profile") + page.target = cbi("freifunk/profile") + page.title = _("Profile") + page.order = 10 + + page = node("admin", "freifunk", "basics", "profile_expert") + page.target = cbi("freifunk/profile_expert") + page.title = _("Profile (Expert)") + page.order = 20 + + page = node("admin", "freifunk", "Index-Page") + page.target = cbi("freifunk/user_index") + page.title = _("Index Page") + page.order = 50 + + page = node("admin", "freifunk", "contact") + page.target = cbi("freifunk/contact") + page.title = _("Contact") + page.order = 15 + + entry({"freifunk", "map"}, template("freifunk-map/frame"), _("Map"), 50) + entry({"freifunk", "map", "content"}, template("freifunk-map/map"), nil, 51) + entry({"admin", "freifunk", "profile_error"}, template("freifunk/profile_error")) +end + +function zeroes() + local string = require "string" + local http = require "luci.http" + local zeroes = string.rep(string.char(0), 8192) + local cnt = 0 + local lim = 1024 * 1024 * 1024 + + http.prepare_content("application/x-many-zeroes") + + while cnt < lim do + http.write(zeroes) + cnt = cnt + #zeroes + end +end + +function jsonstatus() + local root = {} + local sys = require "luci.sys" + local uci = require "luci.model.uci" + local util = require "luci.util" + local http = require "luci.http" + local json = require "luci.json" + local ltn12 = require "luci.ltn12" + local version = require "luci.version" + local webadmin = require "luci.tools.webadmin" + + local cursor = uci.cursor_state() + + local ffzone = webadmin.firewall_find_zone("freifunk") + local ffznet = ffzone and cursor:get("firewall", ffzone, "network") + local ffwifs = ffznet and util.split(ffznet, " ") or {} + + local sysinfo = util.ubus("system", "info") or { } + local boardinfo = util.ubus("system", "board") or { } + + local loads = sysinfo.load or { 0, 0, 0 } + + local memory = sysinfo.memory or { + total = 0, + free = 0, + shared = 0, + buffered = 0 + } + + local swap = sysinfo.swap or { + total = 0, + free = 0 + } + + + root.protocol = 1 + + root.system = { + uptime = { sysinfo.uptime or 0 }, + loadavg = { loads[1] / 65535.0, loads[2] / 65535.0, loads[3] / 65535.0 }, + sysinfo = { + boardinfo.system or "?", + boardinfo.model or "?", + memory.total, + 0, -- former cached memory + memory.buffered, + memory.free, + 0, -- former bogomips + swap.total, + 0, -- former cached swap + swap.free + }, + hostname = boardinfo.hostname + } + + root.firmware = { + luciname=version.luciname, + luciversion=version.luciversion, + distname=version.distname, + distversion=version.distversion + } + + root.freifunk = {} + cursor:foreach("freifunk", "public", function(s) + root.freifunk[s[".name"]] = s + end) + + cursor:foreach("system", "system", function(s) + root.geo = { + latitude = s.latitude, + longitude = s.longitude + } + end) + + root.network = {} + root.wireless = {devices = {}, interfaces = {}, status = {}} + local wifs = root.wireless.interfaces + local netdata = luci.sys.net.deviceinfo() or {} + + for _, vif in ipairs(ffwifs) do + root.network[vif] = cursor:get_all("network", vif) + root.wireless.devices[vif] = cursor:get_all("wireless", vif) + cursor:foreach("wireless", "wifi-iface", function(s) + if s.device == vif and s.network == vif then + wifs[#wifs+1] = s + if s.ifname then + local iwinfo = luci.sys.wifi.getiwinfo(s.ifname) + if iwinfo then + root.wireless.status[s.ifname] = { } + + local _, f + for _, f in ipairs({ + "channel", "txpower", "bitrate", "signal", "noise", + "quality", "quality_max", "mode", "ssid", "bssid", "encryption", "ifname" + }) do + root.wireless.status[s.ifname][f] = iwinfo[f] + end + end + end + end + end) + end + + http.prepare_content("application/json") + ltn12.pump.all(json.Encoder(root):source(), http.write) +end diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/controller/freifunk/remote_update.lua b/feeds/luci/modules/luci-mod-freifunk/luasrc/controller/freifunk/remote_update.lua new file mode 100644 index 0000000..b317ab6 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/controller/freifunk/remote_update.lua @@ -0,0 +1,52 @@ +-- Copyright 2009 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.freifunk.remote_update", package.seeall) + +function index() + if not nixio.fs.access("/usr/sbin/remote-update") then + return + end + + entry({"admin", "system", "remote_update"}, call("act_remote_update"), + _("Freifunk Remote Update"), 90) +end + +function act_remote_update() + if luci.http.formvalue("flash") == "1" then + if luci.http.formvalue("confirm") == "1" then + local nobackup = ( luci.http.formvalue("keepcfg") ~= "1" ) + local noverify = ( luci.http.formvalue("verify") ~= "1" ) + + luci.http.redirect("/luci-static/flashing.html") + + os.execute("start-stop-daemon -S -b -x /usr/sbin/remote-update -- %s%s-s 5 -y" % { + noverify and "-v " or "", + nobackup and "-n " or "" + }) + else + luci.template.render("freifunk/remote_update", {confirm=1}) + end + else + local fd = io.popen("remote-update -c") + local update = { } + + if fd then + while true do + local ln=fd:read("*l") + + if not ln then break + elseif ln:find("Local: ") then update.locvar = ln:match("Local: (%d+)") + elseif ln:find("Remote: ") then update.remver = ln:match("Remote: (%d+)") + elseif ln == "--" then update.info = "" + elseif update.info ~= nil then + update.info = update.info .. ln .. "\n" + end + end + + fd:close() + end + + luci.template.render("freifunk/remote_update", {update=update}) + end +end diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/basics.lua b/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/basics.lua new file mode 100644 index 0000000..b08366d --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/basics.lua @@ -0,0 +1,92 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local util = require "luci.util" +local uci = require "luci.model.uci".cursor() +local profiles = "/etc/config/profile_*" + +m = Map("freifunk", translate ("Community")) +c = m:section(NamedSection, "community", "public", nil, translate("These are the basic settings for your local wireless community. These settings define the default values for the wizard and DO NOT affect the actual configuration of the router.")) + +community = c:option(ListValue, "name", translate ("Community")) +community.rmempty = false + +local profile +for profile in fs.glob(profiles) do + local name = uci:get_first(profile, "community", "name") or "?" + community:value(string.gsub(profile, "/etc/config/profile_", ""), name) +end + + +n = Map("system", translate("Basic system settings")) +function n.on_after_commit(self) + luci.http.redirect(luci.dispatcher.build_url("admin", "freifunk", "basics")) +end + +b = n:section(TypedSection, "system") +b.anonymous = true + +hn = b:option(Value, "hostname", translate("Hostname")) +hn.rmempty = false +hn.datatype = "hostname" + +loc = b:option(Value, "location", translate("Location")) +loc.rmempty = false +loc.datatype = "minlength(1)" + +lat = b:option(Value, "latitude", translate("Latitude"), translate("e.g.") .. " 48.12345") +lat.datatype = "float" +lat.rmempty = false + +lon = b:option(Value, "longitude", translate("Longitude"), translate("e.g.") .. " 10.12345") +lon.datatype = "float" +lon.rmempty = false + +--[[ +Opens an OpenStreetMap iframe or popup +Makes use of resources/OSMLatLon.htm and htdocs/resources/osm.js +]]-- + +local class = util.class +local ff = uci:get("freifunk", "community", "name") or "" +local co = "profile_" .. ff + +local deflat = uci:get_first("system", "system", "latitude") or uci:get_first(co, "community", "latitude") or 52 +local deflon = uci:get_first("system", "system", "longitude") or uci:get_first(co, "community", "longitude") or 10 +local zoom = 12 +if ( deflat == 52 and deflon == 10 ) then + zoom = 4 +end + +OpenStreetMapLonLat = luci.util.class(AbstractValue) + +function OpenStreetMapLonLat.__init__(self, ...) + AbstractValue.__init__(self, ...) + self.template = "cbi/osmll_value" + self.latfield = nil + self.lonfield = nil + self.centerlat = "" + self.centerlon = "" + self.zoom = "0" + self.width = "100%" --popups will ignore the %-symbol, "100%" is interpreted as "100" + self.height = "600" + self.popup = false + self.displaytext="OpenStreetMap" --text on button, that loads and displays the OSMap + self.hidetext="X" -- text on button, that hides OSMap +end + + osm = b:option(OpenStreetMapLonLat, "latlon", translate("Find your coordinates with OpenStreetMap"), translate("Select your location with a mouse click on the map. The map will only show up if you are connected to the Internet.")) + osm.latfield = "latitude" + osm.lonfield = "longitude" + osm.centerlat = uci:get_first("system", "system", "latitude") or deflat + osm.centerlon = uci:get_first("system", "system", "longitude") or deflon + osm.zoom = zoom + osm.width = "100%" + osm.height = "600" + osm.popup = false + osm.displaytext=translate("Show OpenStreetMap") + osm.hidetext=translate("Hide OpenStreetMap") + +return m, n diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/contact.lua b/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/contact.lua new file mode 100644 index 0000000..0a6995b --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/contact.lua @@ -0,0 +1,16 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +m = Map("freifunk", translate("Contact"), translate("Please fill in your contact details below.")) + +c = m:section(NamedSection, "contact", "public", "") + +c:option(Value, "nickname", translate("Nickname")) +c:option(Value, "name", translate("Realname")) +c:option(DynamicList, "homepage", translate("Homepage")) +c:option(Value, "mail", translate("E-Mail")) +c:option(Value, "phone", translate("Phone")) +c:option(TextValue, "note", translate("Notice")).rows = 10 + +return m diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/profile.lua b/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/profile.lua new file mode 100644 index 0000000..de7caf4 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/profile.lua @@ -0,0 +1,74 @@ +-- Copyright 2011-2012 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local uci = require "luci.model.uci".cursor() +local ipkg = require "luci.model.ipkg" +local community = uci:get("freifunk", "community", "name") + +if community == nil then + luci.http.redirect(luci.dispatcher.build_url("admin", "freifunk", "profile_error")) + return +else + community = "profile_" .. community + m = Map(community, translate("Community settings"), translate("These are the settings of your local community.")) + c = m:section(NamedSection, "profile", "community") + + local name = c:option(Value, "name", "Name") + name.rmempty = false + + local homepage = c:option(Value, "homepage", translate("Homepage")) + + local cc = c:option(Value, "country", translate("Country code")) + function cc.cfgvalue(self, section) + return uci:get(community, "wifi_device", "country") + end + function cc.write(self, sec, value) + if value then + uci:set(community, "wifi_device", "country", value) + uci:save(community) + end + end + + local ssid = c:option(Value, "ssid", translate("ESSID")) + ssid.rmempty = false + + local prefix = c:option(Value, "mesh_network", translate("Mesh prefix")) + prefix.datatype = "ip4addr" + prefix.rmempty = false + + local splash_net = c:option(Value, "splash_network", translate("Network for client DHCP addresses")) + splash_net.datatype = "ip4addr" + splash_net.rmempty = false + + local splash_prefix = c:option(Value, "splash_prefix", translate("Client network size")) + splash_prefix.datatype = "range(0,32)" + splash_prefix.rmempty = false + + local ipv6 = c:option(Flag, "ipv6", translate("Enable IPv6")) + ipv6.rmempty = true + + local ipv6_config = c:option(ListValue, "ipv6_config", translate("IPv6 Config")) + ipv6_config:depends("ipv6", 1) + ipv6_config:value("static") + if ipkg.installed ("auto-ipv6-ib") then + ipv6_config:value("auto-ipv6-random") + ipv6_config:value("auto-ipv6-fromv4") + end + ipv6_config.rmempty = true + + local ipv6_prefix = c:option(Value, "ipv6_prefix", translate("IPv6 Prefix"), translate("IPv6 network in CIDR notation.")) + ipv6_prefix:depends("ipv6", 1) + ipv6_prefix.datatype = "ip6addr" + ipv6_prefix.rmempty = true + + local vap = c:option(Flag, "vap", translate("VAP"), translate("Enable a virtual access point (VAP) by default if possible.")) + vap.rmempty = true + + local lat = c:option(Value, "latitude", translate("Latitude")) + lat.datatype = "range(-180, 180)" + lat.rmempty = false + + local lon = c:option(Value, "longitude", translate("Longitude")) + lon.rmempty = false + return m +end diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/profile_expert.lua b/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/profile_expert.lua new file mode 100644 index 0000000..22554a6 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/profile_expert.lua @@ -0,0 +1,32 @@ +-- Copyright 2011 Manuel Munz +-- Licensed to the public under the Apache License 2.0. + +local fs = require "nixio.fs" +local uci = require "luci.model.uci".cursor() +local community = uci:get("freifunk", "community", "name") + +if community == nil then + luci.http.redirect(luci.dispatcher.build_url("admin", "freifunk", "profile_error")) + return +else + community = "/etc/config/profile_" .. community + f = SimpleForm("community", translate("Community profile"), translate("You can manually edit the selected community profile here.")) + + t = f:field(TextValue, "cop") + t.rmempty = true + t.rows = 30 + function t.cfgvalue() + return fs.readfile(community) or "" + end + + function f.handle(self, state, data) + if state == FORM_VALID then + if data.cop then + fs.writefile(community, data.cop:gsub("\r\n", "\n")) + end + end + return true + end + return f +end + diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/user_index.lua b/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/user_index.lua new file mode 100644 index 0000000..fe1d8fe --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/user_index.lua @@ -0,0 +1,30 @@ +local fs = require "nixio.fs" +local file = "/www/luci-static/index_user.html" + +m = Map("freifunk", translate("Edit index page"), translate("You can display additional content on the public index page by inserting valid XHTML in the form below.
Headlines should be enclosed between <h2> and </h2>.")) + +s = m:section(NamedSection, "community", "public", "") +s.anonymous = true + +di = s:option(Flag, "DefaultText", translate("Disable default content"), translate("If selected then the default content element is not shown.")) +di.enabled = "disabled" +di.disabled = "enabled" +di.rmempty = false + +t = s:option(TextValue, "_text") +t.rmempty = true +t.rows = 20 + +function t.cfgvalue() + return fs.readfile(file) or "" +end + +function t.write(self, section, value) + return fs.writefile(file, value) +end + +function t.remove(self, section) + return fs.unlink(file) +end + +return m diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/view/cbi/osmll_value.htm b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/cbi/osmll_value.htm new file mode 100644 index 0000000..78b4dff --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/cbi/osmll_value.htm @@ -0,0 +1,55 @@ +<%# +cc-by-sa Andreas Pittrich +in behalf of the german pirate party (Piratenpartei) +www.piratenpartei.de + +$Id$ + +-%> +<%+cbi/valueheader%> + + <% if self:cfgvalue(section) ~= false then %> + <% if self.latfield and self.lonfield then %> + /> + /> + <% end %> + /> + /> + /> + <% end %> + + <% if self.popup then %> + + onclick=" + popup=window.open('/luci-static/resources/OSMLatLon.htm', '<%=cbid%>.window', 'innerWidth=<%=self.width%>, innerHeight=<%=self.height%>, location=no, menubar=no, scrollbars=no, status=no, toolbar=no'); + popup.focus(); + " + /> +
+
+ <% else %> + + onclick=" + document.getElementById('<%=cbid..".hideosm"%>').style.display='inline'; + document.getElementById('<%=cbid..".displayosm"%>').style.display='none'; + for(var i = 0; Math.min(i, window.frames.length)!=window.frames.lengths; i++){ + if(frames[i].name=='<%=cbid..".iframe"%>'){ + document.getElementById('<%=cbid..".iframediv"%>').style.display='block'; + frames[i].location.href='/luci-static/resources/OSMLatLon.htm'; + } + } + " + /> + + onclick=" + document.getElementById('<%=cbid..".displayosm"%>').style.display='inline'; + document.getElementById('<%=cbid..".hideosm"%>').style.display='none'; + document.getElementById('<%=cbid..".iframediv"%>').style.display='none'; + " + /> +
+
" style="display:none"> + + <%end%> + +<%+cbi/valuefooter%> diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm new file mode 100644 index 0000000..dbf3820 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm @@ -0,0 +1,29 @@ +<%+header%> + +<% + local has_latlon = false + local uci = require "luci.model.uci".cursor() + uci:foreach("olsrd", "LoadPlugin", function(s) + if s.library == "olsrd_nameservice.so.0.3" and s.latlon_file then + has_latlon = true + end + end) +%> + +<% if has_latlon then %> + +

<%:Legend%>:

+
    +
  • <%:Green%>:<%:Very good (ETX < 2)%>
  • +
  • <%:Yellow%>:<%:Good (2 < ETX < 4)%>
  • +
  • <%:Orange%>:<%:Still usable (4 < ETX < 10)%>
  • +
  • <%:Red%>:<%:Bad (ETX > 10)%>
  • +
+ +<% else %> +

<%:Map Error%>

+

<%_The OLSRd service is not configured to capture position data from the network.
+ Please make sure that the nameservice plugin is properly configured and that the latlon_file option is enabled.%>

+<% end %> +<%+footer%> + diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk-map/map.htm b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk-map/map.htm new file mode 100644 index 0000000..c3951f9 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk-map/map.htm @@ -0,0 +1,118 @@ + + + + Map + + + + + +
+ + diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/adminindex.htm b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/adminindex.htm new file mode 100644 index 0000000..e0252ba --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/adminindex.htm @@ -0,0 +1,51 @@ +<%+header%> +<% +local uci = require "luci.model.uci".cursor() +local contact = uci:get_all("freifunk", "contact") +local contacturl = luci.dispatcher.build_url(luci.dispatcher.context.path[1], "freifunk", "contact") +local hostname = uci:get_first ("system", "system", "hostname") +local latitude = uci:get_first ("system", "system", "latitude") +local longitude = uci:get_first ("system", "system", "longitude") +local location = uci:get_first ("system", "system", "location") +local basicsurl = luci.dispatcher.build_url(luci.dispatcher.context.path[1], "freifunk", "basics") +local nickname, name, mail +if not contact then + nickname, name, mail = "" +else + nickname = contact.nickname + name = contact.name + mail = contact.mail +end + +%> + +

<%:Freifunk Overview%>

+ +<%:These pages will assist you in setting up your router for Freifunk or similar wireless community networks.%> +

+ +<% if not (hostname and latitude and longitude and location) then%> +

+ <%:Basic settings are incomplete. Please go to%> <%:Basic settings%> <%:and fill out all required fields.%> +
+<%end%> +

+ +<% if not (nickname and name and mail) then%> +

+ <%:Contact information is incomplete. Please go to%> <%:Contact%> <%:and fill out all required fields.%> +

+

+<%end%> + +<% uci:foreach("wireless", "wifi-device", function(section) + local device = section[".name"] + local url = luci.dispatcher.build_url(luci.dispatcher.context.path[1], "network", "wireless") + if section.diversity ~= "0" and section.disabled ~= "1" and section.type ~= "mac80211" then + print('
' .. translate("Diversity is enabled for device") .. ' ' .. section[".name"] .. '. ' + .. translate("Go to") .. ' ' .. translate("wireless settings") .. ' ' .. + translate("to disable it.") .. '

') + end +end) %> + +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm new file mode 100644 index 0000000..1add595 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm @@ -0,0 +1,64 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Copyright 2011 Manuel Munz + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +<% +local uci = require "luci.model.uci".cursor() +local contact = uci:get_all("freifunk", "contact") +local nickname, name, mail, phone, location, note +local lon = uci:get_first("system", "system", "longitude") +local lat = uci:get_first("system", "system", "latitude") + +if not contact then + nickname, name, homepage, mail, phone, location, note = "" +else + nickname = contact.nickname or "" + name = contact.name or "" + homepage = contact.homepage or {} + mail = contact.mail or "" + phone = contact.phone or "" + location = uci:get_first("system", "system", "location") or contact.location + note = contact.note or "" +end +%> + +

<%:Contact%>

+ +
+<%:Operator%> + + + + + + +
<%:Nickname%>:<%=nickname%>
<%:Realname%>:<%=name%>
<%:Homepage%>: + <% for k, v in ipairs(homepage) do %> + <%=v%>
+ <% end %> +
<%:E-Mail%>:<%=mail%>
<%:Phone%>:<%=phone%>
+
+ +
+<%:Location%> + + + +
<%:Location%>:<%=location%>
<%:Coordinates%>:<%=lat%> <%=lon%> ("><%:Show on map%>)
+
+ +<% if note then %> +
+<%:Notice%> + + +
<%=note%>
+
+<%end%> + +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/index.htm b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/index.htm new file mode 100644 index 0000000..3134f0b --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/index.htm @@ -0,0 +1,84 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> +<% +local uci = require "luci.model.uci".cursor() +local tpl = require "luci.template" +local fs = require "nixio.fs" +local ff = {} +local ff = uci:get_all("freifunk") + +if not ff or not ff.community.name then + community = "Freifunk" + DefaultText = "" + nickname = "No Nickname set" +else + community = ff.community.name + DefaultText = ff.community.DefaultText + nickname = ff.contact.nickname +end + +local co = "profile_" .. community +--local community = uci:get_first(co, "community", "name") or "Freifunk" +local url = uci:get_first(co, "community", "homepage") or "http://www.freifunk.net" + + +local usertext = fs.readfile("/www/luci-static/index_user.html") + +if DefaultText ~= "disabled" then + + defaulttext = '

'.. + (translate("Hello and welcome in the network of")).. + ' '.. + (community or "Freifunk Deutschland").. + '!

'.. + translate("We are an initiative to establish a free, independent and open wireless mesh network.").. + '
'.. + translate("This is the access point").. + ' '.. + luci.sys.hostname().. + '. '.. + translate("It is operated by").. + ' '.. + (nickname or translate("Please set your contact information")).. + '.

'.. + translate("You can find further information about the global Freifunk initiative at").. + ' Freifunk.net.
'.. + translate("If you are interested in our project then contact the local community").. + ' '..community..'.

'.. + translate("Notice").. + ': '.. + translate("Internet access depends on technical and organisational conditions and may or may not work for you.").. + '

' +end +%> + +<%=defaulttext%> +<%=usertext%> + +<% +-- add custom widgets from view/freifunk/widgets +local widgets = {} +local dir = "/usr/lib/lua/luci/view/freifunk/widgets" + +uci:foreach("freifunk-widgets", "widget", + function(s) + if s.enabled == "1" then + table.insert(widgets, s) + end + end) + +for k, v in ipairs(widgets) do + if v['template'] and fs.access(dir .. "/" .. v['template'] .. "/main.htm") then + tpl.render("freifunk/widgets/" .. v['template'] .. "/main", { data = v }) + end +end + +%> +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/profile_error.htm b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/profile_error.htm new file mode 100644 index 0000000..984fa0a --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/profile_error.htm @@ -0,0 +1,11 @@ +<%+header%> + +<% +local profileurl = luci.dispatcher.build_url(luci.dispatcher.context.path[1], "freifunk", "basics") +%> + +

<%:Error%>

+<%:You need to select a profile before you can edit it. To select a profile go to%> <%:Basic settings%>. +

+ +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm new file mode 100644 index 0000000..1dc1d8b --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm @@ -0,0 +1,364 @@ +<% +local utl = require "luci.util" +local sys = require "luci.sys" +local twa = require "luci.tools.webadmin" +local ip = require "luci.ip" + +-- System + +local sysinfo = utl.ubus("system", "info") or { } +local boardinfo = utl.ubus("system", "board") or { } + +local loads = sysinfo.load or { 0, 0, 0 } +local meminfo = sysinfo.memory or { + total = 0, + free = 0, + buffered = 0, + shared = 0 +} + +local uptime = twa.date_format(sysinfo.uptime or 0) +local time = os.date("%a, %d %b %Y, %H:%M:%S") +local load = string.format("%.2f, %.2f, %.2f", loads[1] / 65535.0, loads[2] / 65535.0, loads[3] / 65535.0) + +local mem = string.format( + "%.2f MB (%.2f %s, %.2f %s, %.2f %s)", + meminfo.total / 1024 / 1024, + (meminfo.total - meminfo.free) / 1024 / 1024, + tostring(i18n.translate("used")), + meminfo.free / 1024 / 1024, + tostring(i18n.translate("free")), + meminfo.buffered / 1024 / 1024, + tostring(i18n.translate("buffered")) +) + +local interval = 5 + +-- wireless +local ntm = require "luci.model.network".init() +local devices = ntm:get_wifidevs() +local netlist = { } +local netdevs = { } +local dev +for _, dev in ipairs(devices) do + local net + for _, net in ipairs(dev:get_wifinets()) do + netlist[#netlist+1] = net:ifname() + netdevs[net:ifname()] = dev:name() + end +end +local has_iwinfo = pcall(require, "iwinfo") + + +-- Find default routes + +local _, r, def4, def6 + +for _, r in ipairs(ip.routes({ type = 1, dest_exact = "0.0.0.0/0" })) do + def4 = { + gateway = r.gw:string(), + dest = r.dest:string(), + dev = r.dev, + metr = r.metric or 0 + } + break +end + +for _, r in ipairs(ip.routes({ type = 1, dest_exact = "::/0" })) do + def6 = { + gateway = r.gw:string(), + dest = r.dest:string(), + dev = r.dev, + metr = r.metric or 0 + } + break +end + + +if luci.http.formvalue("status") == "1" then + local rv = { } + for dev in pairs(netdevs) do + local j = { id = dev } + local iw = luci.sys.wifi.getiwinfo(dev) + if iw then + local f + for _, f in ipairs({ + "channel", "txpower", "bitrate", "signal", "noise", + "quality", "quality_max", "mode", "ssid", "bssid", "encryption", "ifname" + }) do + j[f] = iw[f] + end + end + rv[#rv+1] = j + end + + + rv[#rv+1] = { + time = time, + uptime = uptime, + load = load, + mem = mem, + defroutev4 = def4, + defroutev6 = def6 + } + + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + return +end +-%> + +<%+header%> + + + + + +

+

<%:System%>

+
+
<%=boardinfo.system or "?"%>
+
<%=boardinfo.model or "?"%>
+
<%=load%>
+
<%=mem%>
+
<%=time%>
+
<%=uptime%>
+
+
+ +<% if devices[1] then %> + +
+

<%:Wireless Overview%>

+ + <% if not has_iwinfo then %> +
+ <%:Package libiwinfo required!%>
+ <%_The libiwinfo package is not installed. You must install this component for working wireless configuration!%> +
+ <% end %> + +
+
+ + + + + + + + + + + + <% + for _, dev in ipairs(devices) do + local net + for _, net in ipairs(dev:get_wifinets()) do + netlist[#netlist+1] = net:ifname() + netdevs[net:ifname()] = dev:name() + + if net.iwinfo.signal and net.iwinfo.bssid then + local signal = net.iwinfo.signal or "N/A" + local noise = net.iwinfo.noise or "N/A" + local q = net.iwinfo.quality or "0" + local qmax = net.iwinfo.quality_max or "100" + local qperc = q / qmax * 100 + + if qperc == 0 then + icon = "signal-none.png" + elseif qperc < 26 then + icon = "signal-0-25.png" + elseif qperc < 51 then + icon = "signal-25-50.png" + elseif qperc < 76 then + icon = "signal-50-75.png" + elseif qperc < 100 then + icon = "signal-75-100.png" + else + icon = "signal-0.png" + end + + signal_string = "Signal Quality" + + local ssid = net.iwinfo.ssid or "N/A" + local bssid = net.iwinfo.bssid or "N/A" + local chan = net.iwinfo.channel or "N/A" + local mode = net.iwinfo.mode or "N/A" + local txpwr = net.iwinfo.txpower or "N/A" + if txpwr ~= "N/A" then + txpwr = txpwr.." dbm" + end + local bitrate = net.iwinfo.bitrate or "N/A" + if bitrate ~= "N/A" then + bitrate = ( bitrate / 1000 ).."Mb/s" + end + local interface = net.iwinfo.ifname or "N/A" + %> + + + + + + + + + + + <% end + end + end %> +
<%:Signal%><%:Bitrate%><%:SSID%><%:BSSID%><%:Channel%><%:Mode%><%:TX%>-<%:Power%><%:Interface%>
<%=signal_string%><%=bitrate%><%=ssid%><%=bssid%><%=chan%><%=mode%><%=txpwr%><%=interface%>
+
+
+
+<% end %> + +
+

<%:Default routes%>

+
+
+ +<% if not def4 and not def6 then %> + <%:No default routes known.%> +<%else%> + + + + + + + + + <% if def4 then %> + + + + + + + + <% end + if def6 then %> + + + + + + + + + <% end %> + +
<%:Network%><%:Interface%><%:Gateway%><%:Metric%>
<%=def4.dest%><%=def4.dev%><%=def4.gateway%><%=def4.metr%>
<%=def6.dest%><%=def6.dev%><%=def6.gateway%><%=def6.metr%>
+<% end %> +
+
+
+<%+footer%> diff --git a/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/remote_update.htm b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/remote_update.htm new file mode 100644 index 0000000..f087472 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/luasrc/view/freifunk/remote_update.htm @@ -0,0 +1,53 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Freifunk Remote Update%>

+ +

<%:Check for new firmware versions and perform automatic updates.%>

+ +<% if update then %> + + <% if update.info then %> + <%:Update available!%> +

+
<%=update.info%>

+ <% else %> + <%:The installed firmware is the most recent version.%> +

+ <% end %> + +

+

+ + +
+

+ +<% elseif confirm then %> + + <%:Update Settings%> +

+ +

+ + + + + +
+ + + +

+ + +

+ +<% end %> + +<%+footer%> diff --git a/feeds/luci/modules/luci-mod-freifunk/po/ca/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/ca/freifunk.po new file mode 100644 index 0000000..338c688 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/ca/freifunk.po @@ -0,0 +1,407 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-07-18 00:15+0200\n" +"Last-Translator: Alex \n" +"Language-Team: LANGUAGE \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "Dolent (ETX > 10)" + +msgid "Basic Settings" +msgstr "Ajusts bàsics" + +msgid "Basic settings" +msgstr "Ajusts bàsics" + +msgid "Basic settings are incomplete. Please go to" +msgstr "Els ajusts bàsics estan incomplets. Si us plau, aneu a" + +msgid "Basic system settings" +msgstr "Ajusts de sistema bàsics" + +msgid "Bitrate" +msgstr "Velocitat de bits" + +msgid "Channel" +msgstr "Canal" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" +"Busca versions de microprogramari noves i realitza actualitzacions " +"automàtiques." + +msgid "Client network size" +msgstr "Mida de xarxa client" + +msgid "Community" +msgstr "Comunitat" + +msgid "Community profile" +msgstr "Perfil de comunitat" + +msgid "Community settings" +msgstr "Ajusts de comunitat" + +msgid "Confirm Upgrade" +msgstr "Confirma actualització" + +msgid "Contact" +msgstr "Contacte" + +msgid "Contact information is incomplete. Please go to" +msgstr "La informació de contacte està incompleta. Si us plau, aneu a" + +msgid "Coordinates" +msgstr "Coordenades" + +msgid "Country code" +msgstr "Codi de país" + +msgid "Default routes" +msgstr "Rutes per defecte" + +msgid "Disable default content" +msgstr "Deshabilita el contingut per defecte" + +msgid "Diversity is enabled for device" +msgstr "La diversitat està habilitada en el dispositiu" + +msgid "E-Mail" +msgstr "Adreça electrònica" + +msgid "ESSID" +msgstr "ESSID" + +msgid "Edit index page" +msgstr "Edita la pàgina d'índex" + +msgid "Enable IPv6" +msgstr "Habilita IPv6" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "Habilita un punt d'accés virtual (VAP) per defecte si és possible." + +msgid "Error" +msgstr "Error" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "Troba les vostres coordenades amb l'OpenStreetMap" + +msgid "Freifunk" +msgstr "Freifunk" + +msgid "Freifunk Overview" +msgstr "Visió de conjunt del Freifunk" + +msgid "Freifunk Remote Update" +msgstr "Actualització remota del Freifunk" + +msgid "Gateway" +msgstr "Passarel·la" + +msgid "Go to" +msgstr "Vés a" + +msgid "Good (2 < ETX < 4)" +msgstr "Bo (2 < ETX < 4)" + +msgid "Green" +msgstr "Verd" + +msgid "Hello and welcome in the network of" +msgstr "Hola i benvingut a la xarxa de" + +msgid "Hide OpenStreetMap" +msgstr "Amaga l'OpenStreetMap" + +msgid "Homepage" +msgstr "Pàgina principal" + +msgid "Hostname" +msgstr "Nom de màquina" + +msgid "IPv6 Config" +msgstr "Configuració IPv6" + +msgid "IPv6 Prefix" +msgstr "Prefix IPv6" + +msgid "IPv6 network in CIDR notation." +msgstr "Xarxa IPv6 en notació CIDR." + +msgid "If selected then the default content element is not shown." +msgstr "Si està seleccionat, l'element de contingut per defecte no es mostra." + +msgid "If you are interested in our project then contact the local community" +msgstr "" +"Si estàs interessat en el nostre projecte, llavors contacta la comunitat " +"local" + +msgid "Index Page" +msgstr "Pàgina d'índex" + +msgid "Interface" +msgstr "Interfície" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"L'accés a Internet depèn de les condicions tècniques i organitzatives, i pot " +"funcionar o no per tu." + +msgid "It is operated by" +msgstr "És administrat per" + +msgid "Keep configuration" +msgstr "Manté la configuració" + +msgid "Latitude" +msgstr "Latitud" + +msgid "Legend" +msgstr "Llegenda" + +msgid "Load" +msgstr "Càrrega" + +msgid "Local Time" +msgstr "Hora local" + +msgid "Location" +msgstr "Ubicació" + +msgid "Longitude" +msgstr "Longitud" + +msgid "Map" +msgstr "Mapa" + +msgid "Map Error" +msgstr "Error de mapa" + +msgid "Memory" +msgstr "Memòria" + +msgid "Mesh prefix" +msgstr "Prefix de malla" + +msgid "Metric" +msgstr "Mètric" + +msgid "Mode" +msgstr "Mode" + +msgid "Network" +msgstr "Xarxa" + +msgid "Network for client DHCP addresses" +msgstr "Xarxa de les adreces DHCP dels clients" + +msgid "Nickname" +msgstr "Nickname" + +msgid "No default routes known." +msgstr "No es coneix cap ruta per defecte." + +msgid "Notice" +msgstr "Avís" + +msgid "OLSR" +msgstr "OLSR" + +msgid "Operator" +msgstr "Operador" + +msgid "Orange" +msgstr "Taronja" + +msgid "Overview" +msgstr "Visió de conjunt" + +msgid "Package libiwinfo required!" +msgstr "Es requereix el paquet libiwinfo!" + +msgid "Phone" +msgstr "Telèfon" + +msgid "Please fill in your contact details below." +msgstr "Si us plau, empleneu els vostres detalls de contacte a baix." + +msgid "Please set your contact information" +msgstr "Si us plau, establiu la vostra informació de contacte" + +msgid "Power" +msgstr "Potència" + +msgid "Processor" +msgstr "Processador" + +msgid "Profile" +msgstr "Perfil" + +msgid "Profile (Expert)" +msgstr "Perfil (expert)" + +msgid "Realname" +msgstr "Nom real" + +msgid "Red" +msgstr "Xarxa" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" +"Seleccioneu la vostra ubicació per un clic del ratolí en el mapa. El mapa es " +"mostra només si esteu connectat al Internet." + +msgid "Show OpenStreetMap" +msgstr "Mostra OpenStreetMap" + +msgid "Show on map" +msgstr "Mostra en mapa" + +msgid "Signal" +msgstr "Senyal" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "Inicia l'actualització" + +msgid "Statistics" +msgstr "Estadístiques" + +msgid "Status" +msgstr "Estat" + +msgid "Still usable (4 < ETX < 10)" +msgstr "Encara utilitzable (4 < ETX < 10)" + +msgid "System" +msgstr "Sistema" + +msgid "TX" +msgstr "TX" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"El paquet libiwinfo no està instal·lat. Heu d'instal·lar aquest " +"component per a tenir una configuració sense fil funcionant!" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "El microprogramari instal·lat és la versió més recent." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "Aquests són els ajusts de la vostra comunitat local." + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "Això és el punt d'accés" + +msgid "Update Settings" +msgstr "Actualitza els ajusts" + +msgid "Update available!" +msgstr "Actualització disponible!" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "Molt bo (ETX < 2)" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" +"Som una iniciativa per establir una xarxa mesh lliure, independent i oberta." + +msgid "Wireless Overview" +msgstr "Visió de conjunt sense fil" + +msgid "Yellow" +msgstr "Groc" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "Pots trobar més informació sobre la iniciativa global Freifunk a" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "lliure" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "utilitzat" + +msgid "wireless settings" +msgstr "ajusts sense fil" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/cs/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/cs/freifunk.po new file mode 100644 index 0000000..cf22c00 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/cs/freifunk.po @@ -0,0 +1,404 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-08-08 21:21+0200\n" +"Last-Translator: koli \n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "Špatné (ETX > 10)" + +msgid "Basic Settings" +msgstr "Základní nastavení" + +msgid "Basic settings" +msgstr "Základní nastavení" + +msgid "Basic settings are incomplete. Please go to" +msgstr "Základní nastavení není kompletní. Prosím přejděte na" + +msgid "Basic system settings" +msgstr "Základní nastavení systému" + +msgid "Bitrate" +msgstr "Datový tok" + +msgid "Channel" +msgstr "Kanál" + +#, fuzzy +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" +"Zkontrolovat dostupnost nové verze firmwaru a provést automatické " +"aktualizace." + +msgid "Client network size" +msgstr "Velikost klientské sítě" + +msgid "Community" +msgstr "Komunita" + +msgid "Community profile" +msgstr "Komunitní profil" + +msgid "Community settings" +msgstr "Nastavení komunity" + +msgid "Confirm Upgrade" +msgstr "Potvrďte upgrade" + +msgid "Contact" +msgstr "Kontakt" + +msgid "Contact information is incomplete. Please go to" +msgstr "Kontaktní informace není kompletní. Prosím pokračujte na" + +msgid "Coordinates" +msgstr "Souřadnice" + +msgid "Country code" +msgstr "Kód země" + +msgid "Default routes" +msgstr "Výchozí trasy" + +#, fuzzy +msgid "Disable default content" +msgstr "Zakázat výchozí obsah" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "E-Mail" + +msgid "ESSID" +msgstr "ESSID" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "Povolit IPv6" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "Chyba" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "Najděte své souřadnice pomocí OpenStreetMap" + +msgid "Freifunk" +msgstr "Freifunk" + +msgid "Freifunk Overview" +msgstr "Freifunk - Přehled" + +msgid "Freifunk Remote Update" +msgstr "Freifunk - Vzdálené aktualizace" + +msgid "Gateway" +msgstr "Brána" + +msgid "Go to" +msgstr "Jít na" + +msgid "Good (2 < ETX < 4)" +msgstr "Dobré (2 < ETX < 4)" + +msgid "Green" +msgstr "Zelený" + +msgid "Hello and welcome in the network of" +msgstr "Dobrý den, vítejte v síti" + +msgid "Hide OpenStreetMap" +msgstr "Skrýt OpenStreetMap" + +msgid "Homepage" +msgstr "Domovská stránka" + +msgid "Hostname" +msgstr "Hostname" + +msgid "IPv6 Config" +msgstr "Konfigurace IPv6" + +msgid "IPv6 Prefix" +msgstr "IPv6 Prefix" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "Pokud se zajímáte o náš projekt, kontaktujte místní komunitu" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "Rozhraní" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"Přístup k Internetu závisí na technických a organizačních podmínkách. Může " +"(ale nemusí) vám fungovat." + +msgid "It is operated by" +msgstr "" + +msgid "Keep configuration" +msgstr "Uchovat nastavení" + +msgid "Latitude" +msgstr "Zeměpisná šířka" + +msgid "Legend" +msgstr "Legenda" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "Místní čas" + +msgid "Location" +msgstr "Umístění" + +msgid "Longitude" +msgstr "Zeměpisná délka" + +msgid "Map" +msgstr "Mapa" + +msgid "Map Error" +msgstr "Chyba mapy" + +msgid "Memory" +msgstr "Paměť" + +msgid "Mesh prefix" +msgstr "Mesh prefix" + +msgid "Metric" +msgstr "Metrika" + +msgid "Mode" +msgstr "Režim" + +msgid "Network" +msgstr "Síť" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "Přezdívka" + +msgid "No default routes known." +msgstr "Nejsou známy výchozí cesty" + +msgid "Notice" +msgstr "Upozornění" + +msgid "OLSR" +msgstr "OLSR" + +msgid "Operator" +msgstr "Operátor" + +msgid "Orange" +msgstr "Oranžový" + +msgid "Overview" +msgstr "Přehled" + +msgid "Package libiwinfo required!" +msgstr "Balíček libiwinfo je vyžadován!" + +msgid "Phone" +msgstr "Telefon" + +msgid "Please fill in your contact details below." +msgstr "Prosím níže vyplňte kontaktní detaily." + +msgid "Please set your contact information" +msgstr "Prosím nastavte si vaše kontaktní informace" + +msgid "Power" +msgstr "Výkon" + +msgid "Processor" +msgstr "Procesor" + +msgid "Profile" +msgstr "Profil" + +msgid "Profile (Expert)" +msgstr "Profil (Expert)" + +msgid "Realname" +msgstr "Skutečné jméno" + +msgid "Red" +msgstr "Červený" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" +"Kliknutím na mapu vyberte vaše umístění. Mapa se zobrazí, pouze pokud jste " +"připojen do sítě Internet." + +msgid "Show OpenStreetMap" +msgstr "Zobrazit OpenStreetMap" + +msgid "Show on map" +msgstr "Zobrazit na mapě" + +msgid "Signal" +msgstr "Signál" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "Spustit aktualizaci" + +msgid "Statistics" +msgstr "Statistiky" + +msgid "Status" +msgstr "Stav" + +msgid "Still usable (4 < ETX < 10)" +msgstr "Stále použitelné (4 < ETX < 10)" + +msgid "System" +msgstr "Systém" + +msgid "TX" +msgstr "TX" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Balíček libiwinfo není nainstalován. Je třeba ho nainstalovat, aby " +"byla funkční konfigurace bezdrátové sítě!" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "Nainstalovaný firmware je aktuální." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "To je přístupový bod (AP)" + +msgid "Update Settings" +msgstr "Nastavení aktualizace" + +msgid "Update available!" +msgstr "Aktualizace dostupná!" + +msgid "Uptime" +msgstr "Doba provozu" + +msgid "VAP" +msgstr "VAP" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "Velmi dobré (ETX < 2)" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "Žlutý" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "např." + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "nastavení bezdrátové sítě" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/de/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/de/freifunk.po new file mode 100644 index 0000000..ff6e6bc --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/de/freifunk.po @@ -0,0 +1,447 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-05-12 17:58+0200\n" +"PO-Revision-Date: 2013-01-28 22:17+0200\n" +"Last-Translator: DAC324 \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "Schlecht (ETX > 10)" + +msgid "Basic Settings" +msgstr "Grundeinstellungen" + +msgid "Basic settings" +msgstr "Grundeinstellungen" + +msgid "Basic settings are incomplete. Please go to" +msgstr "Die Grundeinstellungen sind unvollständig. Bitte gehe zur Seite" + +msgid "Basic system settings" +msgstr "Grundlegende Systemeinstellungen" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Channel" +msgstr "Kanal" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" +"Der Fernupdate-Mechanismus prüft nach neuen Firmware-Versionen und führt " +"automatisierte Updates durch." + +msgid "Client network size" +msgstr "Größe des DHCP-Netzes" + +msgid "Community" +msgstr "Community" + +msgid "Community profile" +msgstr "Community Profile" + +msgid "Community settings" +msgstr "Community Einstellungen" + +msgid "Confirm Upgrade" +msgstr "Updatevorgang starten" + +msgid "Contact" +msgstr "Kontakt" + +msgid "Contact information is incomplete. Please go to" +msgstr "Die Kontaktinformationen sind unvollständig. Bitte gehe zur Seite" + +msgid "Coordinates" +msgstr "Geokoordinaten" + +msgid "Country code" +msgstr "Ländercode" + +msgid "Default routes" +msgstr "Standardrouten" + +msgid "Disable default content" +msgstr "Standardtext deaktivieren" + +msgid "Diversity is enabled for device" +msgstr "Diversity ist aktiv für das Interface" + +msgid "E-Mail" +msgstr "E-Mail" + +msgid "ESSID" +msgstr "ESSID" + +msgid "Edit index page" +msgstr "Indexseite bearbeiten" + +msgid "Enable IPv6" +msgstr "IPv6 aktivieren" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "Fehler" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "Geokoordinaten mit OpenStreetMap ermitteln" + +msgid "Freifunk" +msgstr "Freifunk" + +msgid "Freifunk Overview" +msgstr "Freifunk Übersicht" + +msgid "Freifunk Remote Update" +msgstr "Freifunk Fernupdate" + +msgid "Gateway" +msgstr "Gateway" + +msgid "Go to" +msgstr "Gehe zu" + +msgid "Good (2 < ETX < 4)" +msgstr "Gut (2 < ETX < 4)" + +msgid "Green" +msgstr "Grün" + +msgid "Hello and welcome in the network of" +msgstr "Hallo und willkommen im Netz von" + +msgid "Hide OpenStreetMap" +msgstr "OpenStreetMap ausblenden" + +msgid "Homepage" +msgstr "Homepage" + +msgid "Hostname" +msgstr "Hostname" + +msgid "IPv6 Config" +msgstr "IPv6 Konfiguration" + +msgid "IPv6 Prefix" +msgstr "IPv6 Prefix" + +msgid "IPv6 network in CIDR notation." +msgstr "IPv6 Subnetz in CIDR-Notation" + +msgid "If selected then the default content element is not shown." +msgstr "" +"Wird diese Option gewählt dann wird das standardmässige Inhaltselement nicht " +"angezeigt." + +msgid "If you are interested in our project then contact the local community" +msgstr "" +"Hast du Interesse an diesem Projekt, dann wende dich an deine lokale " +"Gemeinschaft" + +msgid "Index Page" +msgstr "Index-Seite" + +msgid "Interface" +msgstr "Schnittstelle" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"Der Internetzugang über das experimentelle Freifunknetz ist an technische " +"und organisatorische Bedingungen geknüpft und deshalb möglicherweise nicht " +"(immer) gewährleistet." + +msgid "It is operated by" +msgstr "Er wird betrieben von " + +msgid "Keep configuration" +msgstr "Konfigurationsdateien wiederherstellen" + +msgid "Latitude" +msgstr "Breite" + +msgid "Legend" +msgstr "Erklärung" + +msgid "Load" +msgstr "Load" + +msgid "Local Time" +msgstr "Lokale Zeit" + +msgid "Location" +msgstr "Standort" + +msgid "Longitude" +msgstr "Länge" + +msgid "Map" +msgstr "Karte" + +msgid "Map Error" +msgstr "Fehler beim Darstellen der Karte" + +msgid "Memory" +msgstr "Hauptspeicher" + +msgid "Mesh prefix" +msgstr "Prefix des Meshs" + +msgid "Metric" +msgstr "Metrik" + +msgid "Mode" +msgstr "Modus" + +msgid "Network" +msgstr "Netzwerk" + +msgid "Network for client DHCP addresses" +msgstr "Netzwerk aus dem IPs für Clients vergeben werden" + +msgid "Nickname" +msgstr "Pseudonym" + +msgid "No default routes known." +msgstr "Es sind keine Standardrouten bekannt." + +msgid "Notice" +msgstr "Notiz" + +msgid "OLSR" +msgstr "OLSR" + +msgid "Operator" +msgstr "Betreiber" + +msgid "Orange" +msgstr "Orange" + +msgid "Overview" +msgstr "Übersicht" + +msgid "Package libiwinfo required!" +msgstr "Das Paket libiwinfo wird benötigt!" + +msgid "Phone" +msgstr "Telefon" + +msgid "Please fill in your contact details below." +msgstr "Bitte gib hier deine Kontaktdaten an." + +msgid "Please set your contact information" +msgstr "Bitte gib deine Kontaktinformationen ein" + +msgid "Power" +msgstr "Power" + +msgid "Processor" +msgstr "Prozessor" + +msgid "Profile" +msgstr "Profil" + +msgid "Profile (Expert)" +msgstr "Profil (Expertenmodus)" + +msgid "Realname" +msgstr "Name" + +msgid "Red" +msgstr "Rot" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" +"Wähle hier deinen Standort durch einen Mausklick aus. Die Karte funktioniert " +"nur, wenn bereits eine Verbindung zum Internet besteht." + +msgid "Show OpenStreetMap" +msgstr "OpenStreetMap anzeigen" + +msgid "Show on map" +msgstr "Karte öffnen" + +msgid "Signal" +msgstr "Signal" + +msgid "Splash" +msgstr "Splash" + +msgid "Start Upgrade" +msgstr "Updatevorgang starten" + +msgid "Statistics" +msgstr "Statistiken" + +msgid "Status" +msgstr "Status" + +msgid "Still usable (4 < ETX < 10)" +msgstr "Noch nutzbar (4 < ETX < 10)" + +msgid "System" +msgstr "System" + +msgid "TX" +msgstr "TX" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Das libiwinfo-Paket ist nicht installiert. Dieses Paket muss für " +"eine funktionierende WLAN-Konfiguration vorhanden sein!" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" +"OLSRd ist nicht dafür konfiguriert worden Geoinformationen zu speichern.
Bitte sicherstellen dass das OLSRd-Nameservice-Plugin geladen und richtig " +"konfiguriert wurde (Option latlon_file)." + +msgid "The installed firmware is the most recent version." +msgstr "Die installierte Firmware ist bereits die neueste Version." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" +"Dies hier sind die Grundeinstellungen für die Freifunk Community in deiner " +"Nachbarschaft. Diese Einstellungen legen die Standardwerte für den ffwizard " +"fest und beeinflussen die aktuelle Konfiguration des Routers NICHT." + +msgid "These are the settings of your local community." +msgstr "Dies sind die Einstellungen für deine Freifunk Community." + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" +"Diese Seiten helfen dabei, den Router für Freifunk oder ähnliche Wireless " +"Community Netzwerke einzurichten." + +msgid "This is the access point" +msgstr "Dies ist der Zugangspunkt " + +msgid "Update Settings" +msgstr "Einstellungen zum Update" + +msgid "Update available!" +msgstr "Update verfügbar!" + +msgid "Uptime" +msgstr "Uptime" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "Heruntergeladene Images verifizieren" + +msgid "Very good (ETX < 2)" +msgstr "Sehr gut (ETX < 2) " + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" +"Wir sind eine Initiative zur Schaffung eines freien, offenen und " +"unabhängigen Funknetzwerks auf WLAN-Basis." + +msgid "Wireless Overview" +msgstr "WLAN Übersicht" + +msgid "Yellow" +msgstr "Gelb" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" +"Hier kann der Indexseite weiterer Inhalt hinzugefügt werden. Dazu muss " +"gültiges XHTML verwendet werden.
Überschriften sollten zwischen den " +"Tags <h2> und </h2> eingeschlossen werden." + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "Weitere Informationen zur globalen Freifunkinitiative findest du unter" + +msgid "You can manually edit the selected community profile here." +msgstr "Hier kann das ausgewählte Community-Profil bearbeitet werden." + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" +"Es muss ein Profil ausgewählt werden, bevor es editiert werden kann. Gehe " +"dazu zur Seite" + +msgid "and fill out all required fields." +msgstr "und fülle alle benötigten Felder aus." + +msgid "buffered" +msgstr "gepuffert" + +msgid "cached" +msgstr "gecacht" + +msgid "e.g." +msgstr "z.B." + +msgid "free" +msgstr "ungenutzt" + +msgid "to disable it." +msgstr "um es auszuschalten." + +msgid "used" +msgstr "benutzt" + +msgid "wireless settings" +msgstr "Drahtloseinstellungen" + +#~ msgid "" +#~ "No services can be shown, because olsrd is not running or the olsrd-" +#~ "nameservice Plugin is not loaded." +#~ msgstr "" +#~ "Es kann keine Liste der Dienste angezeigt werden, da olsrd nicht läuft " +#~ "oder das nameservice plugin nicht geladen oder konfiguriert wurde." + +#~ msgid "Services" +#~ msgstr "Dienste" + +#~ msgid "Source" +#~ msgstr "Quelle" + +#~ msgid "" +#~ "The libiwinfo-lua package is not installed. You must install " +#~ "this component for working wireless configuration!" +#~ msgstr "" +#~ "Das libiwinfo-lua-Paket ist nicht installiert. Das Paket muss " +#~ "für eine funktionierende WLAN-Konfiguration installiert sein!" + +#~ msgid "Url" +#~ msgstr "Adresse" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/el/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/el/freifunk.po new file mode 100644 index 0000000..95d58ea --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/el/freifunk.po @@ -0,0 +1,407 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-28 02:08+0200\n" +"PO-Revision-Date: 2012-03-18 15:11+0200\n" +"Last-Translator: Vasilis \n" +"Language-Team: LANGUAGE \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.4\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "Βασικές Ρυθμίσεις" + +msgid "Basic settings" +msgstr "Βασικές ρυθμίσεις" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "Βασικές ρυθμίσεις συστήματος" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "Κανάλι" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "Κοινότητα" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "Επικοινωνία" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "Συντεταγμένες" + +msgid "Country code" +msgstr "Κωδικός xώρας" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "Ηλ. Ταχυδρομείο" + +msgid "ESSID" +msgstr "ESSID" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "Σφάλμα" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "Πύλη" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "Γεια σας και καλώς ήλθατε στο δίκτυο" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "Αν ενδιαφέρεστε για το έργο μας, επικοινωνήστε με την τοπική κοινότητα" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "Διεπαφή" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"Η πρόσβαση στο διαδίκτυο εξαρτάται από τις τεχνικές και τις οργανωτικές " +"συνθήκες και μπορεί να λειτουργεί ή όχι για σας." + +msgid "It is operated by" +msgstr "Διαχειρίζεται από" + +msgid "Keep configuration" +msgstr "" + +msgid "Latitude" +msgstr "Γεωγραφικό πλάτος" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "Τοπική Ώρα" + +msgid "Location" +msgstr "Τοποθεσία" + +msgid "Longitude" +msgstr "Γεωγραφικό μήκος" + +msgid "Map" +msgstr "Χάρτης" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "Μνήμη" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "Δίκτυο" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "Ψευδώνυμο" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "Σημείωση" + +msgid "OLSR" +msgstr "OLSR" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "Τηλέφωνο" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "Επεξεργαστής" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "Ονοματεπώνυμο" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "Σήμα" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "Στατιστικά" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "Σύστημα" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "Αυτές είναι οι ρυθμίσεις της τοπικής σας κοινότητας." + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" +"Αυτές οι σελίδες θα σας βοηθήσουν να ρυθμίσετε το δρομολογητή σας για το " +"Freifunk ή παρόμοια ασύρματα κοινοτικά δίκτυα." + +msgid "This is the access point" +msgstr "Αυτό είναι το access point" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" +"Είμαστε μία πρωτοβουλία για την εδραίωση ενός ελεύθερου, ανεξάρτητου και " +"ανοιχτού ασύρματου mesh δικτύου." + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" +"Μπορείτε να βρείτε περισσότερες πληροφορίες για την παγκόσμια πρωτοβουλία " +"Freifunk στο" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "π.χ." + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" + +#~ msgid "Source" +#~ msgstr "Πηγή" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/en/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/en/freifunk.po new file mode 100644 index 0000000..bf99116 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/en/freifunk.po @@ -0,0 +1,400 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-30 06:42+0200\n" +"PO-Revision-Date: 2009-07-06 23:21+0200\n" +"Last-Translator: Jo-Philipp Wich \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "Check for new firmware versions and perform automatic updates." + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "Coordinates" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "E-Mail" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "Freifunk Remote Update" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "Hello and welcome in the network of" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "Hostname" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "If you are interested in our project then contact the local community" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." + +msgid "It is operated by" +msgstr "It is operated by" + +msgid "Keep configuration" +msgstr "Keep configuration" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "Location" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "Memory" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "Nickname" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "Notice" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "Phone" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "Realname" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "Start Upgrade" + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "The installed firmware is the most recent version." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "This is the access point" + +msgid "Update Settings" +msgstr "Update Settings" + +msgid "Update available!" +msgstr "Update available!" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "Verify downloaded images" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" +"You can find further information about the global Freifunk initiative at" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/es/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/es/freifunk.po new file mode 100644 index 0000000..7242268 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/es/freifunk.po @@ -0,0 +1,417 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2014-06-15 13:16+0200\n" +"Last-Translator: José Vicente \n" +"Language-Team: LANGUAGE \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "Malo (ETX > 10)" + +msgid "Basic Settings" +msgstr "Configuración básica" + +msgid "Basic settings" +msgstr "Configuración básica" + +msgid "Basic settings are incomplete. Please go to" +msgstr "Configuración básica incompleta. Por favor, vaya a" + +msgid "Basic system settings" +msgstr "Configuración básica del sistema" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Channel" +msgstr "Canal" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" +"Comprobar nuevas versiones de firmware y realizar actualizaciones " +"automáticas." + +msgid "Client network size" +msgstr "Tamaño de la red cliente" + +msgid "Community" +msgstr "Comunidad" + +msgid "Community profile" +msgstr "Perfil de la comunidad" + +msgid "Community settings" +msgstr "Configuración de la comunidad" + +msgid "Confirm Upgrade" +msgstr "Confirmar actualización" + +msgid "Contact" +msgstr "Contacto" + +msgid "Contact information is incomplete. Please go to" +msgstr "La información de contacto no está completa. Por favor, vaya a" + +msgid "Coordinates" +msgstr "Coordenadas" + +msgid "Country code" +msgstr "Código de país" + +msgid "Default routes" +msgstr "Rutas por defecto" + +msgid "Disable default content" +msgstr "Desactive contenido por defecto" + +msgid "Diversity is enabled for device" +msgstr "Diversidad activar para el dispositivo" + +msgid "E-Mail" +msgstr "E-Mail" + +msgid "ESSID" +msgstr "ESSID" + +msgid "Edit index page" +msgstr "Editar índice" + +msgid "Enable IPv6" +msgstr "Activar IPv6" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "Activa un punto virtual de acceso (VAP) por dehecto si es posible." + +msgid "Error" +msgstr "Error" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "Busca sus coordenadas con OpenStreetMap" + +msgid "Freifunk" +msgstr "Freifunk" + +msgid "Freifunk Overview" +msgstr "Resumen de Freifunk" + +msgid "Freifunk Remote Update" +msgstr "Actualización remota de Freifunk" + +msgid "Gateway" +msgstr "Pasarela" + +msgid "Go to" +msgstr "Ir a" + +msgid "Good (2 < ETX < 4)" +msgstr "Bueno (2 < ETX < 4)" + +msgid "Green" +msgstr "Verde" + +msgid "Hello and welcome in the network of" +msgstr "Hola y bienvenido a la red de" + +msgid "Hide OpenStreetMap" +msgstr "Ocultar OpenStreetMap" + +msgid "Homepage" +msgstr "Página inicial" + +msgid "Hostname" +msgstr "Nombre de máquina" + +msgid "IPv6 Config" +msgstr "Configuración de IPv6" + +msgid "IPv6 Prefix" +msgstr "Prefijo IPv6" + +msgid "IPv6 network in CIDR notation." +msgstr "Red IPv6 en notación CIDR." + +msgid "If selected then the default content element is not shown." +msgstr "No mostrar el contenido por defecto." + +msgid "If you are interested in our project then contact the local community" +msgstr "" +"Si se encuentra interesado en nuestro proyecto contacte, por favor, con su " +"comunidad local mas cercana" + +msgid "Index Page" +msgstr "Índice" + +msgid "Interface" +msgstr "Interfaz" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"El acceso a Internet depende de condiciones tanto técnicas como " +"organizativas por lo que puede no funcionarle." + +msgid "It is operated by" +msgstr "Administrado por" + +msgid "Keep configuration" +msgstr "Mantener configuración" + +msgid "Latitude" +msgstr "Latitud" + +msgid "Legend" +msgstr "Leyenda" + +msgid "Load" +msgstr "Carga" + +msgid "Local Time" +msgstr "Hora local" + +msgid "Location" +msgstr "Lugar" + +msgid "Longitude" +msgstr "Longitud" + +msgid "Map" +msgstr "Mapa" + +msgid "Map Error" +msgstr "Error en el map" + +msgid "Memory" +msgstr "Memoria" + +msgid "Mesh prefix" +msgstr "Prefijo mesh" + +msgid "Metric" +msgstr "Métrica" + +msgid "Mode" +msgstr "Modo" + +msgid "Network" +msgstr "Red" + +msgid "Network for client DHCP addresses" +msgstr "Red para las direcciones DHCP de los clientes" + +msgid "Nickname" +msgstr "Apodo" + +msgid "No default routes known." +msgstr "Sin rutas por defecto." + +msgid "Notice" +msgstr "Aviso" + +msgid "OLSR" +msgstr "OLSR" + +msgid "Operator" +msgstr "Administrador" + +msgid "Orange" +msgstr "Naranja" + +msgid "Overview" +msgstr "Repaso" + +msgid "Package libiwinfo required!" +msgstr "¡Es necesario el paquete libiwinfo!" + +msgid "Phone" +msgstr "Teléfono" + +msgid "Please fill in your contact details below." +msgstr "Por favor, introduzca sus datos de contacto." + +msgid "Please set your contact information" +msgstr "Por favor, configure su información de contacto" + +msgid "Power" +msgstr "Potencia" + +msgid "Processor" +msgstr "Procesador" + +msgid "Profile" +msgstr "Perfil" + +msgid "Profile (Expert)" +msgstr "Perfil (experto)" + +msgid "Realname" +msgstr "Nombre real" + +msgid "Red" +msgstr "Rojo" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" +"Elija su posición pulsando el ratón sobre el mapa. El mapa solo aparecerá si " +"está conectado a internet." + +msgid "Show OpenStreetMap" +msgstr "Mostrar OpenStreetMap" + +msgid "Show on map" +msgstr "Mostrar en el mapa" + +msgid "Signal" +msgstr "Señal" + +msgid "Splash" +msgstr "Presentación" + +msgid "Start Upgrade" +msgstr "Iniciar actualización" + +msgid "Statistics" +msgstr "Estadísticas" + +msgid "Status" +msgstr "Estado" + +msgid "Still usable (4 < ETX < 10)" +msgstr "Aún utilizable (4 < ETX < 10)" + +msgid "System" +msgstr "Sistema" + +msgid "TX" +msgstr "TX" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"El paquete libiwinfo no está instalado. ¡Debe instalarlo para que " +"funcione la red inalámbrica!" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" +"El servicio OLSRd no está configurado para tomar los datos de posición desde " +"la red.
Asegúrese de que el plugin \"nameservice\" está bien " +"configurado y que la opción latlon_file está marcada." + +msgid "The installed firmware is the most recent version." +msgstr "El firmare instalado está en la versión más reciente." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" +"Configuración básica de su comunidad inalámbrica. Aquí puede definir los " +"valores por defecto para el asistente SIN afectar a la configuración del " +"router." + +msgid "These are the settings of your local community." +msgstr "Configuración de su comunidad local." + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" +"Configuración de su router para Freifunk o redes comunitarias similares." + +msgid "This is the access point" +msgstr "Este es el punto de acceso" + +msgid "Update Settings" +msgstr "Actualizar configuración" + +msgid "Update available!" +msgstr "¡Actualización disponible!" + +msgid "Uptime" +msgstr "Tiempo activo" + +msgid "VAP" +msgstr "VAP" + +msgid "Verify downloaded images" +msgstr "Verificar las descargas" + +msgid "Very good (ETX < 2)" +msgstr "Muy bueno (ETX < 2)" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" +"Somos una iniciativa que pretende crear una red libre, independiente y " +"abierta utilizando una red mesh inalámbrica." + +msgid "Wireless Overview" +msgstr "Resumen de red inalámbrica" + +msgid "Yellow" +msgstr "Amarillo" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" +"Puede mostrar más contenido en el índice público poniendo XHTML válido en " +"este formulario.
Las cabeceras deben ir entre <h2> y </h2>." + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "Puede obtener información acerca de la iniciativa global Freifunk en" + +msgid "You can manually edit the selected community profile here." +msgstr "Edite el perfil comunitario local." + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "Elija un perfil para editarlo. Para elegir el perfil vaya a" + +msgid "and fill out all required fields." +msgstr "y rellene los campos requeridos." + +msgid "buffered" +msgstr "en búfer" + +msgid "cached" +msgstr "en caché" + +msgid "e.g." +msgstr "ej." + +msgid "free" +msgstr "libre" + +msgid "to disable it." +msgstr "para desactivarlo." + +msgid "used" +msgstr "usado" + +msgid "wireless settings" +msgstr "configuración inalámbrica" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/fr/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/fr/freifunk.po new file mode 100644 index 0000000..028a2ce --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/fr/freifunk.po @@ -0,0 +1,395 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" + +msgid "It is operated by" +msgstr "" + +msgid "Keep configuration" +msgstr "" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/he/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/he/freifunk.po new file mode 100644 index 0000000..3dfdefd --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/he/freifunk.po @@ -0,0 +1,394 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-01-22 02:48+0200\n" +"Last-Translator: citizen.amitai \n" +"Language-Team: none\n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "חלש" + +msgid "Basic Settings" +msgstr "הגדרות בסיס" + +msgid "Basic settings" +msgstr "הגדרות בסיס" + +msgid "Basic settings are incomplete. Please go to" +msgstr "לא סיימת להגדיר את הגדרות הבסיס. תחזור ל" + +msgid "Basic system settings" +msgstr "הגדרות מערכת" + +msgid "Bitrate" +msgstr "קצב העברה" + +msgid "Channel" +msgstr "ערוץ" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "בדוק אם קיים גרסת חומרה חדשה ובצע עדכון אוטומטי" + +msgid "Client network size" +msgstr "גודל הרשת" + +msgid "Community" +msgstr "קהילה" + +msgid "Community profile" +msgstr "פרופיל הקהילה" + +msgid "Community settings" +msgstr "הגדרות קהילה" + +msgid "Confirm Upgrade" +msgstr "אשר שדרוג" + +msgid "Contact" +msgstr "צור קשר" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "" + +msgid "Country code" +msgstr "קוד מדינה" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "אימייל" + +msgid "ESSID" +msgstr "ESSID" + +msgid "Edit index page" +msgstr "ערוך דף אינדקס" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "שגיאה" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "מצא את המיקום שלך עם OpenStreetMap" + +msgid "Freifunk" +msgstr "אריג" + +msgid "Freifunk Overview" +msgstr "סקירה כללית על אריג" + +msgid "Freifunk Remote Update" +msgstr "עדכון מרחוק " + +msgid "Gateway" +msgstr "שער" + +msgid "Go to" +msgstr "עבור אל" + +msgid "Good (2 < ETX < 4)" +msgstr "טוב" + +msgid "Green" +msgstr "ירוק" + +msgid "Hello and welcome in the network of" +msgstr "שלום וברוך הבא לרשת " + +msgid "Hide OpenStreetMap" +msgstr "הסתר OpenStreetMap" + +msgid "Homepage" +msgstr "דף הבית" + +msgid "Hostname" +msgstr "שם מחשב" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "אם מסומן, תוכן ברירת המחדל לא יופיע" + +msgid "If you are interested in our project then contact the local community" +msgstr "אם הנכם מעוניינים בפרוייקט שלנו אנא צרו קשר עם הקהילה באזורכם" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "ממשק" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" + +msgid "It is operated by" +msgstr "זה מופעל ע\"י" + +msgid "Keep configuration" +msgstr "שמור הגדרות" + +msgid "Latitude" +msgstr "רוחב" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "טען" + +msgid "Local Time" +msgstr "זמן מקומי" + +msgid "Location" +msgstr "מיקום" + +msgid "Longitude" +msgstr "אורך" + +msgid "Map" +msgstr "מפה" + +msgid "Map Error" +msgstr "שגיאת מפה" + +msgid "Memory" +msgstr "זכרון" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "מצב" + +msgid "Network" +msgstr "רשת" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "כינוי" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "סקירה" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "אנא הזינו פרטי יצירת קשר" + +msgid "Power" +msgstr "כח" + +msgid "Processor" +msgstr "מעבד" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "פרופיל (מומחה)" + +msgid "Realname" +msgstr "שם אמיתי" + +msgid "Red" +msgstr "אדום" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "פתח OpenStreetMap" + +msgid "Show on map" +msgstr "הצג על גבי מפה" + +msgid "Signal" +msgstr "אות" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "התחל שדרוג" + +msgid "Statistics" +msgstr "סטטיסטיקה" + +msgid "Status" +msgstr "סטטוס" + +msgid "Still usable (4 < ETX < 10)" +msgstr "מתפקד" + +msgid "System" +msgstr "מערכת" + +msgid "TX" +msgstr "TX" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "יוזמה לביסוס רשת אריג אל-חוטית שתהיה חינמית, נגישה, ועצמאית" + +msgid "Wireless Overview" +msgstr "סקירת הרשת האלחוטית" + +msgid "Yellow" +msgstr "צהוב" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/hu/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/hu/freifunk.po new file mode 100644 index 0000000..71829ef --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/hu/freifunk.po @@ -0,0 +1,392 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" + +msgid "It is operated by" +msgstr "" + +msgid "Keep configuration" +msgstr "" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/it/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/it/freifunk.po new file mode 100644 index 0000000..26610f7 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/it/freifunk.po @@ -0,0 +1,422 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-07-19 16:27+0200\n" +"Last-Translator: clagir \n" +"Language-Team: LANGUAGE \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "Difettoso (ETX > 10)" + +msgid "Basic Settings" +msgstr "Impostazioni Base" + +msgid "Basic settings" +msgstr "Impostazioni Base" + +msgid "Basic settings are incomplete. Please go to" +msgstr "Le impostazioni base sono incomplete. Si prega di andare a" + +msgid "Basic system settings" +msgstr "Impostazioni Base del Sistema" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Channel" +msgstr "Canale" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" +"Verificare la presenza di nuove versioni del firmware ed eseguire gli " +"aggiornamenti automatici." + +msgid "Client network size" +msgstr "Dimensione Rete Client" + +msgid "Community" +msgstr "Comunità" + +msgid "Community profile" +msgstr "Profilo Comunità" + +msgid "Community settings" +msgstr "Impostazioni Comunità" + +msgid "Confirm Upgrade" +msgstr "Conferma Aggiornamento" + +msgid "Contact" +msgstr "Contatto" + +msgid "Contact information is incomplete. Please go to" +msgstr "Le informazioni di contatto sono incomplete. Si prega di andare a" + +msgid "Coordinates" +msgstr "Coordinate" + +msgid "Country code" +msgstr "Codice Nazione" + +msgid "Default routes" +msgstr "Instradamenti Predefiniti" + +msgid "Disable default content" +msgstr "Disattivare contenuto predefinito" + +msgid "Diversity is enabled for device" +msgstr "La diversità è abilitata per il dispositivo" + +msgid "E-Mail" +msgstr "E-Mail" + +msgid "ESSID" +msgstr "ESSID" + +msgid "Edit index page" +msgstr "Modifica indice pagina" + +msgid "Enable IPv6" +msgstr "Attiva IPv6" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "Attiva un access point virtuale (VAP) di default se possibile" + +msgid "Error" +msgstr "Errore" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "Trova le coordinate con OpenStreetMap" + +msgid "Freifunk" +msgstr "Freifunk" + +msgid "Freifunk Overview" +msgstr "Panoramica Freifunk" + +msgid "Freifunk Remote Update" +msgstr "Aggiornamento Remoto Freifunk" + +msgid "Gateway" +msgstr "Gateway" + +msgid "Go to" +msgstr "Vai a" + +msgid "Good (2 < ETX < 4)" +msgstr "Buono (2 < ETX < 4)" + +msgid "Green" +msgstr "Verde" + +msgid "Hello and welcome in the network of" +msgstr "Ciao e benvenuto nella rete di" + +msgid "Hide OpenStreetMap" +msgstr "Nascondi OpenStreetMap" + +msgid "Homepage" +msgstr "Homepage" + +msgid "Hostname" +msgstr "Nome Host" + +msgid "IPv6 Config" +msgstr "Configura IPv6" + +msgid "IPv6 Prefix" +msgstr "Prefisso IPv6" + +msgid "IPv6 network in CIDR notation." +msgstr "Rete IPv6 in notazione CIDR." + +msgid "If selected then the default content element is not shown." +msgstr "" +"Se selezionata, l'elemento di contenuto predefinito non viene visualizzato." + +msgid "If you are interested in our project then contact the local community" +msgstr "Se siete interessati al nostro progetto, contattare la comunità locale" + +msgid "Index Page" +msgstr "Indice Pagina" + +msgid "Interface" +msgstr "Interfaccia" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"L'accesso a Internet dipende dalle condizioni tecniche e organizzative e può " +"o non può funzionare per voi." + +msgid "It is operated by" +msgstr "E' gestito da" + +msgid "Keep configuration" +msgstr "Mantieni configurazione" + +msgid "Latitude" +msgstr "Latitudine" + +msgid "Legend" +msgstr "Legenda" + +msgid "Load" +msgstr "Carica" + +msgid "Local Time" +msgstr "Ora Locale" + +msgid "Location" +msgstr "Posizione" + +msgid "Longitude" +msgstr "Longitudine" + +msgid "Map" +msgstr "Mappa" + +msgid "Map Error" +msgstr "Errore Mappa" + +msgid "Memory" +msgstr "Memoria" + +msgid "Mesh prefix" +msgstr "Prefisso Rete" + +msgid "Metric" +msgstr "Metrica" + +msgid "Mode" +msgstr "Modalità" + +msgid "Network" +msgstr "Rete" + +msgid "Network for client DHCP addresses" +msgstr "Rete per indirizzi Client DHCP" + +msgid "Nickname" +msgstr "Nome Nick" + +msgid "No default routes known." +msgstr "Nessun instradamento predefinito conosciuto." + +msgid "Notice" +msgstr "Avviso" + +msgid "OLSR" +msgstr "OLSR" + +msgid "Operator" +msgstr "Operatore" + +msgid "Orange" +msgstr "Arancio" + +msgid "Overview" +msgstr "Panoramica" + +msgid "Package libiwinfo required!" +msgstr "Il pacchetto libiwinfo è richiesto!" + +msgid "Phone" +msgstr "Telefono" + +msgid "Please fill in your contact details below." +msgstr "Inserisci i tuoi dati di contatto qui sotto." + +msgid "Please set your contact information" +msgstr "Vi preghiamo di impostare le informazioni di contatto" + +msgid "Power" +msgstr "Potenza" + +msgid "Processor" +msgstr "Processore" + +msgid "Profile" +msgstr "Profilo" + +msgid "Profile (Expert)" +msgstr "Profilo (Esperto)" + +msgid "Realname" +msgstr "Nome Reale" + +msgid "Red" +msgstr "Rosso" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" +"Selezionare la propria posizione con un clic del mouse sulla mappa. La mappa " +"viene visualizzata solo se si è connessi a Internet." + +msgid "Show OpenStreetMap" +msgstr "Mostra OpenStreetMap" + +msgid "Show on map" +msgstr "Mostra sulla mappa" + +msgid "Signal" +msgstr "Segnale" + +msgid "Splash" +msgstr "Splash" + +msgid "Start Upgrade" +msgstr "Avvia Aggiornamento" + +msgid "Statistics" +msgstr "Statistiche" + +msgid "Status" +msgstr "Stato" + +msgid "Still usable (4 < ETX < 10)" +msgstr "Ancora utilizzabile (4 < ETX < 10)" + +msgid "System" +msgstr "Sistema" + +msgid "TX" +msgstr "TX" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Il pacchetto libiwinfo non è installato. Si deve installare questo " +"componente per usare di configurazione wireless!" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" +"Il servizio OLSRd non è configurato per acquisire i dati di posizione della " +"rete.
Assicurarsi che il plugin nameservice sia configurato " +"correttamente e che l'opzione latlon_file è abilitata." + +msgid "The installed firmware is the most recent version." +msgstr "Il firmware installato è la versione più recente." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" +"Queste sono le impostazioni di base per la vostra comunità locale wireless. " +"Queste impostazioni definiscono i valori predefiniti per la procedura " +"guidata e non influenzano la configurazione attuale del router." + +msgid "These are the settings of your local community." +msgstr "Queste sono le impostazioni della vostra comunità locale." + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" +"Queste pagine vi aiuteranno a configurare il router per Freifunk o reti " +"wireless della comunità simile." + +msgid "This is the access point" +msgstr "Questo è il punto di accesso" + +msgid "Update Settings" +msgstr "Aggiorna impostazioni" + +msgid "Update available!" +msgstr "Aggiornamento disponibile!" + +msgid "Uptime" +msgstr "Tempo di attività" + +msgid "VAP" +msgstr "VAP" + +msgid "Verify downloaded images" +msgstr "Verifica delle immagini scaricate" + +msgid "Very good (ETX < 2)" +msgstr "Molto buono (ETX < 2)" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" +"Siamo un'iniziativa per creare una rete libera, indipendente e aperto " +"wireless mesh." + +msgid "Wireless Overview" +msgstr "Panoramica Wireless" + +msgid "Yellow" +msgstr "Giallo" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" +"È possibile visualizzare contenuti aggiuntivi nella pagina indice pubblica " +"inserendo XHTML valida nel modulo sottostante.
I titoli dovrebbero " +"essere racchiusi tra <h2> e </h2>." + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" +"È possibile trovare ulteriori informazioni sull'iniziativa Freifunk globale a" + +msgid "You can manually edit the selected community profile here." +msgstr "" +"È possibile modificare manualmente il profilo selezionato della comunità qui" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" +"È necessario selezionare un profilo prima di poterlo modificare. Per " +"selezionare un profilo andare a" + +msgid "and fill out all required fields." +msgstr "e compilare tutti i campi richiesti." + +msgid "buffered" +msgstr "buffered" + +msgid "cached" +msgstr "in memoria cache" + +msgid "e.g." +msgstr "es." + +msgid "free" +msgstr "libero" + +msgid "to disable it." +msgstr "per disattivarlo." + +msgid "used" +msgstr "usato" + +msgid "wireless settings" +msgstr "Impostazioni Wireless" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/ja/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/ja/freifunk.po new file mode 100644 index 0000000..028a2ce --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/ja/freifunk.po @@ -0,0 +1,395 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 1.1.1\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" + +msgid "It is operated by" +msgstr "" + +msgid "Keep configuration" +msgstr "" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/ms/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/ms/freifunk.po new file mode 100644 index 0000000..262991d --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/ms/freifunk.po @@ -0,0 +1,391 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" + +msgid "It is operated by" +msgstr "" + +msgid "Keep configuration" +msgstr "" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/no/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/no/freifunk.po new file mode 100644 index 0000000..62df8b9 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/no/freifunk.po @@ -0,0 +1,430 @@ +msgid "" +msgstr "" +"Last-Translator: Lars Hardy \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "Grunnleggende Innstillinger" + +msgid "Basic settings" +msgstr "Grunnleggende innstillinger" + +msgid "Basic settings are incomplete. Please go to" +msgstr "Grunnleggende innstillinger er mangelfull. Gå til" + +msgid "Basic system settings" +msgstr "Grunnleggende system innstillinger" + +msgid "Bitrate" +msgstr "Bithastighet" + +msgid "Channel" +msgstr "Kanal" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "Se etter nye firmware-versjoner og utfør automatiske oppdatering." + +msgid "Client network size" +msgstr "Klient nettverk størrelse" + +msgid "Community" +msgstr "Sted" + +msgid "Community profile" +msgstr "Sted profil" + +msgid "Community settings" +msgstr "Sted innstillinger" + +msgid "Confirm Upgrade" +msgstr "Bekreft Oppgradering" + +msgid "Contact" +msgstr "Kontakt" + +msgid "Contact information is incomplete. Please go to" +msgstr "Kontaktinformasjonen er mangelfull. Gå til" + +msgid "Coordinates" +msgstr "Koordinater" + +msgid "Country code" +msgstr "Landskode" + +msgid "Default routes" +msgstr "Standard ruter" + +msgid "Disable default content" +msgstr "Deaktiver standard innhold" + +msgid "Diversity is enabled for device" +msgstr "Antennevariasjon er aktivert på enhet" + +msgid "E-Mail" +msgstr "E-Post" + +msgid "ESSID" +msgstr "ESSID" + +msgid "Edit index page" +msgstr "Rediger indeks side" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "Feil" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "Finn koordinatene dine med OpenStreetMap" + +msgid "Freifunk" +msgstr "Freifunk" + +msgid "Freifunk Overview" +msgstr "Freifunk Oversikt" + +msgid "Freifunk Remote Update" +msgstr "Freifunk Fjernkontrollert Oppgradering" + +msgid "Gateway" +msgstr "Gateway" + +msgid "Go to" +msgstr "Gå til" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "Hei og velkommen til nettverket av" + +msgid "Hide OpenStreetMap" +msgstr "Skjul OpenStreetMap" + +msgid "Homepage" +msgstr "Hjemmeside" + +msgid "Hostname" +msgstr "Vertsnavn" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "Om valgt vises ikke det vanlige innholdselementet" + +msgid "If you are interested in our project then contact the local community" +msgstr "" +"Hvis du er interessert i prosjektet vårt så ta kontakt med en lokale gruppe " +"på" + +msgid "Index Page" +msgstr "Indeks Side" + +msgid "Interface" +msgstr "Grensesnitt" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"Internett tilgang er avhengig av tekniske og organisatoriske forhold, defor " +"er det ikke sikkert det fungerer for deg." + +msgid "It is operated by" +msgstr "Det drives av" + +msgid "Keep configuration" +msgstr "Behold konfigurasjonen" + +msgid "Latitude" +msgstr "Breddegrad" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "Last" + +msgid "Local Time" +msgstr "Lokal Tid" + +msgid "Location" +msgstr "Sted" + +msgid "Longitude" +msgstr "Lengdegrad" + +msgid "Map" +msgstr "Kart" + +msgid "Map Error" +msgstr "Kart Feil" + +msgid "Memory" +msgstr "Minne" + +msgid "Mesh prefix" +msgstr "Mesh prefiks" + +msgid "Metric" +msgstr "Metrisk" + +msgid "Mode" +msgstr "Modus" + +msgid "Network" +msgstr "Nettverk" + +msgid "Network for client DHCP addresses" +msgstr "Nettverk for klient DHCP adresser" + +msgid "Nickname" +msgstr "Kallenavn" + +msgid "No default routes known." +msgstr "Ingen standard rute er kjent" + +msgid "Notice" +msgstr "Merknad" + +msgid "OLSR" +msgstr "OLSR" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "Oversikt" + +msgid "Package libiwinfo required!" +msgstr "Pakken libiwinfo er nødvendig!" + +msgid "Phone" +msgstr "Telefon" + +msgid "Please fill in your contact details below." +msgstr "Vennligst fyll ut skjema nedenfor." + +msgid "Please set your contact information" +msgstr "Vennligst oppgi din kontaktinformasjon" + +msgid "Power" +msgstr "Styrke" + +msgid "Processor" +msgstr "Prosessor" + +msgid "Profile" +msgstr "Profil" + +msgid "Profile (Expert)" +msgstr "Profil (Ekspert)" + +msgid "Realname" +msgstr "Virkelig Navn" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" +"Velg din posisjon med et museklikk på kartet. Kartet vises bare om du er " +"koblet til internett." + +msgid "Show OpenStreetMap" +msgstr "Vis OpenStreetMap" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "Signal" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "Start Oppgradering" + +msgid "Statistics" +msgstr "Statistikk" + +msgid "Status" +msgstr "Status" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "System" + +msgid "TX" +msgstr "TX" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" +"OLSRd tjenesten er ikke konfigurert til å hente posisjons data fra " +"nettverket.
Kontroller at navnetjener pluginen er riktig konfigurert og " +"at latlon_file alternativet er aktivert." + +msgid "The installed firmware is the most recent version." +msgstr "Den installerte firmware er den nyeste versjonen." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" +"Dette er de grunnleggende innstillinger for det lokale trådløse stedet. " +"Disse innstillingene definerer standard verdiene for veiviseren og vil " +"derfor IKKE gjøre noen endringer på ruteren." + +msgid "These are the settings of your local community." +msgstr "Dette er innstillingene for det lokale stedet" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" +"Disse sidene vil hjelpe deg med å sette opp ruteren til for Freifunk og " +"lignende trådløse nettverk." + +msgid "This is the access point" +msgstr "Dette er aksess punktet" + +msgid "Update Settings" +msgstr "Oppdater Innstillingene" + +msgid "Update available!" +msgstr "Oppdatering tilgjengelig!" + +msgid "Uptime" +msgstr "Oppetid" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "Verifiser nedlastede filer" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" +"Vi er et initiativ for å etablere fri, uavhengig og åpne trådløse mesh-" +"nettverk." + +msgid "Wireless Overview" +msgstr "Trådløs Oversikt" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" +"Du kan vise ytterligere innhold på den offentlige side ved å legge til " +"gyldig XHTML med form som vist under.
Overskrifter bør legges mellom " +"<h2> og </h2>." + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "Du kan finne mere informasjon om den globale Freifunk initiativ på" + +msgid "You can manually edit the selected community profile here." +msgstr "Du kan manuelt endre den valgte stedsprofilen here" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" +"Du må velge en profil før du kan endre den. For å velge en profil går du til" + +msgid "and fill out all required fields." +msgstr "og fylle ut alle nødvendige felt" + +msgid "buffered" +msgstr "bufret" + +msgid "cached" +msgstr "hurtigbufret" + +msgid "e.g." +msgstr "f.eks." + +msgid "free" +msgstr "tilgjengelig" + +msgid "to disable it." +msgstr "å deaktivere det" + +msgid "used" +msgstr "brukt" + +msgid "wireless settings" +msgstr "trådløse innstillinger" + +#~ msgid "" +#~ "No services can be shown, because olsrd is not running or the olsrd-" +#~ "nameservice Plugin is not loaded." +#~ msgstr "" +#~ "Ingen tjenester kan vises her, dette kan være pga. at olsrd ikke kjører " +#~ "eller fordi olsrd-navnetjener plugin ikke er lastet." + +#~ msgid "Services" +#~ msgstr "Tjenester" + +#~ msgid "Source" +#~ msgstr "Kilde" + +#~ msgid "" +#~ "The libiwinfo-lua package is not installed. You must install " +#~ "this component for working wireless configuration!" +#~ msgstr "" +#~ "Pakken libiwinfo-lua er ikke installert. Du må installere denne " +#~ "pakken for å kunne konfigurerer trådløse enheter!" + +#~ msgid "Url" +#~ msgstr "Url" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/pl/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/pl/freifunk.po new file mode 100644 index 0000000..ac46e1f --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/pl/freifunk.po @@ -0,0 +1,422 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-04-23 19:16+0200\n" +"Last-Translator: goodgod261 \n" +"Language-Team: none\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "Błąd (Etx > 10)" + +msgid "Basic Settings" +msgstr "Ustawienia Podstawowe" + +msgid "Basic settings" +msgstr "Ustawienia podstawowe" + +msgid "Basic settings are incomplete. Please go to" +msgstr "Niekompletne ustawienia podstawowe. Proszę uzupełnić" + +msgid "Basic system settings" +msgstr "Podstawowe ustawienia systemu" + +msgid "Bitrate" +msgstr "Bitrate" + +msgid "Channel" +msgstr "Kanał" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "Automatycznie sprawdź i uaktualnij wersję firmware`u" + +msgid "Client network size" +msgstr "Rozmiar sieci klientów" + +msgid "Community" +msgstr "Społeczność" + +msgid "Community profile" +msgstr "Profil w społeczności" + +msgid "Community settings" +msgstr "Ustawienia społeczności" + +msgid "Confirm Upgrade" +msgstr "Potwierdź uaktualnienie" + +msgid "Contact" +msgstr "Dane kontaktowe" + +msgid "Contact information is incomplete. Please go to" +msgstr "Dane kontaktowe są niekompletne. Proszę uzupełnij je" + +msgid "Coordinates" +msgstr "Współrzędne" + +msgid "Country code" +msgstr "Prefiks kraju" + +msgid "Default routes" +msgstr "Domyślne trasy (routes)" + +msgid "Disable default content" +msgstr "Wyłącz domyślną zawartość" + +# Nie przetłumaczymy tego lepiej. +msgid "Diversity is enabled for device" +msgstr "Różnorodność jest włączona dla urządzenia" + +msgid "E-Mail" +msgstr "E-Mail" + +msgid "ESSID" +msgstr "Nazwa sieci (ESSID)" + +msgid "Edit index page" +msgstr "Edytuj stronę główną" + +msgid "Enable IPv6" +msgstr "Włącz IPv6" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "Błąd" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "Znajdź swoje współrzędne w OpenStreetMap" + +msgid "Freifunk" +msgstr "Freifunk" + +msgid "Freifunk Overview" +msgstr "Przegląd sieci Freifunk" + +msgid "Freifunk Remote Update" +msgstr "Zdalna aktualizacja Freifunk" + +msgid "Gateway" +msgstr "Brama" + +msgid "Go to" +msgstr "Przejdź do" + +msgid "Good (2 < ETX < 4)" +msgstr "Dobrze (2 < ETX < 4)" + +msgid "Green" +msgstr "Zielone" + +msgid "Hello and welcome in the network of" +msgstr "Cześć! Witamy w sieci" + +msgid "Hide OpenStreetMap" +msgstr "Ukryj OpenStreetMap" + +msgid "Homepage" +msgstr "Strona domowa" + +msgid "Hostname" +msgstr "Nazwa hosta" + +msgid "IPv6 Config" +msgstr "Konfiguracja IPv6" + +msgid "IPv6 Prefix" +msgstr "Prefiks IPv6" + +msgid "IPv6 network in CIDR notation." +msgstr "Sieć IPv6 w notacji CIDR" + +msgid "If selected then the default content element is not shown." +msgstr "Jeśli zaznaczone domyślna zawartość nie jest widoczna" + +msgid "If you are interested in our project then contact the local community" +msgstr "" +"Jeśli jesteś zainteresowany projektem kontaktuj się z lokalna społecznością " +"Freifunk" + +msgid "Index Page" +msgstr "Strona początkowa" + +msgid "Interface" +msgstr "Interfejs" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"Dostęp do internetu zależy od warunków technicznych i organizacyjnych, i " +"dlatego może nie działać." + +msgid "It is operated by" +msgstr "Jest zarządzany przez" + +msgid "Keep configuration" +msgstr "Zachowaj konfigurację" + +msgid "Latitude" +msgstr "Szerokość" + +msgid "Legend" +msgstr "Legenda" + +msgid "Load" +msgstr "Obciążenie" + +msgid "Local Time" +msgstr "Czas Lokalny" + +# Może ktoś ma lepsze słowo? +msgid "Location" +msgstr "Lokacja" + +msgid "Longitude" +msgstr "Długość" + +msgid "Map" +msgstr "Mapa" + +msgid "Map Error" +msgstr "Błąd Mapy" + +msgid "Memory" +msgstr "Pamięć" + +# Dosłownie prefiks kraty +msgid "Mesh prefix" +msgstr "Prefiks komórki" + +msgid "Metric" +msgstr "Metryka" + +msgid "Mode" +msgstr "Tryb" + +msgid "Network" +msgstr "Sieć" + +msgid "Network for client DHCP addresses" +msgstr "Sieć dla adresów klienta DHCP" + +msgid "Nickname" +msgstr "Twoja ksywka" + +msgid "No default routes known." +msgstr "Nie są znane żadne domyślne ścieżki routingu." + +msgid "Notice" +msgstr "Uwaga" + +msgid "OLSR" +msgstr "OLSR" + +msgid "Operator" +msgstr "Zarządca" + +msgid "Orange" +msgstr "Pomarańczowe" + +msgid "Overview" +msgstr "Przegląd" + +msgid "Package libiwinfo required!" +msgstr "Wymagany pakiet libiwinfo !" + +msgid "Phone" +msgstr "Telefon" + +msgid "Please fill in your contact details below." +msgstr "Proszę uzupełnij dane kontaktowe poniżej." + +msgid "Please set your contact information" +msgstr "Proszę uzupełnić swoje dane kontaktowe" + +msgid "Power" +msgstr "Moc" + +msgid "Processor" +msgstr "Procesor" + +msgid "Profile" +msgstr "Profil" + +msgid "Profile (Expert)" +msgstr "Profil (tryb eksperta)" + +msgid "Realname" +msgstr "Imię i Nazwisko (prawdziwe)" + +msgid "Red" +msgstr "Czerwone" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" +"Proszę zaznaczyć swoją lokację na mapie. Mapa jest pokazywana tylko jeśli " +"masz dostęp do internetu." + +msgid "Show OpenStreetMap" +msgstr "Pokaż OpenStreetMap" + +msgid "Show on map" +msgstr "Pokaż na mapie" + +msgid "Signal" +msgstr "Sygnał" + +msgid "Splash" +msgstr "Splash" + +msgid "Start Upgrade" +msgstr "Zacznij aktualizację" + +msgid "Statistics" +msgstr "Statystyki" + +msgid "Status" +msgstr "Status" + +msgid "Still usable (4 < ETX < 10)" +msgstr "Cały Czas do użycia (4 < ETX < 10)" + +msgid "System" +msgstr "System" + +msgid "TX" +msgstr "TX" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Pakiet libiwinfo nie jest zainstalowany. Musisz go zainstalować, " +"aby konfiguracja sieci bezprzewodowej mogła być uaktywniona!" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" +"Usługa OLSRd nie jest skonfigurowana do pozyskiwania nazwy z sieci.
" +"Proszę się upewnić, że plugin nameservice jest poprawnie skonfigurowany, " +"oraz opcja użycia pliku latlon_file jest zaznaczona." + +msgid "The installed firmware is the most recent version." +msgstr "Zainstalowany firmware jest aktualny." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" +"Są to podstawowe ustawienia dla twojej lokalnej bezprzewodowej społeczności. " +"Te ustawienia określają domyślne wartości dla kreatora i NIE MAJĄ wpływu na " +"aktualną konfigurację routera." + +msgid "These are the settings of your local community." +msgstr "To są ustawienia twojej lokalnej społeczności (community)." + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" +"Te strony pomogą ci skonfigurować twój router do sieci Freifunk, lub innej " +"sieci społecznościowej ." + +msgid "This is the access point" +msgstr "To jest punk dostępowy (AP)" + +msgid "Update Settings" +msgstr "Uaktualnij ustawienia" + +msgid "Update available!" +msgstr "Aktualizacja dostępna!!!" + +msgid "Uptime" +msgstr "Aktualizacja" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "Sprawdź pobrane obrazy" + +msgid "Very good (ETX < 2)" +msgstr "Bardzo Dobrze (ETX < 2)" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" +"Jesteśmy inicjatywą na rzecz ustanowienia wolnej, niezależnej i otwartej " +"bezprzewodowej siatki kratowej." + +msgid "Wireless Overview" +msgstr "Przegląd Ustawień WiFi" + +msgid "Yellow" +msgstr "Żółty" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" +"Można wyświetlić dodatkową zawartość na publicznej stronie indeksu " +"wstawiając poprawny XHTML do formularza poniżej.
Nagłówki powinny być " +"zamknięte tagami <h2> i </h2>." + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" +"Możesz znaleźć więcej informacji o naszej globalnej inicjatywie Freifunk na" + +msgid "You can manually edit the selected community profile here." +msgstr "Możesz ręcznie edytować wybrany profil społeczności tutaj" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" +"Aby edytować profil musisz go najpierw zaznaczyć. Zaznacz profil aby " +"kontynuować" + +msgid "and fill out all required fields." +msgstr "i wypełnij wszystkie wymagane pola." + +msgid "buffered" +msgstr "buforowany" + +msgid "cached" +msgstr "cachowany" + +msgid "e.g." +msgstr "np." + +msgid "free" +msgstr "darmowy" + +msgid "to disable it." +msgstr "aby wyłączyć" + +msgid "used" +msgstr "używany" + +msgid "wireless settings" +msgstr "ustawienia sieci bezprzewodowej" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/pt-br/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/pt-br/freifunk.po new file mode 100644 index 0000000..a906a93 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/pt-br/freifunk.po @@ -0,0 +1,447 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:41+0200\n" +"PO-Revision-Date: 2014-06-21 19:00+0200\n" +"Last-Translator: Éder \n" +"Language-Team: LANGUAGE \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "Mal (ETX > 10)" + +msgid "Basic Settings" +msgstr "Configurações Básicas" + +msgid "Basic settings" +msgstr "Configurações básicas" + +msgid "Basic settings are incomplete. Please go to" +msgstr "As configurações básicas estão incompletas. Por favor vá para" + +msgid "Basic system settings" +msgstr "Configurações básicas do sistema" + +msgid "Bitrate" +msgstr "Taxa de bit" + +msgid "Channel" +msgstr "Canal" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" +"Verifique a existência de novas versões e realize a atualização " +"automaticamente." + +msgid "Client network size" +msgstr "Tamanho da rede dos clientes" + +msgid "Community" +msgstr "Comunidade" + +msgid "Community profile" +msgstr "Perfil da comunidade" + +msgid "Community settings" +msgstr "Configurações da comunidade" + +msgid "Confirm Upgrade" +msgstr "Confirmar a atualização" + +msgid "Contact" +msgstr "Contato" + +msgid "Contact information is incomplete. Please go to" +msgstr "A informação de contato está incompleta. Por favor, vá para" + +msgid "Coordinates" +msgstr "Coordenadas" + +msgid "Country code" +msgstr "Código do país" + +msgid "Default routes" +msgstr "Rotas padrão" + +msgid "Disable default content" +msgstr "Desabilitar o conteúdo padrão" + +msgid "Diversity is enabled for device" +msgstr "A diversidade está habilitada neste dispositivo" + +msgid "E-Mail" +msgstr "E-mail" + +msgid "ESSID" +msgstr "ESSID" + +msgid "Edit index page" +msgstr "Edita a página índice" + +msgid "Enable IPv6" +msgstr "Habilitar IPv6" + +# 20140621: edersg: tradução +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "Habilitar um ponto de acesso virtual (VAP) por padrão, se possível" + +msgid "Error" +msgstr "Erro" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "Encontre sua coordenada com o OpenStreetMap" + +msgid "Freifunk" +msgstr "Freifunk" + +msgid "Freifunk Overview" +msgstr "Visão Geral do Freifunk" + +msgid "Freifunk Remote Update" +msgstr "Atualização Remota do Freifunk" + +msgid "Gateway" +msgstr "Roteador" + +msgid "Go to" +msgstr "Vá para" + +msgid "Good (2 < ETX < 4)" +msgstr "Bom (2 < ETX < 4)" + +msgid "Green" +msgstr "Verde" + +msgid "Hello and welcome in the network of" +msgstr "Olá e seja bem-vindo à rede do" + +msgid "Hide OpenStreetMap" +msgstr "Esconder o OpenStreetMap" + +msgid "Homepage" +msgstr "Página" + +msgid "Hostname" +msgstr "Nome do equipamento" + +msgid "IPv6 Config" +msgstr "Configuração IPv6" + +msgid "IPv6 Prefix" +msgstr "Prefixo IPv6" + +msgid "IPv6 network in CIDR notation." +msgstr "Rede IPv6 em notação CIDR." + +msgid "If selected then the default content element is not shown." +msgstr "Se selecionado, o conteúdo padrão não é mostrado." + +msgid "If you are interested in our project then contact the local community" +msgstr "" +"Se estiver interessado no nosso projeto, entre em contacto com a comunidade " +"local" + +msgid "Index Page" +msgstr "Página Índice" + +msgid "Interface" +msgstr "Interface" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"O acesso à Internet depende de fatores técnicos e organizacionais, e pode " +"funcionar ou não no seu caso." + +msgid "It is operated by" +msgstr "É operado por" + +msgid "Keep configuration" +msgstr "Manter a configuração" + +msgid "Latitude" +msgstr "Latitude" + +msgid "Legend" +msgstr "Legenda" + +msgid "Load" +msgstr "Carregar" + +msgid "Local Time" +msgstr "Horário Local" + +msgid "Location" +msgstr "Localização" + +msgid "Longitude" +msgstr "Longitude" + +msgid "Map" +msgstr "Mapa" + +msgid "Map Error" +msgstr "Erro do Mapa" + +msgid "Memory" +msgstr "Memória" + +msgid "Mesh prefix" +msgstr "Prefixo da rede em malha" + +msgid "Metric" +msgstr "Métrica" + +msgid "Mode" +msgstr "Modo" + +msgid "Network" +msgstr "Rede" + +msgid "Network for client DHCP addresses" +msgstr "Rede para os endereços dos clientes DHCP" + +msgid "Nickname" +msgstr "Apelido" + +msgid "No default routes known." +msgstr "Nenhuma rota padrão conhecida." + +msgid "Notice" +msgstr "Aviso" + +msgid "OLSR" +msgstr "OLSR" + +msgid "Operator" +msgstr "Operador" + +msgid "Orange" +msgstr "Laranja" + +msgid "Overview" +msgstr "Visão Geral" + +msgid "Package libiwinfo required!" +msgstr "O pacote libiwinfo é necessário!" + +msgid "Phone" +msgstr "Telefone" + +msgid "Please fill in your contact details below." +msgstr "Por favor, preencha seus detalhes de contato abaixo." + +msgid "Please set your contact information" +msgstr "Por favor, defina a informação de contato" + +msgid "Power" +msgstr "Potência" + +msgid "Processor" +msgstr "Processador" + +msgid "Profile" +msgstr "Perfil" + +msgid "Profile (Expert)" +msgstr "Perfil (Especialista)" + +msgid "Realname" +msgstr "Nome Real" + +msgid "Red" +msgstr "Vermelho" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" +"Selecione a sua localização com o mouse clicando no mapa. O mapa irá mostrar " +"se você está conectado na internet." + +msgid "Show OpenStreetMap" +msgstr "Mostrar o OpenStreetMap" + +msgid "Show on map" +msgstr "Mostrar no mapa" + +msgid "Signal" +msgstr "Sinal" + +msgid "Splash" +msgstr "Splash" + +msgid "Start Upgrade" +msgstr "Iniciar a Atualização" + +msgid "Statistics" +msgstr "Estatística" + +msgid "Status" +msgstr "Estado" + +msgid "Still usable (4 < ETX < 10)" +msgstr "Ainda usável (4 < ETX < 10)" + +msgid "System" +msgstr "Sistema" + +msgid "TX" +msgstr "TX" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"O pacote libiwinfo não está instalado. Você precisa instalar este " +"componente para ter uma configuração sem fio funcional!" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" +"O serviço OLSRd não está configurado para capturar os dados de posição da " +"rede.
Por favor, garnta que o plugin nameservice está corretametne " +"configurado e que a opção latlon_file está habilitada." + +msgid "The installed firmware is the most recent version." +msgstr "O firmware instalado é a última versão." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" +"Estas são as configurações básicas para a comunidade sem fio local. Estas " +"configurações definem os valores padrão para o assistente e NÃO afetam a " +"configuração atual do roteador." + +msgid "These are the settings of your local community." +msgstr "Estas são as configurações da sua comunidade local." + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" +"Esta página ajudará você na configuração do seu roteador Freifunk ou de " +"redes comunitárias sem fio similares." + +msgid "This is the access point" +msgstr "Este é o ponto de acesso " + +msgid "Update Settings" +msgstr "Configurações da Atualização" + +msgid "Update available!" +msgstr "Existe uma atualização disponível!" + +msgid "Uptime" +msgstr "Tempo de atividade" + +# 20140621: edersg: tradução +msgid "VAP" +msgstr "VAP" + +msgid "Verify downloaded images" +msgstr "Verifique as imagens baixadas" + +msgid "Very good (ETX < 2)" +msgstr "Muito bom (ETX < 2)" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" +"Somos uma iniciativa para implementação de uma rede sem fio em malha livre, " +"independente e não-comercial." + +msgid "Wireless Overview" +msgstr "Visão Geral da Rede Sem Fio" + +msgid "Yellow" +msgstr "Amarelo" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" +"Você pode mostrar conteúdo adicional na página índice pública inserindo " +"XHTML válido no formulário abaixo.
As manchetes devem ficam entre <" +"h2> e </h2>." + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" +"Você pode encontrar mais informações sobre a iniciativa global Freifunk em" + +msgid "You can manually edit the selected community profile here." +msgstr "Você pode editar manualmente o perfil da comunidade selecionada aqui." + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" +"Você precisa selecionar um perfil antes de poder editá-lo. Para selecionar " +"um perfil, vá para" + +msgid "and fill out all required fields." +msgstr "e preencher todos os campos obrigatórios." + +msgid "buffered" +msgstr "no Buffer" + +msgid "cached" +msgstr "no Cache" + +msgid "e.g." +msgstr "ex:" + +msgid "free" +msgstr "livre" + +msgid "to disable it." +msgstr "para desabilitá-lo." + +msgid "used" +msgstr "usado" + +msgid "wireless settings" +msgstr "configurações da rede sem fio" + +#~ msgid "" +#~ "No services can be shown, because olsrd is not running or the olsrd-" +#~ "nameservice Plugin is not loaded." +#~ msgstr "" +#~ "Nenhum serviço pode ser mostrado porque o olsrd não está rodando ou o " +#~ "plugin do olsrd-nameservice não está carregado." + +#~ msgid "Services" +#~ msgstr "Serviços" + +#~ msgid "Source" +#~ msgstr "Origem" + +#~ msgid "" +#~ "The libiwinfo-lua package is not installed. You must install " +#~ "this component for working wireless configuration!" +#~ msgstr "" +#~ "O pacote libiwinfo-lua não está instalado. Você deve instalar " +#~ "este componente para ter uma configuração sem fio funcional!" + +#~ msgid "Url" +#~ msgstr "URL" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/pt/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/pt/freifunk.po new file mode 100644 index 0000000..b5b822b --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/pt/freifunk.po @@ -0,0 +1,401 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-26 19:03+0200\n" +"PO-Revision-Date: 2009-05-19 17:33+0200\n" +"Last-Translator: Jose Monteiro \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "Coordenadas" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "email" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "Olá e benvindo à rede " + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" +"Se estiver interessado no nosso projecto, entre em contacto com a sua " +"comunidade local" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"O acesso à Internet depende de factores técnicos e organizacionais, e pode " +"funcionar ou não no seu caso." + +msgid "It is operated by" +msgstr "É operado por " + +msgid "Keep configuration" +msgstr "" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "Localização" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "Memória" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "Nome curto (nick)" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "Notas" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "Telefone" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "Nome" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "Este é o ponto de acesso " + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" +"Somos uma iniciativa para implementação de uma rede livre, independente e " +"não-comercial." + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "Pode encontrar mais informações sobre a iniciativa global Freifunk em " + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/ro/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/ro/freifunk.po new file mode 100644 index 0000000..408abd8 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/ro/freifunk.po @@ -0,0 +1,395 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2014-06-29 19:53+0200\n" +"Last-Translator: xxvirusxx \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2);;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "Setări de bază" + +msgid "Basic settings" +msgstr "Setări de bază" + +msgid "Basic settings are incomplete. Please go to" +msgstr "Setările de bază sunt incomplete. Mergi la" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "Canal" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "Comunitate" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "Contact" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "Coordonate" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "Activează IPv6" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "Eroare" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "Du-te la" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "Verde" + +msgid "Hello and welcome in the network of" +msgstr "" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "Interfaţă" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" + +msgid "It is operated by" +msgstr "" + +msgid "Keep configuration" +msgstr "Păstrează configuraţia" + +msgid "Latitude" +msgstr "Latitudine" + +msgid "Legend" +msgstr "Legendă" + +msgid "Load" +msgstr "Încarcă" + +msgid "Local Time" +msgstr "Oră locală" + +msgid "Location" +msgstr "Locaţie" + +msgid "Longitude" +msgstr "Longitudine" + +msgid "Map" +msgstr "Hartă" + +msgid "Map Error" +msgstr "Eroare hartă" + +msgid "Memory" +msgstr "Memorie" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "Mod" + +msgid "Network" +msgstr "Reţea" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "Poreclă" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "Portocaliu" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "Telefon" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "Putere" + +msgid "Processor" +msgstr "Procesor" + +msgid "Profile" +msgstr "Profil" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "Nume real" + +msgid "Red" +msgstr "Roşu" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "Arată pe hartă" + +msgid "Signal" +msgstr "Semnal" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "Statistici" + +msgid "Status" +msgstr "Stare" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "Firmware-ul instalat este cea mai recentă versiune." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "Galben" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "şi completaţi toate câmpurile" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "ex." + +msgid "free" +msgstr "liber" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "folosit" + +msgid "wireless settings" +msgstr "setări wireless" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/ru/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/ru/freifunk.po new file mode 100644 index 0000000..0943a3b --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/ru/freifunk.po @@ -0,0 +1,451 @@ +msgid "" +msgstr "" +"Project-Id-Version: LuCI: freifunk\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-05-19 19:36+0200\n" +"PO-Revision-Date: 2013-09-06 09:41+0200\n" +"Last-Translator: datasheet \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Pootle 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "Плохой (ETX > 10)" + +msgid "Basic Settings" +msgstr "Базовые настройки" + +msgid "Basic settings" +msgstr "Базовые настройки" + +msgid "Basic settings are incomplete. Please go to" +msgstr "Базовые настройки не верны. Пожалуйста, перейдите в" + +msgid "Basic system settings" +msgstr "Основные настройки системы" + +msgid "Bitrate" +msgstr "Скорость" + +msgid "Channel" +msgstr "Канал" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" +"Проверить наличие новой версии прошивки и выполнить автоматическое " +"обновление." + +msgid "Client network size" +msgstr "Размер клиентской сети" + +msgid "Community" +msgstr "Сообщество" + +msgid "Community profile" +msgstr "Профиль сообщества" + +msgid "Community settings" +msgstr "Настройки сообщества" + +msgid "Confirm Upgrade" +msgstr "Подтвердить обновление" + +msgid "Contact" +msgstr "Контактная информация" + +msgid "Contact information is incomplete. Please go to" +msgstr "Контактная информация не верна. Пожалуйста, перейдите в" + +msgid "Coordinates" +msgstr "Координаты" + +msgid "Country code" +msgstr "Код страны" + +msgid "Default routes" +msgstr "Маршруты по умолчанию" + +msgid "Disable default content" +msgstr "Запретить контент по умолчанию" + +msgid "Diversity is enabled for device" +msgstr "Неопределенность пути включена" + +msgid "E-Mail" +msgstr "Эл. почта" + +msgid "ESSID" +msgstr "ESSID" + +msgid "Edit index page" +msgstr "Редактировать главную страницу" + +msgid "Enable IPv6" +msgstr "Включить IPv6" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "Ошибка" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "Найдите свои координаты с помощью OpenStreetMap" + +msgid "Freifunk" +msgstr "Freifunk" + +msgid "Freifunk Overview" +msgstr "Обзор Freifunk" + +msgid "Freifunk Remote Update" +msgstr "Удалённое обновление Freifunk" + +msgid "Gateway" +msgstr "Шлюз" + +msgid "Go to" +msgstr "Перейти" + +msgid "Good (2 < ETX < 4)" +msgstr "Хороший (2 < ETX < 4)" + +#, fuzzy +msgid "Green" +msgstr "Зелёный" + +msgid "Hello and welcome in the network of" +msgstr "Здравствуйте и добро пожаловать в сеть" + +msgid "Hide OpenStreetMap" +msgstr "Скрыть OpenStreetMap" + +msgid "Homepage" +msgstr "Домашняя страница" + +msgid "Hostname" +msgstr "Имя хоста" + +#, fuzzy +msgid "IPv6 Config" +msgstr "Конфигурация IPv6" + +msgid "IPv6 Prefix" +msgstr "Префикс IPv6" + +msgid "IPv6 network in CIDR notation." +msgstr "Сеть IPv6 в CIDR-нотации" + +msgid "If selected then the default content element is not shown." +msgstr "Если выбрано, содержимое по умолчанию не будет показано." + +msgid "If you are interested in our project then contact the local community" +msgstr "" +"Если вы заинтересованы в нашем проекте, свяжитесь с местным сообществом" + +msgid "Index Page" +msgstr "Главная страница" + +msgid "Interface" +msgstr "Интерфейс" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"Доступ в интернет зависит от технических и организационных условий и может " +"быть не доступен для вас." + +# It - access point +msgid "It is operated by" +msgstr "Она управляется" + +msgid "Keep configuration" +msgstr "Сохранить конфигурацию" + +msgid "Latitude" +msgstr "Широта" + +msgid "Legend" +msgstr "Надпись" + +msgid "Load" +msgstr "Загрузка" + +msgid "Local Time" +msgstr "Местное время" + +msgid "Location" +msgstr "Местоположение" + +msgid "Longitude" +msgstr "Долгота" + +msgid "Map" +msgstr "Карта" + +msgid "Map Error" +msgstr "Ошибка карты" + +msgid "Memory" +msgstr "Память" + +msgid "Mesh prefix" +msgstr "Префикс ячейки" + +msgid "Metric" +msgstr "Метрика" + +msgid "Mode" +msgstr "Режим" + +msgid "Network" +msgstr "Сеть" + +msgid "Network for client DHCP addresses" +msgstr "Сеть для клиентских DHCP-адресов" + +msgid "Nickname" +msgstr "Псевдоним" + +msgid "No default routes known." +msgstr "Маршруты по умолчанию не известны." + +msgid "Notice" +msgstr "Внимание" + +msgid "OLSR" +msgstr "OLSR" + +msgid "Operator" +msgstr "Оператор" + +#, fuzzy +msgid "Orange" +msgstr "Оранжевый" + +msgid "Overview" +msgstr "Обзор" + +msgid "Package libiwinfo required!" +msgstr "Требуется libiwinfo!" + +msgid "Phone" +msgstr "Телефон" + +msgid "Please fill in your contact details below." +msgstr "Пожалуйста, введите вашу контактную информацию." + +msgid "Please set your contact information" +msgstr "Пожалуйста, введите вашу контактную информацию" + +msgid "Power" +msgstr "Питание" + +msgid "Processor" +msgstr "Процессор" + +msgid "Profile" +msgstr "Профиль" + +msgid "Profile (Expert)" +msgstr "Профиль (эксперт)" + +msgid "Realname" +msgstr "Имя" + +#, fuzzy +msgid "Red" +msgstr "Красный" + +msgid "SSID" +msgstr "SSID" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" +"Укажите ваше местоположение на карте с помощью щелчка мыши. Карта будет " +"показана только если вы подключены к интернету." + +msgid "Show OpenStreetMap" +msgstr "Показать карту OpenStreetMap" + +msgid "Show on map" +msgstr "Показать на карте" + +msgid "Signal" +msgstr "Сигнал" + +msgid "Splash" +msgstr "Splash-экран" + +msgid "Start Upgrade" +msgstr "Начать обновление" + +msgid "Statistics" +msgstr "Статистика" + +msgid "Status" +msgstr "Статус" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "Система" + +msgid "TX" +msgstr "TX" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" +"Пакет libiwinfo-lua не установлен. Для включения настроек " +"беспроводных сетей, вам необходимо установить этот компонент!" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" +"Сервис OLSRd не сконфигурирован на получение данных о местоположении из сети." +"
Пожалуйста, удостоверьтесь, что модуль пространства имён настроен " +"правильно и что опция latlon_file включена." + +msgid "The installed firmware is the most recent version." +msgstr "Установлена прошивка самой последней версии." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" +"Это базовые настройки вашего сообщества. Они определяют стандартные " +"настройки для мастера установки и НЕ влияют на конечную конфигурацию " +"маршрутизатора." + +msgid "These are the settings of your local community." +msgstr "Это настройки для вашего сообщества." + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" +"Эти страницы помогут настроить ваш маршрутизатор для Freifunk или подобной " +"беспроводной сети." + +msgid "This is the access point" +msgstr "Это - точка доступа" + +msgid "Update Settings" +msgstr "Настройки обновления" + +msgid "Update available!" +msgstr "Доступно обновление!" + +msgid "Uptime" +msgstr "Время работы" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "Проверять загруженные образы" + +msgid "Very good (ETX < 2)" +msgstr "Очень хороший (ETX < 2)" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" +"Мы - это сообщество, цель которого создать бесплатную, независимую и " +"открытую беспроводную ячеистую сеть." + +msgid "Wireless Overview" +msgstr "Обзор беспроводных сетей" + +#, fuzzy +msgid "Yellow" +msgstr "Жёлтый" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" +"У вас есть возможность установить дополнительное содержимое публичной " +"страницы, вставив соответствующий XHTML-код в форму.
Заголовки должны " +"быть заключены между <h2> и </h2>." + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "Вы можете найти дополнительную информацию о Freifunk по адресу" + +msgid "You can manually edit the selected community profile here." +msgstr "Здесь вы можете редактировать выбранный профиль сообщества." + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" +"Необходимо выбрать профиль перед его редактированием. Чтобы выбрать профиль, " +"перейдите в" + +msgid "and fill out all required fields." +msgstr "и заполните все необходимые поля." + +msgid "buffered" +msgstr "буферизировано" + +msgid "cached" +msgstr "кэшировано" + +msgid "e.g." +msgstr "напр." + +msgid "free" +msgstr "свободно" + +msgid "to disable it." +msgstr "чтобы выключить." + +msgid "used" +msgstr "использовано" + +msgid "wireless settings" +msgstr "настройки беспроводной сети" + +#~ msgid "" +#~ "No services can be shown, because olsrd is not running or the olsrd-" +#~ "nameservice Plugin is not loaded." +#~ msgstr "" +#~ "Сервис не может быть показан, так как oslrd не запущен или модуль olsrd-" +#~ "nameservice не загружен." + +#~ msgid "Services" +#~ msgstr "Службы" + +#~ msgid "Source" +#~ msgstr "Источник" + +#~ msgid "" +#~ "The libiwinfo-lua package is not installed. You must install " +#~ "this component for working wireless configuration!" +#~ msgstr "" +#~ "Пакет libiwinfo-lua не установлен. Вам необходимо установить " +#~ "этот компонент для настройки беспроводной сети!" + +#~ msgid "Url" +#~ msgstr "Url" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/sk/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/sk/freifunk.po new file mode 100644 index 0000000..343f022 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/sk/freifunk.po @@ -0,0 +1,391 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" + +msgid "It is operated by" +msgstr "" + +msgid "Keep configuration" +msgstr "" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/sv/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/sv/freifunk.po new file mode 100644 index 0000000..cf42fa1 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/sv/freifunk.po @@ -0,0 +1,392 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" + +msgid "It is operated by" +msgstr "" + +msgid "Keep configuration" +msgstr "" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/tr/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/tr/freifunk.po new file mode 100644 index 0000000..f485e01 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/tr/freifunk.po @@ -0,0 +1,392 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" + +msgid "It is operated by" +msgstr "" + +msgid "Keep configuration" +msgstr "" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/uk/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/uk/freifunk.po new file mode 100644 index 0000000..5abfa11 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/uk/freifunk.po @@ -0,0 +1,393 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" + +msgid "It is operated by" +msgstr "" + +msgid "Keep configuration" +msgstr "" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/vi/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/vi/freifunk.po new file mode 100644 index 0000000..8076d61 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/vi/freifunk.po @@ -0,0 +1,398 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-16 06:58+0200\n" +"PO-Revision-Date: 2009-08-15 11:56+0200\n" +"Last-Translator: Stefan Pirwitz \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Pootle 1.1.0\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "Kiểm tra các phiên bản phần cứng mới và thực hiện tự động cập nhật." + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "Tọa độ" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "E-mail" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "Freifunk cập nhật từ xa" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "Xin chào và chào mừng gia nhập mạng lưới của" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "Hostname" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" +"Nếu bạn quan tâm đến đề án của chúng tôi, hãy liên hệ cộng đồng địa phương" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" +"Truy cập Internet phù thuộc vào kỹ thật và điều kiện tổ chức và có thể hoạt " +"động hoặc không hoạt động cho bạn" + +msgid "It is operated by" +msgstr "Nó hoạt động bởi " + +msgid "Keep configuration" +msgstr "Giữ cấu hình" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "Địa chỉ" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "Bộ nhớ" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "Tên" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "Chú ý" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "Điện thoại" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "Tên thật " + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "Bắt đầu cập nhật " + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "Phần cứng được cài đặt là phiên bản mới nhất." + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "Đây là điểm truy cập " + +msgid "Update Settings" +msgstr "Cập nhật cài đặt" + +msgid "Update available!" +msgstr "Cập nhật sẵn có!" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "Xác minh hình ảnh đã tải" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "Chúng tôi là phát triển mạng lưới nguồn mở không dây đầu tiên" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "Bạn có thể tìm thấy thông tin về Freifunk toàn cầu tại " + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/zh-cn/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/zh-cn/freifunk.po new file mode 100644 index 0000000..2d58b16 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/zh-cn/freifunk.po @@ -0,0 +1,403 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-06-10 03:40+0200\n" +"PO-Revision-Date: 2014-06-22 14:33+0200\n" +"Last-Translator: phantasm131 \n" +"Language-Team: LANGUAGE \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "BSSID" +msgstr "BSSID" + +msgid "Bad (ETX > 10)" +msgstr "错误(ETX>10)" + +msgid "Basic Settings" +msgstr "基础设置" + +msgid "Basic settings" +msgstr "基础设置" + +msgid "Basic settings are incomplete. Please go to" +msgstr "基础设置不完整,请转到" + +msgid "Basic system settings" +msgstr "基础系统设置" + +msgid "Bitrate" +msgstr "速率" + +msgid "Channel" +msgstr "频道" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "检查新的固件版本并自动升级。" + +msgid "Client network size" +msgstr "客户端网络容量" + +msgid "Community" +msgstr "群组" + +msgid "Community profile" +msgstr "群组配置文件" + +msgid "Community settings" +msgstr "群组设置" + +msgid "Confirm Upgrade" +msgstr "确认升级" + +msgid "Contact" +msgstr "联系人" + +msgid "Contact information is incomplete. Please go to" +msgstr "联系人信息不全。请继续填写" + +msgid "Coordinates" +msgstr "位置" + +msgid "Country code" +msgstr "国家代码" + +msgid "Default routes" +msgstr "缺省路由" + +msgid "Disable default content" +msgstr "禁用默认内容" + +msgid "Diversity is enabled for device" +msgstr "启用多重设备" + +msgid "E-Mail" +msgstr "电子邮件" + +msgid "ESSID" +msgstr "ESSID" + +msgid "Edit index page" +msgstr "编辑索引页" + +msgid "Enable IPv6" +msgstr "启用IPv6" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "启用一个虚拟接入点(如果可以的话)" + +msgid "Error" +msgstr "错误" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "使用OpenStreetMap查找位置坐标" + +msgid "Freifunk" +msgstr "Freifunk" + +msgid "Freifunk Overview" +msgstr "Freifunk简介" + +msgid "Freifunk Remote Update" +msgstr "Freifunk远程更新" + +msgid "Gateway" +msgstr "网关" + +msgid "Go to" +msgstr "去" + +msgid "Good (2 < ETX < 4)" +msgstr "好(2libiwinfo
package is not installed. You must install this " +"component for working wireless configuration!" +msgstr " libiwinfo 包没有安装。进行无线配置您必须安装此组件!" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" +"没有配置OLSRd从网络获取位置数据。
请确保正确配置域名服务插件,且 " +"latlon_file 选项被启用。" + +msgid "The installed firmware is the most recent version." +msgstr "所安装固件为最新版本。" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" +"这些基本设置为您本地的无线社区。这些设置定义为向导默认值并不会影响路由器的实" +"际配置。" + +msgid "These are the settings of your local community." +msgstr "当地社区设置。" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "这些页面将帮助你设置路由器Freifunk或类似的无线社区网络。" + +msgid "This is the access point" +msgstr "AP" + +msgid "Update Settings" +msgstr "升级设置" + +msgid "Update available!" +msgstr "可用更新!" + +msgid "Uptime" +msgstr "正常运行时间" + +msgid "VAP" +msgstr "VAP" + +msgid "Verify downloaded images" +msgstr "校验下载的镜像包" + +msgid "Very good (ETX < 2)" +msgstr "非常好(ETX<2)" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "我们倡议建立一个自由,独立和开放的无线mesh网络。" + +msgid "Wireless Overview" +msgstr "无线概要" + +msgid "Yellow" +msgstr "黄色" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" +"可以显示更多的内容,对公众的索引页下面的表格中插入有效的XHTML。
标题应放" +"在<H2>和</ H2>中" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "你可以找到更多有关全球Freifunk活动的信息" + +msgid "You can manually edit the selected community profile here." +msgstr "您可以在这里手动编辑所选社区配置文件。" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "编辑它之前,你需要选择一个配置文件。选择配置文件" + +msgid "and fill out all required fields." +msgstr "填写所有必填字段。" + +msgid "buffered" +msgstr "已缓存" + +msgid "cached" +msgstr "已暂存" + +msgid "e.g." +msgstr "例如:" + +msgid "free" +msgstr "空闲" + +msgid "to disable it." +msgstr "禁用它。" + +msgid "used" +msgstr "占用" + +msgid "wireless settings" +msgstr "无线设置" diff --git a/feeds/luci/modules/luci-mod-freifunk/po/zh-tw/freifunk.po b/feeds/luci/modules/luci-mod-freifunk/po/zh-tw/freifunk.po new file mode 100644 index 0000000..51432e2 --- /dev/null +++ b/feeds/luci/modules/luci-mod-freifunk/po/zh-tw/freifunk.po @@ -0,0 +1,390 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "BSSID" +msgstr "" + +msgid "Bad (ETX > 10)" +msgstr "" + +msgid "Basic Settings" +msgstr "" + +msgid "Basic settings" +msgstr "" + +msgid "Basic settings are incomplete. Please go to" +msgstr "" + +msgid "Basic system settings" +msgstr "" + +msgid "Bitrate" +msgstr "" + +msgid "Channel" +msgstr "" + +msgid "Check for new firmware versions and perform automatic updates." +msgstr "" + +msgid "Client network size" +msgstr "" + +msgid "Community" +msgstr "" + +msgid "Community profile" +msgstr "" + +msgid "Community settings" +msgstr "" + +msgid "Confirm Upgrade" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "Contact information is incomplete. Please go to" +msgstr "" + +msgid "Coordinates" +msgstr "" + +msgid "Country code" +msgstr "" + +msgid "Default routes" +msgstr "" + +msgid "Disable default content" +msgstr "" + +msgid "Diversity is enabled for device" +msgstr "" + +msgid "E-Mail" +msgstr "" + +msgid "ESSID" +msgstr "" + +msgid "Edit index page" +msgstr "" + +msgid "Enable IPv6" +msgstr "" + +msgid "Enable a virtual access point (VAP) by default if possible." +msgstr "" + +msgid "Error" +msgstr "" + +msgid "Find your coordinates with OpenStreetMap" +msgstr "" + +msgid "Freifunk" +msgstr "" + +msgid "Freifunk Overview" +msgstr "" + +msgid "Freifunk Remote Update" +msgstr "" + +msgid "Gateway" +msgstr "" + +msgid "Go to" +msgstr "" + +msgid "Good (2 < ETX < 4)" +msgstr "" + +msgid "Green" +msgstr "" + +msgid "Hello and welcome in the network of" +msgstr "" + +msgid "Hide OpenStreetMap" +msgstr "" + +msgid "Homepage" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv6 Config" +msgstr "" + +msgid "IPv6 Prefix" +msgstr "" + +msgid "IPv6 network in CIDR notation." +msgstr "" + +msgid "If selected then the default content element is not shown." +msgstr "" + +msgid "If you are interested in our project then contact the local community" +msgstr "" + +msgid "Index Page" +msgstr "" + +msgid "Interface" +msgstr "" + +msgid "" +"Internet access depends on technical and organisational conditions and may " +"or may not work for you." +msgstr "" + +msgid "It is operated by" +msgstr "" + +msgid "Keep configuration" +msgstr "" + +msgid "Latitude" +msgstr "" + +msgid "Legend" +msgstr "" + +msgid "Load" +msgstr "" + +msgid "Local Time" +msgstr "" + +msgid "Location" +msgstr "" + +msgid "Longitude" +msgstr "" + +msgid "Map" +msgstr "" + +msgid "Map Error" +msgstr "" + +msgid "Memory" +msgstr "" + +msgid "Mesh prefix" +msgstr "" + +msgid "Metric" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Network" +msgstr "" + +msgid "Network for client DHCP addresses" +msgstr "" + +msgid "Nickname" +msgstr "" + +msgid "No default routes known." +msgstr "" + +msgid "Notice" +msgstr "" + +msgid "OLSR" +msgstr "" + +msgid "Operator" +msgstr "" + +msgid "Orange" +msgstr "" + +msgid "Overview" +msgstr "" + +msgid "Package libiwinfo required!" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "Please fill in your contact details below." +msgstr "" + +msgid "Please set your contact information" +msgstr "" + +msgid "Power" +msgstr "" + +msgid "Processor" +msgstr "" + +msgid "Profile" +msgstr "" + +msgid "Profile (Expert)" +msgstr "" + +msgid "Realname" +msgstr "" + +msgid "Red" +msgstr "" + +msgid "SSID" +msgstr "" + +msgid "" +"Select your location with a mouse click on the map. The map will only show " +"up if you are connected to the Internet." +msgstr "" + +msgid "Show OpenStreetMap" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Signal" +msgstr "" + +msgid "Splash" +msgstr "" + +msgid "Start Upgrade" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Still usable (4 < ETX < 10)" +msgstr "" + +msgid "System" +msgstr "" + +msgid "TX" +msgstr "" + +msgid "" +"The libiwinfo package is not installed. You must install this " +"component for working wireless configuration!" +msgstr "" + +msgid "" +"The OLSRd service is not configured to capture position data from the " +"network.
Please make sure that the nameservice plugin is properly " +"configured and that the latlon_file option is enabled." +msgstr "" + +msgid "The installed firmware is the most recent version." +msgstr "" + +msgid "" +"These are the basic settings for your local wireless community. These " +"settings define the default values for the wizard and DO NOT affect the " +"actual configuration of the router." +msgstr "" + +msgid "These are the settings of your local community." +msgstr "" + +msgid "" +"These pages will assist you in setting up your router for Freifunk or " +"similar wireless community networks." +msgstr "" + +msgid "This is the access point" +msgstr "" + +msgid "Update Settings" +msgstr "" + +msgid "Update available!" +msgstr "" + +msgid "Uptime" +msgstr "" + +msgid "VAP" +msgstr "" + +msgid "Verify downloaded images" +msgstr "" + +msgid "Very good (ETX < 2)" +msgstr "" + +msgid "" +"We are an initiative to establish a free, independent and open wireless mesh " +"network." +msgstr "" + +msgid "Wireless Overview" +msgstr "" + +msgid "Yellow" +msgstr "" + +msgid "" +"You can display additional content on the public index page by inserting " +"valid XHTML in the form below.
Headlines should be enclosed between <" +"h2> and </h2>." +msgstr "" + +msgid "" +"You can find further information about the global Freifunk initiative at" +msgstr "" + +msgid "You can manually edit the selected community profile here." +msgstr "" + +msgid "" +"You need to select a profile before you can edit it. To select a profile go " +"to" +msgstr "" + +msgid "and fill out all required fields." +msgstr "" + +msgid "buffered" +msgstr "" + +msgid "cached" +msgstr "" + +msgid "e.g." +msgstr "" + +msgid "free" +msgstr "" + +msgid "to disable it." +msgstr "" + +msgid "used" +msgstr "" + +msgid "wireless settings" +msgstr "" diff --git a/feeds/luci/modules/luci-mod-rpc/Makefile b/feeds/luci/modules/luci-mod-rpc/Makefile new file mode 100644 index 0000000..e64c86c --- /dev/null +++ b/feeds/luci/modules/luci-mod-rpc/Makefile @@ -0,0 +1,15 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI RPC - JSON-RPC API +LUCI_DEPENDS:=+luci-lib-json + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature + diff --git a/feeds/luci/modules/luci-mod-rpc/luasrc/controller/rpc.lua b/feeds/luci/modules/luci-mod-rpc/luasrc/controller/rpc.lua new file mode 100644 index 0000000..759bb74 --- /dev/null +++ b/feeds/luci/modules/luci-mod-rpc/luasrc/controller/rpc.lua @@ -0,0 +1,161 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local require = require +local pairs = pairs +local print = print +local pcall = pcall +local table = table + +module "luci.controller.rpc" + +function index() + local function authenticator(validator, accs) + local auth = luci.http.formvalue("auth", true) + if auth then -- if authentication token was given + local sdat = (luci.util.ubus("session", "get", { ubus_rpc_session = auth }) or { }).values + if sdat then -- if given token is valid + if sdat.user and luci.util.contains(accs, sdat.user) then + return sdat.user, auth + end + end + end + luci.http.status(403, "Forbidden") + end + + local rpc = node("rpc") + rpc.sysauth = "root" + rpc.sysauth_authenticator = authenticator + rpc.notemplate = true + + entry({"rpc", "uci"}, call("rpc_uci")) + entry({"rpc", "fs"}, call("rpc_fs")) + entry({"rpc", "sys"}, call("rpc_sys")) + entry({"rpc", "ipkg"}, call("rpc_ipkg")) + entry({"rpc", "auth"}, call("rpc_auth")).sysauth = false +end + +function rpc_auth() + local jsonrpc = require "luci.jsonrpc" + local http = require "luci.http" + local sys = require "luci.sys" + local ltn12 = require "luci.ltn12" + local util = require "luci.util" + + local loginstat + + local server = {} + server.challenge = function(user, pass) + local sid, token, secret + + local config = require "luci.config" + + if sys.user.checkpasswd(user, pass) then + local sdat = util.ubus("session", "create", { timeout = config.sauth.sessiontime }) + if sdat then + sid = sdat.ubus_rpc_session + token = sys.uniqueid(16) + secret = sys.uniqueid(16) + + http.header("Set-Cookie", "sysauth="..sid.."; path=/") + util.ubus("session", "set", { + ubus_rpc_session = sid, + values = { + user = user, + token = token, + secret = secret + } + }) + end + end + + return sid and {sid=sid, token=token, secret=secret} + end + + server.login = function(...) + local challenge = server.challenge(...) + return challenge and challenge.sid + end + + http.prepare_content("application/json") + ltn12.pump.all(jsonrpc.handle(server, http.source()), http.write) +end + +function rpc_uci() + if not pcall(require, "luci.model.uci") then + luci.http.status(404, "Not Found") + return nil + end + local uci = require "luci.jsonrpcbind.uci" + local jsonrpc = require "luci.jsonrpc" + local http = require "luci.http" + local ltn12 = require "luci.ltn12" + + http.prepare_content("application/json") + ltn12.pump.all(jsonrpc.handle(uci, http.source()), http.write) +end + +function rpc_fs() + local util = require "luci.util" + local io = require "io" + local fs2 = util.clone(require "nixio.fs") + local jsonrpc = require "luci.jsonrpc" + local http = require "luci.http" + local ltn12 = require "luci.ltn12" + + function fs2.readfile(filename) + local stat, mime = pcall(require, "mime") + if not stat then + error("Base64 support not available. Please install LuaSocket.") + end + + local fp = io.open(filename) + if not fp then + return nil + end + + local output = {} + local sink = ltn12.sink.table(output) + local source = ltn12.source.chain(ltn12.source.file(fp), mime.encode("base64")) + return ltn12.pump.all(source, sink) and table.concat(output) + end + + function fs2.writefile(filename, data) + local stat, mime = pcall(require, "mime") + if not stat then + error("Base64 support not available. Please install LuaSocket.") + end + + local file = io.open(filename, "w") + local sink = file and ltn12.sink.chain(mime.decode("base64"), ltn12.sink.file(file)) + return sink and ltn12.pump.all(ltn12.source.string(data), sink) or false + end + + http.prepare_content("application/json") + ltn12.pump.all(jsonrpc.handle(fs2, http.source()), http.write) +end + +function rpc_sys() + local sys = require "luci.sys" + local jsonrpc = require "luci.jsonrpc" + local http = require "luci.http" + local ltn12 = require "luci.ltn12" + + http.prepare_content("application/json") + ltn12.pump.all(jsonrpc.handle(sys, http.source()), http.write) +end + +function rpc_ipkg() + if not pcall(require, "luci.model.ipkg") then + luci.http.status(404, "Not Found") + return nil + end + local ipkg = require "luci.model.ipkg" + local jsonrpc = require "luci.jsonrpc" + local http = require "luci.http" + local ltn12 = require "luci.ltn12" + + http.prepare_content("application/json") + ltn12.pump.all(jsonrpc.handle(ipkg, http.source()), http.write) +end diff --git a/feeds/luci/modules/luci-mod-rpc/luasrc/jsonrpc.lua b/feeds/luci/modules/luci-mod-rpc/luasrc/jsonrpc.lua new file mode 100644 index 0000000..c7f0254 --- /dev/null +++ b/feeds/luci/modules/luci-mod-rpc/luasrc/jsonrpc.lua @@ -0,0 +1,83 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.jsonrpc", package.seeall) +require "luci.json" + +function resolve(mod, method) + local path = luci.util.split(method, ".") + + for j=1, #path-1 do + if not type(mod) == "table" then + break + end + mod = rawget(mod, path[j]) + if not mod then + break + end + end + mod = type(mod) == "table" and rawget(mod, path[#path]) or nil + if type(mod) == "function" then + return mod + end +end + +function handle(tbl, rawsource, ...) + local decoder = luci.json.Decoder() + local stat = luci.ltn12.pump.all(rawsource, decoder:sink()) + local json = decoder:get() + local response + local success = false + + if stat then + if type(json.method) == "string" + and (not json.params or type(json.params) == "table") then + local method = resolve(tbl, json.method) + if method then + response = reply(json.jsonrpc, json.id, + proxy(method, unpack(json.params or {}))) + else + response = reply(json.jsonrpc, json.id, + nil, {code=-32601, message="Method not found."}) + end + else + response = reply(json.jsonrpc, json.id, + nil, {code=-32600, message="Invalid request."}) + end + else + response = reply("2.0", nil, + nil, {code=-32700, message="Parse error."}) + end + + return luci.json.Encoder(response, ...):source() +end + +function reply(jsonrpc, id, res, err) + require "luci.json" + id = id or luci.json.null + + -- 1.0 compatibility + if jsonrpc ~= "2.0" then + jsonrpc = nil + res = res or luci.json.null + err = err or luci.json.null + end + + return {id=id, result=res, error=err, jsonrpc=jsonrpc} +end + +function proxy(method, ...) + local res = {luci.util.copcall(method, ...)} + local stat = table.remove(res, 1) + + if not stat then + return nil, {code=-32602, message="Invalid params.", data=table.remove(res, 1)} + else + if #res <= 1 then + return res[1] or luci.json.null + else + return res + end + end +end diff --git a/feeds/luci/modules/luci-mod-rpc/luasrc/jsonrpcbind/uci.lua b/feeds/luci/modules/luci-mod-rpc/luasrc/jsonrpcbind/uci.lua new file mode 100644 index 0000000..284801e --- /dev/null +++ b/feeds/luci/modules/luci-mod-rpc/luasrc/jsonrpcbind/uci.lua @@ -0,0 +1,83 @@ +-- Copyright 2008 Steven Barth +-- Copyright 2008 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local uci = require "luci.model.uci".cursor() +local ucis = require "luci.model.uci".cursor_state() +local table = require "table" + + +module "luci.jsonrpcbind.uci" +_M, _PACKAGE, _NAME = nil, nil, nil + +function add(config, ...) + uci:load(config) + local stat = uci:add(config, ...) + return uci:save(config) and stat +end + +function apply(config) + return uci:apply(config) +end + +function changes(...) + return uci:changes(...) +end + +function commit(config) + return uci:load(config) and uci:commit(config) +end + +function delete(config, ...) + uci:load(config) + return uci:delete(config, ...) and uci:save(config) +end + +function delete_all(config, ...) + uci:load(config) + return uci:delete_all(config, ...) and uci:save(config) +end + +function foreach(config, stype) + uci:load(config) + local sections = {} + + return uci:foreach(config, stype, function(section) + table.insert(sections, section) + end) and sections +end + +function get(config, ...) + uci:load(config) + return uci:get(config, ...) +end + +function get_all(config, ...) + uci:load(config) + return uci:get_all(config, ...) +end + +function get_state(config, ...) + ucis:load(config) + return ucis:get(config, ...) +end + +function revert(config) + return uci:load(config) and uci:revert(config) +end + +function section(config, ...) + uci:load(config) + return uci:section(config, ...) and uci:save(config) +end + +function set(config, ...) + uci:load(config) + return uci:set(config, ...) and uci:save(config) +end + +function tset(config, ...) + uci:load(config) + return uci:tset(config, ...) and uci:save(config) +end + diff --git a/feeds/luci/protocols/luci-proto-3g/Makefile b/feeds/luci/protocols/luci-proto-3g/Makefile new file mode 100644 index 0000000..d1d5455 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-3g/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for 3G +LUCI_DEPENDS:=+comgt + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/protocols/luci-proto-3g/luasrc/model/cbi/admin_network/proto_3g.lua b/feeds/luci/protocols/luci-proto-3g/luasrc/model/cbi/admin_network/proto_3g.lua new file mode 100644 index 0000000..1b2e23c --- /dev/null +++ b/feeds/luci/protocols/luci-proto-3g/luasrc/model/cbi/admin_network/proto_3g.lua @@ -0,0 +1,147 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local device, apn, service, pincode, username, password, dialnumber +local ipv6, maxwait, defaultroute, metric, peerdns, dns, + keepalive_failure, keepalive_interval, demand + + +device = section:taboption("general", Value, "device", translate("Modem device")) +device.rmempty = false + +local device_suggestions = nixio.fs.glob("/dev/tty[A-Z]*") + or nixio.fs.glob("/dev/tts/*") + +if device_suggestions then + local node + for node in device_suggestions do + device:value(node) + end +end + + +service = section:taboption("general", Value, "service", translate("Service Type")) +service:value("", translate("-- Please choose --")) +service:value("umts", "UMTS/GPRS") +service:value("umts_only", translate("UMTS only")) +service:value("gprs_only", translate("GPRS only")) +service:value("evdo", "CDMA/EV-DO") + + +apn = section:taboption("general", Value, "apn", translate("APN")) + + +pincode = section:taboption("general", Value, "pincode", translate("PIN")) + + +username = section:taboption("general", Value, "username", translate("PAP/CHAP username")) + + +password = section:taboption("general", Value, "password", translate("PAP/CHAP password")) +password.password = true + +dialnumber = section:taboption("general", Value, "dialnumber", translate("Dial number")) +dialnumber.placeholder = "*99***1#" + +if luci.model.network:has_ipv6() then + + ipv6 = section:taboption("advanced", ListValue, "ipv6") + ipv6:value("auto", translate("Automatic")) + ipv6:value("0", translate("Disabled")) + ipv6:value("1", translate("Manual")) + ipv6.default = "auto" + +end + + +maxwait = section:taboption("advanced", Value, "maxwait", + translate("Modem init timeout"), + translate("Maximum amount of seconds to wait for the modem to become ready")) + +maxwait.placeholder = "20" +maxwait.datatype = "min(1)" + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +peerdns = section:taboption("advanced", Flag, "peerdns", + translate("Use DNS servers advertised by peer"), + translate("If unchecked, the advertised DNS server addresses are ignored")) + +peerdns.default = peerdns.enabled + + +dns = section:taboption("advanced", DynamicList, "dns", + translate("Use custom DNS servers")) + +dns:depends("peerdns", "") +dns.datatype = "ipaddr" +dns.cast = "string" + + +keepalive_failure = section:taboption("advanced", Value, "_keepalive_failure", + translate("LCP echo failure threshold"), + translate("Presume peer to be dead after given amount of LCP echo failures, use 0 to ignore failures")) + +function keepalive_failure.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^(%d+)[ ,]+%d+") or v) + end +end + +function keepalive_failure.write() end +function keepalive_failure.remove() end + +keepalive_failure.placeholder = "0" +keepalive_failure.datatype = "uinteger" + + +keepalive_interval = section:taboption("advanced", Value, "_keepalive_interval", + translate("LCP echo interval"), + translate("Send LCP echo requests at the given interval in seconds, only effective in conjunction with failure threshold")) + +function keepalive_interval.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^%d+[ ,]+(%d+)")) + end +end + +function keepalive_interval.write(self, section, value) + local f = tonumber(keepalive_failure:formvalue(section)) or 0 + local i = tonumber(value) or 5 + if i < 1 then i = 1 end + if f > 0 then + m:set(section, "keepalive", "%d %d" %{ f, i }) + else + m:del(section, "keepalive") + end +end + +keepalive_interval.remove = keepalive_interval.write +keepalive_interval.placeholder = "5" +keepalive_interval.datatype = "min(1)" + + +demand = section:taboption("advanced", Value, "demand", + translate("Inactivity timeout"), + translate("Close inactive connection after the given amount of seconds, use 0 to persist connection")) + +demand.placeholder = "0" +demand.datatype = "uinteger" diff --git a/feeds/luci/protocols/luci-proto-ipip/Makefile b/feeds/luci/protocols/luci-proto-ipip/Makefile new file mode 100644 index 0000000..6af8564 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipip/Makefile @@ -0,0 +1,16 @@ +# +# Copyright 2016 Roger Pueyo Centelles +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for IPIP tunnels (IPv4-in-IPv4 RFC2003) +LUCI_DEPENDS:=+ipip + +PKG_MAINTAINER:=Roger Pueyo Centelles + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/protocols/luci-proto-ipip/luasrc/model/cbi/admin_network/proto_ipip.lua b/feeds/luci/protocols/luci-proto-ipip/luasrc/model/cbi/admin_network/proto_ipip.lua new file mode 100644 index 0000000..8817f18d --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipip/luasrc/model/cbi/admin_network/proto_ipip.lua @@ -0,0 +1,34 @@ +-- Copyright 2016 Roger Pueyo Centelles +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local peeraddr, ipaddr, ttl, tos, df, mtu, tunlink + +peeraddr = section:taboption("general", Value, "peeraddr", translate("Remote IPv4 address or FQDN"), translate("The IPv4 address or the fully-qualified domain name of the remote tunnel end.")) +peeraddr.optional = false +peeraddr.datatype = "or(hostname,ip4addr)" + +ipaddr = section:taboption("general", Value, "ipaddr", translate("Local IPv4 address"), translate("The local IPv4 address over which the tunnel is created (optional).")) +ipaddr.optional = true +ipaddr.datatype = "ip4addr" + +tunlink = section:taboption("general", Value, "tunlink", translate("Bind interface"), translate("Bind the tunnel to this interface (optional).")) +ipaddr.optional = true + + +mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU"), translate("Specify an MTU (Maximum Transmission Unit) other than the default (1280 bytes).")) +mtu.optional = true +mtu.placeholder = 1280 +mtu.datatype = "range(68, 9200)" + +ttl = section:taboption("advanced", Value, "ttl", translate("Override TTL"), translate("Specify a TTL (Time to Live) for the encapsulating packet other than the default (64).")) +ttl.optional = true +ttl.placeholder = 64 +ttl.datatype = "min(1)" + +tos = section:taboption("advanced", Value, "tos", translate("Override TOS"), translate("Specify a TOS (Type of Service).")) +tos.optional = true +tos.datatype = "range(0, 255)" + +df = section:taboption("advanced", Flag, "df", translate("Don't Fragment"), translate("Enable the DF (Don't Fragment) flag of the encapsulating packets.")) diff --git a/feeds/luci/protocols/luci-proto-ipip/luasrc/model/network/proto_ipip.lua b/feeds/luci/protocols/luci-proto-ipip/luasrc/model/network/proto_ipip.lua new file mode 100644 index 0000000..5c3761c --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipip/luasrc/model/network/proto_ipip.lua @@ -0,0 +1,40 @@ +-- Copyright 2016 Roger Pueyo Centelles +-- Licensed to the public under the Apache License 2.0. + +local netmod = luci.model.network +local interface = luci.model.network.interface +local proto = netmod:register_protocol("ipip") + +function proto.get_i18n(self) + return luci.i18n.translate("IPv4-in-IPv4 (RFC2003)") +end + +function proto.ifname(self) + return "ipip-" .. self.sid +end + +function proto.opkg_package(self) + return "ipip" +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/ipip.sh") +end + +function proto.is_floating(self) + return true +end + +function proto.is_virtual(self) + return true +end + +function proto.get_interfaces(self) + return nil +end + +function proto.contains_interface(self, ifc) + return (netmod:ifnameof(ifc) == self:ifname()) +end + +netmod:register_pattern_virtual("^ipip-%w") diff --git a/feeds/luci/protocols/luci-proto-ipv6/Makefile b/feeds/luci/protocols/luci-proto-ipv6/Makefile new file mode 100644 index 0000000..e749bc9 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for DHCPv6/6in4/6to4/6rd/DS-Lite/aiccu +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_464xlat.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_464xlat.lua new file mode 100644 index 0000000..5a37582 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_464xlat.lua @@ -0,0 +1,33 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Copyright 2013 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... +local tunlink, defaultroute, metric, mtu + +section:taboption("general", Value, "ip6prefix", + translate("NAT64 Prefix"), translate("Leave empty to autodetect")) + +tunlink = section:taboption("advanced", DynamicList, "tunlink", translate("Tunnel Link")) +tunlink.template = "cbi/network_netlist" +tunlink.nocreate = true + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +mtu = section:taboption("advanced", Value, "mtu", translate("Use MTU on tunnel interface")) +mtu.placeholder = "1280" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6in4.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6in4.lua new file mode 100644 index 0000000..88dfe09 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6in4.lua @@ -0,0 +1,102 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local ipaddr, peeraddr, ip6addr, tunnelid, username, password +local defaultroute, metric, ttl, mtu + + +ipaddr = s:taboption("general", Value, "ipaddr", + translate("Local IPv4 address"), + translate("Leave empty to use the current WAN address")) + +ipaddr.datatype = "ip4addr" + + +peeraddr = s:taboption("general", Value, "peeraddr", + translate("Remote IPv4 address"), + translate("This is usually the address of the nearest PoP operated by the tunnel broker")) + +peeraddr.rmempty = false +peeraddr.datatype = "ip4addr" + + +ip6addr = s:taboption("general", Value, "ip6addr", + translate("Local IPv6 address"), + translate("This is the local endpoint address assigned by the tunnel broker, it usually ends with :2")) + +ip6addr.datatype = "ip6addr" + + +local ip6prefix = s:taboption("general", Value, "ip6prefix", + translate("IPv6 routed prefix"), + translate("This is the prefix routed to you by the tunnel broker for use by clients")) + +ip6prefix.datatype = "ip6addr" + + +local update = section:taboption("general", Flag, "_update", + translate("Dynamic tunnel"), + translate("Enable HE.net dynamic endpoint update")) + +update.enabled = "1" +update.disabled = "0" + +function update.write() end +function update.remove() end +function update.cfgvalue(self, section) + return (tonumber(m:get(section, "tunnelid")) ~= nil) + and self.enabled or self.disabled +end + + +tunnelid = section:taboption("general", Value, "tunnelid", translate("Tunnel ID")) +tunnelid.datatype = "uinteger" +tunnelid:depends("_update", update.enabled) + + +username = section:taboption("general", Value, "username", + translate("HE.net username"), + translate("This is the plain username for logging into the account")) + +username:depends("_update", update.enabled) +username.validate = function(self, val, sid) + if type(val) == "string" and #val == 32 and val:match("^[a-fA-F0-9]+$") then + return nil, translate("The HE.net endpoint update configuration changed, you must now use the plain username instead of the user ID!") + end + return val +end + + +password = section:taboption("general", Value, "password", + translate("HE.net password"), + translate("This is either the \"Update Key\" configured for the tunnel or the account password if no update key has been configured")) + +password.password = true +password:depends("_update", update.enabled) + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +ttl = section:taboption("advanced", Value, "ttl", translate("Use TTL on tunnel interface")) +ttl.placeholder = "64" +ttl.datatype = "range(1,255)" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Use MTU on tunnel interface")) +mtu.placeholder = "1280" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6rd.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6rd.lua new file mode 100644 index 0000000..708a9c5 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6rd.lua @@ -0,0 +1,72 @@ +-- Copyright 2011-2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local ipaddr, peeraddr, ip6addr, tunnelid, username, password +local defaultroute, metric, ttl, mtu + + +ipaddr = s:taboption("general", Value, "ipaddr", + translate("Local IPv4 address"), + translate("Leave empty to use the current WAN address")) + +ipaddr.datatype = "ip4addr" + + +peeraddr = s:taboption("general", Value, "peeraddr", + translate("Remote IPv4 address"), + translate("This IPv4 address of the relay")) + +peeraddr.rmempty = false +peeraddr.datatype = "ip4addr" + + +ip6addr = s:taboption("general", Value, "ip6prefix", + translate("IPv6 prefix"), + translate("The IPv6 prefix assigned to the provider, usually ends with ::")) + +ip6addr.rmempty = false +ip6addr.datatype = "ip6addr" + + +ip6prefixlen = s:taboption("general", Value, "ip6prefixlen", + translate("IPv6 prefix length"), + translate("The length of the IPv6 prefix in bits")) + +ip6prefixlen.placeholder = "16" +ip6prefixlen.datatype = "range(0,128)" + + +ip6prefixlen = s:taboption("general", Value, "ip4prefixlen", + translate("IPv4 prefix length"), + translate("The length of the IPv4 prefix in bits, the remainder is used in the IPv6 addresses.")) + +ip6prefixlen.placeholder = "0" +ip6prefixlen.datatype = "range(0,32)" + + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +ttl = section:taboption("advanced", Value, "ttl", translate("Use TTL on tunnel interface")) +ttl.placeholder = "64" +ttl.datatype = "range(1,255)" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Use MTU on tunnel interface")) +mtu.placeholder = "1280" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6to4.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6to4.lua new file mode 100644 index 0000000..50a7069 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_6to4.lua @@ -0,0 +1,37 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local ipaddr, defaultroute, metric, ttl, mtu + + +ipaddr = section:taboption("general", Value, "ipaddr", + translate("Local IPv4 address"), + translate("Leave empty to use the current WAN address")) + +ipaddr.datatype = "ip4addr" + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +ttl = section:taboption("advanced", Value, "ttl", translate("Use TTL on tunnel interface")) +ttl.placeholder = "64" +ttl.datatype = "range(1,255)" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Use MTU on tunnel interface")) +mtu.placeholder = "1280" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_aiccu.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_aiccu.lua new file mode 100644 index 0000000..7b5e604 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_aiccu.lua @@ -0,0 +1,136 @@ +-- Copyright 2015 Paul Oranje +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +-- config read by /lib/netifd/proto/aiccu.sh +local username, password, protocol, server, tunnelid, ip6prefix, requiretls, nat, heartbeat, + verbose, ntpsynctimeout, ip6addr, sourcerouting, defaultroute + +-- generic parameters +local metric, ttl, mtu + + +username = section:taboption("general", Value, "username", + translate("Server username"), + translate("SIXXS-handle[/Tunnel-ID]")) +username.datatype = "string" + +password = section:taboption("general", Value, "password", + translate("Server password"), + translate("Server password, enter the specific password of the tunnel when the username contains the tunnel ID")) +password.datatype = "string" +password.password = true + + +--[[ SIXXS supports only TIC as tunnel broker protocol, no use setting it. +protocol = section:taboption("general", ListValue, "protocol", + translate("Tunnel broker protocol"), + translate("SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) use 6in4 instead")) + +protocol:value("tic", "TIC") +protocol:value("tsp", "TSP") +protocol:value("l2tp", "L2TP") +protocol.default = "tic" +protocol.optional = true +--]] + + +server = section:taboption("general", Value, "server", + translate("Tunnel setup server"), + translate("Optional, specify to override default server (tic.sixxs.net)")) +server.datatype = "host(0)" +server.optional = true + + +tunnelid = section:taboption("general", Value, "tunnelid", + translate("Tunnel ID"), + translate("Optional, use when the SIXXS account has more than one tunnel")) +tunnelid.datatype = "string" +tunnelid.optional = true + + +local ip6prefix = section:taboption("general", Value, "ip6prefix", + translate("IPv6 prefix"), + translate("Routed IPv6 prefix for downstream interfaces")) +ip6prefix.datatype = "ip6addr" +ip6prefix.optional = true + + +heartbeat = s:taboption("general", ListValue, "heartbeat", + translate("Tunnel type"), + translate("Also see Tunneling Comparison on SIXXS")) +heartbeat:value("0", translate("AYIYA")) +heartbeat:value("1", translate("Heartbeat")) +heartbeat.default = "0" + + +nat = section:taboption("general", Flag, "nat", + translate("Behind NAT"), + translate("The tunnel end-point is behind NAT, defaults to disabled and only applies to AYIYA")) +nat.optional = true +nat.default = nat.disabled + + +requiretls = section:taboption("general", Flag, "requiretls", + translate("Require TLS"), + translate("Connection to server fails when TLS cannot be used")) +requiretls.optional = true +requiretls.default = requiretls.disabled + + +verbose = section:taboption("advanced", Flag, "verbose", + translate("Verbose"), + translate("Verbose logging by aiccu daemon")) +verbose.optional = true +verbose.default = verbose.disabled + + +ntpsynctimeout = section:taboption("advanced", Value, "ntpsynctimeout", + translate("NTP sync time-out"), + translate("Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)")) +ntpsynctimeout.datatype = "uinteger" +ntpsynctimeout.placeholder = "90" +ntpsynctimeout.optional = true + + +ip6addr = section:taboption("advanced", Value, "ip6addr", + translate("Local IPv6 address"), + translate("IPv6 address delegated to the local tunnel endpoint (optional)")) +ip6addr.datatype = "ip6addr" +ip6addr.optional = true + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Default route"), + translate("Whether to create an IPv6 default route over the tunnel")) +defaultroute.default = defaultroute.enabled +defaultroute.optional = true + + +sourcerouting = section:taboption("advanced", Flag, "sourcerouting", + translate("Source routing"), + translate("Whether to route only packets from delegated prefixes")) +sourcerouting.default = sourcerouting.enabled +sourcerouting.optional = true + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) +metric.datatype = "uinteger" +metric.placeholder = "0" +metric:depends("defaultroute", defaultroute.enabled) + + +ttl = section:taboption("advanced", Value, "ttl", + translate("Use TTL on tunnel interface")) +ttl.datatype = "range(1,255)" +ttl.placeholder = "64" + + +mtu = section:taboption("advanced", Value, "mtu", + translate("Use MTU on tunnel interface"), + translate("minimum 1280, maximum 1480")) +mtu.datatype = "range(1280,1480)" +mtu.placeholder = "1280" + diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dhcpv6.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dhcpv6.lua new file mode 100644 index 0000000..c843161 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dhcpv6.lua @@ -0,0 +1,58 @@ +-- Copyright 2013 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + + +local o = section:taboption("general", ListValue, "reqaddress", + translate("Request IPv6-address")) +o:value("try") +o:value("force") +o:value("none", "disabled") +o.default = "try" + + +o = section:taboption("general", Value, "reqprefix", + translate("Request IPv6-prefix of length")) +o:value("auto", translate("automatic")) +o:value("no", translate("disabled")) +o:value("48") +o:value("52") +o:value("56") +o:value("60") +o:value("64") +o.default = "auto" + + +o = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) +o.default = o.enabled + + +o = section:taboption("advanced", Flag, "peerdns", + translate("Use DNS servers advertised by peer"), + translate("If unchecked, the advertised DNS server addresses are ignored")) +o.default = o.enabled + + +o = section:taboption("advanced", Value, "ip6prefix", + translate("Custom delegated IPv6-prefix")) +o.dataype = "ip6addr" + + +o = section:taboption("advanced", DynamicList, "dns", + translate("Use custom DNS servers")) +o:depends("peerdns", "") +o.datatype = "list(ip6addr)" +o.cast = "string" + + +o = section:taboption("advanced", Value, "clientid", + translate("Client ID to send when requesting DHCP")) + +luci.tools.proto.opt_macaddr(section, ifc, translate("Override MAC address")) + +o = section:taboption("advanced", Value, "mtu", translate("Override MTU")) +o.placeholder = "1500" +o.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dslite.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dslite.lua new file mode 100644 index 0000000..eca9750 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dslite.lua @@ -0,0 +1,53 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Copyright 2013 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local peeraddr, ip6addr +local tunlink, defaultroute, metric, ttl, mtu + + + + +peeraddr = section:taboption("general", Value, "peeraddr", + translate("DS-Lite AFTR address")) + +peeraddr.rmempty = false +peeraddr.datatype = "or(hostname,ip6addr)" + +ip6addr = section:taboption("general", Value, "ip6addr", + translate("Local IPv6 address"), + translate("Leave empty to use the current WAN address")) + +ip6addr.datatype = "ip6addr" + + +tunlink = section:taboption("advanced", DynamicList, "tunlink", translate("Tunnel Link")) +tunlink.template = "cbi/network_netlist" +tunlink.nocreate = true + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +ttl = section:taboption("advanced", Value, "ttl", translate("Use TTL on tunnel interface")) +ttl.placeholder = "64" +ttl.datatype = "range(1,255)" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Use MTU on tunnel interface")) +mtu.placeholder = "1280" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_hnet.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_hnet.lua new file mode 100644 index 0000000..2ed34fa --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_hnet.lua @@ -0,0 +1,37 @@ +-- Copyright 2013 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local mode = section:taboption("general", ListValue, "mode", translate("Category")) +mode:value("auto", translate("Automatic")) +mode:value("external", translate("External")) +mode:value("internal", translate("Internal")) +mode:value("leaf", translate("Leaf")) +mode:value("guest", translate("Guest")) +mode:value("adhoc", translate("Ad-Hoc")) +mode:value("hybrid", translate("Hybrid")) +mode.default = "auto" + + + +local plen = section:taboption("advanced", Value, "ip6assign", translate("IPv6 assignment length"), + translate("Assign a part of given length of every public IPv6-prefix to this interface")) +plen.datatype = "max(128)" +plen.default = "64" + +section:taboption("advanced", Value, "link_id", translate("IPv6 assignment hint"), + translate("Assign prefix parts using this hexadecimal subprefix ID for this interface.")) + +plen = section:taboption("advanced", Value, "ip4assign", translate("IPv4 assignment length")) +plen.datatype = "max(32)" +plen.default = "24" + +local o = section:taboption("advanced", Value, "dnsname", translate("DNS-Label / FQDN")) +o.default = map.name + +luci.tools.proto.opt_macaddr(section, ifc, translate("Override MAC address")) + +o = section:taboption("advanced", Value, "mtu", translate("Override MTU")) +o.placeholder = "1500" +o.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua new file mode 100644 index 0000000..37d4ec9 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua @@ -0,0 +1,88 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Copyright 2013 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local peeraddr, ip6addr +local tunlink, defaultroute, metric, ttl, mtu + + +maptype = section:taboption("general", ListValue, "type", translate("Type")) +maptype:value("map-e", "MAP-E") +maptype:value("map-t", "MAP-T") +maptype:value("lw4o6", "LW4over6") + + +peeraddr = section:taboption("general", Value, "peeraddr", + translate("BR / DMR / AFTR")) + +peeraddr.rmempty = false +peeraddr.datatype = "ip6addr" + + +ipaddr = section:taboption("general", Value, "ipaddr", + translate("IPv4 prefix")) +ipaddr.datatype = "ip4addr" + + +ip4prefixlen = s:taboption("general", Value, "ip4prefixlen", + translate("IPv4 prefix length"), + translate("The length of the IPv4 prefix in bits, the remainder is used in the IPv6 addresses.")) + +ip4prefixlen.placeholder = "32" +ip4prefixlen.datatype = "range(0,32)" + +ip6addr = s:taboption("general", Value, "ip6prefix", + translate("IPv6 prefix"), + translate("The IPv6 prefix assigned to the provider, usually ends with ::")) + +ip6addr.rmempty = false +ip6addr.datatype = "ip6addr" + + +ip6prefixlen = s:taboption("general", Value, "ip6prefixlen", + translate("IPv6 prefix length"), + translate("The length of the IPv6 prefix in bits")) + +ip6prefixlen.placeholder = "16" +ip6prefixlen.datatype = "range(0,64)" + + +s:taboption("general", Value, "ealen", + translate("EA-bits length")).datatype = "range(0,48)" + +s:taboption("general", Value, "psidlen", + translate("PSID-bits length")).datatype = "range(0,16)" + +s:taboption("general", Value, "offset", + translate("PSID offset")).datatype = "range(0,16)" + +tunlink = section:taboption("advanced", DynamicList, "tunlink", translate("Tunnel Link")) +tunlink.template = "cbi/network_netlist" +tunlink.nocreate = true + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +ttl = section:taboption("advanced", Value, "ttl", translate("Use TTL on tunnel interface")) +ttl.placeholder = "64" +ttl.datatype = "range(1,255)" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Use MTU on tunnel interface")) +mtu.placeholder = "1280" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_4x6.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_4x6.lua new file mode 100644 index 0000000..d876d69 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_4x6.lua @@ -0,0 +1,63 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Copyright 2013 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local netmod = luci.model.network + +local _, p +for _, p in ipairs({"dslite", "map", "464xlat"}) do + + local proto = netmod:register_protocol(p) + + function proto.get_i18n(self) + if p == "dslite" then + return luci.i18n.translate("Dual-Stack Lite (RFC6333)") + elseif p == "map" then + return luci.i18n.translate("MAP / LW4over6") + elseif p == "464xlat" then + return luci.i18n.translate("464XLAT (CLAT)") + end + end + + function proto.ifname(self) + return p .. "-" .. self.sid + end + + function proto.opkg_package(self) + if p == "dslite" then + return "ds-lite" + elseif p == "map" then + return "map-t" + elseif p == "464xlat" then + return "464xlat" + end + end + + function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/" .. p .. ".sh") + end + + function proto.is_floating(self) + return true + end + + function proto.is_virtual(self) + return true + end + + function proto.get_interfaces(self) + return nil + end + + function proto.contains_interface(self, ifname) + return (netmod:ifnameof(ifc) == self:ifname()) + end + + if p == "dslite" then + netmod:register_pattern_virtual("^ds-%w") + elseif p == "map" then + netmod:register_pattern_virtual("^map-%w") + elseif p == "464xlat" then + netmod:register_pattern_virtual("^464-%w") + end +end diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_6x4.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_6x4.lua new file mode 100644 index 0000000..d267ce9 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_6x4.lua @@ -0,0 +1,50 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local netmod = luci.model.network + +local _, p +for _, p in ipairs({"6in4", "6to4", "6rd"}) do + + local proto = netmod:register_protocol(p) + + function proto.get_i18n(self) + if p == "6in4" then + return luci.i18n.translate("IPv6-in-IPv4 (RFC4213)") + elseif p == "6to4" then + return luci.i18n.translate("IPv6-over-IPv4 (6to4)") + elseif p == "6rd" then + return luci.i18n.translate("IPv6-over-IPv4 (6rd)") + end + end + + function proto.ifname(self) + return p .. "-" .. self.sid + end + + function proto.opkg_package(self) + return p + end + + function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/" .. p .. ".sh") + end + + function proto.is_floating(self) + return true + end + + function proto.is_virtual(self) + return true + end + + function proto.get_interfaces(self) + return nil + end + + function proto.contains_interface(self, ifname) + return (netmod:ifnameof(ifc) == self:ifname()) + end + + netmod:register_pattern_virtual("^%s-%%w" % p) +end diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_aiccu.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_aiccu.lua new file mode 100644 index 0000000..5896a27 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_aiccu.lua @@ -0,0 +1,49 @@ +-- Copyright 2015 Paul Oranje +-- Licensed to the public under GPLv2 + +local netmod = luci.model.network +local interface = luci.model.network.interface + +local proto = netmod:register_protocol("aiccu") + +function proto.get_i18n(self) + return luci.i18n.translate("AICCU (SIXXS)") +end + +function proto.ifname(self) + return "aiccu-" .. self.sid +end + +function proto.get_interface(self) + return interface(self:ifname(), self) +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/aiccu.sh") +end + +function proto.opkg_package(self) + return "aiccu" +end + +function proto.is_floating(self) + return true +end + +function proto.is_virtual(self) + return true +end + +function proto.get_interfaces(self) + return nil +end + +function proto.contains_interface(self, ifname) + if self:is_floating() then + return (netmod:ifnameof(ifc) == self:ifname()) + else + return netmod.protocol.contains_interface(self, ifc) + end +end + +netmod:register_pattern_virtual("^aiccu-%%w") diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_dhcpv6.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_dhcpv6.lua new file mode 100644 index 0000000..0b45dad --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_dhcpv6.lua @@ -0,0 +1,16 @@ +-- Copyright 2013 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local proto = luci.model.network:register_protocol("dhcpv6") + +function proto.get_i18n(self) + return luci.i18n.translate("DHCPv6 client") +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/dhcpv6.sh") +end + +function proto.opkg_package(self) + return "odhcp6c" +end diff --git a/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_hnet.lua b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_hnet.lua new file mode 100644 index 0000000..f525061 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ipv6/luasrc/model/network/proto_hnet.lua @@ -0,0 +1,16 @@ +-- Copyright 2014 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local proto = luci.model.network:register_protocol("hnet") + +function proto.get_i18n(self) + return luci.i18n.translate("Automatic Homenet (HNCP)") +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/hnet.sh") +end + +function proto.opkg_package(self) + return "hnet-full" +end diff --git a/feeds/luci/protocols/luci-proto-openconnect/Makefile b/feeds/luci/protocols/luci-proto-openconnect/Makefile new file mode 100644 index 0000000..31f5274 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-openconnect/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for OpenConnect VPN +LUCI_DEPENDS:=+openconnect + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/protocols/luci-proto-openconnect/luasrc/model/cbi/admin_network/proto_openconnect.lua b/feeds/luci/protocols/luci-proto-openconnect/luasrc/model/cbi/admin_network/proto_openconnect.lua new file mode 100644 index 0000000..ad3f2ed --- /dev/null +++ b/feeds/luci/protocols/luci-proto-openconnect/luasrc/model/cbi/admin_network/proto_openconnect.lua @@ -0,0 +1,86 @@ +-- Copyright 2014 Nikos Mavrogiannopoulos +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local server, username, password, cert, ca +local oc_cert_file, oc_key_file, oc_ca_file + +local ifc = net:get_interface():name() + +oc_cert_file = "/etc/openconnect/user-cert-" .. ifc .. ".pem" +oc_key_file = "/etc/openconnect/user-key-" .. ifc .. ".pem" +oc_ca_file = "/etc/openconnect/ca-" .. ifc .. ".pem" + +server = section:taboption("general", Value, "server", translate("VPN Server")) +server.datatype = "host(0)" + +port = section:taboption("general", Value, "port", translate("VPN Server port")) +port.placeholder = "443" +port.datatype = "port" + +ifname = section:taboption("general", Value, "interface", translate("Output Interface")) +ifname.template = "cbi/network_netlist" + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + +section:taboption("general", Value, "serverhash", translate("VPN Server's certificate SHA1 hash")) + +section:taboption("general", Value, "authgroup", translate("AuthGroup")) + +username = section:taboption("general", Value, "username", translate("Username")) +password = section:taboption("general", Value, "password", translate("Password")) +password.password = true + + +cert = section:taboption("advanced", Value, "usercert", translate("User certificate (PEM encoded)")) +cert.template = "cbi/tvalue" +cert.rows = 10 + +function cert.cfgvalue(self, section) + return nixio.fs.readfile(oc_cert_file) +end + +function cert.write(self, section, value) + value = value:gsub("\r\n?", "\n") + nixio.fs.writefile(oc_cert_file, value) +end + +cert = section:taboption("advanced", Value, "userkey", translate("User key (PEM encoded)")) +cert.template = "cbi/tvalue" +cert.rows = 10 + +function cert.cfgvalue(self, section) + return nixio.fs.readfile(oc_key_file) +end + +function cert.write(self, section, value) + value = value:gsub("\r\n?", "\n") + nixio.fs.writefile(oc_key_file, value) +end + + +ca = section:taboption("advanced", Value, "ca", translate("CA certificate; if empty it will be saved after the first connection.")) +ca.template = "cbi/tvalue" +ca.rows = 10 + +function ca.cfgvalue(self, section) + return nixio.fs.readfile(oc_ca_file) +end + +function ca.write(self, section, value) + value = value:gsub("\r\n?", "\n") + nixio.fs.writefile(oc_ca_file, value) +end diff --git a/feeds/luci/protocols/luci-proto-openconnect/luasrc/model/network/proto_openconnect.lua b/feeds/luci/protocols/luci-proto-openconnect/luasrc/model/network/proto_openconnect.lua new file mode 100644 index 0000000..0af77d0 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-openconnect/luasrc/model/network/proto_openconnect.lua @@ -0,0 +1,45 @@ +-- Copyright 2012 David Woodhouse +-- Licensed to the public under the Apache License 2.0. + +local netmod = luci.model.network +local interface = luci.model.network.interface +local proto = netmod:register_protocol("openconnect") + +function proto.get_i18n(self) + return luci.i18n.translate("OpenConnect (CISCO AnyConnect)") +end + +function proto.ifname(self) + return "vpn-" .. self.sid +end + +function proto.get_interface(self) + return interface(self:ifname(), self) +end + +function proto.opkg_package(self) + return "openconnect" +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/openconnect.sh") +end + +function proto.is_floating(self) + return true +end + +function proto.is_virtual(self) + return true +end + +function proto.get_interfaces(self) + return nil +end + +function proto.contains_interface(self, ifc) + return (netmod:ifnameof(ifc) == self:ifname()) + +end + +netmod:register_pattern_virtual("^vpn-%w") diff --git a/feeds/luci/protocols/luci-proto-ppp/Makefile b/feeds/luci/protocols/luci-proto-ppp/Makefile new file mode 100644 index 0000000..70db744 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ppp/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for PPP/PPPoE/PPPoA/PPtP +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_l2tp.lua b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_l2tp.lua new file mode 100644 index 0000000..506170c --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_l2tp.lua @@ -0,0 +1,61 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local server, username, password +local ipv6, defaultroute, metric, peerdns, dns, mtu + + +server = section:taboption("general", Value, "server", translate("L2TP Server")) +server.datatype = "or(host(1), hostport(1))" + + +username = section:taboption("general", Value, "username", translate("PAP/CHAP username")) + + +password = section:taboption("general", Value, "password", translate("PAP/CHAP password")) +password.password = true + +if luci.model.network:has_ipv6() then + + ipv6 = section:taboption("advanced", ListValue, "ipv6") + ipv6:value("auto", translate("Automatic")) + ipv6:value("0", translate("Disabled")) + ipv6:value("1", translate("Manual")) + ipv6.default = "auto" + +end + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +peerdns = section:taboption("advanced", Flag, "peerdns", + translate("Use DNS servers advertised by peer"), + translate("If unchecked, the advertised DNS server addresses are ignored")) + +peerdns.default = peerdns.enabled + + +dns = section:taboption("advanced", DynamicList, "dns", + translate("Use custom DNS servers")) + +dns:depends("peerdns", "") +dns.datatype = "ipaddr" +dns.cast = "string" + +mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU")) +mtu.placeholder = "1500" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_ppp.lua b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_ppp.lua new file mode 100644 index 0000000..b14db59 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_ppp.lua @@ -0,0 +1,127 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local device, username, password +local ipv6, defaultroute, metric, peerdns, dns, + keepalive_failure, keepalive_interval, demand, mtu + + +device = section:taboption("general", Value, "device", translate("Modem device")) +device.rmempty = false + +local device_suggestions = nixio.fs.glob("/dev/tty*S*") + or nixio.fs.glob("/dev/tts/*") + +if device_suggestions then + local node + for node in device_suggestions do + device:value(node) + end +end + + +username = section:taboption("general", Value, "username", translate("PAP/CHAP username")) + + +password = section:taboption("general", Value, "password", translate("PAP/CHAP password")) +password.password = true + + +if luci.model.network:has_ipv6() then + + ipv6 = section:taboption("advanced", ListValue, "ipv6") + ipv6:value("auto", translate("Automatic")) + ipv6:value("0", translate("Disabled")) + ipv6:value("1", translate("Manual")) + ipv6.default = "auto" + +end + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +peerdns = section:taboption("advanced", Flag, "peerdns", + translate("Use DNS servers advertised by peer"), + translate("If unchecked, the advertised DNS server addresses are ignored")) + +peerdns.default = peerdns.enabled + + +dns = section:taboption("advanced", DynamicList, "dns", + translate("Use custom DNS servers")) + +dns:depends("peerdns", "") +dns.datatype = "ipaddr" +dns.cast = "string" + + +keepalive_failure = section:taboption("advanced", Value, "_keepalive_failure", + translate("LCP echo failure threshold"), + translate("Presume peer to be dead after given amount of LCP echo failures, use 0 to ignore failures")) + +function keepalive_failure.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^(%d+)[ ,]+%d+") or v) + end +end + +keepalive_failure.placeholder = "0" +keepalive_failure.datatype = "uinteger" + + +keepalive_interval = section:taboption("advanced", Value, "_keepalive_interval", + translate("LCP echo interval"), + translate("Send LCP echo requests at the given interval in seconds, only effective in conjunction with failure threshold")) + +function keepalive_interval.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^%d+[ ,]+(%d+)")) + end +end + +function keepalive_interval.write(self, section, value) + local f = tonumber(keepalive_failure:formvalue(section)) or 0 + local i = tonumber(value) or 5 + if i < 1 then i = 1 end + if f > 0 then + m:set(section, "keepalive", "%d %d" %{ f, i }) + else + m:del(section, "keepalive") + end +end + +keepalive_interval.remove = keepalive_interval.write +keepalive_failure.write = keepalive_interval.write +keepalive_failure.remove = keepalive_interval.write +keepalive_interval.placeholder = "5" +keepalive_interval.datatype = "min(1)" + + +demand = section:taboption("advanced", Value, "demand", + translate("Inactivity timeout"), + translate("Close inactive connection after the given amount of seconds, use 0 to persist connection")) + +demand.placeholder = "0" +demand.datatype = "uinteger" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU")) +mtu.placeholder = "1500" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppoa.lua b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppoa.lua new file mode 100644 index 0000000..8f463e5 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppoa.lua @@ -0,0 +1,133 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local encaps, atmdev, vci, vpi, username, password +local ipv6, defaultroute, metric, peerdns, dns, + keepalive_failure, keepalive_interval, demand, mtu + + +encaps = section:taboption("general", ListValue, "encaps", translate("PPPoA Encapsulation")) +encaps:value("vc", "VC-Mux") +encaps:value("llc", "LLC") + + +atmdev = section:taboption("general", Value, "atmdev", translate("ATM device number")) +atmdev.default = "0" +atmdev.datatype = "uinteger" + + +vci = section:taboption("general", Value, "vci", translate("ATM Virtual Channel Identifier (VCI)")) +vci.default = "35" +vci.datatype = "uinteger" + + +vpi = section:taboption("general", Value, "vpi", translate("ATM Virtual Path Identifier (VPI)")) +vpi.default = "8" +vpi.datatype = "uinteger" + + +username = section:taboption("general", Value, "username", translate("PAP/CHAP username")) + + +password = section:taboption("general", Value, "password", translate("PAP/CHAP password")) +password.password = true + + +if luci.model.network:has_ipv6() then + + ipv6 = section:taboption("advanced", ListValue, "ipv6") + ipv6:value("auto", translate("Automatic")) + ipv6:value("0", translate("Disabled")) + ipv6:value("1", translate("Manual")) + ipv6.default = "auto" + +end + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +peerdns = section:taboption("advanced", Flag, "peerdns", + translate("Use DNS servers advertised by peer"), + translate("If unchecked, the advertised DNS server addresses are ignored")) + +peerdns.default = peerdns.enabled + + +dns = section:taboption("advanced", DynamicList, "dns", + translate("Use custom DNS servers")) + +dns:depends("peerdns", "") +dns.datatype = "ipaddr" +dns.cast = "string" + + +keepalive_failure = section:taboption("advanced", Value, "_keepalive_failure", + translate("LCP echo failure threshold"), + translate("Presume peer to be dead after given amount of LCP echo failures, use 0 to ignore failures")) + +function keepalive_failure.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^(%d+)[ ,]+%d+") or v) + end +end + +keepalive_failure.placeholder = "0" +keepalive_failure.datatype = "uinteger" + + +keepalive_interval = section:taboption("advanced", Value, "_keepalive_interval", + translate("LCP echo interval"), + translate("Send LCP echo requests at the given interval in seconds, only effective in conjunction with failure threshold")) + +function keepalive_interval.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^%d+[ ,]+(%d+)")) + end +end + +function keepalive_interval.write(self, section, value) + local f = tonumber(keepalive_failure:formvalue(section)) or 0 + local i = tonumber(value) or 5 + if i < 1 then i = 1 end + if f > 0 then + m:set(section, "keepalive", "%d %d" %{ f, i }) + else + m:del(section, "keepalive") + end +end + +keepalive_interval.remove = keepalive_interval.write +keepalive_failure.write = keepalive_interval.write +keepalive_failure.remove = keepalive_interval.write +keepalive_interval.placeholder = "5" +keepalive_interval.datatype = "min(1)" + + +demand = section:taboption("advanced", Value, "demand", + translate("Inactivity timeout"), + translate("Close inactive connection after the given amount of seconds, use 0 to persist connection")) + +demand.placeholder = "0" +demand.datatype = "uinteger" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU")) +mtu.placeholder = "1500" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppoe.lua b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppoe.lua new file mode 100644 index 0000000..5a05cd2 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppoe.lua @@ -0,0 +1,127 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local username, password, ac, service +local ipv6, defaultroute, metric, peerdns, dns, + keepalive_failure, keepalive_interval, demand, mtu + + +username = section:taboption("general", Value, "username", translate("PAP/CHAP username")) + + +password = section:taboption("general", Value, "password", translate("PAP/CHAP password")) +password.password = true + + +ac = section:taboption("general", Value, "ac", + translate("Access Concentrator"), + translate("Leave empty to autodetect")) + +ac.placeholder = translate("auto") + + +service = section:taboption("general", Value, "service", + translate("Service Name"), + translate("Leave empty to autodetect")) + +service.placeholder = translate("auto") + + +if luci.model.network:has_ipv6() then + + ipv6 = section:taboption("advanced", ListValue, "ipv6") + ipv6:value("auto", translate("Automatic")) + ipv6:value("0", translate("Disabled")) + ipv6:value("1", translate("Manual")) + ipv6.default = "auto" + +end + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +peerdns = section:taboption("advanced", Flag, "peerdns", + translate("Use DNS servers advertised by peer"), + translate("If unchecked, the advertised DNS server addresses are ignored")) + +peerdns.default = peerdns.enabled + + +dns = section:taboption("advanced", DynamicList, "dns", + translate("Use custom DNS servers")) + +dns:depends("peerdns", "") +dns.datatype = "ipaddr" +dns.cast = "string" + + +keepalive_failure = section:taboption("advanced", Value, "_keepalive_failure", + translate("LCP echo failure threshold"), + translate("Presume peer to be dead after given amount of LCP echo failures, use 0 to ignore failures")) + +function keepalive_failure.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^(%d+)[ ,]+%d+") or v) + end +end + +keepalive_failure.placeholder = "0" +keepalive_failure.datatype = "uinteger" + + +keepalive_interval = section:taboption("advanced", Value, "_keepalive_interval", + translate("LCP echo interval"), + translate("Send LCP echo requests at the given interval in seconds, only effective in conjunction with failure threshold")) + +function keepalive_interval.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^%d+[ ,]+(%d+)")) + end +end + +function keepalive_interval.write(self, section, value) + local f = tonumber(keepalive_failure:formvalue(section)) or 0 + local i = tonumber(value) or 5 + if i < 1 then i = 1 end + if f > 0 then + m:set(section, "keepalive", "%d %d" %{ f, i }) + else + m:del(section, "keepalive") + end +end + +keepalive_interval.remove = keepalive_interval.write +keepalive_failure.write = keepalive_interval.write +keepalive_failure.remove = keepalive_interval.write +keepalive_interval.placeholder = "5" +keepalive_interval.datatype = "min(1)" + + +demand = section:taboption("advanced", Value, "demand", + translate("Inactivity timeout"), + translate("Close inactive connection after the given amount of seconds, use 0 to persist connection")) + +demand.placeholder = "0" +demand.datatype = "uinteger" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU")) +mtu.placeholder = "1500" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppossh.lua b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppossh.lua new file mode 100644 index 0000000..eca7bdd --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppossh.lua @@ -0,0 +1,122 @@ +-- Copyright (C) 2015 Yousong Zhou +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local sshuser, server, port, ssh_options, identity, ipaddr, peeraddr + +sshuser = section:taboption("general", Value, "sshuser", translate("SSH username")) + +server = section:taboption("general", Value, "server", translate("SSH server address")) +server.datatype = "host(0)" + +port = section:taboption("general", Value, "port", translate("SSH server port")) +port.datatype = "port" +port.optional = true +port.default = 22 + +ssh_options = section:taboption("general", Value, "ssh_options", translate("Extra SSH command options")) +ssh_options.optional = true + +identity = section:taboption("general", DynamicList, "identity", translate("List of SSH key files for auth")) +identity.optional = true +identity.datatype = "file" + +ipaddr = section:taboption("general", Value, "ipaddr", translate("Local IP address to assign")) +ipaddr.datatype = "ipaddr" + +peeraddr = section:taboption("general", Value, "peeraddr", translate("Peer IP address to assign")) +peeraddr.datatype = "ipaddr" + + +local ipv6, defaultroute, metric, peerdns, dns, + keepalive_failure, keepalive_interval, demand + +if luci.model.network:has_ipv6() then + ipv6 = section:taboption("advanced", Flag, "ipv6", + translate("Enable IPv6 negotiation on the PPP link")) + ipv6.default = ipv6.disabled +end + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +peerdns = section:taboption("advanced", Flag, "peerdns", + translate("Use DNS servers advertised by peer"), + translate("If unchecked, the advertised DNS server addresses are ignored")) + +peerdns.default = peerdns.enabled + + +dns = section:taboption("advanced", DynamicList, "dns", + translate("Use custom DNS servers")) + +dns:depends("peerdns", "") +dns.datatype = "ipaddr" +dns.cast = "string" + + +keepalive_failure = section:taboption("advanced", Value, "_keepalive_failure", + translate("LCP echo failure threshold"), + translate("Presume peer to be dead after given amount of LCP echo failures, use 0 to ignore failures")) + +function keepalive_failure.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^(%d+)[ ,]+%d+") or v) + end +end + +function keepalive_failure.write() end +function keepalive_failure.remove() end + +keepalive_failure.placeholder = "0" +keepalive_failure.datatype = "uinteger" + + +keepalive_interval = section:taboption("advanced", Value, "_keepalive_interval", + translate("LCP echo interval"), + translate("Send LCP echo requests at the given interval in seconds, only effective in conjunction with failure threshold")) + +function keepalive_interval.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^%d+[ ,]+(%d+)")) + end +end + +function keepalive_interval.write(self, section, value) + local f = tonumber(keepalive_failure:formvalue(section)) or 0 + local i = tonumber(value) or 5 + if i < 1 then i = 1 end + if f > 0 then + m:set(section, "keepalive", "%d %d" %{ f, i }) + else + m:del(section, "keepalive") + end +end + +keepalive_interval.remove = keepalive_interval.write +keepalive_interval.placeholder = "5" +keepalive_interval.datatype = "min(1)" + + +demand = section:taboption("advanced", Value, "demand", + translate("Inactivity timeout"), + translate("Close inactive connection after the given amount of seconds, use 0 to persist connection")) + +demand.placeholder = "0" +demand.datatype = "uinteger" diff --git a/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pptp.lua b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pptp.lua new file mode 100644 index 0000000..462d701 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pptp.lua @@ -0,0 +1,106 @@ +-- Copyright 2011-2012 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local server, username, password +local defaultroute, metric, peerdns, dns, + keepalive_failure, keepalive_interval, demand, mtu + + +server = section:taboption("general", Value, "server", translate("VPN Server")) +server.datatype = "host(0)" + + +username = section:taboption("general", Value, "username", translate("PAP/CHAP username")) + + +password = section:taboption("general", Value, "password", translate("PAP/CHAP password")) +password.password = true + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +peerdns = section:taboption("advanced", Flag, "peerdns", + translate("Use DNS servers advertised by peer"), + translate("If unchecked, the advertised DNS server addresses are ignored")) + +peerdns.default = peerdns.enabled + + +dns = section:taboption("advanced", DynamicList, "dns", + translate("Use custom DNS servers")) + +dns:depends("peerdns", "") +dns.datatype = "ipaddr" +dns.cast = "string" + + +keepalive_failure = section:taboption("advanced", Value, "_keepalive_failure", + translate("LCP echo failure threshold"), + translate("Presume peer to be dead after given amount of LCP echo failures, use 0 to ignore failures")) + +function keepalive_failure.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^(%d+)[ ,]+%d+") or v) + end +end + +keepalive_failure.placeholder = "0" +keepalive_failure.datatype = "uinteger" + + +keepalive_interval = section:taboption("advanced", Value, "_keepalive_interval", + translate("LCP echo interval"), + translate("Send LCP echo requests at the given interval in seconds, only effective in conjunction with failure threshold")) + +function keepalive_interval.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^%d+[ ,]+(%d+)")) + end +end + +function keepalive_interval.write(self, section, value) + local f = tonumber(keepalive_failure:formvalue(section)) or 0 + local i = tonumber(value) or 5 + if i < 1 then i = 1 end + if f > 0 then + m:set(section, "keepalive", "%d %d" %{ f, i }) + else + m:del(section, "keepalive") + end +end + +keepalive_interval.remove = keepalive_interval.write +keepalive_failure.write = keepalive_interval.write +keepalive_failure.remove = keepalive_interval.write +keepalive_interval.placeholder = "5" +keepalive_interval.datatype = "min(1)" + + +demand = section:taboption("advanced", Value, "demand", + translate("Inactivity timeout"), + translate("Close inactive connection after the given amount of seconds, use 0 to persist connection")) + +demand.placeholder = "0" +demand.datatype = "uinteger" + + +mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU")) +mtu.placeholder = "1500" +mtu.datatype = "max(9200)" diff --git a/feeds/luci/protocols/luci-proto-ppp/luasrc/model/network/proto_ppp.lua b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/network/proto_ppp.lua new file mode 100644 index 0000000..7bbd78f --- /dev/null +++ b/feeds/luci/protocols/luci-proto-ppp/luasrc/model/network/proto_ppp.lua @@ -0,0 +1,94 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local netmod = luci.model.network + +local _, p +for _, p in ipairs({"ppp", "pptp", "pppoe", "pppoa", "3g", "l2tp", "pppossh"}) do + + local proto = netmod:register_protocol(p) + + function proto.get_i18n(self) + if p == "ppp" then + return luci.i18n.translate("PPP") + elseif p == "pptp" then + return luci.i18n.translate("PPtP") + elseif p == "3g" then + return luci.i18n.translate("UMTS/GPRS/EV-DO") + elseif p == "pppoe" then + return luci.i18n.translate("PPPoE") + elseif p == "pppoa" then + return luci.i18n.translate("PPPoATM") + elseif p == "l2tp" then + return luci.i18n.translate("L2TP") + elseif p == "pppossh" then + return luci.i18n.translate("PPPoSSH") + end + end + + function proto.ifname(self) + return p .. "-" .. self.sid + end + + function proto.opkg_package(self) + if p == "ppp" then + return p + elseif p == "3g" then + return "comgt" + elseif p == "pptp" then + return "ppp-mod-pptp" + elseif p == "pppoe" then + return "ppp-mod-pppoe" + elseif p == "pppoa" then + return "ppp-mod-pppoa" + elseif p == "l2tp" then + return "xl2tpd" + elseif p == "pppossh" then + return "pppossh" + end + end + + function proto.is_installed(self) + if p == "pppoa" then + return (nixio.fs.glob("/usr/lib/pppd/*/pppoatm.so")() ~= nil) + elseif p == "pppoe" then + return (nixio.fs.glob("/usr/lib/pppd/*/rp-pppoe.so")() ~= nil) + elseif p == "pptp" then + return (nixio.fs.glob("/usr/lib/pppd/*/pptp.so")() ~= nil) + elseif p == "3g" then + return nixio.fs.access("/lib/netifd/proto/3g.sh") + elseif p == "l2tp" then + return nixio.fs.access("/lib/netifd/proto/l2tp.sh") + elseif p == "pppossh" then + return nixio.fs.access("/lib/netifd/proto/pppossh.sh") + else + return nixio.fs.access("/lib/netifd/proto/ppp.sh") + end + end + + function proto.is_floating(self) + return (p ~= "pppoe") + end + + function proto.is_virtual(self) + return true + end + + function proto.get_interfaces(self) + if self:is_floating() then + return nil + else + return netmod.protocol.get_interfaces(self) + end + end + + function proto.contains_interface(self, ifc) + if self:is_floating() then + return (netmod:ifnameof(ifc) == self:ifname()) + else + return netmod.protocol.contains_interface(self, ifc) + end + end + + netmod:register_pattern_virtual("^%s-%%w" % p) +end diff --git a/feeds/luci/protocols/luci-proto-qmi/Makefile b/feeds/luci/protocols/luci-proto-qmi/Makefile new file mode 100644 index 0000000..8b2b5e3 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-qmi/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for QMI +LUCI_DEPENDS:=+uqmi + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/protocols/luci-proto-qmi/luasrc/model/cbi/admin_network/proto_qmi.lua b/feeds/luci/protocols/luci-proto-qmi/luasrc/model/cbi/admin_network/proto_qmi.lua new file mode 100644 index 0000000..e11201d --- /dev/null +++ b/feeds/luci/protocols/luci-proto-qmi/luasrc/model/cbi/admin_network/proto_qmi.lua @@ -0,0 +1,45 @@ +-- Copyright 2016 David Thornley +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local device, apn, pincode, username, password +local auth, ipv6 + + +device = section:taboption("general", Value, "device", translate("Modem device")) +device.rmempty = false + +local device_suggestions = nixio.fs.glob("/dev/cdc-wdm*") + +if device_suggestions then + local node + for node in device_suggestions do + device:value(node) + end +end + + +apn = section:taboption("general", Value, "apn", translate("APN")) + + +pincode = section:taboption("general", Value, "pincode", translate("PIN")) + + +username = section:taboption("general", Value, "username", translate("PAP/CHAP username")) + + +password = section:taboption("general", Value, "password", translate("PAP/CHAP password")) +password.password = true + +auth = section:taboption("general", Value, "auth", translate("Authentication Type")) +auth:value("", translate("-- Please choose --")) +auth:value("both", "PAP/CHAP (both)") +auth:value("pap", "PAP") +auth:value("chap", "CHAP") +auth:value("none", "NONE") + +if luci.model.network:has_ipv6() then + ipv6 = section:taboption("advanced", Flag, "ipv6", translate("Enable IPv6 negotiation")) + ipv6.default = ipv6.disabled +end diff --git a/feeds/luci/protocols/luci-proto-qmi/luasrc/model/network/proto_qmi.lua b/feeds/luci/protocols/luci-proto-qmi/luasrc/model/network/proto_qmi.lua new file mode 100644 index 0000000..cca8af1 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-qmi/luasrc/model/network/proto_qmi.lua @@ -0,0 +1,51 @@ +-- Copyright 2016 David Thornley +-- Licensed to the public under the Apache License 2.0. + +local netmod = luci.model.network +local interface = luci.model.network.interface +local proto = netmod:register_protocol("qmi") + +function proto.get_i18n(self) + return luci.i18n.translate("QMI Cellular") +end + +function proto.ifname(self) + local base = netmod._M.protocol + local ifname = base.ifname(self) -- call base class "protocol.ifname(self)" + + -- Note: ifname might be nil if the adapter could not be determined through ubus (default name to qmi-wan in this case) + if ifname == nil then + ifname = "qmi-" .. self.sid + end + return ifname +end + +function proto.get_interface(self) + return interface(self:ifname(), self) +end + +function proto.opkg_package(self) + return "uqmi" +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/qmi.sh") +end + +function proto.is_floating(self) + return true +end + +function proto.is_virtual(self) + return true +end + +function proto.get_interfaces(self) + return nil +end + +function proto.contains_interface(self, ifc) + return (netmod:ifnameof(ifc) == self:ifname()) +end + +netmod:register_pattern_virtual("^qmi-%w") diff --git a/feeds/luci/protocols/luci-proto-relay/Makefile b/feeds/luci/protocols/luci-proto-relay/Makefile new file mode 100644 index 0000000..d9c04f7 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-relay/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for relayd pseudo bridges +LUCI_DEPENDS:=+relayd + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/protocols/luci-proto-relay/luasrc/model/cbi/admin_network/proto_relay.lua b/feeds/luci/protocols/luci-proto-relay/luasrc/model/cbi/admin_network/proto_relay.lua new file mode 100644 index 0000000..3381d85 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-relay/luasrc/model/cbi/admin_network/proto_relay.lua @@ -0,0 +1,68 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local ipaddr, network +local forward_bcast, forward_dhcp, gateway, expiry, retry, table + + +ipaddr = section:taboption("general", Value, "ipaddr", + translate("Local IPv4 address"), + translate("Address to access local relay bridge")) + +ipaddr.datatype = "ip4addr" + + +network = s:taboption("general", DynamicList, "network", translate("Relay between networks")) +network.widget = "checkbox" +network.exclude = arg[1] +network.template = "cbi/network_netlist" +network.nocreate = true +network.nobridges = true +network.novirtual = true +network:depends("proto", "relay") + + +forward_bcast = section:taboption("advanced", Flag, "forward_bcast", + translate("Forward broadcast traffic")) + +forward_bcast.default = forward_bcast.enabled + + +forward_dhcp = section:taboption("advanced", Flag, "forward_dhcp", + translate("Forward DHCP traffic")) + +forward_dhcp.default = forward_dhcp.enabled + + +gateway = section:taboption("advanced", Value, "gateway", + translate("Use DHCP gateway"), + translate("Override the gateway in DHCP responses")) + +gateway.datatype = "ip4addr" +gateway:depends("forward_dhcp", forward_dhcp.enabled) + + +expiry = section:taboption("advanced", Value, "expiry", + translate("Host expiry timeout"), + translate("Specifies the maximum amount of seconds after which hosts are presumed to be dead")) + +expiry.placeholder = "30" +expiry.datatype = "min(1)" + + +retry = section:taboption("advanced", Value, "retry", + translate("ARP retry threshold"), + translate("Specifies the maximum amount of failed ARP requests until hosts are presumed to be dead")) + +retry.placeholder = "5" +retry.datatype = "min(1)" + + +table = section:taboption("advanced", Value, "table", + translate("Use routing table"), + translate("Override the table used for internal routes")) + +table.placeholder = "16800" +table.datatype = "range(0,65535)" diff --git a/feeds/luci/protocols/luci-proto-relay/luasrc/model/network/proto_relay.lua b/feeds/luci/protocols/luci-proto-relay/luasrc/model/network/proto_relay.lua new file mode 100644 index 0000000..5d40fc7 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-relay/luasrc/model/network/proto_relay.lua @@ -0,0 +1,149 @@ +-- Copyright 2011 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +local netmod = luci.model.network +local device = luci.util.class(netmod.interface) + +netmod:register_pattern_virtual("^relay-%w") + +local proto = netmod:register_protocol("relay") + +function proto.get_i18n(self) + return luci.i18n.translate("Relay bridge") +end + +function proto.ifname(self) + return "relay-" .. self.sid +end + +function proto.opkg_package(self) + return "relayd" +end + +function proto.is_installed(self) + return nixio.fs.access("/etc/init.d/relayd") +end + +function proto.is_floating(self) + return true +end + +function proto.is_virtual(self) + return true +end + +function proto.get_interface(self) + return device(self.sid, self) +end + +function proto.get_interfaces(self) + if not self.ifaces then + local ifs = { } + local _, net, dev + + for net in luci.util.imatch(self:_get("network")) do + net = netmod:get_network(net) + if net then + dev = net:get_interface() + if dev then + ifs[dev:name()] = dev + end + end + end + + for dev in luci.util.imatch(self:_get("ifname")) do + dev = netmod:get_interface(dev) + if dev then + ifs[dev:name()] = dev + end + end + + self.ifaces = { } + + for _, dev in luci.util.kspairs(ifs) do + self.ifaces[#self.ifaces+1] = dev + end + end + + return self.ifaces +end + +function proto.uptime(self) + local net + local upt = 0 + for net in luci.util.imatch(self:_get("network")) do + net = netmod:get_network(net) + if net then + upt = math.max(upt, net:uptime()) + end + end + return upt +end + + +function device.__init__(self, ifname, network) + self.ifname = ifname + self.network = network +end + +function device.type(self) + return "tunnel" +end + +function device.is_up(self) + if self.network then + local _, dev + for _, dev in ipairs(self.network:get_interfaces()) do + if not dev:is_up() then + return false + end + end + return true + end + return false +end + +function device._stat(self, what) + local v = 0 + if self.network then + local _, dev + for _, dev in ipairs(self.network:get_interfaces()) do + v = v + dev[what](dev) + end + end + return v +end + +function device.rx_bytes(self) return self:_stat("rx_bytes") end +function device.tx_bytes(self) return self:_stat("tx_bytes") end +function device.rx_packets(self) return self:_stat("rx_packets") end +function device.tx_packets(self) return self:_stat("tx_packets") end + +function device.mac(self) + if self.network then + local _, dev + for _, dev in ipairs(self.network:get_interfaces()) do + return dev:mac() + end + end +end + +function device.ipaddrs(self) + local addrs = { } + if self.network then + addrs[1] = luci.ip.IPv4(self.network:_get("ipaddr")) + end + return addrs +end + +function device.ip6addrs(self) + return { } +end + +function device.shortname(self) + return "%s %q" % { luci.i18n.translate("Relay"), self.ifname } +end + +function device.get_type_i18n(self) + return luci.i18n.translate("Relay Bridge") +end diff --git a/feeds/luci/protocols/luci-proto-vpnc/Makefile b/feeds/luci/protocols/luci-proto-vpnc/Makefile new file mode 100644 index 0000000..9c77e67 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-vpnc/Makefile @@ -0,0 +1,23 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for VPNC VPN +LUCI_DEPENDS:=+vpnc +LUCI_PKGARCH:=all + +PKG_NAME:=luci-proto-vpnc +PKG_RELEASE=1 +PKG_VERSION:=1.0.0 +PKG_MAINTAINER:=Daniel Dickinson +PKG_LICENSE:=Apache-2.0 + +LUA_TARGET:=source + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature \ No newline at end of file diff --git a/feeds/luci/protocols/luci-proto-vpnc/luasrc/model/cbi/admin_network/proto_vpnc.lua b/feeds/luci/protocols/luci-proto-vpnc/luasrc/model/cbi/admin_network/proto_vpnc.lua new file mode 100644 index 0000000..a47ce15 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-vpnc/luasrc/model/cbi/admin_network/proto_vpnc.lua @@ -0,0 +1,79 @@ +-- Copyright 2015 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local server, username, password, hexpassword +local authgroup, interface, passgroup, hexpassgroup +local domain, vendor, natt_mode, dh_group +local pfs, enable_single_des, enable_no_enc +local mtu, local_addr, local_port, dpd_idle +local auth_mode, target_network + +local ifc = net:get_interface():name() + +server = section:taboption("general", Value, "server", translate("VPN Server")) +server.datatype = "host(0)" + +port = section:taboption("general", Value, "local_addr", translate("VPN Local address")) +port.placeholder = "0.0.0.0" +port.datatype = "ipaddr" + +port = section:taboption("general", Value, "local_port", translate("VPN Local port")) +port.placeholder = "500" +port.datatype = "port" + +ifname = section:taboption("general", Value, "interface", translate("Output Interface")) +ifname.template = "cbi/network_netlist" + +mtu = section:taboption("general", Value, "mtu", translate("MTU")) +mtu.datatype = "uinteger" + +username = section:taboption("general", Value, "username", translate("Username")) +password = section:taboption("general", Value, "password", translate("Password")) +password.password = true +hexpassword = section:taboption("general", Value, "hexpassword", translate("Obfuscated Password")) +hexpassword.password = true +authroup = section:taboption("general", Value, "authgroup", translate("Auth Group")) +passgroup = section:taboption("general", Value, "passgroup", translate("Group Password")) +passgroup.password = true +hexpassgroup = section:taboption("general", Value, "hexpassgroup", translate("Obfuscated Group Password")) +hexpassword.password= true + +domain = section:taboption("general", Value, "domain", translate("NT Domain")) +vendor = section:taboption("general", Value, "vendor", translate("Vendor")) +dh_group = section:taboption("general", ListValue, "dh_group", translate("IKE DH Group")) +dh_group:value("dh2") +dh_group:value("dh1") +dh_group:value("dh5") + +pfs = section:taboption("general", ListValue, "pfs", translate("Perfect Forward Secrecy")) +pfs:value("server") +pfs:value("nopfs") +pfs:value("dh1") +pfs:value("dh2") +pfs:value("dh5") + +natt_mode = section:taboption("general", ListValue, "natt_mode", translate("NAT-T Mode")) +natt_mode:value("natt", translate("RFC3947 NAT-T mode")) +natt_mode:value("none", translate("No NAT-T")) +natt_mode:value("force-natt", translate("Force use of NAT-T")) +natt_mode:value("cisco-udp", translate("Cisco UDP encapsulation")) + +enable_no_enc = section:taboption("general", Flag, "enable_no_enc", + translate("Disable Encryption"), + translate("If checked, encryption is disabled")) +enable_no_enc.default = enable_no_enc.disabled + +enable_single_des = section:taboption("general", Flag, "enable_single_des", + translate("Enable Single DES"), + translate("If checked, 1DES is enaled")) +enable_no_enc.default = enable_single_des.disabled + +dpd_idle = section:taboption("general", Value, "dpd_idle", translate("DPD Idle Timeout")) +dpd_idle.datatype = "uinteger" +dpd_idle.placeholder = "600" + +ifname = section:taboption("general", Value, "target_network", translate("Target network")) +port.placeholder = "0.0.0.0/0" +port.datatype = "network" diff --git a/feeds/luci/protocols/luci-proto-vpnc/luasrc/model/network/proto_vpnc.lua b/feeds/luci/protocols/luci-proto-vpnc/luasrc/model/network/proto_vpnc.lua new file mode 100644 index 0000000..f4cae0b --- /dev/null +++ b/feeds/luci/protocols/luci-proto-vpnc/luasrc/model/network/proto_vpnc.lua @@ -0,0 +1,46 @@ +-- Copyright 2015 Daniel Dickinson +-- Licensed to the public under the Apache License 2.0. + +local netmod = luci.model.network +local interface = luci.model.network.interface +local proto = netmod:register_protocol("vpnc") + +function proto.get_i18n(self) + return luci.i18n.translate("VPNC (CISCO 3000 (and others) VPN)") +end + +function proto.ifname(self) + return "vpn-" .. self.sid +end + +function proto.get_interface(self) + return interface(self:ifname(), self) +end + +function proto.opkg_package(self) + return "vpnc" +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/vpnc.sh") +end + +function proto.is_floating(self) + return true +end + +function proto.is_virtual(self) + return true +end + +function proto.get_interfaces(self) + return nil +end + +function proto.contains_interface(self, ifc) + return (netmod:ifnameof(ifc) == self:ifname()) + +end + +netmod:register_pattern_virtual("^vpn-%w") + diff --git a/feeds/luci/protocols/luci-proto-wireguard/Makefile b/feeds/luci/protocols/luci-proto-wireguard/Makefile new file mode 100644 index 0000000..ed94a55 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-wireguard/Makefile @@ -0,0 +1,16 @@ +# +# Copyright (C) 2016 Dan Luedtke +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for WireGuard VPN +LUCI_DEPENDS:=+kmod-wireguard +wireguard-tools + +PKG_MAINTAINER:=Dan Luedtke + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua b/feeds/luci/protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua new file mode 100644 index 0000000..e585324 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua @@ -0,0 +1,158 @@ +-- Copyright 2016-2017 Dan Luedtke +-- Licensed to the public under the Apache License 2.0. + + +local map, section, net = ... +local ifname = net:get_interface():name() +local private_key, listen_port +local metric, mtu, preshared_key +local peers, public_key, allowed_ips, endpoint, persistent_keepalive + + +-- general --------------------------------------------------------------------- + +private_key = section:taboption( + "general", + Value, + "private_key", + translate("Private Key"), + translate("Required. Base64-encoded private key for this interface.") +) +private_key.password = true +private_key.datatype = "rangelength(44, 44)" +private_key.optional = false + + +listen_port = section:taboption( + "general", + Value, + "listen_port", + translate("Listen Port"), + translate("Optional. UDP port used for outgoing and incoming packets.") +) +listen_port.datatype = "port" +listen_port.placeholder = "51820" +listen_port.optional = true + +addresses = section:taboption( + "general", + DynamicList, + "addresses", + translate("IP Addresses"), + translate("Recommended. IP addresses of the WireGuard interface.") +) +addresses.datatype = "ipaddr" +addresses.optional = true + + +-- advanced -------------------------------------------------------------------- + +metric = section:taboption( + "advanced", + Value, + "metric", + translate("Metric"), + translate("Optional.") +) +metric.datatype = "uinteger" +metric.placeholder = "0" +metric.optional = true + + +mtu = section:taboption( + "advanced", + Value, + "mtu", + translate("MTU"), + translate("Optional. Maximum Transmission Unit of tunnel interface.") +) +mtu.datatype = "range(1280,1423)" +mtu.placeholder = "1423" +mtu.optional = true + + +preshared_key = section:taboption( + "advanced", + Value, + "preshared_key", + translate("Preshared Key"), + translate("Optional. Adds in an additional layer of symmetric-key " .. + "cryptography for post-quantum resistance.") +) +preshared_key.password = true +preshared_key.datatype = "rangelength(44, 44)" +preshared_key.optional = true + + +-- peers ----------------------------------------------------------------------- + +peers = map:section( + TypedSection, + "wireguard_" .. ifname, + translate("Peers"), + translate("Further information about WireGuard interfaces and peers " .. + "at wireguard.io.") +) +peers.template = "cbi/tsection" +peers.anonymous = true +peers.addremove = true + + +public_key = peers:option( + Value, + "public_key", + translate("Public Key"), + translate("Required. Public key of peer.") +) +public_key.datatype = "rangelength(44, 44)" +public_key.optional = false + + +allowed_ips = peers:option( + DynamicList, + "allowed_ips", + translate("Allowed IPs"), + translate("Required. IP addresses and prefixes that this peer is allowed " .. + "to use inside the tunnel. Usually the peer's tunnel IP " .. + "addresses and the networks the peer routes through the tunnel.") +) +allowed_ips.datatype = "ipaddr" +allowed_ips.optional = false + + +route_allowed_ips = peers:option( + Flag, + "route_allowed_ips", + translate("Route Allowed IPs"), + translate("Optional. Create routes for Allowed IPs for this peer.") +) + + +endpoint_host = peers:option( + Value, + "endpoint_host", + translate("Endpoint Host"), + translate("Optional. Host of peer. Names are resolved " .. + "prior to bringing up the interface.")) +endpoint_host.placeholder = "vpn.example.com" +endpoint_host.datatype = "host" + + +endpoint_port = peers:option( + Value, + "endpoint_port", + translate("Endpoint Port"), + translate("Optional. Port of peer.")) +endpoint_port.placeholder = "51820" +endpoint_port.datatype = "port" + + +persistent_keepalive = peers:option( + Value, + "persistent_keepalive", + translate("Persistent Keep Alive"), + translate("Optional. Seconds between keep alive messages. " .. + "Default is 0 (disabled). Recommended value if " .. + "this device is behind a NAT is 25.")) +persistent_keepalive.datatype = "range(0, 65535)" +persistent_keepalive.placeholder = "0" diff --git a/feeds/luci/protocols/luci-proto-wireguard/luasrc/model/network/proto_wireguard.lua b/feeds/luci/protocols/luci-proto-wireguard/luasrc/model/network/proto_wireguard.lua new file mode 100644 index 0000000..d693761 --- /dev/null +++ b/feeds/luci/protocols/luci-proto-wireguard/luasrc/model/network/proto_wireguard.lua @@ -0,0 +1,42 @@ +-- Copyright 2016 Dan Luedtke +-- Licensed to the public under the Apache License 2.0. + +local netmod = luci.model.network +local interface = luci.model.network.interface +local proto = netmod:register_protocol("wireguard") + +function proto.get_i18n(self) + return luci.i18n.translate("WireGuard VPN") +end + +function proto.ifname(self) + return self.sid +end + +function proto.get_interface(self) + return interface(self:ifname(), self) +end + +function proto.opkg_package(self) + return "wireguard-tools" +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/wireguard.sh") +end + +function proto.is_floating(self) + return true +end + +function proto.is_virtual(self) + return true +end + +function proto.get_interfaces(self) + return nil +end + +function proto.contains_interface(self, ifc) + return (netmod:ifnameof(ifc) == self:ifname()) +end diff --git a/feeds/luci/themes/luci-theme-bootstrap/Makefile b/feeds/luci/themes/luci-theme-bootstrap/Makefile new file mode 100644 index 0000000..c4e684e --- /dev/null +++ b/feeds/luci/themes/luci-theme-bootstrap/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Bootstrap Theme (default) +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css b/feeds/luci/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css new file mode 100644 index 0000000..8d0c434 --- /dev/null +++ b/feeds/luci/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css @@ -0,0 +1,1982 @@ +/*! + * LuCI Bootstrap Theme + * Copyright 2012 Nut & Bolt + * By David Menting + * Based on Bootstrap v1.4.0 + * + * Copyright 2011 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ +/* Reset.less + * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc). + * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ +html { + margin: 0; + padding: 0; +} + +body { + margin: 0; + padding: 5px; +} + +h1, h2, h3, h4, h5, h6, p, pre, a, abbr, acronym, code, del, em, img, q, s, +small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, +form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + font-style: normal; + font-size: 100%; + line-height: 1; + font-family: inherit; +} + +abbr[title], acronym[title] { + border-bottom: 1px dotted; + cursor: help; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +ol, ul { + list-style: none; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +html { + overflow-y: scroll; + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted; +} + +a:hover, a:active { + outline: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; + -ms-interpolation-mode: bicubic; +} + +button, +input, +select, +option, +textarea { + font-size: 100%; + margin: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + vertical-align: baseline; + *vertical-align: middle; +} + +button, input { + line-height: normal; + *overflow: visible; +} + +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} + +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +input[type="button"][disabled], +input[type="reset"][disabled], +input[type="submit"][disabled] { + opacity: 0.7; +} + +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +/* + * Scaffolding + * Basic and global styles for generating a grid system, structural layout, and page templates + * ------------------------------------------------------------------------------------------- */ +body { + background-color: #ffffff; + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 18px; + color: #404040; + padding-top: 58px; +} + +.container { + width: 100%; + max-width: 940px; + margin-left: auto; + margin-right: auto; + zoom: 1; +} + +.container:before, .container:after { + display: table; + content: ""; + zoom: 1; +} + +.container:after { + clear: both; +} + +a { + color: #0069d6; + text-decoration: none; + line-height: inherit; + font-weight: inherit; +} + +a:hover { + color: #00438a; + text-decoration: underline; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +/* Typography.less + * Headings, body text, lists, code, and more for a versatile and durable typography system + * ---------------------------------------------------------------------------------------- */ +p, +.cbi-map-descr, +.cbi-section-descr { + font-size: 13px; + font-weight: normal; + line-height: 18px; + margin-bottom: 9px; +} + +p small { + font-size: 11px; + color: #bfbfbf; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: bold; + color: #404040; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + color: #bfbfbf; +} + +h1 { + margin-bottom: 18px; + font-size: 30px; + line-height: 36px; +} + +h1 small { + font-size: 18px; +} + +h2 { + font-size: 24px; + line-height: 36px; +} + +h2 small { + font-size: 14px; +} + +h3, +h4, +h5, +h6 { + line-height: 36px; +} + +h3 { + font-size: 18px; +} + +h3 small { + font-size: 14px; +} + +h4 { + font-size: 16px; +} + +h4 small { + font-size: 12px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 13px; + color: #bfbfbf; + text-transform: uppercase; +} + +ul, ol { + margin: 0 0 18px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li { + line-height: 18px; + color: #808080; +} + +ul.unstyled { + list-style: none; + margin-left: 0; +} + +dl { + margin-bottom: 18px; +} + +dl dt, dl dd { + line-height: 18px; +} + +dl dt { + font-weight: bold; +} + +dl dd { + margin-left: 9px; +} + +hr { + margin: 20px 0 19px; + border: 0; + border-bottom: 1px solid #eee; +} + +strong { + font-style: inherit; + font-weight: bold; +} + +em { + font-style: italic; + font-weight: inherit; + line-height: inherit; +} + +small { font-size: 0.9em } + +address { + display: block; + line-height: 18px; + margin-bottom: 18px; +} + +code, pre { + padding: 0 3px 2px; + font-family: Monaco, Andale Mono, Courier New, monospace; + font-size: 12px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + background-color: #fee9cc; + color: rgba(0, 0, 0, 0.75); + padding: 1px 3px; +} + +pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 18px; + font-size: 12px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +/* Forms.less + * Base styles for various input types, form layouts, and states + * ------------------------------------------------------------- */ +form { + margin-bottom: 18px; +} + +fieldset { + margin-bottom: 9px; + padding-top: 9px; +} + +fieldset legend { + display: block; + font-size: 19.5px; + line-height: 1; + color: #404040; + padding-top: 20px; + *padding: 0 0 5px 0px; + /* IE6-7 */ + + *line-height: 1.5; + /* IE6-7 */ + +} +form .cbi-tab-descr { + line-height: 18px; + margin-bottom: 18px; +} + +form .clearfix, +form .cbi-value { + margin-bottom: 18px; + zoom: 1; + overflow: hidden; +} + +form .clearfix:before, form .clearfix:after, +form .cbi-value:before, form .cbi-value:after { + display: table; + content: ""; + zoom: 1; +} + +form .clearfix:after, +form .cbi-value:after { + clear: both; +} + +label, +input, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: normal; +} + +form .input, +form .cbi-value-field { + margin-left: 200px; +} + +form .cbi-value label.cbi-value-title { + padding-top: 6px; + font-size: 13px; + line-height: 18px; + float: left; + width: 180px; + text-align: right; + color: #404040; +} + +input[type=checkbox], input[type=radio] { + cursor: pointer; +} + +input, +textarea, +select, +.uneditable-input { + display: inline-block; + width: 210px; + height: 30px; + padding: 4px; + font-size: 13px; + line-height: 18px; + color: #808080; + border: 1px solid #ccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +select { + padding: initial; + background: #fff; + box-shadow: inset 0 -1px 3px rgba(0, 0, 0, 0.1); +} + +input[type=checkbox], input[type=radio] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; + /* IE6-7 */ + + line-height: normal; + border: none; +} + +input[type=file] { + background-color: #ffffff; + padding: initial; + border: initial; + line-height: initial; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + width: auto !important; +} + +input[type=button], input[type=reset], input[type=submit] { + width: auto; + height: auto; +} + +select, input[type=file] { + *height: auto; + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ +} + +select[multiple] { + height: inherit; + background-color: #ffffff; +} + +textarea { + height: auto; +} + +.uneditable-input { + background-color: #ffffff; + display: block; + border-color: #eee; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} + +::-moz-placeholder { + color: #bfbfbf; +} + +::-webkit-input-placeholder { + color: #bfbfbf; +} + +input, textarea { + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -ms-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); +} + +input:focus, textarea:focus { + outline: 0; + border-color: rgba(82, 168, 236, 0.8); + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type=file]:focus, input[type=checkbox]:focus, select:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + outline: 1px dotted #666; +} + +form .clearfix.error > label, form .clearfix.error .help-block, form .clearfix.error .help-inline { + color: #b94a48; +} + +form .clearfix.error input, form .clearfix.error textarea { + color: #b94a48; + border-color: #ee5f5b; +} + +form .clearfix.error input:focus, form .clearfix.error textarea:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +form .clearfix.error .input-prepend .add-on, form .clearfix.error .input-append .add-on { + color: #b94a48; + background-color: #fce6e6; + border-color: #b94a48; +} + +form .clearfix.warning > label, form .clearfix.warning .help-block, form .clearfix.warning .help-inline { + color: #c09853; +} + +form .clearfix.warning input, form .clearfix.warning textarea { + color: #c09853; + border-color: #ccae64; +} + +form .clearfix.warning input:focus, form .clearfix.warning textarea:focus { + border-color: #be9a3f; + -webkit-box-shadow: 0 0 6px #e5d6b1; + -moz-box-shadow: 0 0 6px #e5d6b1; + box-shadow: 0 0 6px #e5d6b1; +} + +form .clearfix.warning .input-prepend .add-on, form .clearfix.warning .input-append .add-on { + color: #c09853; + background-color: #d2b877; + border-color: #c09853; +} + +form .clearfix.success > label, form .clearfix.success .help-block, form .clearfix.success .help-inline { + color: #468847; +} + +form .clearfix.success input, form .clearfix.success textarea { + color: #468847; + border-color: #57a957; +} + +form .clearfix.success input:focus, form .clearfix.success textarea:focus { + border-color: #458845; + -webkit-box-shadow: 0 0 6px #9acc9a; + -moz-box-shadow: 0 0 6px #9acc9a; + box-shadow: 0 0 6px #9acc9a; +} + +form .clearfix.success .input-prepend .add-on, form .clearfix.success .input-append .add-on { + color: #468847; + background-color: #bcddbc; + border-color: #468847; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + background-color: #f5f5f5; + border-color: #ddd; +} + +.actions, +.cbi-page-actions { + background: #f5f5f5; + margin-bottom: 18px; + padding: 17px 20px 18px 150px; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + text-align: right; +} + +.actions .secondary-action, +.cbi-page-actions .secondary-action{ + float: right; +} + +.actions .secondary-action a, +.cbi-page-actions .secondary-action a { + line-height: 30px; +} + +.actions .secondary-action a:hover, +.cbi-page-actions .secondary-action a:hover { + text-decoration: underline; +} + +.help-inline, .help-block { + font-size: 13px; + line-height: 18px; + color: #bfbfbf; +} + +.help-inline { + padding-left: 5px; + *position: relative; + /* IE6-7 */ + + *top: -5px; + /* IE6-7 */ + +} + +.help-block { + display: block; + max-width: 600px; +} + +/* + * Tables.less + * Tables for, you guessed it, tabular data + * ---------------------------------------- */ +table { + width: 100%; + margin-bottom: 18px; + padding: 0; + font-size: 13px; + border-collapse: collapse; +} + +table th, table td { + padding: 10px 10px 9px; + line-height: 18px; + text-align: left; +} + +table th { + padding-top: 9px; + font-weight: bold; + vertical-align: middle; +} + +table td { + vertical-align: top; + border-top: 1px solid #ddd; +} + +table tbody th { + border-top: 1px solid #ddd; + vertical-align: top; +} + +/* Patterns.less + * Repeatable UI elements outside the base styles provided from the scaffolding + * ---------------------------------------------------------------------------- */ +header { + height: 40px; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 10000; + overflow: visible; + color: #BFBFBF; +} + +header a { + color: #bfbfbf; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +header h3 a:hover, header .brand:hover, header ul .active > a { + background-color: #333; + background-color: rgba(255, 255, 255, 0.05); + color: #ffffff; + text-decoration: none; +} + +header h3 { + position: relative; +} + +header h3 a, header .brand { + float: left; + display: block; + padding: 8px 20px 12px; + margin-left: -20px; + color: #ffffff; + font-size: 20px; + font-weight: 200; + line-height: 1; +} + +header p { + margin: 0; + line-height: 40px; +} + +header .fill { + background-color: #222; + background-color: #222222; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222)); + background-image: -moz-linear-gradient(top, #333333, #222222); + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(to bottom, #333333, #222222); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + padding: 0 5px; +} + +header div > ul, .nav { + display: block; + float: left; + margin: 0 10px 0 0; + position: relative; + left: 0; +} + +header div > ul > li, .nav > li { + display: block; + float: left; +} + +header div > ul a, .nav a { + display: block; + float: none; + padding: 10px 10px 11px; + line-height: 19px; + text-decoration: none; +} + +header div > ul a:hover, .nav a:hover { + color: #ffffff; + text-decoration: none; +} + +header div > ul .active > a, .nav .active > a { + background-color: #222; + background-color: rgba(0, 0, 0, 0.5); +} + +header div > ul.secondary-nav, .nav.secondary-nav { + float: right; + margin-left: 10px; + margin-right: 0; +} + +header div > ul.secondary-nav .menu-dropdown, +.nav.secondary-nav .menu-dropdown, +header div > ul.secondary-nav .dropdown-menu, +.nav.secondary-nav .dropdown-menu { + right: 0; + border: 0; +} + +header div > ul a.menu:hover, +.nav a.menu:hover, +header div > ul li.open .menu, +.nav li.open .menu, +header div > ul .dropdown-toggle:hover, +.nav .dropdown-toggle:hover, +header div > ul .dropdown.open .dropdown-toggle, +.nav .dropdown.open .dropdown-toggle { + background: #444; + background: rgba(255, 255, 255, 0.05); +} + +header div > ul .menu-dropdown, +.nav .menu-dropdown, +header div > ul .dropdown-menu, +.nav .dropdown-menu { + background-color: #333; +} + +header div > ul .menu-dropdown a.menu, +.nav .menu-dropdown a.menu, +header div > ul .dropdown-menu a.menu, +.nav .dropdown-menu a.menu, +header div > ul .menu-dropdown .dropdown-toggle, +.nav .menu-dropdown .dropdown-toggle, +header div > ul .dropdown-menu .dropdown-toggle, +.nav .dropdown-menu .dropdown-toggle { + color: #ffffff; +} + +header div > ul .menu-dropdown a.menu.open, +.nav .menu-dropdown a.menu.open, +header div > ul .dropdown-menu a.menu.open, +.nav .dropdown-menu a.menu.open, +header div > ul .menu-dropdown .dropdown-toggle.open, +.nav .menu-dropdown .dropdown-toggle.open, +header div > ul .dropdown-menu .dropdown-toggle.open, +.nav .dropdown-menu .dropdown-toggle.open { + background: #444; + background: rgba(255, 255, 255, 0.05); +} + +header div > ul .menu-dropdown li a, +.nav .menu-dropdown li a, +header div > ul .dropdown-menu li a, +.nav .dropdown-menu li a { + color: #999; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); +} + +header div > ul .menu-dropdown li a:hover, +.nav .menu-dropdown li a:hover, +header div > ul .dropdown-menu li a:hover, +.nav .dropdown-menu li a:hover { + background-color: #191919; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919)); + background-image: -moz-linear-gradient(top, #292929, #191919); + background-image: -ms-linear-gradient(top, #292929, #191919); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919)); + background-image: -webkit-linear-gradient(top, #292929, #191919); + background-image: -o-linear-gradient(top, #292929, #191919); + background-image: linear-gradient(to bottom, #292929, #191919); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0); + color: #ffffff; +} + +header div > ul .menu-dropdown .active a, +.nav .menu-dropdown .active a, +header div > ul .dropdown-menu .active a, +.nav .dropdown-menu .active a { + color: #ffffff; +} + +header div > ul .menu-dropdown .divider, +.nav .menu-dropdown .divider, +header div > ul .dropdown-menu .divider, +.nav .dropdown-menu .divider { + background-color: #222; + border-color: #444; +} + +header ul .menu-dropdown li a, header ul .dropdown-menu li a { + padding: 4px 15px; +} + +li.menu, .dropdown { + position: relative; +} + +a.menu:after, .dropdown-toggle:after { + width: 0; + height: 0; + display: inline-block; + content: "↓"; + text-indent: -99999px; + vertical-align: top; + margin-top: 8px; + margin-left: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #ffffff; + filter: alpha(opacity=50); + -khtml-opacity: 0.5; + -moz-opacity: 0.5; + opacity: 0.5; +} + +.menu-dropdown, .dropdown-menu { + background-color: #ffffff; + float: left; + position: absolute; + top: 40px; + left: -9999px; + z-index: 900; + min-width: 160px; + max-width: 220px; + _width: 160px; + margin-left: 0; + margin-right: 0; + padding: 6px 0; + zoom: 1; + border-color: #999; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 0 1px 1px; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.menu-dropdown li, .dropdown-menu li { + float: none; + display: block; + background-color: transparent; +} + +.menu-dropdown .divider, .dropdown-menu .divider { + height: 1px; + margin: 5px 0; + overflow: hidden; + background-color: #eee; + border-bottom: 1px solid #ffffff; +} + +header .dropdown-menu a, .dropdown-menu a { + display: block; + padding: 4px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #808080; + text-shadow: 0 1px 0 #ffffff; +} + +header .dropdown-menu a:hover, +.dropdown-menu a:hover, +header .dropdown-menu a.hover, +.dropdown-menu a.hover { + background-color: #dddddd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd)); + background-image: -moz-linear-gradient(top, #eeeeee, #dddddd); + background-image: -ms-linear-gradient(top, #eeeeee, #dddddd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)); + background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd); + background-image: -o-linear-gradient(top, #eeeeee, #dddddd); + background-image: linear-gradient(to bottom, #eeeeee, #dddddd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0); + color: #404040; + text-decoration: none; + -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); +} + +.open .menu, +.dropdown.open .menu, +.open .dropdown-toggle, +.dropdown.open .dropdown-toggle { + color: #ffffff; + background: #ccc; + background: rgba(0, 0, 0, 0.3); +} + +.open .menu-dropdown, +.dropdown.open .menu-dropdown, +.open .dropdown-menu, +.dropdown.open .dropdown-menu { + left: 0; +} + +.dropdown:hover ul.dropdown-menu { + left: 0; +} + +.dropdown-menu .dropdown-menu { + position: absolute; + left: 159px; +} + +.dropdown-menu li { + position: relative; +} + +.tabs, .cbi-tabmenu { + margin: 0 0 18px; + padding: 0; + list-style: none; + zoom: 1; +} + +.tabs:before, +.cbi-tabmenu:before, +.tabs:after, +.cbi-tabmenu:after { + display: table; + content: ""; + zoom: 1; +} + +.tabs:after, .cbi-tabmenu:after { + clear: both; +} + +.tabs > li, .cbi-tabmenu > li { + float: left; +} + +.tabs > li > a, .cbi-tabmenu > li > a { + display: block; +} + +.tabs, +.cbi-tabmenu { + border-color: #ddd; + border-style: solid; + border-width: 0 0 1px; +} + +.tabs > li, +.cbi-tabmenu > li { + position: relative; + margin-bottom: -1px; +} + +.cbi-tabmenu.map { + margin: 0; +} + +.cbi-tabmenu.map > li { + font-size: 16.5px; + font-weight: bold; +} + +.cbi-tabcontainer > fieldset.cbi-section[id] > legend { + display: none; +} + +.tabs > li > a, +.cbi-tabmenu > li > a { + padding: 0 15px; + margin-right: 2px; + line-height: 34px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.tabs > li > a:hover, +.cbi-tabmenu > li > a:hover { + text-decoration: none; + background-color: #eee; + border-color: #eee #eee #ddd; +} + +.tabs .active > a, .tabs .active > a:hover, +.cbi-tabmenu .active > a, .cbi-tabmenu .active > a:hover, +.cbi-tab > a:link, .cbi-tab > a:hover { + color: #808080; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} + +.tabs .menu-dropdown, .tabs .dropdown-menu, +.cbi-tabmenu .menu-dropdown, .cbi-tabmenu .dropdown-menu { + top: 35px; + border-width: 1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.tabs a.menu:after, .tabs .dropdown-toggle:after, +.cbi-tabmenu a.menu:after, .cbi-tabmenu .dropdown-toggle:after { + border-top-color: #999; + margin-top: 15px; + margin-left: 5px; +} + +.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle, +.cbi-tabmenu li.open.menu .menu, .cbi-tabmenu .open.dropdown .dropdown-toggle { + border-color: #999; +} + +.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after, +.cbi-tabmenu li.open a.menu:after, .cbi-tabmenu .dropdown.open .dropdown-toggle:after { + border-top-color: #555; +} + +.tab-content > .tab-pane, +.tab-content > div { + display: none; +} + +.tab-content > .active { + display: block; +} + +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + background-color: #f5f5f5; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5)); + background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5)); + background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); + background-image: linear-gradient(to bottom, #ffffff, #f5f5f5); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); + border: 1px solid #ddd; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.breadcrumb li { + display: inline; + text-shadow: 0 1px 0 #ffffff; +} + +.breadcrumb .divider { + padding: 0 5px; + color: #bfbfbf; +} + +.breadcrumb .active a { + color: #404040; +} + +footer { + margin-top: 17px; + padding-top: 17px; + border-top: 1px solid #eee; +} + +.btn.danger, +.alert-message.danger, +.btn.danger:hover, +.alert-message.danger:hover, +.btn.error, +.alert-message.error, +.btn.error:hover, +.alert-message.error:hover, +.btn.success, +.alert-message.success, +.btn.success:hover, +.alert-message.success:hover, +.btn.info, +.alert-message.info, +.btn.info:hover, +.alert-message.info:hover { + color: #ffffff; +} + +.btn .close, .alert-message .close { + font-family: Arial, sans-serif; + line-height: 18px; +} + +.btn.danger, +.alert-message.danger, +.btn.error, +.alert-message.error { + background-color: #c43c35; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #c43c35 #c43c35 #882a25; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn.success, .alert-message.success { + background-color: #57a957; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957)); + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -ms-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #57a957 #57a957 #3d773d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn.info, .alert-message.info { + background-color: #339bb9; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9)); + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #339bb9 #339bb9 #22697d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn, +.cbi-button { + cursor: pointer; + display: inline-block; + background-color: #e6e6e6; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); + padding: 5px 14px 6px; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + color: #333; + font-size: 13px; + line-height: normal; + border: 1px solid #ccc; + border-bottom-color: #bbb; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.cbi-button:hover { + color: #333; + text-decoration: none; +} + +.btn:focus, +.cbi-button:focus { + outline: 1px dotted #666; +} + +.btn.primary, +.cbi-page-actions .cbi-button-apply, +.cbi-page-actions .cbi-button-save, +.cbi-page-actions .cbi-button-reset { + color: #ffffff; + padding: 5px 14px 6px; + background-color: #0064cd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); + background-image: -moz-linear-gradient(top, #049cdb, #0064cd); + background-image: -ms-linear-gradient(top, #049cdb, #0064cd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); + background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); + background-image: -o-linear-gradient(top, #049cdb, #0064cd); + background-image: linear-gradient(to bottom, #049cdb, #0064cd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #0064cd #0064cd #003f81; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.cbi-input-invalid, +.cbi-value-error input { + color: #FF0000; + border-color: #FF0000; +} + +.cbi-button-up, +.cbi-input-up { + background-position: center center; + background-image: url('../resources/cbi/up.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: url('../resources/cbi/up.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/up.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/up.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/up.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/up.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-down, +.cbi-input-down { + background-position: center center; + background-image: url('../resources/cbi/down.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: url('../resources/cbi/down.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/down.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/down.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/down.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/down.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-find, +.cbi-input-find { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/find.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: url('../resources/cbi/find.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/find.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/find.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/find.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/find.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-add, +.cbi-input-add { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/add.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: url('../resources/cbi/add.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/add.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/add.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/add.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/add.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-apply, +.cbi-input-apply { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/apply.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: url('../resources/cbi/apply.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/apply.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/apply.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/apply.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/apply.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-reset, +.cbi-input-reset { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/reset.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: url('../resources/cbi/reset.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/reset.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/reset.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/reset.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/reset.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-edit, +.cbi-input-edit { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/edit.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: url('../resources/cbi/edit.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/edit.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/edit.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/edit.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/edit.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-remove, +.cbi-input-remove { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/remove.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: url('../resources/cbi/remove.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/remove.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/remove.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/remove.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/remove.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-reload, +.cbi-input-reload { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/reload.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: url('../resources/cbi/reload.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/reload.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/reload.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/reload.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/reload.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-link, +.cbi-input-link { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/link.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: url('../resources/cbi/link.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/link.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/link.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/link.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/link.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.cbi-button-download, +.cbi-input-download { + background-position: 6px center, left top; + padding-left: 28px; + background-image: url('../resources/cbi/download.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: url('../resources/cbi/download.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/download.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/download.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/download.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: url('../resources/cbi/download.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); +} + +.btn.active, .btn:active { + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: alpha(opacity=65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn[disabled] { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: alpha(opacity=65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn.large { + font-size: 15px; + line-height: normal; + padding: 9px 14px 9px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn.small { + padding: 7px 9px 7px; + font-size: 11px; +} + +/* Button icons for specific pages */ +.Startup .cbi-section-table input.cbi-input-apply, +.Startup .cbi-section-table input.cbi-button-apply { + background-image: url("../resources/cbi/apply.gif"); + background-position: 7px 4px; + padding: 3px 9px 3px 27px; +} + +.Processes .cbi-section-table input.cbi-input-reload, +.Startup .cbi-section-table input.cbi-input-reload { + background-image: url("../resources/cbi/reload.gif"); + background-position: 7px 4px; + padding: 3px 9px 3px 27px; +} + +.Processes .cbi-section-table input.cbi-input-remove, +.Processes .cbi-section-table div.cbi-section-remove input, +.Startup .cbi-section-table input.cbi-input-remove, +.Startup .cbi-section-table div.cbi-section-remove input { + background-image: url("../resources/cbi/remove.gif"); + background-position: 7px 4px; + padding: 3px 9px 3px 27px; +} + +.Processes .cbi-section-table input.cbi-input-reset, +.Processes .cbi-section-table input.cbi-button-reset, +.Startup .cbi-section-table input.cbi-input-reset, +.Startup .cbi-section-table input.cbi-button-reset { + background-image: url("../resources/cbi/reset.gif"); + background-position: 7px 4px; + padding: 3px 9px 3px 27px; +} + +.Startup .cbi-section-table input.cbi-input-save, +.Startup .cbi-section-table input.cbi-button-save { + background-image: url("../resources/cbi/save.gif"); + background-position: 7px 4px; + padding: 3px 9px 3px 27px; +} + +:root .alert-message, :root .btn { + border-radius: 0 0; +} + +button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +.close { + float: right; + color: #000000; + font-size: 20px; + font-weight: bold; + line-height: 13.5px; + text-shadow: 0 1px 0 #ffffff; + filter: alpha(opacity=25); + -khtml-opacity: 0.25; + -moz-opacity: 0.25; + opacity: 0.25; +} + +.close:hover { + color: #000000; + text-decoration: none; + filter: alpha(opacity=40); + -khtml-opacity: 0.4; + -moz-opacity: 0.4; + opacity: 0.4; +} + +.alert-message, .errorbox { + position: relative; + padding: 7px 15px; + margin-bottom: 18px; + color: #404040; + background-color: #eedc94; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94)); + background-image: -moz-linear-gradient(top, #fceec1, #eedc94); + background-image: -ms-linear-gradient(top, #fceec1, #eedc94); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94)); + background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); + background-image: -o-linear-gradient(top, #fceec1, #eedc94); + background-image: linear-gradient(to bottom, #fceec1, #eedc94); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #eedc94 #eedc94 #e4c652; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + border-width: 1px; + border-style: solid; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} + +.alert-message .close { + margin-top: 1px; + *margin-top: 0; +} + +.alert-message a { + font-weight: bold; + color: #404040; +} + +.alert-message.danger p a, +.alert-message.error p a, +.alert-message.success p a, +.alert-message.info p a { + color: #ffffff; +} + +.alert-message h5 { + line-height: 18px; +} + +.alert-message p { + margin-bottom: 0; +} + +.alert-message div { + margin-top: 5px; + margin-bottom: 2px; + line-height: 28px; +} + +.alert-message .btn { + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} + +.label { + padding: 1px 3px 2px; + font-size: 9.75px; + font-weight: bold; + color: #ffffff !important; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + text-shadow: none; +} + +a.label:link, +a.label:visited { + color: #ffffff; +} + +a.label:hover { + text-decoration: none; +} + +.label.important { + background-color: #c43c35; +} + +.label.warning { + background-color: #f89406; +} + +.label.success { + background-color: #46a546; +} + +.label.notice { + background-color: #62cffc; +} + +/* LuCI specific items */ +.hidden { display: none } + +#memtotal > div, +#memfree > div, +#memcache > div, +#membuff > div, +#conns > div { + border: 1px solid #CCCCCC; + border-radius: 3px 3px 3px 3px; + color: #808080; + display: inline-block; + font-size: 13px; + line-height: 18px; +} + +#xhr_poll_status { + cursor: pointer; +} + +form.inline { display: inline } + +header .pull-right { padding-top: 8px; } + +#modemenu li:last-child span.divider { display: none } + +#syslog { width: 100%; } + +.cbi-section-table tbody tr:nth-child(odd) td, .cbi-section-table tbody tr:nth-child(odd) th { + background-color: #f9f9f9; +} + +.cbi-section-table tbody tr:hover td, .cbi-section-table tbody tr:hover th { + background-color: #f5f5f5; +} + +.cbi-section-table tr.cbi-section-table-descr th { + font-weight: normal; +} + +.left { text-align: left !important; } + +.right { text-align: right !important; } + +.cbi-value-field { line-height: 1.5em; } + +.cbi-value-field input[type=checkbox], +.cbi-value-field input[type=radio] { + margin-top: 8px; + margin-right: 6px; +} + +table table td, +.cbi-value-field table td { + border: none; +} + +table.cbi-section-table input, +table.cbi-section-table textarea, +table.cbi-section-table select { + width: auto; +} + +table.cbi-section-table td.cbi-section-table-cell { + white-space: nowrap; + text-align: right; +} + +table.cbi-section-table td.cbi-section-table-cell select { + width: inherit; +} + +table.valign-middle td { + vertical-align: middle; +} + +.cbi-value-description { display: inline; } + +.cbi-value-description img { vertical-align: middle; } + +.cbi-section-error { + border: 1px solid #FF0000; + border-radius: 3px; + background-color: #FCE6E6; + padding: 5px; +} + +.cbi-section-error ul { margin: 0 0 0 20px; } + +.cbi-section-error ul li { + color: #FF0000; + font-weight: bold; +} + +.ifacebox { + background-color: #FFFFFF; + border: 1px solid #CCCCCC; + margin: 0 10px; + text-align: center; + white-space: nowrap; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.ifacebox .ifacebox-head { + border-bottom: 1px solid #CCCCCC; + padding: 2px; +} + +.ifacebox .ifacebox-body { + padding: 6px; +} + +.ifacebadge { + display: inline-block; + white-space: nowrap; + background-color: #FFFFFF; + border: 1px solid #CCCCCC; + padding: 2px; + margin-left: 2px; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + cursor: default; +} + +.ifacebadge img { + width: 16px; + height: 16px; + vertical-align: middle; +} + +.ifacebadge-active { + border-color: #000000; + font-weight: bold; +} + +.zonebadge { + padding: 2px; + border-radius: 4px; + display: inline-block; + white-space: nowrap; + color: #666666; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + cursor: pointer; +} + +.zonebadge > em, +.zonebadge > strong { + margin: 5px; + display: inline-block; +} + +.zonebadge input { + width: 6em; +} + +.zonebadge-empty { + border: 1px dashed #AAAAAA; + color: #AAAAAA; + font-style: italic; + font-size: smaller; +} + +div.cbi-value var, +td.cbi-value-field var { + font-style: italic; + color: #0069D6; +} + +.uci-change-list { + font-family: monospace; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + text-decoration: none; + border: 1px solid #00FF00; + background-color: #CCFFCC; + display: block; + padding: 2px; +} + +.uci-change-list del, +.uci-change-legend-label del { + text-decoration: none; + border: 1px solid #FF0000; + background-color: #FFCCCC; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var, +.uci-change-legend-label var { + text-decoration: none; + border: 1px solid #CCCCCC; + background-color: #EEEEEE; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var ins, +.uci-change-list var del { + /*display: inline;*/ + border: none; + white-space: pre; + font-style: normal; + padding: 0px; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + width: 150px; + float: left; +} + +.uci-change-legend-label > ins, +.uci-change-legend-label > del, +.uci-change-legend-label > var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + line-height: 6px; + border: none; +} diff --git a/feeds/luci/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/favicon.ico b/feeds/luci/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..77a138ba0c53da3f891857646887710d4b472fdd GIT binary patch literal 1150 zcmZQzU<5(|0R}M0U}0bo1F|%L7$l?s#Ef7P$NwD5 zyD&e$2Aer)Damoz)Z-BQhHeH9btry7RT$l_@13qXDgni$+neEMN>FdArv z0lGQBFs%lPtwI-v>Tv?n|DhPfWM1mmXwsh<2>{OOVxp*g!w@ zqKiTG6Xkx8S{(YJ#vmwkbwIoQ(e*=B!~Bd+gY5bTGY4TZ#0^ONRX{enUXU0V0QLV( zPE1sV@sVhl9&mgiiG!HP;ejTF!iAZEi$+n5hl8yD3NCej>=_t7@G~$xU}j)Az{tSR l0L0A?85r0SfW?IY1cTV^K(P)%28J8b3=GeoL-c_30szk#m9qc< literal 0 HcmV?d00001 diff --git a/feeds/luci/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/html5.js b/feeds/luci/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/html5.js new file mode 100644 index 0000000..1ec510f --- /dev/null +++ b/feeds/luci/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/html5.js @@ -0,0 +1,3 @@ +// HTML5 Shiv v3 | @jon_neal @afarkas @rem | MIT/GPL2 Licensed +// Uncompressed source: https://github.com/aFarkas/html5shiv +(function(a,b){function f(a){var c,d,e,f;b.documentMode>7?(c=b.createElement("font"),c.setAttribute("data-html5shiv",a.nodeName.toLowerCase())):c=b.createElement("shiv:"+a.nodeName);while(a.firstChild)c.appendChild(a.childNodes[0]);for(d=a.attributes,e=d.length,f=0;f7?e[g][e[g].length-1]=e[g][e[g].length-1].replace(d,'$1font[data-html5shiv="$2"]'):e[g][e[g].length-1]=e[g][e[g].length-1].replace(d,"$1shiv\\:$2"),e[g]=e[g].join("}");return e.join("{")}var c=function(a){return a.innerHTML="",a.childNodes.length===1}(b.createElement("a")),d=function(a,b,c){return b.appendChild(a),(c=(c?c(a):a.currentStyle).display)&&b.removeChild(a)&&c==="block"}(b.createElement("nav"),b.documentElement,a.getComputedStyle),e={elements:"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" "),shivDocument:function(a){a=a||b;if(a.documentShived)return;a.documentShived=!0;var f=a.createElement,g=a.createDocumentFragment,h=a.getElementsByTagName("head")[0],i=function(a){f(a)};c||(e.elements.join(" ").replace(/\w+/g,i),a.createElement=function(a){var b=f(a);return b.canHaveChildren&&e.shivDocument(b.document),b},a.createDocumentFragment=function(){return e.shivDocument(g())});if(!d&&h){var j=f("div");j.innerHTML=["x"].join(""),h.insertBefore(j.lastChild,h.firstChild)}return a}};e.shivDocument(b),a.html5=e;if(c||!a.attachEvent)return;a.attachEvent("onbeforeprint",function(){if(a.html5.supportsXElement||!b.namespaces)return;b.namespaces.shiv||b.namespaces.add("shiv");var c=-1,d=new RegExp("^("+a.html5.elements.join("|")+")$","i"),e=b.getElementsByTagName("*"),g=e.length,j,k=i(h(function(a,b){var c=[],d=a.length;while(d)c.unshift(a[--d]);d=b.length;while(d)c.unshift(b[--d]);c.sort(function(a,b){return a.sourceIndex-b.sourceIndex}),d=c.length;while(d)c[--d]=c[d].styleSheet;return c}(b.getElementsByTagName("style"),b.getElementsByTagName("link"))));while(++c + Copyright 2008 Jo-Philipp Wich + Copyright 2012 David Menting + Licensed to the public under the Apache License 2.0. +-%> + +<% + local ver = require "luci.version" + local disp = require "luci.dispatcher" + local request = disp.context.path + local category = request[1] + local tree = disp.node() + local categories = disp.node_childs(tree) +%> + +
+
+ + + diff --git a/feeds/luci/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm b/feeds/luci/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm new file mode 100644 index 0000000..6f09bfc --- /dev/null +++ b/feeds/luci/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm @@ -0,0 +1,205 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2016 Jo-Philipp Wich + Copyright 2012 David Menting + Licensed to the public under the Apache License 2.0. +-%> + +<% + local sys = require "luci.sys" + local util = require "luci.util" + local http = require "luci.http" + local disp = require "luci.dispatcher" + + local boardinfo = util.ubus("system", "board") + + local request = disp.context.path + local request2 = disp.context.request + + local category = request[1] + local cattree = category and disp.node(category) + + local leaf = request2[#request2] + + local tree = disp.node() + local node = disp.context.dispatched + + local categories = disp.node_childs(tree) + + local c = tree + local i, r + + -- tag all nodes leading to this page + for i, r in ipairs(request) do + if c.nodes and c.nodes[r] then + c = c.nodes[r] + c._menu_selected = true + end + end + + -- send as HTML5 + http.prepare_content("text/html") + + local function nodeurl(prefix, name, query) + local u = url(prefix, name) + if query then + u = u .. http.build_querystring(query) + end + return pcdata(u) + end + + local function render_tabmenu(prefix, node, level) + if not level then + level = 1 + end + + local childs = disp.node_childs(node) + if #childs > 0 then + if level > 2 then + write('
    ') + end + + local selected_node + local selected_name + local i, v + + for i, v in ipairs(childs) do + local nnode = node.nodes[v] + if nnode._menu_selected then + selected_node = nnode + selected_name = v + end + + if level > 2 then + write('
  • %s
  • ' %{ + v, (nnode._menu_selected or (node.leaf and v == leaf)) and 'active' or '', + nodeurl(prefix, v, nnode.query), + striptags(translate(nnode.title)) + }) + end + end + + if level > 2 then + write('
') + end + + if selected_node then + render_tabmenu(prefix .. "/" .. selected_name, selected_node, level + 1) + end + end + end + + local function render_submenu(prefix, node) + local childs = disp.node_childs(node) + if #childs > 0 then + write('') + end + end + + local function render_topmenu() + local childs = disp.node_childs(cattree) + if #childs > 0 then + write('') + end + end + + local function render_changes() + -- calculate the number of unsaved changes + if tree.nodes[category] and tree.nodes[category].ucidata then + local ucichanges = 0 + + for i, j in pairs(require("luci.model.uci").cursor():changes()) do + for k, l in pairs(j) do + for m, n in pairs(l) do + ucichanges = ucichanges + 1; + end + end + end + + if ucichanges > 0 then + write('%s: %d' %{ + url(category, 'uci/changes'), + http.urlencode(http.formvalue('redir') or REQUEST_URI), + translate('Unsaved Changes'), + ucichanges + }) + end + end + end +-%> + + + + + <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI + + + + + + <% if node and node.css then %> + + <% end -%> + <% if css then %> + + <% end -%> + + + + +
+
+
+ <%=boardinfo.hostname or "?"%> + <% render_topmenu() %> +
+ <% render_changes() %> + +
+
+
+
+ + <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> +
+
+

<%:No password set!%>

+ <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%>
+ "><%:Go to password configuration...%> +
+
+ <%- end -%> + +
+ <% if category then render_tabmenu(category, cattree) end %> diff --git a/feeds/luci/themes/luci-theme-bootstrap/root/etc/uci-defaults/30_luci-theme-bootstrap b/feeds/luci/themes/luci-theme-bootstrap/root/etc/uci-defaults/30_luci-theme-bootstrap new file mode 100755 index 0000000..09299e0 --- /dev/null +++ b/feeds/luci/themes/luci-theme-bootstrap/root/etc/uci-defaults/30_luci-theme-bootstrap @@ -0,0 +1,7 @@ +#!/bin/sh +uci batch <<-EOF + set luci.themes.Bootstrap=/luci-static/bootstrap + set luci.main.mediaurlbase=/luci-static/bootstrap + commit luci +EOF +exit 0 diff --git a/feeds/luci/themes/luci-theme-freifunk-generic/Makefile b/feeds/luci/themes/luci-theme-freifunk-generic/Makefile new file mode 100644 index 0000000..2fc62fd --- /dev/null +++ b/feeds/luci/themes/luci-theme-freifunk-generic/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Freifunk Generic Theme +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/bg.jpg b/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..822527ead873a1e8e33f55fb22df23314a8a8ddb GIT binary patch literal 354 zcmb7;J8l9o5QhKRhrL)R*uwI{l4y|-#EU@U23SH`B~%m?9DuV>=SV4Xh&-CqT*BC- zNko+yY4q!#Zyx^Le?xBD=N3eSr;zYp*nnj@%QMDu#yKm56r$4+`mWcNr5+4QZA|qr zt*g=G-k9-XJefT<^JZ8tS4+E^+Q!Bu#5os*=nK)em8tB%!@oim$pMs-LZT>D^i=j5_0 RhvV_b31jVEYGkPW#|2ttEi3>4 literal 0 HcmV?d00001 diff --git a/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css b/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css new file mode 100644 index 0000000..ed97427 --- /dev/null +++ b/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css @@ -0,0 +1,1072 @@ +@charset "utf-8"; + +@media all { + +html { + min-height: 100%; + height: auto; +} + +body { + color: #ccc; + background:#e5eef5 url(bg.jpg) repeat-x top left; + font-family: Verdana, Arial, sans-serif; + font-size: 100%; + line-height: 100%; + padding-bottom: 1.5em; +} + +html, body { + height: 99%; +} + +* { + margin: 0; + padding: 0; +} + +abbr, +acronym { + font-style: normal; + font-variant: normal; +} + +abbr[title], +acronym[title] { + border-bottom: 1px dotted; + cursor: help; +} + +a:link abbr[title], +a:visited abbr[title], +a:link acronym[title], +a:visited acronym[title] { + cursor: pointer; +} + +code { + font-family: monospace; + white-space: pre; +} + +#maincontent ul { + margin-left: 2em; +} + +.warning { + color: red; + background-color: white; + font-weight: bold; + text-decoration: blink; +} + +.clear { + clear: both; +} + +a img { + border: 0; +} + +.skiplink, +.navigation, +.hidden { + position: absolute; + left: -1000px; + top: -1000px; + width: 0px; + height: 0px; + overflow: hidden; + display: inline; +} + +.error { + color: #f00; + background-color: white; +} + +.errorbox { + border: 1px solid #F00; + background-color: #FCC; + padding: 5px; +} + + +.ifacebox { + background-color: #FFFFFF; + border: 1px solid #CCCCCC; + margin: 0 10px; + text-align: center; + white-space: nowrap; +} + +.ifacebox .ifacebox-head { + border-bottom: 1px solid #CCCCCC; + padding: 2px; +} + +.ifacebox .ifacebox-body { + padding: 2px; +} + + +.ifacebadge { + background-color: #FFFFFF; + border: 1px solid #CCCCCC; + padding: 2px; + margin-left: 2px; + display: inline-block; +} + +.ifacebadge-active { + border-color: #000000; + font-weight: bold; +} + + +.zonebadge { + padding: 2px; + display: inline-block; + white-space: nowrap; + cursor: pointer; +} + +.zonebadge em, +.zonebadge strong { + margin: 3px; + display: inline-block; +} + +.zonebadge input { + width: 6em; + height: 1.5em; +} + +.zonebadge-empty { + border: 1px dashed #AAAAAA; + color: #AAAAAA; + font-style: italic; + font-size: smaller; +} + + +#header { + height: auto; + background: #FFF url(header.jpg) repeat-x left bottom; + color: #ccc; + font-weight: bold; + text-align:right; +} + +.header_left img { + padding: 10px 10px 0px 10px; + margin-bottom: 10px; +} + +.header_banner { + overflow:hidden; + padding-bottom: 6px; + text-align:left; +} + +.header_banner img{ + padding: 0px; +} + +.header_left{ + text-align:left; + max-width: 50%; + float:left; +} + +.header_left a{ + color: #dc0067; + font: bold 36px Helvetica; + text-decoration: none; +} + +#header h1, +.header_right { + max-width: 45%; + text-align: right; + font-size: 70%; + font-weight: normal; + line-height: 160%; + float:right; + padding: 10px 10px 0 0; +} + +ul.dropdowns { + float: left; + margin: 0; + padding: 0; + width: auto; + list-style: none; +} + +html>body ul.dropdowns { + position: relative; +} + +ul.dropdowns li, +ul.dropdowns ul { + margin: 0; + padding: 0; + list-style: none; +} + +ul.dropdowns li { + float: left; + position: relative; + white-space: nowrap; +} + +ul.dropdowns li ul { + position: absolute; + z-index: 1000; + top: auto; + min-width: 10em; +} + +ul.dropdowns li li { + float: none; + position: relative; +} + +ul.dropdowns li a { + display: block; +} + +ul.dropdowns ul li ul { + top: 0; +} + +ul.dropdowns li ul, +ul.dropdowns li.over ul ul, +ul.dropdowns li.focus ul ul, +ul.dropdowns li:hover ul ul, +ul.dropdowns li.over ul ul ul, +ul.dropdowns li.focus ul ul ul, +ul.dropdowns li:hover ul ul ul, +ul.dropdowns li.over ul ul ul ul, +ul.dropdowns li.focus ul ul ul ul, +ul.dropdowns li:hover ul ul ul ul { + left: -3000px; +} + +ul.dropdowns li.over ul, +ul.dropdowns li.focus ul, +ul.dropdowns li:hover ul { + left: 0; +} + +ul.dropdowns ul li.over ul, +ul.dropdowns ul li.focus ul, +ul.dropdowns ul li:hover ul, +ul.dropdowns ul ul li.over ul, +ul.dropdowns ul ul li.focus ul, +ul.dropdowns ul ul li:hover ul, +ul.dropdowns ul ul ul li.over ul, +ul.dropdowns ul ul ul li.focus ul, +ul.dropdowns ul ul ul li:hover ul { + left: 100%; +} + +#xhr_poll_status { + cursor: pointer; +} + +#xhr_poll_status #xhr_poll_status_off { + font-weight: bold; + color: #FF0000; +} + +#xhr_poll_status #xhr_poll_status_on { + font-weight: bold; + color: #00FF00; +} + +#menubar { + position: relative; + width: 100%; + background: #FFF; + color: #004a9c; + border-bottom: 1px dotted #5A5A5A; +} +#menubar .warning { + color: red; + background-color: #FFF; +} + +#menubar ul.dropdowns { + min-height: 1.8em; + background: #FFF; + color: #004a9c; +} + +#menubar ul.dropdowns li ul { + background: #FFF; + color: #004a9c; + border-width: 0 1px 1px 1px; + border-style: dotted; + border-color: #5a5a5a; +} + +#menubar ul.dropdowns ul li ul { + border-width: 1px; +} + +html #menubar a:link, +html #menubar a:visited { + position: relative; + display: block; + padding: 0.5em; + background: #FFF; + color: #004a9c; + text-decoration: none; + font-size: 80%; + font-weight: normal; +} + +html #menubar a:link:hover, +html #menubar a:visited:hover, +html #menubar a:link:active, +html #menubar a:visited:active, +#menubar a:link:focus, +#menubar a:visited:focus { + background: #F2F2F2; + color: #e60076; +} + +html #menubar a:link.active, +html #menubar a:visited.active, +html #menubar a:link.preactive, +html #menubar a:visited.preactive { + background: #FFF; + color: #e60076; +} + +html #menubar a:link.warning, +html #menubar a:visited.warning { + background: #FFF; + color: red; + font-weight: bold; + text-decoration: blink; +} + +#menubar ul.dropdowns li.over>a, +#menubar ul.dropdowns li.focus>a, +#menubar ul.dropdowns li:hover>a { +} + +.lang_de #submenu_mini_system { min-width: 13.3em; } +* html .lang_de #submenu_mini_system { width: 13.3em; } + +.lang_pt-br #submenu_mini_network { min-width: 14em; } +* html .lang_pt-br #submenu_mini_network { width: 14em; } + +.lang_pt-br #submenu_mini_system { min-width: 11.5em; } +* html .lang_pt-br #submenu_mini_system { width: 11.5em; } + +.lang_ru #submenu_mini_system { min-width: 18em; } +* html .lang_ru #submenu_mini_system { width: 18em; } + +.lang_pt-br #submenu_admin_index { min-width: 11em; } +* html .lang_pt-br #submenu_admin_index { width: 11em; } + +.lang_ru #submenu_admin_index { min-width: 15.5em; } +* html .lang_ru #submenu_admin_index { width: 15.5em; } + +.lang_ru #submenu_admin_status { min-width: 10.5em; } +* html .lang_ru #submenu_admin_status { width: 10.5em; } + +.lang_de #submenu_admin_system { min-width: 13.3em; } +* html .lang_de #submenu_admin_system { width: 13.3em; } + +.lang_fr #submenu_admin_system { min-width: 14.5em; } +* html .lang_fr #submenu_admin_system { width: 14.5em; } + +.lang_pt-br #submenu_admin_system { min-width: 11.5em; } +* html .lang_pt-br #submenu_admin_system { width: 11.5em; } + +.lang_ru #submenu_admin_system { min-width: 18em; } +* html .lang_ru #submenu_admin_system { width: 18em; } + +#submenu_admin_services_chillispot { min-width: 15.5em; } +* html #submenu_admin_services_chillispot { width: 15.5em; } + +#submenu_admin_services_coovachilli { min-width: 15em; } +* html #submenu_admin_services_coovachilli { width: 15em; } + +.lang_ru #submenu_admin_network_routes { min-width: 15.3em; } +* html .lang_ru #submenu_admin_network_routes { width: 15.3em; } + +#submenu_admin_network_firewall { min-width: 14em; } +* html #submenu_admin_network_firewall { width: 14em; } + +.lang_de #submenu_admin_network_firewall { min-width: 16.5em; } +* html .lang_de #submenu_admin_network_firewall { width: 16.5em; } + +.lang_pt-br #submenu_admin_network_firewall { min-width: 15em; } +* html .lang_pt-br #submenu_admin_network_firewall { width: 15em; } + +#modemenu { +/* width: auto;*/ + background: #000; + color: #fff; + list-style: none; + margin-right: 1px; +} + +#modemenu li { + float: right; + list-style: none; +} + +#savemenu { + float: right; + margin-right: 2em; +} + +.lang_de #submenu_admin_uci { + width: 12em; +} + +.lang_ru #submenu_admin_uci { + width: 11.5em; +} + +textarea#syslog { + width: 98%; + min-height: 500px; + border: 3px solid #ccc; + padding: 5px; + font-family: monospace; +} + + +#maincontent { + clear: both; + width: 90%; + margin: 0 auto; + padding: 0.5em; + color: #000; + font-size: 80%; +} + +#maincontent h2 { + font:normal bold 150% "Trebuchet MS", Verdana, sans-serif; + margin: 0.25em 0 0.7em 0; + border-bottom: 1px solid; + padding: 10px 0 4px 0; + color: #404040; +} + +#maincontent h3 { + margin: 0.5em 0 1.1em 0; + font:italic bold 125% "Trebuchet MS", Verdana, sans-serif; + color: #404040; +} + +#maincontent p { + margin-bottom: 1em; +} + +.cbi-section { + margin-bottom: 0.5em; + padding: 0.5em 1em; + border: 1px dotted #555; + background-color: #fff; + color: #000; +} + +.cbi-section legend { + font-size: 110%; + font-weight: bold; + height: 1em; + padding: 0.5em 0.25em; + background-color: transparent; + color: #404040 ; +} + +.cbi-section h2 { + margin: 0em 0 0.5em -0.5em !important; +} + +.cbi-section h3 { + text-decoration: none !important; + font-weight: bold !important; + color: #555 !important; + margin: 0.25em !important; + font-size: 100% !important; +} + +.cbi-section-descr { + margin-bottom: 0.5em; + font-size: 95%; +} + +.cbi-title-ref { + color: inherit; + text-decoration: none; + padding-right: 18px; + background: url('../resources/cbi/link.gif') no-repeat scroll right center; + background-color: inherit; +} + +ul.cbi-apply { + font-size: 90%; +} + +ul.cbi-tabmenu { + padding: 3px 0; + margin-left: 0 !important; + margin-bottom: -1px; + list-style-type: none; +} + +ul.cbi-tabmenu li.cbi-tab, +ul.cbi-tabmenu li.cbi-tab-disabled { + display: inline; + margin: 0; +} + +ul.cbi-tabmenu li.cbi-tab a, +ul.cbi-tabmenu li.cbi-tab-disabled a { + text-decoration: none; + padding: 3px 7px; + margin-right: 3px; + border: 1px dotted #bbb; + border-bottom: none; + background-color: #eee; + color: #bbb; +} + +ul.cbi-tabmenu li.cbi-tab-highlighted a { + color: #000; + background-color: #FFEEAA; +} + +ul.cbi-tabmenu li a:hover { + color: #000; +} + +ul.cbi-tabmenu li.cbi-tab a { + position: relative; + top: 1px; + padding-top: 4px; + color: #000; + background-color: #fff; +} + +div.cbi-tab-descr { + background-image: url(/luci-static/resources/cbi/help.gif); + background-position: 0.25em 50%; + background-repeat: no-repeat; + border-bottom: 1px solid #ccc; + margin: 0.25em 0.25em 2em; + padding: 0.5em 0.5em 0.5em 2em; +} + +input[type=submit], +input[type=reset], +input[type=image], +input[type=button] { + cursor: pointer; +} + +select, +input, +textarea { + background: #fff; + color: #000; + border: 1px solid #cccccc; +} + +input[type=image] { + border: none; +} + +input:focus, +input:hover, +select:focus, +select:hover, +textarea:focus, +textarea:hover { + background-color: #fff; + color: #000; +} + +select, +input[type=text], +input[type=password] { + width: 20em; +} + +td select, +td input[type=text], +td input[type=password] { + width: 99%; +} + +img.cbi-image-button { + cursor: pointer; + margin: 0 2px; + vertical-align: middle; +} + +input.cbi-input-user { + background: url('../resources/cbi/user.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + text-indent: 17px; +} + +input.cbi-input-password { + background: url('../resources/cbi/key.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + text-indent: 17px; +} + +input.cbi-input-find, +input.cbi-button-find { + background: url('../resources/cbi/find.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding-left: 17px; + border: none; +} + +input.cbi-input-reload { + background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding-left: 17px; +} + +input.cbi-button{ + margin-top: 1.3em; +} + +input.cbi-input-add, +input.cbi-button-add { + background: url('../resources/cbi/add.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; + border: 1px solid #FFF; +} + +input.cbi-input-fieldadd, +input.cbi-button-fieldadd { + background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; +} + +input.cbi-input-reset, +input.cbi-button-reset { + background: url('../resources/cbi/reset.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; +} + + +} + +input.cbi-input-save, +input.cbi-button-save { + background: url('../resources/cbi/save.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; +} + +input.cbi-input-apply, +input.cbi-button-apply { + background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; +} + +input.cbi-input-link, +input.cbi-button-link { + background: url('../resources/cbi/link.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; + border: none; +} + +input.cbi-input-download, +input.cbi-button-download { + background: url('../resources/cbi/download.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; + border: none; +} + +input.cbi-input-remove, +div.cbi-section-remove input { + background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; + border: 1px solid #fff; +} + +input.cbi-button-up { + background-image: url('../resources/cbi/up.gif'); + padding: 0 1px 0 11px; +} + +input.cbi-button-down { + background-image: url('../resources/cbi/down.gif'); + padding: 0 1px 0 11px; +} + +input.cbi-button-edit { + background: url('../resources/cbi/edit.gif') no-repeat scroll 1px center; + color: #000000; + padding: 0 1px 0 17px; +} + +input.cbi-button-reload { + background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; + color: #000000; + padding: 0 1px 0 17px; +} + +input.cbi-button-remove { + background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; + color: #000000; + padding: 0 1px 0 17px; +} + +.cbi-input-invalid { + background-image: url('../resources/cbi/reset.gif'); + background-repeat: no-repeat; + background-position: right; + color: #FF0000 !important; + border-color: #FF0000; +} + +div.cbi-section-remove input { + border-bottom: none; +} + +textarea { + margin-left: -1px; + margin-bottom: 0.5em; +} + +form > div > input[type=submit], +form > div > input[type=reset] { + float: right; + margin-left: 0.5em; +} + +table td, +table th { + color: #000; +} + +table.smalltext { + background: #f5f5f5; + color: #000; + border: 1px solid #666; + font-size: 90%; + width: 80%; + margin-left: auto; + margin-right: auto; + border-collapse: collapse; +} + +table.smalltext tr:hover td { + background-color: #bbddee; + color: #000; +} + +table.smalltext tr th { + padding: 0 0.25em; + border-left: 1px dotted #666; + text-align: left; +} + +table.smalltext tr td { + padding: 0.2em; + border-top: 1px dotted #666; + border-left: 1px dotted #666; +} + +table.cbi-section-table .cbi-rowstyle-1 { + background-color: #f1f6fa; + color: #000; +} + +table.cbi-section-table .cbi-rowstyle-1:hover, +table.cbi-section-table .cbi-rowstyle-2:hover { + background-color: #b2c8d4; + color: #000000; +} + +table.cbi-section-table .cbi-section-table-cell { + padding: 3px; + white-space: nowrap; +} + +.cbi-section .cbi-rowstyle-1 h3 { + background-color: #f1f6fa; + color: #555; +} + +.cbi-rowstyle-2 { + color: #000; +} + +div.cbi-value { + clear: left; + vertical-align: middle; + padding-left: 0.25em; + border-bottom: 1px dotted #bbb; +} + +div.cbi-value:hover { + background: #f8f8f8; + color: #000; +} + +.cbi-value-title { + float: left; + width: 40%; + line-height: 1.8em; +} + +div.cbi-value-field { + width: 58%; + margin-left: 40%; + padding: 0.25em 0; +} + +div.cbi-value-description { + font-size: 90%; + display: inline; +} + +div.cbi-section-create { + clear: left; + white-space: nowrap; + vertical-align: top; +} + +div.cbi-tblsection-create { + border-bottom: 1px dotted #bbb; +} + +div.cbi-section-create .cbi-button { + margin: 0.25em; +} + +input.cbi-section-create-name { + margin-right: -0.25em; + border: 1px solid #999; +} + +div.cbi-map-descr { + margin-bottom: 1em; +} + +div.cbi-optionals { + padding: 0.25em; + border-bottom: 1px dotted #bbb; +} + +div.cbi-section-remove { + float: right; +} + +.cbi-section-node { + clear: both; + border: 1px dotted #bbb; + border-bottom: none; + padding-bottom: 0; +} + +.cbi-section-node table div { + padding-bottom: 0; + border-bottom: none; +} + +.cbi-section-node div.cbi-section-table-row { + margin: 0.25em; +} + +table.cbi-section-table { + width: 100%; + font-size: 95%; +} + +table.cbi-section-table th, +table.cbi-section-table td { + text-align: center; +} + +tr.cbi-section-table-descr th { + font-weight: bold; + font-size: 90%; +} + +td.cbi-section-table-optionals { + text-align: left !important; + padding-top: 1em; +} + +.cbi-value-helpicon img { + vertical-align: bottom; +} + +div.cbi-error { + font-size: 95%; + font-weight: bold; + color: #f00; + background-color: #fff; +} + +td.cbi-value-error { + border-color: red; +} + +.cbi-value-error input, +.cbi-value-error select { + color: red; + background-color: #fcc; +} + +.cbi-section-error { + color: red; + background-color: white; + font-size: 95%; + border: 1px dotted red; + margin: 3px; + padding: 3px; +} + +.left { + text-align: left !important; +} + +.right { + text-align: right !important; +} + +.footer, .push { + height: 2em; +} + +.footer { + width: 99%; + padding: 0.3em; +} + + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -2em; +} + +.luci a:link, +.luci a:visited, +.exectime { + color: #666; + text-decoration: none; + font-size: 70%; +} + +.inline { + display: inline; +} + +.error500 { + white-space: normal; + border: 1px dotted #f00; + background-color: #fff; + color: #000; + padding: 0.5em; +} + +.uci-change-list { + font-family: monospace; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + text-decoration: none; + border: 1px solid #00FF00; + background-color: #CCFFCC; + display: block; + padding: 2px; +} + +.uci-change-list del, +.uci-change-legend-label del { + text-decoration: none; + border: 1px solid #FF0000; + background-color: #FFCCCC; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var, +.uci-change-legend-label var { + text-decoration: none; + border: 1px solid #CCCCCC; + background-color: #EEEEEE; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var ins, +.uci-change-list var del { + /*display: inline;*/ + border: none; + white-space: pre; + font-style: normal; + padding: 0px; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + width: 150px; + float: left; + font-size: 80%; +} + +.uci-change-legend-label>ins, +.uci-change-legend-label>del, +.uci-change-legend-label>var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + line-height: 6px; + border: none; +} + +} diff --git a/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/header.jpg b/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fde5a21254674636804e41c7e655640ed869184 GIT binary patch literal 316 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 literal 0 HcmV?d00001 diff --git a/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/mobile.css b/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/mobile.css new file mode 100644 index 0000000..37d77b4 --- /dev/null +++ b/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/mobile.css @@ -0,0 +1,59 @@ +#header{ + padding-left:0px !important; + padding-bottom:24px; +} + +.header_left{ + max-width: 100%; +} + +#mainlogo { + max-width: 90%; +} + +#content { + margin-left:0px !important; +} + +#maincontent{ + font-size:1.2em; + line-height:1.5em; +} + +input[type=submit], +.cbi-button, +.cbi-button-reset, +.cbi-button-save{ + display:inline !important; + float:none !important; + padding:10px 30px !important; + margin: 10px 10px 10px 0 !important; +} + +.cbi-input-text, +.cbi-input-select, +.cbi-input-user, +.cbi-input-password{ + display:block !important; + margin: 0 !important; + padding:0 !important; +} + +.cbi-value-field{ + margin:0 !important; + margin-bottom: 1em !important; + width:100% !important; +} + +.cbi-section legend{ + white-space:normal !important; +} + +.cbi-value-title{ + font-weight:bold; + float:none !important; +} + +img { + max-width:100%; +} diff --git a/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/smallscreen.css b/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/smallscreen.css new file mode 100644 index 0000000..660cd8d --- /dev/null +++ b/feeds/luci/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/smallscreen.css @@ -0,0 +1,3 @@ +.header_right { + display:none; +} diff --git a/feeds/luci/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/footer.htm b/feeds/luci/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/footer.htm new file mode 100644 index 0000000..4c38821 --- /dev/null +++ b/feeds/luci/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/footer.htm @@ -0,0 +1,30 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% + local ver = require "luci.version" + + local xtime + if exectime then + xtime = (string.format("%.2fs", os.clock() - exectime)) + end +%> + +
+
+
+ + + + + + + diff --git a/feeds/luci/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm b/feeds/luci/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm new file mode 100644 index 0000000..20a41be --- /dev/null +++ b/feeds/luci/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm @@ -0,0 +1,223 @@ +<%# + Copyright 2008 Steven Barth + Copyright 2008-2011 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<% + local fs = require "nixio.fs" + local sys = require "luci.sys" + local util = require "luci.util" + local http = require "luci.http" + local disp = require "luci.dispatcher" + local version = require "luci.version" + + local sysinfo = util.ubus("system", "info") or { } + local loadinfo = sysinfo.load or { 0, 0, 0 } + local boardinfo = util.ubus("system", "board") or { } + + local request = disp.context.path + local category = request[1] + local cattree = category and disp.node(category) + + local tree = disp.node() + local node = disp.context.dispatched + + local categories = disp.node_childs(tree) + + local c = tree + local i, r + + -- tag all nodes leading to this page + for i, r in ipairs(request) do + if c.nodes and c.nodes[r] then + c = c.nodes[r] + c._menu_selected = true + end + end + + local uci = require "luci.model.uci".cursor() + local ff = uci:get("freifunk", "community", "name") or "" + local co = "profile_" .. ff + local community = uci:get_first(co, "community", "name") or "Freifunk" + local hp = uci:get_first(co, "community", "homepage") or "http://www.freifunk.net" + local logo = "/luci-static/freifunk-generic/logo.jpg" + local banner = false + local show_comm = true + + local file + for file in fs.glob("/www/luci-static/resources/custom_logo.*") do + logo = string.gsub(file, "/www", "") + break + end + + for file in fs.glob("/www/luci-static/resources/custom_logo_only.*") do + logo = string.gsub(file, "/www", "") + show_comm = false + break + end + + for file in fs.glob("/www/luci-static/resources/custom_header.*") do + logo = string.gsub(file, "/www", "") + show_comm = false + banner = true + end +-%> + + + + + + + + + + + + +<% if node and node.css then %> +<% end -%> +<% if css then %> +<% end -%> + + + +<%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(tostring(node.title)) or '')) %> - LuCI + + + + +
+ + + +<%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> +
+ <%:No password set!%>
+ <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%> +
+<%- end -%> + + + + + +<%- + local function submenu(prefix, node) + local childs = disp.node_childs(node) + if #childs > 0 then +%> + +<% + end + end +%> + + +
+<% if category ~= "freifunk" and category ~= "splash" then %> + +<% end %> diff --git a/feeds/luci/themes/luci-theme-freifunk-generic/root/etc/uci-defaults/30_luci-theme-freifunk-generic b/feeds/luci/themes/luci-theme-freifunk-generic/root/etc/uci-defaults/30_luci-theme-freifunk-generic new file mode 100644 index 0000000..017e7f7 --- /dev/null +++ b/feeds/luci/themes/luci-theme-freifunk-generic/root/etc/uci-defaults/30_luci-theme-freifunk-generic @@ -0,0 +1,5 @@ +uci batch <<-EOF + set luci.themes.Freifunk_Generic=/luci-static/freifunk-generic + set luci.main.mediaurlbase=/luci-static/freifunk-generic + commit luci +EOF diff --git a/feeds/luci/themes/luci-theme-material/Makefile b/feeds/luci/themes/luci-theme-material/Makefile new file mode 100755 index 0000000..5bc16eb --- /dev/null +++ b/feeds/luci/themes/luci-theme-material/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Material Theme +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/css/style.css b/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/css/style.css new file mode 100755 index 0000000..545c5fb --- /dev/null +++ b/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/css/style.css @@ -0,0 +1,1549 @@ +/** + * Material is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI + * + * luci-theme-material + * Copyright 2015 Lutty Yang + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/LuttyYang/luci-theme-material/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * Licensed to the public under the Apache License 2.0 + */ + +/* + * Font generate by Icomoon + */ +@font-face { + font-family: 'icomoon'; + src: url('../fonts/font.eot'); + src: url('../fonts/font.eot') format('embedded-opentype'), + url('../fonts/font.ttf') format('truetype'), + url('../fonts/font.woff') format('woff'), + url('../fonts/font.svg') format('svg'); + font-weight: normal; + font-style: normal; +} + +.cbi-button-up, +.cbi-button-down, +.cbi-value-helpicon, +.showSide, +.main > .loading > span { + font-family: 'icomoon' !important; + speak: none; + font-style: normal !important; + font-weight: normal !important; + font-variant: normal !important; + text-transform: none !important; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: inherit; + font-weight: 400; + line-height: 1.1; + color: inherit; +} + +html { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + font-size: 0.8rem; + background-color: #EEE; +} + +html, body { + margin: 0px; + padding: 0px; + height: 100%; + font-family: Microsoft Yahei, WenQuanYi Micro Hei, sans-serif, "Helvetica Neue", Helvetica, Hiragino Sans GB; +} + +select { + padding: 0.36rem 0.8rem; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; +} + +select, +input { + background-color: transparent; + color: rgba(0, 0, 0, .87); + border: none; + border-bottom: 2px solid rgba(0, 0, 0, .26); + outline: 0; + padding: 0; + box-shadow: none; + border-radius: 0; + background-image: none; + height: 1.8rem; + font-size: 0.8rem; +} + +select:not([multiple="multiple"]):focus, +input:focus { + border-color: #0099CC; +} + +select[multiple="multiple"] { + height: auto; +} + +code { + color: #0099CC; +} + +abbr { + color: #005470; + text-decoration: underline; + cursor: help; +} + +hr { + margin: 1rem 0; + border-color: #EEE; + opacity: 0.1; +} + +header, .main { + width: 100%; + position: absolute; +} + +header { + height: 4rem; + box-shadow: 0 2px 5px rgba(0, 0, 0, .26); + transition: box-shadow .2s; + float: left; + position: fixed; + z-index: 101; +} + +footer { + text-align: right; + padding: 1rem; + color: #aaa; + font-size: 0.8rem; + text-shadow: 0px 0px 2px #BBB; +} + +footer > a { + color: #aaa; + text-decoration: none; +} + +.main { + top: 4rem; + bottom: 0rem; + position: relative; + height: 100%; + height: calc(100% - 4rem); +} + +.main > .loading { + position: fixed; + width: 100%; + height: 100%; + z-index: 1000; + display: block; + background-color: rgb(240, 240, 240); + top: 0; +} + +.main > .loading > span { + display: block; + text-align: center; + margin-top: 2rem; + color: #888; + font-size: 1.2rem; +} + +.main > .loading > span > .loading-img:before { + content: "\e603"; +} + +.main > .loading > span > .loading-img { + animation: anim-rotate 2s infinite linear; + margin-right: 0.2rem; + display: inline-block; +} + +@keyframes anim-rotate { + 0% { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +.main-left { + float: left; + top: 4rem; + width: 15%; + width: calc(0% + 15rem); + height: 100%; + height: calc(100% - 4rem); + background-color: white; + overflow-x: auto; + position: fixed; +} + +.main-right { + width: 85%; + width: calc(100% - 15rem); + float: right; + height: 100%; + background-color: #EEE; +} + +.main-right > #maincontent { + background-color: #EEE; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +header { + background: #0099CC; + color: white; +} + +header > .container { + margin-top: 0.5rem; + padding: 0.5rem 1rem 0 1rem; +} + +header > .container > .brand { + font-size: 1.4rem; + color: white; + text-decoration: none; + cursor: default; + vertical-align: text-bottom; +} + +.warning { + background-color: #FF7D60 !important; + color: #FFF; +} + +.errorbox, +.alert-message { + margin: 2rem 0 0 0; + padding: 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + min-width: inherit; + overflow: auto; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +.errorbox { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} + +.error { + color: red; +} + +#maincontent > .container > div:nth-child(1).alert-message.warning > a { + font: inherit; + overflow: visible; + text-transform: none; + display: inline-block; + margin-bottom: 0; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + min-width: 6rem; + padding: 0.5rem 1rem; + font-size: 0.9rem; + line-height: 1.42857143; + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; + margin-top: 2rem; + text-decoration: inherit; +} + +.main > .main-left > .nav { + margin-top: 0.5rem; +} + +.main > .main-left > .nav > li a { + color: #404040; + display: block; +} + +.main > .main-left > .nav > li:nth-last-child(1) { + margin-top: 2rem; + font-size: 1.2rem; +} + +.main > .main-left > .nav > li { + padding: 0.5rem 1rem; + cursor: pointer; +} + +.main > .main-left > .nav > .slide { + padding: 0; +} + +.main > .main-left > .nav > .slide > ul { + display: none; +} + +.main > .main-left > .nav > .slide > .menu { + display: block; + padding: 0.5rem 1rem; + text-decoration: none; + cursor: default; + font-size: 1.15rem; +} + +.main > .main-left > .nav > li:hover, +.main > .main-left > .nav > .slide > .menu:hover { + background: #D4D4D4; +} + +.main > .main-left > .nav > .slide:hover { + background: none; +} + +.main > .main-left > .nav > .slide > .slide-menu > li { + padding: 0.4rem 2rem; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active { + background-color: #0099CC; +} + +.main > .main-left > .nav > .slide > .slide-menu > li > a { + text-decoration: none; + white-space: nowrap; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active > a { + color: white; +} + +.main > .main-left > .nav > .slide > .slide-menu > li:hover { + background: #D4D4D4; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active:hover { + background-color: #0099CC; + cursor: hand; +} + +li { + list-style-type: none; +} + +#maincontent > .container { + margin: 0 2rem 1rem 2rem; +} + +h1 { + font-size: 2rem; + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +h2 { + margin: 2rem 0 0 0; + font-size: 1.8rem; + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +h3 { + margin: 2rem 0 0 0; + font-size: 1.4rem; + padding-bottom: 10px; +} + +h4 { + +} + +fieldset { + margin: 2rem 0 0 0; + padding: 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + + -webkit-overflow-scrolling: touch; +} + +.cbi-map-descr + fieldset { + margin-top: 1rem; +} + +fieldset > legend { + display: none !important; +} + +fieldset > fieldset { + margin: 0; + padding: 0; + border: none; + box-shadow: none; +} + +.panel-title { + width: 100%; + display: block; + line-height: 1; + color: #404040; + font-size: 1.4rem; + padding-bottom: 1rem; + border-bottom: 1px solid #eee; +} + +table { + border-spacing: 0; + border-collapse: collapse; + width: 100%; + border: 1px solid #eee; +} + +table > tbody > tr > td, table > tbody > tr > th, table > tfoot > tr > td, table > tfoot > tr > th, table > thead > tr > td, table > thead > tr > th { + padding: .5rem; + border-top: 1px solid #ddd; + white-space: nowrap; +} + +.cbi-section-table-cell { + text-align: center; +} + +.cbi-section-table-row { + text-align: center; +} + +fieldset > table > tbody > tr:nth-of-type(2n) { + background-color: #f9f9f9; +} + +/* fix progress bar */ +#swaptotal > div, +#swapfree > div, +#memfree > div, +#membuff > div, +#conns > div, +#memtotal > div { + width: 100% !important; + height: 1.2rem !important; +} + +#swaptotal > div > div, +#swapfree > div > div, +#memfree > div > div, +#membuff > div > div, +#conns > div > div, +#memtotal > div > div { + height: 100% !important; + background-color: #0099CC !important; +} + +/* fix multiple table */ + +table table { + border: none; +} + +.cbi-value-field table { + border: none; +} + +td > table > tbody > tr > td { + border: none; +} + +.cbi-value-field > table > tbody > tr > td { + border: none; +} + +/* button style */ + +.cbi-button { + -webkit-appearance: none; + text-transform: uppercase; + color: rgba(0, 0, 0, 0.87); + background-color: #F0F0F0; + transition: all 0.2s ease-in-out; + display: inline-block; + padding: 0 0.8rem; + border: none; + border-radius: 0.2rem; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + vertical-align: middle; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 0.8rem; + width: auto !important; +} + +.cbi-button:hover, +.cbi-button:focus, +.cbi-button:active { + color: rgba(0, 0, 0, 0.87); + outline: 0; + text-decoration: none; + color: rgba(0, 0, 0, 0.87); +} + +.cbi-button:hover, +.cbi-button:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +.cbi-button:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +.cbi-button:disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.60; + box-shadow: none; +} + +form.inline + form.inline, +.cbi-button + .cbi-button { + margin-left: 0.6rem; +} + +.cbi-button-reset, +.cbi-input-remove { + color: #fff !important; + background-color: #f0ad4e !important; + border-color: #eea236 !important; +} + +.cbi-input-find, +.cbi-input-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-find, +.cbi-input-reload, +.cbi-button-reload { + color: #fff !important; + background-color: #337ab7 !important; + border-color: #2e6da4 !important; +} + +.cbi-input-apply, +.cbi-button-apply, +.cbi-button-edit { + color: #fff !important; + background-color: #5bc0de !important; + border-color: #46b8da !important; +} + +.cbi-input-reset, +.cbi-section-remove > .cbi-button, +.cbi-button-remove { + color: #fff !important; + background-color: #d9534f !important; + border-color: #d43f3a !important; +} + +.a-to-btn { + text-decoration: none; +} + +/* table */ + +.tabs { + margin: 0 -2rem; + padding-left: 0.5rem; + background-color: #FFFFFF; +} + +.cbi-tabmenu > li, +.tabs > li { + display: inline-block; + padding: 0.6rem 0rem; +} + +.cbi-tabmenu > li > a, +.tabs > li > a { + text-decoration: none; + color: #404040; + padding: 0.5rem 0.8rem; +} + +.tabs > li[class~="active"], +.tabs > li:hover { + cursor: pointer; + border-bottom: 0.2rem solid #0099CC; + color: #0099CC; + margin-bottom: -0.18751rem; +} + +.tabs > li[class~="active"] > a { + color: #0099cc; +} + +.tabs > li:hover { + border-bottom: 0.18751rem solid #C9C9C9; +} + +.cbi-tabmenu { + border-top: 1px solid #D4D4D4; + border-left: 1px solid #D4D4D4; + border-right: 1px solid #D4D4D4; +} + +.cbi-tabmenu > li:hover { + background-color: #F1F1F1; +} + +.cbi-tabmenu > li[class~="cbi-tab"] { + background-color: white; +} + +.cbi-tabmenu { + background-color: #D4D4D4; +} + +.cbi-section-remove:nth-of-type(2n), +.cbi-section-node:nth-of-type(2n){ + background-color: #f9f9f9; +} + +.cbi-section-node-tabbed { + padding: 0; + margin-top: 0; + border-bottom: 1px solid #D4D4D4; + border-left: 1px solid #D4D4D4; + border-right: 1px solid #D4D4D4; +} + +.cbi-tabcontainer > .cbi-value:nth-of-type(2n) { + background-color: #f9f9f9; +} + +.cbi-value-field, +.cbi-value-description { + display: table-cell; + line-height: 1.25; +} + +.cbi-value-helpicon > img { + display: none; +} + +.cbi-value-helpicon:before { + content: "\f059"; +} + +.cbi-value-description { + font-size: small; + opacity: 0.5; + padding: 0.5rem 0 0 0; +} + +.cbi-value-title { + word-wrap: break-word; + padding-top: 0.6rem; + width: 23rem; + float: left; + text-align: right; + padding-right: 2rem; + display: table-cell; +} + +.cbi-value { + padding: 0.3rem 1rem; + display: inline-block; + width: 100%; +} + +.cbi-section-table-descr > .cbi-section-table-cell, +.cbi-section-table-titles > .cbi-section-table-cell { + border: none; +} + +.cbi-rowstyle-2 { + background-color: #eee; +} + +.cbi-rowstyle-2 .cbi-button-up, +.cbi-rowstyle-2 .cbi-button-down { + background-color: #FFF !important; +} + +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + width: auto !important; +} + +/* desc */ +.cbi-section-descr, +.cbi-map-descr { + padding: 0.5rem; + color: #999; + font-size: small; +} + +/* luci */ + +.hidden { + display: none +} + +.left { + text-align: left !important; +} + +.right { + text-align: right !important; +} + +.inline { + display: inline; +} + +.cbi-page-actions { + border-top: 1px solid #eee; + padding-top: 1rem; + text-align: right; +} + +/* input */ +.cbi-value input[type="password"], +.cbi-value input[type="text"] { + min-width: 15rem; +} + +/* select */ +.cbi-value-field .cbi-input-select { + min-width: 15rem; +} + +.ifacebadge { + display: inline-flex; + border-bottom: 1px solid #CCCCCC; + padding: 0.5rem 1rem; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +td > .ifacebadge { + background-color: #F0F0F0; + font-size: 0.9rem; +} + +.ifacebadge > img { + float: right; + margin: 0 0.3rem; +} + +/*textarea*/ + +.cbi-input-textarea { + width: 100%; + min-height: 14rem; + padding: 0.8rem; + font-size: 0.8rem; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + color: black; +} + +#syslog { + width: 100%; + min-height: 15rem; + padding: 1rem; + font-size: small; + color: #5F5F5F; + + margin-bottom: 20px; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + border: none; +} + +/* change */ + +.uci-change-list { + font-family: monospace; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + text-decoration: none; + border: 1px solid #00FF00; + background-color: #CCFFCC; + display: block; + padding: 2px; +} + +.uci-change-list del, +.uci-change-legend-label del { + text-decoration: none; + border: 1px solid #FF0000; + background-color: #FFCCCC; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var, +.uci-change-legend-label var { + text-decoration: none; + border: 1px solid #CCCCCC; + background-color: #EEEEEE; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var ins, +.uci-change-list var del { + border: none; + white-space: pre; + font-style: normal; + padding: 0px; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + width: 150px; + float: left; +} + +.uci-change-legend-label > ins, +.uci-change-legend-label > del, +.uci-change-legend-label > var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + line-height: 6px; + border: none; +} + +.uci-change-list var, +.uci-change-list del, +.uci-change-list ins { + padding: 0.5rem; +} + +/* other fix */ +#iwsvg, +#iwsvg2, +#bwsvg { + border: 1px solid #D4D4D4 !important; + border-top: none !important; +} + +.ifacebox { + border: 1px solid #999; + background-color: #f9f9f9; +} + +.cbi-image-button { + margin-left: 0.5rem; +} + +.zonebadge { + padding: 0.2rem 0.5rem; + display: inline-block; + cursor: pointer; +} + +.zonebadge > .ifacebadge { + padding: 0.2rem 1rem; + margin: 0.3rem; + border: 1px solid #6C6C6C; +} + +.zonebadge > input[type="text"] { + padding: 0.16rem 1rem; + min-width: 10rem; + margin-top: 0.3rem; +} + +.cbi-value-field .cbi-input-checkbox, +.cbi-value-field .cbi-input-radio { + margin-top: 0.5rem; + height: 1rem; +} + +.cbi-value-field > input + .cbi-value-description { + padding: 0; +} + +.cbi-value-field > ul > li { + display: flex; +} + +.cbi-value-field > ul > li > label { + margin-top: 0.5rem; +} + +.cbi-value-field > ul > li .ifacebadge { + background-color: #eee; + margin-left: 0.4rem; + margin-top: -0.5rem; +} + +.cbi-section-table-row > .cbi-value-field .cbi-input-select { + min-width: 7rem; +} + +.cbi-section-create > .cbi-button-add { + margin: 0.5rem; +} + +.cbi-section-remove { + padding: 0.5rem; +} + +div.cbi-value var, td.cbi-value-field var { + font-style: italic; + color: #0069D6; +} + +small { + font-size: 90%; + white-space: normal; + line-height: 1.42857143; +} + +.cbi-button-up, +.cbi-button-down { + display: inline-block; + min-width: 0; + padding: 0.2rem 0.3rem; + font-size: 1.2rem; +} + +.cbi-optionals { + padding: 1rem 1rem 0 1rem; + border-top: 1px solid #CCC; +} + +#diag-rc-output > pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 1.5rem; + -moz-border-radius: 3px; + white-space: pre-wrap; + word-wrap: break-word; + font-size: 1.4rem; + color: #404040; +} + +input[name="ping"], +input[name="traceroute"], +input[name="nslookup"] { + width: 80%; +} + +header > .container > .pull-right > * { + position: relative; + top: 0.45rem; + cursor: pointer; +} + +#xhr_poll_status > .label.success { + background-color: #14CE14; +} + +.label { + padding: 0.3rem 0.8rem; + font-size: 0.8rem; + font-weight: bold; + color: #ffffff !important; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + text-shadow: none; + text-decoration: none; +} + +.notice { + background-color: #5BC0DE; +} + +.showSide { + display: none; +} + +.darkMask { + width: 100%; + height: 100%; + position: fixed; + background-color: rgba(0, 0, 0, 0.56); + content: ""; + z-index: 99; + display: none; +} + +/* fix Main Login*/ +.node-main-login > .main > .main-left { + display: none; +} + +.node-main-login > .main > .main-right { + width: 100%; +} + +.node-main-login > .main fieldset { + padding: 0.5rem; + margin-bottom: 1rem; + display: inline; + background: none; + border: none; + box-shadow: none; + overflow: hidden; +} + +.node-main-login > .main .cbi-value-title { + width: 7rem; +} + +.node-main-login > .main #maincontent { + + text-align: center; +} + +.node-main-login > .main .container { + display: inline-block; + padding: 2rem 4rem; + margin-top: 2rem !important; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + text-align: left; +} + +.node-main-login > .main form > div:nth-last-child(1) { + float: right; +} + +.node-main-login > .main .cbi-value { + display: block; +} + +.node-main-login > .main .cbi-value > * { + display: inline-block !important; +} + +.node-main-login > .main .cbi-input-user, +.node-main-login > .main .cbi-input-password { + min-width: 15rem; +} + +.node-main-login footer { + bottom: 0; + position: absolute; + width: 100%; +} + +/* fix status overview */ + +.node-status-overview > .main fieldset:nth-child(4) td:nth-child(2) { + white-space: normal; +} + +/* fix status processes */ + +.node-status-processes > .main table tr td:nth-child(3) { + white-space: normal; +} + +.node-status-iptables > .main div > .cbi-map > form { + margin: 2rem 2rem 0 0; +} + +/* fix system reboot */ + +.node-system-reboot > .main > .main-right p, +.node-system-reboot > .main > .main-right h3 { + padding-left: 2rem; +} + +/* fix Services Network Shares*/ +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-title { + margin-bottom: 1rem; + width: auto; +} + +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-field { + display: list-item; +} + +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-description { + padding-top: 1rem; +} + +/* fix System Software*/ +.node-system-packages > .main table tr td:nth-child(1) { + width: auto !important; +} + +.node-system-packages > .main table tr td:nth-last-child(1) { + white-space: normal; + font-size: small; + color: #404040; +} + +.node-system-packages > .main .cbi-tabmenu > li > a, .tabs > li > a { + padding: 0.5rem 0.8rem; +} + +.node-system-packages > .main .cbi-value > pre { + background-color: #eee; + padding: 0.5rem; + overflow: auto; +} + +.cbi-tabmenu + .cbi-section { + margin-top: 0; +} + +/* fix network firewall*/ +.node-network-firewall > .main .cbi-section-table-row > .cbi-value-field .cbi-input-select { + min-width: 4rem; +} + +.node-status-iptables fieldset, +.node-system-packages fieldset, +.node-system-flashops fieldset { + margin-top: 0; +} + +.node-status-iptables .cbi-tabmenu, +.node-system-packages .cbi-tabmenu, +.node-system-flashops .cbi-tabmenu { + border: none; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +.node-system-flashops form.inline + form.inline { + margin-left: 0; +} + +#cbi-firewall-redirect table *, +#cbi-network-switch_vlan table *, +#cbi-firewall-zone table * { + font-size: small; +} + +#cbi-firewall-redirect table input[type="text"], +#cbi-network-switch_vlan table input[type="text"], +#cbi-firewall-zone table input[type="text"] { + width: 5rem; +} + +#cbi-firewall-redirect table select, +#cbi-network-switch_vlan table select, +#cbi-firewall-zone table select { + min-width: 3.5rem; +} + +/* language fix */ +body.lang_pl.node-main-login .cbi-value-title { + width: 12rem; +} + +@media screen and (max-width: 1600px) { + .main-left { + width: calc(0% + 13rem); + } + + .main-right { + width: calc(100% - 13rem); + } + + .cbi-button { + padding: 0.3rem 0.6rem; + font-size: 0.8rem; + } + + header > .container > .pull-right > * { + top: 0.35rem; + } + + .label { + padding: 0.2rem 0.6rem; + } + + .cbi-value-title { + width: 15rem; + padding-right: 0.6rem; + } + + fieldset { + padding: 1rem; + } + + .cbi-input-textarea { + font-size: small; + } + + .node-status-iptables > .main fieldset li > a { + padding: 0.3rem 0.6rem; + } +} + +@media screen and (max-width: 1280px) { + header { + height: 3.5rem; + } + + header > .container { + margin-top: 0.25rem; + } + + .main { + top: 3.5rem; + height: calc(100% - 3.5rem); + } + + .main-left { + width: calc(0% + 13rem); + top: 3.5rem; + height: calc(100% - 3.5rem); + } + + .main-right { + width: calc(100% - 13rem); + } + + .cbi-tabmenu > li > a, .tabs > li > a { + padding: 0.2rem 0.5rem; + } + + .panel-title { + font-size: 1.1rem; + padding-bottom: 1rem; + } + + table { + font-size: 0.7rem !important; + width: 100% !important; + } + + .main > .main-left > .nav > li, + .main > .main-left > .nav > li a, + .main > .main-left > .nav > .slide > .menu { + font-size: 0.9rem; + } + + .main > .main-left > .nav > .slide > .slide-menu > li > a { + font-size: 0.7rem; + } +} + +@media screen and (max-width: 992px) { + .main-left { + width: 0; + position: fixed; + z-index: 100; + } + + .main-right { + width: 100%; + } + + .showSide { + padding: 0.1rem; + margin-right: 0.5rem; + display: inline-block; + } + + .showSide:before { + content: "\e20e"; + font-size: 1.7rem; + } + + .node-main-login .showSide { + display: none !important; + } + + .cbi-value-title { + width: 9rem; + padding-right: 1rem; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div * { + width: 100% !important; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div input[type="text"] { + margin: 3rem 0 0 0 !important; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div:nth-child(4) input[type="text"] { + margin: 0 !important; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div select, + .node-network-diagnostics > .main .cbi-map fieldset > div input[type="button"] { + margin: 1rem 0 0 0; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div { + width: 100% !important; + } + + #diag-rc-output > pre { + font-size: 1rem; + } + + .node-main-login > .main .cbi-value-title { + text-align: left; + } +} + +@media screen and (max-width: 480px) { + body { + font-size: 1rem; + } + + fieldset { + padding: 1rem; + margin: 1rem 0 0 0; + } + + .tabs { + margin: 0 -1rem; + } + + #maincontent > .container { + margin: 0 1rem 1.5rem 1rem; + } + + .main > .main-left > .nav > .slide > .menu { + font-size: 1.3rem; + } + + .main > .main-left > .nav > .slide > .slide-menu > li > a { + font-size: 1.1rem; + } + + .cbi-value-title { + width: 100%; + min-width: 0rem !important; + display: block; + margin-top: 1rem; + margin-bottom: 0.5rem; + text-align: left; + } + + .cbi-value-field, .cbi-value-description { + width: 100%; + } + + .cbi-value > .cbi-value-field { + display: inline-block; + } + + .cbi-tabmenu > li, .tabs > li { + padding: 0.6rem 0rem; + } + + .cbi-tabmenu > li > a, .tabs > li > a { + padding: 0.2rem 0.3rem; + font-size: 0.9rem; + } + + .cbi-page-actions > div > input { + display: none; + } + + .node-main-login > .main .container { + padding: 0.5rem 1rem 2rem 1rem; + } + + .node-main-login > .main .cbi-value { + padding: 0; + } + + .node-main-login > .main form > div:nth-last-child(1) { + margin-top: 2rem; + } + + .node-main-login > .main .cbi-value-title { + width: 100% !important; + font-size: 1.2rem; + } + + .node-main-login > .main fieldset { + margin: 0; + padding: 0.5rem; + } + + h2 { + font-size: 2rem; + } + + .tabs > li > a { + font-size: 0.9rem; + } + + select, + input { + font-size: 0.9rem; + } + + .mobile-hide { + display: none; + } + + .panel-title { + font-size: 1.4rem; + padding-bottom: 1rem; + } + + .node-system-packages > .main .cbi-value.cbi-value-last > div { + width: 100% !important; + } + + .node-system-packages > .main .cbi-value .cbi-value-field input { + width: 100%; + } + + .node-status-iptables > .main div > .cbi-map > form { + position: static !important; + margin: 0 0 2rem 0; + padding: 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + -webkit-overflow-scrolling: touch; + } + + .node-status-iptables > .main div > .cbi-map > form input[type="submit"] { + width: 100% !important; + margin: 0; + } + + .node-status-iptables > .main div > .cbi-map > form input[type="submit"] + input[type="submit"] { + margin-top: 1rem; + } +} + +@media screen and (min-width: 992px) { + .cbi-value input[type="password"], + .cbi-value input[type="text"] { + min-width: 20rem; + } + + .cbi-value-field .cbi-input-select { + min-width: 20rem; + } +} + +@media screen and (min-width: 1280px) { + .cbi-value input[type="password"], + .cbi-value input[type="text"] { + min-width: 22rem; + } + + .cbi-value-field .cbi-input-select { + min-width: 22rem; + } +} + +@media screen and (min-width: 1600px) { + .cbi-value input[type="password"], + .cbi-value input[type="text"] { + min-width: 25rem; + } + + .cbi-value-field .cbi-input-select { + min-width: 25rem; + } +} \ No newline at end of file diff --git a/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/favicon.ico b/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..b407d18455773a185059628e632e60c06d6eb858 GIT binary patch literal 2462 zcmcJR&yEaH6o*e6F|iOUG9fZOLP&@Rv5;U2&*0w!;0>@EGb?OJyuet^Lm<@5WC)%> zkg%GqrA0^izRtZ-om6$ws{JP4+;h*l=U2CGb=OQpkDs}@;CDYB?~d3X5yyd4oCfnl zQEO2_{uO*pd}Hi_UInNEw%|dE&oM3}4l_=IeJ4P#cTj-Wx)0ajZQ?p(S9uM+zd!+R z;6|ck+y`BBl4j4l?(e>39j4{~8n1hh&!;5zKDx>?*ZVTOhx+rKXD`V97nvAJBYkDKK6(zC8zOb&vd$Aubw;!E%;jrG`CeXYHE z=rxJ-*noU4#^$Cay}a-2Z#-@P|G9s^3nko27HrO^a0Qz7YtEW$Tsx_D(r^bpz%#fCM-#^8thvUu|04Hz3ZB4A*hmvOF=_Uh3l-%EGlBRqt87^TcB!2LW2|K51tM-tY}S#!-Qm>ahj$|IU(b`hS!7WmH3|G(t-zctsm zwo%LJk~7t>=v9Lu#>!e5Gf}NnqiiyV!O~(3E&xaWo8#PG*^VF8qxilw8$V<3F#iYk Cvy_7X literal 0 HcmV?d00001 diff --git a/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot b/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot new file mode 100644 index 0000000000000000000000000000000000000000..9e6ffc9b826cb39a58e56359d6b8b922a4b07364 GIT binary patch literal 1912 zcmah~Ur1Y582`?_x%Vc~T>r!*OpT4P8o`m;m_K$==`c84Z6{8{+A(HKZlhvuY>cgr zKFA)%(1*FfM*FnUZZIZ{J&ZBvpfZF#Y)@lIVSRG2hwi1Y4#u`F`<;8QXe6-ja?bgE zzwN>ij! zo>pmzGE@TNr8Jlltw75)0Xj=z>Nm6}M}y=6>u7^S>VN6wGm(a7S2vh%P-e4*%<|74 z-T45bcKGFdW@Q;|Bm8Z&_WaWN)fd`ZeusaHNO&->WpYaP$#+CHu8YruP`(wvhyN-3 z)ANP$nqL?8;r{@?cd3}o2=nYs_)p+_3z@ZLe9%0RR1ZI(XA0Ww7af1Ye-<&`S}v}X zF;AHMCGRIuyn~rYh<#h&Z+ypW*>5z!99(zI7^Yoq=ZPL)7I!PVbY4V3=V9`>F2E}z z8jskHKC=}KRXf?}74Xf-hKS{56ga3mP!HbyReXH8^0ZRngTXngI9B<^|Cj$y|Mga> z;R}pA9?uwniV?%;hGTu$Jc)CL^hp0d9A5GarZvNJ<6ufi3Gpco?d=T-GZmvH1`UH| zm}{8N!4f`UZ>U1NTNno5ddx?}-q;a0gdKdb1FJ*sPETj7DTdm^s|}H!LSzj^@e}6Xo3K zXf!%Jyy+jD4Tn>yMB=%*RO-r=RBGa)o-oe4%#d}+m|4=Q~$QQ44QKuG~z>i4Xv1q8Lj|COk&su!m zB#R{CF*mpnCZx!x7-pM@8!0(V$8jZ+b@ar1M!vd&d^FFaIShFeNRsTjU4j|Sd#3{Z zXChnUcGm@);*d_c-5qUSPhEZ6>5dLdQtxVZJDg384u_&VOeQt$##&BG!nEAl4Grj% zf?bkj$zHI_k|f*NMx?LL=UZ2u=WI$ybv3ANugm3X>D=4hK9vL(>`jZV6X?ab{kvf)^jN}pSC8R2xdumC)3 zVG%fPVH@zOg(aM_9t+FhFId=#{kw^X%;o^2qQ}GnaNfcq@UVq#z&9-{;jj-_SO!03 zVJAiDPgt_+pY=D^L-I_h!b%DZS?d0}MTT%Y6XQicBm D*A6pu literal 0 HcmV?d00001 diff --git a/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.svg b/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.svg new file mode 100644 index 0000000..d38d057 --- /dev/null +++ b/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.svg @@ -0,0 +1,16 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + \ No newline at end of file diff --git a/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf b/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..84669323e9ddfdca80c91416b6d4fe31ea1829ab GIT binary patch literal 1748 zcmah}U1%d!6h3n&Gn1cY`jbCwn>0i)RYHn=Nd(_}VjX(rt? z-ECzbiVq^~gR7wIJ}Ik$SP&mXgcU4O@Ijw^C=2dW1t0Wf!4*VZ<9BDKw5tWraPR%j zch0@%%sF?41R`?L28k4Z?)j66)(&?+m@hHriq*pM5AWT1he+s#-Y6GVma(=$zlqge zURuBMOt<$}=(mX2y^2;SDaD815ZSn2x&lJ^TKpFJN6=4Hs*Sav&i0^x2YqmLYKX+Z zh4)?i>i(NQi4QI{A2plC?(n|zF-~ay82lsnd+=JP)cPs*9gSyfz$B1>-K|G#j3{&3 za6R<@9}b5+fwX3MZ5)CURiZq_(cRrqHrq5-65u1iXN>y@0f&$Yu-(xnaWfkO;Qq)* z#NF5yH`q4b*n#elr`Ok;YENPI@o7V(M{qI++s^0z-kX`(%jfy~2$ZLw_^~)dT}1uS z0rN>EGwI<(fDgaVtH^j5jW5RI*{t6`F;QxqJJ%>pOeB+IW1GQ|xmYZh%VeIK&*d&( z&gJGW%*>3B-$2WWnmaZ^=Q=5cP!W|W1*=Ev4Ne;?! z)Dy)zd{P0UUVRb1o7d6YhB`8mB)e{xAja}mPdI)uu{C9PpS39tsmJ39b@_d+maY?_ zkmb_i?(jIA?QIT+qTJ7BHSPLZNy|dC(%N+m=)h}3M^?w~_ggCg@Q$N?gdbxG{B zx-Tq&<|jJo3a&GkgUE(rO)7n2#T7^aXXe0w=PWD&r!8y)UbV1p!rv)lfjj9+m((_t< zWuc~rPsQT+HZ`i#3LId-Ij1N_@nd%#OHOO$)ulomK{X`0N=sCr`mvsqHN6ooYr0l1 zG_+E9emy)@ter=0F`6`DHxRvyV{{{<0yVIfz|GS-<|*R^&YLfQ9MQz1E%`702g#=) A_5c6? literal 0 HcmV?d00001 diff --git a/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff b/feeds/luci/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff new file mode 100644 index 0000000000000000000000000000000000000000..00cf84ea037c9748eba8fced0acff7dd29c12b2f GIT binary patch literal 1824 zcmah~U1%d!6h3z*Gn1dq^e2DXHffq}n?fO*P4m+=ZK*U=>UMvqZE#n_rpav5(j>cS zx@~12iVq^~gR7vpPs*;oSP-8?SivF%AM{D2EZCG7&Rrx~vs#LD8 z6G>0NAK>b*2>Z*`Jo2P*_+G9;iM>+Jt)s5=Jp7=pDwQg^vIY+G*{fXdJZt;odUXZ8 zDo8Q&L?BVT%Wji|-tGur!++fv+0Qh@Y&`XZu+|ff4#$ZeUJ-X2yEHCB!7-gTOi&;6 zDnMO`aoh#Vv%1Jayytdm1tWk99y$)y!#92uA6{uZZZr@haQ1(2tnt17cmHqxn;lZi z$L30U;t9iuVRnmN#h?YE)H%Ji~}l4#fh3$L$@8 zB@^+8(AyRp6H=J9PPd>@Tz*hhgR$y%{W5Pf*FI~Y9^ z+n%yI&s!9m)a`NwI=vppsm{}ZfSGd2+3vF0+gfclML9^PHEnIZprs*NVSP;l`k-u; zWLdJ7t+FJ^R<;=%9Q64%RQoxL5>}lps>|ziI$L`}{T`#RqrJ^xmt|E|ogPm| zCrxYtUNy0VFSW^2&zRUw zae99-UoBUw6a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("

+ +Main]] + for _, test in { + { "Get", "test_main.lua", {ab = "cd", ef = "gh"} }, + { "Cookies", "test_cookies.lua", }, + { "FileSystem", "test_fs.lua", }, + { "Libraries", "test_lib.lua", }, + { "Session", "test_session.lua", }, + { "Variables", "test_variables.lp", }, + } do + put (string.format (' · %s', + mkurlpath (test[2], test[3]), test[1])) + end + put [[ +]] +end) diff --git a/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/overview.lp b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/overview.lp new file mode 100644 index 0000000..4d17002 --- /dev/null +++ b/feeds/luci/libs/luci-lib-nixio/axTLS/www/lua/overview.lp @@ -0,0 +1,64 @@ + + +CGILua installation overview + + +